Currently in heavy development (learning project). Do not use in production.
Lucia is a tiny JavaScript library for web applications.
- Declarative: Lucia makes it painless to create interactive UIs. Declarative views make your code more predictable, simpler to understand, and easier to debug.
- Reactive: When a data point is changed, the loose Virtual DOM will react and will update and render the points in realtime.
- Data-Driven: Instead of using traditional direct DOM manipulation, Lucia provides an interface to change data to mutate our loose Virtual DOM.
Installation
Put this within your <head>
tags in html.
<script src="https://unpkg.com/lucia/dist/lucia.js"></script>
<script src="https://unpkg.com/lucia"></script>
Usage
Declarative Rendering
At the core of Lucia is a system that enables us to declaratively render data to the DOM using straightforward template syntax:
<div id="app">
<p>{{ hello }}</p>
<p>{{ hello === 'world' }}</p>
</div>
const app = new Lucia({
el: '#app',
data: {
hello: 'world',
},
});
app.data.hello = 'there';
You can also use the l-html
directive for more advanced content manipulation.
<div id="app">
<p l-html="hello"></p>
</div>
const app = new Lucia({
el: '#app',
data: {
hello: '<button>Hello World</button>',
},
});
app.data.hello = 'there';
Conditionals
It’s easy to toggle the presence of an element, too:
<div id="app">
<button l-if="show">You can't see me</button>
<button l-if="show === show">Is it equal though?</button>
</div>
const app = new Lucia({
el: '#app',
data: {
show: false,
},
});
Event Handlers
To let users interact with your app, we can use the l-on
directive to attach event listeners that invoke methods on our Lucia instances:
<div id="app">
<button l-on:click="announce()">{{ message }}</button>
</div>
const app = new Lucia({
el: '#app',
data: {
message: 'Hello world!',
announce() {
alert(this.message);
}
},
});
Attribute Binding
In addition to text interpolation, we can also bind element attributes like this:
<div id="app">
<h1 l-bind:class="{ hello: show }">Classes are cool</h1>
<h1 l-bind:style="color">Styles are sassy</h1>
</div>
const app = new Lucia({
el: '#app',
data: {
show: true,
color: { color: 'purple' },
},
});
License
Lucia is MIT Licensed.