<template functional> <!-- This element is supposed to be wrapping the root elements on a page. They allow setting a width, background, borders, and more, but this only makes sense if they're added to the root of the page. Child elements in for example a containing element must not be wrapped by this component. --> <div class="page-root-element" :style="{ 'padding-top': `${props.element.style_padding_top || 0}px`, 'padding-bottom': `${props.element.style_padding_bottom || 0}px`, }" > <div class="page-root-element__inner"> <component :is="$options.methods.getComponent(parent, props.element, props.mode)" :element="props.element" :builder="props.builder" :mode="props.mode" class="element" /> </div> </div> </template> <script> export default { name: 'PageRootElement', props: { element: { type: Object, required: true, }, builder: { type: Object, required: true, }, mode: { type: String, required: false, default: '', }, }, methods: { getComponent(parent, element, mode) { const elementType = parent.$registry.get('element', element.type) const componentName = mode === 'editing' ? 'editComponent' : 'component' return elementType[componentName] }, }, } </script>