import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';

const RichText = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
  constructor() {
    super();
    this.__registerHost();
    this.renderNode = (node) => {
      if ('type' in node && node.type === 'text') {
        // nonsupport Html Entries
        const content = (node.text || '').replace(/&nbsp;/g, '\u00A0');
        return content;
      }
      else if ('name' in node && node.name) {
        const { name, attrs, children } = node;
        const attributes = {};
        let childList = [];
        if (attrs && typeof attrs === 'object') {
          for (const key in attrs) {
            const val = attrs[key];
            if (key === 'style' && typeof val === 'string') {
              // stencil JSX style props only support object
              const styles = val
                .split(';')
                .map(item => item.trim())
                .filter(item => item);
              const styleObj = {};
              styles.forEach(item => {
                if (!item)
                  return;
                const res = /(.+): *(.+)/g.exec(item);
                if (!res)
                  return;
                const [, name, value] = res;
                const styleName = name.replace(/-([a-z])/g, (...args) => args[1].toUpperCase());
                styleObj[styleName] = value;
              });
              if (Object.keys(styleObj).length) {
                attributes.style = styleObj;
              }
              continue;
            }
            attributes[key] = val;
          }
        }
        if (children && children.length) {
          childList = children.map(node => this.renderNode(node));
        }
        // @ts-ignore
        return h(name, attributes, childList);
      }
      return null;
    };
    this.nodes = undefined;
  }
  render() {
    const { nodes, renderNode } = this;
    if (Array.isArray(nodes)) {
      return (h(Host, null, nodes.map(node => renderNode(node))));
    }
    else {
      return h(Host, { innerHTML: nodes });
    }
  }
}, [0, "taro-rich-text-core", {
    "nodes": [1]
  }]);
function defineCustomElement$1() {
  if (typeof customElements === "undefined") {
    return;
  }
  const components = ["taro-rich-text-core"];
  components.forEach(tagName => { switch (tagName) {
    case "taro-rich-text-core":
      if (!customElements.get(tagName)) {
        customElements.define(tagName, RichText);
      }
      break;
  } });
}

const TaroRichTextCore = RichText;
const defineCustomElement = defineCustomElement$1;

export { TaroRichTextCore, defineCustomElement };

//# sourceMappingURL=taro-rich-text-core.js.map