diff --git a/.gitignore b/.gitignore index 9f153b2..d90f4e1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ node_modules lib -dist +/dist .nuxt playground/.nuxt +playground/.output src/runtime/css/output.css diff --git a/CHANGELOG.md b/CHANGELOG.md index 369a04b..871b711 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,13 @@ # Changelog - ## v2.5.5 [compare changes](https://github.com/liip/vuepal/compare/v2.5.4...v2.5.5) ### 🩹 Fixes -- Typescript issue resolved. ([7ad769b](https://github.com/liip/vuepal/commit/7ad769b)) +- Typescript issue resolved. + ([7ad769b](https://github.com/liip/vuepal/commit/7ad769b)) ### ❤️ Contributors @@ -19,7 +19,8 @@ ### 🩹 Fixes -- Remove unwanted styles ([cf99c13](https://github.com/liip/vuepal/commit/cf99c13)) +- Remove unwanted styles + ([cf99c13](https://github.com/liip/vuepal/commit/cf99c13)) ### ❤️ Contributors @@ -42,4 +43,3 @@ - Ayalon ## v2.5.1 - diff --git a/vuepal/LICENSE b/LICENSE similarity index 100% rename from vuepal/LICENSE rename to LICENSE diff --git a/README.md b/README.md index 619ac42..e6c1f7a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # VuePal -VuePal provides a bridge between Drupal and Vue. It comes with a set of components and -composables to make your life easier when working with Drupal. +VuePal provides a bridge between Drupal and Vue. It comes with a set of +components and composables to make your life easier when working with Drupal. ## Frontend Routing @@ -17,10 +17,13 @@ export default defineNuxtConfig({ }) ``` -With this feature enabled, you can create a static frontend page in Nuxt and still use all the routing features of -Drupal in your frontend application. You can define your aliases in the frontend page using `definePageMeta`. The module -will automatically create a Drupal configuration file that can be imported and processed by the -[Drupal frontend_routing](https://www.drupal.org/project/frontend_routing) module. +With this feature enabled, you can create a static frontend page in Nuxt and +still use all the routing features of Drupal in your frontend application. You +can define your aliases in the frontend page using `definePageMeta`. The module +will automatically create a Drupal configuration file that can be imported and +processed by the +[Drupal frontend_routing](https://www.drupal.org/project/frontend_routing) +module. ```ts [pages/static-page/example.vue] definePageMeta({ @@ -46,8 +49,9 @@ export default defineNuxtConfig({ }) ``` -This option enables the `useDrupalRoute()` composable. -This composable provides the necessary GraphQL fragment and query to fetch the route data and metatags of a Drupal page. +This option enables the `useDrupalRoute()` composable. This composable provides +the necessary GraphQL fragment and query to fetch the route data and metatags of +a Drupal page. ## Admin Toolbar @@ -61,13 +65,13 @@ export default defineNuxtConfig({ }) ``` -The admin toolbar component fetches the Drupal administration menu and displays it in your frontend application. +The admin toolbar component fetches the Drupal administration menu and displays +it in your frontend application. ![toolbar.png](https://github.com/liip/vuepal/blob/main/screenshots/toolbar.png) ### Usage ```vue - - ``` @@ -101,11 +104,11 @@ export default defineNuxtConfig({ }) ``` -The local tasks component fetches the local tasks of a Drupal page and displays them in your frontend application. +The local tasks component fetches the local tasks of a Drupal page and displays +them in your frontend application. ![localtasks.png](https://github.com/liip/vuepal/blob/main/screenshots/localtasks.png) ```vue - diff --git a/playground/pages/contact/index.vue b/playground/app/pages/contact/index.vue similarity index 56% rename from playground/pages/contact/index.vue rename to playground/app/pages/contact/index.vue index 41e018c..73e0f97 100644 --- a/playground/pages/contact/index.vue +++ b/playground/app/pages/contact/index.vue @@ -1,6 +1,6 @@ @@ -10,11 +10,9 @@ import { definePageMeta } from '#imports' definePageMeta({ name: 'contact-page', drupalFrontendRoute: true, + path: '/kontakt', languageMapping: { - de: '/de/kontakt', - fr: '/fr/contactez-nous', - en: '/en/contact-us', - it: '/it/contactioasdfasdf', + en: '/contact-us', }, }) diff --git a/playground/pages/index.vue b/playground/app/pages/index.vue similarity index 100% rename from playground/pages/index.vue rename to playground/app/pages/index.vue diff --git a/playground/app/pages/query.route.graphql b/playground/app/pages/query.route.graphql new file mode 100644 index 0000000..5e2d253 --- /dev/null +++ b/playground/app/pages/query.route.graphql @@ -0,0 +1,3 @@ +query route($path: String!) { + ...useDrupalRoute +} diff --git a/playground/pages/search.vue b/playground/app/pages/search.vue similarity index 77% rename from playground/pages/search.vue rename to playground/app/pages/search.vue index f9da5ca..efa28b6 100644 --- a/playground/pages/search.vue +++ b/playground/app/pages/search.vue @@ -8,10 +8,9 @@ import { definePageMeta } from '#imports' definePageMeta({ name: 'search', drupalFrontendRoute: true, + path: '/suche', languageMapping: { - de: '/de/suche', - fr: '/fr/chercher', - en: '/en/search', + en: '/search', }, }) diff --git a/playground/app/vuepal.adapter.ts b/playground/app/vuepal.adapter.ts index 823da8b..74e1270 100644 --- a/playground/app/vuepal.adapter.ts +++ b/playground/app/vuepal.adapter.ts @@ -1,15 +1,18 @@ -import { defineVuepalAdapter } from '#vuepal/types' -import { useCurrentLanguage } from '#imports' +import { defineVuepalAdapter } from './../../src/adapter' +import { useCurrentLanguage, useGraphqlQuery } from '#imports' export default defineVuepalAdapter(() => { return { getAdminMenu() { - return $fetch('/api/adminMenu').then((v) => v.data || {}) + return useGraphqlQuery('adminToolbar').then((v) => v.data) }, - getLocalTasks() { - return $fetch('/api/localTasks').then( - (v) => v.data.route.localTasks || [], - ) + getLocalTasks(path: string) { + return useGraphqlQuery('localTasks', { path }).then((v) => { + if (v.data.route && 'localTasks' in v.data.route) { + return v.data.route.localTasks + } + return [] + }) }, getCurrentLanguage() { return useCurrentLanguage() diff --git a/playground/mock/adminToolbar.json b/playground/mock/adminToolbar.json deleted file mode 100644 index 8aaa4f9..0000000 --- a/playground/mock/adminToolbar.json +++ /dev/null @@ -1,7335 +0,0 @@ -{ - "data": { - "activeEnvironment": { - "name": "DEV", - "bgColor": "#cc0018", - "fgColor": "#ffffff" - }, - "menu": { - "id": "admin", - "links": [ - { - "link": { - "label": "AC 1h V1", - "url": { - "path": "/en/admin/structure/message/manage/abandoned_cart_email_1", - "routeName": "entity.message_template.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/message/manage/abandoned_cart_email_1/fields", - "routeName": "entity.message.field_ui_fields" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/message/manage/abandoned_cart_email_1/form-display", - "routeName": "entity.entity_form_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/message/manage/abandoned_cart_email_1/display", - "routeName": "entity.entity_view_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/message/delete/abandoned_cart_email_1", - "routeName": "entity.message_template.delete_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "MyWatch registration", - "url": { - "path": "/en/admin/structure/message/manage/mywatch_registration", - "routeName": "entity.message_template.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/message/manage/mywatch_registration/fields", - "routeName": "entity.message.field_ui_fields" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/message/manage/mywatch_registration/form-display", - "routeName": "entity.entity_form_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/message/manage/mywatch_registration/display", - "routeName": "entity.entity_view_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/message/delete/mywatch_registration", - "routeName": "entity.message_template.delete_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "New Watch registration notification", - "url": { - "path": "/en/admin/structure/message/manage/notification_new_registration", - "routeName": "entity.message_template.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/message/manage/notification_new_registration/fields", - "routeName": "entity.message.field_ui_fields" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/message/manage/notification_new_registration/form-display", - "routeName": "entity.entity_form_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/message/manage/notification_new_registration/display", - "routeName": "entity.entity_view_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/message/delete/notification_new_registration", - "routeName": "entity.message_template.delete_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "New account confirmation (OWA operation)", - "url": { - "path": "/en/admin/structure/message/manage/new_account_confirmation", - "routeName": "entity.message_template.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/message/manage/new_account_confirmation/fields", - "routeName": "entity.message.field_ui_fields" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/message/manage/new_account_confirmation/form-display", - "routeName": "entity.entity_form_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/message/manage/new_account_confirmation/display", - "routeName": "entity.entity_view_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/message/delete/new_account_confirmation", - "routeName": "entity.message_template.delete_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Notification new member", - "url": { - "path": "/en/admin/structure/message/manage/notification_new_member", - "routeName": "entity.message_template.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/message/manage/notification_new_member/fields", - "routeName": "entity.message.field_ui_fields" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/message/manage/notification_new_member/form-display", - "routeName": "entity.entity_form_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/message/manage/notification_new_member/display", - "routeName": "entity.entity_view_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/message/delete/notification_new_member", - "routeName": "entity.message_template.delete_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Wishlist item created (customer)", - "url": { - "path": "/en/admin/structure/message/manage/wishlist_item_created_customer", - "routeName": "entity.message_template.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/message/manage/wishlist_item_created_customer/fields", - "routeName": "entity.message.field_ui_fields" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/message/manage/wishlist_item_created_customer/form-display", - "routeName": "entity.entity_form_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/message/manage/wishlist_item_created_customer/display", - "routeName": "entity.entity_view_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/message/delete/wishlist_item_created_customer", - "routeName": "entity.message_template.delete_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Wishlist item created (internal)", - "url": { - "path": "/en/admin/structure/message/manage/wishlist_item_created_internal", - "routeName": "entity.message_template.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/message/manage/wishlist_item_created_internal/fields", - "routeName": "entity.message.field_ui_fields" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/message/manage/wishlist_item_created_internal/form-display", - "routeName": "entity.entity_form_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/message/manage/wishlist_item_created_internal/display", - "routeName": "entity.entity_view_display.message.default" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/message/delete/wishlist_item_created_internal", - "routeName": "entity.message_template.delete_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Administration", - "url": { - "path": "/en/admin", - "routeName": "system.admin" - } - }, - "subtree": [ - { - "link": { - "label": "Tools", - "url": { - "path": "/en", - "routeName": "" - } - }, - "subtree": [ - { - "link": { - "label": "Index", - "url": { - "path": "/en/admin/index", - "routeName": "system.admin_index" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Flush all caches", - "url": { - "path": "/en/admin/flush?token=-vYUsTab-SGnsqTR353M8epHdMSic5GWMCO-DZHoFRI", - "routeName": "admin_toolbar_tools.flush" - } - }, - "subtree": [ - { - "link": { - "label": "Flush CSS and JavaScript", - "url": { - "path": "/en/admin/flush/cssjs?token=nPvdA_FFdCv-w3ZQqKl2tcvX2y1PgqDqKTydiKspxfU", - "routeName": "admin_toolbar_tools.cssjs" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Flush plugins cache", - "url": { - "path": "/en/admin/flush/plugin?token=ZMUWTyhHrQqo8ank40GXMmvsa9hBdL595FoCuw1XItw", - "routeName": "admin_toolbar_tools.plugin" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Flush render cache", - "url": { - "path": "/en/admin/flush/rendercache?token=tBx0twEB7umsWF5UeV8f9SjrNSFM3B5pUQiDdJJWso0", - "routeName": "admin_toolbar_tools.flush_rendercache" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Flush routing and links cache", - "url": { - "path": "/en/admin/flush/menu?token=XibUkmnp-KFjAi7YwGsceDaZ9p04P3_w2cW1Wl5lfLk", - "routeName": "admin_toolbar_tools.flush_menu" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Flush static cache", - "url": { - "path": "/en/admin/flush/static-caches?token=Uf2GbVIgggA8Xcxz88OKHX9Wqs7Qz7C8sPUDUu5nPiE", - "routeName": "admin_toolbar_tools.flush_static" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Flush twig cache", - "url": { - "path": "/en/admin/flush/twig?token=IjtasaT-ywBYQcsryGU7KlgOuZDDjmc0_-kf6kzitNM", - "routeName": "admin_toolbar_tools.flush_twig" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Flush views cache", - "url": { - "path": "/en/admin/flush/views?token=vR5SYQubui_OwuG_70LyvJm6NBBPW3lNnk8Piqx2_-Q", - "routeName": "admin_toolbar_tools.flush_views" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Rebuild theme registry", - "url": { - "path": "/en/admin/flush/theme_rebuild?token=_eUcfb2XnYlV7mGHww0pIKZ2Ccvdkbcypig0oPmBphw", - "routeName": "admin_toolbar_tools.theme_rebuild" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Run cron", - "url": { - "path": "/en/run-cron?token=QrX7FQVJWZ11dOHZOqSrfi4uD-AxXoUw52uRW1wVTV4", - "routeName": "admin_toolbar.run.cron" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Run updates", - "url": { - "path": "/update.php", - "routeName": "system.db_update" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Logout", - "url": { - "path": "/en/user/logout", - "routeName": "user.logout" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Content", - "url": { - "path": "/en/admin/content", - "routeName": "system.admin_content" - } - }, - "subtree": [ - { - "link": { - "label": "Add content", - "url": { - "path": "/en/node/add", - "routeName": "node.add_page" - } - }, - "subtree": [ - { - "link": { - "label": "Distributor", - "url": { - "path": "/en/node/add/distributor", - "routeName": "node.add" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Magazine article", - "url": { - "path": "/en/node/add/magazine_article", - "routeName": "node.add" - } - }, - "subtree": [] - }, - { - "link": { - "label": "News", - "url": { - "path": "/en/node/add/news", - "routeName": "node.add" - } - }, - "subtree": [] - }, - { - "link": { - "label": "OSC Chapter", - "url": { - "path": "/en/node/add/osc_chapter", - "routeName": "node.add" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Page", - "url": { - "path": "/en/node/add/page", - "routeName": "node.add" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Paragraphs Blokkli Edit States", - "url": { - "path": "/en/admin/content/paragraphs-blokkli-edit-state", - "routeName": "entity.paragraphs_blokkli_edit_state.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Translatable config pages", - "url": { - "path": "/en/admin/content/translatable-config-pages", - "routeName": "entity.translatable_config_pages.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Custom block library", - "url": { - "path": "/en/admin/content/block", - "routeName": "entity.block_content.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Distributor Search", - "url": { - "path": "/en/admin/content/distributor-search", - "routeName": "view.distributor_search.dashboard" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Files", - "url": { - "path": "/en/admin/content/files", - "routeName": "view.files.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Media", - "url": { - "path": "/en/admin/content/media", - "routeName": "entity.media.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add media", - "url": { - "path": "/en/media/add", - "routeName": "entity.media.add_page" - } - }, - "subtree": [ - { - "link": { - "label": "Icon", - "url": { - "path": "/en/media/add/icon", - "routeName": "entity.media.add_form" - } - } - }, - { - "link": { - "label": "Image", - "url": { - "path": "/en/media/add/image", - "routeName": "entity.media.add_form" - } - } - }, - { - "link": { - "label": "Video (Remote)", - "url": { - "path": "/en/media/add/video_remote", - "routeName": "entity.media.add_form" - } - } - } - ] - }, - { - "link": { - "label": "Media library", - "url": { - "path": "/en/admin/content/media-grid", - "routeName": "view.media_library.page" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Messages", - "url": { - "path": "/en/admin/content/message", - "routeName": "message.messages" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Paragraphs", - "url": { - "path": "/en/admin/content/paragraphs", - "routeName": "entity.paragraphs_library_item.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Texts", - "url": { - "path": "/en/admin/content/texts", - "routeName": "entity.texts.collection" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Commerce", - "url": { - "path": "/en/admin/commerce", - "routeName": "commerce.admin_commerce" - } - }, - "subtree": [ - { - "link": { - "label": "Orders", - "url": { - "path": "/en/admin/commerce/orders", - "routeName": "entity.commerce_order.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Order Items", - "url": { - "path": "/en/admin/commerce/order/items", - "routeName": "view.order_items.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Order export", - "url": { - "path": "/en/admin/commerce/order-export", - "routeName": "view.order_export.page_1" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Payments", - "url": { - "path": "/en/admin/commerce/payments", - "routeName": "view.payments.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Price list search", - "url": { - "path": "/en/admin/commerce/price-list-search", - "routeName": "view.price_list_search.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Price lists", - "url": { - "path": "/en/admin/commerce/price-lists", - "routeName": "entity.commerce_pricelist.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Product attributes", - "url": { - "path": "/en/admin/commerce/product-attributes", - "routeName": "entity.commerce_product_attribute.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Products", - "url": { - "path": "/en/admin/commerce/products", - "routeName": "entity.commerce_product.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Product variations", - "url": { - "path": "/en/admin/commerce/product_variations", - "routeName": "oris_commerce.product_variations" - } - }, - "subtree": [ - { - "link": { - "label": "Watches", - "url": { - "path": "/en/admin/commerce/watches", - "routeName": "view.product_variations_solr.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Straps", - "url": { - "path": "/en/admin/commerce/straps", - "routeName": "view.straps_variations.dashboard" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Tools", - "url": { - "path": "/en/admin/commerce/tools", - "routeName": "view.tools_variations.dashboard" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Gifts", - "url": { - "path": "/en/admin/commerce/gifts", - "routeName": "view.gifts_variations.dashboard" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Giveaways", - "url": { - "path": "/en/admin/commerce/giveaways", - "routeName": "view.giveaway_variations.dashboard" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Promotions", - "url": { - "path": "/en/admin/commerce/promotions", - "routeName": "entity.commerce_promotion.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Coupon Codes", - "url": { - "path": "/en/admin/commerce/promotions/coupon-codes", - "routeName": "view.coupon_codes.page_1" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Shipping methods", - "url": { - "path": "/en/admin/commerce/shipping-methods", - "routeName": "entity.commerce_shipping_method.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Configuration", - "url": { - "path": "/en/admin/commerce/config", - "routeName": "commerce.configuration" - } - }, - "subtree": [ - { - "link": { - "label": "Store", - "url": { - "path": "/en/admin/commerce/config/store", - "routeName": "commerce.store_configuration" - } - }, - "subtree": [ - { - "link": { - "label": "Currencies", - "url": { - "path": "/en/admin/commerce/config/currencies", - "routeName": "entity.commerce_currency.collection" - } - } - }, - { - "link": { - "label": "Stores", - "url": { - "path": "/en/admin/commerce/config/stores", - "routeName": "entity.commerce_store.collection" - } - } - }, - { - "link": { - "label": "Store types", - "url": { - "path": "/en/admin/commerce/config/store-types", - "routeName": "entity.commerce_store_type.collection" - } - } - }, - { - "link": { - "label": "Tax types", - "url": { - "path": "/en/admin/commerce/config/tax-types", - "routeName": "entity.commerce_tax_type.collection" - } - } - } - ] - }, - { - "link": { - "label": "Products", - "url": { - "path": "/en/admin/commerce/config/products", - "routeName": "commerce_product.configuration" - } - }, - "subtree": [ - { - "link": { - "label": "Product types", - "url": { - "path": "/en/admin/commerce/config/product-types", - "routeName": "entity.commerce_product_type.collection" - } - } - }, - { - "link": { - "label": "Product variation types", - "url": { - "path": "/en/admin/commerce/config/product-variation-types", - "routeName": "entity.commerce_product_variation_type.collection" - } - } - } - ] - }, - { - "link": { - "label": "Payment", - "url": { - "path": "/en/admin/commerce/config/payment", - "routeName": "commerce_payment.configuration" - } - }, - "subtree": [ - { - "link": { - "label": "Payment gateways", - "url": { - "path": "/en/admin/commerce/config/payment-gateways", - "routeName": "entity.commerce_payment_gateway.collection" - } - } - } - ] - }, - { - "link": { - "label": "Orders", - "url": { - "path": "/en/admin/commerce/config/orders", - "routeName": "commerce_order.configuration" - } - }, - "subtree": [ - { - "link": { - "label": "Order types", - "url": { - "path": "/en/admin/commerce/config/order-types", - "routeName": "entity.commerce_order_type.collection" - } - } - }, - { - "link": { - "label": "Order item types", - "url": { - "path": "/en/admin/commerce/config/order-item-types", - "routeName": "entity.commerce_order_item_type.collection" - } - } - }, - { - "link": { - "label": "Checkout flows", - "url": { - "path": "/en/admin/commerce/config/checkout-flows", - "routeName": "entity.commerce_checkout_flow.collection" - } - } - }, - { - "link": { - "label": "Order settings", - "url": { - "path": "/en/admin/commerce/config/orders/settings", - "routeName": "commerce_order.settings" - } - } - }, - { - "link": { - "label": "Number patterns", - "url": { - "path": "/en/admin/commerce/config/number-patterns", - "routeName": "entity.commerce_number_pattern.collection" - } - } - } - ] - }, - { - "link": { - "label": "Price lists", - "url": { - "path": "/en/admin/commerce/config/price-lists", - "routeName": "commerce_pricelist.configuration" - } - }, - "subtree": [ - { - "link": { - "label": "Price list item types", - "url": { - "path": "/en/admin/commerce/config/price-lists/item-types", - "routeName": "entity.commerce_pricelist_item.bundle_list" - } - } - }, - { - "link": { - "label": "Price list types", - "url": { - "path": "/en/admin/commerce/config/price-lists/types", - "routeName": "entity.commerce_pricelist.bundle_list" - } - } - } - ] - }, - { - "link": { - "label": "Shipping", - "url": { - "path": "/en/admin/commerce/config/shipping", - "routeName": "commerce_shipping.configuration" - } - }, - "subtree": [ - { - "link": { - "label": "Shipment types", - "url": { - "path": "/en/admin/commerce/config/shipment-types", - "routeName": "entity.commerce_shipment_type.collection" - } - } - }, - { - "link": { - "label": "Package types", - "url": { - "path": "/en/admin/commerce/config/package-types", - "routeName": "entity.commerce_package_type.collection" - } - } - } - ] - } - ] - }, - { - "link": { - "label": "Abandoned cart emails", - "url": { - "path": "/en/admin/abandoned-cart-emails-flow", - "routeName": "view.abandoned_cart_emails_flow.page_1" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Structure", - "url": { - "path": "/en/admin/structure", - "routeName": "system.admin_structure" - } - }, - "subtree": [ - { - "link": { - "label": "Block types", - "url": { - "path": "/en/admin/structure/block-content", - "routeName": "entity.block_content_type.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Help Text", - "url": { - "path": "/en/admin/structure/block-content/manage/help_text", - "routeName": "entity.block_content_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/block-content/manage/help_text/fields", - "routeName": "entity.block_content.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/block-content/manage/help_text/form-display", - "routeName": "entity.entity_form_display.block_content.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/block-content/manage/help_text/display", - "routeName": "entity.entity_view_display.block_content.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/block-content/manage/help_text/permissions", - "routeName": "entity.block_content_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/block-content/manage/help_text/delete", - "routeName": "entity.block_content_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Section", - "url": { - "path": "/en/admin/structure/block-content/manage/section", - "routeName": "entity.block_content_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/block-content/manage/section/fields", - "routeName": "entity.block_content.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/block-content/manage/section/form-display", - "routeName": "entity.entity_form_display.block_content.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/block-content/manage/section/display", - "routeName": "entity.entity_view_display.block_content.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/block-content/manage/section/permissions", - "routeName": "entity.block_content_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/block-content/manage/section/delete", - "routeName": "entity.block_content_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Text Image", - "url": { - "path": "/en/admin/structure/block-content/manage/text_image", - "routeName": "entity.block_content_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/block-content/manage/text_image/fields", - "routeName": "entity.block_content.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/block-content/manage/text_image/form-display", - "routeName": "entity.entity_form_display.block_content.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/block-content/manage/text_image/display", - "routeName": "entity.entity_view_display.block_content.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/block-content/manage/text_image/permissions", - "routeName": "entity.block_content_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/block-content/manage/text_image/delete", - "routeName": "entity.block_content_type.delete_form" - } - } - } - ] - } - ] - }, - { - "link": { - "label": "Limited edition number settings", - "url": { - "path": "/en/admin/structure/limited_edition_number/settings", - "routeName": "limited_edition_number.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Limited edition reservation settings", - "url": { - "path": "/en/admin/structure/limited_edition_reservation/settings", - "routeName": "limited_edition_reservation.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Message templates", - "url": { - "path": "/en/admin/structure/message", - "routeName": "message.overview_templates" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Paragraphs Blokkli Edit State", - "url": { - "path": "/en/admin/structure/paragraphs-blokkli-edit-state", - "routeName": "entity.paragraphs_blokkli_edit_state.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Translatable config pages types", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types", - "routeName": "entity.translatable_config_pages_type.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Footer", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/footer", - "routeName": "entity.translatable_config_pages_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/footer/fields", - "routeName": "entity.translatable_config_pages.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/footer/form-display", - "routeName": "entity.entity_form_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/footer/display", - "routeName": "entity.entity_view_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/footer/delete", - "routeName": "entity.translatable_config_pages_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Global configuration", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/global_configuration", - "routeName": "entity.translatable_config_pages_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/global_configuration/fields", - "routeName": "entity.translatable_config_pages.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/global_configuration/form-display", - "routeName": "entity.entity_form_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/global_configuration/display", - "routeName": "entity.entity_view_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/global_configuration/delete", - "routeName": "entity.translatable_config_pages_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Home", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/home", - "routeName": "entity.translatable_config_pages_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/home/fields", - "routeName": "entity.translatable_config_pages.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/home/form-display", - "routeName": "entity.entity_form_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/home/display", - "routeName": "entity.entity_view_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/home/delete", - "routeName": "entity.translatable_config_pages_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Home", - "url": { - "path": "/en/admin/config/translatable-config-pages/add/home", - "routeName": "entity.translatable_config_pages.add_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Product Detail Page", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/product_detail_page", - "routeName": "entity.translatable_config_pages_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/product_detail_page/fields", - "routeName": "entity.translatable_config_pages.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/product_detail_page/form-display", - "routeName": "entity.entity_form_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/product_detail_page/display", - "routeName": "entity.entity_view_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/product_detail_page/delete", - "routeName": "entity.translatable_config_pages_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Promo teasers", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/promo_teasers", - "routeName": "entity.translatable_config_pages_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/promo_teasers/fields", - "routeName": "entity.translatable_config_pages.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/promo_teasers/form-display", - "routeName": "entity.entity_form_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/promo_teasers/display", - "routeName": "entity.entity_view_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/promo_teasers/delete", - "routeName": "entity.translatable_config_pages_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Static Nodes", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/static_nodes", - "routeName": "entity.translatable_config_pages_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/static_nodes/fields", - "routeName": "entity.translatable_config_pages.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/static_nodes/form-display", - "routeName": "entity.entity_form_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/static_nodes/display", - "routeName": "entity.entity_view_display.translatable_config_pages.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/translatable_config_pages_types/manage/static_nodes/delete", - "routeName": "entity.translatable_config_pages_type.delete_form" - } - } - } - ] - } - ] - }, - { - "link": { - "label": "Webforms", - "url": { - "path": "/en/admin/structure/webform", - "routeName": "entity.webform.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Forms", - "url": { - "path": "/en/admin/structure/webform", - "routeName": "entity.webform.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Submissions", - "url": { - "path": "/en/admin/structure/webform/submissions/manage", - "routeName": "entity.webform_submission.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Manage", - "url": { - "path": "/en/admin/structure/webform/submissions/manage", - "routeName": "entity.webform_submission.collection" - } - } - }, - { - "link": { - "label": "Purge", - "url": { - "path": "/en/admin/structure/webform/submissions/purge", - "routeName": "entity.webform_submission.collection_purge" - } - } - } - ] - }, - { - "link": { - "label": "Options", - "url": { - "path": "/en/admin/structure/webform/options/manage", - "routeName": "entity.webform_options.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Options", - "url": { - "path": "/en/admin/structure/webform/options/manage", - "routeName": "entity.webform_options.collection" - } - } - } - ] - }, - { - "link": { - "label": "Configuration", - "url": { - "path": "/en/admin/structure/webform/config", - "routeName": "webform.config" - } - }, - "subtree": [ - { - "link": { - "label": "Forms", - "url": { - "path": "/en/admin/structure/webform/config", - "routeName": "webform.config" - } - } - }, - { - "link": { - "label": "Elements", - "url": { - "path": "/en/admin/structure/webform/config/elements", - "routeName": "webform.config.elements" - } - } - }, - { - "link": { - "label": "Submissions", - "url": { - "path": "/en/admin/structure/webform/config/submissions", - "routeName": "webform.config.submissions" - } - } - }, - { - "link": { - "label": "Handlers", - "url": { - "path": "/en/admin/structure/webform/config/handlers", - "routeName": "webform.config.handlers" - } - } - }, - { - "link": { - "label": "Variants", - "url": { - "path": "/en/admin/structure/webform/config/variants", - "routeName": "webform.config.variants" - } - } - }, - { - "link": { - "label": "Exporters", - "url": { - "path": "/en/admin/structure/webform/config/exporters", - "routeName": "webform.config.exporters" - } - } - }, - { - "link": { - "label": "Libraries", - "url": { - "path": "/en/admin/structure/webform/config/libraries", - "routeName": "webform.config.libraries" - } - } - }, - { - "link": { - "label": "Advanced", - "url": { - "path": "/en/admin/structure/webform/config/advanced", - "routeName": "webform.config.advanced" - } - } - }, - { - "link": { - "label": "", - "url": { - "path": "/en/admin/structure/webform/config/translate", - "routeName": "config_translation.item.overview.webform.config" - } - } - } - ] - }, - { - "link": { - "label": "Add-ons", - "url": { - "path": "/en/admin/structure/webform/addons", - "routeName": "webform.addons" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Help", - "url": { - "path": "/en/admin/structure/webform/help", - "routeName": "webform.help" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Block layout", - "url": { - "path": "/en/admin/structure/block", - "routeName": "block.admin_display" - } - }, - "subtree": [ - { - "link": { - "label": "Add custom block", - "url": { - "path": "/en/block/add", - "routeName": "block_content.add_page" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Block types", - "url": { - "path": "/en/admin/structure/block-content", - "routeName": "entity.block_content_type.collection" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "CRM", - "url": { - "path": "/en/admin/structure/crm-core", - "routeName": "crm_core.manage" - } - }, - "subtree": [ - { - "link": { - "label": "CRM Activity Types", - "url": { - "path": "/en/admin/structure/crm-core/activity-types", - "routeName": "entity.crm_core_activity_type.collection" - } - }, - "subtree": [ - { - "link": { - "label": "All types", - "url": { - "path": "/en/admin/structure/crm-core/activity-types", - "routeName": "entity.crm_core_activity_type.collection" - } - } - }, - { - "link": { - "label": "Abandoned Cart", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/abandoned_cart", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Account activity: Activate Account", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/account_activity_unblock_account", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Account activity: Deactivate account", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/account_activity_deactivate", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Account activity: OWA confirmation mail sent", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/account_confirmation_mail_sent", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Account activity: Password reset mail sent", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/account_activity_password_reset", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "CRM Individual import", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/crm_individual_import", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "MyOris: Delete Watch Registration", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/myoris_delete_watch_registration", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "MyOris: New Watch Registration", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/myoris_new_watch_registration", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "MyOris: Watch Registration Transfer", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/myoris_watch_registration_transf", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "MyWatch Registration email sent", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/mywatch_registration_email_send", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Newsletter: Subscription activated", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/newsletter_subscription_activate", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Newsletter: cleaned", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/mailchimp_cleaned", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Newsletter: sent", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/newsletter_campaign_sent", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Newsletter: subscribed", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/newsletter_subscription_request", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Newsletter: unsubscribed", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/newsletter_subscription_cancel", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Sales contact", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/sales_contact", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Transactional email CLICK", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/transactional_email_click", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Transactional email OPEN", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/transactional_email_open", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Transactional email REQUEST", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/transactional_email_request", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - }, - { - "link": { - "label": "Transactional email SEND", - "url": { - "path": "/en/admin/structure/crm-core/activity-types/transactional_email_send", - "routeName": "entity.crm_core_activity_type.edit_form" - } - } - } - ] - }, - { - "link": { - "label": "CRM Individual Types", - "url": { - "path": "/en/admin/structure/crm-core/individual-types", - "routeName": "entity.crm_core_individual_type.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Consumer", - "url": { - "path": "/en/admin/structure/crm-core/individual-types/consumer", - "routeName": "entity.crm_core_individual_type.edit_form" - } - } - }, - { - "link": { - "label": "Sales", - "url": { - "path": "/en/admin/structure/crm-core/individual-types/sales", - "routeName": "entity.crm_core_individual_type.edit_form" - } - } - } - ] - }, - { - "link": { - "label": "CRM Organization Types", - "url": { - "path": "/en/admin/structure/crm-core/organization-types", - "routeName": "entity.crm_core_organization_type.collection" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Content types", - "url": { - "path": "/en/admin/structure/types", - "routeName": "entity.node_type.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add content type", - "url": { - "path": "/en/admin/structure/types/add", - "routeName": "node.type_add" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Distributor", - "url": { - "path": "/en/admin/structure/types/manage/distributor", - "routeName": "entity.node_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/types/manage/distributor/fields", - "routeName": "entity.node.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/types/manage/distributor/form-display", - "routeName": "entity.entity_form_display.node.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/types/manage/distributor/display", - "routeName": "entity.entity_view_display.node.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/types/manage/distributor/permissions", - "routeName": "entity.node_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/types/manage/distributor/delete", - "routeName": "entity.node_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Magazine article", - "url": { - "path": "/en/admin/structure/types/manage/magazine_article", - "routeName": "entity.node_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/types/manage/magazine_article/fields", - "routeName": "entity.node.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/types/manage/magazine_article/form-display", - "routeName": "entity.entity_form_display.node.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/types/manage/magazine_article/display", - "routeName": "entity.entity_view_display.node.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/types/manage/magazine_article/permissions", - "routeName": "entity.node_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/types/manage/magazine_article/delete", - "routeName": "entity.node_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "News", - "url": { - "path": "/en/admin/structure/types/manage/news", - "routeName": "entity.node_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/types/manage/news/fields", - "routeName": "entity.node.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/types/manage/news/form-display", - "routeName": "entity.entity_form_display.node.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/types/manage/news/display", - "routeName": "entity.entity_view_display.node.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/types/manage/news/permissions", - "routeName": "entity.node_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/types/manage/news/delete", - "routeName": "entity.node_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "OSC Chapter", - "url": { - "path": "/en/admin/structure/types/manage/osc_chapter", - "routeName": "entity.node_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/types/manage/osc_chapter/fields", - "routeName": "entity.node.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/types/manage/osc_chapter/form-display", - "routeName": "entity.entity_form_display.node.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/types/manage/osc_chapter/display", - "routeName": "entity.entity_view_display.node.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/types/manage/osc_chapter/permissions", - "routeName": "entity.node_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/types/manage/osc_chapter/delete", - "routeName": "entity.node_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Page", - "url": { - "path": "/en/admin/structure/types/manage/page", - "routeName": "entity.node_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/types/manage/page/fields", - "routeName": "entity.node.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/types/manage/page/form-display", - "routeName": "entity.entity_form_display.node.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/types/manage/page/display", - "routeName": "entity.entity_view_display.node.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/types/manage/page/permissions", - "routeName": "entity.node_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/types/manage/page/delete", - "routeName": "entity.node_type.delete_form" - } - } - } - ] - } - ] - }, - { - "link": { - "label": "Display modes", - "url": { - "path": "/en/admin/structure/display-modes", - "routeName": "field_ui.display_mode" - } - }, - "subtree": [ - { - "link": { - "label": "Form modes", - "url": { - "path": "/en/admin/structure/display-modes/form", - "routeName": "entity.entity_form_mode.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add form mode", - "url": { - "path": "/en/admin/structure/display-modes/form/add", - "routeName": "field_ui.entity_form_mode_add" - } - } - } - ] - }, - { - "link": { - "label": "View modes", - "url": { - "path": "/en/admin/structure/display-modes/view", - "routeName": "entity.entity_view_mode.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add view mode", - "url": { - "path": "/en/admin/structure/display-modes/view/add", - "routeName": "field_ui.entity_view_mode_add" - } - } - } - ] - } - ] - }, - { - "link": { - "label": "Media types", - "url": { - "path": "/en/admin/structure/media", - "routeName": "entity.media_type.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add media type", - "url": { - "path": "/en/admin/structure/media/add", - "routeName": "entity.media_type.add_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Icon", - "url": { - "path": "/en/admin/structure/media/manage/icon", - "routeName": "entity.media_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/media/manage/icon/fields", - "routeName": "entity.media.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/media/manage/icon/form-display", - "routeName": "entity.entity_form_display.media.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/media/manage/icon/display", - "routeName": "entity.entity_view_display.media.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/media/manage/icon/permissions", - "routeName": "entity.media_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/media/manage/icon/delete", - "routeName": "entity.media_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Image", - "url": { - "path": "/en/admin/structure/media/manage/image", - "routeName": "entity.media_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/media/manage/image/fields", - "routeName": "entity.media.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/media/manage/image/form-display", - "routeName": "entity.entity_form_display.media.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/media/manage/image/display", - "routeName": "entity.entity_view_display.media.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/media/manage/image/permissions", - "routeName": "entity.media_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/media/manage/image/delete", - "routeName": "entity.media_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Video (Remote)", - "url": { - "path": "/en/admin/structure/media/manage/video_remote", - "routeName": "entity.media_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/media/manage/video_remote/fields", - "routeName": "entity.media.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/media/manage/video_remote/form-display", - "routeName": "entity.entity_form_display.media.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/media/manage/video_remote/display", - "routeName": "entity.entity_view_display.media.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/media/manage/video_remote/permissions", - "routeName": "entity.media_type.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/media/manage/video_remote/delete", - "routeName": "entity.media_type.delete_form" - } - } - } - ] - } - ] - }, - { - "link": { - "label": "Menus", - "url": { - "path": "/en/admin/structure/menu", - "routeName": "entity.menu.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add menu", - "url": { - "path": "/en/admin/structure/menu/add", - "routeName": "entity.menu.add_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Administration", - "url": { - "path": "/en/admin/structure/menu/manage/admin", - "routeName": "entity.menu.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Add link", - "url": { - "path": "/en/admin/structure/menu/manage/admin/add", - "routeName": "entity.menu.add_link_form" - } - } - } - ] - }, - { - "link": { - "label": "Footer", - "url": { - "path": "/en/admin/structure/menu/manage/footer", - "routeName": "entity.menu.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Add link", - "url": { - "path": "/en/admin/structure/menu/manage/footer/add", - "routeName": "entity.menu.add_link_form" - } - } - } - ] - }, - { - "link": { - "label": "Footer meta menu", - "url": { - "path": "/en/admin/structure/menu/manage/footer-meta-menu", - "routeName": "entity.menu.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Add link", - "url": { - "path": "/en/admin/structure/menu/manage/footer-meta-menu/add", - "routeName": "entity.menu.add_link_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/menu/manage/footer-meta-menu/delete", - "routeName": "entity.menu.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Main navigation", - "url": { - "path": "/en/admin/structure/menu/manage/main", - "routeName": "entity.menu.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Add link", - "url": { - "path": "/en/admin/structure/menu/manage/main/add", - "routeName": "entity.menu.add_link_form" - } - } - } - ] - }, - { - "link": { - "label": "Tools", - "url": { - "path": "/en/admin/structure/menu/manage/tools", - "routeName": "entity.menu.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Add link", - "url": { - "path": "/en/admin/structure/menu/manage/tools/add", - "routeName": "entity.menu.add_link_form" - } - } - } - ] - }, - { - "link": { - "label": "User account menu", - "url": { - "path": "/en/admin/structure/menu/manage/account", - "routeName": "entity.menu.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Add link", - "url": { - "path": "/en/admin/structure/menu/manage/account/add", - "routeName": "entity.menu.add_link_form" - } - } - } - ] - } - ] - }, - { - "link": { - "label": "Migrations", - "url": { - "path": "/en/admin/structure/migrate", - "routeName": "entity.migration_group.list" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Paragraph types", - "url": { - "path": "/en/admin/structure/paragraphs_type", - "routeName": "entity.paragraphs_type.collection" - } - }, - "subtree": [ - { - "link": { - "label": "All types", - "url": { - "path": "/en/admin/structure/paragraphs_type", - "routeName": "entity.paragraphs_type.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Add paragraph type", - "url": { - "path": "/en/admin/structure/paragraphs_type/add", - "routeName": "paragraphs.type_add" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Carousel", - "url": { - "path": "/en/admin/structure/paragraphs_type/carousel", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/carousel/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/carousel/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/carousel/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/carousel/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "From library", - "url": { - "path": "/en/admin/structure/paragraphs_type/from_library", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/from_library/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/from_library/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/from_library/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/from_library/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Gallery grid", - "url": { - "path": "/en/admin/structure/paragraphs_type/gallery_grid", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/gallery_grid/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/gallery_grid/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/gallery_grid/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/gallery_grid/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Home Stage Teaser", - "url": { - "path": "/en/admin/structure/paragraphs_type/home_stage_teaser", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/home_stage_teaser/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/home_stage_teaser/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/home_stage_teaser/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/home_stage_teaser/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Image", - "url": { - "path": "/en/admin/structure/paragraphs_type/image", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/image/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/image/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/image/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/image/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Info grid", - "url": { - "path": "/en/admin/structure/paragraphs_type/info_grid", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/info_grid/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/info_grid/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/info_grid/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/info_grid/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Movement details", - "url": { - "path": "/en/admin/structure/paragraphs_type/movement_details", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/movement_details/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/movement_details/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/movement_details/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/movement_details/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Product", - "url": { - "path": "/en/admin/structure/paragraphs_type/product", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/product/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/product/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/product/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/product/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Promo teaser", - "url": { - "path": "/en/admin/structure/paragraphs_type/promo_teaser", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/promo_teaser/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/promo_teaser/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/promo_teaser/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/promo_teaser/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Related Slider List", - "url": { - "path": "/en/admin/structure/paragraphs_type/related_slider_list", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/related_slider_list/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/related_slider_list/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/related_slider_list/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/related_slider_list/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Static Node", - "url": { - "path": "/en/admin/structure/paragraphs_type/static_node", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/static_node/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/static_node/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/static_node/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/static_node/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Switcher Item", - "url": { - "path": "/en/admin/structure/paragraphs_type/switcher_item", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/switcher_item/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/switcher_item/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/switcher_item/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/switcher_item/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Switcher", - "url": { - "path": "/en/admin/structure/paragraphs_type/switcher", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/switcher/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/switcher/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/switcher/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/switcher/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Teaser List", - "url": { - "path": "/en/admin/structure/paragraphs_type/teaser_list", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/teaser_list/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/teaser_list/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/teaser_list/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/teaser_list/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Teaser", - "url": { - "path": "/en/admin/structure/paragraphs_type/teaser", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/teaser/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/teaser/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/teaser/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/teaser/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Text (Media) [Legacy?]", - "url": { - "path": "/en/admin/structure/paragraphs_type/text_media", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/text_media/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/text_media/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/text_media/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/text_media/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Text / Image", - "url": { - "path": "/en/admin/structure/paragraphs_type/text_image", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/text_image/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/text_image/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/text_image/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/text_image/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Text", - "url": { - "path": "/en/admin/structure/paragraphs_type/text", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/text/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/text/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/text/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/text/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Video (Remote)", - "url": { - "path": "/en/admin/structure/paragraphs_type/video_remote", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/video_remote/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/video_remote/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/video_remote/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/video_remote/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "blökkli Fragment", - "url": { - "path": "/en/admin/structure/paragraphs_type/blokkli_fragment", - "routeName": "entity.paragraphs_type.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/paragraphs_type/blokkli_fragment/fields", - "routeName": "entity.paragraph.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/paragraphs_type/blokkli_fragment/form-display", - "routeName": "entity.entity_form_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/paragraphs_type/blokkli_fragment/display", - "routeName": "entity.entity_view_display.paragraph.default" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/paragraphs_type/blokkli_fragment/delete", - "routeName": "entity.paragraphs_type.delete_form" - } - } - } - ] - } - ] - }, - { - "link": { - "label": "Registration settings", - "url": { - "path": "/en/admin/structure/registration/settings", - "routeName": "registration.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Taxonomy", - "url": { - "path": "/en/admin/structure/taxonomy", - "routeName": "entity.taxonomy_vocabulary.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add vocabulary", - "url": { - "path": "/en/admin/structure/taxonomy/add", - "routeName": "entity.taxonomy_vocabulary.add_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "B2B Product Category", - "url": { - "path": "/en/admin/structure/taxonomy/manage/b2b_product_category/overview", - "routeName": "entity.taxonomy_vocabulary.overview_form" - } - }, - "subtree": [ - { - "link": { - "label": "Edit", - "url": { - "path": "/en/admin/structure/taxonomy/manage/b2b_product_category", - "routeName": "entity.taxonomy_vocabulary.edit_form" - } - } - }, - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/taxonomy/manage/b2b_product_category/overview/fields", - "routeName": "entity.taxonomy_term.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/b2b_product_category/overview/form-display", - "routeName": "entity.entity_form_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/b2b_product_category/overview/display", - "routeName": "entity.entity_view_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/taxonomy/manage/b2b_product_category/overview/permissions", - "routeName": "entity.taxonomy_vocabulary.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/taxonomy/manage/b2b_product_category/delete", - "routeName": "entity.taxonomy_vocabulary.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Context (Texts)", - "url": { - "path": "/en/admin/structure/taxonomy/manage/context_texts/overview", - "routeName": "entity.taxonomy_vocabulary.overview_form" - } - }, - "subtree": [ - { - "link": { - "label": "Edit", - "url": { - "path": "/en/admin/structure/taxonomy/manage/context_texts", - "routeName": "entity.taxonomy_vocabulary.edit_form" - } - } - }, - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/taxonomy/manage/context_texts/overview/fields", - "routeName": "entity.taxonomy_term.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/context_texts/overview/form-display", - "routeName": "entity.entity_form_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/context_texts/overview/display", - "routeName": "entity.entity_view_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/taxonomy/manage/context_texts/overview/permissions", - "routeName": "entity.taxonomy_vocabulary.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/taxonomy/manage/context_texts/delete", - "routeName": "entity.taxonomy_vocabulary.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "FAQ", - "url": { - "path": "/en/admin/structure/taxonomy/manage/faq/overview", - "routeName": "entity.taxonomy_vocabulary.overview_form" - } - }, - "subtree": [ - { - "link": { - "label": "Edit", - "url": { - "path": "/en/admin/structure/taxonomy/manage/faq", - "routeName": "entity.taxonomy_vocabulary.edit_form" - } - } - }, - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/taxonomy/manage/faq/overview/fields", - "routeName": "entity.taxonomy_term.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/faq/overview/form-display", - "routeName": "entity.entity_form_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/faq/overview/display", - "routeName": "entity.entity_view_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/taxonomy/manage/faq/overview/permissions", - "routeName": "entity.taxonomy_vocabulary.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/taxonomy/manage/faq/delete", - "routeName": "entity.taxonomy_vocabulary.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Magazine category", - "url": { - "path": "/en/admin/structure/taxonomy/manage/magazine_category/overview", - "routeName": "entity.taxonomy_vocabulary.overview_form" - } - }, - "subtree": [ - { - "link": { - "label": "Edit", - "url": { - "path": "/en/admin/structure/taxonomy/manage/magazine_category", - "routeName": "entity.taxonomy_vocabulary.edit_form" - } - } - }, - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/taxonomy/manage/magazine_category/overview/fields", - "routeName": "entity.taxonomy_term.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/magazine_category/overview/form-display", - "routeName": "entity.entity_form_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/magazine_category/overview/display", - "routeName": "entity.entity_view_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/taxonomy/manage/magazine_category/overview/permissions", - "routeName": "entity.taxonomy_vocabulary.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/taxonomy/manage/magazine_category/delete", - "routeName": "entity.taxonomy_vocabulary.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Market", - "url": { - "path": "/en/admin/structure/taxonomy/manage/market/overview", - "routeName": "entity.taxonomy_vocabulary.overview_form" - } - }, - "subtree": [ - { - "link": { - "label": "Edit", - "url": { - "path": "/en/admin/structure/taxonomy/manage/market", - "routeName": "entity.taxonomy_vocabulary.edit_form" - } - } - }, - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/taxonomy/manage/market/overview/fields", - "routeName": "entity.taxonomy_term.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/market/overview/form-display", - "routeName": "entity.entity_form_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/market/overview/display", - "routeName": "entity.entity_view_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/taxonomy/manage/market/overview/permissions", - "routeName": "entity.taxonomy_vocabulary.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/taxonomy/manage/market/delete", - "routeName": "entity.taxonomy_vocabulary.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Watch caliber", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_caliber/overview", - "routeName": "entity.taxonomy_vocabulary.overview_form" - } - }, - "subtree": [ - { - "link": { - "label": "Edit", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_caliber", - "routeName": "entity.taxonomy_vocabulary.edit_form" - } - } - }, - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_caliber/overview/fields", - "routeName": "entity.taxonomy_term.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_caliber/overview/form-display", - "routeName": "entity.entity_form_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_caliber/overview/display", - "routeName": "entity.entity_view_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_caliber/overview/permissions", - "routeName": "entity.taxonomy_vocabulary.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_caliber/delete", - "routeName": "entity.taxonomy_vocabulary.delete_form" - } - } - } - ] - }, - { - "link": { - "label": "Watch collection", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_collection/overview", - "routeName": "entity.taxonomy_vocabulary.overview_form" - } - }, - "subtree": [ - { - "link": { - "label": "Edit", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_collection", - "routeName": "entity.taxonomy_vocabulary.edit_form" - } - } - }, - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_collection/overview/fields", - "routeName": "entity.taxonomy_term.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_collection/overview/form-display", - "routeName": "entity.entity_form_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_collection/overview/display", - "routeName": "entity.entity_view_display.taxonomy_term.default" - } - } - }, - { - "link": { - "label": "Manage permissions", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_collection/overview/permissions", - "routeName": "entity.taxonomy_vocabulary.entity_permissions_form" - } - } - }, - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/structure/taxonomy/manage/watch_collection/delete", - "routeName": "entity.taxonomy_vocabulary.delete_form" - } - } - } - ] - } - ] - }, - { - "link": { - "label": "Views", - "url": { - "path": "/en/admin/structure/views", - "routeName": "entity.view.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add view", - "url": { - "path": "/en/admin/structure/views/add", - "routeName": "views_ui.add" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Abandoned cart emails flow", - "url": { - "path": "/en/admin/structure/views/view/abandoned_cart_emails_flow", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Activity", - "url": { - "path": "/en/admin/structure/views/view/activity", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Activity", - "url": { - "path": "/en/admin/structure/views/view/commerce_activity", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Admin Watch Collections", - "url": { - "path": "/en/admin/structure/views/view/admin_watch_collections", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Archive", - "url": { - "path": "/en/admin/structure/views/view/archive", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "CRM Contact reference", - "url": { - "path": "/en/admin/structure/views/view/crm_contact_reference", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "CRM Core Activity overview", - "url": { - "path": "/en/admin/structure/views/view/crm_core_activity_overview", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "CRM Core Individual Orders", - "url": { - "path": "/en/admin/structure/views/view/crm_core_individual_orders", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "CRM Core Individual WSR", - "url": { - "path": "/en/admin/structure/views/view/crm_core_individual_wsr", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "CRM Core Individual overview", - "url": { - "path": "/en/admin/structure/views/view/crm_core_individual_overview", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "CRM Individual reference", - "url": { - "path": "/en/admin/structure/views/view/crm_individual_reference", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "CRM User Reference", - "url": { - "path": "/en/admin/structure/views/view/crm_user_reference", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Cart block", - "url": { - "path": "/en/admin/structure/views/view/commerce_cart_block", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Cart form B2B", - "url": { - "path": "/en/admin/structure/views/view/cart_form_b2b", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Cart form", - "url": { - "path": "/en/admin/structure/views/view/commerce_cart_form", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Carts", - "url": { - "path": "/en/admin/structure/views/view/commerce_carts", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Checkout Order Summary", - "url": { - "path": "/en/admin/structure/views/view/commerce_checkout_order_summary", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Commerce add to cart confirmation", - "url": { - "path": "/en/admin/structure/views/view/confirm_message_product_display", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Contact requests", - "url": { - "path": "/en/admin/structure/views/view/contact_requests", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Contact to User Management", - "url": { - "path": "/en/admin/structure/views/view/contact_to_user_management", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Contacts Dashboard", - "url": { - "path": "/en/admin/structure/views/view/contacts", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Content", - "url": { - "path": "/en/admin/structure/views/view/content", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Coupon codes", - "url": { - "path": "/en/admin/structure/views/view/coupon_codes", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Coupons", - "url": { - "path": "/en/admin/structure/views/view/commerce_promotion_coupons", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Custom block library", - "url": { - "path": "/en/admin/structure/views/view/block_content", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Distributor Search", - "url": { - "path": "/en/admin/structure/views/view/distributor_search", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Distributors", - "url": { - "path": "/en/admin/structure/views/view/distributors", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Entity event log", - "url": { - "path": "/en/admin/structure/views/view/entity_event_log", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "FAQ", - "url": { - "path": "/en/admin/structure/views/view/faq", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Files", - "url": { - "path": "/en/admin/structure/views/view/files", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Frontpage", - "url": { - "path": "/en/admin/structure/views/view/frontpage", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Gifts variations", - "url": { - "path": "/en/admin/structure/views/view/gifts_variations", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Giveaway variations", - "url": { - "path": "/en/admin/structure/views/view/giveaway_variations", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Glossary", - "url": { - "path": "/en/admin/structure/views/view/glossary", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "LE Numbers", - "url": { - "path": "/en/admin/structure/views/view/limited_edition_number", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Limited Edition reservations", - "url": { - "path": "/en/admin/structure/views/view/limited_edition_reservations", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Mail Queue", - "url": { - "path": "/en/admin/structure/views/view/mail_queue", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Marketing Automation", - "url": { - "path": "/en/admin/structure/views/view/marketing_automation", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Markets", - "url": { - "path": "/en/admin/structure/views/view/markets", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Media", - "url": { - "path": "/en/admin/structure/views/view/media", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Media library", - "url": { - "path": "/en/admin/structure/views/view/media_library", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Message", - "url": { - "path": "/en/admin/structure/views/view/message", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "My Activities export", - "url": { - "path": "/en/admin/structure/views/view/my_activities_export", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "My distributors", - "url": { - "path": "/en/admin/structure/views/view/my_distributors", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "OSC Chapters", - "url": { - "path": "/en/admin/structure/views/view/osc_chapters", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Order Items", - "url": { - "path": "/en/admin/structure/views/view/order_items", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Order export", - "url": { - "path": "/en/admin/structure/views/view/order_export", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Order items", - "url": { - "path": "/en/admin/structure/views/view/commerce_order_item_table", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Orders", - "url": { - "path": "/en/admin/structure/views/view/commerce_orders", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Paragraphs library", - "url": { - "path": "/en/admin/structure/views/view/paragraphs_library", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Payments", - "url": { - "path": "/en/admin/structure/views/view/commerce_order_payments", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Payments", - "url": { - "path": "/en/admin/structure/views/view/payments", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "People", - "url": { - "path": "/en/admin/structure/views/view/user_admin_people", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Price list search", - "url": { - "path": "/en/admin/structure/views/view/price_list_search", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Product prices", - "url": { - "path": "/en/admin/structure/views/view/commerce_pricelist_product_prices", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Products", - "url": { - "path": "/en/admin/structure/views/view/commerce_products", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Profiles", - "url": { - "path": "/en/admin/structure/views/view/profiles", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Promotions", - "url": { - "path": "/en/admin/structure/views/view/commerce_promotions", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Recent content", - "url": { - "path": "/en/admin/structure/views/view/content_recent", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Referenced Distributors ", - "url": { - "path": "/en/admin/structure/views/view/referenced_distributors", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Registrations", - "url": { - "path": "/en/admin/structure/views/view/registrations", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Service Request panel", - "url": { - "path": "/en/admin/structure/views/view/service_request_panel", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Spare Part variations", - "url": { - "path": "/en/admin/structure/views/view/spare_part_variations", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Stores", - "url": { - "path": "/en/admin/structure/views/view/commerce_stores", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Straps variations", - "url": { - "path": "/en/admin/structure/views/view/straps_variations", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Taxonomy term", - "url": { - "path": "/en/admin/structure/views/view/taxonomy_term", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Tickets panel", - "url": { - "path": "/en/admin/structure/views/view/tickets_panel", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Tools variations", - "url": { - "path": "/en/admin/structure/views/view/tools_variations", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Transactional emails", - "url": { - "path": "/en/admin/structure/views/view/transactional_emails", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "User Watch Registrations", - "url": { - "path": "/en/admin/structure/views/view/user_watch_registrations", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "User orders", - "url": { - "path": "/en/admin/structure/views/view/commerce_user_orders", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "User to contact management", - "url": { - "path": "/en/admin/structure/views/view/user_to_contact_management", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Variation prices", - "url": { - "path": "/en/admin/structure/views/view/commerce_product_variation_prices", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Watch variations", - "url": { - "path": "/en/admin/structure/views/view/watches", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Watchdog", - "url": { - "path": "/en/admin/structure/views/view/watchdog", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Watches variations", - "url": { - "path": "/en/admin/structure/views/view/product_variations_solr", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Webform submissions", - "url": { - "path": "/en/admin/structure/views/view/webform_submissions", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Who's new", - "url": { - "path": "/en/admin/structure/views/view/who_s_new", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Who's online block", - "url": { - "path": "/en/admin/structure/views/view/who_s_online", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Wishlist items", - "url": { - "path": "/en/admin/structure/views/view/wishlist_items", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "tickets", - "url": { - "path": "/en/admin/structure/views/view/tickets", - "routeName": "entity.view.edit_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Watch settings", - "url": { - "path": "/en/admin/structure/watch/settings", - "routeName": "watch.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Mail Automation", - "url": { - "path": "/en/admin/structure/mail-automation", - "routeName": "oris_mail_automation.overview" - } - }, - "subtree": [ - { - "link": { - "label": "Mail Queue List", - "url": { - "path": "/en/admin/structure/mail-queue-list", - "routeName": "view.mail_queue.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Mail Automation settings", - "url": { - "path": "/en/admin/mail/settings", - "routeName": "oris_mail_automation.mail_automation_settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Mandrill webhooks config", - "url": { - "path": "/en/admin/mail/mandrill-webhooks-config", - "routeName": "oris_mail_automation.mandrill_webhooks_config" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Mail queue type", - "url": { - "path": "/en/admin/structure/mail_queue_type", - "routeName": "entity.mail_queue_type.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Abandoned cart mail", - "url": { - "path": "/en/admin/structure/mail_queue_type/abandoned_cart_mail/edit", - "routeName": "entity.mail_queue_type.edit_form" - } - } - }, - { - "link": { - "label": "Registration reminder", - "url": { - "path": "/en/admin/structure/mail_queue_type/registration_reminder/edit", - "routeName": "entity.mail_queue_type.edit_form" - } - } - } - ] - }, - { - "link": { - "label": "Transactional emails", - "url": { - "path": "/en/admin/transactional-emails", - "routeName": "view.transactional_emails.page_1" - } - }, - "subtree": [] - } - ] - } - ] - }, - { - "link": { - "label": "Appearance", - "url": { - "path": "/en/admin/appearance", - "routeName": "system.themes_page" - } - }, - "subtree": [ - { - "link": { - "label": "Install new theme", - "url": { - "path": "/en/admin/theme/install", - "routeName": "update.theme_install" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Settings", - "url": { - "path": "/en/admin/appearance/settings", - "routeName": "system.theme_settings" - } - }, - "subtree": [ - { - "link": { - "label": "Claro", - "url": { - "path": "/en/admin/appearance/settings/claro", - "routeName": "system.theme_settings_theme" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Gin", - "url": { - "path": "/en/admin/appearance/settings/gin", - "routeName": "system.theme_settings_theme" - } - }, - "subtree": [] - }, - { - "link": { - "label": "MyOris", - "url": { - "path": "/en/admin/appearance/settings/myoris", - "routeName": "system.theme_settings_theme" - } - }, - "subtree": [] - }, - { - "link": { - "label": "oris_zendesk_app", - "url": { - "path": "/en/admin/appearance/settings/oris_zendesk_app", - "routeName": "system.theme_settings_theme" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Update", - "url": { - "path": "/en/admin/appearance/update", - "routeName": "update.theme_update" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Extend", - "url": { - "path": "/en/admin/modules", - "routeName": "system.modules_list" - } - }, - "subtree": [ - { - "link": { - "label": "Install new module", - "url": { - "path": "/en/admin/modules/install", - "routeName": "update.module_install" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Uninstall module", - "url": { - "path": "/en/admin/modules/uninstall", - "routeName": "system.modules_uninstall" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Update", - "url": { - "path": "/en/admin/modules/update", - "routeName": "update.module_update" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "ORIS BO", - "url": { - "path": "/en/admin/myoris", - "routeName": "oris_myoris.overview" - } - }, - "subtree": [ - { - "link": { - "label": "MyOris", - "url": { - "path": "/en/admin/myoris/root", - "routeName": "oris_myoris.myoris_root" - } - }, - "subtree": [ - { - "link": { - "label": "Settings", - "url": { - "path": "/en/admin/myoris/settings", - "routeName": "oris_myoris.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Markets", - "url": { - "path": "/en/admin/myoris/markets", - "routeName": "view.markets.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "My distributors", - "url": { - "path": "/en/admin/myoris/my-distributors", - "routeName": "view.my_distributors.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "OSC Chapters", - "url": { - "path": "/en/admin/myoris/osc-chapters", - "routeName": "view.osc_chapters.page_1" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Watches", - "url": { - "path": "/en/admin/watches/root", - "routeName": "oris_myoris.watches_root" - } - }, - "subtree": [ - { - "link": { - "label": "Watches", - "url": { - "path": "/en/admin/watches", - "routeName": "view.watches.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Registrations", - "url": { - "path": "/en/admin/watches/registrations", - "routeName": "view.registrations.dashboard" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Limited edition", - "url": { - "path": "/en/admin/myoris/limited-edition", - "routeName": "oris_limited_edition.root" - } - }, - "subtree": [ - { - "link": { - "label": "LE report by Watch", - "url": { - "path": "/en/admin/myoris/limited-edition/status", - "routeName": "oris_limited_edition.status_report_router" - } - }, - "subtree": [] - }, - { - "link": { - "label": "LE reservations", - "url": { - "path": "/en/admin/myoris/limited-edition/reservations", - "routeName": "view.limited_edition_reservations.page_1" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Configuration", - "url": { - "path": "/en/admin/myoris/configuration", - "routeName": "oris_myoris.configuration_root" - } - }, - "subtree": [ - { - "link": { - "label": "OWA configuration", - "url": { - "path": "/en/admin/myoris/owa-configuration", - "routeName": "oris_owa.configuration_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Oris Product import configuration", - "url": { - "path": "/en/admin/myoris/oris_product_import/configuration", - "routeName": "oris_product_import.configuration_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Requests & tickets", - "url": { - "path": "/en/admin/myoris/requests_tickets", - "routeName": "oris_myoris.requests_tickets" - } - }, - "subtree": [ - { - "link": { - "label": "Service requests", - "url": { - "path": "/en/admin/service-request", - "routeName": "view.service_request_panel.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Contact requests", - "url": { - "path": "/en/admin/contact-request", - "routeName": "view.contact_requests.dashboard" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Tickets panel", - "url": { - "path": "/en/admin/tickets", - "routeName": "view.tickets_panel.page_1" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Wishlist items", - "url": { - "path": "/en/admin/wishlist_item/list", - "routeName": "view.wishlist_items.dashboard" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "CRM", - "url": { - "path": "/en/crm-core", - "routeName": "crm_core.overview" - } - }, - "subtree": [ - { - "link": { - "label": "CRM Activities", - "url": { - "path": "/en/crm-core/activity", - "routeName": "entity.crm_core_activity.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "CRM Contacts", - "url": { - "path": "/en/crm-core/contacts", - "routeName": "view.contacts.page_1" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Import CRM Individuals", - "url": { - "path": "/en/admin/crm-core/import-individuals", - "routeName": "oris_individual_import.import_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Configuration", - "url": { - "path": "/en/admin/config", - "routeName": "system.admin_config" - } - }, - "subtree": [ - { - "link": { - "label": "People", - "url": { - "path": "/en/admin/config/people", - "routeName": "user.admin_index" - } - }, - "subtree": [ - { - "link": { - "label": "Account settings", - "url": { - "path": "/en/admin/config/people/accounts", - "routeName": "entity.user.admin_form" - } - }, - "subtree": [ - { - "link": { - "label": "Manage fields", - "url": { - "path": "/en/admin/config/people/accounts/fields", - "routeName": "entity.user.field_ui_fields" - } - } - }, - { - "link": { - "label": "Manage form display", - "url": { - "path": "/en/admin/config/people/accounts/form-display", - "routeName": "entity.entity_form_display.user.default" - } - } - }, - { - "link": { - "label": "Manage display", - "url": { - "path": "/en/admin/config/people/accounts/display", - "routeName": "entity.entity_view_display.user.default" - } - } - } - ] - }, - { - "link": { - "label": "CAPTCHA settings", - "url": { - "path": "/en/admin/config/people/captcha", - "routeName": "captcha_settings" - } - }, - "subtree": [ - { - "link": { - "label": "CAPTCHA examples", - "url": { - "path": "/en/admin/config/people/captcha/examples", - "routeName": "captcha_examples" - } - } - }, - { - "link": { - "label": "reCAPTCHA V3 settings", - "url": { - "path": "/en/admin/config/people/captcha/recaptcha-v3", - "routeName": "recaptcha_v3.settings" - } - } - }, - { - "link": { - "label": "reCAPTCHA V3 actions", - "url": { - "path": "/en/admin/config/people/captcha/recaptcha-v3-actions", - "routeName": "entity.recaptcha_v3_action.collection" - } - } - } - ] - }, - { - "link": { - "label": "Flood control", - "url": { - "path": "/en/admin/config/people/flood-control", - "routeName": "flood_control.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Profile types", - "url": { - "path": "/en/admin/config/people/profile-types", - "routeName": "entity.profile_type.collection" - } - }, - "subtree": [ - { - "link": { - "label": "B2B", - "url": { - "path": "/en/admin/config/people/profile-types/manage/b2b", - "routeName": "entity.profile_type.edit_form" - } - } - }, - { - "link": { - "label": "Customer", - "url": { - "path": "/en/admin/config/people/profile-types/manage/customer", - "routeName": "entity.profile_type.edit_form" - } - } - } - ] - }, - { - "link": { - "label": "Simple FB Connect", - "url": { - "path": "/en/admin/config/people/simple-fb-connect", - "routeName": "simple_fb_connect.settings_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Simple OAuth", - "url": { - "path": "/en/admin/config/people/simple_oauth", - "routeName": "oauth2_token.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "IP address bans", - "url": { - "path": "/en/admin/config/people/ban", - "routeName": "ban.admin_page" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "System", - "url": { - "path": "/en/admin/config/system", - "routeName": "system.admin_config_system" - } - }, - "subtree": [ - { - "link": { - "label": "Basic site settings", - "url": { - "path": "/en/admin/config/system/site-information", - "routeName": "system.site_information_settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Mail System", - "url": { - "path": "/en/admin/config/system/mailsystem", - "routeName": "mailsystem.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Cron", - "url": { - "path": "/en/admin/config/system/cron/jobs", - "routeName": "entity.ultimate_cron_job.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Geofield Map settings", - "url": { - "path": "/en/admin/config/system/geofield_map_settings", - "routeName": "geofield_map.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Google Tag Manager", - "url": { - "path": "/en/admin/config/system/google-tag", - "routeName": "entity.google_tag_container.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Queue manager", - "url": { - "path": "/en/admin/config/system/queue-ui", - "routeName": "queue_ui.overview_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Geocoder", - "url": { - "path": "/en/admin/config/system/geocoder", - "routeName": "geocoder.settings" - } - }, - "subtree": [ - { - "link": { - "label": "Providers", - "url": { - "path": "/en/admin/config/system/geocoder/geocoder-provider", - "routeName": "entity.geocoder_provider.collection" - } - } - } - ] - }, - { - "link": { - "label": "Delete orphaned composite entities", - "url": { - "path": "/en/admin/config/system/delete-orphans", - "routeName": "entity_reference_revisions.delete_orphans" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Gin Login", - "url": { - "path": "/en/admin/config/system/configuration/gin-login", - "routeName": "gin_login.configuration_form" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Content authoring", - "url": { - "path": "/en/admin/config/content", - "routeName": "system.admin_config_content" - } - }, - "subtree": [ - { - "link": { - "label": "Diff", - "url": { - "path": "/en/admin/config/content/diff/general", - "routeName": "diff.general_settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Entity Print", - "url": { - "path": "/en/admin/config/content/entityprint", - "routeName": "entity_print.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Entity Usage Settings", - "url": { - "path": "/en/admin/config/entity-usage/settings", - "routeName": "entity_usage.settings.form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Linkit", - "url": { - "path": "/en/admin/config/content/linkit", - "routeName": "entity.linkit_profile.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Paragraphs library item settings", - "url": { - "path": "/en/admin/config/content/paragraphs_library_item", - "routeName": "paragraphs_library_item.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Paragraphs settings", - "url": { - "path": "/en/admin/config/content/paragraphs", - "routeName": "paragraphs.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Pathologic configuration", - "url": { - "path": "/en/admin/config/content/pathologic", - "routeName": "pathologic.config_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Text formats and editors", - "url": { - "path": "/en/admin/config/content/formats", - "routeName": "filter.admin_overview" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Blokkli Settings", - "url": { - "path": "/en/admin/config/content/blokkli", - "routeName": "paragraphs_blokkli.settings" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "User interface", - "url": { - "path": "/en/admin/config/user-interface", - "routeName": "system.admin_config_ui" - } - }, - "subtree": [ - { - "link": { - "label": "Admin Toolbar Search", - "url": { - "path": "/en/admin/config/user-interface/admin-toolbar-search-settings", - "routeName": "admin_toolbar_search.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Admin Toolbar Tools", - "url": { - "path": "/en/admin/config/user-interface/admin-toolbar-tools", - "routeName": "admin_toolbar_tools.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Admin Toolbar", - "url": { - "path": "/en/admin/config/user-interface/admin-toolbar", - "routeName": "admin_toolbar.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Chosen", - "url": { - "path": "/en/admin/config/user-interface/chosen", - "routeName": "chosen.admin" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Antibot", - "url": { - "path": "/en/admin/config/user-interface/antibot", - "routeName": "antibot.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Protect Form Flood Control", - "url": { - "path": "/en/admin/config/user-interface/protect-form-flood-control", - "routeName": "protect_form_flood_control.settings" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Development", - "url": { - "path": "/en/admin/config/development", - "routeName": "system.admin_config_development" - } - }, - "subtree": [ - { - "link": { - "label": "Performance", - "url": { - "path": "/en/admin/config/development/performance", - "routeName": "system.performance_settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Development settings", - "url": { - "path": "/en/admin/config/development/settings", - "routeName": "system.development_settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Logging and errors", - "url": { - "path": "/en/admin/config/development/logging", - "routeName": "system.logging_settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Maintenance mode", - "url": { - "path": "/en/admin/config/development/maintenance", - "routeName": "system.site_maintenance_mode" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Cache warming", - "url": { - "path": "/en/admin/config/development/warmer", - "routeName": "warmer.enqueue" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Configuration Split settings", - "url": { - "path": "/en/admin/config/development/configuration/config-split", - "routeName": "entity.config_split.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Configuration synchronization", - "url": { - "path": "/en/admin/config/development/configuration", - "routeName": "config.sync" - } - }, - "subtree": [ - { - "link": { - "label": "Import", - "url": { - "path": "/en/admin/config/development/configuration/full/import", - "routeName": "config.import_full" - } - } - }, - { - "link": { - "label": "Export", - "url": { - "path": "/en/admin/config/development/configuration/full/export", - "routeName": "config.export_full" - } - } - }, - { - "link": { - "label": "Ignore", - "url": { - "path": "/en/admin/config/development/configuration/ignore", - "routeName": "config_ignore.settings" - } - } - } - ] - }, - { - "link": { - "label": "Environment Indicator Settings", - "url": { - "path": "/en/admin/config/development/environment-indicator", - "routeName": "environment_indicator.settings" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Media", - "url": { - "path": "/en/admin/config/media", - "routeName": "system.admin_config_media" - } - }, - "subtree": [ - { - "link": { - "label": "Crop types", - "url": { - "path": "/en/admin/config/media/crop", - "routeName": "crop.overview_types" - } - }, - "subtree": [] - }, - { - "link": { - "label": "File system", - "url": { - "path": "/en/admin/config/media/file-system", - "routeName": "system.file_system_settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Image styles", - "url": { - "path": "/en/admin/config/media/image-styles", - "routeName": "entity.image_style.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Media Library settings", - "url": { - "path": "/en/admin/config/media/media-library", - "routeName": "media_library.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Media settings", - "url": { - "path": "/en/admin/config/media/media-settings", - "routeName": "media.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Rokka", - "url": { - "path": "/en/admin/config/media/rokka", - "routeName": "rokka.admin_settings" - } - }, - "subtree": [ - { - "link": { - "label": "PDF thumbnails", - "url": { - "path": "/en/admin/config/media/rokka/pdf", - "routeName": "rokka.thumbnail.settings" - } - } - } - ] - }, - { - "link": { - "label": "Responsive image styles", - "url": { - "path": "/en/admin/config/media/responsive-image-style", - "routeName": "entity.responsive_image_style.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Image toolkit", - "url": { - "path": "/en/admin/config/media/image-toolkit", - "routeName": "system.image_toolkit_settings" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Message", - "url": { - "path": "/en/admin/config/message", - "routeName": "message.main_settings" - } - }, - "subtree": [ - { - "link": { - "label": "Message", - "url": { - "path": "/en/admin/config/message/message", - "routeName": "message.settings" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Search and metadata", - "url": { - "path": "/en/admin/config/search", - "routeName": "system.admin_config_search" - } - }, - "subtree": [ - { - "link": { - "label": "URL aliases", - "url": { - "path": "/en/admin/config/search/path", - "routeName": "entity.path_alias.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Data Layer", - "url": { - "path": "/en/admin/config/search/datalayer", - "routeName": "datalayer.settings_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Metatag", - "url": { - "path": "/en/admin/config/search/metatag", - "routeName": "entity.metatag_defaults.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Settings", - "url": { - "path": "/en/admin/config/search/metatag/settings", - "routeName": "metatag.settings" - } - } - } - ] - }, - { - "link": { - "label": "Search API", - "url": { - "path": "/en/admin/config/search/search-api", - "routeName": "search_api.overview" - } - }, - "subtree": [] - }, - { - "link": { - "label": "URL redirects", - "url": { - "path": "/en/admin/config/search/redirect", - "routeName": "redirect.list" - } - }, - "subtree": [ - { - "link": { - "label": "Add redirect", - "url": { - "path": "/en/admin/config/search/redirect/add", - "routeName": "redirect.add" - } - } - }, - { - "link": { - "label": "Fix 404 pages", - "url": { - "path": "/en/admin/config/search/redirect/404", - "routeName": "redirect_404.fix_404" - } - } - }, - { - "link": { - "label": "Settings", - "url": { - "path": "/en/admin/config/search/redirect/settings", - "routeName": "redirect.settings" - } - } - } - ] - }, - { - "link": { - "label": "Facets", - "url": { - "path": "/en/admin/config/search/facets", - "routeName": "entity.facets_facet.collection" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Region and language", - "url": { - "path": "/en/admin/config/regional", - "routeName": "system.admin_config_regional" - } - }, - "subtree": [ - { - "link": { - "label": "Regional settings", - "url": { - "path": "/en/admin/config/regional/settings", - "routeName": "system.regional_settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Date and time formats", - "url": { - "path": "/en/admin/config/regional/date-time", - "routeName": "entity.date_format.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Languages", - "url": { - "path": "/en/admin/config/regional/language", - "routeName": "entity.configurable_language.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add language", - "url": { - "path": "/en/admin/config/regional/language/add", - "routeName": "language.add" - } - } - }, - { - "link": { - "label": "Detection and selection", - "url": { - "path": "/en/admin/config/regional/language/detection", - "routeName": "language.negotiation" - } - } - } - ] - }, - { - "link": { - "label": "Name formats", - "url": { - "path": "/en/admin/config/regional/name", - "routeName": "name.name_format_list" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Content language and translation", - "url": { - "path": "/en/admin/config/regional/content-language", - "routeName": "language.content_settings_page" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Texts Settings", - "url": { - "path": "/en/admin/config/regional/texts", - "routeName": "texts.settings_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "User interface translation", - "url": { - "path": "/en/admin/config/regional/translate", - "routeName": "locale.translate_page" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Configuration translation", - "url": { - "path": "/en/admin/config/regional/config-translation", - "routeName": "config_translation.mapper_list" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "CRM", - "url": { - "path": "/en/admin/config/crm-core", - "routeName": "crm_core.config_overview" - } - }, - "subtree": [ - { - "link": { - "label": "General settings", - "url": { - "path": "/en/admin/config/crm-core/settings", - "routeName": "crm_core.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "User Synchronization", - "url": { - "path": "/en/admin/config/crm-core/user-sync", - "routeName": "crm_core_user_sync.config" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Commerce settings", - "url": { - "path": "/en/admin/config/crm-core/commerce/settings", - "routeName": "crm_core_commerce.settings" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Web services", - "url": { - "path": "/en/admin/config/services", - "routeName": "system.admin_config_services" - } - }, - "subtree": [ - { - "link": { - "label": "Consumers", - "url": { - "path": "/en/admin/config/services/consumer", - "routeName": "entity.consumer.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "GraphQL", - "url": { - "path": "/en/admin/config/graphql", - "routeName": "entity.graphql_server.collection" - } - }, - "subtree": [] - }, - { - "link": { - "label": "JSON:API", - "url": { - "path": "/en/admin/config/services/jsonapi", - "routeName": "jsonapi.settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Mailchimp Transactional", - "url": { - "path": "/en/admin/config/services/mailchimp_transactional", - "routeName": "mailchimp_transactional.admin" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Mailchimp", - "url": { - "path": "/en/admin/config/services/mailchimp", - "routeName": "mailchimp.admin" - } - }, - "subtree": [ - { - "link": { - "label": "Mailchimp Audiences", - "url": { - "path": "/en/admin/config/services/mailchimp/lists", - "routeName": "mailchimp_lists.overview" - } - } - }, - { - "link": { - "label": "OAuth Settings", - "url": { - "path": "/en/admin/config/services/mailchimp/oauth", - "routeName": "mailchimp.admin.oauth" - } - } - }, - { - "link": { - "label": "Signup Forms", - "url": { - "path": "/en/admin/config/services/mailchimp/signup", - "routeName": "mailchimp_signup.admin" - } - } - } - ] - }, - { - "link": { - "label": "REST", - "url": { - "path": "/en/admin/config/services/rest", - "routeName": "restui.list" - } - }, - "subtree": [] - }, - { - "link": { - "label": "RSS publishing", - "url": { - "path": "/en/admin/config/services/rss-publishing", - "routeName": "system.rss_feeds_settings" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Menu Linkset Settings", - "url": { - "path": "/en/admin/config/services/linkset", - "routeName": "system.linkset_settings" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Workflow", - "url": { - "path": "/en/admin/config/workflow", - "routeName": "system.admin_config_workflow" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "People", - "url": { - "path": "/en/admin/people", - "routeName": "entity.user.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add user", - "url": { - "path": "/en/admin/people/create", - "routeName": "user.admin_create" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Flood unblock", - "url": { - "path": "/en/admin/people/flood-unblock", - "routeName": "flood_control.unblock_form" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Permissions", - "url": { - "path": "/en/admin/people/permissions", - "routeName": "user.admin_permissions" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Roles", - "url": { - "path": "/en/admin/people/roles", - "routeName": "entity.user_role.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Add role", - "url": { - "path": "/en/admin/people/roles/add", - "routeName": "user.role_add" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Gast", - "url": { - "path": "/en/admin/people/roles/manage/anonymous", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/anonymous", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Angemeldeter Benutzer", - "url": { - "path": "/en/admin/people/roles/manage/authenticated", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/authenticated", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Read Only", - "url": { - "path": "/en/admin/people/roles/manage/read_only", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/read_only/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/read_only", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "MyOris Member", - "url": { - "path": "/en/admin/people/roles/manage/myoris_user", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/myoris_user/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/myoris_user", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Oris B2B Customer", - "url": { - "path": "/en/admin/people/roles/manage/oris_b2b_customer", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/oris_b2b_customer/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/oris_b2b_customer", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Salesperson (external)", - "url": { - "path": "/en/admin/people/roles/manage/salesperson", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/salesperson/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/salesperson", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Distributor Country Manager", - "url": { - "path": "/en/admin/people/roles/manage/distributor_country_manager", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/distributor_country_manager/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/distributor_country_manager", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Online Store Staff", - "url": { - "path": "/en/admin/people/roles/manage/online_store_staff", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/online_store_staff/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/online_store_staff", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Customer Care", - "url": { - "path": "/en/admin/people/roles/manage/customer_care", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/customer_care/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/customer_care", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Oris Accounting", - "url": { - "path": "/en/admin/people/roles/manage/oris_accounting", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/oris_accounting/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/oris_accounting", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Sales Assistant", - "url": { - "path": "/en/admin/people/roles/manage/sales_assistant", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/sales_assistant/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/sales_assistant", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Oris Editor", - "url": { - "path": "/en/admin/people/roles/manage/oris_editor", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/oris_editor/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/oris_editor", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Oris CRM", - "url": { - "path": "/en/admin/people/roles/manage/oris_crm", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/oris_crm/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/oris_crm", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Contact CRM export", - "url": { - "path": "/en/admin/people/roles/manage/contact_crm_export", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/contact_crm_export/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/contact_crm_export", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "Oris Administrator", - "url": { - "path": "/en/admin/people/roles/manage/oris_administrator", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/oris_administrator/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/oris_administrator", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - }, - { - "link": { - "label": "System administrator", - "url": { - "path": "/en/admin/people/roles/manage/system", - "routeName": "entity.user_role.edit_form" - } - }, - "subtree": [ - { - "link": { - "label": "Delete", - "url": { - "path": "/en/admin/people/roles/manage/system/delete", - "routeName": "entity.user_role.delete_form" - } - } - }, - { - "link": { - "label": "Edit permissions", - "url": { - "path": "/en/admin/people/permissions/system", - "routeName": "entity.user_role.edit_permissions_form" - } - } - } - ] - } - ] - }, - { - "link": { - "label": "Role assign", - "url": { - "path": "/en/admin/people/roleassign", - "routeName": "roleassign.settings" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Reports", - "url": { - "path": "/en/admin/reports", - "routeName": "system.admin_reports" - } - }, - "subtree": [ - { - "link": { - "label": "Status report", - "url": { - "path": "/en/admin/reports/status", - "routeName": "system.status" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Available updates", - "url": { - "path": "/en/admin/reports/updates", - "routeName": "update.status" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Recent log messages", - "url": { - "path": "/en/admin/reports/dblog", - "routeName": "dblog.overview" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Available translation updates", - "url": { - "path": "/en/admin/reports/translations", - "routeName": "locale.translate_status" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Field list", - "url": { - "path": "/en/admin/reports/fields", - "routeName": "entity.field_storage_config.collection" - } - }, - "subtree": [ - { - "link": { - "label": "Used in views", - "url": { - "path": "/en/admin/reports/fields/views-fields", - "routeName": "views_ui.reports_fields" - } - }, - "subtree": [] - } - ] - }, - { - "link": { - "label": "Metatag plugins", - "url": { - "path": "/en/admin/reports/metatag-plugins", - "routeName": "metatag.reports_plugins" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Redis", - "url": { - "path": "/en/admin/reports/redis", - "routeName": "redis.report" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Top 'access denied' errors", - "url": { - "path": "/en/admin/reports/access-denied", - "routeName": "dblog.access_denied" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Top 'page not found' errors", - "url": { - "path": "/en/admin/reports/page-not-found", - "routeName": "dblog.page_not_found" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Upgrade status", - "url": { - "path": "/en/admin/reports/upgrade-status", - "routeName": "upgrade_status.report" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Views plugins", - "url": { - "path": "/en/admin/reports/views-plugins", - "routeName": "views_ui.reports_plugins" - } - }, - "subtree": [] - }, - { - "link": { - "label": "Webform plugins", - "url": { - "path": "/en/admin/reports/webform-plugins/elements", - "routeName": "webform.reports_plugins.elements" - } - }, - "subtree": [] - } - ] - } - ] - } - ] - } - } -} diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index ca738aa..f9d4186 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -1,21 +1,45 @@ +import { + acceptLanguage, + pathPrefix, +} from 'nuxt-language-negotiation/negotiators' + export default defineNuxtConfig({ ssr: false, - modules: ['../src/module', 'nuxt-language-negotiation'], + devtools: { + enabled: true, + }, + modules: [ + 'nuxt-graphql-middleware', + '../src/module', + 'nuxt-language-negotiation', + '@nuxt/eslint', + ], + + graphqlMiddleware: { + autoImportPatterns: ['./app/**/*.graphql'], + // For local development: + // Set this to true to update the schema. + // Make sure the starterkit app is running. + downloadSchema: false, + graphqlEndpoint: 'http://starterkit.ddev.site/de/graphql', + schemaPath: './../schema.graphql', + + codegenConfig: { + skipUnusedFragments: false, + }, + }, imports: { autoImport: false, }, experimental: { - scanPageMeta: true, + scanPageMeta: 'after-resolve', }, languageNegotiation: { - // Define the available languages. - availableLanguages: ['de', 'en'], - defaultLanguageNoPrefix: false, - - negotiators: ['pathPrefix', 'acceptLanguage'], + languages: ['de', 'en'], + negotiators: [acceptLanguage(), pathPrefix()], }, app: { @@ -48,10 +72,38 @@ export default defineNuxtConfig({ }, frontendRouting: { enabled: true, - langcodes: ['de', 'en'], + defaultLanguage: 'de', outputPath: './../drupal/frontend_routing.settings.yml', }, + drupalRoute: { + enabled: true, + routeQueries: { + nodeCanonical: { + fragments: ['nodePage'] as never[], + }, + }, + }, + languageSwitchLinks: { + enabled: true, + }, + breadcrumb: { + enabled: true, + }, + trustedOrigins: { + enabled: true, + origins: [ + 'http://localhost:3001', + 'http://localhost:3004', + 'http://localhost:3000', + 'https://localhost:3000', + ], + redirectUrl: 'https://localhost:3000', + }, }, compatibilityDate: '2024-09-10', + + future: { + compatibilityVersion: 4, + }, }) diff --git a/playground/public/themes/contrib/gin/dist/media/sprite.svg b/playground/public/themes/contrib/gin/dist/media/sprite.svg new file mode 100644 index 0000000..0c5ad51 --- /dev/null +++ b/playground/public/themes/contrib/gin/dist/media/sprite.svg @@ -0,0 +1 @@ + diff --git a/playground/server/api/adminMenu.ts b/playground/server/api/adminMenu.ts deleted file mode 100644 index dc611d0..0000000 --- a/playground/server/api/adminMenu.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { defineEventHandler } from 'h3' -import adminMenu from '~/mock/adminToolbar.json' - -export default defineEventHandler(() => { - return Promise.resolve(adminMenu) -}) diff --git a/playground/server/api/initData.ts b/playground/server/api/initData.ts index 75a01f7..c422cc1 100644 --- a/playground/server/api/initData.ts +++ b/playground/server/api/initData.ts @@ -1,5 +1,5 @@ import { defineEventHandler, getQuery } from 'h3' -import type { InitData, MenuLink } from '~/types' +import type { InitData, MenuLink } from '~~/types' const menuLinks = (language: string): MenuLink[] => [ diff --git a/playground/server/api/localTasks.ts b/playground/server/api/localTasks.ts deleted file mode 100644 index 32eb8b1..0000000 --- a/playground/server/api/localTasks.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { defineEventHandler } from 'h3' -import localTasks from '~/mock/localTasks.json' - -export default defineEventHandler(() => { - return localTasks -}) diff --git a/playground/server/graphqlMiddleware.serverOptions.ts b/playground/server/graphqlMiddleware.serverOptions.ts new file mode 100644 index 0000000..0c5050f --- /dev/null +++ b/playground/server/graphqlMiddleware.serverOptions.ts @@ -0,0 +1,17 @@ +import { defineGraphqlServerOptions } from 'nuxt-graphql-middleware/server-options' +import adminToolbar from './mocks/adminToolbar.json' +import localTasks from './mocks/localTasks.json' + +export default defineGraphqlServerOptions({ + doGraphqlRequest(context) { + if (context.operationName === 'adminToolbar') { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return Promise.resolve(adminToolbar) as any + } else if (context.operationName === 'localTasks') { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return Promise.resolve(localTasks) as any + } + + throw new Error('Unknown GraphQL operation.') + }, +}) diff --git a/playground/server/mocks/adminToolbar.json b/playground/server/mocks/adminToolbar.json new file mode 100644 index 0000000..de7dd33 --- /dev/null +++ b/playground/server/mocks/adminToolbar.json @@ -0,0 +1,3942 @@ +{ + "data": { + "activeEnvironment": { + "name": "STARTERKIT LOCAL", + "bgColor": "#3a7cdc", + "fgColor": null + }, + "menu": { + "id": "admin", + "links": [ + { + "link": { + "label": "Verwaltung", + "url": { + "path": "/de/admin", + "routeName": "system.admin" + } + }, + "subtree": [ + { + "link": { + "label": "Werkzeuge", + "url": { + "path": "/de", + "routeName": "" + } + }, + "subtree": [ + { + "link": { + "label": "Index", + "url": { + "path": "/de/admin/index", + "routeName": "system.admin_index" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Alle Zwischenspeicher leeren", + "url": { + "path": "/de/admin/flush?token=-vYUsTab-SGnsqTR353M8epHdMSic5GWMCO-DZHoFRI", + "routeName": "admin_toolbar_tools.flush" + } + }, + "subtree": [ + { + "link": { + "label": "Ansichten-Cache leeren", + "url": { + "path": "/de/admin/flush/views?token=vR5SYQubui_OwuG_70LyvJm6NBBPW3lNnk8Piqx2_-Q", + "routeName": "admin_toolbar_tools.flush_views" + } + }, + "subtree": [] + }, + { + "link": { + "label": "CSS und JavaScript leeren", + "url": { + "path": "/de/admin/flush/cssjs?token=nPvdA_FFdCv-w3ZQqKl2tcvX2y1PgqDqKTydiKspxfU", + "routeName": "admin_toolbar_tools.cssjs" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Plugin-Cache leeren", + "url": { + "path": "/de/admin/flush/plugin?token=ZMUWTyhHrQqo8ank40GXMmvsa9hBdL595FoCuw1XItw", + "routeName": "admin_toolbar_tools.plugin" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Render-Cache leeren", + "url": { + "path": "/de/admin/flush/rendercache?token=tBx0twEB7umsWF5UeV8f9SjrNSFM3B5pUQiDdJJWso0", + "routeName": "admin_toolbar_tools.flush_rendercache" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Routing- und Links-Cache leeren", + "url": { + "path": "/de/admin/flush/menu?token=XibUkmnp-KFjAi7YwGsceDaZ9p04P3_w2cW1Wl5lfLk", + "routeName": "admin_toolbar_tools.flush_menu" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Statischen Cache leeren", + "url": { + "path": "/de/admin/flush/static-caches?token=Uf2GbVIgggA8Xcxz88OKHX9Wqs7Qz7C8sPUDUu5nPiE", + "routeName": "admin_toolbar_tools.flush_static" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Theme-Registry neu aufbauen", + "url": { + "path": "/de/admin/flush/theme_rebuild?token=_eUcfb2XnYlV7mGHww0pIKZ2Ccvdkbcypig0oPmBphw", + "routeName": "admin_toolbar_tools.theme_rebuild" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Twig-Cache leeren", + "url": { + "path": "/de/admin/flush/twig?token=IjtasaT-ywBYQcsryGU7KlgOuZDDjmc0_-kf6kzitNM", + "routeName": "admin_toolbar_tools.flush_twig" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Cron ausführen", + "url": { + "path": "/de/run-cron?token=QrX7FQVJWZ11dOHZOqSrfi4uD-AxXoUw52uRW1wVTV4", + "routeName": "admin_toolbar.run.cron" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Aktualisierungen durchführen", + "url": { + "path": "/update.php", + "routeName": "system.db_update" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Abmelden", + "url": { + "path": "/de/user/logout?token=fzL0Ox4jS6qafdt6gzGzjWGb_hsR6kJ8L8E0D4hC5Mo", + "routeName": "user.logout" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Inhalt", + "url": { + "path": "/de/admin/content", + "routeName": "system.admin_content" + } + }, + "subtree": [ + { + "link": { + "label": "Vom Zeitplaner gesteuerte Inhalte", + "url": { + "path": "/de/admin/content/scheduled", + "routeName": "view.scheduler_scheduled_content.overview" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Blöcke", + "url": { + "path": "/de/admin/content/block", + "routeName": "entity.block_content.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Inhaltsblock hinzufügen", + "url": { + "path": "/de/block/add", + "routeName": "block_content.add_page" + } + }, + "subtree": [ + { + "link": { + "label": "Normaler Block", + "url": { + "path": "/de/block/add/basic", + "routeName": "block_content.add_form" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Dateien", + "url": { + "path": "/de/admin/content/files", + "routeName": "view.files.page_1" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Inhalt hinzufügen", + "url": { + "path": "/de/node/add", + "routeName": "node.add_page" + } + }, + "subtree": [ + { + "link": { + "label": "Inhaltsseite", + "url": { + "path": "/de/node/add/page", + "routeName": "node.add" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Kontakt", + "url": { + "path": "/de/node/add/contact", + "routeName": "node.add" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Medienmitteilung / News", + "url": { + "path": "/de/node/add/press_release", + "routeName": "node.add" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Kommentare", + "url": { + "path": "/de/admin/content/comment", + "routeName": "comment.admin" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Medien", + "url": { + "path": "/de/admin/content/media", + "routeName": "entity.media.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Medien hinzufügen", + "url": { + "path": "/de/media/add", + "routeName": "entity.media.add_page" + } + }, + "subtree": [ + { + "link": { + "label": "Audio", + "url": { + "path": "/de/media/add/audio", + "routeName": "entity.media.add_form" + } + } + }, + { + "link": { + "label": "Dokument", + "url": { + "path": "/de/media/add/document", + "routeName": "entity.media.add_form" + } + } + }, + { + "link": { + "label": "Extern gehostetes Video", + "url": { + "path": "/de/media/add/remote_video", + "routeName": "entity.media.add_form" + } + } + }, + { + "link": { + "label": "Icon", + "url": { + "path": "/de/media/add/icon", + "routeName": "entity.media.add_form" + } + } + }, + { + "link": { + "label": "Image", + "url": { + "path": "/de/media/add/image", + "routeName": "entity.media.add_form" + } + } + }, + { + "link": { + "label": "Video", + "url": { + "path": "/de/media/add/video", + "routeName": "entity.media.add_form" + } + } + } + ] + }, + { + "link": { + "label": "Medienbibliothek", + "url": { + "path": "/de/admin/content/media-grid", + "routeName": "view.media_library.page" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Paragraphs Blokkli Edit States", + "url": { + "path": "/de/admin/content/paragraphs-blokkli-edit-state", + "routeName": "entity.paragraphs_blokkli_edit_state.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Scheduled Media", + "url": { + "path": "/de/admin/content/media/scheduled", + "routeName": "view.scheduler_scheduled_media.overview" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Seitenabschnitte", + "url": { + "path": "/de/admin/content/paragraphs", + "routeName": "entity.paragraphs_library_item.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Texte", + "url": { + "path": "/de/admin/content/texts", + "routeName": "entity.texts.collection" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Struktur", + "url": { + "path": "/de/admin/structure", + "routeName": "system.admin_structure" + } + }, + "subtree": [ + { + "link": { + "label": "Ansichten", + "url": { + "path": "/de/admin/structure/views", + "routeName": "entity.view.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Ansicht hinzufügen", + "url": { + "path": "/de/admin/structure/views/add", + "routeName": "views_ui.add" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Auftragsübersicht", + "url": { + "path": "/de/admin/structure/views/view/tmgmt_job_overview", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Benutzer", + "url": { + "path": "/de/admin/structure/views/view/user_admin_people", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Bibliothek benutzerdefinierter Blöcke", + "url": { + "path": "/de/admin/structure/views/view/block_content", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Dateien", + "url": { + "path": "/de/admin/structure/views/view/files", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Inhalt", + "url": { + "path": "/de/admin/structure/views/view/content", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Kommentare", + "url": { + "path": "/de/admin/structure/views/view/comment", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Medien", + "url": { + "path": "/de/admin/structure/views/view/media", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Medienbibliothek", + "url": { + "path": "/de/admin/structure/views/view/media_library", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Neue Benutzer", + "url": { + "path": "/de/admin/structure/views/view/who_s_new", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Neueste Kommentare", + "url": { + "path": "/de/admin/structure/views/view/comments_recent", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Neuester Inhalt", + "url": { + "path": "/de/admin/structure/views/view/content_recent", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Scheduled Media", + "url": { + "path": "/de/admin/structure/views/view/scheduler_scheduled_media", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Scheduled Taxonomy Terms", + "url": { + "path": "/de/admin/structure/views/view/scheduler_scheduled_taxonomy_term", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Seitenabschnittsbibliothek", + "url": { + "path": "/de/admin/structure/views/view/paragraphs_library", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Seitenabschnittsbibliothek-Browser", + "url": { + "path": "/de/admin/structure/views/view/paragraphs_library_browser", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Systemprotokoll", + "url": { + "path": "/de/admin/structure/views/view/watchdog", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Taxonomie-Begriff", + "url": { + "path": "/de/admin/structure/views/view/taxonomy_term", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Translation All Job Items", + "url": { + "path": "/de/admin/structure/views/view/tmgmt_translation_all_job_items", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Translation Job Items", + "url": { + "path": "/de/admin/structure/views/view/tmgmt_job_items", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Translation Job messages", + "url": { + "path": "/de/admin/structure/views/view/tmgmt_job_messages", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Umleiten", + "url": { + "path": "/de/admin/structure/views/view/redirect", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Vom Zeitplaner gesteuerte Inhalte", + "url": { + "path": "/de/admin/structure/views/view/scheduler_scheduled_content", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "„Wer ist online“-Block", + "url": { + "path": "/de/admin/structure/views/view/who_s_online", + "routeName": "entity.view.edit_form" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Anzeigemodi", + "url": { + "path": "/de/admin/structure/display-modes", + "routeName": "field_ui.display_mode" + } + }, + "subtree": [ + { + "link": { + "label": "Formulardarstellungen", + "url": { + "path": "/de/admin/structure/display-modes/form", + "routeName": "entity.entity_form_mode.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Formulardarstellung hinzufügen", + "url": { + "path": "/de/admin/structure/display-modes/form/add", + "routeName": "field_ui.entity_form_mode_add" + } + } + } + ] + }, + { + "link": { + "label": "Inhaltsdarstellungen", + "url": { + "path": "/de/admin/structure/display-modes/view", + "routeName": "entity.entity_view_mode.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Inhaltsdarstellung hinzufügen", + "url": { + "path": "/de/admin/structure/display-modes/view/add", + "routeName": "field_ui.entity_view_mode_add" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Blocklayout", + "url": { + "path": "/de/admin/structure/block", + "routeName": "block.admin_display" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Blocktypen", + "url": { + "path": "/de/admin/structure/block-content", + "routeName": "entity.block_content_type.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Normaler Block", + "url": { + "path": "/de/admin/structure/block-content/manage/basic", + "routeName": "entity.block_content_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/block-content/manage/basic/fields", + "routeName": "entity.block_content.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/block-content/manage/basic/form-display", + "routeName": "entity.entity_form_display.block_content.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/block-content/manage/basic/display", + "routeName": "entity.entity_view_display.block_content.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/block-content/manage/basic/permissions", + "routeName": "entity.block_content_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/block-content/manage/basic/delete", + "routeName": "entity.block_content_type.delete_form" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Inhaltstypen", + "url": { + "path": "/de/admin/structure/types", + "routeName": "entity.node_type.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Inhaltstyp hinzufügen", + "url": { + "path": "/de/admin/structure/types/add", + "routeName": "node.type_add" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Inhaltsseite", + "url": { + "path": "/de/admin/structure/types/manage/page", + "routeName": "entity.node_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/types/manage/page/fields", + "routeName": "entity.node.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/types/manage/page/form-display", + "routeName": "entity.entity_form_display.node.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/types/manage/page/display", + "routeName": "entity.entity_view_display.node.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/types/manage/page/permissions", + "routeName": "entity.node_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/types/manage/page/delete", + "routeName": "entity.node_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Kontakt", + "url": { + "path": "/de/admin/structure/types/manage/contact", + "routeName": "entity.node_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/types/manage/contact/fields", + "routeName": "entity.node.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/types/manage/contact/form-display", + "routeName": "entity.entity_form_display.node.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/types/manage/contact/display", + "routeName": "entity.entity_view_display.node.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/types/manage/contact/permissions", + "routeName": "entity.node_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/types/manage/contact/delete", + "routeName": "entity.node_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Medienmitteilung / News", + "url": { + "path": "/de/admin/structure/types/manage/press_release", + "routeName": "entity.node_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/types/manage/press_release/fields", + "routeName": "entity.node.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/types/manage/press_release/form-display", + "routeName": "entity.entity_form_display.node.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/types/manage/press_release/display", + "routeName": "entity.entity_view_display.node.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/types/manage/press_release/permissions", + "routeName": "entity.node_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/types/manage/press_release/delete", + "routeName": "entity.node_type.delete_form" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Kommentartypen", + "url": { + "path": "/de/admin/structure/comment", + "routeName": "entity.comment_type.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Blokkli Node", + "url": { + "path": "/de/admin/structure/comment/manage/blokkli_node", + "routeName": "entity.comment_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/comment/manage/blokkli_node/fields", + "routeName": "entity.comment.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/comment/manage/blokkli_node/form-display", + "routeName": "entity.entity_form_display.comment.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/comment/manage/blokkli_node/display", + "routeName": "entity.entity_view_display.comment.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/comment/manage/blokkli_node/permissions", + "routeName": "entity.comment_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/comment/manage/blokkli_node/delete", + "routeName": "entity.comment_type.delete_form" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Medientypen", + "url": { + "path": "/de/admin/structure/media", + "routeName": "entity.media_type.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Medientyp hinzufügen", + "url": { + "path": "/de/admin/structure/media/add", + "routeName": "entity.media_type.add_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Audio", + "url": { + "path": "/de/admin/structure/media/manage/audio", + "routeName": "entity.media_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/media/manage/audio/fields", + "routeName": "entity.media.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/audio/form-display", + "routeName": "entity.entity_form_display.media.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/audio/display", + "routeName": "entity.entity_view_display.media.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/media/manage/audio/permissions", + "routeName": "entity.media_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/media/manage/audio/delete", + "routeName": "entity.media_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Dokument", + "url": { + "path": "/de/admin/structure/media/manage/document", + "routeName": "entity.media_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/media/manage/document/fields", + "routeName": "entity.media.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/document/form-display", + "routeName": "entity.entity_form_display.media.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/document/display", + "routeName": "entity.entity_view_display.media.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/media/manage/document/permissions", + "routeName": "entity.media_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/media/manage/document/delete", + "routeName": "entity.media_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Extern gehostetes Video", + "url": { + "path": "/de/admin/structure/media/manage/remote_video", + "routeName": "entity.media_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/media/manage/remote_video/fields", + "routeName": "entity.media.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/remote_video/form-display", + "routeName": "entity.entity_form_display.media.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/remote_video/display", + "routeName": "entity.entity_view_display.media.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/media/manage/remote_video/permissions", + "routeName": "entity.media_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/media/manage/remote_video/delete", + "routeName": "entity.media_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Icon", + "url": { + "path": "/de/admin/structure/media/manage/icon", + "routeName": "entity.media_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/media/manage/icon/fields", + "routeName": "entity.media.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/icon/form-display", + "routeName": "entity.entity_form_display.media.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/icon/display", + "routeName": "entity.entity_view_display.media.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/media/manage/icon/permissions", + "routeName": "entity.media_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/media/manage/icon/delete", + "routeName": "entity.media_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Image", + "url": { + "path": "/de/admin/structure/media/manage/image", + "routeName": "entity.media_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/media/manage/image/fields", + "routeName": "entity.media.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/image/form-display", + "routeName": "entity.entity_form_display.media.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/image/display", + "routeName": "entity.entity_view_display.media.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/media/manage/image/permissions", + "routeName": "entity.media_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/media/manage/image/delete", + "routeName": "entity.media_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Video", + "url": { + "path": "/de/admin/structure/media/manage/video", + "routeName": "entity.media_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/media/manage/video/fields", + "routeName": "entity.media.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/video/form-display", + "routeName": "entity.entity_form_display.media.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/media/manage/video/display", + "routeName": "entity.entity_view_display.media.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/media/manage/video/permissions", + "routeName": "entity.media_type.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/media/manage/video/delete", + "routeName": "entity.media_type.delete_form" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Menüpositionsregeln", + "url": { + "path": "/de/admin/structure/menu-position", + "routeName": "entity.menu_position_rule.order_form" + } + }, + "subtree": [ + { + "link": { + "label": "Einstellungen", + "url": { + "path": "/de/admin/structure/menu-position/settings", + "routeName": "menu_position.settings" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Menüs", + "url": { + "path": "/de/admin/structure/menu", + "routeName": "entity.menu.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Menü hinzufügen", + "url": { + "path": "/de/admin/structure/menu/add", + "routeName": "entity.menu.add_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Benutzermenü", + "url": { + "path": "/de/admin/structure/menu/manage/account", + "routeName": "entity.menu.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Link hinzufügen", + "url": { + "path": "/de/admin/structure/menu/manage/account/add", + "routeName": "entity.menu.add_link_form" + } + } + }, + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/account/fields", + "routeName": "entity.menu_link_content.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/account/form-display", + "routeName": "entity.entity_form_display.menu_link_content.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/account/display", + "routeName": "entity.entity_view_display.menu_link_content.default" + } + } + } + ] + }, + { + "link": { + "label": "Fußzeile", + "url": { + "path": "/de/admin/structure/menu/manage/footer", + "routeName": "entity.menu.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Link hinzufügen", + "url": { + "path": "/de/admin/structure/menu/manage/footer/add", + "routeName": "entity.menu.add_link_form" + } + } + }, + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/footer/fields", + "routeName": "entity.menu_link_content.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/footer/form-display", + "routeName": "entity.entity_form_display.menu_link_content.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/footer/display", + "routeName": "entity.entity_view_display.menu_link_content.default" + } + } + } + ] + }, + { + "link": { + "label": "Hauptnavigation", + "url": { + "path": "/de/admin/structure/menu/manage/main", + "routeName": "entity.menu.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Link hinzufügen", + "url": { + "path": "/de/admin/structure/menu/manage/main/add", + "routeName": "entity.menu.add_link_form" + } + } + }, + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/main/fields", + "routeName": "entity.menu_link_content.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/main/form-display", + "routeName": "entity.entity_form_display.menu_link_content.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/main/display", + "routeName": "entity.entity_view_display.menu_link_content.default" + } + } + } + ] + }, + { + "link": { + "label": "Verwaltung", + "url": { + "path": "/de/admin/structure/menu/manage/admin", + "routeName": "entity.menu.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Link hinzufügen", + "url": { + "path": "/de/admin/structure/menu/manage/admin/add", + "routeName": "entity.menu.add_link_form" + } + } + }, + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/admin/fields", + "routeName": "entity.menu_link_content.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/admin/form-display", + "routeName": "entity.entity_form_display.menu_link_content.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/admin/display", + "routeName": "entity.entity_view_display.menu_link_content.default" + } + } + } + ] + }, + { + "link": { + "label": "Werkzeuge", + "url": { + "path": "/de/admin/structure/menu/manage/tools", + "routeName": "entity.menu.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Link hinzufügen", + "url": { + "path": "/de/admin/structure/menu/manage/tools/add", + "routeName": "entity.menu.add_link_form" + } + } + }, + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/tools/fields", + "routeName": "entity.menu_link_content.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/tools/form-display", + "routeName": "entity.entity_form_display.menu_link_content.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/menu/manage/tools/display", + "routeName": "entity.entity_view_display.menu_link_content.default" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Paragraphs Blokkli Edit State", + "url": { + "path": "/de/admin/structure/paragraphs-blokkli-edit-state", + "routeName": "entity.paragraphs_blokkli_edit_state.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Seitenabschnittstypen", + "url": { + "path": "/de/admin/structure/paragraphs_type", + "routeName": "entity.paragraphs_type.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Akkordeon", + "url": { + "path": "/de/admin/structure/paragraphs_type/accordeon", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/accordeon/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/accordeon/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/accordeon/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/accordeon/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Aus der Bibliothek", + "url": { + "path": "/de/admin/structure/paragraphs_type/from_library", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/from_library/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/from_library/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/from_library/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/from_library/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Bild", + "url": { + "path": "/de/admin/structure/paragraphs_type/image", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/image/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/image/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/image/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/image/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Button", + "url": { + "path": "/de/admin/structure/paragraphs_type/button", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/button/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/button/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/button/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/button/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Icon Textelement", + "url": { + "path": "/de/admin/structure/paragraphs_type/icon_text_item", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/icon_text_item/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/icon_text_item/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/icon_text_item/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/icon_text_item/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Icon Textliste", + "url": { + "path": "/de/admin/structure/paragraphs_type/icon_text_list", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/icon_text_list/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/icon_text_list/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/icon_text_list/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/icon_text_list/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Karussell", + "url": { + "path": "/de/admin/structure/paragraphs_type/carousel", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/carousel/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/carousel/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/carousel/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/carousel/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Seitenabschnittstyp hinzufügen", + "url": { + "path": "/de/admin/structure/paragraphs_type/add", + "routeName": "paragraphs.type_add" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Teaser", + "url": { + "path": "/de/admin/structure/paragraphs_type/teaser", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/teaser/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/teaser/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/teaser/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/teaser/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Teaserliste", + "url": { + "path": "/de/admin/structure/paragraphs_type/teaser_list", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/teaser_list/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/teaser_list/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/teaser_list/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/teaser_list/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Text / Bild", + "url": { + "path": "/de/admin/structure/paragraphs_type/text_image", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/text_image/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/text_image/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/text_image/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/text_image/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Text", + "url": { + "path": "/de/admin/structure/paragraphs_type/text", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/text/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/text/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/text/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/text/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Video", + "url": { + "path": "/de/admin/structure/paragraphs_type/video", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/video/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/video/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/video/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/video/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Zitat", + "url": { + "path": "/de/admin/structure/paragraphs_type/quote", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/quote/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/quote/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/quote/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/quote/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "blökkli Fragment", + "url": { + "path": "/de/admin/structure/paragraphs_type/blokkli_fragment", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/blokkli_fragment/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/blokkli_fragment/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/blokkli_fragment/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/blokkli_fragment/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "iFrame", + "url": { + "path": "/de/admin/structure/paragraphs_type/iframe", + "routeName": "entity.paragraphs_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/iframe/fields", + "routeName": "entity.paragraph.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/iframe/form-display", + "routeName": "entity.entity_form_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/paragraphs_type/iframe/display", + "routeName": "entity.entity_view_display.paragraph.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/paragraphs_type/iframe/delete", + "routeName": "entity.paragraphs_type.delete_form" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Taxonomie", + "url": { + "path": "/de/admin/structure/taxonomy", + "routeName": "entity.taxonomy_vocabulary.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Vokabular hinzufügen", + "url": { + "path": "/de/admin/structure/taxonomy/add", + "routeName": "entity.taxonomy_vocabulary.add_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Scheduled Taxonomy Terms", + "url": { + "path": "/de/admin/structure/taxonomy/scheduled", + "routeName": "view.scheduler_scheduled_taxonomy_term.overview" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Tags", + "url": { + "path": "/de/admin/structure/taxonomy/manage/tags/overview", + "routeName": "entity.taxonomy_vocabulary.overview_form" + } + }, + "subtree": [ + { + "link": { + "label": "Bearbeiten", + "url": { + "path": "/de/admin/structure/taxonomy/manage/tags", + "routeName": "entity.taxonomy_vocabulary.edit_form" + } + } + }, + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/taxonomy/manage/tags/overview/fields", + "routeName": "entity.taxonomy_term.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/taxonomy/manage/tags/overview/form-display", + "routeName": "entity.entity_form_display.taxonomy_term.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/taxonomy/manage/tags/overview/display", + "routeName": "entity.entity_view_display.taxonomy_term.default" + } + } + }, + { + "link": { + "label": "Berechtigungen verwalten", + "url": { + "path": "/de/admin/structure/taxonomy/manage/tags/overview/permissions", + "routeName": "entity.taxonomy_vocabulary.entity_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/taxonomy/manage/tags/delete", + "routeName": "entity.taxonomy_vocabulary.delete_form" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Translatable config pages types", + "url": { + "path": "/de/admin/structure/translatable_config_pages_types", + "routeName": "entity.translatable_config_pages_type.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Globale Konfiguration", + "url": { + "path": "/de/admin/structure/translatable_config_pages_types/manage/global", + "routeName": "entity.translatable_config_pages_type.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/structure/translatable_config_pages_types/manage/global/fields", + "routeName": "entity.translatable_config_pages.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/structure/translatable_config_pages_types/manage/global/form-display", + "routeName": "entity.entity_form_display.translatable_config_pages.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/structure/translatable_config_pages_types/manage/global/display", + "routeName": "entity.entity_view_display.translatable_config_pages.default" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/structure/translatable_config_pages_types/manage/global/delete", + "routeName": "entity.translatable_config_pages_type.delete_form" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Config Pages", + "url": { + "path": "/de/admin/config/system/translatable-config-pages", + "routeName": "entity.translatable_config_pages.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Globale Konfiguration", + "url": { + "path": "/de/admin/config/translatable-config-pages/1/edit", + "routeName": "entity.translatable_config_pages.edit_form" + } + }, + "subtree": [] + } + ] + } + ] + }, + { + "link": { + "label": "Design", + "url": { + "path": "/de/admin/appearance", + "routeName": "system.themes_page" + } + }, + "subtree": [ + { + "link": { + "label": "Einstellungen", + "url": { + "path": "/de/admin/appearance/settings", + "routeName": "system.theme_settings" + } + }, + "subtree": [ + { + "link": { + "label": "Claro", + "url": { + "path": "/de/admin/appearance/settings/claro", + "routeName": "system.theme_settings_theme" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Gin", + "url": { + "path": "/de/admin/appearance/settings/gin", + "routeName": "system.theme_settings_theme" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Olivero", + "url": { + "path": "/de/admin/appearance/settings/olivero", + "routeName": "system.theme_settings_theme" + } + }, + "subtree": [] + } + ] + } + ] + }, + { + "link": { + "label": "Erweitern", + "url": { + "path": "/de/admin/modules", + "routeName": "system.modules_list" + } + }, + "subtree": [ + { + "link": { + "label": "Modul deinstallieren", + "url": { + "path": "/de/admin/modules/uninstall", + "routeName": "system.modules_uninstall" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Konfiguration", + "url": { + "path": "/de/admin/config", + "routeName": "system.admin_config" + } + }, + "subtree": [ + { + "link": { + "label": "Benutzer", + "url": { + "path": "/de/admin/config/people", + "routeName": "user.admin_index" + } + }, + "subtree": [ + { + "link": { + "label": "Kontoeinstellungen", + "url": { + "path": "/de/admin/config/people/accounts", + "routeName": "entity.user.admin_form" + } + }, + "subtree": [ + { + "link": { + "label": "Felder verwalten", + "url": { + "path": "/de/admin/config/people/accounts/fields", + "routeName": "entity.user.field_ui_fields" + } + } + }, + { + "link": { + "label": "Formularanzeige verwalten", + "url": { + "path": "/de/admin/config/people/accounts/form-display", + "routeName": "entity.entity_form_display.user.default" + } + } + }, + { + "link": { + "label": "Anzeige verwalten", + "url": { + "path": "/de/admin/config/people/accounts/display", + "routeName": "entity.entity_view_display.user.default" + } + } + } + ] + }, + { + "link": { + "label": "Missbrauchschutz für Formulare", + "url": { + "path": "/de/admin/config/people/flood-control", + "routeName": "flood_control.settings" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "System", + "url": { + "path": "/de/admin/config/system", + "routeName": "system.admin_config_system" + } + }, + "subtree": [ + { + "link": { + "label": "Grundeinstellungen der Website", + "url": { + "path": "/de/admin/config/system/site-information", + "routeName": "system.site_information_settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Mail System", + "url": { + "path": "/de/admin/config/system/mailsystem", + "routeName": "mailsystem.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Drupal Symfony Mailer Lite", + "url": { + "path": "/de/admin/config/system/symfony-mailer-lite/transport", + "routeName": "entity.symfony_mailer_lite_transport.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Memcache", + "url": { + "path": "/de/admin/config/system/memcache", + "routeName": "memcache_admin.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Queue manager", + "url": { + "path": "/de/admin/config/system/queue-ui", + "routeName": "queue_ui.overview_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Redirect 403 to User Login", + "url": { + "path": "/de/admin/config/system/r4032login/settings", + "routeName": "r4032login.settings.form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Translatable config pages", + "url": { + "path": "/de/admin/config/system/translatable-config-pages", + "routeName": "entity.translatable_config_pages.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Cron", + "url": { + "path": "/de/admin/config/system/cron", + "routeName": "system.cron_settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Verwaiste zusammengesetzte Entitäten löschen", + "url": { + "path": "/de/admin/config/system/delete-orphans", + "routeName": "entity_reference_revisions.delete_orphans" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Benutzeroberfläche", + "url": { + "path": "/de/admin/config/user-interface", + "routeName": "system.admin_config_ui" + } + }, + "subtree": [ + { + "link": { + "label": "Admin Toolbar Tools", + "url": { + "path": "/de/admin/config/user-interface/admin-toolbar-tools", + "routeName": "admin_toolbar_tools.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Admin Toolbar", + "url": { + "path": "/de/admin/config/user-interface/admin-toolbar", + "routeName": "admin_toolbar.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Admin-Toolbar-Suche", + "url": { + "path": "/de/admin/config/user-interface/admin-toolbar-search-settings", + "routeName": "admin_toolbar_search.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Chosen", + "url": { + "path": "/de/admin/config/user-interface/chosen", + "routeName": "chosen.admin" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Menu Breadcrumb", + "url": { + "path": "/de/admin/config/user-interface/menu-breadcrumb", + "routeName": "menu_breadcrumb.settings" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Inhaltserstellung", + "url": { + "path": "/de/admin/config/content", + "routeName": "system.admin_config_content" + } + }, + "subtree": [ + { + "link": { + "label": "Diff", + "url": { + "path": "/de/admin/config/content/diff/general", + "routeName": "diff.general_settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Entity-Browser", + "url": { + "path": "/de/admin/config/content/entity_browser", + "routeName": "entity.entity_browser.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Entitäts-Verwendungsprotokoll-Einstellungen", + "url": { + "path": "/de/admin/config/entity-usage/settings", + "routeName": "entity_usage.settings.form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Linkit", + "url": { + "path": "/de/admin/config/content/linkit", + "routeName": "entity.linkit_profile.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Pathologic-Konfiguration", + "url": { + "path": "/de/admin/config/content/pathologic", + "routeName": "pathologic.config_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Seitenabschnittbibliotheks-Eintrageinstellungen", + "url": { + "path": "/de/admin/config/content/paragraphs_library_item", + "routeName": "paragraphs_library_item.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Seitenabschnitts-Einstellungen", + "url": { + "path": "/de/admin/config/content/paragraphs", + "routeName": "paragraphs.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Tablefield-Einstellungen", + "url": { + "path": "/de/admin/config/content/tablefield", + "routeName": "tablefield.admin" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Textformate und Editoren", + "url": { + "path": "/de/admin/config/content/formats", + "routeName": "filter.admin_overview" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Zeitplaner", + "url": { + "path": "/de/admin/config/content/scheduler", + "routeName": "scheduler.admin_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "blökkli", + "url": { + "path": "/de/admin/config/content/blokkli", + "routeName": "paragraphs_blokkli.settings" + } + }, + "subtree": [ + { + "link": { + "label": "Blokkli Search Providers", + "url": { + "path": "/de/admin/config/content/blokkli/search", + "routeName": "entity.blokkli_search_provider.collection" + } + } + }, + { + "link": { + "label": "Entity Mapping", + "url": { + "path": "/de/admin/config/content/blokkli/entity-mapping", + "routeName": "entity.pb_entity_mapping.collection" + } + } + }, + { + "link": { + "label": "Library", + "url": { + "path": "/de/admin/config/content/blokkli/library", + "routeName": "paragraphs_blokkli_library.form" + } + } + }, + { + "link": { + "label": "Paragraph Fields", + "url": { + "path": "/de/admin/config/content/blokkli/allowed-paragraphs", + "routeName": "paragraphs_blokkli.allowed_paragraphs_form" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Entwicklung", + "url": { + "path": "/de/admin/config/development", + "routeName": "system.admin_config_development" + } + }, + "subtree": [ + { + "link": { + "label": "Leistung", + "url": { + "path": "/de/admin/config/development/performance", + "routeName": "system.performance_settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Entwicklungseinstellungen", + "url": { + "path": "/de/admin/config/development/settings", + "routeName": "system.development_settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Protokollierung und Fehler", + "url": { + "path": "/de/admin/config/development/logging", + "routeName": "system.logging_settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Wartungsmodus", + "url": { + "path": "/de/admin/config/development/maintenance", + "routeName": "system.site_maintenance_mode" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Environment Indicator Settings", + "url": { + "path": "/de/admin/config/development/environment-indicator", + "routeName": "environment_indicator.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Konfigurationssynchronisierung", + "url": { + "path": "/de/admin/config/development/configuration", + "routeName": "config.sync" + } + }, + "subtree": [ + { + "link": { + "label": "Importieren", + "url": { + "path": "/de/admin/config/development/configuration/full/import", + "routeName": "config.import_full" + } + } + }, + { + "link": { + "label": "Exportieren", + "url": { + "path": "/de/admin/config/development/configuration/full/export", + "routeName": "config.export_full" + } + } + }, + { + "link": { + "label": "Ignorieren", + "url": { + "path": "/de/admin/config/development/configuration/ignore", + "routeName": "config_ignore.settings" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Medien", + "url": { + "path": "/de/admin/config/media", + "routeName": "system.admin_config_media" + } + }, + "subtree": [ + { + "link": { + "label": "Bildstile", + "url": { + "path": "/de/admin/config/media/image-styles", + "routeName": "entity.image_style.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Bildzuschnittvorlagen", + "url": { + "path": "/de/admin/config/media/crop", + "routeName": "crop.overview_types" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Dateisystem", + "url": { + "path": "/de/admin/config/media/file-system", + "routeName": "system.file_system_settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Einstellungen für Medien", + "url": { + "path": "/de/admin/config/media/media-settings", + "routeName": "media.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Medienbibliothekseinstellungen", + "url": { + "path": "/de/admin/config/media/media-library", + "routeName": "media_library.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Rokka", + "url": { + "path": "/de/admin/config/media/rokka", + "routeName": "rokka.admin_settings" + } + }, + "subtree": [ + { + "link": { + "label": "PDF thumbnails", + "url": { + "path": "/de/admin/config/media/rokka/pdf", + "routeName": "rokka.thumbnail.settings" + } + } + } + ] + }, + { + "link": { + "label": "Media Icon Deliver", + "url": { + "path": "/de/admin/config/media/icon", + "routeName": "media_icon_deliver.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Bild-Toolkit", + "url": { + "path": "/de/admin/config/media/image-toolkit", + "routeName": "system.image_toolkit_settings" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Suche und Metadaten", + "url": { + "path": "/de/admin/config/search", + "routeName": "system.admin_config_search" + } + }, + "subtree": [ + { + "link": { + "label": "URL-Aliase", + "url": { + "path": "/de/admin/config/search/path", + "routeName": "entity.path_alias.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Entity Reference Patterns", + "url": { + "path": "/de/admin/config/search/entity-reference-patterns", + "routeName": "entity.entity_reference_pattern.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Metatag", + "url": { + "path": "/de/admin/config/search/metatag", + "routeName": "entity.metatag_defaults.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Einstellungen", + "url": { + "path": "/de/admin/config/search/metatag/settings", + "routeName": "metatag.settings" + } + } + } + ] + }, + { + "link": { + "label": "Search-API", + "url": { + "path": "/de/admin/config/search/search-api", + "routeName": "search_api.overview" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Simple XML Sitemap", + "url": { + "path": "/de/admin/config/search/simplesitemap", + "routeName": "entity.simple_sitemap.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Sitemaps", + "url": { + "path": "/de/admin/config/search/simplesitemap", + "routeName": "entity.simple_sitemap.collection" + } + } + }, + { + "link": { + "label": "Einschluß", + "url": { + "path": "/de/admin/config/search/simplesitemap/entities", + "routeName": "simple_sitemap.entities" + } + } + } + ] + }, + { + "link": { + "label": "URL-Umleitungen", + "url": { + "path": "/de/admin/config/search/redirect", + "routeName": "redirect.list" + } + }, + "subtree": [ + { + "link": { + "label": "Einstellungen", + "url": { + "path": "/de/admin/config/search/redirect/settings", + "routeName": "redirect.settings" + } + } + }, + { + "link": { + "label": "Umleitung hinzufügen", + "url": { + "path": "/de/admin/config/search/redirect/add", + "routeName": "redirect.add" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Länderspezifisches und Sprache", + "url": { + "path": "/de/admin/config/regional", + "routeName": "system.admin_config_regional" + } + }, + "subtree": [ + { + "link": { + "label": "Regionale Einstellungen", + "url": { + "path": "/de/admin/config/regional/settings", + "routeName": "system.regional_settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Datums- und Zeitformate", + "url": { + "path": "/de/admin/config/regional/date-time", + "routeName": "entity.date_format.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Sprachen", + "url": { + "path": "/de/admin/config/regional/language", + "routeName": "entity.configurable_language.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Erkennung und Auswahl", + "url": { + "path": "/de/admin/config/regional/language/detection", + "routeName": "language.negotiation" + } + } + }, + { + "link": { + "label": "Sprache hinzufügen", + "url": { + "path": "/de/admin/config/regional/language/add", + "routeName": "language.add" + } + } + } + ] + }, + { + "link": { + "label": "Inhaltssprache und Übersetzung", + "url": { + "path": "/de/admin/config/regional/content-language", + "routeName": "language.content_settings_page" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Texts Settings", + "url": { + "path": "/de/admin/config/regional/texts", + "routeName": "texts.settings_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Benutzeroberfläche übersetzen", + "url": { + "path": "/de/admin/config/regional/translate", + "routeName": "locale.translate_page" + } + }, + "subtree": [ + { + "link": { + "label": "Config import settings", + "url": { + "path": "/de/admin/config/regional/translate/config-import-settings", + "routeName": "config_import_locale.settings" + } + } + } + ] + }, + { + "link": { + "label": "Konfigurationsübersetzung", + "url": { + "path": "/de/admin/config/regional/config-translation", + "routeName": "config_translation.mapper_list" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Web-Dienste", + "url": { + "path": "/de/admin/config/services", + "routeName": "system.admin_config_services" + } + }, + "subtree": [ + { + "link": { + "label": "Nuxt Multi Cache", + "url": { + "path": "/de/admin/config/services/nuxt-multi-cache/settings", + "routeName": "nuxt_multi_cache.settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "GraphQL", + "url": { + "path": "/de/admin/config/graphql", + "routeName": "entity.graphql_server.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "RSS-Feeds", + "url": { + "path": "/de/admin/config/services/rss-publishing", + "routeName": "system.rss_feeds_settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Einstellungen für Verknüpfungsgruppen", + "url": { + "path": "/de/admin/config/services/linkset", + "routeName": "system.linkset_settings" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Frontend Routes", + "url": { + "path": "/de/admin/config/services/frontend-routing", + "routeName": "frontend_routing.settings" + } + }, + "subtree": [] + } + ] + } + ] + }, + { + "link": { + "label": "Übersetzung", + "url": { + "path": "/de/admin/tmgmt", + "routeName": "tmgmt.admin_tmgmt" + } + }, + "subtree": [ + { + "link": { + "label": "Auftragselemente", + "url": { + "path": "/de/admin/tmgmt/job_items", + "routeName": "view.tmgmt_translation_all_job_items.page_1" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Aufträge", + "url": { + "path": "/de/admin/tmgmt/jobs", + "routeName": "view.tmgmt_job_overview.page_1" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Quellen", + "url": { + "path": "/de/admin/tmgmt/sources", + "routeName": "tmgmt.source_overview_default" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Warenkorb", + "url": { + "path": "/de/admin/tmgmt/cart", + "routeName": "tmgmt.cart" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Anbieter", + "url": { + "path": "/de/admin/tmgmt/translators", + "routeName": "entity.tmgmt_translator.collection" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Einstellungen", + "url": { + "path": "/de/admin/tmgmt/settings", + "routeName": "tmgmt.settings" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Benutzer", + "url": { + "path": "/de/admin/people", + "routeName": "entity.user.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Benutzer hinzufügen", + "url": { + "path": "/de/admin/people/create", + "routeName": "user.admin_create" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Berechtigungen", + "url": { + "path": "/de/admin/people/permissions", + "routeName": "user.admin_permissions" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Rollen", + "url": { + "path": "/de/admin/people/roles", + "routeName": "entity.user_role.collection" + } + }, + "subtree": [ + { + "link": { + "label": "Rolle hinzufügen", + "url": { + "path": "/de/admin/people/roles/add", + "routeName": "user.role_add" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Anonymous user", + "url": { + "path": "/de/admin/people/roles/manage/anonymous", + "routeName": "entity.user_role.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Berechtigungen bearbeiten", + "url": { + "path": "/de/admin/people/permissions/anonymous", + "routeName": "entity.user_role.edit_permissions_form" + } + } + } + ] + }, + { + "link": { + "label": "Authenticated user", + "url": { + "path": "/de/admin/people/roles/manage/authenticated", + "routeName": "entity.user_role.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Berechtigungen bearbeiten", + "url": { + "path": "/de/admin/people/permissions/authenticated", + "routeName": "entity.user_role.edit_permissions_form" + } + } + } + ] + }, + { + "link": { + "label": "Content editor", + "url": { + "path": "/de/admin/people/roles/manage/content_editor", + "routeName": "entity.user_role.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Berechtigungen bearbeiten", + "url": { + "path": "/de/admin/people/permissions/content_editor", + "routeName": "entity.user_role.edit_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/people/roles/manage/content_editor/delete", + "routeName": "entity.user_role.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Administrator (Client)", + "url": { + "path": "/de/admin/people/roles/manage/administrator_client", + "routeName": "entity.user_role.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Berechtigungen bearbeiten", + "url": { + "path": "/de/admin/people/permissions/administrator_client", + "routeName": "entity.user_role.edit_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/people/roles/manage/administrator_client/delete", + "routeName": "entity.user_role.delete_form" + } + } + } + ] + }, + { + "link": { + "label": "Administrator", + "url": { + "path": "/de/admin/people/roles/manage/administrator", + "routeName": "entity.user_role.edit_form" + } + }, + "subtree": [ + { + "link": { + "label": "Berechtigungen bearbeiten", + "url": { + "path": "/de/admin/people/permissions/administrator", + "routeName": "entity.user_role.edit_permissions_form" + } + } + }, + { + "link": { + "label": "Löschen", + "url": { + "path": "/de/admin/people/roles/manage/administrator/delete", + "routeName": "entity.user_role.delete_form" + } + } + } + ] + } + ] + }, + { + "link": { + "label": "Zugangssperren aufheben", + "url": { + "path": "/de/admin/people/flood-unblock", + "routeName": "flood_control.unblock_form" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Rollen zuweisen", + "url": { + "path": "/de/admin/people/roleassign", + "routeName": "roleassign.settings" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Berichte", + "url": { + "path": "/de/admin/reports", + "routeName": "system.admin_reports" + } + }, + "subtree": [ + { + "link": { + "label": "Statusbericht", + "url": { + "path": "/de/admin/reports/status", + "routeName": "system.status" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Aktuelle Protokollnachrichten", + "url": { + "path": "/de/admin/reports/dblog", + "routeName": "dblog.overview" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Erweiterungen für Ansichten", + "url": { + "path": "/de/admin/reports/views-plugins", + "routeName": "views_ui.reports_plugins" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Feldliste", + "url": { + "path": "/de/admin/reports/fields", + "routeName": "entity.field_storage_config.collection" + } + }, + "subtree": [ + { + "link": { + "label": "In Ansichten verwendete Felder", + "url": { + "path": "/de/admin/reports/fields/views-fields", + "routeName": "views_ui.reports_fields" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Häufigste ‚Nicht gefunden‘-Fehler", + "url": { + "path": "/de/admin/reports/page-not-found", + "routeName": "dblog.page_not_found" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Häufigste ‚Zugriff verboten‘-Fehler", + "url": { + "path": "/de/admin/reports/access-denied", + "routeName": "dblog.access_denied" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Memcache-Statistiken", + "url": { + "path": "/de/admin/reports/memcache", + "routeName": "memcache_admin.reports" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Metatag-Plugins", + "url": { + "path": "/de/admin/reports/metatag-plugins", + "routeName": "metatag.reports_plugins" + } + }, + "subtree": [] + }, + { + "link": { + "label": "Verfügbare Aktualisierungen für Übersetzungen", + "url": { + "path": "/de/admin/reports/translations", + "routeName": "locale.translate_status" + } + }, + "subtree": [] + } + ] + }, + { + "link": { + "label": "Hilfe", + "url": { + "path": "/de/admin/help", + "routeName": "help.main" + } + }, + "subtree": [] + } + ] + } + ] + } + } +} diff --git a/playground/mock/localTasks.json b/playground/server/mocks/localTasks.json similarity index 77% rename from playground/mock/localTasks.json rename to playground/server/mocks/localTasks.json index 2267e55..3c9c1d2 100644 --- a/playground/mock/localTasks.json +++ b/playground/server/mocks/localTasks.json @@ -5,50 +5,50 @@ { "baseId": "entity.node.canonical", "active": true, - "title": "View", + "title": "Ansicht", "url": { "__typename": "EntityCanonicalUrl", - "path": "/en", + "path": "/de", "routeName": "entity.node.canonical" } }, { "baseId": "entity.node.edit_form", "active": false, - "title": "Edit", + "title": "Bearbeiten", "url": { "__typename": "DefaultEntityUrl", - "path": "/en/node/6728/edit", + "path": "/de/node/1/edit", "routeName": "entity.node.edit_form" } }, { "baseId": "entity.node.delete_form", "active": false, - "title": "Delete", + "title": "Löschen", "url": { "__typename": "DefaultEntityUrl", - "path": "/en/node/6728/delete", + "path": "/de/node/1/delete", "routeName": "entity.node.delete_form" } }, { "baseId": "entity.node.version_history", "active": false, - "title": "Revisions", + "title": "Revisionen", "url": { "__typename": "DefaultEntityUrl", - "path": "/en/node/6728/revisions", + "path": "/de/node/1/revisions", "routeName": "entity.node.version_history" } }, { "baseId": "content_translation.local_tasks:entity.node.content_translation_overview", "active": false, - "title": "Translate", + "title": "Übersetzen", "url": { "__typename": "DefaultEntityUrl", - "path": "/en/node/6728/translations", + "path": "/de/node/1/translations", "routeName": "entity.node.content_translation_overview" } } diff --git a/schema.graphql b/schema.graphql new file mode 100644 index 0000000..d500945 --- /dev/null +++ b/schema.graphql @@ -0,0 +1,10680 @@ +type ActiveEnvironment { + bgColor: String + fgColor: String + name: String +} + +interface BlockContent { + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! +} + +type Breadcrumb { + title: String! + url: Url! +} + +""" +Kommentar +""" +interface Comment implements Entity & EntityLinkable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt, zu dem der Kommentar zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt, zu dem der Kommentar zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Kommentar erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Kommentar erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: uid} Die Benutzer-ID des Kommentar-Autors. + """ + uid: User + + """ + {field: uid} Die Benutzer-ID des Kommentar-Autors. + """ + uidRawField: FieldItemListEntityReference + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! +} + +""" +Blokkli Node +""" +type CommentBlokkliNode implements Comment & Entity & EntityLinkable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} The time that the comment was last edited. + """ + changed: String + + """ + {field: changed} The time that the comment was last edited. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: comment_body} + """ + commentBody: String + + """ + {field: comment_body} + """ + commentBodyRawField: FieldItemListTextLong + + """ + {value} {field: created} The time that the comment was created. + """ + created: String + + """ + {field: created} The time that the comment was created. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_resolved} + """ + fieldResolved: Boolean + + """ + {field: field_resolved} + """ + fieldResolvedRawField: FieldItemListBoolean + + """ + {value} {field: field_target_uuids} + """ + fieldTargetUuids: [String] + + """ + {field: field_target_uuids} + """ + fieldTargetUuidsRawField: FieldItemListString + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: uid} The user ID of the comment author. + """ + uid: User + + """ + {field: uid} The user ID of the comment author. + """ + uidRawField: FieldItemListEntityReference + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! +} + +""" +Sprache +""" +type ConfigurableLanguage implements Entity & LanguageInterface { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + direction: Int! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + isLocked: Boolean! + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + name: String! + + """ + {field: status} + """ + status: Boolean + + """ + The unique UUID. + """ + uuid: String! + weight: Int +} + +interface Crop { + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! +} + +type DefaultEntityUrl implements EntityUrl & InternalUrl & Url { + breadcrumb: [Breadcrumb!]! + entity: Entity + internalPath: String! + languageSwitchLinks: [LanguageSwitchLink!]! + localTasks: [LocalTask!]! + metatags: [Metatag!]! + path: String! + routeName: String! + schemaOrgMetatags: SchemaMetatag! +} + +type DefaultInternalUrl implements InternalUrl & Url { + breadcrumb: [Breadcrumb!]! + internalPath: String! + languageSwitchLinks: [LanguageSwitchLink!]! + localTasks: [LocalTask!]! + metatags: [Metatag!]! + path: String! + routeName: String! + schemaOrgMetatags: SchemaMetatag! +} + +type DefaultUrl implements Url { + path: String +} + +enum DrupalDateFormat { + """ + Mo., 11/14/2022 - 14:52 + """ + FALLBACK + + """ + 2022-11-14 + """ + HTML_DATE + + """ + 2022-11-14T14:52:21+0100 + """ + HTML_DATETIME + + """ + 2022-11 + """ + HTML_MONTH + + """ + 14:52:21 + """ + HTML_TIME + + """ + 2022-W46 + """ + HTML_WEEK + + """ + 2022 + """ + HTML_YEAR + + """ + 11-14 + """ + HTML_YEARLESS_DATE + + """ + Montag, 14. November 2022 - 14:52 + """ + LONG + + """ + Mo., 14.11.2022 - 14:52 + """ + MEDIUM + + """ + 14. November 2022 + """ + OLIVERO_MEDIUM + + """ + 14.11.2022 - 14:52 + """ + SHORT +} + +type DrupalDateTime { + formatted(drupalDateFormat: DrupalDateFormat, format: String): String! +} + +interface Entity { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The unique UUID. + """ + uuid: String! +} + +type EntityCanonicalUrl implements EntityUrl & InternalUrl & Url { + breadcrumb: [Breadcrumb!]! + entity: Entity + internalPath: String! + languageSwitchLinks: [LanguageSwitchLink!]! + localTasks: [LocalTask!]! + metatags: [Metatag!]! + path: String! + routeName: String! + schemaOrgMetatags: SchemaMetatag! +} + +""" +An entity that has a description. +""" +interface EntityDescribable implements Entity { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The description. + """ + entityDescription: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The unique UUID. + """ + uuid: String! +} + +""" +An entity that is linkable. +""" +interface EntityLinkable { + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url +} + +enum EntityQueryBundleMode { + """ + Loads entities across all bundles. + """ + ALL + + """ + Loads only entities that share the same bundle with the parent entity. + """ + SAME +} + +enum EntityQueryConjunction { + AND + OR +} + +input EntityQueryFilterConditionInput { + enabled: Boolean + field: String! + language: String + operator: EntityQueryOperator + value: [String] +} + +input EntityQueryFilterInput { + conditions: [EntityQueryFilterConditionInput] + conjunction: EntityQueryConjunction + groups: [EntityQueryFilterInput] +} + +enum EntityQueryOperator { + BETWEEN + CONTAINS + ENDS_WITH + EQUAL + GREATER_THAN + GREATER_THAN_OR_EQUAL + IN + IS_NOT_NULL + IS_NULL + LIKE + NOT_BETWEEN + NOT_EQUAL + NOT_IN + NOT_LIKE + REGEXP + SMALLER_THAN + SMALLER_THAN_OR_EQUAL + STARTS_WITH +} + +type EntityQueryResult { + items: [Entity] + total: Int! +} + +enum EntityQueryRevisionMode { + """ + Loads all revisions. + """ + ALL + + """ + Loads the current (default) revisions. + """ + DEFAULT + + """ + Loads latest revision. + """ + LATEST +} + +input EntityQuerySortInput { + direction: EntityQuerySortOrder + field: String! + language: String +} + +enum EntityQuerySortOrder { + ASC + DESC +} + +""" +Interface for entities that are revisionable. +This corresponds to the core RevisionableInterface but is only implemeted by entity types where revisions are enabled. +""" +interface EntityRevisionable implements Entity { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +An entity that is translatable. +""" +interface EntityTranslatable implements Entity { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): EntityTranslatable + + """ + Get all translations. + """ + translations: [EntityTranslatable] + + """ + The unique UUID. + """ + uuid: String! +} + +enum EntityType { + """ + Kommentar + """ + COMMENT + + """ + Sprache + """ + CONFIGURABLE_LANGUAGE + + """ + Datei + """ + FILE + + """ + Medien + """ + MEDIA + + """ + Menü + """ + MENU + + """ + Benutzerdefinierter Menülink + """ + MENU_LINK_CONTENT + + """ + Inhalt + """ + NODE + + """ + Seitenabschnitt + """ + PARAGRAPH + + """ + Paragraphs Blokkli Edit State + """ + PARAGRAPHS_BLOKKLI_EDIT_STATE + + """ + Seitenabschnittsbibliothekseintrag + """ + PARAGRAPHS_LIBRARY_ITEM + + """ + Seitenabschnittstyp + """ + PARAGRAPHS_TYPE + + """ + Umleiten + """ + REDIRECT + + """ + Rokka Metadata + """ + ROKKA_METADATA + + """ + Taxonomie-Begriff + """ + TAXONOMY_TERM + + """ + Texte + """ + TEXTS + + """ + Translatable config pages + """ + TRANSLATABLE_CONFIG_PAGES + + """ + Benutzer + """ + USER +} + +interface EntityUrl { + breadcrumb: [Breadcrumb!]! + entity: Entity + languageSwitchLinks: [LanguageSwitchLink!]! + localTasks: [LocalTask!]! + metatags: [Metatag!]! + path: String! + routeName: String! + schemaOrgMetatags: SchemaMetatag! +} + +type ExternalUrl implements Url { + path: String! +} + +""" +A field item list containing items. +""" +interface FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + The field items. + """ + list: [FieldItemType] +} + +""" +Adresse +""" +type FieldItemListAddress implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeAddress + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeAddress] +} + +""" +Benutzerstatus +""" +type FieldItemListBoolean implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeBoolean + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeBoolean] +} + +""" +Geändert +""" +type FieldItemListChanged implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeChanged + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeChanged] +} + +""" +Erstellt +""" +type FieldItemListCreated implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeCreated + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeCreated] +} + +""" +Datum +""" +type FieldItemListDatetime implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeDatetime + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeDatetime] +} + +""" +E-Mail +""" +type FieldItemListEmail implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeEmail + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeEmail] +} + +""" +Benutzer-ID +""" +type FieldItemListEntityReference implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeEntityReference + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeEntityReference] +} + +""" +Abschnitte +""" +type FieldItemListEntityReferenceRevisions implements FieldItemList { + canEdit: Boolean + + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeEntityReferenceRevisions + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeEntityReferenceRevisions] + name: String! + targetBundles: [Entity] +} + +""" +Audiodatei +""" +type FieldItemListFile implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeFile + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeFile] +} + +""" +URI +""" +type FieldItemListFileUri implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeFileUri + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeFileUri] +} + +""" +Miniaturbild +""" +type FieldItemListImage implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeImage + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeImage] +} + +""" +Benutzer-ID +""" +type FieldItemListInteger implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeInteger + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeInteger] +} + +""" +Sprache +""" +type FieldItemListLanguage implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeLanguage + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeLanguage] +} + +""" +Link +""" +type FieldItemListLink implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeLink + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeLink] +} + +""" +Typ +""" +type FieldItemListListString implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeListString + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeListString] +} + +""" +Mutations +""" +type FieldItemListParagraphsBlokkliMutation implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeParagraphsBlokkliMutation + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeParagraphsBlokkliMutation] +} + +""" +URL-Alias +""" +type FieldItemListPath implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypePath + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypePath] +} + +""" +Name +""" +type FieldItemListString implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeString + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeString] +} + +""" +Translation +""" +type FieldItemListStringLong implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeStringLong + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeStringLong] +} + +""" +Telefonnummer +""" +type FieldItemListTelephone implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeTelephone + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeTelephone] +} + +""" +Kommentar +""" +type FieldItemListTextLong implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeTextLong + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeTextLong] +} + +""" +Letzter Zugriff +""" +type FieldItemListTimestamp implements FieldItemList { + """ + The number of field items. + """ + count: Int! + + """ + Get the entity the field belongs to. + """ + entity: Entity + + """ + The first field item. + """ + first: FieldItemTypeTimestamp + + """ + Get a string representation of all field items. + """ + getString: String! + + """ + True if the field list has no items. + """ + isEmpty: Boolean! + + """ + Array of field items. + """ + list: [FieldItemTypeTimestamp] +} + +""" +An item in a field list. +""" +interface FieldItemType { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! +} + +""" +Adresse +""" +type FieldItemTypeAddress implements FieldItemType { + """ + {field: additional_name} Zusatzname + """ + additionalName: String + + """ + {field: address_line1} Die erste Zeile des Adressblocks + """ + addressLine1: String + + """ + {field: address_line2} Die zweite Zeile des Adressblocks + """ + addressLine2: String + + """ + {field: address_line3} The third line of the address block + """ + addressLine3: String + + """ + {field: administrative_area} Die oberste administrative Unterteilung des Landes + """ + administrativeArea: String + + """ + {field: country_code} Der zweistellige Ländercode + """ + countryCode: String + + """ + {field: dependent_locality} Ortsteilinformation (d. h. die Nachbarschaft) + """ + dependentLocality: String + + """ + {field: family_name} Nachname + """ + familyName: String + + """ + {field: given_name} Vorname + """ + givenName: String + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: langcode} Das Sprachkürzel + """ + langcode: String + + """ + {field: locality} Ort (d. h. die Stadt) + """ + locality: String + + """ + {field: organization} Die Organisation + """ + organization: String + + """ + {field: postal_code} Postleitzahl + """ + postalCode: String + + """ + {field: sorting_code} Der Sortiercode + """ + sortingCode: String +} + +""" +Boolesch +""" +type FieldItemTypeBoolean implements FieldItemType { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} Boolescher Wert + """ + value: Boolean +} + +""" +Zuletzt geändert +""" +type FieldItemTypeChanged implements FieldItemType & FieldItemTypeStringInterface & FieldItemTypeTimestampInterface { + formatted(drupalDateFormat: DrupalDateFormat, format: String): String! + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} Zeitstempeleintrag + """ + value: String +} + +""" +Erstellt +""" +type FieldItemTypeCreated implements FieldItemType & FieldItemTypeStringInterface & FieldItemTypeTimestampInterface { + formatted(drupalDateFormat: DrupalDateFormat, format: String): String! + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} Zeitstempeleintrag + """ + value: String +} + +""" +Datum +""" +type FieldItemTypeDatetime implements FieldItemType & FieldItemTypeStringInterface & FieldItemTypeTimestampInterface { + formatted(drupalDateFormat: DrupalDateFormat, format: String): String! + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} Datumswert + """ + value: String +} + +""" +E-Mail +""" +type FieldItemTypeEmail implements FieldItemType & FieldItemTypeStringInterface { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} E-Mail + """ + value: String +} + +""" +Entitätsreferenzierung +""" +type FieldItemTypeEntityReference implements FieldItemType { + """ + {field: entity} Benutzer + """ + entity: Entity + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: target_id} Benutzer ID + """ + targetId: Int +} + +""" +Entitätsreferenz-Revisionen +""" +type FieldItemTypeEntityReferenceRevisions implements FieldItemType { + """ + {field: entity} Seitenabschnitt + """ + entity: Entity + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: target_id} Seitenabschnitt ID + """ + targetId: Int + + """ + {field: target_revision_id} Revisions-ID Seitenabschnitt + """ + targetRevisionId: Int +} + +""" +Datei +""" +type FieldItemTypeFile implements FieldItemType { + """ + {field: description} Beschreibung + """ + description: String + + """ + {field: display} Anzeige + """ + display: Boolean + + """ + {field: entity} Datei + """ + entity: File + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: target_id} Datei ID + """ + targetId: Int +} + +""" +Datei-URI +""" +type FieldItemTypeFileUri implements FieldItemType { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: url} URL der Datei relativ zum Hauptverzeichnis + """ + url: String + + """ + {field: value} URI Wert + """ + value: Url +} + +""" +Image +""" +type FieldItemTypeImage implements FieldItemType { + """ + {field: alt} Alternativer Text + """ + alt: String + derivative(style: ImageStyleId!): ImageResource + + """ + {field: entity} Datei + """ + entity: File + + """ + {field: height} Höhe + """ + height: Int + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: target_id} Datei ID + """ + targetId: Int + + """ + {field: title} Titel + """ + title: String + + """ + {field: width} Breite + """ + width: Int +} + +""" +Zahl (Ganzzahl) +""" +type FieldItemTypeInteger implements FieldItemType & FieldItemTypeIntegerInterface { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} Ganzzahl + """ + value: Int +} + +""" +Interface for field item types with an integer value. +""" +interface FieldItemTypeIntegerInterface implements FieldItemType { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + value: Int +} + +""" +Sprache +""" +type FieldItemTypeLanguage implements FieldItemType & FieldItemTypeStringInterface { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: language} Sprachobjekt + """ + language: LanguageInterface + + """ + {field: value} Sprachkürzel + """ + value: String +} + +""" +Link +""" +type FieldItemTypeLink implements FieldItemType { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: options} Optionen + """ + options: MapData + + """ + {field: title} Link-Text + """ + title: String + + """ + {field: uri} URI + """ + uri: Url +} + +""" +Liste (Text) +""" +type FieldItemTypeListString implements FieldItemType & FieldItemTypeStringInterface { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} Textwert + """ + value: String +} + +""" +Paragraphs Blokkli Mutations +""" +type FieldItemTypeParagraphsBlokkliMutation implements FieldItemType { + """ + {field: enabled} Aktiviert + """ + enabled: Boolean + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + plugin: ParagraphsBlokkliMutationPlugin + + """ + {field: plugin_id} Plugin-ID + """ + pluginId: String + + """ + {field: timestamp} Zeitstempel + """ + timestamp: String +} + +""" +Pfad +""" +type FieldItemTypePath implements FieldItemType { + """ + {field: alias} Pfad-Alias + """ + alias: String + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: langcode} Sprachkürzel + """ + langcode: String + + """ + {field: pathauto} Pathauto-Status + """ + pathauto: Int + + """ + {field: pid} Pfad-ID + """ + pid: Int +} + +""" +Klartext +""" +type FieldItemTypeString implements FieldItemType & FieldItemTypeStringInterface { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} Textwert + """ + value: String +} + +""" +Interface for string field types. +""" +interface FieldItemTypeStringInterface implements FieldItemType { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + value: String +} + +""" +Text (unformatiert, lang) +""" +type FieldItemTypeStringLong implements FieldItemType & FieldItemTypeStringInterface { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} Textwert + """ + value: String +} + +""" +Telefonnummer +""" +type FieldItemTypeTelephone implements FieldItemType & FieldItemTypeStringInterface { + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} Telefonnummer + """ + value: String +} + +""" +Text (formatiert, lang) +""" +type FieldItemTypeTextLong implements FieldItemType & FieldItemTypeStringInterface { + """ + {field: format} Textformat + """ + format: String + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: processed} Verarbeiteter Text + """ + processed: String + + """ + {field: value} Text + """ + value: String +} + +""" +Zeitstempel +""" +type FieldItemTypeTimestamp implements FieldItemType & FieldItemTypeStringInterface & FieldItemTypeTimestampInterface { + formatted(drupalDateFormat: DrupalDateFormat, format: String): String! + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + + """ + {field: value} Zeitstempeleintrag + """ + value: String +} + +""" +Interface for field item types with a timestamp value. +""" +interface FieldItemTypeTimestampInterface implements FieldItemType { + formatted(drupalDateFormat: DrupalDateFormat, format: String): String! + + """ + True if this item is considered empty. + """ + isEmpty: Boolean! + value: String +} + +""" +Datei +""" +type File implements Entity & EntityLinkable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + rokkaMetadata: RokkaMetadata + + """ + {value} {field: uri} Die URI über die auf die Datei zugegriffen werden kann (Lokal oder Fernzugriff) + """ + uri: String + + """ + {field: uri} Die URI über die auf die Datei zugegriffen werden kann (Lokal oder Fernzugriff) + """ + uriRawField: FieldItemListFileUri + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! +} + +type ImageResource { + """ + The height of the generated image. + """ + height: Int + + """ + The path of the image. + """ + urlPath: String + + """ + The width of the generated image. + """ + width: Int +} + +enum ImageStyleId { + """ + {blokkli_preview} Blokkli Preview + """ + BLOKKLI_PREVIEW + + """ + {focal_point} Fokus Punkt + """ + FOCAL_POINT + + """ + {large} Groß (480x480) + """ + LARGE + + """ + {linkit_result_thumbnail} Linkit-Ergebnisminiaturbild + """ + LINKIT_RESULT_THUMBNAIL + + """ + {media_library} Medienbibliothek-Vorschau (220x220) + """ + MEDIA_LIBRARY + + """ + {medium} Mittel (220x220) + """ + MEDIUM + + """ + {thumbnail} Miniaturansicht (100x100) + """ + THUMBNAIL + + """ + {wide} Breit (1090) + """ + WIDE +} + +interface InternalUrl { + breadcrumb: [Breadcrumb!]! + languageSwitchLinks: [LanguageSwitchLink!]! + localTasks: [LocalTask!]! + metatags: [Metatag!]! + path: String! + routeName: String! + schemaOrgMetatags: SchemaMetatag! +} + +enum Langcode { + """ + German + """ + DE + + """ + English + """ + EN + + """ + French + """ + FR +} + +type Language implements LanguageInterface { + direction: Int! + id: String + isLocked: Boolean! + name: String! + weight: Int +} + +""" +Interface for a language. +""" +interface LanguageInterface { + direction: Int! + id: String + isLocked: Boolean! + name: String! + weight: Int +} + +type LanguageSwitchLink { + active: Boolean! + language: ConfigurableLanguage! + title: String! + url: Url! +} + +type LocalTask { + active: Boolean! + baseId: String! + title: String! + url: Url! + weight: Int! +} + +""" +Generic type for untyped values. +""" +scalar MapData + +type MasqueradeContext { + isMasquerading: Boolean! +} + +""" +Medien +""" +interface Media implements Entity & EntityLinkable & EntityRevisionable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The URL of the file belonging to the media. + """ + mediaFileUrl: Url + + """ + {value} {field: mid} + """ + mid: Int + + """ + {field: mid} + """ + midRawField: FieldItemListInteger + + """ + {value} {field: name} + """ + name: String + + """ + {field: name} + """ + nameRawField: FieldItemListString + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnail: FieldItemTypeImage + + """ + {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnailRawField: FieldItemListImage + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Audio +""" +type MediaAudio implements Entity & EntityLinkable & EntityRevisionable & Media { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_media_audio_file} + """ + fieldMediaAudioFile: FieldItemTypeFile + + """ + {field: field_media_audio_file} + """ + fieldMediaAudioFileRawField: FieldItemListFile + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The URL of the file belonging to the media. + """ + mediaFileUrl: Url + + """ + {value} {field: mid} + """ + mid: Int + + """ + {field: mid} + """ + midRawField: FieldItemListInteger + + """ + {value} {field: name} + """ + name: String + + """ + {field: name} + """ + nameRawField: FieldItemListString + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnail: FieldItemTypeImage + + """ + {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnailRawField: FieldItemListImage + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Dokument +""" +type MediaDocument implements Entity & EntityLinkable & EntityRevisionable & EntityTranslatable & Media { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_media_document} + """ + fieldMediaDocument: FieldItemTypeFile + + """ + {field: field_media_document} + """ + fieldMediaDocumentRawField: FieldItemListFile + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The URL of the file belonging to the media. + """ + mediaFileUrl: Url + + """ + {value} {field: mid} + """ + mid: Int + + """ + {field: mid} + """ + midRawField: FieldItemListInteger + + """ + {value} {field: name} + """ + name: String + + """ + {field: name} + """ + nameRawField: FieldItemListString + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnail: FieldItemTypeImage + + """ + {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnailRawField: FieldItemListImage + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): MediaDocument + + """ + Get all translations. + """ + translations: [MediaDocument] + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Icon +""" +type MediaIcon implements Entity & EntityLinkable & EntityRevisionable & EntityTranslatable & Media { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_media_svg} Ein Icon in einem SVG-Dateiformat. + """ + fieldMediaSvg: FieldItemTypeImage + + """ + {field: field_media_svg} Ein Icon in einem SVG-Dateiformat. + """ + fieldMediaSvgRawField: FieldItemListImage + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The URL of the file belonging to the media. + """ + mediaFileUrl: Url + + """ + {value} {field: mid} + """ + mid: Int + + """ + {field: mid} + """ + midRawField: FieldItemListInteger + + """ + {value} {field: name} + """ + name: String + + """ + {field: name} + """ + nameRawField: FieldItemListString + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnail: FieldItemTypeImage + + """ + {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnailRawField: FieldItemListImage + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): MediaIcon + + """ + Get all translations. + """ + translations: [MediaIcon] + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Image +""" +type MediaImage implements Entity & EntityLinkable & EntityRevisionable & EntityTranslatable & Media { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_caption} + """ + fieldCaption: String + + """ + {field: field_caption} + """ + fieldCaptionRawField: FieldItemListString + + """ + {value} {field: field_copyright} + """ + fieldCopyright: String + + """ + {field: field_copyright} + """ + fieldCopyrightRawField: FieldItemListString + + """ + {value} {field: field_media_image} + """ + fieldMediaImage: FieldItemTypeImage + + """ + {field: field_media_image} + """ + fieldMediaImageRawField: FieldItemListImage + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The URL of the file belonging to the media. + """ + mediaFileUrl: Url + + """ + {value} {field: mid} + """ + mid: Int + + """ + {field: mid} + """ + midRawField: FieldItemListInteger + + """ + {value} {field: name} + """ + name: String + + """ + {field: name} + """ + nameRawField: FieldItemListString + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnail: FieldItemTypeImage + + """ + {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnailRawField: FieldItemListImage + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): MediaImage + + """ + Get all translations. + """ + translations: [MediaImage] + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Extern gehostetes Video +""" +type MediaRemoteVideo implements Entity & EntityLinkable & EntityRevisionable & EntityTranslatable & Media { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_media_oembed_video} + """ + fieldMediaOembedVideo: String + + """ + {field: field_media_oembed_video} + """ + fieldMediaOembedVideoRawField: FieldItemListString + + """ + {value} {field: field_thumbnail_custom} Eine benutzerdefinierte + Miniaturansicht. Wenn nicht angegeben, wird das Miniaturbild des + Videoanbieters verwendet. + """ + fieldThumbnailCustom: FieldItemTypeImage + + """ + {field: field_thumbnail_custom} Eine benutzerdefinierte Miniaturansicht. Wenn + nicht angegeben, wird das Miniaturbild des Videoanbieters verwendet. + """ + fieldThumbnailCustomRawField: FieldItemListImage + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The URL of the file belonging to the media. + """ + mediaFileUrl: Url + + """ + {value} {field: mid} + """ + mid: Int + + """ + {field: mid} + """ + midRawField: FieldItemListInteger + + """ + {value} {field: name} + """ + name: String + + """ + {field: name} + """ + nameRawField: FieldItemListString + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnail: FieldItemTypeImage + + """ + {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnailRawField: FieldItemListImage + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): MediaRemoteVideo + + """ + Get all translations. + """ + translations: [MediaRemoteVideo] + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Video +""" +type MediaVideo implements Entity & EntityLinkable & EntityRevisionable & Media { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt, zu dem der Medieneintrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem das Medium erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_media_video_file} + """ + fieldMediaVideoFile: FieldItemTypeFile + + """ + {field: field_media_video_file} + """ + fieldMediaVideoFileRawField: FieldItemListFile + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The URL of the file belonging to the media. + """ + mediaFileUrl: Url + + """ + {value} {field: mid} + """ + mid: Int + + """ + {field: mid} + """ + midRawField: FieldItemListInteger + + """ + {value} {field: name} + """ + name: String + + """ + {field: name} + """ + nameRawField: FieldItemListString + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnail: FieldItemTypeImage + + """ + {field: thumbnail} Das Miniaturbild des Mediums. + """ + thumbnailRawField: FieldItemListImage + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Menü +""" +type Menu implements Entity { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + links( + activeTrailIds: [String] = null + maxDepth: Int = null + minDepth: Int = null + root: String = null + ): [MenuLinkTreeElement!]! + + """ + The unique UUID. + """ + uuid: String! +} + +type MenuLink { + attribute(name: String!): String + content: MenuLinkContent + description: String + expanded: Boolean! + label: String! + url: Url +} + +""" +Benutzerdefinierter Menülink +""" +interface MenuLinkContent implements Entity & EntityLinkable & EntityRevisionable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Benutzermenü +""" +type MenuLinkContentAccount implements Entity & EntityLinkable & EntityRevisionable & MenuLinkContent { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Verwaltung +""" +type MenuLinkContentAdmin implements Entity & EntityLinkable & EntityRevisionable & MenuLinkContent { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Fußzeile +""" +type MenuLinkContentFooter implements Entity & EntityLinkable & EntityRevisionable & EntityTranslatable & MenuLinkContent { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): MenuLinkContentFooter + + """ + Get all translations. + """ + translations: [MenuLinkContentFooter] + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Hauptnavigation +""" +type MenuLinkContentMain implements Entity & EntityLinkable & EntityRevisionable & EntityTranslatable & MenuLinkContent { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): MenuLinkContentMain + + """ + Get all translations. + """ + translations: [MenuLinkContentMain] + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Werkzeuge +""" +type MenuLinkContentTools implements Entity & EntityLinkable & EntityRevisionable & MenuLinkContent { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +type MenuLinkTreeElement { + link: MenuLink! + subtree: [MenuLinkTreeElement!]! +} + +enum MenuName { + """ + Links im Bezug auf das aktive Benutzerkonto + """ + ACCOUNT + + """ + Links für administrative Aufgaben + """ + ADMIN + + """ + Links zu Website-Informationen + """ + FOOTER + + """ + Das Hauptmenü mit mindestens allen Einstiegsseiten + """ + MAIN + + """ + Links zu Benutzerwerkzeugen, meist von Modulen hinzugefügt + """ + TOOLS +} + +scalar MessengerMessage + +type Metatag { + attributes: [MetatagAttribute!]! + id: String! + tag: String! +} + +type MetatagAttribute { + key: String! + value: String! +} + +type Mutation { + masqueradeSwitchBack: Boolean! + messengerMessages: MessengerMessage + + """ + Get the edit state for an entity. + """ + paragraphsEditMutationState( + entityType: EntityType! + entityUuid: String! + langcode: String + ): ParagraphsEditMutationState + ping: String + + """ + Login with a username or password. + """ + userLogin(password: String!, username: String!): UserLoginResponse + + """ + Logout current user. + """ + userLogout( + """ + The csrfToken from the UserLoginResponse. + """ + csrfToken: String! + + """ + The logoutToken from the UserLoginResponse. + """ + logoutToken: String! + ): UserLogoutResponse + + """ + Change the password for a given user. + """ + userPasswordChange( + currentPassword: String + id: ID! + newPassword: String! + passResetToken: String + ): UserPasswordChangeResponse + + """ + Send a password reset email. Email is used if username is not set. + """ + userPasswordReset(email: String, username: String): UserPasswordResetResponse + + """ + Login with a timestamp and hash from the password reset email. + """ + userPasswordResetLogin( + hash: String! + id: ID! + timestamp: Int! + ): UserPasswordResetLoginResponse +} + +""" +Inhalt +""" +interface Node implements Entity & EntityLinkable & EntityRevisionable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Zeitpunkt, zu dem der Beitrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Zeitpunkt, zu dem der Beitrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Das Datum und die Uhrzeit, zu der der Inhalt erstellt wurde. + """ + created: String + + """ + {field: created} Das Datum und die Uhrzeit, zu der der Inhalt erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: menu_link} Automatisch erstellter Menülink für den Beitrag + (nur während des Speichervorgangs verfügbar). + """ + menuLink: MenuLinkContent + + """ + {field: menu_link} Automatisch erstellter Menülink für den Beitrag (nur während des Speichervorgangs verfügbar). + """ + menuLinkRawField: FieldItemListEntityReference + + """ + {value} {field: nid} + """ + nid: Int + + """ + {field: nid} + """ + nidRawField: FieldItemListInteger + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: promote} + """ + promote: Boolean + + """ + {field: promote} + """ + promoteRawField: FieldItemListBoolean + + """ + {value} {field: publish_on} + """ + publishOn: String + + """ + {field: publish_on} + """ + publishOnRawField: FieldItemListTimestamp + + """ + {value} {field: revision_uid} Die Benutzerkennung des Autors der aktuellen Revision. + """ + revisionUid: User + + """ + {field: revision_uid} Die Benutzerkennung des Autors der aktuellen Revision. + """ + revisionUidRawField: FieldItemListEntityReference + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: sticky} + """ + sticky: Boolean + + """ + {field: sticky} + """ + stickyRawField: FieldItemListBoolean + + """ + {value} {field: title} + """ + title: String + + """ + {field: title} + """ + titleRawField: FieldItemListString + + """ + {value} {field: uid} Der Benutzername des Autors. + """ + uid: User + + """ + {field: uid} Der Benutzername des Autors. + """ + uidRawField: FieldItemListEntityReference + + """ + {value} {field: unpublish_on} + """ + unpublishOn: String + + """ + {field: unpublish_on} + """ + unpublishOnRawField: FieldItemListTimestamp + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + {value} {field: vid} + """ + vid: Int + + """ + {field: vid} + """ + vidRawField: FieldItemListInteger + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Kontakt +""" +type NodeContact implements Entity & EntityLinkable & EntityRevisionable & EntityTranslatable & Node { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Zeitpunkt, zu dem der Beitrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Zeitpunkt, zu dem der Beitrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Das Datum und die Uhrzeit, zu der der Inhalt erstellt wurde. + """ + created: String + + """ + {field: created} Das Datum und die Uhrzeit, zu der der Inhalt erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_email} + """ + fieldEmail: String + + """ + {field: field_email} + """ + fieldEmailRawField: FieldItemListEmail + + """ + {value} {field: field_job_title} + """ + fieldJobTitle: String + + """ + {field: field_job_title} + """ + fieldJobTitleRawField: FieldItemListString + + """ + {value} {field: field_phone_number} Das internationale Telefonnummer-Format verwenden, zB +41 79 111 11 11 + """ + fieldPhoneNumber: String + + """ + {field: field_phone_number} Das internationale Telefonnummer-Format verwenden, zB +41 79 111 11 11 + """ + fieldPhoneNumberRawField: FieldItemListTelephone + + """ + {value} {field: field_photo} + """ + fieldPhoto: MediaImage + + """ + {field: field_photo} + """ + fieldPhotoRawField: FieldItemListEntityReference + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: menu_link} Automatisch erstellter Menülink für den Beitrag + (nur während des Speichervorgangs verfügbar). + """ + menuLink: MenuLinkContent + + """ + {field: menu_link} Automatisch erstellter Menülink für den Beitrag (nur während des Speichervorgangs verfügbar). + """ + menuLinkRawField: FieldItemListEntityReference + + """ + {value} {field: nid} + """ + nid: Int + + """ + {field: nid} + """ + nidRawField: FieldItemListInteger + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: promote} + """ + promote: Boolean + + """ + {field: promote} + """ + promoteRawField: FieldItemListBoolean + + """ + {value} {field: publish_on} + """ + publishOn: String + + """ + {field: publish_on} + """ + publishOnRawField: FieldItemListTimestamp + + """ + {value} {field: revision_uid} Die Benutzerkennung des Autors der aktuellen Revision. + """ + revisionUid: User + + """ + {field: revision_uid} Die Benutzerkennung des Autors der aktuellen Revision. + """ + revisionUidRawField: FieldItemListEntityReference + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: sticky} + """ + sticky: Boolean + + """ + {field: sticky} + """ + stickyRawField: FieldItemListBoolean + + """ + {value} {field: title} + """ + title: String + + """ + {field: title} + """ + titleRawField: FieldItemListString + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): NodeContact + + """ + Get all translations. + """ + translations: [NodeContact] + + """ + {value} {field: uid} Der Benutzername des Autors. + """ + uid: User + + """ + {field: uid} Der Benutzername des Autors. + """ + uidRawField: FieldItemListEntityReference + + """ + {value} {field: unpublish_on} + """ + unpublishOn: String + + """ + {field: unpublish_on} + """ + unpublishOnRawField: FieldItemListTimestamp + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + {value} {field: vid} + """ + vid: Int + + """ + {field: vid} + """ + vidRawField: FieldItemListInteger + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Seite +""" +type NodePage implements Entity & EntityLinkable & EntityRevisionable & EntityTranslatable & Node { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Zeitpunkt, zu dem der Beitrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Zeitpunkt, zu dem der Beitrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Das Datum und die Uhrzeit, zu der der Inhalt erstellt wurde. + """ + created: String + + """ + {field: created} Das Datum und die Uhrzeit, zu der der Inhalt erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_hero_image} + """ + fieldHeroImage: MediaImage + + """ + {field: field_hero_image} + """ + fieldHeroImageRawField: FieldItemListEntityReference + + """ + {value} {field: field_image} + """ + fieldImage: MediaImage + + """ + {field: field_image} + """ + fieldImageRawField: FieldItemListEntityReference + + """ + {value} {field: field_lead} Ein Text, der unterhalb des Titels angezeigt wird, falls vorhanden. + """ + fieldLead: String + + """ + {field: field_lead} Ein Text, der unterhalb des Titels angezeigt wird, falls vorhanden. + """ + fieldLeadRawField: FieldItemListTextLong + + """ + {value} {field: field_paragraphs} + """ + fieldParagraphs: [Paragraph] + + """ + {field: field_paragraphs} + """ + fieldParagraphsRawField: FieldItemListEntityReferenceRevisions + + """ + {value} {field: field_teaser} Ein Teasertext, damit Teaser, die auf die Seite verweisen, den Text anzeigen können. + """ + fieldTeaser: String + + """ + {field: field_teaser} Ein Teasertext, damit Teaser, die auf die Seite verweisen, den Text anzeigen können. + """ + fieldTeaserRawField: FieldItemListTextLong + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: menu_link} Automatisch erstellter Menülink für den Beitrag + (nur während des Speichervorgangs verfügbar). + """ + menuLink: MenuLinkContent + + """ + {field: menu_link} Automatisch erstellter Menülink für den Beitrag (nur während des Speichervorgangs verfügbar). + """ + menuLinkRawField: FieldItemListEntityReference + + """ + {value} {field: nid} + """ + nid: Int + + """ + {field: nid} + """ + nidRawField: FieldItemListInteger + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: promote} + """ + promote: Boolean + + """ + {field: promote} + """ + promoteRawField: FieldItemListBoolean + + """ + {value} {field: publish_on} + """ + publishOn: String + + """ + {field: publish_on} + """ + publishOnRawField: FieldItemListTimestamp + + """ + {value} {field: revision_uid} Die Benutzerkennung des Autors der aktuellen Revision. + """ + revisionUid: User + + """ + {field: revision_uid} Die Benutzerkennung des Autors der aktuellen Revision. + """ + revisionUidRawField: FieldItemListEntityReference + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: sticky} + """ + sticky: Boolean + + """ + {field: sticky} + """ + stickyRawField: FieldItemListBoolean + + """ + {value} {field: title} + """ + title: String + + """ + {field: title} + """ + titleRawField: FieldItemListString + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): NodePage + + """ + Get all translations. + """ + translations: [NodePage] + + """ + {value} {field: uid} Der Benutzername des Autors. + """ + uid: User + + """ + {field: uid} Der Benutzername des Autors. + """ + uidRawField: FieldItemListEntityReference + + """ + {value} {field: unpublish_on} + """ + unpublishOn: String + + """ + {field: unpublish_on} + """ + unpublishOnRawField: FieldItemListTimestamp + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + {value} {field: vid} + """ + vid: Int + + """ + {field: vid} + """ + vidRawField: FieldItemListInteger + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Medienmitteilung / News +""" +type NodePressRelease implements Entity & EntityLinkable & EntityRevisionable & EntityTranslatable & Node { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Zeitpunkt, zu dem der Beitrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Zeitpunkt, zu dem der Beitrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Das Datum und die Uhrzeit, zu der der Inhalt erstellt wurde. + """ + created: String + + """ + {field: created} Das Datum und die Uhrzeit, zu der der Inhalt erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_contact} + """ + fieldContact: NodeContact + + """ + {field: field_contact} + """ + fieldContactRawField: FieldItemListEntityReference + + """ + {value} {field: field_date} Das offizielle angezeigte Datum der Medienmitteilung. + """ + fieldDate: FieldItemTypeDatetime + + """ + {field: field_date} Das offizielle angezeigte Datum der Medienmitteilung. + """ + fieldDateRawField: FieldItemListDatetime + + """ + {value} {field: field_image} + """ + fieldImage: MediaImage + + """ + {field: field_image} + """ + fieldImageRawField: FieldItemListEntityReference + + """ + {value} {field: field_lead} Ein Text, der unterhalb des Titels angezeigt wird, falls vorhanden. + """ + fieldLead: String + + """ + {field: field_lead} Ein Text, der unterhalb des Titels angezeigt wird, falls vorhanden. + """ + fieldLeadRawField: FieldItemListTextLong + + """ + {value} {field: field_paragraphs} + """ + fieldParagraphs: [Paragraph] + + """ + {field: field_paragraphs} + """ + fieldParagraphsRawField: FieldItemListEntityReferenceRevisions + + """ + {value} {field: field_teaser} Ein Teasertext, damit Teaser, die auf die Seite verweisen, den Text anzeigen können. + """ + fieldTeaser: String + + """ + {field: field_teaser} Ein Teasertext, damit Teaser, die auf die Seite verweisen, den Text anzeigen können. + """ + fieldTeaserRawField: FieldItemListTextLong + + """ + {value} {field: field_type} + """ + fieldType: String + + """ + {field: field_type} + """ + fieldTypeRawField: FieldItemListListString + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: menu_link} Automatisch erstellter Menülink für den Beitrag + (nur während des Speichervorgangs verfügbar). + """ + menuLink: MenuLinkContent + + """ + {field: menu_link} Automatisch erstellter Menülink für den Beitrag (nur während des Speichervorgangs verfügbar). + """ + menuLinkRawField: FieldItemListEntityReference + + """ + {value} {field: nid} + """ + nid: Int + + """ + {field: nid} + """ + nidRawField: FieldItemListInteger + + """ + {value} {field: path} + """ + path: FieldItemTypePath + + """ + {field: path} + """ + pathRawField: FieldItemListPath + + """ + {value} {field: promote} + """ + promote: Boolean + + """ + {field: promote} + """ + promoteRawField: FieldItemListBoolean + + """ + {value} {field: publish_on} + """ + publishOn: String + + """ + {field: publish_on} + """ + publishOnRawField: FieldItemListTimestamp + + """ + {value} {field: revision_uid} Die Benutzerkennung des Autors der aktuellen Revision. + """ + revisionUid: User + + """ + {field: revision_uid} Die Benutzerkennung des Autors der aktuellen Revision. + """ + revisionUidRawField: FieldItemListEntityReference + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: sticky} + """ + sticky: Boolean + + """ + {field: sticky} + """ + stickyRawField: FieldItemListBoolean + + """ + {value} {field: title} + """ + title: String + + """ + {field: title} + """ + titleRawField: FieldItemListString + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): NodePressRelease + + """ + Get all translations. + """ + translations: [NodePressRelease] + + """ + {value} {field: uid} Der Benutzername des Autors. + """ + uid: User + + """ + {field: uid} Der Benutzername des Autors. + """ + uidRawField: FieldItemListEntityReference + + """ + {value} {field: unpublish_on} + """ + unpublishOn: String + + """ + {field: unpublish_on} + """ + unpublishOnRawField: FieldItemListTimestamp + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + {value} {field: vid} + """ + vid: Int + + """ + {field: vid} + """ + vidRawField: FieldItemListInteger + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Seitenabschnitt +""" +interface Paragraph implements Entity & EntityRevisionable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Akkordeon +""" +type ParagraphAccordeon implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_content} + """ + fieldContent: [Paragraph] + + """ + {field: field_content} + """ + fieldContentRawField: FieldItemListEntityReferenceRevisions + + """ + {value} {field: field_title} + """ + fieldTitle: String + + """ + {field: field_title} + """ + fieldTitleRawField: FieldItemListString + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphAccordeon + + """ + Get all translations. + """ + translations: [ParagraphAccordeon] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +blökkli Fragment +""" +type ParagraphBlokkliFragment implements Entity & EntityRevisionable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_blokkli_fragment_name} The name of the blökkli fragment. + """ + fieldBlokkliFragmentName: String + + """ + {field: field_blokkli_fragment_name} The name of the blökkli fragment. + """ + fieldBlokkliFragmentNameRawField: FieldItemListString + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Button +""" +type ParagraphButton implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_label} + """ + fieldLabel: String + + """ + {field: field_label} + """ + fieldLabelRawField: FieldItemListString + + """ + {value} {field: field_link} + """ + fieldLink: FieldItemTypeLink + + """ + {field: field_link} + """ + fieldLinkRawField: FieldItemListLink + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphButton + + """ + Get all translations. + """ + translations: [ParagraphButton] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Karussell +""" +type ParagraphCarousel implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_slides} + """ + fieldSlides: [ParagraphTextImage] + + """ + {field: field_slides} + """ + fieldSlidesRawField: FieldItemListEntityReferenceRevisions + + """ + {value} {field: field_title} + """ + fieldTitle: String + + """ + {field: field_title} + """ + fieldTitleRawField: FieldItemListString + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphCarousel + + """ + Get all translations. + """ + translations: [ParagraphCarousel] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Aus der Bibliothek +""" +type ParagraphFromLibrary implements Entity & EntityRevisionable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_reusable_paragraph} + """ + fieldReusableParagraph: ParagraphsLibraryItem + + """ + {field: field_reusable_paragraph} + """ + fieldReusableParagraphRawField: FieldItemListEntityReference + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Icon Textelement +""" +type ParagraphIconTextItem implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_icon} + """ + fieldIcon: MediaIcon + + """ + {field: field_icon} + """ + fieldIconRawField: FieldItemListEntityReference + + """ + {value} {field: field_text} + """ + fieldText: String + + """ + {field: field_text} + """ + fieldTextRawField: FieldItemListTextLong + + """ + {value} {field: field_title} + """ + fieldTitle: String + + """ + {field: field_title} + """ + fieldTitleRawField: FieldItemListString + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphIconTextItem + + """ + Get all translations. + """ + translations: [ParagraphIconTextItem] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Icon Textliste +""" +type ParagraphIconTextList implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_content} + """ + fieldContent: [ParagraphIconTextItem] + + """ + {field: field_content} + """ + fieldContentRawField: FieldItemListEntityReferenceRevisions + + """ + {value} {field: field_text} + """ + fieldText: String + + """ + {field: field_text} + """ + fieldTextRawField: FieldItemListTextLong + + """ + {value} {field: field_title} + """ + fieldTitle: String + + """ + {field: field_title} + """ + fieldTitleRawField: FieldItemListString + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphIconTextList + + """ + Get all translations. + """ + translations: [ParagraphIconTextList] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +iFrame +""" +type ParagraphIframe implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_iframe_url} + """ + fieldIframeUrl: FieldItemTypeLink + + """ + {field: field_iframe_url} + """ + fieldIframeUrlRawField: FieldItemListLink + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphIframe + + """ + Get all translations. + """ + translations: [ParagraphIframe] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Bild +""" +type ParagraphImage implements Entity & EntityRevisionable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_image} + """ + fieldImage: MediaImage + + """ + {field: field_image} + """ + fieldImageRawField: FieldItemListEntityReference + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Zitat +""" +type ParagraphQuote implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_company} + """ + fieldCompany: String + + """ + {field: field_company} + """ + fieldCompanyRawField: FieldItemListString + + """ + {value} {field: field_media_image} + """ + fieldMediaImage: MediaImage + + """ + {field: field_media_image} + """ + fieldMediaImageRawField: FieldItemListEntityReference + + """ + {value} {field: field_name} + """ + fieldName: String + + """ + {field: field_name} + """ + fieldNameRawField: FieldItemListString + + """ + {value} {field: field_quote} + """ + fieldQuote: String + + """ + {field: field_quote} + """ + fieldQuoteRawField: FieldItemListStringLong + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphQuote + + """ + Get all translations. + """ + translations: [ParagraphQuote] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Teaser +""" +type ParagraphTeaser implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_node_ref} Der Node, der als Teaser dargestellt werden + soll. Der Teasertext und das Bild kommen vom Node. + """ + fieldNodeRef: NodePage + + """ + {field: field_node_ref} Der Node, der als Teaser dargestellt werden soll. Der Teasertext und das Bild kommen vom Node. + """ + fieldNodeRefRawField: FieldItemListEntityReference + + """ + {value} {field: field_title} Optionaler Titel. Standardmässig wird der Nodetitel verwendet. + """ + fieldTitle: String + + """ + {field: field_title} Optionaler Titel. Standardmässig wird der Nodetitel verwendet. + """ + fieldTitleRawField: FieldItemListString + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphTeaser + + """ + Get all translations. + """ + translations: [ParagraphTeaser] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Teaserliste +""" +type ParagraphTeaserList implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_paragraphs_teaser} + """ + fieldParagraphsTeaser: [ParagraphTeaser] + + """ + {field: field_paragraphs_teaser} + """ + fieldParagraphsTeaserRawField: FieldItemListEntityReferenceRevisions + + """ + {value} {field: field_title} Optionale Überschrift. + """ + fieldTitle: String + + """ + {field: field_title} Optionale Überschrift. + """ + fieldTitleRawField: FieldItemListString + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphTeaserList + + """ + Get all translations. + """ + translations: [ParagraphTeaserList] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Text +""" +type ParagraphText implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_text} + """ + fieldText: String + + """ + {field: field_text} + """ + fieldTextRawField: FieldItemListTextLong + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphText + + """ + Get all translations. + """ + translations: [ParagraphText] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Text / Bild +""" +type ParagraphTextImage implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_image} + """ + fieldImage: MediaImage + + """ + {field: field_image} + """ + fieldImageRawField: FieldItemListEntityReference + + """ + {value} {field: field_text} + """ + fieldText: String + + """ + {field: field_text} + """ + fieldTextRawField: FieldItemListTextLong + + """ + {value} {field: field_title} + """ + fieldTitle: String + + """ + {field: field_title} + """ + fieldTitleRawField: FieldItemListString + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphTextImage + + """ + Get all translations. + """ + translations: [ParagraphTextImage] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Video +""" +type ParagraphVideo implements Entity & EntityRevisionable & EntityTranslatable & Paragraph { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettings: String + + """ + {field: behavior_settings} Die Verhaltensplugineinstellungen + """ + behaviorSettingsRawField: FieldItemListStringLong + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem der Seitenabschnittstyp erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_context_description} Beschreibung des Inhaltes des Videos. + """ + fieldContextDescription: String + + """ + {field: field_context_description} Beschreibung des Inhaltes des Videos. + """ + fieldContextDescriptionRawField: FieldItemListTextLong + + """ + {value} {field: field_title} Ein kurzer Titel der den Inhalt des Videos erklärt. + """ + fieldTitle: String + + """ + {field: field_title} Ein kurzer Titel der den Inhalt des Videos erklärt. + """ + fieldTitleRawField: FieldItemListString + + """ + {value} {field: field_video} Link zu Youtube oder Vimeo + """ + fieldVideo: MediaRemoteVideo + + """ + {value} {field: field_video_description} Beschreibung, die unter dem Video angezeigt wird. + """ + fieldVideoDescription: String + + """ + {field: field_video_description} Beschreibung, die unter dem Video angezeigt wird. + """ + fieldVideoDescriptionRawField: FieldItemListStringLong + + """ + {field: field_video} Link zu Youtube oder Vimeo + """ + fieldVideoRawField: FieldItemListEntityReference + + """ + {value} {field: field_video_source} Quelle des Videos / Copyright-Informationen. Wird jeweils mit © angezeigt. + """ + fieldVideoSource: String + + """ + {field: field_video_source} Quelle des Videos / Copyright-Informationen. Wird jeweils mit © angezeigt. + """ + fieldVideoSourceRawField: FieldItemListString + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The untyped paragraph options. + """ + paragraphsBlokkliOptions: ParagraphsBlokkliOptions + + """ + {value} {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldName: String + + """ + {field: parent_field_name} Der Feldname der übergeordneten Entität, die diese Entität referenziert. + """ + parentFieldNameRawField: FieldItemListString + + """ + {value} {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentId: String + + """ + {field: parent_id} Die ID der übergeordneten Entität, von der diese Entität referenziert wird. + """ + parentIdRawField: FieldItemListString + + """ + {value} {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentType: String + + """ + {field: parent_type} Der übergeordnete Entitätstyp, zu dem diese Entität gehört. + """ + parentTypeRawField: FieldItemListString + props: Paragraph + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): ParagraphVideo + + """ + Get all translations. + """ + translations: [ParagraphVideo] + + """ + {value} {field: type} + """ + type: ParagraphsType + + """ + {field: type} + """ + typeRawField: FieldItemListEntityReference + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +input ParagraphsBlokkliAddEntityReferenceMultipleInput { + paragraphBundle: String! + targetBundle: String! + targetId: String! + targetType: String! +} + +type ParagraphsBlokkliAllowedType { + """ + The allowed paragraph types. + """ + allowedTypes: [String] + + """ + The bundle. For entity types without bundles, this is the same value as entityType. + """ + bundle: String! + + """ + The entity type. + """ + entityType: String! + + """ + The name of the field. + """ + fieldName: String! +} + +type ParagraphsBlokkliAvailableFeatures { + """ + Whether the commenting feature is available. + """ + comment: Boolean! + + """ + Whether the conversions feature is available. + """ + conversion: Boolean! + + """ + Whether the library feature is available. + """ + library: Boolean! + + """ + List of all enabled mutation plugin IDs. + """ + mutations: [String] +} + +input ParagraphsBlokkliBulkUpdateBehaviorSettingsInput { + key: String! + pluginId: String! + uuid: String! + value: String! +} + +type ParagraphsBlokkliConversion { + sourceBundle: String! + targetBundle: String! +} + +type ParagraphsBlokkliDroppableFieldConfig { + allowedBundles: [String]! + allowedEntityType: String! + canEdit: Boolean! + cardinality: Int! + entityBundle: String! + entityType: String! + label: String! + name: String! + required: Boolean! +} + +""" +Paragraphs Blokkli Edit State +""" +type ParagraphsBlokkliEditState implements Entity & EntityLinkable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The bundle label. + """ + bundleLabel: String + + """ + {value} {field: changed} The time that the paragraphs blokkli edit state was last edited. + """ + changed: String + + """ + {field: changed} The time that the paragraphs blokkli edit state was last edited. + """ + changedRawField: FieldItemListChanged + comments: [Comment] + + """ + {value} {field: created} The time that the paragraphs blokkli edit state was created. + """ + created: String + + """ + {field: created} The time that the paragraphs blokkli edit state was created. + """ + createdRawField: FieldItemListCreated + + """ + {value} {field: current_index} The current position in the mutation history. + """ + currentIndex: Int + + """ + {field: current_index} The current position in the mutation history. + """ + currentIndexRawField: FieldItemListInteger + + """ + Whether the current user is the owner. + """ + currentUserIsOwner: Boolean + + """ + The paragraphs_blokkli host entity information. + """ + entity: ParagraphsBlokkliEntity! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: host_entity_type} The host entity type. + """ + hostEntityType: String + + """ + {field: host_entity_type} The host entity type. + """ + hostEntityTypeRawField: FieldItemListString + + """ + {value} {field: host_entity_uuid} The host entity UUID. + """ + hostEntityUuid: String + + """ + {field: host_entity_uuid} The host entity UUID. + """ + hostEntityUuidRawField: FieldItemListString + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + The mutated entity. + """ + mutatedEntity: Entity! + + """ + The mutated state. + """ + mutatedState: ParagraphsBlokkliMutatedState + + """ + {value} {field: mutations} The mutations applied. + """ + mutations: [FieldItemTypeParagraphsBlokkliMutation] + + """ + {field: mutations} The mutations applied. + """ + mutationsRawField: FieldItemListParagraphsBlokkliMutation + + """ + Name of the owner. + """ + ownerName: String + + """ + {value} {field: preview_hash} The hash for generating preview links. + """ + previewHash: String + + """ + {field: preview_hash} The hash for generating preview links. + """ + previewHashRawField: FieldItemListString + + """ + The preview URL. + """ + previewUrl: String + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + The available langcodes. + """ + translationState: ParagraphsBlokkliTranslationState + + """ + {value} {field: uid} + """ + uid: User + + """ + {field: uid} + """ + uidRawField: FieldItemListEntityReference + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! +} + +type ParagraphsBlokkliEditableFieldConfig { + entityBundle: String! + entityType: String! + label: String! + maxLength: Int! + name: String! + required: Boolean! + type: ParagraphsBlokkliEditableFieldConfigType! +} + +enum ParagraphsBlokkliEditableFieldConfigType { + frame + plain +} + +type ParagraphsBlokkliEntity { + bundleLabel: String + label: String + status: Boolean +} + +type ParagraphsBlokkliFieldConfig { + allowedBundles: [String]! + canEdit: Boolean! + cardinality: Int! + entityBundle: String! + entityType: String! + label: String! + name: String! +} + +type ParagraphsBlokkliImportSourceEntities { + items: [ParagraphsBlokkliImportSourceEntity] + total: Int +} + +type ParagraphsBlokkliImportSourceEntity { + label: String! + uuid: String! +} + +type ParagraphsBlokkliLibraryItemsSearchResults { + items: [ParagraphsLibraryItem] + perPage: Int! + total: Int! +} + +type ParagraphsBlokkliMediaItem { + context: String! + icon: String + label: String! + mediaBundle: String + mediaId: String! + targetBundles: [String]! + thumbnail: String +} + +interface ParagraphsBlokkliMediaLibraryFilter { + id: String! + label: String! + type: String! +} + +type ParagraphsBlokkliMediaLibraryFilterSelect implements ParagraphsBlokkliMediaLibraryFilter { + default: String! + id: String! + label: String! + options: MapData + type: String! +} + +type ParagraphsBlokkliMediaLibraryFilterText implements ParagraphsBlokkliMediaLibraryFilter { + id: String! + label: String! + placeholder: String! + type: String! +} + +type ParagraphsBlokkliMediaLibraryResults { + filters: [ParagraphsBlokkliMediaLibraryFilter] + items: [ParagraphsBlokkliMediaItem] + perPage: Int! + total: Int! +} + +type ParagraphsBlokkliMutatedField { + entityType: String! + entityUuid: String! + list: [Paragraph]! + name: String! +} + +type ParagraphsBlokkliMutatedState { + """ + Object containing UUIDs of paragraphs as the key and their mutated options as the value. + """ + behaviorSettings: MapData + + """ + Array of available paragraph fields that can be edited, containing the mutated paragraphs. + """ + fields(langcode: String): [ParagraphsBlokkliMutatedField!] + + """ + A list of validation violations for the entity and all its fields. + """ + violations: [ParagraphsEditViolation] +} + +type ParagraphsBlokkliMutationPlugin { + affectedParagraphUuid: String + label: String +} + +type ParagraphsBlokkliMutationResult { + errors: [String] + state: ParagraphsBlokkliEditState + success: Boolean +} + +""" +An object of options managed by the paragraph component itself. +""" +scalar ParagraphsBlokkliOptions + +type ParagraphsBlokkliProps { + canEdit: Boolean! + editLabel: String + entityBundle: String! + entityType: String! + entityUuid: String! + language: String! +} + +enum ParagraphsBlokkliRemoteVideoProvider { + VIMEO + YOUTUBE +} + +type ParagraphsBlokkliSearchItem { + context: String + entityBundle: String! + entityId: String! + entityType: String! + imageUrl: String + targetBundles: [String]! + text: String + title: String! +} + +type ParagraphsBlokkliSearchTab { + id: String! + label: String! +} + +interface ParagraphsBlokkliSupportedClipboard { + possibleParagraphBundles: [String] +} + +type ParagraphsBlokkliSupportedClipboardFile implements ParagraphsBlokkliSupportedClipboard { + fileExtensions: [String]! + maxFileSize: Int! + possibleParagraphBundles: [String]! +} + +type ParagraphsBlokkliSupportedClipboardImage implements ParagraphsBlokkliSupportedClipboard { + fileExtensions: [String]! + maxFileSize: Int! + possibleParagraphBundles: [String]! +} + +type ParagraphsBlokkliSupportedClipboardRemoteVideo implements ParagraphsBlokkliSupportedClipboard { + possibleParagraphBundles: [String]! + videoProviders: [ParagraphsBlokkliRemoteVideoProvider]! +} + +type ParagraphsBlokkliSupportedClipboardRichText implements ParagraphsBlokkliSupportedClipboard { + possibleParagraphBundles: [String]! +} + +type ParagraphsBlokkliTransformPlugin { + bundles: [String]! + id: String! + label: String! + max: Int! + min: Int! + targetBundles: [String]! +} + +type ParagraphsBlokkliTranslationState { + """ + The generally available languages. + """ + availableLanguages: [LanguageInterface] + + """ + Whether the entity is translatable. + """ + isTranslatable: Boolean + + """ + The source language. + """ + sourceLanguage: String + + """ + The translations (existing or non existing) available for the entity. + """ + translations: [ParagraphsBlokkliTranslationStateEntityTranslation] +} + +type ParagraphsBlokkliTranslationStateEntityTranslation { + editUrl: String + exists: Boolean + id: String + status: Boolean + url: String +} + +type ParagraphsBuilderUrlPrefix { + langcode: String! + prefix: String! +} + +type ParagraphsEditMutationState { + """ + Adds a new paragraph. + """ + add( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The paragraph type. + """ + type: String! + ): ParagraphsBlokkliMutationResult + addComment(body: String!, paragraphUuids: [String]!): [Comment] + + """ + Adds a new text paragraph. + """ + add_clipboard_text( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The text. + """ + text: String! + ): ParagraphsBlokkliMutationResult + + """ + Adds a new paragraph for the given entity reference. + """ + add_entity_reference( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The paragraph bundle. + """ + paragraphBundle: String! + + """ + The entity bundle of the referenced entity. + """ + targetBundle: String! + + """ + The ID of the referenced entity. + """ + targetId: String! + + """ + The entity type of the referenced entity. + """ + targetType: String! + ): ParagraphsBlokkliMutationResult + + """ + Adds new paragraphs for the given entity references. + """ + add_entity_reference_multiple( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The entity references. + """ + references: [ParagraphsBlokkliAddEntityReferenceMultipleInput]! + ): ParagraphsBlokkliMutationResult + + """ + Handles file upload, creating a media entity and adding a matching paragraph. + """ + add_file( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The base64 encoded file data. + """ + data: String! + + """ + The name of the file. + """ + fileName: String! + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + ): ParagraphsBlokkliMutationResult + + """ + Adds a new fragment paragraph. + """ + add_fragment( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The fragment name. + """ + name: String! + ): ParagraphsBlokkliMutationResult + + """ + Adds a new paragraph of type image. + """ + add_image( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The base64 encoded image data. + """ + data: String! + + """ + The name of the file. + """ + fileName: String! + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + ): ParagraphsBlokkliMutationResult + + """ + Adds a new paragraph of type image for an ID + """ + add_media_image_reference( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The ID of the media image. + """ + id: String! + ): ParagraphsBlokkliMutationResult + + """ + Adds a new paragraph of type video for an ID + """ + add_media_video_reference( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The ID of the media video. + """ + id: String! + ): ParagraphsBlokkliMutationResult + + """ + Add a reusable paragraph. + """ + add_reusable( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The UUID of the paragraphs library item entity. + """ + libraryItemUuid: String! + ): ParagraphsBlokkliMutationResult + + """ + Adds a new paragraph of type teaser for a node ID. + """ + add_teaser_from_node_id( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + Die ID des Beitrags. + """ + nid: String! + ): ParagraphsBlokkliMutationResult + + """ + Adds a new text paragraph. + """ + add_text( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The paragrpah bundle. + """ + bundle: String! + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The text. + """ + text: String! + + """ + The text format for the field. + """ + textFieldFormat: String! + + """ + The name of the text field. + """ + textFieldName: String! + ): ParagraphsBlokkliMutationResult + + """ + Adds a new paragraph of type Video (Remote). + """ + add_video_remote( + """ + The UUID of the paragraph after which to add this one. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The video URL. + """ + url: String! + ): ParagraphsBlokkliMutationResult + + """ + Updates multiple behavior settings. + """ + bulk_update_behavior_settings( + """ + A list of arrays with keys: uuid, pluginId, key, value. + """ + items: [ParagraphsBlokkliBulkUpdateBehaviorSettingsInput]! + ): ParagraphsBlokkliMutationResult + + """ + Converts an existing paragraph to another type. + """ + convert( + """ + The bundle to which the paragraph should be converted. + """ + targetBundle: String! + + """ + The UUID of the paragraph being converted. + """ + uuid: String! + ): ParagraphsBlokkliMutationResult + + """ + Converts existing paragraphs to another type. + """ + convert_multiple( + """ + The bundle to which the paragraph should be converted. + """ + targetBundle: String! + + """ + The UUIDs of the paragraphs being converted. + """ + uuids: [String]! + ): ParagraphsBlokkliMutationResult + + """ + Copies all paragraphs from an existing entity. + """ + copy_from_existing( + """ + The names of the fields to copy. + """ + fields: [String]! + + """ + The UUID of the entity from which to copy the paragraphs. + """ + sourceUuid: String! + ): ParagraphsBlokkliMutationResult + + """ + Detaches reusable paragraphs. + """ + detach_reusable( + """ + The paragraphs to detach. + """ + uuids: [String]! + ): ParagraphsBlokkliMutationResult + + """ + Duplicates an existing paragraph. + """ + duplicate( + """ + The UUID of the paragraph after which to duplicate this one. + """ + afterUuid: String + + """ + The UUID of the paragraph being duplicated. + """ + uuid: String! + ): ParagraphsBlokkliMutationResult + + """ + Duplicates multiple paragraphs. + """ + duplicate_multiple( + """ + The UUID of the paragraph after which to duplicate this one. + """ + afterUuid: String + + """ + The UUIDs of the paragraphs being duplicated. + """ + uuids: [String]! + ): ParagraphsBlokkliMutationResult + + """ + Edit a paragraph. + """ + edit( + """ + The langcode. + """ + langcode: String! + + """ + The UUID of the paragraph being edited. + """ + uuid: String! + ): ParagraphsBlokkliMutationResult + + """ + Makes a paragraph reusable. + """ + make_reusable( + """ + The label for the reusable paragraph. + """ + label: String! + + """ + The paragraph to make reusable. + """ + uuid: String! + ): ParagraphsBlokkliMutationResult + + """ + PMove a paragraph to another position. + """ + move( + """ + The UUID of the preceeding paragraph. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The UUID of the paragraph being moved. + """ + uuid: String! + ): ParagraphsBlokkliMutationResult + + """ + Move multiple paragraphs to another position. + """ + move_multiple( + """ + The UUID of the preceeding paragraph. + """ + afterUuid: String + + """ + The field name of the target host. + """ + hostFieldName: String! + + """ + The entity type of the target host. + """ + hostType: String! + + """ + The UUID of the target host. + """ + hostUuid: String! + + """ + The UUIDs of the paragraphs being moved. + """ + uuids: [String]! + ): ParagraphsBlokkliMutationResult + publish(createNewState: Boolean): ParagraphsBlokkliMutationResult + redo: ParagraphsBlokkliMutationResult + + """ + Remove a paragraph. + """ + remove( + """ + The UUID of the paragraph being removed. + """ + uuid: String! + ): ParagraphsBlokkliMutationResult + + """ + Remove multiple paragraphs. + """ + remove_multiple( + """ + The UUIDs of the paragraphs being removed. + """ + uuids: [String]! + ): ParagraphsBlokkliMutationResult + + """ + Replace referenced media. + """ + replace_host_entity_media( + """ + The name of the field. + """ + fieldName: String! + + """ + The langcode. + """ + langcode: String! + + """ + The new media ID. + """ + mediaId: String! + ): ParagraphsBlokkliMutationResult + + """ + Replace referenced media. + """ + replace_media( + """ + The name of the field. + """ + fieldName: String! + + """ + The langcode. + """ + langcode: String! + + """ + The new media ID. + """ + mediaId: String! + + """ + The UUID of the paragraph. + """ + uuid: String! + ): ParagraphsBlokkliMutationResult + resolveComment(uuid: String!): [Comment] + revertAllChanges: ParagraphsBlokkliMutationResult + setHistoryIndex(index: Int!): ParagraphsBlokkliMutationResult + setMutationStatus( + index: Int! + status: Boolean! + ): ParagraphsBlokkliMutationResult + takeOwnership: ParagraphsBlokkliMutationResult + + """ + Transforms one or more paragraphs. + """ + transform( + """ + The ID of the transform plugin. + """ + pluginId: String! + + """ + The UUIDs of the paragraph being transformed. + """ + uuids: [String]! + ): ParagraphsBlokkliMutationResult + + """ + Translate multiple paragraphs. + """ + translate_multiple: ParagraphsBlokkliMutationResult + undo: ParagraphsBlokkliMutationResult + + """ + Updates a single behavior setting. + """ + update_behavior_setting( + """ + The key of the setting. + """ + key: String! + + """ + The plugin ID of the setting. + """ + pluginId: String! + + """ + The UUID of the paragraph to update the option of. + """ + uuid: String! + + """ + The value of the setting. + """ + value: String! + ): ParagraphsBlokkliMutationResult + + """ + Update a single field value of a paragraph. + """ + update_field_value( + """ + The name of the field. + """ + fieldName: String! + + """ + The langcode. + """ + langcode: String! + + """ + The UUID of the paragraph. + """ + uuid: String! + + """ + The updated field value. + """ + value: String! + ): ParagraphsBlokkliMutationResult + + """ + Update a single field value on the host entity. + """ + update_host_entity_field_value( + """ + The name of the field. + """ + fieldName: String! + + """ + The langcode. + """ + langcode: String! + + """ + The updated field value. + """ + value: String! + ): ParagraphsBlokkliMutationResult +} + +type ParagraphsEditViolation { + code: String + entityType: String + entityUuid: String + message: String! + propertyPath: String +} + +""" +Seitenabschnittsbibliothekseintrag +""" +type ParagraphsLibraryItem implements Entity & EntityLinkable & EntityRevisionable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt, zu dem dieser Bibliothekseintrag zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt, zu dem dieser Bibliothekseintrag zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Der Zeitpunkt, zu dem dieser Bibliothekseintrag erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem dieser Bibliothekseintrag erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: paragraphs} + """ + paragraphs: Paragraph + + """ + {field: paragraphs} + """ + paragraphsRawField: FieldItemListEntityReferenceRevisions + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean +} + +""" +Seitenabschnittstyp +""" +type ParagraphsType implements Entity { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + Whether this paragraph type can be made reusable. + """ + allowReusable: Boolean + + """ + {field: description} + """ + description: String + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {field: icon_default} + """ + iconDefault: String + + """ + {field: icon_uuid} + """ + iconUuid: String + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + If this paragraph is translatable. + """ + isTranslatable: Boolean + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {field: status} + """ + status: Boolean + + """ + The unique UUID. + """ + uuid: String! +} + +type Query { + activeEnvironment: ActiveEnvironment + currentUser: User + entityById(entityType: EntityType!, id: ID!, langcode: Langcode): Entity + entityByUuid( + entityType: EntityType! + langcode: Langcode + uuid: String! + ): Entity + entityQuery( + """ + The machine name of the entity type (e.g. "node", "taxonomy_term", etc.) + """ + entityType: EntityType! + + """ + Filter results. + """ + filter: EntityQueryFilterInput = null + + """ + The maximum amount of items to return. + """ + limit: Int = 10 + + """ + Index of the first item. + """ + offset: Int = 0 + revisions: EntityQueryRevisionMode = DEFAULT + + """ + Sort results. + """ + sort: [EntityQuerySortInput!] = null + ): EntityQueryResult! + + """ + Get the edit state for a paragraphs field on an entity. + """ + getParagraphsEditState( + entityType: EntityType! + entityUuid: String! + + """ + Get the state at the given history index. + If null, the state with all currently active mutations is returned. + If -1, the state without any mutations is returned. + If >=0, the state with all mutations up to and including this index is returned. + """ + historyIndex: Int + langcode: String! + ): ParagraphsBlokkliEditState + getText(context: String, default: String, key: String!): String + getTextMultiple(texts: [TextsInput]): [TextsInterface] + getTextPlural( + context: String + key: String! + plural: String + singular: String + ): TextsPlural + globalConfig: TranslatableConfigPagesGlobal + masqueradeContext: MasqueradeContext + + """ + Load a menu by its name. The menu is loaded automatically in the + current language. + """ + menuByName( + """ + The name of the menu. + """ + name: MenuName! + ): Menu + messengerMessages: MessengerMessage + + """ + Get the array of allowed paragraph types by entity field. + """ + paragraphsBlokkliAllowedTypes: [ParagraphsBlokkliAllowedType] + paragraphsBlokkliAvailableFeatures: ParagraphsBlokkliAvailableFeatures + + """ + Get the array of allowed paragraph types by entity field. + """ + paragraphsBlokkliConversions: [ParagraphsBlokkliConversion] + paragraphsBlokkliGetTransformPlugins( + entityType: EntityType! + entityUuid: String! + langcode: String! + ): [ParagraphsBlokkliTransformPlugin] + paragraphsBlokkliSearch( + id: String + text: String! + ): [ParagraphsBlokkliSearchItem] + paragraphsBlokkliSearchLibraryItems( + bundles: [String]! + page: Int + text: String + ): ParagraphsBlokkliLibraryItemsSearchResults + paragraphsBlokkliSearchTabs: [ParagraphsBlokkliSearchTab] + pbGetDroppableFieldConfig( + entityBundle: String! + entityType: String! + ): [ParagraphsBlokkliDroppableFieldConfig] + pbGetEditableFieldConfig( + entityBundle: String! + entityType: String! + ): [ParagraphsBlokkliEditableFieldConfig] + pbGetFieldConfig: [ParagraphsBlokkliFieldConfig] + + """ + Get import source entities. + """ + pbGetImportSourceEntities( + entityType: String! + entityUuid: String! + searchText: String + ): ParagraphsBlokkliImportSourceEntities + pbGetSupportedClipboards: [ParagraphsBlokkliSupportedClipboard] + pbGetUrlPrefixes: [ParagraphsBuilderUrlPrefix]! + pbMediaLibraryGetResults( + bundle: String + page: Int + text: String + ): ParagraphsBlokkliMediaLibraryResults + ping: String + requestHeaders: [RequestHeader!] + route(path: String!): Url + textsLoader: TextsLoader +} + +""" +Umleiten +""" +interface Redirect implements Entity & EntityLinkable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: language} Die Umleitungssprache. + """ + language: LanguageInterface + + """ + {field: language} Die Umleitungssprache. + """ + languageRawField: FieldItemListLanguage + + """ + {value} {field: rid} Die Umleitungs-ID. + """ + rid: Int + + """ + {field: rid} Die Umleitungs-ID. + """ + ridRawField: FieldItemListInteger + + """ + {value} {field: status_code} Der Umleitungs-Statuscode + """ + statusCode: Int + + """ + {field: status_code} Der Umleitungs-Statuscode + """ + statusCodeRawField: FieldItemListInteger + + """ + {value} {field: type} Der Umleitungstyp. + """ + type: String + + """ + {field: type} Der Umleitungstyp. + """ + typeRawField: FieldItemListString + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! +} + +""" +Umleiten +""" +type RedirectRedirect implements Entity & EntityLinkable & Redirect { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: language} Die Umleitungssprache. + """ + language: LanguageInterface + + """ + {field: language} Die Umleitungssprache. + """ + languageRawField: FieldItemListLanguage + + """ + {value} {field: rid} Die Umleitungs-ID. + """ + rid: Int + + """ + {field: rid} Die Umleitungs-ID. + """ + ridRawField: FieldItemListInteger + + """ + {value} {field: status_code} Der Umleitungs-Statuscode + """ + statusCode: Int + + """ + {field: status_code} Der Umleitungs-Statuscode + """ + statusCodeRawField: FieldItemListInteger + + """ + {value} {field: type} Der Umleitungstyp. + """ + type: String + + """ + {field: type} Der Umleitungstyp. + """ + typeRawField: FieldItemListString + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! +} + +type RedirectUrl implements Url { + path: String! + redirect: Redirect! +} + +type RequestHeader { + key: String! + value: [String!] +} + +""" +Rokka Metadata +""" +type RokkaMetadata implements Entity & EntityLinkable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {value} {field: binary_hash} The Rokka.io hash of the binary image data of the source object. + """ + binaryHash: String + + """ + {field: binary_hash} The Rokka.io hash of the binary image data of the source object. + """ + binaryHashRawField: FieldItemListString + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: filesize} The original file size. + """ + filesize: Int + + """ + {field: filesize} The original file size. + """ + filesizeRawField: FieldItemListInteger + + """ + {value} {field: format} The image format type of the file. + """ + format: String + + """ + {field: format} The image format type of the file. + """ + formatRawField: FieldItemListString + + """ + {value} {field: hash} The Rokka.io hash of the source object, based on + metadata. Changes if metadata is modified, e.g. by 'Focal Point'. + """ + hash: String + + """ + {field: hash} The Rokka.io hash of the source object, based on metadata. + Changes if metadata is modified, e.g. by 'Focal Point'. + """ + hashRawField: FieldItemListString + + """ + {value} {field: height} Die Höhe des Bildes + """ + height: Int + + """ + {field: height} Die Höhe des Bildes + """ + heightRawField: FieldItemListInteger + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: status} A boolean indicating whether the Rokka Metadata is published. + """ + status: Boolean + + """ + {field: status} A boolean indicating whether the Rokka Metadata is published. + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: uri} The original file URI. + """ + uri: String + + """ + {field: uri} The original file URI. + """ + uriRawField: FieldItemListString + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + {value} {field: width} Die Breite des Bildes. + """ + width: Int + + """ + {field: width} Die Breite des Bildes. + """ + widthRawField: FieldItemListInteger +} + +type SchemaMetatag { + json: String +} + +""" +Taxonomie-Begriff +""" +interface TaxonomyTerm implements Entity & EntityLinkable & EntityRevisionable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt an dem der Begriff zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt an dem der Begriff zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + children: [TaxonomyTerm] + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + {value} {field: description} + """ + description: String + + """ + {field: description} + """ + descriptionRawField: FieldItemListTextLong + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: name} + """ + name: String + + """ + {field: name} + """ + nameRawField: FieldItemListString + + """ + {value} {field: parent} Die übergeordneten Bergriffe dieses Begriffs. + """ + parent: [TaxonomyTerm] + + """ + {field: parent} Die übergeordneten Bergriffe dieses Begriffs. + """ + parentRawField: FieldItemListEntityReference + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: tid} Die Begriffs-ID. + """ + tid: Int + + """ + {field: tid} Die Begriffs-ID. + """ + tidRawField: FieldItemListInteger + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean + + """ + {value} {field: weight} Die Reihenfolge dieses Begriffs in Relation zu anderen Begriffen. + """ + weight: Int + + """ + {field: weight} Die Reihenfolge dieses Begriffs in Relation zu anderen Begriffen. + """ + weightRawField: FieldItemListInteger +} + +""" +Tags +""" +type TaxonomyTermTags implements Entity & EntityLinkable & EntityRevisionable & TaxonomyTerm { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + {value} {field: changed} Der Zeitpunkt an dem der Begriff zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt an dem der Begriff zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + children: [TaxonomyTermTags] + + """ + {value} {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcode: Boolean + + """ + {field: default_langcode} Eine Kennzeichnung, die angibt, ob es sich um die Standardübersetzung handelt. + """ + defaultLangcodeRawField: FieldItemListBoolean + + """ + {value} {field: description} + """ + description: String + + """ + {field: description} + """ + descriptionRawField: FieldItemListTextLong + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The revision identifier of the entity, or NULL if the entity does not have a revision identifier. + """ + entityRevisionId: String + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Checks if this entity is the latest revision. + """ + isLatestRevision: Boolean + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: name} + """ + name: String + + """ + {field: name} + """ + nameRawField: FieldItemListString + + """ + {value} {field: parent} Die übergeordneten Bergriffe dieses Begriffs. + """ + parent: [TaxonomyTermTags] + + """ + {field: parent} Die übergeordneten Bergriffe dieses Begriffs. + """ + parentRawField: FieldItemListEntityReference + + """ + {value} {field: status} + """ + status: Boolean + + """ + {field: status} + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: tid} Die Begriffs-ID. + """ + tid: Int + + """ + {field: tid} Die Begriffs-ID. + """ + tidRawField: FieldItemListInteger + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! + + """ + TRUE if the entity object was a revision, FALSE otherwise. + """ + wasDefaultRevision: Boolean + + """ + {value} {field: weight} Die Reihenfolge dieses Begriffs in Relation zu anderen Begriffen. + """ + weight: Int + + """ + {field: weight} Die Reihenfolge dieses Begriffs in Relation zu anderen Begriffen. + """ + weightRawField: FieldItemListInteger +} + +""" +Texte +""" +type Texts implements Entity & EntityLinkable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + {value} {field: key} + """ + key: String + + """ + {field: key} + """ + keyRawField: FieldItemListString + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: plural} + """ + plural: Boolean + + """ + {field: plural} + """ + pluralRawField: FieldItemListBoolean + + """ + {value} {field: translation} + """ + translation: String + + """ + {field: translation} + """ + translationRawField: FieldItemListStringLong + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! +} + +type TextsDefault implements TextsInterface { + context: String + default: String + key: String! +} + +input TextsInput { + context: String + default: String + key: String! +} + +interface TextsInterface { + context: String + key: String! +} + +type TextsLoader { + getText(context: String, default: String, key: String!): String + getTextMultiple(texts: [TextsInput]): [TextsInterface] + getTextPlural( + context: String + key: String! + plural: String + singular: String + ): TextsPlural +} + +type TextsPlural implements TextsInterface { + context: String + key: String! + plural: String + singular: String +} + +""" +Translatable config pages +""" +interface TranslatableConfigPages implements Entity & EntityLinkable { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! +} + +""" +Globale Konfiguration +""" +type TranslatableConfigPagesGlobal implements Entity & EntityLinkable & EntityTranslatable & TranslatableConfigPages { + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + The props for the blokkli provider component. + """ + blokkliProps: ParagraphsBlokkliProps! + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + + """ + {value} {field: field_address} + """ + fieldAddress: FieldItemTypeAddress + + """ + {field: field_address} + """ + fieldAddressRawField: FieldItemListAddress + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + Get a specific translation. + """ + translation( + """ + Return entity in current language if translation language does not exist. + """ + fallback: Boolean + langcode: Langcode! + ): TranslatableConfigPagesGlobal + + """ + Get all translations. + """ + translations: [TranslatableConfigPagesGlobal] + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! +} + +""" +Interface for an URL. +""" +interface Url { + path: String +} + +input UrlOptions { + """ + Whether to force the output to be an absolute link (beginning with http:). + Useful for links that will be displayed outside the site, such as in an RSS + """ + absolute: Boolean + + """ + A fragment identifier (named anchor) to append to the URL. Do not include the leading '#' character. + """ + fragment: String + + """ + Force generating the URL in the given langcode. + """ + language: Langcode +} + +""" +Benutzer +""" +type User implements Entity & EntityLinkable { + """ + {value} {field: access} Der Zeitpunkt, zu dem der Benutzer zuletzt auf die Website zugegriffen hat. + """ + access: String + + """ + Check entity access for the given operation, defaults to view. + """ + accessCheck(operation: String): Boolean! + + """ + {field: access} Der Zeitpunkt, zu dem der Benutzer zuletzt auf die Website zugegriffen hat. + """ + accessRawField: FieldItemListTimestamp + + """ + {value} {field: changed} Der Zeitpunkt, zu dem der Benutzer zuletzt bearbeitet wurde. + """ + changed: String + + """ + {field: changed} Der Zeitpunkt, zu dem der Benutzer zuletzt bearbeitet wurde. + """ + changedRawField: FieldItemListChanged + + """ + {value} {field: created} Der Zeitpunkt, zu dem das Benutzerkonto erstellt wurde. + """ + created: String + + """ + {field: created} Der Zeitpunkt, zu dem das Benutzerkonto erstellt wurde. + """ + createdRawField: FieldItemListCreated + + """ + The bundle ID of the entity. + """ + entityBundle: String! + + """ + The entity type ID. + """ + entityTypeId: String! + hasPermission(permission: String!): Boolean! + + """ + Check if the user has the given role. + """ + hasRole(role: String!): Boolean! + id: String + + """ + Determines whether the entity is new. + """ + isNew: Boolean! + + """ + The label of this entity. + """ + label: String + + """ + The langcode of this entity. + """ + langcode: String + + """ + {value} {field: mail} Die E-Mail-Adresse dieses Benutzers. + """ + mail: String + + """ + {field: mail} Die E-Mail-Adresse dieses Benutzers. + """ + mailRawField: FieldItemListEmail + + """ + {value} {field: name} Der Name dieses Benutzers. + """ + name: String + + """ + {field: name} Der Name dieses Benutzers. + """ + nameRawField: FieldItemListString + + """ + Contains a list of all roles of this user. + """ + roleIds: [String] + + """ + {value} {field: status} Ob der Benutzer aktiv oder gesperrt ist. + """ + status: Boolean + + """ + {field: status} Ob der Benutzer aktiv oder gesperrt ist. + """ + statusRawField: FieldItemListBoolean + + """ + {value} {field: uid} Die Benutzer-ID. + """ + uid: Int + + """ + {field: uid} Die Benutzer-ID. + """ + uidRawField: FieldItemListInteger + + """ + Get the URL, defaults to canonical. + """ + url(options: UrlOptions, rel: String): Url + + """ + The unique UUID. + """ + uuid: String! +} + +""" +The response for the userLogin mutation. +""" +type UserLoginResponse { + """ + The CSRF token to be used for logging out. + """ + csrfToken: String + + """ + Error message. + """ + error: String + + """ + The token to use for logging out. + """ + logoutToken: String + + """ + The user name if login was successfull. + """ + name: String + + """ + Login was successful. + """ + success: Boolean + + """ + The user ID if login was successfull. + """ + uid: String +} + +""" +The response for the userLogout mutation. +""" +type UserLogoutResponse { + """ + Error message if logout was not successfull. + """ + error: String + + """ + Logout was successful. + """ + success: Boolean +} + +""" +The response for the userPasswordChange mutation. +""" +type UserPasswordChangeResponse { + """ + Error message if password change was not successfull. + """ + error: String + + """ + Password change was successful. + """ + success: Boolean +} + +""" +The response for the userPasswordResetLogin mutation. +""" +type UserPasswordResetLoginResponse { + """ + Error message if password reset was not successfull. + """ + error: String + + """ + Password reset was successful. + """ + success: Boolean + + """ + The password reset token for the edit form. + """ + token: String + + """ + The logged in user entity. + """ + user: User +} + +""" +The response for the userPasswordReset mutation. +""" +type UserPasswordResetResponse { + """ + Error message if password reset was not successfull. + """ + error: String + + """ + Password reset was successful. + """ + success: Boolean +} diff --git a/src/adapter.ts b/src/adapter.ts new file mode 100644 index 0000000..410958a --- /dev/null +++ b/src/adapter.ts @@ -0,0 +1,12 @@ +import type { VuepalAdapterFactory } from './runtime/types' + +/** + * Define the Vuepal adapter. + * + * This method should return an object that implements the methods required for the enabled features. + */ +export function defineVuepalAdapter( + cb: VuepalAdapterFactory, +): VuepalAdapterFactory { + return cb +} diff --git a/src/adminToolbar.ts b/src/adminToolbar.ts deleted file mode 100644 index c5e494e..0000000 --- a/src/adminToolbar.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { addComponent, addTemplate } from '@nuxt/kit' -import type { VuepalModuleContext } from './types' - -export type VuepalAdminToolbarOptions = { - /** - * Whether to include the admin toolbar component. - */ - enabled: boolean - - /** - * Provide additional admin toolbar icons or override existing ones. - */ - adminToolbarIcons?: Record -} - -export default function ( - { nuxt, resolve }: VuepalModuleContext, - options: VuepalAdminToolbarOptions, -) { - const configTemplate = addTemplate({ - filename: 'vuepal/admin-config.ts', - write: true, - getContents: () => { - const icons: Record = { - fallback: '/themes/contrib/gin/dist/media/sprite.svg#fallback-view', - 'system.admin_content': - '/themes/contrib/gin/dist/media/sprite.svg#content-view', - 'system.admin_structure': - '/themes/contrib/gin/dist/media/sprite.svg#structure-view', - 'system.themes_page': - '/themes/contrib/gin/dist/media/sprite.svg#appearance-view', - 'system.modules_list': - '/themes/contrib/gin/dist/media/sprite.svg#extend-view', - 'system.admin_config': - '/themes/contrib/gin/dist/media/sprite.svg#config-view', - 'entity.group.collection': - '/themes/contrib/gin/dist/media/sprite.svg#group-view', - 'entity.user.collection': - '/themes/contrib/gin/dist/media/sprite.svg#people-view', - 'system.admin_reports': - '/themes/contrib/gin/dist/media/sprite.svg#reports-view', - 'help.main': '/themes/contrib/gin/dist/media/sprite.svg#help-view', - 'commerce.admin_commerce': - '/themes/contrib/gin/dist/media/sprite.svg#commerce-view', - '': '/themes/contrib/gin/dist/media/sprite.svg#gin-view', - 'tmgmt.admin_tmgmt': - '/themes/contrib/gin/dist/media/sprite.svg#tmgmt-view', - ...(options.adminToolbarIcons || {}), - } - return ` -export const adminToolbarIcons: Record = ${JSON.stringify( - icons, - null, - 2, - )} -` - }, - }) - nuxt.options.alias['#vuepal/admin-config'] = configTemplate.dst - - addComponent({ - filePath: resolve('./runtime/components/AdminToolbar/index'), - name: 'VuepalAdminToolbar', - global: true, - }) -} diff --git a/src/build/classes/ModuleHelper.ts b/src/build/classes/ModuleHelper.ts new file mode 100644 index 0000000..5b68c4d --- /dev/null +++ b/src/build/classes/ModuleHelper.ts @@ -0,0 +1,363 @@ +import { + addComponent, + addImports, + addPlugin, + addServerImports, + addTemplate, + addTypeTemplate, + createResolver, + type Resolver, +} from '@nuxt/kit' +import { isObjectType, isInterfaceType } from 'graphql' +import { relative } from 'pathe' +import type { Nuxt, NuxtPlugin, ResolvedNuxtTemplate } from 'nuxt/schema' +import { fileExists, logger } from '../helpers' +import { useGraphqlModuleContext } from 'nuxt-graphql-middleware/utils' +import type { ModuleOptions } from '../types/options' +import { FEATURE_KEYS, type ValidFeature } from '../features' + +type GraphqlModuleContext = NonNullable< + ReturnType +> + +type ModuleHelperResolvers = { + /** + * Resolver for paths relative to the module root. + */ + module: Resolver + + /** + * Resolve relative to the app's server directory. + */ + server: Resolver + + /** + * Resolve relative to the Nuxt src folder. + */ + src: Resolver + + /** + * Resolve relative to the Nuxt app directory. + */ + app: Resolver + + /** + * Resolve relative to the Nuxt root. + * + * Should be where nuxt.config.ts is located. + */ + root: Resolver +} + +type ModuleHelperPaths = { + runtimeTypes: string + root: string + nuxtConfig: string + serverDir: string + moduleBuildDir: string + /** + * The absolute path to the vuepal.adapter.ts file. + */ + vuepalAdapterFile: string +} + +export class ModuleHelper { + public readonly resolvers: ModuleHelperResolvers + public readonly paths: ModuleHelperPaths + + public readonly isDev: boolean + public readonly isModuleBuild: boolean + public readonly isDebug: boolean + + private nitroExternals: string[] = [] + private tsPaths: Record = {} + + public readonly graphql: GraphqlModuleContext + + private enabledFeatures = new Set() + + constructor( + public nuxt: Nuxt, + moduleOptions: ModuleOptions, + moduleUrl: string, + options: { debug?: boolean; isModuleBuild: boolean }, + ) { + this.isModuleBuild = options.isModuleBuild + this.isDebug = !!options.debug + + this.graphql = useGraphqlModuleContext() + + FEATURE_KEYS.forEach((key) => { + if (moduleOptions[key]?.enabled || this.isModuleBuild) { + this.enabledFeatures.add(key) + } + }) + + // Resolver for the root directory. + const srcResolver = createResolver(nuxt.options.srcDir) + const rootResolver = createResolver(nuxt.options.rootDir) + + this.isDev = nuxt.options.dev + this.resolvers = { + module: createResolver(moduleUrl), + server: createResolver(nuxt.options.serverDir), + src: srcResolver, + app: createResolver(nuxt.options.dir.app), + root: rootResolver, + } + + this.paths = { + runtimeTypes: '', + root: nuxt.options.rootDir, + nuxtConfig: this.resolvers.root.resolve('nuxt.config.ts'), + serverDir: nuxt.options.serverDir, + moduleBuildDir: nuxt.options.buildDir + '/vuepal-build', + vuepalAdapterFile: this.findVuepalAdapter(), + } + + // This path needs to be built afterwards since the method we call + // depends on a value of this.paths. + this.paths.runtimeTypes = this.toModuleBuildRelative( + this.resolvers.module.resolve('./runtime/types.ts'), + ) + } + + public resolveUserPath(path: string): string { + return this.resolvers.root.resolve(path) + } + + private findVuepalAdapter(): string { + const filePath = this.resolvers.app.resolve('vuepal.adapter') + + if (fileExists(filePath)) { + return filePath + } + + throw new Error(`Missing vuepal.adapter.ts in ${filePath}.`) + } + + /** + * Transform the path relative to the module's build directory. + * + * @param path - The absolute path. + * + * @returns The path relative to the module's build directory. + */ + public toModuleBuildRelative(path: string): string { + return relative(this.paths.moduleBuildDir, path) + } + + /** + * Transform the path relative to the Nuxt build directory. + * + * @param path - The absolute path. + * + * @returns The path relative to the module's build directory. + */ + public toBuildRelative(path: string): string { + return relative(this.nuxt.options.buildDir, path) + } + + /** + * Transform the path relative to the Nuxt build directory. + * + * @param path - The absolute path. + * + * @returns The path relative to the module's build directory. + */ + public toSourceRelative(path: string): string { + return relative(process.cwd(), path) + } + + public addAlias(name: string, path: string) { + this.nuxt.options.alias[name] = path + + // In our case, the name of the alias corresponds to a folder in the build + // dir with the same name (minus the #). + const pathFromName = `./${name.substring(1)}` + + this.tsPaths[name] = pathFromName + this.tsPaths[name + '/*'] = pathFromName + '/*' + + // Add the alias as an external so that the nitro server build doesn't fail. + this.inlineNitroExternals(name) + } + + public inlineNitroExternals(arg: ResolvedNuxtTemplate | string) { + const path = typeof arg === 'string' ? arg : arg.dst + this.nitroExternals.push(path) + this.transpile(path) + } + + public transpile(path: string) { + this.nuxt.options.build.transpile.push(path) + } + + public applyBuildConfig() { + // Workaround for https://github.com/nuxt/nuxt/issues/28995 + this.nuxt.options.nitro.externals ||= {} + this.nuxt.options.nitro.externals.inline ||= [] + this.nuxt.options.nitro.externals.inline.push(...this.nitroExternals) + + // Currently needed due to a bug in Nuxt that does not add aliases for + // nitro. As this has happened before in the past, let's leave it so that + // we are guaranteed to have these aliases also for server types. + this.nuxt.options.nitro.typescript ||= {} + this.nuxt.options.nitro.typescript.tsConfig ||= {} + this.nuxt.options.nitro.typescript.tsConfig.compilerOptions ||= {} + this.nuxt.options.nitro.typescript.tsConfig.compilerOptions.paths ||= {} + + this.nuxt.options.typescript.tsConfig ||= {} + this.nuxt.options.typescript.tsConfig.compilerOptions ||= {} + this.nuxt.options.typescript.tsConfig.compilerOptions.paths ||= {} + + for (const [name, path] of Object.entries(this.tsPaths)) { + this.nuxt.options.nitro.typescript.tsConfig.compilerOptions.paths[name] = + [path] + this.nuxt.options.typescript.tsConfig.compilerOptions.paths[name] = [path] + } + + this.logDebug('Applied build config') + } + + public addTemplate( + path: string, + build?: (() => string) | null, + buildTypes?: (() => string | (() => string)) | null, + ) { + if (build) { + const content = build().trim() + const filename = path.startsWith('/') + ? path + : 'vuepal-build/' + path + '.js' + addTemplate({ + filename, + write: true, + getContents: () => content, + }) + } + + if (buildTypes) { + if (path.startsWith('/')) { + throw new Error('buildTypes is not available for absolute paths.') + } + const result = buildTypes() + const getContents = typeof result === 'string' ? () => result : result + const filename = 'vuepal-build/' + path + '.d.ts' + addTypeTemplate( + { + filename: filename as `${string}.d.ts`, + write: true, + getContents, + }, + { + nuxt: true, + nitro: true, + }, + ) + } + } + + public addPlugin(name: string, mode: NuxtPlugin['mode'] = 'all') { + addPlugin( + { src: this.resolvers.module.resolve('./runtime/plugins/' + name), mode }, + { + append: false, + }, + ) + } + + public addComposable(name: string) { + addImports({ + from: this.resolvers.module.resolve( + './runtime/composables/' + name + '/index', + ), + name, + }) + } + + public addComponent(name: string) { + addComponent({ + filePath: this.resolvers.module.resolve( + `./runtime/components/${name}/index`, + ), + name, + global: true, + }) + } + + public addServerUtil(name: string) { + addServerImports([ + { + from: this.resolvers.module.resolve('./runtime/server/utils/' + name), + name, + }, + ]) + } + + public logDebug(...args: unknown[]) { + if (this.isDebug) { + if (args.length !== 0) { + // Pass the first argument as-is, then spread the rest + logger.info(args[0], ...args.slice(1)) + } + } + } + + public assertGraphqlEntityType(entityType: string): ModuleHelper { + return this.assertGraphqlObjectField({ entityType }, entityType) + } + + public assertGraphqlEntityBaseField(fieldName: string): ModuleHelper { + return this.assertGraphqlObjectField( + `Please enable the "${fieldName}" entity base field in your GraphQL schema in Drupal.`, + 'Entity', + fieldName, + ) + } + + public assertGraphqlObjectField( + context: { extension: string } | { entityType: string } | string, + typeName: string, + fieldName?: string, + ): ModuleHelper { + const message = + typeof context === 'string' + ? context + : 'extension' in context + ? `Please enable the "${context.extension}" GraphQL schema extension in Drupal.` + : `Please enable the "${context.entityType}" entity type in your GraphQL schema in Drupal.` + + const type = this.graphql.schemaGetType(typeName) + if (!type) { + throw new Error( + `Missing type "${typeName}" in GraphQL schema. ${message}`, + ) + } + + if (fieldName) { + if (!isObjectType(type) && !isInterfaceType(type)) { + throw new Error('Can only check fields on object or interface types.') + } + const fields = type.getFields() + if (!fields[fieldName]) { + throw new Error( + `Missing field "${fieldName}" on type "${typeName}". ${message}`, + ) + } + } + + return this + } + + public addGraphqlFile(fileName: string) { + const resolved = this.resolvers.module.resolve( + './runtime/graphql/' + fileName, + ) + this.graphql.addImportFile(resolved) + } + + public hasFeatureEnabled(key: ValidFeature): boolean { + return this.enabledFeatures.has(key) + } +} diff --git a/src/build/features/adminToolbar/index.ts b/src/build/features/adminToolbar/index.ts new file mode 100644 index 0000000..fd900da --- /dev/null +++ b/src/build/features/adminToolbar/index.ts @@ -0,0 +1,81 @@ +import { defineVuepalFeature } from '../defineFeature' + +export default defineVuepalFeature<{ + /** + * Provide additional admin toolbar icons or override existing ones. + */ + adminToolbarIcons?: Record +}>({ + name: 'adminToolbar', + description: + 'Provides a component and GraphQL query to display a Drupal Admin Toolbar.', + setup(helper, options) { + helper + .assertGraphqlObjectField( + { + extension: 'environment_indicator', + }, + 'Query', + 'activeEnvironment', + ) + .assertGraphqlObjectField( + { + extension: 'entity_query', + }, + 'Query', + 'entityById', + ) + .assertGraphqlEntityType('Menu') + .assertGraphqlObjectField( + { + extension: 'menu', + }, + 'Menu', + 'links', + ) + + helper.addTemplate( + 'admin-config', + () => { + const icons: Record = { + fallback: '/themes/contrib/gin/dist/media/sprite.svg#fallback-view', + 'system.admin_content': + '/themes/contrib/gin/dist/media/sprite.svg#content-view', + 'system.admin_structure': + '/themes/contrib/gin/dist/media/sprite.svg#structure-view', + 'system.themes_page': + '/themes/contrib/gin/dist/media/sprite.svg#appearance-view', + 'system.modules_list': + '/themes/contrib/gin/dist/media/sprite.svg#extend-view', + 'system.admin_config': + '/themes/contrib/gin/dist/media/sprite.svg#config-view', + 'entity.group.collection': + '/themes/contrib/gin/dist/media/sprite.svg#group-view', + 'entity.user.collection': + '/themes/contrib/gin/dist/media/sprite.svg#people-view', + 'system.admin_reports': + '/themes/contrib/gin/dist/media/sprite.svg#reports-view', + 'help.main': '/themes/contrib/gin/dist/media/sprite.svg#help-view', + 'commerce.admin_commerce': + '/themes/contrib/gin/dist/media/sprite.svg#commerce-view', + '': '/themes/contrib/gin/dist/media/sprite.svg#gin-view', + 'tmgmt.admin_tmgmt': + '/themes/contrib/gin/dist/media/sprite.svg#tmgmt-view', + ...(options?.adminToolbarIcons || {}), + } + + return `export const adminToolbarIcons = ${JSON.stringify(icons, null, 2)}` + }, + () => { + return ` +declare module '#vuepal-build/admin-config' { + export const adminToolbarIcons: Record +} +` + }, + ) + + helper.addComponent('VuepalAdminToolbar') + helper.addGraphqlFile('query.adminToolbar.graphql') + }, +}) diff --git a/src/build/features/breadcrumb/index.ts b/src/build/features/breadcrumb/index.ts new file mode 100644 index 0000000..97bfe1d --- /dev/null +++ b/src/build/features/breadcrumb/index.ts @@ -0,0 +1,18 @@ +import { defineVuepalFeature } from '../defineFeature' + +export default defineVuepalFeature({ + name: 'breadcrumb', + description: 'Adds support for breadcrumbs.', + setup(helper) { + helper.assertGraphqlObjectField( + { extension: 'breadcrumb' }, + 'EntityUrl', + 'breadcrumb', + ) + + helper.addComposable('useBreadcrumb') + helper.addComponent('VuepalBreadcrumb') + helper.addPlugin('breadcrumb') + helper.addGraphqlFile('fragment.breadcrumb.graphql') + }, +}) diff --git a/src/build/features/defineFeature.ts b/src/build/features/defineFeature.ts new file mode 100644 index 0000000..09f9e35 --- /dev/null +++ b/src/build/features/defineFeature.ts @@ -0,0 +1,13 @@ +import type { ModuleHelper } from '../classes/ModuleHelper' + +export type VuepalFeature = { + name: string + description: string + setup: (helper: ModuleHelper, options?: O) => Promise | void +} + +export function defineVuepalFeature( + feature: VuepalFeature, +): VuepalFeature { + return feature +} diff --git a/src/build/features/devMode/index.ts b/src/build/features/devMode/index.ts new file mode 100644 index 0000000..928fd4e --- /dev/null +++ b/src/build/features/devMode/index.ts @@ -0,0 +1,34 @@ +import { logger } from '../../helpers' +import { defineVuepalFeature } from '../defineFeature' + +export default defineVuepalFeature<{ + /** + * The local development URL. + * + * @example https://vuepal.lndo.site + */ + url: string + + /** + * Force redirecting to HTTPS during local development. + */ + forceHttps?: boolean +}>({ + name: 'devMode', + description: 'Provides features for local development.', + setup(helper, options) { + if (!helper.isDev) { + return + } + + if (options?.forceHttps) { + helper.addPlugin('forceHttps') + } + + helper.nuxt.hooks.hookOnce('modules:done', () => { + if (options?.url) { + logger.box(`Visit ${options.url} and start developing!`) + } + }) + }, +}) diff --git a/src/build/features/drupalRoute/RouteQueryBuilder.ts b/src/build/features/drupalRoute/RouteQueryBuilder.ts new file mode 100644 index 0000000..2d52fbd --- /dev/null +++ b/src/build/features/drupalRoute/RouteQueryBuilder.ts @@ -0,0 +1,53 @@ +import type { FragmentDefinitionNode, GraphQLInterfaceType } from 'graphql' +import type { ModuleContext } from 'nuxt-graphql-middleware/utils' +import { pascalCase } from 'change-case' + +export class RouteQueryBuilder { + private entityFragments = new Set() + private typesImplementingEntity: Set + + constructor(graphql: ModuleContext) { + const entityInterface = graphql.schemaGetType( + 'Entity', + ) as GraphQLInterfaceType + const result = graphql.getSchema().getImplementations(entityInterface) + + this.typesImplementingEntity = new Set( + [...result.interfaces, ...result.objects].map((v) => v.name), + ) + } + + public handleSchema() {} + + public handleFragments(fragments: FragmentDefinitionNode[]) { + this.entityFragments.clear() + for (const fragment of fragments) { + const typeName = fragment.typeCondition.name.value + if (this.typesImplementingEntity.has(typeName)) { + this.entityFragments.add(fragment.name.value) + } + } + } + + public buildGraphqlTypesTemplate() { + const fragments = [...this.entityFragments.values()].map((fragmentName) => { + const typeName = pascalCase(fragmentName + 'Fragment') + const line = `"${fragmentName}": ${typeName}` + return { typeName, line } + }) + + const imports = fragments.map((v) => v.typeName).join(',\n ') + const types = fragments.map((v) => v.line).join(',\n ') + return ` +import type { + ${imports} +} from '#graphql-operations' + +declare module '#vuepal-build/graphql' { + export type EntityFragment = { + ${types} + } +} +`.trim() + } +} diff --git a/src/build/features/drupalRoute/index.ts b/src/build/features/drupalRoute/index.ts new file mode 100644 index 0000000..748f908 --- /dev/null +++ b/src/build/features/drupalRoute/index.ts @@ -0,0 +1,216 @@ +import { defineVuepalFeature } from '../defineFeature' +import { pascalCase, camelCase } from 'change-case' +import { RouteQueryBuilder } from './RouteQueryBuilder' +import type { EntityFragment } from '#vuepal-build/graphql' + +type DrupalRouteDefinition = { + /** + * Which fragments to include for the route query. + * + * The fragments must exist in the project and they must target a type + * that implements "Entity". + */ + fragments: Array +} + +export default defineVuepalFeature<{ + /** + * Define which route GraphQL queries to generate. + * + * Each property generates a query. The value defines which fragments to use. + * + * You can then use the route query using the useDrupalRouteQuery() composable. + */ + routeQueries?: Record +}>({ + name: 'drupalRoute', + description: 'Adds routing related GraphQL queries and composables.', + setup(helper, options) { + helper + .assertGraphqlObjectField({ extension: 'routing' }, 'Query', 'route') + .assertGraphqlObjectField( + { extension: 'metatags' }, + 'InternalUrl', + 'metatags', + ) + .assertGraphqlEntityBaseField('uuid') + .assertGraphqlEntityBaseField('entityBundle') + .assertGraphqlEntityBaseField('entityTypeId') + .assertGraphqlEntityBaseField('id') + + helper.addComposable('useDrupalRoute') + helper.addComposable('buildDrupalMetatags') + + helper.addGraphqlFile('fragment.metatag.graphql') + + const routeSpreadParts: string[] = ['metatags { ...metatag }'] + + if (helper.graphql.schemaHasType('SchemaMetatag')) { + helper.addGraphqlFile('fragment.schemaMetatag.graphql') + routeSpreadParts.push('schemaOrgMetatags { ...schemaMetatag }') + } + + if (helper.hasFeatureEnabled('breadcrumb')) { + routeSpreadParts.push('breadcrumb { ...breadcrumb }') + } + + if (helper.hasFeatureEnabled('languageSwitchLinks')) { + routeSpreadParts.push('languageSwitchLinks { ...languageSwitchLink }') + } + + const routeSpreads = routeSpreadParts.join('\n ') + + helper.graphql.addDocument( + 'fragment.drupalRoute.graphql', + ` +fragment useDrupalRoute on Query { + route(path: $path) { + __typename + path + + ... on InternalUrl { + routeName + ${routeSpreads} + } + + ... on EntityUrl { + routeName + drupalRouteEntity: entity { + uuid + entityBundle + entityTypeId + id + } + ${routeSpreads} + } + + ... on RedirectUrl { + redirect { + statusCode + } + } + } +} +`, + ) + + const routeQueries = Object.entries(options?.routeQueries || {}) as [ + string, + DrupalRouteDefinition, + ][] + + if (helper.isModuleBuild) { + routeQueries.push([ + 'nodeCanonical', + { + fragments: ['nodePage'], + }, + ]) + } + + if (!routeQueries.length) { + return + } + + helper.addComposable('useDrupalRouteQuery') + + helper.addTemplate( + 'route-queries', + () => { + const mapping = routeQueries.reduce>( + (acc, [name]) => { + acc[name] = camelCase('route_' + name) + return acc + }, + {}, + ) + return ` +export const mapping = ${JSON.stringify(mapping, null, 2)} +` + }, + () => { + const imports = [ + ...new Set(routeQueries.flatMap((v) => v[1].fragments)).values(), + ] + .map((fragmentName) => { + return pascalCase(fragmentName + 'Fragment') + }) + .join(',\n ') + const importStatement = `import type {\n ${imports}\n} from '#graphql-operations'` + const queries = routeQueries + .map(([name, definition]) => { + const fragments = definition.fragments + .map((v) => pascalCase(v + 'Fragment')) + .join(' | ') + return `"${name}": ${fragments}` + }) + .join(',\n ') + + const possibleQueryNames = routeQueries + .map(([name]) => { + return `'${camelCase('route_' + name)}'` + }) + .join(' | ') + + return ` +${importStatement} +import type { Query } from '#nuxt-graphql-middleware/operation-types' + +declare module '#vuepal-build/route-queries' { + export type DrupalRouteQueries = { + ${queries} + } + type PossibleQueryNames = ${possibleQueryNames} + export const mapping: Record>; +} +` + }, + ) + + const routeQueryBuilder = new RouteQueryBuilder(helper.graphql) + + const state = { + template: '', + } + + helper.addTemplate( + 'graphql', + () => { + return 'export {}' + }, + () => { + return () => state.template + }, + ) + + helper.nuxt.hook('nuxt-graphql-middleware:build', (ctx) => { + const fragments = ctx.output.getFragments().map((v) => v.node) + routeQueryBuilder.handleFragments(fragments) + state.template = routeQueryBuilder.buildGraphqlTypesTemplate() + }) + + // Generate GraphQL queries. + routeQueries.forEach(([name, definition]) => { + const queryName = camelCase('route_' + name) + + const spreads = definition.fragments + .map((v) => '...' + v) + .join('\n ') + helper.graphql.addDocument( + 'vuepal-route-query:' + name, + ` +query ${queryName}($path: String!) { + ...useDrupalRoute + route(path: $path) { + ... on EntityUrl { + entity { + __typename + ${spreads} + } + } + } +}`, + ) + }) + }, +}) diff --git a/src/build/features/frontendRouting/index.ts b/src/build/features/frontendRouting/index.ts new file mode 100644 index 0000000..d6745e5 --- /dev/null +++ b/src/build/features/frontendRouting/index.ts @@ -0,0 +1,169 @@ +import { addTemplate, extendPages } from '@nuxt/kit' +import { relative } from 'pathe' +import type { NuxtPage } from '@nuxt/schema' +import { defineVuepalFeature } from '../defineFeature' +import { logger } from '../../helpers' + +function nonNullable(value: T): value is NonNullable { + return value !== null && value !== undefined +} + +type ExtractedPage = { + filePath: string + isDrupalFrontendRoute: boolean + yml?: string +} + +class PageCollector { + private templateContents = '' + + constructor(private defaultLanguage: string) {} + + private handlePage(page: NuxtPage): ExtractedPage | undefined { + const name = page.name + + if (!page.file) { + return + } + + const extracted: ExtractedPage = { + filePath: page.file, + isDrupalFrontendRoute: false, + } + + if (page.meta?.drupalFrontendRoute) { + extracted.isDrupalFrontendRoute = true + try { + const mapping = Object.entries({ + ...(page.meta.languageMapping || {}), + [this.defaultLanguage]: page.path, + }) + .map(([langcode, path]) => { + return ` ${langcode}: '${path}'` + }) + .sort() + .join('\n') + extracted.yml = ` ${name}:\n aliases:\n${mapping}` + } catch (e) { + logger.warn( + `Failed to extract language mapping in page "${page.file}"`, + e, + ) + } + } + + return extracted + } + + public handlePages(pages: NuxtPage[]) { + const mapped = pages + .map((page) => this.handlePage(page)) + .map((v) => v?.yml) + .filter(nonNullable) + .sort() + + this.templateContents = `keys:\n${mapped.join('\n')}` + } + + getTemplateContents(): string { + return this.templateContents + } +} + +export default defineVuepalFeature<{ + /** + * The default language. + */ + defaultLanguage: string + + /** + * The output path of the generated YML file. + * + * @example './../drupal/config/default/frontend_routing.settings.yml' + */ + outputPath: string +}>({ + name: 'frontendRouting', + description: '', + setup(helper, options) { + helper.addTemplate('page-meta', null, () => { + const relativePath = relative( + helper.paths.moduleBuildDir, + helper.nuxt.options.workspaceDir + + '/node_modules/nuxt/dist/pages/runtime/composables', + ) + + return ` +declare module "${relativePath}" { + interface PageMeta { + /** + * If set to true, this route is considered a "Drupal Frontend Route". + * It will generate an entry in the frontend_routing.settings.yml file. + * + * This will make sure that the node connected to this Nuxt page will always + * have the paths defined in this component. It will not be possible to + * override the path in Drupal. + */ + drupalFrontendRoute?: boolean + } +} + +export {} +` + }) + + if (helper.isModuleBuild) { + return + } + + const outputPath = options?.outputPath + if (!outputPath) { + throw new Error(`Missing required option "frontendRouting.outputPath".`) + } + + if (!options.defaultLanguage) { + throw new Error( + `Missing required option "frontendRouting.defaultLanguage".`, + ) + } + + const languageNegotiationModuleIndex = + helper.nuxt.options.modules.findIndex( + (v) => v === 'nuxt-language-negotiation', + ) + + // Module is installed. + if (languageNegotiationModuleIndex !== -1) { + const vuepalIndex = helper.nuxt.options.modules.findIndex( + (v) => v === 'vuepal', + ) + + // Make sure that nuxt-language-negotiation runs after vuepal, or else + // the routes have already been translated. + if (languageNegotiationModuleIndex < vuepalIndex) { + throw new Error( + 'The "nuxt-language-negotiation" module must be put after "vuepal" in nuxt.config.ts', + ) + } + } + + const collector = new PageCollector(options.defaultLanguage) + + addTemplate({ + filename: helper.resolvers.root.resolve(options.outputPath), + write: true, + getContents: () => collector.getTemplateContents(), + }) + + helper.nuxt.options.experimental.scanPageMeta = true + helper.nuxt.options.experimental.extraPageMetaExtractionKeys ||= [] + helper.nuxt.options.experimental.extraPageMetaExtractionKeys.push( + 'languageMapping', + 'drupalFrontendRoute', + ) + + extendPages((pages) => { + collector.handlePages(pages) + }) + }, +}) diff --git a/src/build/features/index.ts b/src/build/features/index.ts new file mode 100644 index 0000000..3aa729f --- /dev/null +++ b/src/build/features/index.ts @@ -0,0 +1,54 @@ +import adminToolbar from './adminToolbar' +import devMode from './devMode' +import drupalRoute from './drupalRoute' +import frontendRouting from './frontendRouting' +import localTasks from './localTasks' +import trustedOrigins from './trustedOrigins' +import breadcrumb from './breadcrumb' +import languageSwitchLinks from './languageSwitchLinks' + +export const FEATURES = { + /** + * Provides a component and GraphQL query to display a Drupal Admin Toolbar. + */ + adminToolbar, + + /** + *Provides features for local development. + */ + devMode, + + /** + *Adds routing related GraphQL queries and composables. + */ + drupalRoute, + + /** + * Integration with the drupal/frontend_routing Drupal module. + */ + frontendRouting, + + /** + * Provides a component and GraphQL query to display local tasks. + */ + localTasks, + + /** + * Provides a plugin and composable to verify the origin in the browser. + */ + trustedOrigins, + + /** + * Provides a component and fragment to display Drupal breadcrumbs. + */ + breadcrumb, + + /** + * Provides a component and fragment to display language switch links. + */ + languageSwitchLinks, +} + +export type ValidFeature = keyof typeof FEATURES + +export const FEATURE_KEYS = Object.keys(FEATURES) as ValidFeature[] diff --git a/src/build/features/languageSwitchLinks/index.ts b/src/build/features/languageSwitchLinks/index.ts new file mode 100644 index 0000000..006474d --- /dev/null +++ b/src/build/features/languageSwitchLinks/index.ts @@ -0,0 +1,17 @@ +import { defineVuepalFeature } from '../defineFeature' + +export default defineVuepalFeature({ + name: 'languageSwitchLinks', + description: 'Adds support for language links.', + setup(helper) { + helper.assertGraphqlObjectField( + { extension: 'language_switch_links' }, + 'EntityUrl', + 'languageSwitchLinks', + ) + + helper.addComposable('useLanguage') + helper.addPlugin('languageSwitchLinks') + helper.addGraphqlFile('fragment.languageSwitchLink.graphql') + }, +}) diff --git a/src/build/features/localTasks/index.ts b/src/build/features/localTasks/index.ts new file mode 100644 index 0000000..a278930 --- /dev/null +++ b/src/build/features/localTasks/index.ts @@ -0,0 +1,18 @@ +import { defineVuepalFeature } from '../defineFeature' + +export default defineVuepalFeature({ + name: 'localTasks', + description: 'Provides a component and GraphQL query to display local tasks.', + setup(helper) { + helper + .assertGraphqlObjectField({ extension: 'routing' }, 'InternalUrl') + .assertGraphqlObjectField( + { extension: 'local_tasks' }, + 'InternalUrl', + 'localTasks', + ) + + helper.addComponent('VuepalLocalTasks') + helper.addGraphqlFile('query.localTasks.graphql') + }, +}) diff --git a/src/build/features/trustedOrigins/index.ts b/src/build/features/trustedOrigins/index.ts new file mode 100644 index 0000000..9e046f8 --- /dev/null +++ b/src/build/features/trustedOrigins/index.ts @@ -0,0 +1,208 @@ +import { defineVuepalFeature } from '../defineFeature' + +// Random, unrelated error messages. +const ERRORS = [ + "Uncaught TypeError: Cannot read property 'verify' of undefined", + 'Error: SecurityContext validation failed: invalid token signature', + 'ReferenceError: checksum is not defined at validateRequest:217:23', + 'Uncaught SyntaxError: Unexpected token in JSON at position 43', + 'TypeError: window.crypto.subtle.digest is not a function', + 'SecurityError: The operation is insecure.', + "InvalidAccessError: Cannot use 'private' API in unauthorized context", + 'Uncaught (in promise) NetworkError: Failed integrity check at line 1156', + "Error: CORS header 'Access-Control-Allow-Origin' missing in preflight response", + "DOMException: Failed to execute 'getRandomValues' on 'Crypto': length exceeded", + 'TypeError: Failed to fetch: authorization required for secure endpoint', + 'Error: WebAssembly.instantiate(): Timeout while compiling module', + 'RangeError: Maximum call stack size exceeded in auth module', + 'Uncaught Error: Execution context was destroyed during validation', + "TypeError: Cannot create property 'sessionId' on string 'expired'", + "InvalidStateError: The context object's state must be 'validated'", + "SecurityError: Failed to execute 'authenticate': The operation is not allowed in this context", + 'AbortError: The operation was aborted due to timeout in secure channel', + 'Uncaught ReferenceError: checkIntegrity is not defined at verifyExecution:312:7', + "TypeError: navigator.credentials.get: parameter 1 is not of type 'PublicKeyCredentialRequestOptions'", +] + +function isValidOrigin(origin: string): boolean { + // Just to be sure, because we use this character when decoding. + if (origin.includes('#')) { + return false + } + + try { + const url = new URL(origin) + + if (url.protocol !== 'http:' && url.protocol !== 'https:') { + return false + } + + if (!url.hostname) { + return false + } + + return url.origin === origin + } catch { + return false + } +} + +function getRandomString(length = 6): string { + let str = '' + const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + const charLen = characters.length + + for (let i = 0; i < length; i++) { + // Generating a random index + const idx = Math.floor(Math.random() * charLen) + + str += characters.charAt(idx) + } + + return str +} + +export default defineVuepalFeature<{ + /** + * The allowed origins. + * + * @example + * ['https://starterkit.ddev.site', 'https://www.blokk.li'] + */ + origins: string[] + + /** + * Where to redirect the user to if the origin is not valid. + * + * Must be one of the valid origins. + */ + redirectUrl?: string +}>({ + name: 'trustedOrigins', + description: 'Adds a client plugin to verify the origin in the browser.', + setup(helper, options) { + if (helper.isModuleBuild) { + options ||= { + origins: ['https://localhost:3000'], + } + } + + if (!options?.origins.length) { + throw new Error('Missing required option "vuepal.origins".') + } + + if (options.redirectUrl) { + if (!isValidOrigin(options.redirectUrl)) { + throw new Error(`Invalid redirectUrl: ${options.redirectUrl}`) + } + + const url = new URL(options.redirectUrl) + const isExistingOrigin = options.origins.find((v) => v === url.origin) + if (!isExistingOrigin) { + throw new Error( + `The provided redirectUrl "${options.redirectUrl}" must be one of the configured origins: ${JSON.stringify(options.origins)}`, + ) + } + + options.redirectUrl = url.origin + } + + helper.addPlugin('trustedOrigins', 'client') + + helper.addComposable('useTrustedOrigin') + + options.origins.forEach((origin) => { + if (!isValidOrigin(origin)) { + throw new Error(`The provided origin "${origin}" is not valid.`) + } + }) + + const errorMessage = ERRORS[Math.floor(Math.random() * ERRORS.length)] + + function toCharCodeArray(str: string): number[] { + return str.split('').map((char) => char.charCodeAt(0)) + } + + const strings = [ + 'document', + 'location', + 'origin', + 'includes', + errorMessage, + '#', + options.origins.join('#'), + 'setTimeout', + 'Math', + 'round', + 'random', + String(500), + String(2000), + 'href', + options.redirectUrl || '', + ] + + helper.addTemplate( + 'trusted-origins', + () => { + const a = JSON.stringify(strings.join(',')) + const b = [...btoa(a).match(/.{1,4}/g)!].map( + (v) => v + getRandomString(2) + '.js', + ) + const source = JSON.stringify(b) + return ` +export const source = ${source}; +export const sourceLength = ${b.length}; +export const keyIsValid = ${JSON.stringify(getRandomString(12))}; +export const keyStringsEncoded = ${JSON.stringify(getRandomString(12))}; +export const keyHasCalledOnce = ${JSON.stringify(getRandomString(12))}; +export const validHash = ${JSON.stringify(getRandomString(12))}; +export const defaultHash = ${JSON.stringify(getRandomString(12))}; +export const atobCharCodes = ${JSON.stringify(toCharCodeArray('atob'))}; +export const redirectHook = ${JSON.stringify(getRandomString(12))}; +` + }, + () => { + const mapped = strings + .map((str, index) => { + return ` // ${index}\n ${JSON.stringify(str)},` + }) + .join('\n') + return ` +declare module '#vuepal-build/trusted-origins' { + // The encoded source strings. + export const source: string[] + + // The length of the source array at build time. + export const sourceLength: number + + // The state key for "status". + export const keyIsValid: string + + // The state key for "stringsEncoded". + export const keyStringsEncoded: string + + // The state key for "hasCalledOnce". + export const keyHasCalledOnce: string + + // The status value to indicate a valid origin. + export const validHash: string + + // The status value to indicate no check has been made yet. + export const defaultHash: string + + // Array of character codes of the string "atob". + export const atobCharCodes: number[] + + // The name of the nuxt hook to trigger the redirect. + export const redirectHook: string + + // The type of the decoded array of strings. + export type Strings = [ +${mapped} + ] +} +` + }, + ) + }, +}) diff --git a/src/helpers/index.ts b/src/build/helpers/index.ts similarity index 83% rename from src/helpers/index.ts rename to src/build/helpers/index.ts index a3af292..bead808 100644 --- a/src/helpers/index.ts +++ b/src/build/helpers/index.ts @@ -1,4 +1,5 @@ import fs from 'node:fs' +import { useLogger } from '@nuxt/kit' export const fileExists = ( path?: string, @@ -17,3 +18,5 @@ export const fileExists = ( return extension ? `${path}.${extension}` : null } + +export const logger = useLogger('vuepal') diff --git a/src/types/index.ts b/src/build/types/index.ts similarity index 100% rename from src/types/index.ts rename to src/build/types/index.ts diff --git a/src/build/types/options.ts b/src/build/types/options.ts new file mode 100644 index 0000000..a530246 --- /dev/null +++ b/src/build/types/options.ts @@ -0,0 +1,35 @@ +import type { VuepalFeature } from './../features/defineFeature' +import type { FEATURES } from '../features' + +export const COMPOSABLES = [ + 'useClickTriggerProxy', + 'useQueryString', + 'useAnimationFrame', +] as const + +export const COMPONENTS = [ + 'VuepalRemoteVideo', + 'VuepalLink', + 'VuepalTransitionHeight', +] as const + +type FeatureOptions = + T extends VuepalFeature + ? O & { enabled: boolean } + : { enabled: boolean } + +export type ModuleOptionsFeatures = { + [K in keyof typeof FEATURES]?: FeatureOptions<(typeof FEATURES)[K]> +} + +export type ModuleOptions = ModuleOptionsFeatures & { + /** + * Disable composables. By default all composables are included. + */ + disabledComposables?: Partial> + + /** + * Disable components. By default all components are included. + */ + disabledComponents?: Partial> +} diff --git a/src/devMode.ts b/src/devMode.ts deleted file mode 100644 index 0f8a297..0000000 --- a/src/devMode.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { addPlugin } from '@nuxt/kit' -import type { VuepalModuleContext } from './types' - -export type VuepalDevModeOptions = { - /** - * Whether to enable the dev mode feature. - */ - enabled: boolean - - /** - * The local development URL. - * - * @example https://vuepal.lndo.site - */ - url: string - - /** - * Force redirecting to HTTPS during local development. - */ - forceHttps?: boolean -} - -export default function ( - { nuxt, resolve }: VuepalModuleContext, - options: VuepalDevModeOptions, -) { - // This module only does things in dev mode. - if (!nuxt.options.dev) { - return - } - - if (options.forceHttps) { - // Add the plugin that force redirects to https. - addPlugin(resolve('runtime/plugins/forceHttps')) - } - - - console.log(`\n\n> Visit ${options.url} and start developing!\n\n`) -} diff --git a/src/drupalRoute.ts b/src/drupalRoute.ts deleted file mode 100644 index 0af8cfc..0000000 --- a/src/drupalRoute.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { addImports } from '@nuxt/kit' -import type { VuepalModuleContext } from './types' - -export type VuepalDrupalRouteOptions = { - /** - * Whether to include the useDrupalRoute composable. - */ - enabled: boolean -} - -export default function ( - { resolve }: VuepalModuleContext, - _options: VuepalDrupalRouteOptions, -) { - addImports({ - from: resolve('./runtime/composables/useDrupalRoute'), - name: 'useDrupalRoute', - }) - - addImports({ - from: resolve('./runtime/composables/buildDrupalMetatags'), - name: 'buildDrupalMetatags', - }) -} diff --git a/src/frontendRouting.ts b/src/frontendRouting.ts deleted file mode 100644 index 8f91de7..0000000 --- a/src/frontendRouting.ts +++ /dev/null @@ -1,185 +0,0 @@ -import fs from 'node:fs' -import { addTemplate, addTypeTemplate } from '@nuxt/kit' -import { stringify } from 'yaml' -import { relative, join } from 'pathe' -import type { NuxtPage } from '@nuxt/schema' -import type { VuepalModuleContext } from './types' -import { nonNullable } from './runtime/helpers/type' - -export type VuepalFrontendRoutingOptions = { - /** - * Whether to enable the frontend_routing feature. - */ - enabled: boolean - - /** - * The supported language codes. - */ - langcodes: string[] - - /** - * The output path of the generated YML file. - * - * @example './../drupal/config/default/frontend_routing.settings.yml' - */ - outputPath: string -} - -/** - * Extracts the language mapping. - */ -const extractLanguageMapping = ( - code: string, -): Record | undefined => { - const RGX = /languageMapping:\s*\{([^}]+)\}/ - const matches = code.match(RGX) - - const match = matches?.[1] - - if (!match) { - return - } - - try { - const jsonString = `{${match.trim().replace(/'/g, '"')}}` - - const mapping = eval(`(${jsonString})`) - if (typeof mapping !== 'object') { - return - } - - for (const key in mapping) { - if (typeof key !== 'string') { - return - } - - const value = mapping[key] - - if (typeof value !== 'string') { - return - } - } - - return mapping - } catch (e) { - console.log('Error in Vuepal:') - console.log(e) - } -} - -type ExtractedDrupalFrontendRoute = { - aliases: Record - path: string - name: string -} - -type DrupalFrontendRouteEntry = { - aliases: Record -} - -const extractFrontendRouteData = async ( - page: NuxtPage, - isSingleLanguage: boolean, -): Promise => { - if (!page.file || !page.name) { - return - } - const code = await fs.promises.readFile(page.file).then((v) => v.toString()) - - if (!code.includes('drupalFrontendRoute')) { - return - } - - const aliases = extractLanguageMapping(code) - if (!aliases && !isSingleLanguage) { - return - } - return { - path: page.path, - name: page.name, - aliases: aliases || {}, - } -} - -const generateFrontendRoutesYaml = ( - pages: NuxtPage[], - langcodes: string[], -): Promise => { - const isSingleLanguage = langcodes.length === 1 - return Promise.all( - pages.map((v) => extractFrontendRouteData(v, isSingleLanguage)), - ).then((routes) => { - const sortedRoutes = routes - .filter(nonNullable) - .sort((a, b) => a.name.localeCompare(b.name)) - const keys = sortedRoutes.reduce>( - (acc, v) => { - const allLangcodes: Record = langcodes.reduce< - Record - >((acc, langcode) => { - acc[langcode] = v.aliases[langcode] || v.path - return acc - }, {}) - acc[v.name] = { - aliases: allLangcodes, - } - - return acc - }, - {}, - ) - - return stringify({ keys }, { sortMapEntries: true }) - }) -} - -export default function ( - { srcResolver, nuxt }: VuepalModuleContext, - options: VuepalFrontendRoutingOptions, -) { - const templatePath = srcResolver.resolve(options.outputPath) - addTemplate({ - filename: templatePath, - write: true, - getContents: (ctx) => { - const pages: NuxtPage[] = ctx.app.pages || [] - return generateFrontendRoutesYaml(pages, options.langcodes) - }, - options: { - frontendRoutes: true, - }, - }) - - const modulePath = srcResolver.resolve( - './node_modules/nuxt/dist/pages/runtime/composables', - ) - - const composablesFile = relative( - join(nuxt.options.buildDir, 'types'), - modulePath, - ) - - addTypeTemplate({ - filename: 'types/vuepal-frontend-routing.d.ts', - write: true, - getContents() { - return ` -declare module "${composablesFile}" { - interface PageMeta { - /** - * If set to true, this route is considered a "Drupal Frontend Route". - * It will generate an entry in the frontend_routing.settings.yml file. - * - * This will make sure that the node connected to this route will always - * have the paths defined in this component. It will not be possible to - * override the path in Drupal. - */ - drupalFrontendRoute?: boolean - } -} - -export {} -` - }, - }) -} diff --git a/src/localTasks.ts b/src/localTasks.ts deleted file mode 100644 index 0bfdf7b..0000000 --- a/src/localTasks.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { addComponent } from '@nuxt/kit' -import type { VuepalModuleContext } from './types' - -export type VuepalLocalTasksOptions = { - /** - * Whether to include the component. - */ - enabled: boolean -} - -export default function ( - { resolve }: VuepalModuleContext, - _options: VuepalLocalTasksOptions, -) { - addComponent({ - filePath: resolve('./runtime/components/LocalTasks/index'), - name: 'VuepalLocalTasks', - global: true, - }) -} diff --git a/src/module.ts b/src/module.ts index 7311caf..9bb8e2e 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1,188 +1,119 @@ import { fileURLToPath } from 'node:url' -import { defu } from 'defu' +import { name, version } from '../package.json' +import { defineNuxtModule, hasNuxtModule, installModule } from '@nuxt/kit' +import { ModuleHelper } from './build/classes/ModuleHelper' +import { FEATURE_KEYS, FEATURES } from './build/features' +import { logger } from './build/helpers' import { - createResolver, - defineNuxtModule, - addTemplate, - addImports, - addComponent, -} from '@nuxt/kit' -import { fileExists } from './helpers' -import type { VuepalModuleContext } from './types' -import frontendRouting, { - type VuepalFrontendRoutingOptions, -} from './frontendRouting' -import adminToolbar, { type VuepalAdminToolbarOptions } from './adminToolbar' -import localTasks, { type VuepalLocalTasksOptions } from './localTasks' -import drupalRoute, { type VuepalDrupalRouteOptions } from './drupalRoute' -import devMode, { type VuepalDevModeOptions } from './devMode' - -const COMPOSABLES = [ - 'useClickTriggerProxy', - 'useQueryString', - 'useAnimationFrame', -] as const - -const COMPONENTS = [ - 'VuepalRemoteVideo', - 'VuepalLink', - 'VuepalTransitionHeight', -] as const - -export type ModuleOptions = { - /** - * Provides a feature to have Nuxt pages be connected to a Node in Drupal. - * - * Enabling the feature requires setting the outputPath option. - * The module will then generate the settings YML file for Drupal that - * contains the aggregated routes where the frontend "dictates" the aliases - * for all languages. - */ - frontendRouting?: VuepalFrontendRoutingOptions - - /** - * Provides a component to render the Drupal toolbar. - */ - adminToolbar?: VuepalAdminToolbarOptions - - /** - * Provides a component to render Drupal local tasks. - */ - localTasks?: VuepalLocalTasksOptions - - /** - * Provides the useDrupalRoute() composable to automatically handle - * redirects and metatags. - */ - drupalRoute?: VuepalDrupalRouteOptions - - /** - * Provides features for local development. - */ - devMode?: VuepalDevModeOptions - - /** - * Disable composables. By default all composables are included. - */ - disabledComposables?: Partial> - - /** - * Disable components. By default all components are included. - */ - disabledComponents?: Partial> -} + COMPONENTS, + COMPOSABLES, + type ModuleOptions, +} from './build/types/options' + +export type { ModuleOptions } export default defineNuxtModule({ meta: { - name: 'nuxt-vuepal', + name, configKey: 'vuepal', - version: '1.0.0', + version, compatibility: { - nuxt: '^3.1.0', + nuxt: '^3.15.0', }, }, defaults: {}, - setup(options, nuxt) { - // The path to the source directory of this module's consumer. - const srcDir = nuxt.options.srcDir - const srcResolver = createResolver(srcDir) - - const { resolve } = createResolver(import.meta.url) - const runtimeDir = fileURLToPath(new URL('./runtime', import.meta.url)) - - // Transpile all runtime code. - nuxt.options.build.transpile.push(runtimeDir) + async setup(options, nuxt) { + const isModuleBuild = process.env.PLAYGROUND_MODULE_BUILD === 'true' - // Add alias for vuepal types. - nuxt.options.alias['#vuepal/types'] = resolve('runtime/types') - - const helpers = ['array', 'graphql', 'type', 'url', 'string', 'video'] - - helpers.forEach((helper) => { - nuxt.options.alias['#vuepal/helpers/' + helper] = resolve( - 'runtime/helpers/' + helper, + if (!hasNuxtModule('nuxt-graphql-middleware') && !isModuleBuild) { + throw new Error( + `The "vuepal" module requires the "nuxt-graphql-middleware" module to be installed.`, ) - }) - - // Alias for the compiled styles. - nuxt.options.alias['#vuepal/styles'] = resolve('./runtime/css/output.css') - - // Setup adapter. - const resolvedPath = '~/app/vuepal.adapter' - .replace(/^(~~|@@)/, nuxt.options.rootDir) - .replace(/^(~|@)/, nuxt.options.srcDir) - const adapterTemplate = (() => { - const maybeUserFile = fileExists(resolvedPath, ['ts']) + } - if (!maybeUserFile) { - throw new Error( - 'Missing Vuepal adapter file in ~/app/vuepal.adapter.ts', - ) - } - return addTemplate({ - filename: 'vuepal/adapter.ts', - write: true, - getContents: () => ` -import type { VuepalAdapter } from '#vuepal/types' -import adapter from './../../app/vuepal.adapter' -export default adapter`, + // This block is only needed when building the types for the module itself + // during development. Nuxt does not use the playground's nuxt.config.ts to + // determine which modules should be installed. For this reason we need to + // manually install them. Note that this code is never executed on actual + // installations of this module. + if (isModuleBuild) { + nuxt.options.typescript.strict = true + nuxt.options.typescript.tsConfig.compilerOptions ||= {} + nuxt.options.typescript.tsConfig.compilerOptions.noUncheckedIndexedAccess = + true + await installModule('nuxt-graphql-middleware', { + downloadSchema: false, + graphqlEndpoint: 'http://starterkit.ddev.site/de/graphql', + schemaPath: './schema.graphql', + autoImportPatterns: ['./playground/app/**/*.graphql'], + }) + await installModule('nuxt-language-negotiation', { + languages: ['de', 'en'], + negotiators: [], }) - })() - - nuxt.options.alias['#vuepal/adapter'] = adapterTemplate.dst - - // Context object for all feature modules. - const ctx: VuepalModuleContext = { - resolve, - nuxt, - srcDir, - srcResolver, } - if (options.drupalRoute?.enabled) { - drupalRoute(ctx, options.drupalRoute) - } + const helper = new ModuleHelper(nuxt, options, import.meta.url, { + debug: true, + isModuleBuild, + }) - if (options.localTasks?.enabled) { - localTasks(ctx, options.localTasks) - } + // Each feature can throw an error, for example when types or fields are + // missing from the GraphQL schema. + try { + FEATURE_KEYS.forEach((key) => { + const featureOptions = options[key] + if (featureOptions?.enabled || helper.isModuleBuild) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + FEATURES[key].setup(helper, featureOptions as any) + } + }) + } catch (e) { + if (e instanceof Error) { + logger.box(e.message) + } - if (options.adminToolbar?.enabled) { - adminToolbar( - ctx, - options.adminToolbar || { - enabled: true, - }, - ) + throw new Error('Failed to initialise vuepal.') } - if (options.devMode?.enabled) { - devMode(ctx, options.devMode) - } + helper.inlineNitroExternals( + fileURLToPath(new URL('./runtime', import.meta.url)), + ) - if (options.frontendRouting?.enabled) { - frontendRouting(ctx, options.frontendRouting) - } + helper.addAlias('#vuepal-build', helper.paths.moduleBuildDir) - // Needed because Nitro. - nuxt.hook('nitro:config', (nitroConfig) => { - nitroConfig.externals = defu( - typeof nitroConfig.externals === 'object' ? nitroConfig.externals : {}, - { - inline: [resolve('./runtime')], - }, - ) - }) + helper.addAlias( + '#vuepal/helpers', + helper.resolvers.module.resolve('runtime/helpers'), + ) + + helper.addTemplate( + 'adapter', + () => { + const pathRelative = helper.toModuleBuildRelative( + helper.paths.vuepalAdapterFile, + ) + return ` +import createAdapter from '${pathRelative}' +export { createAdapter } +` + }, + () => { + return `import type { VuepalAdapterFactory } from '${helper.paths.runtimeTypes}' + +declare module '#vuepal-build/adapter' { + export const createAdapter: VuepalAdapterFactory +} +` + }, + ) const disabledComposables = options.disabledComposables || [] COMPOSABLES.forEach((name) => { if (disabledComposables.includes(name)) { return } - addImports({ - from: resolve('./runtime/composables/' + name), - name, - }) + helper.addComposable(name) }) const disabledComponents = options.disabledComponents || [] @@ -191,11 +122,9 @@ export default adapter`, if (disabledComponents.includes(name)) { return } - addComponent({ - filePath: resolve(`./runtime/components/${name}/index`), - name, - global: true, - }) + helper.addComponent(name) }) + + helper.applyBuildConfig() }, }) diff --git a/src/runtime/components/AdminToolbar/Palette/Highlight.vue b/src/runtime/components/VuepalAdminToolbar/Palette/Highlight.vue similarity index 100% rename from src/runtime/components/AdminToolbar/Palette/Highlight.vue rename to src/runtime/components/VuepalAdminToolbar/Palette/Highlight.vue diff --git a/src/runtime/components/AdminToolbar/Palette/index.css b/src/runtime/components/VuepalAdminToolbar/Palette/index.css similarity index 100% rename from src/runtime/components/AdminToolbar/Palette/index.css rename to src/runtime/components/VuepalAdminToolbar/Palette/index.css diff --git a/src/runtime/components/AdminToolbar/Palette/index.vue b/src/runtime/components/VuepalAdminToolbar/Palette/index.vue similarity index 98% rename from src/runtime/components/AdminToolbar/Palette/index.vue rename to src/runtime/components/VuepalAdminToolbar/Palette/index.vue index f48de3a..5f8e5f4 100644 --- a/src/runtime/components/AdminToolbar/Palette/index.vue +++ b/src/runtime/components/VuepalAdminToolbar/Palette/index.vue @@ -35,7 +35,7 @@ diff --git a/src/runtime/components/VuepalLink/index.vue b/src/runtime/components/VuepalLink/index.vue index d9e06a8..05161f4 100644 --- a/src/runtime/components/VuepalLink/index.vue +++ b/src/runtime/components/VuepalLink/index.vue @@ -15,6 +15,11 @@ const props = defineProps<{ activeClass?: string }>() +defineSlots<{ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + default(props: { isExternal: boolean }): any +}>() + const EXTERNAL_URL_EXTENSIONS = ['jpg', 'png', 'svg', 'pdf'] const router = useRouter() @@ -46,8 +51,14 @@ const isActive = computed(() => route.path && href.value ? route.path.startsWith(href.value) : false, ) +type ComponentProps = { + class: string[] + href?: string + target?: string +} + const componentProps = computed>(() => { - const componentProps: Record = { + const componentProps: ComponentProps = { class: [], } if (href.value) { diff --git a/src/runtime/components/LocalTasks/index.vue b/src/runtime/components/VuepalLocalTasks/index.vue similarity index 91% rename from src/runtime/components/LocalTasks/index.vue rename to src/runtime/components/VuepalLocalTasks/index.vue index d4c9017..ff1806e 100644 --- a/src/runtime/components/LocalTasks/index.vue +++ b/src/runtime/components/VuepalLocalTasks/index.vue @@ -18,10 +18,12 @@