0.1.5 • Published 8 months ago

nuxt-visual-editor v0.1.5

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

Nuxt Visual Editor

npm version npm downloads License Nuxt

Nuxt visual (layout) editor components rewrite from vue-drag-and-drop-page-builder with typescript, nuxt-headlessui and tailwindcss

Quick Setup

  1. Install using NPM or Yarn
npm install nuxt-visual-editor

OR

yarn add nuxt-visual-editor
  1. Add nuxt-visual-editor to the modules section of nuxt.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

NameTypeDescription
modelValuestring v-modelinitial value to be rendered
componentsComponent[]a custom components list
categoriesstring[]a custom categories list (Used to group components in a menu.)

Component

PropertyTypeDescription
namestringcomponent's name
categorystringcomponent's category name
imageSrcstringcomponent's preview image
htmlstringcomponent's html conntent (There must always be one tag as the root element.)

Events

NameParametersDescription
update:modelValuehtmlhtml 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)

Contribution

0.1.4

8 months ago

0.1.5

8 months ago

0.1.3

8 months ago

0.1.1

8 months ago