Menu

Plugin Config

If you don't want the slot container component (such as span) to be included in build output, you can use flattenSlot options in plugin config.

import sloth from "vite-plugin-sloth";

export default {
  plugins: [
    // ...other plugins
    sloth({
      flattenSlot: true,
    }),
  ],
});

This changes the build output to be like this

<!-- template -->
<template id="hello-world">
  <h1>Hello, <slot name="name">{name}</slot>!</h1>
</template>

<!-- usage: use slot attribute as usual -->
<hello-world>
  <span slot="name">Sloth</span>
</hello-world>

<!-- result: no <span> element -->
<div data-template="hello-world">
  <h1>Hello, Sloth!</h1>
</div>

Note that because this affect HTML output, style that depends on specific DOM structure might break.

You can also provide more fine-grained rule to slot flattening, by either using array of HTML tags, or a filter function

export default {
  plugins: [
    // ...other plugins
    sloth({
      // flatten all span and div slot
      // but leave the rest
      flattenSlot: ['span', 'div'],
      // or use filter function
      flattenSlot = element => {
        // flatten span elements
        if (element.tagName === 'span') {
          return true;
        }
      }
    }),
  ],
});