npm.io
0.0.1 • Published 2d ago

@amateras/signal

Licence
Version
0.0.1
Deps
0
Size
12 kB
Vulns
0
Weekly
0

amateras/signal

Import

import 'amateras';
import 'amateras/signal';

Read and Write

const number$ = $.signal(0);
const string$ = $.singal('');
const boolean$ = $.signal(false);
const object$ = $.signal({ number: 1 });

// write value
number$.set(42);
string$.set('New Content');
boolean$.set(true);
object$.set({ number: 42 });

// read value
number$(); // 42
string$(); // 'New Content'
boolean$(); // true
object$(); // { number: 42 }

Set as Attribute Value

const src$ = $.signal('/image-1.png');

$('div', $ => {
    // you can set signal variable in attribute
    $('img', { src: src$ }),

    $('button', $ => {
        $.on('click', () => src$.set('/image-2.png'))
        $`Change Image`
    })
})

Signal Object

const user$ = $.signal({
    name: 'Amateras',
    age: 16,
    avatar: {
        url: '/amateras/avatar.png',
        size: '350x350'
    }
})

user$.name$() // "Amateras"
user$.age$() // 16
user$.avatar$.url() // "/amateras/avatar.png"

Compute and Effect

const count$ = $.signal(0);
const double$ = $.compute(() => count$() + 1);

$.effect(() => {
    console.log(`Count is ${count$()}`)
})

$('button', $ => {
    $.on('click', () => count$.set(value => value + 1))
    $`You have clicked this button in half of ${double$} times.`
})