Minimal JavaScript UI Library
Go to file
Geoff Doty c8e5fbf5e4 readme 2024-05-05 10:27:14 -04:00
dist simplified 2024-05-05 09:07:17 -04:00
src simplified 2024-05-05 09:07:17 -04:00
test update api better to match existing standards 2024-05-04 20:47:34 -04:00
.gitignore first pass 2024-05-04 20:34:27 -04:00
LICENSE Initial commit 2024-05-04 20:31:29 -04:00
README.md readme 2024-05-05 10:27:14 -04:00
makefile added makefile 2024-05-04 21:14:01 -04:00

README.md

Tagged

Minimal JavaScript UI Builder

An experimental composable UI builder that takes ideas from early hyperapp design, but does not stick to strict Elm Architecture.

Features

  • No Virtual Dom
  • No Build System
  • No Over Engineering
  • ~1kb minified
  • Totally INEFFICIENT rendering (at scale)

Overview

The library only has 2 functions, app() and h(), and the later is optional.

app({opts})

The app() is the builder function and takes an opts object:

Input:

Property Default Description
state {} initial data state
actions {} function object passed to view
view (state, actions) => null function that takes state and actions and returns valid dom
mount "body" valid query selector as mounting point

Output:

Property Description
state([data]) state function to get or update internal data
actions component actions that you can call outside the component

h(tag, [...args])

The h() is an optional hypertext build utility that weighs in around ~250b and is provided as a way to build out your view markdown, but you can build your view using any method you like as long as it returns valid dom.

Example

    <script type="module">
        import {app, h} from "./tagged.min.js";

        const myapp = app({
            state: {name: "[Your Name Here]", job: "Developer"},
            view(state, actions) {
                return h("main", [
                    h("strong", `Greeting from ${state.name}`),
                    h("div", `Your local ${state.job}`),
                    h("div", {id: "test"}, [
                        h("h1", "Hello Tagged"),
                        h("p", 21),
                        h("hr")
                    ])
                ]);
            }
        });
    </script>

Notes

WORK-IN-PROGRESS: actions do not work