System.register(['src/client/lively.js', 'src/client/morphic/node-helpers.js', 'src/client/morphic/event-helpers.js', 'src/client/graphics.js', 'src/components/halo/lively-halo-item.js', 'src/client/preferences.js', 'src/client/morphic/snapping.js', 'src/client/vivide/components/vivide-view.js', 'src/client/svg.js', 'utils'], function (_export, _context) {
  "use strict";

  var lively, nodes, events, pt, HaloItem, Preferences, Snapping, Grid, VivideView, svg, cancelEvent;
  return {
    setters: [function (_srcClientLivelyJs) {
      lively = _srcClientLivelyJs.default;
    }, function (_srcClientMorphicNodeHelpersJs) {
      nodes = _srcClientMorphicNodeHelpersJs;
    }, function (_srcClientMorphicEventHelpersJs) {
      events = _srcClientMorphicEventHelpersJs;
    }, function (_srcClientGraphicsJs) {
      pt = _srcClientGraphicsJs.pt;
    }, function (_srcComponentsHaloLivelyHaloItemJs) {
      HaloItem = _srcComponentsHaloLivelyHaloItemJs.default;
    }, function (_srcClientPreferencesJs) {
      Preferences = _srcClientPreferencesJs.default;
    }, function (_srcClientMorphicSnappingJs) {
      Snapping = _srcClientMorphicSnappingJs.default;
      Grid = _srcClientMorphicSnappingJs.Grid;
    }, function (_srcClientVivideComponentsVivideViewJs) {
      VivideView = _srcClientVivideComponentsVivideViewJs.default;
    }, function (_srcClientSvgJs) {
      svg = _srcClientSvgJs.default;
    }, function (_utils) {
      cancelEvent = _utils.cancelEvent;
    }],
    execute: function () {
      const __SystemJSRewritingHack = {};
      _recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js = _recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js || {};
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'lively', {
        get() {
          return lively;
        },

        set(thisIsVererySecretVariableName) {
          lively = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'nodes', {
        get() {
          return nodes;
        },

        set(thisIsVererySecretVariableName) {
          nodes = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'events', {
        get() {
          return events;
        },

        set(thisIsVererySecretVariableName) {
          events = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'pt', {
        get() {
          return pt;
        },

        set(thisIsVererySecretVariableName) {
          pt = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'HaloItem', {
        get() {
          return HaloItem;
        },

        set(thisIsVererySecretVariableName) {
          HaloItem = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'Preferences', {
        get() {
          return Preferences;
        },

        set(thisIsVererySecretVariableName) {
          Preferences = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'Snapping', {
        get() {
          return Snapping;
        },

        set(thisIsVererySecretVariableName) {
          Snapping = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'Grid', {
        get() {
          return Grid;
        },

        set(thisIsVererySecretVariableName) {
          Grid = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'VivideView', {
        get() {
          return VivideView;
        },

        set(thisIsVererySecretVariableName) {
          VivideView = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'svg', {
        get() {
          return svg;
        },

        set(thisIsVererySecretVariableName) {
          svg = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'cancelEvent', {
        get() {
          return cancelEvent;
        },

        set(thisIsVererySecretVariableName) {
          cancelEvent = thisIsVererySecretVariableName;
          return true;
        },

        enumerable: true,
        configurable: true
      });
      class HaloVivideOutportConnectionItem extends HaloItem {

        get path() {
          return this.get('#path-to-target');
        }
        get overlay() {
          return this.get('#overlay-target');
        }

        initialize() {
          this.addEventListener('click', evt => this.removeConnection(evt));
          this.path.addEventListener('click', cancelEvent);
          this.overlay.addEventListener('click', cancelEvent);
        }

        setTarget(target) {
          this._target = target;
        }

        updateTarget(view) {
          this._view = view;
          if (!this._target) {
            this.classList.add('broken');
            return;
          }

          let offset = lively.getGlobalPosition(this.get('svg'));
          let startPoint = lively.getGlobalBounds(this).rightCenter().subPt(offset);
          let startOffsetPoint = startPoint.addPt(pt(20, 0));
          let targetCenterPoint = lively.getGlobalCenter(this._target).subPt(offset);

          svg.setPathVertices(this.path, [{ c: 'M', x1: startPoint.x, y1: startPoint.y }, { c: 'L', x1: startOffsetPoint.x, y1: startOffsetPoint.y }, { c: 'L', x1: startOffsetPoint.x, y1: targetCenterPoint.y }, { c: 'L', x1: targetCenterPoint.x, y1: targetCenterPoint.y }]);

          lively.setGlobalPosition(this.overlay, lively.getGlobalPosition(this._target));
          lively.setExtent(this.overlay, lively.getGlobalBounds(this._target).extent());
        }

        removeConnection(evt) {
          if (this._view && this._target) {
            this._view.removeConnectionTo(this._target);
            HaloService.showHalos(window.that);
            cancelEvent(evt);
          }
        }
      }

      _export('default', HaloVivideOutportConnectionItem);

      Object.defineProperty(_recorder_._src_components_halo_lively_halo_vivide_outport_connection_item_js, 'HaloVivideOutportConnectionItem', {
        get() {
          return HaloVivideOutportConnectionItem;
        },

        set(thisIsVererySecretVariableName) {
          _export('default', HaloVivideOutportConnectionItem = thisIsVererySecretVariableName);

          return true;
        },

        enumerable: true,
        configurable: true
      });
    }
  };
});