text: import { getNewShapePosition } from '../../auto-place/BpmnAutoPlaceUtil';
  
  import { getMid } from 'diagram-js/lib/layout/LayoutUtil';
  import { is } from '../../../util/ModelUtil';
  
  var HIGH_PRIORITY = 2000;
  
  
  export default function AutoPlaceBehavior(eventBus, gridSnapping) {
    eventBus.on('autoPlace', HIGH_PRIORITY, function(context) {
      var source = context.source,
          sourceMid = getMid(source),
          shape = context.shape;
  
      var position = getNewShapePosition(source, shape);
  
      [ 'x', 'y' ].forEach(function(axis) {
        var options = {};
  
        // do not snap if x/y equal
        if (position[ axis ] === sourceMid[ axis ]) {
          return;
        }
  
        if (position[ axis ] > sourceMid[ axis ]) {
          options.min = position[ axis ];
        } else {
          options.max = position[ axis ];
        }
  
        if (is(shape, 'bpmn:TextAnnotation')) {
  
          if (isHorizontal(axis)) {
            options.offset = -shape.width / 2;
          } else {
            options.offset = -shape.height / 2;
          }
  
        }
  
        position[ axis ] = gridSnapping.snapValue(position[ axis ], options);
  
      });
  
      // must be returned to be considered by auto place
      return position;
    });
  }
  
  AutoPlaceBehavior.$inject = [
    'eventBus',
    'gridSnapping'
  ];
  
  // helpers //////////
  
  function isHorizontal(axis) {
    return axis === 'x';
  }