0.4.5 • Published 11 months ago

@vyke/taggy v0.4.5

Weekly downloads
-
License
MIT
Repository
-
Last release
11 months ago

A simple and small library for creating and manipulating HTML elements in a declarative way.

Installation

npm i @vyke/taggy

Hello world

A simple example showing reactive text updates based on input:

import { createRenderer, Html } from '@vyke/taggy'
import { signal, syncValue } from '@vyke/taggy/signals'

const { div, h1, input, label } = Html

const renderer = createRenderer(document.body)

function HelloWorld() {
	const $name = signal('world')

	return div([
		h1(['Hello, ', $name, '!']),
		label(['Name: ',
			input({
				type: 'text',
				// a helper to sync the input value with the signal
				...syncValue($name),
			}),
		]),
	])
}

renderer.render(HelloWorld())

API

createRenderer

Create a renderer with given root element

const renderer = createRenderer(document.body)
renderer.render(App())

$access

Creates an access signal helper to access nested signals

import { $access } from '@vyke/taggy/signals'

const $value = signal({
	nested: {
		count: 0,
	}
})
const $nested = $access($value)
// where $count is a computed signal
const $count = $nested.nested.count

$list

Create a reactive list using signal values

import { $list, li, ul } from '@vyke/taggy'
import { signal } from '@vyke/taggy/signals'

const $items = signal([1, 2, 3])
const elements = ul([
	$list($items, (item) => li([item])),
])

$when

Render the given element based on given cases

import { $when } from '@vyke/taggy'
import { signal } from '@vyke/taggy/signals'

const $value = signal(1)

const content = div([
	$when($value,
		[1, (value) => `One: ${value}`],
		[2, (value) => `Two: ${value}`],
		$when.case((value) => value === 3, (value) => `Three: ${value}`),
	)
])

loadSignal

creates a loader signal that will render a loader based on the status of the promise

import { loadSignal } from '@vyke/taggy'
import { signal } from '@vyke/taggy/signals'

const $user = signal({
	username: 'john_doe',
	age: 30,
})

const $profile = loadSignal(async () => {
	await getProfile($user().username)
})

const content = div([
	$profile.match({
		loading: () => 'Loading...',
		loaded: ($value) => $value().name,
		error: ($error) => `Error: ${$error()}`,
	})
])

$t

Create a signal that updates the text content of a tag

import { signal } from '@vyke/taggy/signals'
import { $t } from '@vyke/taggy/text'

const $name = signal('John Doe')
const $text = $t(() => `Hello, ${$name()}!`)

const content = div([$text])

Others vyke projects

0.4.5

11 months ago

0.4.4

11 months ago

0.4.1

11 months ago

0.4.3

11 months ago

0.4.2

11 months ago

0.3.5

11 months ago

0.4.0

11 months ago

0.3.4

11 months ago

0.3.2

11 months ago

0.3.1

11 months ago

0.3.3

11 months ago

0.3.0

12 months ago

0.1.0

12 months ago

0.2.1

12 months ago

0.2.0

12 months ago

0.0.4

12 months ago

0.0.3

12 months ago

0.0.2

12 months ago