/vite-lit-css

Awsome plugin to import style files as css lit tagged templates

Primary LanguageTypeScript

Use Vite styles for your lit components

Plugin to get all the power of Vite styles with lit tagged-template ⚡.

This plugin aims to get work with css lang stylesheet and lit template literals as simply as any other library or front-end framework.

Plugin version Vite version
2.x vite 5
1.x vite 4

Installation

$ npm install -D vite-plugin-lit-css

# yarn
$ npm install -D vite-plugin-lit-css

# pnpm
$ pnpm add -D vite-plugin-lit-css

Usage

Add vite-plugin-lit-css to your Vite config.

import { defineConfig } from 'vite'
import litCss from 'vite-plugin-lit-css'

export default defineConfig({
  plugins: [litCss({
    // your global and rel="stylesheet" styles must be excluded
    exclude: './src/index.css'
  })],
})

Then, import your stylesheets as any other javascript module in your code.

import { LitElement } from 'lit'
import styles from './styles.css'

export class Element extends LitElement {
  static styles = [styles, queryStyles]

}

Typescript

You can use types definitions inside your vite-env.d.ts. Remember: order is important!

/// <reference types="vite-plugin-lit-css/client" />
/// <reference types="vite/client" />

Options

This plugin will transform all your css like styles by default into constructible library-specific css styles, but you can take control of this transformation with the include and exclude options.

import { defineConfig } from 'vite'
import litCss from 'vite-plugin-lit-css'

export default defineConfig({
  plugins: [litCss({
    include: /\.scss/, // transform only scss files as lit styles
    exclude: [/global.css/, './src/index.css'] // exclude your global styles
  })],
})

// index.ts

import './styles.global.css' // this file will skipped from this plugin

Your index.html will be transformed. You must include your theme or global css files inside exclude option!!.

Caveats

  • Currently, HMR is not supported, and every change made inside your lit imported styles will trigger a full page reload.