vue-sfc-sandbox

Vue SFC Sandbox built on top of `@vue/compiler-sfc`, Sandbox as a Vue 3 component.

Usage no npm install needed!

<script type="module">
  import vueSfcSandbox from 'https://cdn.skypack.dev/vue-sfc-sandbox';
</script>

README

Vue SFC Sandbox

Vue SFC Sandbox built on top of @vue/compiler-sfc, Sandbox as a Vue 3 component.

πŸ–ΌοΈ Preview

preview

✨ Features

πŸ—³οΈ Sandbox

  • πŸ’ͺ Fully Typed
  • πŸ“ Virtual File System (Support Compile .vue/.js File). based on vue-sfc2esm
  • πŸ‘¬ Friendly Error Tips. based on vue-sfc2esm
  • πŸ§ͺ Transpiled SFC File to ES Modules.
  • πŸ”Œ Support Externals CDN, like unpkg、jsdelivr etc.
  • 🧩 Load Import Maps as ES Modules.
  • πŸ’¨ Built-in Compile windicss on the fly, also support attributify mode.

✏️ Editor Panel

  • 🎨 Themeable Editor based on Monaco Editor
  • πŸ§‘β€πŸ’» Developer Friendly, built-in syntax highlighting
  • ↕️ REPL Sandbox with Split Panes, Split <template> & <script> tag

πŸ‘“ Preview Panel

  • ⚑️ Runtime Compile SFC File
  • πŸ” Fullscreen View
  • πŸŒ› Darkmode

πŸ’‘ Inspiration

This project is heavily inspired by Vue SFC Playground. Actually Copied from it.

πŸ“¦ Installation

yarn add vue-sfc-sandbox -S
or
npm i vue-sfc-sandbox -S

πŸ“– Usage

Notice that vue-sfc-sandbox is depending on @vue/compiler-sfc, and @vue/compiler-sfc depending on Consolidate packages. We need configure Consolidate as externals in vue.config.js file.

Demos

Vue 3 Demo: Vue CLI 3.x

Vue 3

// vue.config.js in vue 3 project
module.exports = {
  ...
  configureWebpack: {
    externals: {
      consolidate: 'Consolidate'
    }
  }
  ...
}

Use SFC Sandbox Component

// main.js
import { createApp } from 'vue'
import App from './App.vue'

import VueSfcSandbox from 'vue-sfc-sandbox'

createApp(App)
  .use(VueSfcSandbox)
  .mount('#app')

In component

<template>
  <!-- [ESM] default case -->
  <sfc-sandbox v-bind="defaultAttrs" />
</template>

<script lang="ts">
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'HelloWorld',

  setup () {
    const defaultAttrs = {
      height: 200,
      sfcFilename: 'DefaultDemo.vue',
      sfcCode: `<template>
  <h1>{{ msg }}</h1>
</template>

<script setup>
const msg = 'Hello World!'
</script>
`
    }

    return {
      defaultAttrs
    }
  }
})
</script>

Props

Attribute Description Type Accepted values Default
height the sandbox height unit (px) Number - 400
import-maps specify a import maps in the <script> element include type=\"importmap\" String - -
externals specify some cdn like jsdelivr、unpkg String - -
sfc-filename virtual sfc filename like HelloWorld.vue - -
sfc-code transpile sfc code to es modules by vue-sfc2esm String - -
script-setup whether script editor using <script setup> proposal Boolean - -

πŸ’» Development

yarn install

Compiles and hot-reloads for development

yarn serve

Compiles and minifies for production

yarn build

Lints and fixes files

yarn lint

πŸ—ƒοΈ Similar Repos

  • vuep - 🎑 A component for rendering Vue components with live editor and preview.
  • codepan - Like codepen and jsbin but works offline.
  • demosify - Create a playground to show the demos of your projects.

πŸ“„ License

MIT @xiaoluoboding