This project is part of the
@thi.ng/umbrella monorepo.
About
Lightweight, reactive, VDOM-less UI/DOM components with async lifecycle and @thi.ng/hiccup compatible.
Status
ALPHA - bleeding edge / work-in-progress
HIC SUNT DRACONES
This is still a young project. Even though most of the overall approach,
component lifecycle and API are fairly stable by now (after ~70 commits
over several months), so far there's only sparing documentation and only
a handful of public examples. After some more user feedback, there's
likely going to be further refactoring required here and there, none of
which is expected to cause breaking changes in this core package and
will likely come in the form of additions or alternatives to existing
control structures (unless they would be entirely subsuming current
features/approaches)...
@thi.ng/atom integration
For the sake of deduplication of functionality and to keep the number of
dependencies to a minimum, direct
@thi.ng/atom
integration has been removed in favor of using relevant
@thi.ng/rstream
constructs, which can be used as lightweight adapters, i.e.:
Support packages
Installation
yarn add @thi.ng/rdom
// ES module
<script type="module" src="https://unpkg.com/@thi.ng/rdom?module" crossorigin></script>
// UMD
<script src="https://unpkg.com/@thi.ng/rdom/lib/index.umd.js" crossorigin></script>
Package sizes (gzipped, pre-treeshake): ESM: 3.75 KB / CJS: 3.89 KB / UMD: 3.86 KB
Dependencies
Usage examples
Several demos in this repo's
/examples
directory are using this package.
A selection:
Screenshot | Description | Live demo | Source |
---|
| Parser grammar livecoding editor/playground & codegen | Demo | Source |
| Demonstates various rdom usage patterns | Demo | Source |
| rdom drag & drop example | Demo | Source |
| rdom & hiccup-canvas interop test | Demo | Source |
| Full umbrella repo doc string search w/ paginated results | Demo | Source |
API
Generated API docs
TODO
Currently, documentation only exists in the form of small examples and
various doc strings (incomplete). I'm working to alleviate this
situation ASAP... In that respect, PRs are welcome as well!
import { $compile } from "@thi.ng/rdom";
import { reactive } from "@thi.ng/rstream";
import { cycle, map } from "@thi.ng/transducers";
const bg = reactive("gray");
const colors = cycle(["magenta", "yellow", "cyan"]);
const nextColor = () => bg.next(<string>colors.next().value);
$compile([
"div",
{},
["h1", {}, bg.transform(map((col) => `Hello, ${col}!`))],
[
"button#foo.w4.pa3.bn",
{
style: { background: bg },
onclick: nextColor,
},
bg,
],
]).mount(document.body);
Authors
Karsten Schmidt
License
© 2020 Karsten Schmidt // Apache Software License 2.0