text: System.registerDynamic("ng2-select/components/select", ["./select/select"], true, function($__require, exports, module) {
    "use strict";
    ;
    var define,
        global = this,
        GLOBAL = this;
    var select_1 = $__require('./select/select');
    exports.SELECT_DIRECTIVES = [select_1.SelectComponent];
    return module.exports;
  });
  
  System.registerDynamic("ng2-select/components/select/select-item", [], true, function($__require, exports, module) {
    "use strict";
    ;
    var define,
        global = this,
        GLOBAL = this;
    var SelectItem = (function() {
      function SelectItem(source) {
        var _this = this;
        if (typeof source === 'string') {
          this.id = this.text = source;
        }
        if (typeof source === 'object') {
          this.id = source.id || source.text;
          this.text = source.text;
          if (source.children && source.text) {
            this.children = source.children.map(function(c) {
              var r = new SelectItem(c);
              r.parent = _this;
              return r;
            });
            this.text = source.text;
          }
        }
      }
      SelectItem.prototype.fillChildrenHash = function(optionsMap, startIndex) {
        var i = startIndex;
        this.children.map(function(child) {
          optionsMap.set(child.id, i++);
        });
        return i;
      };
      SelectItem.prototype.hasChildren = function() {
        return this.children && this.children.length > 0;
      };
      SelectItem.prototype.getSimilar = function() {
        var r = new SelectItem(false);
        r.id = this.id;
        r.text = this.text;
        r.parent = this.parent;
        return r;
      };
      return SelectItem;
    }());
    exports.SelectItem = SelectItem;
    return module.exports;
  });
  
  System.registerDynamic("ng2-select/components/select/select-pipes", ["@angular/core", "./common"], true, function($__require, exports, module) {
    "use strict";
    ;
    var define,
        global = this,
        GLOBAL = this;
    var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
      var c = arguments.length,
          r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
          d;
      if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
        r = Reflect.decorate(decorators, target, key, desc);
      else
        for (var i = decorators.length - 1; i >= 0; i--)
          if (d = decorators[i])
            r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
      return c > 3 && r && Object.defineProperty(target, key, r), r;
    };
    var __metadata = (this && this.__metadata) || function(k, v) {
      if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
        return Reflect.metadata(k, v);
    };
    var core_1 = $__require('@angular/core');
    var common_1 = $__require('./common');
    var HighlightPipe = (function() {
      function HighlightPipe() {}
      HighlightPipe.prototype.transform = function(value, args) {
        if (args.length < 1) {
          return value;
        }
        var query = args[0];
        if (query) {
          var tagRE = new RegExp('<[^<>]*>', 'ig');
          var tagList = value.match(tagRE);
          var tmpValue = value.replace(tagRE, '$!$');
          value = tmpValue.replace(new RegExp(common_1.escapeRegexp(query), 'gi'), '<strong>$&</strong>');
          for (var i = 0; value.indexOf('$!$') > -1; i++) {
            value = value.replace('$!$', tagList[i]);
          }
        }
        return value;
      };
      HighlightPipe = __decorate([core_1.Pipe({name: 'highlight'}), __metadata('design:paramtypes', [])], HighlightPipe);
      return HighlightPipe;
    }());
    exports.HighlightPipe = HighlightPipe;
    function stripTags(input) {
      var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi;
      var commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
      return input.replace(commentsAndPhpTags, '').replace(tags, '');
    }
    exports.stripTags = stripTags;
    return module.exports;
  });
  
  System.registerDynamic("ng2-select/components/select/common", [], true, function($__require, exports, module) {
    "use strict";
    ;
    var define,
        global = this,
        GLOBAL = this;
    function escapeRegexp(queryToEscape) {
      return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
    }
    exports.escapeRegexp = escapeRegexp;
    return module.exports;
  });
  
  System.registerDynamic("ng2-select/components/select/off-click", ["@angular/core"], true, function($__require, exports, module) {
    "use strict";
    ;
    var define,
        global = this,
        GLOBAL = this;
    var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
      var c = arguments.length,
          r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
          d;
      if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
        r = Reflect.decorate(decorators, target, key, desc);
      else
        for (var i = decorators.length - 1; i >= 0; i--)
          if (d = decorators[i])
            r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
      return c > 3 && r && Object.defineProperty(target, key, r), r;
    };
    var __metadata = (this && this.__metadata) || function(k, v) {
      if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
        return Reflect.metadata(k, v);
    };
    var core_1 = $__require('@angular/core');
    var OffClickDirective = (function() {
      function OffClickDirective() {}
      OffClickDirective.prototype.onClick = function($event) {
        $event.stopPropagation();
      };
      OffClickDirective.prototype.ngOnInit = function() {
        var _this = this;
        setTimeout(function() {
          document.addEventListener('click', _this.offClickHandler);
        }, 0);
      };
      OffClickDirective.prototype.ngOnDestroy = function() {
        document.removeEventListener('click', this.offClickHandler);
      };
      __decorate([core_1.Input('offClick'), __metadata('design:type', Object)], OffClickDirective.prototype, "offClickHandler", void 0);
      __decorate([core_1.HostListener('click', ['$event']), __metadata('design:type', Function), __metadata('design:paramtypes', [MouseEvent]), __metadata('design:returntype', void 0)], OffClickDirective.prototype, "onClick", null);
      OffClickDirective = __decorate([core_1.Directive({selector: '[offClick]'}), __metadata('design:paramtypes', [])], OffClickDirective);
      return OffClickDirective;
    }());
    exports.OffClickDirective = OffClickDirective;
    return module.exports;
  });
  
  System.registerDynamic("ng2-select/components/select/select", ["@angular/core", "./select-item", "./select-pipes", "./common", "./off-click"], true, function($__require, exports, module) {
    "use strict";
    ;
    var define,
        global = this,
        GLOBAL = this;
    var __extends = (this && this.__extends) || function(d, b) {
      for (var p in b)
        if (b.hasOwnProperty(p))
          d[p] = b[p];
      function __() {
        this.constructor = d;
      }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
    var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
      var c = arguments.length,
          r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
          d;
      if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
        r = Reflect.decorate(decorators, target, key, desc);
      else
        for (var i = decorators.length - 1; i >= 0; i--)
          if (d = decorators[i])
            r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
      return c > 3 && r && Object.defineProperty(target, key, r), r;
    };
    var __metadata = (this && this.__metadata) || function(k, v) {
      if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
        return Reflect.metadata(k, v);
    };
    var core_1 = $__require('@angular/core');
    var select_item_1 = $__require('./select-item');
    var select_pipes_1 = $__require('./select-pipes');
    var common_1 = $__require('./common');
    var off_click_1 = $__require('./off-click');
    var optionsTemplate = "\n    <ul *ngIf=\"optionsOpened && options && options.length > 0 && !firstItemHasChildren\"\n        class=\"ui-select-choices ui-select-choices-content ui-select-dropdown dropdown-menu\">\n      <li class=\"ui-select-choices-group\">\n        <div *ngFor=\"let o of options\"\n             class=\"ui-select-choices-row\"\n             [class.active]=\"isActive(o)\"\n             (mouseenter)=\"selectActive(o)\"\n             (click)=\"selectMatch(o, $event)\">\n          <a href=\"javascript:void(0)\" class=\"ui-select-choices-row-inner\">\n            <div [innerHtml]=\"o.text | highlight:inputValue\"></div>\n          </a>\n        </div>\n      </li>\n    </ul>\n\n    <ul *ngIf=\"optionsOpened && options && options.length > 0 && firstItemHasChildren\"\n        class=\"ui-select-choices ui-select-choices-content ui-select-dropdown dropdown-menu\">\n      <li *ngFor=\"let c of options; let index=index\" class=\"ui-select-choices-group\">\n        <div class=\"divider\" *ngIf=\"index > 0\"></div>\n        <div class=\"ui-select-choices-group-label dropdown-header\">{{c.text}}</div>\n\n        <div *ngFor=\"let o of c.children\"\n             class=\"ui-select-choices-row\"\n             [class.active]=\"isActive(o)\"\n             (mouseenter)=\"selectActive(o)\"\n             (click)=\"selectMatch(o, $event)\"\n             [ngClass]=\"{'active': isActive(o)}\">\n          <a href=\"javascript:void(0)\" class=\"ui-select-choices-row-inner\">\n            <div [innerHtml]=\"o.text | highlight:inputValue\"></div>\n          </a>\n        </div>\n      </li>\n    </ul>\n";
    var SelectComponent = (function() {
      function SelectComponent(element) {
        this.allowClear = false;
        this.placeholder = '';
        this.initData = [];
        this.multiple = false;
        this.data = new core_1.EventEmitter();
        this.selected = new core_1.EventEmitter();
        this.removed = new core_1.EventEmitter();
        this.typed = new core_1.EventEmitter();
        this.options = [];
        this.itemObjects = [];
        this.active = [];
        this.inputMode = false;
        this.optionsOpened = false;
        this.inputValue = '';
        this._items = [];
        this._disabled = false;
        this.element = element;
        this.clickedOutside = this.clickedOutside.bind(this);
      }
      Object.defineProperty(SelectComponent.prototype, "items", {
        set: function(value) {
          this._items = value;
          this.itemObjects = this._items.map(function(item) {
            return new select_item_1.SelectItem(item);
          });
        },
        enumerable: true,
        configurable: true
      });
      Object.defineProperty(SelectComponent.prototype, "disabled", {
        set: function(value) {
          this._disabled = value;
          if (this._disabled === true) {
            this.hideOptions();
          }
        },
        enumerable: true,
        configurable: true
      });
      SelectComponent.prototype.inputEvent = function(e, isUpMode) {
        if (isUpMode === void 0) {
          isUpMode = false;
        }
        if (e.keyCode === 9) {
          return;
        }
        if (isUpMode && (e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {
          e.preventDefault();
          return;
        }
        if (!isUpMode && e.keyCode === 8) {
          var el = this.element.nativeElement.querySelector('div.ui-select-container > input');
          if (!el.value || el.value.length <= 0) {
            if (this.active.length > 0) {
              this.remove(this.active[this.active.length - 1]);
            }
            e.preventDefault();
          }
        }
        if (!isUpMode && e.keyCode === 27) {
          this.hideOptions();
          this.element.nativeElement.children[0].focus();
          e.preventDefault();
          return;
        }
        if (!isUpMode && e.keyCode === 46) {
          if (this.active.length > 0) {
            this.remove(this.active[this.active.length - 1]);
          }
          e.preventDefault();
        }
        if (!isUpMode && e.keyCode === 37 && this._items.length > 0) {
          this.behavior.first();
          e.preventDefault();
          return;
        }
        if (!isUpMode && e.keyCode === 39 && this._items.length > 0) {
          this.behavior.last();
          e.preventDefault();
          return;
        }
        if (!isUpMode && e.keyCode === 38) {
          this.behavior.prev();
          e.preventDefault();
          return;
        }
        if (!isUpMode && e.keyCode === 40) {
          this.behavior.next();
          e.preventDefault();
          return;
        }
        if (!isUpMode && e.keyCode === 13) {
          if (this.active.indexOf(this.activeOption) === -1) {
            this.selectActiveMatch();
            this.behavior.next();
          }
          e.preventDefault();
          return;
        }
        if (e.srcElement) {
          this.inputValue = e.srcElement.value;
          this.behavior.filter(new RegExp(common_1.escapeRegexp(this.inputValue), 'ig'));
          this.doEvent('typed', this.inputValue);
        }
      };
      SelectComponent.prototype.ngOnInit = function() {
        this.behavior = (this.firstItemHasChildren) ? new ChildrenBehavior(this) : new GenericBehavior(this);
        if (this.initData) {
          this.active = this.initData.map(function(data) {
            return new select_item_1.SelectItem(data);
          });
          this.data.emit(this.active);
        }
      };
      SelectComponent.prototype.remove = function(item) {
        if (this._disabled === true) {
          return;
        }
        if (this.multiple === true && this.active) {
          var index = this.active.indexOf(item);
          this.active.splice(index, 1);
          this.data.next(this.active);
          this.doEvent('removed', item);
        }
        if (this.multiple === false) {
          this.active = [];
          this.data.next(this.active);
          this.doEvent('removed', item);
        }
      };
      SelectComponent.prototype.doEvent = function(type, value) {
        if (this[type] && value) {
          this[type].next(value);
        }
      };
      SelectComponent.prototype.clickedOutside = function() {
        this.inputMode = false;
        this.optionsOpened = false;
      };
      Object.defineProperty(SelectComponent.prototype, "firstItemHasChildren", {
        get: function() {
          return this.itemObjects[0] && this.itemObjects[0].hasChildren();
        },
        enumerable: true,
        configurable: true
      });
      SelectComponent.prototype.matchClick = function(e) {
        if (this._disabled === true) {
          return;
        }
        this.inputMode = !this.inputMode;
        if (this.inputMode === true && ((this.multiple === true && e) || this.multiple === false)) {
          this.focusToInput();
          this.open();
        }
      };
      SelectComponent.prototype.mainClick = function(event) {
        if (this.inputMode === true || this._disabled === true) {
          return;
        }
        if (event.keyCode === 46) {
          event.preventDefault();
          this.inputEvent(event);
          return;
        }
        if (event.keyCode === 8) {
          event.preventDefault();
          this.inputEvent(event, true);
          return;
        }
        if (event.keyCode === 9 || event.keyCode === 13 || event.keyCode === 27 || (event.keyCode >= 37 && event.keyCode <= 40)) {
          event.preventDefault();
          return;
        }
        this.inputMode = true;
        var value = String.fromCharCode(96 <= event.keyCode && event.keyCode <= 105 ? event.keyCode - 48 : event.keyCode).toLowerCase();
        this.focusToInput(value);
        this.open();
        event.srcElement.value = value;
        this.inputEvent(event);
      };
      SelectComponent.prototype.selectActive = function(value) {
        this.activeOption = value;
      };
      SelectComponent.prototype.isActive = function(value) {
        return this.activeOption.text === value.text;
      };
      SelectComponent.prototype.focusToInput = function(value) {
        var _this = this;
        if (value === void 0) {
          value = '';
        }
        setTimeout(function() {
          var el = _this.element.nativeElement.querySelector('div.ui-select-container > input');
          if (el) {
            el.focus();
            el.value = value;
          }
        }, 0);
      };
      SelectComponent.prototype.open = function() {
        var _this = this;
        this.options = this.itemObjects.filter(function(option) {
          return (_this.multiple === false || _this.multiple === true && !_this.active.find(function(o) {
            return option.text === o.text;
          }));
        });
        if (this.options.length > 0) {
          this.behavior.first();
        }
        this.optionsOpened = true;
      };
      SelectComponent.prototype.hideOptions = function() {
        this.inputMode = false;
        this.optionsOpened = false;
      };
      SelectComponent.prototype.selectActiveMatch = function() {
        this.selectMatch(this.activeOption);
      };
      SelectComponent.prototype.selectMatch = function(value, e) {
        if (e === void 0) {
          e = void 0;
        }
        if (e) {
          e.stopPropagation();
          e.preventDefault();
        }
        if (this.options.length <= 0) {
          return;
        }
        if (this.multiple === true) {
          this.active.push(value);
          this.data.next(this.active);
        }
        if (this.multiple === false) {
          this.active[0] = value;
          this.data.next(this.active[0]);
        }
        this.doEvent('selected', value);
        this.hideOptions();
        if (this.multiple === true) {
          this.focusToInput('');
        } else {
          this.focusToInput(select_pipes_1.stripTags(value.text));
          this.element.nativeElement.querySelector('.ui-select-container').focus();
        }
      };
      __decorate([core_1.Input(), __metadata('design:type', Boolean)], SelectComponent.prototype, "allowClear", void 0);
      __decorate([core_1.Input(), __metadata('design:type', String)], SelectComponent.prototype, "placeholder", void 0);
      __decorate([core_1.Input(), __metadata('design:type', Array)], SelectComponent.prototype, "initData", void 0);
      __decorate([core_1.Input(), __metadata('design:type', Boolean)], SelectComponent.prototype, "multiple", void 0);
      __decorate([core_1.Input(), __metadata('design:type', Array), __metadata('design:paramtypes', [Array])], SelectComponent.prototype, "items", null);
      __decorate([core_1.Input(), __metadata('design:type', Boolean), __metadata('design:paramtypes', [Boolean])], SelectComponent.prototype, "disabled", null);
      __decorate([core_1.Output(), __metadata('design:type', core_1.EventEmitter)], SelectComponent.prototype, "data", void 0);
      __decorate([core_1.Output(), __metadata('design:type', core_1.EventEmitter)], SelectComponent.prototype, "selected", void 0);
      __decorate([core_1.Output(), __metadata('design:type', core_1.EventEmitter)], SelectComponent.prototype, "removed", void 0);
      __decorate([core_1.Output(), __metadata('design:type', core_1.EventEmitter)], SelectComponent.prototype, "typed", void 0);
      SelectComponent = __decorate([core_1.Component({
        selector: 'ng-select',
        directives: [off_click_1.OffClickDirective],
        pipes: [select_pipes_1.HighlightPipe],
        template: "\n  <div tabindex=\"0\"\n     *ngIf=\"multiple === false\"\n     (keyup)=\"mainClick($event)\"\n     [offClick]=\"clickedOutside\"\n     class=\"ui-select-container ui-select-bootstrap dropdown open\">\n    <div [ngClass]=\"{'ui-disabled': disabled}\"></div>\n    <div class=\"ui-select-match\"\n         *ngIf=\"!inputMode\">\n      <span tabindex=\"-1\"\n          class=\"btn btn-default btn-secondary form-control ui-select-toggle\"\n          (click)=\"matchClick($event)\"\n          style=\"outline: 0;\">\n        <span *ngIf=\"active.length <= 0\" class=\"ui-select-placeholder text-muted\">{{placeholder}}</span>\n        <span *ngIf=\"active.length > 0\" class=\"ui-select-match-text pull-left\"\n              [ngClass]=\"{'ui-select-allow-clear': allowClear && active.length > 0}\"\n              [innerHTML]=\"active[0].text\"></span>\n        <i class=\"dropdown-toggle pull-right\"></i>\n        <i class=\"caret pull-right\"></i>\n        <a *ngIf=\"allowClear && active.length>0\" style=\"margin-right: 10px; padding: 0;\"\n          (click)=\"remove(activeOption)\" class=\"btn btn-xs btn-link pull-right\">\n          <i class=\"glyphicon glyphicon-remove\"></i>\n        </a>\n      </span>\n    </div>\n    <input type=\"text\" autocomplete=\"false\" tabindex=\"-1\"\n           (keydown)=\"inputEvent($event)\"\n           (keyup)=\"inputEvent($event, true)\"\n           [disabled]=\"disabled\"\n           class=\"form-control ui-select-search\"\n           *ngIf=\"inputMode\"\n           placeholder=\"{{active.length <= 0 ? placeholder : ''}}\">\n      " + optionsTemplate + "\n  </div>\n\n  <div tabindex=\"0\"\n     *ngIf=\"multiple === true\"\n     (keyup)=\"mainClick($event)\"\n     (focus)=\"focusToInput('')\"\n     class=\"ui-select-container ui-select-multiple ui-select-bootstrap dropdown form-control open\">\n    <div [ngClass]=\"{'ui-disabled': disabled}\"></div>\n    <span class=\"ui-select-match\">\n        <span *ngFor=\"let a of active\">\n            <span class=\"ui-select-match-item btn btn-default btn-secondary btn-xs\"\n                  tabindex=\"-1\"\n                  type=\"button\"\n                  [ngClass]=\"{'btn-default': true}\">\n               <a class=\"close ui-select-match-close\"\n                  (click)=\"remove(a)\">&nbsp;&times;</a>\n               <span>{{a.text}}</span>\n           </span>\n        </span>\n    </span>\n    <input type=\"text\"\n           (keydown)=\"inputEvent($event)\"\n           (keyup)=\"inputEvent($event, true)\"\n           (click)=\"matchClick($event)\"\n           [disabled]=\"disabled\"\n           autocomplete=\"false\"\n           autocorrect=\"off\"\n           autocapitalize=\"off\"\n           spellcheck=\"false\"\n           class=\"ui-select-search input-xs\"\n           placeholder=\"{{active.length <= 0 ? placeholder : ''}}\"\n           role=\"combobox\">\n    " + optionsTemplate + "\n  </div>\n  "
      }), __metadata('design:paramtypes', [core_1.ElementRef])], SelectComponent);
      return SelectComponent;
    }());
    exports.SelectComponent = SelectComponent;
    var Behavior = (function() {
      function Behavior(actor) {
        this.optionsMap = new Map();
        this.actor = actor;
      }
      Behavior.prototype.fillOptionsMap = function() {
        var _this = this;
        this.optionsMap.clear();
        var startPos = 0;
        this.actor.itemObjects.map(function(item) {
          startPos = item.fillChildrenHash(_this.optionsMap, startPos);
        });
      };
      Behavior.prototype.ensureHighlightVisible = function(optionsMap) {
        if (optionsMap === void 0) {
          optionsMap = void 0;
        }
        var container = this.actor.element.nativeElement.querySelector('.ui-select-choices-content');
        if (!container) {
          return;
        }
        var choices = container.querySelectorAll('.ui-select-choices-row');
        if (choices.length < 1) {
          return;
        }
        var activeIndex = this.getActiveIndex(optionsMap);
        if (activeIndex < 0) {
          return;
        }
        var highlighted = choices[activeIndex];
        if (!highlighted) {
          return;
        }
        var posY = highlighted.offsetTop + highlighted.clientHeight - container.scrollTop;
        var height = container.offsetHeight;
        if (posY > height) {
          container.scrollTop += posY - height;
        } else if (posY < highlighted.clientHeight) {
          container.scrollTop -= highlighted.clientHeight - posY;
        }
      };
      Behavior.prototype.getActiveIndex = function(optionsMap) {
        if (optionsMap === void 0) {
          optionsMap = void 0;
        }
        var ai = this.actor.options.indexOf(this.actor.activeOption);
        if (ai < 0 && optionsMap !== void 0) {
          ai = optionsMap.get(this.actor.activeOption.id);
        }
        return ai;
      };
      return Behavior;
    }());
    exports.Behavior = Behavior;
    var GenericBehavior = (function(_super) {
      __extends(GenericBehavior, _super);
      function GenericBehavior(actor) {
        _super.call(this, actor);
      }
      GenericBehavior.prototype.first = function() {
        this.actor.activeOption = this.actor.options[0];
        _super.prototype.ensureHighlightVisible.call(this);
      };
      GenericBehavior.prototype.last = function() {
        this.actor.activeOption = this.actor.options[this.actor.options.length - 1];
        _super.prototype.ensureHighlightVisible.call(this);
      };
      GenericBehavior.prototype.prev = function() {
        var index = this.actor.options.indexOf(this.actor.activeOption);
        this.actor.activeOption = this.actor.options[index - 1 < 0 ? this.actor.options.length - 1 : index - 1];
        _super.prototype.ensureHighlightVisible.call(this);
      };
      GenericBehavior.prototype.next = function() {
        var index = this.actor.options.indexOf(this.actor.activeOption);
        this.actor.activeOption = this.actor.options[index + 1 > this.actor.options.length - 1 ? 0 : index + 1];
        _super.prototype.ensureHighlightVisible.call(this);
      };
      GenericBehavior.prototype.filter = function(query) {
        var _this = this;
        var options = this.actor.itemObjects.filter(function(option) {
          return select_pipes_1.stripTags(option.text).match(query) && (_this.actor.multiple === false || (_this.actor.multiple === true && _this.actor.active.indexOf(option) < 0));
        });
        this.actor.options = options;
        if (this.actor.options.length > 0) {
          this.actor.activeOption = this.actor.options[0];
          _super.prototype.ensureHighlightVisible.call(this);
        }
      };
      return GenericBehavior;
    }(Behavior));
    exports.GenericBehavior = GenericBehavior;
    var ChildrenBehavior = (function(_super) {
      __extends(ChildrenBehavior, _super);
      function ChildrenBehavior(actor) {
        _super.call(this, actor);
      }
      ChildrenBehavior.prototype.first = function() {
        this.actor.activeOption = this.actor.options[0].children[0];
        this.fillOptionsMap();
        this.ensureHighlightVisible(this.optionsMap);
      };
      ChildrenBehavior.prototype.last = function() {
        this.actor.activeOption = this.actor.options[this.actor.options.length - 1].children[this.actor.options[this.actor.options.length - 1].children.length - 1];
        this.fillOptionsMap();
        this.ensureHighlightVisible(this.optionsMap);
      };
      ChildrenBehavior.prototype.prev = function() {
        var _this = this;
        var indexParent = this.actor.options.findIndex(function(option) {
          return _this.actor.activeOption.parent && _this.actor.activeOption.parent.id === option.id;
        });
        var index = this.actor.options[indexParent].children.findIndex(function(option) {
          return _this.actor.activeOption && _this.actor.activeOption.id === option.id;
        });
        this.actor.activeOption = this.actor.options[indexParent].children[index - 1];
        if (!this.actor.activeOption) {
          if (this.actor.options[indexParent - 1]) {
            this.actor.activeOption = this.actor.options[indexParent - 1].children[this.actor.options[indexParent - 1].children.length - 1];
          }
        }
        if (!this.actor.activeOption) {
          this.last();
        }
        this.fillOptionsMap();
        this.ensureHighlightVisible(this.optionsMap);
      };
      ChildrenBehavior.prototype.next = function() {
        var _this = this;
        var indexParent = this.actor.options.findIndex(function(option) {
          return _this.actor.activeOption.parent && _this.actor.activeOption.parent.id === option.id;
        });
        var index = this.actor.options[indexParent].children.findIndex(function(option) {
          return _this.actor.activeOption && _this.actor.activeOption.id === option.id;
        });
        this.actor.activeOption = this.actor.options[indexParent].children[index + 1];
        if (!this.actor.activeOption) {
          if (this.actor.options[indexParent + 1]) {
            this.actor.activeOption = this.actor.options[indexParent + 1].children[0];
          }
        }
        if (!this.actor.activeOption) {
          this.first();
        }
        this.fillOptionsMap();
        this.ensureHighlightVisible(this.optionsMap);
      };
      ChildrenBehavior.prototype.filter = function(query) {
        var options = [];
        var optionsMap = new Map();
        var startPos = 0;
        for (var _i = 0,
            _a = this.actor.itemObjects; _i < _a.length; _i++) {
          var si = _a[_i];
          var children = si.children.filter(function(option) {
            return query.test(option.text);
          });
          startPos = si.fillChildrenHash(optionsMap, startPos);
          if (children.length > 0) {
            var newSi = si.getSimilar();
            newSi.children = children;
            options.push(newSi);
          }
        }
        this.actor.options = options;
        if (this.actor.options.length > 0) {
          this.actor.activeOption = this.actor.options[0].children[0];
          _super.prototype.ensureHighlightVisible.call(this, optionsMap);
        }
      };
      return ChildrenBehavior;
    }(Behavior));
    exports.ChildrenBehavior = ChildrenBehavior;
    return module.exports;
  });
  
  System.registerDynamic("ng2-select/ng2-select", ["./components/select", "./components/select/select"], true, function($__require, exports, module) {
    "use strict";
    ;
    var define,
        global = this,
        GLOBAL = this;
    function __export(m) {
      for (var p in m)
        if (!exports.hasOwnProperty(p))
          exports[p] = m[p];
    }
    var select_1 = $__require('./components/select');
    __export($__require('./components/select/select'));
    __export($__require('./components/select'));
    Object.defineProperty(exports, "__esModule", {value: true});
    exports.default = {directives: [select_1.SELECT_DIRECTIVES]};
    return module.exports;
  });
  
  //# sourceMappingURL=ng2-select.js.map