function CoupledChild (name) {
  // @vue/component
  return {
    inject: [name],
    computed: {
      active: function active() {
        return this[name].activeChild === this.$_couplingProxy;
      }
    },
    created: function created() {
      var _this = this;

      var proxy = this.$_couplingProxy = {};

      var _loop = function _loop(key) {
        if (key.charAt(0) === '$' || key.charAt(0) === '_') return "continue";
        Object.defineProperty(proxy, key, {
          enumerable: true,
          configurable: false,
          get: function get() {
            return _this.$data[key];
          }
        });
      };

      for (var key in this.$data) {
        var _ret = _loop(key);

        if (_ret === "continue") continue;
      }

      var _loop2 = function _loop2(_key) {
        if (_key.charAt(0) === '$' || _key.charAt(0) === '_') return "continue";
        Object.defineProperty(proxy, _key, {
          enumerable: true,
          configurable: false,
          get: function get() {
            return _this.$props[_key];
          }
        });
      };

      for (var _key in this.$props) {
        var _ret2 = _loop2(_key);

        if (_ret2 === "continue") continue;
      }

      Object.defineProperty(proxy, '$slots', {
        enumerable: false,
        configurable: false,
        get: function get() {
          return _this.$slots;
        }
      });
      this[name].$_addCoupledChild(proxy);
    },
    beforeDestroy: function beforeDestroy() {
      this[name].$_removeCoupledChild(this.$_couplingProxy);
    }
  };
}
(Use with the CoupleParent mixin)
This mixin should be used on children components of a component implementing the CoupledParent mixin.
@param {string} name Name of the injection