{"version":3,"sources":["AX6UIAutocomplete.js"],"names":["_jqmin","require","_AX6UICore2","_AX6Info","_AX6Util","_AX6Mustache","ctrlKeys","18","17","46","40","35","187","36","45","37","189","34","33","39","16","9","38","91","tmpl","optionGroup","columnKeys","autocompleteDisplay","formSelect","formSelectOptions","optionValue","optionText","options","optionSelected","label","item","find","that","onStateChanged","call","this","state","onChange","$display","alignAutocompleteDisplay","_this","i","queue","length","w","displayTableHeightAdjust","displayTableHeight","Math","max","$select","outerWidth","_AX6Util2","default","number","minWidth","css","min-width","reset","line-height","height","multiple","positionMargin","dim","pickerDim","pickerDirection","$displayTable","outerHeight","abs","document","body","append","activeautocompleteOptionGroup","$target","offset","_loop","width","winWidth","winHeight","alignAutocompleteOptionGroup","direction","pos","_jqmin2","top","window","newTop","left","onBodyClick","clickEl","target","close","index","e","activeautocompleteQueueIndex","data","findParentNode","getAttribute","getLabel","queIdx","selected","hasSelected","undefined","render","syncLabel","html","printLabel","id","$displayLabel","$displayLabelInput","focusLabel","removeIcon","disabled","_AX6Mustache2","trigger","concat","regExp","forEach","n","nindex","searchWord","self","remove","before","optionsMap","O","_O","_OIndex","clearLabel","isArray","onSearch","setTimeout","bind","collect_options","text","sort","lang","optionsSort","focusClear","focusWord","l","toLowerCase","focusMove","_focusIndex","focusOptionEl","search","optionGroupScrollContainer","@findex","a","b","_prevFocusIndex","optionFocusIndex","removeClass","removeAttr","isStrop","findex","optionItemLength","optionSelectedIndex","optionGroupScrollContainerScrollTop","optionGroupScrollContainerHeight","hide","bindAutocompleteTarget","autocompleteEvent","addClass","get","focusOptionElHeight","innerHeight","scrollTop","focusOptionElTop","position","removeIndex","setSelected","clear","debouncedFocusWord","debounce","val","click","which","splice","stopEvent","keyUp","inputValue","_AX6Info2","eventKeys","BACKSPACE","pop","blurLabel","keyDown","ESC","instanceId","RETURN","name","theme","tabIndex","optionItemHeight","paddingLeft","DOWN","attr","UP","blur","selectChange","value","boundID","isString","console","getError","formSize","off","processor","on","focus","removeSelectedIndex","addOptions","getQueIdx","optionIndex","log","getSelected","_item","values","optgroup","nn","_option","appendOk","setValueType","newSelectedArray","@index","config","pushOk","push","isNumber","key","clearSelected","arr","AX6UIAutocomplete","borderWidth","noSelected","noOptions","extend","noStateChange","closeTimer","_classCallCheck","_this2","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","animateTime","initialized","loading","waitOptionsCallback","keyUpTimer","xvar","init","initOnce","throttle","event","openTimer","clearTimeout","tryCount","getInstanceId","isObject","error","focusTop","selectedOptionEl","open","_values","_boundID","_value","map","_text","deepCopy","disable"],"mappings":"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","file":"AX6UIAutocomplete.js","sourcesContent":["import jQuery from \"jqmin\";\nimport AX6UICore from \"./AX6UICore.js\";\nimport info from \"./AX6Info\";\nimport U from \"./AX6Util\";\nimport mustache from \"./AX6Mustache\";\n\n/* ~~~~~~~~~~~~~~~~~~ end of import  ~~~~~~~~~~~~~~~~~~~~ */\n\nlet ctrlKeys = {\n  \"18\": \"KEY_ALT\",\n  //\"8\": \"KEY_BACKSPACE\",\n  \"17\": \"KEY_CONTROL\",\n  \"46\": \"KEY_DELETE\",\n  \"40\": \"KEY_DOWN\",\n  \"35\": \"KEY_END\",\n  \"187\": \"KEY_EQUAL\",\n  //\"27\": \"KEY_ESC\",\n  \"36\": \"KEY_HOME\",\n  \"45\": \"KEY_INSERT\",\n  \"37\": \"KEY_LEFT\",\n  \"189\": \"KEY_MINUS\",\n  \"34\": \"KEY_PAGEDOWN\",\n  \"33\": \"KEY_PAGEUP\",\n  // \"190\": \"KEY_PERIOD\",\n  //\"13\": \"KEY_RETURN\",\n  \"39\": \"KEY_RIGHT\",\n  \"16\": \"KEY_SHIFT\",\n  // \"32\": \"KEY_SPACE\",\n  \"9\": \"KEY_TAB\",\n  \"38\": \"KEY_UP\",\n  \"91\": \"KEY_WINDOW\"\n  //\"107\" : \"NUMPAD_ADD\",\n  //\"194\" : \"NUMPAD_COMMA\",\n  //\"110\" : \"NUMPAD_DECIMAL\",\n  //\"111\" : \"NUMPAD_DIVIDE\",\n  //\"12\" : \"NUMPAD_EQUAL\",\n  //\"106\" : \"NUMPAD_MULTIPLY\",\n  //\"109\" : \"NUMPAD_SUBTRACT\"\n};\nlet tmpl = {\n  \"optionGroup\"(columnKeys) {\n    return `\n<div class=\"ax6ui-autocomplete-option-group {{theme}} {{size}}\" data-ax6ui-autocomplete-option-group=\"{{id}}\">\n    <div class=\"ax-autocomplete-body\">\n        <div class=\"ax-autocomplete-option-group-content\" data-els=\"content\"></div>\n    </div>\n    <div class=\"ax-autocomplete-arrow\"></div> \n</div>\n`;\n  },\n  \"autocompleteDisplay\"(columnKeys) {\n    return ` \n<input tabindex=\"-1\" type=\"text\" data-input-dummy=\"\" style=\"display: none;\" />\n<div class=\"ax6ui-autocomplete-display {{theme}}\" data-ax6ui-autocomplete-display=\"{{id}}\" data-ax6ui-autocomplete-instance=\"{{instanceId}}\" style=\"height: {{height}}px;\">\n    <div class=\"ax6ui-autocomplete-display-table\" data-els=\"display-table\">\n        <div data-ax6ui-autocomplete-display=\"label-holder\"> \n          <a {{^tabIndex}}{{/tabIndex}}{{#tabIndex}}tabindex=\"{{tabIndex}}\" {{/tabIndex}} data-ax6ui-autocomplete-display=\"label\" spellcheck=\"false\" style=\"padding: 0 {{paddingLeft}}px;\">\n              <input type=\"text\" data-ax6ui-autocomplete-display=\"input\" style=\"border:0 none;height: {{optionItemHeight}}px;line-height: {{optionItemHeight}}px;\" />\n          </a>\n        </div>\n        <div data-ax6ui-autocomplete-display=\"addon\"> \n            {{#multiple}}{{#reset}}\n            <span class=\"addon-icon-reset\" data-selected-clear=\"true\">{{{.}}}</span>\n            {{/reset}}{{/multiple}}\n        </div>\n    </div>\n</div>\n`;\n  },\n  \"formSelect\"(columnKeys) {\n    return `\n<select tabindex=\"-1\" class=\"form-control {{formSize}}\" name=\"{{name}}\" multiple=\"multiple\"></select>\n`;\n  },\n  \"formSelectOptions\"(columnKeys) {\n    return `\n{{#selected}}\n<option value=\"{{${columnKeys.optionValue}}}\" selected=\"true\">{{${columnKeys.optionText}}}</option>\n{{/selected}}\n`;\n  },\n  \"options\"(columnKeys) {\n    return `\n{{#waitOptions}}\n    <div class=\"ax-autocomplete-option-item\">\n            <div class=\"ax-autocomplete-option-item-holder\">\n                <span class=\"ax-autocomplete-option-item-cell ax-autocomplete-option-item-label\">\n                    {{{lang.loading}}}\n                </span>\n            </div>\n        </div>\n{{/waitOptions}}\n{{^waitOptions}}\n    {{#options}}\n        {{^hide}}\n        <div class=\"ax-autocomplete-option-item\" data-option-focus-index=\"{{@findex}}\" data-option-index=\"{{@index}}\" data-option-value=\"{{${columnKeys.optionValue}}}\" {{#${columnKeys.optionSelected}}}data-option-selected=\"true\"{{/${columnKeys.optionSelected}}}>\n            <div class=\"ax-autocomplete-option-item-holder\">\n                <span class=\"ax-autocomplete-option-item-cell ax-autocomplete-option-item-label\">{{${columnKeys.optionText}}}</span>\n            </div>\n        </div>\n        {{/hide}}\n    {{/options}}\n    {{^options}}\n        <div class=\"ax-autocomplete-option-item\">\n            <div class=\"ax-autocomplete-option-item-holder\">\n                <span class=\"ax-autocomplete-option-item-cell ax-autocomplete-option-item-label\">\n                    {{{lang.noOptions}}}\n                </span>\n            </div>\n        </div>\n    {{/options}}\n{{/waitOptions}}\n`;\n  },\n  \"label\"(columnKeys) {\n    return `{{#selected}}\n<div tabindex=\"-1\" data-ax6ui-autocomplete-selected-label=\"{{@i}}\" data-ax6ui-autocomplete-selected-text=\"{{text}}\" style=\"height: {{optionItemHeight}}px;\">  \n  <div class=\"label-cell\">{{${columnKeys.optionText}}}</div>\n  <div class=\"label-cell\" data-ax6ui-autocomplete-remove=\"true\" data-ax6ui-autocomplete-remove-index=\"{{@i}}\">{{{removeIcon}}}</div>\n</div>{{/selected}}`;\n  },\n};\n\nconst onStateChanged = function (item, that) {\n  if (item && item.onStateChanged) {\n    item.onStateChanged.call(that, that);\n  }\n  else if (this.onStateChanged) {\n    this.onStateChanged.call(that, that);\n  }\n\n  if (that.state == \"changeValue\") {\n    if (item && item.onChange) {\n      item.onChange.call(that, that);\n    }\n    else if (this.onChange) {\n      this.onChange.call(that, that);\n    }\n  }\n\n  item = null;\n  that = null;\n  return true;\n};\nconst alignAutocompleteDisplay = function () {\n  let i = this.queue.length, w;\n\n  while (i--) {\n    let item = this.queue[i];\n    if (item.$display) {\n      w = Math.max(item.$select.outerWidth(), U.number(item.minWidth));\n      item.$display.css({\n        \"min-width\": w\n      });\n      if (item.reset) {\n        item.$display.find(\".addon-icon-reset\").css({\n          \"line-height\": this.queue[i].$display.height() + \"px\"\n        });\n      }\n\n      // 높이조절 처리\n      if (item.multiple) {\n        var displayTableHeightAdjust = (function () {\n          return U.number(item.$display.css(\"border-top-width\")) + U.number(item.$display.css(\"border-bottom-width\"));\n        }).call(this);\n        item.$target.height('');\n        item.$display.height('');\n\n        var displayTableHeight = item.$displayTable.outerHeight();\n        if (Math.abs(displayTableHeight - item.$target.height()) > displayTableHeightAdjust) {\n          item.$target.css({height: displayTableHeight + displayTableHeightAdjust + 4});\n          item.$display.css({height: displayTableHeight + displayTableHeightAdjust + 4});\n        }\n      }\n    }\n  }\n\n  i = null;\n  w = null;\n  return this;\n};\nconst alignAutocompleteOptionGroup = function (append) {\n  if (append && !this.activeautocompleteOptionGroup) return this;\n\n  let item = this.queue[this.activeautocompleteQueueIndex],\n    pos = {}, positionMargin = 0,\n    dim = {}, pickerDim = {},\n    pickerDirection;\n\n  if (!item) return this;\n  if (append) jQuery(document.body).append(this.activeautocompleteOptionGroup);\n\n  pos = item.$target.offset();\n  dim = {\n    width: item.$target.outerWidth(),\n    height: item.$target.outerHeight()\n  };\n  pickerDim = {\n    winWidth: Math.max(jQuery(window).width(), jQuery(document.body).width()),\n    winHeight: Math.max(jQuery(window).height(), jQuery(document.body).height()),\n    width: this.activeautocompleteOptionGroup.outerWidth(),\n    height: this.activeautocompleteOptionGroup.outerHeight()\n  };\n\n  // picker css(width, left, top) & direction 결정\n  if (!item.direction || item.direction === \"\" || item.direction === \"auto\") {\n    // set direction\n    pickerDirection = \"top\";\n\n    if (pos.top - pickerDim.height - positionMargin < 0) {\n      pickerDirection = \"top\";\n    } else if (pos.top + dim.height + pickerDim.height + positionMargin > pickerDim.winHeight) {\n      pickerDirection = \"bottom\";\n    }\n  } else {\n    pickerDirection = item.direction;\n  }\n\n  if (append) {\n    this.activeautocompleteOptionGroup\n      .addClass(\"direction-\" + pickerDirection);\n  }\n  this.activeautocompleteOptionGroup\n    .css((function () {\n      if (pickerDirection == \"top\") {\n        if (pos.top + dim.height + pickerDim.height + positionMargin > pickerDim.winHeight) {\n\n          var newTop = pos.top + pickerDim.height;\n          if (newTop + pickerDim.height + positionMargin > pickerDim.winHeight) {\n            newTop = 0;\n          }\n          if (newTop < 0) {\n            newTop = 0;\n          }\n\n          return {\n            left: pos.left,\n            top: newTop,\n            width: dim.width\n          }\n        }\n        return {\n          left: pos.left,\n          top: pos.top + dim.height + 1,\n          width: dim.width\n        }\n      }\n      else if (pickerDirection == \"bottom\") {\n        return {\n          left: pos.left,\n          top: pos.top - pickerDim.height - 1,\n          width: dim.width\n        }\n      }\n    }).call(this));\n};\nconst onBodyClick = function (e, target) {\n  if (!this.activeautocompleteOptionGroup) return this;\n\n  let item = this.queue[this.activeautocompleteQueueIndex], clickEl = \"display\";\n\n  target = U.findParentNode(e.target, function (target) {\n    if (target.getAttribute(\"data-option-value\")) {\n      clickEl = \"optionItem\";\n      return true;\n    }\n    else if (item.$target.get(0) == target) {\n      clickEl = \"display\";\n      return true;\n    }\n  });\n\n  if (!target) {\n    this.close();\n    return this;\n  }\n  else if (clickEl === \"optionItem\") {\n    setSelected.call(this, item.id, {\n      optionIndex: {\n        index: target.getAttribute(\"data-option-index\")\n      }\n    }, undefined, \"optionItemClick\");\n    alignAutocompleteDisplay.call(this);\n    alignAutocompleteOptionGroup.call(this);\n    if (!item.multiple) {\n      this.close();\n    }\n  }\n  else {\n\n  }\n\n  return this;\n};\nconst getLabel = function (queIdx) {\n  let item = this.queue[queIdx];\n\n  // 템플릿에 전달 해야할 데이터 선언\n  let data = {};\n  data.id = item.id;\n  data.theme = item.theme;\n  data.multiple = item.multiple;\n  data.lang = item.lang;\n  data.options = item.options;\n  data.selected = item.selected;\n  data.hasSelected = (data.selected && data.selected.length > 0);\n  data.removeIcon = item.removeIcon;\n  data.height = item.height;\n  data.optionItemHeight = item.optionItemHeight;\n\n  return mustache.render(tmpl.label.call(this, item.columnKeys), data);\n};\nconst syncLabel = function (queIdx) {\n  let item = this.queue[queIdx];\n\n  if (!item.multiple && item.selected && item.selected.length > 0) {\n    item.selected = [].concat(item.selected[item.selected.length - 1]);\n  }\n\n  item.selected.forEach(function (n, nindex) {\n    n[\"@index\"] = nindex;\n  });\n\n  item.$select.html(\n    mustache.render(tmpl.formSelectOptions.call(this, item.columnKeys), {\n      selected: item.selected\n    })\n  );\n};\nconst printLabel = function (queIdx) {\n  let item = this.queue[queIdx];\n\n  item.$displayLabel.find('[data-ax6ui-autocomplete-selected-label]').remove();\n  item.$displayLabelInput.before(getLabel.call(this, queIdx));\n};\nconst focusLabel = function (queIdx) {\n  if (this.queue[queIdx].disabled) return this;\n\n  this.queue[queIdx].$displayLabel.trigger(\"focus\");\n  this.queue[queIdx].$displayLabelInput.focus();\n};\nconst clearLabel = function (queIdx) {\n  this.queue[queIdx].$displayLabelInput.val('');\n};\nconst blurLabel = function (queIdx) {\n  this.queue[queIdx].$displayLabel.trigger(\"blur\");\n};\nconst onSearch = function (queIdx, searchWord) {\n  if (this.activeautocompleteQueueIndex == -1) return this; // 옵션박스가 닫힌상태이면 진행안함.\n  let regExp = /[\\{\\}\\[\\]\\/?.,;:|\\)*~`!^\\-_+<>@\\#$%&\\\\\\=\\(\\'\\\"]/gi;\n  searchWord = searchWord.replace(regExp, \"\");\n\n  this.queue[queIdx].waitOptions = true;\n  this.queue[queIdx].onSearch.call({\n    self: this,\n    item: this.queue[queIdx],\n    searchWord: searchWord\n  }, (function (O) {\n\n    let data = {};\n    let item = this.queue[this.activeautocompleteQueueIndex];\n    if (!item) return false;\n\n    /// 현재 selected 검증후 처리\n    (function (item, O) {\n      let optionsMap = {};\n      O.options.forEach(function (_O, _OIndex) {\n        _O[\"@index\"] = _OIndex;\n        _O[\"@findex\"] = _OIndex;\n        optionsMap[_O[item.columnKeys.optionValue]] = _O;\n      });\n      if (U.isArray(item.selected)) {\n        item.selected.forEach(function (_O) {\n          if (optionsMap[_O[item.columnKeys.optionValue]]) {\n            O.options[optionsMap[_O[item.columnKeys.optionValue]][\"@index\"]][item.columnKeys.optionSelected] = true;\n          }\n        });\n      }\n    })(item, O);\n\n    item.options = O.options;\n\n    alignAutocompleteDisplay.call(this);\n\n    /// 템플릿에 전달할 오브젝트 선언\n    data.id = item.id;\n    data.theme = item.theme;\n    data.multiple = item.multiple;\n    data.lang = item.lang;\n    data.options = item.options;\n    this.activeautocompleteOptionGroup.find('[data-els=\"content\"]').html(mustache.render(tmpl.options.call(this, item.columnKeys), data));\n\n    focusWord.call(this, this.activeautocompleteQueueIndex, searchWord);\n    alignAutocompleteOptionGroup.call(this);\n\n    setTimeout((function () {\n      alignAutocompleteOptionGroup.call(this);\n    }).bind(this));\n\n\n  }).bind(this));\n};\nconst focusWord = function (queIdx, searchWord) {\n  if (this.activeautocompleteQueueIndex == -1) return this; // 옵션박스가 닫힌상태이면 진행안함.\n  let collect_options = [], i = -1, l = this.queue[queIdx].options.length - 1, n;\n  if (searchWord != \"\") {\n    while (l - i++) {\n      n = this.queue[queIdx].options[i];\n\n      if (('' + n.text).toLowerCase() == searchWord.toLowerCase()) {\n        collect_options = [{'@findex': n['@findex'], optionsSort: 0}];\n        break;\n      } else {\n        let sort = ('' + n.text).toLowerCase().search(searchWord.toLowerCase());\n        if (sort > -1) {\n          collect_options.push({'@findex': n['@findex'], optionsSort: sort});\n          if (collect_options.length > 2) break;\n        }\n        sort = null;\n      }\n    }\n    collect_options.sort(function (a, b) {\n      return a.optionsSort - b.optionsSort;\n    });\n  }\n\n  if (collect_options && collect_options.length > 0) {\n    focusMove.call(this, queIdx, undefined, collect_options[0]['@findex']);\n  } else {\n    focusClear.call(this, queIdx);\n  }\n};\nconst focusClear = function (queIdx) {\n  if (this.activeautocompleteOptionGroup) {\n    this.activeautocompleteOptionGroup\n      .find('[data-option-focus-index]')\n      .removeClass(\"hover\")\n      .removeAttr(\"data-option-selected\");\n  }\n\n  this.queue[queIdx].optionFocusIndex = -1;\n};\nconst focusMove = function (queIdx, direction, findex) {\n  let _focusIndex, _prevFocusIndex, focusOptionEl, optionGroupScrollContainer;\n  let item = this.queue[queIdx];\n\n  if (this.activeautocompleteOptionGroup && item.options && item.options.length > 0) {\n\n    if (typeof findex !== \"undefined\") {\n      _focusIndex = findex\n    }\n    else {\n      _prevFocusIndex = (item.optionFocusIndex == -1) ? item.optionSelectedIndex || -1 : item.optionFocusIndex;\n      if (_prevFocusIndex == -1) {\n        _focusIndex = 0;\n        //_focusIndex = (direction > 0) ? 0 : item.optionItemLength - 1; // 맨 끝으로 보낼것인가 말 것인가.\n      }\n      else {\n        _focusIndex = _prevFocusIndex + direction;\n        if (_focusIndex < 0) _focusIndex = 0;\n        else if (_focusIndex > item.optionItemLength - 1) _focusIndex = item.optionItemLength - 1;\n      }\n    }\n\n    item.optionFocusIndex = _focusIndex;\n\n    // 포커스 인덱스가 hide아이템을 만나면 hide 아이템이 안나올 때까지 루프를 순회 합니다.\n    if (item.options[_focusIndex] && item.options[_focusIndex].hide) { // 옵션이 없는 값이 선택된 경우\n      if (typeof direction === \"undefined\") {\n        return this;\n      }\n      else {\n        let isStrop = false;\n        while (item.options[_focusIndex].hide) {\n          _focusIndex = _focusIndex + direction;\n          if (_focusIndex < 0) {\n            _focusIndex = 0;\n            break;\n          }\n          else if (_focusIndex > item.optionItemLength - 1) {\n            _focusIndex = item.optionItemLength - 1;\n            break;\n          }\n        }\n      }\n    }\n\n    if (typeof _focusIndex !== \"undefined\") {\n      this.activeautocompleteOptionGroup\n        .find('[data-option-focus-index]')\n        .removeClass(\"hover\");\n\n      focusOptionEl = this.activeautocompleteOptionGroup\n        .find('[data-option-focus-index=\"' + _focusIndex + '\"]')\n        .addClass(\"hover\");\n\n      optionGroupScrollContainer = this.activeautocompleteOptionGroup.find('[data-els=\"content\"]');\n\n      if (focusOptionEl.get(0)) {\n        let focusOptionElHeight = focusOptionEl.outerHeight(),\n          optionGroupScrollContainerHeight = optionGroupScrollContainer.innerHeight(),\n          optionGroupScrollContainerScrollTop = optionGroupScrollContainer.scrollTop(),\n          focusOptionElTop = focusOptionEl.position().top + optionGroupScrollContainer.scrollTop();\n\n        if (optionGroupScrollContainerHeight + optionGroupScrollContainerScrollTop < focusOptionElTop + focusOptionElHeight) {\n          optionGroupScrollContainer.scrollTop(focusOptionElTop + focusOptionElHeight - optionGroupScrollContainerHeight);\n        }\n        else if (optionGroupScrollContainerScrollTop > focusOptionElTop) {\n          optionGroupScrollContainer.scrollTop(focusOptionElTop);\n        }\n        // optionGroup scroll check\n\n        if (typeof direction !== \"undefined\") {\n          item.$displayLabelInput.val(item.options[_focusIndex].text);\n        }\n      }\n    }\n  }\n};\nconst bindAutocompleteTarget = function (queIdx) {\n  let item = this.queue[queIdx], data = {};\n  const debouncedFocusWord = U.debounce(function (queIdx) {\n    if (this.activeautocompleteQueueIndex == -1) return this; // 옵션박스가 닫힌상태이면 진행안함.\n    onSearch.call(this, queIdx, this.queue[queIdx].$displayLabelInput.val());\n  }, 100).bind(this);\n  const autocompleteEvent = {\n    'click': function (queIdx, e) {\n      let clickEl = \"\";\n      let target = U.findParentNode(e.target, function (target) {\n        if (target.getAttribute(\"data-ax6ui-autocomplete-remove\")) {\n          clickEl = \"optionItemRemove\";\n          return true;\n        }\n        else if (target.getAttribute(\"data-selected-clear\")) {\n          clickEl = \"clear\";\n          return true;\n        }\n      });\n\n      if (target) {\n        if (clickEl === \"optionItemRemove\") {\n          let removeIndex = target.getAttribute(\"data-ax6ui-autocomplete-remove-index\");\n          this.queue[queIdx].selected.splice(removeIndex, 1);\n          syncLabel.call(this, queIdx);\n          printLabel.call(this, queIdx);\n          focusLabel.call(this, queIdx);\n          alignAutocompleteDisplay.call(this);\n          alignAutocompleteOptionGroup.call(this);\n          U.stopEvent(e);\n          return this;\n        } else if (clickEl === \"clear\") {\n          setSelected.call(this, queIdx, {clear: true});\n          alignAutocompleteDisplay.call(this);\n          alignAutocompleteOptionGroup.call(this);\n        }\n      }\n      else {\n        if (this.activeautocompleteQueueIndex == queIdx) {\n          if (this.queue[queIdx].optionFocusIndex == -1) { // 아이템에 포커스가 활성화 된 후, 마우스 이벤트 이면 무시\n            this.close();\n          }\n        }\n        else {\n          focusLabel.call(this, queIdx);\n        }\n      }\n    },\n    'keyUp': function (queIdx, e) {\n      /// 약속된 키 이벤트가 발생하면 stopEvent를 통해 keyUp 이벤트가 발생되지 않도록 막아주는 센스\n      if (e.which == info.eventKeys.ESC && this.activeautocompleteQueueIndex === -1) { // ESC키를 누르고 옵션그룹이 열려있지 않은 경우\n        U.stopEvent(e);\n        return this;\n      }\n      else if (e.which == info.eventKeys.TAB) {\n        // nothing\n        this.close();\n        return this;\n      }\n      else if (this.activeautocompleteQueueIndex != queIdx && e.which != info.eventKeys.BACKSPACE) { // 닫힌 상태 인경우\n        this.open(queIdx); // open and align\n        debouncedFocusWord(queIdx);\n      }\n\n      if (ctrlKeys[e.which]) {\n        U.stopEvent(e);\n      }\n      else {\n        // backspace 감지 하여 input 값이 없으면 스탑이벤트 처리 할 것\n        if (e.which == info.eventKeys.BACKSPACE && this.queue[queIdx].$displayLabelInput.val() == \"\") {\n          // 마지막 아이템을 제거.\n          this.queue[queIdx].selected.pop();\n          syncLabel.call(this, queIdx);\n          printLabel.call(this, queIdx);\n          focusLabel.call(this, queIdx);\n          alignAutocompleteDisplay.call(this);\n          alignAutocompleteOptionGroup.call(this);\n          U.stopEvent(e);\n        } else {\n          debouncedFocusWord(queIdx);\n        }\n      }\n    },\n    'keyDown': function (queIdx, e) {\n      let item = this.queue[queIdx];\n      if (e.which == info.eventKeys.ESC) {\n        clearLabel.call(this, queIdx);\n        this.close();\n        U.stopEvent(e);\n      }\n      else if (e.which == info.eventKeys.RETURN) {\n        let inputValue = item.$displayLabelInput.val();\n        if (item.optionFocusIndex > -1) {\n          setSelected.call(this, item.id, {\n            optionIndex: {\n              index: item.optionFocusIndex\n            }\n          }, undefined, \"optionItemClick\");\n        } else if (inputValue != \"\") {\n          setSelected.call(this, queIdx, inputValue, true);\n        }\n        clearLabel.call(this, queIdx);\n        alignAutocompleteDisplay.call(this);\n        this.close();\n\n        U.stopEvent(e);\n      }\n      else if (e.which == info.eventKeys.DOWN) {\n        focusMove.call(this, queIdx, 1);\n        U.stopEvent(e);\n      }\n      else if (e.which == info.eventKeys.UP) {\n        focusMove.call(this, queIdx, -1);\n        U.stopEvent(e);\n      }\n    },\n    'focus': function (queIdx, e) {\n      // console.log(e);\n    },\n    'blur': function (queIdx, e) {\n      blurLabel.call(this, queIdx);\n      U.stopEvent(e);\n    },\n    'selectChange': function (queIdx, e) {\n      setSelected.call(this, queIdx, {value: item.$select.val()}, true);\n    }\n  };\n  const blurLabel = function (queIdx) {\n    clearLabel.call(this, queIdx);\n  };\n\n\n\n  if (!item.$display) {\n    /// 템플릿에 전달할 오브젝트 선언\n    data.instanceId = this.instanceId;\n    data.id = item.id;\n    data.name = item.name;\n    data.theme = item.theme;\n    data.tabIndex = item.tabIndex;\n    data.multiple = item.multiple;\n    data.reset = item.reset;\n    data.height = item.height;\n    data.optionItemHeight = item.optionItemHeight;\n    data.paddingLeft = (item.height - item.optionItemHeight) / 2;\n    data.label = getLabel.call(this, queIdx);\n\n    item.$display = jQuery(mustache.render(tmpl.autocompleteDisplay.call(this, item.columnKeys), data));\n    item.$displayTable = item.$display.find('[data-els=\"display-table\"]');\n    item.$displayLabel = item.$display.find('[data-ax6ui-autocomplete-display=\"label\"]');\n    item.$displayLabelInput = item.$display.find('[data-ax6ui-autocomplete-display=\"input\"]');\n\n    if (item.$target.find(\"select\").get(0)) {\n      item.$select = item.$target.find(\"select\");\n      item.$select\n        .attr(\"tabindex\", \"-1\")\n        .attr(\"class\", \"form-control \" + data.formSize);\n\n      if (data.name) {\n        item.$select.attr(\"name\", \"name\");\n      }\n      item.$select.attr(\"multiple\", \"multiple\");\n    }\n    else {\n      item.$select = jQuery(mustache.render(tmpl.formSelect.call(this, item.columnKeys), data));\n      item.$target.append(item.$select);\n    }\n\n    item.$target.append(item.$display);\n\n  }\n  else {\n    printLabel.call(this, queIdx);\n  }\n\n  alignAutocompleteDisplay.call(this);\n\n\n  item.$display\n    .off('click.ax6ui-autocomplete')\n    .on('click.ax6ui-autocomplete', autocompleteEvent.click.bind(this, queIdx));\n\n  // autocomplete 태그에 대한 이벤트 감시\n\n  item.$displayLabelInput\n    .off(\"focus.ax6ui-autocomplete\")\n    .on(\"focus.ax6ui-autocomplete\", autocompleteEvent.focus.bind(this, queIdx))\n    .off(\"blur.ax6ui-autocomplete\")\n    .on(\"blur.ax6ui-autocomplete\", autocompleteEvent.blur.bind(this, queIdx))\n    .off(\"keydown.ax6ui-autocomplete\")\n    .on(\"keydown.ax6ui-autocomplete\", autocompleteEvent.keyDown.bind(this, queIdx))\n    .off(\"keyup.ax6ui-autocomplete\")\n    .on(\"keyup.ax6ui-autocomplete\", autocompleteEvent.keyUp.bind(this, queIdx));\n\n  // select 태그에 대한 change 이벤트 감시\n\n  /*\n    item.$select\n      .off('change.ax6ui-autocomplete')\n      .on('change.ax6ui-autocomplete', autocompleteEvent.selectChange.bind(this, queIdx));\n    */\n\n  data = null;\n  item = null;\n  queIdx = null;\n  return this;\n};\nconst getQueIdx = function (boundID) {\n  if (boundID instanceof jQuery) {\n    boundID = boundID.data(\"data-ax6ui-autocomplete-id\");\n  } else if (!U.isString(boundID)) {\n    boundID = jQuery(boundID).data(\"data-ax6ui-autocomplete-id\");\n  }\n  if (!U.isString(boundID)) {\n    console.log(info.getError(\"ax6ui-autocomplete\", \"402\", \"getQueIdx\"));\n    return;\n  }\n  return U.search(this.queue, function () {\n    return this.id == boundID;\n  });\n};\nconst getSelected = function (_item, o, selected) {\n  if (typeof selected === \"undefined\") {\n    return (_item.multiple) ? !o : true;\n  } else {\n    return selected;\n  }\n};\nconst clearSelected = function (queIdx) {\n  this.queue[queIdx].options.forEach(function (n) {\n    if (n.optgroup) {\n      n.options.forEach(function (nn) {\n        nn.selected = false;\n      });\n    }\n    else {\n      n.selected = false;\n    }\n  });\n\n  this.queue[queIdx].selected = [];\n  this.queue[queIdx].$select.html(\n    mustache.render(tmpl.formSelectOptions.call(this, this.queue[queIdx].columnKeys), {\n      selected: this.queue[queIdx].selected\n    })\n  );\n};\nconst setSelected = function (boundID, value, selected, _option) {\n  const processor = {\n    'selectedIndex': function (queIdx, value, selected, setValueType) {\n\n    },\n    'removeSelectedIndex': function (queIdx, value, selected, setValueType) {\n      var item = this.queue[queIdx], addOptions = {};\n      var newSelectedArray = [], optionIndex = 0;\n      for (var i = 0; i < item.selected.length; i++) {\n        if (item.selected[i]['@index'] != value.removeSelectedIndex.index) {\n          addOptions = {'@index': optionIndex, '@findex': optionIndex};\n          addOptions[item.columnKeys.optionValue] = item.selected[i][item.columnKeys.optionValue];\n          addOptions[item.columnKeys.optionText] = item.selected[i][item.columnKeys.optionText];\n          newSelectedArray.push(addOptions);\n          optionIndex++;\n        }\n      }\n      item.selected = newSelectedArray;\n    },\n    'optionIndex': function (queIdx, value, selected, setValueType) {\n      var item = this.queue[queIdx], addOptions = {};\n      var optionIndex = item.selected.length;\n      var pushOk = true;\n\n      addOptions = {\n        '@index': optionIndex, '@findex': optionIndex\n      };\n      addOptions[item.columnKeys.optionValue] = item.options[value.optionIndex.index][item.columnKeys.optionValue];\n      addOptions[item.columnKeys.optionText] = item.options[value.optionIndex.index][item.columnKeys.optionText];\n\n      for (var i = 0; i < item.selected.length; i++) {\n        if (item.selected[i][item.columnKeys.optionValue] == addOptions[item.columnKeys.optionValue]) {\n          pushOk = false;\n        }\n      }\n      if (pushOk) item.selected.push(addOptions);\n    },\n    'arr': function (queIdx, values, selected, setValueType) {\n      values.forEach(function (value) {\n        if (U.isString(value) || U.isNumber(value)) {\n          processor.text.call(self, queIdx, value, selected, \"justSetValue\");\n        }\n        else {\n          for (var key in processor) {\n            if (value[key]) {\n              processor[key].call(self, queIdx, value, selected, \"justSetValue\");\n              break;\n            }\n          }\n        }\n      });\n    },\n    'value': function (queIdx, value, selected, setValueType) {\n      var item = this.queue[queIdx];\n      var addOptions;\n      var optionIndex = U.search(item.options, function () {\n        return this[item.columnKeys.optionValue] == value.value[item.columnKeys.optionValue];\n      });\n\n      if (optionIndex > -1) {\n        item.options[optionIndex][item.columnKeys.optionSelected]\n          = getSelected(item, item.options[optionIndex][item.columnKeys.optionSelected], selected);\n\n        if (item.options[optionIndex][item.columnKeys.optionSelected]) {\n          var appendOk = true;\n          for (var i = 0; i < item.selected.length; i++) {\n            if (item.selected[i][this.config.columnKeys.optionValue] == item.options[optionIndex][this.config.columnKeys.optionValue]) {\n              appendOk = false;\n              break;\n            }\n          }\n          if (appendOk) {\n            addOptions = {};\n            addOptions[item.columnKeys.optionValue] = item.options[optionIndex][item.columnKeys.optionValue];\n            addOptions[item.columnKeys.optionText] = item.options[optionIndex][item.columnKeys.optionText];\n            item.selected.push(addOptions);\n          }\n        }\n        else {\n          var newSelectedArray = [];\n          for (var i = 0; i < item.selected.length; i++) {\n            if (item.selected[i][this.config.columnKeys.optionValue] == item.options[optionIndex][this.config.columnKeys.optionValue]) {\n\n            }\n            else {\n              addOptions = {};\n              addOptions[item.columnKeys.optionValue] = item.selected[i][item.columnKeys.optionValue];\n              addOptions[item.columnKeys.optionText] = item.selected[i][item.columnKeys.optionText];\n              newSelectedArray.push(addOptions);\n            }\n          }\n          item.selected = newSelectedArray;\n        }\n\n      }\n      else {\n        // 새로운 값 추가\n        var appendOk = true;\n        for (var i = 0; i < item.selected.length; i++) {\n          if (item.selected[i][this.config.columnKeys.optionValue] == value.value[this.config.columnKeys.optionValue]) {\n            appendOk = false;\n            break;\n          }\n        }\n\n        if (appendOk) {\n          addOptions = {};\n          addOptions[item.columnKeys.optionValue] = value.value[this.config.columnKeys.optionValue];\n          addOptions[item.columnKeys.optionText] = value.value[this.config.columnKeys.optionText];\n          item.selected.push(addOptions);\n        }\n      }\n    },\n    'text': function (queIdx, value, selected, setValueType) {\n      var item = this.queue[queIdx];\n      var addOptions;\n      var optionIndex = U.search(item.options, function () {\n        return this[item.columnKeys.optionText] == value;\n      });\n\n      if (optionIndex > -1) {\n        item.options[optionIndex][item.columnKeys.optionSelected]\n          = getSelected(item, item.options[optionIndex][item.columnKeys.optionSelected], selected);\n\n        if (item.options[optionIndex][item.columnKeys.optionSelected]) {\n          var appendOk = true;\n          for (var i = 0; i < item.selected.length; i++) {\n            if (item.selected[i][this.config.columnKeys.optionText] == item.options[optionIndex][this.config.columnKeys.optionText]) {\n              appendOk = false;\n              break;\n            }\n          }\n          if (appendOk) {\n            addOptions = {};\n            addOptions[item.columnKeys.optionValue] = item.options[optionIndex][item.columnKeys.optionValue];\n            addOptions[item.columnKeys.optionText] = item.options[optionIndex][item.columnKeys.optionText];\n            item.selected.push(addOptions);\n          }\n        }\n        else {\n          var newSelectedArray = [];\n          for (var i = 0; i < item.selected.length; i++) {\n            if (item.selected[i][this.config.columnKeys.optionText] == item.options[optionIndex][this.config.columnKeys.optionText]) {\n\n            }\n            else {\n              addOptions = {};\n              addOptions[item.columnKeys.optionValue] = item.selected[i][item.columnKeys.optionValue];\n              addOptions[item.columnKeys.optionText] = item.selected[i][item.columnKeys.optionText];\n              newSelectedArray.push(addOptions);\n            }\n          }\n          item.selected = newSelectedArray;\n        }\n      }\n      else {\n        // 새로운 값 추가\n        var appendOk = true;\n        for (var i = 0; i < item.selected.length; i++) {\n          if (item.selected[i][this.config.columnKeys.optionText] == value) {\n            appendOk = false;\n            break;\n          }\n        }\n\n        if (appendOk) {\n          addOptions = {};\n          addOptions[item.columnKeys.optionValue] = value;\n          addOptions[item.columnKeys.optionText] = value;\n          item.selected.push(addOptions);\n        }\n      }\n    },\n    'clear': function (queIdx) {\n      clearSelected.call(this, queIdx);\n      focusClear.call(this, queIdx);\n\n      if (this.activeautocompleteOptionGroup) {\n        this.activeautocompleteOptionGroup\n          .find('[data-option-index]')\n          .attr(\"data-option-Selected\", \"false\");\n      }\n      this.queue[queIdx].optionSelectedIndex = -1;\n    }\n  };\n\n  let queIdx = (U.isNumber(boundID)) ? boundID : getQueIdx.call(this, boundID);\n  if (queIdx === -1) {\n    console.log(info.getError(\"ax6ui-autocomplete\", \"402\", \"val\"));\n    return;\n  }\n\n  if (typeof value == \"undefined\") {\n    throw \"error not found value\";\n  }\n  else if (U.isArray(value)) {\n    processor.clear.call(this, queIdx);\n    processor.arr.call(this, queIdx, (this.queue[queIdx].multiple || value.length == 0) ? value : [value[value.length - 1]], selected);\n  }\n  else if (U.isString(value) || U.isNumber(value)) {\n    if (typeof value !== \"undefined\" && value !== null && !this.queue[queIdx].multiple) {\n      clearSelected.call(this, queIdx);\n    }\n    processor.text.call(this, queIdx, value, selected);\n  }\n  else {\n    if (value === null) {\n      processor.clear.call(this, queIdx);\n    }\n    else {\n      if (!this.queue[queIdx].multiple) {\n        clearSelected.call(this, queIdx);\n      }\n      for (var key in processor) {\n        if (value[key]) {\n          processor[key].call(this, queIdx, value, selected);\n          break;\n        }\n      }\n    }\n  }\n\n  syncLabel.call(this, queIdx);\n  printLabel.call(this, queIdx);\n  focusLabel.call(this, queIdx);\n  alignAutocompleteOptionGroup.call(this);\n\n  if (typeof value !== \"undefined\") {\n    if (_option && !_option.noStateChange) {\n      onStateChanged.call(this, this.queue[queIdx], {\n        self: this,\n        item: this.queue[queIdx],\n        state: \"changeValue\",\n        value: this.queue[queIdx].selected\n      });\n    }\n  }\n\n  boundID = null;\n  return this;\n};\n\n/* ~~~~~~~~~~~~~~~~~~ end of private  ~~~~~~~~~~~~~~~~~~~~ */\n\n/**\n * @class\n */\nclass AX6UIAutocomplete extends AX6UICore {\n  /**\n   * @constructor\n   * @param config\n   */\n  constructor(config) {\n    super();\n\n    /**\n     * @member {JSON}\n     * @param config\n     * @param [config.theme='default']\n     * @param [config.animateTime=250]\n     * @param [config.height=34]\n     * @param [config.lang] - 메세지들\n     * @param [config.lang.noSelected='']\n     * @param [config.lang.noOptions='no options']\n     * @param [config.lang.loading='now loading..']\n     * @param [config.columnKeys] - 내부에서 사용 JSON key 정의\n     * @param [config.columnKeys.optionValue='value']\n     * @param [config.columnKeys.optionText='text']\n     * @param [config.columnKeys.optionSelected='selected']\n     */\n    this.config = {\n      theme: 'default',\n      animateTime: 250,\n      height: 34,\n      optionItemHeight: 24,\n      borderWidth: 1,\n      removeIcon: 'U+00d7',\n      lang: {\n        noSelected: '',\n        noOptions: 'no options',\n        loading: 'Now Processing'\n      },\n      columnKeys: {\n        optionValue: 'value',\n        optionText: 'text',\n        optionSelected: 'selected'\n      }\n    };\n    jQuery.extend(true, this.config, config);\n\n    // 멤버 변수 초기화\n    /**\n     * bind를 통해 연결된 select가 저장되는 변수\n     * @member {Array}\n     */\n    this.queue = [];\n    /**\n     * @member {Object}\n     */\n    this.activeautocompleteOptionGroup = null;\n    /**\n     * @member {Number}\n     */\n    this.activeautocompleteQueueIndex = -1;\n    /**\n     * @member {Object}\n     */\n    this.openTimer = null;\n    /**\n     * @member {Object}\n     */\n    this.closeTimer = null;\n    /**\n     * @member {Function}\n     */\n    this.waitOptionsCallback = null;\n    /**\n     * @member {Object}\n     */\n    this.keyUpTimer = null;\n    /**\n     * @member {Object}\n     */\n    this.xvar = {};\n\n    this.init();\n  }\n\n  /**\n   * @method\n   * @param config\n   */\n  init() {\n    this.onStateChanged = this.config.onStateChanged;\n    delete this.config.onStateChanged;\n    this.onChange = this.config.onChange;\n    delete this.config.onChange;\n\n    // init 호출 여부\n    this.initOnce();\n  }\n\n  /**\n   * @method\n   */\n  initOnce() {\n    if (this.initialized) return this;\n    this.initialized = true;\n\n    // throttledResize\n    jQuery(window).on(\"resize.ax6ui-autocomplete-display-\" + this.instanceId, U.throttle(function (e) {\n      alignAutocompleteDisplay.call(this, e || window.event);\n      alignAutocompleteOptionGroup.call(this);\n    }, 100).bind(this));\n  }\n\n  /**\n   * bind autocomplete\n   * @method\n   * @param {Object} item\n   * @param {String} [item.id]\n   * @param {String} [item.theme]\n   * @param {Boolean} [item.multiple]\n   * @param {Element} item.target\n   * @return {AX6UIAutocomplete}\n   */\n  bind(item) {\n    let queIdx;\n    item = jQuery.extend(true, {}, this.config, item);\n\n    if (!item.target) {\n      console.log(info.getError(\"ax6ui-autocomplete\", \"401\", \"bind\"));\n      return this;\n    }\n    item.$target = jQuery(item.target);\n\n    if (!item.id) item.id = item.$target.data(\"data-ax6ui-autocomplete-id\");\n    if (!item.id) {\n      item.id = 'ax6ui-autocomplete-' + AX6UICore.getInstanceId();\n      item.$target.data(\"data-ax6ui-autocomplete-id\", item.id);\n    }\n    item.name = item.$target.attr(\"data-ax6ui-autocomplete\");\n\n    item.options = [];\n    item.selected = [];\n\n    // target attribute data\n    (function (data) {\n      if (U.isObject(data) && !data.error) {\n        item = jQuery.extend(true, item, data);\n      }\n    })(U.parseJson(item.$target.attr(\"data-ax6ui-autocomplete-config\"), true));\n\n    queIdx = U.search(this.queue, function () {\n      return this.id == item.id;\n    });\n\n    if (queIdx === -1) {\n      this.queue.push(item);\n      bindAutocompleteTarget.call(this, this.queue.length - 1);\n    }\n    else {\n      this.queue[queIdx].selected = [];\n      this.queue[queIdx].options = item.options;\n      this.queue[queIdx] = jQuery.extend(true, {}, this.queue[queIdx], item);\n      bindAutocompleteTarget.call(this, queIdx);\n    }\n\n    queIdx = null;\n    return this;\n  }\n\n  /**\n   * open the optionBox of autocomplete\n   * @method\n   * @param {(String|Number|Element)} boundID\n   * @param {Number} [tryCount]\n   * @return {AX6UIAutocomplete}\n   */\n  open(boundID, tryCount) {\n    this.waitOptionsCallback = null;\n\n    /**\n     * open autocomplete from the outside\n     */\n    let queIdx = (U.isNumber(boundID)) ? boundID : getQueIdx.call(this, boundID),\n      item = this.queue[queIdx],\n      data = {},\n      focusTop,\n      selectedOptionEl;\n\n    if (item.$display.attr(\"disabled\")) return this;\n\n    if (this.openTimer) clearTimeout(this.openTimer);\n    if (this.activeautocompleteOptionGroup) {\n      if (this.activeautocompleteQueueIndex == queIdx) {\n        return this;\n      }\n\n      if (tryCount > 2) return this;\n      this.close();\n      this.openTimer = setTimeout((function () {\n        this.open(queIdx, (tryCount || 0) + 1);\n      }).bind(this), this.config.animateTime);\n\n      return this;\n    }\n\n    item.optionFocusIndex = -1; // optionGroup이 열리면 포커스 인덱스 초기화 -1로\n    if (item.selected && item.selected.length > 0) {\n      item.optionSelectedIndex = item.selected[0][\"@findex\"];\n    }\n\n    /// 템플릿에 전달할 오브젝트 선언\n    data.id = item.id;\n    data.theme = item.theme;\n    data.multiple = item.multiple;\n\n    data.lang = item.lang;\n    item.$display.attr(\"data-autocomplete-option-group-opened\", \"true\");\n\n    data.waitOptions = true; // 타이핑값으로 options을 구해야 하므로 대기\n    data.options = [];\n\n    this.activeautocompleteOptionGroup = jQuery(mustache.render(tmpl.optionGroup.call(this, item.columnKeys), data));\n    this.activeautocompleteOptionGroup.find('[data-els=\"content\"]').html(mustache.render(tmpl.options.call(this, item.columnKeys), data));\n    this.activeautocompleteQueueIndex = queIdx;\n\n    alignAutocompleteOptionGroup.call(this, \"append\"); // alignAutocompleteOptionGroup 에서 body append\n\n    if (item.selected && item.selected.length > 0) {\n      selectedOptionEl = this.activeautocompleteOptionGroup.find('[data-option-index=\"' + item.selected[0][\"@index\"] + '\"]');\n      if (selectedOptionEl.get(0)) {\n        focusTop = selectedOptionEl.position().top - this.activeautocompleteOptionGroup.height() / 3;\n        this.activeautocompleteOptionGroup.find('[data-els=\"content\"]').scrollTop(focusTop);\n      }\n    }\n\n    jQuery(window).on(\"click.ax6ui-autocomplete-\" + this.instanceId, (function (e) {\n      e = e || window.event;\n      onBodyClick.call(this, e);\n      U.stopEvent(e);\n    }).bind(this));\n\n    onStateChanged.call(this, item, {\n      self: this,\n      state: \"open\",\n      item: item\n    });\n\n    data = null;\n    focusTop = null;\n    selectedOptionEl = null;\n    return this;\n  }\n\n  /**\n   * @method\n   * @param {(jQueryObject|Element|Number)} _boundID\n   * @param {(String|Array)} _value\n   * @return {AX6UIAutocomplete}\n   * @example\n   * ```js\n   * myAutocomplete.setValue(jQuery('[data-ax6ui-autocomplete=\"autocomplete1\"]'), {value:\"test\", text:\"test\"});\n   * myAutocomplete.setValue(jQuery('[data-ax6ui-autocomplete=\"autocomplete1\"]'), [{value:\"test1\", text:\"test1\"}, {value:\"test2\", text:\"test2\"}]);\n   * myAutocomplete.setValue(jQuery('[data-ax6ui-autocomplete=\"autocomplete1\"]'), null);\n   * ```\n   */\n  setValue(_boundID, _value) {\n    let queIdx = (U.isNumber(_boundID)) ? _boundID : getQueIdx.call(this, _boundID);\n    if (queIdx === -1) {\n      console.log(info.getError(\"ax6ui-autocomplete\", \"402\", \"val\"));\n      return;\n    }\n\n    clearSelected.call(this, queIdx);\n\n    if (U.isArray(_value)) {\n      let _values = U.map(_value, function () {\n        return {value: this};\n      });\n      setSelected.call(this, queIdx, _values, true, {noStateChange: true});\n    }\n    else if (U.isObject(_value)) {\n      setSelected.call(this, queIdx, {value: _value}, true, {noStateChange: true});\n    } else {\n      printLabel.call(this, queIdx);\n    }\n\n    blurLabel.call(this, queIdx);\n    alignAutocompleteDisplay.call(this);\n\n    return this;\n  }\n\n  /**\n   * @method\n   * @param {(jQueryObject|Element|Number)} _boundID\n   * @param {(String|Array)} _text\n   * @return {AX6UIAutocomplete}\n   * @example\n   * ```js\n   * myAutocomplete.setText(jQuery('[data-ax6ui-autocomplete=\"autocomplete1\"]'), \"string\");\n   * myAutocomplete.setText(jQuery('[data-ax6ui-autocomplete=\"autocomplete1\"]'), [\"substring\", \"search\"]);\n   * ```\n   */\n  setText(_boundID, _text) {\n    let queIdx = (U.isNumber(_boundID)) ? _boundID : getQueIdx.call(this, _boundID);\n    if (queIdx === -1) {\n      console.log(info.getError(\"ax6ui-autocomplete\", \"402\", \"val\"));\n      return;\n    }\n\n    this.queue[queIdx].selected = [];\n    clearSelected.call(this, queIdx);\n    setSelected.call(this, queIdx, _text, true, {noStateChange: true});\n    blurLabel.call(this, queIdx);\n    alignAutocompleteDisplay.call(this);\n\n    return this;\n  }\n\n  /**\n   * @method\n   * @param {(jQueryObject|Element|Number)} _boundID\n   * @returns {Array}\n   */\n  getSelectedOption(_boundID) {\n    let queIdx = (U.isNumber(_boundID)) ? _boundID : getQueIdx.call(this, _boundID);\n    if (queIdx === -1) {\n      console.log(info.getError(\"ax6ui-autocomplete\", \"402\", \"val\"));\n      return;\n    }\n    return U.deepCopy(this.queue[queIdx].selected);\n  }\n\n  /**\n   * @method\n   * @return {AX6UIAutocomplete}\n   */\n  close(item) {\n    if (this.closeTimer) clearTimeout(this.closeTimer);\n    if (!this.activeautocompleteOptionGroup) return this;\n\n    item = this.queue[this.activeautocompleteQueueIndex];\n    item.optionFocusIndex = -1;\n    item.$display.removeAttr(\"data-autocomplete-option-group-opened\").trigger(\"focus\");\n\n    this.activeautocompleteOptionGroup.addClass(\"destroy\");\n\n    jQuery(window)\n      .off(\"resize.ax6ui-autocomplete-\" + this.instanceId)\n      .off(\"click.ax6ui-autocomplete-\" + this.instanceId)\n      .off(\"keyup.ax6ui-autocomplete-\" + this.instanceId);\n\n    this.closeTimer = setTimeout((function () {\n      if (this.activeautocompleteOptionGroup) this.activeautocompleteOptionGroup.remove();\n      this.activeautocompleteOptionGroup = null;\n      this.activeautocompleteQueueIndex = -1;\n\n      onStateChanged.call(this, item, {\n        self: this,\n        state: \"close\"\n      });\n\n    }).bind(this), this.config.animateTime);\n    this.waitOptionsCallback = null;\n    return this;\n  }\n\n  /**\n   * @method\n   * @param {(jQueryObject|Element|Number)} _boundID\n   * @return {AX6UIAutocomplete}\n   */\n  blur(_boundID) {\n    let queIdx = (U.isNumber(_boundID)) ? _boundID : getQueIdx.call(this, _boundID);\n    if (queIdx === -1) {\n      console.log(info.getError(\"ax6ui-autocomplete\", \"402\", \"val\"));\n      return;\n    }\n\n    blurLabel.call(this, queIdx);\n    return this;\n  }\n\n  /**\n   * @method\n   * @param {(jQueryObject|Element|Number)} _boundID\n   * @return {AX6UIAutocomplete}\n   */\n  enable(_boundID) {\n    let queIdx = getQueIdx.call(this, _boundID);\n\n    if (typeof queIdx !== \"undefined\") {\n      this.queue[queIdx].disable = false;\n      if (this.queue[queIdx].$display[0]) {\n        this.queue[queIdx].$display.removeAttr(\"disabled\");\n        this.queue[queIdx].$displayLabelInput.removeAttr(\"disabled\");\n      }\n      if (this.queue[queIdx].$select[0]) {\n        this.queue[queIdx].$select.removeAttr(\"disabled\");\n\n      }\n\n      onStateChanged.call(this, this.queue[queIdx], {\n        self: this,\n        state: \"enable\"\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * @method\n   * @param {(jQueryObject|Element|Number)} _boundID\n   * @return {AX6UIAutocomplete}\n   */\n  disable(_boundID) {\n    let queIdx = getQueIdx.call(this, _boundID);\n\n    if (typeof queIdx !== \"undefined\") {\n      this.queue[queIdx].disable = true;\n      if (this.queue[queIdx].$display[0]) {\n        this.queue[queIdx].$display.attr(\"disabled\", \"disabled\");\n        this.queue[queIdx].$displayLabelInput.attr(\"disabled\", \"disabled\");\n      }\n      if (this.queue[queIdx].$select[0]) {\n        this.queue[queIdx].$select.attr(\"disabled\", \"disabled\");\n      }\n\n      onStateChanged.call(this, this.queue[queIdx], {\n        self: this,\n        state: \"disable\"\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * @method\n   * @return {AX6UIAutocomplete}\n   */\n  align() {\n    alignAutocompleteDisplay.call(this);\n    return this;\n  }\n\n}\n\nexport default AX6UIAutocomplete;"]}