@limetech/lime-elements-vue

Vue 3 wrapper for Lime Elements web components
1,794
Install
npm install @limetech/lime-elements-vue
Latest Version:1.5.0
Vue:3
License:Apache-2.0
Last Updated:Oct 5, 2026
Links: npm
Maintainer: flippare

@limetech/lime-elements-vue

Vue 3 wrapper for Lime Elements web components.

Table of Contents

Features

  • Tree-shaking: Import only the components you use (~50-300KB each vs 4.7MB full bundle)
  • No layout shift: Components load eagerly (synchronous), not lazily
  • TypeScript support: Full type hints in PHPStorm/WebStorm
  • v-model support: Two-way binding for toggle components (switch, checkbox)

Installation

npm install @limetech/lime-elements-vue

Usage

Import components individually for optimal bundle size.

Composition API

<script setup lang="ts">
import { ref } from 'vue';
import LimelButton from '@limetech/lime-elements-vue/limel-button';
import LimelSwitch from '@limetech/lime-elements-vue/limel-switch';

const enabled = ref(false);
const handleClick = () => console.log('clicked');
</script>

<template>
  <LimelButton label="Click me" :primary="true" @click="handleClick" />
  <LimelSwitch v-model="enabled" label="Enable feature" />
</template>

Options API

<script lang="ts">
import { defineComponent } from 'vue';
import LimelButton from '@limetech/lime-elements-vue/limel-button';
import LimelSwitch from '@limetech/lime-elements-vue/limel-switch';

export default defineComponent({
  components: { LimelButton, LimelSwitch },
  data() {
    return { enabled: false };
  },
});
</script>

CSS Styles

Import styles in your main entry file:

// main.ts
import '@limetech/lime-elements-vue/styles/lime-elements.css';

// Optional: Extended color palette
import '@limetech/lime-elements-vue/styles/color-palette-extended.css';
// Or light mode only:
// import '@limetech/lime-elements-vue/styles/color-palette-extended-light-mode-only.css';

ESLint Configuration (Recommended)

To ensure components are always imported (and catch missing imports at build time):

// eslint.config.js
import pluginVue from 'eslint-plugin-vue';
import vueTsEslintConfig from '@vue/eslint-config-typescript';

export default [
  ...pluginVue.configs['flat/essential'],
  ...vueTsEslintConfig(),
  {
    files: ['**/*.vue'],
    rules: {
      'vue/no-undef-components': 'error',
    },
  },
];

Available Components

All Lime Elements components are available as subpath imports:

import LimelButton from '@limetech/lime-elements-vue/limel-button';
import LimelCheckbox from '@limetech/lime-elements-vue/limel-checkbox';
import LimelSwitch from '@limetech/lime-elements-vue/limel-switch';
import LimelDialog from '@limetech/lime-elements-vue/limel-dialog';
import LimelInputField from '@limetech/lime-elements-vue/limel-input-field';
import LimelSelect from '@limetech/lime-elements-vue/limel-select';
// ... and many more

v-model Support

Vue's v-model directive provides two-way data binding. This library supports v-model for toggle components, allowing you to bind reactive state directly.

Supported Components

Component v-model type Bound property
LimelSwitch boolean value
LimelCheckbox boolean checked

Example Usage

<script setup lang="ts">
import { ref } from 'vue';
import LimelSwitch from '@limetech/lime-elements-vue/limel-switch';
import LimelCheckbox from '@limetech/lime-elements-vue/limel-checkbox';

const switchValue = ref(false);
const checkboxValue = ref(false);
</script>

<template>
  <div>
    <p>Switch is: {{ switchValue ? 'ON' : 'OFF' }}</p>
    <LimelSwitch v-model="switchValue" label="Toggle me" />
  </div>

  <div>
    <p>Checkbox is: {{ checkboxValue ? 'checked' : 'unchecked' }}</p>
    <LimelCheckbox v-model="checkboxValue" label="Check me" />
  </div>
</template>

Without v-model, you can use the traditional prop + event pattern:

<LimelSwitch 
  :value="switchValue" 
  label="Toggle me" 
  @change="(e) => switchValue = e.detail" 
/>

Development

Prerequisites

  • Node.js 18+
  • Python 3.8+ (for build script)

Setup

git clone --recurse-submodules https://github.com/Lundalogik/@limetech/lime-elements-vue.git
cd @limetech/lime-elements-vue
npm install

Build

npm run build

Clean

npm run clean

Project Structure

@limetech/lime-elements-vue/
├── lime-elements/        # Git submodule (Stencil source)
├── src/
│   └── index.ts          # Main entry
├── config/
│   └── stencil.config.vue.ts
├── scripts/
│   ├── build-per-component.js
│   ├── generate-explicit-types.js
│   ├── generate-subpath-exports.js
│   └── post-process.js
├── dist/                 # Build output
│   ├── index.esm.js
│   ├── limel-button/     # Per-component bundles
│   ├── limel-switch/
│   └── ...
├── build.py              # Build orchestrator
└── package.json

License

Apache-2.0

Related Packages

@pitchfork-ui/elements-vue

Vue bindings for @pitchfork-ui/elements — typed Vue components generated from th...

425 1
@pitchfork-ui/elements

Framework-agnostic custom elements for Pitchfork UI — the design system as stand...

554 1
@sail-team/balance-checker

Universal web components for balance display and onboarding flow - works with An...

2,811
vue-resize-directive

Vue.js 2.0 directive to detect element resize

751,383 321
omi-vueify

Bridge between omi and vue

31,156 13,277

Version History

Version Released Vue License
1.5.0 ^3.3.0 Apache-2.0
1.4.0 ^3.3.0 Apache-2.0
1.3.0 ^3.3.0 Apache-2.0
1.2.0 ^3.3.0 Apache-2.0
1.1.4 ^3.3.0 Apache-2.0