diff --git a/devops/icons/index.js b/devops/icons/index.js index 0e35e7815c..7829a4d89e 100644 --- a/devops/icons/index.js +++ b/devops/icons/index.js @@ -124,16 +124,14 @@ const collectDiskIcons = async (icons) => { iconPaths.forEach((path) => { const rawData = readFileSync(path); const svg = rawData.toString(); - const pattern = /\/([^/]+)\.svg$/; + const parsed = pathModule.parse(path); - const match = path.match(pattern); - - if (!match) { - console.log('No match found.'); + if (!parsed) { + console.log('No match found for: ', path); return; } - const SVGFileName = match[1]; + const SVGFileName = parsed.name; const iconFileName = SVGFileName.replace('.svg', ''); const iconName = iconFileName; diff --git a/devops/json-schema-generator/index.js b/devops/json-schema-generator/index.js new file mode 100644 index 0000000000..b99703317a --- /dev/null +++ b/devops/json-schema-generator/index.js @@ -0,0 +1,22 @@ +import { writeFileSync } from 'fs'; +import { createImportMap } from '../importmap/index.js'; + +const tsPath = './src/json-schema/all-packages.ts'; + +const importmap = createImportMap({ + rootDir: './src', + replaceModuleExtensions: true, +}); + +const paths = Object.keys(importmap.imports); + +const content = ` +${ + paths.map(path => `import '${path}';`).join('\n') +} +`; + +//const config = await resolveConfig('./.prettierrc.json'); +//const formattedContent = await format(content, { ...config, parser: 'json' }); + +writeFileSync(tsPath, content); diff --git a/devops/openapi-ts/openapi-ts.config.js b/devops/openapi-ts/openapi-ts.config.js index de7595c6a0..012b35b47c 100644 --- a/devops/openapi-ts/openapi-ts.config.js +++ b/devops/openapi-ts/openapi-ts.config.js @@ -2,7 +2,7 @@ import { defineConfig } from '@hey-api/openapi-ts'; export default defineConfig({ client: 'fetch', - input: 'https://raw.githubusercontent.com/umbraco/Umbraco-CMS/v14/dev/src/Umbraco.Cms.Api.Management/OpenApi.json', + input: 'https://raw.githubusercontent.com/umbraco/Umbraco-CMS/v15/dev/src/Umbraco.Cms.Api.Management/OpenApi.json', output: { path: 'src/external/backend-api/src', format: 'prettier', diff --git a/examples/block-custom-view/block-custom-view.ts b/examples/block-custom-view/block-custom-view.ts index e564f537a6..78de43087d 100644 --- a/examples/block-custom-view/block-custom-view.ts +++ b/examples/block-custom-view/block-custom-view.ts @@ -1,7 +1,8 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { html, customElement, LitElement, property, css } from '@umbraco-cms/backoffice/external/lit'; import { UmbElementMixin } from '@umbraco-cms/backoffice/element-api'; -import type { UmbBlockDataType, UmbBlockEditorCustomViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbBlockDataType } from '@umbraco-cms/backoffice/block'; +import type { UmbBlockEditorCustomViewElement } from '@umbraco-cms/backoffice/block-custom-view'; // eslint-disable-next-line local-rules/enforce-umb-prefix-on-element-name @customElement('example-block-custom-view') diff --git a/examples/block-custom-view/index.ts b/examples/block-custom-view/index.ts index da81e169ac..9bf95dc267 100644 --- a/examples/block-custom-view/index.ts +++ b/examples/block-custom-view/index.ts @@ -1,6 +1,4 @@ -import type { ManifestBlockEditorCustomView } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'blockEditorCustomView', alias: 'Umb.blockEditorCustomView.TestView', diff --git a/examples/entity-content-type-condition/index.ts b/examples/entity-content-type-condition/index.ts index 4d0972cc7f..ac4a90f48a 100644 --- a/examples/entity-content-type-condition/index.ts +++ b/examples/entity-content-type-condition/index.ts @@ -1,6 +1,4 @@ -import type { ManifestWorkspaceView } from '@umbraco-cms/backoffice/extension-registry'; - -const workspace: ManifestWorkspaceView = { +const workspace: UmbExtensionManifest = { type: 'workspaceView', alias: 'Example.WorkspaceView.EntityContentTypeCondition', name: 'Example Workspace View With Entity Content Type Condition', diff --git a/examples/entity-content-type-condition/workspace-view.element.ts b/examples/entity-content-type-condition/workspace-view.element.ts index cd6a518e36..b4390f0f62 100644 --- a/examples/entity-content-type-condition/workspace-view.element.ts +++ b/examples/entity-content-type-condition/workspace-view.element.ts @@ -2,7 +2,7 @@ import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-example-entity-content-type-condition') -export class UmbWorkspaceViewElement extends UmbLitElement { +export class UmbWorkspaceExampleViewElement extends UmbLitElement { override render() { return html`

This is a conditional element that is only shown in workspaces based on it's entities content type. @@ -10,10 +10,10 @@ export class UmbWorkspaceViewElement extends UmbLitElement { } } -export default UmbWorkspaceViewElement; +export default UmbWorkspaceExampleViewElement; declare global { interface HTMLElementTagNameMap { - 'umb-example-entity-content-type-condition': UmbWorkspaceViewElement; + 'umb-example-entity-content-type-condition': UmbWorkspaceExampleViewElement; } } diff --git a/examples/icons/index.ts b/examples/icons/index.ts index b53fa46a80..b85f8cb006 100644 --- a/examples/icons/index.ts +++ b/examples/icons/index.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'icons', name: 'Example Dataset Dashboard', diff --git a/examples/workspace-context-counter/index.ts b/examples/workspace-context-counter/index.ts index 39a9deda45..2bd252893b 100644 --- a/examples/workspace-context-counter/index.ts +++ b/examples/workspace-context-counter/index.ts @@ -1,11 +1,9 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'workspaceContext', name: 'Example Counter Workspace Context', alias: 'example.workspaceCounter.counter', - js: () => import('./counter-workspace-context.js'), + api: () => import('./counter-workspace-context.js'), conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', diff --git a/package-lock.json b/package-lock.json index 53198ef67d..967d67dd27 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@umbraco-cms/backoffice", - "version": "14.3.0-rc", + "version": "15.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@umbraco-cms/backoffice", - "version": "14.3.0-rc", + "version": "15.0.0", "license": "MIT", "workspaces": [ "./src/packages/*" @@ -66,7 +66,7 @@ "eslint-plugin-wc": "^2.1.1", "glob": "^11.0.0", "globals": "^15.8.0", - "lucide-static": "^0.424.0", + "lucide-static": "^0.441.0", "madge": "^8.0.0", "msw": "^1.3.2", "playwright-msw": "^3.0.1", @@ -74,7 +74,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "remark-gfm": "^3.0.1", - "rollup": "^4.21.0", + "rollup": "^4.22.4", "rollup-plugin-esbuild": "^6.1.1", "rollup-plugin-import-css": "^3.5.0", "rollup-plugin-web-worker-loader": "^1.6.1", @@ -4807,9 +4807,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.0.tgz", - "integrity": "sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], @@ -4820,9 +4820,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.0.tgz", - "integrity": "sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], @@ -4833,9 +4833,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.0.tgz", - "integrity": "sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], @@ -4846,9 +4846,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.0.tgz", - "integrity": "sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], @@ -4859,9 +4859,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.0.tgz", - "integrity": "sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], @@ -4872,9 +4872,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.0.tgz", - "integrity": "sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], @@ -4885,9 +4885,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.0.tgz", - "integrity": "sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], @@ -4898,9 +4898,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.0.tgz", - "integrity": "sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], @@ -4911,9 +4911,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.0.tgz", - "integrity": "sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], @@ -4924,9 +4924,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.0.tgz", - "integrity": "sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], @@ -4937,9 +4937,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.0.tgz", - "integrity": "sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], @@ -4950,9 +4950,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.0.tgz", - "integrity": "sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], @@ -4963,9 +4963,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.0.tgz", - "integrity": "sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], @@ -4976,9 +4976,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.0.tgz", - "integrity": "sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], @@ -4989,9 +4989,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.0.tgz", - "integrity": "sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], @@ -5002,9 +5002,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.0.tgz", - "integrity": "sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], @@ -7807,10 +7807,22 @@ "resolved": "src/packages/documents", "link": true }, + "node_modules/@umbraco-backoffice/embedded-media": { + "resolved": "src/packages/embedded-media", + "link": true + }, + "node_modules/@umbraco-backoffice/extension-insights": { + "resolved": "src/packages/extension-insights", + "link": true + }, "node_modules/@umbraco-backoffice/health-check": { "resolved": "src/packages/health-check", "link": true }, + "node_modules/@umbraco-backoffice/help": { + "resolved": "src/packages/help", + "link": true + }, "node_modules/@umbraco-backoffice/language": { "resolved": "src/packages/language", "link": true @@ -16192,9 +16204,9 @@ } }, "node_modules/lucide-static": { - "version": "0.424.0", - "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.424.0.tgz", - "integrity": "sha512-KUsIoKeIZF/rc5dttI/bZmd3+zQ/V9YA/G/NsGALA3QWqVncuZsyJ+IrM+jI0BTHiARwVZfp7zOEhc7gqn5x7A==", + "version": "0.441.0", + "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.441.0.tgz", + "integrity": "sha512-1auXwSBDxvmt3pY1k9f2ypO+dATe4dUkiSxBfjSjFeaU7YKImxZaX6BMJfTnyF0yx1a8U6Zq5g6Fc9dtarwc9Q==", "dev": true }, "node_modules/lunr": { @@ -19822,9 +19834,9 @@ } }, "node_modules/rollup": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.0.tgz", - "integrity": "sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -19837,22 +19849,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.0", - "@rollup/rollup-android-arm64": "4.21.0", - "@rollup/rollup-darwin-arm64": "4.21.0", - "@rollup/rollup-darwin-x64": "4.21.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.0", - "@rollup/rollup-linux-arm-musleabihf": "4.21.0", - "@rollup/rollup-linux-arm64-gnu": "4.21.0", - "@rollup/rollup-linux-arm64-musl": "4.21.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.0", - "@rollup/rollup-linux-riscv64-gnu": "4.21.0", - "@rollup/rollup-linux-s390x-gnu": "4.21.0", - "@rollup/rollup-linux-x64-gnu": "4.21.0", - "@rollup/rollup-linux-x64-musl": "4.21.0", - "@rollup/rollup-win32-arm64-msvc": "4.21.0", - "@rollup/rollup-win32-ia32-msvc": "4.21.0", - "@rollup/rollup-win32-x64-msvc": "4.21.0", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, @@ -23075,9 +23087,18 @@ "src/packages/documents": { "name": "@umbraco-backoffice/document" }, + "src/packages/embedded-media": { + "name": "@umbraco-backoffice/embedded-media" + }, + "src/packages/extension-insights": { + "name": "@umbraco-backoffice/extension-insights" + }, "src/packages/health-check": { "name": "@umbraco-backoffice/health-check" }, + "src/packages/help": { + "name": "@umbraco-backoffice/help" + }, "src/packages/language": { "name": "@umbraco-backoffice/language" }, diff --git a/package.json b/package.json index 2ecdd3dc0c..ea5a5db032 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@umbraco-cms/backoffice", "license": "MIT", - "version": "14.3.0-rc", + "version": "15.0.0", "type": "module", "exports": { ".": null, @@ -10,6 +10,7 @@ "./context-api": "./dist-cms/libs/context-api/index.js", "./controller-api": "./dist-cms/libs/controller-api/index.js", "./element-api": "./dist-cms/libs/element-api/index.js", + "./embedded-media": "./dist-cms/packages/embedded-media/index.js", "./extension-api": "./dist-cms/libs/extension-api/index.js", "./formatting-api": "./dist-cms/libs/formatting-api/index.js", "./localization-api": "./dist-cms/libs/localization-api/index.js", @@ -17,6 +18,7 @@ "./action": "./dist-cms/packages/core/action/index.js", "./audit-log": "./dist-cms/packages/core/audit-log/index.js", "./auth": "./dist-cms/packages/core/auth/index.js", + "./block-custom-view": "./dist-cms/packages/block/block-custom-view/index.js", "./block-grid": "./dist-cms/packages/block/block-grid/index.js", "./block-list": "./dist-cms/packages/block/block-list/index.js", "./block-rte": "./dist-cms/packages/block/block-rte/index.js", @@ -41,6 +43,7 @@ "./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", + "./help": "./dist-cms/packages/help/index.js", "./icon": "./dist-cms/packages/core/icon-registry/index.js", "./id": "./dist-cms/packages/core/id/index.js", "./imaging": "./dist-cms/packages/media/imaging/index.js", @@ -91,6 +94,7 @@ "./tiny-mce": "./dist-cms/packages/tiny-mce/index.js", "./tree": "./dist-cms/packages/core/tree/index.js", "./ufm": "./dist-cms/packages/ufm/index.js", + "./user-change-password": "./dist-cms/packages/user/change-password/index.js", "./user-group": "./dist-cms/packages/user/user-group/index.js", "./user-permission": "./dist-cms/packages/user/user-permission/index.js", "./user": "./dist-cms/packages/user/user/index.js", @@ -158,8 +162,9 @@ "generate:server-api": "openapi-ts --file devops/openapi-ts/openapi-ts.config.js", "generate:icons": "node ./devops/icons/index.js", "generate:overrides": "node ./devops/tsc/index.js", - "generate:jsonschema:dist": "typescript-json-schema --required --include \"./src/packages/core/extension-registry/umbraco-package.ts\" --out dist-cms/umbraco-package-schema.json tsconfig.json UmbracoPackage", - "generate:jsonschema": "typescript-json-schema --required --include \"./src/packages/core/extension-registry/*.ts\"", + "generate:jsonschema:imports": "node ./devops/json-schema-generator/index.js", + "generate:jsonschema:dist": "typescript-json-schema --required --include \"./src/json-schema/umbraco-package-schema.ts\" --out dist-cms/umbraco-package-schema.json tsconfig.json UmbracoPackage", + "generate:jsonschema": "typescript-json-schema --required --include \"./src/json-schema/umbraco-package-schema.ts\"", "lint:errors": "npm run lint -- --quiet", "lint:fix": "npm run lint -- --fix", "lint": "eslint src", @@ -239,7 +244,7 @@ "eslint-plugin-wc": "^2.1.1", "glob": "^11.0.0", "globals": "^15.8.0", - "lucide-static": "^0.424.0", + "lucide-static": "^0.441.0", "madge": "^8.0.0", "msw": "^1.3.2", "playwright-msw": "^3.0.1", @@ -247,7 +252,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "remark-gfm": "^3.0.1", - "rollup": "^4.21.0", + "rollup": "^4.22.4", "rollup-plugin-esbuild": "^6.1.1", "rollup-plugin-import-css": "^3.5.0", "rollup-plugin-web-worker-loader": "^1.6.1", diff --git a/public-assets/App_Plugins/custom-bundle-package/index.js b/public-assets/App_Plugins/custom-bundle-package/index.js index 722c6f3878..79a68d028c 100644 --- a/public-assets/App_Plugins/custom-bundle-package/index.js +++ b/public-assets/App_Plugins/custom-bundle-package/index.js @@ -1,4 +1,4 @@ -export const manifests: Array = [ +export const manifests: Array = [ { type: 'section', alias: 'MyBundle.Section.Custom', diff --git a/src/apps/backoffice/backoffice.element.ts b/src/apps/backoffice/backoffice.element.ts index 144e8eda69..be9cc04a29 100644 --- a/src/apps/backoffice/backoffice.element.ts +++ b/src/apps/backoffice/backoffice.element.ts @@ -17,7 +17,10 @@ const CORE_PACKAGES = [ import('../../packages/data-type/umbraco-package.js'), import('../../packages/dictionary/umbraco-package.js'), import('../../packages/documents/umbraco-package.js'), + import('../../packages/embedded-media/umbraco-package.js'), + import('../../packages/extension-insights/umbraco-package.js'), import('../../packages/health-check/umbraco-package.js'), + import('../../packages/help/umbraco-package.js'), import('../../packages/language/umbraco-package.js'), import('../../packages/log-viewer/umbraco-package.js'), import('../../packages/markdown-editor/umbraco-package.js'), diff --git a/src/assets/lang/da-dk.ts b/src/assets/lang/da-dk.ts index a56efd4c07..f35a6596ed 100644 --- a/src/assets/lang/da-dk.ts +++ b/src/assets/lang/da-dk.ts @@ -357,6 +357,7 @@ export default { member: { createNewMember: 'Opret et nyt medlem', allMembers: 'Alle medlemmer', + kind: 'Slags', memberGroupNoProperties: 'Medlemgrupper har ingen yderligere egenskaber til redigering.', '2fa': 'Totrinsbekræftelse', duplicateMemberLogin: 'A member with this login already exists', @@ -364,6 +365,8 @@ export default { memberHasPassword: 'The member already has a password set', memberLockoutNotEnabled: 'Lockout is not enabled for this member', memberNotInGroup: "The member is not in group '%0%'", + memberKindDefault: 'Bruger', + memberKindApi: 'API Bruger', }, contentType: { copyFailed: 'Kopiering af indholdstypen fejlede', @@ -1832,6 +1835,9 @@ export default { administrators: 'Administrator', categoryField: 'Kategorifelt', createDate: 'Bruger oprettet', + createUserHeadline: (kind: string) => { + return kind === 'Api' ? 'Opret API bruger' : 'Opret bruger'; + }, changePassword: 'Skift dit kodeord', changePhoto: 'Skift billede', newPassword: 'Nyt kodeord', @@ -1858,6 +1864,7 @@ export default { inviteAnotherUser: 'Invitér anden bruger', inviteUserHelp: 'Invitér nye brugere til at give dem adgang til Umbraco. En invitation vil blive sendt\n via e-mail til brugeren med oplysninger om, hvordan man logger ind i Umbraco.\n ', + kind: 'Slags', language: 'Sprog', languageHelp: 'Indstil det sprog, du vil se i menuer og dialoger', lastLockoutDate: 'Senest låst ude', @@ -1953,6 +1960,8 @@ export default { sortNameDescending: 'Navn (Å-A)', sortCreateDateAscending: 'Nyeste', sortCreateDateDescending: 'Ældste', + userKindDefault: 'Bruger', + userKindApi: 'API Bruger', sortLastLoginDateDescending: 'Sidst logget ind', noUserGroupsAdded: 'Ingen brugere er blevet tilføjet', '2faDisableText': 'Hvis du ønsker at slå denne totrinsbekræftelse fra, så skal du nu indtaste koden fra din enhed:', diff --git a/src/assets/lang/en-us.ts b/src/assets/lang/en-us.ts index 175e8c78d8..b3da05cdf3 100644 --- a/src/assets/lang/en-us.ts +++ b/src/assets/lang/en-us.ts @@ -364,12 +364,15 @@ export default { createNewMember: 'Create a new member', allMembers: 'All Members', duplicateMemberLogin: 'A member with this login already exists', + kind: 'Kind', memberGroupNoProperties: 'Member groups have no additional properties for editing.', memberHasGroup: "The member is already in group '%0%'", memberHasPassword: 'The member already has a password set', memberLockoutNotEnabled: 'Lockout is not enabled for this member', memberNotInGroup: "The member is not in group '%0%'", '2fa': 'Two-Factor Authentication', + memberKindDefault: 'Member', + memberKindApi: 'API Member', }, contentType: { copyFailed: 'Failed to copy content type', @@ -1840,8 +1843,16 @@ export default { assignAccess: 'Assign access', administrators: 'Administrator', categoryField: 'Category field', - createDate: 'User created', - changePassword: 'Change your password', + createDate: 'Created', + createUserHeadline: (kind: string) => { + return kind === 'Api' ? 'Create API user' : 'Create user'; + }, + createUserDescription: (kind: string) => { + const defaultUserText = `Create a user to give them access to Umbraco. When a user is created a password will be generated that you can share with them.`; + const apiUserText = `Create an Api User to allow external services to authenticate with the Umbraco Management API.`; + return kind === 'Api' ? apiUserText : defaultUserText; + }, + changePassword: 'Change password', changePhoto: 'Change photo', configureMfa: 'Configure MFA', emailRequired: 'Required - enter an email address for this user', @@ -1850,6 +1861,7 @@ export default { ? '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'; }, + kind: 'Kind', newPassword: 'New password', newPasswordFormatLengthTip: 'Minimum %0% character(s) to go!', newPasswordFormatNonAlphaTip: 'There should be at least %0% special character(s) in there.', @@ -1936,7 +1948,7 @@ export default { startnodehelp: 'Limit the content tree to a specific start node', startnodes: 'Content start nodes', startnodeshelp: 'Limit the content tree to specific start nodes', - updateDate: 'User last updated', + updateDate: 'Updated', userCreated: 'has been created', userCreatedSuccessHelp: 'The new user has successfully been created. To log in to Umbraco use the\n password below.\n ', @@ -1983,6 +1995,8 @@ export default { sortCreateDateDescending: 'Newest', sortCreateDateAscending: 'Oldest', sortLastLoginDateDescending: 'Last login', + userKindDefault: 'User', + userKindApi: 'API User', noUserGroupsAdded: 'No user groups have been added', '2faDisableText': 'If you wish to disable this two-factor provider, then you must enter the code shown on your authentication device:', diff --git a/src/external/backend-api/src/services.gen.ts b/src/external/backend-api/src/services.gen.ts index ebf24b1f18..d198ad98da 100644 --- a/src/external/backend-api/src/services.gen.ts +++ b/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, 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, GetServerUpgradeCheckResponse, 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, GetServerUpgradeCheckResponse, 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, PostUserByIdClientCredentialsData, PostUserByIdClientCredentialsResponse, GetUserByIdClientCredentialsData, GetUserByIdClientCredentialsResponse, DeleteUserByIdClientCredentialsByClientIdData, DeleteUserByIdClientCredentialsByClientIdResponse, 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 { /** @@ -8122,6 +8122,75 @@ export class UserService { }); } + /** + * @param data The data for the request. + * @param data.id + * @param data.requestBody + * @returns string OK + * @throws ApiError + */ + public static postUserByIdClientCredentials(data: PostUserByIdClientCredentialsData): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/umbraco/management/api/v1/user/{id}/client-credentials', + path: { + id: data.id + }, + body: data.requestBody, + mediaType: 'application/json', + responseHeader: 'Umb-Notifications', + errors: { + 400: 'Bad Request', + 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.id + * @returns string OK + * @throws ApiError + */ + public static getUserByIdClientCredentials(data: GetUserByIdClientCredentialsData): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/user/{id}/client-credentials', + path: { + id: data.id + }, + 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.id + * @param data.clientId + * @returns string OK + * @throws ApiError + */ + public static deleteUserByIdClientCredentialsByClientId(data: DeleteUserByIdClientCredentialsByClientIdData): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/umbraco/management/api/v1/user/{id}/client-credentials/{clientId}', + path: { + id: data.id, + clientId: data.clientId + }, + responseHeader: 'Umb-Notifications', + errors: { + 400: 'Bad Request', + 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.id diff --git a/src/external/backend-api/src/types.gen.ts b/src/external/backend-api/src/types.gen.ts index 9971788f1c..b7dd5aa8e8 100644 --- a/src/external/backend-api/src/types.gen.ts +++ b/src/external/backend-api/src/types.gen.ts @@ -384,6 +384,11 @@ export type CreateTemplateRequestModel = { id?: (string) | null; }; +export type CreateUserClientCredentialsRequestModel = { + clientId: string; + clientSecret: string; +}; + export type CreateUserDataRequestModel = { group: string; identifier: string; @@ -413,6 +418,7 @@ export type CreateUserRequestModel = { name: string; userGroupIds: Array<(ReferenceByIdModel)>; id?: (string) | null; + kind: UserKindModel; }; export type CreateWebhookRequestModel = { @@ -606,7 +612,7 @@ export type DocumentBlueprintItemResponseModel = { }; export type DocumentBlueprintResponseModel = { - values: Array<(DocumentValueModel)>; + values: Array<(DocumentValueResponseModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; documentType: (DocumentTypeReferenceResponseModel); @@ -622,7 +628,7 @@ export type DocumentBlueprintTreeItemResponseModel = { }; export type DocumentCollectionResponseModel = { - values: Array<(DocumentValueModel)>; + values: Array<(DocumentValueResponseModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; creator?: (string) | null; @@ -678,7 +684,7 @@ export type DocumentReferenceResponseModel = { }; export type DocumentResponseModel = { - values: Array<(DocumentValueModel)>; + values: Array<(DocumentValueResponseModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; documentType: (DocumentTypeReferenceResponseModel); @@ -828,6 +834,14 @@ export type DocumentValueModel = { value?: unknown; }; +export type DocumentValueResponseModel = { + culture?: (string) | null; + segment?: (string) | null; + alias: string; + value?: unknown; + editorAlias: string; +}; + export type DocumentVariantItemResponseModel = { name: string; culture?: (string) | null; @@ -869,7 +883,7 @@ export type DocumentVersionItemResponseModel = { }; export type DocumentVersionResponseModel = { - values: Array<(DocumentValueModel)>; + values: Array<(DocumentValueResponseModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; documentType: (DocumentTypeReferenceResponseModel); @@ -1150,7 +1164,7 @@ export type ManifestResponseModel = { }; export type MediaCollectionResponseModel = { - values: Array<(MediaValueModel)>; + values: Array<(MediaValueResponseModel)>; variants: Array<(MediaVariantResponseModel)>; id: string; creator?: (string) | null; @@ -1189,7 +1203,7 @@ export type MediaReferenceResponseModel = { }; export type MediaResponseModel = { - values: Array<(MediaValueModel)>; + values: Array<(MediaValueResponseModel)>; variants: Array<(MediaVariantResponseModel)>; id: string; urls: Array<(MediaUrlInfoModel)>; @@ -1319,6 +1333,14 @@ export type MediaValueModel = { value?: unknown; }; +export type MediaValueResponseModel = { + culture?: (string) | null; + segment?: (string) | null; + alias: string; + value?: unknown; + editorAlias: string; +}; + export type MediaVariantRequestModel = { culture?: (string) | null; segment?: (string) | null; @@ -1354,10 +1376,16 @@ export type MemberItemResponseModel = { id: string; memberType: (MemberTypeReferenceResponseModel); variants: Array<(VariantItemResponseModel)>; + kind: MemberKindModel; }; +export enum MemberKindModel { + DEFAULT = 'Default', + API = 'Api' +} + export type MemberResponseModel = { - values: Array<(MemberValueModel)>; + values: Array<(MemberValueResponseModel)>; variants: Array<(MemberVariantResponseModel)>; id: string; email: string; @@ -1371,6 +1399,7 @@ export type MemberResponseModel = { lastLockoutDate?: (string) | null; lastPasswordChangeDate?: (string) | null; groups: Array<(string)>; + kind: MemberKindModel; }; export type MemberTypeCompositionModel = { @@ -1466,6 +1495,14 @@ export type MemberValueModel = { value?: unknown; }; +export type MemberValueResponseModel = { + culture?: (string) | null; + segment?: (string) | null; + alias: string; + value?: unknown; + editorAlias: string; +}; + export type MemberVariantRequestModel = { culture?: (string) | null; segment?: (string) | null; @@ -2693,8 +2730,14 @@ export type UserItemResponseModel = { id: string; name: string; avatarUrls: Array<(string)>; + kind: UserKindModel; }; +export enum UserKindModel { + DEFAULT = 'Default', + API = 'Api' +} + export enum UserOrderModel { USER_NAME = 'UserName', LANGUAGE = 'Language', @@ -2737,6 +2780,7 @@ export type UserResponseModel = { lastLockoutDate?: (string) | null; lastPasswordChangeDate?: (string) | null; isAdmin: boolean; + kind: UserKindModel; }; export type UserSettingsPresentationModel = { @@ -5080,6 +5124,26 @@ export type PostUserByIdChangePasswordData = { export type PostUserByIdChangePasswordResponse = (string); +export type PostUserByIdClientCredentialsData = { + id: string; + requestBody?: (CreateUserClientCredentialsRequestModel); +}; + +export type PostUserByIdClientCredentialsResponse = (string); + +export type GetUserByIdClientCredentialsData = { + id: string; +}; + +export type GetUserByIdClientCredentialsResponse = (Array<(string)>); + +export type DeleteUserByIdClientCredentialsByClientIdData = { + clientId: string; + id: string; +}; + +export type DeleteUserByIdClientCredentialsByClientIdResponse = (string); + export type PostUserByIdResetPasswordData = { id: string; }; diff --git a/src/json-schema/all-packages.ts b/src/json-schema/all-packages.ts new file mode 100644 index 0000000000..a98f102d1c --- /dev/null +++ b/src/json-schema/all-packages.ts @@ -0,0 +1,108 @@ +import '@umbraco-cms/backoffice/app'; +import '@umbraco-cms/backoffice/class-api'; +import '@umbraco-cms/backoffice/context-api'; +import '@umbraco-cms/backoffice/controller-api'; +import '@umbraco-cms/backoffice/element-api'; +import '@umbraco-cms/backoffice/extension-api'; +import '@umbraco-cms/backoffice/formatting-api'; +import '@umbraco-cms/backoffice/localization-api'; +import '@umbraco-cms/backoffice/observable-api'; +import '@umbraco-cms/backoffice/action'; +import '@umbraco-cms/backoffice/audit-log'; +import '@umbraco-cms/backoffice/auth'; +import '@umbraco-cms/backoffice/block-custom-view'; +import '@umbraco-cms/backoffice/block-grid'; +import '@umbraco-cms/backoffice/block-list'; +import '@umbraco-cms/backoffice/block-rte'; +import '@umbraco-cms/backoffice/block-type'; +import '@umbraco-cms/backoffice/block'; +import '@umbraco-cms/backoffice/code-editor'; +import '@umbraco-cms/backoffice/collection'; +import '@umbraco-cms/backoffice/components'; +import '@umbraco-cms/backoffice/content-type'; +import '@umbraco-cms/backoffice/content'; +import '@umbraco-cms/backoffice/culture'; +import '@umbraco-cms/backoffice/picker'; +import '@umbraco-cms/backoffice/current-user'; +import '@umbraco-cms/backoffice/data-type'; +import '@umbraco-cms/backoffice/debug'; +import '@umbraco-cms/backoffice/dictionary'; +import '@umbraco-cms/backoffice/document-blueprint'; +import '@umbraco-cms/backoffice/document-type'; +import '@umbraco-cms/backoffice/document'; +import '@umbraco-cms/backoffice/entity-action'; +import '@umbraco-cms/backoffice/entity-bulk-action'; +import '@umbraco-cms/backoffice/entity'; +import '@umbraco-cms/backoffice/event'; +import '@umbraco-cms/backoffice/extension-registry'; +import '@umbraco-cms/backoffice/help'; +import '@umbraco-cms/backoffice/icon'; +import '@umbraco-cms/backoffice/id'; +import '@umbraco-cms/backoffice/imaging'; +import '@umbraco-cms/backoffice/language'; +import '@umbraco-cms/backoffice/lit-element'; +import '@umbraco-cms/backoffice/localization'; +import '@umbraco-cms/backoffice/log-viewer'; +import '@umbraco-cms/backoffice/markdown-editor'; +import '@umbraco-cms/backoffice/media-type'; +import '@umbraco-cms/backoffice/media'; +import '@umbraco-cms/backoffice/member-group'; +import '@umbraco-cms/backoffice/member-type'; +import '@umbraco-cms/backoffice/member'; +import '@umbraco-cms/backoffice/menu'; +import '@umbraco-cms/backoffice/modal'; +import '@umbraco-cms/backoffice/multi-url-picker'; +import '@umbraco-cms/backoffice/notification'; +import '@umbraco-cms/backoffice/object-type'; +import '@umbraco-cms/backoffice/package'; +import '@umbraco-cms/backoffice/partial-view'; +import '@umbraco-cms/backoffice/picker-input'; +import '@umbraco-cms/backoffice/property-action'; +import '@umbraco-cms/backoffice/property-editor'; +import '@umbraco-cms/backoffice/property-type'; +import '@umbraco-cms/backoffice/property'; +import '@umbraco-cms/backoffice/recycle-bin'; +import '@umbraco-cms/backoffice/relation-type'; +import '@umbraco-cms/backoffice/relations'; +import '@umbraco-cms/backoffice/repository'; +import '@umbraco-cms/backoffice/resources'; +import '@umbraco-cms/backoffice/router'; +import '@umbraco-cms/backoffice/script'; +import '@umbraco-cms/backoffice/search'; +import '@umbraco-cms/backoffice/section'; +import '@umbraco-cms/backoffice/server-file-system'; +import '@umbraco-cms/backoffice/settings'; +import '@umbraco-cms/backoffice/sorter'; +import '@umbraco-cms/backoffice/static-file'; +import '@umbraco-cms/backoffice/store'; +import '@umbraco-cms/backoffice/style'; +import '@umbraco-cms/backoffice/stylesheet'; +import '@umbraco-cms/backoffice/sysinfo'; +import '@umbraco-cms/backoffice/tags'; +import '@umbraco-cms/backoffice/template'; +import '@umbraco-cms/backoffice/temporary-file'; +import '@umbraco-cms/backoffice/themes'; +import '@umbraco-cms/backoffice/tiny-mce'; +import '@umbraco-cms/backoffice/tree'; +import '@umbraco-cms/backoffice/ufm'; +import '@umbraco-cms/backoffice/user-group'; +import '@umbraco-cms/backoffice/user-permission'; +import '@umbraco-cms/backoffice/user'; +import '@umbraco-cms/backoffice/utils'; +import '@umbraco-cms/backoffice/validation'; +import '@umbraco-cms/backoffice/variant'; +import '@umbraco-cms/backoffice/webhook'; +import '@umbraco-cms/backoffice/workspace'; +import '@umbraco-cms/backoffice/external/backend-api'; +import '@umbraco-cms/backoffice/external/base64-js'; +import '@umbraco-cms/backoffice/external/diff'; +import '@umbraco-cms/backoffice/external/dompurify'; +import '@umbraco-cms/backoffice/external/lit'; +import '@umbraco-cms/backoffice/external/marked'; +import '@umbraco-cms/backoffice/external/monaco-editor'; +import '@umbraco-cms/backoffice/external/openid'; +import '@umbraco-cms/backoffice/external/router-slot'; +import '@umbraco-cms/backoffice/external/rxjs'; +import '@umbraco-cms/backoffice/external/tinymce'; +import '@umbraco-cms/backoffice/external/uui'; +import '@umbraco-cms/backoffice/external/uuid'; diff --git a/src/json-schema/tsconfig.json b/src/json-schema/tsconfig.json new file mode 100644 index 0000000000..d5c13e9caa --- /dev/null +++ b/src/json-schema/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "include": ["./*.ts", "./**/*.ts", "./**/*.json", "./**/*.js"], + "exclude": ["./**/*.test.ts", "./**/*.stories.ts", "tsconfig.json", "rollup.config.js"] + +} diff --git a/src/packages/core/extension-registry/umbraco-package.ts b/src/json-schema/umbraco-package-schema.ts similarity index 96% rename from src/packages/core/extension-registry/umbraco-package.ts rename to src/json-schema/umbraco-package-schema.ts index 3a05a2d7f0..9bd0fa2930 100644 --- a/src/packages/core/extension-registry/umbraco-package.ts +++ b/src/json-schema/umbraco-package-schema.ts @@ -1,4 +1,4 @@ -import type { ManifestTypes } from './models/index.js'; +import './all-packages.js'; /** * Umbraco package manifest JSON @@ -37,7 +37,7 @@ export interface UmbracoPackage { * @title An array of Umbraco package manifest types that will be installed * @required */ - extensions: ManifestTypes[]; + extensions: UmbExtensionManifest[]; /** * @title The importmap for the package diff --git a/src/libs/extension-api/initializers/extension-initializer-base.ts b/src/libs/extension-api/initializers/extension-initializer-base.ts index d79d971922..7911e1c8f7 100644 --- a/src/libs/extension-api/initializers/extension-initializer-base.ts +++ b/src/libs/extension-api/initializers/extension-initializer-base.ts @@ -3,7 +3,6 @@ import type { UmbExtensionRegistry } from '../registry/extension.registry.js'; import type { SpecificManifestTypeOrManifestBase } from '../types/map.types.js'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbElement } from '@umbraco-cms/backoffice/element-api'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { ReplaySubject } from '@umbraco-cms/backoffice/external/rxjs'; /** @@ -11,7 +10,7 @@ import { ReplaySubject } from '@umbraco-cms/backoffice/external/rxjs'; */ export abstract class UmbExtensionInitializerBase< Key extends string, - T extends ManifestBase = SpecificManifestTypeOrManifestBase, + T extends ManifestBase = SpecificManifestTypeOrManifestBase, > extends UmbControllerBase { protected host; protected extensionRegistry; diff --git a/src/libs/extension-api/models/extension-api.interface.ts b/src/libs/extension-api/models/extension-api.interface.ts new file mode 100644 index 0000000000..0183b99fe1 --- /dev/null +++ b/src/libs/extension-api/models/extension-api.interface.ts @@ -0,0 +1,9 @@ +import type { ManifestBase } from '../types/index.js'; +import type { UmbApi } from './api.interface.js'; + +/** + * Interface for APIs of a Extension. + */ +export interface UmbExtensionApi extends UmbApi { + manifest?: ManifestType; +} diff --git a/src/libs/extension-api/models/index.ts b/src/libs/extension-api/models/index.ts index bb52c4681d..45548d385c 100644 --- a/src/libs/extension-api/models/index.ts +++ b/src/libs/extension-api/models/index.ts @@ -1,2 +1,3 @@ export * from './entry-point.interface.js'; export * from './api.interface.js'; +export * from './extension-api.interface.js'; diff --git a/src/libs/extension-api/registry/extension.registry.test.ts b/src/libs/extension-api/registry/extension.registry.test.ts index 83ee09d37b..caed039f60 100644 --- a/src/libs/extension-api/registry/extension.registry.test.ts +++ b/src/libs/extension-api/registry/extension.registry.test.ts @@ -1,4 +1,11 @@ -import type { ManifestElementWithElementName, ManifestKind, ManifestBase } from '../types/index.js'; +import type { WorkspaceAliasConditionConfig } from '@umbraco-cms/backoffice/workspace'; +import type { + ManifestElementWithElementName, + ManifestKind, + ManifestBase, + ManifestWithDynamicConditions, + UmbConditionConfigBase, +} from '../types/index.js'; import { UmbExtensionRegistry } from './extension.registry.js'; import { expect } from '@open-wc/testing'; @@ -453,3 +460,224 @@ describe('UmbExtensionRegistry with exclusions', () => { expect(extensionRegistry.isRegistered('Umb.Test.Section.Late')).to.be.false; }); }); + +describe('Add Conditions', () => { + let extensionRegistry: UmbExtensionRegistry; + let manifests: Array; + + beforeEach(() => { + extensionRegistry = new UmbExtensionRegistry(); + manifests = [ + { + type: 'section', + name: 'test-section-1', + alias: 'Umb.Test.Section.1', + weight: 1, + conditions: [ + { + alias: 'Umb.Test.Condition.Invalid', + }, + ], + }, + { + type: 'section', + name: 'test-section-2', + alias: 'Umb.Test.Section.2', + weight: 200, + }, + ]; + + manifests.forEach((manifest) => extensionRegistry.register(manifest)); + + extensionRegistry.register({ + type: 'condition', + name: 'test-condition-invalid', + alias: 'Umb.Test.Condition.Invalid', + }); + }); + + it('should have the extensions registered', () => { + expect(extensionRegistry.isRegistered('Umb.Test.Section.1')).to.be.true; + expect(extensionRegistry.isRegistered('Umb.Test.Section.2')).to.be.true; + expect(extensionRegistry.isRegistered('Umb.Test.Condition.Invalid')).to.be.true; + expect(extensionRegistry.isRegistered('Umb.Test.Condition.Valid')).to.be.false; + }); + + it('allows an extension condition to be updated', async () => { + const ext = extensionRegistry.getByAlias('Umb.Test.Section.1') as ManifestWithDynamicConditions; + expect(ext.conditions?.length).to.equal(1); + + // Register new condition as if I was in my own entrypoint + extensionRegistry.register({ + type: 'condition', + name: 'test-condition-valid', + alias: 'Umb.Test.Condition.Valid', + }); + + // Add the new condition to the extension + const conditionToAdd: UmbConditionConfigBase = { + alias: 'Umb.Test.Condition.Valid', + }; + await extensionRegistry.appendCondition('Umb.Test.Section.1', conditionToAdd); + + // Check new condition is registered + expect(extensionRegistry.isRegistered('Umb.Test.Condition.Valid')).to.be.true; + + // Verify the extension now has two conditions and in correct order with aliases + const updatedExt = extensionRegistry.getByAlias('Umb.Test.Section.1') as ManifestWithDynamicConditions; + expect(updatedExt.conditions?.length).to.equal(2); + expect(updatedExt.conditions?.[0]?.alias).to.equal('Umb.Test.Condition.Invalid'); + expect(updatedExt.conditions?.[1]?.alias).to.equal('Umb.Test.Condition.Valid'); + + // Verify the other extension was not updated: + const otherExt = extensionRegistry.getByAlias('Umb.Test.Section.2') as ManifestWithDynamicConditions; + expect(otherExt.conditions).to.be.undefined; + + // Add a condition with a specific config to Section2 + const workspaceCondition: WorkspaceAliasConditionConfig = { + alias: 'Umb.Condition.WorkspaceAlias', + match: 'Umb.Workspace.Document', + }; + + await extensionRegistry.appendCondition('Umb.Test.Section.2', workspaceCondition); + + const updatedWorkspaceExt = extensionRegistry.getByAlias('Umb.Test.Section.2') as ManifestWithDynamicConditions; + expect(updatedWorkspaceExt.conditions?.length).to.equal(1); + expect(updatedWorkspaceExt.conditions?.[0]?.alias).to.equal('Umb.Condition.WorkspaceAlias'); + }); + + it('allows an extension to update with multiple conditions', async () => { + const ext = extensionRegistry.getByAlias('Umb.Test.Section.1') as ManifestWithDynamicConditions; + expect(ext.conditions?.length).to.equal(1); + + const conditions: Array = [ + { + alias: 'Umb.Test.Condition.Valid', + }, + { + alias: 'Umb.Condition.WorkspaceAlias', + match: 'Umb.Workspace.Document', + } as WorkspaceAliasConditionConfig, + ]; + + await extensionRegistry.appendConditions('Umb.Test.Section.1', conditions); + + const extUpdated = extensionRegistry.getByAlias('Umb.Test.Section.1') as ManifestWithDynamicConditions; + expect(extUpdated.conditions?.length).to.equal(3); + expect(extUpdated.conditions?.[0]?.alias).to.equal('Umb.Test.Condition.Invalid'); + expect(extUpdated.conditions?.[1]?.alias).to.equal('Umb.Test.Condition.Valid'); + expect(extUpdated.conditions?.[2]?.alias).to.equal('Umb.Condition.WorkspaceAlias'); + }); + + it('allows conditions to be prepended when an extension is loaded later on', async () => { + const conditions: Array = [ + { + alias: 'Umb.Test.Condition.Invalid', + }, + { + alias: 'Umb.Condition.WorkspaceAlias', + match: 'Umb.Workspace.Document', + } as WorkspaceAliasConditionConfig, + ]; + + // Prepend the conditions, but do not await this. + extensionRegistry.appendConditions('Late.Extension.To.Be.Loaded', conditions); + + // Make sure the extension is not registered YET + expect(extensionRegistry.isRegistered('Late.Extension.To.Be.Loaded')).to.be.false; + + // Register the extension LATE/after the conditions have been added + extensionRegistry.register({ + type: 'section', + name: 'Late Section Extension with one condition', + alias: 'Late.Extension.To.Be.Loaded', + weight: 200, + conditions: [ + { + alias: 'Umb.Test.Condition.Valid', + }, + ], + }); + + expect(extensionRegistry.isRegistered('Late.Extension.To.Be.Loaded')).to.be.true; + + const extUpdated = extensionRegistry.getByAlias('Late.Extension.To.Be.Loaded') as ManifestWithDynamicConditions; + + expect(extUpdated.conditions?.length).to.equal(3); + expect(extUpdated.conditions?.[0]?.alias).to.equal('Umb.Test.Condition.Valid'); + expect(extUpdated.conditions?.[1]?.alias).to.equal('Umb.Test.Condition.Invalid'); + expect(extUpdated.conditions?.[2]?.alias).to.equal('Umb.Condition.WorkspaceAlias'); + }); + + /** + * As of current state, it is by design without further reasons to why, but it is made so additional conditions are only added to a current or next time registered manifest. + * Meaning if it happens to be unregistered and re-registered it does not happen again. + * Unless the exact same appending of conditions happens again. [NL] + * + * This makes sense if extensions gets offloaded and re-registered, but the extension that registered additional conditions didn't get loaded/registered second time. Therefor they need to be re-registered for such to work. [NL] + */ + it('only append conditions to the next time the extension is registered', async () => { + const conditions: Array = [ + { + alias: 'Umb.Test.Condition.Invalid', + }, + { + alias: 'Umb.Condition.WorkspaceAlias', + match: 'Umb.Workspace.Document', + } as WorkspaceAliasConditionConfig, + ]; + + // Prepend the conditions, but do not await this. + extensionRegistry.appendConditions('Late.Extension.To.Be.Loaded', conditions); + + // Make sure the extension is not registered YET + expect(extensionRegistry.isRegistered('Late.Extension.To.Be.Loaded')).to.be.false; + + // Register the extension LATE/after the conditions have been added + extensionRegistry.register({ + type: 'section', + name: 'Late Section Extension with one condition', + alias: 'Late.Extension.To.Be.Loaded', + weight: 200, + conditions: [ + { + alias: 'Umb.Test.Condition.Valid', + }, + ], + }); + + expect(extensionRegistry.isRegistered('Late.Extension.To.Be.Loaded')).to.be.true; + + const extUpdateFirstTime = extensionRegistry.getByAlias( + 'Late.Extension.To.Be.Loaded', + ) as ManifestWithDynamicConditions; + expect(extUpdateFirstTime.conditions?.length).to.equal(3); + + extensionRegistry.unregister('Late.Extension.To.Be.Loaded'); + + // Make sure the extension is not registered YET + expect(extensionRegistry.isRegistered('Late.Extension.To.Be.Loaded')).to.be.false; + + // Register the extension LATE/after the conditions have been added + extensionRegistry.register({ + type: 'section', + name: 'Late Section Extension with one condition', + alias: 'Late.Extension.To.Be.Loaded', + weight: 200, + conditions: [ + { + alias: 'Umb.Test.Condition.Valid', + }, + ], + }); + + expect(extensionRegistry.isRegistered('Late.Extension.To.Be.Loaded')).to.be.true; + + const extUpdateSecondTime = extensionRegistry.getByAlias( + 'Late.Extension.To.Be.Loaded', + ) as ManifestWithDynamicConditions; + + expect(extUpdateSecondTime.conditions?.length).to.equal(1); + expect(extUpdateSecondTime.conditions?.[0]?.alias).to.equal('Umb.Test.Condition.Valid'); + }); +}); diff --git a/src/libs/extension-api/registry/extension.registry.ts b/src/libs/extension-api/registry/extension.registry.ts index 2680d599e9..6ff5762ca7 100644 --- a/src/libs/extension-api/registry/extension.registry.ts +++ b/src/libs/extension-api/registry/extension.registry.ts @@ -1,4 +1,9 @@ -import type { ManifestBase, ManifestKind } from '../types/index.js'; +import type { + ManifestBase, + ManifestKind, + ManifestWithDynamicConditions, + UmbConditionConfigBase, +} from '../types/index.js'; import type { SpecificManifestTypeOrManifestBase } from '../types/map.types.js'; import { UmbBasicState } from '@umbraco-cms/backoffice/observable-api'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; @@ -6,8 +11,9 @@ import { map, distinctUntilChanged, combineLatest, of, switchMap } from '@umbrac /** * - * @param previousValue - * @param currentValue + * @param previousValue {Array} - previous value + * @param currentValue {Array} - current value + * @returns {boolean} - true if value is assumed to be the same as previous value. */ function extensionArrayMemoization>( previousValue: Array, @@ -26,8 +32,9 @@ function extensionArrayMemoization>( /** * - * @param previousValue - * @param currentValue + * @param previousValue {Array} - previous value + * @param currentValue {Array} - current value + * @returns {boolean} - true if value is assumed to be the same as previous value. */ function extensionAndKindMatchArrayMemoization< T extends Pick & { __isMatchedWithKind?: boolean }, @@ -57,8 +64,9 @@ function extensionAndKindMatchArrayMemoization< /** * - * @param previousValue - * @param currentValue + * @param previousValue {Array} - previous value + * @param currentValue {Array} - current value + * @returns {boolean} - true if value is assumed to be the same as previous value. */ function extensionSingleMemoization>( previousValue: T | undefined, @@ -72,8 +80,9 @@ function extensionSingleMemoization>( /** * - * @param previousValue - * @param currentValue + * @param previousValue {Array} - previous value + * @param currentValue {Array} - current value + * @returns {boolean} - true if value is assumed to be the same as previous value. */ function extensionAndKindMatchSingleMemoization< T extends Pick & { __isMatchedWithKind?: boolean }, @@ -100,8 +109,26 @@ export class UmbExtensionRegistry< private _kinds = new UmbBasicState>>([]); public readonly kinds = this._kinds.asObservable(); + #exclusions: Array = []; + #additionalConditions: Map> = new Map(); + #appendAdditionalConditions(manifest: ManifestTypes) { + const newConditions = this.#additionalConditions.get(manifest.alias); + if (newConditions) { + // Append the condition to the extensions conditions array + if ((manifest as ManifestWithDynamicConditions).conditions) { + for (const condition of newConditions) { + (manifest as ManifestWithDynamicConditions).conditions!.push(condition); + } + } else { + (manifest as ManifestWithDynamicConditions).conditions = newConditions; + } + this.#additionalConditions.delete(manifest.alias); + } + return manifest; + } + defineKind(kind: ManifestKind): void { const extensionsValues = this._extensions.getValue(); const extension = extensionsValues.find( @@ -136,12 +163,25 @@ export class UmbExtensionRegistry< }; register(manifest: ManifestTypes | ManifestKind): void { - const isValid = this.#checkExtension(manifest); + const isValid = this.#validateExtension(manifest); if (!isValid) { return; } - this._extensions.setValue([...this._extensions.getValue(), manifest as ManifestTypes]); + if (manifest.type === 'kind') { + this.defineKind(manifest as ManifestKind); + return; + } + + const isApproved = this.#isExtensionApproved(manifest); + if (!isApproved) { + return; + } + + this._extensions.setValue([ + ...this._extensions.getValue(), + this.#appendAdditionalConditions(manifest as ManifestTypes), + ]); } getAllExtensions(): Array { @@ -177,7 +217,7 @@ export class UmbExtensionRegistry< return false; } - #checkExtension(manifest: ManifestTypes | ManifestKind): boolean { + #validateExtension(manifest: ManifestTypes | ManifestKind): boolean { if (!manifest.type) { console.error(`Extension is missing type`, manifest); return false; @@ -188,11 +228,9 @@ export class UmbExtensionRegistry< return false; } - if (manifest.type === 'kind') { - this.defineKind(manifest as ManifestKind); - return false; - } - + return true; + } + #isExtensionApproved(manifest: ManifestTypes | ManifestKind): boolean { if (!this.#acceptExtension(manifest as ManifestTypes)) { return false; } @@ -430,4 +468,41 @@ export class UmbExtensionRegistry< distinctUntilChanged(extensionAndKindMatchArrayMemoization), ) as Observable>; } + + /** + * Append a new condition to an existing extension + * Useful to add a condition for example the Save And Publish workspace action shipped by core. + * @param {string} alias - The alias of the extension to append the condition to. + * @param {UmbConditionConfigBase} newCondition - The condition to append to the extension. + */ + appendCondition(alias: string, newCondition: UmbConditionConfigBase) { + this.appendConditions(alias, [newCondition]); + } + + /** + * Appends an array of conditions to an existing extension + * @param {string} alias - The alias of the extension to append the condition to + * @param {Array} newConditions - An array of conditions to be appended to an extension manifest. + */ + appendConditions(alias: string, newConditions: Array) { + const existingConditionsToBeAdded = this.#additionalConditions.get(alias); + this.#additionalConditions.set( + alias, + existingConditionsToBeAdded ? [...existingConditionsToBeAdded, ...newConditions] : newConditions, + ); + + const allExtensions = this._extensions.getValue(); + for (const extension of allExtensions) { + if (extension.alias === alias) { + // Replace the existing extension with the updated one + allExtensions[allExtensions.indexOf(extension)] = this.#appendAdditionalConditions(extension as ManifestTypes); + + // Update the main extensions collection/observable + this._extensions.setValue(allExtensions); + + //Stop the search: + break; + } + } + } } diff --git a/src/libs/extension-api/types/manifest-bundle.interface.ts b/src/libs/extension-api/types/manifest-bundle.interface.ts index f0e62ede1b..9531fb9396 100644 --- a/src/libs/extension-api/types/manifest-bundle.interface.ts +++ b/src/libs/extension-api/types/manifest-bundle.interface.ts @@ -4,7 +4,7 @@ import type { ManifestBase } from './manifest-base.interface.js'; /** * This type of extension takes a JS module and registers all exported manifests from the pointed JS file. */ -export interface ManifestBundle - extends ManifestPlainJs<{ [key: string]: Array }> { +export interface ManifestBundle + extends ManifestPlainJs<{ [key: string]: Array }> { type: 'bundle'; } diff --git a/src/mocks/data/document-blueprint/document-blueprint.data.ts b/src/mocks/data/document-blueprint/document-blueprint.data.ts index 46a252aeeb..0ca71a3f1c 100644 --- a/src/mocks/data/document-blueprint/document-blueprint.data.ts +++ b/src/mocks/data/document-blueprint/document-blueprint.data.ts @@ -36,6 +36,7 @@ export const data: Array = [ ], values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'prop1', culture: null, segment: null, diff --git a/src/mocks/data/document-blueprint/document-blueprint.db.ts b/src/mocks/data/document-blueprint/document-blueprint.db.ts index 9166a603dc..9ad279f722 100644 --- a/src/mocks/data/document-blueprint/document-blueprint.db.ts +++ b/src/mocks/data/document-blueprint/document-blueprint.db.ts @@ -12,6 +12,7 @@ import type { DocumentItemResponseModel, DocumentResponseModel, DocumentTreeItemResponseModel, + DocumentValueResponseModel, } from '@umbraco-cms/backoffice/external/backend-api'; export class UmbDocumentBlueprintMockDB extends UmbEntityMockDbBase { @@ -65,7 +66,7 @@ const createMockDocumentBlueprintMapper = (request: CreateDocumentRequestModel): isTrashed: false, noAccess: false, parent: request.parent, - values: request.values, + values: request.values as DocumentValueResponseModel[], variants: request.variants.map((variantRequest) => { return { culture: variantRequest.culture, diff --git a/src/mocks/data/document/document.data.ts b/src/mocks/data/document/document.data.ts index 2e3dce12d4..821f1f2012 100644 --- a/src/mocks/data/document/document.data.ts +++ b/src/mocks/data/document/document.data.ts @@ -39,6 +39,7 @@ export const data: Array = [ ], values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'prop1', culture: null, segment: null, @@ -66,6 +67,7 @@ export const data: Array = [ isTrashed: false, values: [ { + editorAlias: 'Umbraco.RichText', alias: 'richTextEditor', culture: null, segment: null, @@ -83,6 +85,7 @@ export const data: Array = [ }, }, { + editorAlias: 'Umbraco.TextArea', alias: 'codeEditor', culture: null, segment: null, @@ -113,30 +116,35 @@ export const data: Array = [

`, }, { + editorAlias: 'Umbraco.TextBox', alias: 'email', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.ColorPicker', alias: 'colorPicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.MultiNodeTreePicker', alias: 'contentPicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.ColorPicker.EyeDropper', alias: 'eyeDropper', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.MultiUrlPicker', alias: 'multiUrlPicker', culture: 'en-US', segment: null, @@ -153,12 +161,14 @@ export const data: Array = [ ], }, { + editorAlias: 'Umbraco.MultiUrlPicker', alias: 'multiUrlPicker', culture: 'da-dk', segment: null, value: null, }, { + editorAlias: 'Umbraco.MultiNodeTreePicker', alias: 'multiNodeTreePicker', culture: null, segment: null, @@ -166,84 +176,98 @@ export const data: Array = [ 'all-property-editors-document-id,c05da24d-7740-447b-9cdc-bd8ce2172e38,fd56a0b5-01a0-4da2-b428-52773bfa9cc4', }, { + editorAlias: 'Umbraco.DateTime', alias: 'datePicker', culture: null, segment: null, value: '2023-12-24', }, { + editorAlias: 'Umbraco.DateTime', alias: 'datePickerTime', culture: null, segment: null, value: '2023-12-24 14:52', }, { + editorAlias: 'Umbraco.DateTime', alias: 'time', culture: null, segment: null, value: '14:52:00', }, { + editorAlias: 'Umbraco.EmailAddress', alias: 'email', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.TextBox', alias: 'textBox', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.DropDown.Flexible', alias: 'dropdown', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.TextArea', alias: 'textArea', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.Slider', alias: 'slider', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.TrueFalse', alias: 'toggle', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.Tags', alias: 'tags', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.MarkdownEditor', alias: 'markdownEditor', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.RadioButtonList', alias: 'radioButtonList', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.CheckBoxList', alias: 'checkboxList', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.BlockList', alias: 'blockList', culture: null, segment: null, @@ -298,12 +322,14 @@ export const data: Array = [ }, }, { + editorAlias: 'Umbraco.MediaPicker3', alias: 'mediaPicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.ImageCropper', alias: 'imageCropper', culture: null, segment: null, @@ -384,12 +410,14 @@ export const data: Array = [ }, }, { + editorAlias: 'Umbraco.UploadField', alias: 'uploadField', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.BlockGrid', alias: 'blockGrid', culture: null, segment: null, @@ -473,60 +501,70 @@ export const data: Array = [ }, }, { + editorAlias: 'Umbraco.BlockGrid', alias: 'blockGrid', culture: null, segment: null, value: null, }, { + editorAlias: '', alias: 'numberRange', culture: null, segment: null, value: null, }, { + editorAlias: '', alias: 'orderDirection', culture: null, segment: null, value: null, }, { + editorAlias: '', alias: 'overlaySize', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.Label', alias: 'label', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.Integer', alias: 'integer', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.Decimal', alias: 'decimal', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.MemberPicker', alias: 'memberPicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.MemberGroupPicker', alias: 'memberGroupPicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.UserPicker', alias: 'userPicker', culture: null, segment: null, @@ -574,60 +612,70 @@ export const data: Array = [ isTrashed: false, values: [ { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'masterText', value: 'i have a master text', }, { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'pageTitle', value: 'with a page title', }, { + editorAlias: 'Umbraco.TextArea', culture: null, segment: null, alias: 'blogPostText', value: 'My first blog post', }, { + editorAlias: 'Umbraco.TextBox', culture: 'en-US', segment: null, alias: 'blogTextStringUnderMasterTab', value: 'in the master tab', }, { + editorAlias: 'Umbraco.TextBox', culture: 'en-US', segment: null, alias: 'blogTextStringUnderGroupUnderMasterTab', value: 'which is under another group in the tab', }, { + editorAlias: 'Umbraco.TextBox', culture: 'da-dk', segment: null, alias: 'blogTextStringUnderMasterTab', value: 'på master dokument tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'da-dk', segment: null, alias: 'blogTextStringUnderGroupUnderMasterTab', value: 'denne er under en anden gruppe i tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'no-no', segment: null, alias: 'blogTextStringUnderMasterTab', value: 'Norsk på master dokument tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'no-no', segment: null, alias: 'blogTextStringUnderGroupUnderMasterTab', value: 'Norsk denne er under en anden gruppe i tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'localBlogTabString', @@ -697,48 +745,56 @@ export const data: Array = [ isTrashed: false, values: [ { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'masterText', value: 'i have a master text B', }, { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'pageTitle', value: 'with a page title B', }, { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'blogPostText', value: 'My first blog post B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'en-US', segment: null, alias: 'blogTextStringUnderMasterTab', value: 'in the master tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'en-US', segment: null, alias: 'blogTextStringUnderGroupUnderMasterTab', value: 'which is under another group in the tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'da-dk', segment: null, alias: 'blogTextStringUnderMasterTab', value: 'på master dokument tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: 'da-dk', segment: null, alias: 'blogTextStringUnderGroupUnderMasterTab', value: 'denne er under en anden gruppe i tab B', }, { + editorAlias: 'Umbraco.TextBox', culture: null, segment: null, alias: 'localBlogTabString', @@ -789,12 +845,14 @@ export const data: Array = [ ], values: [ { + editorAlias: 'Umbraco.MultiNodeTreePicker', alias: 'multiNodeTreePicker', culture: null, segment: null, value: null, }, { + editorAlias: 'Umbraco.ListView', alias: 'listView', culture: null, segment: null, diff --git a/src/mocks/data/document/document.db.ts b/src/mocks/data/document/document.db.ts index d9a36ba11b..5cace7dd50 100644 --- a/src/mocks/data/document/document.db.ts +++ b/src/mocks/data/document/document.db.ts @@ -18,6 +18,7 @@ import type { DocumentTreeItemResponseModel, DomainsResponseModel, DocumentConfigurationResponseModel, + DocumentValueResponseModel, } from '@umbraco-cms/backoffice/external/backend-api'; export class UmbDocumentMockDB extends UmbEntityMockDbBase { @@ -89,7 +90,8 @@ const createMockDocumentMapper = (request: CreateDocumentRequestModel): UmbMockD isTrashed: false, noAccess: false, parent: request.parent, - values: request.values, + // TODO: Currently trusting we did send the editorAlias to the create end point: + values: request.values as DocumentValueResponseModel[], variants: request.variants.map((variantRequest) => { return { culture: variantRequest.culture, diff --git a/src/mocks/data/media/media.data.ts b/src/mocks/data/media/media.data.ts index 012ab54620..b6012a0494 100644 --- a/src/mocks/data/media/media.data.ts +++ b/src/mocks/data/media/media.data.ts @@ -19,6 +19,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaHeadline', value: 'The daily life at Umbraco HQ', }, @@ -47,6 +48,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaDescription', value: 'Every day, a rabbit in a military costume greets me at the front door', }, @@ -123,6 +125,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaDescription', value: 'Every day, a rabbit in a military costume greets me at the front door', }, @@ -151,6 +154,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaDescription', value: 'Every day, a rabbit in a military costume greets me at the front door', }, @@ -179,6 +183,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaDescription', value: 'Every day, a rabbit in a military costume greets me at the front door', }, @@ -207,6 +212,7 @@ export const data: Array = [ }, values: [ { + editorAlias: 'Umbraco.TextBox', alias: 'myMediaDescription', value: 'Every day, a rabbit in a military costume greets me at the front door', }, diff --git a/src/mocks/data/media/media.db.ts b/src/mocks/data/media/media.db.ts index e0a6337152..f8e81cd0dc 100644 --- a/src/mocks/data/media/media.db.ts +++ b/src/mocks/data/media/media.db.ts @@ -14,6 +14,7 @@ import type { MediaItemResponseModel, MediaResponseModel, MediaTreeItemResponseModel, + MediaValueResponseModel, } from '@umbraco-cms/backoffice/external/backend-api'; export class UmbMediaMockDB extends UmbEntityMockDbBase { @@ -64,7 +65,8 @@ const createMockMediaMapper = (request: CreateMediaRequestModel): UmbMockMediaMo isTrashed: false, noAccess: false, parent: request.parent, - values: request.values, + // We trust blindly that we send of the editorAlias to the create end point. + values: request.values as MediaValueResponseModel[], variants: request.variants.map((variantRequest) => { return { culture: variantRequest.culture, diff --git a/src/mocks/data/member/member.data.ts b/src/mocks/data/member/member.data.ts index d82092d4a2..ee2d5c0e1d 100644 --- a/src/mocks/data/member/member.data.ts +++ b/src/mocks/data/member/member.data.ts @@ -1,4 +1,8 @@ -import type { MemberResponseModel, MemberItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api'; +import { + type MemberResponseModel, + type MemberItemResponseModel, + MemberKindModel, +} from '@umbraco-cms/backoffice/external/backend-api'; export type UmbMockMemberModel = MemberResponseModel & MemberItemResponseModel; @@ -26,6 +30,7 @@ export const data: Array = [ updateDate: '2023-02-06T15:32:24.957009', }, ], + kind: MemberKindModel.DEFAULT, }, { email: 'member2@member.com', @@ -50,6 +55,7 @@ export const data: Array = [ updateDate: '2023-02-06T15:32:24.957009', }, ], + kind: MemberKindModel.DEFAULT, }, { email: 'member3@member.com', @@ -74,5 +80,6 @@ export const data: Array = [ updateDate: '2023-02-06T15:31:51.354764', }, ], + kind: MemberKindModel.DEFAULT, }, ]; diff --git a/src/mocks/data/member/member.db.ts b/src/mocks/data/member/member.db.ts index 59b36d0ead..77f41e2cde 100644 --- a/src/mocks/data/member/member.db.ts +++ b/src/mocks/data/member/member.db.ts @@ -6,10 +6,12 @@ import { UmbMockContentCollectionManager } from '../utils/content/content-collec import type { UmbMockMemberModel } from './member.data.js'; import { data } from './member.data.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; -import type { - CreateMemberRequestModel, - MemberItemResponseModel, - MemberResponseModel, +import { + MemberKindModel, + type CreateMemberRequestModel, + type MemberItemResponseModel, + type MemberResponseModel, + type MemberValueResponseModel, } from '@umbraco-cms/backoffice/external/backend-api'; class UmbMemberMockDB extends UmbEntityMockDbBase { @@ -39,12 +41,13 @@ const createDetailMockMapper = (request: CreateMemberRequestModel): UmbMockMembe lastLockoutDate: null, lastLoginDate: null, lastPasswordChangeDate: null, + kind: MemberKindModel.DEFAULT, memberType: { id: memberType.id, icon: memberType.icon, }, username: request.username, - values: request.values, + values: request.values as MemberValueResponseModel[], variants: request.variants.map((variantRequest) => { return { culture: variantRequest.culture, @@ -66,6 +69,7 @@ const detailResponseMapper = (item: UmbMockMemberModel): MemberResponseModel => isApproved: item.isApproved, isLockedOut: item.isLockedOut, isTwoFactorEnabled: item.isTwoFactorEnabled, + kind: item.kind, lastLockoutDate: item.lastLockoutDate, lastLoginDate: item.lastLoginDate, lastPasswordChangeDate: item.lastPasswordChangeDate, @@ -79,6 +83,7 @@ const detailResponseMapper = (item: UmbMockMemberModel): MemberResponseModel => const itemResponseMapper = (item: UmbMockMemberModel): MemberItemResponseModel => { return { id: item.id, + kind: item.kind, memberType: item.memberType, variants: item.variants, }; diff --git a/src/mocks/data/user/user.data.ts b/src/mocks/data/user/user.data.ts index a1657a2531..2043e9d216 100644 --- a/src/mocks/data/user/user.data.ts +++ b/src/mocks/data/user/user.data.ts @@ -3,115 +3,120 @@ import type { UserResponseModel, UserTwoFactorProviderModel, } from '@umbraco-cms/backoffice/external/backend-api'; -import { UserStateModel } from '@umbraco-cms/backoffice/external/backend-api'; +import { UserKindModel, UserStateModel } from '@umbraco-cms/backoffice/external/backend-api'; export type UmbMockUserModel = UserResponseModel & UserItemResponseModel; export const data: Array = [ { - id: 'bca6c733-a63d-4353-a271-9a8b6bcca8bd', + avatarUrls: [], + createDate: '3/13/2022', documentStartNodeIds: [], + email: 'noreply@umbraco.com', + failedLoginAttempts: 946, hasDocumentRootAccess: true, - mediaStartNodeIds: [], hasMediaRootAccess: true, - name: 'Umbraco User', - email: 'noreply@umbraco.com', + id: 'bca6c733-a63d-4353-a271-9a8b6bcca8bd', + isAdmin: true, + kind: UserKindModel.DEFAULT, languageIsoCode: 'en-us', - state: UserStateModel.ACTIVE, - lastLoginDate: '9/10/2022', lastLockoutDate: '11/23/2021', + lastLoginDate: '9/10/2022', lastPasswordChangeDate: '1/10/2022', + mediaStartNodeIds: [], + name: 'Umbraco User', + state: UserStateModel.ACTIVE, updateDate: '2/10/2022', - createDate: '3/13/2022', - failedLoginAttempts: 946, userGroupIds: [{ id: 'user-group-administrators-id' }, { id: 'user-group-editors-id' }], userName: '', - avatarUrls: [], - isAdmin: true, }, { - id: '82e11d3d-b91d-43c9-9071-34d28e62e81d', + avatarUrls: [], + createDate: '2023-10-12T18:30:32.879Z', documentStartNodeIds: [{ id: 'simple-document-id' }], + email: 'awalker1@domain.com', + failedLoginAttempts: 0, hasDocumentRootAccess: true, - mediaStartNodeIds: [{ id: 'f2f81a40-c989-4b6b-84e2-057cecd3adc1' }], hasMediaRootAccess: true, - name: 'Amelie Walker', - email: 'awalker1@domain.com', + id: '82e11d3d-b91d-43c9-9071-34d28e62e81d', + isAdmin: true, + kind: UserKindModel.DEFAULT, languageIsoCode: 'da-dk', - state: UserStateModel.INACTIVE, - lastLoginDate: '2023-10-12T18:30:32.879Z', lastLockoutDate: null, + lastLoginDate: '2023-10-12T18:30:32.879Z', lastPasswordChangeDate: '2023-10-12T18:30:32.879Z', + mediaStartNodeIds: [{ id: 'f2f81a40-c989-4b6b-84e2-057cecd3adc1' }], + name: 'Amelie Walker', + state: UserStateModel.INACTIVE, updateDate: '2023-10-12T18:30:32.879Z', - createDate: '2023-10-12T18:30:32.879Z', - failedLoginAttempts: 0, userGroupIds: [{ id: 'user-group-administrators-id' }], userName: '', - avatarUrls: [], - isAdmin: true, }, { - id: 'aa1d83a9-bc7f-47d2-b288-58d8a31f5017', + avatarUrls: [], + createDate: '2023-10-12T18:30:32.879Z', documentStartNodeIds: [], - mediaStartNodeIds: [], + email: 'okim1@domain.com', + failedLoginAttempts: 0, hasDocumentRootAccess: true, hasMediaRootAccess: true, - name: 'Oliver Kim', - email: 'okim1@domain.com', + id: 'aa1d83a9-bc7f-47d2-b288-58d8a31f5017', + isAdmin: false, + kind: UserKindModel.DEFAULT, languageIsoCode: 'da-dk', - state: UserStateModel.ACTIVE, - lastLoginDate: '2023-10-12T18:30:32.879Z', lastLockoutDate: null, + lastLoginDate: '2023-10-12T18:30:32.879Z', lastPasswordChangeDate: '2023-10-12T18:30:32.879Z', + mediaStartNodeIds: [], + name: 'Oliver Kim', + state: UserStateModel.ACTIVE, updateDate: '2023-10-12T18:30:32.879Z', - createDate: '2023-10-12T18:30:32.879Z', - failedLoginAttempts: 0, userGroupIds: [{ id: 'user-group-editors-id' }], userName: '', - avatarUrls: [], - isAdmin: false, }, { - id: 'ff2f4a50-d3d4-4bc4-869d-c7948c160e54', + avatarUrls: [], + createDate: '2023-10-12T18:30:32.879Z', documentStartNodeIds: [], - mediaStartNodeIds: [], + email: 'enieves1@domain.com', + failedLoginAttempts: 0, hasDocumentRootAccess: true, hasMediaRootAccess: true, - name: 'Eliana Nieves', - email: 'enieves1@domain.com', + id: 'ff2f4a50-d3d4-4bc4-869d-c7948c160e54', + isAdmin: false, + kind: UserKindModel.DEFAULT, languageIsoCode: 'en-us', - state: UserStateModel.INVITED, - lastLoginDate: '2023-10-12T18:30:32.879Z', lastLockoutDate: null, + lastLoginDate: '2023-10-12T18:30:32.879Z', lastPasswordChangeDate: null, + mediaStartNodeIds: [], + name: 'Eliana Nieves', + state: UserStateModel.INVITED, updateDate: '2023-10-12T18:30:32.879Z', - createDate: '2023-10-12T18:30:32.879Z', - failedLoginAttempts: 0, userGroupIds: [{ id: 'user-group-editors-id' }], userName: '', - avatarUrls: [], - isAdmin: false, }, { - id: 'c290c6d9-9f12-4838-8567-621b52a178de', + avatarUrls: [], + createDate: '2023-10-12T18:30:32.879Z', documentStartNodeIds: [], - mediaStartNodeIds: [], + email: 'jpatel1@domain.com', + failedLoginAttempts: 25, hasDocumentRootAccess: true, hasMediaRootAccess: true, - name: 'Jasmine Patel', - email: 'jpatel1@domain.com', + id: 'c290c6d9-9f12-4838-8567-621b52a178de', + isAdmin: false, + kind: UserKindModel.DEFAULT, languageIsoCode: 'en-us', - state: UserStateModel.LOCKED_OUT, - lastLoginDate: '2023-10-12T18:30:32.879Z', lastLockoutDate: '2023-10-12T18:30:32.879Z', + lastLoginDate: '2023-10-12T18:30:32.879Z', lastPasswordChangeDate: null, + mediaStartNodeIds: [], + name: 'Jasmine Patel', + state: UserStateModel.LOCKED_OUT, updateDate: '2023-10-12T18:30:32.879Z', - createDate: '2023-10-12T18:30:32.879Z', - failedLoginAttempts: 25, userGroupIds: [{ id: 'user-group-editors-id' }, { id: 'user-group-sensitive-data-id' }], userName: '', - avatarUrls: [], - isAdmin: false, }, ]; diff --git a/src/mocks/data/user/user.db.ts b/src/mocks/data/user/user.db.ts index 414f584edf..2416aeb899 100644 --- a/src/mocks/data/user/user.db.ts +++ b/src/mocks/data/user/user.db.ts @@ -195,9 +195,10 @@ class UmbUserMockDB extends UmbEntityMockDbBase { const itemMapper = (item: UmbMockUserModel): UserItemResponseModel => { return { + avatarUrls: item.avatarUrls, id: item.id, + kind: item.kind, name: item.name, - avatarUrls: item.avatarUrls, }; }; @@ -222,30 +223,32 @@ const createMockMapper = (item: CreateUserRequestModel): UmbMockUserModel => { lastLockoutDate: null, lastPasswordChangeDate: null, isAdmin: item.userGroupIds.map((reference) => reference.id).includes(umbUserGroupMockDb.getAll()[0].id), + kind: item.kind, }; }; const detailResponseMapper = (item: UmbMockUserModel): UserResponseModel => { return { + avatarUrls: item.avatarUrls, + createDate: item.createDate, + documentStartNodeIds: item.documentStartNodeIds, email: item.email, - userName: item.userName, - name: item.name, - userGroupIds: item.userGroupIds, + failedLoginAttempts: item.failedLoginAttempts, + hasDocumentRootAccess: item.hasDocumentRootAccess, + hasMediaRootAccess: item.hasMediaRootAccess, id: item.id, + isAdmin: item.isAdmin, + kind: item.kind, languageIsoCode: item.languageIsoCode, - documentStartNodeIds: item.documentStartNodeIds, + lastLockoutDate: item.lastLockoutDate, + lastLoginDate: item.lastLoginDate, + lastPasswordChangeDate: item.lastPasswordChangeDate, mediaStartNodeIds: item.mediaStartNodeIds, - hasDocumentRootAccess: item.hasDocumentRootAccess, - hasMediaRootAccess: item.hasMediaRootAccess, - avatarUrls: item.avatarUrls, + name: item.name, state: item.state, - failedLoginAttempts: item.failedLoginAttempts, - createDate: item.createDate, updateDate: item.updateDate, - lastLoginDate: item.lastLoginDate, - lastLockoutDate: item.lastLockoutDate, - lastPasswordChangeDate: item.lastPasswordChangeDate, - isAdmin: item.isAdmin, + userGroupIds: item.userGroupIds, + userName: item.userName, }; }; diff --git a/src/mocks/handlers/manifests.handlers.ts b/src/mocks/handlers/manifests.handlers.ts index 6233357ed6..69bcdc54d0 100644 --- a/src/mocks/handlers/manifests.handlers.ts +++ b/src/mocks/handlers/manifests.handlers.ts @@ -24,7 +24,7 @@ const privateManifests: PackageManifestResponse = [ type: 'section', alias: 'My.Section.Custom', name: 'Custom Section', - js: '/App_Plugins/section.js', + element: '/App_Plugins/section.js', elementName: 'my-section-custom', weight: 1, meta: { @@ -36,7 +36,7 @@ const privateManifests: PackageManifestResponse = [ type: 'propertyEditorUi', alias: 'My.PropertyEditorUI.Custom', name: 'My Custom Property Editor UI', - js: '/App_Plugins/property-editor.js', + element: '/App_Plugins/property-editor.js', elementName: 'my-property-editor-ui-custom', meta: { label: 'My Custom Property', diff --git a/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts b/src/packages/block/block-custom-view/block-editor-custom-view.extension.ts similarity index 61% rename from src/packages/core/extension-registry/models/block-editor-custom-view.model.ts rename to src/packages/block/block-custom-view/block-editor-custom-view.extension.ts index 55a8208789..d41818eae6 100644 --- a/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts +++ b/src/packages/block/block-custom-view/block-editor-custom-view.extension.ts @@ -1,20 +1,26 @@ -import type { UmbBlockEditorCustomViewElement } from '../interfaces/index.js'; +import type { UmbBlockEditorCustomViewElement } from './types.js'; import type { ManifestElement } from '@umbraco-cms/backoffice/extension-api'; export interface ManifestBlockEditorCustomView extends ManifestElement { type: 'blockEditorCustomView'; /** - * @property {string | Array } - Declare if this Custom View only must appear at specific Content Types by Alias. + * @property {string | Array } forContentTypeAlias - 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. + * @property {string | Array } forBlockEditor - 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; } + +declare global { + interface UmbExtensionManifestMap { + umbBlockEditorCustomView: ManifestBlockEditorCustomView; + } +} diff --git a/src/packages/block/block-custom-view/index.ts b/src/packages/block/block-custom-view/index.ts new file mode 100644 index 0000000000..06c33f562f --- /dev/null +++ b/src/packages/block/block-custom-view/index.ts @@ -0,0 +1 @@ +export type * from './types.js'; diff --git a/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts b/src/packages/block/block-custom-view/types.ts similarity index 57% rename from src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts rename to src/packages/block/block-custom-view/types.ts index 35ed551b97..63c13123f3 100644 --- a/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts +++ b/src/packages/block/block-custom-view/types.ts @@ -1,29 +1,8 @@ -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; -} +import type { ManifestBlockEditorCustomView } from './block-editor-custom-view.extension.js'; +import type { UmbBlockLayoutBaseModel, UmbBlockDataType } from '@umbraco-cms/backoffice/block'; +import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; -// 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 type * from './block-editor-custom-view.extension.js'; export interface UmbBlockEditorCustomViewConfiguration { editContentPath?: string; diff --git a/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts b/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts index 24ccefc904..7878b51aad 100644 --- a/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts +++ b/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts @@ -5,6 +5,7 @@ import type { UmbInvariantDatasetWorkspaceContext, UmbRoutableWorkspaceContext, UmbWorkspaceContext, + ManifestWorkspace, } from '@umbraco-cms/backoffice/workspace'; import { UmbSubmittableWorkspaceContextBase, @@ -13,7 +14,7 @@ import { import { UmbArrayState, UmbObjectState, appendToFrozenArray } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import type { ManifestWorkspace, PropertyEditorSettingsProperty } from '@umbraco-cms/backoffice/extension-registry'; +import type { PropertyEditorSettingsProperty } from '@umbraco-cms/backoffice/extension-registry'; import { UmbId } from '@umbraco-cms/backoffice/id'; export class UmbBlockGridAreaTypeWorkspaceContext diff --git a/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.modal-token.ts b/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.modal-token.ts index a8d866932d..9dd0ee6146 100644 --- a/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.modal-token.ts +++ b/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.modal-token.ts @@ -1,4 +1,4 @@ -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type diff --git a/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/manifests.ts b/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/manifests.ts index c2cd3becf3..e8d2b915e8 100644 --- a/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/manifests.ts +++ b/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/manifests.ts @@ -1,9 +1,8 @@ import { manifests as workspaceViewManifests } from './views/manifests.js'; import { UMB_BLOCK_GRID_AREA_TYPE_WORKSPACE_ALIAS } from './index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -export const manifests: Array = [ +export const manifests: Array = [ ...workspaceViewManifests, { type: 'workspace', diff --git a/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/views/manifests.ts b/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/views/manifests.ts index 359e99af0c..e30f10ceda 100644 --- a/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/views/manifests.ts +++ b/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/views/manifests.ts @@ -1,12 +1,12 @@ import { UMB_BLOCK_GRID_AREA_TYPE_WORKSPACE_ALIAS } from '../index.js'; -import type { ManifestTypes, ManifestWorkspaceView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspaceView } from '@umbraco-cms/backoffice/workspace'; export const workspaceViews: Array = [ { type: 'workspaceView', alias: 'Umb.WorkspaceView.BlockGridAreaType.Settings', name: 'Block Grid Area Type Workspace Settings View', - js: () => import('./settings.element.js'), + element: () => import('./settings.element.js'), weight: 1000, meta: { label: '#general_settings', @@ -22,4 +22,4 @@ export const workspaceViews: Array = [ }, ]; -export const manifests: Array = [...workspaceViews]; +export const manifests: Array = [...workspaceViews]; diff --git a/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/views/settings.element.ts b/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/views/settings.element.ts index b8043eba6f..e77af60a5e 100644 --- a/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/views/settings.element.ts +++ b/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/views/settings.element.ts @@ -1,7 +1,7 @@ import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; import type { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import type { UmbInputNumberRangeElement } from '@umbraco-cms/backoffice/components'; diff --git a/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts b/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts index 08948600e1..076752e03a 100644 --- a/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts +++ b/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts @@ -3,9 +3,9 @@ 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 { UmbBlockEditorCustomViewConfiguration } from '@umbraco-cms/backoffice/extension-registry'; import '../block-grid-areas-container/index.js'; import '../ref-grid-block/index.js'; +import type { UmbBlockEditorCustomViewConfiguration } from '@umbraco-cms/backoffice/block-custom-view'; /** * @element umb-block-grid-block-inline diff --git a/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts b/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts index 67cd1c81e7..1e16df8024 100644 --- a/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts +++ b/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts @@ -1,8 +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 { UmbBlockEditorCustomViewConfiguration } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbBlockDataType } from '@umbraco-cms/backoffice/block'; +import type { UmbBlockEditorCustomViewConfiguration } from '@umbraco-cms/backoffice/block-custom-view'; import '@umbraco-cms/backoffice/ufm'; import '../block-grid-areas-container/index.js'; diff --git a/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts b/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts index 291e9f269d..a2091a3c91 100644 --- a/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts +++ b/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts @@ -2,11 +2,7 @@ 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 { - ManifestBlockEditorCustomView, - UmbBlockEditorCustomViewProperties, - UmbPropertyEditorUiElement, -} from '@umbraco-cms/backoffice/extension-registry'; +import type { 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'; @@ -15,6 +11,10 @@ import '../block-grid-block/index.js'; import '../block-scale-handler/index.js'; import { UmbObserveValidationStateController } from '@umbraco-cms/backoffice/validation'; import { UmbDataPathBlockElementDataQuery } from '@umbraco-cms/backoffice/block'; +import type { + ManifestBlockEditorCustomView, + UmbBlockEditorCustomViewProperties, +} from '@umbraco-cms/backoffice/block-custom-view'; import { UUIBlinkAnimationValue, UUIBlinkKeyframes } from '@umbraco-cms/backoffice/external/uui'; import type { UmbExtensionElementInitializer } from '@umbraco-cms/backoffice/extension-api'; /** diff --git a/src/packages/block/block-grid/manifests.ts b/src/packages/block/block-grid/manifests.ts index eac0a924a6..6c7e62c0a6 100644 --- a/src/packages/block/block-grid/manifests.ts +++ b/src/packages/block/block-grid/manifests.ts @@ -1,9 +1,8 @@ import { manifests as componentManifests } from './components/manifests.js'; import { manifests as propertyEditorManifests } from './property-editors/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...workspaceManifests, ...propertyEditorManifests, ...componentManifests, diff --git a/src/packages/block/block-grid/property-editors/block-grid-area-type-permission/manifests.ts b/src/packages/block/block-grid/property-editors/block-grid-area-type-permission/manifests.ts index 97693e4264..db706f57e7 100644 --- a/src/packages/block/block-grid/property-editors/block-grid-area-type-permission/manifests.ts +++ b/src/packages/block/block-grid/property-editors/block-grid-area-type-permission/manifests.ts @@ -4,7 +4,7 @@ export const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.BlockGridAreaTypePermission', name: 'Block Grid Area Type Permission Configuration Property Editor UI', - js: () => import('./block-grid-area-type-permission.element.js'), + element: () => import('./block-grid-area-type-permission.element.js'), meta: { label: 'Block Grid Area Type Permissions', icon: 'icon-document', diff --git a/src/packages/block/block-grid/property-editors/block-grid-areas-config/manifests.ts b/src/packages/block/block-grid/property-editors/block-grid-areas-config/manifests.ts index b6f4e36d16..da2a80d3e3 100644 --- a/src/packages/block/block-grid/property-editors/block-grid-areas-config/manifests.ts +++ b/src/packages/block/block-grid/property-editors/block-grid-areas-config/manifests.ts @@ -4,7 +4,7 @@ export const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.BlockGridAreasConfig', name: 'Block Grid Areas Configuration Property Editor UI', - js: () => import('./property-editor-ui-block-grid-areas-config.element.js'), + element: () => import('./property-editor-ui-block-grid-areas-config.element.js'), meta: { label: 'Block Grid Areas Configuration', icon: 'icon-document', diff --git a/src/packages/block/block-grid/property-editors/block-grid-column-span/manifests.ts b/src/packages/block/block-grid/property-editors/block-grid-column-span/manifests.ts index 7aa8cf4e08..34db0ad685 100644 --- a/src/packages/block/block-grid/property-editors/block-grid-column-span/manifests.ts +++ b/src/packages/block/block-grid/property-editors/block-grid-column-span/manifests.ts @@ -4,7 +4,7 @@ export const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.BlockGridColumnSpan', name: 'Block Grid Column Span Property Editor UI', - js: () => import('./property-editor-ui-block-grid-column-span.element.js'), + element: () => import('./property-editor-ui-block-grid-column-span.element.js'), meta: { label: 'Block Grid Column Span', icon: 'icon-document', diff --git a/src/packages/block/block-grid/property-editors/block-grid-editor/manifests.ts b/src/packages/block/block-grid/property-editors/block-grid-editor/manifests.ts index e2c982a4e6..86b4f04f24 100644 --- a/src/packages/block/block-grid/property-editors/block-grid-editor/manifests.ts +++ b/src/packages/block/block-grid/property-editors/block-grid-editor/manifests.ts @@ -1,14 +1,13 @@ import { manifest as blockGridSchemaManifest } from './Umbraco.BlockGrid.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_BLOCK_GRID_PROPERTY_EDITOR_ALIAS = 'Umbraco.BlockGrid'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.BlockGrid', name: 'Block Grid Property Editor UI', - js: () => import('./property-editor-ui-block-grid.element.js'), + element: () => import('./property-editor-ui-block-grid.element.js'), meta: { label: 'Block Grid', propertyEditorSchemaAlias: UMB_BLOCK_GRID_PROPERTY_EDITOR_ALIAS, diff --git a/src/packages/block/block-grid/property-editors/block-grid-group-configuration/manifests.ts b/src/packages/block/block-grid/property-editors/block-grid-group-configuration/manifests.ts index 7bb496f59d..b28466d4a2 100644 --- a/src/packages/block/block-grid/property-editors/block-grid-group-configuration/manifests.ts +++ b/src/packages/block/block-grid/property-editors/block-grid-group-configuration/manifests.ts @@ -4,7 +4,7 @@ export const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.BlockTypeGroupConfiguration', name: 'Block Grid Group Configuration Property Editor UI', - js: () => import('./property-editor-ui-block-grid-group-configuration.element.js'), + element: () => import('./property-editor-ui-block-grid-group-configuration.element.js'), meta: { label: '', icon: 'icon-box-alt', diff --git a/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/manifests.ts b/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/manifests.ts index 82385065ca..e303870926 100644 --- a/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/manifests.ts +++ b/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/manifests.ts @@ -4,7 +4,7 @@ export const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.BlockGridLayoutStylesheet', name: 'Block Grid Layout Stylesheet Property Editor UI', - js: () => import('./property-editor-ui-block-grid-layout-stylesheet.element.js'), + element: () => import('./property-editor-ui-block-grid-layout-stylesheet.element.js'), meta: { label: 'Block Grid Layout Stylesheet', icon: 'icon-document', diff --git a/src/packages/block/block-grid/property-editors/block-grid-type-configuration/manifests.ts b/src/packages/block/block-grid/property-editors/block-grid-type-configuration/manifests.ts index 17bf63c9ec..a7b8d8befb 100644 --- a/src/packages/block/block-grid/property-editors/block-grid-type-configuration/manifests.ts +++ b/src/packages/block/block-grid/property-editors/block-grid-type-configuration/manifests.ts @@ -4,7 +4,7 @@ export const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.BlockGridTypeConfiguration', name: 'Block Grid Block Configuration Property Editor UI', - js: () => import('./property-editor-ui-block-grid-type-configuration.element.js'), + element: () => import('./property-editor-ui-block-grid-type-configuration.element.js'), meta: { label: 'Block Grid Block Configuration', icon: 'icon-autofill', diff --git a/src/packages/block/block-grid/property-editors/manifests.ts b/src/packages/block/block-grid/property-editors/manifests.ts index 4be0f11b8b..8a797e8068 100644 --- a/src/packages/block/block-grid/property-editors/manifests.ts +++ b/src/packages/block/block-grid/property-editors/manifests.ts @@ -5,9 +5,8 @@ import { manifests as blockGridEditorManifests } from './block-grid-editor/manif import { manifest as blockGridGroupConfiguration } from './block-grid-group-configuration/manifests.js'; import { manifest as blockGridLayoutStylesheet } from './block-grid-layout-stylesheet/manifests.js'; import { manifest as blockGridTypeConfiguration } from './block-grid-type-configuration/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ blockGridAreaTypePermission, blockGridAreasConfigEditor, blockGridColumnSpan, diff --git a/src/packages/block/block-grid/workspace/block-grid-type-workspace.modal-token.ts b/src/packages/block/block-grid/workspace/block-grid-type-workspace.modal-token.ts index 19d76caa88..61b344ca99 100644 --- a/src/packages/block/block-grid/workspace/block-grid-type-workspace.modal-token.ts +++ b/src/packages/block/block-grid/workspace/block-grid-type-workspace.modal-token.ts @@ -1,5 +1,5 @@ import { UMB_BLOCK_GRID_TYPE, type UmbBlockGridTypeModel } from '../types.js'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export type UmbBlockGridTypeWorkspaceData = UmbWorkspaceModalData; diff --git a/src/packages/block/block-grid/workspace/block-grid-workspace.modal-token.ts b/src/packages/block/block-grid/workspace/block-grid-workspace.modal-token.ts index f7c523dffc..2b98a3a097 100644 --- a/src/packages/block/block-grid/workspace/block-grid-workspace.modal-token.ts +++ b/src/packages/block/block-grid/workspace/block-grid-workspace.modal-token.ts @@ -1,5 +1,5 @@ import type { UmbBlockWorkspaceData, UmbBlockWorkspaceOriginData } from '@umbraco-cms/backoffice/block'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbBlockGridWorkspaceOriginData extends UmbBlockWorkspaceOriginData { diff --git a/src/packages/block/block-grid/workspace/manifests.ts b/src/packages/block/block-grid/workspace/manifests.ts index 09c4468799..e4a73679b7 100644 --- a/src/packages/block/block-grid/workspace/manifests.ts +++ b/src/packages/block/block-grid/workspace/manifests.ts @@ -1,8 +1,7 @@ import { manifests as workspaceViewManifests } from './views/manifests.js'; import { UMB_BLOCK_GRID_TYPE_WORKSPACE_ALIAS } from './index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...workspaceViewManifests, { type: 'workspace', diff --git a/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts b/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts index b107595f8e..9879949f7c 100644 --- a/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts +++ b/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts @@ -2,7 +2,7 @@ import { UMB_BLOCK_GRID } from '../../types.js'; import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; // Getting umb-block-type-custom-view-guide element import '@umbraco-cms/backoffice/block-type'; diff --git a/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-areas.element.ts b/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-areas.element.ts index 3ed9e80519..b8c5f11fcc 100644 --- a/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-areas.element.ts +++ b/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-areas.element.ts @@ -1,7 +1,7 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { css, html, customElement, state, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import type { UmbPropertyEditorConfig } from '@umbraco-cms/backoffice/property-editor'; import { UMB_DATA_TYPE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/data-type'; diff --git a/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-settings.element.ts b/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-settings.element.ts index 079ab3ccd6..d02fec7982 100644 --- a/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-settings.element.ts +++ b/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-settings.element.ts @@ -1,7 +1,7 @@ import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; import type { UmbInputNumberRangeElement } from '@umbraco-cms/backoffice/components'; import { UMB_DATA_TYPE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/data-type'; diff --git a/src/packages/block/block-grid/workspace/views/manifests.ts b/src/packages/block/block-grid/workspace/views/manifests.ts index e50774cc26..a81da4e20d 100644 --- a/src/packages/block/block-grid/workspace/views/manifests.ts +++ b/src/packages/block/block-grid/workspace/views/manifests.ts @@ -1,12 +1,11 @@ import { UMB_BLOCK_GRID_TYPE_WORKSPACE_ALIAS } from '../index.js'; -import type { ManifestTypes, ManifestWorkspaceView } from '@umbraco-cms/backoffice/extension-registry'; -export const workspaceViews: Array = [ +export const manifests: Array = [ { type: 'workspaceView', alias: 'Umb.WorkspaceView.BlockType.Grid.Settings', name: 'Block Grid Type Workspace Settings View', - js: () => import('./block-grid-type-workspace-view-settings.element.js'), + element: () => import('./block-grid-type-workspace-view-settings.element.js'), weight: 1000, meta: { label: '#general_settings', @@ -24,7 +23,7 @@ export const workspaceViews: Array = [ type: 'workspaceView', alias: 'Umb.WorkspaceView.BlockType.Grid.Areas', name: 'Block Grid Type Workspace Areas View', - js: () => import('./block-grid-type-workspace-view-areas.element.js'), + element: () => import('./block-grid-type-workspace-view-areas.element.js'), weight: 1000, meta: { label: '#blockEditor_tabAreas', @@ -42,7 +41,7 @@ export const workspaceViews: Array = [ type: 'workspaceView', alias: 'Umb.WorkspaceView.BlockType.Grid.Advance', name: 'Block Grid Type Workspace Advance View', - js: () => import('./block-grid-type-workspace-view-advanced.element.js'), + element: () => import('./block-grid-type-workspace-view-advanced.element.js'), weight: 1000, meta: { label: '#blockEditor_tabAdvanced', @@ -57,5 +56,3 @@ export const workspaceViews: Array = [ ], }, ]; - -export const manifests: Array = [...workspaceViews]; diff --git a/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts b/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts index 0172936a37..e378af99d2 100644 --- a/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts +++ b/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts @@ -2,16 +2,16 @@ import { UmbBlockListEntryContext } from '../../context/block-list-entry.context import { UMB_BLOCK_LIST, type UmbBlockListLayoutModel } from '../../types.js'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { html, css, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit'; -import type { - ManifestBlockEditorCustomView, - UmbBlockEditorCustomViewProperties, - UmbPropertyEditorUiElement, -} from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import '../ref-list-block/index.js'; import '../inline-list-block/index.js'; import { stringOrStringArrayContains } from '@umbraco-cms/backoffice/utils'; import { UmbObserveValidationStateController } from '@umbraco-cms/backoffice/validation'; import { UmbDataPathBlockElementDataQuery } from '@umbraco-cms/backoffice/block'; +import type { + ManifestBlockEditorCustomView, + UmbBlockEditorCustomViewProperties, +} from '@umbraco-cms/backoffice/block-custom-view'; /** * @element umb-block-list-entry diff --git a/src/packages/block/block-list/manifests.ts b/src/packages/block/block-list/manifests.ts index 6d2d985e26..81f582ffda 100644 --- a/src/packages/block/block-list/manifests.ts +++ b/src/packages/block/block-list/manifests.ts @@ -1,5 +1,4 @@ import { manifests as propertyEditorManifests } from './property-editors/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...workspaceManifests, ...propertyEditorManifests]; +export const manifests: Array = [...workspaceManifests, ...propertyEditorManifests]; diff --git a/src/packages/block/block-list/property-editors/block-list-editor/manifests.ts b/src/packages/block/block-list/property-editors/block-list-editor/manifests.ts index e734bfaad1..7b7c0e0db1 100644 --- a/src/packages/block/block-list/property-editors/block-list-editor/manifests.ts +++ b/src/packages/block/block-list/property-editors/block-list-editor/manifests.ts @@ -1,14 +1,13 @@ import { manifest as blockListSchemaManifest } from './Umbraco.BlockList.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_BLOCK_LIST_PROPERTY_EDITOR_ALIAS = 'Umbraco.BlockList'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.BlockList', name: 'Block List Property Editor UI', - js: () => import('./property-editor-ui-block-list.element.js'), + element: () => import('./property-editor-ui-block-list.element.js'), meta: { label: 'Block List', propertyEditorSchemaAlias: UMB_BLOCK_LIST_PROPERTY_EDITOR_ALIAS, diff --git a/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts b/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts index 453fc7af90..e281b29968 100644 --- a/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts +++ b/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts @@ -6,7 +6,7 @@ import { UMB_BLOCK_LIST_PROPERTY_EDITOR_ALIAS } from './manifests.js'; import { UmbLitElement, umbDestroyOnDisconnect } from '@umbraco-cms/backoffice/lit-element'; import { html, customElement, property, state, repeat, css, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { UmbPropertyEditorUiElement, UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { UmbPropertyValueChangeEvent, type UmbPropertyEditorConfigCollection, @@ -19,6 +19,7 @@ import { UmbBlockElementDataValidationPathTranslator, type UmbBlockLayoutBaseModel, } from '@umbraco-cms/backoffice/block'; +import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; import '../../components/block-list-entry/index.js'; import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property'; @@ -117,7 +118,7 @@ export class UmbPropertyEditorUIBlockListElement * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content. * @type {boolean} * @attr - * @default false + * @default */ @property({ type: Boolean, reflect: true }) public get readonly() { diff --git a/src/packages/block/block-list/property-editors/block-list-type-configuration/manifests.ts b/src/packages/block/block-list/property-editors/block-list-type-configuration/manifests.ts index d94806f492..6a5dae05d2 100644 --- a/src/packages/block/block-list/property-editors/block-list-type-configuration/manifests.ts +++ b/src/packages/block/block-list/property-editors/block-list-type-configuration/manifests.ts @@ -4,7 +4,7 @@ export const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.BlockListTypeConfiguration', name: 'Block List Type Configuration Property Editor UI', - js: () => import('./property-editor-ui-block-list-type-configuration.element.js'), + element: () => import('./property-editor-ui-block-list-type-configuration.element.js'), meta: { label: 'Block List Type Configuration', icon: 'icon-autofill', diff --git a/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts b/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts index 639175c2fb..f41bc152ea 100644 --- a/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts +++ b/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts @@ -1,14 +1,14 @@ 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 { UmbBlockTypeBaseModel, UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbBlockTypeBaseModel, UmbInputBlockTypeElement } from '@umbraco-cms/backoffice/block-type'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbPropertyValueChangeEvent, type UmbPropertyEditorConfigCollection, } from '@umbraco-cms/backoffice/property-editor'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; /** diff --git a/src/packages/block/block-list/property-editors/manifests.ts b/src/packages/block/block-list/property-editors/manifests.ts index 1c6a6fa8a0..97cd909b6f 100644 --- a/src/packages/block/block-list/property-editors/manifests.ts +++ b/src/packages/block/block-list/property-editors/manifests.ts @@ -1,5 +1,4 @@ import { manifest as blockListTypeConfiguration } from './block-list-type-configuration/manifests.js'; import { manifests as blockGridEditorManifests } from './block-list-editor/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [blockListTypeConfiguration, ...blockGridEditorManifests]; +export const manifests: Array = [blockListTypeConfiguration, ...blockGridEditorManifests]; diff --git a/src/packages/block/block-list/types.ts b/src/packages/block/block-list/types.ts index 31c8dd7a55..94ff232c27 100644 --- a/src/packages/block/block-list/types.ts +++ b/src/packages/block/block-list/types.ts @@ -1,5 +1,5 @@ -import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbBlockLayoutBaseModel, UmbBlockValueType } from '@umbraco-cms/backoffice/block'; +import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; export const UMB_BLOCK_LIST_TYPE = 'block-list-type'; export const UMB_BLOCK_LIST = 'block-list'; diff --git a/src/packages/block/block-list/workspace/block-list-workspace.modal-token.ts b/src/packages/block/block-list/workspace/block-list-workspace.modal-token.ts index ba7b620324..9d920e144f 100644 --- a/src/packages/block/block-list/workspace/block-list-workspace.modal-token.ts +++ b/src/packages/block/block-list/workspace/block-list-workspace.modal-token.ts @@ -1,5 +1,5 @@ import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbBlockListWorkspaceOriginData { diff --git a/src/packages/block/block-list/workspace/manifests.ts b/src/packages/block/block-list/workspace/manifests.ts index c165a35f10..a4c4ff197f 100644 --- a/src/packages/block/block-list/workspace/manifests.ts +++ b/src/packages/block/block-list/workspace/manifests.ts @@ -1,8 +1,7 @@ import { manifests as workspaceViewManifests } from './views/manifests.js'; import { UMB_BLOCK_LIST_TYPE_WORKSPACE_ALIAS } from './index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...workspaceViewManifests, { type: 'workspace', diff --git a/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts b/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts index 3db4946a0a..989d3d7a57 100644 --- a/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts +++ b/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts @@ -1,7 +1,7 @@ import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; @customElement('umb-block-list-type-workspace-view-settings') export class UmbBlockListTypeWorkspaceViewSettingsElement extends UmbLitElement implements UmbWorkspaceViewElement { diff --git a/src/packages/block/block-list/workspace/views/manifests.ts b/src/packages/block/block-list/workspace/views/manifests.ts index ba7cc8765e..2668e8db6a 100644 --- a/src/packages/block/block-list/workspace/views/manifests.ts +++ b/src/packages/block/block-list/workspace/views/manifests.ts @@ -1,12 +1,11 @@ import { UMB_BLOCK_LIST_TYPE_WORKSPACE_ALIAS } from '../index.js'; -import type { ManifestTypes, ManifestWorkspaceView } from '@umbraco-cms/backoffice/extension-registry'; -export const workspaceViews: Array = [ +export const manifests: Array = [ { type: 'workspaceView', alias: 'Umb.WorkspaceView.BlockType.List.Settings', name: 'Block List Type Workspace Settings View', - js: () => import('./block-list-type-workspace-view.element.js'), + element: () => import('./block-list-type-workspace-view.element.js'), weight: 1000, meta: { label: '#blockEditor_tabBlockSettings', @@ -21,5 +20,3 @@ export const workspaceViews: Array = [ ], }, ]; - -export const manifests: Array = [...workspaceViews]; diff --git a/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts b/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts index 3ca6afa49d..54a59940f8 100644 --- a/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts +++ b/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts @@ -2,11 +2,9 @@ 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 { - UmbBlockEditorCustomViewProperties, - UmbPropertyEditorUiElement, -} from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import type { UmbBlockEditorCustomViewProperties } from '@umbraco-cms/backoffice/block-custom-view'; import '../ref-rte-block/index.js'; diff --git a/src/packages/block/block-rte/manifests.ts b/src/packages/block/block-rte/manifests.ts index 151385f7c1..0f70e08783 100644 --- a/src/packages/block/block-rte/manifests.ts +++ b/src/packages/block/block-rte/manifests.ts @@ -1,5 +1,4 @@ import { manifests as tinyMcePluginManifests } from './tiny-mce-plugin/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...tinyMcePluginManifests, ...workspaceManifests]; +export const manifests: Array = [...tinyMcePluginManifests, ...workspaceManifests]; diff --git a/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts b/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts index 380b62b1b1..c941292048 100644 --- a/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts +++ b/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts @@ -2,7 +2,7 @@ import { UMB_BLOCK_RTE_MANAGER_CONTEXT } from '../context/block-rte-manager.cont 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/extension-registry'; +import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; export default class UmbTinyMceMultiUrlPickerPlugin extends UmbTinyMcePluginBase { #localize = new UmbLocalizationController(this._host); diff --git a/src/packages/block/block-rte/types.ts b/src/packages/block/block-rte/types.ts index ea18ec9bad..c97075ec68 100644 --- a/src/packages/block/block-rte/types.ts +++ b/src/packages/block/block-rte/types.ts @@ -1,4 +1,4 @@ -import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; import type { UmbBlockLayoutBaseModel, UmbBlockValueType } from '@umbraco-cms/backoffice/block'; export const UMB_BLOCK_RTE_TYPE = 'block-rte-type'; diff --git a/src/packages/block/block-rte/workspace/block-rte-workspace.modal-token.ts b/src/packages/block/block-rte/workspace/block-rte-workspace.modal-token.ts index 11a110a595..0c4849d938 100644 --- a/src/packages/block/block-rte/workspace/block-rte-workspace.modal-token.ts +++ b/src/packages/block/block-rte/workspace/block-rte-workspace.modal-token.ts @@ -1,5 +1,5 @@ import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type diff --git a/src/packages/block/block-rte/workspace/manifests.ts b/src/packages/block/block-rte/workspace/manifests.ts index c98943f4fe..6ecb92936d 100644 --- a/src/packages/block/block-rte/workspace/manifests.ts +++ b/src/packages/block/block-rte/workspace/manifests.ts @@ -1,8 +1,7 @@ import { manifests as workspaceViewManifests } from './views/manifests.js'; import { UMB_BLOCK_RTE_TYPE_WORKSPACE_ALIAS } from './index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...workspaceViewManifests, { type: 'workspace', diff --git a/src/packages/block/block-rte/workspace/views/block-rte-type-workspace-view.element.ts b/src/packages/block/block-rte/workspace/views/block-rte-type-workspace-view.element.ts index 4d04293051..9b64688525 100644 --- a/src/packages/block/block-rte/workspace/views/block-rte-type-workspace-view.element.ts +++ b/src/packages/block/block-rte/workspace/views/block-rte-type-workspace-view.element.ts @@ -1,7 +1,7 @@ import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; @customElement('umb-block-rte-type-workspace-view-settings') export class UmbBlockRteTypeWorkspaceViewSettingsElement extends UmbLitElement implements UmbWorkspaceViewElement { diff --git a/src/packages/block/block-rte/workspace/views/manifests.ts b/src/packages/block/block-rte/workspace/views/manifests.ts index e52b440d6b..a6f11440a5 100644 --- a/src/packages/block/block-rte/workspace/views/manifests.ts +++ b/src/packages/block/block-rte/workspace/views/manifests.ts @@ -1,12 +1,11 @@ import { UMB_BLOCK_RTE_TYPE_WORKSPACE_ALIAS } from '../index.js'; -import type { ManifestTypes, ManifestWorkspaceView } from '@umbraco-cms/backoffice/extension-registry'; -export const workspaceViews: Array = [ +export const manifests: Array = [ { type: 'workspaceView', alias: 'Umb.WorkspaceView.BlockType.RTE.Settings', name: 'Block List Type Workspace Settings View', - js: () => import('./block-rte-type-workspace-view.element.js'), + element: () => import('./block-rte-type-workspace-view.element.js'), weight: 1000, meta: { label: '#general_settings', @@ -21,5 +20,3 @@ export const workspaceViews: Array = [ ], }, ]; - -export const manifests: Array = [...workspaceViews]; diff --git a/src/packages/block/block-type/components/block-type-custom-view-guide/block-type-custom-view-guide.element.ts b/src/packages/block/block-type/components/block-type-custom-view-guide/block-type-custom-view-guide.element.ts index ef5347f3d5..923339fc71 100644 --- a/src/packages/block/block-type/components/block-type-custom-view-guide/block-type-custom-view-guide.element.ts +++ b/src/packages/block/block-type/components/block-type-custom-view-guide/block-type-custom-view-guide.element.ts @@ -2,11 +2,12 @@ import { UMB_MANIFEST_VIEWER_MODAL } from '../../../modals/manifest-viewer/index import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { html, customElement, state, property, css } from '@umbraco-cms/backoffice/external/lit'; import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; -import { umbExtensionsRegistry, type ManifestBlockEditorCustomView } from '@umbraco-cms/backoffice/extension-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { stringOrStringArrayContains } from '@umbraco-cms/backoffice/utils'; import { UmbExtensionsManifestInitializer } from '@umbraco-cms/backoffice/extension-api'; import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-type'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import type { ManifestBlockEditorCustomView } from '@umbraco-cms/backoffice/block-custom-view'; @customElement('umb-block-type-custom-view-guide') export class UmbBlockTypeCustomViewGuideElement extends UmbLitElement { @@ -88,7 +89,7 @@ export class UmbBlockTypeCustomViewGuideElement extends UmbLitElement { async #generateManifest() { const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - const manifest = { + const manifest: UmbExtensionManifest = { type: 'blockEditorCustomView', alias: 'Local.blockEditorCustomView.' + this.#contentTypeAlias, name: 'Block Editor Custom View for ' + this.#contentTypeName, diff --git a/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts b/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts index cade6212d8..2c6380be9f 100644 --- a/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts +++ b/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts @@ -12,7 +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 type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; import '../block-type-card/index.js'; diff --git a/src/packages/block/block-type/manifests.ts b/src/packages/block/block-type/manifests.ts index 71c165c901..f3edde04ca 100644 --- a/src/packages/block/block-type/manifests.ts +++ b/src/packages/block/block-type/manifests.ts @@ -1,4 +1,3 @@ import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...workspaceManifests]; +export const manifests: Array = [...workspaceManifests]; diff --git a/src/packages/block/block-type/types.ts b/src/packages/block/block-type/types.ts index 4bb332af04..58b67597e8 100644 --- a/src/packages/block/block-type/types.ts +++ b/src/packages/block/block-type/types.ts @@ -1,6 +1,16 @@ -import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry'; -export type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry'; +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; +} export interface UmbBlockTypeGroup { name?: string; key: string; diff --git a/src/packages/block/block-type/workspace/block-type-workspace.context.ts b/src/packages/block/block-type/workspace/block-type-workspace.context.ts index c50aad7dbb..478e9473e9 100644 --- a/src/packages/block/block-type/workspace/block-type-workspace.context.ts +++ b/src/packages/block/block-type/workspace/block-type-workspace.context.ts @@ -1,10 +1,11 @@ -import type { UmbBlockTypeWithGroupKey } from '../types.js'; +import type { UmbBlockTypeBaseModel, 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'; import type { UmbInvariantDatasetWorkspaceContext, UmbRoutableWorkspaceContext, + ManifestWorkspace, } from '@umbraco-cms/backoffice/workspace'; import { UmbSubmittableWorkspaceContextBase, @@ -13,7 +14,6 @@ import { } from '@umbraco-cms/backoffice/workspace'; import { UmbObjectState, appendToFrozenArray } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import type { ManifestWorkspace, UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry'; export class UmbBlockTypeWorkspaceContext extends UmbSubmittableWorkspaceContextBase diff --git a/src/packages/block/block-type/workspace/manifests.ts b/src/packages/block/block-type/workspace/manifests.ts index 3bd2d3aea3..eadd29a17c 100644 --- a/src/packages/block/block-type/workspace/manifests.ts +++ b/src/packages/block/block-type/workspace/manifests.ts @@ -2,9 +2,8 @@ import { UMB_BLOCK_GRID_TYPE_WORKSPACE_ALIAS } from '../../block-grid/workspace/ import { UMB_BLOCK_LIST_TYPE_WORKSPACE_ALIAS } from '../../block-list/workspace/index.js'; import { UMB_BLOCK_RTE_TYPE_WORKSPACE_ALIAS } from '../../block-rte/workspace/index.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { ManifestWorkspaceActions } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'workspaceAction', kind: 'default', diff --git a/src/packages/block/block/conditions/block-entry-show-content-edit.condition.ts b/src/packages/block/block/conditions/block-entry-show-content-edit.condition.ts index 7b0ea76395..31168a7944 100644 --- a/src/packages/block/block/conditions/block-entry-show-content-edit.condition.ts +++ b/src/packages/block/block/conditions/block-entry-show-content-edit.condition.ts @@ -1,5 +1,5 @@ import { UMB_BLOCK_ENTRY_CONTEXT } from '../context/block-entry.context-token.js'; -import type { BlockEntryShowContentEditConditionConfig } from '@umbraco-cms/backoffice/extension-registry'; +import type { BlockEntryShowContentEditConditionConfig } from './types.js'; import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbConditionControllerArguments, UmbExtensionCondition } from '@umbraco-cms/backoffice/extension-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; diff --git a/src/packages/block/block/conditions/block-workspace-has-settings.condition.ts b/src/packages/block/block/conditions/block-workspace-has-settings.condition.ts index 9134668906..d5d495203d 100644 --- a/src/packages/block/block/conditions/block-workspace-has-settings.condition.ts +++ b/src/packages/block/block/conditions/block-workspace-has-settings.condition.ts @@ -1,6 +1,6 @@ import { UMB_BLOCK_WORKSPACE_CONTEXT } from '../workspace/block-workspace.context-token.js'; +import type { BlockWorkspaceHasSettingsConditionConfig } from './types.js'; import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; -import type { BlockWorkspaceHasSettingsConditionConfig } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbConditionControllerArguments, UmbExtensionCondition } from '@umbraco-cms/backoffice/extension-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; diff --git a/src/packages/block/block/conditions/types.ts b/src/packages/block/block/conditions/types.ts new file mode 100644 index 0000000000..90b96ec552 --- /dev/null +++ b/src/packages/block/block/conditions/types.ts @@ -0,0 +1,13 @@ +import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; + +export type BlockWorkspaceHasSettingsConditionConfig = + UmbConditionConfigBase<'Umb.Condition.BlockWorkspaceHasSettings'>; + +export type BlockEntryShowContentEditConditionConfig = + UmbConditionConfigBase<'Umb.Condition.BlockEntryShowContentEdit'>; + +declare global { + interface UmbExtensionConditionMap { + umbBlock: BlockEntryShowContentEditConditionConfig | BlockWorkspaceHasSettingsConditionConfig; + } +} diff --git a/src/packages/block/block/context/block-entries.context-token.ts b/src/packages/block/block/context/block-entries.context-token.ts index 75b2db18d9..e98e9607a0 100644 --- a/src/packages/block/block/context/block-entries.context-token.ts +++ b/src/packages/block/block/context/block-entries.context-token.ts @@ -3,7 +3,7 @@ import type { UmbBlockWorkspaceOriginData } from '../workspace/block-workspace.m import type { UmbBlockEntriesContext } from './block-entries.context.js'; import type { UMB_BLOCK_MANAGER_CONTEXT } from './block-manager.context-token.js'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; export const UMB_BLOCK_ENTRIES_CONTEXT = new UmbContextToken< UmbBlockEntriesContext< diff --git a/src/packages/block/block/context/block-entries.context.ts b/src/packages/block/block/context/block-entries.context.ts index 234c942397..e5cb10d0b0 100644 --- a/src/packages/block/block/context/block-entries.context.ts +++ b/src/packages/block/block/context/block-entries.context.ts @@ -4,10 +4,10 @@ import type { UmbBlockDataObjectModel, UmbBlockManagerContext } from './block-ma import { UMB_BLOCK_ENTRIES_CONTEXT } from './block-entries.context-token.js'; import { type Observable, UmbArrayState, UmbBasicState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; -import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router'; +import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; export abstract class UmbBlockEntriesContext< BlockManagerContextTokenType extends UmbContextToken, diff --git a/src/packages/block/block/context/block-entry.context-token.ts b/src/packages/block/block/context/block-entry.context-token.ts index 93b66d9b29..f913bec728 100644 --- a/src/packages/block/block/context/block-entry.context-token.ts +++ b/src/packages/block/block/context/block-entry.context-token.ts @@ -4,7 +4,7 @@ import type { UMB_BLOCK_ENTRIES_CONTEXT } from './block-entries.context-token.js import type { UmbBlockEntriesContext } from './block-entries.context.js'; import type { UmbBlockEntryContext } from './block-entry.context.js'; import type { UMB_BLOCK_MANAGER_CONTEXT } from './block-manager.context-token.js'; -import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; export const UMB_BLOCK_ENTRY_CONTEXT = new UmbContextToken< diff --git a/src/packages/block/block/context/block-entry.context.ts b/src/packages/block/block/context/block-entry.context.ts index c338636571..e8fddb2ec3 100644 --- a/src/packages/block/block/context/block-entry.context.ts +++ b/src/packages/block/block/context/block-entry.context.ts @@ -15,7 +15,7 @@ import { encodeFilePath } from '@umbraco-cms/backoffice/utils'; import { umbConfirmModal } from '@umbraco-cms/backoffice/modal'; import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; -import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; export abstract class UmbBlockEntryContext< BlockManagerContextTokenType extends UmbContextToken, diff --git a/src/packages/block/block/context/block-manager.context.ts b/src/packages/block/block/context/block-manager.context.ts index f44da55be5..b56ef6ac6f 100644 --- a/src/packages/block/block/context/block-manager.context.ts +++ b/src/packages/block/block/context/block-manager.context.ts @@ -5,12 +5,12 @@ import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbArrayState, UmbBooleanState, UmbClassState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-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'; import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property'; import type { UmbVariantId } from '@umbraco-cms/backoffice/variant'; +import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; /** * diff --git a/src/packages/block/block/index.ts b/src/packages/block/block/index.ts index 0e7cb3f0dc..316fbaa517 100644 --- a/src/packages/block/block/index.ts +++ b/src/packages/block/block/index.ts @@ -1,5 +1,5 @@ export * from './context/index.js'; export * from './modals/index.js'; -export * from './types.js'; +export type * from './types.js'; export * from './validation/index.js'; export * from './workspace/index.js'; diff --git a/src/packages/block/block/manifests.ts b/src/packages/block/block/manifests.ts index 0da4a4f163..9c8803022b 100644 --- a/src/packages/block/block/manifests.ts +++ b/src/packages/block/block/manifests.ts @@ -1,6 +1,5 @@ import { manifests as conditionManifests } from './conditions/manifests.js'; import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...modalManifests, ...workspaceManifests, ...conditionManifests]; +export const manifests: Array = [...modalManifests, ...workspaceManifests, ...conditionManifests]; diff --git a/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts b/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts index d4fbc36096..743d522379 100644 --- a/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts +++ b/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts @@ -1,7 +1,6 @@ -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'; +import type { UmbBlockTypeGroup, UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type'; export interface UmbBlockCatalogueModalData { blocks: Array; diff --git a/src/packages/block/block/modals/manifests.ts b/src/packages/block/block/modals/manifests.ts index ba68ff41ce..621b8f5245 100644 --- a/src/packages/block/block/modals/manifests.ts +++ b/src/packages/block/block/modals/manifests.ts @@ -1,12 +1,8 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.BlockCatalogue', name: 'Block Catalogue Modal', - js: () => import('./block-catalogue/block-catalogue-modal.element.js'), + element: () => import('./block-catalogue/block-catalogue-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/block/block/types.ts b/src/packages/block/block/types.ts index 7c11cec0ac..0df9c79277 100644 --- a/src/packages/block/block/types.ts +++ b/src/packages/block/block/types.ts @@ -1,5 +1,15 @@ -import type { UmbBlockDataType, UmbBlockLayoutBaseModel } from '@umbraco-cms/backoffice/extension-registry'; -export type { UmbBlockDataType, UmbBlockLayoutBaseModel } from '@umbraco-cms/backoffice/extension-registry'; +// 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 UmbBlockValueType { layout: { [key: string]: Array | undefined }; diff --git a/src/packages/block/block/workspace/block-workspace.context.ts b/src/packages/block/block/workspace/block-workspace.context.ts index 19e304d8db..8aae1bb978 100644 --- a/src/packages/block/block/workspace/block-workspace.context.ts +++ b/src/packages/block/block/workspace/block-workspace.context.ts @@ -5,10 +5,10 @@ import { UmbSubmittableWorkspaceContextBase, type UmbRoutableWorkspaceContext, UmbWorkspaceIsNewRedirectController, + type ManifestWorkspace, } from '@umbraco-cms/backoffice/workspace'; import { UmbClassState, UmbObjectState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_MODAL_CONTEXT, type UmbModalContext } from '@umbraco-cms/backoffice/modal'; import { decodeFilePath, UmbReadOnlyVariantStateManager } from '@umbraco-cms/backoffice/utils'; import { diff --git a/src/packages/block/block/workspace/block-workspace.modal-token.ts b/src/packages/block/block/workspace/block-workspace.modal-token.ts index 84e1aed4a5..ab491e185a 100644 --- a/src/packages/block/block/workspace/block-workspace.modal-token.ts +++ b/src/packages/block/block/workspace/block-workspace.modal-token.ts @@ -1,4 +1,4 @@ -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type diff --git a/src/packages/block/block/workspace/manifests.ts b/src/packages/block/block/workspace/manifests.ts index 5a2c47ed35..3922245ff0 100644 --- a/src/packages/block/block/workspace/manifests.ts +++ b/src/packages/block/block/workspace/manifests.ts @@ -1,8 +1,7 @@ import { UMB_BLOCK_WORKSPACE_ALIAS } from './index.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'workspaceAction', kind: 'default', @@ -35,7 +34,7 @@ export const manifests: Array = [ type: 'workspaceView', alias: 'Umb.WorkspaceView.Block.Content', name: 'Block Workspace Content View', - js: () => import('./views/edit/block-workspace-view-edit.element.js'), + element: () => import('./views/edit/block-workspace-view-edit.element.js'), weight: 1000, meta: { label: '#general_content', @@ -60,7 +59,7 @@ export const manifests: Array = [ type: 'workspaceView', alias: 'Umb.WorkspaceView.Block.Settings', name: 'Block Workspace Settings View', - js: () => import('./views/edit/block-workspace-view-edit.element.js'), + element: () => import('./views/edit/block-workspace-view-edit.element.js'), weight: 900, meta: { label: '#general_settings', diff --git a/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-content-no-router.element.ts b/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-content-no-router.element.ts index 1210a73a45..b506099bcc 100644 --- a/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-content-no-router.element.ts +++ b/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-content-no-router.element.ts @@ -5,7 +5,7 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbContentTypeContainerStructureHelper } from '@umbraco-cms/backoffice/content-type'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbPropertyTypeContainerModel } from '@umbraco-cms/backoffice/content-type'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; /** * @element umb-block-workspace-view-edit-content-no-router diff --git a/src/packages/block/block/workspace/views/edit/block-workspace-view-edit.element.ts b/src/packages/block/block/workspace/views/edit/block-workspace-view-edit.element.ts index acc21154e0..14e6f7c65a 100644 --- a/src/packages/block/block/workspace/views/edit/block-workspace-view-edit.element.ts +++ b/src/packages/block/block/workspace/views/edit/block-workspace-view-edit.element.ts @@ -8,7 +8,7 @@ import { UmbContentTypeContainerStructureHelper } from '@umbraco-cms/backoffice/ import type { UmbRoute, UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/backoffice/router'; import { encodeFolderName } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { ManifestWorkspaceView, UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspaceView, UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; @customElement('umb-block-workspace-view-edit') export class UmbBlockWorkspaceViewEditElement extends UmbLitElement implements UmbWorkspaceViewElement { diff --git a/src/packages/block/custom-view/custom-view.element.ts b/src/packages/block/custom-view/custom-view.element.ts index 9ac9fff679..f06fb85444 100644 --- a/src/packages/block/custom-view/custom-view.element.ts +++ b/src/packages/block/custom-view/custom-view.element.ts @@ -1,4 +1,5 @@ -import type { UmbBlockDataType, UmbBlockEditorCustomViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbBlockDataType } from '@umbraco-cms/backoffice/block'; +import type { UmbBlockEditorCustomViewElement } from '@umbraco-cms/backoffice/block-custom-view'; import { css, customElement, html, property } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; diff --git a/src/packages/block/custom-view/manifest.ts b/src/packages/block/custom-view/manifest.ts index 71839f5ac4..46e74f3b3a 100644 --- a/src/packages/block/custom-view/manifest.ts +++ b/src/packages/block/custom-view/manifest.ts @@ -1,6 +1,4 @@ -import type { ManifestBlockEditorCustomView } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestBlockEditorCustomView = { +export const manifest: UmbExtensionManifest = { type: 'blockEditorCustomView', alias: 'Umb.blockEditorCustomView.TestView', name: 'Block Editor Custom View Test', diff --git a/src/packages/block/manifests.ts b/src/packages/block/manifests.ts index ddb46b7ac8..a72748c4f9 100644 --- a/src/packages/block/manifests.ts +++ b/src/packages/block/manifests.ts @@ -4,11 +4,10 @@ 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 { manifest as modalManifest } from './modals/manifest-viewer/manifest.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 = [ +export const manifests: Array = [ //manifest, ...blockManifests, ...blockTypeManifests, diff --git a/src/packages/block/vite.config.ts b/src/packages/block/vite.config.ts index a8a9c55143..47b4244ed0 100644 --- a/src/packages/block/vite.config.ts +++ b/src/packages/block/vite.config.ts @@ -12,6 +12,7 @@ export default defineConfig({ dist, entry: { 'block/index': 'block/index.ts', + 'block-custom-view/index': 'block-custom-view/index.ts', 'block-grid/index': 'block-grid/index.ts', 'block-list/index': 'block-list/index.ts', 'block-rte/index': 'block-rte/index.ts', diff --git a/src/packages/core/modal/common/code-editor/code-editor-modal.element.ts b/src/packages/code-editor/code-editor-modal/code-editor-modal.element.ts similarity index 91% rename from src/packages/core/modal/common/code-editor/code-editor-modal.element.ts rename to src/packages/code-editor/code-editor-modal/code-editor-modal.element.ts index bb7126baaf..93f4b59add 100644 --- a/src/packages/core/modal/common/code-editor/code-editor-modal.element.ts +++ b/src/packages/code-editor/code-editor-modal/code-editor-modal.element.ts @@ -1,9 +1,7 @@ +import type { UmbCodeEditorElement } from '../components/code-editor.element.js'; +import type { UmbCodeEditorModalData, UmbCodeEditorModalValue } from './code-editor-modal.token.js'; import { css, html, ifDefined, customElement, query } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; -import type { UmbCodeEditorElement } from '@umbraco-cms/backoffice/code-editor'; -import type { UmbCodeEditorModalData, UmbCodeEditorModalValue } from '@umbraco-cms/backoffice/modal'; - -import '@umbraco-cms/backoffice/code-editor'; const elementName = 'umb-code-editor-modal'; diff --git a/src/packages/core/modal/common/code-editor/code-editor-modal.stories.ts b/src/packages/code-editor/code-editor-modal/code-editor-modal.stories.ts similarity index 85% rename from src/packages/core/modal/common/code-editor/code-editor-modal.stories.ts rename to src/packages/code-editor/code-editor-modal/code-editor-modal.stories.ts index 37dd470a28..6d25717e21 100644 --- a/src/packages/core/modal/common/code-editor/code-editor-modal.stories.ts +++ b/src/packages/code-editor/code-editor-modal/code-editor-modal.stories.ts @@ -1,8 +1,6 @@ -import '../confirm/confirm-modal.element.js'; - +import type { UmbCodeEditorModalData } from './code-editor-modal.token.js'; import type { Meta, Story } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbCodeEditorModalData } from '@umbraco-cms/backoffice/modal'; export default { title: 'API/Modals/Layouts/Code Editor', diff --git a/src/packages/core/modal/token/code-editor-modal.token.ts b/src/packages/code-editor/code-editor-modal/code-editor-modal.token.ts similarity index 91% rename from src/packages/core/modal/token/code-editor-modal.token.ts rename to src/packages/code-editor/code-editor-modal/code-editor-modal.token.ts index c62514f2ee..d722df2d8d 100644 --- a/src/packages/core/modal/token/code-editor-modal.token.ts +++ b/src/packages/code-editor/code-editor-modal/code-editor-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; // TODO => investigate why exporting CodeEditorLanguage in code-editor barrel // causes the schema generation task to fail... For now, language property below diff --git a/src/packages/code-editor/code-editor-modal/index.ts b/src/packages/code-editor/code-editor-modal/index.ts new file mode 100644 index 0000000000..9c91a9f078 --- /dev/null +++ b/src/packages/code-editor/code-editor-modal/index.ts @@ -0,0 +1 @@ +export * from './code-editor-modal.token.js'; diff --git a/src/packages/code-editor/code-editor-modal/manifests.ts b/src/packages/code-editor/code-editor-modal/manifests.ts new file mode 100644 index 0000000000..027627c4a6 --- /dev/null +++ b/src/packages/code-editor/code-editor-modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.CodeEditor', + name: 'Code Editor Modal', + element: () => import('./code-editor-modal.element.js'), + }, +]; diff --git a/src/packages/code-editor/index.ts b/src/packages/code-editor/index.ts index 60335eb6e1..e3fb6a2f7c 100644 --- a/src/packages/code-editor/index.ts +++ b/src/packages/code-editor/index.ts @@ -1,5 +1,7 @@ export * from './components/index.js'; export * from './models/index.js'; +export * from './code-editor-modal/index.js'; + export type { UmbCodeEditorController } from './code-editor.controller.js'; /** diff --git a/src/packages/code-editor/manifests.ts b/src/packages/code-editor/manifests.ts index 929a1810ad..5992ca6356 100644 --- a/src/packages/code-editor/manifests.ts +++ b/src/packages/code-editor/manifests.ts @@ -1,4 +1,4 @@ import { manifest as propertyEditorManifest } from './property-editor/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as codeEditorModalManifests } from './code-editor-modal/manifests.js'; -export const manifests: Array = [propertyEditorManifest]; +export const manifests: Array = [propertyEditorManifest, ...codeEditorModalManifests]; diff --git a/src/packages/core/auth/manifests.ts b/src/packages/core/auth/manifests.ts index f0f6228203..1faa06c4c7 100644 --- a/src/packages/core/auth/manifests.ts +++ b/src/packages/core/auth/manifests.ts @@ -1,5 +1,4 @@ -import type { ManifestTypes } from '../extension-registry/models/index.js'; import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as providerManifests } from './providers/manifests.js'; -export const manifests: Array = [...modalManifests, ...providerManifests]; +export const manifests: Array = [...modalManifests, ...providerManifests]; diff --git a/src/packages/core/collection/action/collection-action-button.element.ts b/src/packages/core/collection/action/collection-action-button.element.ts index 8462d30f44..8f9e0421a0 100644 --- a/src/packages/core/collection/action/collection-action-button.element.ts +++ b/src/packages/core/collection/action/collection-action-button.element.ts @@ -4,10 +4,11 @@ import { html, customElement, property, state, ifDefined } from '@umbraco-cms/ba import type { UUIButtonState } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; -import type { UmbBackofficeManifestKind, ManifestCollectionAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/collection'; import { createExtensionApi } from '@umbraco-cms/backoffice/extension-api'; -const manifest: UmbBackofficeManifestKind = { +const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.CollectionAction.Button', matchKind: 'button', diff --git a/src/packages/core/collection/collection-view.manager.test.ts b/src/packages/core/collection/collection-view.manager.test.ts index 040d371be4..10566af70d 100644 --- a/src/packages/core/collection/collection-view.manager.test.ts +++ b/src/packages/core/collection/collection-view.manager.test.ts @@ -1,4 +1,4 @@ -import type { ManifestCollectionView } from '../extension-registry/models/index.js'; +import type { ManifestCollectionView } from './extensions/index.js'; import { umbExtensionsRegistry } from '../extension-registry/index.js'; import { UmbCollectionViewManager } from './collection-view.manager.js'; import { expect } from '@open-wc/testing'; diff --git a/src/packages/core/collection/collection-view.manager.ts b/src/packages/core/collection/collection-view.manager.ts index d160e72c3e..6574b3b687 100644 --- a/src/packages/core/collection/collection-view.manager.ts +++ b/src/packages/core/collection/collection-view.manager.ts @@ -1,8 +1,8 @@ +import type { ManifestCollectionView } from './extensions/index.js'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import { UmbExtensionsManifestInitializer, createExtensionElement } from '@umbraco-cms/backoffice/extension-api'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UmbArrayState, UmbObjectState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; diff --git a/src/packages/core/collection/collection.element.ts b/src/packages/core/collection/collection.element.ts index 83e1b4accb..83f6710f28 100644 --- a/src/packages/core/collection/collection.element.ts +++ b/src/packages/core/collection/collection.element.ts @@ -1,7 +1,7 @@ import type { UmbCollectionConfiguration } from './types.js'; +import type { ManifestCollection } from './extensions/index.js'; import { customElement, property } from '@umbraco-cms/backoffice/external/lit'; import { UmbExtensionElementAndApiSlotElementBase } from '@umbraco-cms/backoffice/extension-registry'; -import type { ManifestCollection } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; const elementName = 'umb-collection'; diff --git a/src/packages/core/collection/components/collection-view-bundle.element.ts b/src/packages/core/collection/components/collection-view-bundle.element.ts index 9936840c15..ff873f9671 100644 --- a/src/packages/core/collection/components/collection-view-bundle.element.ts +++ b/src/packages/core/collection/components/collection-view-bundle.element.ts @@ -1,12 +1,12 @@ import type { UmbDefaultCollectionContext } from '../default/index.js'; import { UMB_COLLECTION_CONTEXT } from '../default/index.js'; import type { UmbCollectionLayoutConfiguration } from '../types.js'; +import type { ManifestCollectionView } from '../extensions/index.js'; import { css, html, customElement, state, nothing, repeat, query } from '@umbraco-cms/backoffice/external/lit'; import { observeMultiple } from '@umbraco-cms/backoffice/observable-api'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; import type { UUIPopoverContainerElement } from '@umbraco-cms/backoffice/external/uui'; interface UmbCollectionViewLayout { @@ -159,6 +159,7 @@ export class UmbCollectionViewBundleElement extends UmbLitElement { :host { --uui-button-content-align: left; --uui-menu-item-flat-structure: 1; + display: contents; } .filter-dropdown { diff --git a/src/packages/core/collection/dashboards/dashboard-collection.element.ts b/src/packages/core/collection/dashboards/dashboard-collection.element.ts deleted file mode 100644 index 21c6078aed..0000000000 --- a/src/packages/core/collection/dashboards/dashboard-collection.element.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; -import type { ManifestDashboardCollection } from '@umbraco-cms/backoffice/extension-registry'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; - -@customElement('umb-dashboard-collection') -export class UmbDashboardCollectionElement extends UmbLitElement { - public manifest!: ManifestDashboardCollection; - - // TODO: figure out what collection to render - override render() { - return html``; - } - - static override styles = [ - css` - :host { - display: flex; - flex-direction: column; - box-sizing: border-box; - gap: var(--uui-size-space-5); - height: 100%; - } - `, - ]; -} - -export default UmbDashboardCollectionElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-dashboard-collection': UmbDashboardCollectionElement; - } -} diff --git a/src/packages/core/collection/dashboards/dashboard-collection.stories.ts b/src/packages/core/collection/dashboards/dashboard-collection.stories.ts deleted file mode 100644 index e052315819..0000000000 --- a/src/packages/core/collection/dashboards/dashboard-collection.stories.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { UmbDashboardCollectionElement } from './dashboard-collection.element.js'; -import type { Meta, Story } from '@storybook/web-components'; -import { html } from '@umbraco-cms/backoffice/external/lit'; - -import './dashboard-collection.element.js'; - -export default { - title: 'Dashboards/Media Management', - component: 'umb-dashboard-collection', - id: 'umb-dashboard-collection', -} as Meta; - -export const AAAOverview: Story = () => - html` `; -AAAOverview.storyName = 'Overview'; diff --git a/src/packages/core/collection/default/collection-default.context.ts b/src/packages/core/collection/default/collection-default.context.ts index 1c279f5019..6c30b8b93b 100644 --- a/src/packages/core/collection/default/collection-default.context.ts +++ b/src/packages/core/collection/default/collection-default.context.ts @@ -8,6 +8,7 @@ import type { } from '../types.js'; import type { UmbCollectionFilterModel } from '../collection-filter-model.interface.js'; import type { UmbCollectionRepository } from '../repository/collection-repository.interface.js'; +import type { ManifestCollection } from '../extensions/index.js'; import { UMB_COLLECTION_CONTEXT } from './collection-default.context-token.js'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UmbArrayState, UmbNumberState, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; @@ -15,7 +16,7 @@ import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api'; import { UmbSelectionManager, UmbPaginationManager } from '@umbraco-cms/backoffice/utils'; -import type { ManifestCollection, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { diff --git a/src/packages/core/collection/default/collection-default.element.ts b/src/packages/core/collection/default/collection-default.element.ts index 2800f998b2..3b279f33be 100644 --- a/src/packages/core/collection/default/collection-default.element.ts +++ b/src/packages/core/collection/default/collection-default.element.ts @@ -4,10 +4,10 @@ import { css, html, customElement, state } from '@umbraco-cms/backoffice/externa 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 { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; -const manifest: UmbBackofficeManifestKind = { +const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.Collection.Default', matchKind: 'default', diff --git a/src/packages/core/extension-registry/models/collection-action.model.ts b/src/packages/core/collection/extensions/collection-action.extension.ts similarity index 62% rename from src/packages/core/extension-registry/models/collection-action.model.ts rename to src/packages/core/collection/extensions/collection-action.extension.ts index af178c67bd..8d34fec28c 100644 --- a/src/packages/core/extension-registry/models/collection-action.model.ts +++ b/src/packages/core/collection/extensions/collection-action.extension.ts @@ -1,4 +1,3 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; /** @@ -6,7 +5,9 @@ import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbr * For example for content you may wish to create a new document etc */ // TODO: create interface for API -export interface ManifestCollectionAction extends ManifestElementAndApi, ManifestWithDynamicConditions { +export interface ManifestCollectionAction + extends ManifestElementAndApi, + ManifestWithDynamicConditions { type: 'collectionAction'; meta: MetaCollectionAction; } @@ -15,3 +16,9 @@ export interface MetaCollectionAction { label: string; href?: string; } + +declare global { + interface UmbExtensionManifestMap { + umbCollectionAction: ManifestCollectionAction; + } +} diff --git a/src/packages/core/extension-registry/models/collection-view.model.ts b/src/packages/core/collection/extensions/collection-view.extension.ts similarity index 83% rename from src/packages/core/extension-registry/models/collection-view.model.ts rename to src/packages/core/collection/extensions/collection-view.extension.ts index 5f1e3d3ba3..9a5bcf8784 100644 --- a/src/packages/core/extension-registry/models/collection-view.model.ts +++ b/src/packages/core/collection/extensions/collection-view.extension.ts @@ -1,7 +1,6 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { ManifestElement, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; -export interface ManifestCollectionView extends ManifestElement, ManifestWithDynamicConditions { +export interface ManifestCollectionView extends ManifestElement, ManifestWithDynamicConditions { type: 'collectionView'; meta: MetaCollectionView; } @@ -37,3 +36,9 @@ export interface ConditionsCollectionView { */ entityType: string; } + +declare global { + interface UmbExtensionManifestMap { + umbCollectionView: ManifestCollectionView; + } +} diff --git a/src/packages/core/extension-registry/models/collection.models.ts b/src/packages/core/collection/extensions/collection.extension.ts similarity index 50% rename from src/packages/core/extension-registry/models/collection.models.ts rename to src/packages/core/collection/extensions/collection.extension.ts index c3a5b4e16b..eb1edbdf42 100644 --- a/src/packages/core/extension-registry/models/collection.models.ts +++ b/src/packages/core/collection/extensions/collection.extension.ts @@ -1,7 +1,8 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; -export interface ManifestCollection extends ManifestElementAndApi, ManifestWithDynamicConditions { +export interface ManifestCollection + extends ManifestElementAndApi, + ManifestWithDynamicConditions { type: 'collection'; meta: MetaCollection; } @@ -9,3 +10,9 @@ export interface ManifestCollection extends ManifestElementAndApi, ManifestWithD export interface MetaCollection { repositoryAlias: string; } + +declare global { + interface UmbExtensionManifestMap { + umbCollection: ManifestCollection; + } +} diff --git a/src/packages/core/collection/extensions/index.ts b/src/packages/core/collection/extensions/index.ts new file mode 100644 index 0000000000..d1ca9ecbb1 --- /dev/null +++ b/src/packages/core/collection/extensions/index.ts @@ -0,0 +1,3 @@ +export * from './collection-action.extension.js'; +export * from './collection-view.extension.js'; +export * from './collection.extension.js'; diff --git a/src/packages/core/collection/index.ts b/src/packages/core/collection/index.ts index e3b5fac4d8..ba4eedfb8a 100644 --- a/src/packages/core/collection/index.ts +++ b/src/packages/core/collection/index.ts @@ -10,14 +10,10 @@ export * from './collection-item-picker-modal/index.js'; export * from './default/collection-default.context.js'; export * from './default/collection-default.context-token.js'; export * from './collection-filter-model.interface.js'; +export * from './types.js'; export { UMB_COLLECTION_ALIAS_CONDITION } from './collection-alias.manifest.js'; export { UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION } from './collection-bulk-action-permission.manifest.js'; export { UmbCollectionActionElement, UmbCollectionActionBase } from './action/index.js'; export type { UmbCollectionDataSource, UmbCollectionRepository } from './repository/index.js'; -export type { - UmbCollectionBulkActionPermissions, - UmbCollectionConfiguration, - UmbCollectionColumnConfiguration, -} from './types.js'; diff --git a/src/packages/core/collection/manifests.ts b/src/packages/core/collection/manifests.ts index 9d997120fa..b0bff148e3 100644 --- a/src/packages/core/collection/manifests.ts +++ b/src/packages/core/collection/manifests.ts @@ -1,5 +1,7 @@ import { manifest as collectionAliasCondition } from './collection-alias.manifest.js'; import { manifest as collectionBulkActionPermissionCondition } from './collection-bulk-action-permission.manifest.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [collectionAliasCondition, collectionBulkActionPermissionCondition]; +export const manifests: Array = [ + collectionAliasCondition, + collectionBulkActionPermissionCondition, +]; diff --git a/src/packages/core/collection/types.ts b/src/packages/core/collection/types.ts index 822d309abe..82eceb01ec 100644 --- a/src/packages/core/collection/types.ts +++ b/src/packages/core/collection/types.ts @@ -1,7 +1,9 @@ +import type { ManifestCollection } from './extensions/index.js'; 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 type * from './extensions/index.js'; + export interface UmbCollectionBulkActionPermissions { allowBulkCopy: boolean; allowBulkDelete: boolean; @@ -47,3 +49,5 @@ export interface UmbCollectionContext { items: Observable; totalItems: Observable; } + +export * from './extensions/index.js'; diff --git a/src/packages/core/components/header-app/header-app-button.element.ts b/src/packages/core/components/header-app/header-app-button.element.ts index 6e77996918..86cb881ca8 100644 --- a/src/packages/core/components/header-app/header-app-button.element.ts +++ b/src/packages/core/components/header-app/header-app-button.element.ts @@ -1,14 +1,11 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit'; import { css, html, customElement, ifDefined } from '@umbraco-cms/backoffice/external/lit'; -import type { - ManifestHeaderAppButtonKind, - UmbBackofficeManifestKind, -} from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestHeaderAppButtonKind, UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -const manifest: UmbBackofficeManifestKind = { +const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.Button', matchKind: 'button', diff --git a/src/packages/core/content-type/workspace/views/design/content-type-design-editor-tab.element.ts b/src/packages/core/content-type/workspace/views/design/content-type-design-editor-tab.element.ts index ba77d8394a..3b18576327 100644 --- a/src/packages/core/content-type/workspace/views/design/content-type-design-editor-tab.element.ts +++ b/src/packages/core/content-type/workspace/views/design/content-type-design-editor-tab.element.ts @@ -6,7 +6,7 @@ import { UmbContentTypeContainerStructureHelper } from '@umbraco-cms/backoffice/ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbContentTypeModel, UmbPropertyTypeContainerModel } from '@umbraco-cms/backoffice/content-type'; import type { UmbSorterConfig } from '@umbraco-cms/backoffice/sorter'; diff --git a/src/packages/core/content-type/workspace/views/design/content-type-design-editor.element.ts b/src/packages/core/content-type/workspace/views/design/content-type-design-editor.element.ts index 57b0ce86b4..4405cc247e 100644 --- a/src/packages/core/content-type/workspace/views/design/content-type-design-editor.element.ts +++ b/src/packages/core/content-type/workspace/views/design/content-type-design-editor.element.ts @@ -17,7 +17,7 @@ import type { UmbRoute, UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from import type { ManifestWorkspaceViewContentTypeDesignEditorKind, UmbWorkspaceViewElement, -} from '@umbraco-cms/backoffice/extension-registry'; +} from '@umbraco-cms/backoffice/workspace'; import type { UmbConfirmModalData } from '@umbraco-cms/backoffice/modal'; import { UMB_MODAL_MANAGER_CONTEXT, umbConfirmModal } from '@umbraco-cms/backoffice/modal'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; diff --git a/src/packages/core/content-type/workspace/views/design/manifest.ts b/src/packages/core/content-type/workspace/views/design/manifest.ts index 86a9442024..41b28a6efb 100644 --- a/src/packages/core/content-type/workspace/views/design/manifest.ts +++ b/src/packages/core/content-type/workspace/views/design/manifest.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const contentTypeDesignEditorManifest: UmbBackofficeManifestKind = { +export const contentTypeDesignEditorManifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.WorkspaceView.ContentTypeDesignEditor', matchKind: 'contentTypeDesignEditor', diff --git a/src/packages/core/content/workspace/views/edit/content-editor.element.ts b/src/packages/core/content/workspace/views/edit/content-editor.element.ts index 87db2c05b8..e05b60aa90 100644 --- a/src/packages/core/content/workspace/views/edit/content-editor.element.ts +++ b/src/packages/core/content/workspace/views/edit/content-editor.element.ts @@ -10,7 +10,7 @@ import { UmbContentTypeContainerStructureHelper } from '@umbraco-cms/backoffice/ import type { UmbRoute, UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/backoffice/router'; import { encodeFolderName } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import { UMB_PROPERTY_STRUCTURE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import './content-editor-tab.element.js'; diff --git a/src/packages/core/content/workspace/views/edit/manifests.ts b/src/packages/core/content/workspace/views/edit/manifests.ts index caa2ec28d8..cc227ab2f7 100644 --- a/src/packages/core/content/workspace/views/edit/manifests.ts +++ b/src/packages/core/content/workspace/views/edit/manifests.ts @@ -1,7 +1,7 @@ import { manifests as conditionsManifests } from './conditions/manifests.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -const contentEditorManifest: UmbBackofficeManifestKind = { +const contentEditorManifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.WorkspaceView.ContentEditor', matchKind: 'contentEditor', diff --git a/src/packages/core/culture/repository/manifests.ts b/src/packages/core/culture/repository/manifests.ts index 2862e1e2ba..1dc1ce634d 100644 --- a/src/packages/core/culture/repository/manifests.ts +++ b/src/packages/core/culture/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_CULTURE_REPOSITORY_ALIAS = 'Umb.Repository.Culture'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_CULTURE_REPOSITORY_ALIAS, - name: 'Cultures Repository', - api: () => import('./culture.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_CULTURE_REPOSITORY_ALIAS, + name: 'Cultures Repository', + api: () => import('./culture.repository.js'), + }, +]; diff --git a/src/packages/core/debug/modals/debug/debug-modal.element.ts b/src/packages/core/debug/debug-modal/debug-modal.element.ts similarity index 92% rename from src/packages/core/debug/modals/debug/debug-modal.element.ts rename to src/packages/core/debug/debug-modal/debug-modal.element.ts index 61837a12e1..1c826202cc 100644 --- a/src/packages/core/debug/modals/debug/debug-modal.element.ts +++ b/src/packages/core/debug/debug-modal/debug-modal.element.ts @@ -1,7 +1,7 @@ +import type { UmbContextDebuggerModalData } from './debug-modal.token.js'; import { css, customElement, html } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { UmbContextDebuggerModalData } from '@umbraco-cms/backoffice/modal'; @customElement('umb-context-debugger-modal') export default class UmbContextDebuggerModalElement extends UmbModalBaseElement { diff --git a/src/packages/core/modal/token/debug-modal.token.ts b/src/packages/core/debug/debug-modal/debug-modal.token.ts similarity index 83% rename from src/packages/core/modal/token/debug-modal.token.ts rename to src/packages/core/debug/debug-modal/debug-modal.token.ts index 9e4c9060b5..391c76d90a 100644 --- a/src/packages/core/modal/token/debug-modal.token.ts +++ b/src/packages/core/debug/debug-modal/debug-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '../../modal/token/modal-token.js'; import type { TemplateResult } from '@umbraco-cms/backoffice/external/lit'; export interface UmbContextDebuggerModalData { diff --git a/src/packages/core/debug/debug-modal/index.ts b/src/packages/core/debug/debug-modal/index.ts new file mode 100644 index 0000000000..6ae52d2f38 --- /dev/null +++ b/src/packages/core/debug/debug-modal/index.ts @@ -0,0 +1 @@ +export * from './debug-modal.token.js'; diff --git a/src/packages/core/debug/debug-modal/manifests.ts b/src/packages/core/debug/debug-modal/manifests.ts new file mode 100644 index 0000000000..b87b948afa --- /dev/null +++ b/src/packages/core/debug/debug-modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.ContextDebugger', + name: 'Context Debugger Modal', + element: () => import('./debug-modal.element.js'), + }, +]; diff --git a/src/packages/core/debug/debug.element.ts b/src/packages/core/debug/debug.element.ts index dda8a9297c..418b07fbc9 100644 --- a/src/packages/core/debug/debug.element.ts +++ b/src/packages/core/debug/debug.element.ts @@ -1,7 +1,8 @@ +import { UMB_CONTEXT_DEBUGGER_MODAL } from './debug-modal/index.js'; import { css, customElement, html, map, nothing, property, state, when } from '@umbraco-cms/backoffice/external/lit'; import { contextData, UmbContextDebugRequest } from '@umbraco-cms/backoffice/context-api'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_CONTEXT_DEBUGGER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { UmbDebugContextData, UmbDebugContextItemData } from '@umbraco-cms/backoffice/context-api'; import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; diff --git a/src/packages/core/debug/index.ts b/src/packages/core/debug/index.ts index 3aae472235..a542c9a49e 100644 --- a/src/packages/core/debug/index.ts +++ b/src/packages/core/debug/index.ts @@ -1,3 +1,4 @@ -export * from './debug.element.js'; export * from './context-debug.controller.js'; +export * from './debug-modal/index.js'; +export * from './debug.element.js'; export * from './manifests.js'; diff --git a/src/packages/core/debug/manifests.ts b/src/packages/core/debug/manifests.ts index cefecbe8b5..b075c82b50 100644 --- a/src/packages/core/debug/manifests.ts +++ b/src/packages/core/debug/manifests.ts @@ -1,12 +1,3 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as debugModalManifests } from './debug-modal/manifests.js'; -const modals: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.ContextDebugger', - name: 'Context Debugger Modal', - element: () => import('./modals/debug/debug-modal.element.js'), - }, -]; - -export const manifests: Array = [...modals]; +export const manifests: Array = [...debugModalManifests]; diff --git a/src/packages/core/entity-action/common/delete/delete.action.kind.ts b/src/packages/core/entity-action/common/delete/delete.action.kind.ts index 12fb21ad02..07995746e6 100644 --- a/src/packages/core/entity-action/common/delete/delete.action.kind.ts +++ b/src/packages/core/entity-action/common/delete/delete.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.Delete', matchKind: 'delete', @@ -16,6 +16,7 @@ export const manifest: UmbBackofficeManifestKind = { meta: { icon: 'icon-trash', label: '#actions_delete', + additionalOptions: true, itemRepositoryAlias: '', detailRepositoryAlias: '', }, diff --git a/src/packages/core/entity-action/common/duplicate/duplicate.action.kind.ts b/src/packages/core/entity-action/common/duplicate/duplicate.action.kind.ts index 0c5fdc11ca..15ce0cde5e 100644 --- a/src/packages/core/entity-action/common/duplicate/duplicate.action.kind.ts +++ b/src/packages/core/entity-action/common/duplicate/duplicate.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.Duplicate', matchKind: 'duplicate', @@ -16,6 +16,7 @@ export const manifest: UmbBackofficeManifestKind = { meta: { icon: 'icon-enter', label: '#actions_copy', + additionalOptions: true, treeRepositoryAlias: '', duplicateRepositoryAlias: '', }, diff --git a/src/packages/core/entity-action/common/duplicate/manifests.ts b/src/packages/core/entity-action/common/duplicate/manifests.ts index 33f1e8086a..e678aa24df 100644 --- a/src/packages/core/entity-action/common/duplicate/manifests.ts +++ b/src/packages/core/entity-action/common/duplicate/manifests.ts @@ -1,4 +1,4 @@ import { manifest as duplicateKindManifest } from './duplicate.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [duplicateKindManifest]; +export const manifests: Array = [duplicateKindManifest]; diff --git a/src/packages/core/entity-action/default/default.action.kind.ts b/src/packages/core/entity-action/default/default.action.kind.ts index b75aec9476..5a6419fb6a 100644 --- a/src/packages/core/entity-action/default/default.action.kind.ts +++ b/src/packages/core/entity-action/default/default.action.kind.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST: UmbBackofficeManifestKind = { +export const UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.Default', matchKind: 'default', diff --git a/src/packages/core/entity-action/default/entity-action.element.ts b/src/packages/core/entity-action/default/entity-action.element.ts index cf097b7010..af65c5896e 100644 --- a/src/packages/core/entity-action/default/entity-action.element.ts +++ b/src/packages/core/entity-action/default/entity-action.element.ts @@ -60,11 +60,11 @@ export class UmbEntityActionDefaultElement< } override render() { + const label = this.manifest?.meta.label ? this.localize.string(this.manifest.meta.label) : this.manifest?.name; + return html` diff --git a/src/packages/core/entity-action/default/manifests.ts b/src/packages/core/entity-action/default/manifests.ts index 3cb64a6f47..8d8ea584a1 100644 --- a/src/packages/core/entity-action/default/manifests.ts +++ b/src/packages/core/entity-action/default/manifests.ts @@ -1,4 +1,4 @@ import { manifest as defaultKindManifest } from './default.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [defaultKindManifest]; +export const manifests: Array = [defaultKindManifest]; diff --git a/src/packages/core/entity-action/manifests.ts b/src/packages/core/entity-action/manifests.ts index 3deded0b21..aeaaceafc0 100644 --- a/src/packages/core/entity-action/manifests.ts +++ b/src/packages/core/entity-action/manifests.ts @@ -1,9 +1,9 @@ import { manifests as defaultEntityActionManifests } from './default/manifests.js'; import { manifests as deleteEntityActionManifests } from './common/delete/manifests.js'; import { manifests as duplicateEntityActionManifests } from './common/duplicate/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...defaultEntityActionManifests, ...deleteEntityActionManifests, ...duplicateEntityActionManifests, diff --git a/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts b/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts index 0a2d16168d..f5b5d40026 100644 --- a/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts +++ b/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityBulkAction.DuplicateTo', matchKind: 'duplicateTo', diff --git a/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts b/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts index 8f6bf64f0e..ee7e6bd872 100644 --- a/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts +++ b/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts @@ -1,4 +1,4 @@ import { manifest as duplicateToKindManifest } from './duplicate-to.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [duplicateToKindManifest]; +export const manifests: Array = [duplicateToKindManifest]; diff --git a/src/packages/core/entity-bulk-action/common/move-to/manifests.ts b/src/packages/core/entity-bulk-action/common/move-to/manifests.ts index 701878051e..31696b57eb 100644 --- a/src/packages/core/entity-bulk-action/common/move-to/manifests.ts +++ b/src/packages/core/entity-bulk-action/common/move-to/manifests.ts @@ -1,4 +1,4 @@ import { manifest as moveToKindManifest } from './move-to.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [moveToKindManifest]; +export const manifests: Array = [moveToKindManifest]; diff --git a/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts b/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts index a26a2d7302..ccc6d49212 100644 --- a/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts +++ b/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityBulkAction.MoveTo', matchKind: 'moveTo', diff --git a/src/packages/core/entity-bulk-action/common/trash/manifests.ts b/src/packages/core/entity-bulk-action/common/trash/manifests.ts index f48d4f6879..46ec59d132 100644 --- a/src/packages/core/entity-bulk-action/common/trash/manifests.ts +++ b/src/packages/core/entity-bulk-action/common/trash/manifests.ts @@ -1,4 +1,4 @@ import { manifest as trashKindManifest } from './trash.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [trashKindManifest]; +export const manifests: Array = [trashKindManifest]; diff --git a/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts b/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts index 5cec1325a1..2c36d6dc35 100644 --- a/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts +++ b/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityBulkAction.Trash', matchKind: 'trash', diff --git a/src/packages/core/entity-bulk-action/default/default.action.kind.ts b/src/packages/core/entity-bulk-action/default/default.action.kind.ts index 2b13205e93..c7605b0d64 100644 --- a/src/packages/core/entity-bulk-action/default/default.action.kind.ts +++ b/src/packages/core/entity-bulk-action/default/default.action.kind.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST: UmbBackofficeManifestKind = { +export const UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityBulkAction.Default', matchKind: 'default', diff --git a/src/packages/core/entity-bulk-action/default/manifests.ts b/src/packages/core/entity-bulk-action/default/manifests.ts index 3cb64a6f47..8d8ea584a1 100644 --- a/src/packages/core/entity-bulk-action/default/manifests.ts +++ b/src/packages/core/entity-bulk-action/default/manifests.ts @@ -1,4 +1,4 @@ import { manifest as defaultKindManifest } from './default.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [defaultKindManifest]; +export const manifests: Array = [defaultKindManifest]; diff --git a/src/packages/core/entity-bulk-action/manifests.ts b/src/packages/core/entity-bulk-action/manifests.ts index 306185ef77..57fab22a3d 100644 --- a/src/packages/core/entity-bulk-action/manifests.ts +++ b/src/packages/core/entity-bulk-action/manifests.ts @@ -2,9 +2,9 @@ import { manifests as defaultEntityBulkActionManifests } from './default/manifes 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'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...defaultEntityBulkActionManifests, ...duplicateEntityBulkActionManifests, ...moveToEntityBulkActionManifests, diff --git a/src/packages/core/extension-registry/collection/manifests.ts b/src/packages/core/extension-registry/collection/manifests.ts deleted file mode 100644 index 68b0f602fd..0000000000 --- a/src/packages/core/extension-registry/collection/manifests.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { UMB_EXTENSION_COLLECTION_REPOSITORY_ALIAS } from './repository/index.js'; -import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; -import { manifests as collectionViewManifests } from './views/manifests.js'; -import type { ManifestCollection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const UMB_EXTENSION_COLLECTION_ALIAS = 'Umb.Collection.Extension'; - -const collectionManifest: ManifestCollection = { - type: 'collection', - kind: 'default', - alias: UMB_EXTENSION_COLLECTION_ALIAS, - name: 'Extension Collection', - element: () => import('./extension-collection.element.js'), - meta: { - repositoryAlias: UMB_EXTENSION_COLLECTION_REPOSITORY_ALIAS, - }, -}; - -export const manifests: Array = [ - collectionManifest, - ...collectionRepositoryManifests, - ...collectionViewManifests, -]; diff --git a/src/packages/core/extension-registry/collection/repository/manifests.ts b/src/packages/core/extension-registry/collection/repository/manifests.ts deleted file mode 100644 index 298967e546..0000000000 --- a/src/packages/core/extension-registry/collection/repository/manifests.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const UMB_EXTENSION_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.ExtensionCollection'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_EXTENSION_COLLECTION_REPOSITORY_ALIAS, - name: 'Extension Collection Repository', - api: () => import('./extension-collection.repository.js'), -}; - -export const manifests: Array = [repository]; diff --git a/src/packages/core/extension-registry/collection/views/manifests.ts b/src/packages/core/extension-registry/collection/views/manifests.ts deleted file mode 100644 index fd6ee1d9f1..0000000000 --- a/src/packages/core/extension-registry/collection/views/manifests.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const UMB_EXTENSION_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Extension.Table'; - -const tableCollectionView: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_EXTENSION_TABLE_COLLECTION_VIEW_ALIAS, - name: 'Extension Table Collection View', - element: () => import('./table/extension-table-collection-view.element.js'), - meta: { - label: 'Table', - icon: 'icon-list', - pathName: 'table', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Extension', - }, - ], -}; - -export const manifests: Array = [tableCollectionView]; diff --git a/src/packages/core/extension-registry/conditions/index.ts b/src/packages/core/extension-registry/conditions/index.ts index debe3bb4f9..6060ffdc81 100644 --- a/src/packages/core/extension-registry/conditions/index.ts +++ b/src/packages/core/extension-registry/conditions/index.ts @@ -1,4 +1,4 @@ export { UmbSwitchCondition } from './switch.condition.js'; export { UmbConditionBase } from './condition-base.controller.js'; -export type { BlockEntryShowContentEditConditionConfig, BlockWorkspaceHasSettingsConditionConfig } from './types.js'; +export type { ConditionTypes } from './types.js'; diff --git a/src/packages/core/extension-registry/conditions/manifests.ts b/src/packages/core/extension-registry/conditions/manifests.ts index 48b22385bb..5041adc1f5 100644 --- a/src/packages/core/extension-registry/conditions/manifests.ts +++ b/src/packages/core/extension-registry/conditions/manifests.ts @@ -1,12 +1,3 @@ -import type { ManifestTypes } from '../models/index.js'; -import { manifest as menuAliasConditionManifest } from './menu-alias.condition.js'; -import { manifest as multipleAppLanguagesConditionManifest } from './multiple-app-languages.condition.js'; -import { manifest as sectionAliasConditionManifest } from './section-alias.condition.js'; import { manifest as switchConditionManifest } from './switch.condition.js'; -export const manifests: Array = [ - menuAliasConditionManifest, - multipleAppLanguagesConditionManifest, - sectionAliasConditionManifest, - switchConditionManifest, -]; +export const manifests: Array = [switchConditionManifest]; diff --git a/src/packages/core/extension-registry/conditions/types.ts b/src/packages/core/extension-registry/conditions/types.ts index 2c4296cae0..17c157d469 100644 --- a/src/packages/core/extension-registry/conditions/types.ts +++ b/src/packages/core/extension-registry/conditions/types.ts @@ -1,40 +1,43 @@ import type { CollectionAliasConditionConfig } from '../../collection/collection-alias.manifest.js'; import type { CollectionBulkActionPermissionConditionConfig } from '../../collection/collection-bulk-action-permission.manifest.js'; -import type { UmbSectionUserPermissionConditionConfig } from '../../section/conditions/index.js'; -import type { SectionAliasConditionConfig } from './section-alias.condition.js'; import type { SwitchConditionConfig } from './switch.condition.js'; -import type { UmbMultipleAppLanguageConditionConfig } from './multiple-app-languages.condition.js'; -import type { - WorkspaceAliasConditionConfig, - WorkspaceEntityTypeConditionConfig, - WorkspaceContentTypeAliasConditionConfig, -} from '@umbraco-cms/backoffice/workspace'; import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; -import type { UmbDocumentUserPermissionConditionConfig } from '@umbraco-cms/backoffice/document'; - -/* TODO: in theory should't the core package import from other packages. -Are there any other way we can do this? -Niels: Sadly I don't see any other solutions currently. But are very open for ideas :-) now that I think about it maybe there is some ability to extend a global type, similar to the 'declare global' trick we use on Elements. -*/ - -// temp location to avoid circular dependencies -export type BlockWorkspaceHasSettingsConditionConfig = - UmbConditionConfigBase<'Umb.Condition.BlockWorkspaceHasSettings'>; - -export type BlockEntryShowContentEditConditionConfig = - UmbConditionConfigBase<'Umb.Condition.BlockEntryShowContentEdit'>; export type ConditionTypes = - | BlockEntryShowContentEditConditionConfig - | BlockWorkspaceHasSettingsConditionConfig | CollectionAliasConditionConfig | CollectionBulkActionPermissionConditionConfig - | SectionAliasConditionConfig | SwitchConditionConfig - | UmbConditionConfigBase - | UmbDocumentUserPermissionConditionConfig - | UmbMultipleAppLanguageConditionConfig - | UmbSectionUserPermissionConditionConfig - | WorkspaceAliasConditionConfig - | WorkspaceContentTypeAliasConditionConfig - | WorkspaceEntityTypeConditionConfig; + | UmbConditionConfigBase; + +type UnionOfProperties = T extends object ? T[keyof T] : never; + +declare global { + /** + * This global type allows to declare condition types from its own module. + * @example + ```js + declare global { + interface UmbExtensionConditionMap { + My_UNIQUE_CONDITION_NAME: MyExtensionConditionType; + } + } + ``` + If you have multiple types, you can declare them in this way: + ```js + declare global { + interface UmbExtensionConditionMap { + My_UNIQUE_CONDITION_NAME: MyExtensionConditionTypeA | MyExtensionConditionTypeB; + } + } + ``` + */ + interface UmbExtensionConditionMap { + UMB_CORE: ConditionTypes; + } + + /** + * This global type provides a union of all declared manifest types. + * If this is a local package that declares additional Manifest Types, then these will also be included in this union. + */ + type UmbExtensionCondition = UnionOfProperties; +} diff --git a/src/packages/core/extension-registry/interfaces/index.ts b/src/packages/core/extension-registry/interfaces/index.ts index 593ea53bc5..d6a9ee345c 100644 --- a/src/packages/core/extension-registry/interfaces/index.ts +++ b/src/packages/core/extension-registry/interfaces/index.ts @@ -1,4 +1,3 @@ -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 './file-upload-preview.interface.js'; @@ -8,4 +7,3 @@ export * from './property-editor-ui-element.interface.js'; export * from './section-element.interface.js'; export * from './section-sidebar-app-element.interface.js'; export * from './section-view-element.interface.js'; -export * from './workspace-view-element.interface.js'; diff --git a/src/packages/core/extension-registry/interfaces/workspace-view-element.interface.ts b/src/packages/core/extension-registry/interfaces/workspace-view-element.interface.ts deleted file mode 100644 index 6eb9261839..0000000000 --- a/src/packages/core/extension-registry/interfaces/workspace-view-element.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { ManifestWorkspaceView } from '../models/index.js'; - -export interface UmbWorkspaceViewElement extends HTMLElement { - manifest?: ManifestWorkspaceView; -} diff --git a/src/packages/core/extension-registry/manifests.ts b/src/packages/core/extension-registry/manifests.ts index dd1a2d6e84..f8705be56e 100644 --- a/src/packages/core/extension-registry/manifests.ts +++ b/src/packages/core/extension-registry/manifests.ts @@ -1,14 +1,4 @@ import { manifests as conditionManifests } from './conditions/manifests.js'; -import { manifests as menuItemManifests } from './menu-item/manifests.js'; -import { manifests as workspaceManifests } from './workspace/manifests.js'; -import { manifests as collectionManifests } from './collection/manifests.js'; -import { manifests as entityActionManifests } from './entity-actions/manifests.js'; import type { ManifestTypes } from './models/index.js'; -export const manifests: Array = [ - ...conditionManifests, - ...menuItemManifests, - ...workspaceManifests, - ...collectionManifests, - ...entityActionManifests, -]; +export const manifests: Array = [...conditionManifests]; diff --git a/src/packages/core/extension-registry/menu-item/manifests.ts b/src/packages/core/extension-registry/menu-item/manifests.ts deleted file mode 100644 index c50d0a3b4b..0000000000 --- a/src/packages/core/extension-registry/menu-item/manifests.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { ManifestMenuItem, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const menuItem: ManifestMenuItem = { - type: 'menuItem', - alias: 'Umb.MenuItem.Extensions', - name: 'Extension Insights Menu Item', - weight: 200, - meta: { - label: 'Extension Insights', - icon: 'icon-wand', - entityType: 'extension-root', - menus: ['Umb.Menu.AdvancedSettings'], - }, -}; - -export const manifests: Array = [menuItem]; diff --git a/src/packages/core/extension-registry/models/current-user-action.model.ts b/src/packages/core/extension-registry/models/current-user-action.model.ts index 5366cb251e..90ad56e9dd 100644 --- a/src/packages/core/extension-registry/models/current-user-action.model.ts +++ b/src/packages/core/extension-registry/models/current-user-action.model.ts @@ -1,4 +1,3 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { UmbAction } from '../../action/action.interface.js'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; @@ -24,7 +23,7 @@ export interface UmbCurrentUserAction extends UmbAction extends ManifestElementAndApi>, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'currentUserAction'; meta: MetaType; } diff --git a/src/packages/core/extension-registry/models/dashboard-collection.model.ts b/src/packages/core/extension-registry/models/dashboard-collection.model.ts deleted file mode 100644 index 8ec72d8a82..0000000000 --- a/src/packages/core/extension-registry/models/dashboard-collection.model.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { ManifestBase } from '@umbraco-cms/backoffice/extension-api'; - -export interface ManifestDashboardCollection extends ManifestBase { - type: 'dashboardCollection'; - meta: MetaDashboardCollection; - conditions: ConditionsDashboardCollection; -} - -export interface MetaDashboardCollection { - /** - * The URL path for the dashboard which is used for navigating or deep linking directly to the dashboard - * @examples [ - * "media-management-dashboard", - * "my-awesome-dashboard" - * ] - */ - pathname: string; - - /** - * Optional string to display as the label for the dashboard collection - */ - label?: string; - - /** - * The alias of the repository that the dashboard collection is for - * @examples [ - * "Umb.Repository.Media" - * ] - */ - repositoryAlias: string; -} - -/** - * The conditions for when the dashboard should be available - */ -export interface ConditionsDashboardCollection { - /** - * An array of section aliases that the dashboard collection should be available in - * @uniqueItems true - * @examples [ - * "Umb.Section.Content", - * "Umb.Section.Settings" - * ] - */ - sections: string[]; - - /** - * The entity type that the dashboard collection should be available for - * @examples [ - * "media" - * ] - */ - entityType: string; -} diff --git a/src/packages/core/extension-registry/models/dashboard.model.ts b/src/packages/core/extension-registry/models/dashboard.model.ts index 95d78dcafb..c800737f0c 100644 --- a/src/packages/core/extension-registry/models/dashboard.model.ts +++ b/src/packages/core/extension-registry/models/dashboard.model.ts @@ -1,10 +1,9 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { UmbDashboardElement } from '../interfaces/index.js'; import type { ManifestElement, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; export interface ManifestDashboard extends ManifestElement, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'dashboard'; meta: MetaDashboard; } diff --git a/src/packages/core/extension-registry/models/entity-action.model.ts b/src/packages/core/extension-registry/models/entity-action.model.ts index 7a5c58c46a..096a59dbb5 100644 --- a/src/packages/core/extension-registry/models/entity-action.model.ts +++ b/src/packages/core/extension-registry/models/entity-action.model.ts @@ -1,4 +1,3 @@ -import type { ConditionTypes } from '../conditions/types.js'; 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'; @@ -9,7 +8,7 @@ import type { UmbModalToken, UmbPickerModalData, UmbPickerModalValue } from '@um */ export interface ManifestEntityAction extends ManifestElementAndApi>, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'entityAction'; forEntityTypes: Array; meta: MetaType; @@ -41,6 +40,14 @@ export interface MetaEntityActionDefaultKind extends MetaEntityAction { * ] */ label: string; + + /** + * The action requires additional input from the user. + * A dialog will prompt the user for more information or to make a choice. + * @type {boolean} + * @memberof MetaEntityActionDefaultKind + */ + additionalOptions?: boolean; } // DELETE diff --git a/src/packages/core/extension-registry/models/entity-bulk-action.model.ts b/src/packages/core/extension-registry/models/entity-bulk-action.model.ts index ee70697aaf..302710ac14 100644 --- a/src/packages/core/extension-registry/models/entity-bulk-action.model.ts +++ b/src/packages/core/extension-registry/models/entity-bulk-action.model.ts @@ -1,4 +1,3 @@ -import type { ConditionTypes } from '../conditions/types.js'; 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'; @@ -9,7 +8,7 @@ import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbr */ export interface ManifestEntityBulkAction extends ManifestElementAndApi>, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'entityBulkAction'; forEntityTypes: Array; meta: MetaType; diff --git a/src/packages/core/extension-registry/models/index.ts b/src/packages/core/extension-registry/models/index.ts index e0d4de3ae9..afa28545e2 100644 --- a/src/packages/core/extension-registry/models/index.ts +++ b/src/packages/core/extension-registry/models/index.ts @@ -1,10 +1,6 @@ import type { ManifestAuthProvider } from './auth-provider.model.js'; -import type { ManifestBlockEditorCustomView } from './block-editor-custom-view.model.js'; -import type { ManifestCollection } from './collection.models.js'; -import type { ManifestCollectionView } from './collection-view.model.js'; import type { ManifestCurrentUserAction, ManifestCurrentUserActionDefaultKind } from './current-user-action.model.js'; import type { ManifestDashboard } from './dashboard.model.js'; -import type { ManifestDashboardCollection } from './dashboard-collection.model.js'; import type { ManifestEntityAction, ManifestEntityActionDeleteKind, @@ -31,7 +27,7 @@ import type { ManifestHealthCheck } from './health-check.model.js'; import type { ManifestIcons } from './icons.model.js'; import type { ManifestLocalization } from './localization.model.js'; import type { ManifestMenu } from './menu.model.js'; -import type { ManifestMenuItem, ManifestMenuItemTreeKind } from './menu-item.model.js'; +import type { ManifestMenuItem, ManifestMenuItemLinkKind, ManifestMenuItemTreeKind } from './menu-item.model.js'; import type { ManifestModal } from './modal.model.js'; import type { ManifestPackageView } from './package-view.model.js'; import type { ManifestPreviewAppProvider } from './preview-app.model.js'; @@ -44,30 +40,12 @@ import type { ManifestSectionView } from './section-view.model.js'; import type { ManifestStore, ManifestTreeStore, ManifestItemStore } from './store.model.js'; import type { ManifestTheme } from './theme.model.js'; import type { ManifestTinyMcePlugin } from './tinymce-plugin.model.js'; -import type { ManifestTree } from './tree.model.js'; -import type { ManifestTreeItem } from './tree-item.model.js'; import type { ManifestUfmComponent } from './ufm-component.model.js'; import type { ManifestUfmFilter } from './ufm-filter.model.js'; import type { ManifestUserProfileApp } from './user-profile-app.model.js'; -import type { ManifestWorkspace, ManifestWorkspaceRoutableKind } from './workspace.model.js'; -import type { ManifestWorkspaceAction, ManifestWorkspaceActionDefaultKind } from './workspace-action.model.js'; -import type { ManifestWorkspaceActionMenuItem } from './workspace-action-menu-item.model.js'; -import type { ManifestWorkspaceContext } from './workspace-context.model.js'; -import type { - ManifestWorkspaceFooterApp, - ManifestWorkspaceFooterAppMenuBreadcrumbKind, - ManifestWorkspaceFooterAppVariantMenuBreadcrumbKind, -} from './workspace-footer-app.model.js'; -import type { - ManifestWorkspaceView, - ManifestWorkspaceViewContentTypeDesignEditorKind, -} from './workspace-view.model.js'; import type { ManifestEntityUserPermission } from './entity-user-permission.model.js'; import type { ManifestGranularUserPermission } from './user-granular-permission.model.js'; -import type { ManifestCollectionAction } from './collection-action.model.js'; import type { ManifestMfaLoginProvider } from './mfa-login-provider.model.js'; -import type { ManifestSearchProvider } from './search-provider.model.js'; -import type { ManifestSearchResultItem } from './search-result-item.model.js'; import type { ManifestAppEntryPoint } from './app-entry-point.model.js'; import type { ManifestBackofficeEntryPoint } from './backoffice-entry-point.model.js'; import type { ManifestEntryPoint } from './entry-point.model.js'; @@ -79,12 +57,7 @@ import type { ManifestBase, ManifestBundle, ManifestCondition } from '@umbraco-c export type * from './app-entry-point.model.js'; export type * from './auth-provider.model.js'; export type * from './backoffice-entry-point.model.js'; -export type * from './block-editor-custom-view.model.js'; -export type * from './collection-action.model.js'; -export type * from './collection-view.model.js'; -export type * from './collection.models.js'; export type * from './current-user-action.model.js'; -export type * from './dashboard-collection.model.js'; export type * from './dashboard.model.js'; export type * from './dynamic-root.model.js'; export type * from './entity-action.model.js'; @@ -109,26 +82,16 @@ export type * from './preview-app.model.js'; export type * from './property-action.model.js'; export type * from './property-editor.model.js'; export type * from './repository.model.js'; -export type * from './search-provider.model.js'; -export type * from './search-result-item.model.js'; export type * from './section-sidebar-app.model.js'; export type * from './section-view.model.js'; export type * from './section.model.js'; export type * from './store.model.js'; export type * from './theme.model.js'; export type * from './tinymce-plugin.model.js'; -export type * from './tree-item.model.js'; -export type * from './tree.model.js'; export type * from './ufm-component.model.js'; export type * from './ufm-filter.model.js'; export type * from './user-granular-permission.model.js'; export type * from './user-profile-app.model.js'; -export type * from './workspace-action-menu-item.model.js'; -export type * from './workspace-action.model.js'; -export type * from './workspace-context.model.js'; -export type * from './workspace-footer-app.model.js'; -export type * from './workspace-view.model.js'; -export type * from './workspace.model.js'; export type ManifestEntityActions = | ManifestEntityAction @@ -146,32 +109,17 @@ export type ManifestEntityActions = | ManifestEntityActionTrashKind | ManifestEntityActionUpdateFolderKind; -export type ManifestWorkspaceFooterApps = - | ManifestWorkspaceFooterApp - | ManifestWorkspaceFooterAppMenuBreadcrumbKind - | ManifestWorkspaceFooterAppVariantMenuBreadcrumbKind; - export type ManifestPropertyActions = ManifestPropertyAction | ManifestPropertyActionDefaultKind; -export type ManifestWorkspaceActions = ManifestWorkspaceAction | ManifestWorkspaceActionDefaultKind; - -export type ManifestWorkspaces = ManifestWorkspace | ManifestWorkspaceRoutableKind | ManifestWorkspaceRoutableKind; -export type ManifestWorkspaceViews = ManifestWorkspaceView | ManifestWorkspaceViewContentTypeDesignEditorKind; - export type ManifestTypes = | ManifestAppEntryPoint | ManifestAuthProvider | ManifestBackofficeEntryPoint - | ManifestBlockEditorCustomView | ManifestBundle - | ManifestCollection - | ManifestCollectionAction - | ManifestCollectionView | ManifestCondition | ManifestCurrentUserAction | ManifestCurrentUserActionDefaultKind | ManifestDashboard - | ManifestDashboardCollection | ManifestDynamicRootOrigin | ManifestDynamicRootQueryStep | ManifestEntityActions @@ -191,6 +139,7 @@ export type ManifestTypes = | ManifestMenu | ManifestMenuItem | ManifestMenuItemTreeKind + | ManifestMenuItemLinkKind | ManifestMfaLoginProvider | ManifestModal | ManifestMonacoMarkdownEditorAction @@ -201,8 +150,6 @@ export type ManifestTypes = | ManifestPropertyEditorSchema | ManifestPropertyEditorUi | ManifestRepository - | ManifestSearchProvider - | ManifestSearchResultItem | ManifestSection | ManifestSectionRoute | ManifestSectionSidebarApp @@ -211,16 +158,41 @@ export type ManifestTypes = | ManifestStore | ManifestTheme | ManifestTinyMcePlugin - | ManifestTree - | ManifestTreeItem | ManifestTreeStore | ManifestUfmComponent | ManifestUfmFilter | ManifestUserProfileApp - | ManifestWorkspaceActionMenuItem - | ManifestWorkspaceActions - | ManifestWorkspaceContext - | ManifestWorkspaceFooterApps - | ManifestWorkspaces - | ManifestWorkspaceViews | ManifestBase; + +type UnionOfProperties = T extends object ? T[keyof T] : never; + +declare global { + /** + * This global type allows to declare manifests types from its own module. + * @example + ```js + declare global { + interface UmbExtensionManifestMap { + My_UNIQUE_MANIFEST_NAME: MyExtensionManifestType; + } + } + ``` + If you have multiple types, you can declare them in this way: + ```js + declare global { + interface UmbExtensionManifestMap { + My_UNIQUE_MANIFEST_NAME: MyExtensionManifestTypeA | MyExtensionManifestTypeB; + } + } + ``` + */ + interface UmbExtensionManifestMap { + UMB_CORE: ManifestTypes; + } + + /** + * This global type provides a union of all declared manifest types. + * If this is a local package that declares additional Manifest Types, then these will also be included in this union. + */ + type UmbExtensionManifest = UnionOfProperties; +} diff --git a/src/packages/core/extension-registry/models/menu-item.model.ts b/src/packages/core/extension-registry/models/menu-item.model.ts index 05eeb81b78..c0e8cbf63a 100644 --- a/src/packages/core/extension-registry/models/menu-item.model.ts +++ b/src/packages/core/extension-registry/models/menu-item.model.ts @@ -1,10 +1,9 @@ import type { UmbMenuItemElement } from '../interfaces/menu-item-element.interface.js'; -import type { ConditionTypes } from '../conditions/types.js'; import type { ManifestWithDynamicConditions, ManifestElement } from '@umbraco-cms/backoffice/extension-api'; export interface ManifestMenuItem extends ManifestElement, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'menuItem'; meta: MetaMenuItem; } @@ -26,3 +25,13 @@ export interface MetaMenuItemTreeKind extends MetaMenuItem { treeAlias: string; hideTreeRoot?: boolean; } + +export interface ManifestMenuItemLinkKind extends ManifestMenuItem { + type: 'menuItem'; + kind: 'link'; + meta: MetaMenuItemLinkKind; +} + +export interface MetaMenuItemLinkKind extends MetaMenuItem { + href: string; +} diff --git a/src/packages/core/extension-registry/models/property-action.model.ts b/src/packages/core/extension-registry/models/property-action.model.ts index 563ca1894c..f5ca9ab23c 100644 --- a/src/packages/core/extension-registry/models/property-action.model.ts +++ b/src/packages/core/extension-registry/models/property-action.model.ts @@ -1,11 +1,10 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { UmbPropertyAction } from '../../property-action/components/property-action/property-action.interface.js'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; export interface ManifestPropertyAction extends ManifestElementAndApi>, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'propertyAction'; forPropertyEditorUis: string[]; meta: MetaType; diff --git a/src/packages/core/extension-registry/models/repository.model.ts b/src/packages/core/extension-registry/models/repository.model.ts index 3a169b1d9a..0008dd88a0 100644 --- a/src/packages/core/extension-registry/models/repository.model.ts +++ b/src/packages/core/extension-registry/models/repository.model.ts @@ -1,8 +1,7 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { UmbApi, ManifestApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; // TODO: Consider adding a ClassType for this manifest. (Currently we cannot know the scope of a repository, therefor we are going with ExtensionApi for now.) export interface ManifestRepository extends ManifestApi, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'repository'; } diff --git a/src/packages/core/extension-registry/models/section-sidebar-app.model.ts b/src/packages/core/extension-registry/models/section-sidebar-app.model.ts index 2a0abb3bc7..8bf18b69c2 100644 --- a/src/packages/core/extension-registry/models/section-sidebar-app.model.ts +++ b/src/packages/core/extension-registry/models/section-sidebar-app.model.ts @@ -1,10 +1,9 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { UmbSectionSidebarAppElement } from '../interfaces/section-sidebar-app-element.interface.js'; import type { ManifestElement, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; export interface ManifestSectionSidebarApp extends ManifestElement, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'sectionSidebarApp'; } diff --git a/src/packages/core/extension-registry/models/section-view.model.ts b/src/packages/core/extension-registry/models/section-view.model.ts index 426dd4eaae..8001e645cf 100644 --- a/src/packages/core/extension-registry/models/section-view.model.ts +++ b/src/packages/core/extension-registry/models/section-view.model.ts @@ -1,10 +1,9 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { UmbSectionViewElement } from '../interfaces/section-view-element.interface.js'; import type { ManifestElement, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; export interface ManifestSectionView extends ManifestElement, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'sectionView'; meta: MetaSectionView; } diff --git a/src/packages/core/extension-registry/models/section.model.ts b/src/packages/core/extension-registry/models/section.model.ts index 95b6661c05..8e615a895b 100644 --- a/src/packages/core/extension-registry/models/section.model.ts +++ b/src/packages/core/extension-registry/models/section.model.ts @@ -1,10 +1,9 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { UmbSectionElement } from '../interfaces/index.js'; import type { ManifestElement, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; export interface ManifestSection extends ManifestElement, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'section'; meta: MetaSection; } diff --git a/src/packages/core/extension-registry/models/workspace-context.model.ts b/src/packages/core/extension-registry/models/workspace-context.model.ts deleted file mode 100644 index 98181a6f38..0000000000 --- a/src/packages/core/extension-registry/models/workspace-context.model.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { ConditionTypes } from '../conditions/types.js'; -import type { ManifestApi, ManifestWithDynamicConditions, UmbApi } from '@umbraco-cms/backoffice/extension-api'; - -export interface ManifestWorkspaceContext extends ManifestWithDynamicConditions, ManifestApi { - type: 'workspaceContext'; -} diff --git a/src/packages/core/extension-registry/registry.ts b/src/packages/core/extension-registry/registry.ts index 09294be440..0985b3226e 100644 --- a/src/packages/core/extension-registry/registry.ts +++ b/src/packages/core/extension-registry/registry.ts @@ -1,8 +1,12 @@ -import type { ManifestTypes } from './models/index.js'; import type { ManifestKind } from '@umbraco-cms/backoffice/extension-api'; import { UmbExtensionRegistry } from '@umbraco-cms/backoffice/extension-api'; -export type UmbBackofficeManifestKind = ManifestKind; -export type UmbBackofficeExtensionRegistry = UmbExtensionRegistry; +export type UmbExtensionManifestKind = ManifestKind; +export type UmbBackofficeExtensionRegistry = UmbExtensionRegistry; -export const umbExtensionsRegistry = new UmbExtensionRegistry() as UmbBackofficeExtensionRegistry; +export const umbExtensionsRegistry = new UmbExtensionRegistry() as UmbBackofficeExtensionRegistry; + +/** + * @deprecated Use `UmbExtensionManifestKind` instead. + */ +export type UmbBackofficeManifestKind = ManifestKind; diff --git a/src/packages/core/extension-registry/workspace/manifests.ts b/src/packages/core/extension-registry/workspace/manifests.ts deleted file mode 100644 index 0b5bbf0afb..0000000000 --- a/src/packages/core/extension-registry/workspace/manifests.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { - ManifestTypes, - ManifestWorkspace, - ManifestWorkspaceActions, - ManifestWorkspaceView, -} from '@umbraco-cms/backoffice/extension-registry'; - -export const UMB_EXTENSION_ROOT_WORKSPACE_ALIAS = 'Umb.Workspace.ExtensionRoot'; - -const workspace: ManifestWorkspace = { - type: 'workspace', - alias: 'Umb.Workspace.ExtensionRoot', - name: 'Extension Root Workspace', - element: () => import('./extension-root-workspace.element.js'), - meta: { - entityType: 'extension-root', - }, -}; - -const workspaceViews: Array = []; - -const workspaceActions: Array = []; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/packages/core/icon-registry/icon-dictionary.json b/src/packages/core/icon-registry/icon-dictionary.json index 150868598d..c63cb1a604 100644 --- a/src/packages/core/icon-registry/icon-dictionary.json +++ b/src/packages/core/icon-registry/icon-dictionary.json @@ -68,22 +68,10 @@ "name": "icon-arrow-up", "file": "arrow-up.svg" }, - { - "_name": "icon-art-easel", - "_file": "wallpaper.svg" - }, - { - "_name": "icon-article", - "_file": "article.svg" - }, { "name": "icon-attachment", "file": "paperclip.svg" }, - { - "_name": "icon-auction-hammer", - "___file": "auction-hammer.svg" - }, { "name": "icon-autofill", "file": "text-cursor-input.svg" @@ -104,10 +92,6 @@ "name": "icon-axis-rotation", "file": "refresh-ccw.svg" }, - { - "_name": "icon-baby-stroller", - "___file": "baby.svg" - }, { "name": "icon-backspace", "file": "delete.svg" @@ -116,10 +100,6 @@ "name": "icon-badge-add", "file": "circle-plus.svg" }, - { - "_name": "icon-badge-count", - "___file": "badge-count.svg" - }, { "name": "icon-badge-remove", "file": "circle-minus.svg" @@ -133,10 +113,6 @@ "name": "icon-ball", "file": "dribbble.svg" }, - { - "_name": "icon-band-aid", - "____file": "" - }, { "name": "icon-bar-chart", "file": "chart-no-axes-column.svg" @@ -169,57 +145,14 @@ "name": "icon-bell", "file": "bell.svg" }, - { - "_name": "icon-bill-dollar", - "____file": "circle-dollar-sign.svg" - }, - { - "_name": "icon-bill-euro", - "____file": "bill-euro.svg" - }, - { - "_name": "icon-bill-pound", - "____file": "bill-pound.svg" - }, - { - "_name": "icon-bill-yen", - "____file": "bill-yen.svg" - }, - { - "_name": "icon-bill", - "____file": "bill.svg" - }, - { - "_name": "icon-billboard", - "____file": "billboard.svg" - }, - { - "_name": "icon-bills-dollar", - "____file": "bills-dollar.svg" - }, - { - "_name": "icon-bills-euro", - "____file": "bills-euro.svg" - }, - { - "_name": "icon-bills-pound", - "____file": "bills-pound.svg" - }, - { - "_name": "icon-bills-yen", - "____file": "bills-yen.svg" - }, - { - "_name": "icon-bills", - "____file": "bills.svg" - }, { "name": "icon-binarycode", "file": "binary.svg" }, { - "_name": "icon-binoculars", - "___file": "binoculars.svg" + "name": "icon-binoculars", + "file": "binoculars.svg", + "legacy": true }, { "name": "icon-bird", @@ -233,10 +166,6 @@ "name": "icon-block", "file": "ban.svg" }, - { - "_name": "icon-blueprint", - "____file": "blueprint.svg" - }, { "name": "icon-bluetooth", "file": "bluetooth.svg" @@ -245,10 +174,6 @@ "name": "icon-boat-shipping", "file": "ship.svg" }, - { - "_name": "icon-bomb", - "____file": "bomb.svg" - }, { "name": "icon-bones", "file": "bone.svg" @@ -362,10 +287,6 @@ "name": "icon-car", "file": "car.svg" }, - { - "_name": "icon-cash-register", - "____file": "cash-register.svg" - }, { "name": "icon-categories", "file": "archive.svg" @@ -395,10 +316,6 @@ "name": "icon-check", "file": "check.svg" }, - { - "_name": "icon-checkbox-dotted-active", - "____file": "checkbox-dotted-active.svg" - }, { "name": "icon-checkbox-dotted", "file": "box-select.svg" @@ -412,10 +329,6 @@ "name": "icon-checkbox", "file": "square-check.svg" }, - { - "_name": "icon-chess", - "____file": "chess.svg" - }, { "name": "icon-chip-alt", "file": "cpu.svg", @@ -441,19 +354,11 @@ "name": "icon-circuits", "file": "circuit-board.svg" }, - { - "_name": "icon-circus", - "____file": "circus.svg" - }, { "name": "icon-client", "file": "user.svg", "legacy": true }, - { - "_name": "icon-clothes-hanger", - "____file": "clothes-hanger.svg" - }, { "name": "icon-cloud-drive", "file": "hard-drive.svg" @@ -502,47 +407,11 @@ "name": "icon-coin-yen", "file": "japanese-yen.svg" }, - { - "_name": "icon-coin", - "____file": "coin.svg" - }, { "name": "icon-coins-alt", "file": "coins.svg", "legacy": true }, - { - "_name": "icon-coins-dollar-alt", - "____file": "coins-dollar-alt.svg" - }, - { - "_name": "icon-coins-dollar", - "____file": "coins-dollar.svg" - }, - { - "_name": "icon-coins-euro-alt", - "____file": "coins-euro-alt.svg" - }, - { - "_name": "icon-coins-euro", - "____file": "coins-euro.svg" - }, - { - "_name": "icon-coins-pound-alt", - "____file": "coins-pound-alt.svg" - }, - { - "_name": "icon-coins-pound", - "____file": "coins-pound.svg" - }, - { - "_name": "icon-coins-yen-alt", - "____file": "coins-yen-alt.svg" - }, - { - "_name": "icon-coins-yen", - "____file": "coins-yen.svg" - }, { "name": "icon-coins", "file": "coins.svg" @@ -559,10 +428,6 @@ "name": "icon-columns", "file": "tally-3.svg" }, - { - "_name": "icon-comb", - "____file": "comb.svg" - }, { "name": "icon-combination-lock-open", "file": "lock-keyhole-open.svg" @@ -667,10 +532,6 @@ "name": "icon-departure", "file": "plane-takeoff.svg" }, - { - "_name": "icon-desk", - "____file": "desk.svg" - }, { "name": "icon-desktop", "file": "monitor.svg", @@ -750,10 +611,6 @@ "name": "icon-documents", "file": "files.svg" }, - { - "_name": "icon-dollar-bag", - "____file": "dollar-bag.svg" - }, { "name": "icon-donate", "file": "hand-helping.svg", @@ -793,10 +650,6 @@ "name": "icon-edit", "file": "pencil.svg" }, - { - "_name": "icon-eject", - "____file": "eject.svg" - }, { "name": "icon-employee", "file": "user.svg", @@ -822,10 +675,6 @@ "name": "icon-ethernet", "file": "network.svg" }, - { - "_name": "icon-euro-bag", - "____file": "euro-bag.svg" - }, { "name": "icon-eye", "file": "eye.svg" @@ -846,10 +695,6 @@ "name": "icon-favorite", "file": "heart.svg" }, - { - "_name": "icon-female-symbol", - "____file": "female-symbol.svg" - }, { "name": "icon-file-cabinet", "file": "square-library.svg" @@ -874,10 +719,6 @@ "name": "icon-fire", "file": "flame-kindling.svg" }, - { - "_name": "icon-firewall", - "____file": "firewall.svg" - }, { "name": "icon-firewire", "file": "usb.svg", @@ -903,14 +744,6 @@ "name": "icon-flowerpot", "file": "flower-2.svg" }, - { - "_name": "icon-folder-open", - "____file": "folder-open.svg" - }, - { - "_name": "icon-folder-outline", - "____file": "folder-outline.svg" - }, { "name": "icon-folder", "file": "folder.svg" @@ -1036,10 +869,6 @@ "name": "icon-hand-pointer", "file": "pointer.svg" }, - { - "_name": "icon-handprint", - "____file": "handprint.svg" - }, { "name": "icon-handshake", "file": "heart-handshake.svg" @@ -1063,14 +892,6 @@ "file": "hard-drive.svg", "legacy": true }, - { - "_name": "icon-hat", - "____file": "hat.svg" - }, - { - "_name": "icon-hd", - "____file": "hd.svg" - }, { "name": "icon-headphones", "file": "headphones.svg" @@ -1113,10 +934,6 @@ "file": "monitor.svg", "legacy": true }, - { - "_name": "icon-inactive-line", - "____file": "inactive-line.svg" - }, { "name": "icon-inbox-full", "file": "inbox.svg", @@ -1170,14 +987,6 @@ "name": "icon-keyboard", "file": "keyboard.svg" }, - { - "_name": "icon-keychain", - "____file": "keychain.svg" - }, - { - "_name": "icon-keyhole", - "____file": "keyhole.svg" - }, { "name": "icon-lab", "file": "flask-conical.svg" @@ -1241,10 +1050,6 @@ "name": "icon-link", "file": "link.svg" }, - { - "_name": "icon-linux-tux", - "____file": "linux-tux.svg" - }, { "name": "icon-list", "file": "align-justify.svg" @@ -1298,14 +1103,6 @@ "name": "icon-mailbox", "file": "mailbox.svg" }, - { - "_name": "icon-male-and-female", - "____file": "users-2.svg" - }, - { - "_name": "icon-male-symbol", - "____file": "male-symbol.svg" - }, { "name": "icon-map-alt", "file": "navigation.svg" @@ -1374,14 +1171,6 @@ "name": "icon-mobile", "file": "smartphone.svg" }, - { - "_name": "icon-molecular-network", - "____file": "molecular-network.svg" - }, - { - "_name": "icon-molecular", - "____file": "molecular.svg" - }, { "name": "icon-mountain", "file": "mountain-snow.svg" @@ -2296,10 +2085,6 @@ "file": "user.svg", "legacy": true }, - { - "_name": "icon-umbraco", - "____file": "umbraco.svg" - }, { "name": "icon-umbrella", "file": "umbrella.svg" @@ -2312,6 +2097,10 @@ "name": "icon-unlocked", "file": "lock-open.svg" }, + { + "name": "icon-unplug", + "file": "unplug.svg" + }, { "name": "icon-untitled", "file": "box.svg", @@ -2492,6 +2281,271 @@ } ], "umbraco": [ + { + "name": "icon-art-easel", + "file": "icon-art-easel.svg", + "legacy": true + }, + { + "name": "icon-article", + "file": "icon-article.svg", + "legacy": true + }, + { + "name": "icon-auction-hammer", + "file": "icon-auction-hammer.svg", + "legacy": true + }, + { + "name": "icon-badge-count", + "file": "icon-badge-count.svg", + "legacy": true + }, + { + "name": "icon-band-aid", + "file": "icon-band-aid.svg", + "legacy": true + }, + { + "name": "icon-baby-stroller", + "file": "icon-baby-stroller.svg", + "legacy": true + }, + { + "name": "icon-bill-dollar", + "file": "icon-bill-dollar.svg", + "legacy": true + }, + { + "name": "icon-bill-euro", + "file": "icon-bill-euro.svg", + "legacy": true + }, + { + "name": "icon-bill-pound", + "file": "icon-bill-pound.svg", + "legacy": true + }, + { + "name": "icon-bill-yen", + "file": "icon-bill-yen.svg", + "legacy": true + }, + { + "name": "icon-bill", + "file": "icon-bill.svg", + "legacy": true + }, + { + "name": "icon-billboard", + "file": "icon-billboard.svg", + "legacy": true + }, + { + "name": "icon-bills-dollar", + "file": "icon-bills-dollar.svg", + "legacy": true + }, + { + "name": "icon-bills-euro", + "file": "icon-bills-euro.svg", + "legacy": true + }, + { + "name": "icon-bills-pound", + "file": "icon-bills-pound.svg", + "legacy": true + }, + { + "name": "icon-bills-yen", + "file": "icon-bills-yen.svg", + "legacy": true + }, + { + "name": "icon-bills", + "file": "icon-bills.svg", + "legacy": true + }, + { + "name": "icon-blueprint", + "file": "icon-blueprint.svg", + "legacy": true + }, + { + "name": "icon-bomb", + "file": "icon-bomb.svg", + "legacy": true + }, + { + "name": "icon-cash-register", + "file": "icon-cash-register.svg", + "legacy": true + }, + { + "name": "icon-checkbox-dotted-active", + "file": "icon-checkbox-dotted-active.svg", + "legacy": true + }, + { + "name": "icon-chess", + "file": "icon-chess.svg", + "legacy": true + }, + { + "name": "icon-circus", + "file": "icon-circus.svg", + "legacy": true + }, + { + "name": "icon-clothes-hanger", + "file": "icon-clothes-hanger.svg", + "legacy": true + }, + { + "name": "icon-coin", + "file": "icon-coin.svg", + "legacy": true + }, + { + "name": "icon-coins-dollar-alt", + "file": "icon-coins-dollar-alt.svg", + "legacy": true + }, + { + "name": "icon-coins-dollar", + "file": "icon-coins-dollar.svg", + "legacy": true + }, + { + "name": "icon-coins-euro-alt", + "file": "icon-coins-euro-alt.svg", + "legacy": true + }, + { + "name": "icon-coins-euro", + "file": "icon-coins-euro.svg", + "legacy": true + }, + { + "name": "icon-coins-pound-alt", + "file": "icon-coins-pound-alt.svg", + "legacy": true + }, + { + "name": "icon-coins-pound", + "file": "icon-coins-pound.svg", + "legacy": true + }, + { + "name": "icon-coins-yen-alt", + "file": "icon-coins-yen-alt.svg", + "legacy": true + }, + { + "name": "icon-coins-yen", + "file": "icon-coins-yen.svg", + "legacy": true + }, + { + "name": "icon-comb", + "file": "icon-comb.svg", + "legacy": true + }, + { + "name": "icon-desk", + "file": "icon-desk.svg", + "legacy": true + }, + { + "name": "icon-dollar-bag", + "file": "icon-dollar-bag.svg", + "legacy": true + }, + { + "name": "icon-eject", + "file": "icon-eject.svg", + "legacy": true + }, + { + "name": "icon-euro-bag", + "file": "icon-euro-bag.svg", + "legacy": true + }, + { + "name": "icon-female-symbol", + "file": "icon-female-symbol.svg", + "legacy": true + }, + { + "name": "icon-firewall", + "file": "icon-firewall.svg", + "legacy": true + }, + { + "name": "icon-folder-open", + "file": "icon-folder-open.svg", + "legacy": true + }, + { + "name": "icon-folder-outline", + "file": "icon-folder-outline.svg", + "legacy": true + }, + { + "name": "icon-handprint", + "file": "icon-handprint.svg", + "legacy": true + }, + { + "name": "icon-hat", + "file": "icon-hat.svg", + "legacy": true + }, + { + "name": "icon-hd", + "file": "icon-hd.svg", + "legacy": true + }, + { + "name": "icon-inactive-line", + "file": "icon-inactive-line.svg", + "legacy": true + }, + { + "name": "icon-keychain", + "file": "icon-keychain.svg", + "legacy": true + }, + { + "name": "icon-keyhole", + "file": "icon-keyhole.svg", + "legacy": true + }, + { + "name": "icon-linux-tux", + "file": "icon-linux-tux.svg", + "legacy": true + }, + { + "name": "icon-male-and-female", + "file": "icon-users.svg", + "legacy": true + }, + { + "name": "icon-male-symbol", + "file": "icon-male-symbol.svg", + "legacy": true + }, + { + "name": "icon-molecular-network", + "file": "icon-molecular-network.svg", + "legacy": true + }, + { + "name": "icon-molecular", + "file": "icon-molecular.svg", + "legacy": true + }, { "name": "icon-umbraco", "file": "icon-umbraco.svg" diff --git a/src/packages/core/modal/common/icon-picker/icon-picker-modal.element.ts b/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.element.ts similarity index 99% rename from src/packages/core/modal/common/icon-picker/icon-picker-modal.element.ts rename to src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.element.ts index 5455734cd0..a5204fc642 100644 --- a/src/packages/core/modal/common/icon-picker/icon-picker-modal.element.ts +++ b/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.element.ts @@ -1,10 +1,10 @@ +import type { UmbIconPickerModalData, UmbIconPickerModalValue } from './icon-picker-modal.token.js'; import { css, customElement, html, nothing, query, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { extractUmbColorVariable, umbracoColors } from '@umbraco-cms/backoffice/resources'; import { umbFocus } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_ICON_REGISTRY_CONTEXT, type UmbIconDefinition } from '@umbraco-cms/backoffice/icon'; -import type { UmbIconPickerModalData, UmbIconPickerModalValue } from '@umbraco-cms/backoffice/modal'; import type { UUIColorSwatchesEvent } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-icon-picker-modal') diff --git a/src/packages/core/modal/common/icon-picker/icon-picker-modal.stories.ts b/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.stories.ts similarity index 84% rename from src/packages/core/modal/common/icon-picker/icon-picker-modal.stories.ts rename to src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.stories.ts index 4b8eaf3d5c..5f34ce845e 100644 --- a/src/packages/core/modal/common/icon-picker/icon-picker-modal.stories.ts +++ b/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.stories.ts @@ -1,12 +1,10 @@ -import '../../../components/body-layout/body-layout.element.js'; import './icon-picker-modal.element.js'; import type { UmbIconPickerModalElement } from './icon-picker-modal.element.js'; +import type { UmbIconPickerModalValue } from './icon-picker-modal.token.js'; import type { Meta, Story } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbIconPickerModalValue } from '@umbraco-cms/backoffice/modal'; - export default { title: 'API/Modals/Layouts/Icon Picker', component: 'umb-icon-picker-modal', diff --git a/src/packages/core/modal/common/icon-picker/icon-picker-modal.test.ts b/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.test.ts similarity index 100% rename from src/packages/core/modal/common/icon-picker/icon-picker-modal.test.ts rename to src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.test.ts diff --git a/src/packages/core/modal/token/icon-picker-modal.token.ts b/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.token.ts similarity index 84% rename from src/packages/core/modal/token/icon-picker-modal.token.ts rename to src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.token.ts index 86ce0e8115..6ac5b7b155 100644 --- a/src/packages/core/modal/token/icon-picker-modal.token.ts +++ b/src/packages/core/icon-registry/icon-picker-modal/icon-picker-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export type UmbIconPickerModalData = never; diff --git a/src/packages/core/icon-registry/icon-picker-modal/index.ts b/src/packages/core/icon-registry/icon-picker-modal/index.ts new file mode 100644 index 0000000000..10e5659b24 --- /dev/null +++ b/src/packages/core/icon-registry/icon-picker-modal/index.ts @@ -0,0 +1,2 @@ +export * from './icon-picker-modal.token.js'; +export * from './icon-picker-modal.element.js'; diff --git a/src/packages/core/icon-registry/icon-picker-modal/manifests.ts b/src/packages/core/icon-registry/icon-picker-modal/manifests.ts new file mode 100644 index 0000000000..b4b3e11502 --- /dev/null +++ b/src/packages/core/icon-registry/icon-picker-modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.IconPicker', + name: 'Icon Picker Modal', + element: () => import('./icon-picker-modal.element.js'), + }, +]; diff --git a/src/packages/core/icon-registry/icons.ts b/src/packages/core/icon-registry/icons.ts index 40e74af05f..b465a71b52 100644 --- a/src/packages/core/icon-registry/icons.ts +++ b/src/packages/core/icon-registry/icons.ts @@ -147,6 +147,10 @@ name: "icon-binarycode", path: () => import("./icons/icon-binarycode.js"), },{ +name: "icon-binoculars", +legacy: true, +path: () => import("./icons/icon-binoculars.js"), +},{ name: "icon-bird", path: () => import("./icons/icon-bird.js"), @@ -1971,6 +1975,10 @@ name: "icon-unlocked", path: () => import("./icons/icon-unlocked.js"), },{ +name: "icon-unplug", + +path: () => import("./icons/icon-unplug.js"), +},{ name: "icon-untitled", legacy: true, path: () => import("./icons/icon-untitled.js"), @@ -2139,10 +2147,6 @@ name: "icon-twitter-x", path: () => import("./icons/icon-twitter-x.js"), },{ -name: "icon-umbraco", - -path: () => import("./icons/icon-umbraco.js"), -},{ name: "icon-art-easel", legacy: true, path: () => import("./icons/icon-art-easel.js"), @@ -2155,14 +2159,6 @@ name: "icon-auction-hammer", legacy: true, path: () => import("./icons/icon-auction-hammer.js"), },{ -name: "icon-azure", -legacy: true, -path: () => import("./icons/icon-azure.js"), -},{ -name: "icon-baby-stroller", -legacy: true, -path: () => import("./icons/icon-baby-stroller.js"), -},{ name: "icon-badge-count", legacy: true, path: () => import("./icons/icon-badge-count.js"), @@ -2171,6 +2167,10 @@ name: "icon-band-aid", legacy: true, path: () => import("./icons/icon-band-aid.js"), },{ +name: "icon-baby-stroller", +legacy: true, +path: () => import("./icons/icon-baby-stroller.js"), +},{ name: "icon-bill-dollar", legacy: true, path: () => import("./icons/icon-bill-dollar.js"), @@ -2215,10 +2215,6 @@ name: "icon-bills", legacy: true, path: () => import("./icons/icon-bills.js"), },{ -name: "icon-binoculars", -legacy: true, -path: () => import("./icons/icon-binoculars.js"), -},{ name: "icon-blueprint", legacy: true, path: () => import("./icons/icon-blueprint.js"), @@ -2355,10 +2351,6 @@ name: "icon-male-symbol", legacy: true, path: () => import("./icons/icon-male-symbol.js"), },{ -name: "icon-microsoft", -legacy: true, -path: () => import("./icons/icon-microsoft.js"), -},{ name: "icon-molecular-network", legacy: true, path: () => import("./icons/icon-molecular-network.js"), @@ -2367,6 +2359,18 @@ name: "icon-molecular", legacy: true, path: () => import("./icons/icon-molecular.js"), },{ +name: "icon-umbraco", + +path: () => import("./icons/icon-umbraco.js"), +},{ +name: "icon-azure", +legacy: true, +path: () => import("./icons/icon-azure.js"), +},{ +name: "icon-microsoft", +legacy: true, +path: () => import("./icons/icon-microsoft.js"), +},{ name: "icon-os-x", legacy: true, path: () => import("./icons/icon-os-x.js"), diff --git a/src/packages/core/icon-registry/icons/icon-activity.ts b/src/packages/core/icon-registry/icons/icon-activity.ts index bde54263f9..c63d520dc2 100644 --- a/src/packages/core/icon-registry/icons/icon-activity.ts +++ b/src/packages/core/icon-registry/icons/icon-activity.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 ` `; \ No newline at end of file +export default ` + + + + + + + + +`; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-bird.ts b/src/packages/core/icon-registry/icons/icon-bird.ts index 64d10bf931..ba57973959 100644 --- a/src/packages/core/icon-registry/icons/icon-bird.ts +++ b/src/packages/core/icon-registry/icons/icon-bird.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/packages/core/icon-registry/icons/icon-book-alt.ts b/src/packages/core/icon-registry/icons/icon-book-alt.ts index ae5cba2f0c..12cb28a293 100644 --- a/src/packages/core/icon-registry/icons/icon-book-alt.ts +++ b/src/packages/core/icon-registry/icons/icon-book-alt.ts @@ -1,4 +1,4 @@ -export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - + + `; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-book.ts b/src/packages/core/icon-registry/icons/icon-book.ts index 23ca1f5c3e..7b1d5918f8 100644 --- a/src/packages/core/icon-registry/icons/icon-book.ts +++ b/src/packages/core/icon-registry/icons/icon-book.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 ` +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/packages/core/icon-registry/icons/icon-diagonal-arrow-alt.ts b/src/packages/core/icon-registry/icons/icon-diagonal-arrow-alt.ts index 8cf608728a..7b0fdc792b 100644 --- a/src/packages/core/icon-registry/icons/icon-diagonal-arrow-alt.ts +++ b/src/packages/core/icon-registry/icons/icon-diagonal-arrow-alt.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 ` +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 ` +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 ` `; \ No newline at end of file +export default ``; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-map-alt.ts b/src/packages/core/icon-registry/icons/icon-map-alt.ts index 790454cc8f..abf7690b1e 100644 --- a/src/packages/core/icon-registry/icons/icon-map-alt.ts +++ b/src/packages/core/icon-registry/icons/icon-map-alt.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 ` stroke-linecap="round" stroke-linejoin="round" > - - + + `; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-mouse.ts b/src/packages/core/icon-registry/icons/icon-mouse.ts index 546a302eb8..48dfab2d2b 100644 --- a/src/packages/core/icon-registry/icons/icon-mouse.ts +++ b/src/packages/core/icon-registry/icons/icon-mouse.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/packages/core/icon-registry/icons/icon-navigation-bottom.ts b/src/packages/core/icon-registry/icons/icon-navigation-bottom.ts index 24b570eeca..fe313dd689 100644 --- a/src/packages/core/icon-registry/icons/icon-navigation-bottom.ts +++ b/src/packages/core/icon-registry/icons/icon-navigation-bottom.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 ` stroke-linecap="round" stroke-linejoin="round" > - + `; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-paper-plane.ts b/src/packages/core/icon-registry/icons/icon-paper-plane.ts index e8fe760df1..c0421c9229 100644 --- a/src/packages/core/icon-registry/icons/icon-paper-plane.ts +++ b/src/packages/core/icon-registry/icons/icon-paper-plane.ts @@ -1,4 +1,4 @@ -export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - + + `; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-partly-cloudy.ts b/src/packages/core/icon-registry/icons/icon-partly-cloudy.ts index f40d589c14..4deb8f9024 100644 --- a/src/packages/core/icon-registry/icons/icon-partly-cloudy.ts +++ b/src/packages/core/icon-registry/icons/icon-partly-cloudy.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 ` +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/packages/core/icon-registry/icons/icon-rocket.ts b/src/packages/core/icon-registry/icons/icon-rocket.ts index 8ac3f62062..111f797173 100644 --- a/src/packages/core/icon-registry/icons/icon-rocket.ts +++ b/src/packages/core/icon-registry/icons/icon-rocket.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 ` stroke-linecap="round" stroke-linejoin="round" > - - + + `; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-sound-medium.ts b/src/packages/core/icon-registry/icons/icon-sound-medium.ts index e503fc0641..97cf0917b2 100644 --- a/src/packages/core/icon-registry/icons/icon-sound-medium.ts +++ b/src/packages/core/icon-registry/icons/icon-sound-medium.ts @@ -1,4 +1,4 @@ -export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - - + + + `; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-sound-off.ts b/src/packages/core/icon-registry/icons/icon-sound-off.ts index 3b3fde9df0..602704092d 100644 --- a/src/packages/core/icon-registry/icons/icon-sound-off.ts +++ b/src/packages/core/icon-registry/icons/icon-sound-off.ts @@ -1,4 +1,4 @@ -export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - + `; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-sound-waves.ts b/src/packages/core/icon-registry/icons/icon-sound-waves.ts index 6557b3c99a..eea3ac35ff 100644 --- a/src/packages/core/icon-registry/icons/icon-sound-waves.ts +++ b/src/packages/core/icon-registry/icons/icon-sound-waves.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - - + + + `; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-spades.ts b/src/packages/core/icon-registry/icons/icon-spades.ts index 9373b8c3ad..655bfb06da 100644 --- a/src/packages/core/icon-registry/icons/icon-spades.ts +++ b/src/packages/core/icon-registry/icons/icon-spades.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 ` +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/packages/core/icon-registry/icons/icon-untitled.ts b/src/packages/core/icon-registry/icons/icon-untitled.ts index f8b7989995..274f415246 100644 --- a/src/packages/core/icon-registry/icons/icon-untitled.ts +++ b/src/packages/core/icon-registry/icons/icon-untitled.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 ` stroke-linecap="round" stroke-linejoin="round" > - - - - - + + + + + `; \ No newline at end of file diff --git a/src/packages/core/icon-registry/icons/icon-video.ts b/src/packages/core/icon-registry/icons/icon-video.ts index 66c38a1d79..7ca510fab5 100644 --- a/src/packages/core/icon-registry/icons/icon-video.ts +++ b/src/packages/core/icon-registry/icons/icon-video.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 const manifests: Array = [ { type: 'icons', alias: 'Umb.Icons.Backoffice', @@ -13,4 +13,5 @@ export const manifests: Array = [ name: 'Icons Context', api: () => import('./icon-registry.context.js'), }, + ...iconPickerModalManifests, ]; diff --git a/src/packages/core/json-schema/umbraco-package.ts b/src/packages/core/json-schema/umbraco-package.ts new file mode 100644 index 0000000000..5be7369f5a --- /dev/null +++ b/src/packages/core/json-schema/umbraco-package.ts @@ -0,0 +1 @@ +export * from '@umbraco-cms/backoffice/extension-registry'; diff --git a/src/packages/core/localization/components/ui-culture-input/ui-culture-input.element.ts b/src/packages/core/localization/components/ui-culture-input/ui-culture-input.element.ts index 813fd1050c..0b33a2fcf4 100644 --- a/src/packages/core/localization/components/ui-culture-input/ui-culture-input.element.ts +++ b/src/packages/core/localization/components/ui-culture-input/ui-culture-input.element.ts @@ -65,16 +65,16 @@ export class UmbUiCultureInputElement extends UUIFormControlMixin(UmbLitElement, } override render() { - return html` - ({ + .options=${this._options.map((e) => ({ name: e.name, value: e.value, - selected: e.value == this.value + selected: e.value == this.value, }))}> - `; + `; } static override styles = [ diff --git a/src/packages/core/localization/manifests.ts b/src/packages/core/localization/manifests.ts index ee75f24d05..a575191100 100644 --- a/src/packages/core/localization/manifests.ts +++ b/src/packages/core/localization/manifests.ts @@ -1,7 +1,6 @@ import type { ManifestLocalization } from '../extension-registry/models/localization.model.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const localizationManifests: Array = [ +export const manifests: Array = [ { type: 'localization', alias: 'Umb.Localization.Bs', @@ -253,5 +252,3 @@ const localizationManifests: Array = [ js: () => import('../../../assets/lang/zh-tw.js'), }, ]; - -export const manifests: Array = [...localizationManifests]; diff --git a/src/packages/core/manifests.ts b/src/packages/core/manifests.ts index 893b161f1f..25e388e063 100644 --- a/src/packages/core/manifests.ts +++ b/src/packages/core/manifests.ts @@ -9,9 +9,11 @@ import { manifests as entityBulkActionManifests } from './entity-bulk-action/man import { manifests as extensionManifests } from './extension-registry/manifests.js'; import { manifests as iconRegistryManifests } from './icon-registry/manifests.js'; import { manifests as localizationManifests } from './localization/manifests.js'; -import { manifests as modalManifests } from './modal/common/manifests.js'; +import { manifests as menuManifests } from './menu/manifests.js'; +import { manifests as modalManifests } from './modal/manifests.js'; import { manifests as pickerManifests } from './picker/manifests.js'; import { manifests as propertyActionManifests } from './property-action/manifests.js'; +import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; import { manifests as propertyManifests } from './property/manifests.js'; import { manifests as propertyTypeManifests } from './property-type/manifests.js'; import { manifests as recycleBinManifests } from './recycle-bin/manifests.js'; @@ -21,9 +23,9 @@ import { manifests as themeManifests } from './themes/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from './extension-registry/index.js'; +import type { UmbExtensionManifestKind } from './extension-registry/index.js'; -export const manifests: Array = [ +export const manifests: Array = [ ...authManifests, ...collectionManifests, ...contentManifests, @@ -35,9 +37,11 @@ export const manifests: Array = [ ...extensionManifests, ...iconRegistryManifests, ...localizationManifests, + ...menuManifests, ...modalManifests, ...pickerManifests, ...propertyActionManifests, + ...propertyEditorManifests, ...propertyManifests, ...propertyTypeManifests, ...recycleBinManifests, diff --git a/src/packages/core/menu/components/menu-item-layout/menu-item-layout.element.ts b/src/packages/core/menu/components/menu-item-layout/menu-item-layout.element.ts index e9d7291e34..b6471e064d 100644 --- a/src/packages/core/menu/components/menu-item-layout/menu-item-layout.element.ts +++ b/src/packages/core/menu/components/menu-item-layout/menu-item-layout.element.ts @@ -37,6 +37,15 @@ export class UmbMenuItemLayoutElement extends UmbLitElement { @property({ type: String }) public href?: string; + /** + * Set an anchor tag target, only used when using href. + * @type {string} + * @attr + * @default undefined + */ + @property({ type: String }) + public target?: '_blank' | '_parent' | '_self' | '_top'; + @state() private _isActive = false; @@ -63,7 +72,8 @@ export class UmbMenuItemLayoutElement extends UmbLitElement { label=${this.label} .caretLabel=${this.localize.term('visuallyHiddenTexts_expandChildItems') + ' ' + this.label} ?active=${this._isActive} - ?has-children=${this.hasChildren}> + ?has-children=${this.hasChildren} + target=${ifDefined(this.href && this.target ? this.target : undefined)}> ${this.entityType ? html` + + `; + } +} + +export { UmbLinkMenuItemElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbLinkMenuItemElement; + } +} diff --git a/src/packages/core/menu/components/menu-item/link/manifests.ts b/src/packages/core/menu/components/menu-item/link/manifests.ts new file mode 100644 index 0000000000..c4c67d7f93 --- /dev/null +++ b/src/packages/core/menu/components/menu-item/link/manifests.ts @@ -0,0 +1,14 @@ +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'kind', + alias: 'Umb.Kind.MenuItem.Link', + matchKind: 'link', + matchType: 'menuItem', + manifest: { + type: 'menuItem', + element: () => import('./link-menu-item.element.js'), + }, + }, +]; diff --git a/src/packages/core/menu/components/menu-item/manifests.ts b/src/packages/core/menu/components/menu-item/manifests.ts new file mode 100644 index 0000000000..4154e99d0a --- /dev/null +++ b/src/packages/core/menu/components/menu-item/manifests.ts @@ -0,0 +1,4 @@ +import { manifests as linkManifests } from './link/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [...linkManifests]; diff --git a/src/packages/core/menu/components/menu-item/menu-item-default.element.ts b/src/packages/core/menu/components/menu-item/menu-item-default.element.ts index 75fbc48075..916598bc99 100644 --- a/src/packages/core/menu/components/menu-item/menu-item-default.element.ts +++ b/src/packages/core/menu/components/menu-item/menu-item-default.element.ts @@ -45,7 +45,8 @@ export class UmbMenuItemDefaultElement extends UmbLitElement implements UmbMenuI + .label=${this.localize.string(this.manifest.meta.label ?? this.manifest.name)} + .entityType=${this.manifest.meta.entityType}> `; } diff --git a/src/packages/core/extension-registry/conditions/menu-alias.condition.ts b/src/packages/core/menu/conditions/menu-alias.condition.ts similarity index 76% rename from src/packages/core/extension-registry/conditions/menu-alias.condition.ts rename to src/packages/core/menu/conditions/menu-alias.condition.ts index 5d08fb2b73..b3f01641aa 100644 --- a/src/packages/core/extension-registry/conditions/menu-alias.condition.ts +++ b/src/packages/core/menu/conditions/menu-alias.condition.ts @@ -1,17 +1,13 @@ -import { UMB_MENU_CONTEXT } from '../../menu/components/menu/menu.context.js'; -import { UmbConditionBase } from './condition-base.controller.js'; +import { UMB_MENU_CONTEXT } from '../components/menu/menu.context.js'; +import { UmbConditionBase } from '../../extension-registry/conditions/condition-base.controller.js'; +import type { MenuAliasConditionConfig } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { ManifestCondition, - UmbConditionConfigBase, UmbConditionControllerArguments, UmbExtensionCondition, } from '@umbraco-cms/backoffice/extension-api'; -export type MenuAliasConditionConfig = UmbConditionConfigBase & { - match: string; -}; - export class UmbMenuAliasCondition extends UmbConditionBase implements UmbExtensionCondition { constructor(host: UmbControllerHost, args: UmbConditionControllerArguments) { super(host, args); diff --git a/src/packages/core/menu/conditions/types.ts b/src/packages/core/menu/conditions/types.ts new file mode 100644 index 0000000000..b2d40d3bdb --- /dev/null +++ b/src/packages/core/menu/conditions/types.ts @@ -0,0 +1,5 @@ +import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; + +export type MenuAliasConditionConfig = UmbConditionConfigBase & { + match: string; +}; diff --git a/src/packages/core/menu/manifests.ts b/src/packages/core/menu/manifests.ts new file mode 100644 index 0000000000..a9d3417c61 --- /dev/null +++ b/src/packages/core/menu/manifests.ts @@ -0,0 +1,8 @@ +import { manifests as menuItemManifests } from './components/menu-item/manifests.js'; +import { manifest as menuAliasConditionManifest } from './conditions/menu-alias.condition.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + ...menuItemManifests, + menuAliasConditionManifest, +]; diff --git a/src/packages/core/menu/types.ts b/src/packages/core/menu/types.ts index 65e0eacd70..32ef22c9d1 100644 --- a/src/packages/core/menu/types.ts +++ b/src/packages/core/menu/types.ts @@ -1,4 +1,5 @@ import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; +export type * from './conditions/types.js'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface UmbStructureItemModelBase extends UmbEntityModel {} diff --git a/src/packages/core/modal/common/confirm/confirm-modal.controller.ts b/src/packages/core/modal/common/confirm/confirm-modal.controller.ts index 917d35ed9a..8deb91202b 100644 --- a/src/packages/core/modal/common/confirm/confirm-modal.controller.ts +++ b/src/packages/core/modal/common/confirm/confirm-modal.controller.ts @@ -1,5 +1,5 @@ -import { UMB_CONFIRM_MODAL, type UmbConfirmModalData } from '../../token/confirm-modal.token.js'; -import { UMB_MODAL_MANAGER_CONTEXT } from '../../context/modal-manager.context.js'; +import { UMB_MODAL_MANAGER_CONTEXT } from '../../context/index.js'; +import { UMB_CONFIRM_MODAL, type UmbConfirmModalData } from './confirm-modal.token.js'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; diff --git a/src/packages/core/modal/token/confirm-modal.token.ts b/src/packages/core/modal/common/confirm/confirm-modal.token.ts similarity index 89% rename from src/packages/core/modal/token/confirm-modal.token.ts rename to src/packages/core/modal/common/confirm/confirm-modal.token.ts index 45bd9f9709..d840de6147 100644 --- a/src/packages/core/modal/token/confirm-modal.token.ts +++ b/src/packages/core/modal/common/confirm/confirm-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '../../token/index.js'; import type { TemplateResult } from '@umbraco-cms/backoffice/external/lit'; export interface UmbConfirmModalData { diff --git a/src/packages/core/modal/common/confirm/index.ts b/src/packages/core/modal/common/confirm/index.ts new file mode 100644 index 0000000000..7a5555ffb4 --- /dev/null +++ b/src/packages/core/modal/common/confirm/index.ts @@ -0,0 +1,2 @@ +export * from './confirm-modal.token.js'; +export * from './confirm-modal.controller.js'; diff --git a/src/packages/core/modal/common/confirm/manifests.ts b/src/packages/core/modal/common/confirm/manifests.ts new file mode 100644 index 0000000000..9428106e1b --- /dev/null +++ b/src/packages/core/modal/common/confirm/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.Confirm', + name: 'Confirm Modal', + element: () => import('./confirm-modal.element.js'), + }, +]; diff --git a/src/packages/core/modal/common/embedded-media/manifests.ts b/src/packages/core/modal/common/embedded-media/manifests.ts deleted file mode 100644 index 9cf9968724..0000000000 --- a/src/packages/core/modal/common/embedded-media/manifests.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { manifests as repositories } from './repository/manifests.js'; -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.EmbeddedMedia', - name: 'Embedded Media Modal', - element: () => import('./embedded-media-modal.element.js'), - }, -]; - -export const manifests = [...modals, ...repositories]; diff --git a/src/packages/core/modal/common/embedded-media/repository/index.ts b/src/packages/core/modal/common/embedded-media/repository/index.ts deleted file mode 100644 index 1a6e303708..0000000000 --- a/src/packages/core/modal/common/embedded-media/repository/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { UmbOEmbedRepository } from './oembed.repository.js'; -export { UMB_OEMBED_REPOSITORY_ALIAS } from './manifests.js'; diff --git a/src/packages/core/modal/common/embedded-media/repository/manifests.ts b/src/packages/core/modal/common/embedded-media/repository/manifests.ts deleted file mode 100644 index dbce95b73d..0000000000 --- a/src/packages/core/modal/common/embedded-media/repository/manifests.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const UMB_OEMBED_REPOSITORY_ALIAS = 'Umb.Repository.OEmbed'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_OEMBED_REPOSITORY_ALIAS, - name: 'OEmbed Repository', - api: () => import('./oembed.repository.js'), -}; - -export const manifests: Array = [repository]; diff --git a/src/packages/core/modal/common/index.ts b/src/packages/core/modal/common/index.ts index 5a1c0033a6..3dcf1b5110 100644 --- a/src/packages/core/modal/common/index.ts +++ b/src/packages/core/modal/common/index.ts @@ -1 +1,2 @@ -export * from './embedded-media/index.js'; +export * from './confirm/index.js'; +export * from './item-picker/index.js'; diff --git a/src/packages/core/modal/common/item-picker/index.ts b/src/packages/core/modal/common/item-picker/index.ts new file mode 100644 index 0000000000..1639c7e5db --- /dev/null +++ b/src/packages/core/modal/common/item-picker/index.ts @@ -0,0 +1 @@ +export * from './item-picker-modal.token.js'; diff --git a/src/packages/core/modal/token/item-picker-modal.token.ts b/src/packages/core/modal/common/item-picker/item-picker-modal.token.ts similarity index 88% rename from src/packages/core/modal/token/item-picker-modal.token.ts rename to src/packages/core/modal/common/item-picker/item-picker-modal.token.ts index 365c2f8088..d98658118a 100644 --- a/src/packages/core/modal/token/item-picker-modal.token.ts +++ b/src/packages/core/modal/common/item-picker/item-picker-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '../../token/index.js'; export type UmbItemPickerModalData = { headline: string; diff --git a/src/packages/core/modal/common/item-picker/manifests.ts b/src/packages/core/modal/common/item-picker/manifests.ts new file mode 100644 index 0000000000..302ae9fa01 --- /dev/null +++ b/src/packages/core/modal/common/item-picker/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.ItemPicker', + name: 'Item Picker Modal', + element: () => import('./item-picker-modal.element.js'), + }, +]; diff --git a/src/packages/core/modal/common/manifests.ts b/src/packages/core/modal/common/manifests.ts index e5308f533d..c09e5a2f38 100644 --- a/src/packages/core/modal/common/manifests.ts +++ b/src/packages/core/modal/common/manifests.ts @@ -1,36 +1,4 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as confirmManifests } from './confirm/manifests.js'; +import { manifests as itemPickerManifests } from './item-picker/manifests.js'; -const modals: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.Confirm', - name: 'Confirm Modal', - element: () => import('./confirm/confirm-modal.element.js'), - }, - { - type: 'modal', - alias: 'Umb.Modal.IconPicker', - name: 'Icon Picker Modal', - element: () => import('./icon-picker/icon-picker-modal.element.js'), - }, - { - type: 'modal', - alias: 'Umb.Modal.CodeEditor', - name: 'Code Editor Modal', - element: () => import('./code-editor/code-editor-modal.element.js'), - }, - { - type: 'modal', - alias: 'Umb.Modal.EmbeddedMedia', - name: 'Embedded Media Modal', - element: () => import('./embedded-media/embedded-media-modal.element.js'), - }, - { - type: 'modal', - alias: 'Umb.Modal.ItemPicker', - name: 'Item Picker Modal', - element: () => import('./item-picker/item-picker-modal.element.js'), - }, -]; - -export const manifests: Array = [...modals]; +export const manifests: Array = [...confirmManifests, ...itemPickerManifests]; diff --git a/src/packages/core/modal/index.ts b/src/packages/core/modal/index.ts index 59329387f8..522242858c 100644 --- a/src/packages/core/modal/index.ts +++ b/src/packages/core/modal/index.ts @@ -5,4 +5,4 @@ export * from './token/index.js'; export * from './types.js'; export * from './component/modal-base.element.js'; export * from './component/modal.element.js'; -export * from './common/confirm/confirm-modal.controller.js'; +export * from './common/index.js'; diff --git a/src/packages/core/modal/manifests.ts b/src/packages/core/modal/manifests.ts new file mode 100644 index 0000000000..edd06202ae --- /dev/null +++ b/src/packages/core/modal/manifests.ts @@ -0,0 +1,3 @@ +import { manifests as commonManifests } from './common/manifests.js'; + +export const manifests: Array = [...commonManifests]; diff --git a/src/packages/core/modal/token/index.ts b/src/packages/core/modal/token/index.ts index a2958ea597..7fcdaada28 100644 --- a/src/packages/core/modal/token/index.ts +++ b/src/packages/core/modal/token/index.ts @@ -1,11 +1 @@ -export * from './change-password-modal.token.js'; -export * from './code-editor-modal.token.js'; -export * from './confirm-modal.token.js'; -export * from './debug-modal.token.js'; -export * from './embedded-media-modal.token.js'; -export * from './entity-user-permission-settings-modal.token.js'; -export * from './icon-picker-modal.token.js'; -export * from './item-picker-modal.token.js'; export * from './modal-token.js'; -export * from './property-editor-ui-picker-modal.token.js'; -export * from './workspace-modal.token.js'; diff --git a/src/packages/core/picker/manifests.ts b/src/packages/core/picker/manifests.ts index 7504bc1bc5..004b611afb 100644 --- a/src/packages/core/picker/manifests.ts +++ b/src/packages/core/picker/manifests.ts @@ -1,4 +1,4 @@ import { manifests as searchManifests } from './search/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...searchManifests]; +export const manifests: Array = [...searchManifests]; diff --git a/src/packages/core/picker/search/manifests.ts b/src/packages/core/picker/search/manifests.ts index 2a13be78ab..646aa7db7d 100644 --- a/src/packages/core/picker/search/manifests.ts +++ b/src/packages/core/picker/search/manifests.ts @@ -1,4 +1,4 @@ import { manifests as resultItemManifests } from './result-item/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...resultItemManifests]; +export const manifests: Array = [...resultItemManifests]; diff --git a/src/packages/core/picker/search/result-item/default/manifests.ts b/src/packages/core/picker/search/result-item/default/manifests.ts index 12711bdae6..dba09b999e 100644 --- a/src/packages/core/picker/search/result-item/default/manifests.ts +++ b/src/packages/core/picker/search/result-item/default/manifests.ts @@ -1,6 +1,6 @@ -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'kind', alias: 'Umb.Kind.PickerSearchResultItem.Default', diff --git a/src/packages/core/picker/search/result-item/manifests.ts b/src/packages/core/picker/search/result-item/manifests.ts index 98e3dac659..43d020c74e 100644 --- a/src/packages/core/picker/search/result-item/manifests.ts +++ b/src/packages/core/picker/search/result-item/manifests.ts @@ -1,4 +1,4 @@ import { manifests as defaultManifests } from './default/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...defaultManifests]; +export const manifests: Array = [...defaultManifests]; diff --git a/src/packages/core/property-action/components/property-action/default/default.action.kind.ts b/src/packages/core/property-action/components/property-action/default/default.action.kind.ts index fdc53a61a0..16664f5a3a 100644 --- a/src/packages/core/property-action/components/property-action/default/default.action.kind.ts +++ b/src/packages/core/property-action/components/property-action/default/default.action.kind.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.PropertyAction.Default', matchKind: 'default', diff --git a/src/packages/core/property-action/components/property-action/default/manifests.ts b/src/packages/core/property-action/components/property-action/default/manifests.ts index 3cb64a6f47..8d8ea584a1 100644 --- a/src/packages/core/property-action/components/property-action/default/manifests.ts +++ b/src/packages/core/property-action/components/property-action/default/manifests.ts @@ -1,4 +1,4 @@ import { manifest as defaultKindManifest } from './default.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [defaultKindManifest]; +export const manifests: Array = [defaultKindManifest]; diff --git a/src/packages/core/property-action/components/property-action/manifests.ts b/src/packages/core/property-action/components/property-action/manifests.ts index 58ab7db446..f506aba3d7 100644 --- a/src/packages/core/property-action/components/property-action/manifests.ts +++ b/src/packages/core/property-action/components/property-action/manifests.ts @@ -1,4 +1,4 @@ import { manifests as defaultWorkspaceActionManifests } from './default/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...defaultWorkspaceActionManifests]; +export const manifests: Array = [...defaultWorkspaceActionManifests]; diff --git a/src/packages/core/property-action/manifests.ts b/src/packages/core/property-action/manifests.ts index bca10e1652..d26963d35a 100644 --- a/src/packages/core/property-action/manifests.ts +++ b/src/packages/core/property-action/manifests.ts @@ -1,13 +1,9 @@ import { manifests as defaultManifests } from './components/property-action/manifests.js'; -import type { - ManifestPropertyActions, - ManifestTypes, - UmbBackofficeManifestKind, -} from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_WRITABLE_PROPERTY_CONDITION_ALIAS } from '@umbraco-cms/backoffice/property'; -export const propertyActionManifests: Array = [ +export const manifests: Array = [ { type: 'propertyAction', kind: 'default', @@ -42,9 +38,5 @@ export const propertyActionManifests: Array = [ }, ], }, -]; - -export const manifests: Array = [ ...defaultManifests, - ...propertyActionManifests, ]; diff --git a/src/packages/core/property-editor/index.ts b/src/packages/core/property-editor/index.ts index 5f5c1f5388..abd78bfa28 100644 --- a/src/packages/core/property-editor/index.ts +++ b/src/packages/core/property-editor/index.ts @@ -1,4 +1,5 @@ export * from './components/index.js'; export * from './config/index.js'; -export * from './events/index.js'; export * from './constants.js'; +export * from './events/index.js'; +export * from './ui-picker-modal/index.js'; diff --git a/src/packages/core/property-editor/manifests.ts b/src/packages/core/property-editor/manifests.ts new file mode 100644 index 0000000000..fb5a8ae26f --- /dev/null +++ b/src/packages/core/property-editor/manifests.ts @@ -0,0 +1,3 @@ +import { manifests as uiPickerModalManifests } from './ui-picker-modal/manifests.js'; + +export const manifests: Array = [...uiPickerModalManifests]; diff --git a/src/packages/core/property-editor/ui-picker-modal/index.ts b/src/packages/core/property-editor/ui-picker-modal/index.ts new file mode 100644 index 0000000000..10ce5e62e5 --- /dev/null +++ b/src/packages/core/property-editor/ui-picker-modal/index.ts @@ -0,0 +1 @@ +export * from './property-editor-ui-picker-modal.token.js'; diff --git a/src/packages/core/property-editor/ui-picker-modal/manifests.ts b/src/packages/core/property-editor/ui-picker-modal/manifests.ts new file mode 100644 index 0000000000..95c29a5ee0 --- /dev/null +++ b/src/packages/core/property-editor/ui-picker-modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.PropertyEditorUiPicker', + name: 'Property Editor UI Picker Modal', + element: () => import('./property-editor-ui-picker-modal.element.js'), + }, +]; diff --git a/src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts b/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.element.ts similarity index 99% rename from src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts rename to src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.element.ts index 3fb5bd97c2..b3aeeede87 100644 --- a/src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.element.ts +++ b/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.element.ts @@ -1,13 +1,13 @@ +import type { + UmbPropertyEditorUIPickerModalData, + UmbPropertyEditorUIPickerModalValue, +} from './property-editor-ui-picker-modal.token.js'; import { css, customElement, html, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { fromCamelCase } from '@umbraco-cms/backoffice/utils'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { umbFocus } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; -import type { - UmbPropertyEditorUIPickerModalData, - UmbPropertyEditorUIPickerModalValue, -} from '@umbraco-cms/backoffice/modal'; import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-property-editor-ui-picker-modal') diff --git a/src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts b/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.stories.ts similarity index 81% rename from src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts rename to src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.stories.ts index 036a9c7c58..6d9d81d8a6 100644 --- a/src/packages/data-type/modals/property-editor-ui-picker/property-editor-ui-picker-modal.stories.ts +++ b/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.stories.ts @@ -1,10 +1,10 @@ import type { UmbPropertyEditorUIPickerModalElement } from './property-editor-ui-picker-modal.element.js'; +import type { UmbPropertyEditorUIPickerModalValue } from './property-editor-ui-picker-modal.token.js'; import type { Meta, Story } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbPropertyEditorUIPickerModalValue } from '@umbraco-cms/backoffice/modal'; import './property-editor-ui-picker-modal.element.js'; -import '../../../core/components/body-layout/body-layout.element.js'; +import '../../components/body-layout/body-layout.element.js'; export default { title: 'API/Modals/Layouts/Property Editor UI Picker', diff --git a/src/packages/core/modal/token/property-editor-ui-picker-modal.token.ts b/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.token.ts similarity index 88% rename from src/packages/core/modal/token/property-editor-ui-picker-modal.token.ts rename to src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.token.ts index 185f5ff781..d6aacdea4b 100644 --- a/src/packages/core/modal/token/property-editor-ui-picker-modal.token.ts +++ b/src/packages/core/property-editor/ui-picker-modal/property-editor-ui-picker-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbPropertyEditorUIPickerModalData { /** @deprecated This property will be removed in Umbraco 15. */ diff --git a/src/packages/core/property-type/manifests.ts b/src/packages/core/property-type/manifests.ts index 71c165c901..f3edde04ca 100644 --- a/src/packages/core/property-type/manifests.ts +++ b/src/packages/core/property-type/manifests.ts @@ -1,4 +1,3 @@ import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...workspaceManifests]; +export const manifests: Array = [...workspaceManifests]; diff --git a/src/packages/core/property-type/workspace/manifests.ts b/src/packages/core/property-type/workspace/manifests.ts index 04d218ce52..4ca44e459f 100644 --- a/src/packages/core/property-type/workspace/manifests.ts +++ b/src/packages/core/property-type/workspace/manifests.ts @@ -1,8 +1,7 @@ import { UMB_PROPERTY_TYPE_ENTITY_TYPE, UMB_PROPERTY_TYPE_WORKSPACE_ALIAS } from './constants.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'workspace', kind: 'routable', diff --git a/src/packages/core/property-type/workspace/property-type-workspace.context.ts b/src/packages/core/property-type/workspace/property-type-workspace.context.ts index 42aef070df..022c0b5f88 100644 --- a/src/packages/core/property-type/workspace/property-type-workspace.context.ts +++ b/src/packages/core/property-type/workspace/property-type-workspace.context.ts @@ -4,6 +4,7 @@ import type { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property import type { UmbInvariantDatasetWorkspaceContext, UmbRoutableWorkspaceContext, + ManifestWorkspace, } from '@umbraco-cms/backoffice/workspace'; import { UmbSubmittableWorkspaceContextBase, @@ -12,7 +13,6 @@ import { } from '@umbraco-cms/backoffice/workspace'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type'; import { UMB_CONTENT_TYPE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/content-type'; import { UmbId } from '@umbraco-cms/backoffice/id'; diff --git a/src/packages/core/property-type/workspace/property-type-workspace.modal-token.ts b/src/packages/core/property-type/workspace/property-type-workspace.modal-token.ts index 96eee293a2..1933f49fd0 100644 --- a/src/packages/core/property-type/workspace/property-type-workspace.modal-token.ts +++ b/src/packages/core/property-type/workspace/property-type-workspace.modal-token.ts @@ -1,5 +1,5 @@ import { UMB_PROPERTY_TYPE_ENTITY_TYPE } from './constants.js'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbPropertyTypeWorkspaceData extends UmbWorkspaceModalData { diff --git a/src/packages/core/property-type/workspace/views/settings/property-workspace-view-settings.element.ts b/src/packages/core/property-type/workspace/views/settings/property-workspace-view-settings.element.ts index bb25f67331..92a723ecec 100644 --- a/src/packages/core/property-type/workspace/views/settings/property-workspace-view-settings.element.ts +++ b/src/packages/core/property-type/workspace/views/settings/property-workspace-view-settings.element.ts @@ -6,7 +6,7 @@ import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_CONTENT_TYPE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/content-type'; import type { UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import type { UUIBooleanInputEvent, UUIInputEvent, diff --git a/src/packages/core/property/conditions/manifests.ts b/src/packages/core/property/conditions/manifests.ts index 62385f6b1d..2eade224a4 100644 --- a/src/packages/core/property/conditions/manifests.ts +++ b/src/packages/core/property/conditions/manifests.ts @@ -1,7 +1,6 @@ import { UMB_WRITABLE_PROPERTY_CONDITION_ALIAS } from './constants.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'condition', name: 'Writable Property Condition', diff --git a/src/packages/core/property/property-dataset/property-dataset-base-context.ts b/src/packages/core/property/property-dataset/property-dataset-base-context.ts index b48d71fd3d..d51def11c0 100644 --- a/src/packages/core/property/property-dataset/property-dataset-base-context.ts +++ b/src/packages/core/property/property-dataset/property-dataset-base-context.ts @@ -82,7 +82,7 @@ export class UmbPropertyDatasetContextBase /** * Gets the read-only state of the current variant culture. - * @return {*} {boolean} + * @returns {*} {boolean} * @memberof UmbBlockGridInlinePropertyDatasetContext */ getReadOnly(): boolean { diff --git a/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/empty-recycle-bin.action.kind.ts b/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/empty-recycle-bin.action.kind.ts index de15a8826a..531a21c00e 100644 --- a/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/empty-recycle-bin.action.kind.ts +++ b/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/empty-recycle-bin.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '../../../entity-action/default/default.action.kind.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.RecycleBin.Empty', matchKind: 'emptyRecycleBin', @@ -15,7 +15,8 @@ export const manifest: UmbBackofficeManifestKind = { forEntityTypes: [], meta: { icon: 'icon-trash', - label: 'Empty Recycle Bin...', + label: 'Empty Recycle Bin', + additionalOptions: true, }, }, }; diff --git a/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/manifests.ts b/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/manifests.ts index c6618e9347..8418cebf23 100644 --- a/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/manifests.ts +++ b/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/manifests.ts @@ -1,4 +1,4 @@ import { manifest as emptyRecycleBinKindManifest } from './empty-recycle-bin.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [emptyRecycleBinKindManifest]; +export const manifests: Array = [emptyRecycleBinKindManifest]; diff --git a/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/manifests.ts b/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/manifests.ts index 23255c81a8..1e5d2e22df 100644 --- a/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/manifests.ts +++ b/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/manifests.ts @@ -1,7 +1,7 @@ import { manifest as kindManifest } from './restore-from-recycle-bin.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ kindManifest, { type: 'modal', diff --git a/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/restore-from-recycle-bin.action.kind.ts b/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/restore-from-recycle-bin.action.kind.ts index 18edd68da0..c5a2004a26 100644 --- a/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/restore-from-recycle-bin.action.kind.ts +++ b/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/restore-from-recycle-bin.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '../../../entity-action/default/default.action.kind.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.RecycleBin.Restore', matchKind: 'restoreFromRecycleBin', @@ -15,8 +15,9 @@ export const manifest: UmbBackofficeManifestKind = { forEntityTypes: [], meta: { icon: 'icon-undo', - label: 'Restore...', + label: 'Restore', pickerModal: '', + additionalOptions: true, }, }, }; diff --git a/src/packages/core/recycle-bin/entity-action/trash/manifests.ts b/src/packages/core/recycle-bin/entity-action/trash/manifests.ts index f48d4f6879..46ec59d132 100644 --- a/src/packages/core/recycle-bin/entity-action/trash/manifests.ts +++ b/src/packages/core/recycle-bin/entity-action/trash/manifests.ts @@ -1,4 +1,4 @@ import { manifest as trashKindManifest } from './trash.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [trashKindManifest]; +export const manifests: Array = [trashKindManifest]; diff --git a/src/packages/core/recycle-bin/entity-action/trash/trash.action.kind.ts b/src/packages/core/recycle-bin/entity-action/trash/trash.action.kind.ts index 32aac57159..a5b8770a45 100644 --- a/src/packages/core/recycle-bin/entity-action/trash/trash.action.kind.ts +++ b/src/packages/core/recycle-bin/entity-action/trash/trash.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '../../../entity-action/default/default.action.kind.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.Trash', matchKind: 'trash', @@ -18,6 +18,7 @@ export const manifest: UmbBackofficeManifestKind = { label: '#actions_trash', itemRepositoryAlias: '', recycleBinRepositoryAlias: '', + additionalOptions: true, }, }, }; diff --git a/src/packages/core/recycle-bin/manifests.ts b/src/packages/core/recycle-bin/manifests.ts index 1a0c4526d0..144c4bf02b 100644 --- a/src/packages/core/recycle-bin/manifests.ts +++ b/src/packages/core/recycle-bin/manifests.ts @@ -2,9 +2,9 @@ import { manifests as trashEntityActionManifests } from './entity-action/trash/m import { manifests as restoreFromRecycleBinEntityActionManifests } from './entity-action/restore-from-recycle-bin/manifests.js'; import { manifests as emptyRecycleBinEntityActionManifests } from './entity-action/empty-recycle-bin/manifests.js'; import { manifests as conditionManifests } from './conditions/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...conditionManifests, ...emptyRecycleBinEntityActionManifests, ...restoreFromRecycleBinEntityActionManifests, diff --git a/src/packages/core/section/conditions/index.ts b/src/packages/core/section/conditions/index.ts index 3256287dd5..06c33f562f 100644 --- a/src/packages/core/section/conditions/index.ts +++ b/src/packages/core/section/conditions/index.ts @@ -1 +1 @@ -export * from './section-user-permission.condition.js'; +export type * from './types.js'; diff --git a/src/packages/core/section/conditions/manifests.ts b/src/packages/core/section/conditions/manifests.ts new file mode 100644 index 0000000000..d502598705 --- /dev/null +++ b/src/packages/core/section/conditions/manifests.ts @@ -0,0 +1,17 @@ +import { UmbSectionAliasCondition } from './section-alias.condition.js'; +import { UmbSectionUserPermissionCondition } from './section-user-permission.condition.js'; + +export const manifests: Array = [ + { + type: 'condition', + name: 'Section User Permission Condition', + alias: 'Umb.Condition.SectionUserPermission', + api: UmbSectionUserPermissionCondition, + }, + { + type: 'condition', + name: 'Section Alias Condition', + alias: 'Umb.Condition.SectionAlias', + api: UmbSectionAliasCondition, + }, +]; diff --git a/src/packages/core/extension-registry/conditions/section-alias.condition.ts b/src/packages/core/section/conditions/section-alias.condition.ts similarity index 56% rename from src/packages/core/extension-registry/conditions/section-alias.condition.ts rename to src/packages/core/section/conditions/section-alias.condition.ts index b059d18c09..709bbfb7e2 100644 --- a/src/packages/core/extension-registry/conditions/section-alias.condition.ts +++ b/src/packages/core/section/conditions/section-alias.condition.ts @@ -1,11 +1,7 @@ -import { UmbConditionBase } from './condition-base.controller.js'; +import { UmbConditionBase } from '../../extension-registry/conditions/condition-base.controller.js'; +import type { SectionAliasConditionConfig } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import type { - ManifestCondition, - UmbConditionConfigBase, - UmbConditionControllerArguments, - UmbExtensionCondition, -} from '@umbraco-cms/backoffice/extension-api'; +import type { UmbConditionControllerArguments, UmbExtensionCondition } from '@umbraco-cms/backoffice/extension-api'; import { UMB_SECTION_CONTEXT } from '@umbraco-cms/backoffice/section'; export class UmbSectionAliasCondition @@ -35,24 +31,3 @@ export class UmbSectionAliasCondition } } } - -export type SectionAliasConditionConfig = UmbConditionConfigBase<'Umb.Condition.SectionAlias'> & { - /** - * Define the section that this extension should be available in - * @example "Umb.Section.Content" - */ - match: string; - /** - * Define one or more workspaces that this extension should be available in - * @example - * ["Umb.Section.Content", "Umb.Section.Media"] - */ - oneOf?: Array; -}; - -export const manifest: ManifestCondition = { - type: 'condition', - name: 'Section Alias Condition', - alias: 'Umb.Condition.SectionAlias', - api: UmbSectionAliasCondition, -}; diff --git a/src/packages/core/section/conditions/section-user-permission.condition.ts b/src/packages/core/section/conditions/section-user-permission.condition.ts index f57d742553..5cd34442bd 100644 --- a/src/packages/core/section/conditions/section-user-permission.condition.ts +++ b/src/packages/core/section/conditions/section-user-permission.condition.ts @@ -1,10 +1,7 @@ +import type { UmbSectionUserPermissionConditionConfig } from './types.js'; import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; -import type { - UmbConditionConfigBase, - UmbConditionControllerArguments, - UmbExtensionCondition, -} from '@umbraco-cms/backoffice/extension-api'; +import type { UmbConditionControllerArguments, UmbExtensionCondition } from '@umbraco-cms/backoffice/extension-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export class UmbSectionUserPermissionCondition extends UmbControllerBase implements UmbExtensionCondition { @@ -30,13 +27,3 @@ export class UmbSectionUserPermissionCondition extends UmbControllerBase impleme }); } } - -export type UmbSectionUserPermissionConditionConfig = UmbConditionConfigBase<'Umb.Condition.SectionUserPermission'> & { - /** - * - * - * @example - * "Umb.Section.Content" - */ - match: string; -}; diff --git a/src/packages/core/section/conditions/types.ts b/src/packages/core/section/conditions/types.ts new file mode 100644 index 0000000000..45adde8b02 --- /dev/null +++ b/src/packages/core/section/conditions/types.ts @@ -0,0 +1,32 @@ +import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; + +export type UmbSectionUserPermissionConditionConfig = UmbConditionConfigBase<'Umb.Condition.SectionUserPermission'> & { + /** + * + * + * @example + * "Umb.Section.Content" + */ + match: string; +}; + +export type SectionAliasConditionConfig = UmbConditionConfigBase<'Umb.Condition.SectionAlias'> & { + /** + * Define the section that this extension should be available in + * @example "Umb.Section.Content" + */ + match: string; + /** + * Define one or more workspaces that this extension should be available in + * @example + * ["Umb.Section.Content", "Umb.Section.Media"] + */ + oneOf?: Array; +}; + +declare global { + interface UmbExtensionConditionMap { + UmbSectionUserPermissionConditionConfig: UmbSectionUserPermissionConditionConfig; + UmbSectionAliasConditionConfig: SectionAliasConditionConfig; + } +} diff --git a/src/packages/core/section/index.ts b/src/packages/core/section/index.ts index 51e427cbb7..1da6d056ac 100644 --- a/src/packages/core/section/index.ts +++ b/src/packages/core/section/index.ts @@ -8,3 +8,4 @@ export * from './section-sidebar-menu-with-entity-actions/index.js'; export * from './section-sidebar-menu/index.js'; export * from './section-sidebar/index.js'; export * from './section.context.js'; +export type * from './types.js'; diff --git a/src/packages/core/section/manifests.ts b/src/packages/core/section/manifests.ts index 8442b3fd05..e188465778 100644 --- a/src/packages/core/section/manifests.ts +++ b/src/packages/core/section/manifests.ts @@ -1,19 +1,13 @@ -import { UmbSectionUserPermissionCondition } from './conditions/section-user-permission.condition.js'; +import { manifests as sectionUserPermissionConditionManifests } from './conditions/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.SectionPicker', name: 'Section Picker Modal', element: () => import('./section-picker-modal/section-picker-modal.element.js'), }, - { - type: 'condition', - name: 'Section User Permission Condition', - alias: 'Umb.Condition.SectionUserPermission', - api: UmbSectionUserPermissionCondition, - }, + ...sectionUserPermissionConditionManifests, ...repositoryManifests, ]; diff --git a/src/packages/core/section/repository/item/manifests.ts b/src/packages/core/section/repository/item/manifests.ts index 09c23128c7..f36dad7ea8 100644 --- a/src/packages/core/section/repository/item/manifests.ts +++ b/src/packages/core/section/repository/item/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_SECTION_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.Section.Item'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_SECTION_ITEM_REPOSITORY_ALIAS, - name: 'Section Item Repository', - api: () => import('./section-item.repository.js'), -}; - -export const manifests: Array = [itemRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_SECTION_ITEM_REPOSITORY_ALIAS, + name: 'Section Item Repository', + api: () => import('./section-item.repository.js'), + }, +]; diff --git a/src/packages/core/section/repository/manifests.ts b/src/packages/core/section/repository/manifests.ts index 0ed98fb019..3a7fa93c19 100644 --- a/src/packages/core/section/repository/manifests.ts +++ b/src/packages/core/section/repository/manifests.ts @@ -1,4 +1,3 @@ import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...itemManifests]; +export const manifests: Array = [...itemManifests]; diff --git a/src/packages/core/section/section-main-views/section-main-views.element.ts b/src/packages/core/section/section-main-views/section-main-views.element.ts index c7ad6fc056..2db690f7de 100644 --- a/src/packages/core/section/section-main-views/section-main-views.element.ts +++ b/src/packages/core/section/section-main-views/section-main-views.element.ts @@ -12,7 +12,6 @@ import { UmbExtensionsManifestInitializer, createExtensionElement } from '@umbra import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { pathFolderName } from '@umbraco-cms/backoffice/utils'; -// TODO: this might need a new name, since it's both views and dashboards @customElement('umb-section-main-views') export class UmbSectionMainViewElement extends UmbLitElement { @property({ type: String, attribute: 'section-alias' }) @@ -48,12 +47,12 @@ export class UmbSectionMainViewElement extends UmbLitElement { } #constructDashboardPath(manifest: ManifestDashboard) { - const dashboardName = manifest.meta.label ?? manifest.name; + const dashboardName = manifest.meta.label ?? manifest.name ?? manifest.alias; return 'dashboard/' + (manifest.meta.pathname ? manifest.meta.pathname : pathFolderName(dashboardName)); } #constructViewPath(manifest: ManifestSectionView) { - const viewName = manifest.meta.label ?? manifest.name; + const viewName = manifest.meta.label ?? manifest.name ?? manifest.alias; return 'view/' + (manifest.meta.pathname ? manifest.meta.pathname : pathFolderName(viewName)); } @@ -119,7 +118,9 @@ export class UmbSectionMainViewElement extends UmbLitElement { return html` `; })} @@ -134,7 +135,7 @@ export class UmbSectionMainViewElement extends UmbLitElement { ? html` ${this._views.map((view) => { - const viewName = view.meta.label ? this.localize.string(view.meta.label) : view.name; + const viewName = view.meta.label ? this.localize.string(view.meta.label) : (view.name ?? view.alias); const viewPath = this.#constructViewPath(view); return html` = [...renameEntityActionManifests]; +export const manifests: Array = [...renameEntityActionManifests]; diff --git a/src/packages/core/server-file-system/rename/manifests.ts b/src/packages/core/server-file-system/rename/manifests.ts index f4131c023b..da7e971466 100644 --- a/src/packages/core/server-file-system/rename/manifests.ts +++ b/src/packages/core/server-file-system/rename/manifests.ts @@ -1,8 +1,8 @@ import { manifests as renameModalManifests } from './modal/manifests.js'; import { manifest as renameKindManifest } from './rename-server-file.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...renameModalManifests, renameKindManifest, ]; diff --git a/src/packages/core/server-file-system/rename/rename-server-file.action.kind.ts b/src/packages/core/server-file-system/rename/rename-server-file.action.kind.ts index f54bb2417c..c151e755fc 100644 --- a/src/packages/core/server-file-system/rename/rename-server-file.action.kind.ts +++ b/src/packages/core/server-file-system/rename/rename-server-file.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '../../entity-action/default/default.action.kind.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.ServerFile.Rename', matchKind: 'renameServerFile', diff --git a/src/packages/core/sorter/sorter.controller.ts b/src/packages/core/sorter/sorter.controller.ts index 3fb39166e1..0f13d130ae 100644 --- a/src/packages/core/sorter/sorter.controller.ts +++ b/src/packages/core/sorter/sorter.controller.ts @@ -298,7 +298,7 @@ export class UmbSorterController} + * @returns {Array} * @memberof UmbSorterController */ getModel(): Array { diff --git a/src/packages/core/tree/default/default-tree.context.ts b/src/packages/core/tree/default/default-tree.context.ts index cd1ba08f54..c3d92d0a25 100644 --- a/src/packages/core/tree/default/default-tree.context.ts +++ b/src/packages/core/tree/default/default-tree.context.ts @@ -2,13 +2,10 @@ import type { UmbTreeItemModel, UmbTreeRootModel, UmbTreeStartNode } from '../ty import type { UmbTreeRepository } from '../data/tree-repository.interface.js'; import type { UmbTreeContext } from '../tree-context.interface.js'; import type { UmbTreeRootItemsRequestArgs } from '../data/types.js'; +import type { ManifestTree } from '../extensions/index.js'; import { UMB_TREE_CONTEXT } from './default-tree.context-token.js'; import { type UmbActionEventContext, UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { - type ManifestRepository, - type ManifestTree, - umbExtensionsRegistry, -} from '@umbraco-cms/backoffice/extension-registry'; +import { type ManifestRepository, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api'; diff --git a/src/packages/core/tree/default/manifests.ts b/src/packages/core/tree/default/manifests.ts index b82cb80c62..cf9f591854 100644 --- a/src/packages/core/tree/default/manifests.ts +++ b/src/packages/core/tree/default/manifests.ts @@ -1,15 +1,15 @@ -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -const defaultTreeKind: UmbBackofficeManifestKind = { - type: 'kind', - alias: 'Umb.Kind.Tree.Default', - matchKind: 'default', - matchType: 'tree', - manifest: { - type: 'tree', - api: () => import('./default-tree.context.js'), - element: () => import('./default-tree.element.js'), +export const manifests: Array = [ + { + type: 'kind', + alias: 'Umb.Kind.Tree.Default', + matchKind: 'default', + matchType: 'tree', + manifest: { + type: 'tree', + api: () => import('./default-tree.context.js'), + element: () => import('./default-tree.element.js'), + }, }, -}; - -export const manifests: Array = [defaultTreeKind]; +]; diff --git a/src/packages/core/tree/entity-actions/duplicate-to/duplicate-to.action.kind.ts b/src/packages/core/tree/entity-actions/duplicate-to/duplicate-to.action.kind.ts index 7b71b4ecdd..92fccb5a8c 100644 --- a/src/packages/core/tree/entity-actions/duplicate-to/duplicate-to.action.kind.ts +++ b/src/packages/core/tree/entity-actions/duplicate-to/duplicate-to.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '@umbraco-cms/backoffice/entity-action'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.DuplicateTo', matchKind: 'duplicateTo', @@ -16,6 +16,7 @@ export const manifest: UmbBackofficeManifestKind = { meta: { icon: 'icon-enter', label: '#actions_copyTo', + additionalOptions: true, treeRepositoryAlias: '', duplicateRepositoryAlias: '', treeAlias: '', diff --git a/src/packages/core/tree/entity-actions/move/move-to.action.kind.ts b/src/packages/core/tree/entity-actions/move/move-to.action.kind.ts index 600edfa84d..92da7f459d 100644 --- a/src/packages/core/tree/entity-actions/move/move-to.action.kind.ts +++ b/src/packages/core/tree/entity-actions/move/move-to.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '@umbraco-cms/backoffice/entity-action'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.MoveTo', matchKind: 'moveTo', @@ -16,6 +16,7 @@ export const manifest: UmbBackofficeManifestKind = { meta: { icon: 'icon-enter', label: '#actions_move', + additionalOptions: true, treeRepositoryAlias: '', moveRepositoryAlias: '', treeAlias: '', diff --git a/src/packages/core/tree/entity-actions/reload-tree-item-children/manifests.ts b/src/packages/core/tree/entity-actions/reload-tree-item-children/manifests.ts index 49838e1b0c..5b4a8b2116 100644 --- a/src/packages/core/tree/entity-actions/reload-tree-item-children/manifests.ts +++ b/src/packages/core/tree/entity-actions/reload-tree-item-children/manifests.ts @@ -1,4 +1,4 @@ import { manifest as reloadTreeItemChildrenKind } from './reload-tree-item-children.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [reloadTreeItemChildrenKind]; +export const manifests: Array = [reloadTreeItemChildrenKind]; diff --git a/src/packages/core/tree/entity-actions/reload-tree-item-children/reload-tree-item-children.action.kind.ts b/src/packages/core/tree/entity-actions/reload-tree-item-children/reload-tree-item-children.action.kind.ts index 56906b23a9..d3f8b8e9f2 100644 --- a/src/packages/core/tree/entity-actions/reload-tree-item-children/reload-tree-item-children.action.kind.ts +++ b/src/packages/core/tree/entity-actions/reload-tree-item-children/reload-tree-item-children.action.kind.ts @@ -1,7 +1,7 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '@umbraco-cms/backoffice/entity-action'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.Tree.ReloadChildrenOf', matchKind: 'reloadTreeItemChildren', diff --git a/src/packages/core/tree/entity-actions/sort-children-of/sort-children-of.action.kind.ts b/src/packages/core/tree/entity-actions/sort-children-of/sort-children-of.action.kind.ts index bad57bb155..f8a0b3139e 100644 --- a/src/packages/core/tree/entity-actions/sort-children-of/sort-children-of.action.kind.ts +++ b/src/packages/core/tree/entity-actions/sort-children-of/sort-children-of.action.kind.ts @@ -1,7 +1,7 @@ import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '@umbraco-cms/backoffice/entity-action'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.SortChildrenOf', matchKind: 'sortChildrenOf', @@ -16,6 +16,7 @@ export const manifest: UmbBackofficeManifestKind = { meta: { icon: 'icon-height', label: '#actions_sort', + additionalOptions: true, itemRepositoryAlias: '', sortRepositoryAlias: '', }, diff --git a/src/packages/core/tree/extensions/index.ts b/src/packages/core/tree/extensions/index.ts new file mode 100644 index 0000000000..2d3f52d4e9 --- /dev/null +++ b/src/packages/core/tree/extensions/index.ts @@ -0,0 +1,2 @@ +export * from './tree-item.extension.js'; +export * from './tree.extension.js'; diff --git a/src/packages/core/extension-registry/models/tree-item.model.ts b/src/packages/core/tree/extensions/tree-item.extension.ts similarity index 62% rename from src/packages/core/extension-registry/models/tree-item.model.ts rename to src/packages/core/tree/extensions/tree-item.extension.ts index 135c34f42f..f5f2b6cb2e 100644 --- a/src/packages/core/extension-registry/models/tree-item.model.ts +++ b/src/packages/core/tree/extensions/tree-item.extension.ts @@ -1,5 +1,5 @@ -import type { UmbTreeItemModel } from '../../tree/types.js'; -import type { UmbTreeItemContext } from '../../tree/tree-item/index.js'; +import type { UmbTreeItemModel } from '../types.js'; +import type { UmbTreeItemContext } from '../tree-item/index.js'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import type { ManifestElementAndApi } from '@umbraco-cms/backoffice/extension-api'; @@ -8,3 +8,9 @@ export interface ManifestTreeItem type: 'treeItem'; forEntityTypes: Array; } + +declare global { + interface UmbExtensionManifestMap { + umbTreeItem: ManifestTreeItem; + } +} diff --git a/src/packages/core/extension-registry/models/tree.model.ts b/src/packages/core/tree/extensions/tree.extension.ts similarity index 66% rename from src/packages/core/extension-registry/models/tree.model.ts rename to src/packages/core/tree/extensions/tree.extension.ts index fce6b56f7a..b3175d5409 100644 --- a/src/packages/core/extension-registry/models/tree.model.ts +++ b/src/packages/core/tree/extensions/tree.extension.ts @@ -1,7 +1,6 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; -export interface ManifestTree extends ManifestElementAndApi, ManifestWithDynamicConditions { +export interface ManifestTree extends ManifestElementAndApi, ManifestWithDynamicConditions { type: 'tree'; meta: MetaTree; } @@ -9,3 +8,9 @@ export interface ManifestTree extends ManifestElementAndApi, ManifestWithDynamic export interface MetaTree { repositoryAlias: string; } + +declare global { + interface UmbExtensionManifestMap { + umbTree: ManifestTree; + } +} diff --git a/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.kind.ts b/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.kind.ts index 6d3ec770bf..3bd1260218 100644 --- a/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.kind.ts +++ b/src/packages/core/tree/folder/entity-action/create-folder/create-folder.action.kind.ts @@ -1,8 +1,8 @@ import { UmbCreateFolderEntityAction } from './create-folder.action.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '@umbraco-cms/backoffice/entity-action'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.Folder.Create', matchKind: 'folderCreate', @@ -17,6 +17,7 @@ export const manifest: UmbBackofficeManifestKind = { meta: { icon: 'icon-add', label: '#actions_folderCreate', + additionalOptions: true, }, }, }; diff --git a/src/packages/core/tree/folder/entity-action/delete-folder/delete-folder.action.kind.ts b/src/packages/core/tree/folder/entity-action/delete-folder/delete-folder.action.kind.ts index 30677f4ba5..82a8cdfb64 100644 --- a/src/packages/core/tree/folder/entity-action/delete-folder/delete-folder.action.kind.ts +++ b/src/packages/core/tree/folder/entity-action/delete-folder/delete-folder.action.kind.ts @@ -1,8 +1,8 @@ import { UmbDeleteFolderEntityAction } from './delete-folder.action.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '@umbraco-cms/backoffice/entity-action'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.Folder.Delete', matchKind: 'folderDelete', @@ -17,6 +17,7 @@ export const manifest: UmbBackofficeManifestKind = { meta: { icon: 'icon-trash', label: '#actions_folderDelete', + additionalOptions: true, }, }, }; diff --git a/src/packages/core/tree/folder/entity-action/manifests.ts b/src/packages/core/tree/folder/entity-action/manifests.ts index 6aac6266a6..9fc841d1b5 100644 --- a/src/packages/core/tree/folder/entity-action/manifests.ts +++ b/src/packages/core/tree/folder/entity-action/manifests.ts @@ -1,9 +1,9 @@ import { manifest as createKindManifest } from './create-folder/create-folder.action.kind.js'; import { manifest as deleteKindManifest } from './delete-folder/delete-folder.action.kind.js'; import { manifest as updateKindManifest } from './update-folder/update-folder.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ createKindManifest, deleteKindManifest, updateKindManifest, diff --git a/src/packages/core/tree/folder/entity-action/update-folder/update-folder.action.kind.ts b/src/packages/core/tree/folder/entity-action/update-folder/update-folder.action.kind.ts index 39f62fcb10..f732d6a564 100644 --- a/src/packages/core/tree/folder/entity-action/update-folder/update-folder.action.kind.ts +++ b/src/packages/core/tree/folder/entity-action/update-folder/update-folder.action.kind.ts @@ -1,8 +1,8 @@ import { UmbUpdateFolderEntityAction } from './update-folder.action.js'; -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from '@umbraco-cms/backoffice/entity-action'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.EntityAction.Folder.Update', matchKind: 'folderUpdate', @@ -17,6 +17,7 @@ export const manifest: UmbBackofficeManifestKind = { meta: { icon: 'icon-edit', label: '#actions_folderRename', + additionalOptions: true, }, }, }; diff --git a/src/packages/core/tree/folder/manifests.ts b/src/packages/core/tree/folder/manifests.ts index fc90ffc72a..086e2cc8ba 100644 --- a/src/packages/core/tree/folder/manifests.ts +++ b/src/packages/core/tree/folder/manifests.ts @@ -1,8 +1,8 @@ import { manifests as modalManifests } from './modal/manifests.js'; import { manifests as entityActionManifests } from './entity-action/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...modalManifests, ...entityActionManifests, ]; diff --git a/src/packages/core/tree/folder/modal/manifests.ts b/src/packages/core/tree/folder/modal/manifests.ts index 710d9fc4f8..71de4bf7ea 100644 --- a/src/packages/core/tree/folder/modal/manifests.ts +++ b/src/packages/core/tree/folder/modal/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.Folder.Update', @@ -14,5 +12,3 @@ const modals: Array = [ js: () => import('./folder-create-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/core/tree/index.ts b/src/packages/core/tree/index.ts index d5eef44476..715320a839 100644 --- a/src/packages/core/tree/index.ts +++ b/src/packages/core/tree/index.ts @@ -4,6 +4,7 @@ export * from './data/index.js'; export * from './tree-menu-item-default/index.js'; export * from './folder/index.js'; export * from './tree.element.js'; +export * from './extensions/index.js'; export * from './entity-actions/sort-children-of/index.js'; export * from './entity-actions/reload-tree-item-children/index.js'; diff --git a/src/packages/core/tree/manifests.ts b/src/packages/core/tree/manifests.ts index 55aba35023..e1972b17cc 100644 --- a/src/packages/core/tree/manifests.ts +++ b/src/packages/core/tree/manifests.ts @@ -3,9 +3,9 @@ import { manifests as defaultTreeItemManifests } from './tree-item/tree-item-def import { manifests as defaultTreeManifests } from './default/manifests.js'; import { manifests as treePickerManifests } from './tree-picker-modal/manifests.js'; import { manifests as entityActionManifests } from './entity-actions/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...defaultTreeItemManifests, ...defaultTreeManifests, ...entityActionManifests, diff --git a/src/packages/core/tree/tree-item/tree-item-base/tree-item-context-base.ts b/src/packages/core/tree/tree-item/tree-item-base/tree-item-context-base.ts index 7c64a54380..5014d62716 100644 --- a/src/packages/core/tree/tree-item/tree-item-base/tree-item-context-base.ts +++ b/src/packages/core/tree/tree-item/tree-item-base/tree-item-context-base.ts @@ -2,16 +2,15 @@ import type { UmbTreeItemContext } from '../tree-item-context.interface.js'; import { UMB_TREE_CONTEXT, type UmbDefaultTreeContext } from '../../default/index.js'; import type { UmbTreeItemModel, UmbTreeRootModel } from '../../types.js'; import { UmbRequestReloadTreeItemChildrenEvent } from '../../entity-actions/reload-tree-item-children/index.js'; +import type { ManifestTreeItem } from '../../extensions/index.js'; import { map } from '@umbraco-cms/backoffice/external/rxjs'; import { UmbArrayState, UmbBooleanState, UmbObjectState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UMB_SECTION_CONTEXT, UMB_SECTION_SIDEBAR_CONTEXT } from '@umbraco-cms/backoffice/section'; -import type { UmbSectionContext, UmbSectionSidebarContext } from '@umbraco-cms/backoffice/section'; -import type { ManifestTreeItem } from '@umbraco-cms/backoffice/extension-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; -import { UMB_ACTION_EVENT_CONTEXT, type UmbActionEventContext } from '@umbraco-cms/backoffice/action'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import { UmbRequestReloadChildrenOfEntityEvent, UmbRequestReloadStructureForEntityEvent, @@ -69,9 +68,9 @@ export abstract class UmbTreeItemContextBase< readonly foldersOnly = this.#foldersOnly.asObservable(); treeContext?: UmbDefaultTreeContext; - #sectionContext?: UmbSectionContext; - #sectionSidebarContext?: UmbSectionSidebarContext; - #actionEventContext?: UmbActionEventContext; + #sectionContext?: typeof UMB_SECTION_CONTEXT.TYPE; + #sectionSidebarContext?: typeof UMB_SECTION_SIDEBAR_CONTEXT.TYPE; + #actionEventContext?: typeof UMB_ACTION_EVENT_CONTEXT.TYPE; // TODO: get this from the tree context #paging = { diff --git a/src/packages/core/tree/tree-item/tree-item-default/manifests.ts b/src/packages/core/tree/tree-item/tree-item-default/manifests.ts index e48e690f95..237176c148 100644 --- a/src/packages/core/tree/tree-item/tree-item-default/manifests.ts +++ b/src/packages/core/tree/tree-item/tree-item-default/manifests.ts @@ -1,15 +1,15 @@ -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -const kind: UmbBackofficeManifestKind = { - type: 'kind', - alias: 'Umb.Kind.TreeItem.Default', - matchKind: 'default', - matchType: 'treeItem', - manifest: { - type: 'treeItem', - api: () => import('./tree-item-default.context.js'), - element: () => import('./tree-item-default.element.js'), +export const manifests: Array = [ + { + type: 'kind', + alias: 'Umb.Kind.TreeItem.Default', + matchKind: 'default', + matchType: 'treeItem', + manifest: { + type: 'treeItem', + api: () => import('./tree-item-default.context.js'), + element: () => import('./tree-item-default.element.js'), + }, }, -}; - -export const manifests: Array = [kind]; +]; diff --git a/src/packages/core/tree/tree-item/tree-item.element.ts b/src/packages/core/tree/tree-item/tree-item.element.ts index ecbde79edb..80b0f96288 100644 --- a/src/packages/core/tree/tree-item/tree-item.element.ts +++ b/src/packages/core/tree/tree-item/tree-item.element.ts @@ -1,5 +1,5 @@ +import type { ManifestTreeItem } from '../extensions/index.js'; import { customElement, property } from '@umbraco-cms/backoffice/external/lit'; -import type { ManifestTreeItem } from '@umbraco-cms/backoffice/extension-registry'; import { UmbExtensionElementAndApiSlotElementBase, umbExtensionsRegistry, diff --git a/src/packages/core/tree/tree-menu-item-default/tree-menu-item-default.element.ts b/src/packages/core/tree/tree-menu-item-default/tree-menu-item-default.element.ts index d80c5f861b..c7fd51cc5d 100644 --- a/src/packages/core/tree/tree-menu-item-default/tree-menu-item-default.element.ts +++ b/src/packages/core/tree/tree-menu-item-default/tree-menu-item-default.element.ts @@ -2,13 +2,13 @@ import { html, nothing, customElement, property } from '@umbraco-cms/backoffice/ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { ManifestMenuItemTreeKind, - UmbBackofficeManifestKind, + UmbExtensionManifestKind, UmbMenuItemElement, } from '@umbraco-cms/backoffice/extension-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; // TODO: Move to separate file: -const manifest: UmbBackofficeManifestKind = { +const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.Tree', matchKind: 'tree', diff --git a/src/packages/core/tree/tree-picker-modal/manifests.ts b/src/packages/core/tree/tree-picker-modal/manifests.ts index 8c015e1440..e4a6e422c1 100644 --- a/src/packages/core/tree/tree-picker-modal/manifests.ts +++ b/src/packages/core/tree/tree-picker-modal/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.TreePicker', diff --git a/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts b/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts index 94aa1c4476..dcb3fc0159 100644 --- a/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts +++ b/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts @@ -3,7 +3,8 @@ import { UmbTreeItemPickerContext } from '../tree-item-picker/index.js'; import type { UmbTreePickerModalData, UmbTreePickerModalValue } from './tree-picker-modal.token.js'; import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit'; import { html, customElement, state, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; -import { UMB_WORKSPACE_MODAL, UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbDeselectedEvent, UmbSelectedEvent } from '@umbraco-cms/backoffice/event'; import type { UmbTreeItemModelBase } from '@umbraco-cms/backoffice/tree'; diff --git a/src/packages/core/tree/tree-picker-modal/tree-picker-modal.token.ts b/src/packages/core/tree/tree-picker-modal/tree-picker-modal.token.ts index 22fd9c249b..4d98367e34 100644 --- a/src/packages/core/tree/tree-picker-modal/tree-picker-modal.token.ts +++ b/src/packages/core/tree/tree-picker-modal/tree-picker-modal.token.ts @@ -1,6 +1,7 @@ import type { UmbTreeStartNode } from '../types.js'; import { UMB_TREE_PICKER_MODAL_ALIAS } from './constants.js'; -import type { UmbPickerModalData, UmbPickerModalValue, UmbWorkspaceModalData } from '@umbraco-cms/backoffice/modal'; +import type { UmbPickerModalData, UmbPickerModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; import type { UmbPathPattern, UmbPathPatternParamsType } from '@umbraco-cms/backoffice/router'; diff --git a/src/packages/core/tree/tree.element.ts b/src/packages/core/tree/tree.element.ts index 6eb0e6ee57..dcb2340d9b 100644 --- a/src/packages/core/tree/tree.element.ts +++ b/src/packages/core/tree/tree.element.ts @@ -1,5 +1,5 @@ +import type { ManifestTree } from './extensions/index.js'; import { customElement } from '@umbraco-cms/backoffice/external/lit'; -import type { ManifestTree } from '@umbraco-cms/backoffice/extension-registry'; import { UmbExtensionElementAndApiSlotElementBase } from '@umbraco-cms/backoffice/extension-registry'; @customElement('umb-tree') diff --git a/src/packages/core/tree/types.ts b/src/packages/core/tree/types.ts index f190e15127..42ade241fd 100644 --- a/src/packages/core/tree/types.ts +++ b/src/packages/core/tree/types.ts @@ -1,4 +1,5 @@ import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; +export type * from './extensions/index.js'; export interface UmbTreeItemModelBase extends UmbEntityModel { name: string; diff --git a/src/packages/core/validation/controllers/validation.controller.ts b/src/packages/core/validation/controllers/validation.controller.ts index eac15a1308..80a819b598 100644 --- a/src/packages/core/validation/controllers/validation.controller.ts +++ b/src/packages/core/validation/controllers/validation.controller.ts @@ -219,7 +219,7 @@ export class UmbValidationController extends UmbControllerBase implements UmbVal /** * Validate this context, all the validators of this context will be validated. * Notice its a recursive check meaning sub validation contexts also validates their validators. - * @returns succeed {Promise} - Returns a promise that resolves to true if the validator succeeded, this depends on the validators and wether forceSucceed is set. + * @returns succeed {Promise} - Returns a promise that resolves to true if the validation succeeded. */ async validate(): Promise { // TODO: clear server messages here?, well maybe only if we know we will get new server messages? Do the server messages hook into the system like another validator? diff --git a/src/packages/core/workspace/components/manifests.ts b/src/packages/core/workspace/components/manifests.ts index 0870f24cb0..a08b080a82 100644 --- a/src/packages/core/workspace/components/manifests.ts +++ b/src/packages/core/workspace/components/manifests.ts @@ -2,9 +2,9 @@ import { manifests as workspaceActionManifests } from './workspace-action/manife import { manifests as workspaceActionMenuItemManifests } from './workspace-action-menu-item/manifests.js'; import { manifests as workspaceBreadcrumbManifests } from './workspace-breadcrumb/manifests.js'; import { manifests as workspaceViewManifests } from './workspace-collection/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...workspaceActionManifests, ...workspaceActionMenuItemManifests, ...workspaceBreadcrumbManifests, diff --git a/src/packages/core/workspace/components/workspace-action-menu-item/default/default.action.kind.ts b/src/packages/core/workspace/components/workspace-action-menu-item/default/default.action.kind.ts index 28349aa484..019873d27a 100644 --- a/src/packages/core/workspace/components/workspace-action-menu-item/default/default.action.kind.ts +++ b/src/packages/core/workspace/components/workspace-action-menu-item/default/default.action.kind.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.WorkspaceActionMenuItem.Default', matchKind: 'default', diff --git a/src/packages/core/workspace/components/workspace-action-menu-item/default/manifests.ts b/src/packages/core/workspace/components/workspace-action-menu-item/default/manifests.ts index 3cb64a6f47..8d8ea584a1 100644 --- a/src/packages/core/workspace/components/workspace-action-menu-item/default/manifests.ts +++ b/src/packages/core/workspace/components/workspace-action-menu-item/default/manifests.ts @@ -1,4 +1,4 @@ import { manifest as defaultKindManifest } from './default.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [defaultKindManifest]; +export const manifests: Array = [defaultKindManifest]; diff --git a/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts b/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts index 62943aca47..8d73b1d2d2 100644 --- a/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts +++ b/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts @@ -5,7 +5,7 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { ManifestWorkspaceActionMenuItemDefaultKind, MetaWorkspaceActionMenuItemDefaultKind, -} from '@umbraco-cms/backoffice/extension-registry'; +} from '@umbraco-cms/backoffice/workspace'; import type { UUIMenuItemEvent } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-workspace-action-menu-item') diff --git a/src/packages/core/workspace/components/workspace-action-menu-item/manifests.ts b/src/packages/core/workspace/components/workspace-action-menu-item/manifests.ts index 58ab7db446..f506aba3d7 100644 --- a/src/packages/core/workspace/components/workspace-action-menu-item/manifests.ts +++ b/src/packages/core/workspace/components/workspace-action-menu-item/manifests.ts @@ -1,4 +1,4 @@ import { manifests as defaultWorkspaceActionManifests } from './default/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...defaultWorkspaceActionManifests]; +export const manifests: Array = [...defaultWorkspaceActionManifests]; diff --git a/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts b/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts index 6ec742ac14..9f1e456f55 100644 --- a/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts +++ b/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts @@ -1,6 +1,6 @@ import { css, html, customElement, property, state, nothing, repeat } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { ManifestWorkspaceActionMenuItem } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspaceActionMenuItem } from '@umbraco-cms/backoffice/workspace'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UUIInterfaceColor, UUIInterfaceLook } from '@umbraco-cms/backoffice/external/uui'; import type { UmbExtensionElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api'; diff --git a/src/packages/core/workspace/components/workspace-action/default/default.action.kind.ts b/src/packages/core/workspace/components/workspace-action/default/default.action.kind.ts index 1187c81413..8b21321659 100644 --- a/src/packages/core/workspace/components/workspace-action/default/default.action.kind.ts +++ b/src/packages/core/workspace/components/workspace-action/default/default.action.kind.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.WorkspaceAction.Default', matchKind: 'default', diff --git a/src/packages/core/workspace/components/workspace-action/default/manifests.ts b/src/packages/core/workspace/components/workspace-action/default/manifests.ts index 3cb64a6f47..8d8ea584a1 100644 --- a/src/packages/core/workspace/components/workspace-action/default/manifests.ts +++ b/src/packages/core/workspace/components/workspace-action/default/manifests.ts @@ -1,4 +1,4 @@ import { manifest as defaultKindManifest } from './default.action.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [defaultKindManifest]; +export const manifests: Array = [defaultKindManifest]; diff --git a/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts b/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts index eeec574e3a..546a7f74db 100644 --- a/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts +++ b/src/packages/core/workspace/components/workspace-action/default/workspace-action.element.ts @@ -1,14 +1,14 @@ import type { UmbWorkspaceAction } from '../workspace-action.interface.js'; +import type { + ManifestWorkspaceAction, + ManifestWorkspaceActionMenuItem, + MetaWorkspaceActionDefaultKind, +} from '../../../types.js'; import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event'; import { html, customElement, property, state, ifDefined, when } from '@umbraco-cms/backoffice/external/lit'; import type { UUIButtonState } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { - umbExtensionsRegistry, - type ManifestWorkspaceAction, - type ManifestWorkspaceActionMenuItem, - type MetaWorkspaceActionDefaultKind, -} from '@umbraco-cms/backoffice/extension-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { type UmbExtensionElementAndApiInitializer, UmbExtensionsElementAndApiInitializer, diff --git a/src/packages/core/workspace/components/workspace-action/manifests.ts b/src/packages/core/workspace/components/workspace-action/manifests.ts index 58ab7db446..f506aba3d7 100644 --- a/src/packages/core/workspace/components/workspace-action/manifests.ts +++ b/src/packages/core/workspace/components/workspace-action/manifests.ts @@ -1,4 +1,4 @@ import { manifests as defaultWorkspaceActionManifests } from './default/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...defaultWorkspaceActionManifests]; +export const manifests: Array = [...defaultWorkspaceActionManifests]; diff --git a/src/packages/core/workspace/components/workspace-breadcrumb/manifests.ts b/src/packages/core/workspace/components/workspace-breadcrumb/manifests.ts index a0d8475e76..c0de2fa439 100644 --- a/src/packages/core/workspace/components/workspace-breadcrumb/manifests.ts +++ b/src/packages/core/workspace/components/workspace-breadcrumb/manifests.ts @@ -1,8 +1,8 @@ import { manifest as workspaceBreadcrumbKind } from './workspace-menu-breadcrumb/workspace-menu-breadcrumb.kind.js'; import { manifest as variantBreadcrumbKind } from './workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ workspaceBreadcrumbKind, variantBreadcrumbKind, ]; diff --git a/src/packages/core/workspace/components/workspace-breadcrumb/workspace-menu-breadcrumb/workspace-menu-breadcrumb.kind.ts b/src/packages/core/workspace/components/workspace-breadcrumb/workspace-menu-breadcrumb/workspace-menu-breadcrumb.kind.ts index 32c3475018..674fdc50c6 100644 --- a/src/packages/core/workspace/components/workspace-breadcrumb/workspace-menu-breadcrumb/workspace-menu-breadcrumb.kind.ts +++ b/src/packages/core/workspace/components/workspace-breadcrumb/workspace-menu-breadcrumb/workspace-menu-breadcrumb.kind.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.WorkspaceFooterApp.MenuBreadcrumb', matchKind: 'menuBreadcrumb', diff --git a/src/packages/core/workspace/components/workspace-breadcrumb/workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.kind.ts b/src/packages/core/workspace/components/workspace-breadcrumb/workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.kind.ts index 6c37392e39..74def3cd1c 100644 --- a/src/packages/core/workspace/components/workspace-breadcrumb/workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.kind.ts +++ b/src/packages/core/workspace/components/workspace-breadcrumb/workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.kind.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.WorkspaceFooterApp.VariantMenuBreadcrumb', matchKind: 'variantMenuBreadcrumb', diff --git a/src/packages/core/workspace/components/workspace-collection/manifests.ts b/src/packages/core/workspace/components/workspace-collection/manifests.ts index f2795cd8fb..19ec7fb94b 100644 --- a/src/packages/core/workspace/components/workspace-collection/manifests.ts +++ b/src/packages/core/workspace/components/workspace-collection/manifests.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'kind', alias: 'Umb.Kind.WorkspaceView.Collection', diff --git a/src/packages/core/workspace/components/workspace-collection/workspace-view-collection.element.ts b/src/packages/core/workspace/components/workspace-collection/workspace-view-collection.element.ts index 7d027b22c9..7679035ab5 100644 --- a/src/packages/core/workspace/components/workspace-collection/workspace-view-collection.element.ts +++ b/src/packages/core/workspace/components/workspace-collection/workspace-view-collection.element.ts @@ -5,7 +5,7 @@ import { UmbDataTypeDetailRepository } from '@umbraco-cms/backoffice/data-type'; import { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; import { UMB_COLLECTION_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import type { UmbDataTypeDetailModel } from '@umbraco-cms/backoffice/data-type'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; @customElement('umb-workspace-view-collection') export class UmbWorkspaceViewCollectionElement extends UmbLitElement implements UmbWorkspaceViewElement { diff --git a/src/packages/core/workspace/components/workspace-editor/workspace-editor.element.ts b/src/packages/core/workspace/components/workspace-editor/workspace-editor.element.ts index cfd8b429d4..61620df0db 100644 --- a/src/packages/core/workspace/components/workspace-editor/workspace-editor.element.ts +++ b/src/packages/core/workspace/components/workspace-editor/workspace-editor.element.ts @@ -3,7 +3,7 @@ import { createExtensionElement, UmbExtensionsManifestInitializer } from '@umbra 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 { ManifestWorkspaceView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspaceView } from '@umbraco-cms/backoffice/workspace'; import type { UmbRoute, UmbRouterSlotInitEvent, UmbRouterSlotChangeEvent } from '@umbraco-cms/backoffice/router'; /** diff --git a/src/packages/core/workspace/components/workspace-footer/workspace-footer.element.ts b/src/packages/core/workspace/components/workspace-footer/workspace-footer.element.ts index bb481b8c79..b34f61e59d 100644 --- a/src/packages/core/workspace/components/workspace-footer/workspace-footer.element.ts +++ b/src/packages/core/workspace/components/workspace-footer/workspace-footer.element.ts @@ -5,8 +5,11 @@ import { css, html, customElement, state } from '@umbraco-cms/backoffice/externa import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbModalContext } from '@umbraco-cms/backoffice/modal'; import { UMB_MODAL_CONTEXT } from '@umbraco-cms/backoffice/modal'; -import type { ManifestWorkspaceAction, MetaWorkspaceAction } from '@umbraco-cms/backoffice/extension-registry'; -import type { UmbWorkspaceActionArgs } from '@umbraco-cms/backoffice/workspace'; +import type { + ManifestWorkspaceAction, + MetaWorkspaceAction, + UmbWorkspaceActionArgs, +} from '@umbraco-cms/backoffice/workspace'; /** * diff --git a/src/packages/core/workspace/conditions/const.ts b/src/packages/core/workspace/conditions/const.ts new file mode 100644 index 0000000000..aa7f5b839f --- /dev/null +++ b/src/packages/core/workspace/conditions/const.ts @@ -0,0 +1 @@ +export const UMB_WORKSPACE_HAS_COLLECTION_CONDITION = 'Umb.Condition.WorkspaceHasCollection'; diff --git a/src/packages/core/workspace/conditions/index.ts b/src/packages/core/workspace/conditions/index.ts index 9ec898b193..06c33f562f 100644 --- a/src/packages/core/workspace/conditions/index.ts +++ b/src/packages/core/workspace/conditions/index.ts @@ -1,5 +1 @@ -export type { WorkspaceAliasConditionConfig } from './workspace-alias.condition.js'; -export type { WorkspaceEntityTypeConditionConfig } from './workspace-entity-type.condition.js'; -export type { WorkspaceHasCollectionConditionConfig } from './workspace-has-collection.condition.js'; -export type { WorkspaceContentTypeAliasConditionConfig as WorkspaceEntityContentTypeConditionConfig } from './workspace-content-type-alias.condition.js'; -export type { WorkspaceContentTypeAliasConditionConfig } from './workspace-content-type-alias.condition.js'; +export type * from './types.js'; diff --git a/src/packages/core/workspace/conditions/manifests.ts b/src/packages/core/workspace/conditions/manifests.ts index 68593d2174..36af326881 100644 --- a/src/packages/core/workspace/conditions/manifests.ts +++ b/src/packages/core/workspace/conditions/manifests.ts @@ -2,9 +2,8 @@ import { manifest as workspaceAliasCondition } from './workspace-alias.condition import { manifest as workspaceEntityTypeCondition } from './workspace-entity-type.condition.js'; import { manifest as workspaceHasCollectionCondition } from './workspace-has-collection.condition.js'; import { manifest as workspaceContentTypeAliasCondition } from './workspace-content-type-alias.condition.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ workspaceAliasCondition, workspaceEntityTypeCondition, workspaceHasCollectionCondition, diff --git a/src/packages/core/workspace/conditions/types.ts b/src/packages/core/workspace/conditions/types.ts new file mode 100644 index 0000000000..1dbba27b51 --- /dev/null +++ b/src/packages/core/workspace/conditions/types.ts @@ -0,0 +1,55 @@ +import type { UMB_WORKSPACE_HAS_COLLECTION_CONDITION } from './const.js'; +import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; + +export type WorkspaceAliasConditionConfig = UmbConditionConfigBase<'Umb.Condition.WorkspaceAlias'> & { + /** + * Define the workspace that this extension should be available in + * @example + * "Umb.Workspace.Document" + */ + match?: string; + /** + * Define one or more workspaces that this extension should be available in + * @example + * ["Umb.Workspace.Document", "Umb.Workspace.Media"] + */ + oneOf?: Array; +}; + +export type WorkspaceContentTypeAliasConditionConfig = + UmbConditionConfigBase<'Umb.Condition.WorkspaceContentTypeAlias'> & { + /** + * Define a content type alias in which workspace this extension should be available + * @example + * Depends on implementation, but i.e. "article", "image", "blockPage" + */ + match?: string; + /** + * Define one or more content type aliases in which workspace this extension should be available + * @example + * ["article", "image", "blockPage"] + */ + oneOf?: Array; + }; + +export type WorkspaceEntityTypeConditionConfig = UmbConditionConfigBase<'Umb.Condition.WorkspaceEntityType'> & { + /** + * Define the workspace that this extension should be available in + * @example + * "Document" + */ + match: string; +}; + +export type WorkspaceHasCollectionConditionConfig = UmbConditionConfigBase< + typeof UMB_WORKSPACE_HAS_COLLECTION_CONDITION +>; + +declare global { + interface UmbExtensionConditionMap { + umbWorkspaceAlias: WorkspaceAliasConditionConfig; + umbWorkspaceContentTypeAlias: WorkspaceContentTypeAliasConditionConfig; + umbWorkspaceEntityType: WorkspaceEntityTypeConditionConfig; + umbWorkspaceHasCollection: WorkspaceHasCollectionConditionConfig; + } +} diff --git a/src/packages/core/workspace/conditions/workspace-alias.condition.ts b/src/packages/core/workspace/conditions/workspace-alias.condition.ts index cd9026d329..e065f2d7a6 100644 --- a/src/packages/core/workspace/conditions/workspace-alias.condition.ts +++ b/src/packages/core/workspace/conditions/workspace-alias.condition.ts @@ -1,8 +1,8 @@ import { UMB_WORKSPACE_CONTEXT, type UmbWorkspaceContext } from '../contexts/index.js'; +import type { WorkspaceAliasConditionConfig } from './types.js'; import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; import type { ManifestCondition, - UmbConditionConfigBase, UmbConditionControllerArguments, UmbExtensionCondition, } from '@umbraco-cms/backoffice/extension-api'; @@ -34,21 +34,6 @@ export class UmbWorkspaceAliasCondition } } -export type WorkspaceAliasConditionConfig = UmbConditionConfigBase<'Umb.Condition.WorkspaceAlias'> & { - /** - * Define the workspace that this extension should be available in - * @example - * "Umb.Workspace.Document" - */ - match?: string; - /** - * Define one or more workspaces that this extension should be available in - * @example - * ["Umb.Workspace.Document", "Umb.Workspace.Media"] - */ - oneOf?: Array; -}; - export const manifest: ManifestCondition = { type: 'condition', name: 'Workspace Alias Condition', diff --git a/src/packages/core/workspace/conditions/workspace-content-type-alias.condition.ts b/src/packages/core/workspace/conditions/workspace-content-type-alias.condition.ts index eefd16baa0..c6bb6b8a4d 100644 --- a/src/packages/core/workspace/conditions/workspace-content-type-alias.condition.ts +++ b/src/packages/core/workspace/conditions/workspace-content-type-alias.condition.ts @@ -1,9 +1,9 @@ import { UmbConditionBase } from '../../extension-registry/conditions/condition-base.controller.js'; +import type { WorkspaceContentTypeAliasConditionConfig } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UMB_PROPERTY_STRUCTURE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import type { ManifestCondition, - UmbConditionConfigBase, UmbConditionControllerArguments, UmbExtensionCondition, } from '@umbraco-cms/backoffice/extension-api'; @@ -49,22 +49,6 @@ export class UmbWorkspaceContentTypeAliasCondition } } -export type WorkspaceContentTypeAliasConditionConfig = - UmbConditionConfigBase<'Umb.Condition.WorkspaceContentTypeAlias'> & { - /** - * Define a content type alias in which workspace this extension should be available - * @example - * Depends on implementation, but i.e. "article", "image", "blockPage" - */ - match?: string; - /** - * Define one or more content type aliases in which workspace this extension should be available - * @example - * ["article", "image", "blockPage"] - */ - oneOf?: Array; - }; - export const manifest: ManifestCondition = { type: 'condition', name: 'Workspace Content Type Alias Condition', diff --git a/src/packages/core/workspace/conditions/workspace-entity-type.condition.ts b/src/packages/core/workspace/conditions/workspace-entity-type.condition.ts index b8b510681f..45e61e61f6 100644 --- a/src/packages/core/workspace/conditions/workspace-entity-type.condition.ts +++ b/src/packages/core/workspace/conditions/workspace-entity-type.condition.ts @@ -1,8 +1,8 @@ import { UMB_WORKSPACE_CONTEXT } from '../contexts/index.js'; +import type { WorkspaceEntityTypeConditionConfig } from './types.js'; import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; import type { ManifestCondition, - UmbConditionConfigBase, UmbConditionControllerArguments, UmbExtensionCondition, } from '@umbraco-cms/backoffice/extension-api'; @@ -20,15 +20,6 @@ export class UmbWorkspaceEntityTypeCondition } } -export type WorkspaceEntityTypeConditionConfig = UmbConditionConfigBase<'Umb.Condition.WorkspaceEntityType'> & { - /** - * Define the workspace that this extension should be available in - * @example - * "Document" - */ - match: string; -}; - export const manifest: ManifestCondition = { type: 'condition', name: 'Workspace Entity Type Condition', diff --git a/src/packages/core/workspace/conditions/workspace-has-collection.condition.ts b/src/packages/core/workspace/conditions/workspace-has-collection.condition.ts index ef1ef8c203..1ce9048884 100644 --- a/src/packages/core/workspace/conditions/workspace-has-collection.condition.ts +++ b/src/packages/core/workspace/conditions/workspace-has-collection.condition.ts @@ -1,13 +1,16 @@ import { UMB_COLLECTION_WORKSPACE_CONTEXT } from '../contexts/tokens/collection-workspace.context-token.js'; +import type { WorkspaceHasCollectionConditionConfig } from './types.js'; +import { UMB_WORKSPACE_HAS_COLLECTION_CONDITION } from './const.js'; import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; import type { ManifestCondition, - UmbConditionConfigBase, UmbConditionControllerArguments, UmbExtensionCondition, } from '@umbraco-cms/backoffice/extension-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +const ObserveSymbol = Symbol(); + export class UmbWorkspaceHasCollectionCondition extends UmbConditionBase implements UmbExtensionCondition @@ -21,18 +24,12 @@ export class UmbWorkspaceHasCollectionCondition (hasCollection) => { this.permitted = hasCollection; }, - 'observeHasCollection', + ObserveSymbol, ); }); } } -export type WorkspaceHasCollectionConditionConfig = UmbConditionConfigBase< - typeof UMB_WORKSPACE_HAS_COLLECTION_CONDITION ->; - -export const UMB_WORKSPACE_HAS_COLLECTION_CONDITION = 'Umb.Condition.WorkspaceHasCollection'; - export const manifest: ManifestCondition = { type: 'condition', name: 'Workspace Has Collection Condition', diff --git a/src/packages/core/workspace/contexts/default-workspace.context.ts b/src/packages/core/workspace/contexts/default-workspace.context.ts index 04c90380b3..7adc90ecc8 100644 --- a/src/packages/core/workspace/contexts/default-workspace.context.ts +++ b/src/packages/core/workspace/contexts/default-workspace.context.ts @@ -2,7 +2,7 @@ import { UMB_WORKSPACE_CONTEXT } from './tokens/workspace.context-token.js'; import type { UmbWorkspaceContext } from './tokens/workspace-context.interface.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; -import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspace } from '@umbraco-cms/backoffice/workspace'; export abstract class UmbDefaultWorkspaceContext extends UmbContextBase diff --git a/src/packages/core/workspace/extensions/types.ts b/src/packages/core/workspace/extensions/types.ts new file mode 100644 index 0000000000..8466792b3d --- /dev/null +++ b/src/packages/core/workspace/extensions/types.ts @@ -0,0 +1,35 @@ +import type { + ManifestWorkspaceActionMenuItem, + ManifestWorkspaceActionMenuItemDefaultKind, +} from './workspace-action-menu-item.model.js'; +import type { ManifestWorkspaceAction, ManifestWorkspaceActionDefaultKind } from './workspace-action.model.js'; +import type { + ManifestWorkspaceFooterApp, + ManifestWorkspaceFooterAppMenuBreadcrumbKind, + ManifestWorkspaceFooterAppVariantMenuBreadcrumbKind, +} from './workspace-footer-app.model.js'; +import type { + ManifestWorkspaceView, + ManifestWorkspaceViewContentTypeDesignEditorKind, +} from './workspace-view.model.js'; +import type { ManifestWorkspace, ManifestWorkspaceRoutableKind } from './workspace.model.js'; + +export type * from './workspace-action-menu-item.model.js'; +export type * from './workspace-action.model.js'; +export type * from './workspace-context.model.js'; +export type * from './workspace-footer-app.model.js'; +export type * from './workspace-view.model.js'; +export type * from './workspace.model.js'; + +export type ManifestWorkspaceFooterApps = + | ManifestWorkspaceFooterApp + | ManifestWorkspaceFooterAppMenuBreadcrumbKind + | ManifestWorkspaceFooterAppVariantMenuBreadcrumbKind; + +export type ManifestWorkspaceActions = ManifestWorkspaceAction | ManifestWorkspaceActionDefaultKind; +export type ManifestWorkspaceMenuItemActions = + | ManifestWorkspaceActionMenuItem + | ManifestWorkspaceActionMenuItemDefaultKind; + +export type ManifestWorkspaces = ManifestWorkspace | ManifestWorkspaceRoutableKind; +export type ManifestWorkspaceViews = ManifestWorkspaceView | ManifestWorkspaceViewContentTypeDesignEditorKind; diff --git a/src/packages/core/extension-registry/models/workspace-action-menu-item.model.ts b/src/packages/core/workspace/extensions/workspace-action-menu-item.model.ts similarity index 79% rename from src/packages/core/extension-registry/models/workspace-action-menu-item.model.ts rename to src/packages/core/workspace/extensions/workspace-action-menu-item.model.ts index 8c09805c6d..ffe5df25f8 100644 --- a/src/packages/core/extension-registry/models/workspace-action-menu-item.model.ts +++ b/src/packages/core/workspace/extensions/workspace-action-menu-item.model.ts @@ -1,12 +1,11 @@ -import type { ConditionTypes } from '../conditions/types.js'; -import type { UmbWorkspaceActionMenuItem } from '../../workspace/components/workspace-action-menu-item/workspace-action-menu-item.interface.js'; +import type { UmbWorkspaceActionMenuItem } from '../components/workspace-action-menu-item/workspace-action-menu-item.interface.js'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; export interface ManifestWorkspaceActionMenuItem< MetaType extends MetaWorkspaceActionMenuItem = MetaWorkspaceActionMenuItem, > extends ManifestElementAndApi>, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'workspaceActionMenuItem'; /** * Define which workspace actions this menu item should be shown for. @@ -49,3 +48,10 @@ export interface MetaWorkspaceActionMenuItemDefaultKind extends MetaWorkspaceAct */ label: string; } + +declare global { + interface UmbExtensionManifestMap { + ManifestWorkspaceActionMenuItem: ManifestWorkspaceActionMenuItem; + ManifestWorkspaceActionMenuItemDefaultKind: ManifestWorkspaceActionMenuItemDefaultKind; + } +} diff --git a/src/packages/core/extension-registry/models/workspace-action.model.ts b/src/packages/core/workspace/extensions/workspace-action.model.ts similarity index 81% rename from src/packages/core/extension-registry/models/workspace-action.model.ts rename to src/packages/core/workspace/extensions/workspace-action.model.ts index ee83060735..a1690c9b86 100644 --- a/src/packages/core/extension-registry/models/workspace-action.model.ts +++ b/src/packages/core/workspace/extensions/workspace-action.model.ts @@ -1,4 +1,3 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { UUIInterfaceColor, UUIInterfaceLook } from '@umbraco-cms/backoffice/external/uui'; import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; import type { UmbWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; @@ -6,7 +5,7 @@ import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controlle export interface ManifestWorkspaceAction extends ManifestElementAndApi>, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'workspaceAction'; meta: MetaType; } @@ -24,3 +23,10 @@ export interface MetaWorkspaceActionDefaultKind extends MetaWorkspaceAction { look?: UUIInterfaceLook; color?: UUIInterfaceColor; } + +declare global { + interface UmbExtensionManifestMap { + ManifestWorkspaceAction: ManifestWorkspaceAction; + ManifestWorkspaceActionDefaultKind: ManifestWorkspaceActionDefaultKind; + } +} diff --git a/src/packages/core/workspace/extensions/workspace-context.model.ts b/src/packages/core/workspace/extensions/workspace-context.model.ts new file mode 100644 index 0000000000..edd45fe746 --- /dev/null +++ b/src/packages/core/workspace/extensions/workspace-context.model.ts @@ -0,0 +1,13 @@ +import type { ManifestApi, ManifestWithDynamicConditions, UmbApi } from '@umbraco-cms/backoffice/extension-api'; + +export interface ManifestWorkspaceContext + extends ManifestWithDynamicConditions, + ManifestApi { + type: 'workspaceContext'; +} + +declare global { + interface UmbExtensionManifestMap { + ManifestWorkspaceContext: ManifestWorkspaceContext; + } +} diff --git a/src/packages/core/extension-registry/models/workspace-footer-app.model.ts b/src/packages/core/workspace/extensions/workspace-footer-app.model.ts similarity index 63% rename from src/packages/core/extension-registry/models/workspace-footer-app.model.ts rename to src/packages/core/workspace/extensions/workspace-footer-app.model.ts index b1d3972895..92280deba1 100644 --- a/src/packages/core/extension-registry/models/workspace-footer-app.model.ts +++ b/src/packages/core/workspace/extensions/workspace-footer-app.model.ts @@ -1,10 +1,9 @@ -import type { ConditionTypes } from '../conditions/types.js'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; export interface ManifestWorkspaceFooterApp extends ManifestElementAndApi, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'workspaceFooterApp'; } @@ -17,3 +16,11 @@ export interface ManifestWorkspaceFooterAppVariantMenuBreadcrumbKind extends Man type: 'workspaceFooterApp'; kind: 'variantMenuBreadcrumb'; } + +declare global { + interface UmbExtensionManifestMap { + ManifestWorkspaceFooterApp: ManifestWorkspaceFooterApp; + ManifestWorkspaceFooterAppMenuBreadcrumbKind: ManifestWorkspaceFooterAppMenuBreadcrumbKind; + ManifestWorkspaceFooterAppVariantMenuBreadcrumbKind: ManifestWorkspaceFooterAppVariantMenuBreadcrumbKind; + } +} diff --git a/src/packages/core/extension-registry/models/workspace-view.model.ts b/src/packages/core/workspace/extensions/workspace-view.model.ts similarity index 68% rename from src/packages/core/extension-registry/models/workspace-view.model.ts rename to src/packages/core/workspace/extensions/workspace-view.model.ts index a8e3af27ac..0cd6920c62 100644 --- a/src/packages/core/extension-registry/models/workspace-view.model.ts +++ b/src/packages/core/workspace/extensions/workspace-view.model.ts @@ -1,14 +1,16 @@ -import type { ConditionTypes } from '../conditions/types.js'; -import type { UmbWorkspaceViewElement } from '../interfaces/workspace-view-element.interface.js'; import type { ManifestWithDynamicConditions, ManifestWithView, MetaManifestWithView, } from '@umbraco-cms/backoffice/extension-api'; +export interface UmbWorkspaceViewElement extends HTMLElement { + manifest?: ManifestWorkspaceView; +} + export interface ManifestWorkspaceView extends ManifestWithView, - ManifestWithDynamicConditions { + ManifestWithDynamicConditions { type: 'workspaceView'; meta: MetaType; } @@ -30,3 +32,11 @@ export interface ManifestWorkspaceViewContentTypeDesignEditorKind extends Manife export interface MetaWorkspaceViewContentTypeDesignEditorKind extends MetaWorkspaceView { compositionRepositoryAlias?: string; } + +declare global { + interface UmbExtensionManifestMap { + ManifestWorkspaceView: ManifestWorkspaceView; + ManifestWorkspaceViewCollectionKind: ManifestWorkspaceViewCollectionKind; + ManifestWorkspaceViewContentTypeDesignEditorKind: ManifestWorkspaceViewContentTypeDesignEditorKind; + } +} diff --git a/src/packages/core/extension-registry/models/workspace.model.ts b/src/packages/core/workspace/extensions/workspace.model.ts similarity index 70% rename from src/packages/core/extension-registry/models/workspace.model.ts rename to src/packages/core/workspace/extensions/workspace.model.ts index c08134b77f..7a9bd1c299 100644 --- a/src/packages/core/extension-registry/models/workspace.model.ts +++ b/src/packages/core/workspace/extensions/workspace.model.ts @@ -1,5 +1,5 @@ -import type { UmbRoutableWorkspaceContext } from '../../workspace/contexts/tokens/routable-workspace-context.interface.js'; -import type { UmbWorkspaceContext } from '../../workspace/contexts/tokens/workspace-context.interface.js'; +import type { UmbRoutableWorkspaceContext } from '../contexts/tokens/routable-workspace-context.interface.js'; +import type { UmbWorkspaceContext } from '../contexts/tokens/workspace-context.interface.js'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import type { ManifestElementAndApi } from '@umbraco-cms/backoffice/extension-api'; @@ -24,3 +24,10 @@ export interface ManifestWorkspaceRoutableKind // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface MetaWorkspaceRoutableKind extends MetaWorkspace {} + +declare global { + interface UmbExtensionManifestMap { + ManifestWorkspace: ManifestWorkspace; + ManifestWorkspaceRoutableKind: ManifestWorkspaceRoutableKind; + } +} diff --git a/src/packages/core/workspace/kinds/manifests.ts b/src/packages/core/workspace/kinds/manifests.ts index 380b26b726..337250c9b5 100644 --- a/src/packages/core/workspace/kinds/manifests.ts +++ b/src/packages/core/workspace/kinds/manifests.ts @@ -1,4 +1,4 @@ import { manifest as routableKindManifest } from './routable/routable-workspace.kind.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [routableKindManifest]; +export const manifests: Array = [routableKindManifest]; diff --git a/src/packages/core/workspace/kinds/routable/routable-workspace.kind.ts b/src/packages/core/workspace/kinds/routable/routable-workspace.kind.ts index 68840c0a51..3bce4d4c7f 100644 --- a/src/packages/core/workspace/kinds/routable/routable-workspace.kind.ts +++ b/src/packages/core/workspace/kinds/routable/routable-workspace.kind.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.Workspace.Routable', matchKind: 'routable', diff --git a/src/packages/core/workspace/manifests.ts b/src/packages/core/workspace/manifests.ts index 7e64360c26..7b41756cba 100644 --- a/src/packages/core/workspace/manifests.ts +++ b/src/packages/core/workspace/manifests.ts @@ -3,9 +3,9 @@ import { manifests as sectionRouteManifests } from './section-routes/manifests.j import { manifests as workspaceConditionManifests } from './conditions/manifests.js'; import { manifests as workspaceKindManifest } from './kinds/manifests.js'; import { manifests as workspaceModalManifest } from './modals/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...componentManifests, ...sectionRouteManifests, ...workspaceConditionManifests, diff --git a/src/packages/core/workspace/modals/index.ts b/src/packages/core/workspace/modals/index.ts index c5c54c9ab0..5cfe6c1fb5 100644 --- a/src/packages/core/workspace/modals/index.ts +++ b/src/packages/core/workspace/modals/index.ts @@ -1 +1,2 @@ export * from './workspace-modal.element.js'; +export * from './workspace-modal.token.js'; diff --git a/src/packages/core/workspace/modals/manifests.ts b/src/packages/core/workspace/modals/manifests.ts index 7aaf8b0eee..77f22e85a3 100644 --- a/src/packages/core/workspace/modals/manifests.ts +++ b/src/packages/core/workspace/modals/manifests.ts @@ -1,10 +1,8 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const workspaceModal: ManifestModal = { - type: 'modal', - alias: 'Umb.Modal.Workspace', - name: 'Workspace Modal', - js: () => import('./workspace-modal.element.js'), -}; - -export const manifests: Array = [workspaceModal]; +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.Workspace', + name: 'Workspace Modal', + js: () => import('./workspace-modal.element.js'), + }, +]; diff --git a/src/packages/core/workspace/modals/workspace-modal.element.ts b/src/packages/core/workspace/modals/workspace-modal.element.ts index 57361e17e6..40fd96f0ef 100644 --- a/src/packages/core/workspace/modals/workspace-modal.element.ts +++ b/src/packages/core/workspace/modals/workspace-modal.element.ts @@ -1,7 +1,7 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit'; import { css, html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbWorkspaceModalData } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData } from '@umbraco-cms/backoffice/workspace'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-workspace-modal') diff --git a/src/packages/core/modal/token/workspace-modal.token.ts b/src/packages/core/workspace/modals/workspace-modal.token.ts similarity index 86% rename from src/packages/core/modal/token/workspace-modal.token.ts rename to src/packages/core/workspace/modals/workspace-modal.token.ts index 27b52e61bf..b78617a648 100644 --- a/src/packages/core/modal/token/workspace-modal.token.ts +++ b/src/packages/core/workspace/modals/workspace-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbWorkspaceModalData { entityType: string; preset: Partial; diff --git a/src/packages/core/workspace/section-routes/manifests.ts b/src/packages/core/workspace/section-routes/manifests.ts index e5d441f3fc..f9bc47ea25 100644 --- a/src/packages/core/workspace/section-routes/manifests.ts +++ b/src/packages/core/workspace/section-routes/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'sectionRoute', alias: 'Umb.SectionRoute.Workspace', diff --git a/src/packages/core/workspace/types.ts b/src/packages/core/workspace/types.ts index 738a9fdb2d..93c0e81b21 100644 --- a/src/packages/core/workspace/types.ts +++ b/src/packages/core/workspace/types.ts @@ -1 +1,2 @@ +export type * from './extensions/types.js'; export type UmbWorkspaceUniqueType = string | null; diff --git a/src/packages/core/workspace/workspace.element.ts b/src/packages/core/workspace/workspace.element.ts index 08c849ed43..ac3d5ef3a6 100644 --- a/src/packages/core/workspace/workspace.element.ts +++ b/src/packages/core/workspace/workspace.element.ts @@ -1,6 +1,6 @@ import { html, nothing, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspace } from '@umbraco-cms/backoffice/workspace'; import type { UmbApiConstructorArgumentsMethodType } from '@umbraco-cms/backoffice/extension-api'; const apiArgsCreator: UmbApiConstructorArgumentsMethodType = (manifest: unknown) => { diff --git a/src/packages/data-type/collection/manifests.ts b/src/packages/data-type/collection/manifests.ts index 04c66cab30..27b0beec79 100644 --- a/src/packages/data-type/collection/manifests.ts +++ b/src/packages/data-type/collection/manifests.ts @@ -1,17 +1,17 @@ import { UMB_DATA_TYPE_COLLECTION_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DATA_TYPE_COLLECTION_ALIAS = 'Umb.Collection.DataType'; -const collectionManifest: ManifestTypes = { - type: 'collection', - kind: 'default', - alias: UMB_DATA_TYPE_COLLECTION_ALIAS, - name: 'Data Type Collection', - meta: { - repositoryAlias: UMB_DATA_TYPE_COLLECTION_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'collection', + kind: 'default', + alias: UMB_DATA_TYPE_COLLECTION_ALIAS, + name: 'Data Type Collection', + meta: { + repositoryAlias: UMB_DATA_TYPE_COLLECTION_REPOSITORY_ALIAS, + }, }, -}; - -export const manifests: Array = [collectionManifest, ...collectionRepositoryManifests]; + ...collectionRepositoryManifests, +]; diff --git a/src/packages/data-type/collection/repository/manifests.ts b/src/packages/data-type/collection/repository/manifests.ts index 3392019d04..b851094801 100644 --- a/src/packages/data-type/collection/repository/manifests.ts +++ b/src/packages/data-type/collection/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DATA_TYPE_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.DataType.Collection'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DATA_TYPE_COLLECTION_REPOSITORY_ALIAS, - name: 'Data Type Collection Repository', - api: () => import('./data-type-collection.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DATA_TYPE_COLLECTION_REPOSITORY_ALIAS, + name: 'Data Type Collection Repository', + api: () => import('./data-type-collection.repository.js'), + }, +]; diff --git a/src/packages/data-type/entity-actions/create/manifests.ts b/src/packages/data-type/entity-actions/create/manifests.ts index a7ea9a852b..6f3aaa1dee 100644 --- a/src/packages/data-type/entity-actions/create/manifests.ts +++ b/src/packages/data-type/entity-actions/create/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DATA_TYPE_FOLDER_ENTITY_TYPE, UMB_DATA_TYPE_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -13,6 +12,7 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { @@ -22,5 +22,3 @@ const entityActions: Array = [ element: () => import('./modal/data-type-create-options-modal.element.js'), }, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/data-type/entity-actions/duplicate/manifests.ts b/src/packages/data-type/entity-actions/duplicate/manifests.ts index 28f7228262..663674148a 100644 --- a/src/packages/data-type/entity-actions/duplicate/manifests.ts +++ b/src/packages/data-type/entity-actions/duplicate/manifests.ts @@ -2,9 +2,8 @@ import { UMB_DATA_TYPE_ENTITY_TYPE } from '../../entity.js'; import { UMB_DATA_TYPE_TREE_ALIAS, UMB_DATA_TYPE_TREE_REPOSITORY_ALIAS } from '../../tree/index.js'; import { UMB_DUPLICATE_DATA_TYPE_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'duplicateTo', @@ -18,6 +17,5 @@ const entityActions: Array = [ foldersOnly: true, }, }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/data-type/entity-actions/duplicate/repository/manifests.ts b/src/packages/data-type/entity-actions/duplicate/repository/manifests.ts index 62af8d4d0d..d56bfc1a85 100644 --- a/src/packages/data-type/entity-actions/duplicate/repository/manifests.ts +++ b/src/packages/data-type/entity-actions/duplicate/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_DUPLICATE_DATA_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const duplicateRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DUPLICATE_DATA_TYPE_REPOSITORY_ALIAS, - name: 'Duplicate Data Type Repository', - api: () => import('./data-type-duplicate.repository.js'), -}; - -export const manifests: Array = [duplicateRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DUPLICATE_DATA_TYPE_REPOSITORY_ALIAS, + name: 'Duplicate Data Type Repository', + api: () => import('./data-type-duplicate.repository.js'), + }, +]; diff --git a/src/packages/data-type/entity-actions/manifests.ts b/src/packages/data-type/entity-actions/manifests.ts index 0dfadaf0eb..186bbc71c5 100644 --- a/src/packages/data-type/entity-actions/manifests.ts +++ b/src/packages/data-type/entity-actions/manifests.ts @@ -4,9 +4,8 @@ import { UMB_DATA_TYPE_ITEM_REPOSITORY_ALIAS } from '../repository/item/index.js import { manifests as createManifests } from './create/manifests.js'; import { manifests as moveManifests } from './move-to/manifests.js'; import { manifests as duplicateManifests } from './duplicate/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'delete', @@ -18,10 +17,6 @@ const entityActions: Array = [ itemRepositoryAlias: UMB_DATA_TYPE_ITEM_REPOSITORY_ALIAS, }, }, -]; - -export const manifests: Array = [ - ...entityActions, ...createManifests, ...moveManifests, ...duplicateManifests, diff --git a/src/packages/data-type/entity-actions/move-to/manifests.ts b/src/packages/data-type/entity-actions/move-to/manifests.ts index a9a684e94f..56585805c7 100644 --- a/src/packages/data-type/entity-actions/move-to/manifests.ts +++ b/src/packages/data-type/entity-actions/move-to/manifests.ts @@ -2,9 +2,8 @@ import { UMB_DATA_TYPE_ENTITY_TYPE } from '../../entity.js'; import { UMB_DATA_TYPE_TREE_REPOSITORY_ALIAS, UMB_DATA_TYPE_TREE_ALIAS } from '../../tree/index.js'; import { UMB_MOVE_DATA_TYPE_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'moveTo', @@ -18,6 +17,5 @@ const entityActions: Array = [ foldersOnly: true, }, }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/data-type/entity-actions/move-to/repository/manifests.ts b/src/packages/data-type/entity-actions/move-to/repository/manifests.ts index 760030f509..701b1db627 100644 --- a/src/packages/data-type/entity-actions/move-to/repository/manifests.ts +++ b/src/packages/data-type/entity-actions/move-to/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MOVE_DATA_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const moveRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MOVE_DATA_TYPE_REPOSITORY_ALIAS, - name: 'Move Data Type Repository', - api: () => import('./data-type-move.repository.js'), -}; - -export const manifests: Array = [moveRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MOVE_DATA_TYPE_REPOSITORY_ALIAS, + name: 'Move Data Type Repository', + api: () => import('./data-type-move.repository.js'), + }, +]; diff --git a/src/packages/data-type/manifests.ts b/src/packages/data-type/manifests.ts index a7ed758226..e6d9723664 100644 --- a/src/packages/data-type/manifests.ts +++ b/src/packages/data-type/manifests.ts @@ -6,9 +6,8 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as searchProviderManifests } from './search/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...collectionManifests, ...entityActions, ...menuManifests, diff --git a/src/packages/data-type/menu/manifests.ts b/src/packages/data-type/menu/manifests.ts index 55bd1d665b..7fc04fe562 100644 --- a/src/packages/data-type/menu/manifests.ts +++ b/src/packages/data-type/menu/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/packages/data-type/modals/manifests.ts b/src/packages/data-type/modals/manifests.ts index 5dc42ef411..f93db92b61 100644 --- a/src/packages/data-type/modals/manifests.ts +++ b/src/packages/data-type/modals/manifests.ts @@ -1,12 +1,4 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.PropertyEditorUiPicker', - name: 'Property Editor UI Picker Modal', - element: () => import('./property-editor-ui-picker/property-editor-ui-picker-modal.element.js'), - }, +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.DataTypePickerFlow', @@ -20,5 +12,3 @@ const modals: Array = [ element: () => import('./data-type-picker-flow/data-type-picker-flow-data-type-picker-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/data-type/reference/manifests.ts b/src/packages/data-type/reference/manifests.ts index a8e101b348..4ac6fbdcb2 100644 --- a/src/packages/data-type/reference/manifests.ts +++ b/src/packages/data-type/reference/manifests.ts @@ -1,4 +1,3 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...repositoryManifests]; +export const manifests: Array = [...repositoryManifests]; diff --git a/src/packages/data-type/reference/repository/manifests.ts b/src/packages/data-type/reference/repository/manifests.ts index 4db28e40e8..0c18ebb224 100644 --- a/src/packages/data-type/reference/repository/manifests.ts +++ b/src/packages/data-type/reference/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DATA_TYPE_REFERENCE_REPOSITORY_ALIAS = 'Umb.Repository.DataType.Reference'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DATA_TYPE_REFERENCE_REPOSITORY_ALIAS, - name: 'Data Type Reference Repository', - api: () => import('./data-type-reference.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DATA_TYPE_REFERENCE_REPOSITORY_ALIAS, + name: 'Data Type Reference Repository', + api: () => import('./data-type-reference.repository.js'), + }, +]; diff --git a/src/packages/data-type/repository/detail/manifests.ts b/src/packages/data-type/repository/detail/manifests.ts index 99b11516fa..1e16c5a297 100644 --- a/src/packages/data-type/repository/detail/manifests.ts +++ b/src/packages/data-type/repository/detail/manifests.ts @@ -1,18 +1,16 @@ import { UMB_DATA_TYPE_DETAIL_REPOSITORY_ALIAS, UMB_DATA_TYPE_DETAIL_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DATA_TYPE_DETAIL_REPOSITORY_ALIAS, - name: 'Data Type Detail Repository', - api: () => import('./data-type-detail.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_DATA_TYPE_DETAIL_STORE_ALIAS, - name: 'Data Type Detail Store', - api: () => import('./data-type-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DATA_TYPE_DETAIL_REPOSITORY_ALIAS, + name: 'Data Type Detail Repository', + api: () => import('./data-type-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_DATA_TYPE_DETAIL_STORE_ALIAS, + name: 'Data Type Detail Store', + api: () => import('./data-type-detail.store.js'), + }, +]; diff --git a/src/packages/data-type/repository/item/manifests.ts b/src/packages/data-type/repository/item/manifests.ts index 1451cbc026..7a3a55cd68 100644 --- a/src/packages/data-type/repository/item/manifests.ts +++ b/src/packages/data-type/repository/item/manifests.ts @@ -1,18 +1,16 @@ import { UMB_DATA_TYPE_ITEM_REPOSITORY_ALIAS, UMB_DATA_TYPE_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DATA_TYPE_ITEM_REPOSITORY_ALIAS, - name: 'Data Type Item Repository', - api: () => import('./data-type-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_DATA_TYPE_STORE_ALIAS, - name: 'Data Type Item Store', - api: () => import('./data-type-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DATA_TYPE_ITEM_REPOSITORY_ALIAS, + name: 'Data Type Item Repository', + api: () => import('./data-type-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_DATA_TYPE_STORE_ALIAS, + name: 'Data Type Item Store', + api: () => import('./data-type-item.store.js'), + }, +]; diff --git a/src/packages/data-type/repository/manifests.ts b/src/packages/data-type/repository/manifests.ts index 37dcb889ef..4dfb0c911f 100644 --- a/src/packages/data-type/repository/manifests.ts +++ b/src/packages/data-type/repository/manifests.ts @@ -1,5 +1,4 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/packages/data-type/search/manifests.ts b/src/packages/data-type/search/manifests.ts index 248c1d2ccf..b3de884796 100644 --- a/src/packages/data-type/search/manifests.ts +++ b/src/packages/data-type/search/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DATA_TYPE_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { name: 'Data Type Search Provider', alias: 'Umb.SearchProvider.DataType', diff --git a/src/packages/data-type/tree/folder/manifests.ts b/src/packages/data-type/tree/folder/manifests.ts index 82299d4f77..646ced1a0c 100644 --- a/src/packages/data-type/tree/folder/manifests.ts +++ b/src/packages/data-type/tree/folder/manifests.ts @@ -1,16 +1,13 @@ import { UMB_DATA_TYPE_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DATA_TYPE_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.DataType.Folder'; -const folderRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DATA_TYPE_FOLDER_REPOSITORY_ALIAS, - name: 'Data Type Folder Repository', - api: () => import('./data-type-folder.repository.js'), -}; - -const entityActions: Array = [ +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DATA_TYPE_FOLDER_REPOSITORY_ALIAS, + name: 'Data Type Folder Repository', + api: () => import('./data-type-folder.repository.js'), + }, { type: 'entityAction', kind: 'folderUpdate', @@ -32,5 +29,3 @@ const entityActions: Array = [ }, }, ]; - -export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/packages/data-type/tree/manifests.ts b/src/packages/data-type/tree/manifests.ts index f09fd4a50c..e788b77449 100644 --- a/src/packages/data-type/tree/manifests.ts +++ b/src/packages/data-type/tree/manifests.ts @@ -5,51 +5,36 @@ import { UMB_DATA_TYPE_TREE_REPOSITORY_ALIAS, UMB_DATA_TYPE_TREE_STORE_ALIAS, } from './constants.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DATA_TYPE_TREE_REPOSITORY_ALIAS, - name: 'Data Type Tree Repository', - api: () => import('./data-type-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_DATA_TYPE_TREE_STORE_ALIAS, - name: 'Data Type Tree Store', - api: () => import('./data-type-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_DATA_TYPE_TREE_ALIAS, - name: 'Data Types Tree', - meta: { - repositoryAlias: UMB_DATA_TYPE_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DATA_TYPE_TREE_REPOSITORY_ALIAS, + name: 'Data Type Tree Repository', + api: () => import('./data-type-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_DATA_TYPE_TREE_STORE_ALIAS, + name: 'Data Type Tree Store', + api: () => import('./data-type-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_DATA_TYPE_TREE_ALIAS, + name: 'Data Types Tree', + meta: { + repositoryAlias: UMB_DATA_TYPE_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.DataType', + name: 'Data Type Tree Item', + forEntityTypes: ['data-type-root', 'data-type', 'data-type-folder'], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.DataType', - name: 'Data Type Tree Item', - forEntityTypes: ['data-type-root', 'data-type', 'data-type-folder'], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...folderManifests, ...reloadManifests, ]; diff --git a/src/packages/data-type/tree/reload-tree-item-children/manifests.ts b/src/packages/data-type/tree/reload-tree-item-children/manifests.ts index c2a2ff3859..295541cd05 100644 --- a/src/packages/data-type/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/data-type/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DATA_TYPE_FOLDER_ENTITY_TYPE, UMB_DATA_TYPE_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/data-type/workspace/data-type-workspace-editor.element.ts b/src/packages/data-type/workspace/data-type-workspace-editor.element.ts index 413eca4ee8..0f47767628 100644 --- a/src/packages/data-type/workspace/data-type-workspace-editor.element.ts +++ b/src/packages/data-type/workspace/data-type-workspace-editor.element.ts @@ -3,7 +3,7 @@ import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { css, html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; -import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspace } from '@umbraco-cms/backoffice/workspace'; import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; /** * @element umb-data-type-workspace-editor diff --git a/src/packages/data-type/workspace/data-type-workspace.modal-token.ts b/src/packages/data-type/workspace/data-type-workspace.modal-token.ts index 457a0f5ff4..2629211daf 100644 --- a/src/packages/data-type/workspace/data-type-workspace.modal-token.ts +++ b/src/packages/data-type/workspace/data-type-workspace.modal-token.ts @@ -1,5 +1,5 @@ import type { UmbDataTypeDetailModel } from '../types.js'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export const UMB_DATATYPE_WORKSPACE_MODAL = new UmbModalToken< diff --git a/src/packages/data-type/workspace/manifests.ts b/src/packages/data-type/workspace/manifests.ts index 62232d9507..769a7498b5 100644 --- a/src/packages/data-type/workspace/manifests.ts +++ b/src/packages/data-type/workspace/manifests.ts @@ -1,25 +1,18 @@ import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceView, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const DATA_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.DataType'; +const UMB_DATA_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.DataType'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: DATA_TYPE_WORKSPACE_ALIAS, - name: 'Data Type Workspace', - api: () => import('./data-type-workspace.context.js'), - meta: { - entityType: 'data-type', +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_DATA_TYPE_WORKSPACE_ALIAS, + name: 'Data Type Workspace', + api: () => import('./data-type-workspace.context.js'), + meta: { + entityType: 'data-type', + }, }, -}; - -const workspaceViews: Array = [ { type: 'workspaceView', alias: 'Umb.WorkspaceView.DataType.Edit', @@ -34,7 +27,7 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_DATA_TYPE_WORKSPACE_ALIAS, }, ], }, @@ -52,13 +45,10 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_DATA_TYPE_WORKSPACE_ALIAS, }, ], }, -]; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -73,10 +63,8 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_DATA_TYPE_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/packages/data-type/workspace/views/details/data-type-details-workspace-view.element.ts b/src/packages/data-type/workspace/views/details/data-type-details-workspace-view.element.ts index b6f5ba92a0..8b246fd9f3 100644 --- a/src/packages/data-type/workspace/views/details/data-type-details-workspace-view.element.ts +++ b/src/packages/data-type/workspace/views/details/data-type-details-workspace-view.element.ts @@ -2,8 +2,9 @@ import { UMB_DATA_TYPE_WORKSPACE_CONTEXT } from '../../data-type-workspace.conte import { css, customElement, html, nothing, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_PROPERTY_EDITOR_UI_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_PROPERTY_EDITOR_UI_PICKER_MODAL } from '@umbraco-cms/backoffice/property-editor'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; @customElement('umb-data-type-details-workspace-view') diff --git a/src/packages/data-type/workspace/views/info/data-type-workspace-view-info-reference.element.ts b/src/packages/data-type/workspace/views/info/data-type-workspace-view-info-reference.element.ts index 5e34b90128..a1f0d2476f 100644 --- a/src/packages/data-type/workspace/views/info/data-type-workspace-view-info-reference.element.ts +++ b/src/packages/data-type/workspace/views/info/data-type-workspace-view-info-reference.element.ts @@ -3,7 +3,7 @@ import type { UmbDataTypeReferenceModel } from '../../../reference/index.js'; import { css, html, customElement, state, repeat, property, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router'; diff --git a/src/packages/data-type/workspace/views/info/workspace-view-data-type-info.element.ts b/src/packages/data-type/workspace/views/info/workspace-view-data-type-info.element.ts index 889f155d27..81e6eb9046 100644 --- a/src/packages/data-type/workspace/views/info/workspace-view-data-type-info.element.ts +++ b/src/packages/data-type/workspace/views/info/workspace-view-data-type-info.element.ts @@ -2,7 +2,7 @@ import { UMB_DATA_TYPE_WORKSPACE_CONTEXT } from '../../data-type-workspace.conte import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import './data-type-workspace-view-info-reference.element.js'; diff --git a/src/packages/dictionary/collection/action/manifests.ts b/src/packages/dictionary/collection/action/manifests.ts index d6b73b5834..fe3b73ddd5 100644 --- a/src/packages/dictionary/collection/action/manifests.ts +++ b/src/packages/dictionary/collection/action/manifests.ts @@ -1,23 +1,22 @@ import { UMB_DICTIONARY_ROOT_ENTITY_TYPE } from '../../entity.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const createManifest: ManifestCollectionAction = { - type: 'collectionAction', - kind: 'button', - name: 'Create Dictionary Collection Action', - alias: 'Umb.CollectionAction.Dictionary.Create', - weight: 200, - meta: { - label: '#general_create', - href: `section/dictionary/workspace/dictionary/create/parent/${UMB_DICTIONARY_ROOT_ENTITY_TYPE}/null`, - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Dictionary', +export const manifests: Array = [ + { + type: 'collectionAction', + kind: 'button', + name: 'Create Dictionary Collection Action', + alias: 'Umb.CollectionAction.Dictionary.Create', + weight: 200, + meta: { + label: '#general_create', + href: `section/dictionary/workspace/dictionary/create/parent/${UMB_DICTIONARY_ROOT_ENTITY_TYPE}/null`, }, - ], -}; - -export const manifests: Array = [createManifest]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Dictionary', + }, + ], + }, +]; diff --git a/src/packages/dictionary/collection/manifests.ts b/src/packages/dictionary/collection/manifests.ts index fc1d1e4ea9..dbab8a757d 100644 --- a/src/packages/dictionary/collection/manifests.ts +++ b/src/packages/dictionary/collection/manifests.ts @@ -3,7 +3,7 @@ import { manifests as collectionRepositoryManifests } from './repository/manifes import { manifests as collectionViewManifests } from './views/manifests.js'; import { manifests as collectionActionManifests } from './action/manifests.js'; import { UMB_DICTIONARY_COLLECTION_ALIAS } from './constants.js'; -import type { ManifestCollection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollection } from '@umbraco-cms/backoffice/collection'; const collectionManifest: ManifestCollection = { type: 'collection', @@ -15,7 +15,7 @@ const collectionManifest: ManifestCollection = { }, }; -export const manifests: Array = [ +export const manifests: Array = [ collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, diff --git a/src/packages/dictionary/collection/repository/manifests.ts b/src/packages/dictionary/collection/repository/manifests.ts index a1b66fd1c2..3ae3012027 100644 --- a/src/packages/dictionary/collection/repository/manifests.ts +++ b/src/packages/dictionary/collection/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_DICTIONARY_COLLECTION_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DICTIONARY_COLLECTION_REPOSITORY_ALIAS, - name: 'Dictionary Collection Repository', - api: () => import('./dictionary-collection.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DICTIONARY_COLLECTION_REPOSITORY_ALIAS, + name: 'Dictionary Collection Repository', + api: () => import('./dictionary-collection.repository.js'), + }, +]; diff --git a/src/packages/dictionary/collection/views/manifests.ts b/src/packages/dictionary/collection/views/manifests.ts index cc08e6ff23..71caf94c42 100644 --- a/src/packages/dictionary/collection/views/manifests.ts +++ b/src/packages/dictionary/collection/views/manifests.ts @@ -1,23 +1,22 @@ import { UMB_DICTIONARY_TABLE_COLLECTION_VIEW_ALIAS } from './constants.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const tableCollectionView: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_DICTIONARY_TABLE_COLLECTION_VIEW_ALIAS, - name: 'Dictionary Table Collection View', - element: () => import('./table/dictionary-table-collection-view.element.js'), - meta: { - label: 'Table', - icon: 'icon-list', - pathName: 'table', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Dictionary', +export const manifests: Array = [ + { + type: 'collectionView', + alias: UMB_DICTIONARY_TABLE_COLLECTION_VIEW_ALIAS, + name: 'Dictionary Table Collection View', + element: () => import('./table/dictionary-table-collection-view.element.js'), + meta: { + label: 'Table', + icon: 'icon-list', + pathName: 'table', }, - ], -}; - -export const manifests: Array = [tableCollectionView]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Dictionary', + }, + ], + }, +]; diff --git a/src/packages/dictionary/dashboard/manifests.ts b/src/packages/dictionary/dashboard/manifests.ts index c9644164c1..1f44cead79 100644 --- a/src/packages/dictionary/dashboard/manifests.ts +++ b/src/packages/dictionary/dashboard/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DICTIONARY_SECTION_ALIAS } from '../section/index.js'; -import type { ManifestDashboard, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const dashboards: Array = [ +export const manifests: Array = [ { type: 'dashboard', alias: 'Umb.Dashboard.Dictionary.Overview', @@ -19,5 +18,3 @@ const dashboards: Array = [ ], }, ]; - -export const manifests: Array = [...dashboards]; diff --git a/src/packages/dictionary/entity-action/manifests.ts b/src/packages/dictionary/entity-action/manifests.ts index f6ce254dec..8b70942952 100644 --- a/src/packages/dictionary/entity-action/manifests.ts +++ b/src/packages/dictionary/entity-action/manifests.ts @@ -1,9 +1,8 @@ import { UMB_DICTIONARY_ENTITY_TYPE, UMB_DICTIONARY_ROOT_ENTITY_TYPE } from '../entity.js'; import { UMB_DICTIONARY_DETAIL_REPOSITORY_ALIAS, UMB_DICTIONARY_ITEM_REPOSITORY_ALIAS } from '../repository/index.js'; import { manifests as moveManifests } from './move-to/manifests.js'; -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -14,7 +13,8 @@ const entityActions: Array = [ forEntityTypes: [UMB_DICTIONARY_ENTITY_TYPE, UMB_DICTIONARY_ROOT_ENTITY_TYPE], meta: { icon: 'icon-add', - label: '#dictionary_createNew', + label: '#general_create', + additionalOptions: true, }, }, { @@ -28,6 +28,7 @@ const entityActions: Array = [ meta: { icon: 'icon-download-alt', label: '#actions_export', + additionalOptions: true, }, }, { @@ -41,6 +42,7 @@ const entityActions: Array = [ meta: { icon: 'icon-page-up', label: '#actions_import', + additionalOptions: true, }, }, { @@ -54,9 +56,6 @@ const entityActions: Array = [ detailRepositoryAlias: UMB_DICTIONARY_DETAIL_REPOSITORY_ALIAS, }, }, -]; - -const modals: Array = [ { type: 'modal', alias: 'Umb.Modal.Dictionary.Export', @@ -69,6 +68,5 @@ const modals: Array = [ name: 'Import Dictionary Modal', element: () => import('./import/import-dictionary-modal.element.js'), }, + ...moveManifests, ]; - -export const manifests: Array = [...entityActions, ...modals, ...moveManifests]; diff --git a/src/packages/dictionary/entity-action/move-to/manifests.ts b/src/packages/dictionary/entity-action/move-to/manifests.ts index 7db6f812a2..e10b49dba8 100644 --- a/src/packages/dictionary/entity-action/move-to/manifests.ts +++ b/src/packages/dictionary/entity-action/move-to/manifests.ts @@ -2,9 +2,8 @@ import { UMB_DICTIONARY_ENTITY_TYPE } from '../../entity.js'; import { UMB_DICTIONARY_TREE_ALIAS, UMB_DICTIONARY_TREE_REPOSITORY_ALIAS } from '../../tree/index.js'; import { UMB_MOVE_DICTIONARY_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'moveTo', @@ -17,6 +16,5 @@ const entityActions: Array = [ treeAlias: UMB_DICTIONARY_TREE_ALIAS, }, }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/dictionary/entity-action/move-to/repository/manifests.ts b/src/packages/dictionary/entity-action/move-to/repository/manifests.ts index 713b957314..4c0a8213ca 100644 --- a/src/packages/dictionary/entity-action/move-to/repository/manifests.ts +++ b/src/packages/dictionary/entity-action/move-to/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MOVE_DICTIONARY_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const moveRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MOVE_DICTIONARY_REPOSITORY_ALIAS, - name: 'Move Dictionary Repository', - api: () => import('./dictionary-move.repository.js'), -}; - -export const manifests: Array = [moveRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MOVE_DICTIONARY_REPOSITORY_ALIAS, + name: 'Move Dictionary Repository', + api: () => import('./dictionary-move.repository.js'), + }, +]; diff --git a/src/packages/dictionary/manifests.ts b/src/packages/dictionary/manifests.ts index d3ebc98e3f..29e09329db 100644 --- a/src/packages/dictionary/manifests.ts +++ b/src/packages/dictionary/manifests.ts @@ -6,9 +6,8 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as sectionManifests } from './section/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...collectionManifests, ...dashboardManifests, ...entityActionManifests, diff --git a/src/packages/dictionary/menu/manifests.ts b/src/packages/dictionary/menu/manifests.ts index 44eaf7bad3..f1aa21d016 100644 --- a/src/packages/dictionary/menu/manifests.ts +++ b/src/packages/dictionary/menu/manifests.ts @@ -1,9 +1,8 @@ import { UMB_DICTIONARY_ENTITY_TYPE } from '../entity.js'; import { UMB_DICTIONARY_TREE_ALIAS } from '../tree/index.js'; import { UMB_DICTIONARY_MENU_ALIAS } from './constants.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menu', alias: UMB_DICTIONARY_MENU_ALIAS, diff --git a/src/packages/dictionary/repository/detail/manifests.ts b/src/packages/dictionary/repository/detail/manifests.ts index ed1ddd698a..607873c521 100644 --- a/src/packages/dictionary/repository/detail/manifests.ts +++ b/src/packages/dictionary/repository/detail/manifests.ts @@ -1,18 +1,15 @@ import { UMB_DICTIONARY_DETAIL_REPOSITORY_ALIAS, UMB_DICTIONARY_DETAIL_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DICTIONARY_DETAIL_REPOSITORY_ALIAS, - name: 'Dictionary Detail Repository', - api: () => import('./dictionary-detail.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_DICTIONARY_DETAIL_STORE_ALIAS, - name: 'Dictionary Detail Store', - api: () => import('./dictionary-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DICTIONARY_DETAIL_REPOSITORY_ALIAS, + name: 'Dictionary Detail Repository', + api: () => import('./dictionary-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_DICTIONARY_DETAIL_STORE_ALIAS, + name: 'Dictionary Detail Store', + api: () => import('./dictionary-detail.store.js'), + }, +]; diff --git a/src/packages/dictionary/repository/export/manifests.ts b/src/packages/dictionary/repository/export/manifests.ts index c804480787..1fc695d518 100644 --- a/src/packages/dictionary/repository/export/manifests.ts +++ b/src/packages/dictionary/repository/export/manifests.ts @@ -1,11 +1,10 @@ import { UMB_DICTIONARY_EXPORT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DICTIONARY_EXPORT_REPOSITORY_ALIAS, - name: 'Dictionary Export Repository', - api: () => import('./dictionary-export.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DICTIONARY_EXPORT_REPOSITORY_ALIAS, + name: 'Dictionary Export Repository', + api: () => import('./dictionary-export.repository.js'), + }, +]; diff --git a/src/packages/dictionary/repository/import/manifests.ts b/src/packages/dictionary/repository/import/manifests.ts index e79969f832..4d5cb4f491 100644 --- a/src/packages/dictionary/repository/import/manifests.ts +++ b/src/packages/dictionary/repository/import/manifests.ts @@ -1,11 +1,10 @@ import { UMB_DICTIONARY_IMPORT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DICTIONARY_IMPORT_REPOSITORY_ALIAS, - name: 'Dictionary Import Repository', - api: () => import('./dictionary-import.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DICTIONARY_IMPORT_REPOSITORY_ALIAS, + name: 'Dictionary Import Repository', + api: () => import('./dictionary-import.repository.js'), + }, +]; diff --git a/src/packages/dictionary/repository/item/manifests.ts b/src/packages/dictionary/repository/item/manifests.ts index 2f67b28be0..b37ea5b157 100644 --- a/src/packages/dictionary/repository/item/manifests.ts +++ b/src/packages/dictionary/repository/item/manifests.ts @@ -1,18 +1,16 @@ import { UMB_DICTIONARY_ITEM_REPOSITORY_ALIAS, UMB_DICTIONARY_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DICTIONARY_ITEM_REPOSITORY_ALIAS, - name: 'Dictionary Item Repository', - api: () => import('./dictionary-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_DICTIONARY_STORE_ALIAS, - name: 'Dictionary Item Store', - api: () => import('./dictionary-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DICTIONARY_ITEM_REPOSITORY_ALIAS, + name: 'Dictionary Item Repository', + api: () => import('./dictionary-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_DICTIONARY_STORE_ALIAS, + name: 'Dictionary Item Store', + api: () => import('./dictionary-item.store.js'), + }, +]; diff --git a/src/packages/dictionary/repository/manifests.ts b/src/packages/dictionary/repository/manifests.ts index 7e392e6c7a..33d070f754 100644 --- a/src/packages/dictionary/repository/manifests.ts +++ b/src/packages/dictionary/repository/manifests.ts @@ -2,9 +2,8 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as importManifests } from './import/manifests.js'; import { manifests as exportManifests } from './export/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...detailManifests, ...itemManifests, ...importManifests, diff --git a/src/packages/dictionary/section/manifests.ts b/src/packages/dictionary/section/manifests.ts index bf9a4dd77e..857f53d0cc 100644 --- a/src/packages/dictionary/section/manifests.ts +++ b/src/packages/dictionary/section/manifests.ts @@ -1,46 +1,40 @@ import { UMB_DICTIONARY_ROOT_ENTITY_TYPE } from '../entity.js'; import { UMB_DICTIONARY_MENU_ALIAS } from '../menu/index.js'; import { UMB_DICTIONARY_SECTION_ALIAS } from './constants.js'; -import type { - ManifestSection, - ManifestSectionSidebarApp, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const section: ManifestSection = { - type: 'section', - alias: UMB_DICTIONARY_SECTION_ALIAS, - name: 'Dictionary Section', - weight: 400, - meta: { - label: '#sections_translation', - pathname: 'dictionary', - }, - conditions: [ - { - alias: 'Umb.Condition.SectionUserPermission', - match: UMB_DICTIONARY_SECTION_ALIAS, +export const manifests: Array = [ + { + type: 'section', + alias: UMB_DICTIONARY_SECTION_ALIAS, + name: 'Dictionary Section', + weight: 400, + meta: { + label: '#sections_translation', + pathname: 'dictionary', }, - ], -}; - -const menuSectionSidebarApp: ManifestSectionSidebarApp = { - type: 'sectionSidebarApp', - kind: 'menuWithEntityActions', - alias: 'Umb.SidebarMenu.Dictionary', - name: 'Dictionary Sidebar Menu', - weight: 100, - meta: { - label: '#sections_translation', - menu: UMB_DICTIONARY_MENU_ALIAS, - entityType: UMB_DICTIONARY_ROOT_ENTITY_TYPE, + conditions: [ + { + alias: 'Umb.Condition.SectionUserPermission', + match: UMB_DICTIONARY_SECTION_ALIAS, + }, + ], }, - conditions: [ - { - alias: 'Umb.Condition.SectionAlias', - match: UMB_DICTIONARY_SECTION_ALIAS, + { + type: 'sectionSidebarApp', + kind: 'menuWithEntityActions', + alias: 'Umb.SidebarMenu.Dictionary', + name: 'Dictionary Sidebar Menu', + weight: 100, + meta: { + label: '#sections_translation', + menu: UMB_DICTIONARY_MENU_ALIAS, + entityType: UMB_DICTIONARY_ROOT_ENTITY_TYPE, }, - ], -}; - -export const manifests: Array = [section, menuSectionSidebarApp]; + conditions: [ + { + alias: 'Umb.Condition.SectionAlias', + match: UMB_DICTIONARY_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/packages/dictionary/tree/manifests.ts b/src/packages/dictionary/tree/manifests.ts index 93f0f644c4..5c423dc240 100644 --- a/src/packages/dictionary/tree/manifests.ts +++ b/src/packages/dictionary/tree/manifests.ts @@ -5,50 +5,35 @@ import { UMB_DICTIONARY_TREE_STORE_ALIAS, } from './constants.js'; import { manifests as reloadTreeItemChildrenManifests } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DICTIONARY_TREE_REPOSITORY_ALIAS, - name: 'Dictionary Tree Repository', - api: () => import('./dictionary-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_DICTIONARY_TREE_STORE_ALIAS, - name: 'Dictionary Tree Store', - api: () => import('./dictionary-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_DICTIONARY_TREE_ALIAS, - name: 'Dictionary Tree', - meta: { - repositoryAlias: UMB_DICTIONARY_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DICTIONARY_TREE_REPOSITORY_ALIAS, + name: 'Dictionary Tree Repository', + api: () => import('./dictionary-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_DICTIONARY_TREE_STORE_ALIAS, + name: 'Dictionary Tree Store', + api: () => import('./dictionary-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_DICTIONARY_TREE_ALIAS, + name: 'Dictionary Tree', + meta: { + repositoryAlias: UMB_DICTIONARY_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.Dictionary', + name: 'Dictionary Tree Item', + forEntityTypes: [UMB_DICTIONARY_ROOT_ENTITY_TYPE, UMB_DICTIONARY_ENTITY_TYPE], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.Dictionary', - name: 'Dictionary Tree Item', - forEntityTypes: [UMB_DICTIONARY_ROOT_ENTITY_TYPE, UMB_DICTIONARY_ENTITY_TYPE], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...reloadTreeItemChildrenManifests, ]; diff --git a/src/packages/dictionary/tree/reload-tree-item-children/manifests.ts b/src/packages/dictionary/tree/reload-tree-item-children/manifests.ts index 52c5f3fcd0..ec9f0f0f6e 100644 --- a/src/packages/dictionary/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/dictionary/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DICTIONARY_ROOT_ENTITY_TYPE, UMB_DICTIONARY_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/dictionary/workspace/manifests.ts b/src/packages/dictionary/workspace/manifests.ts index b2eba38c45..a2618139f2 100644 --- a/src/packages/dictionary/workspace/manifests.ts +++ b/src/packages/dictionary/workspace/manifests.ts @@ -1,24 +1,19 @@ import { UMB_DICTIONARY_ENTITY_TYPE } from '../entity.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceView, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: 'Umb.Workspace.Dictionary', - name: 'Dictionary Workspace', - api: () => import('./dictionary-workspace.context.js'), - meta: { - entityType: UMB_DICTIONARY_ENTITY_TYPE, - }, -}; +export const UMB_DICTIONARY_WORKSPACE_ALIAS = 'Umb.Workspace.Dictionary'; -const workspaceViews: Array = [ +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_DICTIONARY_WORKSPACE_ALIAS, + name: 'Dictionary Workspace', + api: () => import('./dictionary-workspace.context.js'), + meta: { + entityType: UMB_DICTIONARY_ENTITY_TYPE, + }, + }, { type: 'workspaceView', alias: 'Umb.WorkspaceView.Dictionary.Edit', @@ -33,13 +28,10 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_DICTIONARY_WORKSPACE_ALIAS, }, ], }, -]; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -55,10 +47,8 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: 'Umb.Workspace.Dictionary', + match: UMB_DICTIONARY_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts b/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts index 6f9d7d6b9b..46a67c103b 100644 --- a/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts +++ b/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE, UMB_DOCUMENT_BLUEPRINT_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -13,11 +12,9 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: '#actions_createblueprint', + additionalOptions: true, }, }, -]; - -const manifestModals: Array = [ { type: 'modal', alias: 'Umb.Modal.DocumentBlueprintOptionsCreate', @@ -25,5 +22,3 @@ const manifestModals: Array = [ element: () => import('./modal/document-blueprint-options-create-modal.element.js'), }, ]; - -export const manifests: Array = [...entityActions, ...manifestModals]; diff --git a/src/packages/documents/document-blueprints/entity-actions/manifests.ts b/src/packages/documents/document-blueprints/entity-actions/manifests.ts index c3dec90452..16682fce99 100644 --- a/src/packages/documents/document-blueprints/entity-actions/manifests.ts +++ b/src/packages/documents/document-blueprints/entity-actions/manifests.ts @@ -5,9 +5,8 @@ import { } from '../index.js'; import { manifests as createManifests } from './create/manifests.js'; import { manifests as moveManifests } from './move-to/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'delete', @@ -19,6 +18,6 @@ const entityActions: Array = [ itemRepositoryAlias: UMB_DOCUMENT_BLUEPRINT_ITEM_REPOSITORY_ALIAS, }, }, + ...createManifests, + ...moveManifests, ]; - -export const manifests: Array = [...entityActions, ...createManifests, ...moveManifests]; diff --git a/src/packages/documents/document-blueprints/entity-actions/move-to/manifests.ts b/src/packages/documents/document-blueprints/entity-actions/move-to/manifests.ts index f650dbaddc..ffe1e5662f 100644 --- a/src/packages/documents/document-blueprints/entity-actions/move-to/manifests.ts +++ b/src/packages/documents/document-blueprints/entity-actions/move-to/manifests.ts @@ -2,9 +2,8 @@ import { UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE } from '../../entity.js'; import { UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS, UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from '../../tree/index.js'; import { UMB_MOVE_DOCUMENT_BLUEPRINT_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'moveTo', @@ -18,6 +17,5 @@ const entityActions: Array = [ foldersOnly: true, }, }, + ...repositoryManifests, ]; - -export const manifests = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/documents/document-blueprints/manifests.ts b/src/packages/documents/document-blueprints/manifests.ts index 0e8418c443..d92cd9c059 100644 --- a/src/packages/documents/document-blueprints/manifests.ts +++ b/src/packages/documents/document-blueprints/manifests.ts @@ -3,9 +3,8 @@ import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...entityActionManifests, ...menuItemManifests, ...repositoryManifests, diff --git a/src/packages/documents/document-blueprints/menu-item/manifests.ts b/src/packages/documents/document-blueprints/menu-item/manifests.ts index 1408066bdb..7797421b52 100644 --- a/src/packages/documents/document-blueprints/menu-item/manifests.ts +++ b/src/packages/documents/document-blueprints/menu-item/manifests.ts @@ -1,17 +1,16 @@ import { UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from '../tree/constants.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const menuItem: ManifestTypes = { - type: 'menuItem', - kind: 'tree', - alias: 'Umb.MenuItem.DocumentBlueprints', - name: 'Document Blueprints Menu Item', - weight: 100, - meta: { - treeAlias: UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS, - label: '#treeHeaders_contentBlueprints', - menus: ['Umb.Menu.StructureSettings'], +export const manifests: Array = [ + { + type: 'menuItem', + kind: 'tree', + alias: 'Umb.MenuItem.DocumentBlueprints', + name: 'Document Blueprints Menu Item', + weight: 100, + meta: { + treeAlias: UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS, + label: '#treeHeaders_contentBlueprints', + menus: ['Umb.Menu.StructureSettings'], + }, }, -}; - -export const manifests: Array = [menuItem]; +]; diff --git a/src/packages/documents/document-blueprints/repository/detail/document-blueprint-detail.server.data-source.ts b/src/packages/documents/document-blueprints/repository/detail/document-blueprint-detail.server.data-source.ts index 8d211bad4c..acb3437977 100644 --- a/src/packages/documents/document-blueprints/repository/detail/document-blueprint-detail.server.data-source.ts +++ b/src/packages/documents/document-blueprints/repository/detail/document-blueprint-detail.server.data-source.ts @@ -92,6 +92,7 @@ export class UmbDocumentBlueprintServerDataSource implements UmbDetailDataSource unique: data.id, values: data.values.map((value) => { return { + editorAlias: value.editorAlias, alias: value.alias, culture: value.culture || null, segment: value.segment || null, diff --git a/src/packages/documents/document-blueprints/repository/detail/manifests.ts b/src/packages/documents/document-blueprints/repository/detail/manifests.ts index 8f5f0c319c..606f26386b 100644 --- a/src/packages/documents/document-blueprints/repository/detail/manifests.ts +++ b/src/packages/documents/document-blueprints/repository/detail/manifests.ts @@ -1,21 +1,17 @@ -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_BLUEPRINT_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.DocumentBlueprint.Detail'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_BLUEPRINT_DETAIL_REPOSITORY_ALIAS, - name: 'Document Blueprint Detail Repository', - api: () => import('./document-blueprint-detail.repository.js'), -}; - export const UMB_DOCUMENT_BLUEPRINT_DETAIL_STORE_ALIAS = 'Umb.Store.DocumentBlueprint.Detail'; -const store: ManifestStore = { - type: 'store', - alias: UMB_DOCUMENT_BLUEPRINT_DETAIL_STORE_ALIAS, - name: 'Document Blueprint Detail Store', - api: () => import('./document-blueprint-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_BLUEPRINT_DETAIL_REPOSITORY_ALIAS, + name: 'Document Blueprint Detail Repository', + api: () => import('./document-blueprint-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_DOCUMENT_BLUEPRINT_DETAIL_STORE_ALIAS, + name: 'Document Blueprint Detail Store', + api: () => import('./document-blueprint-detail.store.js'), + }, +]; diff --git a/src/packages/documents/document-blueprints/repository/item/manifests.ts b/src/packages/documents/document-blueprints/repository/item/manifests.ts index 380c4b9fc8..4a46a817bf 100644 --- a/src/packages/documents/document-blueprints/repository/item/manifests.ts +++ b/src/packages/documents/document-blueprints/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_BLUEPRINT_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.DocumentBlueprint.Item'; export const UMB_DOCUMENT_BLUEPRINT_STORE_ALIAS = 'Umb.Store.DocumentBlueprint.Item'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_BLUEPRINT_ITEM_REPOSITORY_ALIAS, - name: 'Document Blueprint Item Repository', - api: () => import('./document-blueprint-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_DOCUMENT_BLUEPRINT_STORE_ALIAS, - name: 'Document Blueprint Item Store', - api: () => import('./document-blueprint-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_BLUEPRINT_ITEM_REPOSITORY_ALIAS, + name: 'Document Blueprint Item Repository', + api: () => import('./document-blueprint-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_DOCUMENT_BLUEPRINT_STORE_ALIAS, + name: 'Document Blueprint Item Store', + api: () => import('./document-blueprint-item.store.js'), + }, +]; diff --git a/src/packages/documents/document-blueprints/repository/manifests.ts b/src/packages/documents/document-blueprints/repository/manifests.ts index 37dcb889ef..4dfb0c911f 100644 --- a/src/packages/documents/document-blueprints/repository/manifests.ts +++ b/src/packages/documents/document-blueprints/repository/manifests.ts @@ -1,5 +1,4 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/packages/documents/document-blueprints/tree/folder/manifests.ts b/src/packages/documents/document-blueprints/tree/folder/manifests.ts index d284633ca4..3255245171 100644 --- a/src/packages/documents/document-blueprints/tree/folder/manifests.ts +++ b/src/packages/documents/document-blueprints/tree/folder/manifests.ts @@ -1,16 +1,14 @@ import { UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_BLUEPRINT_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.DocumentBlueprint.Folder'; -const folderRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_BLUEPRINT_FOLDER_REPOSITORY_ALIAS, - name: 'Document Blueprint Folder Repository', - api: () => import('./document-blueprint-folder.repository.js'), -}; - -const entityActions: Array = [ +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_BLUEPRINT_FOLDER_REPOSITORY_ALIAS, + name: 'Document Blueprint Folder Repository', + api: () => import('./document-blueprint-folder.repository.js'), + }, { type: 'entityAction', kind: 'folderUpdate', @@ -32,5 +30,3 @@ const entityActions: Array = [ }, }, ]; - -export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/packages/documents/document-blueprints/tree/manifests.ts b/src/packages/documents/document-blueprints/tree/manifests.ts index a35d2fbb6a..94097ca61a 100644 --- a/src/packages/documents/document-blueprints/tree/manifests.ts +++ b/src/packages/documents/document-blueprints/tree/manifests.ts @@ -10,55 +10,40 @@ import { } from './constants.js'; import { manifests as folderManifests } from './folder/manifests.js'; import { manifests as reloadManifests } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS, - name: 'Document Blueprint Tree Repository', - api: () => import('./document-blueprint-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_DOCUMENT_BLUEPRINT_TREE_STORE_ALIAS, - name: 'Document Blueprint Tree Store', - api: () => import('./document-blueprint-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS, - name: 'Document Blueprints Tree', - meta: { - repositoryAlias: UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS, + name: 'Document Blueprint Tree Repository', + api: () => import('./document-blueprint-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_DOCUMENT_BLUEPRINT_TREE_STORE_ALIAS, + name: 'Document Blueprint Tree Store', + api: () => import('./document-blueprint-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS, + name: 'Document Blueprints Tree', + meta: { + repositoryAlias: UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.DocumentBlueprint', + name: 'Document Blueprint Tree Item', + forEntityTypes: [ + UMB_DOCUMENT_BLUEPRINT_ROOT_ENTITY_TYPE, + UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE, + UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE, + ], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.DocumentBlueprint', - name: 'Document Blueprint Tree Item', - forEntityTypes: [ - UMB_DOCUMENT_BLUEPRINT_ROOT_ENTITY_TYPE, - UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE, - UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE, - ], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...reloadManifests, ...folderManifests, ]; diff --git a/src/packages/documents/document-blueprints/tree/reload-tree-item-children/manifests.ts b/src/packages/documents/document-blueprints/tree/reload-tree-item-children/manifests.ts index 4fb57f4e6d..ed1ea15a19 100644 --- a/src/packages/documents/document-blueprints/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/documents/document-blueprints/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE, UMB_DOCUMENT_BLUEPRINT_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts b/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts index 214e9ba02e..7098648af1 100644 --- a/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts +++ b/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts @@ -292,7 +292,17 @@ export class UmbDocumentBlueprintWorkspaceContext ) { if (!variantId) throw new Error('VariantId is missing'); - const entry = { ...variantId.toObject(), alias, value }; + const property = await this.structure.getPropertyStructureByAlias(alias); + + if (!property) { + throw new Error(`Property alias "${alias}" not found.`); + } + + //const dataType = await this.#dataTypeItemManager.getItemByUnique(property.dataType.unique); + //const editorAlias = dataType.editorAlias; + const editorAlias = 'Umbraco.TextBox'; + + const entry = { ...variantId.toObject(), alias, editorAlias, value }; const currentData = this.#currentData.value; if (currentData) { const values = appendToFrozenArray( diff --git a/src/packages/documents/document-blueprints/workspace/manifests.ts b/src/packages/documents/document-blueprints/workspace/manifests.ts index f3fb48883d..2390097b6d 100644 --- a/src/packages/documents/document-blueprints/workspace/manifests.ts +++ b/src/packages/documents/document-blueprints/workspace/manifests.ts @@ -4,47 +4,38 @@ import { UMB_DOCUMENT_BLUEPRINT_ROOT_ENTITY_TYPE, } from '../entity.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestTypes, - ManifestWorkspace, - ManifestWorkspaceActions, - ManifestWorkspaceView, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS = 'Umb.Workspace.DocumentBlueprint'; -const workspace: ManifestWorkspace = { - type: 'workspace', - kind: 'routable', - alias: UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS, - name: 'Document Blueprint Workspace', - api: () => import('./document-blueprint-workspace.context.js'), - meta: { - entityType: UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE, +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS, + name: 'Document Blueprint Workspace', + api: () => import('./document-blueprint-workspace.context.js'), + meta: { + entityType: UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE, + }, }, -}; - -const rootWorkspace: ManifestWorkspace = { - type: 'workspace', - alias: 'Umb.Workspace.DocumentBlueprint.Root', - name: 'Document Blueprint Root Workspace', - element: () => import('./document-blueprint-root-workspace.element.js'), - meta: { - entityType: UMB_DOCUMENT_BLUEPRINT_ROOT_ENTITY_TYPE, + { + type: 'workspace', + alias: 'Umb.Workspace.DocumentBlueprint.Root', + name: 'Document Blueprint Root Workspace', + element: () => import('./document-blueprint-root-workspace.element.js'), + meta: { + entityType: UMB_DOCUMENT_BLUEPRINT_ROOT_ENTITY_TYPE, + }, }, -}; - -const folderWorkspace: ManifestWorkspace = { - type: 'workspace', - alias: 'Umb.Workspace.DocumentBlueprint.Folder', - name: 'Document Blueprint Folder Workspace', - element: () => import('./document-blueprint-root-workspace.element.js'), - meta: { - entityType: UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE, + { + type: 'workspace', + alias: 'Umb.Workspace.DocumentBlueprint.Folder', + name: 'Document Blueprint Folder Workspace', + element: () => import('./document-blueprint-root-workspace.element.js'), + meta: { + entityType: UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE, + }, }, -}; - -const workspaceViews: Array = [ { type: 'workspaceView', kind: 'contentEditor', @@ -59,13 +50,11 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS, }, ], }, -]; -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -81,16 +70,8 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [ - rootWorkspace, - folderWorkspace, - workspace, - ...workspaceViews, - ...workspaceActions, -]; diff --git a/src/packages/documents/document-redirect-management/manifests.ts b/src/packages/documents/document-redirect-management/manifests.ts index 9ea9e24f3a..b2d382a017 100644 --- a/src/packages/documents/document-redirect-management/manifests.ts +++ b/src/packages/documents/document-redirect-management/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestDashboard, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const dashboards: Array = [ +export const manifests: Array = [ { type: 'dashboard', alias: 'Umb.Dashboard.RedirectManagement', @@ -19,5 +17,3 @@ const dashboards: Array = [ ], }, ]; - -export const manifests: Array = [...dashboards]; diff --git a/src/packages/documents/document-types/entity-actions/create/manifests.ts b/src/packages/documents/document-types/entity-actions/create/manifests.ts index 7603b574cb..2879df41cf 100644 --- a/src/packages/documents/document-types/entity-actions/create/manifests.ts +++ b/src/packages/documents/document-types/entity-actions/create/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE, UMB_DOCUMENT_TYPE_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -13,6 +12,7 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { @@ -22,5 +22,3 @@ const entityActions: Array = [ element: () => import('./modal/document-type-create-options-modal.element.js'), }, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/documents/document-types/entity-actions/duplicate/manifests.ts b/src/packages/documents/document-types/entity-actions/duplicate/manifests.ts index dc5e01fca1..d249119140 100644 --- a/src/packages/documents/document-types/entity-actions/duplicate/manifests.ts +++ b/src/packages/documents/document-types/entity-actions/duplicate/manifests.ts @@ -2,9 +2,8 @@ import { UMB_DOCUMENT_TYPE_ENTITY_TYPE } from '../../entity.js'; import { UMB_DOCUMENT_TYPE_TREE_ALIAS, UMB_DOCUMENT_TYPE_TREE_REPOSITORY_ALIAS } from '../../tree/index.js'; import { UMB_DUPLICATE_DOCUMENT_TYPE_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'duplicateTo', @@ -18,6 +17,5 @@ const entityActions: Array = [ foldersOnly: true, }, }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/documents/document-types/entity-actions/duplicate/repository/manifests.ts b/src/packages/documents/document-types/entity-actions/duplicate/repository/manifests.ts index 8eacd1a3b7..35a50f99bf 100644 --- a/src/packages/documents/document-types/entity-actions/duplicate/repository/manifests.ts +++ b/src/packages/documents/document-types/entity-actions/duplicate/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_DUPLICATE_DOCUMENT_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const duplicateRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DUPLICATE_DOCUMENT_TYPE_REPOSITORY_ALIAS, - name: 'Duplicate Document Type Repository', - api: () => import('./document-type-duplicate.repository.js'), -}; - -export const manifests: Array = [duplicateRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DUPLICATE_DOCUMENT_TYPE_REPOSITORY_ALIAS, + name: 'Duplicate Document Type Repository', + api: () => import('./document-type-duplicate.repository.js'), + }, +]; diff --git a/src/packages/documents/document-types/entity-actions/export/manifests.ts b/src/packages/documents/document-types/entity-actions/export/manifests.ts index 621cd14233..100037da23 100644 --- a/src/packages/documents/document-types/entity-actions/export/manifests.ts +++ b/src/packages/documents/document-types/entity-actions/export/manifests.ts @@ -1,8 +1,7 @@ import { UMB_DOCUMENT_TYPE_ENTITY_TYPE } from '../../entity.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -13,8 +12,8 @@ const entityActions: Array = [ meta: { icon: 'icon-download-alt', label: '#actions_export', + additionalOptions: true, }, }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/documents/document-types/entity-actions/export/repository/manifests.ts b/src/packages/documents/document-types/entity-actions/export/repository/manifests.ts index 4c4475f974..9eed9bdac6 100644 --- a/src/packages/documents/document-types/entity-actions/export/repository/manifests.ts +++ b/src/packages/documents/document-types/entity-actions/export/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_EXPORT_DOCUMENT_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const exportRepository: ManifestRepository = { - type: 'repository', - alias: UMB_EXPORT_DOCUMENT_TYPE_REPOSITORY_ALIAS, - name: 'Export Document Type Repository', - api: () => import('./document-type-export.repository.js'), -}; - -export const manifests: Array = [exportRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_EXPORT_DOCUMENT_TYPE_REPOSITORY_ALIAS, + name: 'Export Document Type Repository', + api: () => import('./document-type-export.repository.js'), + }, +]; diff --git a/src/packages/documents/document-types/entity-actions/import/manifests.ts b/src/packages/documents/document-types/entity-actions/import/manifests.ts index 0a34f26496..8d39bb23e7 100644 --- a/src/packages/documents/document-types/entity-actions/import/manifests.ts +++ b/src/packages/documents/document-types/entity-actions/import/manifests.ts @@ -1,9 +1,8 @@ import { UMB_DOCUMENT_TYPE_ROOT_ENTITY_TYPE } from '../../entity.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as modalManifests } from './modal/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -14,8 +13,9 @@ const entityActions: Array = [ meta: { icon: 'icon-page-up', label: '#actions_import', + additionalOptions: true, }, }, + ...repositoryManifests, + ...modalManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests, ...modalManifests]; diff --git a/src/packages/documents/document-types/entity-actions/import/repository/manifests.ts b/src/packages/documents/document-types/entity-actions/import/repository/manifests.ts index b5c47f7170..47a1f39f47 100644 --- a/src/packages/documents/document-types/entity-actions/import/repository/manifests.ts +++ b/src/packages/documents/document-types/entity-actions/import/repository/manifests.ts @@ -1,11 +1,9 @@ import { UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const importRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS, - name: 'Import Document Type Repository', - api: () => import('./document-type-import.repository.js'), -}; - -export const manifests: Array = [importRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_TYPE_IMPORT_REPOSITORY_ALIAS, + name: 'Import Document Type Repository', + api: () => import('./document-type-import.repository.js'), + }, +]; diff --git a/src/packages/documents/document-types/entity-actions/manifests.ts b/src/packages/documents/document-types/entity-actions/manifests.ts index b23d2c7660..e7b191bda3 100644 --- a/src/packages/documents/document-types/entity-actions/manifests.ts +++ b/src/packages/documents/document-types/entity-actions/manifests.ts @@ -8,9 +8,8 @@ import { manifests as moveManifests } from './move-to/manifests.js'; import { manifests as duplicateManifests } from './duplicate/manifests.js'; import { manifests as exportManifests } from './export/manifests.js'; import { manifests as importManifests } from './import/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'delete', @@ -20,12 +19,9 @@ const entityActions: Array = [ meta: { itemRepositoryAlias: UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS, detailRepositoryAlias: UMB_DOCUMENT_TYPE_DETAIL_REPOSITORY_ALIAS, + additionalOptions: true, }, }, -]; - -export const manifests: Array = [ - ...entityActions, ...createManifests, ...moveManifests, ...duplicateManifests, diff --git a/src/packages/documents/document-types/entity-actions/move-to/manifests.ts b/src/packages/documents/document-types/entity-actions/move-to/manifests.ts index ebb3f30c81..5c2148c32b 100644 --- a/src/packages/documents/document-types/entity-actions/move-to/manifests.ts +++ b/src/packages/documents/document-types/entity-actions/move-to/manifests.ts @@ -2,9 +2,8 @@ import { UMB_DOCUMENT_TYPE_ENTITY_TYPE } from '../../entity.js'; import { UMB_DOCUMENT_TYPE_TREE_REPOSITORY_ALIAS, UMB_DOCUMENT_TYPE_TREE_ALIAS } from '../../tree/index.js'; import { UMB_MOVE_DOCUMENT_TYPE_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'moveTo', @@ -18,6 +17,5 @@ const entityActions: Array = [ foldersOnly: true, }, }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/documents/document-types/entity-actions/move-to/repository/manifests.ts b/src/packages/documents/document-types/entity-actions/move-to/repository/manifests.ts index 5591ffca03..3ade990f57 100644 --- a/src/packages/documents/document-types/entity-actions/move-to/repository/manifests.ts +++ b/src/packages/documents/document-types/entity-actions/move-to/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MOVE_DOCUMENT_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const moveRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MOVE_DOCUMENT_TYPE_REPOSITORY_ALIAS, - name: 'Move Document Type Repository', - api: () => import('./document-type-move.repository.js'), -}; - -export const manifests: Array = [moveRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MOVE_DOCUMENT_TYPE_REPOSITORY_ALIAS, + name: 'Move Document Type Repository', + api: () => import('./document-type-move.repository.js'), + }, +]; diff --git a/src/packages/documents/document-types/manifests.ts b/src/packages/documents/document-types/manifests.ts index f49f4353fa..5bc88fb6ce 100644 --- a/src/packages/documents/document-types/manifests.ts +++ b/src/packages/documents/document-types/manifests.ts @@ -5,9 +5,8 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as searchManifests } from './search/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...entityActionsManifests, ...menuManifests, ...propertyEditorManifests, diff --git a/src/packages/documents/document-types/menu/manifests.ts b/src/packages/documents/document-types/menu/manifests.ts index 74118de9f0..2e98f9edd5 100644 --- a/src/packages/documents/document-types/menu/manifests.ts +++ b/src/packages/documents/document-types/menu/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DOCUMENT_TYPE_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/packages/documents/document-types/repository/composition/manifests.ts b/src/packages/documents/document-types/repository/composition/manifests.ts index b01f3b0be9..0095868b42 100644 --- a/src/packages/documents/document-types/repository/composition/manifests.ts +++ b/src/packages/documents/document-types/repository/composition/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Composition'; -const compositionRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS, - name: 'Document Type Composition Repository', - api: () => import('./document-type-composition.repository.js'), -}; - -export const manifests: Array = [compositionRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS, + name: 'Document Type Composition Repository', + api: () => import('./document-type-composition.repository.js'), + }, +]; diff --git a/src/packages/documents/document-types/repository/detail/manifests.ts b/src/packages/documents/document-types/repository/detail/manifests.ts index 5a9779edf1..1a4a3e0685 100644 --- a/src/packages/documents/document-types/repository/detail/manifests.ts +++ b/src/packages/documents/document-types/repository/detail/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_TYPE_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Detail'; export const UMB_DOCUMENT_TYPE_DETAIL_STORE_ALIAS = 'Umb.Store.DocumentType.Detail'; -const detailRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_TYPE_DETAIL_REPOSITORY_ALIAS, - name: 'Document Types Repository', - api: () => import('./document-type-detail.repository.js'), -}; - -const detailStore: ManifestStore = { - type: 'store', - alias: UMB_DOCUMENT_TYPE_DETAIL_STORE_ALIAS, - name: 'Document Type Store', - api: () => import('./document-type-detail.store.js'), -}; - -export const manifests: Array = [detailRepository, detailStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_TYPE_DETAIL_REPOSITORY_ALIAS, + name: 'Document Types Repository', + api: () => import('./document-type-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_DOCUMENT_TYPE_DETAIL_STORE_ALIAS, + name: 'Document Type Store', + api: () => import('./document-type-detail.store.js'), + }, +]; diff --git a/src/packages/documents/document-types/repository/item/manifests.ts b/src/packages/documents/document-types/repository/item/manifests.ts index 4e0929b79b..e92defbd56 100644 --- a/src/packages/documents/document-types/repository/item/manifests.ts +++ b/src/packages/documents/document-types/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestItemStore, ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Item'; export const UMB_DOCUMENT_TYPE_ITEM_STORE_ALIAS = 'Umb.Store.DocumentType.Item'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS, - name: 'Document Type Item Repository', - api: () => import('./document-type-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_DOCUMENT_TYPE_ITEM_STORE_ALIAS, - name: 'Document Type Item Store', - api: () => import('./document-type-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS, + name: 'Document Type Item Repository', + api: () => import('./document-type-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_DOCUMENT_TYPE_ITEM_STORE_ALIAS, + name: 'Document Type Item Store', + api: () => import('./document-type-item.store.js'), + }, +]; diff --git a/src/packages/documents/document-types/repository/manifests.ts b/src/packages/documents/document-types/repository/manifests.ts index ce74b2570d..e1ab3e2a72 100644 --- a/src/packages/documents/document-types/repository/manifests.ts +++ b/src/packages/documents/document-types/repository/manifests.ts @@ -1,6 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as compositionManifests } from './composition/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests, ...compositionManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests, ...compositionManifests]; diff --git a/src/packages/documents/document-types/repository/structure/manifests.ts b/src/packages/documents/document-types/repository/structure/manifests.ts index c59713ae59..37c5536f4c 100644 --- a/src/packages/documents/document-types/repository/structure/manifests.ts +++ b/src/packages/documents/document-types/repository/structure/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_TYPE_STRUCTURE_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Structure'; -const structureRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_TYPE_STRUCTURE_REPOSITORY_ALIAS, - name: 'Document Type Structure Repository', - api: () => import('./document-type-structure.repository.js'), -}; - -export const manifests: Array = [structureRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_TYPE_STRUCTURE_REPOSITORY_ALIAS, + name: 'Document Type Structure Repository', + api: () => import('./document-type-structure.repository.js'), + }, +]; diff --git a/src/packages/documents/document-types/search/manifests.ts b/src/packages/documents/document-types/search/manifests.ts index 503ee26f29..e8f9d5c38c 100644 --- a/src/packages/documents/document-types/search/manifests.ts +++ b/src/packages/documents/document-types/search/manifests.ts @@ -1,8 +1,7 @@ import { UMB_DOCUMENT_TYPE_ENTITY_TYPE } from '../entity.js'; import { UMB_DOCUMENT_TYPE_SEARCH_PROVIDER_ALIAS } from './constants.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { name: 'Document Type Search Provider', alias: UMB_DOCUMENT_TYPE_SEARCH_PROVIDER_ALIAS, diff --git a/src/packages/documents/document-types/tree/folder/manifests.ts b/src/packages/documents/document-types/tree/folder/manifests.ts index 6b61e79056..2dc8908f62 100644 --- a/src/packages/documents/document-types/tree/folder/manifests.ts +++ b/src/packages/documents/document-types/tree/folder/manifests.ts @@ -1,20 +1,14 @@ import { UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { - ManifestEntityActions, - ManifestRepository, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_TYPE_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Folder'; -const folderRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_TYPE_FOLDER_REPOSITORY_ALIAS, - name: 'Document Type Folder Repository', - api: () => import('./document-type-folder.repository.js'), -}; - -const entityActions: Array = [ +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_TYPE_FOLDER_REPOSITORY_ALIAS, + name: 'Document Type Folder Repository', + api: () => import('./document-type-folder.repository.js'), + }, { type: 'entityAction', kind: 'folderUpdate', @@ -36,5 +30,3 @@ const entityActions: Array = [ }, }, ]; - -export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/packages/documents/document-types/tree/manifests.ts b/src/packages/documents/document-types/tree/manifests.ts index 23c50cb69b..4ff98fac57 100644 --- a/src/packages/documents/document-types/tree/manifests.ts +++ b/src/packages/documents/document-types/tree/manifests.ts @@ -10,55 +10,40 @@ import { } from './constants.js'; import { manifests as folderManifests } from './folder/manifests.js'; import { manifests as reloadManifests } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_TYPE_TREE_REPOSITORY_ALIAS, - name: 'Document Type Tree Repository', - api: () => import('./document-type-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_DOCUMENT_TYPE_TREE_STORE_ALIAS, - name: 'Document Type Tree Store', - api: () => import('./document-type.tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_DOCUMENT_TYPE_TREE_ALIAS, - name: 'Document Type Tree', - meta: { - repositoryAlias: UMB_DOCUMENT_TYPE_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_TYPE_TREE_REPOSITORY_ALIAS, + name: 'Document Type Tree Repository', + api: () => import('./document-type-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_DOCUMENT_TYPE_TREE_STORE_ALIAS, + name: 'Document Type Tree Store', + api: () => import('./document-type.tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_DOCUMENT_TYPE_TREE_ALIAS, + name: 'Document Type Tree', + meta: { + repositoryAlias: UMB_DOCUMENT_TYPE_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.DocumentType', + name: 'Document Type Tree Item', + forEntityTypes: [ + UMB_DOCUMENT_TYPE_ROOT_ENTITY_TYPE, + UMB_DOCUMENT_TYPE_ENTITY_TYPE, + UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE, + ], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.DocumentType', - name: 'Document Type Tree Item', - forEntityTypes: [ - UMB_DOCUMENT_TYPE_ROOT_ENTITY_TYPE, - UMB_DOCUMENT_TYPE_ENTITY_TYPE, - UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE, - ], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...folderManifests, ...reloadManifests, ]; diff --git a/src/packages/documents/document-types/tree/reload-tree-item-children/manifests.ts b/src/packages/documents/document-types/tree/reload-tree-item-children/manifests.ts index 9c6beeb7a3..550364e51b 100644 --- a/src/packages/documents/document-types/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/documents/document-types/tree/reload-tree-item-children/manifests.ts @@ -3,9 +3,8 @@ import { UMB_DOCUMENT_TYPE_ENTITY_TYPE, UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE, } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', alias: 'Umb.EntityAction.DocumentType.Tree.ReloadChildrenOf', diff --git a/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts b/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts index 18f4a74ced..f12529bed3 100644 --- a/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts +++ b/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts @@ -2,7 +2,8 @@ import { UMB_DOCUMENT_TYPE_WORKSPACE_CONTEXT } from './document-type-workspace.c import type { UmbInputWithAliasElement } from '@umbraco-cms/backoffice/components'; import { umbFocus, UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; import type { UUITextareaElement } from '@umbraco-cms/backoffice/external/uui'; import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; diff --git a/src/packages/documents/document-types/workspace/document-type-workspace.modal-token.ts b/src/packages/documents/document-types/workspace/document-type-workspace.modal-token.ts index b0bd378a3f..46162c38e0 100644 --- a/src/packages/documents/document-types/workspace/document-type-workspace.modal-token.ts +++ b/src/packages/documents/document-types/workspace/document-type-workspace.modal-token.ts @@ -1,7 +1,8 @@ import { UMB_DOCUMENT_TYPE_ENTITY_TYPE } from '../entity.js'; -import { UMB_WORKSPACE_MODAL, UmbModalToken } from '@umbraco-cms/backoffice/modal'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbDeepPartialObject } from '@umbraco-cms/backoffice/utils'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface UmbDocumentTypeWorkspaceData extends UmbWorkspaceModalData {} diff --git a/src/packages/documents/document-types/workspace/manifests.ts b/src/packages/documents/document-types/workspace/manifests.ts index 80b80f793e..f4230143a2 100644 --- a/src/packages/documents/document-types/workspace/manifests.ts +++ b/src/packages/documents/document-types/workspace/manifests.ts @@ -1,26 +1,19 @@ import { UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS } from '../repository/composition/index.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestTypes, - ManifestWorkspace, - ManifestWorkspaceActions, - ManifestWorkspaceViews, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.DocumentType'; -const workspace: ManifestWorkspace = { - type: 'workspace', - kind: 'routable', - alias: UMB_DOCUMENT_TYPE_WORKSPACE_ALIAS, - name: 'Document Type Workspace', - api: () => import('./document-type-workspace.context.js'), - meta: { - entityType: 'document-type', +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_DOCUMENT_TYPE_WORKSPACE_ALIAS, + name: 'Document Type Workspace', + api: () => import('./document-type-workspace.context.js'), + meta: { + entityType: 'document-type', + }, }, -}; - -const workspaceViews: Array = [ { type: 'workspaceView', kind: 'contentTypeDesignEditor', @@ -93,9 +86,6 @@ const workspaceViews: Array = [ }, ], }, -]; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -115,5 +105,3 @@ const workspaceActions: Array = [ ], }, ]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/packages/documents/document-types/workspace/views/settings/document-type-workspace-view-settings.element.ts b/src/packages/documents/document-types/workspace/views/settings/document-type-workspace-view-settings.element.ts index 9030f12b04..65fc9c7dc9 100644 --- a/src/packages/documents/document-types/workspace/views/settings/document-type-workspace-view-settings.element.ts +++ b/src/packages/documents/document-types/workspace/views/settings/document-type-workspace-view-settings.element.ts @@ -3,7 +3,7 @@ import { css, html, customElement, state, when } from '@umbraco-cms/backoffice/e import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UUIBooleanInputEvent, UUIToggleElement } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; @customElement('umb-document-type-workspace-view-settings') export class UmbDocumentTypeWorkspaceViewSettingsElement extends UmbLitElement implements UmbWorkspaceViewElement { diff --git a/src/packages/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts b/src/packages/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts index 12c14c1743..0a490ea644 100644 --- a/src/packages/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts +++ b/src/packages/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts @@ -6,7 +6,7 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbContentTypeSortModel } from '@umbraco-cms/backoffice/content-type'; import type { UmbInputCollectionConfigurationElement } from '@umbraco-cms/backoffice/components'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import type { UUIToggleElement } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-document-type-workspace-view-structure') diff --git a/src/packages/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts b/src/packages/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts index 71723b34a1..fb65925358 100644 --- a/src/packages/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts +++ b/src/packages/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts @@ -4,7 +4,7 @@ import type { UmbInputTemplateElement } from '@umbraco-cms/backoffice/template'; import { css, html, customElement, state, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import '@umbraco-cms/backoffice/template'; // TODO: This is needed to register the element, but it should be done in a better way without importing the whole module. diff --git a/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts b/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts index 50a05f3eb5..29e72c693b 100644 --- a/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts +++ b/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts @@ -8,9 +8,9 @@ import { UMB_DOCUMENT_ROOT_ENTITY_TYPE, UMB_DOCUMENT_WORKSPACE_CONTEXT, } from '@umbraco-cms/backoffice/document'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; -import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/collection'; import type { UmbAllowedDocumentTypeModel } from '@umbraco-cms/backoffice/document-type'; @customElement('umb-create-document-collection-action') diff --git a/src/packages/documents/documents/collection/action/manifests.ts b/src/packages/documents/documents/collection/action/manifests.ts index 23e86e6e81..4cfb22b82d 100644 --- a/src/packages/documents/documents/collection/action/manifests.ts +++ b/src/packages/documents/documents/collection/action/manifests.ts @@ -1,22 +1,21 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const createManifest: ManifestCollectionAction = { - type: 'collectionAction', - kind: 'button', - name: 'Create Document Collection Action', - alias: 'Umb.CollectionAction.Document.Create', - element: () => import('./create-document-collection-action.element.js'), - weight: 100, - meta: { - label: '#general_create', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Document', +export const manifests: Array = [ + { + type: 'collectionAction', + kind: 'button', + name: 'Create Document Collection Action', + alias: 'Umb.CollectionAction.Document.Create', + element: () => import('./create-document-collection-action.element.js'), + weight: 100, + meta: { + label: '#general_create', }, - ], -}; - -export const manifests: Array = [createManifest]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Document', + }, + ], + }, +]; diff --git a/src/packages/documents/documents/collection/manifests.ts b/src/packages/documents/documents/collection/manifests.ts index c1efb302f2..37ebe5232a 100644 --- a/src/packages/documents/documents/collection/manifests.ts +++ b/src/packages/documents/documents/collection/manifests.ts @@ -3,21 +3,18 @@ import { manifests as collectionActionManifests } from './action/manifests.js'; import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; import { manifests as collectionViewManifests } from './views/manifests.js'; import { UMB_DOCUMENT_COLLECTION_ALIAS } from './index.js'; -import type { ManifestCollection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const collectionManifest: ManifestCollection = { - type: 'collection', - alias: UMB_DOCUMENT_COLLECTION_ALIAS, - name: 'Document Collection', - api: () => import('./document-collection.context.js'), - element: () => import('./document-collection.element.js'), - meta: { - repositoryAlias: UMB_DOCUMENT_COLLECTION_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'collection', + alias: UMB_DOCUMENT_COLLECTION_ALIAS, + name: 'Document Collection', + api: () => import('./document-collection.context.js'), + element: () => import('./document-collection.element.js'), + meta: { + repositoryAlias: UMB_DOCUMENT_COLLECTION_REPOSITORY_ALIAS, + }, }, -}; - -export const manifests: Array = [ - collectionManifest, ...collectionActionManifests, ...collectionRepositoryManifests, ...collectionViewManifests, diff --git a/src/packages/documents/documents/collection/repository/manifests.ts b/src/packages/documents/documents/collection/repository/manifests.ts index 48a111b41a..4b2fb79057 100644 --- a/src/packages/documents/documents/collection/repository/manifests.ts +++ b/src/packages/documents/documents/collection/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_DOCUMENT_COLLECTION_REPOSITORY_ALIAS } from './index.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const collectionRepositoryManifest: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_COLLECTION_REPOSITORY_ALIAS, - name: 'Document Collection Repository', - api: () => import('./document-collection.repository.js'), -}; - -export const manifests: Array = [collectionRepositoryManifest]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_COLLECTION_REPOSITORY_ALIAS, + name: 'Document Collection Repository', + api: () => import('./document-collection.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts b/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts index 5218ca0e54..4f23a12d88 100644 --- a/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts +++ b/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts @@ -7,7 +7,7 @@ import { fromCamelCase } from '@umbraco-cms/backoffice/utils'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbDefaultCollectionContext, UmbCollectionColumnConfiguration } from '@umbraco-cms/backoffice/collection'; import type { UUIInterfaceColor } from '@umbraco-cms/backoffice/external/uui'; diff --git a/src/packages/documents/documents/collection/views/manifests.ts b/src/packages/documents/documents/collection/views/manifests.ts index 36f872a12f..d716df672e 100644 --- a/src/packages/documents/documents/collection/views/manifests.ts +++ b/src/packages/documents/documents/collection/views/manifests.ts @@ -1,45 +1,43 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_GRID_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Document.Grid'; export const UMB_DOCUMENT_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Document.Table'; -const gridViewManifest: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_DOCUMENT_GRID_COLLECTION_VIEW_ALIAS, - name: 'Document Grid Collection View', - element: () => import('./grid/document-grid-collection-view.element.js'), - weight: 200, - meta: { - label: 'Grid', - icon: 'icon-grid', - pathName: 'grid', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Document', +export const manifests: Array = [ + { + type: 'collectionView', + alias: UMB_DOCUMENT_GRID_COLLECTION_VIEW_ALIAS, + name: 'Document Grid Collection View', + element: () => import('./grid/document-grid-collection-view.element.js'), + weight: 200, + meta: { + label: 'Grid', + icon: 'icon-grid', + pathName: 'grid', }, - ], -}; - -const tableViewManifest: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_DOCUMENT_TABLE_COLLECTION_VIEW_ALIAS, - name: 'Document Table Collection View', - element: () => import('./table/document-table-collection-view.element.js'), - weight: 300, - meta: { - label: 'Table', - icon: 'icon-list', - pathName: 'table', + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Document', + }, + ], }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Document', + { + type: 'collectionView', + alias: UMB_DOCUMENT_TABLE_COLLECTION_VIEW_ALIAS, + name: 'Document Table Collection View', + element: () => import('./table/document-table-collection-view.element.js'), + weight: 300, + meta: { + label: 'Table', + icon: 'icon-list', + pathName: 'table', }, - ], -}; - -export const manifests: Array = [gridViewManifest, tableViewManifest]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Document', + }, + ], + }, +]; diff --git a/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts b/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts index e82195fe67..c01986a218 100644 --- a/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts +++ b/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts @@ -7,7 +7,7 @@ import type { UmbCollectionColumnConfiguration } from '@umbraco-cms/backoffice/c import { css, customElement, html, nothing, state, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import type { diff --git a/src/packages/documents/documents/components/input-document/input-document.element.ts b/src/packages/documents/documents/components/input-document/input-document.element.ts index 18575ba822..7ade0434a2 100644 --- a/src/packages/documents/documents/components/input-document/input-document.element.ts +++ b/src/packages/documents/documents/components/input-document/input-document.element.ts @@ -14,7 +14,7 @@ import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import type { UmbDocumentItemModel } from '@umbraco-cms/backoffice/document'; import type { UmbTreeStartNode } from '@umbraco-cms/backoffice/tree'; @@ -116,7 +116,7 @@ export class UmbInputDocumentElement extends UmbFormControlMixin = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -15,6 +14,7 @@ const entityActions: Array = [ meta: { icon: 'icon-blueprint', label: '#actions_createblueprint', + additionalOptions: true, }, conditions: [ { @@ -26,9 +26,6 @@ const entityActions: Array = [ }, ], }, -]; - -const manifestModals: Array = [ { type: 'modal', alias: 'Umb.Modal.CreateBlueprint', @@ -36,5 +33,3 @@ const manifestModals: Array = [ js: () => import('./modal/create-blueprint-modal.element.js'), }, ]; - -export const manifests: Array = [...entityActions, ...manifestModals]; diff --git a/src/packages/documents/documents/entity-actions/create-blueprint/repository/manifests.ts b/src/packages/documents/documents/entity-actions/create-blueprint/repository/manifests.ts index ea142c5105..5f049c047d 100644 --- a/src/packages/documents/documents/entity-actions/create-blueprint/repository/manifests.ts +++ b/src/packages/documents/documents/entity-actions/create-blueprint/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_CREATE_BLUEPRINT_REPOSITORY_ALIAS = 'Umb.Repository.Document.CreateBlueprint'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_CREATE_BLUEPRINT_REPOSITORY_ALIAS, - name: 'Document Create Blueprint Repository', - api: () => import('./document-create-blueprint.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_CREATE_BLUEPRINT_REPOSITORY_ALIAS, + name: 'Document Create Blueprint Repository', + api: () => import('./document-create-blueprint.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/entity-actions/create/document-create-options-modal.element.ts b/src/packages/documents/documents/entity-actions/create/document-create-options-modal.element.ts index 3f6751d76b..a0eca87a0e 100644 --- a/src/packages/documents/documents/entity-actions/create/document-create-options-modal.element.ts +++ b/src/packages/documents/documents/entity-actions/create/document-create-options-modal.element.ts @@ -132,24 +132,39 @@ export class UmbDocumentCreateOptionsModalElement extends UmbModalBaseElement< `; } + #renderNoDocumentTypes() { + if (this.data?.documentType?.unique) { + return html` + + There are no allowed Document Types available for creating content here. You must enable these in + Document Types within the Settings section, by editing the + Allowed child node types under Structure. + +
+ this._rejectModal()}> + `; + } else { + return html` + + There are no allowed Document Types available for creating content here. You must enable these in + Document Types within the Settings section, by changing the + Allow as root option under Structure. + + `; + } + } + #renderDocumentTypes() { return html` ${when( this._allowedDocumentTypes.length === 0, - () => html` - - There are no allowed Document Types available for creating content here. You must enable these in - Document Types within the Settings section, by editing the - Allowed child node types under Permissions.
-
- this._rejectModal()}> - `, + () => this.#renderNoDocumentTypes(), () => repeat( this._allowedDocumentTypes, diff --git a/src/packages/documents/documents/entity-actions/create/manifests.ts b/src/packages/documents/documents/entity-actions/create/manifests.ts index 4cffe99381..be6a0c6c23 100644 --- a/src/packages/documents/documents/entity-actions/create/manifests.ts +++ b/src/packages/documents/documents/entity-actions/create/manifests.ts @@ -1,9 +1,8 @@ import { UMB_DOCUMENT_ENTITY_TYPE, UMB_DOCUMENT_ROOT_ENTITY_TYPE } from '../../entity.js'; import { UMB_USER_PERMISSION_DOCUMENT_CREATE } from '../../user-permissions/index.js'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -15,6 +14,7 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, conditions: [ { @@ -26,9 +26,6 @@ const entityActions: Array = [ }, ], }, -]; - -const modals: Array = [ { type: 'modal', alias: 'Umb.Modal.Document.CreateOptions', @@ -36,5 +33,3 @@ const modals: Array = [ js: () => import('./document-create-options-modal.element.js'), }, ]; - -export const manifests: Array = [...entityActions, ...modals]; diff --git a/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts b/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts index de1b75692f..7ef0929693 100644 --- a/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts +++ b/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts @@ -1,9 +1,8 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; import { UMB_USER_PERMISSION_DOCUMENT_CULTURE_AND_HOSTNAMES } from '../../user-permissions/index.js'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -15,6 +14,7 @@ const entityActions: Array = [ meta: { icon: 'icon-home', label: '#actions_assigndomain', + additionalOptions: true, }, conditions: [ { @@ -26,9 +26,6 @@ const entityActions: Array = [ }, ], }, -]; - -const manifestModals: Array = [ { type: 'modal', alias: 'Umb.Modal.CultureAndHostnames', @@ -36,5 +33,3 @@ const manifestModals: Array = [ js: () => import('./modal/culture-and-hostnames-modal.element.js'), }, ]; - -export const manifests: Array = [...entityActions, ...manifestModals]; diff --git a/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts b/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts index 431ec29864..acaf8d3f95 100644 --- a/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts +++ b/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_CULTURE_AND_HOSTNAMES_REPOSITORY_ALIAS = 'Umb.Repository.Document.CultureAndHostnames'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_CULTURE_AND_HOSTNAMES_REPOSITORY_ALIAS, - name: 'Document Culture And Hostnames Repository', - api: () => import('./culture-and-hostnames.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_CULTURE_AND_HOSTNAMES_REPOSITORY_ALIAS, + name: 'Document Culture And Hostnames Repository', + api: () => import('./culture-and-hostnames.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/entity-actions/duplicate/manifests.ts b/src/packages/documents/documents/entity-actions/duplicate/manifests.ts index 2af31405a5..019e1ed39e 100644 --- a/src/packages/documents/documents/entity-actions/duplicate/manifests.ts +++ b/src/packages/documents/documents/entity-actions/duplicate/manifests.ts @@ -2,10 +2,9 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; import { UMB_USER_PERMISSION_DOCUMENT_DUPLICATE } from '../../user-permissions/constants.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as modalManifests } from './modal/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'duplicateTo', diff --git a/src/packages/documents/documents/entity-actions/duplicate/repository/manifests.ts b/src/packages/documents/documents/entity-actions/duplicate/repository/manifests.ts index 153c12f3f2..b392db212a 100644 --- a/src/packages/documents/documents/entity-actions/duplicate/repository/manifests.ts +++ b/src/packages/documents/documents/entity-actions/duplicate/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const duplicateRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS, - name: 'Duplicate Document Repository', - api: () => import('./document-duplicate.repository.js'), -}; - -export const manifests: Array = [duplicateRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS, + name: 'Duplicate Document Repository', + api: () => import('./document-duplicate.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/entity-actions/manifests.ts b/src/packages/documents/documents/entity-actions/manifests.ts index c514daa291..3825245423 100644 --- a/src/packages/documents/documents/entity-actions/manifests.ts +++ b/src/packages/documents/documents/entity-actions/manifests.ts @@ -14,13 +14,12 @@ import { manifests as publicAccessManifests } from './public-access/manifests.js import { manifests as sortChildrenOfManifests } from './sort-children-of/manifests.js'; import { manifests as notificationManifests } from './notifications/manifests.js'; -import type { ManifestEntityAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS, UMB_ENTITY_IS_TRASHED_CONDITION_ALIAS, } from '@umbraco-cms/backoffice/recycle-bin'; -const entityActions: Array = [ +const entityActions: Array = [ { type: 'entityAction', kind: 'delete', @@ -52,6 +51,7 @@ const entityActions: Array = [ meta: { icon: 'icon-globe', label: '#actions_publish', + additionalOptions: true, }, conditions: [ { @@ -74,6 +74,7 @@ const entityActions: Array = [ meta: { icon: 'icon-globe', label: '#actions_unpublish', + additionalOptions: true, }, conditions: [ { @@ -111,7 +112,7 @@ const entityActions: Array = [ */ ]; -export const manifests: Array = [ +export const manifests: Array = [ ...createBlueprintManifests, ...createManifests, ...cultureAndHostnamesManifests, diff --git a/src/packages/documents/documents/entity-actions/move-to/manifests.ts b/src/packages/documents/documents/entity-actions/move-to/manifests.ts index 1ae922f520..422421304c 100644 --- a/src/packages/documents/documents/entity-actions/move-to/manifests.ts +++ b/src/packages/documents/documents/entity-actions/move-to/manifests.ts @@ -4,9 +4,8 @@ import { UMB_USER_PERMISSION_DOCUMENT_MOVE } from '../../user-permissions/consta import { UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'moveTo', @@ -28,6 +27,5 @@ const entityActions: Array = [ }, ], }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts b/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts index 85953e9a1e..3ae210eeae 100644 --- a/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts +++ b/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const moveRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS, - name: 'Move Document Repository', - api: () => import('./document-move.repository.js'), -}; - -export const manifests: Array = [moveRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS, + name: 'Move Document Repository', + api: () => import('./document-move.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/entity-actions/notifications/manifests.ts b/src/packages/documents/documents/entity-actions/notifications/manifests.ts index 109b596631..9cb74c9fcb 100644 --- a/src/packages/documents/documents/entity-actions/notifications/manifests.ts +++ b/src/packages/documents/documents/entity-actions/notifications/manifests.ts @@ -17,6 +17,7 @@ const actionManifests: Array = [ meta: { icon: 'icon-megaphone', label: '#actions_notify', + additionalOptions: true, }, conditions: [ { diff --git a/src/packages/documents/documents/entity-actions/public-access/manifests.ts b/src/packages/documents/documents/entity-actions/public-access/manifests.ts index c348aa8296..7a6cb6bf24 100644 --- a/src/packages/documents/documents/entity-actions/public-access/manifests.ts +++ b/src/packages/documents/documents/entity-actions/public-access/manifests.ts @@ -1,9 +1,8 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; import { UMB_USER_PERMISSION_DOCUMENT_PUBLIC_ACCESS } from '../../user-permissions/index.js'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -15,6 +14,7 @@ const entityActions: Array = [ meta: { icon: 'icon-lock', label: '#actions_protect', + additionalOptions: true, }, conditions: [ { @@ -30,9 +30,6 @@ const entityActions: Array = [ }, ], }, -]; - -const manifestModals: Array = [ { type: 'modal', alias: 'Umb.Modal.PublicAccess', @@ -40,5 +37,3 @@ const manifestModals: Array = [ js: () => import('./modal/public-access-modal.element.js'), }, ]; - -export const manifests: Array = [...entityActions, ...manifestModals]; diff --git a/src/packages/documents/documents/entity-actions/public-access/repository/manifests.ts b/src/packages/documents/documents/entity-actions/public-access/repository/manifests.ts index b23cf61992..dc83f18a78 100644 --- a/src/packages/documents/documents/entity-actions/public-access/repository/manifests.ts +++ b/src/packages/documents/documents/entity-actions/public-access/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_PUBLIC_ACCESS_REPOSITORY_ALIAS = 'Umb.Repository.Document.PublicAccess'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_PUBLIC_ACCESS_REPOSITORY_ALIAS, - name: 'Document Public Access Repository', - api: () => import('./public-access.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_PUBLIC_ACCESS_REPOSITORY_ALIAS, + name: 'Document Public Access Repository', + api: () => import('./public-access.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts b/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts index 9c41a5a17b..41a9ecade2 100644 --- a/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts +++ b/src/packages/documents/documents/entity-actions/sort-children-of/manifests.ts @@ -5,9 +5,8 @@ import { UMB_USER_PERMISSION_DOCUMENT_SORT } from '../../user-permissions/index. import { UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS } from './repository/constants.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...repositoryManifests, { type: 'entityAction', @@ -19,6 +18,7 @@ export const manifests: Array = [ itemRepositoryAlias: UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS, sortChildrenOfRepositoryAlias: UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS, treeRepositoryAlias: UMB_DOCUMENT_TREE_REPOSITORY_ALIAS, + additionalOptions: true, }, conditions: [ { diff --git a/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts b/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts index 50ffe9d4e4..3fc59aab12 100644 --- a/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts +++ b/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS, - name: 'Sort Children Of Document Repository', - api: () => import('./sort-children-of.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS, + name: 'Sort Children Of Document Repository', + api: () => import('./sort-children-of.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/entity-bulk-actions/duplicate-to/manifests.ts b/src/packages/documents/documents/entity-bulk-actions/duplicate-to/manifests.ts index 2a76c43335..8fd82fc08d 100644 --- a/src/packages/documents/documents/entity-bulk-actions/duplicate-to/manifests.ts +++ b/src/packages/documents/documents/entity-bulk-actions/duplicate-to/manifests.ts @@ -8,29 +8,29 @@ import { UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, } from '@umbraco-cms/backoffice/collection'; import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const bulkDuplicateAction: ManifestTypes = { - type: 'entityBulkAction', - kind: 'duplicateTo', - alias: 'Umb.EntityBulkAction.Document.DuplicateTo', - name: 'Duplicate Document Entity Bulk Action', - weight: 30, - forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], - meta: { - bulkDuplicateRepositoryAlias: UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS, - treeAlias: UMB_DOCUMENT_TREE_ALIAS, - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: UMB_DOCUMENT_COLLECTION_ALIAS, - }, - { - alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, - match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkCopy, +export const manifests: Array = [ + { + type: 'entityBulkAction', + kind: 'duplicateTo', + alias: 'Umb.EntityBulkAction.Document.DuplicateTo', + name: 'Duplicate Document Entity Bulk Action', + weight: 30, + forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], + meta: { + bulkDuplicateRepositoryAlias: UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS, + treeAlias: UMB_DOCUMENT_TREE_ALIAS, }, - ], -}; - -export const manifests: Array = [bulkDuplicateAction, ...repositoryManifests]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: UMB_DOCUMENT_COLLECTION_ALIAS, + }, + { + alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, + match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkCopy, + }, + ], + }, + ...repositoryManifests, +]; diff --git a/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/manifests.ts b/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/manifests.ts index ac3e613940..3b013d1651 100644 --- a/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/manifests.ts +++ b/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const bulkDuplicateRepository: ManifestRepository = { - type: 'repository', - alias: UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS, - name: 'Bulk Duplicate Media Repository', - api: () => import('./duplicate-to.repository.js'), -}; - -export const manifests: Array = [bulkDuplicateRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS, + name: 'Bulk Duplicate Media Repository', + api: () => import('./duplicate-to.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/entity-bulk-actions/manifests.ts b/src/packages/documents/documents/entity-bulk-actions/manifests.ts index 4633aeb035..92cd6d9c18 100644 --- a/src/packages/documents/documents/entity-bulk-actions/manifests.ts +++ b/src/packages/documents/documents/entity-bulk-actions/manifests.ts @@ -4,7 +4,7 @@ import { manifests as duplicateToManifests } from './duplicate-to/manifests.js'; import { manifests as moveToManifests } from './move-to/manifests.js'; import { manifests as trashManifests } from './trash/manifests.js'; import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; -import type { ManifestEntityBulkAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestEntityBulkAction } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_COLLECTION_ALIAS_CONDITION, UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, @@ -59,7 +59,7 @@ export const entityBulkActions: Array = [ }, ]; -export const manifests: Array = [ +export const manifests: Array = [ ...entityBulkActions, ...duplicateToManifests, ...moveToManifests, diff --git a/src/packages/documents/documents/entity-bulk-actions/move-to/manifests.ts b/src/packages/documents/documents/entity-bulk-actions/move-to/manifests.ts index 9dfba6f60a..ea65a3c845 100644 --- a/src/packages/documents/documents/entity-bulk-actions/move-to/manifests.ts +++ b/src/packages/documents/documents/entity-bulk-actions/move-to/manifests.ts @@ -9,29 +9,29 @@ import { UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, } from '@umbraco-cms/backoffice/collection'; import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const bulkMoveAction: ManifestTypes = { - type: 'entityBulkAction', - kind: 'moveTo', - alias: 'Umb.EntityBulkAction.Document.MoveTo', - name: 'Move Document Entity Bulk Action', - weight: 20, - forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], - meta: { - bulkMoveRepositoryAlias: UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS, - treeAlias: UMB_DOCUMENT_TREE_ALIAS, - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: UMB_DOCUMENT_COLLECTION_ALIAS, - }, - { - alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, - match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkMove, +export const manifests: Array = [ + { + type: 'entityBulkAction', + kind: 'moveTo', + alias: 'Umb.EntityBulkAction.Document.MoveTo', + name: 'Move Document Entity Bulk Action', + weight: 20, + forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], + meta: { + bulkMoveRepositoryAlias: UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS, + treeAlias: UMB_DOCUMENT_TREE_ALIAS, }, - ], -}; - -export const manifests: Array = [bulkMoveAction, ...repositoryManifests]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: UMB_DOCUMENT_COLLECTION_ALIAS, + }, + { + alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, + match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkMove, + }, + ], + }, + ...repositoryManifests, +]; diff --git a/src/packages/documents/documents/entity-bulk-actions/move-to/repository/manifests.ts b/src/packages/documents/documents/entity-bulk-actions/move-to/repository/manifests.ts index b9e609a144..0817bf1a37 100644 --- a/src/packages/documents/documents/entity-bulk-actions/move-to/repository/manifests.ts +++ b/src/packages/documents/documents/entity-bulk-actions/move-to/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const bulkMoveRepository: ManifestRepository = { - type: 'repository', - alias: UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS, - name: 'Bulk Move Document Repository', - api: () => import('./move-to.repository.js'), -}; - -export const manifests: Array = [bulkMoveRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS, + name: 'Bulk Move Document Repository', + api: () => import('./move-to.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/entity-bulk-actions/trash/manifests.ts b/src/packages/documents/documents/entity-bulk-actions/trash/manifests.ts index 970f756d70..4177d0a04b 100644 --- a/src/packages/documents/documents/entity-bulk-actions/trash/manifests.ts +++ b/src/packages/documents/documents/entity-bulk-actions/trash/manifests.ts @@ -6,29 +6,29 @@ import { UMB_COLLECTION_ALIAS_CONDITION, UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; -const bulkTrashAction: ManifestTypes = { - type: 'entityBulkAction', - kind: 'trash', - alias: 'Umb.EntityBulkAction.Document.Trash', - name: 'Trash Document Entity Bulk Action', - weight: 10, - forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], - meta: { - bulkTrashRepositoryAlias: UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS, - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: UMB_DOCUMENT_COLLECTION_ALIAS, - }, - { - alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, - match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkDelete, +export const manifests: Array = [ + { + type: 'entityBulkAction', + kind: 'trash', + alias: 'Umb.EntityBulkAction.Document.Trash', + name: 'Trash Document Entity Bulk Action', + weight: 10, + forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], + meta: { + bulkTrashRepositoryAlias: UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS, }, - ], -}; - -export const manifests: Array = [bulkTrashAction, ...repositoryManifests]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: UMB_DOCUMENT_COLLECTION_ALIAS, + }, + { + alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, + match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkDelete, + }, + ], + }, + ...repositoryManifests, +]; diff --git a/src/packages/documents/documents/entity-bulk-actions/trash/repository/manifests.ts b/src/packages/documents/documents/entity-bulk-actions/trash/repository/manifests.ts index 50639ff844..c8ce929bfe 100644 --- a/src/packages/documents/documents/entity-bulk-actions/trash/repository/manifests.ts +++ b/src/packages/documents/documents/entity-bulk-actions/trash/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const bulkTrashRepository: ManifestRepository = { - type: 'repository', - alias: UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS, - name: 'Bulk Trash Document Repository', - api: () => import('./trash.repository.js'), -}; - -export const manifests: Array = [bulkTrashRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS, + name: 'Bulk Trash Document Repository', + api: () => import('./trash.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/manifests.ts b/src/packages/documents/documents/manifests.ts index adf83a87fe..8b4d51bb6e 100644 --- a/src/packages/documents/documents/manifests.ts +++ b/src/packages/documents/documents/manifests.ts @@ -15,9 +15,9 @@ import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as userPermissionManifests } from './user-permissions/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...collectionManifests, ...entityActionManifests, ...entityBulkActionManifests, diff --git a/src/packages/documents/documents/menu/manifests.ts b/src/packages/documents/documents/menu/manifests.ts index 72c0cc2818..1d1145d447 100644 --- a/src/packages/documents/documents/menu/manifests.ts +++ b/src/packages/documents/documents/menu/manifests.ts @@ -1,9 +1,8 @@ import { UMB_DOCUMENT_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_CONTENT_MENU_ALIAS = 'Umb.Menu.Content'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menu', alias: UMB_CONTENT_MENU_ALIAS, diff --git a/src/packages/documents/documents/modals/manifests.ts b/src/packages/documents/documents/modals/manifests.ts index a63325aff9..33ad8b1464 100644 --- a/src/packages/documents/documents/modals/manifests.ts +++ b/src/packages/documents/documents/modals/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_SAVE_MODAL_ALIAS = 'Umb.Modal.DocumentSave'; export const UMB_DOCUMENT_PUBLISH_MODAL_ALIAS = 'Umb.Modal.DocumentPublish'; @@ -39,4 +39,4 @@ const modals: Array = [ }, ]; -export const manifests: Array = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/packages/documents/documents/picker/manifests.ts b/src/packages/documents/documents/picker/manifests.ts index f718ec4796..015d9ccf00 100644 --- a/src/packages/documents/documents/picker/manifests.ts +++ b/src/packages/documents/documents/picker/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'pickerSearchResultItem', kind: 'default', diff --git a/src/packages/documents/documents/property-editors/document-picker/manifests.ts b/src/packages/documents/documents/property-editors/document-picker/manifests.ts index 93493b2efe..725909e229 100644 --- a/src/packages/documents/documents/property-editors/document-picker/manifests.ts +++ b/src/packages/documents/documents/property-editors/document-picker/manifests.ts @@ -1,7 +1,6 @@ import { manifest as schemaManifest } from './Umbraco.ContentPicker.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.DocumentPicker', diff --git a/src/packages/documents/documents/property-editors/manifests.ts b/src/packages/documents/documents/property-editors/manifests.ts index a2131ca272..f9a6c2cb3e 100644 --- a/src/packages/documents/documents/property-editors/manifests.ts +++ b/src/packages/documents/documents/property-editors/manifests.ts @@ -1,4 +1,3 @@ import { manifests as documentPickerManifests } from './document-picker/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...documentPickerManifests]; +export const manifests: Array = [...documentPickerManifests]; diff --git a/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts b/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts index 7b38600b9f..e54bd0d034 100644 --- a/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts +++ b/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts @@ -7,13 +7,12 @@ import { UMB_USER_PERMISSION_DOCUMENT_DELETE, UMB_USER_PERMISSION_DOCUMENT_MOVE, } from '../../user-permissions/constants.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS, UMB_ENTITY_IS_TRASHED_CONDITION_ALIAS, } from '@umbraco-cms/backoffice/recycle-bin'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'trash', diff --git a/src/packages/documents/documents/recycle-bin/manifests.ts b/src/packages/documents/documents/recycle-bin/manifests.ts index af9255f13c..cc3ebf859f 100644 --- a/src/packages/documents/documents/recycle-bin/manifests.ts +++ b/src/packages/documents/documents/recycle-bin/manifests.ts @@ -2,9 +2,8 @@ import { manifests as entityActionManifests } from './entity-action/manifests.js import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'condition', name: 'Allow Document Recycle Bin Current User Condition', diff --git a/src/packages/documents/documents/recycle-bin/menu-item/manifests.ts b/src/packages/documents/documents/recycle-bin/menu-item/manifests.ts index fb27a67276..fa033b1b5f 100644 --- a/src/packages/documents/documents/recycle-bin/menu-item/manifests.ts +++ b/src/packages/documents/documents/recycle-bin/menu-item/manifests.ts @@ -1,24 +1,23 @@ import { UMB_CONTENT_MENU_ALIAS } from '../../menu/manifests.js'; import { UMB_DOCUMENT_RECYCLE_BIN_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestMenuItemTreeKind, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const menuItem: ManifestMenuItemTreeKind = { - type: 'menuItem', - kind: 'tree', - alias: 'Umb.MenuItem.Document.RecycleBin', - name: 'Document Recycle Bin Menu Item', - weight: 100, - meta: { - treeAlias: UMB_DOCUMENT_RECYCLE_BIN_TREE_ALIAS, - label: 'Recycle Bin', - icon: 'icon-trash', - menus: [UMB_CONTENT_MENU_ALIAS], - }, - conditions: [ - { - alias: 'Umb.Condition.CurrentUser.AllowDocumentRecycleBin', +export const manifests: Array = [ + { + type: 'menuItem', + kind: 'tree', + alias: 'Umb.MenuItem.Document.RecycleBin', + name: 'Document Recycle Bin Menu Item', + weight: 100, + meta: { + treeAlias: UMB_DOCUMENT_RECYCLE_BIN_TREE_ALIAS, + label: 'Recycle Bin', + icon: 'icon-trash', + menus: [UMB_CONTENT_MENU_ALIAS], }, - ], -}; - -export const manifests: Array = [menuItem]; + conditions: [ + { + alias: 'Umb.Condition.CurrentUser.AllowDocumentRecycleBin', + }, + ], + }, +]; diff --git a/src/packages/documents/documents/recycle-bin/repository/manifests.ts b/src/packages/documents/documents/recycle-bin/repository/manifests.ts index 22cb4e70e9..28e0dd1802 100644 --- a/src/packages/documents/documents/recycle-bin/repository/manifests.ts +++ b/src/packages/documents/documents/recycle-bin/repository/manifests.ts @@ -1,11 +1,9 @@ import { UMB_DOCUMENT_RECYCLE_BIN_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const queryRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_RECYCLE_BIN_REPOSITORY_ALIAS, - name: 'Document Recycle Bin Repository', - api: () => import('./document-recycle-bin.repository.js'), -}; - -export const manifests: Array = [queryRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_RECYCLE_BIN_REPOSITORY_ALIAS, + name: 'Document Recycle Bin Repository', + api: () => import('./document-recycle-bin.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/recycle-bin/tree/manifests.ts b/src/packages/documents/documents/recycle-bin/tree/manifests.ts index 0398bcf2e2..aee3260f7b 100644 --- a/src/packages/documents/documents/recycle-bin/tree/manifests.ts +++ b/src/packages/documents/documents/recycle-bin/tree/manifests.ts @@ -5,50 +5,35 @@ import { UMB_DOCUMENT_RECYCLE_BIN_TREE_STORE_ALIAS, } from './constants.js'; import { manifests as reloadTreeItemChildrenManifests } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_RECYCLE_BIN_TREE_REPOSITORY_ALIAS, - name: 'Document Recycle Bin Tree Repository', - api: () => import('./document-recycle-bin-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_DOCUMENT_RECYCLE_BIN_TREE_STORE_ALIAS, - name: 'Document Recycle Bin Tree Store', - api: () => import('./document-recycle-bin-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_DOCUMENT_RECYCLE_BIN_TREE_ALIAS, - name: 'Document Recycle Bin Tree', - meta: { - repositoryAlias: UMB_DOCUMENT_RECYCLE_BIN_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_RECYCLE_BIN_TREE_REPOSITORY_ALIAS, + name: 'Document Recycle Bin Tree Repository', + api: () => import('./document-recycle-bin-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_DOCUMENT_RECYCLE_BIN_TREE_STORE_ALIAS, + name: 'Document Recycle Bin Tree Store', + api: () => import('./document-recycle-bin-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_DOCUMENT_RECYCLE_BIN_TREE_ALIAS, + name: 'Document Recycle Bin Tree', + meta: { + repositoryAlias: UMB_DOCUMENT_RECYCLE_BIN_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.Document.RecycleBin', + name: 'Document Recycle Bin Tree Item', + forEntityTypes: [UMB_DOCUMENT_RECYCLE_BIN_ROOT_ENTITY_TYPE], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.Document.RecycleBin', - name: 'Document Recycle Bin Tree Item', - forEntityTypes: [UMB_DOCUMENT_RECYCLE_BIN_ROOT_ENTITY_TYPE], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...reloadTreeItemChildrenManifests, ]; diff --git a/src/packages/documents/documents/recycle-bin/tree/reload-tree-item-children/manifests.ts b/src/packages/documents/documents/recycle-bin/tree/reload-tree-item-children/manifests.ts index 35463faee4..9cb4af0a62 100644 --- a/src/packages/documents/documents/recycle-bin/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/documents/documents/recycle-bin/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DOCUMENT_RECYCLE_BIN_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/documents/documents/reference/manifests.ts b/src/packages/documents/documents/reference/manifests.ts index a8e101b348..4ac6fbdcb2 100644 --- a/src/packages/documents/documents/reference/manifests.ts +++ b/src/packages/documents/documents/reference/manifests.ts @@ -1,4 +1,3 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...repositoryManifests]; +export const manifests: Array = [...repositoryManifests]; diff --git a/src/packages/documents/documents/reference/repository/manifests.ts b/src/packages/documents/documents/reference/repository/manifests.ts index 94820f5042..85e3ca12f6 100644 --- a/src/packages/documents/documents/reference/repository/manifests.ts +++ b/src/packages/documents/documents/reference/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_REFERENCE_REPOSITORY_ALIAS = 'Umb.Repository.Document.Reference'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_REFERENCE_REPOSITORY_ALIAS, - name: 'Document Reference Repository', - api: () => import('./document-reference.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_REFERENCE_REPOSITORY_ALIAS, + name: 'Document Reference Repository', + api: () => import('./document-reference.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts b/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts index ea03ccd083..46708951d5 100644 --- a/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts +++ b/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts @@ -92,6 +92,7 @@ export class UmbDocumentServerDataSource implements UmbDetailDataSource { return { + editorAlias: value.editorAlias, alias: value.alias, culture: value.culture || null, segment: value.segment || null, diff --git a/src/packages/documents/documents/repository/detail/manifests.ts b/src/packages/documents/documents/repository/detail/manifests.ts index 4db9f18795..b359ef480c 100644 --- a/src/packages/documents/documents/repository/detail/manifests.ts +++ b/src/packages/documents/documents/repository/detail/manifests.ts @@ -1,21 +1,17 @@ -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Document.Detail'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, - name: 'Document Detail Repository', - api: () => import('./document-detail.repository.js'), -}; - export const UMB_DOCUMENT_DETAIL_STORE_ALIAS = 'Umb.Store.Document.Detail'; -const store: ManifestStore = { - type: 'store', - alias: UMB_DOCUMENT_DETAIL_STORE_ALIAS, - name: 'Document Detail Store', - api: () => import('./document-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, + name: 'Document Detail Repository', + api: () => import('./document-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_DOCUMENT_DETAIL_STORE_ALIAS, + name: 'Document Detail Store', + api: () => import('./document-detail.store.js'), + }, +]; diff --git a/src/packages/documents/documents/repository/item/manifests.ts b/src/packages/documents/documents/repository/item/manifests.ts index d24c1a8e2a..2eeda5d820 100644 --- a/src/packages/documents/documents/repository/item/manifests.ts +++ b/src/packages/documents/documents/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.DocumentItem'; export const UMB_DOCUMENT_STORE_ALIAS = 'Umb.Store.DocumentItem'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS, - name: 'Document Item Repository', - api: () => import('./document-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_DOCUMENT_STORE_ALIAS, - name: 'Document Item Store', - api: () => import('./document-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS, + name: 'Document Item Repository', + api: () => import('./document-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_DOCUMENT_STORE_ALIAS, + name: 'Document Item Store', + api: () => import('./document-item.store.js'), + }, +]; diff --git a/src/packages/documents/documents/repository/manifests.ts b/src/packages/documents/documents/repository/manifests.ts index 65c26631b6..71c01115e5 100644 --- a/src/packages/documents/documents/repository/manifests.ts +++ b/src/packages/documents/documents/repository/manifests.ts @@ -1,6 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as publishingManifests } from './publishing/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests, ...publishingManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests, ...publishingManifests]; diff --git a/src/packages/documents/documents/repository/publishing/manifests.ts b/src/packages/documents/documents/repository/publishing/manifests.ts index 91d22344d2..37b129ba74 100644 --- a/src/packages/documents/documents/repository/publishing/manifests.ts +++ b/src/packages/documents/documents/repository/publishing/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS = 'Umb.Repository.Document.Publishing'; -const publishingRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS, - name: 'Document Publishing Repository', - api: () => import('./document-publishing.repository.js'), -}; - -export const manifests: Array = [publishingRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS, + name: 'Document Publishing Repository', + api: () => import('./document-publishing.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/repository/validation/manifests.ts b/src/packages/documents/documents/repository/validation/manifests.ts index 31ba9ba048..7c943102fb 100644 --- a/src/packages/documents/documents/repository/validation/manifests.ts +++ b/src/packages/documents/documents/repository/validation/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_VALIDATION_REPOSITORY_ALIAS = 'Umb.Repository.Document.Validation'; -const validationRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_VALIDATION_REPOSITORY_ALIAS, - name: 'Document Validation Repository', - api: () => import('./document-validation.repository.js'), -}; - -export const manifests: Array = [validationRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_VALIDATION_REPOSITORY_ALIAS, + name: 'Document Validation Repository', + api: () => import('./document-validation.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/rollback/repository/manifests.ts b/src/packages/documents/documents/rollback/repository/manifests.ts index a5c962d56c..756fe3619f 100644 --- a/src/packages/documents/documents/rollback/repository/manifests.ts +++ b/src/packages/documents/documents/rollback/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_ROLLBACK_REPOSITORY_ALIAS = 'Umb.Repository.Rollback'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_ROLLBACK_REPOSITORY_ALIAS, - name: 'Rollback Repository', - api: () => import('./rollback.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_ROLLBACK_REPOSITORY_ALIAS, + name: 'Rollback Repository', + api: () => import('./rollback.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/search/manifests.ts b/src/packages/documents/documents/search/manifests.ts index f9d8b8dce2..b8229f3f59 100644 --- a/src/packages/documents/documents/search/manifests.ts +++ b/src/packages/documents/documents/search/manifests.ts @@ -1,8 +1,7 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; import { UMB_DOCUMENT_SEARCH_PROVIDER_ALIAS } from './constants.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { name: 'Document Search Provider', alias: UMB_DOCUMENT_SEARCH_PROVIDER_ALIAS, diff --git a/src/packages/documents/documents/tree/manifests.ts b/src/packages/documents/documents/tree/manifests.ts index cd89a8e8bb..7f78271c7b 100644 --- a/src/packages/documents/documents/tree/manifests.ts +++ b/src/packages/documents/documents/tree/manifests.ts @@ -1,64 +1,47 @@ import { UMB_DOCUMENT_ENTITY_TYPE, UMB_DOCUMENT_ROOT_ENTITY_TYPE } from '../entity.js'; import { manifests as reloadTreeItemChildrenManifests } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Document.Tree'; export const UMB_DOCUMENT_TREE_STORE_ALIAS = 'Umb.Store.Document.Tree'; export const UMB_DOCUMENT_TREE_ALIAS = 'Umb.Tree.Document'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_TREE_REPOSITORY_ALIAS, - name: 'Document Tree Repository', - api: () => import('./document-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_DOCUMENT_TREE_STORE_ALIAS, - name: 'Document Tree Store', - api: () => import('./document-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - alias: UMB_DOCUMENT_TREE_ALIAS, - name: 'Document Tree', - api: () => import('./document-tree.context.js'), - element: () => import('./document-tree.element.js'), - meta: { - repositoryAlias: UMB_DOCUMENT_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_TREE_REPOSITORY_ALIAS, + name: 'Document Tree Repository', + api: () => import('./document-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_DOCUMENT_TREE_STORE_ALIAS, + name: 'Document Tree Store', + api: () => import('./document-tree.store.js'), + }, + { + type: 'tree', + alias: UMB_DOCUMENT_TREE_ALIAS, + name: 'Document Tree', + api: () => import('./document-tree.context.js'), + element: () => import('./document-tree.element.js'), + meta: { + repositoryAlias: UMB_DOCUMENT_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + alias: 'Umb.TreeItem.Document', + name: 'Document Tree Item', + element: () => import('./tree-item/document-tree-item.element.js'), + api: () => import('./tree-item/document-tree-item.context.js'), + forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.Document.Root', + name: 'Document Tree Root', + forEntityTypes: [UMB_DOCUMENT_ROOT_ENTITY_TYPE], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - alias: 'Umb.TreeItem.Document', - name: 'Document Tree Item', - element: () => import('./tree-item/document-tree-item.element.js'), - api: () => import('./tree-item/document-tree-item.context.js'), - forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], -}; - -const rootTreeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.Document.Root', - name: 'Document Tree Root', - forEntityTypes: [UMB_DOCUMENT_ROOT_ENTITY_TYPE], -}; - -export const manifests: Array = [ ...reloadTreeItemChildrenManifests, - tree, - treeItem, - rootTreeItem, - treeRepository, - treeStore, ]; diff --git a/src/packages/documents/documents/tree/reload-tree-item-children/manifests.ts b/src/packages/documents/documents/tree/reload-tree-item-children/manifests.ts index e67a033cfe..7aa6fe0b81 100644 --- a/src/packages/documents/documents/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/documents/documents/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_DOCUMENT_ENTITY_TYPE, UMB_DOCUMENT_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/documents/documents/types.ts b/src/packages/documents/documents/types.ts index 2d2d184e6e..d0a52f2798 100644 --- a/src/packages/documents/documents/types.ts +++ b/src/packages/documents/documents/types.ts @@ -3,7 +3,6 @@ import type { UmbVariantModel, UmbVariantOptionModel, UmbVariantPublishModel } f import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import { DocumentVariantStateModel as UmbDocumentVariantState } from '@umbraco-cms/backoffice/external/backend-api'; export { UmbDocumentVariantState }; -export type { UmbDocumentUserPermissionConditionConfig } from './user-permissions/condition/document-user-permission.condition.js'; export interface UmbDocumentDetailModel { documentType: { diff --git a/src/packages/documents/documents/user-permissions/condition/document-user-permission.condition.ts b/src/packages/documents/documents/user-permissions/conditions/document-user-permission.condition.ts similarity index 84% rename from src/packages/documents/documents/user-permissions/condition/document-user-permission.condition.ts rename to src/packages/documents/documents/user-permissions/conditions/document-user-permission.condition.ts index d04b0e646e..64d5836673 100644 --- a/src/packages/documents/documents/user-permissions/condition/document-user-permission.condition.ts +++ b/src/packages/documents/documents/user-permissions/conditions/document-user-permission.condition.ts @@ -1,13 +1,10 @@ import { isDocumentUserPermission } from '../utils.js'; +import type { UmbDocumentUserPermissionConditionConfig } from './types.js'; import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user'; import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; import { observeMultiple } from '@umbraco-cms/backoffice/observable-api'; import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; -import type { - UmbConditionConfigBase, - UmbConditionControllerArguments, - UmbExtensionCondition, -} from '@umbraco-cms/backoffice/extension-api'; +import type { UmbConditionControllerArguments, UmbExtensionCondition } from '@umbraco-cms/backoffice/extension-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { DocumentPermissionPresentationModel } from '@umbraco-cms/backoffice/external/backend-api'; @@ -109,21 +106,4 @@ export class UmbDocumentUserPermissionCondition } } -export type UmbDocumentUserPermissionConditionConfig = - UmbConditionConfigBase<'Umb.Condition.UserPermission.Document'> & { - /** - * The user must have all of the permissions in this array for the condition to be met. - * @example - * ["Umb.Document.Save", "Umb.Document.Publish"] - */ - allOf?: Array; - - /** - * The user must have at least one of the permissions in this array for the condition to be met. - * @example - * ["Umb.Document.Save", "Umb.Document.Publish"] - */ - oneOf?: Array; - }; - export { UmbDocumentUserPermissionCondition as api }; diff --git a/src/packages/documents/documents/user-permissions/condition/manifests.ts b/src/packages/documents/documents/user-permissions/conditions/manifests.ts similarity index 59% rename from src/packages/documents/documents/user-permissions/condition/manifests.ts rename to src/packages/documents/documents/user-permissions/conditions/manifests.ts index 2c76a747cc..c8dd02f434 100644 --- a/src/packages/documents/documents/user-permissions/condition/manifests.ts +++ b/src/packages/documents/documents/user-permissions/conditions/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'condition', name: 'Document User Permission Condition', diff --git a/src/packages/documents/documents/user-permissions/conditions/types.ts b/src/packages/documents/documents/user-permissions/conditions/types.ts new file mode 100644 index 0000000000..1eb4412fe4 --- /dev/null +++ b/src/packages/documents/documents/user-permissions/conditions/types.ts @@ -0,0 +1,24 @@ +import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; + +export type UmbDocumentUserPermissionConditionConfig = + UmbConditionConfigBase<'Umb.Condition.UserPermission.Document'> & { + /** + * The user must have all of the permissions in this array for the condition to be met. + * @example + * ["Umb.Document.Save", "Umb.Document.Publish"] + */ + allOf?: Array; + + /** + * The user must have at least one of the permissions in this array for the condition to be met. + * @example + * ["Umb.Document.Save", "Umb.Document.Publish"] + */ + oneOf?: Array; + }; + +declare global { + interface UmbExtensionConditionMap { + UmbDocumentUserPermissionConditionConfig: UmbDocumentUserPermissionConditionConfig; + } +} diff --git a/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts b/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts index dc605b47f8..e7d27e5f1b 100644 --- a/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts +++ b/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts @@ -4,12 +4,13 @@ import { UMB_DOCUMENT_PICKER_MODAL } from '../../modals/index.js'; import { css, customElement, html, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; -import { UMB_ENTITY_USER_PERMISSION_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { UmbDeselectedEvent } from '@umbraco-cms/backoffice/event'; import { UmbChangeEvent, UmbSelectedEvent } from '@umbraco-cms/backoffice/event'; import type { ManifestEntityUserPermission } from '@umbraco-cms/backoffice/extension-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; +import { UMB_ENTITY_USER_PERMISSION_MODAL } from '@umbraco-cms/backoffice/user-permission'; @customElement('umb-input-document-granular-user-permission') export class UmbInputDocumentGranularUserPermissionElement extends UUIFormControlMixin(UmbLitElement, '') { diff --git a/src/packages/documents/documents/user-permissions/manifests.ts b/src/packages/documents/documents/user-permissions/manifests.ts index 9ea0a40611..66c22cffa2 100644 --- a/src/packages/documents/documents/user-permissions/manifests.ts +++ b/src/packages/documents/documents/user-permissions/manifests.ts @@ -17,11 +17,10 @@ import { UMB_USER_PERMISSION_DOCUMENT_ROLLBACK, } from './constants.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import { manifests as conditionManifests } from './condition/manifests.js'; +import { manifests as conditionManifests } from './conditions/manifests.js'; import type { ManifestGranularUserPermission, ManifestEntityUserPermission, - ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const permissions: Array = [ @@ -213,7 +212,7 @@ export const granularPermissions: Array = [ }, ]; -export const manifests: Array = [ +export const manifests: Array = [ ...repositoryManifests, ...permissions, ...granularPermissions, diff --git a/src/packages/documents/documents/user-permissions/repository/manifests.ts b/src/packages/documents/documents/user-permissions/repository/manifests.ts index 272741bcb5..e7096d59c3 100644 --- a/src/packages/documents/documents/user-permissions/repository/manifests.ts +++ b/src/packages/documents/documents/user-permissions/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_DOCUMENT_PERMISSION_REPOSITORY_ALIAS = 'Umb.Repository.Document.Permission'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_PERMISSION_REPOSITORY_ALIAS, - name: 'Document Permission Repository', - api: () => import('./document-permission.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DOCUMENT_PERMISSION_REPOSITORY_ALIAS, + name: 'Document Permission Repository', + api: () => import('./document-permission.repository.js'), + }, +]; diff --git a/src/packages/documents/documents/user-permissions/types.ts b/src/packages/documents/documents/user-permissions/types.ts index 14feb94a9e..0028a6bf35 100644 --- a/src/packages/documents/documents/user-permissions/types.ts +++ b/src/packages/documents/documents/user-permissions/types.ts @@ -1,5 +1,5 @@ import type { UmbUserPermissionModel } from '@umbraco-cms/backoffice/user-permission'; - +export type * from './conditions/types.js'; export interface UmbDocumentUserPermissionModel extends UmbUserPermissionModel { // TODO: this should be unique instead of an id, but we currently have now way to map a mixed server response. document: { id: string }; diff --git a/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts b/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts index 085065f0cb..ff4d773188 100644 --- a/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts +++ b/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts @@ -1,4 +1,4 @@ -import { UmbDocumentUserPermissionCondition } from '../../user-permissions/condition/document-user-permission.condition.js'; +import { UmbDocumentUserPermissionCondition } from '../../user-permissions/conditions/document-user-permission.condition.js'; import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../document-workspace.context-token.js'; import { UMB_USER_PERMISSION_DOCUMENT_UPDATE } from '../../user-permissions/index.js'; import { UmbWorkspaceActionBase } from '@umbraco-cms/backoffice/workspace'; diff --git a/src/packages/documents/documents/workspace/actions/save-and-publish.action.ts b/src/packages/documents/documents/workspace/actions/save-and-publish.action.ts index ee8f35ed94..a040d57fbc 100644 --- a/src/packages/documents/documents/workspace/actions/save-and-publish.action.ts +++ b/src/packages/documents/documents/workspace/actions/save-and-publish.action.ts @@ -3,7 +3,7 @@ import { UMB_USER_PERMISSION_DOCUMENT_PUBLISH, UMB_USER_PERMISSION_DOCUMENT_UPDATE, } from '../../user-permissions/constants.js'; -import { UmbDocumentUserPermissionCondition } from '../../user-permissions/condition/document-user-permission.condition.js'; +import { UmbDocumentUserPermissionCondition } from '../../user-permissions/conditions/document-user-permission.condition.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbWorkspaceActionBase } from '@umbraco-cms/backoffice/workspace'; diff --git a/src/packages/documents/documents/workspace/actions/save.action.ts b/src/packages/documents/documents/workspace/actions/save.action.ts index 8b9d866f0a..f848baf0b7 100644 --- a/src/packages/documents/documents/workspace/actions/save.action.ts +++ b/src/packages/documents/documents/workspace/actions/save.action.ts @@ -2,7 +2,7 @@ import { UMB_USER_PERMISSION_DOCUMENT_CREATE, UMB_USER_PERMISSION_DOCUMENT_UPDATE, } from '../../user-permissions/constants.js'; -import { UmbDocumentUserPermissionCondition } from '../../user-permissions/condition/document-user-permission.condition.js'; +import { UmbDocumentUserPermissionCondition } from '../../user-permissions/conditions/document-user-permission.condition.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; diff --git a/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/packages/documents/documents/workspace/document-workspace.context.ts index 128c0e7dec..59fdf9f187 100644 --- a/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -415,6 +415,7 @@ export class UmbDocumentWorkspaceContext } async setPropertyValue(alias: string, value: ValueType, variantId?: UmbVariantId) { variantId ??= UmbVariantId.CreateInvariant(); + //const property = await this.structure.getPropertyStructureByAlias(alias); const entry = { ...variantId.toObject(), alias, value } as UmbDocumentValueModel; const currentData = this.getData(); diff --git a/src/packages/documents/documents/workspace/manifests.ts b/src/packages/documents/documents/workspace/manifests.ts index 32d04f0e06..de091d78af 100644 --- a/src/packages/documents/documents/workspace/manifests.ts +++ b/src/packages/documents/documents/workspace/manifests.ts @@ -6,27 +6,19 @@ import { import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; import { UMB_DOCUMENT_WORKSPACE_ALIAS } from './constants.js'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceActionMenuItem, - ManifestWorkspaceView, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; import { UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION } from '@umbraco-cms/backoffice/content'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: UMB_DOCUMENT_WORKSPACE_ALIAS, - name: 'Document Workspace', - api: () => import('./document-workspace.context.js'), - meta: { - entityType: UMB_DOCUMENT_ENTITY_TYPE, +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_DOCUMENT_WORKSPACE_ALIAS, + name: 'Document Workspace', + api: () => import('./document-workspace.context.js'), + meta: { + entityType: UMB_DOCUMENT_ENTITY_TYPE, + }, }, -}; - -const workspaceViews: Array = [ { type: 'workspaceView', kind: 'collection', @@ -86,9 +78,6 @@ const workspaceViews: Array = [ }, ], }, -]; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -153,9 +142,6 @@ const workspaceActions: Array = [ }, ], }, -]; - -const workspaceActionMenuItems: Array = [ { type: 'workspaceActionMenuItem', kind: 'default', @@ -223,10 +209,3 @@ const workspaceActionMenuItems: Array = [ ], }, ]; - -export const manifests: Array = [ - workspace, - ...workspaceViews, - ...workspaceActions, - ...workspaceActionMenuItems, -]; diff --git a/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts b/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts index c545305b6b..889c24988a 100644 --- a/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts +++ b/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts @@ -2,7 +2,7 @@ import type { UmbDocumentAuditLogModel } from '../../../audit-log/types.js'; import { UmbDocumentAuditLogRepository } from '../../../audit-log/index.js'; import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../document-workspace.context-token.js'; import { TimeOptions, getDocumentHistoryTagStyleAndText } from './utils.js'; -import { css, html, customElement, state, nothing, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state, nothing, repeat } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbPaginationManager } from '@umbraco-cms/backoffice/utils'; @@ -105,13 +105,15 @@ export class UmbDocumentWorkspaceViewInfoHistoryElement extends UmbLitElement { (item) => { const { text, style } = getDocumentHistoryTagStyleAndText(item.logType); const user = this.#userMap.get(item.user.unique); - const userName = user?.name ?? 'Unknown'; - const avatarUrl = user && Array.isArray(user.avatarUrls) ? user.avatarUrls[1] : undefined; return html` - + diff --git a/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts b/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts index b1324e5ac9..28ad1b37ae 100644 --- a/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts +++ b/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-reference.element.ts @@ -3,7 +3,7 @@ import { css, html, customElement, state, nothing, repeat, property } from '@umb import type { UUIPaginationEvent } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { isDefaultReference, diff --git a/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts b/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts index 13344c29a1..b5e16de658 100644 --- a/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts +++ b/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts @@ -5,7 +5,8 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/document'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UMB_TEMPLATE_PICKER_MODAL, UmbTemplateItemRepository } from '@umbraco-cms/backoffice/template'; import type { DocumentUrlInfoModel } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbDocumentTypeDetailModel } from '@umbraco-cms/backoffice/document-type'; diff --git a/src/packages/documents/manifests.ts b/src/packages/documents/manifests.ts index e9d9a3d2ea..c74f94a87d 100644 --- a/src/packages/documents/manifests.ts +++ b/src/packages/documents/manifests.ts @@ -3,9 +3,9 @@ import { manifests as documentBlueprintManifests } from './document-blueprints/m import { manifests as documentManifests } from './documents/manifests.js'; import { manifests as documentTypeManifests } from './document-types/manifests.js'; import { manifests as sectionManifests } from './section/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...dashboardManifests, ...documentBlueprintManifests, ...documentManifests, diff --git a/src/packages/documents/section/manifests.ts b/src/packages/documents/section/manifests.ts index 32cac0418c..b85ba02924 100644 --- a/src/packages/documents/section/manifests.ts +++ b/src/packages/documents/section/manifests.ts @@ -1,45 +1,39 @@ import { UMB_CONTENT_SECTION_ALIAS } from './constants.js'; import { UMB_DOCUMENT_ROOT_ENTITY_TYPE, UMB_CONTENT_MENU_ALIAS } from '@umbraco-cms/backoffice/document'; -import type { - ManifestSection, - ManifestSectionSidebarAppMenuWithEntityActionsKind, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const section: ManifestSection = { - type: 'section', - alias: UMB_CONTENT_SECTION_ALIAS, - name: 'Content Section', - weight: 1000, - meta: { - label: '#sections_content', - pathname: 'content', - }, - conditions: [ - { - alias: 'Umb.Condition.SectionUserPermission', - match: UMB_CONTENT_SECTION_ALIAS, +export const manifests: Array = [ + { + type: 'section', + alias: UMB_CONTENT_SECTION_ALIAS, + name: 'Content Section', + weight: 1000, + meta: { + label: '#sections_content', + pathname: 'content', }, - ], -}; - -const menuSectionSidebarApp: ManifestSectionSidebarAppMenuWithEntityActionsKind = { - type: 'sectionSidebarApp', - kind: 'menuWithEntityActions', - alias: 'Umb.SidebarMenu.Content', - name: 'Content Sidebar Menu', - weight: 100, - meta: { - label: '#sections_content', - menu: UMB_CONTENT_MENU_ALIAS, - entityType: UMB_DOCUMENT_ROOT_ENTITY_TYPE, + conditions: [ + { + alias: 'Umb.Condition.SectionUserPermission', + match: UMB_CONTENT_SECTION_ALIAS, + }, + ], }, - conditions: [ - { - alias: 'Umb.Condition.SectionAlias', - match: UMB_CONTENT_SECTION_ALIAS, + { + type: 'sectionSidebarApp', + kind: 'menuWithEntityActions', + alias: 'Umb.SidebarMenu.Content', + name: 'Content Sidebar Menu', + weight: 100, + meta: { + label: '#sections_content', + menu: UMB_CONTENT_MENU_ALIAS, + entityType: UMB_DOCUMENT_ROOT_ENTITY_TYPE, }, - ], -}; - -export const manifests: Array = [section, menuSectionSidebarApp]; + conditions: [ + { + alias: 'Umb.Condition.SectionAlias', + match: UMB_CONTENT_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/packages/embedded-media/index.ts b/src/packages/embedded-media/index.ts new file mode 100644 index 0000000000..e130217e61 --- /dev/null +++ b/src/packages/embedded-media/index.ts @@ -0,0 +1,2 @@ +export * from './modal/index.js'; +export * from './repository/index.js'; diff --git a/src/packages/embedded-media/manifests.ts b/src/packages/embedded-media/manifests.ts new file mode 100644 index 0000000000..6b7cf27f51 --- /dev/null +++ b/src/packages/embedded-media/manifests.ts @@ -0,0 +1,4 @@ +import { manifests as modalManifests } from './modal/manifests.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; + +export const manifests: Array = [...modalManifests, ...repositoryManifests]; diff --git a/src/packages/core/modal/common/embedded-media/embedded-media-modal.element.ts b/src/packages/embedded-media/modal/embedded-media-modal.element.ts similarity index 97% rename from src/packages/core/modal/common/embedded-media/embedded-media-modal.element.ts rename to src/packages/embedded-media/modal/embedded-media-modal.element.ts index 9125e64aaf..fcf5ff01a6 100644 --- a/src/packages/core/modal/common/embedded-media/embedded-media-modal.element.ts +++ b/src/packages/embedded-media/modal/embedded-media-modal.element.ts @@ -1,7 +1,7 @@ -import { UmbOEmbedRepository } from './repository/oembed.repository.js'; +import { UmbOEmbedRepository } from '../repository/oembed.repository.js'; +import type { UmbEmbeddedMediaModalData, UmbEmbeddedMediaModalValue } from './embedded-media-modal.token.js'; import { css, html, unsafeHTML, when, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { UmbEmbeddedMediaModalData, UmbEmbeddedMediaModalValue } from '@umbraco-cms/backoffice/modal'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import type { UUIButtonState, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; diff --git a/src/packages/core/modal/common/embedded-media/embedded-media-modal.stories.ts b/src/packages/embedded-media/modal/embedded-media-modal.stories.ts similarity index 83% rename from src/packages/core/modal/common/embedded-media/embedded-media-modal.stories.ts rename to src/packages/embedded-media/modal/embedded-media-modal.stories.ts index ee850fdeb1..35e21f4aea 100644 --- a/src/packages/core/modal/common/embedded-media/embedded-media-modal.stories.ts +++ b/src/packages/embedded-media/modal/embedded-media-modal.stories.ts @@ -1,9 +1,8 @@ -import '../../../components/body-layout/body-layout.element.js'; import './embedded-media-modal.element.js'; +import type { UmbEmbeddedMediaModalData } from './embedded-media-modal.token.js'; import type { Meta } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbEmbeddedMediaModalData } from '@umbraco-cms/backoffice/modal'; export default { title: 'API/Modals/Layouts/Embedded Media', diff --git a/src/packages/core/modal/token/embedded-media-modal.token.ts b/src/packages/embedded-media/modal/embedded-media-modal.token.ts similarity index 89% rename from src/packages/core/modal/token/embedded-media-modal.token.ts rename to src/packages/embedded-media/modal/embedded-media-modal.token.ts index 0fb7df92ca..25737bbcbf 100644 --- a/src/packages/core/modal/token/embedded-media-modal.token.ts +++ b/src/packages/embedded-media/modal/embedded-media-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbEmbeddedMediaModalData extends Partial { url?: string; diff --git a/src/packages/embedded-media/modal/index.ts b/src/packages/embedded-media/modal/index.ts new file mode 100644 index 0000000000..363deb1226 --- /dev/null +++ b/src/packages/embedded-media/modal/index.ts @@ -0,0 +1 @@ +export * from './embedded-media-modal.token.js'; diff --git a/src/packages/embedded-media/modal/manifests.ts b/src/packages/embedded-media/modal/manifests.ts new file mode 100644 index 0000000000..aef2dbd580 --- /dev/null +++ b/src/packages/embedded-media/modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.EmbeddedMedia', + name: 'Embedded Media Modal', + element: () => import('./embedded-media-modal.element.js'), + }, +]; diff --git a/src/packages/embedded-media/package.json b/src/packages/embedded-media/package.json new file mode 100644 index 0000000000..6c7a488f0f --- /dev/null +++ b/src/packages/embedded-media/package.json @@ -0,0 +1,8 @@ +{ + "name": "@umbraco-backoffice/embedded-media", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + } +} \ No newline at end of file diff --git a/src/packages/embedded-media/repository/constants.ts b/src/packages/embedded-media/repository/constants.ts new file mode 100644 index 0000000000..a28213cbcd --- /dev/null +++ b/src/packages/embedded-media/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_OEMBED_REPOSITORY_ALIAS = 'Umb.Repository.OEmbed'; diff --git a/src/packages/embedded-media/repository/index.ts b/src/packages/embedded-media/repository/index.ts new file mode 100644 index 0000000000..7b45174122 --- /dev/null +++ b/src/packages/embedded-media/repository/index.ts @@ -0,0 +1,2 @@ +export * from './oembed.repository.js'; +export * from './constants.js'; diff --git a/src/packages/embedded-media/repository/manifests.ts b/src/packages/embedded-media/repository/manifests.ts new file mode 100644 index 0000000000..364aeb3893 --- /dev/null +++ b/src/packages/embedded-media/repository/manifests.ts @@ -0,0 +1,10 @@ +import { UMB_OEMBED_REPOSITORY_ALIAS } from './constants.js'; + +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_OEMBED_REPOSITORY_ALIAS, + name: 'OEmbed Repository', + api: () => import('./oembed.repository.js'), + }, +]; diff --git a/src/packages/core/modal/common/embedded-media/repository/oembed.repository.ts b/src/packages/embedded-media/repository/oembed.repository.ts similarity index 100% rename from src/packages/core/modal/common/embedded-media/repository/oembed.repository.ts rename to src/packages/embedded-media/repository/oembed.repository.ts diff --git a/src/packages/core/modal/common/embedded-media/repository/oembed.server.data.ts b/src/packages/embedded-media/repository/oembed.server.data.ts similarity index 100% rename from src/packages/core/modal/common/embedded-media/repository/oembed.server.data.ts rename to src/packages/embedded-media/repository/oembed.server.data.ts diff --git a/src/packages/embedded-media/umbraco-package.ts b/src/packages/embedded-media/umbraco-package.ts new file mode 100644 index 0000000000..ca74b9b9ab --- /dev/null +++ b/src/packages/embedded-media/umbraco-package.ts @@ -0,0 +1,9 @@ +export const name = 'Umbraco.Core.EmbeddedMedia'; +export const extensions = [ + { + name: 'Embedded Media Bundle', + alias: 'Umb.Bundle.EmbeddedMedia', + type: 'bundle', + js: () => import('./manifests.js'), + }, +]; diff --git a/src/packages/embedded-media/vite.config.ts b/src/packages/embedded-media/vite.config.ts new file mode 100644 index 0000000000..365fefd614 --- /dev/null +++ b/src/packages/embedded-media/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/embedded-media'; + +// delete the unbundled dist folder +rmSync(dist, { recursive: true, force: true }); + +export default defineConfig({ + ...getDefaultConfig({ dist }), +}); diff --git a/src/packages/core/extension-registry/collection/extension-collection.element.ts b/src/packages/extension-insights/collection/extension-collection.element.ts similarity index 96% rename from src/packages/core/extension-registry/collection/extension-collection.element.ts rename to src/packages/extension-insights/collection/extension-collection.element.ts index a57ef177a0..3c22b9e54a 100644 --- a/src/packages/core/extension-registry/collection/extension-collection.element.ts +++ b/src/packages/extension-insights/collection/extension-collection.element.ts @@ -1,5 +1,5 @@ -import { umbExtensionsRegistry } from '../registry.js'; import type { UmbExtensionCollectionFilterModel } from './types.js'; +import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { html, customElement, css } from '@umbraco-cms/backoffice/external/lit'; import { fromCamelCase } from '@umbraco-cms/backoffice/utils'; import { UMB_COLLECTION_CONTEXT, UmbCollectionDefaultElement } from '@umbraco-cms/backoffice/collection'; diff --git a/src/packages/extension-insights/collection/manifests.ts b/src/packages/extension-insights/collection/manifests.ts new file mode 100644 index 0000000000..750465b90d --- /dev/null +++ b/src/packages/extension-insights/collection/manifests.ts @@ -0,0 +1,20 @@ +import { UMB_EXTENSION_COLLECTION_REPOSITORY_ALIAS } from './repository/index.js'; +import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; +import { manifests as collectionViewManifests } from './views/manifests.js'; + +export const UMB_EXTENSION_COLLECTION_ALIAS = 'Umb.Collection.Extension'; + +export const manifests: Array = [ + { + type: 'collection', + kind: 'default', + alias: UMB_EXTENSION_COLLECTION_ALIAS, + name: 'Extension Collection', + element: () => import('./extension-collection.element.js'), + meta: { + repositoryAlias: UMB_EXTENSION_COLLECTION_REPOSITORY_ALIAS, + }, + }, + ...collectionRepositoryManifests, + ...collectionViewManifests, +]; diff --git a/src/packages/core/extension-registry/collection/repository/extension-collection.repository.ts b/src/packages/extension-insights/collection/repository/extension-collection.repository.ts similarity index 94% rename from src/packages/core/extension-registry/collection/repository/extension-collection.repository.ts rename to src/packages/extension-insights/collection/repository/extension-collection.repository.ts index 5daaac2129..a400517ce5 100644 --- a/src/packages/core/extension-registry/collection/repository/extension-collection.repository.ts +++ b/src/packages/extension-insights/collection/repository/extension-collection.repository.ts @@ -1,6 +1,6 @@ -import { umbExtensionsRegistry } from '../../registry.js'; import type { UmbExtensionCollectionFilterModel, UmbExtensionDetailModel } from '../types.js'; import { UMB_EXTENSION_ENTITY_TYPE } from '../../entity.js'; +import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbCollectionRepository } from '@umbraco-cms/backoffice/collection'; diff --git a/src/packages/core/extension-registry/collection/repository/index.ts b/src/packages/extension-insights/collection/repository/index.ts similarity index 100% rename from src/packages/core/extension-registry/collection/repository/index.ts rename to src/packages/extension-insights/collection/repository/index.ts diff --git a/src/packages/extension-insights/collection/repository/manifests.ts b/src/packages/extension-insights/collection/repository/manifests.ts new file mode 100644 index 0000000000..7f9ab6847f --- /dev/null +++ b/src/packages/extension-insights/collection/repository/manifests.ts @@ -0,0 +1,10 @@ +export const UMB_EXTENSION_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.ExtensionCollection'; + +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_EXTENSION_COLLECTION_REPOSITORY_ALIAS, + name: 'Extension Collection Repository', + api: () => import('./extension-collection.repository.js'), + }, +]; diff --git a/src/packages/core/extension-registry/collection/types.ts b/src/packages/extension-insights/collection/types.ts similarity index 100% rename from src/packages/core/extension-registry/collection/types.ts rename to src/packages/extension-insights/collection/types.ts diff --git a/src/packages/extension-insights/collection/views/manifests.ts b/src/packages/extension-insights/collection/views/manifests.ts new file mode 100644 index 0000000000..097a9e5b25 --- /dev/null +++ b/src/packages/extension-insights/collection/views/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; + +export const UMB_EXTENSION_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Extension.Table'; + +export const manifests: Array = [ + { + type: 'collectionView', + alias: UMB_EXTENSION_TABLE_COLLECTION_VIEW_ALIAS, + name: 'Extension Table Collection View', + element: () => import('./table/extension-table-collection-view.element.js'), + meta: { + label: 'Table', + icon: 'icon-list', + pathName: 'table', + }, + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Extension', + }, + ], + }, +]; diff --git a/src/packages/core/extension-registry/collection/views/table/extension-table-collection-view.element.ts b/src/packages/extension-insights/collection/views/table/extension-table-collection-view.element.ts similarity index 100% rename from src/packages/core/extension-registry/collection/views/table/extension-table-collection-view.element.ts rename to src/packages/extension-insights/collection/views/table/extension-table-collection-view.element.ts diff --git a/src/packages/core/extension-registry/collection/views/table/extension-table-entity-actions-column-layout.element.ts b/src/packages/extension-insights/collection/views/table/extension-table-entity-actions-column-layout.element.ts similarity index 100% rename from src/packages/core/extension-registry/collection/views/table/extension-table-entity-actions-column-layout.element.ts rename to src/packages/extension-insights/collection/views/table/extension-table-entity-actions-column-layout.element.ts diff --git a/src/packages/core/extension-registry/entity-actions/manifests.ts b/src/packages/extension-insights/entity-actions/manifests.ts similarity index 100% rename from src/packages/core/extension-registry/entity-actions/manifests.ts rename to src/packages/extension-insights/entity-actions/manifests.ts diff --git a/src/packages/core/extension-registry/entity-actions/unregister/index.ts b/src/packages/extension-insights/entity-actions/unregister/index.ts similarity index 100% rename from src/packages/core/extension-registry/entity-actions/unregister/index.ts rename to src/packages/extension-insights/entity-actions/unregister/index.ts diff --git a/src/packages/core/extension-registry/entity-actions/unregister/manifests.ts b/src/packages/extension-insights/entity-actions/unregister/manifests.ts similarity index 100% rename from src/packages/core/extension-registry/entity-actions/unregister/manifests.ts rename to src/packages/extension-insights/entity-actions/unregister/manifests.ts diff --git a/src/packages/core/extension-registry/entity-actions/unregister/unregister-extension.action.ts b/src/packages/extension-insights/entity-actions/unregister/unregister-extension.action.ts similarity index 93% rename from src/packages/core/extension-registry/entity-actions/unregister/unregister-extension.action.ts rename to src/packages/extension-insights/entity-actions/unregister/unregister-extension.action.ts index 019871bfbd..c904dc092d 100644 --- a/src/packages/core/extension-registry/entity-actions/unregister/unregister-extension.action.ts +++ b/src/packages/extension-insights/entity-actions/unregister/unregister-extension.action.ts @@ -1,4 +1,4 @@ -import { umbExtensionsRegistry } from '../../registry.js'; +import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import { UmbEntityActionBase, UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; import { umbConfirmModal } from '@umbraco-cms/backoffice/modal'; diff --git a/src/packages/core/extension-registry/entity.ts b/src/packages/extension-insights/entity.ts similarity index 100% rename from src/packages/core/extension-registry/entity.ts rename to src/packages/extension-insights/entity.ts diff --git a/src/packages/extension-insights/manifests.ts b/src/packages/extension-insights/manifests.ts new file mode 100644 index 0000000000..0507e6a8ee --- /dev/null +++ b/src/packages/extension-insights/manifests.ts @@ -0,0 +1,11 @@ +import { manifests as menuItemManifests } from './menu-item/manifests.js'; +import { manifests as workspaceManifests } from './workspace/manifests.js'; +import { manifests as collectionManifests } from './collection/manifests.js'; +import { manifests as entityActionManifests } from './entity-actions/manifests.js'; + +export const manifests: Array = [ + ...menuItemManifests, + ...workspaceManifests, + ...collectionManifests, + ...entityActionManifests, +]; diff --git a/src/packages/extension-insights/menu-item/manifests.ts b/src/packages/extension-insights/menu-item/manifests.ts new file mode 100644 index 0000000000..c9c17895c6 --- /dev/null +++ b/src/packages/extension-insights/menu-item/manifests.ts @@ -0,0 +1,14 @@ +export const manifests: Array = [ + { + type: 'menuItem', + alias: 'Umb.MenuItem.Extensions', + name: 'Extension Insights Menu Item', + weight: 200, + meta: { + label: 'Extension Insights', + icon: 'icon-wand', + entityType: 'extension-root', + menus: ['Umb.Menu.AdvancedSettings'], + }, + }, +]; diff --git a/src/packages/extension-insights/package.json b/src/packages/extension-insights/package.json new file mode 100644 index 0000000000..25e8983f7a --- /dev/null +++ b/src/packages/extension-insights/package.json @@ -0,0 +1,8 @@ +{ + "name": "@umbraco-backoffice/extension-insights", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + } +} \ No newline at end of file diff --git a/src/packages/extension-insights/umbraco-package.ts b/src/packages/extension-insights/umbraco-package.ts new file mode 100644 index 0000000000..c9a7e12951 --- /dev/null +++ b/src/packages/extension-insights/umbraco-package.ts @@ -0,0 +1,9 @@ +export const name = 'Umbraco.Core.ExtensionInsight'; +export const extensions = [ + { + name: 'Extension Insight Bundle', + alias: 'Umb.Bundle.ExtensionInsight', + type: 'bundle', + js: () => import('./manifests.js'), + }, +]; diff --git a/src/packages/extension-insights/vite.config.ts b/src/packages/extension-insights/vite.config.ts new file mode 100644 index 0000000000..8e8a57e4b0 --- /dev/null +++ b/src/packages/extension-insights/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/extension-insights'; + +// delete the unbundled dist folder +rmSync(dist, { recursive: true, force: true }); + +export default defineConfig({ + ...getDefaultConfig({ dist, entry: ['manifests.ts', 'umbraco-package.ts'] }), +}); diff --git a/src/packages/core/extension-registry/workspace/extension-root-workspace.element.ts b/src/packages/extension-insights/workspace/extension-root-workspace.element.ts similarity index 100% rename from src/packages/core/extension-registry/workspace/extension-root-workspace.element.ts rename to src/packages/extension-insights/workspace/extension-root-workspace.element.ts diff --git a/src/packages/core/extension-registry/workspace/extension-root-workspace.stories.ts b/src/packages/extension-insights/workspace/extension-root-workspace.stories.ts similarity index 100% rename from src/packages/core/extension-registry/workspace/extension-root-workspace.stories.ts rename to src/packages/extension-insights/workspace/extension-root-workspace.stories.ts diff --git a/src/packages/extension-insights/workspace/manifests.ts b/src/packages/extension-insights/workspace/manifests.ts new file mode 100644 index 0000000000..faa495b800 --- /dev/null +++ b/src/packages/extension-insights/workspace/manifests.ts @@ -0,0 +1,13 @@ +export const UMB_EXTENSION_ROOT_WORKSPACE_ALIAS = 'Umb.Workspace.ExtensionRoot'; + +export const manifests: Array = [ + { + type: 'workspace', + alias: 'Umb.Workspace.ExtensionRoot', + name: 'Extension Root Workspace', + element: () => import('./extension-root-workspace.element.js'), + meta: { + entityType: 'extension-root', + }, + }, +]; diff --git a/src/packages/health-check/manifests.ts b/src/packages/health-check/manifests.ts index cad982e849..c80db6f6dc 100644 --- a/src/packages/health-check/manifests.ts +++ b/src/packages/health-check/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'dashboard', alias: 'Umb.Dashboard.HealthCheck', diff --git a/src/packages/help/header-app/help-header-app.element.ts b/src/packages/help/header-app/help-header-app.element.ts new file mode 100644 index 0000000000..0c8ff69b84 --- /dev/null +++ b/src/packages/help/header-app/help-header-app.element.ts @@ -0,0 +1,77 @@ +import { UMB_HELP_MENU_ALIAS } from '../menu/index.js'; +import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state, nothing } from '@umbraco-cms/backoffice/external/lit'; +import { UmbHeaderAppButtonElement } from '@umbraco-cms/backoffice/components'; +import { umbExtensionsRegistry, type ManifestMenu } from '@umbraco-cms/backoffice/extension-registry'; +import { UmbExtensionsManifestInitializer } from '@umbraco-cms/backoffice/extension-api'; + +const elementName = 'umb-help-header-app'; +@customElement(elementName) +export class UmbHelpHeaderAppElement extends UmbHeaderAppButtonElement { + @state() + private _popoverOpen = false; + + @state() + private _helpMenuHasMenuItems = false; + + constructor() { + super(); + + new UmbExtensionsManifestInitializer( + this, + umbExtensionsRegistry, + 'menuItem', + (manifest) => manifest.meta.menus.includes(UMB_HELP_MENU_ALIAS), + (menuItems) => { + const manifests = menuItems.map((menuItem) => menuItem.manifest); + this._helpMenuHasMenuItems = manifests.length > 0; + }, + ); + } + + #onPopoverToggle(event: ToggleEvent) { + // 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._popoverOpen = event.newState === 'open'; + } + + override render() { + return html` ${this.#renderButton()} ${this.#renderPopover()} `; + } + + #renderButton() { + if (!this._helpMenuHasMenuItems) return nothing; + + return html` + + + + `; + } + + #renderPopover() { + return html` + + + + + + + + `; + } + + static override styles: CSSResultGroup = [UmbHeaderAppButtonElement.styles, css``]; +} + +export { UmbHelpHeaderAppElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbHelpHeaderAppElement; + } +} diff --git a/src/packages/help/header-app/manifests.ts b/src/packages/help/header-app/manifests.ts new file mode 100644 index 0000000000..fc9d2e805f --- /dev/null +++ b/src/packages/help/header-app/manifests.ts @@ -0,0 +1,9 @@ +export const manifests: Array = [ + { + type: 'headerApp', + alias: 'Umb.HeaderApp.Help', + name: 'Help Header App', + element: () => import('./help-header-app.element.js'), + weight: 500, + }, +]; diff --git a/src/packages/help/index.ts b/src/packages/help/index.ts new file mode 100644 index 0000000000..f15384a062 --- /dev/null +++ b/src/packages/help/index.ts @@ -0,0 +1 @@ +export * from './menu/index.js'; diff --git a/src/packages/help/manifests.ts b/src/packages/help/manifests.ts new file mode 100644 index 0000000000..34f148e007 --- /dev/null +++ b/src/packages/help/manifests.ts @@ -0,0 +1,8 @@ +import { manifests as headerAppManifests } from './header-app/manifests.js'; +import { manifests as menuManifests } from './menu/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + ...menuManifests, + ...headerAppManifests, +]; diff --git a/src/packages/help/menu/constants.ts b/src/packages/help/menu/constants.ts new file mode 100644 index 0000000000..cae4c017c3 --- /dev/null +++ b/src/packages/help/menu/constants.ts @@ -0,0 +1 @@ +export const UMB_HELP_MENU_ALIAS = 'Umb.Menu.Help'; diff --git a/src/packages/user/user-section/index.ts b/src/packages/help/menu/index.ts similarity index 100% rename from src/packages/user/user-section/index.ts rename to src/packages/help/menu/index.ts diff --git a/src/packages/help/menu/manifests.ts b/src/packages/help/menu/manifests.ts new file mode 100644 index 0000000000..543cb76aeb --- /dev/null +++ b/src/packages/help/menu/manifests.ts @@ -0,0 +1,46 @@ +import { UMB_HELP_MENU_ALIAS } from './constants.js'; +import { UMB_CURRENT_USER_IS_ADMIN_CONDITION_ALIAS } from '@umbraco-cms/backoffice/current-user'; + +export const manifests: Array = [ + { + type: 'menu', + alias: UMB_HELP_MENU_ALIAS, + name: 'Help Menu', + }, + { + type: 'menuItem', + kind: 'link', + alias: 'Umb.MenuItem.Help.LearningBase', + name: 'Learning Base Help Menu Item', + weight: 200, + meta: { + menus: [UMB_HELP_MENU_ALIAS], + label: 'Umbraco Learning Base', + icon: 'icon-movie-alt', + href: 'https://umbra.co/ulb', + }, + conditions: [ + { + alias: UMB_CURRENT_USER_IS_ADMIN_CONDITION_ALIAS, + }, + ], + }, + { + type: 'menuItem', + kind: 'link', + alias: 'Umb.MenuItem.Help.CommunityWebsite', + name: 'Community Website Help Menu Item', + weight: 100, + meta: { + menus: [UMB_HELP_MENU_ALIAS], + label: 'Community Website', + icon: 'icon-hearts', + href: 'https://our.umbraco.com?utm_source=core&utm_medium=help&utm_content=link&utm_campaign=our', + }, + conditions: [ + { + alias: UMB_CURRENT_USER_IS_ADMIN_CONDITION_ALIAS, + }, + ], + }, +]; diff --git a/src/packages/help/package.json b/src/packages/help/package.json new file mode 100644 index 0000000000..3cae8e94ec --- /dev/null +++ b/src/packages/help/package.json @@ -0,0 +1,8 @@ +{ + "name": "@umbraco-backoffice/help", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + } +} \ No newline at end of file diff --git a/src/packages/help/umbraco-package.ts b/src/packages/help/umbraco-package.ts new file mode 100644 index 0000000000..bbf3a996b9 --- /dev/null +++ b/src/packages/help/umbraco-package.ts @@ -0,0 +1,9 @@ +export const name = 'Umbraco.Core.Help'; +export const extensions = [ + { + name: 'Help Bundle', + alias: 'Umb.Bundle.Help', + type: 'bundle', + js: () => import('./manifests.js'), + }, +]; diff --git a/src/packages/help/vite.config.ts b/src/packages/help/vite.config.ts new file mode 100644 index 0000000000..965d250b98 --- /dev/null +++ b/src/packages/help/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/help'; + +// delete the unbundled dist folder +rmSync(dist, { recursive: true, force: true }); + +export default defineConfig({ + ...getDefaultConfig({ dist }), +}); diff --git a/src/packages/language/app-language-select/manifests.ts b/src/packages/language/app-language-select/manifests.ts index e67c16493d..7dad1225b7 100644 --- a/src/packages/language/app-language-select/manifests.ts +++ b/src/packages/language/app-language-select/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestSectionSidebarApp, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const entityActions: Array = [ +export const manifests: Array = [ { type: 'sectionSidebarApp', alias: 'Umb.SectionSidebarItem.LanguageSelect', @@ -18,5 +16,3 @@ const entityActions: Array = [ ], }, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/language/collection/action/manifests.ts b/src/packages/language/collection/action/manifests.ts index bf76be9c0d..3e259137a8 100644 --- a/src/packages/language/collection/action/manifests.ts +++ b/src/packages/language/collection/action/manifests.ts @@ -1,22 +1,21 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const createManifest: ManifestCollectionAction = { - type: 'collectionAction', - kind: 'button', - name: 'Create Language Collection Action', - alias: 'Umb.CollectionAction.Language.Create', - weight: 200, - meta: { - label: '#general_create', - href: 'section/settings/workspace/language/create', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Language', +export const manifests: Array = [ + { + type: 'collectionAction', + kind: 'button', + name: 'Create Language Collection Action', + alias: 'Umb.CollectionAction.Language.Create', + weight: 200, + meta: { + label: '#general_create', + href: 'section/settings/workspace/language/create', }, - ], -}; - -export const manifests: Array = [createManifest]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Language', + }, + ], + }, +]; diff --git a/src/packages/language/collection/manifests.ts b/src/packages/language/collection/manifests.ts index d03f3a5bb6..6b441f4013 100644 --- a/src/packages/language/collection/manifests.ts +++ b/src/packages/language/collection/manifests.ts @@ -1,23 +1,20 @@ -import { UMB_LANGUAGE_COLLECTION_REPOSITORY_ALIAS } from './repository/index.js'; +import { manifests as collectionActionManifests } from './action/manifests.js'; import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; import { manifests as collectionViewManifests } from './views/manifests.js'; -import { manifests as collectionActionManifests } from './action/manifests.js'; import { UMB_LANGUAGE_COLLECTION_ALIAS } from './constants.js'; -import type { ManifestCollection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { UMB_LANGUAGE_COLLECTION_REPOSITORY_ALIAS } from './repository/index.js'; -const collectionManifest: ManifestCollection = { - type: 'collection', - kind: 'default', - alias: UMB_LANGUAGE_COLLECTION_ALIAS, - name: 'Language Collection', - meta: { - repositoryAlias: UMB_LANGUAGE_COLLECTION_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'collection', + kind: 'default', + alias: UMB_LANGUAGE_COLLECTION_ALIAS, + name: 'Language Collection', + meta: { + repositoryAlias: UMB_LANGUAGE_COLLECTION_REPOSITORY_ALIAS, + }, }, -}; - -export const manifests: Array = [ - collectionManifest, + ...collectionActionManifests, ...collectionRepositoryManifests, ...collectionViewManifests, - ...collectionActionManifests, ]; diff --git a/src/packages/language/collection/repository/manifests.ts b/src/packages/language/collection/repository/manifests.ts index ea284123d7..642b58bd4d 100644 --- a/src/packages/language/collection/repository/manifests.ts +++ b/src/packages/language/collection/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_LANGUAGE_COLLECTION_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_LANGUAGE_COLLECTION_REPOSITORY_ALIAS, - name: 'Language Collection Repository', - api: () => import('./language-collection.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_LANGUAGE_COLLECTION_REPOSITORY_ALIAS, + name: 'Language Collection Repository', + api: () => import('./language-collection.repository.js'), + }, +]; diff --git a/src/packages/language/collection/views/manifests.ts b/src/packages/language/collection/views/manifests.ts index 81b06449a8..ec6bf07875 100644 --- a/src/packages/language/collection/views/manifests.ts +++ b/src/packages/language/collection/views/manifests.ts @@ -1,24 +1,23 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_LANGUAGE_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Language.Table'; -const tableCollectionView: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_LANGUAGE_TABLE_COLLECTION_VIEW_ALIAS, - name: 'Language Table Collection View', - js: () => import('./table/language-table-collection-view.element.js'), - meta: { - label: 'Table', - icon: 'icon-list', - pathName: 'table', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Language', +export const manifests: Array = [ + { + type: 'collectionView', + alias: UMB_LANGUAGE_TABLE_COLLECTION_VIEW_ALIAS, + name: 'Language Table Collection View', + js: () => import('./table/language-table-collection-view.element.js'), + meta: { + label: 'Table', + icon: 'icon-list', + pathName: 'table', }, - ], -}; - -export const manifests: Array = [tableCollectionView]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Language', + }, + ], + }, +]; diff --git a/src/packages/core/extension-registry/conditions/multiple-app-languages.condition.ts b/src/packages/language/conditions/multiple-app-languages.condition.ts similarity index 85% rename from src/packages/core/extension-registry/conditions/multiple-app-languages.condition.ts rename to src/packages/language/conditions/multiple-app-languages.condition.ts index 361cbbcb38..f1217715f2 100644 --- a/src/packages/core/extension-registry/conditions/multiple-app-languages.condition.ts +++ b/src/packages/language/conditions/multiple-app-languages.condition.ts @@ -1,14 +1,12 @@ -import { UmbConditionBase } from './condition-base.controller.js'; +import type { UmbMultipleAppLanguageConditionConfig } from './types.js'; import { UMB_APP_LANGUAGE_CONTEXT } from '@umbraco-cms/backoffice/language'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { ManifestCondition, - UmbConditionConfigBase, UmbConditionControllerArguments, UmbExtensionCondition, } from '@umbraco-cms/backoffice/extension-api'; - -export type UmbMultipleAppLanguageConditionConfig = UmbConditionConfigBase; +import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; export class UmbMultipleAppLanguageCondition extends UmbConditionBase diff --git a/src/packages/language/conditions/types.ts b/src/packages/language/conditions/types.ts new file mode 100644 index 0000000000..51ad954307 --- /dev/null +++ b/src/packages/language/conditions/types.ts @@ -0,0 +1,3 @@ +import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; + +export type UmbMultipleAppLanguageConditionConfig = UmbConditionConfigBase; diff --git a/src/packages/language/entity-actions/manifests.ts b/src/packages/language/entity-actions/manifests.ts index a0b7dc0f6d..1fad0995e1 100644 --- a/src/packages/language/entity-actions/manifests.ts +++ b/src/packages/language/entity-actions/manifests.ts @@ -1,8 +1,7 @@ import { UMB_LANGUAGE_DETAIL_REPOSITORY_ALIAS, UMB_LANGUAGE_ITEM_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_LANGUAGE_ENTITY_TYPE, UMB_LANGUAGE_ROOT_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'delete', @@ -25,8 +24,7 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/language/manifests.ts b/src/packages/language/manifests.ts index 64b2ce2f3f..4767edb2f9 100644 --- a/src/packages/language/manifests.ts +++ b/src/packages/language/manifests.ts @@ -6,9 +6,9 @@ import { manifests as appLanguageSelect } from './app-language-select/manifests. import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; import { manifests as globalContextManifests } from './global-contexts/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as conditionsManifest } from './conditions/multiple-app-languages.condition.js'; -export const manifests: Array = [ +export const manifests: Array = [ ...repositoryManifests, ...entityActions, ...menuManifests, @@ -17,6 +17,7 @@ export const manifests: Array = [ ...modalManifests, ...collectionManifests, ...globalContextManifests, + conditionsManifest, { type: 'workspaceContext', name: 'Document Language Access Workspace Context', diff --git a/src/packages/language/menu/manifests.ts b/src/packages/language/menu/manifests.ts index 9dbbc8f0a8..a5349c78d8 100644 --- a/src/packages/language/menu/manifests.ts +++ b/src/packages/language/menu/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menuItem', alias: 'Umb.MenuItem.Languages', diff --git a/src/packages/language/modals/manifests.ts b/src/packages/language/modals/manifests.ts index d0c5d69f83..0ff09dfca4 100644 --- a/src/packages/language/modals/manifests.ts +++ b/src/packages/language/modals/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.LanguagePicker', @@ -8,5 +6,3 @@ const modals: Array = [ js: () => import('./language-picker/language-picker-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/language/repository/detail/manifests.ts b/src/packages/language/repository/detail/manifests.ts index 1f68d6d8f8..387affb5ed 100644 --- a/src/packages/language/repository/detail/manifests.ts +++ b/src/packages/language/repository/detail/manifests.ts @@ -1,18 +1,16 @@ import { UMB_LANGUAGE_DETAIL_REPOSITORY_ALIAS, UMB_LANGUAGE_DETAIL_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_LANGUAGE_DETAIL_REPOSITORY_ALIAS, - name: 'Language Detail Repository', - api: () => import('./language-detail.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_LANGUAGE_DETAIL_STORE_ALIAS, - name: 'Language Detail Store', - api: () => import('./language-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_LANGUAGE_DETAIL_REPOSITORY_ALIAS, + name: 'Language Detail Repository', + api: () => import('./language-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_LANGUAGE_DETAIL_STORE_ALIAS, + name: 'Language Detail Store', + api: () => import('./language-detail.store.js'), + }, +]; diff --git a/src/packages/language/repository/item/manifests.ts b/src/packages/language/repository/item/manifests.ts index 8aa52506d5..4cd1361c32 100644 --- a/src/packages/language/repository/item/manifests.ts +++ b/src/packages/language/repository/item/manifests.ts @@ -1,18 +1,16 @@ import { UMB_LANGUAGE_ITEM_REPOSITORY_ALIAS, UMB_LANGUAGE_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_LANGUAGE_ITEM_REPOSITORY_ALIAS, - name: 'Language Item Repository', - api: () => import('./language-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_LANGUAGE_STORE_ALIAS, - name: 'Language Item Store', - api: () => import('./language-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_LANGUAGE_ITEM_REPOSITORY_ALIAS, + name: 'Language Item Repository', + api: () => import('./language-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_LANGUAGE_STORE_ALIAS, + name: 'Language Item Store', + api: () => import('./language-item.store.js'), + }, +]; diff --git a/src/packages/language/repository/manifests.ts b/src/packages/language/repository/manifests.ts index 37dcb889ef..4dfb0c911f 100644 --- a/src/packages/language/repository/manifests.ts +++ b/src/packages/language/repository/manifests.ts @@ -1,5 +1,4 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/packages/language/types.ts b/src/packages/language/types.ts index 4bf52812c6..ea976f305a 100644 --- a/src/packages/language/types.ts +++ b/src/packages/language/types.ts @@ -1,4 +1,5 @@ import type { UmbLanguageEntityType } from './entity.js'; +export type * from './conditions/types.js'; export interface UmbLanguageDetailModel { entityType: UmbLanguageEntityType; diff --git a/src/packages/language/workspace/language-root/manifests.ts b/src/packages/language/workspace/language-root/manifests.ts index 1d6acda704..34a2abd249 100644 --- a/src/packages/language/workspace/language-root/manifests.ts +++ b/src/packages/language/workspace/language-root/manifests.ts @@ -1,13 +1,11 @@ -import type { ManifestTypes, ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; - -const workspace: ManifestWorkspace = { - type: 'workspace', - alias: 'Umb.Workspace.LanguageRoot', - name: 'Language Root Workspace', - element: () => import('./language-root-workspace.element.js'), - meta: { - entityType: 'language-root', +export const manifests: Array = [ + { + type: 'workspace', + alias: 'Umb.Workspace.LanguageRoot', + name: 'Language Root Workspace', + element: () => import('./language-root-workspace.element.js'), + meta: { + entityType: 'language-root', + }, }, -}; - -export const manifests: Array = [workspace]; +]; diff --git a/src/packages/language/workspace/language/language-workspace.modal-token.ts b/src/packages/language/workspace/language/language-workspace.modal-token.ts index 1e82ee6dd6..02250aa8ac 100644 --- a/src/packages/language/workspace/language/language-workspace.modal-token.ts +++ b/src/packages/language/workspace/language/language-workspace.modal-token.ts @@ -1,5 +1,5 @@ import type { UmbLanguageDetailModel } from '../../types.js'; -import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/workspace'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export const UMB_LANGUAGE_WORKSPACE_MODAL = new UmbModalToken< diff --git a/src/packages/language/workspace/language/manifests.ts b/src/packages/language/workspace/language/manifests.ts index ce98f96aaa..c65b6e0a19 100644 --- a/src/packages/language/workspace/language/manifests.ts +++ b/src/packages/language/workspace/language/manifests.ts @@ -1,24 +1,17 @@ import { UMB_LANGUAGE_WORKSPACE_ALIAS } from './constants.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceView, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: UMB_LANGUAGE_WORKSPACE_ALIAS, - name: 'Language Workspace', - api: () => import('./language-workspace.context.js'), - meta: { - entityType: 'language', +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_LANGUAGE_WORKSPACE_ALIAS, + name: 'Language Workspace', + api: () => import('./language-workspace.context.js'), + meta: { + entityType: 'language', + }, }, -}; - -const workspaceViews: Array = [ { type: 'workspaceView', alias: 'Umb.WorkspaceView.Language.Details', @@ -33,13 +26,10 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_LANGUAGE_WORKSPACE_ALIAS, }, ], }, -]; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -54,10 +44,8 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_LANGUAGE_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts b/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts index 3ba6213194..7702e70da5 100644 --- a/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts +++ b/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts @@ -8,7 +8,7 @@ import { UUIBooleanInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { css, html, nothing, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import '@umbraco-cms/backoffice/culture'; diff --git a/src/packages/language/workspace/manifests.ts b/src/packages/language/workspace/manifests.ts index 531e433a1b..1c86eec317 100644 --- a/src/packages/language/workspace/manifests.ts +++ b/src/packages/language/workspace/manifests.ts @@ -1,5 +1,4 @@ import { manifests as languageManifests } from './language/manifests.js'; import { manifests as languageRootManifests } from './language-root/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...languageManifests, ...languageRootManifests]; +export const manifests: Array = [...languageManifests, ...languageRootManifests]; diff --git a/src/packages/log-viewer/manifests.ts b/src/packages/log-viewer/manifests.ts index cfbac86f79..83cd85bb23 100644 --- a/src/packages/log-viewer/manifests.ts +++ b/src/packages/log-viewer/manifests.ts @@ -1,5 +1,4 @@ import { manifests as treeManifests } from './menu-item/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...treeManifests, ...workspaceManifests]; +export const manifests: Array = [...treeManifests, ...workspaceManifests]; diff --git a/src/packages/log-viewer/menu-item/manifests.ts b/src/packages/log-viewer/menu-item/manifests.ts index e9f089ba75..6f19a8510e 100644 --- a/src/packages/log-viewer/menu-item/manifests.ts +++ b/src/packages/log-viewer/menu-item/manifests.ts @@ -1,16 +1,14 @@ -import type { ManifestMenuItem, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const menuItem: ManifestMenuItem = { - type: 'menuItem', - alias: 'Umb.MenuItem.LogViewer', - name: 'Log Viewer Menu Item', - weight: 300, - meta: { - label: '#treeHeaders_logViewer', - icon: 'icon-box-alt', - entityType: 'logviewer', - menus: ['Umb.Menu.AdvancedSettings'], +export const manifests: Array = [ + { + type: 'menuItem', + alias: 'Umb.MenuItem.LogViewer', + name: 'Log Viewer Menu Item', + weight: 300, + meta: { + label: '#treeHeaders_logViewer', + icon: 'icon-box-alt', + entityType: 'logviewer', + menus: ['Umb.Menu.AdvancedSettings'], + }, }, -}; - -export const manifests: Array = [menuItem]; +]; diff --git a/src/packages/log-viewer/workspace/manifests.ts b/src/packages/log-viewer/workspace/manifests.ts index 083ef9e64d..57a6885292 100644 --- a/src/packages/log-viewer/workspace/manifests.ts +++ b/src/packages/log-viewer/workspace/manifests.ts @@ -1,25 +1,16 @@ -import type { - ManifestModal, - ManifestTypes, - ManifestWorkspace, - ManifestWorkspaceActions, - ManifestWorkspaceView, -} from '@umbraco-cms/backoffice/extension-registry'; +const UMB_LOG_VIEWER_WORKSPACE_ALIAS = 'Umb.Workspace.LogViewer'; -const workspaceAlias = 'Umb.Workspace.LogViewer'; - -const workspace: ManifestWorkspace = { - type: 'workspace', - alias: workspaceAlias, - name: 'LogViewer Root Workspace', - element: () => import('./logviewer-workspace.element.js'), - api: () => import('./logviewer-workspace.context.js'), - meta: { - entityType: 'logviewer', +export const manifests: Array = [ + { + type: 'workspace', + alias: UMB_LOG_VIEWER_WORKSPACE_ALIAS, + name: 'LogViewer Root Workspace', + element: () => import('./logviewer-workspace.element.js'), + api: () => import('./logviewer-workspace.context.js'), + meta: { + entityType: 'logviewer', + }, }, -}; - -const workspaceViews: Array = [ { type: 'workspaceView', alias: 'Umb.WorkspaceView.LogViewer.Overview', @@ -34,7 +25,7 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_LOG_VIEWER_WORKSPACE_ALIAS, }, ], }, @@ -52,15 +43,10 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_LOG_VIEWER_WORKSPACE_ALIAS, }, ], }, -]; - -const workspaceActions: Array = []; - -const modals: Array = [ { type: 'modal', alias: 'Umb.Modal.LogViewer.SaveSearch', @@ -68,5 +54,3 @@ const modals: Array = [ element: () => import('./views/search/components/log-viewer-search-input-modal.element.js'), }, ]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions, ...modals]; diff --git a/src/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.ts b/src/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.ts index 5d2b5bb964..919665e66e 100644 --- a/src/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.ts +++ b/src/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.ts @@ -47,7 +47,7 @@ export class UmbInputMarkdownElement extends UmbFormControlMixin(UmbLitElement, * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content. * @type {boolean} * @attr - * @default false + * @default */ @property({ type: Boolean, reflect: true }) public get readonly() { diff --git a/src/packages/markdown-editor/manifests.ts b/src/packages/markdown-editor/manifests.ts index 1dcd948374..5af1baffdd 100644 --- a/src/packages/markdown-editor/manifests.ts +++ b/src/packages/markdown-editor/manifests.ts @@ -1,4 +1,3 @@ import { manifests as propertyEditors } from './property-editors/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...propertyEditors]; +export const manifests: Array = [...propertyEditors]; diff --git a/src/packages/markdown-editor/property-editors/manifests.ts b/src/packages/markdown-editor/property-editors/manifests.ts index b28dd7595f..abda0e481a 100644 --- a/src/packages/markdown-editor/property-editors/manifests.ts +++ b/src/packages/markdown-editor/property-editors/manifests.ts @@ -1,4 +1,3 @@ import { manifests as markdownManifest } from './markdown-editor/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...markdownManifest]; +export const manifests: Array = [...markdownManifest]; diff --git a/src/packages/markdown-editor/property-editors/markdown-editor/manifests.ts b/src/packages/markdown-editor/property-editors/markdown-editor/manifests.ts index bde0db6793..e0ea049d90 100644 --- a/src/packages/markdown-editor/property-editors/markdown-editor/manifests.ts +++ b/src/packages/markdown-editor/property-editors/markdown-editor/manifests.ts @@ -1,40 +1,40 @@ import { manifest as schemaManifest } from './Umbraco.MarkdownEditor.js'; -import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.MarkdownEditor', - name: 'Markdown Editor Property Editor UI', - js: () => import('./property-editor-ui-markdown-editor.element.js'), - meta: { - label: 'Markdown Editor', - propertyEditorSchemaAlias: 'Umbraco.MarkdownEditor', - icon: 'icon-code', - group: 'richContent', - supportsReadOnly: true, - settings: { - properties: [ - { - alias: 'preview', - label: 'Preview', - description: 'Display a live preview', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', - }, - { - alias: 'defaultValue', - label: 'Default value', - description: 'If value is blank, the editor will show this', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.TextArea', - }, - { - alias: 'overlaySize', - label: 'Overlay Size', - description: 'Select the width of the overlay.', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.OverlaySize', - }, - ], +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.MarkdownEditor', + name: 'Markdown Editor Property Editor UI', + element: () => import('./property-editor-ui-markdown-editor.element.js'), + meta: { + label: 'Markdown Editor', + propertyEditorSchemaAlias: 'Umbraco.MarkdownEditor', + icon: 'icon-code', + group: 'richContent', + supportsReadOnly: true, + settings: { + properties: [ + { + alias: 'preview', + label: 'Preview', + description: 'Display a live preview', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', + }, + { + alias: 'defaultValue', + label: 'Default value', + description: 'If value is blank, the editor will show this', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.TextArea', + }, + { + alias: 'overlaySize', + label: 'Overlay Size', + description: 'Select the width of the overlay.', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.OverlaySize', + }, + ], + }, }, }, -}; - -export const manifests: Array = [manifest, schemaManifest]; + schemaManifest, +]; diff --git a/src/packages/media/imaging/manifests.ts b/src/packages/media/imaging/manifests.ts index c27d00801c..3906b63b4c 100644 --- a/src/packages/media/imaging/manifests.ts +++ b/src/packages/media/imaging/manifests.ts @@ -1,18 +1,16 @@ import { UMB_IMAGING_REPOSITORY_ALIAS, UMB_IMAGING_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_IMAGING_REPOSITORY_ALIAS, - name: 'Imaging Repository', - api: () => import('./imaging.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_IMAGING_STORE_ALIAS, - name: 'Imaging Store', - api: () => import('./imaging.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_IMAGING_REPOSITORY_ALIAS, + name: 'Imaging Repository', + api: () => import('./imaging.repository.js'), + }, + { + type: 'store', + alias: UMB_IMAGING_STORE_ALIAS, + name: 'Imaging Store', + api: () => import('./imaging.store.js'), + }, +]; diff --git a/src/packages/media/manifests.ts b/src/packages/media/manifests.ts index bc2214852f..59bd6819f9 100644 --- a/src/packages/media/manifests.ts +++ b/src/packages/media/manifests.ts @@ -2,9 +2,8 @@ import { manifests as mediaManifests } from './media/manifests.js'; import { manifests as mediaSectionManifests } from './media-section/manifests.js'; import { manifests as mediaTypesManifests } from './media-types/manifests.js'; import { manifests as imagingManifests } from './imaging/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...mediaSectionManifests, ...mediaManifests, ...mediaTypesManifests, diff --git a/src/packages/media/media-section/manifests.ts b/src/packages/media/media-section/manifests.ts index 9e82e42749..3124b312b0 100644 --- a/src/packages/media/media-section/manifests.ts +++ b/src/packages/media/media-section/manifests.ts @@ -1,46 +1,40 @@ import { UMB_MEDIA_ROOT_ENTITY_TYPE, UMB_MEDIA_MENU_ALIAS } from '../media/index.js'; -import type { - ManifestSection, - ManifestSectionSidebarApp, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; const sectionAlias = 'Umb.Section.Media'; -const section: ManifestSection = { - type: 'section', - alias: sectionAlias, - name: 'Media Section', - weight: 900, - meta: { - label: '#sections_media', - pathname: 'media', - }, - conditions: [ - { - alias: 'Umb.Condition.SectionUserPermission', - match: sectionAlias, +export const manifests: Array = [ + { + type: 'section', + alias: sectionAlias, + name: 'Media Section', + weight: 900, + meta: { + label: '#sections_media', + pathname: 'media', }, - ], -}; - -const menuSectionSidebarApp: ManifestSectionSidebarApp = { - type: 'sectionSidebarApp', - kind: 'menuWithEntityActions', - alias: 'Umb.SectionSidebarMenu.Media', - name: 'Media Section Sidebar Menu', - weight: 100, - meta: { - label: '#sections_media', - menu: UMB_MEDIA_MENU_ALIAS, - entityType: UMB_MEDIA_ROOT_ENTITY_TYPE, + conditions: [ + { + alias: 'Umb.Condition.SectionUserPermission', + match: sectionAlias, + }, + ], }, - conditions: [ - { - alias: 'Umb.Condition.SectionAlias', - match: sectionAlias, + { + type: 'sectionSidebarApp', + kind: 'menuWithEntityActions', + alias: 'Umb.SectionSidebarMenu.Media', + name: 'Media Section Sidebar Menu', + weight: 100, + meta: { + label: '#sections_media', + menu: UMB_MEDIA_MENU_ALIAS, + entityType: UMB_MEDIA_ROOT_ENTITY_TYPE, }, - ], -}; - -export const manifests: Array = [section, menuSectionSidebarApp]; + conditions: [ + { + alias: 'Umb.Condition.SectionAlias', + match: sectionAlias, + }, + ], + }, +]; diff --git a/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts b/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts index 0adcf8212a..fe3e33c4a0 100644 --- a/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts +++ b/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts @@ -4,7 +4,7 @@ import { css, html, customElement, property, state, repeat, nothing } from '@umb import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; diff --git a/src/packages/media/media-types/entity-actions/create/manifests.ts b/src/packages/media/media-types/entity-actions/create/manifests.ts index 24072887e7..b87893666e 100644 --- a/src/packages/media/media-types/entity-actions/create/manifests.ts +++ b/src/packages/media/media-types/entity-actions/create/manifests.ts @@ -3,9 +3,8 @@ import { UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -17,6 +16,7 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { @@ -26,5 +26,3 @@ const entityActions: Array = [ element: () => import('./modal/media-type-create-options-modal.element.js'), }, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/media/media-types/entity-actions/duplicate/manifests.ts b/src/packages/media/media-types/entity-actions/duplicate/manifests.ts index 17d3a8af44..ca866fadae 100644 --- a/src/packages/media/media-types/entity-actions/duplicate/manifests.ts +++ b/src/packages/media/media-types/entity-actions/duplicate/manifests.ts @@ -2,9 +2,8 @@ import { UMB_MEDIA_TYPE_ENTITY_TYPE } from '../../entity.js'; import { UMB_MEDIA_TYPE_TREE_ALIAS, UMB_MEDIA_TYPE_TREE_REPOSITORY_ALIAS } from '../../tree/index.js'; import { UMB_DUPLICATE_MEDIA_TYPE_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'duplicateTo', @@ -18,6 +17,5 @@ const entityActions: Array = [ foldersOnly: true, }, }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/media/media-types/entity-actions/duplicate/repository/manifests.ts b/src/packages/media/media-types/entity-actions/duplicate/repository/manifests.ts index 0d114294d9..af55f7bfd7 100644 --- a/src/packages/media/media-types/entity-actions/duplicate/repository/manifests.ts +++ b/src/packages/media/media-types/entity-actions/duplicate/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_DUPLICATE_MEDIA_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const duplicateRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DUPLICATE_MEDIA_TYPE_REPOSITORY_ALIAS, - name: 'Duplicate Media Type Repository', - api: () => import('./media-type-duplicate.repository.js'), -}; - -export const manifests: Array = [duplicateRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DUPLICATE_MEDIA_TYPE_REPOSITORY_ALIAS, + name: 'Duplicate Media Type Repository', + api: () => import('./media-type-duplicate.repository.js'), + }, +]; diff --git a/src/packages/media/media-types/entity-actions/export/manifests.ts b/src/packages/media/media-types/entity-actions/export/manifests.ts index a879adb201..7c6b768ea0 100644 --- a/src/packages/media/media-types/entity-actions/export/manifests.ts +++ b/src/packages/media/media-types/entity-actions/export/manifests.ts @@ -1,8 +1,7 @@ import { UMB_MEDIA_TYPE_ENTITY_TYPE } from '../../entity.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -13,8 +12,8 @@ const entityActions: Array = [ meta: { icon: 'icon-download-alt', label: '#actions_export', + additionalOptions: true, }, }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/media/media-types/entity-actions/export/repository/manifests.ts b/src/packages/media/media-types/entity-actions/export/repository/manifests.ts index e2b0c96286..7a46f2bb38 100644 --- a/src/packages/media/media-types/entity-actions/export/repository/manifests.ts +++ b/src/packages/media/media-types/entity-actions/export/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_EXPORT_MEDIA_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const exportRepository: ManifestRepository = { - type: 'repository', - alias: UMB_EXPORT_MEDIA_TYPE_REPOSITORY_ALIAS, - name: 'Export Media Type Repository', - api: () => import('./media-type-export.repository.js'), -}; - -export const manifests: Array = [exportRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_EXPORT_MEDIA_TYPE_REPOSITORY_ALIAS, + name: 'Export Media Type Repository', + api: () => import('./media-type-export.repository.js'), + }, +]; diff --git a/src/packages/media/media-types/entity-actions/import/manifests.ts b/src/packages/media/media-types/entity-actions/import/manifests.ts index ccf24cd365..85974f6c14 100644 --- a/src/packages/media/media-types/entity-actions/import/manifests.ts +++ b/src/packages/media/media-types/entity-actions/import/manifests.ts @@ -1,9 +1,8 @@ import { UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE } from '../../entity.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as modalManifests } from './modal/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -14,8 +13,9 @@ const entityActions: Array = [ meta: { icon: 'icon-page-up', label: '#actions_import', + additionalOptions: true, }, }, + ...repositoryManifests, + ...modalManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests, ...modalManifests]; diff --git a/src/packages/media/media-types/entity-actions/import/repository/manifests.ts b/src/packages/media/media-types/entity-actions/import/repository/manifests.ts index d1dd143c9c..a4f6cf654f 100644 --- a/src/packages/media/media-types/entity-actions/import/repository/manifests.ts +++ b/src/packages/media/media-types/entity-actions/import/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MEDIA_TYPE_IMPORT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const importRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_TYPE_IMPORT_REPOSITORY_ALIAS, - name: 'Import Media Type Repository', - api: () => import('./media-type-import.repository.js'), -}; - -export const manifests: Array = [importRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_TYPE_IMPORT_REPOSITORY_ALIAS, + name: 'Import Media Type Repository', + api: () => import('./media-type-import.repository.js'), + }, +]; diff --git a/src/packages/media/media-types/entity-actions/manifests.ts b/src/packages/media/media-types/entity-actions/manifests.ts index 8304c96731..90688ac48b 100644 --- a/src/packages/media/media-types/entity-actions/manifests.ts +++ b/src/packages/media/media-types/entity-actions/manifests.ts @@ -5,9 +5,8 @@ import { manifests as moveManifests } from './move-to/manifests.js'; import { manifests as duplicateManifests } from './duplicate/manifests.js'; import { manifests as exportManifests } from './export/manifests.js'; import { manifests as importManifests } from './import/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'delete', @@ -19,10 +18,6 @@ const entityActions: Array = [ itemRepositoryAlias: UMB_MEDIA_TYPE_ITEM_REPOSITORY_ALIAS, }, }, -]; - -export const manifests: Array = [ - ...entityActions, ...createManifests, ...moveManifests, ...duplicateManifests, diff --git a/src/packages/media/media-types/entity-actions/move-to/manifests.ts b/src/packages/media/media-types/entity-actions/move-to/manifests.ts index c4f51b4a59..dfed5790b5 100644 --- a/src/packages/media/media-types/entity-actions/move-to/manifests.ts +++ b/src/packages/media/media-types/entity-actions/move-to/manifests.ts @@ -2,9 +2,8 @@ import { UMB_MEDIA_TYPE_ENTITY_TYPE } from '../../entity.js'; import { UMB_MEDIA_TYPE_TREE_REPOSITORY_ALIAS, UMB_MEDIA_TYPE_TREE_ALIAS } from '../../tree/index.js'; import { UMB_MOVE_MEDIA_TYPE_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'moveTo', @@ -18,6 +17,5 @@ const entityActions: Array = [ foldersOnly: true, }, }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/media/media-types/entity-actions/move-to/repository/manifests.ts b/src/packages/media/media-types/entity-actions/move-to/repository/manifests.ts index 93d272a326..5dd6ceb7c2 100644 --- a/src/packages/media/media-types/entity-actions/move-to/repository/manifests.ts +++ b/src/packages/media/media-types/entity-actions/move-to/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MOVE_MEDIA_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const moveRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MOVE_MEDIA_TYPE_REPOSITORY_ALIAS, - name: 'Move Media Type Repository', - api: () => import('./media-type-move.repository.js'), -}; - -export const manifests: Array = [moveRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MOVE_MEDIA_TYPE_REPOSITORY_ALIAS, + name: 'Move Media Type Repository', + api: () => import('./media-type-move.repository.js'), + }, +]; diff --git a/src/packages/media/media-types/manifests.ts b/src/packages/media/media-types/manifests.ts index 79205a27bc..5494051b0a 100644 --- a/src/packages/media/media-types/manifests.ts +++ b/src/packages/media/media-types/manifests.ts @@ -5,9 +5,8 @@ import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as propertyEditorUiManifests } from './property-editors/manifests.js'; import { manifests as searchManifests } from './search/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...entityActionsManifests, ...menuManifests, ...repositoryManifests, diff --git a/src/packages/media/media-types/menu/manifests.ts b/src/packages/media/media-types/menu/manifests.ts index 7433e0a9b7..db67666029 100644 --- a/src/packages/media/media-types/menu/manifests.ts +++ b/src/packages/media/media-types/menu/manifests.ts @@ -1,7 +1,6 @@ import { UMB_MEDIA_TYPE_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/packages/media/media-types/repository/composition/manifests.ts b/src/packages/media/media-types/repository/composition/manifests.ts index 16ad5b903c..d7f659ebd1 100644 --- a/src/packages/media/media-types/repository/composition/manifests.ts +++ b/src/packages/media/media-types/repository/composition/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_MEDIA_TYPE_COMPOSITION_REPOSITORY_ALIAS = 'Umb.Repository.MediaType.Composition'; -const compositionRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_TYPE_COMPOSITION_REPOSITORY_ALIAS, - name: 'Media Type Composition Repository', - api: () => import('./media-type-composition.repository.js'), -}; - -export const manifests: Array = [compositionRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_TYPE_COMPOSITION_REPOSITORY_ALIAS, + name: 'Media Type Composition Repository', + api: () => import('./media-type-composition.repository.js'), + }, +]; diff --git a/src/packages/media/media-types/repository/detail/manifests.ts b/src/packages/media/media-types/repository/detail/manifests.ts index ba39dc22e6..3b2388d72c 100644 --- a/src/packages/media/media-types/repository/detail/manifests.ts +++ b/src/packages/media/media-types/repository/detail/manifests.ts @@ -1,18 +1,16 @@ import { UMB_MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS, UMB_MEDIA_TYPE_DETAIL_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const detailRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS, - name: 'Media Types Repository', - api: () => import('./media-type-detail.repository.js'), -}; - -const detailStore: ManifestStore = { - type: 'store', - alias: UMB_MEDIA_TYPE_DETAIL_STORE_ALIAS, - name: 'Media Type Store', - api: () => import('./media-type-detail.store.js'), -}; - -export const manifests: Array = [detailRepository, detailStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS, + name: 'Media Types Repository', + api: () => import('./media-type-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_MEDIA_TYPE_DETAIL_STORE_ALIAS, + name: 'Media Type Store', + api: () => import('./media-type-detail.store.js'), + }, +]; diff --git a/src/packages/media/media-types/repository/item/manifests.ts b/src/packages/media/media-types/repository/item/manifests.ts index 2b32156a60..ccd8d0d9e1 100644 --- a/src/packages/media/media-types/repository/item/manifests.ts +++ b/src/packages/media/media-types/repository/item/manifests.ts @@ -1,18 +1,16 @@ import { UMB_MEDIA_TYPE_ITEM_REPOSITORY_ALIAS, UMB_MEDIA_TYPE_ITEM_STORE_ALIAS } from './constants.js'; -import type { ManifestItemStore, ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_TYPE_ITEM_REPOSITORY_ALIAS, - name: 'Media Type Item Repository', - api: () => import('./media-type-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_MEDIA_TYPE_ITEM_STORE_ALIAS, - name: 'Media Type Item Store', - api: () => import('./media-type-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_TYPE_ITEM_REPOSITORY_ALIAS, + name: 'Media Type Item Repository', + api: () => import('./media-type-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_MEDIA_TYPE_ITEM_STORE_ALIAS, + name: 'Media Type Item Store', + api: () => import('./media-type-item.store.js'), + }, +]; diff --git a/src/packages/media/media-types/repository/manifests.ts b/src/packages/media/media-types/repository/manifests.ts index ce74b2570d..e1ab3e2a72 100644 --- a/src/packages/media/media-types/repository/manifests.ts +++ b/src/packages/media/media-types/repository/manifests.ts @@ -1,6 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as compositionManifests } from './composition/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests, ...compositionManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests, ...compositionManifests]; diff --git a/src/packages/media/media-types/repository/structure/manifests.ts b/src/packages/media/media-types/repository/structure/manifests.ts index e705c8039c..2164ace880 100644 --- a/src/packages/media/media-types/repository/structure/manifests.ts +++ b/src/packages/media/media-types/repository/structure/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MEDIA_TYPE_STRUCTURE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const structureRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_TYPE_STRUCTURE_REPOSITORY_ALIAS, - name: 'Media Type Structure Repository', - api: () => import('./media-type-structure.repository.js'), -}; - -export const manifests: Array = [structureRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_TYPE_STRUCTURE_REPOSITORY_ALIAS, + name: 'Media Type Structure Repository', + api: () => import('./media-type-structure.repository.js'), + }, +]; diff --git a/src/packages/media/media-types/search/manifests.ts b/src/packages/media/media-types/search/manifests.ts index b077dfb5be..649b46b431 100644 --- a/src/packages/media/media-types/search/manifests.ts +++ b/src/packages/media/media-types/search/manifests.ts @@ -1,7 +1,6 @@ import { UMB_MEDIA_TYPE_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { name: 'Media Type Search Provider', alias: 'Umb.SearchProvider.MediaType', diff --git a/src/packages/media/media-types/tree/folder/manifests.ts b/src/packages/media/media-types/tree/folder/manifests.ts index 7a3046a41d..7080f51dfd 100644 --- a/src/packages/media/media-types/tree/folder/manifests.ts +++ b/src/packages/media/media-types/tree/folder/manifests.ts @@ -1,19 +1,13 @@ import { UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE } from '../../entity.js'; import { UMB_MEDIA_TYPE_FOLDER_REPOSITORY_ALIAS } from './constants.js'; -import type { - ManifestEntityAction, - ManifestRepository, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const folderRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_TYPE_FOLDER_REPOSITORY_ALIAS, - name: 'Media Type Folder Repository', - api: () => import('./media-type-folder.repository.js'), -}; - -const entityActions: Array = [ +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_TYPE_FOLDER_REPOSITORY_ALIAS, + name: 'Media Type Folder Repository', + api: () => import('./media-type-folder.repository.js'), + }, { type: 'entityAction', kind: 'folderUpdate', @@ -35,5 +29,3 @@ const entityActions: Array = [ }, }, ]; - -export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/packages/media/media-types/tree/manifests.ts b/src/packages/media/media-types/tree/manifests.ts index faec390c88..9f9f7a5b48 100644 --- a/src/packages/media/media-types/tree/manifests.ts +++ b/src/packages/media/media-types/tree/manifests.ts @@ -10,51 +10,36 @@ import { } from './constants.js'; import { manifests as folderManifests } from './folder/manifests.js'; import { manifests as reloadTreeItemChildrenManifest } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_TYPE_TREE_REPOSITORY_ALIAS, - name: 'Media Type Tree Repository', - api: () => import('./media-type-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_MEDIA_TYPE_TREE_STORE_ALIAS, - name: 'Media Type Tree Store', - api: () => import('./media-type-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_MEDIA_TYPE_TREE_ALIAS, - name: 'Media Type Tree', - meta: { - repositoryAlias: UMB_MEDIA_TYPE_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_TYPE_TREE_REPOSITORY_ALIAS, + name: 'Media Type Tree Repository', + api: () => import('./media-type-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_MEDIA_TYPE_TREE_STORE_ALIAS, + name: 'Media Type Tree Store', + api: () => import('./media-type-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_MEDIA_TYPE_TREE_ALIAS, + name: 'Media Type Tree', + meta: { + repositoryAlias: UMB_MEDIA_TYPE_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.MediaType', + name: 'Media Type Tree Item', + forEntityTypes: [UMB_MEDIA_TYPE_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.MediaType', - name: 'Media Type Tree Item', - forEntityTypes: [UMB_MEDIA_TYPE_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...folderManifests, ...reloadTreeItemChildrenManifest, ]; diff --git a/src/packages/media/media-types/tree/reload-tree-item-children/manifests.ts b/src/packages/media/media-types/tree/reload-tree-item-children/manifests.ts index a5bbd2ac9e..2ca957e9bf 100644 --- a/src/packages/media/media-types/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/media/media-types/tree/reload-tree-item-children/manifests.ts @@ -3,9 +3,8 @@ import { UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/media/media-types/workspace/manifests.ts b/src/packages/media/media-types/workspace/manifests.ts index 01293d0d96..55c5dd0374 100644 --- a/src/packages/media/media-types/workspace/manifests.ts +++ b/src/packages/media/media-types/workspace/manifests.ts @@ -1,26 +1,19 @@ import { UMB_MEDIA_TYPE_COMPOSITION_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_MEDIA_TYPE_WORKSPACE_ALIAS } from './constants.js'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceViews, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: UMB_MEDIA_TYPE_WORKSPACE_ALIAS, - name: 'Media Type Workspace', - api: () => import('./media-type-workspace.context.js'), - meta: { - entityType: 'media-type', +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_MEDIA_TYPE_WORKSPACE_ALIAS, + name: 'Media Type Workspace', + api: () => import('./media-type-workspace.context.js'), + meta: { + entityType: 'media-type', + }, }, -}; - -const workspaceViews: Array = [ { type: 'workspaceView', kind: 'contentTypeDesignEditor', @@ -35,7 +28,7 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_MEDIA_TYPE_WORKSPACE_ALIAS, }, ], }, @@ -53,13 +46,10 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_MEDIA_TYPE_WORKSPACE_ALIAS, }, ], }, -]; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -74,10 +64,8 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_MEDIA_TYPE_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/packages/media/media-types/workspace/media-type-workspace-editor.element.ts b/src/packages/media/media-types/workspace/media-type-workspace-editor.element.ts index 1f9d3c0556..2a70489df8 100644 --- a/src/packages/media/media-types/workspace/media-type-workspace-editor.element.ts +++ b/src/packages/media/media-types/workspace/media-type-workspace-editor.element.ts @@ -2,7 +2,8 @@ import type { UmbMediaTypeWorkspaceContext } from './media-type-workspace.contex import { UMB_MEDIA_TYPE_WORKSPACE_CONTEXT } from './media-type-workspace.context-token.js'; import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_ICON_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; import type { UmbInputWithAliasElement } from '@umbraco-cms/backoffice/components'; import type { UUITextareaElement } from '@umbraco-cms/backoffice/external/uui'; diff --git a/src/packages/media/media-types/workspace/views/structure/media-type-workspace-view-structure.element.ts b/src/packages/media/media-types/workspace/views/structure/media-type-workspace-view-structure.element.ts index 1d6f7d7183..ba60a98308 100644 --- a/src/packages/media/media-types/workspace/views/structure/media-type-workspace-view-structure.element.ts +++ b/src/packages/media/media-types/workspace/views/structure/media-type-workspace-view-structure.element.ts @@ -6,7 +6,7 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbContentTypeSortModel } from '@umbraco-cms/backoffice/content-type'; import type { UmbInputCollectionConfigurationElement } from '@umbraco-cms/backoffice/components'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import type { UUIToggleElement } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-media-type-workspace-view-structure') diff --git a/src/packages/media/media/collection/action/create-media-collection-action.element.ts b/src/packages/media/media/collection/action/create-media-collection-action.element.ts index 349aef3f0d..5ae5b98f3a 100644 --- a/src/packages/media/media/collection/action/create-media-collection-action.element.ts +++ b/src/packages/media/media/collection/action/create-media-collection-action.element.ts @@ -5,9 +5,9 @@ import { UMB_MEDIA_ENTITY_TYPE, UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../entity. import { html, customElement, property, state, map } from '@umbraco-cms/backoffice/external/lit'; import { UmbMediaTypeStructureRepository } from '@umbraco-cms/backoffice/media-type'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; -import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/collection'; import type { UmbAllowedMediaTypeModel } from '@umbraco-cms/backoffice/media-type'; @customElement('umb-create-media-collection-action') diff --git a/src/packages/media/media/collection/action/manifests.ts b/src/packages/media/media/collection/action/manifests.ts index fba02fde58..0ee41ec6a8 100644 --- a/src/packages/media/media/collection/action/manifests.ts +++ b/src/packages/media/media/collection/action/manifests.ts @@ -1,22 +1,21 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const createManifest: ManifestCollectionAction = { - type: 'collectionAction', - kind: 'button', - name: 'Create Media Collection Action', - alias: 'Umb.CollectionAction.Media.Create', - element: () => import('./create-media-collection-action.element.js'), - weight: 100, - meta: { - label: '#general_create', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Media', +export const manifests: Array = [ + { + type: 'collectionAction', + kind: 'button', + name: 'Create Media Collection Action', + alias: 'Umb.CollectionAction.Media.Create', + element: () => import('./create-media-collection-action.element.js'), + weight: 100, + meta: { + label: '#general_create', }, - ], -}; - -export const manifests: Array = [createManifest]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Media', + }, + ], + }, +]; diff --git a/src/packages/media/media/collection/manifests.ts b/src/packages/media/media/collection/manifests.ts index 876abdb9d0..381f392247 100644 --- a/src/packages/media/media/collection/manifests.ts +++ b/src/packages/media/media/collection/manifests.ts @@ -3,21 +3,18 @@ import { manifests as collectionActionManifests } from './action/manifests.js'; import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; import { manifests as collectionViewManifests } from './views/manifests.js'; import { UMB_MEDIA_COLLECTION_ALIAS } from './index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const collectionManifest: ManifestTypes = { - type: 'collection', - alias: UMB_MEDIA_COLLECTION_ALIAS, - name: 'Media Collection', - api: () => import('./media-collection.context.js'), - element: () => import('./media-collection.element.js'), - meta: { - repositoryAlias: UMB_MEDIA_COLLECTION_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'collection', + alias: UMB_MEDIA_COLLECTION_ALIAS, + name: 'Media Collection', + api: () => import('./media-collection.context.js'), + element: () => import('./media-collection.element.js'), + meta: { + repositoryAlias: UMB_MEDIA_COLLECTION_REPOSITORY_ALIAS, + }, }, -}; - -export const manifests: Array = [ - collectionManifest, ...collectionActionManifests, ...collectionRepositoryManifests, ...collectionViewManifests, diff --git a/src/packages/media/media/collection/repository/manifests.ts b/src/packages/media/media/collection/repository/manifests.ts index ea1cbd3387..351e74764b 100644 --- a/src/packages/media/media/collection/repository/manifests.ts +++ b/src/packages/media/media/collection/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MEDIA_COLLECTION_REPOSITORY_ALIAS } from './index.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const collectionRepositoryManifest: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_COLLECTION_REPOSITORY_ALIAS, - name: 'Media Collection Repository', - api: () => import('./media-collection.repository.js'), -}; - -export const manifests: Array = [collectionRepositoryManifest]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_COLLECTION_REPOSITORY_ALIAS, + name: 'Media Collection Repository', + api: () => import('./media-collection.repository.js'), + }, +]; diff --git a/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts b/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts index 27042a9738..a333c4598c 100644 --- a/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts +++ b/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts @@ -5,7 +5,7 @@ import { UMB_MEDIA_COLLECTION_CONTEXT } from '../../media-collection.context-tok import { css, customElement, html, nothing, repeat, state, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import '@umbraco-cms/backoffice/imaging'; diff --git a/src/packages/media/media/collection/views/manifests.ts b/src/packages/media/media/collection/views/manifests.ts index 1f82ccba39..7ea3618b7b 100644 --- a/src/packages/media/media/collection/views/manifests.ts +++ b/src/packages/media/media/collection/views/manifests.ts @@ -1,43 +1,41 @@ import { UMB_MEDIA_GRID_COLLECTION_VIEW_ALIAS, UMB_MEDIA_TABLE_COLLECTION_VIEW_ALIAS } from './index.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const gridViewManifest: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_MEDIA_GRID_COLLECTION_VIEW_ALIAS, - name: 'Media Grid Collection View', - element: () => import('./grid/media-grid-collection-view.element.js'), - weight: 300, - meta: { - label: 'Grid', - icon: 'icon-grid', - pathName: 'grid', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Media', +export const manifests: Array = [ + { + type: 'collectionView', + alias: UMB_MEDIA_GRID_COLLECTION_VIEW_ALIAS, + name: 'Media Grid Collection View', + element: () => import('./grid/media-grid-collection-view.element.js'), + weight: 300, + meta: { + label: 'Grid', + icon: 'icon-grid', + pathName: 'grid', }, - ], -}; - -const tableViewManifest: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_MEDIA_TABLE_COLLECTION_VIEW_ALIAS, - name: 'Media Table Collection View', - element: () => import('./table/media-table-collection-view.element.js'), - weight: 200, - meta: { - label: 'Table', - icon: 'icon-list', - pathName: 'table', + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Media', + }, + ], }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Media', + { + type: 'collectionView', + alias: UMB_MEDIA_TABLE_COLLECTION_VIEW_ALIAS, + name: 'Media Table Collection View', + element: () => import('./table/media-table-collection-view.element.js'), + weight: 200, + meta: { + label: 'Table', + icon: 'icon-list', + pathName: 'table', }, - ], -}; - -export const manifests: Array = [gridViewManifest, tableViewManifest]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Media', + }, + ], + }, +]; diff --git a/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts b/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts index 0c301d18f4..7f31f2cb0c 100644 --- a/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts +++ b/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts @@ -14,7 +14,7 @@ import type { UmbTableOrderedEvent, UmbTableSelectedEvent, } from '@umbraco-cms/backoffice/components'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController, type UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router'; import './column-layouts/media-table-column-name.element.js'; diff --git a/src/packages/media/media/components/input-media/input-media.element.ts b/src/packages/media/media/components/input-media/input-media.element.ts index b6cbe7a4ef..7a33b3de12 100644 --- a/src/packages/media/media/components/input-media/input-media.element.ts +++ b/src/packages/media/media/components/input-media/input-media.element.ts @@ -16,7 +16,7 @@ import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; import '@umbraco-cms/backoffice/imaging'; diff --git a/src/packages/media/media/components/input-rich-media/input-rich-media.element.ts b/src/packages/media/media/components/input-rich-media/input-rich-media.element.ts index 1e705d6de7..4c54e71f50 100644 --- a/src/packages/media/media/components/input-rich-media/input-rich-media.element.ts +++ b/src/packages/media/media/components/input-rich-media/input-rich-media.element.ts @@ -154,7 +154,7 @@ export class UmbInputRichMediaElement extends UUIFormControlMixin(UmbLitElement, * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content. * @type {boolean} * @attr - * @default false + * @default */ @property({ type: Boolean, reflect: true }) public get readonly() { diff --git a/src/packages/media/media/dropzone/dropzone-manager.class.ts b/src/packages/media/media/dropzone/dropzone-manager.class.ts index 8e397f05cd..e075925700 100644 --- a/src/packages/media/media/dropzone/dropzone-manager.class.ts +++ b/src/packages/media/media/dropzone/dropzone-manager.class.ts @@ -224,6 +224,7 @@ export class UmbDropzoneManager extends UmbControllerBase { if (upload.status === TemporaryFileStatus.SUCCESS) { // Upload successful. Create media item. + // TODO: Use a scaffolding feature to ensure consistency. [NL] const preset: Partial = { unique: file.unique, mediaType: { @@ -241,6 +242,8 @@ export class UmbDropzoneManager extends UmbControllerBase { ], values: [ { + // We do not need to parse the right editorAlias here, because the server does not read it. If we need to parse it we would need to load the contentType to make this happen properly. [NL] + //editorAlias: null as any, alias: 'umbracoFile', value: { temporaryFileId: upload.temporaryUnique }, culture: null, diff --git a/src/packages/media/media/dropzone/modals/manifests.ts b/src/packages/media/media/dropzone/modals/manifests.ts index e6500d5a4e..6ca87a3e69 100644 --- a/src/packages/media/media/dropzone/modals/manifests.ts +++ b/src/packages/media/media/dropzone/modals/manifests.ts @@ -1,12 +1,8 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.Dropzone.MediaTypePicker', name: 'Dropzone Media Type Picker Modal', - js: () => import('./dropzone-media-type-picker/dropzone-media-type-picker-modal.element.js'), + element: () => import('./dropzone-media-type-picker/dropzone-media-type-picker-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/media/media/entity-actions/create/manifests.ts b/src/packages/media/media/entity-actions/create/manifests.ts index 3120dec67d..7572bca3eb 100644 --- a/src/packages/media/media/entity-actions/create/manifests.ts +++ b/src/packages/media/media/entity-actions/create/manifests.ts @@ -1,8 +1,7 @@ import { UMB_MEDIA_ENTITY_TYPE, UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../entity.js'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -14,6 +13,7 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, conditions: [ { @@ -21,9 +21,6 @@ const entityActions: Array = [ }, ], }, -]; - -const modals: Array = [ { type: 'modal', alias: 'Umb.Modal.Media.CreateOptions', @@ -31,5 +28,3 @@ const modals: Array = [ element: () => import('./media-create-options-modal.element.js'), }, ]; - -export const manifests: Array = [...entityActions, ...modals]; diff --git a/src/packages/media/media/entity-actions/manifests.ts b/src/packages/media/media/entity-actions/manifests.ts index 4e8dfc0cde..98d953d33b 100644 --- a/src/packages/media/media/entity-actions/manifests.ts +++ b/src/packages/media/media/entity-actions/manifests.ts @@ -3,10 +3,9 @@ import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js'; import { manifests as createManifests } from './create/manifests.js'; import { manifests as moveManifests } from './move-to/manifests.js'; import { manifests as sortChildrenOfManifests } from './sort-children-of/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ENTITY_IS_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -const entityActions: Array = [ +export const manifests: Array = [ ...createManifests, { type: 'entityAction', @@ -24,6 +23,6 @@ const entityActions: Array = [ }, ], }, + ...moveManifests, + ...sortChildrenOfManifests, ]; - -export const manifests: Array = [...entityActions, ...moveManifests, ...sortChildrenOfManifests]; diff --git a/src/packages/media/media/entity-actions/move-to/manifests.ts b/src/packages/media/media/entity-actions/move-to/manifests.ts index 53da2d5484..189ce03839 100644 --- a/src/packages/media/media/entity-actions/move-to/manifests.ts +++ b/src/packages/media/media/entity-actions/move-to/manifests.ts @@ -3,9 +3,8 @@ import { UMB_MEDIA_TREE_REPOSITORY_ALIAS, UMB_MEDIA_TREE_ALIAS } from '../../tre import { UMB_MOVE_MEDIA_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'moveTo', @@ -23,6 +22,5 @@ const entityActions: Array = [ }, ], }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/media/media/entity-actions/move-to/repository/manifests.ts b/src/packages/media/media/entity-actions/move-to/repository/manifests.ts index ec24073a2a..15087e8b6f 100644 --- a/src/packages/media/media/entity-actions/move-to/repository/manifests.ts +++ b/src/packages/media/media/entity-actions/move-to/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MOVE_MEDIA_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const moveRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MOVE_MEDIA_REPOSITORY_ALIAS, - name: 'Move Media Repository', - api: () => import('./media-move.repository.js'), -}; - -export const manifests: Array = [moveRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MOVE_MEDIA_REPOSITORY_ALIAS, + name: 'Move Media Repository', + api: () => import('./media-move.repository.js'), + }, +]; diff --git a/src/packages/media/media/entity-actions/sort-children-of/manifests.ts b/src/packages/media/media/entity-actions/sort-children-of/manifests.ts index 9582500380..836ad27d37 100644 --- a/src/packages/media/media/entity-actions/sort-children-of/manifests.ts +++ b/src/packages/media/media/entity-actions/sort-children-of/manifests.ts @@ -4,9 +4,8 @@ import { UMB_MEDIA_TREE_REPOSITORY_ALIAS } from '../../tree/index.js'; import { UMB_SORT_CHILDREN_OF_MEDIA_REPOSITORY_ALIAS } from './repository/constants.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...repositoryManifests, { type: 'entityAction', diff --git a/src/packages/media/media/entity-actions/sort-children-of/repository/manifests.ts b/src/packages/media/media/entity-actions/sort-children-of/repository/manifests.ts index 4a1c50fce1..d00f8bc9cf 100644 --- a/src/packages/media/media/entity-actions/sort-children-of/repository/manifests.ts +++ b/src/packages/media/media/entity-actions/sort-children-of/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_SORT_CHILDREN_OF_MEDIA_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_SORT_CHILDREN_OF_MEDIA_REPOSITORY_ALIAS, - name: 'Sort Children Of Media Repository', - api: () => import('./sort-children-of.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_SORT_CHILDREN_OF_MEDIA_REPOSITORY_ALIAS, + name: 'Sort Children Of Media Repository', + api: () => import('./sort-children-of.repository.js'), + }, +]; diff --git a/src/packages/media/media/entity-bulk-actions/manifests.ts b/src/packages/media/media/entity-bulk-actions/manifests.ts index 805c692d8e..4930ca0530 100644 --- a/src/packages/media/media/entity-bulk-actions/manifests.ts +++ b/src/packages/media/media/entity-bulk-actions/manifests.ts @@ -1,5 +1,4 @@ import { manifests as moveToManifests } from './move-to/manifests.js'; import { manifests as trashManifests } from './trash/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...moveToManifests, ...trashManifests]; +export const manifests: Array = [...moveToManifests, ...trashManifests]; diff --git a/src/packages/media/media/entity-bulk-actions/move-to/manifests.ts b/src/packages/media/media/entity-bulk-actions/move-to/manifests.ts index a482026403..5eee5ec464 100644 --- a/src/packages/media/media/entity-bulk-actions/move-to/manifests.ts +++ b/src/packages/media/media/entity-bulk-actions/move-to/manifests.ts @@ -8,9 +8,8 @@ import { UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, } from '@umbraco-cms/backoffice/collection'; import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const bulkMoveAction: ManifestTypes = { +const bulkMoveAction: UmbExtensionManifest = { type: 'entityBulkAction', kind: 'moveTo', alias: 'Umb.EntityBulkAction.Media.MoveTo', @@ -33,4 +32,4 @@ const bulkMoveAction: ManifestTypes = { ], }; -export const manifests: Array = [bulkMoveAction, ...repositoryManifests]; +export const manifests: Array = [bulkMoveAction, ...repositoryManifests]; diff --git a/src/packages/media/media/entity-bulk-actions/move-to/repository/manifests.ts b/src/packages/media/media/entity-bulk-actions/move-to/repository/manifests.ts index 7f5b2ddb41..877e47042d 100644 --- a/src/packages/media/media/entity-bulk-actions/move-to/repository/manifests.ts +++ b/src/packages/media/media/entity-bulk-actions/move-to/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const bulkMoveRepository: ManifestRepository = { - type: 'repository', - alias: UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS, - name: 'Bulk Move Media Repository', - api: () => import('./move-to.repository.js'), -}; - -export const manifests: Array = [bulkMoveRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS, + name: 'Bulk Move Media Repository', + api: () => import('./move-to.repository.js'), + }, +]; diff --git a/src/packages/media/media/entity-bulk-actions/trash/manifests.ts b/src/packages/media/media/entity-bulk-actions/trash/manifests.ts index 6df781b6b4..3576dca033 100644 --- a/src/packages/media/media/entity-bulk-actions/trash/manifests.ts +++ b/src/packages/media/media/entity-bulk-actions/trash/manifests.ts @@ -6,10 +6,9 @@ import { UMB_COLLECTION_ALIAS_CONDITION, UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; -const bulkTrashAction: ManifestTypes = { +const bulkTrashAction: UmbExtensionManifest = { type: 'entityBulkAction', kind: 'trash', alias: 'Umb.EntityBulkAction.Media.Trash', @@ -31,4 +30,4 @@ const bulkTrashAction: ManifestTypes = { ], }; -export const manifests: Array = [bulkTrashAction, ...repositoryManifests]; +export const manifests: Array = [bulkTrashAction, ...repositoryManifests]; diff --git a/src/packages/media/media/entity-bulk-actions/trash/repository/manifests.ts b/src/packages/media/media/entity-bulk-actions/trash/repository/manifests.ts index 7f18a39a56..1497fadf72 100644 --- a/src/packages/media/media/entity-bulk-actions/trash/repository/manifests.ts +++ b/src/packages/media/media/entity-bulk-actions/trash/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const bulkTrashRepository: ManifestRepository = { - type: 'repository', - alias: UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS, - name: 'Bulk Trash Media Repository', - api: () => import('./trash.repository.js'), -}; - -export const manifests: Array = [bulkTrashRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS, + name: 'Bulk Trash Media Repository', + api: () => import('./trash.repository.js'), + }, +]; diff --git a/src/packages/media/media/manifests.ts b/src/packages/media/media/manifests.ts index c63a81573f..57bb6b4be0 100644 --- a/src/packages/media/media/manifests.ts +++ b/src/packages/media/media/manifests.ts @@ -12,9 +12,8 @@ import { manifests as sectionViewManifests } from './section-view/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as fileUploadPreviewManifests } from './components/input-upload-field/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...collectionManifests, ...dropzoneManifests, ...entityActionsManifests, diff --git a/src/packages/media/media/menu/manifests.ts b/src/packages/media/media/menu/manifests.ts index 934b61eea2..c1114d7815 100644 --- a/src/packages/media/media/menu/manifests.ts +++ b/src/packages/media/media/menu/manifests.ts @@ -1,8 +1,7 @@ import { UMB_MEDIA_TREE_ALIAS } from '../tree/index.js'; import { UMB_MEDIA_MENU_ALIAS } from './constants.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menu', alias: UMB_MEDIA_MENU_ALIAS, diff --git a/src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.element.ts b/src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.element.ts index 846e26822c..33a7bbfa08 100644 --- a/src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.element.ts +++ b/src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.element.ts @@ -9,7 +9,8 @@ import type { } from './image-cropper-editor-modal.token.js'; import { css, customElement, html, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_WORKSPACE_MODAL, UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT, UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; import './components/image-cropper-editor-field.element.js'; diff --git a/src/packages/media/media/property-editors/image-cropper/manifests.ts b/src/packages/media/media/property-editors/image-cropper/manifests.ts index dfd31736c4..834fe6375d 100644 --- a/src/packages/media/media/property-editors/image-cropper/manifests.ts +++ b/src/packages/media/media/property-editors/image-cropper/manifests.ts @@ -1,17 +1,17 @@ import { manifest as schemaManifest } from './Umbraco.ImageCropper.js'; -import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.ImageCropper', - name: 'Image Cropper Property Editor UI', - element: () => import('./property-editor-ui-image-cropper.element.js'), - meta: { - label: 'Image Cropper', - icon: 'icon-crop', - group: 'media', - propertyEditorSchemaAlias: 'Umbraco.ImageCropper', +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.ImageCropper', + name: 'Image Cropper Property Editor UI', + element: () => import('./property-editor-ui-image-cropper.element.js'), + meta: { + label: 'Image Cropper', + icon: 'icon-crop', + group: 'media', + propertyEditorSchemaAlias: 'Umbraco.ImageCropper', + }, }, -}; - -export const manifests: Array = [manifest, schemaManifest]; + schemaManifest, +]; diff --git a/src/packages/media/media/property-editors/manifests.ts b/src/packages/media/media/property-editors/manifests.ts index c824ef42b2..018c5c8c5e 100644 --- a/src/packages/media/media/property-editors/manifests.ts +++ b/src/packages/media/media/property-editors/manifests.ts @@ -3,9 +3,8 @@ import { manifest as mediaEntityPicker } from './media-entity-picker/manifests.j import { manifests as imageCropperManifests } from './image-cropper/manifests.js'; import { manifests as mediaPickerManifests } from './media-picker/manifests.js'; import { manifests as uploadFieldManifests } from './upload-field/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...imageCropperManifests, ...mediaPickerManifests, ...uploadFieldManifests, diff --git a/src/packages/media/media/property-editors/media-picker/manifests.ts b/src/packages/media/media/property-editors/media-picker/manifests.ts index e111e33f66..e046bdf508 100644 --- a/src/packages/media/media/property-editors/media-picker/manifests.ts +++ b/src/packages/media/media/property-editors/media-picker/manifests.ts @@ -1,18 +1,18 @@ import { manifest as schemaManifest } from './Umbraco.MediaPicker.js'; -import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.MediaPicker', - name: 'Media Picker Property Editor UI', - element: () => import('./property-editor-ui-media-picker.element.js'), - meta: { - label: 'Media Picker', - propertyEditorSchemaAlias: 'Umbraco.MediaPicker3', - icon: 'icon-picture', - group: 'media', - supportsReadOnly: true, +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.MediaPicker', + name: 'Media Picker Property Editor UI', + element: () => import('./property-editor-ui-media-picker.element.js'), + meta: { + label: 'Media Picker', + propertyEditorSchemaAlias: 'Umbraco.MediaPicker3', + icon: 'icon-picture', + group: 'media', + supportsReadOnly: true, + }, }, -}; - -export const manifests: Array = [manifest, schemaManifest]; + schemaManifest, +]; diff --git a/src/packages/media/media/property-editors/upload-field/manifests.ts b/src/packages/media/media/property-editors/upload-field/manifests.ts index 311f8d61b9..85466bdd55 100644 --- a/src/packages/media/media/property-editors/upload-field/manifests.ts +++ b/src/packages/media/media/property-editors/upload-field/manifests.ts @@ -1,17 +1,17 @@ import { manifest as schemaManifest } from './Umbraco.UploadField.js'; -import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.UploadField', - name: 'Upload Field Property Editor UI', - element: () => import('./property-editor-ui-upload-field.element.js'), - meta: { - label: 'Upload Field', - propertyEditorSchemaAlias: 'Umbraco.UploadField', - icon: 'icon-download-alt', - group: 'media', +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.UploadField', + name: 'Upload Field Property Editor UI', + element: () => import('./property-editor-ui-upload-field.element.js'), + meta: { + label: 'Upload Field', + propertyEditorSchemaAlias: 'Umbraco.UploadField', + icon: 'icon-download-alt', + group: 'media', + }, }, -}; - -export const manifests: Array = [manifest, schemaManifest]; + schemaManifest, +]; diff --git a/src/packages/media/media/recycle-bin/entity-action/manifests.ts b/src/packages/media/media/recycle-bin/entity-action/manifests.ts index f96ef05bb1..a1319f0a5b 100644 --- a/src/packages/media/media/recycle-bin/entity-action/manifests.ts +++ b/src/packages/media/media/recycle-bin/entity-action/manifests.ts @@ -3,13 +3,12 @@ import { UMB_MEDIA_ENTITY_TYPE } from '../../entity.js'; import { UMB_MEDIA_ITEM_REPOSITORY_ALIAS } from '../../repository/index.js'; import { UMB_MEDIA_RECYCLE_BIN_ROOT_ENTITY_TYPE } from '../entity.js'; import { UMB_MEDIA_TREE_PICKER_MODAL } from '../../tree/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS, UMB_ENTITY_IS_TRASHED_CONDITION_ALIAS, } from '@umbraco-cms/backoffice/recycle-bin'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'trash', diff --git a/src/packages/media/media/recycle-bin/manifests.ts b/src/packages/media/media/recycle-bin/manifests.ts index 8cf3e41fb1..1765a1dd7b 100644 --- a/src/packages/media/media/recycle-bin/manifests.ts +++ b/src/packages/media/media/recycle-bin/manifests.ts @@ -2,9 +2,8 @@ import { manifests as entityActionManifests } from './entity-action/manifests.js import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'condition', name: 'Allow Media Recycle Bin Current User Condition', diff --git a/src/packages/media/media/recycle-bin/menu-item/manifests.ts b/src/packages/media/media/recycle-bin/menu-item/manifests.ts index 6964772e7a..0c9dd9ef99 100644 --- a/src/packages/media/media/recycle-bin/menu-item/manifests.ts +++ b/src/packages/media/media/recycle-bin/menu-item/manifests.ts @@ -1,24 +1,23 @@ import { UMB_MEDIA_MENU_ALIAS } from '../../menu/index.js'; import { UMB_MEDIA_RECYCLE_BIN_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestMenuItemTreeKind, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const menuItem: ManifestMenuItemTreeKind = { - type: 'menuItem', - kind: 'tree', - alias: 'Umb.MenuItem.Media.RecycleBin', - name: 'Media Recycle Bin Menu Item', - weight: 100, - meta: { - treeAlias: UMB_MEDIA_RECYCLE_BIN_TREE_ALIAS, - label: 'Recycle Bin', - icon: 'icon-trash', - menus: [UMB_MEDIA_MENU_ALIAS], - }, - conditions: [ - { - alias: 'Umb.Condition.CurrentUser.AllowMediaRecycleBin', +export const manifests: Array = [ + { + type: 'menuItem', + kind: 'tree', + alias: 'Umb.MenuItem.Media.RecycleBin', + name: 'Media Recycle Bin Menu Item', + weight: 100, + meta: { + treeAlias: UMB_MEDIA_RECYCLE_BIN_TREE_ALIAS, + label: 'Recycle Bin', + icon: 'icon-trash', + menus: [UMB_MEDIA_MENU_ALIAS], }, - ], -}; - -export const manifests: Array = [menuItem]; + conditions: [ + { + alias: 'Umb.Condition.CurrentUser.AllowMediaRecycleBin', + }, + ], + }, +]; diff --git a/src/packages/media/media/recycle-bin/repository/manifests.ts b/src/packages/media/media/recycle-bin/repository/manifests.ts index e5fd1f6832..6bfacbb8a6 100644 --- a/src/packages/media/media/recycle-bin/repository/manifests.ts +++ b/src/packages/media/media/recycle-bin/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MEDIA_RECYCLE_BIN_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_RECYCLE_BIN_REPOSITORY_ALIAS, - name: 'Media Recycle Bin Repository', - api: () => import('./media-recycle-bin.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_RECYCLE_BIN_REPOSITORY_ALIAS, + name: 'Media Recycle Bin Repository', + api: () => import('./media-recycle-bin.repository.js'), + }, +]; diff --git a/src/packages/media/media/recycle-bin/tree/manifests.ts b/src/packages/media/media/recycle-bin/tree/manifests.ts index c9ef36305e..74d11afb1d 100644 --- a/src/packages/media/media/recycle-bin/tree/manifests.ts +++ b/src/packages/media/media/recycle-bin/tree/manifests.ts @@ -5,50 +5,35 @@ import { UMB_MEDIA_RECYCLE_BIN_TREE_STORE_ALIAS, } from './constants.js'; import { manifests as reloadTreeItemChildrenManifests } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_RECYCLE_BIN_TREE_REPOSITORY_ALIAS, - name: 'Media Recycle Bin Tree Repository', - api: () => import('./media-recycle-bin-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_MEDIA_RECYCLE_BIN_TREE_STORE_ALIAS, - name: 'Media Recycle Bin Tree Store', - api: () => import('./media-recycle-bin-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_MEDIA_RECYCLE_BIN_TREE_ALIAS, - name: 'Media Recycle Bin Tree', - meta: { - repositoryAlias: UMB_MEDIA_RECYCLE_BIN_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_RECYCLE_BIN_TREE_REPOSITORY_ALIAS, + name: 'Media Recycle Bin Tree Repository', + api: () => import('./media-recycle-bin-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_MEDIA_RECYCLE_BIN_TREE_STORE_ALIAS, + name: 'Media Recycle Bin Tree Store', + api: () => import('./media-recycle-bin-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_MEDIA_RECYCLE_BIN_TREE_ALIAS, + name: 'Media Recycle Bin Tree', + meta: { + repositoryAlias: UMB_MEDIA_RECYCLE_BIN_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.Media.RecycleBin', + name: 'Media Recycle Bin Tree Item', + forEntityTypes: [UMB_MEDIA_RECYCLE_BIN_ROOT_ENTITY_TYPE], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.Media.RecycleBin', - name: 'Media Recycle Bin Tree Item', - forEntityTypes: [UMB_MEDIA_RECYCLE_BIN_ROOT_ENTITY_TYPE], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...reloadTreeItemChildrenManifests, ]; diff --git a/src/packages/media/media/recycle-bin/tree/reload-tree-item-children/manifests.ts b/src/packages/media/media/recycle-bin/tree/reload-tree-item-children/manifests.ts index e4977c9214..46a6b6091a 100644 --- a/src/packages/media/media/recycle-bin/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/media/media/recycle-bin/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_MEDIA_RECYCLE_BIN_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/media/media/reference/manifests.ts b/src/packages/media/media/reference/manifests.ts index a8e101b348..4ac6fbdcb2 100644 --- a/src/packages/media/media/reference/manifests.ts +++ b/src/packages/media/media/reference/manifests.ts @@ -1,4 +1,3 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...repositoryManifests]; +export const manifests: Array = [...repositoryManifests]; diff --git a/src/packages/media/media/reference/repository/manifests.ts b/src/packages/media/media/reference/repository/manifests.ts index a68dd59f57..6981b55152 100644 --- a/src/packages/media/media/reference/repository/manifests.ts +++ b/src/packages/media/media/reference/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_MEDIA_REFERENCE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_REFERENCE_REPOSITORY_ALIAS, - name: 'Media Reference Repository', - api: () => import('./media-reference.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_REFERENCE_REPOSITORY_ALIAS, + name: 'Media Reference Repository', + api: () => import('./media-reference.repository.js'), + }, +]; diff --git a/src/packages/media/media/repository/detail/manifests.ts b/src/packages/media/media/repository/detail/manifests.ts index 84cf222ae8..67553c0d33 100644 --- a/src/packages/media/media/repository/detail/manifests.ts +++ b/src/packages/media/media/repository/detail/manifests.ts @@ -1,18 +1,15 @@ import { UMB_MEDIA_DETAIL_REPOSITORY_ALIAS, UMB_MEDIA_DETAIL_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_DETAIL_REPOSITORY_ALIAS, - name: 'Media Detail Repository', - api: () => import('./media-detail.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_MEDIA_DETAIL_STORE_ALIAS, - name: 'Media Detail Store', - api: () => import('./media-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_DETAIL_REPOSITORY_ALIAS, + name: 'Media Detail Repository', + api: () => import('./media-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_MEDIA_DETAIL_STORE_ALIAS, + name: 'Media Detail Store', + api: () => import('./media-detail.store.js'), + }, +]; diff --git a/src/packages/media/media/repository/item/manifests.ts b/src/packages/media/media/repository/item/manifests.ts index 76a13aea84..acadd0a3e5 100644 --- a/src/packages/media/media/repository/item/manifests.ts +++ b/src/packages/media/media/repository/item/manifests.ts @@ -1,18 +1,16 @@ import { UMB_MEDIA_ITEM_REPOSITORY_ALIAS, UMB_MEDIA_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_ITEM_REPOSITORY_ALIAS, - name: 'Media Item Repository', - api: () => import('./media-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_MEDIA_STORE_ALIAS, - name: 'Media Item Store', - api: () => import('./media-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_ITEM_REPOSITORY_ALIAS, + name: 'Media Item Repository', + api: () => import('./media-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_MEDIA_STORE_ALIAS, + name: 'Media Item Store', + api: () => import('./media-item.store.js'), + }, +]; diff --git a/src/packages/media/media/repository/manifests.ts b/src/packages/media/media/repository/manifests.ts index 093ff5190c..7c077b7378 100644 --- a/src/packages/media/media/repository/manifests.ts +++ b/src/packages/media/media/repository/manifests.ts @@ -1,6 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as urlManifests } from './url/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests, ...urlManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests, ...urlManifests]; diff --git a/src/packages/media/media/search/manifests.ts b/src/packages/media/media/search/manifests.ts index 6da2255c34..73a1508bf8 100644 --- a/src/packages/media/media/search/manifests.ts +++ b/src/packages/media/media/search/manifests.ts @@ -1,7 +1,6 @@ import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { name: 'Media Search Provider', alias: 'Umb.SearchProvider.Media', diff --git a/src/packages/media/media/section-view/manifests.ts b/src/packages/media/media/section-view/manifests.ts index 898632f79e..d4ecb3632f 100644 --- a/src/packages/media/media/section-view/manifests.ts +++ b/src/packages/media/media/section-view/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const sectionsViews: Array = [ +export const manifests: Array = [ { type: 'sectionView', alias: 'Umb.SectionView.Media', @@ -20,5 +18,3 @@ const sectionsViews: Array = [ ], }, ]; - -export const manifests: Array = [...sectionsViews]; diff --git a/src/packages/media/media/tree/manifests.ts b/src/packages/media/media/tree/manifests.ts index 08fdcaa644..bfb72e456b 100644 --- a/src/packages/media/media/tree/manifests.ts +++ b/src/packages/media/media/tree/manifests.ts @@ -1,62 +1,45 @@ import { UMB_MEDIA_ENTITY_TYPE, UMB_MEDIA_ROOT_ENTITY_TYPE } from '../entity.js'; import { UMB_MEDIA_TREE_ALIAS, UMB_MEDIA_TREE_REPOSITORY_ALIAS, UMB_MEDIA_TREE_STORE_ALIAS } from './constants.js'; import { manifests as reloadTreeItemChildrenManifests } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_TREE_REPOSITORY_ALIAS, - name: 'Media Tree Repository', - api: () => import('./media-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_MEDIA_TREE_STORE_ALIAS, - name: 'Media Tree Store', - api: () => import('./media-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - alias: UMB_MEDIA_TREE_ALIAS, - name: 'Media Tree', - element: () => import('./media-tree.element.js'), - api: () => import('./media-tree.context.js'), - meta: { - repositoryAlias: UMB_MEDIA_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEDIA_TREE_REPOSITORY_ALIAS, + name: 'Media Tree Repository', + api: () => import('./media-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_MEDIA_TREE_STORE_ALIAS, + name: 'Media Tree Store', + api: () => import('./media-tree.store.js'), + }, + { + type: 'tree', + alias: UMB_MEDIA_TREE_ALIAS, + name: 'Media Tree', + element: () => import('./media-tree.element.js'), + api: () => import('./media-tree.context.js'), + meta: { + repositoryAlias: UMB_MEDIA_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.Media', + name: 'Media Tree Item', + element: () => import('./tree-item/media-tree-item.element.js'), + api: () => import('./tree-item/media-tree-item.context.js'), + forEntityTypes: [UMB_MEDIA_ENTITY_TYPE], + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.Media.Root', + name: 'Media Tree Root', + forEntityTypes: [UMB_MEDIA_ROOT_ENTITY_TYPE], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.Media', - name: 'Media Tree Item', - element: () => import('./tree-item/media-tree-item.element.js'), - api: () => import('./tree-item/media-tree-item.context.js'), - forEntityTypes: [UMB_MEDIA_ENTITY_TYPE], -}; - -const rootTreeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.Media.Root', - name: 'Media Tree Root', - forEntityTypes: [UMB_MEDIA_ROOT_ENTITY_TYPE], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, - rootTreeItem, ...reloadTreeItemChildrenManifests, ]; diff --git a/src/packages/media/media/tree/reload-tree-item-children/manifests.ts b/src/packages/media/media/tree/reload-tree-item-children/manifests.ts index 44720b5759..c25986b0c1 100644 --- a/src/packages/media/media/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/media/media/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_MEDIA_ENTITY_TYPE, UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/media/media/workspace/manifests.ts b/src/packages/media/media/workspace/manifests.ts index 7d62e0815c..5e889a0f14 100644 --- a/src/packages/media/media/workspace/manifests.ts +++ b/src/packages/media/media/workspace/manifests.ts @@ -1,25 +1,20 @@ import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceView, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin'; import { UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION } from '@umbraco-cms/backoffice/content'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: 'Umb.Workspace.Media', - name: 'Media Workspace', - api: () => import('./media-workspace.context.js'), - meta: { - entityType: 'media', - }, -}; +export const UMB_MEDIA_WORKSPACE_ALIAS = 'Umb.Workspace.Media'; -const workspaceViews: Array = [ +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_MEDIA_WORKSPACE_ALIAS, + name: 'Media Workspace', + api: () => import('./media-workspace.context.js'), + meta: { + entityType: 'media', + }, + }, { type: 'workspaceView', kind: 'collection', @@ -33,7 +28,7 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_MEDIA_WORKSPACE_ALIAS, }, { alias: 'Umb.Condition.WorkspaceHasCollection', @@ -54,7 +49,7 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_MEDIA_WORKSPACE_ALIAS, }, { alias: UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION, @@ -75,13 +70,10 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_MEDIA_WORKSPACE_ALIAS, }, ], }, -]; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -96,7 +88,7 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_MEDIA_WORKSPACE_ALIAS, }, { alias: UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS, @@ -104,5 +96,3 @@ const workspaceActions: Array = [ ], }, ]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/packages/media/media/workspace/media-workspace.context.ts b/src/packages/media/media/workspace/media-workspace.context.ts index a0a6d3cacd..abb9051de3 100644 --- a/src/packages/media/media/workspace/media-workspace.context.ts +++ b/src/packages/media/media/workspace/media-workspace.context.ts @@ -297,7 +297,17 @@ export class UmbMediaWorkspaceContext ) { if (!variantId) throw new Error('VariantId is missing'); - const entry = { ...variantId.toObject(), alias, value }; + const property = await this.structure.getPropertyStructureByAlias(alias); + + if (!property) { + throw new Error(`Property alias "${alias}" not found.`); + } + + //const dataType = await this.#dataTypeItemManager.getItemByUnique(property.dataType.unique); + //const editorAlias = dataType.editorAlias; + const editorAlias = 'Umbraco.TextBox'; + + const entry = { ...variantId.toObject(), alias, editorAlias, value }; const currentData = this.#currentData.value; if (currentData) { const values = appendToFrozenArray( diff --git a/src/packages/media/media/workspace/views/info/media-workspace-view-info-history.element.ts b/src/packages/media/media/workspace/views/info/media-workspace-view-info-history.element.ts index f8b464808d..33ac9a609f 100644 --- a/src/packages/media/media/workspace/views/info/media-workspace-view-info-history.element.ts +++ b/src/packages/media/media/workspace/views/info/media-workspace-view-info-history.element.ts @@ -2,7 +2,7 @@ import type { UmbMediaAuditLogModel } from '../../../audit-log/types.js'; import { UmbMediaAuditLogRepository } from '../../../audit-log/index.js'; import { UMB_MEDIA_WORKSPACE_CONTEXT } from '../../media-workspace.context-token.js'; import { TimeOptions, getMediaHistoryTagStyleAndText } from './utils.js'; -import { css, html, customElement, state, nothing, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state, nothing, repeat } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbPaginationManager } from '@umbraco-cms/backoffice/utils'; @@ -102,13 +102,15 @@ export class UmbMediaWorkspaceViewInfoHistoryElement extends UmbLitElement { (item) => { const { text, style } = getMediaHistoryTagStyleAndText(item.logType); const user = this.#userMap.get(item.user.unique); - const userName = user?.name ?? 'Unknown'; - const avatarUrl = user && Array.isArray(user.avatarUrls) ? user.avatarUrls[1] : undefined; return html` - + diff --git a/src/packages/media/media/workspace/views/info/media-workspace-view-info-reference.element.ts b/src/packages/media/media/workspace/views/info/media-workspace-view-info-reference.element.ts index ebf9da81fe..90169d6666 100644 --- a/src/packages/media/media/workspace/views/info/media-workspace-view-info-reference.element.ts +++ b/src/packages/media/media/workspace/views/info/media-workspace-view-info-reference.element.ts @@ -4,7 +4,7 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbMediaReferenceRepository } from '@umbraco-cms/backoffice/media'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { UmbReferenceModel } from '@umbraco-cms/backoffice/relations'; import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router'; import type { UUIPaginationEvent } from '@umbraco-cms/backoffice/external/uui'; diff --git a/src/packages/media/media/workspace/views/info/media-workspace-view-info.element.ts b/src/packages/media/media/workspace/views/info/media-workspace-view-info.element.ts index 26f78f33c5..529d781978 100644 --- a/src/packages/media/media/workspace/views/info/media-workspace-view-info.element.ts +++ b/src/packages/media/media/workspace/views/info/media-workspace-view-info.element.ts @@ -6,7 +6,7 @@ import { UMB_MEDIA_TYPE_ENTITY_TYPE, UmbMediaTypeItemRepository } from '@umbraco import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_MEDIA_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/media'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import type { MediaUrlInfoModel } from '@umbraco-cms/backoffice/external/backend-api'; // import of local components diff --git a/src/packages/members/manifests.ts b/src/packages/members/manifests.ts index c5d00784c1..8510e02c1e 100644 --- a/src/packages/members/manifests.ts +++ b/src/packages/members/manifests.ts @@ -1,15 +1,16 @@ import { manifests as memberGroupManifests } from './member-group/manifests.js'; import { manifests as memberManifests } from './member/manifests.js'; -import { manifests as memberSectionManifests } from './member-section/manifests.js'; import { manifests as memberTypeManifests } from './member-type/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as sectionManifests } from './section/manifests.js'; + +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; import './member/components/index.js'; import './member-group/components/index.js'; -export const manifests: Array = [ +export const manifests: Array = [ ...memberGroupManifests, ...memberManifests, - ...memberSectionManifests, ...memberTypeManifests, + ...sectionManifests, ]; diff --git a/src/packages/members/member-group/collection/action/manifests.ts b/src/packages/members/member-group/collection/action/manifests.ts index 4234fa71fe..ea60b14b0e 100644 --- a/src/packages/members/member-group/collection/action/manifests.ts +++ b/src/packages/members/member-group/collection/action/manifests.ts @@ -1,22 +1,21 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const createManifest: ManifestTypes = { - type: 'collectionAction', - kind: 'button', - name: 'Create Member Group Collection Action', - alias: 'Umb.CollectionAction.MemberGroup.Create', - weight: 200, - meta: { - label: '#general_create', - href: 'section/member-management/workspace/member-group/create', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.MemberGroup', +export const manifests: Array = [ + { + type: 'collectionAction', + kind: 'button', + name: 'Create Member Group Collection Action', + alias: 'Umb.CollectionAction.MemberGroup.Create', + weight: 200, + meta: { + label: '#general_create', + href: 'section/member-management/workspace/member-group/create', }, - ], -}; - -export const manifests: Array = [createManifest]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.MemberGroup', + }, + ], + }, +]; diff --git a/src/packages/members/member-group/collection/manifests.ts b/src/packages/members/member-group/collection/manifests.ts index 12a22aa1af..11056c21db 100644 --- a/src/packages/members/member-group/collection/manifests.ts +++ b/src/packages/members/member-group/collection/manifests.ts @@ -2,22 +2,19 @@ import { UMB_MEMBER_GROUP_COLLECTION_REPOSITORY_ALIAS } from './repository/index import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; import { manifests as collectionViewManifests } from './views/manifests.js'; import { manifests as collectionActionManifests } from './action/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_GROUP_COLLECTION_ALIAS = 'Umb.Collection.MemberGroup'; -const collectionManifest: ManifestTypes = { - type: 'collection', - kind: 'default', - alias: UMB_MEMBER_GROUP_COLLECTION_ALIAS, - name: 'Member Group Collection', - meta: { - repositoryAlias: UMB_MEMBER_GROUP_COLLECTION_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'collection', + kind: 'default', + alias: UMB_MEMBER_GROUP_COLLECTION_ALIAS, + name: 'Member Group Collection', + meta: { + repositoryAlias: UMB_MEMBER_GROUP_COLLECTION_REPOSITORY_ALIAS, + }, }, -}; - -export const manifests: Array = [ - collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, ...collectionActionManifests, diff --git a/src/packages/members/member-group/collection/repository/manifests.ts b/src/packages/members/member-group/collection/repository/manifests.ts index 51b93338fa..d94be6b08e 100644 --- a/src/packages/members/member-group/collection/repository/manifests.ts +++ b/src/packages/members/member-group/collection/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_MEMBER_GROUP_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.MemberGroup.Collection'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_MEMBER_GROUP_COLLECTION_REPOSITORY_ALIAS, - name: 'Member Group Collection Repository', - api: () => import('./member-group-collection.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEMBER_GROUP_COLLECTION_REPOSITORY_ALIAS, + name: 'Member Group Collection Repository', + api: () => import('./member-group-collection.repository.js'), + }, +]; diff --git a/src/packages/members/member-group/collection/views/manifests.ts b/src/packages/members/member-group/collection/views/manifests.ts index 47dd869885..8fbee95347 100644 --- a/src/packages/members/member-group/collection/views/manifests.ts +++ b/src/packages/members/member-group/collection/views/manifests.ts @@ -1,24 +1,23 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_GROUP_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.MemberGroup.Table'; -const tableCollectionView: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_MEMBER_GROUP_TABLE_COLLECTION_VIEW_ALIAS, - name: 'Member Group Table Collection View', - element: () => import('./table/member-group-table-collection-view.element.js'), - meta: { - label: 'Table', - icon: 'icon-list', - pathName: 'table', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.MemberGroup', +export const manifests: Array = [ + { + type: 'collectionView', + alias: UMB_MEMBER_GROUP_TABLE_COLLECTION_VIEW_ALIAS, + name: 'Member Group Table Collection View', + element: () => import('./table/member-group-table-collection-view.element.js'), + meta: { + label: 'Table', + icon: 'icon-list', + pathName: 'table', }, - ], -}; - -export const manifests: Array = [tableCollectionView]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.MemberGroup', + }, + ], + }, +]; diff --git a/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts b/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts index 06e85a651a..bd14086c99 100644 --- a/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts +++ b/src/packages/members/member-group/components/input-member-group/input-member-group.element.ts @@ -5,7 +5,7 @@ import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; @@ -104,7 +104,7 @@ export class UmbInputMemberGroupElement extends UmbFormControlMixin = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.MemberGroupPicker', diff --git a/src/packages/members/member-group/entity-actions/create-member-group.action.ts b/src/packages/members/member-group/entity-actions/create-member-group.action.ts new file mode 100644 index 0000000000..8255c49230 --- /dev/null +++ b/src/packages/members/member-group/entity-actions/create-member-group.action.ts @@ -0,0 +1,16 @@ +import { UMB_MEMBER_GROUP_WORKSPACE_PATH } from '../paths.js'; +import type { UmbEntityActionArgs } from '@umbraco-cms/backoffice/entity-action'; +import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; + +export class UmbCreateMemberGroupEntityAction extends UmbEntityActionBase { + constructor(host: UmbControllerHostElement, args: UmbEntityActionArgs) { + super(host, args); + } + + override async execute() { + history.pushState(null, '', UMB_MEMBER_GROUP_WORKSPACE_PATH + '/create'); + } +} + +export { UmbCreateMemberGroupEntityAction as api }; diff --git a/src/packages/members/member-group/entity-actions/manifests.ts b/src/packages/members/member-group/entity-actions/manifests.ts index 82184df36f..125cd2156c 100644 --- a/src/packages/members/member-group/entity-actions/manifests.ts +++ b/src/packages/members/member-group/entity-actions/manifests.ts @@ -2,10 +2,23 @@ import { UMB_MEMBER_GROUP_DETAIL_REPOSITORY_ALIAS, UMB_MEMBER_GROUP_ITEM_REPOSITORY_ALIAS, } from '../repository/index.js'; -import { UMB_MEMBER_GROUP_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { UMB_MEMBER_GROUP_ENTITY_TYPE, UMB_MEMBER_GROUP_ROOT_ENTITY_TYPE } from '../entity.js'; -const entityActions: Array = [ +export const manifests: Array = [ + { + type: 'entityAction', + kind: 'default', + alias: 'Umb.EntityAction.MemberGroup.Create', + name: 'Create Member Group Entity Action', + weight: 1200, + api: () => import('./create-member-group.action.js'), + forEntityTypes: [UMB_MEMBER_GROUP_ROOT_ENTITY_TYPE], + meta: { + icon: 'icon-add', + label: '#actions_create', + additionalOptions: true, + }, + }, { type: 'entityAction', kind: 'delete', @@ -18,5 +31,3 @@ const entityActions: Array = [ }, }, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/members/member-group/manifests.ts b/src/packages/members/member-group/manifests.ts index b0e74f6012..463191c0d6 100644 --- a/src/packages/members/member-group/manifests.ts +++ b/src/packages/members/member-group/manifests.ts @@ -1,18 +1,19 @@ import { manifests as collectionManifests } from './collection/manifests.js'; import { manifests as entityActionManifests } from './entity-actions/manifests.js'; import { manifests as memberGroupPickerModalManifests } from './components/member-group-picker-modal/manifests.js'; +import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import { manifests as sectionViewManifests } from './section-view/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ ...collectionManifests, ...entityActionManifests, ...memberGroupPickerModalManifests, + ...menuItemManifests, ...propertyEditorManifests, ...repositoryManifests, - ...sectionViewManifests, ...workspaceManifests, ]; diff --git a/src/packages/members/member-group/menu-item/manifests.ts b/src/packages/members/member-group/menu-item/manifests.ts new file mode 100644 index 0000000000..a3d73b4191 --- /dev/null +++ b/src/packages/members/member-group/menu-item/manifests.ts @@ -0,0 +1,18 @@ +import { UMB_MEMBER_MANAGEMENT_MENU_ALIAS } from '../../section/menu/constants.js'; +import { UMB_MEMBER_GROUP_ROOT_ENTITY_TYPE } from '../entity.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'menuItem', + alias: 'Umb.MenuItem.MemberGroups', + name: 'Member Groups Menu Item', + weight: 100, + meta: { + label: '#treeHeaders_memberGroups', + icon: 'icon-users', + entityType: UMB_MEMBER_GROUP_ROOT_ENTITY_TYPE, + menus: [UMB_MEMBER_MANAGEMENT_MENU_ALIAS], + }, + }, +]; diff --git a/src/packages/members/member-group/paths.ts b/src/packages/members/member-group/paths.ts new file mode 100644 index 0000000000..4a2a2b21a3 --- /dev/null +++ b/src/packages/members/member-group/paths.ts @@ -0,0 +1,13 @@ +import { UMB_MEMBER_MANAGEMENT_SECTION_PATHNAME } from '../section/paths.js'; +import { UMB_MEMBER_GROUP_ENTITY_TYPE, UMB_MEMBER_GROUP_ROOT_ENTITY_TYPE } from './entity.js'; +import { UMB_WORKSPACE_PATH_PATTERN } from '@umbraco-cms/backoffice/workspace'; + +export const UMB_MEMBER_GROUP_WORKSPACE_PATH = UMB_WORKSPACE_PATH_PATTERN.generateAbsolute({ + sectionName: UMB_MEMBER_MANAGEMENT_SECTION_PATHNAME, + entityType: UMB_MEMBER_GROUP_ENTITY_TYPE, +}); + +export const UMB_MEMBER_GROUP_ROOT_WORKSPACE_PATH = UMB_WORKSPACE_PATH_PATTERN.generateAbsolute({ + sectionName: UMB_MEMBER_MANAGEMENT_SECTION_PATHNAME, + entityType: UMB_MEMBER_GROUP_ROOT_ENTITY_TYPE, +}); diff --git a/src/packages/members/member-group/property-editor/manifests.ts b/src/packages/members/member-group/property-editor/manifests.ts index 80164507d3..b52154c67c 100644 --- a/src/packages/members/member-group/property-editor/manifests.ts +++ b/src/packages/members/member-group/property-editor/manifests.ts @@ -1,4 +1,3 @@ import { manifests as memberGroupPickerManifests } from './member-group-picker/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...memberGroupPickerManifests]; +export const manifests: Array = [...memberGroupPickerManifests]; diff --git a/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts b/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts index 77db474611..a4673e802d 100644 --- a/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts +++ b/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts @@ -1,7 +1,6 @@ import { manifest as memberGroupSchemaManifest } from './Umbraco.MemberGroupPicker.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.MemberGroupPicker', diff --git a/src/packages/members/member-group/repository/detail/manifests.ts b/src/packages/members/member-group/repository/detail/manifests.ts index 9b4935f48f..cf7cb7ee86 100644 --- a/src/packages/members/member-group/repository/detail/manifests.ts +++ b/src/packages/members/member-group/repository/detail/manifests.ts @@ -1,21 +1,17 @@ -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_MEMBER_GROUP_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.MemberGroup.Detail'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_MEMBER_GROUP_DETAIL_REPOSITORY_ALIAS, - name: 'Member Group Detail Repository', - api: () => import('./member-group-detail.repository.js'), -}; - export const UMB_MEMBER_GROUP_DETAIL_STORE_ALIAS = 'Umb.Store.MemberGroup.Detail'; -const store: ManifestStore = { - type: 'store', - alias: UMB_MEMBER_GROUP_DETAIL_STORE_ALIAS, - name: 'Member Group Detail Store', - api: () => import('./member-group-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEMBER_GROUP_DETAIL_REPOSITORY_ALIAS, + name: 'Member Group Detail Repository', + api: () => import('./member-group-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_MEMBER_GROUP_DETAIL_STORE_ALIAS, + name: 'Member Group Detail Store', + api: () => import('./member-group-detail.store.js'), + }, +]; diff --git a/src/packages/members/member-group/repository/item/manifests.ts b/src/packages/members/member-group/repository/item/manifests.ts index e1a931553c..b82d17c183 100644 --- a/src/packages/members/member-group/repository/item/manifests.ts +++ b/src/packages/members/member-group/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_MEMBER_GROUP_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.MemberGroupItem'; export const UMB_MEMBER_GROUP_STORE_ALIAS = 'Umb.Store.MemberGroupItem'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEMBER_GROUP_ITEM_REPOSITORY_ALIAS, - name: 'Member Group Item Repository', - api: () => import('./member-group-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_MEMBER_GROUP_STORE_ALIAS, - name: 'Member Group Item Store', - api: () => import('./member-group-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEMBER_GROUP_ITEM_REPOSITORY_ALIAS, + name: 'Member Group Item Repository', + api: () => import('./member-group-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_MEMBER_GROUP_STORE_ALIAS, + name: 'Member Group Item Store', + api: () => import('./member-group-item.store.js'), + }, +]; diff --git a/src/packages/members/member-group/repository/manifests.ts b/src/packages/members/member-group/repository/manifests.ts index 37dcb889ef..419b5ca7e7 100644 --- a/src/packages/members/member-group/repository/manifests.ts +++ b/src/packages/members/member-group/repository/manifests.ts @@ -1,5 +1,3 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/packages/members/member-group/section-view/manifests.ts b/src/packages/members/member-group/section-view/manifests.ts deleted file mode 100644 index 823200d358..0000000000 --- a/src/packages/members/member-group/section-view/manifests.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const sectionsViews: Array = [ - { - type: 'sectionView', - alias: 'Umb.SectionView.MemberGroup', - name: 'Member Group Section View', - js: () => import('./member-group-section-view.element.js'), - weight: 100, - meta: { - label: '#treeHeaders_memberGroups', - pathname: 'member-groups', - icon: 'icon-users', - }, - conditions: [ - { - alias: 'Umb.Condition.SectionAlias', - match: 'Umb.Section.Members', - }, - ], - }, -]; - -export const manifests: Array = [...sectionsViews]; diff --git a/src/packages/members/member-group/section-view/member-group-section-view.element.ts b/src/packages/members/member-group/section-view/member-group-section-view.element.ts deleted file mode 100644 index b4809053c8..0000000000 --- a/src/packages/members/member-group/section-view/member-group-section-view.element.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { UMB_MEMBER_GROUP_COLLECTION_ALIAS } from '../collection/manifests.js'; -import { UMB_MEMBER_GROUP_ENTITY_TYPE } from '../entity.js'; -import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbRoute } from '@umbraco-cms/backoffice/router'; - -@customElement('umb-member-group-section-view') -export class UmbMemberGroupSectionViewElement extends UmbLitElement { - #routes: UmbRoute[] = [ - { - path: 'collection', - component: () => { - const element = document.createElement('umb-collection'); - element.setAttribute('alias', UMB_MEMBER_GROUP_COLLECTION_ALIAS); - return element; - }, - }, - { - path: 'member-group', - component: () => { - const element = document.createElement('umb-workspace'); - element.setAttribute('entityType', UMB_MEMBER_GROUP_ENTITY_TYPE); - return element; - }, - }, - { - path: '', - redirectTo: 'collection', - }, - { - path: `**`, - component: async () => (await import('@umbraco-cms/backoffice/router')).UmbRouteNotFoundElement, - }, - ]; - - override render() { - return html``; - } - - static override styles = [ - UmbTextStyles, - css` - :host { - height: 100%; - } - - #router-slot { - height: calc(100% - var(--umb-header-layout-height)); - } - `, - ]; -} - -export default UmbMemberGroupSectionViewElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-member-group-section-view': UmbMemberGroupSectionViewElement; - } -} diff --git a/src/packages/members/member-group/workspace/manifests.ts b/src/packages/members/member-group/workspace/manifests.ts index 41de3338ba..3870676b31 100644 --- a/src/packages/members/member-group/workspace/manifests.ts +++ b/src/packages/members/member-group/workspace/manifests.ts @@ -1,65 +1,9 @@ -import { UMB_MEMBER_GROUP_ENTITY_TYPE } from '../entity.js'; -import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceView, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as memberGroupManifests } from './member-group/manifests.js'; +import { manifests as memberGroupRootManifests } from './member-group-root/manifests.js'; -export const UMB_MEMBER_GROUP_WORKSPACE_ALIAS = 'Umb.Workspace.MemberGroup'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: UMB_MEMBER_GROUP_WORKSPACE_ALIAS, - name: 'MemberGroup Workspace', - api: () => import('./member-group-workspace.context.js'), - meta: { - entityType: UMB_MEMBER_GROUP_ENTITY_TYPE, - }, -}; - -const workspaceActions: Array = [ - { - type: 'workspaceAction', - kind: 'default', - alias: 'Umb.WorkspaceAction.MemberGroup.Save', - name: 'Save Member Group Workspace Action', - api: UmbSubmitWorkspaceAction, - meta: { - label: '#buttons_save', - look: 'primary', - color: 'positive', - }, - conditions: [ - { - alias: 'Umb.Condition.WorkspaceAlias', - match: UMB_MEMBER_GROUP_WORKSPACE_ALIAS, - }, - ], - }, -]; - -export const workspaceViews: Array = [ - { - type: 'workspaceView', - alias: 'Umb.WorkspaceView.Member.Info', - name: 'Member Workspace info View', - js: () => import('./views/info/member-type-workspace-view-info.element.js'), - weight: 300, - meta: { - label: '#general_info', - pathname: 'info', - icon: 'icon-document', - }, - conditions: [ - { - alias: 'Umb.Condition.WorkspaceAlias', - match: UMB_MEMBER_GROUP_WORKSPACE_ALIAS, - }, - ], - }, +export const manifests: Array = [ + ...memberGroupManifests, + ...memberGroupRootManifests, ]; - -export const manifests: Array = [workspace, ...workspaceActions, ...workspaceViews]; diff --git a/src/packages/members/member-group/workspace/member-group-root/manifests.ts b/src/packages/members/member-group/workspace/member-group-root/manifests.ts new file mode 100644 index 0000000000..e4b23dfa33 --- /dev/null +++ b/src/packages/members/member-group/workspace/member-group-root/manifests.ts @@ -0,0 +1,13 @@ +import { UMB_MEMBER_GROUP_ROOT_ENTITY_TYPE } from '../../entity.js'; + +export const manifests: Array = [ + { + type: 'workspace', + alias: 'Umb.Workspace.MemberGroupRoot', + name: 'Member Group Root Workspace View', + element: () => import('./member-group-root-workspace.element.js'), + meta: { + entityType: UMB_MEMBER_GROUP_ROOT_ENTITY_TYPE, + }, + }, +]; diff --git a/src/packages/members/member-group/workspace/member-group-root/member-group-root-workspace.element.ts b/src/packages/members/member-group/workspace/member-group-root/member-group-root-workspace.element.ts new file mode 100644 index 0000000000..dc61795be1 --- /dev/null +++ b/src/packages/members/member-group/workspace/member-group-root/member-group-root-workspace.element.ts @@ -0,0 +1,21 @@ +import { UMB_MEMBER_GROUP_COLLECTION_ALIAS } from '../../collection/index.js'; +import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; + +const elementName = 'umb-member-group-root-workspace'; +@customElement(elementName) +export class UmbMemberGroupRootWorkspaceElement extends UmbLitElement { + override render() { + return html` + ; + `; + } +} + +export { UmbMemberGroupRootWorkspaceElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbMemberGroupRootWorkspaceElement; + } +} diff --git a/src/packages/members/member-group/workspace/index.ts b/src/packages/members/member-group/workspace/member-group/index.ts similarity index 100% rename from src/packages/members/member-group/workspace/index.ts rename to src/packages/members/member-group/workspace/member-group/index.ts diff --git a/src/packages/members/member-group/workspace/member-group/manifests.ts b/src/packages/members/member-group/workspace/member-group/manifests.ts new file mode 100644 index 0000000000..3f82c51f36 --- /dev/null +++ b/src/packages/members/member-group/workspace/member-group/manifests.ts @@ -0,0 +1,64 @@ +import { UMB_MEMBER_GROUP_ENTITY_TYPE } from '../../entity.js'; +import type { + ManifestWorkspaces, + ManifestWorkspaceActions, + ManifestWorkspaceView, +} from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; + +export const UMB_MEMBER_GROUP_WORKSPACE_ALIAS = 'Umb.Workspace.MemberGroup'; + +const workspace: ManifestWorkspaces = { + type: 'workspace', + kind: 'routable', + alias: UMB_MEMBER_GROUP_WORKSPACE_ALIAS, + name: 'MemberGroup Workspace', + api: () => import('./member-group-workspace.context.js'), + meta: { + entityType: UMB_MEMBER_GROUP_ENTITY_TYPE, + }, +}; + +const workspaceActions: Array = [ + { + type: 'workspaceAction', + kind: 'default', + alias: 'Umb.WorkspaceAction.MemberGroup.Save', + name: 'Save Member Group Workspace Action', + api: UmbSubmitWorkspaceAction, + meta: { + label: '#buttons_save', + look: 'primary', + color: 'positive', + }, + conditions: [ + { + alias: 'Umb.Condition.WorkspaceAlias', + match: UMB_MEMBER_GROUP_WORKSPACE_ALIAS, + }, + ], + }, +]; + +export const workspaceViews: Array = [ + { + type: 'workspaceView', + alias: 'Umb.WorkspaceView.Member.Info', + name: 'Member Workspace info View', + js: () => import('./views/info/member-type-workspace-view-info.element.js'), + weight: 300, + meta: { + label: '#general_info', + pathname: 'info', + icon: 'icon-document', + }, + conditions: [ + { + alias: 'Umb.Condition.WorkspaceAlias', + match: UMB_MEMBER_GROUP_WORKSPACE_ALIAS, + }, + ], + }, +]; + +export const manifests: Array = [workspace, ...workspaceActions, ...workspaceViews]; diff --git a/src/packages/members/member-group/workspace/member-group-workspace-editor.element.ts b/src/packages/members/member-group/workspace/member-group/member-group-workspace-editor.element.ts similarity index 92% rename from src/packages/members/member-group/workspace/member-group-workspace-editor.element.ts rename to src/packages/members/member-group/workspace/member-group/member-group-workspace-editor.element.ts index 0f7ec568cc..3804bda6d1 100644 --- a/src/packages/members/member-group/workspace/member-group-workspace-editor.element.ts +++ b/src/packages/members/member-group/workspace/member-group/member-group-workspace-editor.element.ts @@ -1,8 +1,9 @@ +import { UMB_MEMBER_GROUP_ROOT_WORKSPACE_PATH } from '../../paths.js'; import { UMB_MEMBER_GROUP_WORKSPACE_CONTEXT } from './member-group-workspace.context-token.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; -import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspace } from '@umbraco-cms/backoffice/workspace'; import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; @@ -50,11 +51,12 @@ export class UmbMemberGroupWorkspaceEditorElement extends UmbLitElement { override render() { return html` - + ${this.#renderActions()} + `; } diff --git a/src/packages/members/member-group/workspace/member-group-workspace.context-token.ts b/src/packages/members/member-group/workspace/member-group/member-group-workspace.context-token.ts similarity index 100% rename from src/packages/members/member-group/workspace/member-group-workspace.context-token.ts rename to src/packages/members/member-group/workspace/member-group/member-group-workspace.context-token.ts diff --git a/src/packages/members/member-group/workspace/member-group-workspace.context.ts b/src/packages/members/member-group/workspace/member-group/member-group-workspace.context.ts similarity index 96% rename from src/packages/members/member-group/workspace/member-group-workspace.context.ts rename to src/packages/members/member-group/workspace/member-group/member-group-workspace.context.ts index 1258127044..3534ed8daf 100644 --- a/src/packages/members/member-group/workspace/member-group-workspace.context.ts +++ b/src/packages/members/member-group/workspace/member-group/member-group-workspace.context.ts @@ -1,5 +1,5 @@ -import { UmbMemberGroupDetailRepository } from '../repository/index.js'; -import type { UmbMemberGroupDetailModel } from '../types.js'; +import { UmbMemberGroupDetailRepository } from '../../repository/index.js'; +import type { UmbMemberGroupDetailModel } from '../../types.js'; import { UMB_MEMBER_GROUP_WORKSPACE_ALIAS } from './manifests.js'; import { UmbMemberGroupWorkspaceEditorElement } from './member-group-workspace-editor.element.js'; import { diff --git a/src/packages/members/member-group/workspace/views/info/member-type-workspace-view-info.element.ts b/src/packages/members/member-group/workspace/member-group/views/info/member-type-workspace-view-info.element.ts similarity index 98% rename from src/packages/members/member-group/workspace/views/info/member-type-workspace-view-info.element.ts rename to src/packages/members/member-group/workspace/member-group/views/info/member-type-workspace-view-info.element.ts index aa659e077b..d56c718f61 100644 --- a/src/packages/members/member-group/workspace/views/info/member-type-workspace-view-info.element.ts +++ b/src/packages/members/member-group/workspace/member-group/views/info/member-type-workspace-view-info.element.ts @@ -3,7 +3,7 @@ import { UMB_MEMBER_GROUP_WORKSPACE_CONTEXT } from '../../member-group-workspace import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; @customElement('umb-member-type-workspace-view-member-info') export class UmbMemberTypeWorkspaceViewMemberInfoElement extends UmbLitElement implements UmbWorkspaceViewElement { diff --git a/src/packages/members/member-section/manifests.ts b/src/packages/members/member-section/manifests.ts deleted file mode 100644 index b1563a290b..0000000000 --- a/src/packages/members/member-section/manifests.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { ManifestSection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const section: ManifestSection = { - type: 'section', - alias: 'Umb.Section.Members', - name: 'Members Section', - weight: 500, - meta: { - label: '#sections_member', - pathname: 'member-management', - }, - conditions: [ - { - alias: 'Umb.Condition.SectionUserPermission', - match: 'Umb.Section.Members', - }, - ], -}; - -export const manifests: Array = [section]; diff --git a/src/packages/members/member-type/entity-actions/duplicate/manifests.ts b/src/packages/members/member-type/entity-actions/duplicate/manifests.ts index 57d5e7744e..81d59d049b 100644 --- a/src/packages/members/member-type/entity-actions/duplicate/manifests.ts +++ b/src/packages/members/member-type/entity-actions/duplicate/manifests.ts @@ -2,9 +2,8 @@ import { UMB_MEMBER_TYPE_ENTITY_TYPE } from '../../entity.js'; import { UMB_MEMBER_TYPE_TREE_REPOSITORY_ALIAS } from '../../tree/index.js'; import { UMB_DUPLICATE_MEMBER_TYPE_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'duplicate', @@ -16,6 +15,5 @@ const entityActions: Array = [ treeRepositoryAlias: UMB_MEMBER_TYPE_TREE_REPOSITORY_ALIAS, }, }, + ...repositoryManifests, ]; - -export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/packages/members/member-type/entity-actions/duplicate/repository/manifests.ts b/src/packages/members/member-type/entity-actions/duplicate/repository/manifests.ts index 65b7aa7872..2f8dc325c0 100644 --- a/src/packages/members/member-type/entity-actions/duplicate/repository/manifests.ts +++ b/src/packages/members/member-type/entity-actions/duplicate/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_DUPLICATE_MEMBER_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const duplicateRepository: ManifestRepository = { - type: 'repository', - alias: UMB_DUPLICATE_MEMBER_TYPE_REPOSITORY_ALIAS, - name: 'Duplicate Member Type Repository', - api: () => import('./member-type-duplicate.repository.js'), -}; - -export const manifests: Array = [duplicateRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DUPLICATE_MEMBER_TYPE_REPOSITORY_ALIAS, + name: 'Duplicate Member Type Repository', + api: () => import('./member-type-duplicate.repository.js'), + }, +]; diff --git a/src/packages/members/member-type/entity-actions/manifests.ts b/src/packages/members/member-type/entity-actions/manifests.ts index 49088f54a8..baf51ce7b1 100644 --- a/src/packages/members/member-type/entity-actions/manifests.ts +++ b/src/packages/members/member-type/entity-actions/manifests.ts @@ -3,9 +3,8 @@ import { UMB_MEMBER_TYPE_DETAIL_REPOSITORY_ALIAS } from '../repository/detail/in import { UMB_MEMBER_TYPE_ITEM_REPOSITORY_ALIAS } from '../repository/index.js'; import { UmbCreateMemberTypeEntityAction } from './create.action.js'; import { manifests as duplicateManifests } from './duplicate/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -17,6 +16,7 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { @@ -30,6 +30,5 @@ const entityActions: Array = [ itemRepositoryAlias: UMB_MEMBER_TYPE_ITEM_REPOSITORY_ALIAS, }, }, + ...duplicateManifests, ]; - -export const manifests: Array = [...entityActions, ...duplicateManifests]; diff --git a/src/packages/members/member-type/manifests.ts b/src/packages/members/member-type/manifests.ts index de55879f97..1980d33395 100644 --- a/src/packages/members/member-type/manifests.ts +++ b/src/packages/members/member-type/manifests.ts @@ -4,11 +4,10 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as searchManifests } from './search/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import './components/index.js'; -export const manifests: Array = [ +export const manifests: Array = [ ...entityActionsManifests, ...menuManifests, ...repositoryManifests, diff --git a/src/packages/members/member-type/menu/manifests.ts b/src/packages/members/member-type/menu/manifests.ts index 16a3b5e96e..69aea21501 100644 --- a/src/packages/members/member-type/menu/manifests.ts +++ b/src/packages/members/member-type/menu/manifests.ts @@ -1,7 +1,6 @@ import { UMB_MEMBER_TYPE_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/packages/members/member-type/repository/composition/manifests.ts b/src/packages/members/member-type/repository/composition/manifests.ts index bf8f9fa79f..5b4c2d3476 100644 --- a/src/packages/members/member-type/repository/composition/manifests.ts +++ b/src/packages/members/member-type/repository/composition/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_MEMBER_TYPE_COMPOSITION_REPOSITORY_ALIAS = 'Umb.Repository.MemberType.Composition'; -const compositionRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEMBER_TYPE_COMPOSITION_REPOSITORY_ALIAS, - name: 'Member Type Composition Repository', - api: () => import('./member-type-composition.repository.js'), -}; - -export const manifests: Array = [compositionRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEMBER_TYPE_COMPOSITION_REPOSITORY_ALIAS, + name: 'Member Type Composition Repository', + api: () => import('./member-type-composition.repository.js'), + }, +]; diff --git a/src/packages/members/member-type/repository/detail/manifests.ts b/src/packages/members/member-type/repository/detail/manifests.ts index cf89660e34..85d9de70ab 100644 --- a/src/packages/members/member-type/repository/detail/manifests.ts +++ b/src/packages/members/member-type/repository/detail/manifests.ts @@ -1,21 +1,17 @@ -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_MEMBER_TYPE_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.MemberType.Detail'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_MEMBER_TYPE_DETAIL_REPOSITORY_ALIAS, - name: 'Member Type Detail Repository', - api: () => import('./member-type-detail.repository.js'), -}; - export const UMB_MEMBER_TYPE_DETAIL_STORE_ALIAS = 'Umb.Store.MemberType.Detail'; -const store: ManifestStore = { - type: 'store', - alias: UMB_MEMBER_TYPE_DETAIL_STORE_ALIAS, - name: 'Member Type Detail Store', - api: () => import('./member-type-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEMBER_TYPE_DETAIL_REPOSITORY_ALIAS, + name: 'Member Type Detail Repository', + api: () => import('./member-type-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_MEMBER_TYPE_DETAIL_STORE_ALIAS, + name: 'Member Type Detail Store', + api: () => import('./member-type-detail.store.js'), + }, +]; diff --git a/src/packages/members/member-type/repository/item/manifests.ts b/src/packages/members/member-type/repository/item/manifests.ts index 9cc7590106..9135d28c81 100644 --- a/src/packages/members/member-type/repository/item/manifests.ts +++ b/src/packages/members/member-type/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_MEMBER_TYPE_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.MemberTypeItem'; export const UMB_MEMBER_TYPE_STORE_ALIAS = 'Umb.Store.MemberTypeItem'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEMBER_TYPE_ITEM_REPOSITORY_ALIAS, - name: 'Member Type Item Repository', - api: () => import('./member-type-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_MEMBER_TYPE_STORE_ALIAS, - name: 'Member Type Item Store', - api: () => import('./member-type-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEMBER_TYPE_ITEM_REPOSITORY_ALIAS, + name: 'Member Type Item Repository', + api: () => import('./member-type-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_MEMBER_TYPE_STORE_ALIAS, + name: 'Member Type Item Store', + api: () => import('./member-type-item.store.js'), + }, +]; diff --git a/src/packages/members/member-type/repository/manifests.ts b/src/packages/members/member-type/repository/manifests.ts index ce74b2570d..e1ab3e2a72 100644 --- a/src/packages/members/member-type/repository/manifests.ts +++ b/src/packages/members/member-type/repository/manifests.ts @@ -1,6 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as compositionManifests } from './composition/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests, ...compositionManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests, ...compositionManifests]; diff --git a/src/packages/members/member-type/search/manifests.ts b/src/packages/members/member-type/search/manifests.ts index 786dd15a9d..ef5b13f9d8 100644 --- a/src/packages/members/member-type/search/manifests.ts +++ b/src/packages/members/member-type/search/manifests.ts @@ -1,7 +1,6 @@ import { UMB_MEMBER_TYPE_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { name: 'Member Type Search Provider', alias: 'Umb.SearchProvider.MemberType', diff --git a/src/packages/members/member-type/tree/manifests.ts b/src/packages/members/member-type/tree/manifests.ts index 0cf25f48b6..b31ce532c4 100644 --- a/src/packages/members/member-type/tree/manifests.ts +++ b/src/packages/members/member-type/tree/manifests.ts @@ -1,53 +1,38 @@ import { UMB_MEMBER_TYPE_ENTITY_TYPE, UMB_MEMBER_TYPE_ROOT_ENTITY_TYPE } from '../entity.js'; import { manifests as reloadTreeItemChildrenManifest } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_TYPE_TREE_REPOSITORY_ALIAS = 'Umb.Repository.MemberType.Tree'; export const UMB_MEMBER_TYPE_TREE_STORE_ALIAS = 'Umb.Store.MemberType.Tree'; export const UMB_MEMBER_TYPE_TREE_ALIAS = 'Umb.Tree.MemberType'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEMBER_TYPE_TREE_REPOSITORY_ALIAS, - name: 'Member Type Tree Repository', - api: () => import('./member-type-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_MEMBER_TYPE_TREE_STORE_ALIAS, - name: 'Member Type Tree Store', - api: () => import('./member-type-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_MEMBER_TYPE_TREE_ALIAS, - name: 'Member Type Tree', - meta: { - repositoryAlias: UMB_MEMBER_TYPE_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEMBER_TYPE_TREE_REPOSITORY_ALIAS, + name: 'Member Type Tree Repository', + api: () => import('./member-type-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_MEMBER_TYPE_TREE_STORE_ALIAS, + name: 'Member Type Tree Store', + api: () => import('./member-type-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_MEMBER_TYPE_TREE_ALIAS, + name: 'Member Type Tree', + meta: { + repositoryAlias: UMB_MEMBER_TYPE_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.MemberType', + name: 'Member Type Tree Item', + forEntityTypes: [UMB_MEMBER_TYPE_ROOT_ENTITY_TYPE, UMB_MEMBER_TYPE_ENTITY_TYPE], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.MemberType', - name: 'Member Type Tree Item', - forEntityTypes: [UMB_MEMBER_TYPE_ROOT_ENTITY_TYPE, UMB_MEMBER_TYPE_ENTITY_TYPE], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...reloadTreeItemChildrenManifest, ]; diff --git a/src/packages/members/member-type/tree/member-type-tree.server.data-source.ts b/src/packages/members/member-type/tree/member-type-tree.server.data-source.ts index 2f6486a8d7..580d2d0a8b 100644 --- a/src/packages/members/member-type/tree/member-type-tree.server.data-source.ts +++ b/src/packages/members/member-type/tree/member-type-tree.server.data-source.ts @@ -2,7 +2,7 @@ import { UMB_MEMBER_TYPE_ENTITY_TYPE, UMB_MEMBER_TYPE_ROOT_ENTITY_TYPE } from '. import type { UmbMemberTypeTreeItemModel } from './types.js'; import type { UmbTreeChildrenOfRequestArgs, UmbTreeRootItemsRequestArgs } from '@umbraco-cms/backoffice/tree'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; -import type { NamedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api'; +import type { MemberTypeTreeItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api'; import { MemberTypeService } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -12,7 +12,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; * @implements {UmbTreeDataSource} */ export class UmbMemberTypeTreeServerDataSource extends UmbTreeServerDataSourceBase< - NamedEntityTreeItemResponseModel, + MemberTypeTreeItemResponseModel, UmbMemberTypeTreeItemModel > { /** @@ -46,7 +46,7 @@ const getAncestorsOf = () => { throw new Error('Not supported for the member type tree'); }; -const mapper = (item: NamedEntityTreeItemResponseModel): UmbMemberTypeTreeItemModel => { +const mapper = (item: MemberTypeTreeItemResponseModel): UmbMemberTypeTreeItemModel => { return { unique: item.id, parent: { @@ -57,6 +57,6 @@ const mapper = (item: NamedEntityTreeItemResponseModel): UmbMemberTypeTreeItemMo entityType: UMB_MEMBER_TYPE_ENTITY_TYPE, hasChildren: item.hasChildren, isFolder: false, - icon: 'icon-user', + icon: item.icon, }; }; diff --git a/src/packages/members/member-type/tree/reload-tree-item-children/manifests.ts b/src/packages/members/member-type/tree/reload-tree-item-children/manifests.ts index b8e87b22d9..b7337fbfb7 100644 --- a/src/packages/members/member-type/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/members/member-type/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_MEMBER_TYPE_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/members/member-type/workspace/manifests.ts b/src/packages/members/member-type/workspace/manifests.ts index fbac4d07c2..c0d1aea14d 100644 --- a/src/packages/members/member-type/workspace/manifests.ts +++ b/src/packages/members/member-type/workspace/manifests.ts @@ -1,26 +1,19 @@ import { UMB_MEMBER_TYPE_COMPOSITION_REPOSITORY_ALIAS } from '../repository/index.js'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceViews, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; export const UMB_MEMBER_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.MemberType'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: UMB_MEMBER_TYPE_WORKSPACE_ALIAS, - name: 'Member Type Workspace', - api: () => import('./member-type-workspace.context.js'), - meta: { - entityType: 'member-type', +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_MEMBER_TYPE_WORKSPACE_ALIAS, + name: 'Member Type Workspace', + api: () => import('./member-type-workspace.context.js'), + meta: { + entityType: 'member-type', + }, }, -}; - -const workspaceViews: Array = [ { type: 'workspaceView', kind: 'contentTypeDesignEditor', @@ -39,9 +32,6 @@ const workspaceViews: Array = [ }, ], }, -]; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -56,10 +46,8 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_MEMBER_TYPE_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/packages/members/member-type/workspace/member-type-workspace-editor.element.ts b/src/packages/members/member-type/workspace/member-type-workspace-editor.element.ts index 0bcf694903..aa5ac40c3f 100644 --- a/src/packages/members/member-type/workspace/member-type-workspace-editor.element.ts +++ b/src/packages/members/member-type/workspace/member-type-workspace-editor.element.ts @@ -3,7 +3,8 @@ import type { UmbInputWithAliasElement } from '@umbraco-cms/backoffice/component import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import type { UUITextareaElement } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_ICON_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; @customElement('umb-member-type-workspace-editor') export class UmbMemberTypeWorkspaceEditorElement extends UmbLitElement { diff --git a/src/packages/members/member/collection/action/manifests.ts b/src/packages/members/member/collection/action/manifests.ts index 336d9bde42..a9da38f9d0 100644 --- a/src/packages/members/member/collection/action/manifests.ts +++ b/src/packages/members/member/collection/action/manifests.ts @@ -1,24 +1,23 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const createManifest: ManifestTypes = { - type: 'collectionAction', - name: 'Create Member Collection Action', - kind: 'button', - alias: 'Umb.CollectionAction.Member.Create', - weight: 200, - meta: { - label: '#general_create', - href: 'section/member-management/workspace/member/create/member-type-1-id', // TODO: remove hardcoded member type id - }, - js: () => import('./create-member-collection-action.element.js'), - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Member', +export const manifests: Array = [ + { + type: 'collectionAction', + name: 'Create Member Collection Action', + kind: 'button', + alias: 'Umb.CollectionAction.Member.Create', + weight: 200, + meta: { + label: '#general_create', + href: 'section/member-management/workspace/member/create/member-type-1-id', // TODO: remove hardcoded member type id }, - ], - // element: () => import('./create-member-collection-action.element.js'), -}; - -export const manifests: Array = [createManifest]; + js: () => import('./create-member-collection-action.element.js'), + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Member', + }, + ], + // element: () => import('./create-member-collection-action.element.js'), + }, +]; diff --git a/src/packages/members/member/collection/manifests.ts b/src/packages/members/member/collection/manifests.ts index 06239362fe..ad18582106 100644 --- a/src/packages/members/member/collection/manifests.ts +++ b/src/packages/members/member/collection/manifests.ts @@ -2,23 +2,20 @@ import { UMB_MEMBER_COLLECTION_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; import { manifests as collectionViewManifests } from './views/manifests.js'; import { manifests as collectionActionManifests } from './action/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_COLLECTION_ALIAS = 'Umb.Collection.Member'; -const collectionManifest: ManifestTypes = { - type: 'collection', - alias: UMB_MEMBER_COLLECTION_ALIAS, - name: 'Member Collection', - api: () => import('./member-collection.context.js'), - element: () => import('./member-collection.element.js'), - meta: { - repositoryAlias: UMB_MEMBER_COLLECTION_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'collection', + alias: UMB_MEMBER_COLLECTION_ALIAS, + name: 'Member Collection', + api: () => import('./member-collection.context.js'), + element: () => import('./member-collection.element.js'), + meta: { + repositoryAlias: UMB_MEMBER_COLLECTION_REPOSITORY_ALIAS, + }, }, -}; - -export const manifests: Array = [ - collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, ...collectionActionManifests, diff --git a/src/packages/members/member/collection/repository/manifests.ts b/src/packages/members/member/collection/repository/manifests.ts index 1dbcc427b9..d66c3d6fc2 100644 --- a/src/packages/members/member/collection/repository/manifests.ts +++ b/src/packages/members/member/collection/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_MEMBER_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.Member.Collection'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_MEMBER_COLLECTION_REPOSITORY_ALIAS, - name: 'Member Collection Repository', - api: () => import('./member-collection.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEMBER_COLLECTION_REPOSITORY_ALIAS, + name: 'Member Collection Repository', + api: () => import('./member-collection.repository.js'), + }, +]; diff --git a/src/packages/members/member/collection/repository/member-collection.server.data-source.ts b/src/packages/members/member/collection/repository/member-collection.server.data-source.ts index 3bfb088260..42376a93c3 100644 --- a/src/packages/members/member/collection/repository/member-collection.server.data-source.ts +++ b/src/packages/members/member/collection/repository/member-collection.server.data-source.ts @@ -50,6 +50,7 @@ export class UmbMemberCollectionServerDataSource implements UmbCollectionDataSou email: item.email, variants: item.variants as UmbVariantModel[], unique: item.id, + kind: item.kind, lastLoginDate: item.lastLoginDate || null, lastLockoutDate: item.lastLockoutDate || null, lastPasswordChangeDate: item.lastPasswordChangeDate || null, diff --git a/src/packages/members/member/collection/types.ts b/src/packages/members/member/collection/types.ts index bb3b83cc3b..76018d2a04 100644 --- a/src/packages/members/member/collection/types.ts +++ b/src/packages/members/member/collection/types.ts @@ -1,4 +1,4 @@ -import type { UmbMemberEntityType } from '../entity.js'; +import type { UmbMemberDetailModel } from '../types.js'; export interface UmbMemberCollectionFilterModel { skip?: number; @@ -7,8 +7,5 @@ export interface UmbMemberCollectionFilterModel { filter?: string; } -export interface UmbMemberCollectionModel { - unique: string; - entityType: UmbMemberEntityType; - variants: Array; -} +// eslint-disable-next-line @typescript-eslint/no-empty-object-type +export interface UmbMemberCollectionModel extends UmbMemberDetailModel {} diff --git a/src/packages/members/member/collection/views/manifests.ts b/src/packages/members/member/collection/views/manifests.ts index 386021aaf6..1ac801b7ea 100644 --- a/src/packages/members/member/collection/views/manifests.ts +++ b/src/packages/members/member/collection/views/manifests.ts @@ -1,24 +1,23 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Member.Table'; -const tableCollectionView: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_MEMBER_TABLE_COLLECTION_VIEW_ALIAS, - name: 'Member Table Collection View', - element: () => import('./table/member-table-collection-view.element.js'), - meta: { - label: 'Table', - icon: 'icon-list', - pathName: 'table', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.Member', +export const manifests: Array = [ + { + type: 'collectionView', + alias: UMB_MEMBER_TABLE_COLLECTION_VIEW_ALIAS, + name: 'Member Table Collection View', + element: () => import('./table/member-table-collection-view.element.js'), + meta: { + label: 'Table', + icon: 'icon-list', + pathName: 'table', }, - ], -}; - -export const manifests: Array = [tableCollectionView]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.Member', + }, + ], + }, +]; diff --git a/src/packages/members/member/collection/views/table/member-table-collection-view.element.ts b/src/packages/members/member/collection/views/table/member-table-collection-view.element.ts index ea755050bc..8fca9ecca1 100644 --- a/src/packages/members/member/collection/views/table/member-table-collection-view.element.ts +++ b/src/packages/members/member/collection/views/table/member-table-collection-view.element.ts @@ -1,10 +1,14 @@ import type { UmbMemberCollectionModel } from '../../types.js'; import { UMB_MEMBER_COLLECTION_CONTEXT } from '../../member-collection.context-token.js'; import type { UmbMemberCollectionContext } from '../../member-collection.context.js'; +import { UmbMemberKind } from '../../../utils/index.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UmbTableColumn, UmbTableConfig, UmbTableItem } from '@umbraco-cms/backoffice/components'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbMemberTypeItemRepository } from '@umbraco-cms/backoffice/member-type'; + +import './member-table-entity-actions-column-layout.element.js'; @customElement('umb-member-table-collection-view') export class UmbMemberTableCollectionViewElement extends UmbLitElement { @@ -19,12 +23,34 @@ export class UmbMemberTableCollectionViewElement extends UmbLitElement { name: this.localize.term('general_name'), alias: 'memberName', }, + { + name: this.localize.term('general_username'), + alias: 'memberUsername', + }, + { + name: this.localize.term('general_email'), + alias: 'memberEmail', + }, + { + name: this.localize.term('content_membertype'), + alias: 'memberType', + }, + { + name: this.localize.term('member_kind'), + alias: 'memberKind', + }, + { + name: '', + alias: 'entityActions', + elementName: 'umb-member-table-entity-actions-column-layout', + }, ]; @state() private _tableItems: Array = []; #collectionContext?: UmbMemberCollectionContext; + #memberTypeItemRepository = new UmbMemberTypeItemRepository(this); constructor() { super(); @@ -40,19 +66,51 @@ export class UmbMemberTableCollectionViewElement extends UmbLitElement { this.observe(this.#collectionContext.items, (items) => this.#createTableItems(items), 'umbCollectionItemsObserver'); } - #createTableItems(members: Array) { + async #createTableItems(members: Array) { + const memberTypeUniques = members.map((member) => member.memberType.unique); + const { data: memberTypes } = await this.#memberTypeItemRepository.requestItems(memberTypeUniques); + this._tableItems = members.map((member) => { // TODO: get correct variant name const name = member.variants[0].name; + const kind = + member.kind === UmbMemberKind.API + ? this.localize.term('member_memberKindApi') + : this.localize.term('member_memberKindDefault'); + + const memberType = memberTypes?.find((type) => type.unique === member.memberType.unique); return { id: member.unique, - icon: 'icon-user', + icon: memberType?.icon, data: [ { columnAlias: 'memberName', value: html`${name}`, }, + { + columnAlias: 'memberUsername', + value: member.username, + }, + { + columnAlias: 'memberEmail', + value: member.email, + }, + { + columnAlias: 'memberType', + value: memberType?.name, + }, + { + columnAlias: 'memberKind', + value: kind, + }, + { + columnAlias: 'entityActions', + value: { + entityType: member.entityType, + unique: member.unique, + }, + }, ], }; }); diff --git a/src/packages/members/member/collection/views/table/member-table-entity-actions-column-layout.element.ts b/src/packages/members/member/collection/views/table/member-table-entity-actions-column-layout.element.ts new file mode 100644 index 0000000000..61eab8c400 --- /dev/null +++ b/src/packages/members/member/collection/views/table/member-table-entity-actions-column-layout.element.ts @@ -0,0 +1,38 @@ +import type { UmbMemberEntityType } from '../../../entity.js'; +import { html, customElement, property, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; + +const elementName = 'umb-member-table-entity-actions-column-layout'; +@customElement(elementName) +export class UmbMemberTableEntityActionsColumnLayoutElement extends UmbLitElement { + @property({ attribute: false }) + value!: { + unique: string; + entityType: UmbMemberEntityType; + }; + + @state() + _isOpen = false; + + #onActionExecuted() { + this._isOpen = false; + } + + override render() { + return html` + + + + + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbMemberTableEntityActionsColumnLayoutElement; + } +} diff --git a/src/packages/members/member/components/input-member/input-member.element.ts b/src/packages/members/member/components/input-member/input-member.element.ts index b8ffac2d53..9f782e9ea9 100644 --- a/src/packages/members/member/components/input-member/input-member.element.ts +++ b/src/packages/members/member/components/input-member/input-member.element.ts @@ -4,7 +4,7 @@ import { css, customElement, html, nothing, property, repeat, state } from '@umb import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; @@ -106,7 +106,7 @@ export class UmbInputMemberElement extends UmbFormControlMixin = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.MemberPicker', diff --git a/src/packages/members/member/entity-actions/create/create.action.ts b/src/packages/members/member/entity-actions/create/create.action.ts new file mode 100644 index 0000000000..20994dad83 --- /dev/null +++ b/src/packages/members/member/entity-actions/create/create.action.ts @@ -0,0 +1,19 @@ +import { UMB_MEMBER_CREATE_OPTIONS_MODAL } from './member-create-options-modal.token.js'; +import type { UmbEntityActionArgs } from '@umbraco-cms/backoffice/entity-action'; +import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; + +export class UmbCreateMemberEntityAction extends UmbEntityActionBase { + constructor(host: UmbControllerHost, args: UmbEntityActionArgs) { + super(host, args); + } + + override async execute() { + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modalContext = modalManager.open(this, UMB_MEMBER_CREATE_OPTIONS_MODAL); + await modalContext.onSubmit(); + } +} + +export { UmbCreateMemberEntityAction as api }; diff --git a/src/packages/members/member/entity-actions/create/manifests.ts b/src/packages/members/member/entity-actions/create/manifests.ts new file mode 100644 index 0000000000..3a145b2c02 --- /dev/null +++ b/src/packages/members/member/entity-actions/create/manifests.ts @@ -0,0 +1,30 @@ +import { UMB_MEMBER_ROOT_ENTITY_TYPE } from '../../entity.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const entityActions: Array = [ + { + type: 'entityAction', + kind: 'default', + alias: 'Umb.EntityAction.Member.Create', + name: 'Create Member Entity Action', + weight: 1200, + api: () => import('./create.action.js'), + forEntityTypes: [UMB_MEMBER_ROOT_ENTITY_TYPE], + meta: { + icon: 'icon-add', + label: '#actions_create', + additionalOptions: true, + }, + }, +]; + +const modals: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.Member.CreateOptions', + name: 'Member Create Options Modal', + js: () => import('./member-create-options-modal.element.js'), + }, +]; + +export const manifests: Array = [...entityActions, ...modals]; diff --git a/src/packages/members/member/entity-actions/create/member-create-options-modal.element.ts b/src/packages/members/member/entity-actions/create/member-create-options-modal.element.ts new file mode 100644 index 0000000000..39313bf223 --- /dev/null +++ b/src/packages/members/member/entity-actions/create/member-create-options-modal.element.ts @@ -0,0 +1,105 @@ +import { UMB_CREATE_MEMBER_WORKSPACE_PATH_PATTERN } from '../../paths.js'; +import type { + UmbMemberCreateOptionsModalData, + UmbMemberCreateOptionsModalValue, +} from './member-create-options-modal.token.js'; +import { html, customElement, state, repeat, css } from '@umbraco-cms/backoffice/external/lit'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; + +import { UmbMemberTypeTreeRepository } from '@umbraco-cms/backoffice/member-type'; + +const elementName = 'umb-member-create-options-modal'; +@customElement(elementName) +export class UmbMemberCreateOptionsModalElement extends UmbModalBaseElement< + UmbMemberCreateOptionsModalData, + UmbMemberCreateOptionsModalValue +> { + @state() + private _options: Array<{ label: string; unique: string; icon: string }> = []; + + #memberTypeTreeRepository = new UmbMemberTypeTreeRepository(this); + + override firstUpdated() { + this.#getOptions(); + } + + async #getOptions() { + //TODO: Should we use the tree repository or make a collection repository? + //TODO: And how would we get all the member types? + //TODO: This only works because member types can't have folders. + const { data } = await this.#memberTypeTreeRepository.requestTreeRootItems({}); + if (!data) return; + + this._options = data.items.map((item) => { + return { + label: item.name, + unique: item.unique, + icon: item.icon || '', + }; + }); + } + + // close the modal when navigating + #onOpen(event: Event, unique: string) { + event?.stopPropagation(); + // TODO: the href does not emit an event, so we need to use the click event + const path = UMB_CREATE_MEMBER_WORKSPACE_PATH_PATTERN.generateAbsolute({ + memberTypeUnique: unique, + }); + history.pushState(null, '', path); + this._submitModal(); + } + + override render() { + return html` + + ${this.#renderOptions()} + + + `; + } + + #renderOptions() { + return html` + + ${repeat( + this._options, + (option) => option.unique, + (option) => html` + this.#onOpen(event, option.unique)}> + + + `, + )} + + `; + } + + static override styles = [ + UmbTextStyles, + css` + #blank { + border-bottom: 1px solid var(--uui-color-border); + } + + #edit-permissions { + margin-top: var(--uui-size-6); + } + `, + ]; +} + +export { UmbMemberCreateOptionsModalElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbMemberCreateOptionsModalElement; + } +} diff --git a/src/packages/members/member/entity-actions/create/member-create-options-modal.token.ts b/src/packages/members/member/entity-actions/create/member-create-options-modal.token.ts new file mode 100644 index 0000000000..18a240fcd3 --- /dev/null +++ b/src/packages/members/member/entity-actions/create/member-create-options-modal.token.ts @@ -0,0 +1,17 @@ +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +// eslint-disable-next-line @typescript-eslint/no-empty-object-type +export interface UmbMemberCreateOptionsModalData {} + +// eslint-disable-next-line @typescript-eslint/no-empty-object-type +export interface UmbMemberCreateOptionsModalValue {} + +export const UMB_MEMBER_CREATE_OPTIONS_MODAL = new UmbModalToken< + UmbMemberCreateOptionsModalData, + UmbMemberCreateOptionsModalValue +>('Umb.Modal.Member.CreateOptions', { + modal: { + type: 'sidebar', + size: 'small', + }, +}); diff --git a/src/packages/members/member/entity-actions/manifests.ts b/src/packages/members/member/entity-actions/manifests.ts index 5bd8c3ee26..e03f597bd5 100644 --- a/src/packages/members/member/entity-actions/manifests.ts +++ b/src/packages/members/member/entity-actions/manifests.ts @@ -1,8 +1,8 @@ import { UMB_MEMBER_DETAIL_REPOSITORY_ALIAS, UMB_MEMBER_ITEM_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as createManifests } from './create/manifests.js'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'delete', @@ -14,6 +14,5 @@ const entityActions: Array = [ itemRepositoryAlias: UMB_MEMBER_ITEM_REPOSITORY_ALIAS, }, }, + ...createManifests, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/members/member/manifests.ts b/src/packages/members/member/manifests.ts index 1a80cef0a9..84682bbb25 100644 --- a/src/packages/members/member/manifests.ts +++ b/src/packages/members/member/manifests.ts @@ -1,23 +1,23 @@ import { manifests as collectionManifests } from './collection/manifests.js'; import { manifests as entityActionManifests } from './entity-actions/manifests.js'; import { manifests as memberPickerModalManifests } from './components/member-picker-modal/manifests.js'; +import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as pickerManifests } from './picker/manifests.js'; import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as searchManifests } from './search/manifests.js'; -import { manifests as sectionViewManifests } from './section-view/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...collectionManifests, ...entityActionManifests, ...memberPickerModalManifests, + ...menuItemManifests, ...pickerManifests, ...propertyEditorManifests, ...repositoryManifests, ...searchManifests, - ...sectionViewManifests, ...workspaceManifests, ]; diff --git a/src/packages/members/member/menu-item/manifests.ts b/src/packages/members/member/menu-item/manifests.ts new file mode 100644 index 0000000000..0304866916 --- /dev/null +++ b/src/packages/members/member/menu-item/manifests.ts @@ -0,0 +1,18 @@ +import { UMB_MEMBER_MANAGEMENT_MENU_ALIAS } from '../../section/menu/constants.js'; +import { UMB_MEMBER_ROOT_ENTITY_TYPE } from '../entity.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'menuItem', + alias: 'Umb.MenuItem.Members', + name: 'Members Menu Item', + weight: 200, + meta: { + label: '#treeHeaders_member', + icon: 'icon-user', + entityType: UMB_MEMBER_ROOT_ENTITY_TYPE, + menus: [UMB_MEMBER_MANAGEMENT_MENU_ALIAS], + }, + }, +]; diff --git a/src/packages/members/member/paths.ts b/src/packages/members/member/paths.ts new file mode 100644 index 0000000000..f535e8961f --- /dev/null +++ b/src/packages/members/member/paths.ts @@ -0,0 +1,18 @@ +import { UmbPathPattern } from '@umbraco-cms/backoffice/router'; +import { UMB_MEMBER_MANAGEMENT_SECTION_PATHNAME } from '../section/paths.js'; +import { UMB_MEMBER_ENTITY_TYPE, UMB_MEMBER_ROOT_ENTITY_TYPE } from './entity.js'; +import { UMB_WORKSPACE_PATH_PATTERN } from '@umbraco-cms/backoffice/workspace'; + +export const UMB_MEMBER_WORKSPACE_PATH = UMB_WORKSPACE_PATH_PATTERN.generateAbsolute({ + sectionName: UMB_MEMBER_MANAGEMENT_SECTION_PATHNAME, + entityType: UMB_MEMBER_ENTITY_TYPE, +}); + +export const UMB_MEMBER_ROOT_WORKSPACE_PATH = UMB_WORKSPACE_PATH_PATTERN.generateAbsolute({ + sectionName: UMB_MEMBER_MANAGEMENT_SECTION_PATHNAME, + entityType: UMB_MEMBER_ROOT_ENTITY_TYPE, +}); + +export const UMB_CREATE_MEMBER_WORKSPACE_PATH_PATTERN = new UmbPathPattern<{ + memberTypeUnique: string; +}>('create/:memberTypeUnique', UMB_MEMBER_WORKSPACE_PATH); diff --git a/src/packages/members/member/picker/manifests.ts b/src/packages/members/member/picker/manifests.ts index 45e2df590f..f2ae2990e2 100644 --- a/src/packages/members/member/picker/manifests.ts +++ b/src/packages/members/member/picker/manifests.ts @@ -1,7 +1,6 @@ import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'pickerSearchResultItem', kind: 'default', diff --git a/src/packages/members/member/property-editor/manifests.ts b/src/packages/members/member/property-editor/manifests.ts index 2d598e3fd6..3b0749a092 100644 --- a/src/packages/members/member/property-editor/manifests.ts +++ b/src/packages/members/member/property-editor/manifests.ts @@ -1,4 +1,3 @@ import { manifests as propertyEditorManifests } from './member-picker/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...propertyEditorManifests]; +export const manifests: Array = [...propertyEditorManifests]; diff --git a/src/packages/members/member/property-editor/member-picker/manifests.ts b/src/packages/members/member/property-editor/member-picker/manifests.ts index 1f8c7cfbcc..7230c78b91 100644 --- a/src/packages/members/member/property-editor/member-picker/manifests.ts +++ b/src/packages/members/member/property-editor/member-picker/manifests.ts @@ -1,7 +1,6 @@ import { manifest as memberPickerSchemaManifest } from './Umbraco.MemberPicker.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.MemberPicker', diff --git a/src/packages/members/member/repository/detail/manifests.ts b/src/packages/members/member/repository/detail/manifests.ts index 600f9eded3..eb5a67f3a7 100644 --- a/src/packages/members/member/repository/detail/manifests.ts +++ b/src/packages/members/member/repository/detail/manifests.ts @@ -1,21 +1,17 @@ -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_MEMBER_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Member.Detail'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_MEMBER_DETAIL_REPOSITORY_ALIAS, - name: 'Member Detail Repository', - api: () => import('./member-detail.repository.js'), -}; - export const UMB_MEMBER_DETAIL_STORE_ALIAS = 'Umb.Store.Member.Detail'; -const store: ManifestStore = { - type: 'store', - alias: UMB_MEMBER_DETAIL_STORE_ALIAS, - name: 'Member Detail Store', - api: () => import('./member-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEMBER_DETAIL_REPOSITORY_ALIAS, + name: 'Member Detail Repository', + api: () => import('./member-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_MEMBER_DETAIL_STORE_ALIAS, + name: 'Member Detail Store', + api: () => import('./member-detail.store.js'), + }, +]; diff --git a/src/packages/members/member/repository/detail/member-detail.server.data-source.ts b/src/packages/members/member/repository/detail/member-detail.server.data-source.ts index 37303524ae..674205460c 100644 --- a/src/packages/members/member/repository/detail/member-detail.server.data-source.ts +++ b/src/packages/members/member/repository/detail/member-detail.server.data-source.ts @@ -1,5 +1,6 @@ import type { UmbMemberDetailModel } from '../../types.js'; import { UMB_MEMBER_ENTITY_TYPE } from '../../entity.js'; +import { UmbMemberKind } from '../../utils/index.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; import type { UmbDetailDataSource } from '@umbraco-cms/backoffice/repository'; import type { CreateMemberRequestModel, UpdateMemberRequestModel } from '@umbraco-cms/backoffice/external/backend-api'; @@ -42,6 +43,7 @@ export class UmbMemberServerDataSource implements UmbDetailDataSource { return { + editorAlias: value.editorAlias, culture: value.culture || null, segment: value.segment || null, alias: value.alias, diff --git a/src/packages/members/member/repository/item/manifests.ts b/src/packages/members/member/repository/item/manifests.ts index 94928c952c..5fedb96f4f 100644 --- a/src/packages/members/member/repository/item/manifests.ts +++ b/src/packages/members/member/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_MEMBER_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.MemberItem'; export const UMB_MEMBER_STORE_ALIAS = 'Umb.Store.MemberItem'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_MEMBER_ITEM_REPOSITORY_ALIAS, - name: 'Member Item Repository', - api: () => import('./member-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_MEMBER_STORE_ALIAS, - name: 'Member Item Store', - api: () => import('./member-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_MEMBER_ITEM_REPOSITORY_ALIAS, + name: 'Member Item Repository', + api: () => import('./member-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_MEMBER_STORE_ALIAS, + name: 'Member Item Store', + api: () => import('./member-item.store.js'), + }, +]; diff --git a/src/packages/members/member/repository/item/member-item.server.data-source.ts b/src/packages/members/member/repository/item/member-item.server.data-source.ts index 8cb097093d..06873cdc3b 100644 --- a/src/packages/members/member/repository/item/member-item.server.data-source.ts +++ b/src/packages/members/member/repository/item/member-item.server.data-source.ts @@ -35,6 +35,7 @@ const mapper = (item: MemberItemResponseModel): UmbMemberItemModel => { entityType: UMB_MEMBER_ENTITY_TYPE, unique: item.id, name: item.variants[0].name || '', + kind: item.kind, memberType: { unique: item.memberType.id, icon: item.memberType.icon, diff --git a/src/packages/members/member/repository/item/types.ts b/src/packages/members/member/repository/item/types.ts index 9b58f77ef6..660b7d84fc 100644 --- a/src/packages/members/member/repository/item/types.ts +++ b/src/packages/members/member/repository/item/types.ts @@ -1,4 +1,5 @@ import type { UmbMemberEntityType } from '../../entity.js'; +import type { UmbMemberKindType } from '../../utils/index.js'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; export interface UmbMemberItemModel { @@ -11,6 +12,7 @@ export interface UmbMemberItemModel { collection: UmbReferenceByUnique | null; }; variants: Array; + kind: UmbMemberKindType; } export interface UmbMemberVariantItemModel { diff --git a/src/packages/members/member/repository/manifests.ts b/src/packages/members/member/repository/manifests.ts index 37dcb889ef..4dfb0c911f 100644 --- a/src/packages/members/member/repository/manifests.ts +++ b/src/packages/members/member/repository/manifests.ts @@ -1,5 +1,4 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/packages/members/member/search/manifests.ts b/src/packages/members/member/search/manifests.ts index e6b5c3845e..e191b088b8 100644 --- a/src/packages/members/member/search/manifests.ts +++ b/src/packages/members/member/search/manifests.ts @@ -1,8 +1,7 @@ import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js'; import { UMB_MEMBER_SEARCH_PROVIDER_ALIAS } from './constants.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { name: 'Member Search Provider', alias: UMB_MEMBER_SEARCH_PROVIDER_ALIAS, diff --git a/src/packages/members/member/search/member-search.server.data-source.ts b/src/packages/members/member/search/member-search.server.data-source.ts index 4c8d4acdaf..febcdd024c 100644 --- a/src/packages/members/member/search/member-search.server.data-source.ts +++ b/src/packages/members/member/search/member-search.server.data-source.ts @@ -43,6 +43,7 @@ export class UmbMemberSearchServerDataSource implements UmbSearchDataSource = [ - { - type: 'sectionView', - alias: 'Umb.SectionView.Member', - name: 'Member Section View', - js: () => import('./member-section-view.element.js'), - weight: 200, - meta: { - label: '#treeHeaders_member', - pathname: 'members', - icon: 'icon-user', - }, - conditions: [ - { - alias: 'Umb.Condition.SectionAlias', - match: 'Umb.Section.Members', - }, - ], - }, -]; - -export const manifests: Array = [...sectionsViews]; diff --git a/src/packages/members/member/section-view/member-section-view.element.ts b/src/packages/members/member/section-view/member-section-view.element.ts deleted file mode 100644 index c5ed738500..0000000000 --- a/src/packages/members/member/section-view/member-section-view.element.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { UMB_MEMBER_COLLECTION_ALIAS } from '../collection/manifests.js'; -import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js'; -import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbRoute } from '@umbraco-cms/backoffice/router'; - -@customElement('umb-member-section-view') -export class UmbMemberSectionViewElement extends UmbLitElement { - #routes: UmbRoute[] = [ - { - path: 'collection', - component: () => { - const element = document.createElement('umb-collection'); - element.setAttribute('alias', UMB_MEMBER_COLLECTION_ALIAS); - return element; - }, - }, - { - path: 'member', - component: () => { - const element = document.createElement('umb-workspace'); - element.setAttribute('entityType', UMB_MEMBER_ENTITY_TYPE); - return element; - }, - }, - { - path: '', - redirectTo: 'collection', - }, - { - path: `**`, - component: async () => (await import('@umbraco-cms/backoffice/router')).UmbRouteNotFoundElement, - }, - ]; - - override render() { - return html``; - } - - static override styles = [ - UmbTextStyles, - css` - :host { - height: 100%; - } - - #router-slot { - height: calc(100% - var(--umb-header-layout-height)); - } - `, - ]; -} - -export default UmbMemberSectionViewElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-member-section-view': UmbMemberSectionViewElement; - } -} diff --git a/src/packages/members/member/types.ts b/src/packages/members/member/types.ts index 0e6c4bfb12..d2c1f1dcaf 100644 --- a/src/packages/members/member/types.ts +++ b/src/packages/members/member/types.ts @@ -1,4 +1,5 @@ import type { UmbMemberEntityType } from './entity.js'; +import type { UmbMemberKindType } from './utils/index.js'; import type { UmbVariantModel, UmbVariantOptionModel } from '@umbraco-cms/backoffice/variant'; export interface UmbMemberDetailModel { @@ -9,6 +10,7 @@ export interface UmbMemberDetailModel { isApproved: boolean; isLockedOut: boolean; isTwoFactorEnabled: boolean; + kind: UmbMemberKindType; lastLockoutDate: string | null; lastLoginDate: string | null; lastPasswordChangeDate: string | null; diff --git a/src/packages/members/member/utils/index.ts b/src/packages/members/member/utils/index.ts new file mode 100644 index 0000000000..9b691b0035 --- /dev/null +++ b/src/packages/members/member/utils/index.ts @@ -0,0 +1,6 @@ +export type UmbMemberKindType = 'Default' | 'Api'; + +export const UmbMemberKind = Object.freeze({ + DEFAULT: 'Default', + API: 'Api', +}); diff --git a/src/packages/members/member/workspace/manifests.ts b/src/packages/members/member/workspace/manifests.ts index c47595c8fc..18979fea80 100644 --- a/src/packages/members/member/workspace/manifests.ts +++ b/src/packages/members/member/workspace/manifests.ts @@ -1,87 +1,8 @@ -import { UMB_MEMBER_ENTITY_TYPE } from '../entity.js'; -import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceView, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -import { UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION } from '@umbraco-cms/backoffice/content'; +import { manifests as memberManifests } from './member/manifests.js'; +import { manifests as memberRootManifests } from './member-root/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const UMB_MEMBER_WORKSPACE_ALIAS = 'Umb.Workspace.Member'; - -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: UMB_MEMBER_WORKSPACE_ALIAS, - name: 'Member Workspace', - api: () => import('./member-workspace.context.js'), - meta: { - entityType: UMB_MEMBER_ENTITY_TYPE, - }, -}; - -const workspaceActions: Array = [ - { - type: 'workspaceAction', - kind: 'default', - alias: 'Umb.WorkspaceAction.Member.Save', - name: 'Save Member Workspace Action', - api: UmbSubmitWorkspaceAction, - meta: { - label: '#buttons_save', - look: 'primary', - color: 'positive', - }, - conditions: [ - { - alias: 'Umb.Condition.WorkspaceAlias', - match: UMB_MEMBER_WORKSPACE_ALIAS, - }, - ], - }, +export const manifests: Array = [ + ...memberManifests, + ...memberRootManifests, ]; - -export const workspaceViews: Array = [ - { - type: 'workspaceView', - kind: 'contentEditor', - alias: 'Umb.WorkspaceView.Member.Content', - name: 'Member Workspace Content View', - weight: 100, - meta: { - label: '#general_details', - pathname: 'content', - icon: 'icon-document', - }, - conditions: [ - { - alias: 'Umb.Condition.WorkspaceAlias', - match: UMB_MEMBER_WORKSPACE_ALIAS, - }, - { - alias: UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION, - }, - ], - }, - { - type: 'workspaceView', - alias: 'Umb.WorkspaceView.Member.Member', - name: 'Member Workspace Member View', - js: () => import('./views/member/member-workspace-view-member.element.js'), - weight: 200, - meta: { - label: '#treeHeaders_member', - pathname: 'member', - icon: 'icon-user', - }, - conditions: [ - { - alias: 'Umb.Condition.WorkspaceAlias', - match: UMB_MEMBER_WORKSPACE_ALIAS, - }, - ], - }, -]; - -export const manifests: Array = [workspace, ...workspaceActions, ...workspaceViews]; diff --git a/src/packages/members/member/workspace/member-root/manifests.ts b/src/packages/members/member/workspace/member-root/manifests.ts new file mode 100644 index 0000000000..22e93de7f7 --- /dev/null +++ b/src/packages/members/member/workspace/member-root/manifests.ts @@ -0,0 +1,13 @@ +import { UMB_MEMBER_ROOT_ENTITY_TYPE } from '../../entity.js'; + +export const manifests: Array = [ + { + type: 'workspace', + alias: 'Umb.Workspace.MemberRoot', + name: 'Member Root Workspace View', + element: () => import('./member-root-workspace.element.js'), + meta: { + entityType: UMB_MEMBER_ROOT_ENTITY_TYPE, + }, + }, +]; diff --git a/src/packages/members/member/workspace/member-root/member-root-workspace.element.ts b/src/packages/members/member/workspace/member-root/member-root-workspace.element.ts new file mode 100644 index 0000000000..7095f17e2d --- /dev/null +++ b/src/packages/members/member/workspace/member-root/member-root-workspace.element.ts @@ -0,0 +1,31 @@ +import { UMB_MEMBER_COLLECTION_ALIAS } from '../../collection/index.js'; +import { UMB_MEMBER_ROOT_ENTITY_TYPE } from '../../entity.js'; +import { UmbEntityContext } from '@umbraco-cms/backoffice/entity'; +import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; + +const elementName = 'umb-member-root-workspace'; +@customElement(elementName) +export class UmbMemberRootWorkspaceElement extends UmbLitElement { + constructor() { + super(); + // TODO: this.should happen automatically + const entityContext = new UmbEntityContext(this); + entityContext.setEntityType(UMB_MEMBER_ROOT_ENTITY_TYPE); + entityContext.setUnique(null); + } + + override render() { + return html` + ; + `; + } +} + +export { UmbMemberRootWorkspaceElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbMemberRootWorkspaceElement; + } +} diff --git a/src/packages/members/member/workspace/index.ts b/src/packages/members/member/workspace/member/index.ts similarity index 100% rename from src/packages/members/member/workspace/index.ts rename to src/packages/members/member/workspace/member/index.ts diff --git a/src/packages/members/member/workspace/member/manifests.ts b/src/packages/members/member/workspace/member/manifests.ts new file mode 100644 index 0000000000..dc4946fb60 --- /dev/null +++ b/src/packages/members/member/workspace/member/manifests.ts @@ -0,0 +1,86 @@ +import { UMB_MEMBER_ENTITY_TYPE } from '../../entity.js'; +import type { + ManifestWorkspaces, + ManifestWorkspaceActions, + ManifestWorkspaceView, +} from '@umbraco-cms/backoffice/workspace'; +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION } from '@umbraco-cms/backoffice/content'; + +export const UMB_MEMBER_WORKSPACE_ALIAS = 'Umb.Workspace.Member'; + +const workspace: ManifestWorkspaces = { + type: 'workspace', + kind: 'routable', + alias: UMB_MEMBER_WORKSPACE_ALIAS, + name: 'Member Workspace', + api: () => import('./member-workspace.context.js'), + meta: { + entityType: UMB_MEMBER_ENTITY_TYPE, + }, +}; + +const workspaceActions: Array = [ + { + type: 'workspaceAction', + kind: 'default', + alias: 'Umb.WorkspaceAction.Member.Save', + name: 'Save Member Workspace Action', + api: UmbSubmitWorkspaceAction, + meta: { + label: '#buttons_save', + look: 'primary', + color: 'positive', + }, + conditions: [ + { + alias: 'Umb.Condition.WorkspaceAlias', + match: UMB_MEMBER_WORKSPACE_ALIAS, + }, + ], + }, +]; + +export const workspaceViews: Array = [ + { + type: 'workspaceView', + kind: 'contentEditor', + alias: 'Umb.WorkspaceView.Member.Content', + name: 'Member Workspace Content View', + weight: 100, + meta: { + label: '#general_details', + pathname: 'content', + icon: 'icon-document', + }, + conditions: [ + { + alias: 'Umb.Condition.WorkspaceAlias', + match: UMB_MEMBER_WORKSPACE_ALIAS, + }, + { + alias: UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION, + }, + ], + }, + { + type: 'workspaceView', + alias: 'Umb.WorkspaceView.Member.Member', + name: 'Member Workspace Member View', + js: () => import('./views/member/member-workspace-view-member.element.js'), + weight: 200, + meta: { + label: '#treeHeaders_member', + pathname: 'member', + icon: 'icon-user', + }, + conditions: [ + { + alias: 'Umb.Condition.WorkspaceAlias', + match: UMB_MEMBER_WORKSPACE_ALIAS, + }, + ], + }, +]; + +export const manifests: Array = [workspace, ...workspaceActions, ...workspaceViews]; diff --git a/src/packages/members/member/workspace/member-workspace-editor.element.ts b/src/packages/members/member/workspace/member/member-workspace-editor.element.ts similarity index 98% rename from src/packages/members/member/workspace/member-workspace-editor.element.ts rename to src/packages/members/member/workspace/member/member-workspace-editor.element.ts index 5bbe5e974e..70aa290688 100644 --- a/src/packages/members/member/workspace/member-workspace-editor.element.ts +++ b/src/packages/members/member/workspace/member/member-workspace-editor.element.ts @@ -1,4 +1,4 @@ -import type { UmbMemberVariantOptionModel } from '../types.js'; +import type { UmbMemberVariantOptionModel } from '../../types.js'; import { UMB_MEMBER_WORKSPACE_CONTEXT } from './member-workspace.context-token.js'; import { UmbMemberWorkspaceSplitViewElement } from './member-workspace-split-view.element.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; diff --git a/src/packages/members/member/workspace/member-workspace-split-view.element.ts b/src/packages/members/member/workspace/member/member-workspace-split-view.element.ts similarity index 95% rename from src/packages/members/member/workspace/member-workspace-split-view.element.ts rename to src/packages/members/member/workspace/member/member-workspace-split-view.element.ts index af378926ed..978d3f89c3 100644 --- a/src/packages/members/member/workspace/member-workspace-split-view.element.ts +++ b/src/packages/members/member/workspace/member/member-workspace-split-view.element.ts @@ -1,3 +1,4 @@ +import { UMB_MEMBER_ROOT_WORKSPACE_PATH } from '../../paths.js'; import { UMB_MEMBER_WORKSPACE_CONTEXT } from './member-workspace.context-token.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, nothing, customElement, state, repeat } from '@umbraco-cms/backoffice/external/lit'; @@ -12,8 +13,6 @@ export class UmbMemberWorkspaceSplitViewElement extends UmbLitElement { @state() _variants?: Array; - #BACK_PATH = '/section/member-management/view/members'; - constructor() { super(); @@ -45,7 +44,7 @@ export class UmbMemberWorkspaceSplitViewElement extends UmbLitElement { (view) => html` diff --git a/src/packages/members/member/workspace/member-workspace.context-token.ts b/src/packages/members/member/workspace/member/member-workspace.context-token.ts similarity index 100% rename from src/packages/members/member/workspace/member-workspace.context-token.ts rename to src/packages/members/member/workspace/member/member-workspace.context-token.ts diff --git a/src/packages/members/member/workspace/member-workspace.context.ts b/src/packages/members/member/workspace/member/member-workspace.context.ts similarity index 95% rename from src/packages/members/member/workspace/member-workspace.context.ts rename to src/packages/members/member/workspace/member/member-workspace.context.ts index 8ef8c8c853..0bee716008 100644 --- a/src/packages/members/member/workspace/member-workspace.context.ts +++ b/src/packages/members/member/workspace/member/member-workspace.context.ts @@ -1,6 +1,6 @@ -import { UmbMemberDetailRepository } from '../repository/index.js'; -import type { UmbMemberDetailModel, UmbMemberVariantModel, UmbMemberVariantOptionModel } from '../types.js'; -import { UmbMemberPropertyDatasetContext } from '../property-dataset-context/member-property-dataset-context.js'; +import { UmbMemberDetailRepository } from '../../repository/index.js'; +import type { UmbMemberDetailModel, UmbMemberVariantModel, UmbMemberVariantOptionModel } from '../../types.js'; +import { UmbMemberPropertyDatasetContext } from '../../property-dataset-context/member-property-dataset-context.js'; import { UMB_MEMBER_WORKSPACE_ALIAS } from './manifests.js'; import { UmbMemberWorkspaceEditorElement } from './member-workspace-editor.element.js'; import { type UmbMemberTypeDetailModel, UmbMemberTypeDetailRepository } from '@umbraco-cms/backoffice/member-type'; @@ -53,6 +53,7 @@ export class UmbMemberWorkspaceContext readonly createDate = this.#currentData.asObservablePart((data) => data?.variants[0].createDate); readonly updateDate = this.#currentData.asObservablePart((data) => data?.variants[0].updateDate); readonly contentTypeUnique = this.#currentData.asObservablePart((data) => data?.memberType.unique); + readonly kind = this.#currentData.asObservablePart((data) => data?.kind); readonly structure = new UmbContentTypeStructureManager(this, new UmbMemberTypeDetailRepository(this)); readonly varies = this.structure.ownerContentTypePart((x) => @@ -268,7 +269,17 @@ export class UmbMemberWorkspaceContext ) { variantId ??= UmbVariantId.CreateInvariant(); - const entry = { ...variantId.toObject(), alias, value }; + const property = await this.structure.getPropertyStructureByAlias(alias); + + if (!property) { + throw new Error(`Property alias "${alias}" not found.`); + } + + //const dataType = await this.#dataTypeItemManager.getItemByUnique(property.dataType.unique); + //const editorAlias = dataType.editorAlias; + const editorAlias = 'Umbraco.TextBox'; + + const entry = { ...variantId.toObject(), alias, editorAlias, value }; const currentData = this.getData(); if (currentData) { const values = appendToFrozenArray( diff --git a/src/packages/members/member/workspace/views/member/member-workspace-view-member-info.element.ts b/src/packages/members/member/workspace/member/views/member/member-workspace-view-member-info.element.ts similarity index 68% rename from src/packages/members/member/workspace/views/member/member-workspace-view-member-info.element.ts rename to src/packages/members/member/workspace/member/views/member/member-workspace-view-member-info.element.ts index 2a8b77ddb3..e649605ee3 100644 --- a/src/packages/members/member/workspace/views/member/member-workspace-view-member-info.element.ts +++ b/src/packages/members/member/workspace/member/views/member/member-workspace-view-member-info.element.ts @@ -1,11 +1,12 @@ // import { UMB_COMPOSITION_PICKER_MODAL, type UmbCompositionPickerModalData } from '../../../modals/index.js'; import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context-token.js'; +import { UmbMemberKind, type UmbMemberKindType } from '../../../../utils/index.js'; import { TimeFormatOptions } from './utils.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbMemberTypeItemRepository } from '@umbraco-cms/backoffice/member-type'; @@ -13,8 +14,10 @@ import { UmbMemberTypeItemRepository } from '@umbraco-cms/backoffice/member-type export class UmbMemberWorkspaceViewMemberInfoElement extends UmbLitElement implements UmbWorkspaceViewElement { @state() private _memberTypeUnique = ''; + @state() private _memberTypeName = ''; + @state() private _memberTypeIcon = ''; @@ -30,6 +33,9 @@ export class UmbMemberWorkspaceViewMemberInfoElement extends UmbLitElement imple @state() private _unique = ''; + @state() + private _memberKind?: UmbMemberKindType; + #workspaceContext?: typeof UMB_MEMBER_WORKSPACE_CONTEXT.TYPE; #memberTypeItemRepository: UmbMemberTypeItemRepository = new UmbMemberTypeItemRepository(this); @@ -51,6 +57,7 @@ export class UmbMemberWorkspaceViewMemberInfoElement extends UmbLitElement imple this.observe(this.#workspaceContext.createDate, (date) => (this._createDate = this.#setDateFormat(date))); this.observe(this.#workspaceContext.updateDate, (date) => (this._updateDate = this.#setDateFormat(date))); this.observe(this.#workspaceContext.unique, (unique) => (this._unique = unique || '')); + this.observe(this.#workspaceContext.kind, (kind) => (this._memberKind = kind)); const memberType = (await this.#memberTypeItemRepository.requestItems([this._memberTypeUnique])).data?.[0]; if (!memberType) return; @@ -70,41 +77,45 @@ export class UmbMemberWorkspaceViewMemberInfoElement extends UmbLitElement imple #renderGeneralSection() { return html` -
- Created - ${this._createDate} -
-
- Last edited - ${this._updateDate} -
-
- Member Type - - - -
-
- Id - ${this._unique} -
+ +
+

Created

+ ${this._createDate} +
+
+

Last edited

+ ${this._updateDate} +
+
+

Member Type

+ + + +
+
+

+ ${this._memberKind === UmbMemberKind.API + ? this.localize.term('member_memberKindApi') + : this.localize.term('member_memberKindDefault')} +
+
+

Id

+ ${this._unique} +
+
`; } static override styles = [ UmbTextStyles, css` - .general-item { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-1); - } - - .general-item:not(:last-child) { - margin-bottom: var(--uui-size-space-6); + h4 { + margin: 0; } `, ]; diff --git a/src/packages/members/member/workspace/views/member/member-workspace-view-member.element.ts b/src/packages/members/member/workspace/member/views/member/member-workspace-view-member.element.ts similarity index 84% rename from src/packages/members/member/workspace/views/member/member-workspace-view-member.element.ts rename to src/packages/members/member/workspace/member/views/member/member-workspace-view-member.element.ts index bb33e453b8..de613acd6f 100644 --- a/src/packages/members/member/workspace/views/member/member-workspace-view-member.element.ts +++ b/src/packages/members/member/workspace/member/views/member/member-workspace-view-member.element.ts @@ -1,10 +1,10 @@ import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context-token.js'; -import type { UmbMemberDetailModel } from '../../../types.js'; +import type { UmbMemberDetailModel } from '../../../../types.js'; import { TimeFormatOptions } from './utils.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import type { UUIBooleanInputEvent } from '@umbraco-cms/backoffice/external/uui'; import './member-workspace-view-member-info.element.js'; @@ -208,34 +208,36 @@ export class UmbMemberWorkspaceViewMemberElement extends UmbLitElement implement return html`
-
- Failed login attempts - ${this._workspaceContext.failedPasswordAttempts} -
-
- Last lockout date - - ${this._workspaceContext.lastLockOutDate - ? this.localize.date(this._workspaceContext.lastLockOutDate, TimeFormatOptions) - : this.localize.term('general_never')} - -
-
- Last login - - ${this._workspaceContext.lastLoginDate - ? this.localize.date(this._workspaceContext.lastLoginDate, TimeFormatOptions) - : this.localize.term('general_never')} - -
-
- Password changed - - ${this._workspaceContext.lastPasswordChangeDate - ? this.localize.date(this._workspaceContext.lastPasswordChangeDate, TimeFormatOptions) - : this.localize.term('general_never')} - -
+ +
+

Failed login attempts

+ ${this._workspaceContext.failedPasswordAttempts} +
+
+

Last lockout date

+ + ${this._workspaceContext.lastLockOutDate + ? this.localize.date(this._workspaceContext.lastLockOutDate, TimeFormatOptions) + : this.localize.term('general_never')} + +
+
+

Last login

+ + ${this._workspaceContext.lastLoginDate + ? this.localize.date(this._workspaceContext.lastLoginDate, TimeFormatOptions) + : this.localize.term('general_never')} + +
+
+

Password changed

+ + ${this._workspaceContext.lastPasswordChangeDate + ? this.localize.date(this._workspaceContext.lastPasswordChangeDate, TimeFormatOptions) + : this.localize.term('general_never')} + +
+
@@ -291,14 +293,8 @@ export class UmbMemberWorkspaceViewMemberElement extends UmbLitElement implement color: var(--uui-color-danger); } - .general-item { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-1); - } - - .general-item:not(:last-child) { - margin-bottom: var(--uui-size-space-6); + h4 { + margin: 0; } `, ]; diff --git a/src/packages/members/member/workspace/views/member/utils.ts b/src/packages/members/member/workspace/member/views/member/utils.ts similarity index 100% rename from src/packages/members/member/workspace/views/member/utils.ts rename to src/packages/members/member/workspace/member/views/member/utils.ts diff --git a/src/packages/members/section/constants.ts b/src/packages/members/section/constants.ts new file mode 100644 index 0000000000..afe1a32f6d --- /dev/null +++ b/src/packages/members/section/constants.ts @@ -0,0 +1 @@ +export const UMB_MEMBER_MANAGEMENT_SECTION_ALIAS = 'Umb.Section.Members'; diff --git a/src/packages/members/section/index.ts b/src/packages/members/section/index.ts new file mode 100644 index 0000000000..4f07201dcf --- /dev/null +++ b/src/packages/members/section/index.ts @@ -0,0 +1 @@ +export * from './constants.js'; diff --git a/src/packages/members/section/manifests.ts b/src/packages/members/section/manifests.ts new file mode 100644 index 0000000000..9837f42009 --- /dev/null +++ b/src/packages/members/section/manifests.ts @@ -0,0 +1,27 @@ +import { UMB_MEMBER_MANAGEMENT_SECTION_ALIAS } from './constants.js'; +import { manifests as sectionSidebarAppManifests } from './sidebar-app/manifests.js'; +import { manifests as menuManifests } from './menu/manifests.js'; +import type { ManifestSection, UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +const section: ManifestSection = { + type: 'section', + alias: UMB_MEMBER_MANAGEMENT_SECTION_ALIAS, + name: 'Members Section', + weight: 500, + meta: { + label: '#sections_member', + pathname: 'member-management', + }, + conditions: [ + { + alias: 'Umb.Condition.SectionUserPermission', + match: UMB_MEMBER_MANAGEMENT_SECTION_ALIAS, + }, + ], +}; + +export const manifests: Array = [ + section, + ...sectionSidebarAppManifests, + ...menuManifests, +]; diff --git a/src/packages/members/section/menu/constants.ts b/src/packages/members/section/menu/constants.ts new file mode 100644 index 0000000000..c90a996f52 --- /dev/null +++ b/src/packages/members/section/menu/constants.ts @@ -0,0 +1 @@ +export const UMB_MEMBER_MANAGEMENT_MENU_ALIAS = 'Umb.Menu.MemberManagement'; diff --git a/src/packages/members/section/menu/index.ts b/src/packages/members/section/menu/index.ts new file mode 100644 index 0000000000..4f07201dcf --- /dev/null +++ b/src/packages/members/section/menu/index.ts @@ -0,0 +1 @@ +export * from './constants.js'; diff --git a/src/packages/members/section/menu/manifests.ts b/src/packages/members/section/menu/manifests.ts new file mode 100644 index 0000000000..36cbd68c00 --- /dev/null +++ b/src/packages/members/section/menu/manifests.ts @@ -0,0 +1,9 @@ +import { UMB_MEMBER_MANAGEMENT_MENU_ALIAS } from './constants.js'; + +export const manifests = [ + { + type: 'menu', + alias: UMB_MEMBER_MANAGEMENT_MENU_ALIAS, + name: 'Member Management Menu', + }, +]; diff --git a/src/packages/members/section/paths.ts b/src/packages/members/section/paths.ts new file mode 100644 index 0000000000..27a89f53ce --- /dev/null +++ b/src/packages/members/section/paths.ts @@ -0,0 +1,7 @@ +import { UMB_SECTION_PATH_PATTERN } from '@umbraco-cms/backoffice/section'; + +export const UMB_MEMBER_MANAGEMENT_SECTION_PATHNAME = 'member-management'; + +export const UMB_MEMBER_MANAGEMENT_SECTION_PATH = UMB_SECTION_PATH_PATTERN.generateAbsolute({ + sectionName: UMB_MEMBER_MANAGEMENT_SECTION_PATHNAME, +}); diff --git a/src/packages/members/section/sidebar-app/index.ts b/src/packages/members/section/sidebar-app/index.ts new file mode 100644 index 0000000000..42f853e5be --- /dev/null +++ b/src/packages/members/section/sidebar-app/index.ts @@ -0,0 +1 @@ +export * from '../constants.js'; diff --git a/src/packages/members/section/sidebar-app/manifests.ts b/src/packages/members/section/sidebar-app/manifests.ts new file mode 100644 index 0000000000..ed9177516e --- /dev/null +++ b/src/packages/members/section/sidebar-app/manifests.ts @@ -0,0 +1,22 @@ +import { UMB_MEMBER_MANAGEMENT_SECTION_ALIAS } from '../constants.js'; +import { UMB_MEMBER_MANAGEMENT_MENU_ALIAS } from '../menu/index.js'; + +export const manifests: Array = [ + { + type: 'sectionSidebarApp', + kind: 'menu', + alias: 'Umb.SectionSidebarApp.Menu.MemberManagement', + name: 'Member Management Menu Sidebar App', + weight: 100, + meta: { + label: '#treeHeaders_member', + menu: UMB_MEMBER_MANAGEMENT_MENU_ALIAS, + }, + conditions: [ + { + alias: 'Umb.Condition.SectionAlias', + match: UMB_MEMBER_MANAGEMENT_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/packages/models-builder/manifests.ts b/src/packages/models-builder/manifests.ts index aead81d78e..61cd125a0d 100644 --- a/src/packages/models-builder/manifests.ts +++ b/src/packages/models-builder/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'dashboard', alias: 'Umb.Dashboard.ModelsBuilder', diff --git a/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts b/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts index 67b398fbdc..e1f29e9592 100644 --- a/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts +++ b/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts @@ -137,7 +137,7 @@ export class UmbInputMultiUrlElement extends UUIFormControlMixin(UmbLitElement, * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content. * @type {boolean} * @attr - * @default false + * @default */ @property({ type: Boolean, reflect: true }) public get readonly() { diff --git a/src/packages/multi-url-picker/manifests.ts b/src/packages/multi-url-picker/manifests.ts index d8c3833b2e..b95810b145 100644 --- a/src/packages/multi-url-picker/manifests.ts +++ b/src/packages/multi-url-picker/manifests.ts @@ -2,9 +2,8 @@ import { manifests as modalManifests } from './link-picker-modal/manifests.js'; import { manifests as monacoMarkdownEditorManifests } from './monaco-markdown-editor-action/manifests.js'; import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; import { manifests as tinyMceManifests } from './tiny-mce-plugin/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...modalManifests, ...monacoMarkdownEditorManifests, ...propertyEditorManifests, diff --git a/src/packages/packages/manifests.ts b/src/packages/packages/manifests.ts index 5ca97a1970..7ebb8e732f 100644 --- a/src/packages/packages/manifests.ts +++ b/src/packages/packages/manifests.ts @@ -2,9 +2,8 @@ import { manifests as repositoryManifests } from './package/repository/manifests import { manifests as packageBuilderManifests } from './package-builder/manifests.js'; import { manifests as packageRepoManifests } from './package-repo/manifests.js'; import { manifests as packageSectionManifests } from './package-section/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...repositoryManifests, ...packageBuilderManifests, ...packageRepoManifests, diff --git a/src/packages/packages/package-builder/manifests.ts b/src/packages/packages/package-builder/manifests.ts index 40c3db214d..949b9ec74d 100644 --- a/src/packages/packages/package-builder/manifests.ts +++ b/src/packages/packages/package-builder/manifests.ts @@ -1,13 +1,11 @@ -import type { ManifestTypes, ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; - -const workspace: ManifestWorkspace = { - type: 'workspace', - alias: 'Umb.Workspace.PackageBuilder', - name: 'Package Builder Workspace', - element: () => import('./workspace/workspace-package-builder.element.js'), - meta: { - entityType: 'package-builder', +export const manifests: Array = [ + { + type: 'workspace', + alias: 'Umb.Workspace.PackageBuilder', + name: 'Package Builder Workspace', + element: () => import('./workspace/workspace-package-builder.element.js'), + meta: { + entityType: 'package-builder', + }, }, -}; - -export const manifests: Array = [workspace]; +]; diff --git a/src/packages/packages/package-repo/manifests.ts b/src/packages/packages/package-repo/manifests.ts index 9ee6b2ffe5..af6df88a3f 100644 --- a/src/packages/packages/package-repo/manifests.ts +++ b/src/packages/packages/package-repo/manifests.ts @@ -1,13 +1,11 @@ -import type { ManifestTypes, ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; - -const workspace: ManifestWorkspace = { - type: 'workspace', - alias: 'Umb.Workspace.Package', - name: 'Package Workspace', - element: () => import('./workspace/workspace-package.element.js'), - meta: { - entityType: 'package', +export const manifests: Array = [ + { + type: 'workspace', + alias: 'Umb.Workspace.Package', + name: 'Package Workspace', + element: () => import('./workspace/workspace-package.element.js'), + meta: { + entityType: 'package', + }, }, -}; - -export const manifests: Array = [workspace]; +]; diff --git a/src/packages/packages/package-section/manifests.ts b/src/packages/packages/package-section/manifests.ts index 853956a7c2..2f3effbeac 100644 --- a/src/packages/packages/package-section/manifests.ts +++ b/src/packages/packages/package-section/manifests.ts @@ -1,25 +1,22 @@ -import type { ManifestSection, ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - const sectionAlias = 'Umb.Section.Packages'; -const section: ManifestSection = { - type: 'section', - alias: sectionAlias, - name: 'Packages Section', - weight: 700, - meta: { - label: '#sections_packages', - pathname: 'packages', - }, - conditions: [ - { - alias: 'Umb.Condition.SectionUserPermission', - match: sectionAlias, +export const manifests: Array = [ + { + type: 'section', + alias: sectionAlias, + name: 'Packages Section', + weight: 700, + meta: { + label: '#sections_packages', + pathname: 'packages', }, - ], -}; - -const sectionsViews: Array = [ + conditions: [ + { + alias: 'Umb.Condition.SectionUserPermission', + match: sectionAlias, + }, + ], + }, { type: 'sectionView', alias: 'Umb.SectionView.Packages.Marketplace', @@ -75,5 +72,3 @@ const sectionsViews: Array = [ ], }, ]; - -export const manifests: Array = [section, ...sectionsViews]; diff --git a/src/packages/packages/package-section/views/created/created-packages-section-view.element.ts b/src/packages/packages/package-section/views/created/created-packages-section-view.element.ts index c3dd0a5746..80e7b597ce 100644 --- a/src/packages/packages/package-section/views/created/created-packages-section-view.element.ts +++ b/src/packages/packages/package-section/views/created/created-packages-section-view.element.ts @@ -2,7 +2,8 @@ import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit import { createExtensionElement } from '@umbraco-cms/backoffice/extension-api'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { ManifestWorkspace, UmbSectionViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbSectionViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspace } from '@umbraco-cms/backoffice/workspace'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; @customElement('umb-created-packages-section-view') diff --git a/src/packages/packages/package/repository/manifests.ts b/src/packages/packages/package/repository/manifests.ts index 72b80c8342..c490ff9593 100644 --- a/src/packages/packages/package/repository/manifests.ts +++ b/src/packages/packages/package/repository/manifests.ts @@ -1,18 +1,16 @@ import { UMB_PACKAGE_REPOSITORY_ALIAS, UMB_PACKAGE_STORE_ALIAS } from './constants.js'; -import type { ManifestStore, ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_PACKAGE_REPOSITORY_ALIAS, - name: 'Package Repository', - api: () => import('./package.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_PACKAGE_STORE_ALIAS, - name: 'Package Store', - api: () => import('./package.store.js'), -}; - -export const manifests: Array = [store, repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_PACKAGE_REPOSITORY_ALIAS, + name: 'Package Repository', + api: () => import('./package.repository.js'), + }, + { + type: 'store', + alias: UMB_PACKAGE_STORE_ALIAS, + name: 'Package Store', + api: () => import('./package.store.js'), + }, +]; diff --git a/src/packages/property-editors/checkbox-list/manifests.ts b/src/packages/property-editors/checkbox-list/manifests.ts index 768e35ff23..3638351c88 100644 --- a/src/packages/property-editors/checkbox-list/manifests.ts +++ b/src/packages/property-editors/checkbox-list/manifests.ts @@ -1,7 +1,6 @@ import { manifest as schemaManifest } from './Umbraco.CheckboxList.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.CheckBoxList', diff --git a/src/packages/property-editors/collection/config/layout/layout-configuration.element.ts b/src/packages/property-editors/collection/config/layout/layout-configuration.element.ts index a26b1565df..f65310d05b 100644 --- a/src/packages/property-editors/collection/config/layout/layout-configuration.element.ts +++ b/src/packages/property-editors/collection/config/layout/layout-configuration.element.ts @@ -14,11 +14,12 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_ICON_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { UmbInputManifestElement } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import type { UUIInputElement, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; interface UmbCollectionLayoutConfiguration { icon?: string; diff --git a/src/packages/property-editors/collection/manifests.ts b/src/packages/property-editors/collection/manifests.ts index 11e7b39757..fa1a6cfa25 100644 --- a/src/packages/property-editors/collection/manifests.ts +++ b/src/packages/property-editors/collection/manifests.ts @@ -3,7 +3,7 @@ import { manifest as columnConfiguration } from './config/column/manifests.js'; import { manifest as layoutConfiguration } from './config/layout/manifests.js'; import { manifest as orderBy } from './config/order-by/manifests.js'; import { manifest as schema } from './Umbraco.ListView.js'; -import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; const propertyEditorUiManifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', @@ -95,7 +95,7 @@ const propertyEditorUiManifest: ManifestPropertyEditorUi = { }, }; -export const manifests: Array = [ +export const manifests: Array = [ propertyEditorUiManifest, bulkActionPermissions, columnConfiguration, diff --git a/src/packages/property-editors/color-picker/manifests.ts b/src/packages/property-editors/color-picker/manifests.ts index a1b21b70d7..661024c3b4 100644 --- a/src/packages/property-editors/color-picker/manifests.ts +++ b/src/packages/property-editors/color-picker/manifests.ts @@ -1,7 +1,6 @@ import { manifest as schemaManifest } from './Umbraco.ColorPicker.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.ColorPicker', diff --git a/src/packages/property-editors/content-picker/dynamic-root/manifests.ts b/src/packages/property-editors/content-picker/dynamic-root/manifests.ts index 2260645bdc..6e046c0210 100644 --- a/src/packages/property-editors/content-picker/dynamic-root/manifests.ts +++ b/src/packages/property-editors/content-picker/dynamic-root/manifests.ts @@ -1,4 +1,3 @@ import { manifests as modalManifests } from './modals/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...modalManifests]; +export const manifests: Array = [...modalManifests]; diff --git a/src/packages/property-editors/content-picker/dynamic-root/modals/manifests.ts b/src/packages/property-editors/content-picker/dynamic-root/modals/manifests.ts index 410a8ea566..743a2bcdf3 100644 --- a/src/packages/property-editors/content-picker/dynamic-root/modals/manifests.ts +++ b/src/packages/property-editors/content-picker/dynamic-root/modals/manifests.ts @@ -2,14 +2,8 @@ import { UMB_CONTENT_PICKER_DOCUMENT_ROOT_ORIGIN_PICKER_MODAL_ALIAS, UMB_CONTENT_PICKER_DOCUMENT_ROOT_QUERY_STEP_PICKER_MODAL_ALIAS, } from './constants.js'; -import type { - ManifestDynamicRootOrigin, - ManifestDynamicRootQueryStep, - ManifestModal, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: UMB_CONTENT_PICKER_DOCUMENT_ROOT_ORIGIN_PICKER_MODAL_ALIAS, @@ -22,9 +16,6 @@ const modals: Array = [ name: 'Append step to query', element: () => import('./dynamic-root-query-step-picker-modal.element.js'), }, -]; - -const origins: Array = [ { type: 'dynamicRootOrigin', alias: 'Umb.DynamicRootOrigin.Root', @@ -85,9 +76,6 @@ const origins: Array = [ }, weight: 60, }, -]; - -const querySteps: Array = [ { type: 'dynamicRootQueryStep', alias: 'Umb.DynamicRootQueryStep.NearestAncestorOrSelf', @@ -137,5 +125,3 @@ const querySteps: Array = [ weight: 70, }, ]; - -export const manifests: Array = [...modals, ...origins, ...querySteps]; diff --git a/src/packages/property-editors/content-picker/manifests.ts b/src/packages/property-editors/content-picker/manifests.ts index 412adfacaf..0c763869d1 100644 --- a/src/packages/property-editors/content-picker/manifests.ts +++ b/src/packages/property-editors/content-picker/manifests.ts @@ -2,7 +2,7 @@ import { manifest as sourceManifest } from './config/source/manifests.js'; import { manifest as sourceTypeManifest } from './config/source-type/manifests.js'; import { manifest as schemaManifest } from './Umbraco.MultiNodeTreePicker.js'; import { manifests as dynamicRootManifests } from './dynamic-root/manifests.js'; -import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', @@ -36,4 +36,4 @@ const manifest: ManifestPropertyEditorUi = { const config: Array = [sourceManifest, sourceTypeManifest]; -export const manifests: Array = [manifest, ...config, schemaManifest, ...dynamicRootManifests]; +export const manifests: Array = [manifest, ...config, schemaManifest, ...dynamicRootManifests]; diff --git a/src/packages/property-editors/date-picker/manifests.ts b/src/packages/property-editors/date-picker/manifests.ts index c5cb4432f2..ca55ef9f88 100644 --- a/src/packages/property-editors/date-picker/manifests.ts +++ b/src/packages/property-editors/date-picker/manifests.ts @@ -1,7 +1,6 @@ import { manifest as schemaManifest } from './Umbraco.DateTime.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.DatePicker', diff --git a/src/packages/property-editors/dropdown/manifests.ts b/src/packages/property-editors/dropdown/manifests.ts index 0c73c72290..de216762e1 100644 --- a/src/packages/property-editors/dropdown/manifests.ts +++ b/src/packages/property-editors/dropdown/manifests.ts @@ -1,7 +1,6 @@ import { manifest as schemaManifest } from './Umbraco.Dropdown.Flexible.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.Dropdown', diff --git a/src/packages/property-editors/eye-dropper/manifests.ts b/src/packages/property-editors/eye-dropper/manifests.ts index f7f6276a85..b40c4974db 100644 --- a/src/packages/property-editors/eye-dropper/manifests.ts +++ b/src/packages/property-editors/eye-dropper/manifests.ts @@ -1,7 +1,6 @@ import { manifest as schemaManifest } from './Umbraco.ColorPicker.EyeDropper.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.EyeDropper', diff --git a/src/packages/property-editors/icon-picker/manifests.ts b/src/packages/property-editors/icon-picker/manifests.ts index 28b29af0d5..ab1792f1c8 100644 --- a/src/packages/property-editors/icon-picker/manifests.ts +++ b/src/packages/property-editors/icon-picker/manifests.ts @@ -1,15 +1,13 @@ -import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.IconPicker', - name: 'Icon Picker Property Editor UI', - element: () => import('./property-editor-ui-icon-picker.element.js'), - meta: { - label: 'Icon Picker', - icon: 'icon-autofill', - group: 'common', +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.IconPicker', + name: 'Icon Picker Property Editor UI', + element: () => import('./property-editor-ui-icon-picker.element.js'), + meta: { + label: 'Icon Picker', + icon: 'icon-autofill', + group: 'common', + }, }, -}; - -export const manifests: Array = [manifest]; +]; diff --git a/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.element.ts b/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.element.ts index 3455b3a5ad..ccbdcd5a2d 100644 --- a/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.element.ts +++ b/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.element.ts @@ -1,6 +1,7 @@ import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { extractUmbColorVariable } from '@umbraco-cms/backoffice/resources'; import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; diff --git a/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts b/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts index 1a0e94d0cb..b978ac2ece 100644 --- a/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts +++ b/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts @@ -1,4 +1,4 @@ -import type { UmbIconPickerModalElement } from '../../core/modal/common/icon-picker/icon-picker-modal.element.js'; +import type { UmbIconPickerModalElement } from '@umbraco-cms/backoffice/icon'; import type { Meta, Story } from '@storybook/web-components'; import { html } from '@umbraco-cms/backoffice/external/lit'; diff --git a/src/packages/property-editors/label/manifests.ts b/src/packages/property-editors/label/manifests.ts index 584cea7d89..aa672fc776 100644 --- a/src/packages/property-editors/label/manifests.ts +++ b/src/packages/property-editors/label/manifests.ts @@ -1,7 +1,6 @@ import { manifest as labelSchemaManifest } from './Umbraco.Label.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.Label', diff --git a/src/packages/property-editors/manifests.ts b/src/packages/property-editors/manifests.ts index 7ed9fe14b6..55595ce291 100644 --- a/src/packages/property-editors/manifests.ts +++ b/src/packages/property-editors/manifests.ts @@ -20,9 +20,8 @@ import { manifests as textareaManifests } from './textarea/manifests.js'; import { manifests as textBoxManifests } from './text-box/manifests.js'; import { manifests as toggleManifests } from './toggle/manifests.js'; import { manifests as contentPickerManifests } from './content-picker/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...checkboxListManifests, ...collectionManifests, ...colorPickerManifests, diff --git a/src/packages/property-editors/multiple-text-string/Umbraco.MultipleTextString.ts b/src/packages/property-editors/multiple-text-string/Umbraco.MultipleTextString.ts index 506619172d..38225c91d1 100644 --- a/src/packages/property-editors/multiple-text-string/Umbraco.MultipleTextString.ts +++ b/src/packages/property-editors/multiple-text-string/Umbraco.MultipleTextString.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorSchema', name: 'Multiple Text String', diff --git a/src/packages/property-editors/multiple-text-string/manifests.ts b/src/packages/property-editors/multiple-text-string/manifests.ts index 6d70c0d66b..fc0acd7389 100644 --- a/src/packages/property-editors/multiple-text-string/manifests.ts +++ b/src/packages/property-editors/multiple-text-string/manifests.ts @@ -1,7 +1,6 @@ import { manifests as schemaManifests } from './Umbraco.MultipleTextString.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.MultipleTextString', diff --git a/src/packages/property-editors/number/Umbraco.Decimal.ts b/src/packages/property-editors/number/Umbraco.Decimal.ts index 48cce8a23a..c99e98baec 100644 --- a/src/packages/property-editors/number/Umbraco.Decimal.ts +++ b/src/packages/property-editors/number/Umbraco.Decimal.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorSchema', name: 'Decimal', diff --git a/src/packages/property-editors/number/Umbraco.Integer.ts b/src/packages/property-editors/number/Umbraco.Integer.ts index c90a46342b..97ea39ee2a 100644 --- a/src/packages/property-editors/number/Umbraco.Integer.ts +++ b/src/packages/property-editors/number/Umbraco.Integer.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorSchema', name: 'Integer', diff --git a/src/packages/property-editors/number/manifests.ts b/src/packages/property-editors/number/manifests.ts index 0f1967565c..11ec645710 100644 --- a/src/packages/property-editors/number/manifests.ts +++ b/src/packages/property-editors/number/manifests.ts @@ -1,8 +1,7 @@ import { manifests as decimalSchemaManifests } from './Umbraco.Decimal.js'; import { manifests as integerSchemaManifests } from './Umbraco.Integer.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.Decimal', diff --git a/src/packages/property-editors/radio-button-list/manifests.ts b/src/packages/property-editors/radio-button-list/manifests.ts index 6546193f76..40f81888bb 100644 --- a/src/packages/property-editors/radio-button-list/manifests.ts +++ b/src/packages/property-editors/radio-button-list/manifests.ts @@ -1,7 +1,6 @@ import { manifest as radioButtonListSchemaManifest } from './Umbraco.RadioButtonList.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.RadioButtonList', diff --git a/src/packages/property-editors/slider/manifests.ts b/src/packages/property-editors/slider/manifests.ts index 0ce26197ab..fd4519a59c 100644 --- a/src/packages/property-editors/slider/manifests.ts +++ b/src/packages/property-editors/slider/manifests.ts @@ -1,7 +1,6 @@ import { manifest as sliderSchemaManifest } from './Umbraco.Slider.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.Slider', diff --git a/src/packages/property-editors/text-box/manifests.ts b/src/packages/property-editors/text-box/manifests.ts index 5fd61d5f2a..15e0a663b0 100644 --- a/src/packages/property-editors/text-box/manifests.ts +++ b/src/packages/property-editors/text-box/manifests.ts @@ -1,6 +1,5 @@ import { manifest as textBoxSchemaManifest } from './Umbraco.TextBox.js'; import { manifest as emailSchemaManifest } from './Umbraco.EmailAddress.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; // TODO: we don't really want this config value to be changed from the UI. We need a way to handle hidden config properties. const inputTypeConfig = { @@ -10,7 +9,7 @@ const inputTypeConfig = { propertyEditorUiAlias: 'Umb.PropertyEditorUi.Label', }; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.TextBox', diff --git a/src/packages/property-editors/textarea/manifests.ts b/src/packages/property-editors/textarea/manifests.ts index ef9f9a355f..61cafe3756 100644 --- a/src/packages/property-editors/textarea/manifests.ts +++ b/src/packages/property-editors/textarea/manifests.ts @@ -1,7 +1,6 @@ import { manifest as schemaManifest } from './Umbraco.TextArea.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.TextArea', diff --git a/src/packages/property-editors/toggle/manifests.ts b/src/packages/property-editors/toggle/manifests.ts index 18ebaa282d..11fa8c6391 100644 --- a/src/packages/property-editors/toggle/manifests.ts +++ b/src/packages/property-editors/toggle/manifests.ts @@ -1,7 +1,6 @@ import { manifest as trueFalseSchemaManifest } from './Umbraco.TrueFalse.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.Toggle', diff --git a/src/packages/relations/manifests.ts b/src/packages/relations/manifests.ts index 4e1967c497..4db7819f84 100644 --- a/src/packages/relations/manifests.ts +++ b/src/packages/relations/manifests.ts @@ -1,6 +1,9 @@ import { manifests as menuManifests } from './menu/manifests.js'; import { manifests as relationManifests } from './relations/manifests.js'; import { manifests as relationTypeManifests } from './relation-types/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...relationTypeManifests, ...relationManifests, ...menuManifests]; +export const manifests: Array = [ + ...relationTypeManifests, + ...relationManifests, + ...menuManifests, +]; diff --git a/src/packages/relations/menu/manifests.ts b/src/packages/relations/menu/manifests.ts index 5879d8cb5d..0e8bf33d78 100644 --- a/src/packages/relations/menu/manifests.ts +++ b/src/packages/relations/menu/manifests.ts @@ -1,7 +1,6 @@ import { UMB_RELATION_TYPE_ROOT_ENTITY_TYPE } from '../relation-types/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menuItem', alias: 'Umb.MenuItem.Relations', diff --git a/src/packages/relations/relation-types/collection/manifests.ts b/src/packages/relations/relation-types/collection/manifests.ts index 92464432af..7beee2df3f 100644 --- a/src/packages/relations/relation-types/collection/manifests.ts +++ b/src/packages/relations/relation-types/collection/manifests.ts @@ -2,21 +2,18 @@ import { UMB_RELATION_TYPE_COLLECTION_ALIAS } from './constants.js'; import { UMB_RELATION_TYPE_COLLECTION_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; import { manifests as collectionViewManifests } from './views/manifests.js'; -import type { ManifestCollection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const collectionManifest: ManifestCollection = { - type: 'collection', - kind: 'default', - alias: UMB_RELATION_TYPE_COLLECTION_ALIAS, - name: 'Relation Type Collection', - element: () => import('./relation-type-collection.element.js'), - meta: { - repositoryAlias: UMB_RELATION_TYPE_COLLECTION_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'collection', + kind: 'default', + alias: UMB_RELATION_TYPE_COLLECTION_ALIAS, + name: 'Relation Type Collection', + element: () => import('./relation-type-collection.element.js'), + meta: { + repositoryAlias: UMB_RELATION_TYPE_COLLECTION_REPOSITORY_ALIAS, + }, }, -}; - -export const manifests: Array = [ - collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, ]; diff --git a/src/packages/relations/relation-types/collection/repository/manifests.ts b/src/packages/relations/relation-types/collection/repository/manifests.ts index 9c879ceacf..8e79dc6f23 100644 --- a/src/packages/relations/relation-types/collection/repository/manifests.ts +++ b/src/packages/relations/relation-types/collection/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_RELATION_TYPE_COLLECTION_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_RELATION_TYPE_COLLECTION_REPOSITORY_ALIAS, - name: 'Relation Type Collection Repository', - api: () => import('./relation-type-collection.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_RELATION_TYPE_COLLECTION_REPOSITORY_ALIAS, + name: 'Relation Type Collection Repository', + api: () => import('./relation-type-collection.repository.js'), + }, +]; diff --git a/src/packages/relations/relation-types/collection/views/manifests.ts b/src/packages/relations/relation-types/collection/views/manifests.ts index c23a96afb8..664d9c9602 100644 --- a/src/packages/relations/relation-types/collection/views/manifests.ts +++ b/src/packages/relations/relation-types/collection/views/manifests.ts @@ -1,22 +1,21 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const tableCollectionView: ManifestCollectionView = { - type: 'collectionView', - alias: 'Umb.CollectionView.RelationType.Table', - name: 'Relation Type Table Collection View', - js: () => import('./table/relation-type-table-collection-view.element.js'), - meta: { - label: 'Table', - icon: 'icon-list', - pathName: 'table', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.RelationType', +export const manifests: Array = [ + { + type: 'collectionView', + alias: 'Umb.CollectionView.RelationType.Table', + name: 'Relation Type Table Collection View', + js: () => import('./table/relation-type-table-collection-view.element.js'), + meta: { + label: 'Table', + icon: 'icon-list', + pathName: 'table', }, - ], -}; - -export const manifests: Array = [tableCollectionView]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.RelationType', + }, + ], + }, +]; diff --git a/src/packages/relations/relation-types/manifests.ts b/src/packages/relations/relation-types/manifests.ts index 2f963bffbc..79d0167f21 100644 --- a/src/packages/relations/relation-types/manifests.ts +++ b/src/packages/relations/relation-types/manifests.ts @@ -1,6 +1,9 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...repositoryManifests, ...workspaceManifests, ...collectionManifests]; +export const manifests: Array = [ + ...repositoryManifests, + ...workspaceManifests, + ...collectionManifests, +]; diff --git a/src/packages/relations/relation-types/repository/detail/manifests.ts b/src/packages/relations/relation-types/repository/detail/manifests.ts index 9dc550e148..50b278ac88 100644 --- a/src/packages/relations/relation-types/repository/detail/manifests.ts +++ b/src/packages/relations/relation-types/repository/detail/manifests.ts @@ -1,18 +1,16 @@ import { UMB_RELATION_TYPE_DETAIL_REPOSITORY_ALIAS, UMB_RELATION_TYPE_DETAIL_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_RELATION_TYPE_DETAIL_REPOSITORY_ALIAS, - name: 'Relation Type Detail Repository', - api: () => import('./relation-type-detail.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_RELATION_TYPE_DETAIL_STORE_ALIAS, - name: 'Relation Type Detail Store', - api: () => import('./relation-type-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_RELATION_TYPE_DETAIL_REPOSITORY_ALIAS, + name: 'Relation Type Detail Repository', + api: () => import('./relation-type-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_RELATION_TYPE_DETAIL_STORE_ALIAS, + name: 'Relation Type Detail Store', + api: () => import('./relation-type-detail.store.js'), + }, +]; diff --git a/src/packages/relations/relation-types/repository/manifests.ts b/src/packages/relations/relation-types/repository/manifests.ts index c823b10e4b..3c7f8d7aaf 100644 --- a/src/packages/relations/relation-types/repository/manifests.ts +++ b/src/packages/relations/relation-types/repository/manifests.ts @@ -1,4 +1,3 @@ import { manifests as detailManifests } from './detail/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests]; +export const manifests: Array = [...detailManifests]; diff --git a/src/packages/relations/relation-types/workspace/manifests.ts b/src/packages/relations/relation-types/workspace/manifests.ts index d8c7fe3c6b..190a2a6711 100644 --- a/src/packages/relations/relation-types/workspace/manifests.ts +++ b/src/packages/relations/relation-types/workspace/manifests.ts @@ -1,5 +1,4 @@ import { manifests as relationTypeManifests } from './relation-type/manifests.js'; import { manifests as relationTypeRootManifests } from './relation-type-root/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...relationTypeManifests, ...relationTypeRootManifests]; +export const manifests: Array = [...relationTypeManifests, ...relationTypeRootManifests]; diff --git a/src/packages/relations/relation-types/workspace/relation-type-root/manifests.ts b/src/packages/relations/relation-types/workspace/relation-type-root/manifests.ts index 51e72093d2..dc47eb8a07 100644 --- a/src/packages/relations/relation-types/workspace/relation-type-root/manifests.ts +++ b/src/packages/relations/relation-types/workspace/relation-type-root/manifests.ts @@ -1,13 +1,11 @@ -import type { ManifestTypes, ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; - -const workspace: ManifestWorkspace = { - type: 'workspace', - alias: 'Umb.Workspace.RelationTypeRoot', - name: 'Relation Type Root Workspace', - element: () => import('./relation-type-root-workspace.element.js'), - meta: { - entityType: 'relation-type-root', +export const manifests: Array = [ + { + type: 'workspace', + alias: 'Umb.Workspace.RelationTypeRoot', + name: 'Relation Type Root Workspace', + element: () => import('./relation-type-root-workspace.element.js'), + meta: { + entityType: 'relation-type-root', + }, }, -}; - -export const manifests: Array = [workspace]; +]; diff --git a/src/packages/relations/relation-types/workspace/relation-type/manifests.ts b/src/packages/relations/relation-types/workspace/relation-type/manifests.ts index be5c47cfad..33ac0d2a59 100644 --- a/src/packages/relations/relation-types/workspace/relation-type/manifests.ts +++ b/src/packages/relations/relation-types/workspace/relation-type/manifests.ts @@ -1,21 +1,16 @@ -import type { - ManifestTypes, - ManifestWorkspaces, - ManifestWorkspaceView, -} from '@umbraco-cms/backoffice/extension-registry'; +export const UMB_RELATION_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.RelationType'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: 'Umb.Workspace.RelationType', - name: 'Relation Type Workspace', - api: () => import('./relation-type-workspace.context.js'), - meta: { - entityType: 'relation-type', +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_RELATION_TYPE_WORKSPACE_ALIAS, + name: 'Relation Type Workspace', + api: () => import('./relation-type-workspace.context.js'), + meta: { + entityType: 'relation-type', + }, }, -}; - -const workspaceViews: Array = [ { type: 'workspaceView', alias: 'Umb.WorkspaceView.RelationType.Details', @@ -30,10 +25,8 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_RELATION_TYPE_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [workspace, ...workspaceViews]; diff --git a/src/packages/relations/relation-types/workspace/relation-type/views/relation-type-detail-workspace-view.element.ts b/src/packages/relations/relation-types/workspace/relation-type/views/relation-type-detail-workspace-view.element.ts index ceecc3520a..6a732534bc 100644 --- a/src/packages/relations/relation-types/workspace/relation-type/views/relation-type-detail-workspace-view.element.ts +++ b/src/packages/relations/relation-types/workspace/relation-type/views/relation-type-detail-workspace-view.element.ts @@ -4,7 +4,7 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state, nothing } from '@umbraco-cms/backoffice/external/lit'; import type { UmbTableColumn, UmbTableConfig, UmbTableItem } from '@umbraco-cms/backoffice/components'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace'; import type { UmbRelationDetailModel } from '@umbraco-cms/backoffice/relations'; import { UmbRelationCollectionRepository } from '@umbraco-cms/backoffice/relations'; import { observeMultiple } from '@umbraco-cms/backoffice/observable-api'; diff --git a/src/packages/relations/relations/collection/manifests.ts b/src/packages/relations/relations/collection/manifests.ts index c5aaf2960e..aaa15113ec 100644 --- a/src/packages/relations/relations/collection/manifests.ts +++ b/src/packages/relations/relations/collection/manifests.ts @@ -1,4 +1,3 @@ import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...collectionRepositoryManifests]; +export const manifests: Array = [...collectionRepositoryManifests]; diff --git a/src/packages/relations/relations/collection/repository/manifests.ts b/src/packages/relations/relations/collection/repository/manifests.ts index b5a3e8633a..388135917c 100644 --- a/src/packages/relations/relations/collection/repository/manifests.ts +++ b/src/packages/relations/relations/collection/repository/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_RELATION_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.Relation.Collection'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_RELATION_COLLECTION_REPOSITORY_ALIAS, - name: 'Relation Collection Repository', - api: () => import('./relation-collection.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_RELATION_COLLECTION_REPOSITORY_ALIAS, + name: 'Relation Collection Repository', + api: () => import('./relation-collection.repository.js'), + }, +]; diff --git a/src/packages/relations/relations/manifests.ts b/src/packages/relations/relations/manifests.ts index 766ebc381a..bfab902d3c 100644 --- a/src/packages/relations/relations/manifests.ts +++ b/src/packages/relations/relations/manifests.ts @@ -1,4 +1,3 @@ import { manifests as collectionManifests } from './collection/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...collectionManifests]; +export const manifests: Array = [...collectionManifests]; diff --git a/src/packages/search/examine-management-dashboard/manifests.ts b/src/packages/search/examine-management-dashboard/manifests.ts index bf0b12484e..fbe10d2964 100644 --- a/src/packages/search/examine-management-dashboard/manifests.ts +++ b/src/packages/search/examine-management-dashboard/manifests.ts @@ -1,5 +1,3 @@ import { manifests as modalManifests } from './modal/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [...modalManifests]; +export const manifests: Array = [...modalManifests]; diff --git a/src/packages/search/examine-management-dashboard/modal/manifests.ts b/src/packages/search/examine-management-dashboard/modal/manifests.ts index 42a6b8aa5c..3f63d641d8 100644 --- a/src/packages/search/examine-management-dashboard/modal/manifests.ts +++ b/src/packages/search/examine-management-dashboard/modal/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.Examine.FieldsSettings', @@ -14,5 +12,3 @@ const modals: Array = [ js: () => import('./fields-viewer/examine-fields-viewer-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts b/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts index 441d5b90b8..1f300726a1 100644 --- a/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts +++ b/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts @@ -1,7 +1,8 @@ import { UMB_EXAMINE_FIELDS_SETTINGS_MODAL, UMB_EXAMINE_FIELDS_VIEWER_MODAL } from '../modal/index.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, nothing, customElement, state, query, property } from '@umbraco-cms/backoffice/external/lit'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import type { SearchResultResponseModel, FieldPresentationModel } from '@umbraco-cms/backoffice/external/backend-api'; import { SearcherService } from '@umbraco-cms/backoffice/external/backend-api'; diff --git a/src/packages/search/extensions/index.ts b/src/packages/search/extensions/index.ts new file mode 100644 index 0000000000..860d89e272 --- /dev/null +++ b/src/packages/search/extensions/index.ts @@ -0,0 +1,2 @@ +export * from './search-provider.extension.js'; +export * from './search-result-item.extension.js'; diff --git a/src/packages/core/extension-registry/models/search-provider.model.ts b/src/packages/search/extensions/search-provider.extension.ts similarity index 80% rename from src/packages/core/extension-registry/models/search-provider.model.ts rename to src/packages/search/extensions/search-provider.extension.ts index c5c7e7b6ed..d827200230 100644 --- a/src/packages/core/extension-registry/models/search-provider.model.ts +++ b/src/packages/search/extensions/search-provider.extension.ts @@ -1,4 +1,4 @@ -import type { UmbSearchProvider, UmbSearchResultItemModel } from '@umbraco-cms/backoffice/search'; +import type { UmbSearchProvider, UmbSearchResultItemModel } from '../types.js'; import type { ManifestApi } from '@umbraco-cms/backoffice/extension-api'; /** @@ -16,3 +16,9 @@ export interface MetaSearchProvider { */ label?: string; } + +declare global { + interface UmbExtensionManifestMap { + umbSearchProvider: ManifestSearchProvider; + } +} diff --git a/src/packages/core/extension-registry/models/search-result-item.model.ts b/src/packages/search/extensions/search-result-item.extension.ts similarity index 70% rename from src/packages/core/extension-registry/models/search-result-item.model.ts rename to src/packages/search/extensions/search-result-item.extension.ts index 26d3b338d1..b4d47b12d8 100644 --- a/src/packages/core/extension-registry/models/search-result-item.model.ts +++ b/src/packages/search/extensions/search-result-item.extension.ts @@ -7,3 +7,9 @@ export interface ManifestSearchResultItem extends ManifestElement { type: 'searchResultItem'; forEntityTypes: Array; } + +declare global { + interface UmbExtensionManifestMap { + umbSearchResultItem: ManifestSearchResultItem; + } +} diff --git a/src/packages/search/index.ts b/src/packages/search/index.ts index 264c82d513..c750f51952 100644 --- a/src/packages/search/index.ts +++ b/src/packages/search/index.ts @@ -1,3 +1,5 @@ export type { UmbSearchResultItemModel, UmbSearchRequestArgs, UmbSearchProvider } from './types.js'; export type { UmbSearchDataSource } from './search-data-source.interface.js'; export type { UmbSearchRepository } from './search-repository.interface.js'; + +export * from './extensions/index.js'; diff --git a/src/packages/search/manifests.ts b/src/packages/search/manifests.ts index e8b0df49f2..c9afa27d62 100644 --- a/src/packages/search/manifests.ts +++ b/src/packages/search/manifests.ts @@ -1,9 +1,8 @@ import { manifests as examineManifests } from './examine-management-dashboard/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import './examine-management-dashboard/index.js'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'headerApp', alias: 'Umb.HeaderApp.Search', diff --git a/src/packages/search/search-modal/search-modal.element.ts b/src/packages/search/search-modal/search-modal.element.ts index c45fdeee1f..1de42cf897 100644 --- a/src/packages/search/search-modal/search-modal.element.ts +++ b/src/packages/search/search-modal/search-modal.element.ts @@ -10,13 +10,13 @@ import { state, property, } from '@umbraco-cms/backoffice/external/lit'; -import type { ManifestSearchResultItem } from '@umbraco-cms/backoffice/extension-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbExtensionsManifestInitializer, createExtensionApi } from '@umbraco-cms/backoffice/extension-api'; import '../search-result/search-result-item.element.js'; import type { UmbModalContext } from '@umbraco-cms/backoffice/modal'; +import type { ManifestSearchResultItem } from '../extensions/index.js'; type SearchProvider = { name: string; diff --git a/src/packages/settings/manifests.ts b/src/packages/settings/manifests.ts index 024c20bf20..cdb7448b87 100644 --- a/src/packages/settings/manifests.ts +++ b/src/packages/settings/manifests.ts @@ -2,9 +2,9 @@ import { manifests as advancedManifests } from './advanced/manifests.js'; import { manifests as sectionManifests } from './section/manifests.js'; import { manifests as structureManifests } from './structure/manifests.js'; import { manifests as welcomeDashboardManifests } from './welcome/manifests.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...advancedManifests, ...sectionManifests, ...structureManifests, diff --git a/src/packages/settings/section/manifests.ts b/src/packages/settings/section/manifests.ts index 7ee23d38be..1ecac936ad 100644 --- a/src/packages/settings/section/manifests.ts +++ b/src/packages/settings/section/manifests.ts @@ -1,7 +1,7 @@ import { UMB_SETTINGS_SECTION_ALIAS } from './constants.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'section', alias: UMB_SETTINGS_SECTION_ALIAS, diff --git a/src/packages/settings/structure/manifests.ts b/src/packages/settings/structure/manifests.ts index 3cc19925a2..9b184fa475 100644 --- a/src/packages/settings/structure/manifests.ts +++ b/src/packages/settings/structure/manifests.ts @@ -1,8 +1,8 @@ import { UMB_SETTINGS_SECTION_ALIAS } from '../section/index.js'; import { UMB_STRUCTURE_SETTINGS_MENU_ALIAS } from './constants.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menu', alias: UMB_STRUCTURE_SETTINGS_MENU_ALIAS, diff --git a/src/packages/settings/welcome/manifests.ts b/src/packages/settings/welcome/manifests.ts index 810c0adb70..9e5697f378 100644 --- a/src/packages/settings/welcome/manifests.ts +++ b/src/packages/settings/welcome/manifests.ts @@ -1,7 +1,7 @@ import { UMB_SETTINGS_SECTION_ALIAS } from '../section/index.js'; -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'dashboard', alias: 'Umb.Dashboard.SettingsWelcome', diff --git a/src/packages/static-file/manifests.ts b/src/packages/static-file/manifests.ts index b19a3a55bc..db36c42a3f 100644 --- a/src/packages/static-file/manifests.ts +++ b/src/packages/static-file/manifests.ts @@ -1,6 +1,9 @@ import { manifests as propertyEditorManifests } from './property-editors/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...propertyEditorManifests, ...treeManifests, ...repositoryManifests]; +export const manifests: Array = [ + ...propertyEditorManifests, + ...treeManifests, + ...repositoryManifests, +]; diff --git a/src/packages/static-file/property-editors/manifests.ts b/src/packages/static-file/property-editors/manifests.ts index 2f633a65bc..78bbd0a6c6 100644 --- a/src/packages/static-file/property-editors/manifests.ts +++ b/src/packages/static-file/property-editors/manifests.ts @@ -1,4 +1,3 @@ import { manifest as staticFilePickerManifest } from './static-file-picker/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [staticFilePickerManifest]; +export const manifests: Array = [staticFilePickerManifest]; diff --git a/src/packages/static-file/repository/item/manifests.ts b/src/packages/static-file/repository/item/manifests.ts index c65da39d1f..2b76dad593 100644 --- a/src/packages/static-file/repository/item/manifests.ts +++ b/src/packages/static-file/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_STATIC_FILE_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.StaticFileItem'; export const UMB_STATIC_FILE_STORE_ALIAS = 'Umb.Store.StaticFileItem'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_STATIC_FILE_ITEM_REPOSITORY_ALIAS, - name: 'Static File Item Repository', - api: () => import('./static-file-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_STATIC_FILE_STORE_ALIAS, - name: 'Static File Item Store', - api: () => import('./static-file-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_STATIC_FILE_ITEM_REPOSITORY_ALIAS, + name: 'Static File Item Repository', + api: () => import('./static-file-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_STATIC_FILE_STORE_ALIAS, + name: 'Static File Item Store', + api: () => import('./static-file-item.store.js'), + }, +]; diff --git a/src/packages/static-file/repository/manifests.ts b/src/packages/static-file/repository/manifests.ts index 0ed98fb019..3a7fa93c19 100644 --- a/src/packages/static-file/repository/manifests.ts +++ b/src/packages/static-file/repository/manifests.ts @@ -1,4 +1,3 @@ import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...itemManifests]; +export const manifests: Array = [...itemManifests]; diff --git a/src/packages/static-file/tree/manifests.ts b/src/packages/static-file/tree/manifests.ts index 72e84e09e2..b8c8556135 100644 --- a/src/packages/static-file/tree/manifests.ts +++ b/src/packages/static-file/tree/manifests.ts @@ -9,44 +9,34 @@ import { UMB_STATIC_FILE_TREE_REPOSITORY_ALIAS, UMB_STATIC_FILE_TREE_STORE_ALIAS, } from './constants.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeStore, - ManifestTreeItem, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_STATIC_FILE_TREE_REPOSITORY_ALIAS, - name: 'Static File Tree Repository', - api: () => import('./static-file-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_STATIC_FILE_TREE_STORE_ALIAS, - name: 'Static File Tree Store', - api: () => import('./static-file-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_STATIC_FILE_TREE_ALIAS, - name: 'Static File Tree', - meta: { - repositoryAlias: UMB_STATIC_FILE_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_STATIC_FILE_TREE_REPOSITORY_ALIAS, + name: 'Static File Tree Repository', + api: () => import('./static-file-tree.repository.js'), }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: UMB_STATIC_FILE_TREE_ITEM_ALIAS, - name: 'Static File Tree Item', - forEntityTypes: [UMB_STATIC_FILE_ENTITY_TYPE, UMB_STATIC_FILE_ROOT_ENTITY_TYPE, UMB_STATIC_FILE_FOLDER_ENTITY_TYPE], -}; - -export const manifests: Array = [treeRepository, treeStore, tree, treeItem]; + { + type: 'treeStore', + alias: UMB_STATIC_FILE_TREE_STORE_ALIAS, + name: 'Static File Tree Store', + api: () => import('./static-file-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_STATIC_FILE_TREE_ALIAS, + name: 'Static File Tree', + meta: { + repositoryAlias: UMB_STATIC_FILE_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: UMB_STATIC_FILE_TREE_ITEM_ALIAS, + name: 'Static File Tree Item', + forEntityTypes: [UMB_STATIC_FILE_ENTITY_TYPE, UMB_STATIC_FILE_ROOT_ENTITY_TYPE, UMB_STATIC_FILE_FOLDER_ENTITY_TYPE], + }, +]; diff --git a/src/packages/sysinfo/manifests.ts b/src/packages/sysinfo/manifests.ts index dda79492e5..32064a9a88 100644 --- a/src/packages/sysinfo/manifests.ts +++ b/src/packages/sysinfo/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modalManifests: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.Sysinfo', @@ -14,5 +12,3 @@ const modalManifests: Array = [ js: () => import('./components/new-version.element.js'), }, ]; - -export const manifests: Array = [...modalManifests]; diff --git a/src/packages/tags/manifests.ts b/src/packages/tags/manifests.ts index 219e7cafb9..05dfaa1afb 100644 --- a/src/packages/tags/manifests.ts +++ b/src/packages/tags/manifests.ts @@ -1,5 +1,4 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as propertyEditorManifests } from './property-editors/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...repositoryManifests, ...propertyEditorManifests]; +export const manifests: Array = [...repositoryManifests, ...propertyEditorManifests]; diff --git a/src/packages/tags/property-editors/manifests.ts b/src/packages/tags/property-editors/manifests.ts index c10fde3613..de3b3d8e61 100644 --- a/src/packages/tags/property-editors/manifests.ts +++ b/src/packages/tags/property-editors/manifests.ts @@ -1,4 +1,3 @@ import { manifests as tagsManifests } from './tags/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...tagsManifests]; +export const manifests: Array = [...tagsManifests]; diff --git a/src/packages/tags/property-editors/tags/manifests.ts b/src/packages/tags/property-editors/tags/manifests.ts index 80259d8c9c..edbd747919 100644 --- a/src/packages/tags/property-editors/tags/manifests.ts +++ b/src/packages/tags/property-editors/tags/manifests.ts @@ -1,7 +1,6 @@ import { manifest as schemaManifest } from './Umbraco.Tags.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.Tags', diff --git a/src/packages/tags/repository/manifests.ts b/src/packages/tags/repository/manifests.ts index 9db24a63b6..776cd44652 100644 --- a/src/packages/tags/repository/manifests.ts +++ b/src/packages/tags/repository/manifests.ts @@ -1,21 +1,17 @@ -import type { ManifestStore, ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_TAG_REPOSITORY_ALIAS = 'Umb.Repository.Tags'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_TAG_REPOSITORY_ALIAS, - name: 'Tags Repository', - api: () => import('./tag.repository.js'), -}; - export const UMB_TAG_STORE_ALIAS = 'Umb.Store.Tags'; -const store: ManifestStore = { - type: 'store', - alias: UMB_TAG_STORE_ALIAS, - name: 'Tags Store', - api: () => import('./tag.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_TAG_REPOSITORY_ALIAS, + name: 'Tags Repository', + api: () => import('./tag.repository.js'), + }, + { + type: 'store', + alias: UMB_TAG_STORE_ALIAS, + name: 'Tags Store', + api: () => import('./tag.store.js'), + }, +]; diff --git a/src/packages/templating/manifests.ts b/src/packages/templating/manifests.ts index a64f1da20d..0972c69926 100644 --- a/src/packages/templating/manifests.ts +++ b/src/packages/templating/manifests.ts @@ -4,9 +4,8 @@ import { manifests as stylesheetManifests } from './stylesheets/manifests.js'; import { manifests as partialManifests } from './partial-views/manifests.js'; import { manifests as scriptManifest } from './scripts/manifests.js'; import { manifests as modalManifests } from './modals/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...menuManifests, ...templateManifests, ...stylesheetManifests, diff --git a/src/packages/templating/menu/manifests.ts b/src/packages/templating/menu/manifests.ts index e5dab05ce6..51073daa2c 100644 --- a/src/packages/templating/menu/manifests.ts +++ b/src/packages/templating/menu/manifests.ts @@ -1,29 +1,26 @@ -import type { ManifestMenu, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - const sectionAlias = 'Umb.Section.Settings'; -const menu: ManifestMenu = { - type: 'menu', - alias: 'Umb.Menu.Templating', - name: 'Templating Menu', -}; - -const menuSectionSidebarApp: ManifestTypes = { - type: 'sectionSidebarApp', - kind: 'menu', - alias: 'Umb.SectionSidebarMenu.Templating', - name: 'Templating Section Sidebar Menu', - weight: 200, - meta: { - label: '#treeHeaders_templatingGroup', - menu: 'Umb.Menu.Templating', +export const manifests: Array = [ + { + type: 'menu', + alias: 'Umb.Menu.Templating', + name: 'Templating Menu', }, - conditions: [ - { - alias: 'Umb.Condition.SectionAlias', - match: sectionAlias, + { + type: 'sectionSidebarApp', + kind: 'menu', + alias: 'Umb.SectionSidebarMenu.Templating', + name: 'Templating Section Sidebar Menu', + weight: 200, + meta: { + label: '#treeHeaders_templatingGroup', + menu: 'Umb.Menu.Templating', }, - ], -}; - -export const manifests: Array = [menu, menuSectionSidebarApp]; + conditions: [ + { + alias: 'Umb.Condition.SectionAlias', + match: sectionAlias, + }, + ], + }, +]; diff --git a/src/packages/templating/modals/templating-page-field-builder/components/template-field-dropdown-list/template-field-dropdown-list.element.ts b/src/packages/templating/modals/templating-page-field-builder/components/template-field-dropdown-list/template-field-dropdown-list.element.ts index ef744bf99c..d199e00ea3 100644 --- a/src/packages/templating/modals/templating-page-field-builder/components/template-field-dropdown-list/template-field-dropdown-list.element.ts +++ b/src/packages/templating/modals/templating-page-field-builder/components/template-field-dropdown-list/template-field-dropdown-list.element.ts @@ -16,6 +16,11 @@ import type { UUIComboboxEvent, UUIComboboxElement } from '@umbraco-cms/backoffi import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbMediaTypeDetailRepository, UMB_MEDIA_TYPE_PICKER_MODAL } from '@umbraco-cms/backoffice/media-type'; import { UMB_MODAL_MANAGER_CONTEXT, type UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; +import { + UMB_VALIDATION_EMPTY_LOCALIZATION_KEY, + UmbFormControlMixin, + type UmbFormControlValidatorConfig, +} from '@umbraco-cms/backoffice/validation'; interface FieldPickerValue { alias: string; @@ -29,19 +34,44 @@ enum FieldType { } @customElement('umb-template-field-dropdown-list') -export class UmbTemplateFieldDropdownListElement extends UmbLitElement { +export class UmbTemplateFieldDropdownListElement extends UmbFormControlMixin< + FieldPickerValue | undefined, + typeof UmbLitElement, + undefined +>(UmbLitElement) { + // + #requiredValidation?: UmbFormControlValidatorConfig; + @property({ type: Boolean }) + public get required(): boolean | undefined { + return undefined; + } + public set required(value: boolean | undefined) { + if (value === true) { + this.#requiredValidation ??= this.addValidator( + 'valueMissing', + () => this.requiredMessage, + () => !this._value, + ); + } else if (this.#requiredValidation) { + this.removeValidator(this.#requiredValidation); + } + } + + @property({ type: String }) + requiredMessage = UMB_VALIDATION_EMPTY_LOCALIZATION_KEY; + @property({ type: Boolean, attribute: 'exclude-media-type', reflect: true }) public excludeMediaType = false; private _value: FieldPickerValue | undefined; @property({ type: Object }) - public set value(val: FieldPickerValue | undefined) { + public override set value(val: FieldPickerValue | undefined) { const oldVal = this._value; this._value = val; this.requestUpdate('value', oldVal); this.dispatchEvent(new UmbChangeEvent()); } - public get value(): FieldPickerValue | undefined { + public override get value(): FieldPickerValue | undefined { return this._value; } @@ -176,8 +206,8 @@ export class UmbTemplateFieldDropdownListElement extends UmbLitElement { if (this._type !== FieldType.SYSTEM && !this._unique) return; return html` ${this.localize.string(this._uniqueName ?? '')} - - + + ${repeat( this._customFields, (field) => field.alias, diff --git a/src/packages/templating/modals/templating-page-field-builder/templating-page-field-builder-modal.element.ts b/src/packages/templating/modals/templating-page-field-builder/templating-page-field-builder-modal.element.ts index 9f8ea3fbba..9d1eec32e3 100644 --- a/src/packages/templating/modals/templating-page-field-builder/templating-page-field-builder-modal.element.ts +++ b/src/packages/templating/modals/templating-page-field-builder/templating-page-field-builder-modal.element.ts @@ -7,24 +7,35 @@ import type { UmbTemplateFieldDropdownListElement } from './components/template- import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; -import type { UUIBooleanInputEvent, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import type { UUIBooleanInputEvent, UUIButtonState, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; // import of local components import './components/template-field-dropdown-list/index.js'; +import { UmbValidationContext, umbBindToValidation } from '@umbraco-cms/backoffice/validation'; @customElement('umb-templating-page-field-builder-modal') export class UmbTemplatingPageFieldBuilderModalElement extends UmbModalBaseElement< UmbTemplatingPageFieldBuilderModalData, UmbTemplatingPageFieldBuilderModalValue > { - private _close() { + #validation = new UmbValidationContext(this); + + #close() { this.modalContext?.reject(); } - private _submit() { - if (!this._field) return; - this.value = { output: getUmbracoFieldSnippet(this._field, this._default, this._recursive) }; - this.modalContext?.submit(); + async #submit() { + this._submitButtonState = 'waiting'; + + try { + await this.#validation.validate(); + this._submitButtonState = 'success'; + + this.value = { output: getUmbracoFieldSnippet(this._field!, this._default, this._recursive) }; + this.modalContext?.submit(); + } catch { + this._submitButtonState = 'failed'; + } } @state() @@ -39,6 +50,9 @@ export class UmbTemplatingPageFieldBuilderModalElement extends UmbModalBaseEleme @state() private _recursive: boolean = false; + @state() + private _submitButtonState: UUIButtonState; + /** TODO: Implement "Choose field" */ #onChangeFieldValue(e: Event) { @@ -50,12 +64,14 @@ export class UmbTemplatingPageFieldBuilderModalElement extends UmbModalBaseEleme
- - Choose field - - + + + Default value @@ -85,14 +101,15 @@ export class UmbTemplatingPageFieldBuilderModalElement extends UmbModalBaseEleme `; diff --git a/src/packages/templating/partial-views/entity-actions/create/manifests.ts b/src/packages/templating/partial-views/entity-actions/create/manifests.ts index ba24d2123b..6ba2c40dc8 100644 --- a/src/packages/templating/partial-views/entity-actions/create/manifests.ts +++ b/src/packages/templating/partial-views/entity-actions/create/manifests.ts @@ -1,7 +1,6 @@ import { UMB_PARTIAL_VIEW_FOLDER_ENTITY_TYPE, UMB_PARTIAL_VIEW_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -13,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/packages/templating/partial-views/entity-actions/manifests.ts b/src/packages/templating/partial-views/entity-actions/manifests.ts index 441327ca49..01e0759c73 100644 --- a/src/packages/templating/partial-views/entity-actions/manifests.ts +++ b/src/packages/templating/partial-views/entity-actions/manifests.ts @@ -3,9 +3,8 @@ import { UMB_PARTIAL_VIEW_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js import { UMB_PARTIAL_VIEW_ITEM_REPOSITORY_ALIAS } from '../repository/item/index.js'; import { manifests as createManifests } from './create/manifests.js'; import { manifests as renameManifests } from './rename/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const partialViewActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'delete', @@ -17,6 +16,6 @@ const partialViewActions: Array = [ itemRepositoryAlias: UMB_PARTIAL_VIEW_ITEM_REPOSITORY_ALIAS, }, }, + ...createManifests, + ...renameManifests, ]; - -export const manifests: Array = [...partialViewActions, ...createManifests, ...renameManifests]; diff --git a/src/packages/templating/partial-views/entity-actions/rename/manifests.ts b/src/packages/templating/partial-views/entity-actions/rename/manifests.ts index 2a837319aa..103cc07d0f 100644 --- a/src/packages/templating/partial-views/entity-actions/rename/manifests.ts +++ b/src/packages/templating/partial-views/entity-actions/rename/manifests.ts @@ -1,11 +1,10 @@ import { UMB_PARTIAL_VIEW_ENTITY_TYPE } from '../../entity.js'; import { UMB_PARTIAL_VIEW_ITEM_REPOSITORY_ALIAS } from '../../repository/item/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_RENAME_PARTIAL_VIEW_REPOSITORY_ALIAS = 'Umb.Repository.PartialView.Rename'; export const UMB_RENAME_PARTIAL_VIEW_ENTITY_ACTION_ALIAS = 'Umb.EntityAction.PartialView.Rename'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'repository', alias: UMB_RENAME_PARTIAL_VIEW_REPOSITORY_ALIAS, diff --git a/src/packages/templating/partial-views/manifests.ts b/src/packages/templating/partial-views/manifests.ts index 4993bc9400..d05af3261f 100644 --- a/src/packages/templating/partial-views/manifests.ts +++ b/src/packages/templating/partial-views/manifests.ts @@ -3,9 +3,8 @@ import { manifests as menuManifests } from './menu/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as entityActionsManifests } from './entity-actions/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...repositoryManifests, ...menuManifests, ...treeManifests, diff --git a/src/packages/templating/partial-views/menu/manifests.ts b/src/packages/templating/partial-views/menu/manifests.ts index 2f0721081e..9014ce1386 100644 --- a/src/packages/templating/partial-views/menu/manifests.ts +++ b/src/packages/templating/partial-views/menu/manifests.ts @@ -1,7 +1,6 @@ import { UMB_PARTIAL_VIEW_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/packages/templating/partial-views/repository/item/manifests.ts b/src/packages/templating/partial-views/repository/item/manifests.ts index 5fae01fab9..54d0cb72bf 100644 --- a/src/packages/templating/partial-views/repository/item/manifests.ts +++ b/src/packages/templating/partial-views/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_PARTIAL_VIEW_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.PartialView.Item'; export const UMB_PARTIAL_VIEW_ITEM_STORE_ALIAS = 'Umb.ItemStore.PartialView'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_PARTIAL_VIEW_ITEM_REPOSITORY_ALIAS, - name: 'Partial View Item Repository', - api: () => import('./partial-view-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: 'Umb.ItemStore.PartialView', - name: 'Partial View Item Store', - api: () => import('./partial-view-item.store.js'), -}; - -export const manifests: Array = [repository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_PARTIAL_VIEW_ITEM_REPOSITORY_ALIAS, + name: 'Partial View Item Repository', + api: () => import('./partial-view-item.repository.js'), + }, + { + type: 'itemStore', + alias: 'Umb.ItemStore.PartialView', + name: 'Partial View Item Store', + api: () => import('./partial-view-item.store.js'), + }, +]; diff --git a/src/packages/templating/partial-views/repository/manifests.ts b/src/packages/templating/partial-views/repository/manifests.ts index 7a14a99191..1a8007ca6b 100644 --- a/src/packages/templating/partial-views/repository/manifests.ts +++ b/src/packages/templating/partial-views/repository/manifests.ts @@ -1,21 +1,20 @@ import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PARTIAL_VIEW_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.PartialView.Detail'; export const UMB_PARTIAL_VIEW_DETAIL_STORE_ALIAS = 'Umb.Store.PartialView.Detail'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_PARTIAL_VIEW_DETAIL_REPOSITORY_ALIAS, - name: 'Partial View Detail Repository', - api: () => import('./partial-view-detail.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_PARTIAL_VIEW_DETAIL_STORE_ALIAS, - name: 'Partial View Detail Store', - api: () => import('./partial-view-detail.store.js'), -}; - -export const manifests: Array = [repository, store, ...itemManifests]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_PARTIAL_VIEW_DETAIL_REPOSITORY_ALIAS, + name: 'Partial View Detail Repository', + api: () => import('./partial-view-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_PARTIAL_VIEW_DETAIL_STORE_ALIAS, + name: 'Partial View Detail Store', + api: () => import('./partial-view-detail.store.js'), + }, + ...itemManifests, +]; diff --git a/src/packages/templating/partial-views/tree/folder/manifests.ts b/src/packages/templating/partial-views/tree/folder/manifests.ts index d47f830ce1..8dcfcfae73 100644 --- a/src/packages/templating/partial-views/tree/folder/manifests.ts +++ b/src/packages/templating/partial-views/tree/folder/manifests.ts @@ -1,18 +1,15 @@ import { UMB_PARTIAL_VIEW_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PARTIAL_VIEW_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.PartialView.Folder'; - -const folderRepository: ManifestRepository = { - type: 'repository', - alias: UMB_PARTIAL_VIEW_FOLDER_REPOSITORY_ALIAS, - name: 'Partial View Folder Repository', - api: () => import('./partial-view-folder.repository.js'), -}; - export const UMB_DELETE_PARTIAL_VIEW_FOLDER_ENTITY_ACTION_ALIAS = 'Umb.EntityAction.PartialView.Folder.Delete'; -const entityActions = [ +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_PARTIAL_VIEW_FOLDER_REPOSITORY_ALIAS, + name: 'Partial View Folder Repository', + api: () => import('./partial-view-folder.repository.js'), + }, { type: 'entityAction', kind: 'folderDelete', @@ -24,5 +21,3 @@ const entityActions = [ }, }, ]; - -export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/packages/templating/partial-views/tree/manifests.ts b/src/packages/templating/partial-views/tree/manifests.ts index 0f7c5b6f7f..847547196c 100644 --- a/src/packages/templating/partial-views/tree/manifests.ts +++ b/src/packages/templating/partial-views/tree/manifests.ts @@ -5,59 +5,44 @@ import { } from '../entity.js'; import { manifests as folderManifests } from './folder/manifests.js'; import { manifests as reloadTreeItemChildrenManifest } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PARTIAL_VIEW_TREE_REPOSITORY_ALIAS = 'Umb.Repository.PartialView.Tree'; export const UMB_PARTIAL_VIEW_TREE_STORE_ALIAS = 'Umb.Store.PartialView.Tree'; export const UMB_PARTIAL_VIEW_TREE_ALIAS = 'Umb.Tree.PartialView'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_PARTIAL_VIEW_TREE_REPOSITORY_ALIAS, - name: 'Partial View Tree Repository', - api: () => import('./partial-view-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_PARTIAL_VIEW_TREE_STORE_ALIAS, - name: 'Partial View Tree Store', - api: () => import('./partial-view-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_PARTIAL_VIEW_TREE_ALIAS, - name: 'Partial View Tree', - meta: { - repositoryAlias: UMB_PARTIAL_VIEW_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_PARTIAL_VIEW_TREE_REPOSITORY_ALIAS, + name: 'Partial View Tree Repository', + api: () => import('./partial-view-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_PARTIAL_VIEW_TREE_STORE_ALIAS, + name: 'Partial View Tree Store', + api: () => import('./partial-view-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_PARTIAL_VIEW_TREE_ALIAS, + name: 'Partial View Tree', + meta: { + repositoryAlias: UMB_PARTIAL_VIEW_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.PartialView', + name: 'Partial View Tree Item', + forEntityTypes: [ + UMB_PARTIAL_VIEW_ROOT_ENTITY_TYPE, + UMB_PARTIAL_VIEW_ENTITY_TYPE, + UMB_PARTIAL_VIEW_FOLDER_ENTITY_TYPE, + ], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.PartialView', - name: 'Partial View Tree Item', - forEntityTypes: [ - UMB_PARTIAL_VIEW_ROOT_ENTITY_TYPE, - UMB_PARTIAL_VIEW_ENTITY_TYPE, - UMB_PARTIAL_VIEW_FOLDER_ENTITY_TYPE, - ], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...folderManifests, ...reloadTreeItemChildrenManifest, ]; diff --git a/src/packages/templating/partial-views/tree/reload-tree-item-children/manifests.ts b/src/packages/templating/partial-views/tree/reload-tree-item-children/manifests.ts index 3f5626eaf9..0998d63948 100644 --- a/src/packages/templating/partial-views/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/templating/partial-views/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_PARTIAL_VIEW_ROOT_ENTITY_TYPE, UMB_PARTIAL_VIEW_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/templating/partial-views/workspace/manifests.ts b/src/packages/templating/partial-views/workspace/manifests.ts index 899870ea51..ae6628e08c 100644 --- a/src/packages/templating/partial-views/workspace/manifests.ts +++ b/src/packages/templating/partial-views/workspace/manifests.ts @@ -1,24 +1,18 @@ import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PARTIAL_VIEW_WORKSPACE_ALIAS = 'Umb.Workspace.PartialView'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: UMB_PARTIAL_VIEW_WORKSPACE_ALIAS, - name: 'Partial View Workspace', - api: () => import('./partial-view-workspace.context.js'), - meta: { - entityType: 'partial-view', +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_PARTIAL_VIEW_WORKSPACE_ALIAS, + name: 'Partial View Workspace', + api: () => import('./partial-view-workspace.context.js'), + meta: { + entityType: 'partial-view', + }, }, -}; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -33,10 +27,8 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_PARTIAL_VIEW_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [workspace, ...workspaceActions]; diff --git a/src/packages/templating/scripts/entity-actions/create/manifests.ts b/src/packages/templating/scripts/entity-actions/create/manifests.ts index a01979a2de..68cb772ad2 100644 --- a/src/packages/templating/scripts/entity-actions/create/manifests.ts +++ b/src/packages/templating/scripts/entity-actions/create/manifests.ts @@ -1,7 +1,6 @@ import { UMB_SCRIPT_FOLDER_ENTITY_TYPE, UMB_SCRIPT_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -13,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/packages/templating/scripts/entity-actions/manifests.ts b/src/packages/templating/scripts/entity-actions/manifests.ts index ae26b37ade..dca3d1cc4b 100644 --- a/src/packages/templating/scripts/entity-actions/manifests.ts +++ b/src/packages/templating/scripts/entity-actions/manifests.ts @@ -3,11 +3,12 @@ import { UMB_SCRIPT_ENTITY_TYPE } from '../entity.js'; import { UMB_SCRIPT_ITEM_REPOSITORY_ALIAS } from '../repository/item/index.js'; import { manifests as createManifests } from './create/manifests.js'; import { manifests as renameManifests } from './rename/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DELETE_SCRIPT_ENTITY_ACTION_ALIAS = 'Umb.EntityAction.Script.Delete'; -const scriptViewActions: Array = [ +export const manifests: Array = [ + ...createManifests, + ...renameManifests, { type: 'entityAction', kind: 'delete', @@ -20,5 +21,3 @@ const scriptViewActions: Array = [ }, }, ]; - -export const manifests: Array = [...scriptViewActions, ...createManifests, ...renameManifests]; diff --git a/src/packages/templating/scripts/entity-actions/rename/manifests.ts b/src/packages/templating/scripts/entity-actions/rename/manifests.ts index 4c53a08799..ad404b1ff8 100644 --- a/src/packages/templating/scripts/entity-actions/rename/manifests.ts +++ b/src/packages/templating/scripts/entity-actions/rename/manifests.ts @@ -1,11 +1,10 @@ import { UMB_SCRIPT_ENTITY_TYPE } from '../../entity.js'; import { UMB_SCRIPT_ITEM_REPOSITORY_ALIAS } from '../../repository/item/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_RENAME_SCRIPT_REPOSITORY_ALIAS = 'Umb.Repository.Script.Rename'; export const UMB_RENAME_SCRIPT_ENTITY_ACTION_ALIAS = 'Umb.EntityAction.Script.Rename'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'repository', alias: UMB_RENAME_SCRIPT_REPOSITORY_ALIAS, diff --git a/src/packages/templating/scripts/manifests.ts b/src/packages/templating/scripts/manifests.ts index 03225ea7b5..0aeff5077f 100644 --- a/src/packages/templating/scripts/manifests.ts +++ b/src/packages/templating/scripts/manifests.ts @@ -3,9 +3,8 @@ import { manifests as menuManifests } from './menu/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...entityActionsManifests, ...menuManifests, ...repositoryManifests, diff --git a/src/packages/templating/scripts/menu/manifests.ts b/src/packages/templating/scripts/menu/manifests.ts index 39d5a2f33a..8b5c8890a8 100644 --- a/src/packages/templating/scripts/menu/manifests.ts +++ b/src/packages/templating/scripts/menu/manifests.ts @@ -1,9 +1,7 @@ import { UMB_SCRIPT_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_SCRIPT_MENU_ITEM_ALIAS = 'Umb.MenuItem.Script'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/packages/templating/scripts/repository/item/manifests.ts b/src/packages/templating/scripts/repository/item/manifests.ts index ba4d0923af..a676da0056 100644 --- a/src/packages/templating/scripts/repository/item/manifests.ts +++ b/src/packages/templating/scripts/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_SCRIPT_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.Script.Item'; export const UMB_SCRIPT_ITEM_STORE_ALIAS = 'Umb.ItemStore.Script'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_SCRIPT_ITEM_REPOSITORY_ALIAS, - name: 'Script Item Repository', - api: () => import('./script-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: 'Umb.ItemStore.Script', - name: 'Script Item Store', - api: () => import('./script-item.store.js'), -}; - -export const manifests: Array = [repository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_SCRIPT_ITEM_REPOSITORY_ALIAS, + name: 'Script Item Repository', + api: () => import('./script-item.repository.js'), + }, + { + type: 'itemStore', + alias: 'Umb.ItemStore.Script', + name: 'Script Item Store', + api: () => import('./script-item.store.js'), + }, +]; diff --git a/src/packages/templating/scripts/repository/manifests.ts b/src/packages/templating/scripts/repository/manifests.ts index 9162520cad..c82ffd9d45 100644 --- a/src/packages/templating/scripts/repository/manifests.ts +++ b/src/packages/templating/scripts/repository/manifests.ts @@ -1,21 +1,20 @@ import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Script.Detail'; export const UMB_SCRIPT_DETAIL_STORE_ALIAS = 'Umb.Store.Script.Detail'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_SCRIPT_DETAIL_REPOSITORY_ALIAS, - name: 'Script Detail Repository', - api: () => import('./script-detail.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_SCRIPT_DETAIL_STORE_ALIAS, - name: 'Script Detail Store', - api: () => import('./script-detail.store.js'), -}; - -export const manifests: Array = [repository, store, ...itemManifests]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_SCRIPT_DETAIL_REPOSITORY_ALIAS, + name: 'Script Detail Repository', + api: () => import('./script-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_SCRIPT_DETAIL_STORE_ALIAS, + name: 'Script Detail Store', + api: () => import('./script-detail.store.js'), + }, + ...itemManifests, +]; diff --git a/src/packages/templating/scripts/tree/folder/manifests.ts b/src/packages/templating/scripts/tree/folder/manifests.ts index 73429e942c..15b7902ee0 100644 --- a/src/packages/templating/scripts/tree/folder/manifests.ts +++ b/src/packages/templating/scripts/tree/folder/manifests.ts @@ -1,18 +1,15 @@ import { UMB_SCRIPT_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.Script.Folder'; - -const folderRepository: ManifestRepository = { - type: 'repository', - alias: UMB_SCRIPT_FOLDER_REPOSITORY_ALIAS, - name: 'Script Folder Repository', - api: () => import('./script-folder.repository.js'), -}; - export const UMB_DELETE_SCRIPT_FOLDER_ENTITY_ACTION_ALIAS = 'Umb.EntityAction.Script.Folder.Delete'; -const entityActions = [ +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_SCRIPT_FOLDER_REPOSITORY_ALIAS, + name: 'Script Folder Repository', + api: () => import('./script-folder.repository.js'), + }, { type: 'entityAction', kind: 'folderDelete', @@ -24,5 +21,3 @@ const entityActions = [ }, }, ]; - -export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/packages/templating/scripts/tree/manifests.ts b/src/packages/templating/scripts/tree/manifests.ts index 8083cc2eda..b025f454ea 100644 --- a/src/packages/templating/scripts/tree/manifests.ts +++ b/src/packages/templating/scripts/tree/manifests.ts @@ -1,55 +1,40 @@ import { UMB_SCRIPT_ENTITY_TYPE, UMB_SCRIPT_FOLDER_ENTITY_TYPE, UMB_SCRIPT_ROOT_ENTITY_TYPE } from '../entity.js'; import { manifests as folderManifests } from './folder/manifests.js'; import { manifests as reloadTreeItemChildrenManifest } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Script.Tree'; export const UMB_SCRIPT_TREE_STORE_ALIAS = 'Umb.Store.Script.Tree'; export const UMB_SCRIPT_TREE_ALIAS = 'Umb.Tree.Script'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_SCRIPT_TREE_REPOSITORY_ALIAS, - name: 'Script Tree Repository', - api: () => import('./script-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_SCRIPT_TREE_STORE_ALIAS, - name: 'Script Tree Store', - api: () => import('./script-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_SCRIPT_TREE_ALIAS, - name: 'Script Tree', - meta: { - repositoryAlias: UMB_SCRIPT_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_SCRIPT_TREE_REPOSITORY_ALIAS, + name: 'Script Tree Repository', + api: () => import('./script-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_SCRIPT_TREE_STORE_ALIAS, + name: 'Script Tree Store', + api: () => import('./script-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_SCRIPT_TREE_ALIAS, + name: 'Script Tree', + meta: { + repositoryAlias: UMB_SCRIPT_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.Script', + name: 'Script Tree Item', + forEntityTypes: [UMB_SCRIPT_ROOT_ENTITY_TYPE, UMB_SCRIPT_ENTITY_TYPE, UMB_SCRIPT_FOLDER_ENTITY_TYPE], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.Script', - name: 'Script Tree Item', - forEntityTypes: [UMB_SCRIPT_ROOT_ENTITY_TYPE, UMB_SCRIPT_ENTITY_TYPE, UMB_SCRIPT_FOLDER_ENTITY_TYPE], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...folderManifests, ...reloadTreeItemChildrenManifest, ]; diff --git a/src/packages/templating/scripts/tree/reload-tree-item-children/manifests.ts b/src/packages/templating/scripts/tree/reload-tree-item-children/manifests.ts index 7f2d44df09..c348c83802 100644 --- a/src/packages/templating/scripts/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/templating/scripts/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_SCRIPT_ROOT_ENTITY_TYPE, UMB_SCRIPT_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', alias: 'Umb.EntityAction.Script.Tree.ReloadChildrenOf', diff --git a/src/packages/templating/scripts/workspace/manifests.ts b/src/packages/templating/scripts/workspace/manifests.ts index 85b2e4cf99..1af7a9adc7 100644 --- a/src/packages/templating/scripts/workspace/manifests.ts +++ b/src/packages/templating/scripts/workspace/manifests.ts @@ -1,26 +1,20 @@ import { UMB_SCRIPT_ENTITY_TYPE } from '../entity.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_WORKSPACE_ALIAS = 'Umb.Workspace.Script'; export const UMB_SAVE_SCRIPT_WORKSPACE_ACTION_ALIAS = 'Umb.WorkspaceAction.Script.Save'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: UMB_SCRIPT_WORKSPACE_ALIAS, - name: 'Script Workspace', - api: () => import('./script-workspace.context.js'), - meta: { - entityType: UMB_SCRIPT_ENTITY_TYPE, +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_SCRIPT_WORKSPACE_ALIAS, + name: 'Script Workspace', + api: () => import('./script-workspace.context.js'), + meta: { + entityType: UMB_SCRIPT_ENTITY_TYPE, + }, }, -}; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -35,10 +29,8 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_SCRIPT_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [workspace, ...workspaceActions]; diff --git a/src/packages/templating/stylesheets/entity-actions/create/manifests.ts b/src/packages/templating/stylesheets/entity-actions/create/manifests.ts index 7f3ec184d3..c5a933f817 100644 --- a/src/packages/templating/stylesheets/entity-actions/create/manifests.ts +++ b/src/packages/templating/stylesheets/entity-actions/create/manifests.ts @@ -1,7 +1,6 @@ import { UMB_STYLESHEET_FOLDER_ENTITY_TYPE, UMB_STYLESHEET_ROOT_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -13,6 +12,7 @@ export const manifests: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { diff --git a/src/packages/templating/stylesheets/entity-actions/manifests.ts b/src/packages/templating/stylesheets/entity-actions/manifests.ts index 5a51586721..0f692e2a45 100644 --- a/src/packages/templating/stylesheets/entity-actions/manifests.ts +++ b/src/packages/templating/stylesheets/entity-actions/manifests.ts @@ -2,9 +2,8 @@ import { UMB_STYLESHEET_ENTITY_TYPE } from '../entity.js'; import { UMB_STYLESHEET_DETAIL_REPOSITORY_ALIAS, UMB_STYLESHEET_ITEM_REPOSITORY_ALIAS } from '../repository/index.js'; import { manifests as createManifests } from './create/manifests.js'; import { manifests as renameManifests } from './rename/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const stylesheetActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'delete', @@ -16,6 +15,6 @@ const stylesheetActions: Array = [ itemRepositoryAlias: UMB_STYLESHEET_ITEM_REPOSITORY_ALIAS, }, }, + ...createManifests, + ...renameManifests, ]; - -export const manifests: Array = [...stylesheetActions, ...createManifests, ...renameManifests]; diff --git a/src/packages/templating/stylesheets/entity-actions/rename/manifests.ts b/src/packages/templating/stylesheets/entity-actions/rename/manifests.ts index 692ee8af2f..d0b079c6ed 100644 --- a/src/packages/templating/stylesheets/entity-actions/rename/manifests.ts +++ b/src/packages/templating/stylesheets/entity-actions/rename/manifests.ts @@ -1,11 +1,10 @@ import { UMB_STYLESHEET_ENTITY_TYPE } from '../../entity.js'; import { UMB_STYLESHEET_ITEM_REPOSITORY_ALIAS } from '../../repository/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_RENAME_STYLESHEET_REPOSITORY_ALIAS = 'Umb.Repository.Stylesheet.Rename'; export const UMB_RENAME_STYLESHEET_ENTITY_ACTION_ALIAS = 'Umb.EntityAction.Stylesheet.Rename'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'repository', alias: UMB_RENAME_STYLESHEET_REPOSITORY_ALIAS, diff --git a/src/packages/templating/stylesheets/global-components/manifests.ts b/src/packages/templating/stylesheets/global-components/manifests.ts index 18d09f38e9..3655f35534 100644 --- a/src/packages/templating/stylesheets/global-components/manifests.ts +++ b/src/packages/templating/stylesheets/global-components/manifests.ts @@ -1,4 +1,3 @@ import { manifests as stylesheetRuleInputManifests } from './stylesheet-rule-input/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...stylesheetRuleInputManifests]; +export const manifests: Array = [...stylesheetRuleInputManifests]; diff --git a/src/packages/templating/stylesheets/global-components/stylesheet-rule-input/manifests.ts b/src/packages/templating/stylesheets/global-components/stylesheet-rule-input/manifests.ts index 27b7854e6e..b5d9a7363d 100644 --- a/src/packages/templating/stylesheets/global-components/stylesheet-rule-input/manifests.ts +++ b/src/packages/templating/stylesheets/global-components/stylesheet-rule-input/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_STYLESHEET_RULE_SETTINGS_MODAL_ALIAS = 'Umb.Modal.StylesheetRuleSettings'; -const modal: ManifestModal = { - type: 'modal', - alias: UMB_STYLESHEET_RULE_SETTINGS_MODAL_ALIAS, - name: 'Stylesheet Rule Settings Modal', - element: () => import('./stylesheet-rule-settings-modal.element.js'), -}; - -export const manifests: Array = [modal]; +export const manifests: Array = [ + { + type: 'modal', + alias: UMB_STYLESHEET_RULE_SETTINGS_MODAL_ALIAS, + name: 'Stylesheet Rule Settings Modal', + element: () => import('./stylesheet-rule-settings-modal.element.js'), + }, +]; diff --git a/src/packages/templating/stylesheets/manifests.ts b/src/packages/templating/stylesheets/manifests.ts index 5d262392ce..f2d89860f0 100644 --- a/src/packages/templating/stylesheets/manifests.ts +++ b/src/packages/templating/stylesheets/manifests.ts @@ -4,9 +4,8 @@ import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as entityActionManifests } from './entity-actions/manifests.js'; import { manifests as componentManifests } from './global-components/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...repositoryManifests, ...menuManifests, ...treeManifests, diff --git a/src/packages/templating/stylesheets/menu/manifests.ts b/src/packages/templating/stylesheets/menu/manifests.ts index e608184211..80e7c335e3 100644 --- a/src/packages/templating/stylesheets/menu/manifests.ts +++ b/src/packages/templating/stylesheets/menu/manifests.ts @@ -1,7 +1,6 @@ import { UMB_STYLESHEET_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/packages/templating/stylesheets/repository/item/manifests.ts b/src/packages/templating/stylesheets/repository/item/manifests.ts index 9708a23351..94eb59eaa4 100644 --- a/src/packages/templating/stylesheets/repository/item/manifests.ts +++ b/src/packages/templating/stylesheets/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_STYLESHEET_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.Stylesheet.Item'; export const UMB_STYLESHEET_ITEM_STORE_ALIAS = 'Umb.ItemStore.Stylesheet'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_STYLESHEET_ITEM_REPOSITORY_ALIAS, - name: 'Stylesheet Item Repository', - api: () => import('./stylesheet-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: 'Umb.ItemStore.Stylesheet', - name: 'Stylesheet Item Store', - api: () => import('./stylesheet-item.store.js'), -}; - -export const manifests: Array = [repository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_STYLESHEET_ITEM_REPOSITORY_ALIAS, + name: 'Stylesheet Item Repository', + api: () => import('./stylesheet-item.repository.js'), + }, + { + type: 'itemStore', + alias: 'Umb.ItemStore.Stylesheet', + name: 'Stylesheet Item Store', + api: () => import('./stylesheet-item.store.js'), + }, +]; diff --git a/src/packages/templating/stylesheets/repository/manifests.ts b/src/packages/templating/stylesheets/repository/manifests.ts index 82519d2a73..b9d3e1f462 100644 --- a/src/packages/templating/stylesheets/repository/manifests.ts +++ b/src/packages/templating/stylesheets/repository/manifests.ts @@ -1,21 +1,20 @@ import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_STYLESHEET_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Stylesheet.Detail'; export const UMB_STYLESHEET_DETAIL_STORE_ALIAS = 'Umb.Store.Stylesheet.Detail'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_STYLESHEET_DETAIL_REPOSITORY_ALIAS, - name: 'Stylesheet Detail Repository', - api: () => import('./stylesheet-detail.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_STYLESHEET_DETAIL_STORE_ALIAS, - name: 'Stylesheet Detail Store', - api: () => import('./stylesheet-detail.store.js'), -}; - -export const manifests: Array = [repository, store, ...itemManifests]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_STYLESHEET_DETAIL_REPOSITORY_ALIAS, + name: 'Stylesheet Detail Repository', + api: () => import('./stylesheet-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_STYLESHEET_DETAIL_STORE_ALIAS, + name: 'Stylesheet Detail Store', + api: () => import('./stylesheet-detail.store.js'), + }, + ...itemManifests, +]; diff --git a/src/packages/templating/stylesheets/tree/folder/manifests.ts b/src/packages/templating/stylesheets/tree/folder/manifests.ts index 9e73b39964..7896d6b1d7 100644 --- a/src/packages/templating/stylesheets/tree/folder/manifests.ts +++ b/src/packages/templating/stylesheets/tree/folder/manifests.ts @@ -1,18 +1,15 @@ import { UMB_STYLESHEET_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_STYLESHEET_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.Stylesheet.Folder'; - -const folderRepository: ManifestRepository = { - type: 'repository', - alias: UMB_STYLESHEET_FOLDER_REPOSITORY_ALIAS, - name: 'Stylesheet Folder Repository', - api: () => import('./stylesheet-folder.repository.js'), -}; - export const UMB_DELETE_STYLESHEET_FOLDER_ENTITY_ACTION_ALIAS = 'Umb.EntityAction.Stylesheet.Folder.Delete'; -const entityActions = [ +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_STYLESHEET_FOLDER_REPOSITORY_ALIAS, + name: 'Stylesheet Folder Repository', + api: () => import('./stylesheet-folder.repository.js'), + }, { type: 'entityAction', kind: 'folderDelete', @@ -24,5 +21,3 @@ const entityActions = [ }, }, ]; - -export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/packages/templating/stylesheets/tree/manifests.ts b/src/packages/templating/stylesheets/tree/manifests.ts index 1b7335f0b5..0881159af8 100644 --- a/src/packages/templating/stylesheets/tree/manifests.ts +++ b/src/packages/templating/stylesheets/tree/manifests.ts @@ -5,56 +5,41 @@ import { } from '../entity.js'; import { manifests as folderManifests } from './folder/manifests.js'; import { manifests as reloadTreeItemChildrenManifest } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_STYLESHEET_TREE_ALIAS = 'Umb.Tree.Stylesheet'; export const UMB_STYLESHEET_TREE_REPOSITORY_ALIAS = 'Umb.Repository.StylesheetTree'; export const UMB_STYLESHEET_TREE_STORE_ALIAS = 'Umb.Store.StylesheetTree'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_STYLESHEET_TREE_REPOSITORY_ALIAS, - name: 'Stylesheet Tree Repository', - api: () => import('./stylesheet-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_STYLESHEET_TREE_STORE_ALIAS, - name: 'Stylesheet Tree Store', - api: () => import('./stylesheet-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_STYLESHEET_TREE_ALIAS, - name: 'Stylesheet Tree', - weight: 10, - meta: { - repositoryAlias: UMB_STYLESHEET_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_STYLESHEET_TREE_REPOSITORY_ALIAS, + name: 'Stylesheet Tree Repository', + api: () => import('./stylesheet-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_STYLESHEET_TREE_STORE_ALIAS, + name: 'Stylesheet Tree Store', + api: () => import('./stylesheet-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_STYLESHEET_TREE_ALIAS, + name: 'Stylesheet Tree', + weight: 10, + meta: { + repositoryAlias: UMB_STYLESHEET_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.Stylesheet', + name: 'Stylesheet Tree Item', + forEntityTypes: [UMB_STYLESHEET_ROOT_ENTITY_TYPE, UMB_STYLESHEET_ENTITY_TYPE, UMB_STYLESHEET_FOLDER_ENTITY_TYPE], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.Stylesheet', - name: 'Stylesheet Tree Item', - forEntityTypes: [UMB_STYLESHEET_ROOT_ENTITY_TYPE, UMB_STYLESHEET_ENTITY_TYPE, UMB_STYLESHEET_FOLDER_ENTITY_TYPE], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...folderManifests, ...reloadTreeItemChildrenManifest, ]; diff --git a/src/packages/templating/stylesheets/tree/reload-tree-item-children/manifests.ts b/src/packages/templating/stylesheets/tree/reload-tree-item-children/manifests.ts index 3bfb1c64a5..e82feb104c 100644 --- a/src/packages/templating/stylesheets/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/templating/stylesheets/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_STYLESHEET_ROOT_ENTITY_TYPE, UMB_STYLESHEET_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/templating/stylesheets/workspace/manifests.ts b/src/packages/templating/stylesheets/workspace/manifests.ts index 559ce530ad..e7e74233ea 100644 --- a/src/packages/templating/stylesheets/workspace/manifests.ts +++ b/src/packages/templating/stylesheets/workspace/manifests.ts @@ -1,25 +1,18 @@ -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceView, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; export const UMB_STYLESHEET_WORKSPACE_ALIAS = 'Umb.Workspace.Stylesheet'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: UMB_STYLESHEET_WORKSPACE_ALIAS, - name: 'Stylesheet Workspace', - api: () => import('./stylesheet-workspace.context.js'), - meta: { - entityType: 'stylesheet', +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_STYLESHEET_WORKSPACE_ALIAS, + name: 'Stylesheet Workspace', + api: () => import('./stylesheet-workspace.context.js'), + meta: { + entityType: 'stylesheet', + }, }, -}; - -const workspaceViews: Array = [ { type: 'workspaceView', alias: 'Umb.WorkspaceView.Stylesheet.CodeEditor', @@ -34,7 +27,7 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_STYLESHEET_WORKSPACE_ALIAS, }, ], }, @@ -52,12 +45,10 @@ const workspaceViews: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_STYLESHEET_WORKSPACE_ALIAS, }, ], }, -]; -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -72,10 +63,8 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_STYLESHEET_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/packages/templating/templates/entity-actions/manifests.ts b/src/packages/templating/templates/entity-actions/manifests.ts index 44b7e6fcda..fb548f4166 100644 --- a/src/packages/templating/templates/entity-actions/manifests.ts +++ b/src/packages/templating/templates/entity-actions/manifests.ts @@ -1,8 +1,7 @@ import { UMB_TEMPLATE_DETAIL_REPOSITORY_ALIAS, UMB_TEMPLATE_ITEM_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_TEMPLATE_ENTITY_TYPE, UMB_TEMPLATE_ROOT_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'default', @@ -14,6 +13,7 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: '#actions_create', + additionalOptions: true, }, }, { @@ -28,5 +28,3 @@ const entityActions: Array = [ }, }, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/templating/templates/global-components/input-template/input-template.element.ts b/src/packages/templating/templates/global-components/input-template/input-template.element.ts index 352c8b4427..d59a88d83c 100644 --- a/src/packages/templating/templates/global-components/input-template/input-template.element.ts +++ b/src/packages/templating/templates/global-components/input-template/input-template.element.ts @@ -5,7 +5,8 @@ import { UmbTemplateItemRepository } from '../../repository/item/index.js'; import { UMB_TEMPLATE_PICKER_MODAL } from '../../modals/index.js'; import { css, html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; diff --git a/src/packages/templating/templates/manifests.ts b/src/packages/templating/templates/manifests.ts index 0488df8717..eb8a2594d5 100644 --- a/src/packages/templating/templates/manifests.ts +++ b/src/packages/templating/templates/manifests.ts @@ -5,9 +5,8 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as searchManifests } from './search/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...entityActionsManifests, ...menuManifests, ...modalManifests, diff --git a/src/packages/templating/templates/menu/manifests.ts b/src/packages/templating/templates/menu/manifests.ts index dbe1dc6b14..17f3a60f38 100644 --- a/src/packages/templating/templates/menu/manifests.ts +++ b/src/packages/templating/templates/menu/manifests.ts @@ -1,7 +1,6 @@ import { UMB_TEMPLATE_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/packages/templating/templates/modals/manifests.ts b/src/packages/templating/templates/modals/manifests.ts index b214269ac4..8fe74fde31 100644 --- a/src/packages/templating/templates/modals/manifests.ts +++ b/src/packages/templating/templates/modals/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.Template.QueryBuilder', @@ -8,5 +6,3 @@ const modals: Array = [ element: () => import('./query-builder/query-builder-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/templating/templates/repository/detail/manifests.ts b/src/packages/templating/templates/repository/detail/manifests.ts index 63b7505c43..78a8bed513 100644 --- a/src/packages/templating/templates/repository/detail/manifests.ts +++ b/src/packages/templating/templates/repository/detail/manifests.ts @@ -1,21 +1,17 @@ -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_TEMPLATE_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Template.Detail'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_TEMPLATE_DETAIL_REPOSITORY_ALIAS, - name: 'Template Detail Repository', - api: () => import('./template-detail.repository.js'), -}; - export const UMB_TEMPLATE_DETAIL_STORE_ALIAS = 'Umb.Store.Template.Detail'; -const store: ManifestStore = { - type: 'store', - alias: UMB_TEMPLATE_DETAIL_STORE_ALIAS, - name: 'Template Detail Store', - api: () => import('./template-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_TEMPLATE_DETAIL_REPOSITORY_ALIAS, + name: 'Template Detail Repository', + api: () => import('./template-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_TEMPLATE_DETAIL_STORE_ALIAS, + name: 'Template Detail Store', + api: () => import('./template-detail.store.js'), + }, +]; diff --git a/src/packages/templating/templates/repository/item/manifests.ts b/src/packages/templating/templates/repository/item/manifests.ts index a75b5affdc..063dbf615a 100644 --- a/src/packages/templating/templates/repository/item/manifests.ts +++ b/src/packages/templating/templates/repository/item/manifests.ts @@ -1,20 +1,17 @@ -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_TEMPLATE_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.TemplateItem'; export const UMB_TEMPLATE_STORE_ALIAS = 'Umb.Store.TemplateItem'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_TEMPLATE_ITEM_REPOSITORY_ALIAS, - name: 'Template Item Repository', - api: () => import('./template-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_TEMPLATE_STORE_ALIAS, - name: 'Template Item Store', - api: () => import('./template-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_TEMPLATE_ITEM_REPOSITORY_ALIAS, + name: 'Template Item Repository', + api: () => import('./template-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_TEMPLATE_STORE_ALIAS, + name: 'Template Item Store', + api: () => import('./template-item.store.js'), + }, +]; diff --git a/src/packages/templating/templates/repository/manifests.ts b/src/packages/templating/templates/repository/manifests.ts index 3047377894..a2ce966dc8 100644 --- a/src/packages/templating/templates/repository/manifests.ts +++ b/src/packages/templating/templates/repository/manifests.ts @@ -1,6 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as queryManifests } from './query/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests, ...queryManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests, ...queryManifests]; diff --git a/src/packages/templating/templates/repository/query/manifests.ts b/src/packages/templating/templates/repository/query/manifests.ts index 76e7c22f39..2688c71b55 100644 --- a/src/packages/templating/templates/repository/query/manifests.ts +++ b/src/packages/templating/templates/repository/query/manifests.ts @@ -1,12 +1,10 @@ -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - export const UMB_TEMPLATE_QUERY_REPOSITORY_ALIAS = 'Umb.Repository.TemplateQuery'; -const queryRepository: ManifestRepository = { - type: 'repository', - alias: UMB_TEMPLATE_QUERY_REPOSITORY_ALIAS, - name: 'Template Query Repository', - api: () => import('./template-query.repository.js'), -}; - -export const manifests: Array = [queryRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_TEMPLATE_QUERY_REPOSITORY_ALIAS, + name: 'Template Query Repository', + api: () => import('./template-query.repository.js'), + }, +]; diff --git a/src/packages/templating/templates/search/manifests.ts b/src/packages/templating/templates/search/manifests.ts index 04c046c23b..e105f12be5 100644 --- a/src/packages/templating/templates/search/manifests.ts +++ b/src/packages/templating/templates/search/manifests.ts @@ -1,7 +1,6 @@ import { UMB_TEMPLATE_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { name: 'Template Search Provider', alias: 'Umb.SearchProvider.Template', diff --git a/src/packages/templating/templates/tree/manifests.ts b/src/packages/templating/templates/tree/manifests.ts index d43fe8af2b..90b45fef48 100644 --- a/src/packages/templating/templates/tree/manifests.ts +++ b/src/packages/templating/templates/tree/manifests.ts @@ -1,53 +1,38 @@ import { UMB_TEMPLATE_ENTITY_TYPE, UMB_TEMPLATE_ROOT_ENTITY_TYPE } from '../entity.js'; import { manifests as reloadTreeItemChildrenManifest } from './reload-tree-item-children/manifests.js'; -import type { - ManifestRepository, - ManifestTree, - ManifestTreeItem, - ManifestTreeStore, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_TEMPLATE_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Template.Tree'; export const UMB_TEMPLATE_TREE_STORE_ALIAS = 'Umb.Store.Template.Tree'; export const UMB_TEMPLATE_TREE_ALIAS = 'Umb.Tree.Template'; -const treeRepository: ManifestRepository = { - type: 'repository', - alias: UMB_TEMPLATE_TREE_REPOSITORY_ALIAS, - name: 'Template Tree Repository', - api: () => import('./template-tree.repository.js'), -}; - -const treeStore: ManifestTreeStore = { - type: 'treeStore', - alias: UMB_TEMPLATE_TREE_STORE_ALIAS, - name: 'Template Tree Store', - api: () => import('./template-tree.store.js'), -}; - -const tree: ManifestTree = { - type: 'tree', - kind: 'default', - alias: UMB_TEMPLATE_TREE_ALIAS, - name: 'Template Tree', - meta: { - repositoryAlias: UMB_TEMPLATE_TREE_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_TEMPLATE_TREE_REPOSITORY_ALIAS, + name: 'Template Tree Repository', + api: () => import('./template-tree.repository.js'), + }, + { + type: 'treeStore', + alias: UMB_TEMPLATE_TREE_STORE_ALIAS, + name: 'Template Tree Store', + api: () => import('./template-tree.store.js'), + }, + { + type: 'tree', + kind: 'default', + alias: UMB_TEMPLATE_TREE_ALIAS, + name: 'Template Tree', + meta: { + repositoryAlias: UMB_TEMPLATE_TREE_REPOSITORY_ALIAS, + }, + }, + { + type: 'treeItem', + kind: 'default', + alias: 'Umb.TreeItem.Template', + name: 'Template Tree Item', + forEntityTypes: [UMB_TEMPLATE_ROOT_ENTITY_TYPE, UMB_TEMPLATE_ENTITY_TYPE], }, -}; - -const treeItem: ManifestTreeItem = { - type: 'treeItem', - kind: 'default', - alias: 'Umb.TreeItem.Template', - name: 'Template Tree Item', - forEntityTypes: [UMB_TEMPLATE_ROOT_ENTITY_TYPE, UMB_TEMPLATE_ENTITY_TYPE], -}; - -export const manifests: Array = [ - treeRepository, - treeStore, - tree, - treeItem, ...reloadTreeItemChildrenManifest, ]; diff --git a/src/packages/templating/templates/tree/reload-tree-item-children/manifests.ts b/src/packages/templating/templates/tree/reload-tree-item-children/manifests.ts index 064e0c422f..6d752a8384 100644 --- a/src/packages/templating/templates/tree/reload-tree-item-children/manifests.ts +++ b/src/packages/templating/templates/tree/reload-tree-item-children/manifests.ts @@ -1,7 +1,6 @@ import { UMB_TEMPLATE_ROOT_ENTITY_TYPE, UMB_TEMPLATE_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'reloadTreeItemChildren', diff --git a/src/packages/templating/templates/workspace/manifests.ts b/src/packages/templating/templates/workspace/manifests.ts index a9e9c75bb1..3fb187abfa 100644 --- a/src/packages/templating/templates/workspace/manifests.ts +++ b/src/packages/templating/templates/workspace/manifests.ts @@ -1,27 +1,18 @@ import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceView, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_TEMPLATE_WORKSPACE_ALIAS = 'Umb.Workspace.Template'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: 'Umb.Workspace.Template', - name: 'Template Workspace', - api: () => import('./template-workspace.context.js'), - meta: { - entityType: 'template', +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: 'Umb.Workspace.Template', + name: 'Template Workspace', + api: () => import('./template-workspace.context.js'), + meta: { + entityType: 'template', + }, }, -}; - -const workspaceViews: Array = []; - -const workspaceActions: Array = [ { type: 'workspaceAction', kind: 'default', @@ -37,10 +28,8 @@ const workspaceActions: Array = [ conditions: [ { alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, + match: UMB_TEMPLATE_WORKSPACE_ALIAS, }, ], }, ]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/packages/tiny-mce/components/input-tiny-mce/input-tiny-mce.element.ts b/src/packages/tiny-mce/components/input-tiny-mce/input-tiny-mce.element.ts index 8cfda14ba5..8e8f81cafa 100644 --- a/src/packages/tiny-mce/components/input-tiny-mce/input-tiny-mce.element.ts +++ b/src/packages/tiny-mce/components/input-tiny-mce/input-tiny-mce.element.ts @@ -79,7 +79,7 @@ export class UmbInputTinyMceElement extends UUIFormControlMixin(UmbLitElement, ' * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content. * @type {boolean} * @attr - * @default false + * @default */ @property({ type: Boolean, reflect: true }) public get readonly() { diff --git a/src/packages/tiny-mce/manifests.ts b/src/packages/tiny-mce/manifests.ts index 7eb27065e3..7c24fabe3e 100644 --- a/src/packages/tiny-mce/manifests.ts +++ b/src/packages/tiny-mce/manifests.ts @@ -1,6 +1,5 @@ import { manifests as propertyEditors } from './property-editors/manifests.js'; import { manifests as plugins } from './plugins/manifests.js'; import { manifests as modalManifests } from './modals/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...propertyEditors, ...plugins, ...modalManifests]; +export const manifests: Array = [...propertyEditors, ...plugins, ...modalManifests]; diff --git a/src/packages/tiny-mce/modals/manifests.ts b/src/packages/tiny-mce/modals/manifests.ts index 2dbb99237a..cd73c2fa3f 100644 --- a/src/packages/tiny-mce/modals/manifests.ts +++ b/src/packages/tiny-mce/modals/manifests.ts @@ -1,12 +1,8 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.MediaCaptionAltText', name: 'Media Caption Alt Text', - js: () => import('./media-caption-alt-text/media-caption-alt-text-modal.element.js'), + element: () => import('./media-caption-alt-text/media-caption-alt-text-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/tiny-mce/plugins/tiny-mce-code-editor.plugin.ts b/src/packages/tiny-mce/plugins/tiny-mce-code-editor.plugin.ts index 9de4e35d0f..54c16a3818 100644 --- a/src/packages/tiny-mce/plugins/tiny-mce-code-editor.plugin.ts +++ b/src/packages/tiny-mce/plugins/tiny-mce-code-editor.plugin.ts @@ -1,6 +1,7 @@ import { type TinyMcePluginArguments, UmbTinyMcePluginBase } from '../components/input-tiny-mce/tiny-mce-plugin.js'; import { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api'; -import { UMB_CODE_EDITOR_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_CODE_EDITOR_MODAL } from '@umbraco-cms/backoffice/code-editor'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; export default class UmbTinyMceCodeEditorPlugin extends UmbTinyMcePluginBase { constructor(args: TinyMcePluginArguments) { diff --git a/src/packages/tiny-mce/plugins/tiny-mce-embeddedmedia.plugin.ts b/src/packages/tiny-mce/plugins/tiny-mce-embeddedmedia.plugin.ts index 8995fc66b9..e451c9d6d7 100644 --- a/src/packages/tiny-mce/plugins/tiny-mce-embeddedmedia.plugin.ts +++ b/src/packages/tiny-mce/plugins/tiny-mce-embeddedmedia.plugin.ts @@ -1,7 +1,8 @@ import { type TinyMcePluginArguments, UmbTinyMcePluginBase } from '../components/input-tiny-mce/tiny-mce-plugin.js'; import { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api'; -import type { UmbEmbeddedMediaModalData, UmbEmbeddedMediaModalValue } from '@umbraco-cms/backoffice/modal'; -import { UMB_EMBEDDED_MEDIA_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import type { UmbEmbeddedMediaModalData, UmbEmbeddedMediaModalValue } from '@umbraco-cms/backoffice/embedded-media'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_EMBEDDED_MEDIA_MODAL } from '@umbraco-cms/backoffice/embedded-media'; export default class UmbTinyMceEmbeddedMediaPlugin extends UmbTinyMcePluginBase { constructor(args: TinyMcePluginArguments) { diff --git a/src/packages/tiny-mce/property-editors/block/property-editor-ui-block-rte-type-configuration.element.ts b/src/packages/tiny-mce/property-editors/block/property-editor-ui-block-rte-type-configuration.element.ts index 2b59427770..174e14fe02 100644 --- a/src/packages/tiny-mce/property-editors/block/property-editor-ui-block-rte-type-configuration.element.ts +++ b/src/packages/tiny-mce/property-editors/block/property-editor-ui-block-rte-type-configuration.element.ts @@ -1,13 +1,13 @@ -import { UmbInputBlockTypeElement } from '@umbraco-cms/backoffice/block-type'; +import { type UmbBlockTypeBaseModel, UmbInputBlockTypeElement } from '@umbraco-cms/backoffice/block-type'; import { UMB_BLOCK_RTE_TYPE } from '@umbraco-cms/backoffice/block-rte'; -import type { UmbBlockTypeBaseModel, UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { html, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UmbPropertyValueChangeEvent, type UmbPropertyEditorConfigCollection, } from '@umbraco-cms/backoffice/property-editor'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; /** diff --git a/src/packages/tiny-mce/property-editors/manifests.ts b/src/packages/tiny-mce/property-editors/manifests.ts index a739d74519..cc57f8b61b 100644 --- a/src/packages/tiny-mce/property-editors/manifests.ts +++ b/src/packages/tiny-mce/property-editors/manifests.ts @@ -1,15 +1,14 @@ import { manifest as blockRteTypeManifest } from './block/manifests.js'; import { manifests as tinyMceManifest } from './tiny-mce/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...tinyMceManifest, blockRteTypeManifest, { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUI.TinyMCE.ToolbarConfiguration', name: 'TinyMCE Toolbar Property Editor UI', - js: () => import('./toolbar/property-editor-ui-tiny-mce-toolbar-configuration.element.js'), + element: () => import('./toolbar/property-editor-ui-tiny-mce-toolbar-configuration.element.js'), meta: { label: 'TinyMCE Toolbar Configuration', icon: 'icon-autofill', @@ -20,7 +19,7 @@ export const manifests: Array = [ type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUI.TinyMCE.StylesheetsConfiguration', name: 'TinyMCE Stylesheets Property Editor UI', - js: () => import('./stylesheets/property-editor-ui-tiny-mce-stylesheets-configuration.element.js'), + element: () => import('./stylesheets/property-editor-ui-tiny-mce-stylesheets-configuration.element.js'), meta: { label: 'TinyMCE Stylesheets Configuration', icon: 'icon-autofill', @@ -31,7 +30,7 @@ export const manifests: Array = [ type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUI.TinyMCE.DimensionsConfiguration', name: 'TinyMCE Dimensions Property Editor UI', - js: () => import('./dimensions/property-editor-ui-tiny-mce-dimensions-configuration.element.js'), + element: () => import('./dimensions/property-editor-ui-tiny-mce-dimensions-configuration.element.js'), meta: { label: 'TinyMCE Dimensions Configuration', icon: 'icon-autofill', @@ -42,7 +41,7 @@ export const manifests: Array = [ type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUI.TinyMCE.MaxImageSizeConfiguration', name: 'TinyMCE Max Image Size Property Editor UI', - js: () => import('./max-image-size/property-editor-ui-tiny-mce-maximagesize.element.js'), + element: () => import('./max-image-size/property-editor-ui-tiny-mce-maximagesize.element.js'), meta: { label: 'TinyMCE Max Image Size Configuration', icon: 'icon-autofill', diff --git a/src/packages/tiny-mce/property-editors/tiny-mce/manifests.ts b/src/packages/tiny-mce/property-editors/tiny-mce/manifests.ts index 7b970e23d6..b4f482c9d1 100644 --- a/src/packages/tiny-mce/property-editors/tiny-mce/manifests.ts +++ b/src/packages/tiny-mce/property-editors/tiny-mce/manifests.ts @@ -1,5 +1,5 @@ import { manifest as schemaManifest } from './Umbraco.RichText.js'; -import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_BLOCK_RTE_PROPERTY_EDITOR_SCHEMA_ALIAS = 'Umbraco.RichText'; export const UMB_BLOCK_RTE_PROPERTY_EDITOR_UI_ALIAS = 'Umb.PropertyEditorUi.TinyMCE'; @@ -134,4 +134,4 @@ const manifest: ManifestPropertyEditorUi = { }, }; -export const manifests: Array = [manifest, schemaManifest]; +export const manifests: Array = [manifest, schemaManifest]; diff --git a/src/packages/ufm/manifests.ts b/src/packages/ufm/manifests.ts index 930ae37b3a..4d41e13c08 100644 --- a/src/packages/ufm/manifests.ts +++ b/src/packages/ufm/manifests.ts @@ -1,6 +1,5 @@ import { manifest as ufmContext } from './contexts/manifest.js'; import { manifests as ufmComponents } from './components/manifests.js'; import { manifests as ufmFilters } from './filters/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ufmContext, ...ufmComponents, ...ufmFilters]; +export const manifests: Array = [ufmContext, ...ufmComponents, ...ufmFilters]; diff --git a/src/packages/user/change-password/change-user-password.action.ts b/src/packages/user/change-password/entity-action/change-user-password.action.ts similarity index 91% rename from src/packages/user/change-password/change-user-password.action.ts rename to src/packages/user/change-password/entity-action/change-user-password.action.ts index fbf0e35929..6e836d9bf8 100644 --- a/src/packages/user/change-password/change-user-password.action.ts +++ b/src/packages/user/change-password/entity-action/change-user-password.action.ts @@ -1,8 +1,9 @@ +import { UMB_CHANGE_PASSWORD_MODAL } from '../modal/index.js'; import { UmbChangeUserPasswordRepository } from '@umbraco-cms/backoffice/user'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbEntityActionArgs } from '@umbraco-cms/backoffice/entity-action'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; -import { UMB_MODAL_MANAGER_CONTEXT, UMB_CHANGE_PASSWORD_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import { UMB_CURRENT_USER_CONTEXT, UmbCurrentUserRepository } from '@umbraco-cms/backoffice/current-user'; export class UmbChangeUserPasswordEntityAction extends UmbEntityActionBase { diff --git a/src/packages/user/change-password/entity-action/manifests.ts b/src/packages/user/change-password/entity-action/manifests.ts new file mode 100644 index 0000000000..01148ac695 --- /dev/null +++ b/src/packages/user/change-password/entity-action/manifests.ts @@ -0,0 +1,22 @@ +import { UMB_USER_ENTITY_TYPE } from '@umbraco-cms/backoffice/user'; + +export const manifests: Array = [ + { + type: 'entityAction', + kind: 'default', + alias: 'Umb.EntityAction.User.ChangePassword', + name: 'Change User Password Entity Action', + weight: 600, + api: () => import('./change-user-password.action.js'), + forEntityTypes: [UMB_USER_ENTITY_TYPE], + meta: { + icon: 'icon-key', + label: '#user_changePassword', + }, + conditions: [ + { + alias: 'Umb.Condition.User.AllowChangePassword', + }, + ], + }, +]; diff --git a/src/packages/user/change-password/index.ts b/src/packages/user/change-password/index.ts new file mode 100644 index 0000000000..28d9f38fba --- /dev/null +++ b/src/packages/user/change-password/index.ts @@ -0,0 +1 @@ +export * from './modal/index.js'; diff --git a/src/packages/user/change-password/manifests.ts b/src/packages/user/change-password/manifests.ts index 083dc29663..a779cde6a9 100644 --- a/src/packages/user/change-password/manifests.ts +++ b/src/packages/user/change-password/manifests.ts @@ -1,24 +1,4 @@ -import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -import { UMB_USER_ENTITY_TYPE } from '@umbraco-cms/backoffice/user'; +import { manifests as entityActionManifests } from './entity-action/manifests.js'; +import { manifests as modalManifests } from './modal/manifests.js'; -export const manifests: Array = [ - { - type: 'entityAction', - kind: 'default', - alias: 'Umb.EntityAction.User.ChangePassword', - name: 'Change User Password Entity Action', - weight: 600, - api: () => import('./change-user-password.action.js'), - forEntityTypes: [UMB_USER_ENTITY_TYPE], - meta: { - icon: 'icon-key', - label: '#user_changePassword', - }, - }, - { - type: 'modal', - alias: 'Umb.Modal.ChangePassword', - name: 'Change Password Modal', - js: () => import('./change-password-modal.element.js'), - }, -]; +export const manifests: Array = [...entityActionManifests, ...modalManifests]; diff --git a/src/packages/user/change-password/change-password-modal.element.ts b/src/packages/user/change-password/modal/change-password-modal.element.ts similarity index 98% rename from src/packages/user/change-password/change-password-modal.element.ts rename to src/packages/user/change-password/modal/change-password-modal.element.ts index 09a0819e60..bdff723460 100644 --- a/src/packages/user/change-password/change-password-modal.element.ts +++ b/src/packages/user/change-password/modal/change-password-modal.element.ts @@ -1,9 +1,9 @@ +import type { UmbChangePasswordModalData, UmbChangePasswordModalValue } from './change-password-modal.token.js'; import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user'; import { UmbUserItemRepository } from '@umbraco-cms/backoffice/user'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit'; import { css, html, nothing, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbChangePasswordModalData, UmbChangePasswordModalValue } from '@umbraco-cms/backoffice/modal'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; @customElement('umb-change-password-modal') diff --git a/src/packages/core/modal/token/change-password-modal.token.ts b/src/packages/user/change-password/modal/change-password-modal.token.ts similarity index 85% rename from src/packages/core/modal/token/change-password-modal.token.ts rename to src/packages/user/change-password/modal/change-password-modal.token.ts index d6a41803fb..8c8cf1b9a6 100644 --- a/src/packages/core/modal/token/change-password-modal.token.ts +++ b/src/packages/user/change-password/modal/change-password-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbChangePasswordModalData { user: { diff --git a/src/packages/user/change-password/modal/index.ts b/src/packages/user/change-password/modal/index.ts new file mode 100644 index 0000000000..dbfc55d6cf --- /dev/null +++ b/src/packages/user/change-password/modal/index.ts @@ -0,0 +1 @@ +export * from './change-password-modal.token.js'; diff --git a/src/packages/user/change-password/modal/manifests.ts b/src/packages/user/change-password/modal/manifests.ts new file mode 100644 index 0000000000..f08d08322a --- /dev/null +++ b/src/packages/user/change-password/modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.ChangePassword', + name: 'Change Password Modal', + js: () => import('./change-password-modal.element.js'), + }, +]; diff --git a/src/packages/user/current-user/action/default.kind.ts b/src/packages/user/current-user/action/default.kind.ts index 900bd8ad36..bc0611f9be 100644 --- a/src/packages/user/current-user/action/default.kind.ts +++ b/src/packages/user/current-user/action/default.kind.ts @@ -1,6 +1,6 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: UmbBackofficeManifestKind = { +export const manifest: UmbExtensionManifestKind = { type: 'kind', alias: 'Umb.Kind.CurrentUserAction.Default', matchKind: 'default', diff --git a/src/packages/user/current-user/conditions/index.ts b/src/packages/user/current-user/conditions/index.ts new file mode 100644 index 0000000000..8e80a3f329 --- /dev/null +++ b/src/packages/user/current-user/conditions/index.ts @@ -0,0 +1 @@ +export * from './is-admin/index.js'; diff --git a/src/packages/user/current-user/conditions/is-admin/constants.ts b/src/packages/user/current-user/conditions/is-admin/constants.ts new file mode 100644 index 0000000000..2d3a8d78da --- /dev/null +++ b/src/packages/user/current-user/conditions/is-admin/constants.ts @@ -0,0 +1 @@ +export const UMB_CURRENT_USER_IS_ADMIN_CONDITION_ALIAS = 'Umb.Condition.CurrentUser.IsAdmin'; diff --git a/src/packages/user/current-user/conditions/is-admin/index.ts b/src/packages/user/current-user/conditions/is-admin/index.ts new file mode 100644 index 0000000000..4f07201dcf --- /dev/null +++ b/src/packages/user/current-user/conditions/is-admin/index.ts @@ -0,0 +1 @@ +export * from './constants.js'; diff --git a/src/packages/user/current-user/conditions/is-admin/is-admin.condition.manifest.ts b/src/packages/user/current-user/conditions/is-admin/is-admin.condition.manifest.ts new file mode 100644 index 0000000000..b9c81293e0 --- /dev/null +++ b/src/packages/user/current-user/conditions/is-admin/is-admin.condition.manifest.ts @@ -0,0 +1,9 @@ +import { UMB_CURRENT_USER_IS_ADMIN_CONDITION_ALIAS } from './constants.js'; +import type { ManifestCondition } from '@umbraco-cms/backoffice/extension-api'; + +export const manifest: ManifestCondition = { + type: 'condition', + name: 'Current user is admin Condition', + alias: UMB_CURRENT_USER_IS_ADMIN_CONDITION_ALIAS, + api: () => import('./is-admin.condition.js'), +}; diff --git a/src/packages/user/current-user/conditions/is-admin/is-admin.condition.ts b/src/packages/user/current-user/conditions/is-admin/is-admin.condition.ts new file mode 100644 index 0000000000..438258d6f4 --- /dev/null +++ b/src/packages/user/current-user/conditions/is-admin/is-admin.condition.ts @@ -0,0 +1,20 @@ +import { isCurrentUserAnAdmin } from '../../utils/is-current-user.function.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); + isCurrentUserAnAdmin(host).then((isAdmin) => (this.permitted = isAdmin)); + } +} + +export { UmbContentHasPropertiesWorkspaceCondition as api }; diff --git a/src/packages/user/current-user/conditions/manifests.ts b/src/packages/user/current-user/conditions/manifests.ts new file mode 100644 index 0000000000..63918c839e --- /dev/null +++ b/src/packages/user/current-user/conditions/manifests.ts @@ -0,0 +1,3 @@ +import { manifest as isAdminManifests } from './is-admin/is-admin.condition.manifest.js'; + +export const manifests = [isAdminManifests]; diff --git a/src/packages/user/current-user/current-user-header-app.element.ts b/src/packages/user/current-user/current-user-header-app.element.ts index 4349a8bec9..362d2d1e37 100644 --- a/src/packages/user/current-user/current-user-header-app.element.ts +++ b/src/packages/user/current-user/current-user-header-app.element.ts @@ -1,6 +1,6 @@ import { UMB_CURRENT_USER_MODAL } from './modals/current-user/current-user-modal.token.js'; import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit'; -import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import { UMB_CURRENT_USER_CONTEXT, type UmbCurrentUserModel } from '@umbraco-cms/backoffice/current-user'; import { UmbHeaderAppButtonElement } from '@umbraco-cms/backoffice/components'; @@ -10,9 +10,6 @@ export class UmbCurrentUserHeaderAppElement extends UmbHeaderAppButtonElement { @state() private _currentUser?: UmbCurrentUserModel; - @state() - private _userAvatarUrls: Array<{ url: string; descriptor: string }> = []; - #currentUserContext?: typeof UMB_CURRENT_USER_CONTEXT.TYPE; constructor() { @@ -31,8 +28,6 @@ export class UmbCurrentUserHeaderAppElement extends UmbHeaderAppButtonElement { this.#currentUserContext.currentUser, (currentUser) => { this._currentUser = currentUser; - if (!currentUser) return; - this.#setUserAvatarUrls(currentUser); }, 'umbCurrentUserObserver', ); @@ -43,41 +38,6 @@ export class UmbCurrentUserHeaderAppElement extends UmbHeaderAppButtonElement { modalManager.open(this, UMB_CURRENT_USER_MODAL); } - #setUserAvatarUrls = async (user: UmbCurrentUserModel | undefined) => { - if (!user || !user.avatarUrls || user.avatarUrls.length === 0) { - this._userAvatarUrls = []; - return; - } - - this._userAvatarUrls = [ - { - descriptor: '1x', - url: user.avatarUrls?.[0], - }, - { - descriptor: '2x', - url: user.avatarUrls?.[1], - }, - { - descriptor: '3x', - url: user.avatarUrls?.[2], - }, - ]; - }; - - #getAvatarSrcset() { - let string = ''; - - this._userAvatarUrls?.forEach((url) => { - string += `${url.url} ${url.descriptor},`; - }); - return string; - } - - #hasAvatar() { - return this._userAvatarUrls.length > 0; - } - override render() { return html` - + .name=${this._currentUser?.name} + .imgUrls=${this._currentUser?.avatarUrls || []}> `; } diff --git a/src/packages/user/current-user/history/manifests.ts b/src/packages/user/current-user/history/manifests.ts index a3a857334a..d9169cd980 100644 --- a/src/packages/user/current-user/history/manifests.ts +++ b/src/packages/user/current-user/history/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const userProfileApps: Array = [ +export const manifests: Array = [ { type: 'userProfileApp', alias: 'Umb.UserProfileApp.CurrentUser.History', @@ -19,4 +17,3 @@ export const userProfileApps: Array = [ api: () => import('./current-user-history.store.js'), }, ]; -export const manifests: Array = [...userProfileApps]; diff --git a/src/packages/user/current-user/index.ts b/src/packages/user/current-user/index.ts index 343c0ed765..606a128e69 100644 --- a/src/packages/user/current-user/index.ts +++ b/src/packages/user/current-user/index.ts @@ -1,9 +1,10 @@ export * from './action/index.js'; export * from './components/index.js'; -export * from './history/current-user-history.store.js'; -export * from './utils/index.js'; -export * from './repository/index.js'; +export * from './conditions/index.js'; export * from './current-user.context.js'; export * from './current-user.context.token.js'; +export * from './history/current-user-history.store.js'; +export * from './repository/index.js'; +export * from './utils/index.js'; export type * from './types.js'; diff --git a/src/packages/user/current-user/manifests.ts b/src/packages/user/current-user/manifests.ts index dce911901e..ad9e6b2513 100644 --- a/src/packages/user/current-user/manifests.ts +++ b/src/packages/user/current-user/manifests.ts @@ -1,14 +1,15 @@ import { manifest as actionDefaultKindManifest } from './action/default.kind.js'; -import { manifests as modalManifests } from './modals/manifests.js'; -import { manifests as historyManifests } from './history/manifests.js'; +import { manifests as conditionManifests } from './conditions/manifests.js'; import { manifests as externalLoginProviderManifests } from './external-login/manifests.js'; +import { manifests as historyManifests } from './history/manifests.js'; import { manifests as mfaLoginProviderManifests } from './mfa-login/manifests.js'; +import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as profileManifests } from './profile/manifests.js'; -import { manifests as themeManifests } from './theme/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as themeManifests } from './theme/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const headerApps: Array = [ +export const manifests: Array = [ { type: 'globalContext', alias: 'Umb.GlobalContext.CurrentUser', @@ -21,19 +22,11 @@ export const headerApps: Array = [ name: 'Current User', element: () => import('./current-user-header-app.element.js'), weight: 0, - meta: { - label: 'TODO: how should we enable this to not be set.', - icon: 'TODO: how should we enable this to not be set.', - pathname: 'user', - }, }, -]; - -export const manifests = [ actionDefaultKindManifest, - ...headerApps, - ...historyManifests, + ...conditionManifests, ...externalLoginProviderManifests, + ...historyManifests, ...mfaLoginProviderManifests, ...modalManifests, ...profileManifests, diff --git a/src/packages/user/current-user/mfa-login/manifests.ts b/src/packages/user/current-user/mfa-login/manifests.ts index 4ee342f239..4aaf6e2101 100644 --- a/src/packages/user/current-user/mfa-login/manifests.ts +++ b/src/packages/user/current-user/mfa-login/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestCurrentUserActionDefaultKind, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const userProfileApps: Array = [ +export const manifests: Array = [ { type: 'currentUserAction', kind: 'default', @@ -20,4 +18,3 @@ export const userProfileApps: Array = [ ], }, ]; -export const manifests: Array = [...userProfileApps]; diff --git a/src/packages/user/current-user/modals/manifests.ts b/src/packages/user/current-user/modals/manifests.ts index 1125e6dacc..9443fba66f 100644 --- a/src/packages/user/current-user/modals/manifests.ts +++ b/src/packages/user/current-user/modals/manifests.ts @@ -1,30 +1,26 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.CurrentUser', name: 'Current User Modal', - js: () => import('./current-user/current-user-modal.element.js'), + element: () => import('./current-user/current-user-modal.element.js'), }, { type: 'modal', alias: 'Umb.Modal.CurrentUserMfa', name: 'Current User MFA Modal', - js: () => import('./current-user-mfa/current-user-mfa-modal.element.js'), + element: () => import('./current-user-mfa/current-user-mfa-modal.element.js'), }, { type: 'modal', alias: 'Umb.Modal.CurrentUserMfaEnableProvider', name: 'Current User MFA Enable Provider Modal', - js: () => import('./current-user-mfa-enable/current-user-mfa-enable-modal.element.js'), + element: () => import('./current-user-mfa-enable/current-user-mfa-enable-modal.element.js'), }, { type: 'modal', alias: 'Umb.Modal.CurrentUserMfaDisableProvider', name: 'Current User MFA Disable Provider Modal', - js: () => import('./current-user-mfa-disable/current-user-mfa-disable-modal.element.js'), + element: () => import('./current-user-mfa-disable/current-user-mfa-disable-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/user/current-user/profile/change-password-current-user.action.ts b/src/packages/user/current-user/profile/change-password-current-user.action.ts index b37cfaeaa7..9a780e13f6 100644 --- a/src/packages/user/current-user/profile/change-password-current-user.action.ts +++ b/src/packages/user/current-user/profile/change-password-current-user.action.ts @@ -3,7 +3,8 @@ import { UmbCurrentUserRepository } from '../repository/index.js'; import { UmbActionBase } from '@umbraco-cms/backoffice/action'; import type { UmbCurrentUserAction, UmbCurrentUserActionArgs } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UMB_CHANGE_PASSWORD_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_CHANGE_PASSWORD_MODAL } from '@umbraco-cms/backoffice/user-change-password'; export class UmbChangePasswordCurrentUserAction extends UmbActionBase> implements UmbCurrentUserAction diff --git a/src/packages/user/current-user/profile/edit-current-user.action.ts b/src/packages/user/current-user/profile/edit-current-user.action.ts index cdc03d8e09..f600485dc6 100644 --- a/src/packages/user/current-user/profile/edit-current-user.action.ts +++ b/src/packages/user/current-user/profile/edit-current-user.action.ts @@ -1,4 +1,5 @@ import { UMB_CURRENT_USER_CONTEXT } from '../current-user.context.token.js'; +import { UMB_USER_WORKSPACE_PATH } from '@umbraco-cms/backoffice/user'; import { UmbActionBase } from '@umbraco-cms/backoffice/action'; import type { UmbCurrentUserAction, UmbCurrentUserActionArgs } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -29,7 +30,7 @@ export class UmbEditCurrentUserAction async getHref() { await this.#init; - return `section/user-management/view/users/user/edit/${this.#unique}`; + return UMB_USER_WORKSPACE_PATH + '/edit/' + this.#unique; } async execute() { diff --git a/src/packages/user/current-user/profile/manifests.ts b/src/packages/user/current-user/profile/manifests.ts index 2cb745f149..0d088f3dd0 100644 --- a/src/packages/user/current-user/profile/manifests.ts +++ b/src/packages/user/current-user/profile/manifests.ts @@ -1,10 +1,4 @@ -import type { - ManifestCurrentUserActionDefaultKind, - ManifestTypes, - ManifestUserProfileApp, -} from '@umbraco-cms/backoffice/extension-registry'; - -const userProfileApps: Array = [ +export const manifests: Array = [ { type: 'userProfileApp', alias: 'Umb.UserProfileApp.CurrentUser.Profile', @@ -16,9 +10,6 @@ const userProfileApps: Array = [ pathname: 'profile', }, }, -]; - -const currentUserActions: Array = [ { type: 'currentUserAction', kind: 'default', @@ -50,5 +41,3 @@ const currentUserActions: Array = [ }, }, ]; - -export const manifests: Array = [...userProfileApps, ...currentUserActions]; diff --git a/src/packages/user/current-user/repository/index.ts b/src/packages/user/current-user/repository/index.ts index 28899632b9..d3e468a0b0 100644 --- a/src/packages/user/current-user/repository/index.ts +++ b/src/packages/user/current-user/repository/index.ts @@ -1,4 +1,4 @@ export { UMB_CURRENT_USER_REPOSITORY_ALIAS } from './constants.js'; export { UMB_CURRENT_USER_STORE_CONTEXT } from './current-user.store.token.js'; export { UmbCurrentUserRepository } from './current-user.repository.js'; -export { UmbCurrentUserStore } from './current-user.store.js'; \ No newline at end of file +export { UmbCurrentUserStore } from './current-user.store.js'; diff --git a/src/packages/user/current-user/repository/manifests.ts b/src/packages/user/current-user/repository/manifests.ts index c255a1ef6c..6100ceb3af 100644 --- a/src/packages/user/current-user/repository/manifests.ts +++ b/src/packages/user/current-user/repository/manifests.ts @@ -1,18 +1,16 @@ import { UMB_CURRENT_USER_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_CURRENT_USER_REPOSITORY_ALIAS, - name: 'Current User Repository', - api: () => import('./current-user.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: 'Umb.Store.CurrentUser', - name: 'Current User Store', - api: () => import('./current-user.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_CURRENT_USER_REPOSITORY_ALIAS, + name: 'Current User Repository', + api: () => import('./current-user.repository.js'), + }, + { + type: 'store', + alias: 'Umb.Store.CurrentUser', + name: 'Current User Store', + api: () => import('./current-user.store.js'), + }, +]; diff --git a/src/packages/user/current-user/theme/manifests.ts b/src/packages/user/current-user/theme/manifests.ts index 7c438b470f..24946b4aae 100644 --- a/src/packages/user/current-user/theme/manifests.ts +++ b/src/packages/user/current-user/theme/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes, ManifestUserProfileApp } from '@umbraco-cms/backoffice/extension-registry'; - -export const userProfileApps: Array = [ +export const manifests: Array = [ { type: 'userProfileApp', alias: 'Umb.UserProfileApp.CurrentUser.Theme', @@ -13,4 +11,3 @@ export const userProfileApps: Array = [ }, }, ]; -export const manifests: Array = [...userProfileApps]; diff --git a/src/packages/user/manifests.ts b/src/packages/user/manifests.ts index 96353d28f7..d649d8f06f 100644 --- a/src/packages/user/manifests.ts +++ b/src/packages/user/manifests.ts @@ -1,6 +1,6 @@ import { manifests as userGroupManifests } from './user-group/manifests.js'; import { manifests as userManifests } from './user/manifests.js'; -import { manifests as userSectionManifests } from './user-section/manifests.js'; +import { manifests as userSectionManifests } from './section/manifests.js'; import { manifests as currentUserManifests } from './current-user/manifests.js'; import { manifests as userPermissionManifests } from './user-permission/manifests.js'; import { manifests as changePasswordManifests } from './change-password/manifests.js'; diff --git a/src/packages/user/user-section/constants.ts b/src/packages/user/section/constants.ts similarity index 100% rename from src/packages/user/user-section/constants.ts rename to src/packages/user/section/constants.ts diff --git a/src/packages/user/section/index.ts b/src/packages/user/section/index.ts new file mode 100644 index 0000000000..4f07201dcf --- /dev/null +++ b/src/packages/user/section/index.ts @@ -0,0 +1 @@ +export * from './constants.js'; diff --git a/src/packages/user/section/manifests.ts b/src/packages/user/section/manifests.ts new file mode 100644 index 0000000000..08d6e8ce4e --- /dev/null +++ b/src/packages/user/section/manifests.ts @@ -0,0 +1,25 @@ +import { UMB_USER_MANAGEMENT_SECTION_ALIAS } from './constants.js'; +import { manifests as sectionSidebarAppManifests } from './sidebar-app/manifests.js'; +import { manifests as menuManifests } from './menu/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'section', + alias: UMB_USER_MANAGEMENT_SECTION_ALIAS, + name: 'User Management Section', + weight: 600, + meta: { + label: '#sections_users', + pathname: 'user-management', + }, + conditions: [ + { + alias: 'Umb.Condition.SectionUserPermission', + match: UMB_USER_MANAGEMENT_SECTION_ALIAS, + }, + ], + }, + ...sectionSidebarAppManifests, + ...menuManifests, +]; diff --git a/src/packages/user/section/menu/constants.ts b/src/packages/user/section/menu/constants.ts new file mode 100644 index 0000000000..7bf050d53c --- /dev/null +++ b/src/packages/user/section/menu/constants.ts @@ -0,0 +1 @@ +export const UMB_USER_MANAGEMENT_MENU_ALIAS = 'Umb.Menu.UserManagement'; diff --git a/src/packages/user/section/menu/index.ts b/src/packages/user/section/menu/index.ts new file mode 100644 index 0000000000..4f07201dcf --- /dev/null +++ b/src/packages/user/section/menu/index.ts @@ -0,0 +1 @@ +export * from './constants.js'; diff --git a/src/packages/user/section/menu/manifests.ts b/src/packages/user/section/menu/manifests.ts new file mode 100644 index 0000000000..f5852aa534 --- /dev/null +++ b/src/packages/user/section/menu/manifests.ts @@ -0,0 +1,9 @@ +import { UMB_USER_MANAGEMENT_MENU_ALIAS } from './constants.js'; + +export const manifests = [ + { + type: 'menu', + alias: UMB_USER_MANAGEMENT_MENU_ALIAS, + name: 'User Management Menu', + }, +]; diff --git a/src/packages/user/section/paths.ts b/src/packages/user/section/paths.ts new file mode 100644 index 0000000000..f61a643ac5 --- /dev/null +++ b/src/packages/user/section/paths.ts @@ -0,0 +1,7 @@ +import { UMB_SECTION_PATH_PATTERN } from '@umbraco-cms/backoffice/section'; + +export const UMB_USER_SECTION_PATHNAME = 'user-management'; + +export const UMB_USER_SECTION_PATH = UMB_SECTION_PATH_PATTERN.generateAbsolute({ + sectionName: UMB_USER_SECTION_PATHNAME, +}); diff --git a/src/packages/user/section/sidebar-app/index.ts b/src/packages/user/section/sidebar-app/index.ts new file mode 100644 index 0000000000..42f853e5be --- /dev/null +++ b/src/packages/user/section/sidebar-app/index.ts @@ -0,0 +1 @@ +export * from '../constants.js'; diff --git a/src/packages/user/section/sidebar-app/manifests.ts b/src/packages/user/section/sidebar-app/manifests.ts new file mode 100644 index 0000000000..4b5fcd9bb2 --- /dev/null +++ b/src/packages/user/section/sidebar-app/manifests.ts @@ -0,0 +1,22 @@ +import { UMB_USER_MANAGEMENT_SECTION_ALIAS } from '../constants.js'; +import { UMB_USER_MANAGEMENT_MENU_ALIAS } from '../menu/index.js'; + +export const manifests: Array = [ + { + type: 'sectionSidebarApp', + kind: 'menu', + alias: 'Umb.SectionSidebarApp.Menu.UserManagement', + name: 'User Management Menu Sidebar App', + weight: 100, + meta: { + label: '#treeHeaders_users', + menu: UMB_USER_MANAGEMENT_MENU_ALIAS, + }, + conditions: [ + { + alias: 'Umb.Condition.SectionAlias', + match: UMB_USER_MANAGEMENT_SECTION_ALIAS, + }, + ], + }, +]; diff --git a/src/packages/user/user-group/collection/action/manifests.ts b/src/packages/user/user-group/collection/action/manifests.ts index 1168e303e3..90b5371fa3 100644 --- a/src/packages/user/user-group/collection/action/manifests.ts +++ b/src/packages/user/user-group/collection/action/manifests.ts @@ -1,22 +1,22 @@ +import { UMB_USER_GROUP_WORKSPACE_PATH } from '../../paths.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const createManifest: ManifestTypes = { - type: 'collectionAction', - kind: 'button', - name: 'Create User Group Collection Action', - alias: 'Umb.CollectionAction.UserGroup.Create', - weight: 200, - meta: { - label: '#general_create', - href: 'section/user-management/view/user-groups/user-group/create', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.UserGroup', +export const manifests: Array = [ + { + type: 'collectionAction', + kind: 'button', + name: 'Create User Group Collection Action', + alias: 'Umb.CollectionAction.UserGroup.Create', + weight: 200, + meta: { + label: '#general_create', + href: `${UMB_USER_GROUP_WORKSPACE_PATH}/create`, }, - ], -}; - -export const manifests: Array = [createManifest]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.UserGroup', + }, + ], + }, +]; diff --git a/src/packages/user/user-group/collection/components/user-group-table-name-column-layout.element.ts b/src/packages/user/user-group/collection/components/user-group-table-name-column-layout.element.ts index 1a1274620d..f320f8ef79 100644 --- a/src/packages/user/user-group/collection/components/user-group-table-name-column-layout.element.ts +++ b/src/packages/user/user-group/collection/components/user-group-table-name-column-layout.element.ts @@ -1,3 +1,4 @@ +import { UMB_USER_GROUP_WORKSPACE_PATH } from '../../paths.js'; import { css, html, LitElement, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import type { UmbTableItem } from '@umbraco-cms/backoffice/components'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @@ -11,7 +12,7 @@ export class UmbUserGroupTableNameColumnLayoutElement extends LitElement { value!: any; override render() { - const href = `section/user-management/view/user-groups/user-group/edit/${this.item.id}`; + const href = UMB_USER_GROUP_WORKSPACE_PATH + '/edit/' + this.item.id; return html`${this.value.name}`; } diff --git a/src/packages/user/user-group/collection/manifests.ts b/src/packages/user/user-group/collection/manifests.ts index 04295c9ab8..39b0aa78fc 100644 --- a/src/packages/user/user-group/collection/manifests.ts +++ b/src/packages/user/user-group/collection/manifests.ts @@ -3,21 +3,18 @@ import { manifests as collectionViewManifests } from './views/manifests.js'; import { manifests as collectionActionManifests } from './action/manifests.js'; import { UMB_USER_GROUP_COLLECTION_ALIAS } from './constants.js'; import { UMB_USER_GROUP_COLLECTION_REPOSITORY_ALIAS } from './repository/constants.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const collection: ManifestTypes = { - type: 'collection', - alias: UMB_USER_GROUP_COLLECTION_ALIAS, - name: 'User Group Collection', - api: () => import('./user-group-collection.context.js'), - element: () => import('./user-group-collection.element.js'), - meta: { - repositoryAlias: UMB_USER_GROUP_COLLECTION_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'collection', + alias: UMB_USER_GROUP_COLLECTION_ALIAS, + name: 'User Group Collection', + api: () => import('./user-group-collection.context.js'), + element: () => import('./user-group-collection.element.js'), + meta: { + repositoryAlias: UMB_USER_GROUP_COLLECTION_REPOSITORY_ALIAS, + }, }, -}; - -export const manifests: Array = [ - collection, ...repositoryManifests, ...collectionViewManifests, ...collectionActionManifests, diff --git a/src/packages/user/user-group/collection/repository/manifests.ts b/src/packages/user/user-group/collection/repository/manifests.ts index 0d0f82235a..91ba278dbb 100644 --- a/src/packages/user/user-group/collection/repository/manifests.ts +++ b/src/packages/user/user-group/collection/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_USER_GROUP_COLLECTION_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_USER_GROUP_COLLECTION_REPOSITORY_ALIAS, - name: 'User Group Collection Repository', - api: () => import('./user-group-collection.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_USER_GROUP_COLLECTION_REPOSITORY_ALIAS, + name: 'User Group Collection Repository', + api: () => import('./user-group-collection.repository.js'), + }, +]; diff --git a/src/packages/user/user-group/collection/views/manifests.ts b/src/packages/user/user-group/collection/views/manifests.ts index 8bae405e41..5c4c8a9f95 100644 --- a/src/packages/user/user-group/collection/views/manifests.ts +++ b/src/packages/user/user-group/collection/views/manifests.ts @@ -1,23 +1,22 @@ import { UMB_USER_GROUP_TABLE_COLLECTION_VIEW_ALIAS } from './constants.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const tableCollectionView: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_USER_GROUP_TABLE_COLLECTION_VIEW_ALIAS, - name: 'User Group Table Collection View', - js: () => import('./user-group-table-collection-view.element.js'), - meta: { - label: 'Table', - icon: 'icon-list', - pathName: 'table', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.UserGroup', +export const manifests: Array = [ + { + type: 'collectionView', + alias: UMB_USER_GROUP_TABLE_COLLECTION_VIEW_ALIAS, + name: 'User Group Table Collection View', + js: () => import('./user-group-table-collection-view.element.js'), + meta: { + label: 'Table', + icon: 'icon-list', + pathName: 'table', }, - ], -}; - -export const manifests: Array = [tableCollectionView]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.UserGroup', + }, + ], + }, +]; diff --git a/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts b/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts index dd376a64a1..f509aee058 100644 --- a/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts +++ b/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts @@ -4,7 +4,7 @@ import { UmbUserGroupPickerInputContext } from './user-group-input.context.js'; import { css, html, customElement, property, state, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; diff --git a/src/packages/user/user-group/entity-actions/manifests.ts b/src/packages/user/user-group/entity-actions/manifests.ts index 1b8708bbf1..3579369d92 100644 --- a/src/packages/user/user-group/entity-actions/manifests.ts +++ b/src/packages/user/user-group/entity-actions/manifests.ts @@ -1,8 +1,7 @@ import { UMB_USER_GROUP_DETAIL_REPOSITORY_ALIAS, UMB_USER_GROUP_ITEM_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_USER_GROUP_ENTITY_TYPE } from '../index.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'delete', @@ -15,5 +14,3 @@ const entityActions: Array = [ }, }, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/user/user-group/entity-bulk-actions/manifests.ts b/src/packages/user/user-group/entity-bulk-actions/manifests.ts index cea41642f5..f39f855037 100644 --- a/src/packages/user/user-group/entity-bulk-actions/manifests.ts +++ b/src/packages/user/user-group/entity-bulk-actions/manifests.ts @@ -1,9 +1,8 @@ import { UMB_USER_GROUP_COLLECTION_ALIAS } from '../collection/index.js'; import { UMB_USER_GROUP_ENTITY_TYPE } from '../entity.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestEntityBulkAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +export const manifests: Array = [ { type: 'entityBulkAction', alias: 'Umb.EntityBulkAction.UserGroup.Delete', @@ -22,5 +21,3 @@ const entityActions: Array = [ ], }, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/user/user-group/entity.ts b/src/packages/user/user-group/entity.ts index 40fc592fed..3978bfa6a5 100644 --- a/src/packages/user/user-group/entity.ts +++ b/src/packages/user/user-group/entity.ts @@ -1,3 +1,5 @@ export const UMB_USER_GROUP_ENTITY_TYPE = 'user-group'; +export const UMB_USER_GROUP_ROOT_ENTITY_TYPE = 'user-group-root'; export type UmbUserGroupEntityType = typeof UMB_USER_GROUP_ENTITY_TYPE; +export type UmbUserGroupRootEntityType = typeof UMB_USER_GROUP_ROOT_ENTITY_TYPE; diff --git a/src/packages/user/user-group/manifests.ts b/src/packages/user/user-group/manifests.ts index 4a03fbb339..03c232efab 100644 --- a/src/packages/user/user-group/manifests.ts +++ b/src/packages/user/user-group/manifests.ts @@ -1,18 +1,19 @@ import { manifests as collectionManifests } from './collection/manifests.js'; -import { manifests as repositoryManifests } from './repository/manifests.js'; -import { manifests as workspaceManifests } from './workspace/manifests.js'; -import { manifests as modalManifests } from './modals/manifests.js'; -import { manifests as sectionViewManifests } from './section-view/manifests.js'; import { manifests as entityActionManifests } from './entity-actions/manifests.js'; import { manifests as entityBulkActionManifests } from './entity-bulk-actions/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as menuItemManifests } from './menu-item/manifests.js'; +import { manifests as modalManifests } from './modals/manifests.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import { manifests as sectionViewManifests } from './workspace/user-group-root/manifests.js'; +import { manifests as workspaceManifests } from './workspace/manifests.js'; -export const manifests: Array = [ +export const manifests: Array = [ ...collectionManifests, - ...repositoryManifests, - ...workspaceManifests, - ...modalManifests, - ...sectionViewManifests, ...entityActionManifests, ...entityBulkActionManifests, + ...menuItemManifests, + ...modalManifests, + ...repositoryManifests, + ...sectionViewManifests, + ...workspaceManifests, ]; diff --git a/src/packages/user/user-group/menu-item/manifests.ts b/src/packages/user/user-group/menu-item/manifests.ts new file mode 100644 index 0000000000..c2391321f9 --- /dev/null +++ b/src/packages/user/user-group/menu-item/manifests.ts @@ -0,0 +1,17 @@ +import { UMB_USER_MANAGEMENT_MENU_ALIAS } from '../../section/menu/constants.js'; +import { UMB_USER_GROUP_ROOT_ENTITY_TYPE } from '../entity.js'; + +export const manifests: Array = [ + { + type: 'menuItem', + alias: 'Umb.MenuItem.UserGroups', + name: 'User Groups Menu Item', + weight: 100, + meta: { + label: '#user_usergroups', + icon: 'icon-users', + entityType: UMB_USER_GROUP_ROOT_ENTITY_TYPE, + menus: [UMB_USER_MANAGEMENT_MENU_ALIAS], + }, + }, +]; diff --git a/src/packages/user/user-group/modals/manifests.ts b/src/packages/user/user-group/modals/manifests.ts index 2d734fbad0..212b3b93ef 100644 --- a/src/packages/user/user-group/modals/manifests.ts +++ b/src/packages/user/user-group/modals/manifests.ts @@ -1,12 +1,8 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.UserGroupPicker', name: 'User Group Picker Modal', - js: () => import('./user-group-picker/user-group-picker-modal.element.js'), + element: () => import('./user-group-picker/user-group-picker-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/user/user-group/paths.ts b/src/packages/user/user-group/paths.ts new file mode 100644 index 0000000000..51aa649211 --- /dev/null +++ b/src/packages/user/user-group/paths.ts @@ -0,0 +1,13 @@ +import { UMB_USER_SECTION_PATHNAME } from '../section/paths.js'; +import { UMB_USER_GROUP_ENTITY_TYPE, UMB_USER_GROUP_ROOT_ENTITY_TYPE } from './entity.js'; +import { UMB_WORKSPACE_PATH_PATTERN } from '@umbraco-cms/backoffice/workspace'; + +export const UMB_USER_GROUP_WORKSPACE_PATH = UMB_WORKSPACE_PATH_PATTERN.generateAbsolute({ + sectionName: UMB_USER_SECTION_PATHNAME, + entityType: UMB_USER_GROUP_ENTITY_TYPE, +}); + +export const UMB_USER_GROUP_ROOT_WORKSPACE_PATH = UMB_WORKSPACE_PATH_PATTERN.generateAbsolute({ + sectionName: UMB_USER_SECTION_PATHNAME, + entityType: UMB_USER_GROUP_ROOT_ENTITY_TYPE, +}); diff --git a/src/packages/user/user-group/repository/detail/manifests.ts b/src/packages/user/user-group/repository/detail/manifests.ts index 207ae9436b..50fd07cf3d 100644 --- a/src/packages/user/user-group/repository/detail/manifests.ts +++ b/src/packages/user/user-group/repository/detail/manifests.ts @@ -1,18 +1,16 @@ import { UMB_USER_GROUP_DETAIL_REPOSITORY_ALIAS, UMB_USER_GROUP_DETAIL_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_USER_GROUP_DETAIL_REPOSITORY_ALIAS, - name: 'User Group Detail Repository', - api: () => import('./user-group-detail.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_USER_GROUP_DETAIL_STORE_ALIAS, - name: 'User Group Detail Store', - api: () => import('./user-group-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_USER_GROUP_DETAIL_REPOSITORY_ALIAS, + name: 'User Group Detail Repository', + api: () => import('./user-group-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_USER_GROUP_DETAIL_STORE_ALIAS, + name: 'User Group Detail Store', + api: () => import('./user-group-detail.store.js'), + }, +]; diff --git a/src/packages/user/user-group/repository/item/manifests.ts b/src/packages/user/user-group/repository/item/manifests.ts index 57c949c4e2..62d63c6d8b 100644 --- a/src/packages/user/user-group/repository/item/manifests.ts +++ b/src/packages/user/user-group/repository/item/manifests.ts @@ -1,18 +1,16 @@ import { UMB_USER_GROUP_ITEM_REPOSITORY_ALIAS, UMB_USER_GROUP_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_USER_GROUP_ITEM_REPOSITORY_ALIAS, - name: 'User Group Item Repository', - api: () => import('./user-group-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_USER_GROUP_STORE_ALIAS, - name: 'User Group Item Store', - api: () => import('./user-group-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_USER_GROUP_ITEM_REPOSITORY_ALIAS, + name: 'User Group Item Repository', + api: () => import('./user-group-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_USER_GROUP_STORE_ALIAS, + name: 'User Group Item Store', + api: () => import('./user-group-item.store.js'), + }, +]; diff --git a/src/packages/user/user-group/repository/manifests.ts b/src/packages/user/user-group/repository/manifests.ts index 37dcb889ef..4dfb0c911f 100644 --- a/src/packages/user/user-group/repository/manifests.ts +++ b/src/packages/user/user-group/repository/manifests.ts @@ -1,5 +1,4 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/packages/user/user-group/section-view/manifests.ts b/src/packages/user/user-group/section-view/manifests.ts deleted file mode 100644 index 3780224244..0000000000 --- a/src/packages/user/user-group/section-view/manifests.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { UMB_USER_MANAGEMENT_SECTION_ALIAS } from '../../user-section/index.js'; -import type { ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const sectionsViews: Array = [ - { - type: 'sectionView', - alias: 'Umb.SectionView.UserGroup', - name: 'User Group Section View', - js: () => import('./user-group-section-view.element.js'), - weight: 100, - meta: { - label: '#user_usergroups', - pathname: 'user-groups', - icon: 'icon-users', - }, - conditions: [ - { - alias: 'Umb.Condition.SectionAlias', - match: UMB_USER_MANAGEMENT_SECTION_ALIAS, - }, - ], - }, -]; - -export const manifests: Array = [...sectionsViews]; diff --git a/src/packages/user/user-group/section-view/user-group-section-view.element.ts b/src/packages/user/user-group/section-view/user-group-section-view.element.ts deleted file mode 100644 index 4611f0962d..0000000000 --- a/src/packages/user/user-group/section-view/user-group-section-view.element.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { UMB_USER_GROUP_COLLECTION_ALIAS } from '../collection/index.js'; -import { UMB_USER_GROUP_ENTITY_TYPE } from '../entity.js'; -import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbRoute } from '@umbraco-cms/backoffice/router'; -import { UmbCollectionElement } from '@umbraco-cms/backoffice/collection'; -import { UmbWorkspaceElement } from '@umbraco-cms/backoffice/workspace'; - -@customElement('umb-user-group-section-view') -export class UmbUserGroupSectionViewElement extends UmbLitElement { - #routes: UmbRoute[] = [ - { - path: 'collection', - component: () => { - const element = new UmbCollectionElement(); - element.setAttribute('alias', UMB_USER_GROUP_COLLECTION_ALIAS); - return element; - }, - }, - { - path: 'user-group', - component: () => { - const element = new UmbWorkspaceElement(); - element.setAttribute('entity-type', UMB_USER_GROUP_ENTITY_TYPE); - return element; - }, - }, - { - path: '', - redirectTo: 'collection', - }, - { - path: `**`, - component: async () => (await import('@umbraco-cms/backoffice/router')).UmbRouteNotFoundElement, - }, - ]; - - override render() { - return html``; - } - - static override styles = [ - UmbTextStyles, - css` - :host { - height: 100%; - } - - #router-slot { - height: calc(100% - var(--umb-header-layout-height)); - } - `, - ]; -} - -export default UmbUserGroupSectionViewElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-user-group-section-view': UmbUserGroupSectionViewElement; - } -} diff --git a/src/packages/user/user-group/workspace/actions/workspace-action-user-group-save.element.ts b/src/packages/user/user-group/workspace/actions/workspace-action-user-group-save.element.ts deleted file mode 100644 index 1c86ca5b08..0000000000 --- a/src/packages/user/user-group/workspace/actions/workspace-action-user-group-save.element.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { UMB_USER_WORKSPACE_CONTEXT } from '../../../user/workspace/user-workspace.context-token.js'; -import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UUIButtonState } from '@umbraco-cms/backoffice/external/uui'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -// TODO: Revisit this component, it can be made via a kind with api instead. [NL] -// TODO: This seems like legacy code [NL] -@customElement('umb-workspace-action-user-group-save') -export class UmbWorkspaceActionUserGroupSaveElement extends UmbLitElement { - @state() - private _saveButtonState?: UUIButtonState; - - private _workspaceContext?: typeof UMB_USER_WORKSPACE_CONTEXT.TYPE; - - constructor() { - super(); - - this.consumeContext(UMB_USER_WORKSPACE_CONTEXT, (instance) => { - this._workspaceContext = instance; - }); - } - - private async _handleSave() { - if (!this._workspaceContext) return; - - this._saveButtonState = 'waiting'; - await this._workspaceContext - .requestSubmit() - .then(() => { - this._saveButtonState = 'success'; - }) - .catch(() => { - this._saveButtonState = 'failed'; - }); - } - - override render() { - return html``; - } -} - -export default UmbWorkspaceActionUserGroupSaveElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-workspace-action-user-group-save': UmbWorkspaceActionUserGroupSaveElement; - } -} diff --git a/src/packages/user/user-group/workspace/manifests.ts b/src/packages/user/user-group/workspace/manifests.ts index 4a593776bc..ce9b6705db 100644 --- a/src/packages/user/user-group/workspace/manifests.ts +++ b/src/packages/user/user-group/workspace/manifests.ts @@ -1,42 +1,3 @@ -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestWorkspaceView, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; -import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; +import { manifests as userGroupManifests } from './user-group/manifests.js'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: 'Umb.Workspace.UserGroup', - name: 'User Group Workspace', - api: () => import('./user-group-workspace.context.js'), - meta: { - entityType: 'user-group', - }, -}; - -const workspaceViews: Array = []; -const workspaceActions: Array = [ - { - type: 'workspaceAction', - kind: 'default', - alias: 'Umb.WorkspaceAction.UserGroup.Save', - name: 'Save User Group Workspace Action', - api: UmbSubmitWorkspaceAction, - meta: { - label: '#buttons_save', - look: 'primary', - color: 'positive', - }, - conditions: [ - { - alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, - }, - ], - }, -]; - -export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [...userGroupManifests]; diff --git a/src/packages/user/user-group/workspace/user-group-root/manifests.ts b/src/packages/user/user-group/workspace/user-group-root/manifests.ts new file mode 100644 index 0000000000..039973736b --- /dev/null +++ b/src/packages/user/user-group/workspace/user-group-root/manifests.ts @@ -0,0 +1,13 @@ +import { UMB_USER_GROUP_ROOT_ENTITY_TYPE } from '../../entity.js'; + +export const manifests: Array = [ + { + type: 'workspace', + alias: 'Umb.Workspace.UserGroupRoot', + name: 'User Group Root Workspace View', + element: () => import('./user-group-root-workspace.element.js'), + meta: { + entityType: UMB_USER_GROUP_ROOT_ENTITY_TYPE, + }, + }, +]; diff --git a/src/packages/user/user-group/workspace/user-group-root/user-group-root-workspace.element.ts b/src/packages/user/user-group/workspace/user-group-root/user-group-root-workspace.element.ts new file mode 100644 index 0000000000..0900cee472 --- /dev/null +++ b/src/packages/user/user-group/workspace/user-group-root/user-group-root-workspace.element.ts @@ -0,0 +1,21 @@ +import { UMB_USER_GROUP_COLLECTION_ALIAS } from '../../collection/index.js'; +import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; + +const elementName = 'umb-user-group-root-workspace'; +@customElement(elementName) +export class UmbUserGroupRootWorkspaceElement extends UmbLitElement { + override render() { + return html` + ; + `; + } +} + +export { UmbUserGroupRootWorkspaceElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbUserGroupRootWorkspaceElement; + } +} diff --git a/src/packages/user/user-group/workspace/components/user-group-entity-user-permission-list.element.ts b/src/packages/user/user-group/workspace/user-group/components/user-group-entity-user-permission-list.element.ts similarity index 100% rename from src/packages/user/user-group/workspace/components/user-group-entity-user-permission-list.element.ts rename to src/packages/user/user-group/workspace/user-group/components/user-group-entity-user-permission-list.element.ts diff --git a/src/packages/user/user-group/workspace/components/user-group-granular-permission-list.element.ts b/src/packages/user/user-group/workspace/user-group/components/user-group-granular-permission-list.element.ts similarity index 100% rename from src/packages/user/user-group/workspace/components/user-group-granular-permission-list.element.ts rename to src/packages/user/user-group/workspace/user-group/components/user-group-granular-permission-list.element.ts diff --git a/src/packages/user/user-group/workspace/user-group/constants.ts b/src/packages/user/user-group/workspace/user-group/constants.ts new file mode 100644 index 0000000000..6972100cb8 --- /dev/null +++ b/src/packages/user/user-group/workspace/user-group/constants.ts @@ -0,0 +1 @@ +export const UMB_USER_GROUP_WORKSPACE_ALIAS = 'Umb.Workspace.UserGroup'; diff --git a/src/packages/user/user-group/workspace/user-group/manifests.ts b/src/packages/user/user-group/workspace/user-group/manifests.ts new file mode 100644 index 0000000000..6eacae864d --- /dev/null +++ b/src/packages/user/user-group/workspace/user-group/manifests.ts @@ -0,0 +1,34 @@ +import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; + +export const UMB_USER_GROUP_WORKSPACE_ALIAS = 'Umb.Workspace.UserGroup'; + +export const manifests: Array = [ + { + type: 'workspace', + kind: 'routable', + alias: UMB_USER_GROUP_WORKSPACE_ALIAS, + name: 'User Group Workspace', + api: () => import('./user-group-workspace.context.js'), + meta: { + entityType: 'user-group', + }, + }, + { + type: 'workspaceAction', + kind: 'default', + alias: 'Umb.WorkspaceAction.UserGroup.Save', + name: 'Save User Group Workspace Action', + api: UmbSubmitWorkspaceAction, + meta: { + label: '#buttons_save', + look: 'primary', + color: 'positive', + }, + conditions: [ + { + alias: 'Umb.Condition.WorkspaceAlias', + match: UMB_USER_GROUP_WORKSPACE_ALIAS, + }, + ], + }, +]; diff --git a/src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts b/src/packages/user/user-group/workspace/user-group/user-group-workspace-editor.element.ts similarity index 83% rename from src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts rename to src/packages/user/user-group/workspace/user-group/user-group-workspace-editor.element.ts index 4888285574..ad0243fa8c 100644 --- a/src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts +++ b/src/packages/user/user-group/workspace/user-group/user-group-workspace-editor.element.ts @@ -1,6 +1,7 @@ -import type { UmbUserGroupDetailModel } from '../index.js'; -import { UMB_USER_GROUP_ENTITY_TYPE } from '../index.js'; +import type { UmbUserGroupDetailModel } from '../../index.js'; +import { UMB_USER_GROUP_ROOT_WORKSPACE_PATH } from '../../paths.js'; import { UMB_USER_GROUP_WORKSPACE_CONTEXT } from './user-group-workspace.context-token.js'; +import { UMB_USER_GROUP_WORKSPACE_ALIAS } from './constants.js'; import type { UUIBooleanInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { css, html, nothing, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; @@ -9,8 +10,9 @@ import type { UmbInputDocumentElement } from '@umbraco-cms/backoffice/document'; import type { UmbInputSectionElement } from '@umbraco-cms/backoffice/section'; import type { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import type { UmbInputMediaElement } from '@umbraco-cms/backoffice/media'; -import { UMB_ICON_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import type { UmbInputLanguageElement } from '@umbraco-cms/backoffice/language'; +import { UMB_ICON_PICKER_MODAL } from '@umbraco-cms/backoffice/icon'; import './components/user-group-entity-user-permission-list.element.js'; import './components/user-group-granular-permission-list.element.js'; @@ -171,14 +173,10 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { return html` - ${this.#renderHeader()} -
-
${this.#renderLeftColumn()}
-
${this.#renderRightColumn()}
-
+ back-path=${UMB_USER_GROUP_ROOT_WORKSPACE_PATH}> + ${this.#renderHeader()} ${this.#renderMain()}
`; } @@ -225,40 +223,46 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { ${umbFocus()}>
+ + `; } - #renderLeftColumn() { + #renderMain() { if (!this._unique) return nothing; return html` - -
- - - - - - ${this.#renderLanguageAccess()} ${this.#renderDocumentAccess()} ${this.#renderMediaAccess()} -
- - -
- - - - -
- - -
- -
+
+ + +
+ + + + + + ${this.#renderLanguageAccess()} ${this.#renderDocumentAccess()} ${this.#renderMediaAccess()} +
+ + +
+ + + + +
+ + +
+ +
+
+
`; } @@ -338,15 +342,6 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { `; } - #renderRightColumn() { - return html` - - - - - `; - } - static override styles = [ UmbTextStyles, css` @@ -375,25 +370,9 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { } #main { - display: grid; - grid-template-columns: 1fr 350px; - gap: var(--uui-size-layout-1); padding: var(--uui-size-layout-1); } - #left-column, - #right-column { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-4); - } - - #right-column > uui-box > div { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-2); - } - uui-input { width: 100%; } diff --git a/src/packages/user/user-group/workspace/user-group-workspace.context-token.ts b/src/packages/user/user-group/workspace/user-group/user-group-workspace.context-token.ts similarity index 89% rename from src/packages/user/user-group/workspace/user-group-workspace.context-token.ts rename to src/packages/user/user-group/workspace/user-group/user-group-workspace.context-token.ts index a09ae6a716..3a11176569 100644 --- a/src/packages/user/user-group/workspace/user-group-workspace.context-token.ts +++ b/src/packages/user/user-group/workspace/user-group/user-group-workspace.context-token.ts @@ -1,4 +1,4 @@ -import { UMB_USER_GROUP_ENTITY_TYPE } from '../index.js'; +import { UMB_USER_GROUP_ENTITY_TYPE } from '../../index.js'; import type { UmbUserGroupWorkspaceContext } from './user-group-workspace.context.js'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import type { UmbSubmittableWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; diff --git a/src/packages/user/user-group/workspace/user-group-workspace.context.ts b/src/packages/user/user-group/workspace/user-group/user-group-workspace.context.ts similarity index 97% rename from src/packages/user/user-group/workspace/user-group-workspace.context.ts rename to src/packages/user/user-group/workspace/user-group/user-group-workspace.context.ts index c360e2057f..6f81961747 100644 --- a/src/packages/user/user-group/workspace/user-group-workspace.context.ts +++ b/src/packages/user/user-group/workspace/user-group/user-group-workspace.context.ts @@ -1,5 +1,5 @@ -import { UmbUserGroupDetailRepository } from '../repository/detail/index.js'; -import type { UmbUserGroupDetailModel } from '../types.js'; +import { UmbUserGroupDetailRepository } from '../../repository/detail/index.js'; +import type { UmbUserGroupDetailModel } from '../../types.js'; import { UmbUserGroupWorkspaceEditorElement } from './user-group-workspace-editor.element.js'; import type { UmbUserPermissionModel } from '@umbraco-cms/backoffice/user-permission'; import type { UmbRoutableWorkspaceContext, UmbSubmittableWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; diff --git a/src/packages/user/user-permission/index.ts b/src/packages/user/user-permission/index.ts index 85f5141999..d6f28c19b5 100644 --- a/src/packages/user/user-permission/index.ts +++ b/src/packages/user/user-permission/index.ts @@ -1,3 +1,4 @@ export * from './components/index.js'; +export * from './modals/index.js'; export type { UmbUserPermissionModel } from './types.js'; diff --git a/src/packages/user/user-permission/manifests.ts b/src/packages/user/user-permission/manifests.ts index 885db54ccc..7c55267b3e 100644 --- a/src/packages/user/user-permission/manifests.ts +++ b/src/packages/user/user-permission/manifests.ts @@ -1,4 +1,3 @@ import { manifests as userPermissionModalManifests } from './modals/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...userPermissionModalManifests]; +export const manifests: Array = [...userPermissionModalManifests]; diff --git a/src/packages/user/user-permission/modals/index.ts b/src/packages/user/user-permission/modals/index.ts new file mode 100644 index 0000000000..f5425503d0 --- /dev/null +++ b/src/packages/user/user-permission/modals/index.ts @@ -0,0 +1 @@ +export * from './settings/index.js'; diff --git a/src/packages/user/user-permission/modals/manifests.ts b/src/packages/user/user-permission/modals/manifests.ts index 975a669312..fada1af2d4 100644 --- a/src/packages/user/user-permission/modals/manifests.ts +++ b/src/packages/user/user-permission/modals/manifests.ts @@ -1,10 +1,3 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as settingsManifests } from './settings/manifests.js'; -export const manifests: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.EntityUserPermissionSettings', - name: 'Entity User Permission Settings Modal', - js: () => import('./settings/entity-user-permission-settings-modal.element.js'), - }, -]; +export const manifests: Array = [...settingsManifests]; diff --git a/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts b/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts index 6b088bc5c1..b09adc176a 100644 --- a/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts +++ b/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts @@ -1,9 +1,9 @@ -import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { html, customElement, css, nothing, state } from '@umbraco-cms/backoffice/external/lit'; import type { UmbEntityUserPermissionSettingsModalData, UmbEntityUserPermissionSettingsModalValue, -} from '@umbraco-cms/backoffice/modal'; +} from './entity-user-permission-settings-modal.token.js'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { html, customElement, css, nothing, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import type { UmbSelectionChangeEvent } from '@umbraco-cms/backoffice/event'; diff --git a/src/packages/core/modal/token/entity-user-permission-settings-modal.token.ts b/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.token.ts similarity index 87% rename from src/packages/core/modal/token/entity-user-permission-settings-modal.token.ts rename to src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.token.ts index 50bc5515ad..a63dc036d2 100644 --- a/src/packages/core/modal/token/entity-user-permission-settings-modal.token.ts +++ b/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.token.ts @@ -1,4 +1,4 @@ -import { UmbModalToken } from './modal-token.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbEntityUserPermissionSettingsModalData { unique: string; diff --git a/src/packages/user/user-permission/modals/settings/index.ts b/src/packages/user/user-permission/modals/settings/index.ts new file mode 100644 index 0000000000..97f4988c62 --- /dev/null +++ b/src/packages/user/user-permission/modals/settings/index.ts @@ -0,0 +1 @@ +export * from './entity-user-permission-settings-modal.token.js'; diff --git a/src/packages/user/user-permission/modals/settings/manifests.ts b/src/packages/user/user-permission/modals/settings/manifests.ts new file mode 100644 index 0000000000..f3052f637f --- /dev/null +++ b/src/packages/user/user-permission/modals/settings/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.EntityUserPermissionSettings', + name: 'Entity User Permission Settings Modal', + js: () => import('./entity-user-permission-settings-modal.element.js'), + }, +]; diff --git a/src/packages/user/user-section/manifests.ts b/src/packages/user/user-section/manifests.ts deleted file mode 100644 index 74bb597e28..0000000000 --- a/src/packages/user/user-section/manifests.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { UMB_USER_MANAGEMENT_SECTION_ALIAS } from './constants.js'; -import type { ManifestSection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const section: ManifestSection = { - type: 'section', - alias: UMB_USER_MANAGEMENT_SECTION_ALIAS, - name: 'User Management Section', - weight: 600, - meta: { - label: '#sections_users', - pathname: 'user-management', - }, - conditions: [ - { - alias: 'Umb.Condition.SectionUserPermission', - match: UMB_USER_MANAGEMENT_SECTION_ALIAS, - }, - ], -}; - -export const manifests: Array = [section]; diff --git a/src/packages/user/user/client-credential/create/manifests.ts b/src/packages/user/user/client-credential/create/manifests.ts new file mode 100644 index 0000000000..fbe10d2964 --- /dev/null +++ b/src/packages/user/user/client-credential/create/manifests.ts @@ -0,0 +1,3 @@ +import { manifests as modalManifests } from './modal/manifests.js'; + +export const manifests: Array = [...modalManifests]; diff --git a/src/packages/user/user/client-credential/create/modal/constants.ts b/src/packages/user/user/client-credential/create/modal/constants.ts new file mode 100644 index 0000000000..955ffa9cd6 --- /dev/null +++ b/src/packages/user/user/client-credential/create/modal/constants.ts @@ -0,0 +1 @@ +export const UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL_ALIAS = 'Umb.Modal.User.ClientCredential.Create'; diff --git a/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.element.ts b/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.element.ts new file mode 100644 index 0000000000..c18ac77d4b --- /dev/null +++ b/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.element.ts @@ -0,0 +1,135 @@ +import type { UmbCreateUserClientCredentialRequestArgs } from '../../repository/index.js'; +import { UmbUserClientCredentialRepository } from '../../repository/index.js'; +import type { + UmbCreateUserClientCredentialModalData, + UmbCreateUserClientCredentialModalValue, +} from './create-user-client-credential-modal.token.js'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { css, html, customElement, query } from '@umbraco-cms/backoffice/external/lit'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; + +const elementName = 'umb-create-user-client-credential-modal'; +@customElement(elementName) +export class UmbCreateUserModalElement extends UmbModalBaseElement< + UmbCreateUserClientCredentialModalData, + UmbCreateUserClientCredentialModalValue +> { + @query('#CreateUserClientCredentialForm') + _form?: HTMLFormElement; + + @query('#unique') + _inputUniqueElement?: UUIInputElement; + + #userClientCredentialRepository = new UmbUserClientCredentialRepository(this); + + #uniquePrefix = 'umbraco-back-office-'; + + protected override firstUpdated(): void { + // For some reason the pattern attribute is not working with this specific regex. It complains about the regex is invalid. + // TODO: investigate why this is happening. + this._inputUniqueElement?.addValidator( + 'patternMismatch', + () => 'Only alphanumeric characters and hyphens are allowed', + () => { + const value = (this._inputUniqueElement?.value as string) || ''; + // eslint-disable-next-line no-useless-escape + return !new RegExp(/^[a-zA-Z0-9\-]+$/).test(value); + }, + ); + } + + async #onSubmit(e: SubmitEvent) { + e.preventDefault(); + + if (this.data?.user?.unique === undefined) throw new Error('User unique is required'); + + const form = e.target as HTMLFormElement; + if (!form) return; + + const isValid = form.checkValidity(); + if (!isValid) return; + + const formData = new FormData(form); + + const unique = formData.get('unique') as string; + const secret = formData.get('secret') as string; + + const payload: UmbCreateUserClientCredentialRequestArgs = { + user: { unique: this.data.user.unique }, + client: { unique, secret }, + }; + + // TODO: figure out when to use email or username + const { data } = await this.#userClientCredentialRepository.requestCreate(payload); + + if (data) { + this.updateValue({ client: { unique: data.unique, secret } }); + this._submitModal(); + } + } + + override render() { + return html` + ${this.#renderForm()} + + + `; + } + + #renderForm() { + return html` +
+ + Id + +
${this.#uniquePrefix}
+
+
+ + +
The secret cannot be retrieved again.
+ Secret + +
+
+
`; + } + + static override styles = [ + UmbTextStyles, + css` + uui-input, + uui-input-password { + width: 580px; + } + + .prepend { + user-select: none; + height: 100%; + padding: 0 var(--uui-size-3); + border-right: 1px solid var(--uui-input-border-color, var(--uui-color-border)); + background: #f3f3f3; + color: grey; + display: flex; + justify-content: center; + align-items: center; + white-space: nowrap; + } + `, + ]; +} + +export { UmbCreateUserModalElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbCreateUserModalElement; + } +} diff --git a/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.token.ts b/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.token.ts new file mode 100644 index 0000000000..a0179a2ea7 --- /dev/null +++ b/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.token.ts @@ -0,0 +1,25 @@ +import { UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL_ALIAS } from './constants.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export interface UmbCreateUserClientCredentialModalData { + user: { + unique: string; + }; +} + +export interface UmbCreateUserClientCredentialModalValue { + client: { + unique: string; + secret: string; + }; +} + +export const UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL = new UmbModalToken< + UmbCreateUserClientCredentialModalData, + UmbCreateUserClientCredentialModalValue +>(UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL_ALIAS, { + modal: { + type: 'dialog', + size: 'small', + }, +}); diff --git a/src/packages/user/user/client-credential/create/modal/manifests.ts b/src/packages/user/user/client-credential/create/modal/manifests.ts new file mode 100644 index 0000000000..626c149233 --- /dev/null +++ b/src/packages/user/user/client-credential/create/modal/manifests.ts @@ -0,0 +1,10 @@ +import { UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL_ALIAS } from './constants.js'; + +export const manifests: Array = [ + { + type: 'modal', + alias: UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL_ALIAS, + name: 'Create User Client Credential Modal', + element: () => import('./create-user-client-credential-modal.element.js'), + }, +]; diff --git a/src/packages/core/modal/common/embedded-media/index.ts b/src/packages/user/user/client-credential/index.ts similarity index 100% rename from src/packages/core/modal/common/embedded-media/index.ts rename to src/packages/user/user/client-credential/index.ts diff --git a/src/packages/user/user/client-credential/manifests.ts b/src/packages/user/user/client-credential/manifests.ts new file mode 100644 index 0000000000..61a4c82bef --- /dev/null +++ b/src/packages/user/user/client-credential/manifests.ts @@ -0,0 +1,8 @@ +import { manifests as createManifests } from './create/manifests.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + ...createManifests, + ...repositoryManifests, +]; diff --git a/src/packages/user/user/client-credential/repository/constants.ts b/src/packages/user/user/client-credential/repository/constants.ts new file mode 100644 index 0000000000..6cbdba610a --- /dev/null +++ b/src/packages/user/user/client-credential/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_USER_CLIENT_CREDENTIAL_REPOSITORY_ALIAS = 'Umb.Repository.User.ClientCredential'; diff --git a/src/packages/user/user/client-credential/repository/data-source/index.ts b/src/packages/user/user/client-credential/repository/data-source/index.ts new file mode 100644 index 0000000000..dd7152279d --- /dev/null +++ b/src/packages/user/user/client-credential/repository/data-source/index.ts @@ -0,0 +1,2 @@ +export * from './types.js'; +export * from './user-client-credential.server.data-source.js'; diff --git a/src/packages/user/user/client-credential/repository/data-source/types.ts b/src/packages/user/user/client-credential/repository/data-source/types.ts new file mode 100644 index 0000000000..6b3356f8f5 --- /dev/null +++ b/src/packages/user/user/client-credential/repository/data-source/types.ts @@ -0,0 +1,13 @@ +import type { + UmbCreateUserClientCredentialRequestArgs, + UmbDeleteUserClientCredentialRequestArgs, + UmbUserClientCredentialModel, + UmbUserClientCredentialRequestArgs, +} from '../types.js'; +import type { UmbDataSourceErrorResponse, UmbDataSourceResponse } from '@umbraco-cms/backoffice/repository'; + +export interface UmbUserClientCredentialDataSource { + create(args: UmbCreateUserClientCredentialRequestArgs): Promise>; + read(args: UmbUserClientCredentialRequestArgs): Promise>>; + delete: (args: UmbDeleteUserClientCredentialRequestArgs) => Promise; +} diff --git a/src/packages/user/user/client-credential/repository/data-source/user-client-credential.server.data-source.ts b/src/packages/user/user/client-credential/repository/data-source/user-client-credential.server.data-source.ts new file mode 100644 index 0000000000..af80fd15b6 --- /dev/null +++ b/src/packages/user/user/client-credential/repository/data-source/user-client-credential.server.data-source.ts @@ -0,0 +1,89 @@ +import type { + UmbCreateUserClientCredentialRequestArgs, + UmbDeleteUserClientCredentialRequestArgs, + UmbUserClientCredentialRequestArgs, +} from '../types.js'; +import type { UmbUserClientCredentialDataSource } from './types.js'; +import { UserService } from '@umbraco-cms/backoffice/external/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * Server data source for user client credentials + * @export + * @class UmbUserClientCredentialServerDataSource + * @implements {UmbUserClientCredentialDataSource} + */ +export class UmbUserClientCredentialServerDataSource implements UmbUserClientCredentialDataSource { + #host: UmbControllerHost; + + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Creates a new client credentials for a user + * @param {UmbCreateUserClientCredentialRequestArgs} args - The user and client to create the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialServerDataSource + */ + async create(args: UmbCreateUserClientCredentialRequestArgs) { + const { error } = await tryExecuteAndNotify( + this.#host, + UserService.postUserByIdClientCredentials({ + id: args.user.unique, + requestBody: { + clientId: args.client.unique, + clientSecret: args.client.secret, + }, + }), + ); + + if (!error) { + return { data: { unique: args.client.unique } }; + } + + return { error }; + } + + /** + * Reads the client credentials for a user + * @param {UmbUserClientCredentialRequestArgs} args - The user to read the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialServerDataSource + */ + async read(args: UmbUserClientCredentialRequestArgs) { + const { data, error } = await tryExecuteAndNotify( + this.#host, + UserService.getUserByIdClientCredentials({ + id: args.user.unique, + }), + ); + + if (data) { + const credentials = data.map((clientId) => ({ + unique: clientId, + })); + + return { data: credentials }; + } + + return { error }; + } + + /** + * Deletes the client credentials for a user + * @param {UmbDeleteUserClientCredentialRequestArgs} args - The user and client unique to delete the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialServerDataSource + */ + delete(args: UmbDeleteUserClientCredentialRequestArgs) { + return tryExecuteAndNotify( + this.#host, + UserService.deleteUserByIdClientCredentialsByClientId({ + id: args.user.unique, + clientId: args.client.unique, + }), + ); + } +} diff --git a/src/packages/user/user/client-credential/repository/index.ts b/src/packages/user/user/client-credential/repository/index.ts new file mode 100644 index 0000000000..ec915a3b12 --- /dev/null +++ b/src/packages/user/user/client-credential/repository/index.ts @@ -0,0 +1,3 @@ +export * from './user-client-credential.repository.js'; +export * from './constants.js'; +export * from './types.js'; diff --git a/src/packages/user/user/client-credential/repository/manifests.ts b/src/packages/user/user/client-credential/repository/manifests.ts new file mode 100644 index 0000000000..4b43f4e668 --- /dev/null +++ b/src/packages/user/user/client-credential/repository/manifests.ts @@ -0,0 +1,10 @@ +import { UMB_USER_CLIENT_CREDENTIAL_REPOSITORY_ALIAS } from './constants.js'; + +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_USER_CLIENT_CREDENTIAL_REPOSITORY_ALIAS, + name: 'User Client Credentials Repository', + api: () => import('./user-client-credential.repository.js'), + }, +]; diff --git a/src/packages/user/user/client-credential/repository/types.ts b/src/packages/user/user/client-credential/repository/types.ts new file mode 100644 index 0000000000..900d6aadd5 --- /dev/null +++ b/src/packages/user/user/client-credential/repository/types.ts @@ -0,0 +1,17 @@ +export interface UmbCreateUserClientCredentialRequestArgs { + user: { unique: string }; + client: { unique: string; secret: string }; +} + +export interface UmbUserClientCredentialRequestArgs { + user: { unique: string }; +} + +export interface UmbDeleteUserClientCredentialRequestArgs { + user: { unique: string }; + client: { unique: string }; +} + +export interface UmbUserClientCredentialModel { + unique: string; +} diff --git a/src/packages/user/user/client-credential/repository/user-client-credential.repository.ts b/src/packages/user/user/client-credential/repository/user-client-credential.repository.ts new file mode 100644 index 0000000000..0b5742c1cf --- /dev/null +++ b/src/packages/user/user/client-credential/repository/user-client-credential.repository.ts @@ -0,0 +1,61 @@ +import type { UmbUserClientCredentialDataSource } from './data-source/index.js'; +import { UmbUserClientCredentialServerDataSource } from './data-source/user-client-credential.server.data-source.js'; +import type { + UmbCreateUserClientCredentialRequestArgs, + UmbDeleteUserClientCredentialRequestArgs, + UmbUserClientCredentialRequestArgs, +} from './types.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +/** + * UmbUserClientCredentialRepository + * @export + * @class UmbUserClientCredentialRepository + * @augments {UmbRepositoryBase} + */ +export class UmbUserClientCredentialRepository extends UmbRepositoryBase { + #source: UmbUserClientCredentialDataSource; + + /** + * Creates an instance of UmbUserClientCredentialRepository. + * @param {UmbControllerHost} host - The controller host + * @memberof UmbUserClientCredentialRepository + */ + constructor(host: UmbControllerHost) { + super(host); + this.#source = new UmbUserClientCredentialServerDataSource(host); + } + + /** + * Creates a new client credentials for a user + * @param {UmbCreateUserClientCredentialRequestArgs} args - The user and client to create the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialRepository + */ + async requestCreate(args: UmbCreateUserClientCredentialRequestArgs) { + return this.#source.create(args); + } + + /** + * Reads the client credentials for a user + * @param {UmbUserClientCredentialRequestArgs} args - The user to read the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialRepository + */ + async requestClientCredentials(args: UmbUserClientCredentialRequestArgs) { + return this.#source.read(args); + } + + /** + * Deletes the client credentials for a user + * @param {UmbDeleteUserClientCredentialRequestArgs} args - The user and client unique to delete the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialRepository + */ + async requestDelete(args: UmbDeleteUserClientCredentialRequestArgs) { + return this.#source.delete(args); + } +} + +export { UmbUserClientCredentialRepository as api }; diff --git a/src/packages/user/user/collection/action/create-user-collection-action.element.ts b/src/packages/user/user/collection/action/create-user-collection-action.element.ts new file mode 100644 index 0000000000..4ffcc353d0 --- /dev/null +++ b/src/packages/user/user/collection/action/create-user-collection-action.element.ts @@ -0,0 +1,103 @@ +import { UMB_CREATE_USER_MODAL } from '../../modals/create/create-user-modal.token.js'; +import type { UmbUserKindType } from '../../utils/index.js'; +import { UmbUserKind } from '../../utils/index.js'; +import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; +import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; +import { UmbRequestReloadChildrenOfEntityEvent } from '@umbraco-cms/backoffice/entity-action'; + +const elementName = 'umb-create-user-collection-action-button'; +@customElement(elementName) +export class UmbCollectionActionButtonElement extends UmbLitElement { + @state() + private _popoverOpen = false; + + async #onClick(event: Event, kind: UmbUserKindType) { + event.stopPropagation(); + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const entityContext = await this.getContext(UMB_ENTITY_CONTEXT); + + const unique = entityContext.getUnique(); + const entityType = entityContext.getEntityType(); + + if (unique === undefined) throw new Error('Missing unique'); + if (!entityType) throw new Error('Missing entityType'); + + const modalContext = modalManager.open(this, UMB_CREATE_USER_MODAL, { + data: { + user: { + kind, + }, + }, + }); + + modalContext + ?.onSubmit() + .then(() => { + this.#requestReloadChildrenOfEntity({ entityType, unique }); + }) + .catch(async () => { + // modal is closed after creation instead of navigating to the new user. + // We therefore need to reload the children of the entity + this.#requestReloadChildrenOfEntity({ entityType, unique }); + }); + } + + async #requestReloadChildrenOfEntity({ entityType, unique }: UmbEntityModel) { + const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + const event = new UmbRequestReloadChildrenOfEntityEvent({ + entityType, + unique, + }); + + eventContext.dispatchEvent(event); + } + + #onPopoverToggle(event: ToggleEvent) { + // 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._popoverOpen = event.newState === 'open'; + } + + override render() { + const label = this.localize.term('general_create'); + + return html` + + ${label} + + + + + + this.#onClick(event, UmbUserKind.DEFAULT)}> + + + this.#onClick(event, UmbUserKind.API)}> + + + + + + `; + } +} + +export { UmbCollectionActionButtonElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbCollectionActionButtonElement; + } +} diff --git a/src/packages/user/user/collection/action/create-user.collection-action.ts b/src/packages/user/user/collection/action/create-user.collection-action.ts deleted file mode 100644 index 73ac577b54..0000000000 --- a/src/packages/user/user/collection/action/create-user.collection-action.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { UMB_CREATE_USER_MODAL } from '../../modals/create/create-user-modal.token.js'; -import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; -import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; -import { UmbRequestReloadChildrenOfEntityEvent } from '@umbraco-cms/backoffice/entity-action'; -import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; - -export class UmbCreateUserCollectionAction extends UmbControllerBase { - async execute() { - const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - const entityContext = await this.getContext(UMB_ENTITY_CONTEXT); - - const unique = entityContext.getUnique(); - const entityType = entityContext.getEntityType(); - - if (unique === undefined) throw new Error('Missing unique'); - if (!entityType) throw new Error('Missing entityType'); - - const modalContext = modalManager.open(this, UMB_CREATE_USER_MODAL); - modalContext?.onSubmit().catch(async () => { - // modal is closed after creation instead of navigating to the new user. - // We therefore need to reload the children of the entity - const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbRequestReloadChildrenOfEntityEvent({ - entityType, - unique, - }); - - eventContext.dispatchEvent(event); - }); - } -} diff --git a/src/packages/user/user/collection/action/index.ts b/src/packages/user/user/collection/action/index.ts deleted file mode 100644 index 807c9a6fee..0000000000 --- a/src/packages/user/user/collection/action/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { UmbCreateUserCollectionAction } from './create-user.collection-action.js'; diff --git a/src/packages/user/user/collection/action/manifests.ts b/src/packages/user/user/collection/action/manifests.ts index 7d2451635c..70aa992311 100644 --- a/src/packages/user/user/collection/action/manifests.ts +++ b/src/packages/user/user/collection/action/manifests.ts @@ -1,23 +1,17 @@ -import { UmbCreateUserCollectionAction } from './create-user.collection-action.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const createManifest: ManifestTypes = { - type: 'collectionAction', - kind: 'button', - name: 'Create User Collection Action', - alias: 'Umb.CollectionAction.User.Create', - api: UmbCreateUserCollectionAction, - weight: 200, - meta: { - label: '#general_create', +export const manifests: Array = [ + { + type: 'collectionAction', + name: 'Create User Collection Action', + alias: 'Umb.CollectionAction.User.Create', + element: () => import('./create-user-collection-action.element.js'), + weight: 200, + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.User', + }, + ], }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.User', - }, - ], -}; - -export const manifests: Array = [createManifest]; +]; diff --git a/src/packages/user/user/collection/manifests.ts b/src/packages/user/user/collection/manifests.ts index 72741e772e..b54121406d 100644 --- a/src/packages/user/user/collection/manifests.ts +++ b/src/packages/user/user/collection/manifests.ts @@ -3,21 +3,18 @@ import { manifests as collectionRepositoryManifests } from './repository/manifes import { manifests as collectionViewManifests } from './views/manifests.js'; import { manifests as collectionActionManifests } from './action/manifests.js'; import { UMB_USER_COLLECTION_ALIAS } from './constants.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const collectionManifest: ManifestTypes = { - type: 'collection', - alias: UMB_USER_COLLECTION_ALIAS, - name: 'User Collection', - api: () => import('./user-collection.context.js'), - element: () => import('./user-collection.element.js'), - meta: { - repositoryAlias: UMB_USER_COLLECTION_REPOSITORY_ALIAS, +export const manifests: Array = [ + { + type: 'collection', + alias: UMB_USER_COLLECTION_ALIAS, + name: 'User Collection', + api: () => import('./user-collection.context.js'), + element: () => import('./user-collection.element.js'), + meta: { + repositoryAlias: UMB_USER_COLLECTION_REPOSITORY_ALIAS, + }, }, -}; - -export const manifests: Array = [ - collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, ...collectionActionManifests, diff --git a/src/packages/user/user/collection/repository/manifests.ts b/src/packages/user/user/collection/repository/manifests.ts index 15afe81d2b..971a14ae10 100644 --- a/src/packages/user/user/collection/repository/manifests.ts +++ b/src/packages/user/user/collection/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_USER_COLLECTION_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_USER_COLLECTION_REPOSITORY_ALIAS, - name: 'User Collection Repository', - api: () => import('./user-collection.repository.js'), -}; - -export const manifests: Array = [repository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_USER_COLLECTION_REPOSITORY_ALIAS, + name: 'User Collection Repository', + api: () => import('./user-collection.repository.js'), + }, +]; diff --git a/src/packages/user/user/collection/repository/user-collection.server.data-source.ts b/src/packages/user/user/collection/repository/user-collection.server.data-source.ts index 57af3559cc..de1a3a767f 100644 --- a/src/packages/user/user/collection/repository/user-collection.server.data-source.ts +++ b/src/packages/user/user/collection/repository/user-collection.server.data-source.ts @@ -86,6 +86,7 @@ export class UmbUserCollectionServerDataSource implements UmbCollectionDataSourc lastLockoutDate: item.lastLockoutDate || null, lastPasswordChangeDate: item.lastPasswordChangeDate || null, isAdmin: item.isAdmin, + kind: item.kind, }; return userDetail; diff --git a/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts b/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts index 7de4d20ea5..e8bd8a8eb2 100644 --- a/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts +++ b/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts @@ -2,6 +2,8 @@ import { getDisplayStateFromUserStatus } from '../../../utils.js'; import type { UmbUserCollectionContext } from '../../user-collection.context.js'; import type { UmbUserDetailModel } from '../../../types.js'; import { UMB_USER_COLLECTION_CONTEXT } from '../../user-collection.context-token.js'; +import { UMB_USER_WORKSPACE_PATH } from '../../../paths.js'; +import { UmbUserKind } from '../../../utils/index.js'; import { css, html, nothing, customElement, state, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @@ -50,12 +52,6 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { this._loading = false; } - //TODO How should we handle url stuff? - private _handleOpenCard(unique: string) { - //TODO this will not be needed when cards works as links with href - history.pushState(null, '', 'section/user-management/view/users/user/edit/' + unique); //TODO Change to a tag with href and make dynamic - } - #onSelect(user: UmbUserDetailModel) { this.#collectionContext?.selection.select(user.unique ?? ''); } @@ -78,44 +74,24 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { } #renderUserCard(user: UmbUserDetailModel) { - const avatarUrls = [ - { - scale: '1x', - url: user.avatarUrls?.[1], - }, - { - scale: '2x', - url: user.avatarUrls?.[2], - }, - { - scale: '3x', - url: user.avatarUrls?.[3], - }, - ]; - - let avatarSrcset = ''; - - avatarUrls.forEach((url) => { - avatarSrcset += `${url.url} ${url.scale},`; - }); + const href = UMB_USER_WORKSPACE_PATH + '/edit/' + user.unique; return html` 0} ?selected=${this.#collectionContext?.selection.isSelected(user.unique)} - @open=${() => this._handleOpenCard(user.unique)} @selected=${() => this.#onSelect(user)} @deselected=${() => this.#onDeselect(user)}> ${this.#renderUserTag(user)} ${this.#renderUserGroupNames(user)} ${this.#renderUserLoginDate(user)} - - 0 ? avatarUrls[0].url : undefined)} - img-srcset=${ifDefined(user.avatarUrls.length > 0 ? avatarSrcset : undefined)}> + .name=${user.name} + .kind=${user.kind} + .imgUrls=${user.avatarUrls} + style="font-size: 1.6rem;"> `; } @@ -145,12 +121,14 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { } #renderUserLoginDate(user: UmbUserDetailModel) { + if (user.kind === UmbUserKind.API) return nothing; + if (!user.lastLoginDate) { return html``; } return html``; } @@ -172,6 +150,8 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { uui-card-user { width: 100%; height: 180px; + justify-content: normal; + padding-top: var(--uui-size-space-5); } .user-login-time { diff --git a/src/packages/user/user/collection/views/manifests.ts b/src/packages/user/user/collection/views/manifests.ts index dcc1bd579b..7a5c81ff7f 100644 --- a/src/packages/user/user/collection/views/manifests.ts +++ b/src/packages/user/user/collection/views/manifests.ts @@ -1,42 +1,40 @@ import { UMB_COLLECTION_VIEW_USER_GRID, UMB_COLLECTION_VIEW_USER_TABLE } from './constants.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const tableCollectionView: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_COLLECTION_VIEW_USER_TABLE, - name: 'User Table Collection View', - element: () => import('./table/user-table-collection-view.element.js'), - meta: { - label: 'Table', - icon: 'icon-list', - pathName: 'table', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.User', +export const manifests: Array = [ + { + type: 'collectionView', + alias: UMB_COLLECTION_VIEW_USER_TABLE, + name: 'User Table Collection View', + element: () => import('./table/user-table-collection-view.element.js'), + meta: { + label: 'Table', + icon: 'icon-list', + pathName: 'table', }, - ], -}; - -const gridCollectionView: ManifestCollectionView = { - type: 'collectionView', - alias: UMB_COLLECTION_VIEW_USER_GRID, - name: 'User Grid Collection View', - element: () => import('./grid/user-grid-collection-view.element.js'), - weight: 200, - meta: { - label: 'Grid', - icon: 'icon-grid', - pathName: 'grid', + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.User', + }, + ], }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.User', + { + type: 'collectionView', + alias: UMB_COLLECTION_VIEW_USER_GRID, + name: 'User Grid Collection View', + element: () => import('./grid/user-grid-collection-view.element.js'), + weight: 200, + meta: { + label: 'Grid', + icon: 'icon-grid', + pathName: 'grid', }, - ], -}; - -export const manifests: Array = [tableCollectionView, gridCollectionView]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.User', + }, + ], + }, +]; diff --git a/src/packages/user/user/collection/views/table/column-layouts/name/user-table-name-column-layout.element.ts b/src/packages/user/user/collection/views/table/column-layouts/name/user-table-name-column-layout.element.ts index b97ef2232e..15292958c7 100644 --- a/src/packages/user/user/collection/views/table/column-layouts/name/user-table-name-column-layout.element.ts +++ b/src/packages/user/user/collection/views/table/column-layouts/name/user-table-name-column-layout.element.ts @@ -1,5 +1,7 @@ -import { html, LitElement, customElement, property, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { UMB_USER_WORKSPACE_PATH } from '../../../../../paths.js'; +import { html, LitElement, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import type { UmbTableColumn, UmbTableItem } from '@umbraco-cms/backoffice/components'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @customElement('umb-user-table-name-column-layout') export class UmbUserTableNameColumnLayoutElement extends LitElement { @@ -13,38 +15,18 @@ export class UmbUserTableNameColumnLayoutElement extends LitElement { value!: any; override render() { - const avatarUrls = [ - { - scale: '1x', - url: this.value.avatarUrls?.[0], - }, - { - scale: '2x', - url: this.value.avatarUrls?.[1], - }, - { - scale: '3x', - url: this.value.avatarUrls?.[2], - }, - ]; - - let avatarSrcset = ''; - - avatarUrls.forEach((url) => { - avatarSrcset += `${url.url} ${url.scale},`; - }); + const href = UMB_USER_WORKSPACE_PATH + '/edit/' + this.value.unique; return html`
- 0 ? avatarUrls[0].url : undefined)} - img-srcset=${ifDefined(this.value.avatarUrls.length > 0 ? avatarSrcset : undefined)}> - ${this.value.name} + name=${this.value.name} + kind=${this.value.kind} + .imgUrls=${this.value.avatarUrls}> + ${this.value.name}
`; } + static override styles = [UmbTextStyles]; } export default UmbUserTableNameColumnLayoutElement; diff --git a/src/packages/user/user/collection/views/table/user-table-collection-view.element.ts b/src/packages/user/user/collection/views/table/user-table-collection-view.element.ts index 375ca885b3..6efabcb53a 100644 --- a/src/packages/user/user/collection/views/table/user-table-collection-view.element.ts +++ b/src/packages/user/user/collection/views/table/user-table-collection-view.element.ts @@ -1,6 +1,7 @@ import type { UmbUserCollectionContext } from '../../user-collection.context.js'; import type { UmbUserDetailModel } from '../../../types.js'; import { UMB_USER_COLLECTION_CONTEXT } from '../../user-collection.context-token.js'; +import { UmbUserKind } from '../../../utils/index.js'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { @@ -114,7 +115,7 @@ export class UmbUserTableCollectionViewElement extends UmbLitElement { this._tableItems = this._users.map((user) => { return { id: user.unique, - icon: 'icon-user', + icon: user.kind === UmbUserKind.API ? 'icon-unplug' : 'icon-user', data: [ { columnAlias: 'userName', @@ -122,6 +123,7 @@ export class UmbUserTableCollectionViewElement extends UmbLitElement { unique: user.unique, name: user.name, avatarUrls: user.avatarUrls, + kind: user.kind, }, }, { diff --git a/src/packages/user/user/components/index.ts b/src/packages/user/user/components/index.ts index 6f97b68e0a..a3e23b4c87 100644 --- a/src/packages/user/user/components/index.ts +++ b/src/packages/user/user/components/index.ts @@ -1,5 +1,6 @@ -import './user-input/user-input.element.js'; +import './user-avatar/user-avatar.element.js'; import './user-document-start-node/user-document-start-node.element.js'; +import './user-input/user-input.element.js'; import './user-media-start-node/user-media-start-node.element.js'; export * from './user-input/index.js'; diff --git a/src/packages/user/user/components/user-avatar/user-avatar.element.ts b/src/packages/user/user/components/user-avatar/user-avatar.element.ts new file mode 100644 index 0000000000..44661991dc --- /dev/null +++ b/src/packages/user/user/components/user-avatar/user-avatar.element.ts @@ -0,0 +1,139 @@ +import type { UmbUserKindType } from '../../utils/index.js'; +import { UmbUserKind } from '../../utils/index.js'; +import type { UUIAvatarElement } from '@umbraco-cms/backoffice/external/uui'; +import { + css, + html, + customElement, + property, + ifDefined, + state, + classMap, + query, +} from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; + +const elementName = 'umb-user-avatar'; +@customElement(elementName) +export class UmbUserAvatarElement extends UmbLitElement { + @property({ type: String }) + name?: string; + + @property({ type: String }) + kind?: UmbUserKindType = UmbUserKind.DEFAULT; + + @property({ type: Array, attribute: false }) + public get imgUrls(): Array { + return this.#imgUrls; + } + public set imgUrls(value: Array) { + this.#imgUrls = value; + this.hasImgUrls = value.length > 0; + this.#setImgSrcSizes(); + } + #imgUrls: Array = []; + + @state() + private _imgSrcSizes: Array<{ w: number; url: string }> = []; + + @state() + private _imgSrc = ''; + + @state() + private hasImgUrls = false; + + @query('uui-avatar') + avatarElement!: UUIAvatarElement; + + #setImgSrcSizes() { + if (this.#imgUrls.length === 0) { + this._imgSrcSizes = []; + return; + } + + this._imgSrcSizes = [ + { + w: 30, + url: this.#imgUrls[0], + }, + { + w: 60, + url: this.#imgUrls[1], + }, + { + w: 90, + url: this.#imgUrls[2], + }, + { + w: 150, + url: this.#imgUrls[3], + }, + { + w: 300, + url: this.#imgUrls[4], + }, + ]; + + this.#setImgSrc(); + } + + protected override firstUpdated(): void { + this.#setImgSrc(); + } + + async #setImgSrc() { + if (!this.hasImgUrls) return; + if (!this.avatarElement) return; + + setTimeout(() => { + // TODO: look into img sizes="auto" to let the browser handle the correct image size based on the element size + const elementSize = this.avatarElement.getBoundingClientRect(); + const elementWidth = elementSize.width; + + const matchingSizes = this._imgSrcSizes.filter((size) => { + // we multiply the element width to make sure we have a good quality image + return elementWidth * 1.5 <= size.w; + }); + + // We use the smallest image that is larger than the element width + this._imgSrc = matchingSizes[0]?.url; + }, 0); + } + + override render() { + const classes = { + default: this.kind === UmbUserKind.API, + api: this.kind === UmbUserKind.API, + 'has-image': this.hasImgUrls, + }; + + return html``; + } + + static override styles = [ + css` + uui-avatar { + background-color: transparent; + border: 1.5px solid var(--uui-color-border); + color: inherit; + } + + uui-avatar.has-image { + border-color: transparent; + } + + uui-avatar.api { + border-radius: 9%; + } + `, + ]; +} + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbUserAvatarElement; + } +} diff --git a/src/packages/user/user/components/user-input/user-input.element.ts b/src/packages/user/user/components/user-input/user-input.element.ts index 0ca83e9a7d..118cdc4a36 100644 --- a/src/packages/user/user/components/user-input/user-input.element.ts +++ b/src/packages/user/user/components/user-input/user-input.element.ts @@ -157,7 +157,11 @@ export class UmbUserInputElement extends UUIFormControlMixin(UmbLitElement, '') if (!item.unique) return nothing; return html` - + this.#removeItem(item)}> @@ -171,7 +175,7 @@ export class UmbUserInputElement extends UUIFormControlMixin(UmbLitElement, '') width: 100%; } - uui-avatar { + umb-user-avatar { font-size: var(--uui-size-4); } `, diff --git a/src/packages/user/user/conditions/allow-change-password/manifests.ts b/src/packages/user/user/conditions/allow-change-password/manifests.ts new file mode 100644 index 0000000000..368f12e683 --- /dev/null +++ b/src/packages/user/user/conditions/allow-change-password/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'condition', + name: 'User Allow Change Password Condition', + alias: 'Umb.Condition.User.AllowChangePassword', + api: () => import('./user-allow-change-password-action.condition.js'), + }, +]; diff --git a/src/packages/user/user/conditions/allow-change-password/user-allow-change-password-action.condition.ts b/src/packages/user/user/conditions/allow-change-password/user-allow-change-password-action.condition.ts new file mode 100644 index 0000000000..d82ad989ae --- /dev/null +++ b/src/packages/user/user/conditions/allow-change-password/user-allow-change-password-action.condition.ts @@ -0,0 +1,15 @@ +import { UmbUserKind } from '../../utils/index.js'; +import { UmbUserActionConditionBase } from '../user-allow-action-base.condition.js'; + +export class UmbUserAllowChangePasswordActionCondition extends UmbUserActionConditionBase { + async _onUserDataChange() { + // don't allow the current user to delete themselves + if (this.userKind === UmbUserKind.DEFAULT) { + this.permitted = true; + } else { + this.permitted = false; + } + } +} + +export { UmbUserAllowChangePasswordActionCondition as api }; diff --git a/src/packages/user/user/conditions/allow-delete/manifests.ts b/src/packages/user/user/conditions/allow-delete/manifests.ts index cbd8597b07..b25eba1462 100644 --- a/src/packages/user/user/conditions/allow-delete/manifests.ts +++ b/src/packages/user/user/conditions/allow-delete/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'condition', name: 'User Allow Delete Action Condition', diff --git a/src/packages/user/user/conditions/allow-disable/manifests.ts b/src/packages/user/user/conditions/allow-disable/manifests.ts index 2c251b99bf..34ba7e7d38 100644 --- a/src/packages/user/user/conditions/allow-disable/manifests.ts +++ b/src/packages/user/user/conditions/allow-disable/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'condition', name: 'User Allow Disable Action Condition', diff --git a/src/packages/user/user/conditions/allow-enable/manifests.ts b/src/packages/user/user/conditions/allow-enable/manifests.ts index d1f35faf5b..e1672654de 100644 --- a/src/packages/user/user/conditions/allow-enable/manifests.ts +++ b/src/packages/user/user/conditions/allow-enable/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'condition', name: 'User Allow Enable Action Condition', diff --git a/src/packages/user/user/conditions/allow-external-login/manifests.ts b/src/packages/user/user/conditions/allow-external-login/manifests.ts index 988f5a8b77..966f5aa137 100644 --- a/src/packages/user/user/conditions/allow-external-login/manifests.ts +++ b/src/packages/user/user/conditions/allow-external-login/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'condition', name: 'User Allow ExternalLogin Action Condition', diff --git a/src/packages/user/user/conditions/allow-mfa/manifests.ts b/src/packages/user/user/conditions/allow-mfa/manifests.ts index 5907e011bb..a9cb89568d 100644 --- a/src/packages/user/user/conditions/allow-mfa/manifests.ts +++ b/src/packages/user/user/conditions/allow-mfa/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'condition', name: 'User Allow Mfa Action Condition', diff --git a/src/packages/user/user/conditions/allow-unlock/manifests.ts b/src/packages/user/user/conditions/allow-unlock/manifests.ts index 8bc2f87d2f..9fafc5d5be 100644 --- a/src/packages/user/user/conditions/allow-unlock/manifests.ts +++ b/src/packages/user/user/conditions/allow-unlock/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ +export const manifests: Array = [ { type: 'condition', name: 'User Allow Unlock Action Condition', diff --git a/src/packages/user/user/conditions/manifests.ts b/src/packages/user/user/conditions/manifests.ts index 23b03f4ec4..32277cea4e 100644 --- a/src/packages/user/user/conditions/manifests.ts +++ b/src/packages/user/user/conditions/manifests.ts @@ -1,16 +1,17 @@ +import { manifests as userAllowChangePasswordActionManifests } from './allow-change-password/manifests.js'; import { manifests as userAllowDeleteActionManifests } from './allow-delete/manifests.js'; import { manifests as userAllowDisableActionManifests } from './allow-disable/manifests.js'; import { manifests as userAllowEnableActionManifests } from './allow-enable/manifests.js'; import { manifests as userAllowExternalLoginActionManifests } from './allow-external-login/manifests.js'; import { manifests as userAllowMfaActionManifests } from './allow-mfa/manifests.js'; import { manifests as userAllowUnlockActionManifests } from './allow-unlock/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ + ...userAllowChangePasswordActionManifests, + ...userAllowDeleteActionManifests, ...userAllowDisableActionManifests, ...userAllowEnableActionManifests, - ...userAllowUnlockActionManifests, ...userAllowExternalLoginActionManifests, ...userAllowMfaActionManifests, - ...userAllowDeleteActionManifests, + ...userAllowUnlockActionManifests, ]; diff --git a/src/packages/user/user/conditions/user-allow-action-base.condition.ts b/src/packages/user/user/conditions/user-allow-action-base.condition.ts index 161f04d1b4..7dffc20550 100644 --- a/src/packages/user/user/conditions/user-allow-action-base.condition.ts +++ b/src/packages/user/user/conditions/user-allow-action-base.condition.ts @@ -1,5 +1,5 @@ import type { UmbUserStateEnum } from '../types.js'; -import { UMB_USER_WORKSPACE_CONTEXT } from '../workspace/user-workspace.context-token.js'; +import { UMB_USER_WORKSPACE_CONTEXT } from '../workspace/user/user-workspace.context-token.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { isCurrentUser } from '@umbraco-cms/backoffice/current-user'; import type { @@ -16,23 +16,44 @@ export abstract class UmbUserActionConditionBase { /** * The unique identifier of the user being edited + * @protected + * @type {string} + * @memberof UmbUserActionConditionBase */ protected userUnique?: string; /** * The state of the user being edited + * @protected + * @type {(UmbUserStateEnum | null)} + * @memberof UmbUserActionConditionBase */ protected userState?: UmbUserStateEnum | null; + /** + * The kind of user being edited + * @protected + * @type {string} + * @memberof UmbUserActionConditionBase + */ + protected userKind?: string; + + /** + * Creates an instance of UmbUserActionConditionBase. + * @param {UmbControllerHost} host The host controller + * @param {UmbConditionControllerArguments} args The condition arguments + * @memberof UmbUserActionConditionBase + */ constructor(host: UmbControllerHost, args: UmbConditionControllerArguments) { super(host, args); this.consumeContext(UMB_USER_WORKSPACE_CONTEXT, (context) => { this.observe( - observeMultiple([context.unique, context.state]), - ([unique, state]) => { + observeMultiple([context.unique, context.state, context.kind]), + ([unique, state, kind]) => { this.userUnique = unique; this.userState = state; + this.userKind = kind; this._onUserDataChange(); }, '_umbActiveUser', diff --git a/src/packages/user/user/entity-actions/create/create-user-entity-action.ts b/src/packages/user/user/entity-actions/create/create-user-entity-action.ts new file mode 100644 index 0000000000..a6da26da4f --- /dev/null +++ b/src/packages/user/user/entity-actions/create/create-user-entity-action.ts @@ -0,0 +1,21 @@ +import { UMB_USER_CREATE_OPTIONS_MODAL } from './modal/index.js'; +import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; + +export class UmbCreateUserEntityAction extends UmbEntityActionBase { + override async execute() { + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modalContext = modalManager.open(this, UMB_USER_CREATE_OPTIONS_MODAL, { + data: { + parent: { + unique: this.args.unique, + entityType: this.args.entityType, + }, + }, + }); + + await modalContext.onSubmit(); + } +} + +export { UmbCreateUserEntityAction as api }; diff --git a/src/packages/user/user/entity-actions/create/manifests.ts b/src/packages/user/user/entity-actions/create/manifests.ts new file mode 100644 index 0000000000..b92ae65395 --- /dev/null +++ b/src/packages/user/user/entity-actions/create/manifests.ts @@ -0,0 +1,23 @@ +import { UMB_USER_ROOT_ENTITY_TYPE } from '../../entity.js'; + +import { manifests as modalManifests } from './modal/manifests.js'; + +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'entityAction', + kind: 'default', + alias: 'Umb.EntityAction.User.Create', + name: 'Create User Entity Action', + weight: 1200, + api: () => import('./create-user-entity-action.js'), + forEntityTypes: [UMB_USER_ROOT_ENTITY_TYPE], + meta: { + icon: 'icon-add', + label: '#actions_create', + additionalOptions: true, + }, + }, + ...modalManifests, +]; diff --git a/src/packages/user/user/entity-actions/create/modal/index.ts b/src/packages/user/user/entity-actions/create/modal/index.ts new file mode 100644 index 0000000000..778a1fe38d --- /dev/null +++ b/src/packages/user/user/entity-actions/create/modal/index.ts @@ -0,0 +1,8 @@ +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export const UMB_USER_CREATE_OPTIONS_MODAL = new UmbModalToken('Umb.Modal.User.CreateOptions', { + modal: { + type: 'sidebar', + size: 'small', + }, +}); diff --git a/src/packages/user/user/entity-actions/create/modal/manifests.ts b/src/packages/user/user/entity-actions/create/modal/manifests.ts new file mode 100644 index 0000000000..08dc77d154 --- /dev/null +++ b/src/packages/user/user/entity-actions/create/modal/manifests.ts @@ -0,0 +1,8 @@ +export const manifests: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.User.CreateOptions', + name: 'User Create Options Modal', + element: () => import('./user-create-options-modal.element.js'), + }, +]; diff --git a/src/packages/user/user/entity-actions/create/modal/user-create-options-modal.element.ts b/src/packages/user/user/entity-actions/create/modal/user-create-options-modal.element.ts new file mode 100644 index 0000000000..74e8646990 --- /dev/null +++ b/src/packages/user/user/entity-actions/create/modal/user-create-options-modal.element.ts @@ -0,0 +1,106 @@ +import { UMB_CREATE_USER_MODAL } from '../../../modals/create/create-user-modal.token.js'; +import { UmbUserKind, type UmbUserKindType } from '../../../utils/index.js'; +import { html, customElement, map } from '@umbraco-cms/backoffice/external/lit'; +import { UMB_MODAL_MANAGER_CONTEXT, UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; +import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; +import { UmbRequestReloadChildrenOfEntityEvent } from '@umbraco-cms/backoffice/entity-action'; + +interface UmbUserCreateOptionModel { + label: string; + description?: string; + icon: string; + kind: UmbUserKindType; +} + +const elementName = 'umb-user-create-options-modal'; +@customElement(elementName) +export class UmbUserCreateOptionsModalElement extends UmbModalBaseElement { + #options: Array = [ + { + label: this.localize.term('user_userKindDefault'), + icon: 'icon-user', + kind: UmbUserKind.DEFAULT, + }, + { + label: this.localize.term('user_userKindApi'), + icon: 'icon-unplug', + kind: UmbUserKind.API, + }, + ]; + + async #onClick(event: Event, kind: UmbUserKindType) { + event.stopPropagation(); + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const entityContext = await this.getContext(UMB_ENTITY_CONTEXT); + + const unique = entityContext.getUnique(); + const entityType = entityContext.getEntityType(); + + if (unique === undefined) throw new Error('Missing unique'); + if (!entityType) throw new Error('Missing entityType'); + + const modalContext = modalManager.open(this, UMB_CREATE_USER_MODAL, { + data: { + user: { + kind, + }, + }, + }); + + modalContext + ?.onSubmit() + .then(() => { + this.#requestReloadChildrenOfEntity({ entityType, unique }); + }) + .catch(async () => { + // modal is closed after creation instead of navigating to the new user. + // We therefore need to reload the children of the entity + this.#requestReloadChildrenOfEntity({ entityType, unique }); + }); + } + + async #requestReloadChildrenOfEntity({ entityType, unique }: UmbEntityModel) { + const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + const event = new UmbRequestReloadChildrenOfEntityEvent({ + entityType, + unique, + }); + + eventContext.dispatchEvent(event); + } + + override render() { + return html` + + + + ${map( + this.#options, + (item) => html` + this.#onClick(event, item.kind)}> + `, + )} + + + + + `; + } +} + +export { UmbUserCreateOptionsModalElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbUserCreateOptionsModalElement; + } +} diff --git a/src/packages/user/user/entity-actions/manifests.ts b/src/packages/user/user/entity-actions/manifests.ts index b67955449e..d059c0d812 100644 --- a/src/packages/user/user/entity-actions/manifests.ts +++ b/src/packages/user/user/entity-actions/manifests.ts @@ -1,8 +1,11 @@ import { UMB_USER_DETAIL_REPOSITORY_ALIAS, UMB_USER_ITEM_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_USER_ENTITY_TYPE } from '../entity.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ +import { manifests as createManifests } from './create/manifests.js'; + +import type { ManifestEntityAction, UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +const entityActions: Array = [ { type: 'entityAction', kind: 'delete', @@ -84,6 +87,7 @@ const entityActions: Array = [ meta: { icon: 'icon-settings', label: '#user_configureMfa', + additionalOptions: true, }, conditions: [ { @@ -93,4 +97,4 @@ const entityActions: Array = [ }, ]; -export const manifests: Array = [...entityActions]; +export const manifests: Array = [...entityActions, ...createManifests]; diff --git a/src/packages/user/user/entity-bulk-actions/manifests.ts b/src/packages/user/user/entity-bulk-actions/manifests.ts index c6fa3a67d0..84bafab790 100644 --- a/src/packages/user/user/entity-bulk-actions/manifests.ts +++ b/src/packages/user/user/entity-bulk-actions/manifests.ts @@ -1,9 +1,8 @@ import { UMB_USER_COLLECTION_ALIAS } from '../collection/index.js'; import { UMB_USER_ENTITY_TYPE } from '../entity.js'; -import type { ManifestEntityBulkAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -const entityActions: Array = [ +export const manifests: Array = [ /* TODO: Implement SetGroup entity action { type: 'entityBulkAction', @@ -75,5 +74,3 @@ const entityActions: Array = [ ], }, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/user/user/index.ts b/src/packages/user/user/index.ts index 4f1a72e010..9c0f9237c3 100644 --- a/src/packages/user/user/index.ts +++ b/src/packages/user/user/index.ts @@ -1,9 +1,10 @@ export * from './collection/index.js'; export * from './components/index.js'; +export * from './entity.js'; export * from './invite/index.js'; +export * from './paths.js'; export * from './repository/index.js'; -export type * from './types.js'; export * from './utils/index.js'; -export * from './entity.js'; +export type * from './types.js'; export { UMB_USER_PICKER_MODAL } from './modals/user-picker/index.js'; diff --git a/src/packages/user/user/invite/collection-action/manifests.ts b/src/packages/user/user/invite/collection-action/manifests.ts index 0411ed0301..dfc9c59004 100644 --- a/src/packages/user/user/invite/collection-action/manifests.ts +++ b/src/packages/user/user/invite/collection-action/manifests.ts @@ -1,22 +1,21 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const inviteManifest: ManifestTypes = { - type: 'collectionAction', - kind: 'button', - name: 'Invite User Collection Action', - alias: 'Umb.CollectionAction.User.Invite', - api: () => import('./invite-user.collection-action.js'), - weight: 100, - meta: { - label: '#user_invite', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: 'Umb.Collection.User', +export const manifests: Array = [ + { + type: 'collectionAction', + kind: 'button', + name: 'Invite User Collection Action', + alias: 'Umb.CollectionAction.User.Invite', + api: () => import('./invite-user.collection-action.js'), + weight: 100, + meta: { + label: '#user_invite', }, - ], -}; - -export const manifests: Array = [inviteManifest]; + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: 'Umb.Collection.User', + }, + ], + }, +]; diff --git a/src/packages/user/user/invite/entity-action/invite/invite-user-entity-action.ts b/src/packages/user/user/invite/entity-action/invite/invite-user-entity-action.ts new file mode 100644 index 0000000000..7d7f86ec79 --- /dev/null +++ b/src/packages/user/user/invite/entity-action/invite/invite-user-entity-action.ts @@ -0,0 +1,13 @@ +import { UMB_INVITE_USER_MODAL } from '../../index.js'; +import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; + +export class UmbCreateUserEntityAction extends UmbEntityActionBase { + override async execute() { + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modalContext = modalManager.open(this, UMB_INVITE_USER_MODAL); + await modalContext?.onSubmit(); + } +} + +export { UmbCreateUserEntityAction as api }; diff --git a/src/packages/user/user/invite/entity-action/invite/manifests.ts b/src/packages/user/user/invite/entity-action/invite/manifests.ts new file mode 100644 index 0000000000..8f599b4541 --- /dev/null +++ b/src/packages/user/user/invite/entity-action/invite/manifests.ts @@ -0,0 +1,18 @@ +import { UMB_USER_ROOT_ENTITY_TYPE } from '../../../entity.js'; + +export const manifests: Array = [ + { + type: 'entityAction', + kind: 'default', + alias: 'Umb.EntityAction.User.Invite', + name: 'Invite User Entity Action', + weight: 1000, + api: () => import('./invite-user-entity-action.js'), + forEntityTypes: [UMB_USER_ROOT_ENTITY_TYPE], + meta: { + icon: 'icon-paper-plane', + label: '#user_invite', + additionalOptions: true, + }, + }, +]; diff --git a/src/packages/user/user/invite/entity-action/manifests.ts b/src/packages/user/user/invite/entity-action/manifests.ts index af09b5ff79..fa0c75af5a 100644 --- a/src/packages/user/user/invite/entity-action/manifests.ts +++ b/src/packages/user/user/invite/entity-action/manifests.ts @@ -1,27 +1,9 @@ -import { UMB_USER_ENTITY_TYPE } from '../../entity.js'; +import { manifests as inviteManifests } from './invite/manifests.js'; import { manifests as resendInviteManifests } from './resend-invite/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityActions: Array = [ - { - type: 'entityAction', - kind: 'default', - alias: 'Umb.EntityAction.User.ResendInvite', - name: 'Resend Invite User Entity Action', - weight: 500, - api: () => import('./resend-invite/resend-invite.action.js'), - forEntityTypes: [UMB_USER_ENTITY_TYPE], - meta: { - icon: 'icon-message', - label: '#actions_resendInvite', - }, - conditions: [ - { - alias: 'Umb.Condition.User.AllowResendInviteAction', - }, - ], - }, +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + ...inviteManifests, ...resendInviteManifests, ]; - -export const manifests: Array = [...entityActions]; diff --git a/src/packages/user/user/invite/entity-action/resend-invite/manifests.ts b/src/packages/user/user/invite/entity-action/resend-invite/manifests.ts index 87dac3af79..0f3d9bb724 100644 --- a/src/packages/user/user/invite/entity-action/resend-invite/manifests.ts +++ b/src/packages/user/user/invite/entity-action/resend-invite/manifests.ts @@ -1,6 +1,25 @@ -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { UMB_USER_ENTITY_TYPE } from '../../../entity.js'; -export const manifests: Array = [ +export const manifests: Array = [ + { + type: 'entityAction', + kind: 'default', + alias: 'Umb.EntityAction.User.ResendInvite', + name: 'Resend Invite User Entity Action', + weight: 500, + api: () => import('./resend-invite.action.js'), + forEntityTypes: [UMB_USER_ENTITY_TYPE], + meta: { + icon: 'icon-message', + label: '#actions_resendInvite', + additionalOptions: true, + }, + conditions: [ + { + alias: 'Umb.Condition.User.AllowResendInviteAction', + }, + ], + }, { type: 'condition', name: 'User Allow Resend Invite Action Condition', diff --git a/src/packages/user/user/invite/manifests.ts b/src/packages/user/user/invite/manifests.ts index 63b76f1ec9..f92c728116 100644 --- a/src/packages/user/user/invite/manifests.ts +++ b/src/packages/user/user/invite/manifests.ts @@ -2,9 +2,9 @@ import { manifests as collectionActionManifests } from './collection-action/mani import { manifests as modalManifests } from './modal/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as entityActionManifests } from './entity-action/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...collectionActionManifests, ...modalManifests, ...repositoryManifests, diff --git a/src/packages/user/user/invite/modal/manifests.ts b/src/packages/user/user/invite/modal/manifests.ts index 33053b0d36..46542a0e3f 100644 --- a/src/packages/user/user/invite/modal/manifests.ts +++ b/src/packages/user/user/invite/modal/manifests.ts @@ -1,6 +1,4 @@ -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.User.Invite', @@ -14,5 +12,3 @@ const modals: Array = [ js: () => import('./resend-invite/resend-invite-to-user-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/user/user/invite/repository/manifests.ts b/src/packages/user/user/invite/repository/manifests.ts index 387f146850..1a3d8cce24 100644 --- a/src/packages/user/user/invite/repository/manifests.ts +++ b/src/packages/user/user/invite/repository/manifests.ts @@ -1,11 +1,10 @@ import { UMB_INVITE_USER_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const inviteRepository: ManifestRepository = { - type: 'repository', - alias: UMB_INVITE_USER_REPOSITORY_ALIAS, - name: 'Invite User Repository', - api: () => import('./invite-user.repository.js'), -}; - -export const manifests: Array = [inviteRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_INVITE_USER_REPOSITORY_ALIAS, + name: 'Invite User Repository', + api: () => import('./invite-user.repository.js'), + }, +]; diff --git a/src/packages/user/user/manifests.ts b/src/packages/user/user/manifests.ts index a5eb9bfeea..29df08be7c 100644 --- a/src/packages/user/user/manifests.ts +++ b/src/packages/user/user/manifests.ts @@ -1,24 +1,26 @@ +import { manifests as clientCredentialManifests } from './client-credential/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; import { manifests as conditionsManifests } from './conditions/manifests.js'; import { manifests as entityActionsManifests } from './entity-actions/manifests.js'; import { manifests as entityBulkActionManifests } from './entity-bulk-actions/manifests.js'; import { manifests as inviteManifests } from './invite/manifests.js'; import { manifests as modalManifests } from './modals/manifests.js'; -import { manifests as repositoryManifests } from './repository/manifests.js'; -import { manifests as sectionViewManifests } from './section-view/manifests.js'; import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as menuItemManifests } from './menu-item/manifests.js'; +import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ + ...clientCredentialManifests, ...collectionManifests, ...conditionsManifests, ...entityActionsManifests, ...entityBulkActionManifests, ...inviteManifests, ...modalManifests, - ...repositoryManifests, - ...sectionViewManifests, ...propertyEditorManifests, + ...repositoryManifests, ...workspaceManifests, + ...menuItemManifests, ]; diff --git a/src/packages/user/user/menu-item/manifests.ts b/src/packages/user/user/menu-item/manifests.ts new file mode 100644 index 0000000000..73d55b5e8f --- /dev/null +++ b/src/packages/user/user/menu-item/manifests.ts @@ -0,0 +1,17 @@ +import { UMB_USER_MANAGEMENT_MENU_ALIAS } from '../../section/menu/constants.js'; +import { UMB_USER_ROOT_ENTITY_TYPE } from '../entity.js'; + +export const manifests: Array = [ + { + type: 'menuItem', + alias: 'Umb.MenuItem.Users', + name: 'Users Menu Item', + weight: 200, + meta: { + label: '#treeHeaders_users', + icon: 'icon-user', + entityType: UMB_USER_ROOT_ENTITY_TYPE, + menus: [UMB_USER_MANAGEMENT_MENU_ALIAS], + }, + }, +]; diff --git a/src/packages/user/user/modals/create/create-user-modal.element.ts b/src/packages/user/user/modals/create/create-user-modal.element.ts index fdf1e15950..863fc88bec 100644 --- a/src/packages/user/user/modals/create/create-user-modal.element.ts +++ b/src/packages/user/user/modals/create/create-user-modal.element.ts @@ -1,5 +1,7 @@ import { UmbUserDetailRepository } from '../../repository/index.js'; +import { UmbUserKind } from '../../utils/index.js'; import { UMB_CREATE_USER_SUCCESS_MODAL } from './create-user-success-modal.token.js'; +import type { UmbCreateUserModalData } from './create-user-modal.token.js'; import type { UmbUserGroupInputElement } from '@umbraco-cms/backoffice/user-group'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, query } from '@umbraco-cms/backoffice/external/lit'; @@ -7,7 +9,7 @@ import { UmbModalBaseElement, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/bac import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; @customElement('umb-create-user-modal') -export class UmbCreateUserModalElement extends UmbModalBaseElement { +export class UmbCreateUserModalElement extends UmbModalBaseElement { #userDetailRepository = new UmbUserDetailRepository(this); @query('#CreateUserForm') @@ -35,6 +37,7 @@ export class UmbCreateUserModalElement extends UmbModalBaseElement { const { data: userScaffold } = await this.#userDetailRepository.createScaffold(); if (!userScaffold) return; + userScaffold.kind = this.data?.user.kind ?? UmbUserKind.DEFAULT; userScaffold.name = name; userScaffold.email = email; userScaffold.userName = email; @@ -44,7 +47,11 @@ export class UmbCreateUserModalElement extends UmbModalBaseElement { const { data } = await this.#userDetailRepository.create(userScaffold); if (data) { - this.#openSuccessModal(data.unique); + if (data.kind === UmbUserKind.DEFAULT) { + this.#openSuccessModal(data.unique); + } else { + this._submitModal(); + } } } @@ -73,11 +80,8 @@ export class UmbCreateUserModalElement extends UmbModalBaseElement { } override render() { - return html` -

- Create new users to give them access to Umbraco. When a user is created a password will be generated that you - can share with the user. -

+ return html` +

${this.localize.term('user_createUserDescription', this.data?.user.kind)}

${this.#renderForm()} @@ -115,7 +119,8 @@ export class UmbCreateUserModalElement extends UmbModalBaseElement { UmbTextStyles, css` uui-input, - uui-input-password { + uui-input-password, + uui-combobox { width: 100%; } diff --git a/src/packages/user/user/modals/create/create-user-modal.token.ts b/src/packages/user/user/modals/create/create-user-modal.token.ts index d8e2edf546..4486b12f4f 100644 --- a/src/packages/user/user/modals/create/create-user-modal.token.ts +++ b/src/packages/user/user/modals/create/create-user-modal.token.ts @@ -1,7 +1,14 @@ +import type { UmbUserKindType } from '../../utils/index.js'; import { UMB_CREATE_USER_MODAL_ALIAS } from './constants.js'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; -export const UMB_CREATE_USER_MODAL = new UmbModalToken(UMB_CREATE_USER_MODAL_ALIAS, { +export interface UmbCreateUserModalData { + user: { + kind?: UmbUserKindType; + }; +} + +export const UMB_CREATE_USER_MODAL = new UmbModalToken(UMB_CREATE_USER_MODAL_ALIAS, { modal: { type: 'dialog', size: 'small', diff --git a/src/packages/user/user/modals/create/create-user-success-modal.element.ts b/src/packages/user/user/modals/create/create-user-success-modal.element.ts index 8185df073f..f30bf145be 100644 --- a/src/packages/user/user/modals/create/create-user-success-modal.element.ts +++ b/src/packages/user/user/modals/create/create-user-success-modal.element.ts @@ -1,6 +1,7 @@ import { UmbUserItemRepository } from '../../repository/item/index.js'; import { UmbNewUserPasswordRepository } from '../../repository/new-password/index.js'; import type { UmbUserItemModel } from '../../repository/item/types.js'; +import { UMB_USER_WORKSPACE_PATH } from '../../paths.js'; import type { UmbCreateUserSuccessModalData, UmbCreateUserSuccessModalValue, @@ -69,10 +70,8 @@ export class UmbCreateUserSuccessModalElement extends UmbModalBaseElement< this._rejectModal({ type: 'createAnotherUser' }); }; - #onGoToProfile = (event: Event) => { - event.stopPropagation(); + #onGoToProfile = () => { this._submitModal(); - history.pushState(null, '', 'section/user-management/view/users/user/edit/' + this.data?.user.unique); //TODO: URL Should be dynamic }; override render() { @@ -98,7 +97,8 @@ export class UmbCreateUserSuccessModalElement extends UmbModalBaseElement< slot="actions" label="Go to profile" look="primary" - color="positive"> + color="positive" + href=${UMB_USER_WORKSPACE_PATH + '/edit/' + this.data?.user.unique}>
`; } diff --git a/src/packages/user/user/modals/manifests.ts b/src/packages/user/user/modals/manifests.ts index 0f32cb6f68..614f3e0d7b 100644 --- a/src/packages/user/user/modals/manifests.ts +++ b/src/packages/user/user/modals/manifests.ts @@ -1,7 +1,6 @@ import { UMB_CREATE_USER_MODAL_ALIAS } from './create/constants.js'; -import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const modals: Array = [ +export const manifests: Array = [ { type: 'modal', alias: UMB_CREATE_USER_MODAL_ALIAS, @@ -27,5 +26,3 @@ const modals: Array = [ js: () => import('./user-mfa/user-mfa-modal.element.js'), }, ]; - -export const manifests: Array = [...modals]; diff --git a/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts b/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts index 57c1262614..76356d5956 100644 --- a/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts +++ b/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts @@ -58,7 +58,11 @@ export class UmbUserPickerModalElement extends UmbModalBaseElement this.#selectionManager.select(user.unique)} @deselected=${() => this.#selectionManager.deselect(user.unique)} ?selected=${this.#selectionManager.isSelected(user.unique)}> - + `, )} @@ -74,8 +78,7 @@ export class UmbUserPickerModalElement extends UmbModalBaseElement = [...userPickerManifests]; +export const manifests: Array = [...userPickerManifests]; diff --git a/src/packages/user/user/property-editor/user-picker/manifests.ts b/src/packages/user/user/property-editor/user-picker/manifests.ts index dc0dccaff7..16eb8186fe 100644 --- a/src/packages/user/user/property-editor/user-picker/manifests.ts +++ b/src/packages/user/user/property-editor/user-picker/manifests.ts @@ -1,7 +1,6 @@ import { manifest as userPickerSchemaManifest } from './Umbraco.UserPicker.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.UserPicker', diff --git a/src/packages/user/user/repository/avatar/manifests.ts b/src/packages/user/user/repository/avatar/manifests.ts index 87961d59ff..ff8dcb5dab 100644 --- a/src/packages/user/user/repository/avatar/manifests.ts +++ b/src/packages/user/user/repository/avatar/manifests.ts @@ -1,11 +1,10 @@ import { UMB_USER_AVATAR_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const avatarRepository: ManifestRepository = { - type: 'repository', - alias: UMB_USER_AVATAR_REPOSITORY_ALIAS, - name: 'User Avatar Repository', - api: () => import('./user-avatar.repository.js'), -}; - -export const manifests: Array = [avatarRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_USER_AVATAR_REPOSITORY_ALIAS, + name: 'User Avatar Repository', + api: () => import('./user-avatar.repository.js'), + }, +]; diff --git a/src/packages/user/user/repository/change-password/change-user-password.server.data-source.ts b/src/packages/user/user/repository/change-password/change-user-password.server.data-source.ts index 09104ee397..ebe00ebe02 100644 --- a/src/packages/user/user/repository/change-password/change-user-password.server.data-source.ts +++ b/src/packages/user/user/repository/change-password/change-user-password.server.data-source.ts @@ -33,7 +33,7 @@ export class UmbChangeUserPasswordServerDataSource { UserService.postUserByIdChangePassword({ id, requestBody: { - newPassword + newPassword, }, }), ); diff --git a/src/packages/user/user/repository/change-password/manifests.ts b/src/packages/user/user/repository/change-password/manifests.ts index 2283923820..e66da21a0a 100644 --- a/src/packages/user/user/repository/change-password/manifests.ts +++ b/src/packages/user/user/repository/change-password/manifests.ts @@ -1,11 +1,10 @@ import { UMB_CHANGE_USER_PASSWORD_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const changePasswordRepository: ManifestRepository = { - type: 'repository', - alias: UMB_CHANGE_USER_PASSWORD_REPOSITORY_ALIAS, - name: 'Change User Password Repository', - api: () => import('./change-user-password.repository.js'), -}; - -export const manifests: Array = [changePasswordRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_CHANGE_USER_PASSWORD_REPOSITORY_ALIAS, + name: 'Change User Password Repository', + api: () => import('./change-user-password.repository.js'), + }, +]; diff --git a/src/packages/user/user/repository/config/manifests.ts b/src/packages/user/user/repository/config/manifests.ts index 0477378456..9fd9b72397 100644 --- a/src/packages/user/user/repository/config/manifests.ts +++ b/src/packages/user/user/repository/config/manifests.ts @@ -1,18 +1,16 @@ import { UMB_USER_CONFIG_REPOSITORY_ALIAS, UMB_USER_CONFIG_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const store: ManifestStore = { - type: 'store', - alias: UMB_USER_CONFIG_STORE_ALIAS, - name: 'User Config Store', - api: () => import('./user-config.store.js'), -}; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_USER_CONFIG_REPOSITORY_ALIAS, - name: 'User Config Repository', - api: () => import('./user-config.repository.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'store', + alias: UMB_USER_CONFIG_STORE_ALIAS, + name: 'User Config Store', + api: () => import('./user-config.store.js'), + }, + { + type: 'repository', + alias: UMB_USER_CONFIG_REPOSITORY_ALIAS, + name: 'User Config Repository', + api: () => import('./user-config.repository.js'), + }, +]; diff --git a/src/packages/user/user/repository/detail/manifests.ts b/src/packages/user/user/repository/detail/manifests.ts index f110fb5c3d..6bb70c4f0c 100644 --- a/src/packages/user/user/repository/detail/manifests.ts +++ b/src/packages/user/user/repository/detail/manifests.ts @@ -1,18 +1,16 @@ import { UMB_USER_DETAIL_REPOSITORY_ALIAS, UMB_USER_DETAIL_STORE_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_USER_DETAIL_REPOSITORY_ALIAS, - name: 'User Detail Repository', - api: () => import('./user-detail.repository.js'), -}; - -const store: ManifestStore = { - type: 'store', - alias: UMB_USER_DETAIL_STORE_ALIAS, - name: 'User Detail Store', - api: () => import('./user-detail.store.js'), -}; - -export const manifests: Array = [repository, store]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_USER_DETAIL_REPOSITORY_ALIAS, + name: 'User Detail Repository', + api: () => import('./user-detail.repository.js'), + }, + { + type: 'store', + alias: UMB_USER_DETAIL_STORE_ALIAS, + name: 'User Detail Store', + api: () => import('./user-detail.store.js'), + }, +]; diff --git a/src/packages/user/user/repository/detail/user-detail.server.data-source.ts b/src/packages/user/user/repository/detail/user-detail.server.data-source.ts index 8d924ca94f..072ae05901 100644 --- a/src/packages/user/user/repository/detail/user-detail.server.data-source.ts +++ b/src/packages/user/user/repository/detail/user-detail.server.data-source.ts @@ -1,8 +1,13 @@ import type { UmbUserDetailModel, UmbUserStartNodesModel } from '../../types.js'; import { UMB_USER_ENTITY_TYPE } from '../../entity.js'; +import { UmbUserKind } from '../../utils/index.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; import type { UmbDetailDataSource } from '@umbraco-cms/backoffice/repository'; -import type { CreateUserRequestModel, UpdateUserRequestModel } from '@umbraco-cms/backoffice/external/backend-api'; +import type { + CreateUserRequestModel, + UpdateUserRequestModel, + UserKindModel, +} from '@umbraco-cms/backoffice/external/backend-api'; import { UserService } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; @@ -34,17 +39,18 @@ export class UmbUserServerDataSource implements UmbDetailDataSource import('./disable-user.repository.js'), -}; - -export const manifests: Array = [disableRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_DISABLE_USER_REPOSITORY_ALIAS, + name: 'Disable User Repository', + api: () => import('./disable-user.repository.js'), + }, +]; diff --git a/src/packages/user/user/repository/enable/manifests.ts b/src/packages/user/user/repository/enable/manifests.ts index d33d994a13..09943c2a04 100644 --- a/src/packages/user/user/repository/enable/manifests.ts +++ b/src/packages/user/user/repository/enable/manifests.ts @@ -1,11 +1,10 @@ import { UMB_ENABLE_USER_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const enableRepository: ManifestRepository = { - type: 'repository', - alias: UMB_ENABLE_USER_REPOSITORY_ALIAS, - name: 'Disable User Repository', - api: () => import('./enable-user.repository.js'), -}; - -export const manifests: Array = [enableRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_ENABLE_USER_REPOSITORY_ALIAS, + name: 'Disable User Repository', + api: () => import('./enable-user.repository.js'), + }, +]; diff --git a/src/packages/user/user/repository/item/manifests.ts b/src/packages/user/user/repository/item/manifests.ts index 68b5a3e41b..0456ac8094 100644 --- a/src/packages/user/user/repository/item/manifests.ts +++ b/src/packages/user/user/repository/item/manifests.ts @@ -1,18 +1,16 @@ import { UMB_USER_ITEM_REPOSITORY_ALIAS, UMB_USER_ITEM_STORE_ALIAS } from './constants.js'; -import type { ManifestItemStore, ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const itemRepository: ManifestRepository = { - type: 'repository', - alias: UMB_USER_ITEM_REPOSITORY_ALIAS, - name: 'User Item Repository', - api: () => import('./user-item.repository.js'), -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_USER_ITEM_STORE_ALIAS, - name: 'User Item Store', - api: () => import('./user-item.store.js'), -}; - -export const manifests: Array = [itemRepository, itemStore]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_USER_ITEM_REPOSITORY_ALIAS, + name: 'User Item Repository', + api: () => import('./user-item.repository.js'), + }, + { + type: 'itemStore', + alias: UMB_USER_ITEM_STORE_ALIAS, + name: 'User Item Store', + api: () => import('./user-item.store.js'), + }, +]; diff --git a/src/packages/user/user/repository/item/types.ts b/src/packages/user/user/repository/item/types.ts index 9c89d8e36e..a0a8db0fa3 100644 --- a/src/packages/user/user/repository/item/types.ts +++ b/src/packages/user/user/repository/item/types.ts @@ -1,8 +1,10 @@ import type { UmbUserEntityType } from '../../entity.js'; +import type { UmbUserKindType } from '../../utils/index.js'; export interface UmbUserItemModel { avatarUrls: Array; entityType: UmbUserEntityType; + kind: UmbUserKindType; name: string; unique: string; } diff --git a/src/packages/user/user/repository/item/user-item.server.data-source.ts b/src/packages/user/user/repository/item/user-item.server.data-source.ts index 4856549327..d435990d00 100644 --- a/src/packages/user/user/repository/item/user-item.server.data-source.ts +++ b/src/packages/user/user/repository/item/user-item.server.data-source.ts @@ -33,5 +33,6 @@ const mapper = (item: UserItemResponseModel): UmbUserItemModel => { entityType: UMB_USER_ENTITY_TYPE, name: item.name, unique: item.id, + kind: item.kind, }; }; diff --git a/src/packages/user/user/repository/manifests.ts b/src/packages/user/user/repository/manifests.ts index d4a39f20e3..21f5f3562d 100644 --- a/src/packages/user/user/repository/manifests.ts +++ b/src/packages/user/user/repository/manifests.ts @@ -6,9 +6,8 @@ import { manifests as disableManifests } from './disable/manifests.js'; import { manifests as enableManifests } from './enable/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as unlockManifests } from './unlock/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ ...detailManifests, ...itemManifests, ...avatarManifests, diff --git a/src/packages/user/user/repository/new-password/manifests.ts b/src/packages/user/user/repository/new-password/manifests.ts index 49e526ae71..3850f6e450 100644 --- a/src/packages/user/user/repository/new-password/manifests.ts +++ b/src/packages/user/user/repository/new-password/manifests.ts @@ -1,11 +1,10 @@ import { UMB_NEW_USER_PASSWORD_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const newPasswordRepository: ManifestRepository = { - type: 'repository', - alias: UMB_NEW_USER_PASSWORD_REPOSITORY_ALIAS, - name: 'New User Password Repository', - api: () => import('./new-user-password.repository.js'), -}; - -export const manifests: Array = [newPasswordRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_NEW_USER_PASSWORD_REPOSITORY_ALIAS, + name: 'New User Password Repository', + api: () => import('./new-user-password.repository.js'), + }, +]; diff --git a/src/packages/user/user/repository/unlock/manifests.ts b/src/packages/user/user/repository/unlock/manifests.ts index 56cbf5bd57..73992d787c 100644 --- a/src/packages/user/user/repository/unlock/manifests.ts +++ b/src/packages/user/user/repository/unlock/manifests.ts @@ -1,11 +1,10 @@ import { UMB_UNLOCK_USER_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const unlockRepository: ManifestRepository = { - type: 'repository', - alias: UMB_UNLOCK_USER_REPOSITORY_ALIAS, - name: 'Unlock User Repository', - api: () => import('./unlock-user.repository.js'), -}; - -export const manifests: Array = [unlockRepository]; +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_UNLOCK_USER_REPOSITORY_ALIAS, + name: 'Unlock User Repository', + api: () => import('./unlock-user.repository.js'), + }, +]; diff --git a/src/packages/user/user/section-view/manifests.ts b/src/packages/user/user/section-view/manifests.ts deleted file mode 100644 index a9dbcd430b..0000000000 --- a/src/packages/user/user/section-view/manifests.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { UMB_USER_MANAGEMENT_SECTION_ALIAS } from '../../user-section/index.js'; -import type { ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; - -const sectionsViews: Array = [ - { - type: 'sectionView', - alias: 'Umb.SectionView.Users', - name: 'Users Section View', - js: () => import('./users-section-view.element.js'), - weight: 200, - meta: { - label: '#general_users', - pathname: 'users', - icon: 'icon-user', - }, - conditions: [ - { - alias: 'Umb.Condition.SectionAlias', - match: UMB_USER_MANAGEMENT_SECTION_ALIAS, - }, - ], - }, -]; - -export const manifests: Array = [...sectionsViews]; diff --git a/src/packages/user/user/section-view/users-section-view.element.ts b/src/packages/user/user/section-view/users-section-view.element.ts deleted file mode 100644 index 22f9d5069d..0000000000 --- a/src/packages/user/user/section-view/users-section-view.element.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { UMB_USER_COLLECTION_ALIAS } from '../collection/index.js'; -import { UMB_USER_ENTITY_TYPE, UMB_USER_ROOT_ENTITY_TYPE } from '../entity.js'; -import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; -import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { UmbRoute } from '@umbraco-cms/backoffice/router'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UmbCollectionElement } from '@umbraco-cms/backoffice/collection'; -import { UmbWorkspaceElement } from '@umbraco-cms/backoffice/workspace'; -import { UmbEntityContext } from '@umbraco-cms/backoffice/entity'; - -@customElement('umb-section-view-users') -export class UmbSectionViewUsersElement extends UmbLitElement { - #routes: UmbRoute[] = [ - { - path: 'collection', - component: () => { - const element = new UmbCollectionElement(); - const entityContext = new UmbEntityContext(element); - entityContext.setEntityType(UMB_USER_ROOT_ENTITY_TYPE); - entityContext.setUnique(null); - element.setAttribute('alias', UMB_USER_COLLECTION_ALIAS); - return element; - }, - }, - { - path: 'user', - component: () => { - const element = new UmbWorkspaceElement(); - element.setAttribute('entity-type', UMB_USER_ENTITY_TYPE); - return element; - }, - }, - { - path: '', - redirectTo: 'collection', - }, - { - path: `**`, - component: async () => (await import('@umbraco-cms/backoffice/router')).UmbRouteNotFoundElement, - }, - ]; - - override render() { - return html` `; - } - - static override styles = [ - UmbTextStyles, - css` - :host { - height: 100%; - } - - #router-slot { - height: calc(100% - var(--umb-header-layout-height)); - } - `, - ]; -} - -export default UmbSectionViewUsersElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-section-view-users': UmbSectionViewUsersElement; - } -} diff --git a/src/packages/user/user/types.ts b/src/packages/user/user/types.ts index b092e1b3e8..cbb8fe2fe2 100644 --- a/src/packages/user/user/types.ts +++ b/src/packages/user/user/types.ts @@ -1,4 +1,5 @@ import type { UmbUserEntityType } from './entity.js'; +import type { UmbUserKindType } from './utils/index.js'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import { type UserConfigurationResponseModel, @@ -26,6 +27,7 @@ export interface UmbUserDetailModel extends UmbUserStartNodesModel { updateDate: string | null; userGroupUniques: Array; userName: string; + kind: UmbUserKindType; } export interface UmbUserStartNodesModel { diff --git a/src/packages/user/user/utils/index.ts b/src/packages/user/user/utils/index.ts index 5d1478f0fa..4115ca2bbc 100644 --- a/src/packages/user/user/utils/index.ts +++ b/src/packages/user/user/utils/index.ts @@ -1 +1,8 @@ export * from './is-user.function.js'; + +export type UmbUserKindType = 'Default' | 'Api'; + +export const UmbUserKind = Object.freeze({ + DEFAULT: 'Default', + API: 'Api', +}); diff --git a/src/packages/user/user/workspace/manifests.ts b/src/packages/user/user/workspace/manifests.ts index d2c5c90ec4..76ad39a4ac 100644 --- a/src/packages/user/user/workspace/manifests.ts +++ b/src/packages/user/user/workspace/manifests.ts @@ -1,42 +1,4 @@ -import { UMB_USER_ENTITY_TYPE } from '../entity.js'; -import { UMB_USER_WORKSPACE_ALIAS } from './constants.js'; -import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { - ManifestWorkspaces, - ManifestWorkspaceActions, - ManifestTypes, -} from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as userManifests } from './user/manifests.js'; +import { manifests as userRootManifests } from './user-root/manifests.js'; -const workspace: ManifestWorkspaces = { - type: 'workspace', - kind: 'routable', - alias: UMB_USER_WORKSPACE_ALIAS, - name: 'User Workspace', - api: () => import('./user-workspace.context.js'), - meta: { - entityType: UMB_USER_ENTITY_TYPE, - }, -}; - -const workspaceActions: Array = [ - { - type: 'workspaceAction', - kind: 'default', - alias: 'Umb.WorkspaceAction.User.Save', - name: 'Save User Workspace Action', - api: UmbSubmitWorkspaceAction, - meta: { - label: '#buttons_save', - look: 'primary', - color: 'positive', - }, - conditions: [ - { - alias: 'Umb.Condition.WorkspaceAlias', - match: workspace.alias, - }, - ], - }, -]; - -export const manifests: Array = [workspace, ...workspaceActions]; +export const manifests: Array = [...userManifests, ...userRootManifests]; diff --git a/src/packages/user/user/workspace/user-root/manifests.ts b/src/packages/user/user/workspace/user-root/manifests.ts new file mode 100644 index 0000000000..355381d31b --- /dev/null +++ b/src/packages/user/user/workspace/user-root/manifests.ts @@ -0,0 +1,13 @@ +import { UMB_USER_ROOT_ENTITY_TYPE } from '../../entity.js'; + +export const manifests: Array = [ + { + type: 'workspace', + alias: 'Umb.Workspace.UserRoot', + name: 'User Root Workspace View', + element: () => import('./user-root-workspace.element.js'), + meta: { + entityType: UMB_USER_ROOT_ENTITY_TYPE, + }, + }, +]; diff --git a/src/packages/user/user/workspace/user-root/user-root-workspace.element.ts b/src/packages/user/user/workspace/user-root/user-root-workspace.element.ts new file mode 100644 index 0000000000..335f7b9590 --- /dev/null +++ b/src/packages/user/user/workspace/user-root/user-root-workspace.element.ts @@ -0,0 +1,31 @@ +import { UMB_USER_COLLECTION_ALIAS } from '../../collection/index.js'; +import { UMB_USER_ROOT_ENTITY_TYPE } from '../../entity.js'; +import { UmbEntityContext } from '@umbraco-cms/backoffice/entity'; +import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; + +const elementName = 'umb-user-root-workspace'; +@customElement(elementName) +export class UmbUserRootWorkspaceElement extends UmbLitElement { + constructor() { + super(); + // TODO: this.should happen automatically + const entityContext = new UmbEntityContext(this); + entityContext.setEntityType(UMB_USER_ROOT_ENTITY_TYPE); + entityContext.setUnique(null); + } + + override render() { + return html` + ; + `; + } +} + +export { UmbUserRootWorkspaceElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbUserRootWorkspaceElement; + } +} diff --git a/src/packages/user/user/workspace/actions/user-workspace-action-save.element.ts b/src/packages/user/user/workspace/user/actions/user-workspace-action-save.element.ts similarity index 100% rename from src/packages/user/user/workspace/actions/user-workspace-action-save.element.ts rename to src/packages/user/user/workspace/user/actions/user-workspace-action-save.element.ts diff --git a/src/packages/user/user/workspace/components/user-workspace-access/user-workspace-access.element.ts b/src/packages/user/user/workspace/user/components/user-workspace-access/user-workspace-access.element.ts similarity index 92% rename from src/packages/user/user/workspace/components/user-workspace-access/user-workspace-access.element.ts rename to src/packages/user/user/workspace/user/components/user-workspace-access/user-workspace-access.element.ts index 6be3f5d9b4..86197319e5 100644 --- a/src/packages/user/user/workspace/components/user-workspace-access/user-workspace-access.element.ts +++ b/src/packages/user/user/workspace/user/components/user-workspace-access/user-workspace-access.element.ts @@ -1,5 +1,5 @@ import { UMB_USER_WORKSPACE_CONTEXT } from '../../user-workspace.context-token.js'; -import type { UmbUserStartNodesModel } from '../../../types.js'; +import type { UmbUserStartNodesModel } from '../../../../types.js'; import { html, customElement, state, css } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @@ -28,7 +28,7 @@ export class UmbUserWorkspaceAccessElement extends UmbLitElement { } override render() { - return html` + return html`
Based on the assigned groups and start nodes, the user has access to the following nodes = []; - @query('#AvatarFileField') _avatarFileField?: HTMLInputElement; @@ -38,30 +35,11 @@ export class UmbUserAvatarElement extends UmbLitElement { this.#userWorkspaceContext!.data, async (user) => { this._user = user; - this.#setUserAvatarUrls(user); }, 'umbUserObserver', ); }; - #setUserAvatarUrls = async (user: UmbUserDetailModel | undefined) => { - if (!user || !user.avatarUrls || user.avatarUrls.length === 0) { - this._userAvatarUrls = []; - return; - } - - this._userAvatarUrls = [ - { - scale: '1x', - url: user.avatarUrls?.[3], - }, - { - scale: '2x', - url: user.avatarUrls?.[4], - }, - ]; - }; - #uploadAvatar = async () => { try { const selectedFile = await this.#selectAvatar(); @@ -95,35 +73,24 @@ export class UmbUserAvatarElement extends UmbLitElement { #deleteAvatar = async () => { if (!this.#userWorkspaceContext) return; - const { error } = await this.#userWorkspaceContext.deleteAvatar(); - - if (!error) { - this._userAvatarUrls = []; - } + this.#userWorkspaceContext.deleteAvatar(); }; - #getAvatarSrcset() { - let string = ''; - - this._userAvatarUrls?.forEach((url) => { - string += `${url.url} ${url.scale},`; - }); - return string; - } - #hasAvatar() { - return this._userAvatarUrls.length > 0; + if (!this._user) return false; + return this._user.avatarUrls.length > 0; } override render() { + if (!this._user) return nothing; return html`
- + .name=${this._user.name} + .kind=${this._user.kind} + .imgUrls=${this._user.avatarUrls ?? []}> ${this.#hasAvatar() @@ -143,7 +110,6 @@ export class UmbUserAvatarElement extends UmbLitElement { css` :host { display: block; - margin-bottom: var(--uui-size-space-4); } #Avatar { diff --git a/src/packages/user/user/workspace/user/components/user-workspace-client-credentials/user-workspace-client-credentials.element.ts b/src/packages/user/user/workspace/user/components/user-workspace-client-credentials/user-workspace-client-credentials.element.ts new file mode 100644 index 0000000000..7d77417056 --- /dev/null +++ b/src/packages/user/user/workspace/user/components/user-workspace-client-credentials/user-workspace-client-credentials.element.ts @@ -0,0 +1,162 @@ +import { UMB_USER_WORKSPACE_CONTEXT } from '../../user-workspace.context-token.js'; +import type { + UmbDeleteUserClientCredentialRequestArgs, + UmbUserClientCredentialModel, +} from '../../../../client-credential/index.js'; +import { UmbUserClientCredentialRepository } from '../../../../client-credential/index.js'; +import { UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL } from '../../../../client-credential/create/modal/create-user-client-credential-modal.token.js'; +import { UmbUserKind } from '../../../../utils/index.js'; +import { html, customElement, state, css, nothing } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UMB_MODAL_MANAGER_CONTEXT, umbConfirmModal } from '@umbraco-cms/backoffice/modal'; + +const elementName = 'umb-user-workspace-client-credentials'; +@customElement(elementName) +export class UmbUserWorkspaceClientCredentialsElement extends UmbLitElement { + @state() + private _userUnique?: string; + + @state() + private _userKind?: string; + + @state() + private _clientCredentials: UmbUserClientCredentialModel[] = []; + + #userWorkspaceContext?: typeof UMB_USER_WORKSPACE_CONTEXT.TYPE; + #modalManagerContext? = UMB_MODAL_MANAGER_CONTEXT.TYPE; + #userClientCredentialRepository = new UmbUserClientCredentialRepository(this); + + constructor() { + super(); + + this.consumeContext(UMB_USER_WORKSPACE_CONTEXT, (instance) => { + this.#userWorkspaceContext = instance; + + this.observe(this.#userWorkspaceContext.kind, (kind) => (this._userKind = kind), 'umbUserKindObserver'); + + this.observe( + this.#userWorkspaceContext.unique, + async (unique) => this.#onUserUniqueChange(unique), + 'umbUserUniqueObserver', + ); + }); + + this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (instance) => { + this.#modalManagerContext = instance; + }); + } + + #onUserUniqueChange(unique: string | undefined) { + if (unique && this._userUnique !== unique) { + this._userUnique = unique; + this.#loadClientCredentials(); + } + + if (!unique) { + this._userUnique = undefined; + this._clientCredentials = []; + } + } + + async #loadClientCredentials() { + if (!this._userUnique) throw new Error('User unique not available'); + + const { data } = await this.#userClientCredentialRepository.requestClientCredentials({ + user: { unique: this._userUnique }, + }); + + this._clientCredentials = data ?? []; + } + + #onAdd(event: Event) { + event.stopPropagation(); + if (!this.#modalManagerContext) throw new Error('Modal Manager Context not available'); + if (!this._userUnique) throw new Error('User unique not available'); + + const modalContext = this.#modalManagerContext.open(this, UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL, { + data: { + user: { + unique: this._userUnique, + }, + }, + }); + + modalContext.onSubmit().then(() => this.#loadClientCredentials()); + } + + async #onDelete(event: Event, client: UmbUserClientCredentialModel) { + event.stopPropagation(); + if (!this._userUnique) throw new Error('User unique not available'); + + await umbConfirmModal(this, { + headline: `Delete ${client.unique}`, + content: `Are you sure you want to delete ${client.unique}?`, + confirmLabel: 'Delete', + color: 'danger', + }); + + const payload: UmbDeleteUserClientCredentialRequestArgs = { + user: { unique: this._userUnique }, + client: { unique: client.unique }, + }; + + const { error } = await this.#userClientCredentialRepository.requestDelete(payload); + + if (!error) { + this.#loadClientCredentials(); + } + } + + override render() { + if (this._userKind !== UmbUserKind.API) return nothing; + + return html` +
Client Credentials
+ ${this._clientCredentials.map((client) => html` ${this.#renderItem(client)} `)} + +
`; + } + + #renderItem(client: UmbUserClientCredentialModel) { + return html` + + + this.#onDelete(event, client)} + label="Delete ${client.unique}" + compact + > + + `; + } + + static override styles = [ + UmbTextStyles, + css` + :host { + display: block; + } + + uui-input { + width: 100%; + } + + #add-button { + width: 100%; + } + `, + ]; +} + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbUserWorkspaceClientCredentialsElement; + } +} diff --git a/src/packages/user/user/workspace/components/user-workspace-info/user-workspace-info.element.ts b/src/packages/user/user/workspace/user/components/user-workspace-info/user-workspace-info.element.ts similarity index 78% rename from src/packages/user/user/workspace/components/user-workspace-info/user-workspace-info.element.ts rename to src/packages/user/user/workspace/user/components/user-workspace-info/user-workspace-info.element.ts index 471781d27e..8f5d2437b0 100644 --- a/src/packages/user/user/workspace/components/user-workspace-info/user-workspace-info.element.ts +++ b/src/packages/user/user/workspace/user/components/user-workspace-info/user-workspace-info.element.ts @@ -1,7 +1,8 @@ -import type { UmbUserDisplayStatus } from '../../../utils.js'; -import { TimeFormatOptions, getDisplayStateFromUserStatus } from '../../../utils.js'; +import type { UmbUserDisplayStatus } from '../../../../utils.js'; +import { TimeFormatOptions, getDisplayStateFromUserStatus } from '../../../../utils.js'; import { UMB_USER_WORKSPACE_CONTEXT } from '../../user-workspace.context-token.js'; -import type { UmbUserDetailModel } from '../../../types.js'; +import type { UmbUserDetailModel } from '../../../../types.js'; +import { UmbUserKind } from '../../../../utils/index.js'; import { html, customElement, state, css, repeat, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @@ -42,6 +43,13 @@ export class UmbUserWorkspaceInfoElement extends UmbLitElement { } this._userInfo = [ + { + labelKey: 'user_kind', + value: + user.kind === UmbUserKind.API + ? this.localize.term('user_userKindApi') + : this.localize.term('user_userKindDefault'), + }, { labelKey: 'user_lastLogin', value: user.lastLoginDate @@ -65,6 +73,11 @@ export class UmbUserWorkspaceInfoElement extends UmbLitElement { { labelKey: 'user_updateDate', value: this.localize.date(user.updateDate!, TimeFormatOptions) }, { labelKey: 'general_id', value: user.unique }, ]; + + if (user.kind === UmbUserKind.API) { + const include = ['user_kind', 'user_createDate', 'user_updateDate', 'general_id']; + this._userInfo = this._userInfo.filter((item) => include.includes(item.labelKey)); + } }; override render() { @@ -84,18 +97,20 @@ export class UmbUserWorkspaceInfoElement extends UmbLitElement { #renderInfoList() { return html` - ${repeat( - this._userInfo, - (item) => item.labelKey, - (item) => this.#renderInfoItem(item.labelKey, item.value), - )} + + ${repeat( + this._userInfo, + (item) => item.labelKey, + (item) => this.#renderInfoItem(item.labelKey, item.value), + )} + `; } #renderInfoItem(labelKey: string, value?: string | number) { return html` -