<template> <div class="flex flex-col gap-8"> <template v-for="(component, index) in components" :key="'component-' + index"> <component :is="component.name" v-bind="component.props"> <template v-for="(slotContent, slotName) in component.slots" :key="slotName" v-slot:[slotName]> <div v-html="slotContent"></div> </template> </component> <slot v-if="index < components.length - 1" :key="'separator-' + index" name="separator" /> </template> </div> </template> <script> export default { props: { templateData: { type: Object, required: true } }, computed: { components() { return this.templateData?.components?.map(({ name, ...rest }) => ({ ...rest, name })); } } }; </script>