docs: function componentMount(tag$$1, dom, expressions, opts) {
        var __ = tag$$1.__;
        var root = __.root;
        root._tag = tag$$1; // keep a reference to the tag just created
  
        // Read all the attrs on this instance. This give us the info we need for updateOpts
        parseAttributes.apply(__.parent, [root, root.attributes, function (attr, expr) {
          if (!__.isAnonymous && RefExpr.isPrototypeOf(expr)) { expr.tag = tag$$1; }
          attr.expr = expr;
          __.instAttrs.push(attr);
        }]);
  
        // update the root adding custom attributes coming from the compiler
        walkAttributes(__.impl.attrs, function (k, v) { __.implAttrs.push({name: k, value: v}); });
        parseAttributes.apply(tag$$1, [root, __.implAttrs, function (attr, expr) {
          if (expr) { expressions.push(expr); }
          else { setAttribute(root, attr.name, attr.value); }
        }]);
  
        // initialiation
        updateOpts.apply(tag$$1, [__.isLoop, __.parent, __.isAnonymous, opts, __.instAttrs]);
  
        // add global mixins
        var globalMixin = mixin(GLOBAL_MIXIN);
  
        if (globalMixin && !__.skipAnonymous) {
          for (var i in globalMixin) {
            if (globalMixin.hasOwnProperty(i)) {
              tag$$1.mixin(globalMixin[i]);
            }
          }
        }
  
        if (__.impl.fn) { __.impl.fn.call(tag$$1, opts); }
  
        if (!__.skipAnonymous) { tag$$1.trigger('before-mount'); }
  
        // parse layout after init. fn may calculate args for nested custom tags
        each(parseExpressions.apply(tag$$1, [dom, __.isAnonymous]), function (e) { return expressions.push(e); });
  
        tag$$1.update(__.item);
  
        if (!__.isAnonymous && !__.isInline) {
          while (dom.firstChild) { root.appendChild(dom.firstChild); }
        }
  
        define(tag$$1, 'root', root);
  
        // if we need to wait that the parent "mount" or "updated" event gets triggered
        if (!__.skipAnonymous && tag$$1.parent) {
          var p = getImmediateCustomParent(tag$$1.parent);
          p.one(!p.isMounted ? 'mount' : 'updated', function () {
            setMountState.call(tag$$1, true);
          });
        } else {
          // otherwise it's not a child tag we can trigger its mount event
          setMountState.call(tag$$1, true);
        }
  
        tag$$1.__.wasCreated = true;
  
        return tag$$1
      }