0.1.5 • Published 8 months ago
nuxt-visual-editor v0.1.5
Nuxt Visual Editor
Nuxt visual (layout) editor components rewrite from vue-drag-and-drop-page-builder with typescript
, nuxt-headlessui
and tailwindcss
Quick Setup
- Install using NPM or Yarn
npm install nuxt-visual-editor
OR
yarn add nuxt-visual-editor
- Add
nuxt-visual-editor
to themodules
section ofnuxt.config.ts
export default defineNuxtConfig({
modules: ["nuxt-visual-editor"],
// default options
visualEditor: {
image_providers: { base64: true },
theme: {
myPrimaryBrandColor: "#000000",
myPrimaryLinkColor: "#2563eb",
myPrimaryLightGrayColor: "#e2e8f0",
myPrimaryMediumGrayColor: "#9ca3af",
myPrimaryDarkGrayColor: "#111827",
myPrimaryErrorColor: "#d60000",
myPrimarySuccesColor: "#16a34a",
},
},
});
To avoid seeing warnings from Vue about a mismatch in content, you'll need to wrap the VisualEditor
component with the ClientOnly
component Nuxt
provides as shown here:
<template>
<ClientOnly>
<VisualEditor />
</ClientOnly>
</template>
Props
Name | Type | Description |
---|---|---|
modelValue | string v-model | initial value to be rendered |
components | Component[] | a custom components list |
categories | string[] | a custom categories list (Used to group components in a menu.) |
Component
Property | Type | Description |
---|---|---|
name | string | component's name |
category | string | component's category name |
imageSrc | string | component's preview image |
html | string | component's html conntent (There must always be one tag as the root element.) |
Events
Name | Parameters | Description |
---|---|---|
update:modelValue | html | html value emitted on edit content |
Example
Example - Basic Usage with custom components & categories
<template>
<ClientOnly>
<VisualEditor
v-model="html"
:components="components"
:categories="categories"
/>
</ClientOnly>
</template>
<script setup lang="ts">
const html = ref("");
const components = ref([
{
name: "paragraphs",
category: "text",
imageSrc: "paragraphs.png",
html: '<section class="text-gray-500"> <p>Paragraph 1</p> <p>Paragraph 2</p> <p>Paragraph 3</p> </section>',
},
{
name: "avatar",
category: "image",
imageSrc: "avatar.png",
html: '<section> <img class="aspect-square" alt="" src="placeholder_image.jpg" > </section>',
},
]);
</script>
WIP
- custom slots
- custom image providers
- true two-way binding (currently partial)
- control props for other states (eg. sidebarOpen, preview)