0.0.39 • Published 8 months ago

@vanille/core v0.0.39

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

Features

  • Web components as first class citizens
  • Templating with JSX
  • Reactive rendering with signals
  • Pass objects to custom element attributes
  • No virtual DOM

Installation

yarn add @vanille/core

Prerequisites

vite.config.ts

Using vite, please specify the esbuild options:

  esbuild: {
    jsxFactory: 'h',
    jsxFragment: 'Fragment',
  }

tsconfig.json

To use decorators, enable experimentalDecorators:

    "experimentalDecorators": true

No dependencies

All features are in-house implementations to maximize native functionality, with a few exceptions (check out below!)

Extending web components for native performance

import { View } from '@vanille/core';

export class App extends View {}

Fast templating web components with in-house JSX

export class App extends View {
  render() {
    return (
      <div>
        <span>JSX!</span>
      </div>
    );
  }
}

Signals

export class App extends View {
  render() {
    const name = state('your name');
    const computedName = computed(() => name.get());

    return (
      <div>
        <span>{name}</span>
        <span>{computedName}</span>
      </div>
    );
  }
}

Simple routing

<v-route path="/">
  Home
</v-route>
<v-route path="/dashboard">
  Dashboard
</v-route>
<v-route path="/users/:id">
  User with id
</v-route>

Pass objects in web component attributes

const user = { name: 'vanille' };

<v-app user="user"></v-app>;

export class App extends View {
  render() {
    return (
      <p>{this.props.user.name}</p>
    )
  }
}

Query the DOM with refs to update elements

export class App extends View {
  setBindings() {
    this.refs.name.textContent = newValue;
  }

  render() {
    return (
      <div>
        <span ref="name">JSX!</span>
      </div>
    );
  }
}

Declarative testing with JSX

import { mount } from './test-utils';
// load the component
import './test-utils/Test';

test('can render from jsx', () => {
  const $shadow = mount(<v-test />) <---- JSX!

  const $el = $shadow.querySelector('[data-id="test"');

  expect($el).toBeTruthy();
});
0.0.37

8 months ago

0.0.38

8 months ago

0.0.39

8 months ago

0.0.36

8 months ago

0.0.35

2 years ago

0.0.34

2 years ago

0.0.33

2 years ago

0.0.32

2 years ago

0.0.31

2 years ago

0.0.29

2 years ago

0.0.28

2 years ago

0.0.27

2 years ago

0.0.26

2 years ago

0.0.25

2 years ago

0.0.24

2 years ago

0.0.23

2 years ago

0.0.22

2 years ago

0.0.21

2 years ago

0.0.20

2 years ago

0.0.19

2 years ago

0.0.18

2 years ago

0.0.17

2 years ago

0.0.16

2 years ago

0.0.15

2 years ago

0.0.14

2 years ago

0.0.13

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago