UNPKG

atomico

Version:

Atomico is a small library for the creation of interfaces based on web-components, only using functions and hooks.

46 lines (37 loc) 1.12 kB
import { customElement as coreCustomElement } from "../core/core"; import { createHookCollection } from "../core/hooks"; function id() { return (Math.random() + "").replace(/\d+\./, ""); } export function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } export function customElement(wc) { let nodeName = `wc-${id()}`; coreCustomElement(nodeName, wc); return () => document.createElement(nodeName); } export function customElementScope(wc) { return customElement(wc)(); } export function elementScope() { let node = document.createElement("div"); node.id = `id-${id()}`; return node; } export function createRenderHook() { let cycle = 0; let lastRender; function rerender() { if (lastRender) { let [callback, arg] = lastRender; hook.load(callback.bind(null, null, cycle++), arg); hook.updated(); } } let hook = createHookCollection(rerender); return function render(...args) { lastRender = args; rerender(); }; }