@thi.ng/rdom
Version: 
Lightweight, reactive, VDOM-less UI/DOM components with async lifecycle and @thi.ng/hiccup compatible
146 lines (145 loc) • 3.03 kB
JavaScript
import { $compile } from "./compile.js";
import {
  $attribs,
  $clear,
  $comment,
  $el,
  $html,
  $moveTo,
  $remove,
  $style,
  $text,
  $tree
} from "./dom.js";
class Component {
  el;
  async unmount() {
    this.$remove();
    this.el = void 0;
  }
  // @ts-ignore args
  update(state) {
  }
  /**
   * Syntax sugar for {@link $el}, using this component's
   * {@link IComponent.el} as default `parent`.
   *
   * @param tag
   * @param attribs
   * @param body
   * @param parent
   * @param idx
   */
  $el(tag, attribs, body, parent = this.el, idx) {
    return $el(tag, attribs, body, parent, idx);
  }
  /**
   * Syntax sugar for {@link $comment}, creates a new comment DOM node using
   * this component's {@link IComponent.el} as default `parent`.
   *
   * @param body
   * @param parent
   * @param idx
   */
  $comment(body, parent = this.el, idx) {
    return $comment(body, parent, idx);
  }
  /**
   * Syntax sugar for {@link $clear}, using this component's
   * {@link IComponent.el} as default element to clear.
   *
   * @param el
   */
  $clear(el = this.el) {
    return $clear(el);
  }
  /**
   * Same as {@link $compile}.
   *
   * @param tree
   */
  $compile(tree) {
    return $compile(tree);
  }
  /**
   * Same as {@link $tree}.
   *
   * @param tree
   * @param root
   * @param index
   */
  $tree(tree, root = this.el, index) {
    return $tree(tree, root, index);
  }
  /**
   * Syntax sugar for {@link $text}, using this component's
   * {@link IComponent.el} as default element to edit.
   *
   * @remarks
   * If using the default element, assumes `this.el` is an existing
   * `HTMLElement`.
   *
   * @param body
   * @param el
   */
  $text(body, el = this.el) {
    $text(el, body);
  }
  /**
   * Syntax sugar for {@link $html}, using this component's
   * {@link IComponent.el} as default element to edit.
   *
   * @remarks
   * If using the default element, assumes `this.el` is an existing
   * `HTMLElement` or `SVGElement`.
   *
   * @param body
   * @param el
   */
  $html(body, el = this.el) {
    $html(el, body);
  }
  /**
   * Syntax sugar for {@link $attribs}, using this component's
   * {@link IComponent.el} as default element to edit.
   *
   * @param attribs
   * @param el
   */
  $attribs(attribs, el = this.el) {
    $attribs(el, attribs);
  }
  /**
   * Syntax sugar for {@link $style}, using this component's
   * {@link IComponent.el} as default element to edit.
   *
   * @param rules
   * @param el
   */
  $style(rules, el = this.el) {
    $style(el, rules);
  }
  /**
   * Syntax sugar for {@link $remove}, using this component's
   * {@link IComponent.el} as default element to remove.
   *
   * @param el
   */
  $remove(el = this.el) {
    $remove(el);
  }
  /**
   * Syntax sugar for {@link $moveTo}, using this component's
   * {@link IComponent.el} as default element to migrate.
   *
   * @param newParent
   * @param el
   * @param idx
   */
  $moveTo(newParent, el = this.el, idx) {
    $moveTo(newParent, el, idx);
  }
}
export {
  Component
};