diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
index 64f87ab..97b2b66 100644
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -9,7 +9,7 @@ body:
- type: input
id: "PackageVersion"
attributes:
- label: "Which jcdcdev.Umbraco.BackOfficeOrganiser version are you using?"
+ label: "Which Umbraco.Community.BackOfficeOrganiser version are you using?"
description: "Leave blank if you're not sure: the latest version will be assumed."
validations:
required: false
diff --git a/.github/README.md b/.github/README.md
index a22033d..3b7b8e7 100644
--- a/.github/README.md
+++ b/.github/README.md
@@ -1,13 +1,48 @@
-# jcdcdev.Umbraco.BackOfficeOrganiser
+# Umbraco.Community.BackOfficeOrganiser
-[![Downloads](https://img.shields.io/nuget/dt/jcdcdev.Umbraco.BackOfficeOrganiser?color=cc9900)](https://www.nuget.org/packages/jcdcdev.Umbraco.BackOfficeOrganiser/)
-[![NuGet](https://img.shields.io/nuget/vpre/jcdcdev.Umbraco.BackOfficeOrganiser?color=0273B3)](https://www.nuget.org/packages/jcdcdev.Umbraco.BackOfficeOrganiser)
-[![GitHub license](https://img.shields.io/github/license/jcdcdev/jcdcdev.Umbraco.BackOfficeOrganiser?color=8AB803)](../LICENSE)
+[![Downloads](https://img.shields.io/nuget/dt/Umbraco.Community.BackOfficeOrganiser?color=cc9900)](https://www.nuget.org/packages/Umbraco.Community.BackOfficeOrganiser/)
+[![NuGet](https://img.shields.io/nuget/vpre/Umbraco.Community.BackOfficeOrganiser?color=0273B3)](https://www.nuget.org/packages/Umbraco.Community.BackOfficeOrganiser)
+[![GitHub license](https://img.shields.io/github/license/jcdcdev/Umbraco.Community.BackOfficeOrganiser?color=8AB803)](../LICENSE)
-Is your Backoffice a bit untidy?
+Is your Backoffice a bit untidy?
- Single-click organiser for
- - Data Types
- - Document Types
- - Media Types
- - Member Types
\ No newline at end of file
+ - Data Types
+ - Document Types
+ - Media Types
+ - Member Types
+
+
+
+## Quick Start
+
+- Go to the backoffice
+- Click `Back Office Organiser`
+- Select the types you wish to organise
+- Click submit and confirm
+- Refresh your page and enjoy a cleaner backoffice 😀
+
+## Configuration
+Add the following to your `appsettings.json` file
+
+```JSON
+ "BackOfficeOrganiser": {
+ "DataTypes": {
+ "InternalFolderName": "Internal",
+ "ThirdPartyFolderName": "Third Party",
+ "CustomFolderName": "Custom"
+ }
+ }
+```
+
+## Extending
+
+It is possible to add your own "organise actions". Documentation ComingSoon™️
+
+## Contributing
+
+Contributions to this package are most welcome! Please read the [Contributing Guidelines](CONTRIBUTING.md).
+
+## Acknowledgments (thanks!)
+
+- LottePitcher - [opinionated-package-starter](https://github.com/LottePitcher/opinionated-package-starter)
\ No newline at end of file
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a82b688..f037ee0 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,19 +1,19 @@
+name: Build
on:
pull_request:
branches: "*"
workflow_dispatch:
jobs:
- call-workflow-passing-data:
+ build:
+ permissions:
+ contents: write
uses: jcdcdev/jcdcdev.Github.UmbracoSimpleDeploy/.github/workflows/build-release-template.yml@main
with:
- config-path: .github/labeler.yml
- project_name: 'jcdcdev.Umbraco.BackOfficeOrganiser'
- artifact_name: 'jcdcdev.Umbraco.BackOfficeOrganiser'
- project_path: './src/jcdcdev.Umbraco.BackOfficeOrganiser/jcdcdev.Umbraco.BackOfficeOrganiser.csproj'
- npm_enabled: true
- npm_working_dir: './src/jcdcdev.Umbraco.BackOfficeOrganiser.Client/'
- npm_run_command: 'build'
+ project-name: 'Umbraco.Community.BackOfficeOrganiser'
+ project-path: './src/Umbraco.Community.BackOfficeOrganiser/Umbraco.Community.BackOfficeOrganiser.csproj'
+ npm-enabled: true
+ npm-working-dir: './src/Umbraco.Community.BackOfficeOrganiser.Client/'
+ npm-run-command: 'build'
deploy: false
secrets:
- NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
+ nuget-api-key: ${{ secrets.NUGET_API_KEY }}
\ No newline at end of file
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index a011a77..a6e2565 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,20 +1,20 @@
+name: Release
on:
pull_request:
- branches: "*"
- types: [closed]
+ branches: "main"
+ types: [ closed ]
workflow_dispatch:
jobs:
- call-workflow-passing-data:
- uses: jcdcdev/jcdcdev.Github.UmbracoSimpleDeploy/.github/workflows/reusable-workflow.yml@main
+ build_release:
+ permissions:
+ contents: write
+ uses: jcdcdev/jcdcdev.Github.UmbracoSimpleDeploy/.github/workflows/build-release-template.yml@main
with:
- config-path: .github/labeler.yml
- project_name: 'jcdcdev.Umbraco.BackOfficeOrganiser'
- artifact_name: 'jcdcdev.Umbraco.BackOfficeOrganiser'
- project_path: './src/jcdcdev.Umbraco.BackOfficeOrganiser/jcdcdev.Umbraco.BackOfficeOrganiser.csproj'
- npm_enabled: true
- npm_working_dir: './src/jcdcdev.Umbraco.BackOfficeOrganiser.Client/'
- npm_run_command: 'build'
+ project-name: 'Umbraco.Community.BackOfficeOrganiser'
+ project-path: './src/Umbraco.Community.BackOfficeOrganiser/Umbraco.Community.BackOfficeOrganiser.csproj'
+ npm-enabled: true
+ npm-working-dir: './src/Umbraco.Community.BackOfficeOrganiser.Client/'
+ npm-run-command: 'build'
deploy: true
secrets:
- NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
+ nuget-api-key: ${{ secrets.NUGET_API_KEY }}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 41fe718..98d17fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -355,5 +355,5 @@ MigrationBackup/
# Rider
src/.idea
*.sqlite.db*
-/src/jcdcdev.Umbraco.BackOfficeOrganiser/.idea/
-/src/jcdcdev.Umbraco.BackOfficeOrganiser/wwwroot/App_Plugins/jcdcdev.Umbraco.BackOfficeOrganiser/dist
+/src/Umbraco.Community.BackOfficeOrganiser/.idea/
+/src/Umbraco.Community.BackOfficeOrganiser/wwwroot/App_Plugins/Umbraco.Community.BackOfficeOrganiser/dist
diff --git a/docs/README_nuget.md b/docs/README_nuget.md
index 4bc51d0..d6041ed 100644
--- a/docs/README_nuget.md
+++ b/docs/README_nuget.md
@@ -1,13 +1,13 @@
-# jcdcdev.Umbraco.BackOfficeOrganiser
+# Umbraco.Community.BackOfficeOrganiser
-[![Downloads](https://img.shields.io/nuget/dt/jcdcdev.Umbraco.BackOfficeOrganiser?color=cc9900)](https://www.nuget.org/packages/jcdcdev.Umbraco.BackOfficeOrganiser/)
-[![NuGet](https://img.shields.io/nuget/vpre/jcdcdev.Umbraco.BackOfficeOrganiser?color=0273B3)](https://www.nuget.org/packages/jcdcdev.Umbraco.BackOfficeOrganiser)
-[![GitHub license](https://img.shields.io/github/license/jcdcdev/jcdcdev.Umbraco.BackOfficeOrganiser?color=8AB803)](https://github.com/jcdcdev/jcdcdev.Umbraco.BackOfficeOrganiser/blob/main/LICENSE)
+[![Downloads](https://img.shields.io/nuget/dt/Umbraco.Community.BackOfficeOrganiser?color=cc9900)](https://www.nuget.org/packages/Umbraco.Community.BackOfficeOrganiser/)
+[![NuGet](https://img.shields.io/nuget/vpre/Umbraco.Community.BackOfficeOrganiser?color=0273B3)](https://www.nuget.org/packages/Umbraco.Community.BackOfficeOrganiser)
+[![GitHub license](https://img.shields.io/github/license/jcdcdev/Umbraco.Community.BackOfficeOrganiser?color=8AB803)](https://github.com/jcdcdev/Umbraco.Community.BackOfficeOrganiser/blob/main/LICENSE)
-Is your Backoffice a bit untidy?
+Is your Backoffice a bit untidy?
- Single-click organiser for
- - Data Types
- - Document Types
- - Media Types
- - Member Types
\ No newline at end of file
+ - Data Types
+ - Document Types
+ - Media Types
+ - Member Types
\ No newline at end of file
diff --git a/docs/screenshots/backoffice.png b/docs/screenshots/backoffice.png
new file mode 100644
index 0000000..33b1822
Binary files /dev/null and b/docs/screenshots/backoffice.png differ
diff --git a/src/.editorconfig b/src/.editorconfig
new file mode 100644
index 0000000..8e325af
--- /dev/null
+++ b/src/.editorconfig
@@ -0,0 +1,15 @@
+[*]
+max_line_length = 200
+indent_style = tab
+indent_size = 4
+tab_width = 4
+
+# ReSharper properties
+resharper_braces_redundant = false
+resharper_csharp_indent_style = space
+resharper_csharp_wrap_after_declaration_lpar = true
+resharper_csharp_wrap_parameters_style = chop_if_long
+resharper_instance_members_qualify_declared_in = base_class
+resharper_method_or_operator_body = expression_body
+resharper_place_expr_method_on_single_line = true
+resharper_braces_for_ifelse = required
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.Client/.gitignore b/src/Umbraco.Community.BackOfficeOrganiser.Client/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.Client/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.Client/index.html b/src/Umbraco.Community.BackOfficeOrganiser.Client/index.html
new file mode 100644
index 0000000..5e73812
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.Client/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ Vite + Lit + TS
+
+
+
+
+
+ Vite + Lit
+
+
+
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.Client/package-lock.json b/src/Umbraco.Community.BackOfficeOrganiser.Client/package-lock.json
new file mode 100644
index 0000000..c3d4e69
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.Client/package-lock.json
@@ -0,0 +1,1171 @@
+{
+ "name": "backoffice-organiser",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "backoffice-organiser",
+ "version": "0.0.0",
+ "dependencies": {
+ "lit": "^2.7.6"
+ },
+ "devDependencies": {
+ "@umbraco-ui/uui": "^1.5.0",
+ "typescript": "^5.0.2",
+ "vite": "^4.4.5"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.18.20",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@lit-labs/ssr-dom-shim": {
+ "version": "1.1.2",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@lit/reactive-element": {
+ "version": "1.6.3",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.5",
+ "license": "MIT"
+ },
+ "node_modules/@umbraco-ui/uui": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.5.0.tgz",
+ "integrity": "sha512-V9pAdCsiaBy+Vq23sZd9JJCk+TX6xMsclJtTUWhwCq8/YUh6KNERbdoVfMYGUZ1yyJ/g+yddQsWlYOxHNp8msw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-action-bar": "1.5.0",
+ "@umbraco-ui/uui-avatar": "1.5.0",
+ "@umbraco-ui/uui-avatar-group": "1.5.0",
+ "@umbraco-ui/uui-badge": "1.5.0",
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-boolean-input": "1.5.0",
+ "@umbraco-ui/uui-box": "1.5.0",
+ "@umbraco-ui/uui-breadcrumbs": "1.5.0",
+ "@umbraco-ui/uui-button": "1.5.0",
+ "@umbraco-ui/uui-button-group": "1.5.0",
+ "@umbraco-ui/uui-button-inline-create": "1.5.0",
+ "@umbraco-ui/uui-card": "1.5.0",
+ "@umbraco-ui/uui-card-content-node": "1.5.0",
+ "@umbraco-ui/uui-card-media": "1.5.0",
+ "@umbraco-ui/uui-card-user": "1.5.0",
+ "@umbraco-ui/uui-caret": "1.5.0",
+ "@umbraco-ui/uui-checkbox": "1.5.0",
+ "@umbraco-ui/uui-color-area": "1.5.0",
+ "@umbraco-ui/uui-color-picker": "1.5.0",
+ "@umbraco-ui/uui-color-slider": "1.5.0",
+ "@umbraco-ui/uui-color-swatch": "1.5.0",
+ "@umbraco-ui/uui-color-swatches": "1.5.0",
+ "@umbraco-ui/uui-combobox": "1.5.0",
+ "@umbraco-ui/uui-combobox-list": "1.5.0",
+ "@umbraco-ui/uui-css": "1.5.0",
+ "@umbraco-ui/uui-dialog": "1.5.0",
+ "@umbraco-ui/uui-dialog-layout": "1.5.0",
+ "@umbraco-ui/uui-file-dropzone": "1.5.0",
+ "@umbraco-ui/uui-file-preview": "1.5.0",
+ "@umbraco-ui/uui-form": "1.5.0",
+ "@umbraco-ui/uui-form-layout-item": "1.5.0",
+ "@umbraco-ui/uui-form-validation-message": "1.5.0",
+ "@umbraco-ui/uui-icon": "1.5.0",
+ "@umbraco-ui/uui-icon-registry": "1.5.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.5.0",
+ "@umbraco-ui/uui-input": "1.5.0",
+ "@umbraco-ui/uui-input-file": "1.5.0",
+ "@umbraco-ui/uui-input-lock": "1.5.0",
+ "@umbraco-ui/uui-input-password": "1.5.0",
+ "@umbraco-ui/uui-keyboard-shortcut": "1.5.0",
+ "@umbraco-ui/uui-label": "1.5.0",
+ "@umbraco-ui/uui-loader": "1.5.0",
+ "@umbraco-ui/uui-loader-bar": "1.5.0",
+ "@umbraco-ui/uui-loader-circle": "1.5.0",
+ "@umbraco-ui/uui-menu-item": "1.5.0",
+ "@umbraco-ui/uui-modal": "1.5.0",
+ "@umbraco-ui/uui-pagination": "1.5.0",
+ "@umbraco-ui/uui-popover": "1.5.0",
+ "@umbraco-ui/uui-popover-container": "1.5.0",
+ "@umbraco-ui/uui-progress-bar": "1.5.0",
+ "@umbraco-ui/uui-radio": "1.5.0",
+ "@umbraco-ui/uui-range-slider": "1.5.0",
+ "@umbraco-ui/uui-ref": "1.5.0",
+ "@umbraco-ui/uui-ref-list": "1.5.0",
+ "@umbraco-ui/uui-ref-node": "1.5.0",
+ "@umbraco-ui/uui-ref-node-data-type": "1.5.0",
+ "@umbraco-ui/uui-ref-node-document-type": "1.5.0",
+ "@umbraco-ui/uui-ref-node-form": "1.5.0",
+ "@umbraco-ui/uui-ref-node-member": "1.5.0",
+ "@umbraco-ui/uui-ref-node-package": "1.5.0",
+ "@umbraco-ui/uui-ref-node-user": "1.5.0",
+ "@umbraco-ui/uui-scroll-container": "1.5.0",
+ "@umbraco-ui/uui-select": "1.5.0",
+ "@umbraco-ui/uui-slider": "1.5.0",
+ "@umbraco-ui/uui-symbol-expand": "1.5.0",
+ "@umbraco-ui/uui-symbol-file": "1.5.0",
+ "@umbraco-ui/uui-symbol-file-dropzone": "1.5.0",
+ "@umbraco-ui/uui-symbol-file-thumbnail": "1.5.0",
+ "@umbraco-ui/uui-symbol-folder": "1.5.0",
+ "@umbraco-ui/uui-symbol-lock": "1.5.0",
+ "@umbraco-ui/uui-symbol-more": "1.5.0",
+ "@umbraco-ui/uui-symbol-sort": "1.5.0",
+ "@umbraco-ui/uui-table": "1.5.0",
+ "@umbraco-ui/uui-tabs": "1.5.0",
+ "@umbraco-ui/uui-tag": "1.5.0",
+ "@umbraco-ui/uui-textarea": "1.5.0",
+ "@umbraco-ui/uui-toast-notification": "1.5.0",
+ "@umbraco-ui/uui-toast-notification-container": "1.5.0",
+ "@umbraco-ui/uui-toast-notification-layout": "1.5.0",
+ "@umbraco-ui/uui-toggle": "1.5.0",
+ "@umbraco-ui/uui-visually-hidden": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-action-bar": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.5.0.tgz",
+ "integrity": "sha512-2B4ONNRTEtoKjnBo8mtvQo2Y9WW7LDSx6q85UuA+YEWfMOgZ0hr0lFepPg+qq/q90/8ZIoItoxRo16UFrPVaHQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-button-group": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-avatar": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.5.0.tgz",
+ "integrity": "sha512-Iw4MQ2IMfJq590ydA6d2WXJ3gC7wO1vpA6tZj3T772B81LBZR31ftoMn3ho4cpavV5Nv4LvBnGhc2YajbsVn5A==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-avatar-group": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.5.0.tgz",
+ "integrity": "sha512-hlmqOGLQIN8uJMoLgT+RPHFWIxi8Ridhp/MrKgEjuNF6sTu4bCQyN28XuC9JD+4vBcSjU4a893QGvckalQxZiA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-avatar": "1.5.0",
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-badge": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.5.0.tgz",
+ "integrity": "sha512-6azqqcqRzVHXYz/JfAody6kDZQG3hiBTiCS8EEYY9GcFNqh8BvFLX4yK9R6zz5BVrjgT3qkmPpE2iIpqV6J58A==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-base": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.5.0.tgz",
+ "integrity": "sha512-HzKRvbf/aPA1y8l9ZLTvF5Up7W6jX8UwqVUr1B8lwckI6tgxOEFPqLya+U4papqZDh4wz/lysXSDESeVfUy8cw==",
+ "dev": true,
+ "dependencies": {
+ "lit": "^2.3.1"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-boolean-input": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.5.0.tgz",
+ "integrity": "sha512-uhIPzi7n3Z4Li3n688Q8v3725apwasZvPntm7kMdtssXay6hUHOcor+hkpPavGXRVxZGg+9gIYRM6sQWp853cA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-box": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.5.0.tgz",
+ "integrity": "sha512-uTHBvwzS9pRu0MVfN74+bux6lK0m1AmY/7xor9ez9/uzDyIK096D9jSLTQkfDyngIhqnV6kFLbG7PqcfQURFJQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-css": "1.4.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-box/node_modules/@umbraco-ui/uui-css": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz",
+ "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==",
+ "dev": true,
+ "dependencies": {
+ "lit": "^2.2.2"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-breadcrumbs": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.5.0.tgz",
+ "integrity": "sha512-mXuzt5o4NZ1E/HVTLYq+TklX9VQSH5zce+Ef1t2EgUE3EFQH0fwcdCRBC9SpklueNj46ngGHmVhyfv8ekne1Wg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-button": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.5.0.tgz",
+ "integrity": "sha512-ujicvfqUAN0JtBcgj8OG1YcyDaArTBdP5LvNsyYB8s0dePgcws71XzJ1mbHbXhuA386ioNue04yGDL+gSFlJ/A==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-button-group": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.5.0.tgz",
+ "integrity": "sha512-8yhFdfg7p1B8MM2fIxIlc0Mmhnx46scdGhqeRhvaQ2/dcdpVTI1j1hI2JyOM18TUhJeot4olLqwatlXxlFFT+A==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-button-inline-create": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.5.0.tgz",
+ "integrity": "sha512-J60vRf7nzQyRYKj+qYhMQR6LrQH6PyTrxyqyfDOVGzcWKzsTuRahxuVOIOzrs489cznwRYwL11jtK32MlrSjGQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-card": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.5.0.tgz",
+ "integrity": "sha512-RgpnQca3rpjMG/3DAmmrExI7gmNNHBNYwfjRqgCd/3QkBwRrtT/+jdppVsGRxxW5xAN90sJ/eLP7i3F5EfWlSA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-card-content-node": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.5.0.tgz",
+ "integrity": "sha512-aYGeTsppWT0KS9orrqkl9DF2v5l3gSGhBJZqIPiHVBOzczYIcgLWJbdAkaCgpwh1Zacbv3tnB/76965fd4EwPw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-card": "1.5.0",
+ "@umbraco-ui/uui-icon": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-card-media": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.5.0.tgz",
+ "integrity": "sha512-0KktT0IExh06W7QP1FMNqU+tpUL1qDwWeeA19PbZPXwHg15hbSW15a+Hc4aiwqlHYHOPT2gxXoiVc7jqWlMcSQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-card": "1.5.0",
+ "@umbraco-ui/uui-symbol-file": "1.5.0",
+ "@umbraco-ui/uui-symbol-folder": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-card-user": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.5.0.tgz",
+ "integrity": "sha512-xJjfkRHkt2xim1o+IvEPQiTpIQR+Z9+69096ssuGb3EkxyyUsDmH3aZZH6/+LKdtKR+7mPZVJub9TTWB4VRnwQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-avatar": "1.5.0",
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-card": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-caret": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.5.0.tgz",
+ "integrity": "sha512-4Apw4TMALEydo5o31gsIyICuPVyKvG/oySNup+5psU3apS0JDQ1RXCgGVDFoFxt5xzM+iJ6/J8ZOOILMVNFM6Q==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-checkbox": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.5.0.tgz",
+ "integrity": "sha512-Kve+XAIkSFG9kowbZI1MpDEKihpMTtD9q36pcHiVENqxL1+Tydy60yjy3tHV8o6uamJ8qjR6ZlvLttRwLId9tQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-boolean-input": "1.5.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-color-area": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.5.0.tgz",
+ "integrity": "sha512-FF6PrUCBo2nOg5iLbD+iB8aa3Vh+skIfqjFsPD80qLE0sKQ/53juZCnCbvvp7Z0YmIqwBlWP7xGEzJBGfS6OlA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "colord": "^2.9.3"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-color-picker": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.5.0.tgz",
+ "integrity": "sha512-y/IwXhtaQJWNjwnZtYTvv47+bsmUYJzFLtXqxGckcUmyJQvoZ6DDxslTSv1B9J3QTXU0zpakqpxPszlNNHUygw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "colord": "^2.9.3"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-color-slider": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.5.0.tgz",
+ "integrity": "sha512-nkUpUxfD7VlayBHirM56xKqi1h0Opg7Q2suzxEC4KLDVLO1+L0KzsDORn1tfeantSG0PahBMbuve1XOoOwCrAA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-color-swatch": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.5.0.tgz",
+ "integrity": "sha512-UDqlGmJIMGyn7C23q33v8dkJoISmIAL0XZNTiPkEhwGjKRlxkbexmGd4L4vFt+nhJDRrN86JoZ64BRTHVN8V7A==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.5.0",
+ "colord": "^2.9.3"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-color-swatches": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.5.0.tgz",
+ "integrity": "sha512-SvTKINbckKvqkkS4XnQfpELkW2x47CUa4PsnXqioXNIWP5sBJb9Kydiu0N1+lV57fAkteqNp+YY8mFxn3a6iPA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-color-swatch": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-combobox": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.5.0.tgz",
+ "integrity": "sha512-SoK4+yR0dJViXZinZ7iqowl6tvWPTTPSOBVE7FfOqOAgFoccOE/nQqjeNjSM0co80OKXqHUsh+kX/HwLjdyNEA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-button": "1.5.0",
+ "@umbraco-ui/uui-combobox-list": "1.5.0",
+ "@umbraco-ui/uui-icon": "1.5.0",
+ "@umbraco-ui/uui-scroll-container": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-combobox-list": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.5.0.tgz",
+ "integrity": "sha512-5cVlhnst3p6eEHFqn6O8LMswx3wdwpzlfAghleQJW+ZUIVo7ZPXznZz7+6yvnVWxnI7+xxFebHgC0KFxGMUVvg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-css": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.5.0.tgz",
+ "integrity": "sha512-jBSJg8KTWDG7DOVzz7A+UpMxMNHtddcLgt9k25vC4H+84xl+TN51RFTqF8C0JCZdWFK0eKWYlJsGqVrDfoVCcg==",
+ "dev": true,
+ "dependencies": {
+ "lit": "^2.2.2"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-dialog": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.5.0.tgz",
+ "integrity": "sha512-m6J5i+eiLdNApryIY1KW/4kyunAuTpkcWBjQmxyESmlDIqRGdW0lqaahQvcZSZHto03jleUdH5wYTLNgKIb/rw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-css": "1.4.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-dialog-layout": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.5.0.tgz",
+ "integrity": "sha512-vfZ3FMzYccGBVvSSXvCeoHYX+VU8QppXtFR2OGDZwU0b8BOKtfKTP/2VLPEWCG4vJYKPmqZESo3N9bZXWDkWSg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-dialog/node_modules/@umbraco-ui/uui-css": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz",
+ "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==",
+ "dev": true,
+ "dependencies": {
+ "lit": "^2.2.2"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-file-dropzone": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.5.0.tgz",
+ "integrity": "sha512-3rkTWidY4k2fyktRxfsMVTSvF+EIguv9p1Fga7v4DCNkplCp6OyJnwWby5F//+NvTHphaGchxZirOWMLgLyDog==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-symbol-file-dropzone": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-file-preview": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.5.0.tgz",
+ "integrity": "sha512-Re+R8uZSD3t3jUgZvzG/DfQtihss7aw+rG41IAjmRO9wBZuUAsowfgCd2OJnuOYJXeaqOYYl+QQr7pmR2a/HNQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-symbol-file": "1.5.0",
+ "@umbraco-ui/uui-symbol-file-thumbnail": "1.5.0",
+ "@umbraco-ui/uui-symbol-folder": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-form": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.5.0.tgz",
+ "integrity": "sha512-rbXFZzAg93/fzvNkxHavUr62DnSeWuVghd9CK9lhe6A9ER9cfjOcGn/INTYK3HHPBalay9IOq+WV1xxC5H6zyg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-form-layout-item": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.5.0.tgz",
+ "integrity": "sha512-owla3DWo1deVUEG0JzC7pE70h6Ll6lmbR+B+utbMdEgM6shEMdokpPioeCaXb8v7On9Whz+zJGAGBAYl/oyjug==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-form-validation-message": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-form-validation-message": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.5.0.tgz",
+ "integrity": "sha512-wuWCzttkUlEctqdJi9qzSzT8h10WvoK3+5usYB9V8NpdPYzOmbXU5RDYpoTWS0nPO56C6rlRlt3TH1khIQtPJA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-icon": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.5.0.tgz",
+ "integrity": "sha512-8Sz6PaYTC8KDCKj5ed+xnlnuh9/NOs0tQGPOma1bnVxGJN8LNjl+cJSLp+iU1m3Qq50H0TG+0K/dS3WUExjbZw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-icon-registry": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.5.0.tgz",
+ "integrity": "sha512-ei+HnaCKFjcCYjHYC0hqncY2vDfbgRkWhftOnrhqVZPJkE4omWDmVsLSGg/vm88ar1QleDmVj+CAa4J9T+uVeg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-icon": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-icon-registry-essential": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.5.0.tgz",
+ "integrity": "sha512-nxNEQDI4SNBXnI2/Ov60vcdzKFyRCInwZDFNAKyt31F1yTNM0EM0ne5yV4AqM6YPOKVoWzqFcLz2rx64X+oLvQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-icon-registry": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-input": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.5.0.tgz",
+ "integrity": "sha512-TlbSIRh2Z7xJxW0GEPENd369W1hHgr9Y8IIRE5RDllXzZc8yho4QXPJSDFQTiHMf41LIkOTfIkrQst5047FiXg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-input-file": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.5.0.tgz",
+ "integrity": "sha512-8h/qGED5KE7sb/YE7dHapZxcWXGm0qCPJft8AGOu/ZK/WdOUV1WHynLjV4yGVZgY9PVZGc+GQTzvdgwxxpltQw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-action-bar": "1.5.0",
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-button": "1.5.0",
+ "@umbraco-ui/uui-file-dropzone": "1.5.0",
+ "@umbraco-ui/uui-icon": "1.5.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-input-lock": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.5.0.tgz",
+ "integrity": "sha512-KBhZLLD+5qyibbcp0AiJo7V4e/+GiKouGz/rCk6/3vxEKpe8CtWekcHhjrdlsHcOluQeBcb1Pdqng0wC9UTO5Q==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-button": "1.5.0",
+ "@umbraco-ui/uui-icon": "1.5.0",
+ "@umbraco-ui/uui-input": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-input-password": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.5.0.tgz",
+ "integrity": "sha512-8wvQ/10jfufU0QWhK3gBVo5V/fzk4AuX8wPuieKZDY9Jnwkr7ugZ11DOJtaV3Az/4a0nrfF3TQ2gbBC7zHx2JA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.5.0",
+ "@umbraco-ui/uui-input": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-keyboard-shortcut": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.5.0.tgz",
+ "integrity": "sha512-KVTMHl6X0T4cUA3bUgM06xzwCN3VD5W3tZloF0i6e3PTHhkyCE5tKD/2Hizm56OGb+ifaI/oN3L1m7vEPC8IHw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-label": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.5.0.tgz",
+ "integrity": "sha512-Sc6XuMEyivBEQDfMOA6JT7nW5H4/eD6dzUtUNabOwzCG5GUpvTMfRccpdjmzOvl9VCGNWtE9ikqCBZWexWA6YA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-loader": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.5.0.tgz",
+ "integrity": "sha512-lhl1KqRbM5NTp08fvxgzOsbHFz04z8/WjaOar6lqNnL0R+CcFtVWQrv69Opht9Sj1NdHESmHEVnX0yodod2LhQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-loader-bar": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.5.0.tgz",
+ "integrity": "sha512-qUcVXi4i+ClozPc0Vfw7g90CLAQVj04F71xtatxDY5nhSWDEMEI6b/pXtN/B9TklkqfgE1mf/gRziFrpbVjLhA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-loader-circle": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.5.0.tgz",
+ "integrity": "sha512-059/DJDYbgOmr/LPXbiDaTkBcInmzUUu/YDtQt/SkZPCO33uuB7TDc+++cMgFYskdXBpqesNvVfZOUd4P6zJyA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-menu-item": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.5.0.tgz",
+ "integrity": "sha512-rmKuTz0Xgf0LyQRqs3tr2Z4O6oaNCd7UmI8kEbluk4yKpk5MU38BlFY9p39fpiEVUuzjcg9pBjrEyxrC/H9xjA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-loader-bar": "1.5.0",
+ "@umbraco-ui/uui-symbol-expand": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-modal": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.5.0.tgz",
+ "integrity": "sha512-q9g4rA8OYCPlOmZMES/O17NiAu18wtMxNHMuT6dADP2tuULE+TKT6A8vqC7aq8JkWOTAXRAFvTjTmcvm6L2pvg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-pagination": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.5.0.tgz",
+ "integrity": "sha512-I3gCWbyLRFvi5fAlezQZarvj7FuEZ7NVZbbKJxqEhbo1bwOxDMXlDNxIIrxSg3R8YAuDNP9Pbdw+rnQwupuOMQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-button": "1.5.0",
+ "@umbraco-ui/uui-button-group": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-popover": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.5.0.tgz",
+ "integrity": "sha512-Ab8UL4UGxTUn6hYbTqPrMtyGpQr3Xw1E/PVKG3+j+UrNw1Ro5piKgh0TahwxLnrsXWOPXfy53oaXNYsMGenndA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-popover-container": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover-container/-/uui-popover-container-1.5.0.tgz",
+ "integrity": "sha512-issjf86TwvwLA6sJOs5pLRMFY+WBc4oeTZiJMz5mhZ5C5UoRmU65L6RP/0UnzZ4ZGY2Gpdh2YatNnZ7hVMg5ig==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-progress-bar": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.5.0.tgz",
+ "integrity": "sha512-B/v7VsBBwo19Y+4NBRllt7Ls+WLQfx6vY57rfO8MQG7zxGznxpTSIYvd3wxdRuDsFQeVwwoYjF1/YBJ7iWUnEQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-radio": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.5.0.tgz",
+ "integrity": "sha512-3e52VZHcgHB/17eLTmiZwdm7ENgfX6AF4Dw+8H2x8jdRjyvt8lbykCq+6xewAZFsLAu7vTOEKtd2RhQFI2+hwg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-range-slider": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.5.0.tgz",
+ "integrity": "sha512-oHmIoF+KrHDWiOKonIWq7n94C6CzStBXrleS6iwCgWY++ayaHKCPlCuQIYp3BmGjnMQn8Ou0r2x/RuBPuraLVQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-ref": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.5.0.tgz",
+ "integrity": "sha512-wba/OP6b/mG5kp4bUgBBcBAAy3RWTbokVyjb52FR7nyqNMnIE/UBdgi0XeBx4j6lZeEbr5k5ZOGQ1knEHbPWyQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-ref-list": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.5.0.tgz",
+ "integrity": "sha512-sxs3hC97zDuFaV8mvXLAbqqtWk0kqDdHY9ORt9CxacdT36nQS58Sw60/plCryqoyp7P2cUZVtlEeff53OKOTCQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-ref-node": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.5.0.tgz",
+ "integrity": "sha512-bjmMgrIW+/4bmUXwMwFFaPrg2MeTxXssb6EpbBItJ+s0QhTEcTNyAD/DK3RlSMRE5VPO11sRwgCr06aIhklx0Q==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-icon": "1.5.0",
+ "@umbraco-ui/uui-ref": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-ref-node-data-type": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.5.0.tgz",
+ "integrity": "sha512-k14MI3cRELOmAwmtFeBzgCFw4+uin0JSqf85ZaqNkXSAmg+4I0ayUI6PGz+Jw66yGHvw3YNeUMKPmLO8l6M79A==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-ref-node": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-ref-node-document-type": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.5.0.tgz",
+ "integrity": "sha512-ouytDUaSls7Hsd0WaDy4wgfKMLpxlxx16WWyHlzX5lMyhkR+S3olyNZcgDRtz9xIQV+dVE3iDsUeQcNAigCdaw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-ref-node": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-ref-node-form": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.5.0.tgz",
+ "integrity": "sha512-D86A1+ScVGTer2kci6Y9X4ZAhCnm4kxUi7bCFH7dn7oi/Fq8fhs3PBuA7mr1FrZgrPvXVdW+Qa7ldxxU58NIWA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-ref-node": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-ref-node-member": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.5.0.tgz",
+ "integrity": "sha512-/UPmUNk6KP2unKnJKjr1qGkdPlFGTRj3K7H/mczCY7IbtzEccdEswWJCdUy/doIkAKbDdaqKe3/9HBoA3JtWPw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-ref-node": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-ref-node-package": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.5.0.tgz",
+ "integrity": "sha512-XkET8XKb3XxmjlIDrmtwm9o0QsaG81bcpUBEBA/wUC0OcJNrjTKyv6ciAVDP7HaW6XpN8XwsRbqdcrYwM8lXDQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-ref-node": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-ref-node-user": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.5.0.tgz",
+ "integrity": "sha512-9TrIr1JWw3cIkWfQrdv9iLRIqm/dd10d6uZEWaGJ/MuxyCywqMg/LSApV/NLapB4HXhIG4pGCiXvUa8OVW99ew==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-ref-node": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-scroll-container": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.5.0.tgz",
+ "integrity": "sha512-Xj5jnmCEDyRENmWtuPI1QYEMzrmi/9/LaajkPEIZEYVu2owI940F0viS5X+X/FvKehSxoSt9ainCwkLphgzNiw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-select": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.5.0.tgz",
+ "integrity": "sha512-lcMiIM6WxF5YraIXAqSpujx3OJzq6Snfik0BUypTWbUZdKVQTgLPh3A6We9PdD6K64AX2Zk4eH8yhQ+5GNImzQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-slider": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.5.0.tgz",
+ "integrity": "sha512-Mp6xz7C7GbAuQ1Totd2WLzvS56ekx4l31mAvUvor0GqrUF/hHxwfrGZOAWoBqoTdKQAFKbZVSM782a+cwNv3hg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-symbol-expand": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.5.0.tgz",
+ "integrity": "sha512-ZCuGAJT2qFs4wQ6Z+g/qV3obv/SbriMnaIOGy6XTTAuMlh2+aNAwm33Je0wYKCTwHNUmnl427wTMEkQcMziD4g==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-symbol-file": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.5.0.tgz",
+ "integrity": "sha512-ClB/lT/ebyUBmPqExB2ZinMOo/bCMEgjGxjkXy2THX4lOLUqvjDNEKLq99MAREKSh/mmGq7iB3Z/hd9/EDu75Q==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-symbol-file-dropzone": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.5.0.tgz",
+ "integrity": "sha512-0YL88rFFI5SOzzORtm1VtMihN4if7r0CIRe5Q3Sv0WwHjrMfIM08DeONCgN2j+ZoKgnTvt9KpE1OGigshouRug==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-symbol-file-thumbnail": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.5.0.tgz",
+ "integrity": "sha512-/qkf6AdAIsRmUfsBdtFkFk5wPWw6JvSVHvgk/UvZulHHb2F8TamPSJfb6voh86Vq8DzVIcy3ZbqatxH7LZBY1g==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-symbol-folder": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.5.0.tgz",
+ "integrity": "sha512-Sxt4n5IBT+XIqu2nJxP4RnhourwC+1X5bD40YgUBmqZJ9KV//tox4zo2elU19WCeRZFkklZGfn2smLY1FD0OGg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-symbol-lock": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.5.0.tgz",
+ "integrity": "sha512-EH7tEPCB+PTyjWbW+bdekk4M5hcjvYYpCKTnl3Pdpzh0mrxHPt9xa8908JB0tG8n0m0EcP+L7k8pthUmkgpK7A==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-symbol-more": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.5.0.tgz",
+ "integrity": "sha512-EuhU4kle4swMFZnsguWPz77rOtrk0IQcXuEA60fjzFGJCwsg7yyu9Ns209IEUsYh5ktstj8pXKT8+ZDila5umg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-symbol-sort": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.5.0.tgz",
+ "integrity": "sha512-/cifoZXuZbDmuZFPD0rr95Gpuy18DnboOYb/Ir6G3PANJ0fWOhzykHUrdx18ItLzhhwfE3dcZk4EWcGrEkfnfg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-table": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.5.0.tgz",
+ "integrity": "sha512-tjhpEzBYCQdgieoXcIgcOjROrScF0Ifutz/6gmpcdrXYbgZ+YkWX7dSLAeQj3fzGebaPbNYzGOmGZA9/opZ1rg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-tabs": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.5.0.tgz",
+ "integrity": "sha512-0D5NLufis9Tzc5Vr+fl8Z0wABHyz1Tep76Qnx0nXyYzAZvdNq2IxThHbGqA1cb+FjVJSKdfp6ONfiPc/SIVAzA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-button": "1.5.0",
+ "@umbraco-ui/uui-popover-container": "1.5.0",
+ "@umbraco-ui/uui-symbol-more": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-tag": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.5.0.tgz",
+ "integrity": "sha512-OZGitHjdn4coj1x7F7zfeIx5M9NhGd8+CqpD915V9Qm8YlTQxFLq1M8tqjIxaYAB5EcHXuyzRpSUCrt/WUvipA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-textarea": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.5.0.tgz",
+ "integrity": "sha512-+zDqbYKYfaiG0IXEaQatUaWsD4umtkTtbCMnqVPMhxwneVoE9d69ejat2zLFUI/ERm3nKMyq/NRfxzXJgzlDng==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-toast-notification": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.5.0.tgz",
+ "integrity": "sha512-cFjz4/uZudR3yuSqK5gqzAio55ZOOxQAOc8bC5keS0HXL84JcDwrEP4/Nz7X/uUNUqauYZG/iBUirAvqfv7Osw==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-button": "1.5.0",
+ "@umbraco-ui/uui-css": "1.4.0",
+ "@umbraco-ui/uui-icon": "1.5.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-toast-notification-container": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.5.0.tgz",
+ "integrity": "sha512-AB4kwgocUeDwkxiCYNH0AOMEtExDS6sEq9sk2i8AGDAEjprAB3m0HM9AlrA+T0V1GtSuv+Q1DEuCyxnVbuK0WQ==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-toast-notification": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-toast-notification-layout": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.5.0.tgz",
+ "integrity": "sha512-rM7cGCdMolhsndfZT9zGAPI9P3bl1lNpjDhWI124Mgx+KS8t2Q2h9O+7FGqFnjCTJOQES1pdQ+enl2NxCuEkNg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-css": "1.4.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-toast-notification-layout/node_modules/@umbraco-ui/uui-css": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz",
+ "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==",
+ "dev": true,
+ "dependencies": {
+ "lit": "^2.2.2"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-toast-notification/node_modules/@umbraco-ui/uui-css": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz",
+ "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==",
+ "dev": true,
+ "dependencies": {
+ "lit": "^2.2.2"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-toggle": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.5.0.tgz",
+ "integrity": "sha512-vsJSpBSmlrLzspCa1dGQGYXfc6RwTGTzSlNQdnzzP7qefVRP4GlOaqYV0TJhHMcYdbai+iEkrLznzJQvM9JFLA==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0",
+ "@umbraco-ui/uui-boolean-input": "1.5.0"
+ }
+ },
+ "node_modules/@umbraco-ui/uui-visually-hidden": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-visually-hidden/-/uui-visually-hidden-1.5.0.tgz",
+ "integrity": "sha512-3Imqxp8+hvirakPogqzvRlU+uhshpGRdrEMU7phCS5VGzDEl8NL1BhxR31EQAw7DspwbD5non3ZwbTwLYydfCg==",
+ "dev": true,
+ "dependencies": {
+ "@umbraco-ui/uui-base": "1.5.0"
+ }
+ },
+ "node_modules/colord": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+ "dev": true
+ },
+ "node_modules/esbuild": {
+ "version": "0.18.20",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
+ }
+ },
+ "node_modules/lit": {
+ "version": "2.8.0",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "node_modules/lit-element": {
+ "version": "3.3.3",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "node_modules/lit-html": {
+ "version": "2.8.0",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/postcss": {
+ "version": "8.4.31",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.29.4",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.2.2",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/vite": {
+ "version": "4.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.18.10",
+ "postcss": "^8.4.27",
+ "rollup": "^3.27.1"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@types/node": ">= 14",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ }
+ }
+}
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.Client/package.json b/src/Umbraco.Community.BackOfficeOrganiser.Client/package.json
new file mode 100644
index 0000000..8768eed
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.Client/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "backoffice-organiser",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite build --watch --emptyOutDir",
+ "build": "tsc && vite build --emptyOutDir",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "lit": "^2.7.6"
+ },
+ "devDependencies": {
+ "@umbraco-ui/uui": "^1.5.0",
+ "typescript": "^5.0.2",
+ "vite": "^4.4.5"
+ }
+}
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.Client/src/backoffice-organiser.ts b/src/Umbraco.Community.BackOfficeOrganiser.Client/src/backoffice-organiser.ts
new file mode 100644
index 0000000..ba09f7f
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.Client/src/backoffice-organiser.ts
@@ -0,0 +1,176 @@
+import {customElement, html, LitElement, property} from "lit-element";
+
+enum OrganiseType {
+ Unknown = 0,
+ ContentTypes = 1,
+ MediaTypes = 2,
+ MemberTypes = 3,
+ DataTypes = 4,
+ All = 99
+}
+
+@customElement('backoffice-organiser')
+export default class MyElement extends LitElement {
+
+ @property()
+ types: string[];
+
+ @property()
+ selectedType: OrganiseType = OrganiseType.Unknown;
+
+ @property()
+ loading: boolean = false;
+
+ @property()
+ confirmRequired: boolean = false;
+
+ @property()
+ modal: any = html``;
+
+ response: any = null;
+
+ constructor() {
+ super();
+ this.types = Object.keys(OrganiseType).filter((v) => isNaN(Number(v)) && v !== 'Unknown')
+ }
+
+ render() {
+ const toasts = [];
+ let modal = null;
+ if (this.confirmRequired) {
+ modal = this.renderConfirm();
+ }
+
+ if (this.response !== null) {
+ const message = this.response.message;
+ const success = !this.response.error;
+ const headline = success ? "Success" : "Error";
+ const toast = this.renderToast(headline, message, success);
+ toasts.push(toast);
+ }
+
+ const options = this.types.map(type => html`
+ ${type}`)
+
+ const disableButton = this.selectedType === OrganiseType.Unknown;
+ const form = html`
+
+
+
+
+
+ ${toasts}
+
+ `;
+ const loader = html`
+
+ `;
+ // noinspection CssUnresolvedCustomProperty
+ return html`
+
+ ${this.loading ? loader : form}
+
+
+
+ ${modal}
+
+ `;
+ }
+
+ onChange = (event: any) => {
+ const val = event.currentTarget.value;
+ this.selectedType = this.stringToEnum(val.toString())
+ };
+
+ onSubmit = (e: Event) => {
+ e.preventDefault();
+ debugger;
+ const form = e.currentTarget as HTMLFormElement;
+ const isValid = form.checkValidity();
+ if (!isValid) {
+ return;
+ }
+
+ this.confirmRequired = true;
+ };
+
+ organiseType = async () => {
+ this.confirmRequired = false;
+ this.loading = true;
+ // @ts-ignore
+ const umbracoPath = window.Umbraco.Sys.ServerVariables.umbracoSettings.umbracoPath;
+ const response = await fetch(`${umbracoPath}/backoffice/api/BackOfficeOrganiser/Organise?type=${this.selectedType}`, {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ });
+
+ const data = await response.json();
+ this.loading = false;
+ this.response = data;
+ };
+
+ stringToEnum = (value: string): OrganiseType => {
+ if (Object.values(OrganiseType).includes(value)) {
+ return value as unknown as OrganiseType;
+ }
+ return OrganiseType.All;
+ };
+
+ renderConfirm = () => html`
+
+
+
+
+ Organise ${this.selectedType}?
This cannot be undone!
+
+ Cancel
+
+ this.organiseType()}"
+ look="primary"
+ color="positive">Confirm
+
+
+
+
+ `;
+
+ private renderToast(headline: string, message: string, success: boolean = true) {
+ const color = success ? "success" : "danger";
+ return html`
+
+ ${headline}
+ ${message}
+
+ `;
+ }
+
+ private cancelOrganise() {
+ this.confirmRequired = false
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'backoffice-organiser': MyElement;
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.Client/src/index.css b/src/Umbraco.Community.BackOfficeOrganiser.Client/src/index.css
new file mode 100644
index 0000000..6eb049d
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.Client/src/index.css
@@ -0,0 +1,39 @@
+/*:root {*/
+/* font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;*/
+/* line-height: 1.5;*/
+/* font-weight: 400;*/
+
+/* color-scheme: light dark;*/
+/* color: rgba(255, 255, 255, 0.87);*/
+/* background-color: #242424;*/
+
+/* font-synthesis: none;*/
+/* text-rendering: optimizeLegibility;*/
+/* -webkit-font-smoothing: antialiased;*/
+/* -moz-osx-font-smoothing: grayscale;*/
+/* -webkit-text-size-adjust: 100%;*/
+/*}*/
+
+/*a {*/
+/* font-weight: 500;*/
+/* color: #646cff;*/
+/* text-decoration: inherit;*/
+/*}*/
+/*a:hover {*/
+/* color: #535bf2;*/
+/*}*/
+
+/*body {*/
+/* margin: 0;*/
+/* display: flex;*/
+/* place-items: center;*/
+/* min-width: 320px;*/
+/* min-height: 100vh;*/
+/*}*/
+
+/*@media (prefers-color-scheme: light) {*/
+/* :root {*/
+/* color: #213547;*/
+/* background-color: #ffffff;*/
+/* }*/
+/*}*/
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.Client/src/vite-env.d.ts b/src/Umbraco.Community.BackOfficeOrganiser.Client/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.Client/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.Client/tsconfig.json b/src/Umbraco.Community.BackOfficeOrganiser.Client/tsconfig.json
new file mode 100644
index 0000000..69e31ac
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.Client/tsconfig.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "experimentalDecorators": true,
+ "useDefineForClassFields": false,
+ "module": "ESNext",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"]
+}
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.Client/vite.config.ts b/src/Umbraco.Community.BackOfficeOrganiser.Client/vite.config.ts
new file mode 100644
index 0000000..d786428
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.Client/vite.config.ts
@@ -0,0 +1,15 @@
+import { defineConfig } from "vite";
+
+export default defineConfig({
+ build: {
+ lib: {
+ entry: "src/backoffice-organiser.ts", // your web component source file
+ formats: ["es"],
+ },
+ outDir: "../Umbraco.Community.BackOfficeOrganiser/wwwroot/App_Plugins/Umbraco.Community.BackOfficeOrganiser/dist/", // your web component will be saved in this location
+ sourcemap: true,
+ rollupOptions: {
+ external: [/^@umbraco-ui/],
+ },
+ },
+});
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/.gitignore b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/.gitignore
new file mode 100644
index 0000000..4376c8e
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/.gitignore
@@ -0,0 +1,481 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# Tye
+.tye/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
+
+##
+## Visual studio for Mac
+##
+
+
+# globs
+Makefile.in
+*.userprefs
+*.usertasks
+config.make
+config.status
+aclocal.m4
+install-sh
+autom4te.cache/
+*.tar.gz
+tarballs/
+test-results/
+
+# Mac bundle stuff
+*.dmg
+*.app
+
+# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
+# Windows thumbnail cache files
+Thumbs.db
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+##
+## Visual Studio Code
+##
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+##
+## Umbraco CMS
+##
+
+# JSON schema file for appsettings.json
+appsettings-schema.json
+
+# Packages created from the backoffice (package.xml/package.zip)
+/umbraco/Data/CreatedPackages/
+
+# Temp folder containing Examine indexes, NuCache, MediaCache, etc.
+/umbraco/Data/TEMP/
+
+# SQLite database files - enable if you don't want to commit your test DB to the repo
+#/umbraco/Data/*.sqlite.db
+#/umbraco/Data/*.sqlite.db-shm
+#/umbraco/Data/*.sqlite.db-wal
+
+# Log files
+/umbraco/Logs/
+
+# Media files
+/wwwroot/media/
+
+# Test Site App_Plugins packages folder (exclude here as in Umbraco.Community.BackOfficeOrganiser project)
+/App_Plugins/Umbraco.Community.BackOfficeOrganiser/
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Composer.cs b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Composer.cs
new file mode 100644
index 0000000..8714cff
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Composer.cs
@@ -0,0 +1,12 @@
+using Umbraco.Cms.Core.Composing;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+
+namespace Umbraco.Community.BackOfficeOrganiser.TestSite;
+
+public class Composer : IComposer
+{
+ public void Compose(IUmbracoBuilder builder)
+ {
+ builder.DataTypeOrganiseActions().Insert();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/ExampleDataTypeOrganiseAction.cs b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/ExampleDataTypeOrganiseAction.cs
new file mode 100644
index 0000000..5306c4c
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/ExampleDataTypeOrganiseAction.cs
@@ -0,0 +1,17 @@
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
+
+namespace Umbraco.Community.BackOfficeOrganiser.TestSite;
+
+public class ExampleDataTypeOrganiseAction : IDataTypeOrganiseAction
+{
+ public bool CanMove(IDataType dataType, IDataTypeService dataTypeService) => dataType.EditorAlias.InvariantStartsWith("Umbraco.Community");
+
+ public void Move(IDataType dataType, IDataTypeService dataTypeService)
+ {
+ var folder = dataTypeService.GetOrCreateFolder("Community");
+ dataTypeService.Move(dataType, folder.Id);
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Program.cs b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Program.cs
new file mode 100644
index 0000000..f785469
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Program.cs
@@ -0,0 +1,18 @@
+namespace Umbraco.Community.BackOfficeOrganiser.TestSite;
+
+public class Program
+{
+ public static void Main(string[] args)
+ => CreateHostBuilder(args)
+ .Build()
+ .Run();
+
+ public static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .ConfigureUmbracoDefaults()
+ .ConfigureWebHostDefaults(webBuilder =>
+ {
+ webBuilder.UseStaticWebAssets();
+ webBuilder.UseStartup();
+ });
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Properties/launchSettings.json b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Properties/launchSettings.json
new file mode 100644
index 0000000..89fb1ca
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Properties/launchSettings.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:59495",
+ "sslPort": 44315
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Umbraco.Web.UI": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "applicationUrl": "https://localhost:44315;http://localhost:59495",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Startup.cs b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Startup.cs
new file mode 100644
index 0000000..a2a21b2
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Startup.cs
@@ -0,0 +1,64 @@
+namespace Umbraco.Community.BackOfficeOrganiser.TestSite;
+
+public class Startup
+{
+ private readonly IConfiguration _config;
+ private readonly IWebHostEnvironment _env;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The web hosting environment.
+ /// The configuration.
+ ///
+ /// Only a few services are possible to be injected here https://github.com/dotnet/aspnetcore/issues/9337.
+ ///
+ public Startup(IWebHostEnvironment webHostEnvironment, IConfiguration config)
+ {
+ _env = webHostEnvironment ?? throw new ArgumentNullException(nameof(webHostEnvironment));
+ _config = config ?? throw new ArgumentNullException(nameof(config));
+ }
+
+ ///
+ /// Configures the services.
+ ///
+ /// The services.
+ ///
+ /// This method gets called by the runtime. Use this method to add services to the container.
+ /// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940.
+ ///
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddUmbraco(_env, _config)
+ .AddBackOffice()
+ .AddWebsite()
+ .AddComposers()
+ .Build();
+ }
+
+ ///
+ /// Configures the application.
+ ///
+ /// The application builder.
+ /// The web hosting environment.
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+ {
+ if (env.IsDevelopment())
+ {
+ app.UseDeveloperExceptionPage();
+ }
+
+ app.UseUmbraco()
+ .WithMiddleware(u =>
+ {
+ u.UseBackOffice();
+ u.UseWebsite();
+ })
+ .WithEndpoints(u =>
+ {
+ u.UseInstallerEndpoints();
+ u.UseBackOfficeEndpoints();
+ u.UseWebsiteEndpoints();
+ });
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Umbraco.Community.BackOfficeOrganiser.TestSite.csproj b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Umbraco.Community.BackOfficeOrganiser.TestSite.csproj
new file mode 100644
index 0000000..cb4773b
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Umbraco.Community.BackOfficeOrganiser.TestSite.csproj
@@ -0,0 +1,40 @@
+
+
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+
+ appsettings.json
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Views/Home.cshtml b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Views/Home.cshtml
new file mode 100644
index 0000000..5f28270
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Views/Home.cshtml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Views/_ViewImports.cshtml b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Views/_ViewImports.cshtml
new file mode 100644
index 0000000..1679f49
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/Views/_ViewImports.cshtml
@@ -0,0 +1,10 @@
+@using Umbraco.Extensions
+@using Umbraco.Community.BackOfficeOrganiser.TestSite
+@using Umbraco.Cms.Web.Common.PublishedModels
+@using Umbraco.Cms.Web.Common.Views
+@using Umbraco.Cms.Core.Models.PublishedContent
+@using Microsoft.AspNetCore.Html
+@using Smidge
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+@addTagHelper *, Smidge
+@inject SmidgeHelper SmidgeHelper
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/appsettings.Development.json b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/appsettings.Development.json
new file mode 100644
index 0000000..67d1185
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/appsettings.Development.json
@@ -0,0 +1,38 @@
+{
+ "$schema": "./appsettings-schema.json",
+ "Serilog": {
+ "MinimumLevel": {
+ "Default": "Information"
+ },
+ "WriteTo": [
+ {
+ "Name": "Async",
+ "Args": {
+ "configure": [
+ {
+ "Name": "Console"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "Umbraco": {
+ "CMS": {
+ "Content": {
+ "MacroErrors": "Throw"
+ },
+ "Hosting": {
+ "Debug": true
+ },
+ "ModelsBuilder": {
+ "ModelsMode": "SourceCodeAuto",
+ "ModelsDirectory": "~/Models"
+ },
+ "RuntimeMinification": {
+ "UseInMemoryCache": true,
+ "CacheBuster": "Timestamp"
+ }
+ }
+ }
+}
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/appsettings.json b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/appsettings.json
new file mode 100644
index 0000000..8fb28be
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/appsettings.json
@@ -0,0 +1,34 @@
+{
+ "$schema": "./appsettings-schema.json",
+ "Serilog": {
+ "MinimumLevel": {
+ "Default": "Information",
+ "Override": {
+ "Microsoft": "Warning",
+ "Microsoft.Hosting.Lifetime": "Information",
+ "System": "Warning"
+ }
+ }
+ },
+ "Umbraco": {
+ "CMS": {
+ "Global": {
+ "Id": "12890910-b1c3-4bba-9544-a9beeb851ed0",
+ "SanitizeTinyMce": true
+ },
+ "Content": {
+ "AllowEditInvariantFromNonDefault": true,
+ "ContentVersionCleanupPolicy": {
+ "EnableCleanup": true
+ }
+ }
+ }
+ },
+ "BackOfficeOrganiser": {
+ "DataTypes":{
+ "InternalFolderName" : "Internal",
+ "ThirdPartyFolderName" : "Third Party",
+ "CustomFolderName" : "Custom"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/articles.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/articles.config
new file mode 100644
index 0000000..3bffa54
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/articles.config
@@ -0,0 +1,20 @@
+
+
+
+ Blog
+ /Blog/Articles
+ false
+ ArticulateArchive
+ 2023-11-08T18:54:54
+
+ 0
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/authors.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/authors.config
new file mode 100644
index 0000000..263c8d8
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/authors.config
@@ -0,0 +1,16 @@
+
+
+
+ Blog
+ /Blog/Authors
+ false
+ ArticulateAuthors
+ 2023-11-08T18:54:54
+
+ 1
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/blog.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/blog.config
new file mode 100644
index 0000000..1ff6ce3
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/blog.config
@@ -0,0 +1,130 @@
+
+
+
+
+ /Blog
+ false
+ Articulate
+ 2023-11-08T18:54:54
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/jane-doe.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/jane-doe.config
new file mode 100644
index 0000000..933bc94
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/jane-doe.config
@@ -0,0 +1,31 @@
+
+
+
+ Authors
+ /Blog/Authors/JaneDoe
+ false
+ ArticulateAuthor
+ 2023-11-08T18:54:54
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/latte-art.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/latte-art.config
new file mode 100644
index 0000000..7573dbe
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/latte-art.config
@@ -0,0 +1,112 @@
+
+
+
+ Articles
+ /Blog/Articles/LatteArt
+ false
+ ArticulateMarkdown
+ 2023-11-08T18:54:54
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/welcome.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/welcome.config
new file mode 100644
index 0000000..d70a549
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Content/welcome.config
@@ -0,0 +1,90 @@
+
+
+
+ Articles
+ /Blog/Articles/Welcome
+ false
+ ArticulateMarkdown
+ 2023-11-08T18:54:54
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulate.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulate.config
new file mode 100644
index 0000000..2e44d5f
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulate.config
@@ -0,0 +1,361 @@
+
+
+
+ Articulate
+ icon-voice color-blue
+ folder.png
+
+ True
+ False
+ Nothing
+ false
+
+ False
+
+
+
+
+
+
+
+
+ ArticulateArchive
+ ArticulateAuthors
+
+
+
+ ca87ec55-e6cd-468a-8cfc-19505b275d8d
+ Blog Banner
+ blogBanner
+ 9448abd4-d071-4075-9e25-3198a71c935f
+ Umbraco.MediaPicker3
+ false
+
+
+ 3
+ Style
+ Nothing
+
+
+ false
+
+
+ 90c71fe7-04f3-4395-9572-1d29ad0b8a6a
+ Blog Description
+ blogDescription
+ c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3
+ Umbraco.TextArea
+ false
+
+
+ 0
+ Blog
+ Nothing
+
+
+ false
+
+
+ 75bb5e6a-95b4-4a05-b0d9-929b03862e16
+ Blog Logo
+ blogLogo
+ 9448abd4-d071-4075-9e25-3198a71c935f
+ Umbraco.MediaPicker3
+ false
+
+
+ 4
+ Style
+ Nothing
+
+
+ false
+
+
+ a37631fd-5cf5-40e8-a241-8bf7f568f93d
+ Blog Title
+ blogTitle
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ true
+
+
+ 2
+ Blog
+ Nothing
+
+
+ false
+
+
+ c5e8f5c5-17af-45db-8638-421655fc9b1f
+ Categories Page Name
+ categoriesPageName
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 1
+ Customize
+ Nothing
+
+
+ false
+
+
+ 6758881b-5231-435e-8811-ec9af3c6a0c8
+ Categories Url Name
+ categoriesUrlName
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ true
+
+
+ 2
+ Customize
+ Nothing
+
+
+ false
+
+
+ 7c1b48a4-da58-4373-bec0-f465ee21170a
+ Custom RSS Feed Url
+ customRssFeedUrl
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 1
+ Blog
+ Nothing
+
+
+ false
+
+
+ acff01a8-ef8a-40ba-870f-a8c22f5ad743
+ Disqus Shortname
+ disqusShortname
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 3
+ Blog
+ Nothing
+
+
+ false
+
+
+ 8afa83dc-9fa8-47c1-8ef0-92894dc4c335
+ Extract First Image to Property
+ extractFirstImage
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 0
+ MetaWeblog options
+ Nothing
+
+
+ false
+
+
+ 3da3c7b4-87c2-4f22-ae21-fdd893184bb7
+ Google Analytics Id
+ googleAnalyticsId
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 4
+ Blog
+ Nothing
+
+
+ false
+
+
+ 21919e0d-04d6-4469-b715-09a604348f09
+ Google Analytics Name
+ googleAnalyticsName
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 5
+ Blog
+ Nothing
+
+
+ false
+
+
+ a63912ff-21cc-44e5-b4e8-c621a8e69ed0
+ PageSize
+ pageSize
+ 2e6d3631-066e-44b8-aec4-96f09099b2b5
+ Umbraco.Integer
+ true
+
+
+ 0
+ Customize
+ Nothing
+
+
+ false
+
+
+ 110937db-7079-4cc8-ad6a-216b1934ddeb
+ Redirect Archive
+ redirectArchive
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 7
+ Customize
+ Nothing
+
+
+ false
+
+
+ 6a10c848-049c-4ae7-bd77-9598a01a4104
+ Search Page Name
+ searchPageName
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 5
+ Customize
+ Nothing
+
+
+ false
+
+
+ e30e1b02-cd6c-4971-a651-07d9ebb3c0c8
+ Search Url Name
+ searchUrlName
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 6
+ Customize
+ Nothing
+
+
+ false
+
+
+ 86e0c71e-2c6e-4490-b443-e575b141e960
+ Tags Page Name
+ tagsPageName
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 3
+ Customize
+ Nothing
+
+
+ false
+
+
+ cdce96a5-37ed-4a00-9f78-acc1d16138f5
+ Tags Url Name
+ tagsUrlName
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ true
+
+
+ 4
+ Customize
+ Nothing
+
+
+ false
+
+
+ 04967405-4d95-4274-8e23-5aecc086bfab
+ Theme
+ theme
+ 8b57d00e-5593-45d3-affe-24203b239bd3
+ Umbraco.Label
+ false
+
+
+ 2
+ Style
+ Nothing
+
+
+ false
+
+
+ ca793b84-e7aa-4ba3-b86f-f7223b5dece9
+ Use yyyy/mm/dd format for Url
+ useDateFormatForUrl
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 8
+ Customize
+ Nothing
+
+
+ false
+
+
+
+
+ 2c955c18-1f69-43d4-927c-477e91150261
+ Blog
+ blog
+ Group
+ 0
+
+
+ 4da5a5cc-caef-429e-8fa9-666c94f3509f
+ Customize
+ customize
+ Group
+ 1
+
+
+ 7845c935-7073-491f-90fa-9bfcc94fb75d
+ MetaWeblog options
+ metaWeblogOptions
+ Group
+ 3
+
+
+ c4508e72-cfa2-4135-a204-f7f25f2e734e
+ Style
+ style
+ Group
+ 2
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulatearchive.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulatearchive.config
new file mode 100644
index 0000000..237a8a3
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulatearchive.config
@@ -0,0 +1,44 @@
+
+
+
+ Articulate Archive
+ icon-list color-blue
+ folder.png
+
+ False
+ True
+ Nothing
+ false
+
+ False
+
+
+
+
+
+
+
+
+ ArticulateMarkdown
+ ArticulateRichText
+
+
+
+ 4a18e03b-b5ac-401b-ac32-5db074040f53
+ Umbraco Url Name
+ umbracoUrlName
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 0
+
+ Nothing
+
+
+ false
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulateauthor.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulateauthor.config
new file mode 100644
index 0000000..c88b98e
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulateauthor.config
@@ -0,0 +1,81 @@
+
+
+
+ Articulate Author
+ icon-umb-users color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+
+
+
+
+
+
+
+ fc46a7e9-1f2e-46f5-b7b3-07482ffbe7fb
+ Author Bio
+ authorBio
+ c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3
+ Umbraco.TextArea
+ false
+
+
+ 2
+ Author info
+ Nothing
+
+
+ false
+
+
+ 655a44ec-ed88-45df-a55a-e1bf94602704
+ Author Image
+ authorImage
+ 9448abd4-d071-4075-9e25-3198a71c935f
+ Umbraco.MediaPicker3
+ false
+
+
+ 0
+ Author info
+ Nothing
+
+
+ false
+
+
+ 1bba997c-18fc-4533-8599-4c665b2a6d77
+ Author Url
+ authorUrl
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 1
+ Author info
+ Nothing
+
+
+ false
+
+
+
+
+ 8831ee9f-e17b-4fff-8ae8-591233343848
+ Author info
+ authorInfo
+ Group
+ 0
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulateauthors.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulateauthors.config
new file mode 100644
index 0000000..3590853
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulateauthors.config
@@ -0,0 +1,26 @@
+
+
+
+ Articulate Authors
+ icon-user-females-alt color-blue
+ folder.png
+
+ False
+ True
+ Nothing
+ false
+
+ False
+
+
+
+
+
+
+
+
+ ArticulateAuthor
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulatemarkdown.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulatemarkdown.config
new file mode 100644
index 0000000..87c4419
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulatemarkdown.config
@@ -0,0 +1,51 @@
+
+
+
+ Articulate Markdown
+ icon-post-it color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+
+ ArticulatePost
+
+
+
+
+
+
+
+ 4793c2be-1de8-4a50-9eb8-f74def93141e
+ Markdown
+ markdown
+ 31d931c7-ce89-40a1-934e-664be25a1e8c
+ Umbraco.Label
+ false
+
+
+ 0
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ 184b5f5f-1a4d-4ab2-8172-b42c4f43fe0e
+ Content
+ content
+ Group
+ 0
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulatepost.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulatepost.config
new file mode 100644
index 0000000..c27b8ca
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulatepost.config
@@ -0,0 +1,224 @@
+
+
+
+ Articulate Post
+ icon-folder-outline color-light-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Compositions
+
+
+
+
+
+
+
+ 917ed7cf-66eb-4aed-9658-8a41c7be1a89
+ Author
+ author
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ true
+
+
+ 4
+ Post Attributes
+ Nothing
+
+
+ false
+
+
+ 3c97d9ff-0dcd-4599-a8a7-3583c35154a0
+ Categories
+ categories
+ a72aeb12-5b28-4a47-b99a-fde14d49c1ac
+ Umbraco.Tags
+ false
+
+
+ 2
+ Post Attributes
+ Nothing
+
+
+ false
+
+
+ aed6f7a4-151b-4c03-9be9-1a2cec11b0c7
+ Enable Comments
+ enableComments
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 6
+ Post Attributes
+ Nothing
+
+
+ false
+
+
+ 9850bfd4-a058-4647-9025-ae93e17c9a0a
+ Excerpt
+ excerpt
+ c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3
+ Umbraco.TextArea
+ false
+
+
+ 3
+ Post Attributes
+ Nothing
+
+
+ false
+
+
+ a80c5650-fdac-4522-81bb-55a7ef2fcfc5
+ Import Id
+ importId
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+
+ Nothing
+
+
+ false
+
+
+ e82e8983-f4ac-495a-a034-68c43a17ebb8
+ Post Image
+ postImage
+ 9448abd4-d071-4075-9e25-3198a71c935f
+ Umbraco.MediaPicker3
+ false
+
+
+ 0
+ Image
+ Nothing
+
+
+ false
+
+
+ a232f7d6-c0bc-43fd-bcb7-567a3df46ea5
+ Published Date
+ publishedDate
+ e4d66c0f-b935-4200-81f0-025f7256b89a
+ Umbraco.DateTime
+ false
+
+
+ 5
+ Post Attributes
+ Nothing
+
+
+ false
+
+
+ 81b7d1cc-df42-460d-8ac1-5b0f787b4632
+ Social Description
+ socialDescription
+ c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3
+ Umbraco.TextArea
+ false
+
+
+ 0
+ Meta Tags
+ Nothing
+
+
+ false
+
+
+ 12d69b88-b634-4d29-86de-4ee3af65b840
+ Tags
+ tags
+ f8404fdc-7667-4184-95c3-125b1d81314d
+ Umbraco.Tags
+ false
+
+
+ 0
+ Post Attributes
+ Nothing
+
+
+ false
+
+
+ 61fe937c-20a8-419c-8907-e9bf9108c7cf
+ umbracoUrlAlias
+ umbracoUrlAlias
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 0
+
+ Nothing
+
+
+ false
+
+
+ 87893659-a97c-4349-989b-f8c1c602e822
+ Slug
+ umbracoUrlName
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 1
+ Post Attributes
+ Nothing
+
+
+ false
+
+
+
+
+ 56af7e40-b9d7-4e24-bbe0-8d24ef026913
+ Image
+ image
+ Group
+ 2
+
+
+ 5fdad062-3e3c-4430-b318-92802621eefe
+ Post Attributes
+ postAttributes
+ Group
+ 0
+
+
+ 85ad1071-bdea-4ca9-83ef-57afb3141eb9
+ Meta Tags
+ metaTags
+ Group
+ 3
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulaterichtext.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulaterichtext.config
new file mode 100644
index 0000000..da3a196
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/ContentTypes/articulaterichtext.config
@@ -0,0 +1,51 @@
+
+
+
+ Articulate Rich Text
+ icon-post-it color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+
+ ArticulatePost
+
+
+
+
+
+
+
+ 2bfdcfce-e682-4dcf-88f5-7db7ce1ea7c0
+ Rich Text
+ richText
+ dbcb0707-021d-4cd4-ba8b-5cc891516c28
+ Umbraco.TinyMCE
+ false
+
+
+ 0
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ 4f49ea41-3e4b-43d7-99cd-50a6254c8bf4
+ Content
+ content
+ Group
+ 0
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ApprovedColor.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ApprovedColor.config
new file mode 100644
index 0000000..7739d89
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ApprovedColor.config
@@ -0,0 +1,13 @@
+
+
+
+ Approved Color
+ Umbraco.ColorPicker
+ Nvarchar
+ %f0%9f%94%92+Internal/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateCategories.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateCategories.config
new file mode 100644
index 0000000..2080aab
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateCategories.config
@@ -0,0 +1,14 @@
+
+
+
+ Articulate Categories
+ Umbraco.Tags
+ Nvarchar
+ %f0%9f%94%a7+Custom/Tags
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateImagePicker.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateImagePicker.config
new file mode 100644
index 0000000..e2a4e4d
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateImagePicker.config
@@ -0,0 +1,46 @@
+
+
+
+ Articulate Image Picker
+ Umbraco.MediaPicker3
+ Ntext
+ %f0%9f%94%a7+Custom/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateMarkdown.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateMarkdown.config
new file mode 100644
index 0000000..96377c9
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateMarkdown.config
@@ -0,0 +1,12 @@
+
+
+
+ Articulate Markdown
+ Umbraco.Label
+ Nvarchar
+ %f0%9f%a6%84+Third+Party/Articulate
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateRichText.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateRichText.config
new file mode 100644
index 0000000..9732e0d
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateRichText.config
@@ -0,0 +1,35 @@
+
+
+
+ Articulate Rich Text
+ Umbraco.TinyMCE
+ Ntext
+ %f0%9f%94%a7+Custom/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateTags.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateTags.config
new file mode 100644
index 0000000..6b4bc09
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateTags.config
@@ -0,0 +1,14 @@
+
+
+
+ Articulate Tags
+ Umbraco.Tags
+ Nvarchar
+ %f0%9f%94%a7+Custom/Tags
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateThemePicker.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateThemePicker.config
new file mode 100644
index 0000000..8db658c
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ArticulateThemePicker.config
@@ -0,0 +1,11 @@
+
+
+
+ Articulate Theme Picker
+ Umbraco.Label
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/CheckboxList.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/CheckboxList.config
new file mode 100644
index 0000000..f8c5247
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/CheckboxList.config
@@ -0,0 +1,12 @@
+
+
+
+ Checkbox list
+ Umbraco.CheckBoxList
+ Nvarchar
+ %f0%9f%94%92+Internal/List
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ContentPicker.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ContentPicker.config
new file mode 100644
index 0000000..2a7a30d
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ContentPicker.config
@@ -0,0 +1,14 @@
+
+
+
+ Content Picker
+ Umbraco.ContentPicker
+ Nvarchar
+ %f0%9f%94%92+Internal/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/DatePicker.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/DatePicker.config
new file mode 100644
index 0000000..50a7733
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/DatePicker.config
@@ -0,0 +1,13 @@
+
+
+
+ Date Picker
+ Umbraco.DateTime
+ Date
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/DatePickerWithTime.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/DatePickerWithTime.config
new file mode 100644
index 0000000..68db028
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/DatePickerWithTime.config
@@ -0,0 +1,13 @@
+
+
+
+ Date Picker with time
+ Umbraco.DateTime
+ Date
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Dropdown.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Dropdown.config
new file mode 100644
index 0000000..3e4cb17
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Dropdown.config
@@ -0,0 +1,13 @@
+
+
+
+ Dropdown
+ Umbraco.DropDown.Flexible
+ Nvarchar
+ %f0%9f%94%92+Internal/List
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/DropdownMultiple.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/DropdownMultiple.config
new file mode 100644
index 0000000..017c620
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/DropdownMultiple.config
@@ -0,0 +1,13 @@
+
+
+
+ Dropdown multiple
+ Umbraco.DropDown.Flexible
+ Nvarchar
+ %f0%9f%94%92+Internal/List
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ImageCropper.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ImageCropper.config
new file mode 100644
index 0000000..30c09ca
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ImageCropper.config
@@ -0,0 +1,12 @@
+
+
+
+ Image Cropper
+ Umbraco.ImageCropper
+ Ntext
+ %f0%9f%94%92+Internal/Image+Cropper
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ImageMediaPicker.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ImageMediaPicker.config
new file mode 100644
index 0000000..caa57a9
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ImageMediaPicker.config
@@ -0,0 +1,21 @@
+
+
+
+ Image Media Picker
+ Umbraco.MediaPicker3
+ Ntext
+ %f0%9f%94%92+Internal/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelBigint.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelBigint.config
new file mode 100644
index 0000000..fb319fb
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelBigint.config
@@ -0,0 +1,12 @@
+
+
+
+ Label (bigint)
+ Umbraco.Label
+ Nvarchar
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelDatetime.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelDatetime.config
new file mode 100644
index 0000000..b4a32be
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelDatetime.config
@@ -0,0 +1,12 @@
+
+
+
+ Label (datetime)
+ Umbraco.Label
+ Date
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelDecimal.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelDecimal.config
new file mode 100644
index 0000000..094a33c
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelDecimal.config
@@ -0,0 +1,12 @@
+
+
+
+ Label (decimal)
+ Umbraco.Label
+ Decimal
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelInteger.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelInteger.config
new file mode 100644
index 0000000..edd03a3
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelInteger.config
@@ -0,0 +1,12 @@
+
+
+
+ Label (integer)
+ Umbraco.Label
+ Integer
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelString.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelString.config
new file mode 100644
index 0000000..8aec8fa
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelString.config
@@ -0,0 +1,12 @@
+
+
+
+ Label (string)
+ Umbraco.Label
+ Nvarchar
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelTime.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelTime.config
new file mode 100644
index 0000000..5d42dc8
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/LabelTime.config
@@ -0,0 +1,12 @@
+
+
+
+ Label (time)
+ Umbraco.Label
+ Date
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ListViewContent.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ListViewContent.config
new file mode 100644
index 0000000..189c403
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ListViewContent.config
@@ -0,0 +1,55 @@
+
+
+
+ List View - Content
+ Umbraco.ListView
+ Nvarchar
+ %f0%9f%94%92+Internal/List+View
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ListViewMedia.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ListViewMedia.config
new file mode 100644
index 0000000..86ff92d
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ListViewMedia.config
@@ -0,0 +1,55 @@
+
+
+
+ List View - Media
+ Umbraco.ListView
+ Nvarchar
+ %f0%9f%94%92+Internal/List+View
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ListViewMembers.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ListViewMembers.config
new file mode 100644
index 0000000..15df958
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/ListViewMembers.config
@@ -0,0 +1,61 @@
+
+
+
+ List View - Members
+ Umbraco.ListView
+ Nvarchar
+ %f0%9f%94%92+Internal/List+View
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MediaPicker.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MediaPicker.config
new file mode 100644
index 0000000..681afbc
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MediaPicker.config
@@ -0,0 +1,21 @@
+
+
+
+ Media Picker
+ Umbraco.MediaPicker3
+ Ntext
+ %f0%9f%94%92+Internal/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MediaPickerLegacy.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MediaPickerLegacy.config
new file mode 100644
index 0000000..1413f4c
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MediaPickerLegacy.config
@@ -0,0 +1,16 @@
+
+
+
+ Media Picker (legacy)
+ Umbraco.MediaPicker
+ Ntext
+ %f0%9f%94%92+Internal/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MemberPicker.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MemberPicker.config
new file mode 100644
index 0000000..dfa1c22
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MemberPicker.config
@@ -0,0 +1,10 @@
+
+
+
+ Member Picker
+ Umbraco.MemberPicker
+ Nvarchar
+ %f0%9f%94%92+Internal/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultiURLPicker.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultiURLPicker.config
new file mode 100644
index 0000000..1eaee44
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultiURLPicker.config
@@ -0,0 +1,16 @@
+
+
+
+ Multi URL Picker
+ Umbraco.MultiUrlPicker
+ Ntext
+ %f0%9f%94%92+Internal/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultipleImageMediaPicker.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultipleImageMediaPicker.config
new file mode 100644
index 0000000..1b6e550
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultipleImageMediaPicker.config
@@ -0,0 +1,21 @@
+
+
+
+ Multiple Image Media Picker
+ Umbraco.MediaPicker3
+ Ntext
+ %f0%9f%94%92+Internal/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultipleMediaPicker.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultipleMediaPicker.config
new file mode 100644
index 0000000..c8a04d6
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultipleMediaPicker.config
@@ -0,0 +1,21 @@
+
+
+
+ Multiple Media Picker
+ Umbraco.MediaPicker3
+ Ntext
+ %f0%9f%94%92+Internal/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultipleMediaPickerLegacy.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultipleMediaPickerLegacy.config
new file mode 100644
index 0000000..7ab4e60
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/MultipleMediaPickerLegacy.config
@@ -0,0 +1,16 @@
+
+
+
+ Multiple Media Picker (legacy)
+ Umbraco.MediaPicker
+ Ntext
+ %f0%9f%94%92+Internal/Picker
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Numeric.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Numeric.config
new file mode 100644
index 0000000..4cb042a
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Numeric.config
@@ -0,0 +1,10 @@
+
+
+
+ Numeric
+ Umbraco.Integer
+ Integer
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Radiobox.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Radiobox.config
new file mode 100644
index 0000000..b1b128c
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Radiobox.config
@@ -0,0 +1,12 @@
+
+
+
+ Radiobox
+ Umbraco.RadioButtonList
+ Nvarchar
+ %f0%9f%94%92+Internal/List
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/RichtextEditor.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/RichtextEditor.config
new file mode 100644
index 0000000..0acb5ec
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/RichtextEditor.config
@@ -0,0 +1,16 @@
+
+
+
+ Richtext editor
+ Umbraco.TinyMCE
+ Ntext
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Tags.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Tags.config
new file mode 100644
index 0000000..a3e890f
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Tags.config
@@ -0,0 +1,14 @@
+
+
+
+ Tags
+ Umbraco.Tags
+ Ntext
+ %f0%9f%94%92+Internal/Tags
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Textarea.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Textarea.config
new file mode 100644
index 0000000..7ce5436
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Textarea.config
@@ -0,0 +1,13 @@
+
+
+
+ Textarea
+ Umbraco.TextArea
+ Ntext
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Textstring.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Textstring.config
new file mode 100644
index 0000000..0aa92e4
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Textstring.config
@@ -0,0 +1,12 @@
+
+
+
+ Textstring
+ Umbraco.TextBox
+ Nvarchar
+ %f0%9f%94%92+Internal/Text
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Truefalse.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Truefalse.config
new file mode 100644
index 0000000..5e960ac
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/Truefalse.config
@@ -0,0 +1,15 @@
+
+
+
+ True/false
+ Umbraco.TrueFalse
+ Integer
+ %f0%9f%94%92+Internal/Checkbox
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadArticle.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadArticle.config
new file mode 100644
index 0000000..2069a59
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadArticle.config
@@ -0,0 +1,25 @@
+
+
+
+ Upload Article
+ Umbraco.UploadField
+ Nvarchar
+ %f0%9f%94%92+Internal/Upload
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadAudio.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadAudio.config
new file mode 100644
index 0000000..468eeb7
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadAudio.config
@@ -0,0 +1,29 @@
+
+
+
+ Upload Audio
+ Umbraco.UploadField
+ Nvarchar
+ %f0%9f%94%92+Internal/Upload
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadFile.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadFile.config
new file mode 100644
index 0000000..1f9639d
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadFile.config
@@ -0,0 +1,12 @@
+
+
+
+ Upload File
+ Umbraco.UploadField
+ Nvarchar
+ %f0%9f%94%92+Internal/Upload
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadVectorGraphics.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadVectorGraphics.config
new file mode 100644
index 0000000..8653692
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadVectorGraphics.config
@@ -0,0 +1,17 @@
+
+
+
+ Upload Vector Graphics
+ Umbraco.UploadField
+ Nvarchar
+ %f0%9f%94%92+Internal/Upload
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadVideo.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadVideo.config
new file mode 100644
index 0000000..e4538eb
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/DataTypes/UploadVideo.config
@@ -0,0 +1,25 @@
+
+
+
+ Upload Video
+ Umbraco.UploadField
+ Nvarchar
+ %f0%9f%94%92+Internal/Upload
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Languages/en-us.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Languages/en-us.config
new file mode 100644
index 0000000..6f1a74d
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Languages/en-us.config
@@ -0,0 +1,7 @@
+
+
+ English (United States)
+ en-US
+ false
+ true
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/articulate.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/articulate.config
new file mode 100644
index 0000000..cea3c51
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/articulate.config
@@ -0,0 +1,13 @@
+
+
+
+
+ /Articulate
+ false
+ Folder
+ 2023-11-08T18:54:54
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/author.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/author.config
new file mode 100644
index 0000000..bd3221d
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/author.config
@@ -0,0 +1,17 @@
+
+
+
+ Articulate
+ /Articulate/Author
+ false
+ Image
+ 2023-11-08T18:54:54
+
+ 4
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/banner.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/banner.config
new file mode 100644
index 0000000..2eb38d8
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/banner.config
@@ -0,0 +1,17 @@
+
+
+
+ Articulate
+ /Articulate/Banner
+ false
+ Image
+ 2023-11-08T18:54:54
+
+ 0
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/logo.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/logo.config
new file mode 100644
index 0000000..4c6547f
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/logo.config
@@ -0,0 +1,17 @@
+
+
+
+ Articulate
+ /Articulate/Logo
+ false
+ Image
+ 2023-11-08T18:54:54
+
+ 1
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/post1.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/post1.config
new file mode 100644
index 0000000..aa5ee69
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/post1.config
@@ -0,0 +1,17 @@
+
+
+
+ Articulate
+ /Articulate/Post1
+ false
+ Image
+ 2023-11-08T18:54:54
+
+ 2
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/post2.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/post2.config
new file mode 100644
index 0000000..8cf1b4f
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/Media/post2.config
@@ -0,0 +1,17 @@
+
+
+
+ Articulate
+ /Articulate/Post2
+ false
+ Image
+ 2023-11-08T18:54:54
+
+ 3
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/file.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/file.config
new file mode 100644
index 0000000..bda9d71
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/file.config
@@ -0,0 +1,72 @@
+
+
+
+ File
+ icon-document
+ icon-document
+
+ True
+ False
+ Nothing
+ false
+ Internal
+
+
+
+
+ 0000001a-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 2
+ File
+
+
+ false
+
+
+ 00000019-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+ File
+
+
+ false
+
+
+ 00000018-0000-0000-0000-000000000000
+ File
+ umbracoFile
+ 84c6b441-31df-4ffe-b67e-67d5bc3ae65a
+ Umbraco.UploadField
+ true
+
+
+ 0
+ File
+
+
+ false
+
+
+
+
+
+ 50899f9c-023a-4466-b623-aba9049885fe
+ File
+ file
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/folder.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/folder.config
new file mode 100644
index 0000000..56f58b2
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/folder.config
@@ -0,0 +1,26 @@
+
+
+
+ Folder
+ icon-folder
+ icon-folder
+
+ True
+ False
+ Nothing
+ false
+ Internal
+
+
+
+
+ Folder
+ Image
+ File
+ umbracoMediaVideo
+ umbracoMediaAudio
+ umbracoMediaArticle
+ umbracoMediaVectorGraphics
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/image.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/image.config
new file mode 100644
index 0000000..20ef65b
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/image.config
@@ -0,0 +1,102 @@
+
+
+
+ Image
+ icon-picture
+ icon-picture
+
+ True
+ False
+ Nothing
+ false
+ Internal/Image
+
+
+
+
+ 00000009-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 3
+ Image
+
+
+ false
+
+
+ 0000000a-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 4
+ Image
+
+
+ false
+
+
+ 00000006-0000-0000-0000-000000000000
+ Image
+ umbracoFile
+ 1df9f033-e6d4-451f-b8d2-e0cbc50a836f
+ Umbraco.ImageCropper
+ true
+
+
+ 0
+ Image
+
+
+ false
+
+
+ 00000008-0000-0000-0000-000000000000
+ Height
+ umbracoHeight
+ 8e7f995c-bd81-4627-9932-c40e568ec788
+ Umbraco.Label
+ false
+
+
+ 2
+ Image
+
+
+ false
+
+
+ 00000007-0000-0000-0000-000000000000
+ Width
+ umbracoWidth
+ 8e7f995c-bd81-4627-9932-c40e568ec788
+ Umbraco.Label
+ false
+
+
+ 1
+ Image
+
+
+ false
+
+
+
+
+
+ 79ed4d07-254a-42cf-8fa9-ebe1c116a596
+ Image
+ image
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediaarticle.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediaarticle.config
new file mode 100644
index 0000000..88bafb9
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediaarticle.config
@@ -0,0 +1,72 @@
+
+
+
+ Article
+ icon-article
+ icon-article
+
+ True
+ False
+ Nothing
+ false
+ Internal/Text+File
+
+
+
+
+ 00000030-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 2
+ Article
+
+
+ false
+
+
+ 0000002f-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+ Article
+
+
+ false
+
+
+ 0000002e-0000-0000-0000-000000000000
+ Article
+ umbracoFile
+ bc1e266c-dac4-4164-bf08-8a1ec6a7143d
+ Umbraco.UploadField
+ true
+
+
+ 0
+ Article
+
+
+ false
+
+
+
+
+
+ 9af3bd65-f687-4453-9518-5f180d1898ec
+ Article
+ article
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediaaudio.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediaaudio.config
new file mode 100644
index 0000000..382aebd
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediaaudio.config
@@ -0,0 +1,72 @@
+
+
+
+ Audio
+ icon-sound-waves
+ icon-sound-waves
+
+ True
+ False
+ Nothing
+ false
+ Internal/Audio
+
+
+
+
+ 0000002d-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 2
+ Audio
+
+
+ false
+
+
+ 0000002c-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+ Audio
+
+
+ false
+
+
+ 0000002b-0000-0000-0000-000000000000
+ Audio
+ umbracoFile
+ 8f430dd6-4e96-447e-9dc0-cb552c8cd1f3
+ Umbraco.UploadField
+ true
+
+
+ 0
+ Audio
+
+
+ false
+
+
+
+
+
+ 335fb495-0a87-4e82-b902-30eb367b767c
+ Audio
+ audio
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediavectorgraphics.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediavectorgraphics.config
new file mode 100644
index 0000000..b1b7515
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediavectorgraphics.config
@@ -0,0 +1,72 @@
+
+
+
+ Vector Graphics (SVG)
+ icon-picture
+ icon-picture
+
+ True
+ False
+ Nothing
+ false
+ Internal/Image
+
+
+
+
+ 00000033-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 2
+ Vector Graphics
+
+
+ false
+
+
+ 00000032-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+ Vector Graphics
+
+
+ false
+
+
+ 00000031-0000-0000-0000-000000000000
+ Vector Graphics
+ umbracoFile
+ 215cb418-2153-4429-9aef-8c0f0041191b
+ Umbraco.UploadField
+ true
+
+
+ 0
+ Vector Graphics
+
+
+ false
+
+
+
+
+
+ f199b4d7-9e84-439f-8531-f87d9af37711
+ Vector Graphics
+ vectorGraphics
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediavideo.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediavideo.config
new file mode 100644
index 0000000..6cebbab
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MediaTypes/umbracomediavideo.config
@@ -0,0 +1,72 @@
+
+
+
+ Video
+ icon-video
+ icon-video
+
+ True
+ False
+ Nothing
+ false
+ Internal/Video
+
+
+
+
+ 0000002a-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 2
+ Video
+
+
+ false
+
+
+ 00000029-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+ Video
+
+
+ false
+
+
+ 00000028-0000-0000-0000-000000000000
+ Video
+ umbracoFile
+ 70575fe7-9812-4396-bbe1-c81a76db71b5
+ Umbraco.UploadField
+ true
+
+
+ 0
+ Video
+
+
+ false
+
+
+
+
+
+ 2f0a61b6-cf92-4ff4-b437-751ab35eb254
+ Video
+ video
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MemberTypes/member.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MemberTypes/member.config
new file mode 100644
index 0000000..bb1c2dc
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/MemberTypes/member.config
@@ -0,0 +1,44 @@
+
+
+
+ Member
+ icon-user
+ icon-user
+
+ False
+ False
+ Nothing
+ false
+
+
+
+
+ 2a280588-0000-0000-0000-000000000000
+ Comments
+ umbracoMemberComments
+ c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3
+ Umbraco.TextArea
+ false
+
+
+ 0
+ Membership
+ false
+ false
+ false
+
+
+ false
+
+
+
+
+
+ 0756729d-d665-46e3-b84a-37aceaa614f8
+ Membership
+ membership
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/usync.config b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/usync.config
new file mode 100644
index 0000000..a2ef0d8
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/uSync/v9/usync.config
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.TestSite/wwwroot/favicon.ico b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/wwwroot/favicon.ico
new file mode 100644
index 0000000..c0749dd
Binary files /dev/null and b/src/Umbraco.Community.BackOfficeOrganiser.TestSite/wwwroot/favicon.ico differ
diff --git a/src/Umbraco.Community.BackOfficeOrganiser.sln b/src/Umbraco.Community.BackOfficeOrganiser.sln
new file mode 100644
index 0000000..be2285b
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser.sln
@@ -0,0 +1,43 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33020.496
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5A6D3C2C-E986-4648-ABD7-ED442746EEBC}"
+ ProjectSection(SolutionItems) = preProject
+ ..\LICENSE = ..\LICENSE
+ ..\.github\README.md = ..\.github\README.md
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Community.BackOfficeOrganiser", "Umbraco.Community.BackOfficeOrganiser\Umbraco.Community.BackOfficeOrganiser.csproj", "{EC825C30-A30B-4ABF-AD64-FCA92C9EA75C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Community.BackOfficeOrganiser.TestSite", "Umbraco.Community.BackOfficeOrganiser.TestSite\Umbraco.Community.BackOfficeOrganiser.TestSite.csproj", "{989D710F-EC50-4EFF-AE9D-26A68694FDB5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EC825C30-A30B-4ABF-AD64-FCA92C9EA75C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EC825C30-A30B-4ABF-AD64-FCA92C9EA75C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EC825C30-A30B-4ABF-AD64-FCA92C9EA75C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EC825C30-A30B-4ABF-AD64-FCA92C9EA75C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {989D710F-EC50-4EFF-AE9D-26A68694FDB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {989D710F-EC50-4EFF-AE9D-26A68694FDB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {989D710F-EC50-4EFF-AE9D-26A68694FDB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {989D710F-EC50-4EFF-AE9D-26A68694FDB5}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {6F07004F-9903-4AEB-9ED0-BE57A0326D20}
+ EndGlobalSection
+EndGlobal
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Github", "Github", "{5830A86F-99DA-459D-82FD-A24613A9F22F}"
+ ProjectSection(SolutionItems) = preProject
+ ..\.github\workflows\release.yml = ..\.github\workflows\release.yml
+ ..\.github\workflows\build.yml = ..\.github\workflows\build.yml
+ EndProjectSection
+EndProject
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/BackOfficeOrganiserController.cs b/src/Umbraco.Community.BackOfficeOrganiser/BackOfficeOrganiserController.cs
new file mode 100644
index 0000000..0d1c0fa
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/BackOfficeOrganiserController.cs
@@ -0,0 +1,52 @@
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Umbraco.Cms.Web.BackOffice.Filters;
+using Umbraco.Cms.Web.Common.Attributes;
+using Umbraco.Cms.Web.Common.Authorization;
+using Umbraco.Cms.Web.Common.Controllers;
+using Umbraco.Cms.Web.Common.Filters;
+using Umbraco.Community.BackOfficeOrganiser.Models;
+
+namespace Umbraco.Community.BackOfficeOrganiser;
+
+[IsBackOffice]
+[UmbracoUserTimeoutFilter]
+[Authorize(Policy = AuthorizationPolicies.BackOfficeAccess)]
+[DisableBrowserCache]
+[UmbracoRequireHttps]
+public class BackOfficeOrganiserController : UmbracoApiController
+{
+ private readonly IBackOfficeOrganiserService _service;
+
+ public BackOfficeOrganiserController(IBackOfficeOrganiserService service)
+ {
+ _service = service;
+ }
+
+ public IActionResult Organise(string type)
+ {
+ var organiseType = DetermineOrganiseType(type);
+ var attempt = _service.Organise(organiseType);
+
+ if (!attempt.Success)
+ {
+ return BadRequest(OrganiseResponse.Fail($"Failed to organise {type}"));
+ }
+
+ return Ok(OrganiseResponse.Success($"Successfully organised {type}"));
+ }
+
+ private static OrganiseType DetermineOrganiseType(string type)
+ {
+ var organise = type.ToLowerInvariant() switch
+ {
+ "all" => OrganiseType.All,
+ "contenttypes" => OrganiseType.ContentTypes,
+ "mediatypes" => OrganiseType.MediaTypes,
+ "membertypes" => OrganiseType.MemberTypes,
+ "datatypes" => OrganiseType.DataTypes,
+ _ => OrganiseType.Unknown
+ };
+ return organise;
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/BackOfficeOrganiserService.cs b/src/Umbraco.Community.BackOfficeOrganiser/BackOfficeOrganiserService.cs
new file mode 100644
index 0000000..8b1e5ae
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/BackOfficeOrganiserService.cs
@@ -0,0 +1,95 @@
+using Microsoft.Extensions.Logging;
+using Umbraco.Cms.Core;
+using Umbraco.Community.BackOfficeOrganiser.Models;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.MediaTypes;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.MemberTypes;
+
+namespace Umbraco.Community.BackOfficeOrganiser;
+
+public class BackOfficeOrganiserService : IBackOfficeOrganiserService
+{
+ private readonly ContentTypeOrganiser _contentTypeOrganiser;
+ private readonly DataTypeOrganiser _dataTypeOrganiser;
+ private readonly ILogger _logger;
+ private readonly MediaTypeOrganiser _mediaTypeOrganiser;
+ private readonly MemberTypeOrganiser _memberTypeOrganiser;
+
+ public BackOfficeOrganiserService(
+ ILogger logger,
+ ContentTypeOrganiser contentTypeOrganiser,
+ MediaTypeOrganiser mediaTypeOrganiser,
+ MemberTypeOrganiser memberTypeOrganiser,
+ DataTypeOrganiser dataTypeOrganiser)
+ {
+ _logger = logger;
+ _contentTypeOrganiser = contentTypeOrganiser;
+ _mediaTypeOrganiser = mediaTypeOrganiser;
+ _memberTypeOrganiser = memberTypeOrganiser;
+ _dataTypeOrganiser = dataTypeOrganiser;
+ }
+
+ public Attempt Organise(OrganiseType organise)
+ {
+ try
+ {
+ switch (organise)
+ {
+ case OrganiseType.ContentTypes:
+ OrganiseContentTypes();
+ break;
+ case OrganiseType.MediaTypes:
+ OrganiseMediaTypes();
+ break;
+ case OrganiseType.MemberTypes:
+ OrganiseMemberTypes();
+ break;
+ case OrganiseType.DataTypes:
+ OrganiseDataTypes();
+ break;
+ case OrganiseType.All:
+ OrganiseAll();
+ break;
+ default:
+ throw new ArgumentOutOfRangeException(nameof(organise), organise,
+ "Failed to determine OrganiseType");
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "BackOfficeOrganiser: Failed to organise {OrganiseType}", organise);
+ return Attempt.Fail(ex);
+ }
+
+ return Attempt.Succeed(organise);
+ }
+
+ public void OrganiseDataTypes()
+ {
+ _dataTypeOrganiser.OrganiseType();
+ }
+
+ private void OrganiseAll()
+ {
+ OrganiseContentTypes();
+ OrganiseMediaTypes();
+ OrganiseMemberTypes();
+ OrganiseDataTypes();
+ }
+
+ private void OrganiseMemberTypes()
+ {
+ _memberTypeOrganiser.OrganiseType();
+ }
+
+ private void OrganiseMediaTypes()
+ {
+ _mediaTypeOrganiser.OrganiseType();
+ }
+
+ private void OrganiseContentTypes()
+ {
+ _contentTypeOrganiser.OrganiseType();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Composer.cs b/src/Umbraco.Community.BackOfficeOrganiser/Composer.cs
new file mode 100644
index 0000000..6a8d318
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Composer.cs
@@ -0,0 +1,34 @@
+using Microsoft.Extensions.DependencyInjection;
+using Umbraco.Cms.Core.Composing;
+using Umbraco.Cms.Core.DependencyInjection;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+using Umbraco.Community.BackOfficeOrganiser.Models;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.MediaTypes;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.MemberTypes;
+
+namespace Umbraco.Community.BackOfficeOrganiser;
+
+public class Composer : IComposer
+{
+ public void Compose(IUmbracoBuilder builder)
+ {
+ builder.Services.AddOptions()
+ .BindConfiguration(BackOfficeOrganiserOptions.SectionName);
+
+ builder.Services.AddSingleton();
+
+ builder.Services.AddSingleton();
+ builder.Services.AddSingleton();
+ builder.Services.AddSingleton();
+ builder.Services.AddSingleton();
+
+ builder.ManifestFilters().Append();
+
+ builder.DataTypeOrganiseActions().Append();
+ builder.ContentTypeOrganiseActions().Append();
+ builder.MediaTypeOrganiseActions().Append();
+ builder.MemberTypeOrganiseActions().Append();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Extensions/ContentTypeBaseServiceExtensions.cs b/src/Umbraco.Community.BackOfficeOrganiser/Extensions/ContentTypeBaseServiceExtensions.cs
new file mode 100644
index 0000000..bc0712f
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Extensions/ContentTypeBaseServiceExtensions.cs
@@ -0,0 +1,44 @@
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Extensions;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Extensions;
+
+public static class ContentTypeBaseServiceExtensions
+{
+ public static IEnumerable GetAllContainers(this IContentTypeBaseService service) where T : IContentTypeComposition =>
+ service.GetContainers(Array.Empty());
+
+ public static void DeleteAllEmptyContainers(this IContentTypeBaseService service) where T : IContentTypeComposition
+ {
+ var contentTypes = service.GetAll();
+ var lookup = contentTypes.GroupBy(x => x.ParentId).ToLookup(x => x.Key, x => x.Count());
+ var containers = service.GetAllContainers();
+
+ foreach (var container in containers)
+ {
+ var hasChildren = lookup.Contains(container.Id);
+
+ if (hasChildren)
+ {
+ continue;
+ }
+
+ service.DeleteContainer(container.Id);
+ }
+ }
+
+ public static EntityContainer GetOrCreateFolder(this IContentTypeBaseService service, string folder, int parentId = -1) where T : IContentTypeComposition
+ {
+ var container = service
+ .GetAllContainers()
+ .FirstOrDefault(x => x.ParentId == parentId && x.Name.InvariantEquals(folder));
+
+ if (container == null)
+ {
+ container = service.CreateContainer(parentId, new Guid(), folder).Result?.Entity;
+ }
+
+ return container ?? throw new Exception();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Extensions/DataTypeExtensions.cs b/src/Umbraco.Community.BackOfficeOrganiser/Extensions/DataTypeExtensions.cs
new file mode 100644
index 0000000..0cea46c
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Extensions/DataTypeExtensions.cs
@@ -0,0 +1,92 @@
+using Umbraco.Cms.Core;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Extensions;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Extensions;
+
+public static class DataTypeExtensions
+{
+ private static readonly Guid[] Guids =
+ {
+ Constants.DataTypes.Guids.ContentPickerGuid,
+ Constants.DataTypes.Guids.MemberPickerGuid,
+ Constants.DataTypes.Guids.MediaPickerGuid,
+ Constants.DataTypes.Guids.MultipleMediaPickerGuid,
+ Constants.DataTypes.Guids.MediaPicker3Guid,
+ Constants.DataTypes.Guids.MediaPicker3MultipleGuid,
+ Constants.DataTypes.Guids.MediaPicker3SingleImageGuid,
+ Constants.DataTypes.Guids.MediaPicker3MultipleImagesGuid,
+ Constants.DataTypes.Guids.RelatedLinksGuid,
+ Constants.DataTypes.Guids.MemberGuid,
+ Constants.DataTypes.Guids.ImageCropperGuid,
+ Constants.DataTypes.Guids.TagsGuid,
+ Constants.DataTypes.Guids.ListViewContentGuid,
+ Constants.DataTypes.Guids.ListViewMediaGuid,
+ Constants.DataTypes.Guids.ListViewMembersGuid,
+ Constants.DataTypes.Guids.DatePickerWithTimeGuid,
+ Constants.DataTypes.Guids.ApprovedColorGuid,
+ Constants.DataTypes.Guids.DropdownMultipleGuid,
+ Constants.DataTypes.Guids.RadioboxGuid,
+ Constants.DataTypes.Guids.DatePickerGuid,
+ Constants.DataTypes.Guids.DropdownGuid,
+ Constants.DataTypes.Guids.CheckboxListGuid,
+ Constants.DataTypes.Guids.CheckboxGuid,
+ Constants.DataTypes.Guids.NumericGuid,
+ Constants.DataTypes.Guids.RichtextEditorGuid,
+ Constants.DataTypes.Guids.TextstringGuid,
+ Constants.DataTypes.Guids.TextareaGuid,
+ Constants.DataTypes.Guids.UploadGuid,
+ Constants.DataTypes.Guids.UploadVideoGuid,
+ Constants.DataTypes.Guids.UploadAudioGuid,
+ Constants.DataTypes.Guids.UploadArticleGuid,
+ Constants.DataTypes.Guids.UploadVectorGraphicsGuid,
+ Constants.DataTypes.Guids.LabelStringGuid,
+ Constants.DataTypes.Guids.LabelIntGuid,
+ Constants.DataTypes.Guids.LabelBigIntGuid,
+ Constants.DataTypes.Guids.LabelDateTimeGuid,
+ Constants.DataTypes.Guids.LabelTimeGuid,
+ Constants.DataTypes.Guids.LabelDecimalGuid
+ };
+
+ private static readonly string[] Aliases =
+ {
+ Constants.PropertyEditors.Aliases.BlockList,
+ Constants.PropertyEditors.Aliases.CheckBoxList,
+ Constants.PropertyEditors.Aliases.ColorPicker,
+ Constants.PropertyEditors.Aliases.ColorPickerEyeDropper,
+ Constants.PropertyEditors.Aliases.ContentPicker,
+ Constants.PropertyEditors.Aliases.DateTime,
+ Constants.PropertyEditors.Aliases.DropDownListFlexible,
+ Constants.PropertyEditors.Aliases.Grid,
+ Constants.PropertyEditors.Aliases.ImageCropper,
+ Constants.PropertyEditors.Aliases.Integer,
+ Constants.PropertyEditors.Aliases.Decimal,
+ Constants.PropertyEditors.Aliases.ListView,
+ Constants.PropertyEditors.Aliases.MediaPicker,
+ Constants.PropertyEditors.Aliases.MediaPicker3,
+ Constants.PropertyEditors.Aliases.MultipleMediaPicker,
+ Constants.PropertyEditors.Aliases.MemberPicker,
+ Constants.PropertyEditors.Aliases.MemberGroupPicker,
+ Constants.PropertyEditors.Aliases.MultiNodeTreePicker,
+ Constants.PropertyEditors.Aliases.MultipleTextstring,
+ Constants.PropertyEditors.Aliases.Label,
+ Constants.PropertyEditors.Aliases.PickerRelations,
+ Constants.PropertyEditors.Aliases.RadioButtonList,
+ Constants.PropertyEditors.Aliases.Slider,
+ Constants.PropertyEditors.Aliases.Tags,
+ Constants.PropertyEditors.Aliases.TextBox,
+ Constants.PropertyEditors.Aliases.TextArea,
+ Constants.PropertyEditors.Aliases.TinyMce,
+ Constants.PropertyEditors.Aliases.Boolean,
+ Constants.PropertyEditors.Aliases.MarkdownEditor,
+ Constants.PropertyEditors.Aliases.UserPicker,
+ Constants.PropertyEditors.Aliases.UploadField,
+ Constants.PropertyEditors.Aliases.EmailAddress,
+ Constants.PropertyEditors.Aliases.NestedContent,
+ Constants.PropertyEditors.Aliases.MultiUrlPicker
+ };
+
+ public static bool IsUmbracoEditor(this IDataType dataType) => Aliases.InvariantContains(dataType.EditorAlias);
+
+ public static bool IsInternalUmbracoEditor(this IDataType dataType) => Guids.Contains(dataType.Key);
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Extensions/DataTypeServiceExtensions.cs b/src/Umbraco.Community.BackOfficeOrganiser/Extensions/DataTypeServiceExtensions.cs
new file mode 100644
index 0000000..2eca62f
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Extensions/DataTypeServiceExtensions.cs
@@ -0,0 +1,46 @@
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Extensions;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Extensions;
+
+public static class DataTypeServiceExtensions
+{
+ public static IEnumerable GetAllContainers(this IDataTypeService dataTypeService) => dataTypeService.GetContainers(Array.Empty());
+
+ public static void DeleteAllEmptyContainers(this IDataTypeService dataTypeService)
+ {
+ var dataTypes = dataTypeService.GetAll();
+ var lookup = dataTypes.GroupBy(x => x.ParentId).ToLookup(x => x.Key, x => x.Count());
+ var containers = dataTypeService.GetAllContainers();
+
+ foreach (var container in containers)
+ {
+ var hasChildren = lookup.Contains(container.Id);
+
+ if (hasChildren)
+ {
+ continue;
+ }
+
+ dataTypeService.DeleteContainer(container.Id);
+ }
+ }
+
+ public static EntityContainer GetOrCreateFolder(
+ this IDataTypeService dataTypeService,
+ string folder,
+ int parentId = -1)
+ {
+ var dts = dataTypeService
+ .GetAllContainers()
+ .FirstOrDefault(x => x.ParentId == parentId && x.Name.InvariantEquals(folder));
+
+ if (dts == null)
+ {
+ dts = dataTypeService.CreateContainer(parentId, new Guid(), folder).Result?.Entity;
+ }
+
+ return dts ?? throw new Exception();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Extensions/MediaTypeExtensions.cs b/src/Umbraco.Community.BackOfficeOrganiser/Extensions/MediaTypeExtensions.cs
new file mode 100644
index 0000000..f90b5c4
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Extensions/MediaTypeExtensions.cs
@@ -0,0 +1,25 @@
+using Umbraco.Cms.Core;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Extensions;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Extensions;
+
+public static class MediaTypeExtensions
+{
+ private static readonly string[] MediaTypes =
+ {
+ Constants.Conventions.MediaTypes.File,
+ Constants.Conventions.MediaTypes.Folder,
+ Constants.Conventions.MediaTypes.Image,
+ Constants.Conventions.MediaTypes.Video,
+ Constants.Conventions.MediaTypes.Audio,
+ Constants.Conventions.MediaTypes.Article,
+ Constants.Conventions.MediaTypes.VectorGraphics,
+ Constants.Conventions.MediaTypes.VideoAlias,
+ Constants.Conventions.MediaTypes.AudioAlias,
+ Constants.Conventions.MediaTypes.ArticleAlias,
+ Constants.Conventions.MediaTypes.VectorGraphicsAlias
+ };
+
+ public static bool IsInternal(this IMediaType mediaType) => MediaTypes.InvariantContains(mediaType.Alias);
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Extensions/UmbracoBuilderExtensions.cs b/src/Umbraco.Community.BackOfficeOrganiser/Extensions/UmbracoBuilderExtensions.cs
new file mode 100644
index 0000000..34fadc2
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Extensions/UmbracoBuilderExtensions.cs
@@ -0,0 +1,18 @@
+using Umbraco.Cms.Core.DependencyInjection;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.MediaTypes;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.MemberTypes;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Extensions;
+
+public static class UmbracoBuilderExtensions
+{
+ public static DataTypeOrganiseActionCollectionBuilder DataTypeOrganiseActions(this IUmbracoBuilder builder) => builder.WithCollectionBuilder();
+
+ public static ContentTypeOrganiseActionCollectionBuilder ContentTypeOrganiseActions(this IUmbracoBuilder builder) => builder.WithCollectionBuilder();
+
+ public static MediaTypeOrganiseActionCollectionBuilder MediaTypeOrganiseActions(this IUmbracoBuilder builder) => builder.WithCollectionBuilder();
+
+ public static MemberTypeOrganiseActionCollectionBuilder MemberTypeOrganiseActions(this IUmbracoBuilder builder) => builder.WithCollectionBuilder();
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/IBackOfficeOrganiserService.cs b/src/Umbraco.Community.BackOfficeOrganiser/IBackOfficeOrganiserService.cs
new file mode 100644
index 0000000..6069fef
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/IBackOfficeOrganiserService.cs
@@ -0,0 +1,9 @@
+using Umbraco.Cms.Core;
+using Umbraco.Community.BackOfficeOrganiser.Models;
+
+namespace Umbraco.Community.BackOfficeOrganiser;
+
+public interface IBackOfficeOrganiserService
+{
+ Attempt Organise(OrganiseType organise);
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/ManifestFilter.cs b/src/Umbraco.Community.BackOfficeOrganiser/ManifestFilter.cs
new file mode 100644
index 0000000..7e52359
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/ManifestFilter.cs
@@ -0,0 +1,16 @@
+using Umbraco.Cms.Core.Manifest;
+
+namespace Umbraco.Community.BackOfficeOrganiser;
+
+internal class ManifestFilter : IManifestFilter
+{
+ public void Filter(List manifests)
+ {
+ manifests.Add(new PackageManifest
+ {
+ PackageName = "Umbraco.Community.BackOfficeOrganiser",
+ Version = GetType().Assembly.GetName().Version?.ToString(3) ?? "0.1.0",
+ AllowPackageTelemetry = true
+ });
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Models/BackOfficeOrganiserOptions.cs b/src/Umbraco.Community.BackOfficeOrganiser/Models/BackOfficeOrganiserOptions.cs
new file mode 100644
index 0000000..133e9fa
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Models/BackOfficeOrganiserOptions.cs
@@ -0,0 +1,7 @@
+namespace Umbraco.Community.BackOfficeOrganiser.Models;
+
+public class BackOfficeOrganiserOptions
+{
+ public DataTypeOptions DataTypes { get; set; } = new();
+ public static string SectionName => "BackOfficeOrganiser";
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Models/DataTypeOptions.cs b/src/Umbraco.Community.BackOfficeOrganiser/Models/DataTypeOptions.cs
new file mode 100644
index 0000000..7b81b05
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Models/DataTypeOptions.cs
@@ -0,0 +1,8 @@
+namespace Umbraco.Community.BackOfficeOrganiser.Models;
+
+public class DataTypeOptions
+{
+ public string InternalFolderName { get; set; } = "🔒 Internal";
+ public string ThirdPartyFolderName { get; set; } = "🦄 Third Party";
+ public string CustomFolderName { get; set; } = "🔧 Custom";
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Models/OrganiseResponse.cs b/src/Umbraco.Community.BackOfficeOrganiser/Models/OrganiseResponse.cs
new file mode 100644
index 0000000..179106d
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Models/OrganiseResponse.cs
@@ -0,0 +1,18 @@
+namespace Umbraco.Community.BackOfficeOrganiser.Models;
+
+public class OrganiseResponse
+{
+ private OrganiseResponse(string? message, bool success)
+ {
+ Message = message ?? string.Empty;
+ Error = !success;
+ }
+
+ public bool Error { get; }
+
+ public string Message { get; }
+
+ public static OrganiseResponse Success(string? message = null) => new(message, true);
+
+ public static OrganiseResponse Fail(string? message = null) => new(message, false);
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Models/OrganiseType.cs b/src/Umbraco.Community.BackOfficeOrganiser/Models/OrganiseType.cs
new file mode 100644
index 0000000..a722372
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Models/OrganiseType.cs
@@ -0,0 +1,11 @@
+namespace Umbraco.Community.BackOfficeOrganiser.Models;
+
+public enum OrganiseType
+{
+ Unknown = 0,
+ ContentTypes = 1,
+ MediaTypes = 2,
+ MemberTypes = 3,
+ DataTypes = 4,
+ All = 99
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/BackOfficeOrganiserBase.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/BackOfficeOrganiserBase.cs
new file mode 100644
index 0000000..496770e
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/BackOfficeOrganiserBase.cs
@@ -0,0 +1,32 @@
+using Microsoft.Extensions.Logging;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+
+public abstract class BackOfficeOrganiserBase : IBackOfficeOrganiser
+{
+ public readonly ILogger Logger;
+
+ protected BackOfficeOrganiserBase(ILogger logger)
+ {
+ Logger = logger;
+ }
+
+ public void OrganiseType()
+ {
+ Logger.LogInformation("BackOfficeOrganiser: Cleanup for {Type} Started", typeof(T).Name);
+
+ try
+ {
+ Organise();
+ }
+ catch (Exception ex)
+ {
+ Logger.LogError(ex, "BackOfficeOrganiser: Cleanup for {Type} Failed", typeof(T).Name);
+ return;
+ }
+
+ Logger.LogInformation("BackOfficeOrganiser: Cleanup for {Type} Complete", typeof(T).Name);
+ }
+
+ public abstract void Organise();
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/ContentTypeOrganiseActionCollection.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/ContentTypeOrganiseActionCollection.cs
new file mode 100644
index 0000000..8d60d09
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/ContentTypeOrganiseActionCollection.cs
@@ -0,0 +1,11 @@
+using Umbraco.Cms.Core.Composing;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+
+public class ContentTypeOrganiseActionCollection : BuilderCollectionBase
+{
+ public ContentTypeOrganiseActionCollection(Func> items)
+ : base(items)
+ {
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/ContentTypeOrganiseActionCollectionBuilder.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/ContentTypeOrganiseActionCollectionBuilder.cs
new file mode 100644
index 0000000..fa6adc2
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/ContentTypeOrganiseActionCollectionBuilder.cs
@@ -0,0 +1,8 @@
+using Umbraco.Cms.Core.Composing;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+
+public class ContentTypeOrganiseActionCollectionBuilder : OrderedCollectionBuilderBase
+{
+ protected override ContentTypeOrganiseActionCollectionBuilder This => this;
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/ContentTypeOrganiser.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/ContentTypeOrganiser.cs
new file mode 100644
index 0000000..68ccb3a
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/ContentTypeOrganiser.cs
@@ -0,0 +1,34 @@
+using Microsoft.Extensions.Logging;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+
+public class ContentTypeOrganiser : BackOfficeOrganiserBase
+{
+ private readonly IContentTypeService _contentTypeService;
+ private readonly ContentTypeOrganiseActionCollection _organiseActions;
+
+ public ContentTypeOrganiser(
+ ILogger logger,
+ IContentTypeService contentTypeService,
+ ContentTypeOrganiseActionCollection organiseActions) : base(logger)
+ {
+ _contentTypeService = contentTypeService;
+ _organiseActions = organiseActions;
+ }
+
+ public override void Organise()
+ {
+ var contentTypes = _contentTypeService.GetAll().ToList();
+
+ foreach (var contentType in contentTypes)
+ {
+ var organiser = _organiseActions.FirstOrDefault(x => x.CanMove(contentType, _contentTypeService));
+ organiser?.Move(contentType, _contentTypeService);
+ }
+
+ _contentTypeService.DeleteAllEmptyContainers();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/DefaultContentTypeOrganiseAction.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/DefaultContentTypeOrganiseAction.cs
new file mode 100644
index 0000000..09d434b
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/DefaultContentTypeOrganiseAction.cs
@@ -0,0 +1,38 @@
+using StackExchange.Profiling.Internal;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+
+public class DefaultContentTypeOrganiseAction : IContentTypeOrganiseAction
+{
+ public bool CanMove(IContentType contentType, IContentTypeService contentTypeService) => !contentType.IsContainer;
+
+ public void Move(IContentType contentType, IContentTypeService contentTypeService)
+ {
+ var folderId = -1;
+ var folderName = string.Empty;
+ var isComposition = contentTypeService.GetComposedOf(contentType.Id).Any();
+
+ if (contentType.AllowedTemplates?.Any() ?? false)
+ {
+ folderName = "Pages";
+ }
+ else if (isComposition)
+ {
+ folderName = "Compositions";
+ }
+ else if (contentType.IsElement)
+ {
+ folderName = "Element Types";
+ }
+
+ if (!folderName.IsNullOrWhiteSpace())
+ {
+ folderId = contentTypeService.GetOrCreateFolder(folderName).Id;
+ }
+
+ contentTypeService.Move(contentType, folderId);
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/IContentTypeOrganiseAction.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/IContentTypeOrganiseAction.cs
new file mode 100644
index 0000000..73f6558
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/ContentTypes/IContentTypeOrganiseAction.cs
@@ -0,0 +1,10 @@
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+
+public interface IContentTypeOrganiseAction
+{
+ public bool CanMove(IContentType contentType, IContentTypeService contentTypeService);
+ public void Move(IContentType contentType, IContentTypeService contentTypeService);
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DataTypeOrganiseActionCollection.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DataTypeOrganiseActionCollection.cs
new file mode 100644
index 0000000..0cd7e42
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DataTypeOrganiseActionCollection.cs
@@ -0,0 +1,11 @@
+using Umbraco.Cms.Core.Composing;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
+
+public class DataTypeOrganiseActionCollection : BuilderCollectionBase
+{
+ public DataTypeOrganiseActionCollection(Func> items)
+ : base(items)
+ {
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DataTypeOrganiseActionCollectionBuilder.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DataTypeOrganiseActionCollectionBuilder.cs
new file mode 100644
index 0000000..37f3800
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DataTypeOrganiseActionCollectionBuilder.cs
@@ -0,0 +1,8 @@
+using Umbraco.Cms.Core.Composing;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
+
+public class DataTypeOrganiseActionCollectionBuilder : OrderedCollectionBuilderBase
+{
+ protected override DataTypeOrganiseActionCollectionBuilder This => this;
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DataTypeOrganiser.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DataTypeOrganiser.cs
new file mode 100644
index 0000000..9555dc6
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DataTypeOrganiser.cs
@@ -0,0 +1,35 @@
+using Microsoft.Extensions.Logging;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
+
+public class DataTypeOrganiser : BackOfficeOrganiserBase
+{
+ private readonly IDataTypeService _dataTypeService;
+ private readonly DataTypeOrganiseActionCollection _organiseActions;
+
+ public DataTypeOrganiser(
+ ILogger logger,
+ IDataTypeService dataTypeService,
+ DataTypeOrganiseActionCollection organiseActions) : base(logger)
+ {
+ _dataTypeService = dataTypeService;
+ _organiseActions = organiseActions;
+ }
+
+ public override void Organise()
+ {
+ var dataTypes = _dataTypeService.GetAll().ToList();
+
+ foreach (var dataType in dataTypes)
+ {
+ var organiser = _organiseActions.FirstOrDefault(x => x.CanMove(dataType, _dataTypeService));
+ organiser?.Move(dataType, _dataTypeService);
+ }
+
+ _dataTypeService.DeleteAllEmptyContainers();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DefaultDataTypeOrganiseAction.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DefaultDataTypeOrganiseAction.cs
new file mode 100644
index 0000000..e1ead55
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/DefaultDataTypeOrganiseAction.cs
@@ -0,0 +1,111 @@
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Umbraco.Cms.Core;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+using Umbraco.Community.BackOfficeOrganiser.Models;
+using Umbraco.Extensions;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
+
+public class DefaultDataTypeOrganiseAction : IDataTypeOrganiseAction
+{
+ private readonly ILogger _logger;
+ private readonly BackOfficeOrganiserOptions _options;
+
+ public DefaultDataTypeOrganiseAction(IOptions options, ILogger logger)
+ {
+ _logger = logger;
+ _options = options.Value;
+ }
+
+ public bool CanMove(IDataType dataType, IDataTypeService dataTypeService) => true;
+
+ public void Move(IDataType dataType, IDataTypeService dataTypeService)
+ {
+ string internalFolder;
+ if (dataType.IsInternalUmbracoEditor())
+ {
+ internalFolder = _options.DataTypes.InternalFolderName;
+ }
+ else if (dataType.IsUmbracoEditor())
+ {
+ internalFolder = _options.DataTypes.CustomFolderName;
+ }
+ else
+ {
+ internalFolder = _options.DataTypes.ThirdPartyFolderName;
+ }
+
+ var parentFolder = dataTypeService.GetOrCreateFolder(internalFolder);
+ var folder = GetFolderName(dataType);
+ if (folder.IsNullOrWhiteSpace())
+ {
+ _logger.LogWarning("Failed to determine folder name. {DataType} will be considered Custom", dataType.Name);
+ dataTypeService.Move(dataType, parentFolder.Id);
+ return;
+ }
+
+ var dataTypeFolder = dataTypeService.GetOrCreateFolder(folder, parentFolder.Id);
+ dataTypeService.Move(dataType, dataTypeFolder.Id);
+ }
+
+ private static string ResolveDataTypeFolderName(IDataType dataType)
+ {
+ var segments = dataType.EditorAlias.Split(".").SkipLast(1);
+ return string.Join(".", segments);
+ }
+
+ private static string GetFolderName(IDataType dataType)
+ {
+ var folder = dataType.EditorAlias switch
+ {
+ Constants.PropertyEditors.Aliases.BlockList => "Block List",
+
+ Constants.PropertyEditors.Aliases.NestedContent => "Nested Content",
+
+ Constants.PropertyEditors.Aliases.Grid => "Grid",
+ Constants.PropertyEditors.Aliases.ImageCropper => "Image Cropper",
+
+ Constants.PropertyEditors.Aliases.ListView => "List View",
+
+ Constants.PropertyEditors.Aliases.Boolean => "Checkbox",
+ Constants.PropertyEditors.Aliases.UploadField => "Upload",
+
+ Constants.PropertyEditors.Aliases.Tags => "Tags",
+
+ Constants.PropertyEditors.Aliases.CheckBoxList => "List",
+ Constants.PropertyEditors.Aliases.DropDownListFlexible => "List",
+ Constants.PropertyEditors.Aliases.RadioButtonList => "List",
+
+ Constants.PropertyEditors.Aliases.ColorPickerEyeDropper => "Picker",
+ Constants.PropertyEditors.Aliases.ColorPicker => "Picker",
+ Constants.PropertyEditors.Aliases.ContentPicker => "Picker",
+ Constants.PropertyEditors.Aliases.MediaPicker => "Picker",
+ Constants.PropertyEditors.Aliases.MultipleMediaPicker => "Picker",
+ Constants.PropertyEditors.Aliases.MemberPicker => "Picker",
+ Constants.PropertyEditors.Aliases.MemberGroupPicker => "Picker",
+ Constants.PropertyEditors.Aliases.MultiNodeTreePicker => "Picker",
+ Constants.PropertyEditors.Aliases.MediaPicker3 => "Picker",
+ Constants.PropertyEditors.Aliases.UserPicker => "Picker",
+ Constants.PropertyEditors.Aliases.MultiUrlPicker => "Picker",
+ Constants.PropertyEditors.Aliases.PickerRelations => "Picker",
+
+ Constants.PropertyEditors.Aliases.Decimal => "Text",
+ Constants.PropertyEditors.Aliases.Slider => "Text",
+ Constants.PropertyEditors.Aliases.Integer => "Text",
+ Constants.PropertyEditors.Aliases.DateTime => "Text",
+ Constants.PropertyEditors.Aliases.MultipleTextstring => "Text",
+ Constants.PropertyEditors.Aliases.TextBox => "Text",
+ Constants.PropertyEditors.Aliases.TextArea => "Text",
+ Constants.PropertyEditors.Aliases.TinyMce => "Text",
+ Constants.PropertyEditors.Aliases.EmailAddress => "Text",
+ Constants.PropertyEditors.Aliases.MarkdownEditor => "Text",
+ Constants.PropertyEditors.Aliases.Label => "Text",
+
+ _ => ResolveDataTypeFolderName(dataType)
+ };
+ return folder;
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/IDataTypeOrganiseAction.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/IDataTypeOrganiseAction.cs
new file mode 100644
index 0000000..577647a
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/DataTypes/IDataTypeOrganiseAction.cs
@@ -0,0 +1,10 @@
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.DataTypes;
+
+public interface IDataTypeOrganiseAction
+{
+ public bool CanMove(IDataType dataType, IDataTypeService dataTypeService);
+ public void Move(IDataType dataType, IDataTypeService dataTypeService);
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/IBackOfficeOrganiser.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/IBackOfficeOrganiser.cs
new file mode 100644
index 0000000..a32ffca
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/IBackOfficeOrganiser.cs
@@ -0,0 +1,6 @@
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers;
+
+public interface IBackOfficeOrganiser
+{
+ void OrganiseType();
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/DefaultMediaTypeOrganiseAction.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/DefaultMediaTypeOrganiseAction.cs
new file mode 100644
index 0000000..ba46173
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/DefaultMediaTypeOrganiseAction.cs
@@ -0,0 +1,48 @@
+using StackExchange.Profiling.Internal;
+using Umbraco.Cms.Core;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.MediaTypes;
+
+public class DefaultMediaTypeOrganiseAction : IMediaTypeOrganiseAction
+{
+ public bool CanMove(IMediaType mediaType, IMediaTypeService mediaTypeService) => !mediaType.IsContainer;
+
+ public void Move(IMediaType mediaType, IMediaTypeService mediaTypeService)
+ {
+ var folderId = -1;
+ var parentId = -1;
+ var folderName = string.Empty;
+
+ if (mediaType.IsInternal())
+ {
+ parentId = mediaTypeService.GetOrCreateFolder("Internal").Id;
+ folderId = parentId;
+ folderName = mediaType.Alias switch
+ {
+ Constants.Conventions.MediaTypes.File => string.Empty,
+ Constants.Conventions.MediaTypes.Folder => string.Empty,
+ Constants.Conventions.MediaTypes.VideoAlias => "Video",
+ Constants.Conventions.MediaTypes.AudioAlias => "Audio",
+ Constants.Conventions.MediaTypes.ArticleAlias => "Text File",
+ Constants.Conventions.MediaTypes.VectorGraphicsAlias => "Image",
+ Constants.Conventions.MediaTypes.Image => "Image",
+ _ => folderName
+ };
+ }
+
+ if (mediaType.IsElement)
+ {
+ folderName = "Element Types";
+ }
+
+ if (!folderName.IsNullOrWhiteSpace())
+ {
+ folderId = mediaTypeService.GetOrCreateFolder(folderName, parentId).Id;
+ }
+
+ mediaTypeService.Move(mediaType, folderId);
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/IMediaTypeOrganiseAction.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/IMediaTypeOrganiseAction.cs
new file mode 100644
index 0000000..557a614
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/IMediaTypeOrganiseAction.cs
@@ -0,0 +1,10 @@
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.MediaTypes;
+
+public interface IMediaTypeOrganiseAction
+{
+ public bool CanMove(IMediaType mediaType, IMediaTypeService mediaTypeService);
+ public void Move(IMediaType mediaType, IMediaTypeService mediaTypeService);
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/MediaTypeOrganiseActionCollection.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/MediaTypeOrganiseActionCollection.cs
new file mode 100644
index 0000000..f702a53
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/MediaTypeOrganiseActionCollection.cs
@@ -0,0 +1,11 @@
+using Umbraco.Cms.Core.Composing;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.MediaTypes;
+
+public class MediaTypeOrganiseActionCollection : BuilderCollectionBase
+{
+ public MediaTypeOrganiseActionCollection(Func> items)
+ : base(items)
+ {
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/MediaTypeOrganiseActionCollectionBuilder.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/MediaTypeOrganiseActionCollectionBuilder.cs
new file mode 100644
index 0000000..d7997cf
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/MediaTypeOrganiseActionCollectionBuilder.cs
@@ -0,0 +1,8 @@
+using Umbraco.Cms.Core.Composing;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.MediaTypes;
+
+public class MediaTypeOrganiseActionCollectionBuilder : OrderedCollectionBuilderBase
+{
+ protected override MediaTypeOrganiseActionCollectionBuilder This => this;
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/MediaTypeOrganiser.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/MediaTypeOrganiser.cs
new file mode 100644
index 0000000..efca3ca
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MediaTypes/MediaTypeOrganiser.cs
@@ -0,0 +1,35 @@
+using Microsoft.Extensions.Logging;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.MediaTypes;
+
+public class MediaTypeOrganiser : BackOfficeOrganiserBase
+{
+ private readonly IMediaTypeService _mediaTypeService;
+ private readonly MediaTypeOrganiseActionCollection _organiseActions;
+
+ public MediaTypeOrganiser(
+ ILogger logger,
+ IMediaTypeService mediaTypeService,
+ MediaTypeOrganiseActionCollection organiseActions) : base(logger)
+ {
+ _mediaTypeService = mediaTypeService;
+ _organiseActions = organiseActions;
+ }
+
+ public override void Organise()
+ {
+ var mediaTypes = _mediaTypeService.GetAll().ToList();
+
+ foreach (var mediaType in mediaTypes)
+ {
+ var organiser = _organiseActions.FirstOrDefault(x => x.CanMove(mediaType, _mediaTypeService));
+ organiser?.Move(mediaType, _mediaTypeService);
+ }
+
+ _mediaTypeService.DeleteAllEmptyContainers();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/DefaultMemberTypeOrganiseAction.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/DefaultMemberTypeOrganiseAction.cs
new file mode 100644
index 0000000..1ef353b
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/DefaultMemberTypeOrganiseAction.cs
@@ -0,0 +1,33 @@
+using StackExchange.Profiling.Internal;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.MemberTypes;
+
+public class DefaultMemberTypeOrganiseAction : IMemberTypeOrganiseAction
+{
+ public bool CanMove(IMemberType memberType, IMemberTypeService memberTypeService) => !memberType.IsContainer;
+
+ public void Move(IMemberType memberType, IMemberTypeService memberTypeService)
+ {
+ var folderId = -1;
+ var folderName = string.Empty;
+
+ if (memberType.CompositionIds().Any())
+ {
+ folderName = "Compositions";
+ }
+ else if (memberType.IsElement)
+ {
+ folderName = "Element Types";
+ }
+
+ if (!folderName.IsNullOrWhiteSpace())
+ {
+ folderId = memberTypeService.GetOrCreateFolder(folderName).Id;
+ }
+
+ memberTypeService.Move(memberType, folderId);
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/IMemberTypeOrganiseAction.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/IMemberTypeOrganiseAction.cs
new file mode 100644
index 0000000..00057d0
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/IMemberTypeOrganiseAction.cs
@@ -0,0 +1,10 @@
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.MemberTypes;
+
+public interface IMemberTypeOrganiseAction
+{
+ public bool CanMove(IMemberType memberType, IMemberTypeService memberTypeService);
+ public void Move(IMemberType memberType, IMemberTypeService memberTypeService);
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/MemberTypeOrganiseActionCollection.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/MemberTypeOrganiseActionCollection.cs
new file mode 100644
index 0000000..5ffa725
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/MemberTypeOrganiseActionCollection.cs
@@ -0,0 +1,11 @@
+using Umbraco.Cms.Core.Composing;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.MemberTypes;
+
+public class MemberTypeOrganiseActionCollection : BuilderCollectionBase
+{
+ public MemberTypeOrganiseActionCollection(Func> items)
+ : base(items)
+ {
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/MemberTypeOrganiseActionCollectionBuilder.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/MemberTypeOrganiseActionCollectionBuilder.cs
new file mode 100644
index 0000000..0336de9
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/MemberTypeOrganiseActionCollectionBuilder.cs
@@ -0,0 +1,8 @@
+using Umbraco.Cms.Core.Composing;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.MemberTypes;
+
+public class MemberTypeOrganiseActionCollectionBuilder : OrderedCollectionBuilderBase
+{
+ protected override MemberTypeOrganiseActionCollectionBuilder This => this;
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/MemberTypeOrganiser.cs b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/MemberTypeOrganiser.cs
new file mode 100644
index 0000000..b07cb2b
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Organisers/MemberTypes/MemberTypeOrganiser.cs
@@ -0,0 +1,35 @@
+using Microsoft.Extensions.Logging;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Services;
+using Umbraco.Community.BackOfficeOrganiser.Extensions;
+using Umbraco.Community.BackOfficeOrganiser.Organisers.ContentTypes;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Organisers.MemberTypes;
+
+public class MemberTypeOrganiser : BackOfficeOrganiserBase
+{
+ private readonly IMemberTypeService _memberTypeService;
+ private readonly MemberTypeOrganiseActionCollection _organiseActions;
+
+ public MemberTypeOrganiser(
+ ILogger logger,
+ IMemberTypeService memberTypeService,
+ MemberTypeOrganiseActionCollection organiseActions) : base(logger)
+ {
+ _memberTypeService = memberTypeService;
+ _organiseActions = organiseActions;
+ }
+
+ public override void Organise()
+ {
+ var memberTypes = _memberTypeService.GetAll().ToList();
+
+ foreach (var memberType in memberTypes)
+ {
+ var organiser = _organiseActions.FirstOrDefault(x => x.CanMove(memberType, _memberTypeService));
+ organiser?.Move(memberType, _memberTypeService);
+ }
+
+ _memberTypeService.DeleteAllEmptyContainers();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Umbraco.Community.BackOfficeOrganiser.csproj b/src/Umbraco.Community.BackOfficeOrganiser/Umbraco.Community.BackOfficeOrganiser.csproj
new file mode 100644
index 0000000..071ed45
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Umbraco.Community.BackOfficeOrganiser.csproj
@@ -0,0 +1,44 @@
+
+
+ net6.0
+ 10
+ true
+ enable
+ enable
+ /
+ .
+ Umbraco.Community.BackOfficeOrganiser
+ Umbraco.Community.BackOfficeOrganiser
+ Umbraco.Community.BackOfficeOrganiser
+ umbraco
+ James Carter
+ $([System.DateTime]::UtcNow.ToString(`yyyy`)) © James Carter
+ https://github.com/jcdcdev/Umbraco.Community.BackOfficeOrganiser
+ https://github.com/jcdcdev/Umbraco.Community.BackOfficeOrganiser
+ README_nuget.md
+ git
+ MIT
+ images\icon.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ \
+
+
+
+
+
+
+
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Views/Dashboards/BackOfficeOrganiser.cshtml b/src/Umbraco.Community.BackOfficeOrganiser/Views/Dashboards/BackOfficeOrganiser.cshtml
new file mode 100644
index 0000000..d8acd6b
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Views/Dashboards/BackOfficeOrganiser.cshtml
@@ -0,0 +1,4 @@
+@inherits Umbraco.Community.SimpleDashboards.Web.DashboardViewPage
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/Views/Dashboards/BackOfficeOrganiserDashboard.cs b/src/Umbraco.Community.BackOfficeOrganiser/Views/Dashboards/BackOfficeOrganiserDashboard.cs
new file mode 100644
index 0000000..3463a1d
--- /dev/null
+++ b/src/Umbraco.Community.BackOfficeOrganiser/Views/Dashboards/BackOfficeOrganiserDashboard.cs
@@ -0,0 +1,13 @@
+using Umbraco.Community.SimpleDashboards.Core;
+using Constants = Umbraco.Cms.Core.Constants;
+
+namespace Umbraco.Community.BackOfficeOrganiser.Views.Dashboards;
+
+public class BackOfficeOrganiserDashboard : SimpleDashboard
+{
+ public BackOfficeOrganiserDashboard()
+ {
+ AddSection(Constants.Applications.Settings);
+ SetName("Back Office Organiser");
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Community.BackOfficeOrganiser/icon.png b/src/Umbraco.Community.BackOfficeOrganiser/icon.png
new file mode 100644
index 0000000..3773600
Binary files /dev/null and b/src/Umbraco.Community.BackOfficeOrganiser/icon.png differ
diff --git a/umbraco-marketplace.json b/umbraco-marketplace.json
new file mode 100644
index 0000000..81e6940
--- /dev/null
+++ b/umbraco-marketplace.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://marketplace.umbraco.com/umbraco-marketplace-schema.json",
+ "AuthorDetails": {
+ "Name": "James Carter",
+ "Description": "Lead Umbraco .NET Developer, UK",
+ "Url": "https://jcdc.dev",
+ "ImageUrl": "https://github.com/jcdcdev.png"
+ },
+ "Category": "Developer Tools",
+ "Description": "This packages helps keep your Backoffice organised",
+ "LicenseTypes": [
+ "Free"
+ ],
+ "DocumentationUrl": "https://github.com/jcdcdev/Umbraco.Community.BackOfficeOrganiser#quick-start",
+ "IssueTrackerUrl": "https://github.com/jcdcdev/Umbraco.Community.BackOfficeOrganiser/issues",
+ "PackageType": "Package",
+ "Tags": [
+ "Backoffice"
+ ],
+ "Title": "Umbraco.Community.BackOfficeOrganiser",
+ "Screenshots": [
+ {
+ "ImageUrl": "https://raw.githubusercontent.com/jcdcdev/Umbraco.Community.BackOfficeOrganiser/main/docs/screenshots/backoffice.png",
+ "Caption": "A screenshot of the BackOffice Organiser in action"
+ }
+ ]
+}
\ No newline at end of file