tom-select-rails 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tom-select-rails/version.rb +1 -1
  3. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.complete.js +168 -84
  4. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.complete.js.map +1 -1
  5. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.js +132 -59
  6. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.js.map +1 -1
  7. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.popular.js +140 -65
  8. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.popular.js.map +1 -1
  9. data/vendor/assets/javascripts/tom-select-rails/cjs/utils.js +1 -1
  10. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/caret_position/plugin.js +3 -3
  11. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/caret_position/plugin.js.map +1 -1
  12. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/change_listener/plugin.js +1 -1
  13. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/checkbox_options/plugin.js +9 -7
  14. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/checkbox_options/plugin.js.map +1 -1
  15. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/clear_button/plugin.js +3 -3
  16. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/clear_button/plugin.js.map +1 -1
  17. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/drag_drop/plugin.js +1 -1
  18. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/dropdown_header/plugin.js +3 -3
  19. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/dropdown_header/plugin.js.map +1 -1
  20. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/dropdown_input/plugin.js +6 -4
  21. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/dropdown_input/plugin.js.map +1 -1
  22. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/input_autogrow/plugin.js +3 -7
  23. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/input_autogrow/plugin.js.map +1 -1
  24. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/no_active_items/plugin.js +1 -1
  25. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/no_backspace_delete/plugin.js +1 -1
  26. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/optgroup_columns/plugin.js +4 -3
  27. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/optgroup_columns/plugin.js.map +1 -1
  28. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/remove_button/plugin.js +8 -8
  29. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/remove_button/plugin.js.map +1 -1
  30. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/restore_on_backspace/plugin.js +1 -1
  31. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/virtual_scroll/plugin.js +22 -12
  32. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/virtual_scroll/plugin.js.map +1 -1
  33. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.complete.js +168 -84
  34. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.complete.js.map +1 -1
  35. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.js +132 -59
  36. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.js.map +1 -1
  37. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.popular.js +140 -65
  38. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.popular.js.map +1 -1
  39. data/vendor/assets/javascripts/tom-select-rails/esm/utils.js +1 -1
  40. data/vendor/assets/javascripts/tom-select-rails/js/plugins/caret_position.js +3 -3
  41. data/vendor/assets/javascripts/tom-select-rails/js/plugins/caret_position.js.map +1 -1
  42. data/vendor/assets/javascripts/tom-select-rails/js/plugins/change_listener.js +1 -1
  43. data/vendor/assets/javascripts/tom-select-rails/js/plugins/checkbox_options.js +9 -7
  44. data/vendor/assets/javascripts/tom-select-rails/js/plugins/checkbox_options.js.map +1 -1
  45. data/vendor/assets/javascripts/tom-select-rails/js/plugins/clear_button.js +3 -3
  46. data/vendor/assets/javascripts/tom-select-rails/js/plugins/clear_button.js.map +1 -1
  47. data/vendor/assets/javascripts/tom-select-rails/js/plugins/drag_drop.js +1 -1
  48. data/vendor/assets/javascripts/tom-select-rails/js/plugins/dropdown_header.js +3 -3
  49. data/vendor/assets/javascripts/tom-select-rails/js/plugins/dropdown_header.js.map +1 -1
  50. data/vendor/assets/javascripts/tom-select-rails/js/plugins/dropdown_input.js +6 -4
  51. data/vendor/assets/javascripts/tom-select-rails/js/plugins/dropdown_input.js.map +1 -1
  52. data/vendor/assets/javascripts/tom-select-rails/js/plugins/input_autogrow.js +3 -7
  53. data/vendor/assets/javascripts/tom-select-rails/js/plugins/input_autogrow.js.map +1 -1
  54. data/vendor/assets/javascripts/tom-select-rails/js/plugins/no_active_items.js +1 -1
  55. data/vendor/assets/javascripts/tom-select-rails/js/plugins/no_backspace_delete.js +1 -1
  56. data/vendor/assets/javascripts/tom-select-rails/js/plugins/optgroup_columns.js +4 -3
  57. data/vendor/assets/javascripts/tom-select-rails/js/plugins/optgroup_columns.js.map +1 -1
  58. data/vendor/assets/javascripts/tom-select-rails/js/plugins/remove_button.js +8 -8
  59. data/vendor/assets/javascripts/tom-select-rails/js/plugins/remove_button.js.map +1 -1
  60. data/vendor/assets/javascripts/tom-select-rails/js/plugins/restore_on_backspace.js +1 -1
  61. data/vendor/assets/javascripts/tom-select-rails/js/plugins/virtual_scroll.js +22 -12
  62. data/vendor/assets/javascripts/tom-select-rails/js/plugins/virtual_scroll.js.map +1 -1
  63. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.base.js +132 -59
  64. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.base.js.map +1 -1
  65. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.base.min.js +142 -142
  66. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.base.min.js.map +1 -1
  67. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.complete.js +168 -84
  68. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.complete.js.map +1 -1
  69. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.complete.min.js +157 -156
  70. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.complete.min.js.map +1 -1
  71. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.popular.js +140 -65
  72. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.popular.js.map +1 -1
  73. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.popular.min.js +142 -143
  74. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.popular.min.js.map +1 -1
  75. data/vendor/assets/javascripts/tom-select-rails/types/tom-select.d.ts +20 -3
  76. data/vendor/assets/javascripts/tom-select-rails/types/types/core.d.ts +2 -1
  77. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap4.css +3 -7
  78. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap4.css.map +1 -1
  79. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap4.min.css +1 -1
  80. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap4.min.css.map +1 -1
  81. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap5.css +3 -7
  82. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap5.css.map +1 -1
  83. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap5.min.css +1 -1
  84. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap5.min.css.map +1 -1
  85. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.css +7 -11
  86. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.css.map +1 -1
  87. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.default.css +3 -7
  88. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.default.css.map +1 -1
  89. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.default.min.css +1 -1
  90. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.default.min.css.map +1 -1
  91. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.min.css +1 -1
  92. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.min.css.map +1 -1
  93. data/vendor/assets/stylesheets/tom-select-rails/scss/_dropdown.scss +0 -2
  94. data/vendor/assets/stylesheets/tom-select-rails/scss/tom-select.scss +4 -4
  95. metadata +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"tom-select.js","sources":["../../src/contrib/microevent.ts","../../src/contrib/microplugin.ts","../../node_modules/@orchidjs/sifter/lib/diacritics.ts","../../node_modules/@orchidjs/sifter/lib/utils.ts","../../node_modules/@orchidjs/sifter/lib/sifter.ts","../../src/vanilla.ts","../../src/contrib/highlight.ts","../../src/constants.ts","../../src/defaults.ts","../../src/utils.ts","../../src/getSettings.ts","../../src/tom-select.ts"],"sourcesContent":["/**\n * MicroEvent - to make any js object an event emitter\n *\n * - pure javascript - server compatible, browser compatible\n * - dont rely on the browser doms\n * - super simple - you get it immediatly, no mistery, no magic involved\n *\n * @author Jerome Etienne (https://github.com/jeromeetienne)\n */\n\ntype TCallback = (...args:any) => any;\n\n/**\n * Execute callback for each event in space separated list of event names\n *\n */\nfunction forEvents(events:string,callback:(event:string)=>any){\n\tevents.split(/\\s+/).forEach((event) =>{\n\t\tcallback(event);\n\t});\n}\n\nexport default class MicroEvent{\n\n\tpublic _events: {[key:string]:TCallback[]};\n\n\tconstructor(){\n\t\tthis._events = {};\n\t}\n\n\ton(events:string, fct:TCallback){\n\t\tforEvents(events,(event) => {\n\t\t\tthis._events[event] = this._events[event] || [];\n\t\t\tthis._events[event].push(fct);\n\t\t});\n\t}\n\n\toff(events:string, fct:TCallback){\n\t\tvar n = arguments.length;\n\t\tif( n === 0 ){\n\t\t\tthis._events = {};\n\t\t\treturn;\n\t\t}\n\n\t\tforEvents(events,(event) => {\n\n\t\t\tif (n === 1) return delete this._events[event];\n\n\t\t\tif (event in this._events === false) return;\n\t\t\tthis._events[event].splice(this._events[event].indexOf(fct), 1);\n\t\t});\n\t}\n\n\ttrigger(events:string, ...args:any){\n\t\tvar self = this;\n\n\t\tforEvents(events,(event) => {\n\t\t\tif(event in self._events === false) return;\n\t\t\tfor( let fct of self._events[event] ){\n\t\t\t\tfct.apply(self, args );\n\t\t\t}\n\t\t});\n\t}\n};\n","/**\n * microplugin.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\ntype TSettings = {\n\t[key:string]:any\n}\n\ntype TPlugins = {\n\tnames: string[],\n\tsettings: TSettings,\n\trequested: {[key:string]:boolean},\n\tloaded: {[key:string]:any}\n};\n\nexport type TPluginItem = {name:string,options:{}};\nexport type TPluginHash = {[key:string]:{}};\n\n\n\n\nexport default function MicroPlugin(Interface: any ){\n\n\tInterface.plugins = {};\n\n\treturn class extends Interface{\n\n\t\tpublic plugins:TPlugins = {\n\t\t\tnames : [],\n\t\t\tsettings : {},\n\t\t\trequested : {},\n\t\t\tloaded : {}\n\t\t};\n\n\t\t/**\n\t\t * Registers a plugin.\n\t\t *\n\t\t * @param {function} fn\n\t\t */\n\t\tstatic define(name:string, fn:(this:any,settings:TSettings)=>any){\n\t\t\tInterface.plugins[name] = {\n\t\t\t\t'name' : name,\n\t\t\t\t'fn' : fn\n\t\t\t};\n\t\t}\n\n\n\t\t/**\n\t\t * Initializes the listed plugins (with options).\n\t\t * Acceptable formats:\n\t\t *\n\t\t * List (without options):\n\t\t * ['a', 'b', 'c']\n\t\t *\n\t\t * List (with options):\n\t\t * [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t\t *\n\t\t * Hash (with options):\n\t\t * {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t\t *\n\t\t * @param {array|object} plugins\n\t\t */\n\t\tinitializePlugins(plugins:string[]|TPluginItem[]|TPluginHash) {\n\t\t\tvar key, name;\n\t\t\tconst self = this;\n\t\t\tconst queue:string[] = [];\n\n\t\t\tif (Array.isArray(plugins)) {\n\t\t\t\tplugins.forEach((plugin:string|TPluginItem)=>{\n\t\t\t\t\tif (typeof plugin === 'string') {\n\t\t\t\t\t\tqueue.push(plugin);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.plugins.settings[plugin.name] = plugin.options;\n\t\t\t\t\t\tqueue.push(plugin.name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (plugins) {\n\t\t\t\tfor (key in plugins) {\n\t\t\t\t\tif (plugins.hasOwnProperty(key)) {\n\t\t\t\t\t\tself.plugins.settings[key] = plugins[key];\n\t\t\t\t\t\tqueue.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile( name = queue.shift() ){\n\t\t\t\tself.require(name);\n\t\t\t}\n\t\t}\n\n\t\tloadPlugin(name:string) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\t\t\tvar plugin = Interface.plugins[name];\n\n\t\t\tif (!Interface.plugins.hasOwnProperty(name)) {\n\t\t\t\tthrow new Error('Unable to find \"' + name + '\" plugin');\n\t\t\t}\n\n\t\t\tplugins.requested[name] = true;\n\t\t\tplugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t\t\tplugins.names.push(name);\n\t\t}\n\n\t\t/**\n\t\t * Initializes a plugin.\n\t\t *\n\t\t */\n\t\trequire(name:string) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\n\t\t\tif (!self.plugins.loaded.hasOwnProperty(name)) {\n\t\t\t\tif (plugins.requested[name]) {\n\t\t\t\t\tthrow new Error('Plugin has circular dependency (\"' + name + '\")');\n\t\t\t\t}\n\t\t\t\tself.loadPlugin(name);\n\t\t\t}\n\n\t\t\treturn plugins.loaded[name];\n\t\t}\n\n\t};\n\n}\n","\ntype TDiacraticList = {[key:string]:string};\n\n// https://github.com/andrewrk/node-diacritics/blob/master/index.js\n\nvar latin_pat:RegExp;\nconst accent_pat = '[\\u0300-\\u036F\\u{b7}\\u{2be}]'; // \\u{2bc}\nconst accent_reg = new RegExp(accent_pat,'g');\nvar diacritic_patterns:TDiacraticList;\n\nconst latin_convert:TDiacraticList = {\n\t'æ': 'ae',\n\t'ⱥ': 'a',\n\t'ø': 'o',\n};\n\nconst convert_pat = new RegExp(Object.keys(latin_convert).join('|'),'g');\n\n\nexport const DIACRITICS:TDiacraticList = {\n\t\" \":\" \",\n\t0:\"߀\",\n\tA:\"ⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ\",\n\tAA:\"Ꜳ\",\n\tAE:\"ÆǼǢ\",\n\tAO:\"Ꜵ\",\n\tAU:\"Ꜷ\",\n\tAV:\"ꜸꜺ\",\n\tAY:\"Ꜽ\",\n\tB:\"ⒷBḂḄḆɃƁ\",\n\tC:\"ⒸCꜾḈĆCĈĊČÇƇȻ\",\n\tD:\"ⒹDḊĎḌḐḒḎĐƊƉᴅꝹ\",\n\tDh:\"Ð\",\n\tDZ:\"DZDŽ\",\n\tDz:\"DzDž\",\n\tE:\"ɛⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎᴇ\",\n\tF:\"ꝼⒻFḞƑꝻ\",\n\tG:\"ⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾɢ\",\n\tH:\"ⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ\",\n\tI:\"ⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ\",\n\tJ:\"ⒿJĴɈȷ\",\n\tK:\"ⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ\",\n\tL:\"ⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ\",\n\tLJ:\"LJ\",\n\tLj:\"Lj\",\n\tM:\"ⓂMḾṀṂⱮƜϻ\",\n\tN:\"ꞤȠⓃNǸŃÑṄŇṆŅṊṈƝꞐᴎ\",\n\tNJ:\"NJ\",\n\tNj:\"Nj\",\n\tO:\"ⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ\",\n\tOE:\"Œ\",\n\tOI:\"Ƣ\",\n\tOO:\"Ꝏ\",\n\tOU:\"Ȣ\",\n\tP:\"ⓅPṔṖƤⱣꝐꝒꝔ\",\n\tQ:\"ⓆQꝖꝘɊ\",\n\tR:\"ⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ\",\n\tS:\"ⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ\",\n\tT:\"ⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ\",\n\tTh:\"Þ\",\n\tTZ:\"Ꜩ\",\n\tU:\"ⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ\",\n\tV:\"ⓋVṼṾƲꝞɅ\",\n\tVY:\"Ꝡ\",\n\tW:\"ⓌWẀẂŴẆẄẈⱲ\",\n\tX:\"ⓍXẊẌ\",\n\tY:\"ⓎYỲÝŶỸȲẎŸỶỴƳɎỾ\",\n\tZ:\"ⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ\",\n\ta:\"ⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑ\",\n\taa:\"ꜳ\",\n\tae:\"æǽǣ\",\n\tao:\"ꜵ\",\n\tau:\"ꜷ\",\n\tav:\"ꜹꜻ\",\n\tay:\"ꜽ\",\n\tb:\"ⓑbḃḅḇƀƃɓƂ\",\n\tc:\"cⓒćĉċčçḉƈȼꜿↄ\",\n\td:\"ⓓdḋďḍḑḓḏđƌɖɗƋᏧԁꞪ\",\n\tdh:\"ð\",\n\tdz:\"dzdž\",\n\te:\"ⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇǝ\",\n\tf:\"ⓕfḟƒ\",\n\tff:\"ff\",\n\tfi:\"fi\",\n\tfl:\"fl\",\n\tffi:\"ffi\",\n\tffl:\"ffl\",\n\tg:\"ⓖgǵĝḡğġǧģǥɠꞡꝿᵹ\",\n\th:\"ⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ\",\n\thv:\"ƕ\",\n\ti:\"ⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı\",\n\tj:\"ⓙjĵǰɉ\",\n\tk:\"ⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ\",\n\tl:\"ⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇɭ\",\n\tlj:\"lj\",\n\tm:\"ⓜmḿṁṃɱɯ\",\n\tn:\"ⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥлԉ\",\n\tnj:\"nj\",\n\to:\"ⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿꝋꝍɵɔᴑ\",\n\toe:\"œ\",\n\toi:\"ƣ\",\n\too:\"ꝏ\",\n\tou:\"ȣ\",\n\tp:\"ⓟpṕṗƥᵽꝑꝓꝕρ\",\n\tq:\"ⓠqɋꝗꝙ\",\n\tr:\"ⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ\",\n\ts:\"ⓢsśṥŝṡšṧṣṩșşȿꞩꞅẛʂ\",\n\tss:\"ß\",\n\tt:\"ⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ\",\n\tth:\"þ\",\n\ttz:\"ꜩ\",\n\tu:\"ⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ\",\n\tv:\"ⓥvṽṿʋꝟʌ\",\n\tvy:\"ꝡ\",\n\tw:\"ⓦwẁẃŵẇẅẘẉⱳ\",\n\tx:\"ⓧxẋẍ\",\n\ty:\"ⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ\",\n\tz:\"ⓩzźẑżžẓẕƶȥɀⱬꝣ\"\n}\n\n/**\n * code points generated from toCodePoints();\n * removed 65339 to 65345\n */\nexport const code_points = [\n\t[ 67, 67 ],\n\t[ 160, 160 ],\n\t[ 192, 438 ],\n\t[ 452, 652 ],\n\t[ 961, 961 ],\n\t[ 1019, 1019 ],\n\t[ 1083, 1083 ],\n\t[ 1281, 1289 ],\n\t[ 1984, 1984 ],\n\t[ 5095, 5095 ],\n\t[ 7429, 7441 ],\n\t[ 7545, 7549 ],\n\t[ 7680, 7935 ],\n\t[ 8580, 8580 ],\n\t[ 9398, 9449 ],\n\t[ 11360, 11391 ],\n\t[ 42792, 42793 ],\n\t[ 42802, 42851 ],\n\t[ 42873, 42897 ],\n\t[ 42912, 42922 ],\n\t[ 64256, 64260 ],\n\t[ 65313, 65338 ],\n\t[ 65345, 65370 ]\n];\n\n/**\n * Remove accents\n * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n *\n */\nexport const asciifold = (str:string):string => {\n\treturn str\n\t\t.normalize('NFKD')\n\t\t.replace(accent_reg, '')\n\t\t.toLowerCase()\n\t\t.replace(convert_pat,function(foreignletter) {\n\t\t\treturn latin_convert[foreignletter];\n\t\t});\n};\n\n\n/**\n * Convert list of diacritics to array of code points\n *\n */\n// @ts-ignore\nfunction toCodePoints(tolerance=8){\n\tvar char_codes:number[] = [];\n\n\tfor( let letter in DIACRITICS ){\n\t\tlet _diacritics = DIACRITICS[letter];\n\t\tfor( let n = 0; n < _diacritics.length; n++ ){\n\t\t\tvar code_point = _diacritics.codePointAt(n);\n\t\t\tif( code_point ) char_codes.push( code_point );\n\t\t}\n\t}\n\n\t//https://stackoverflow.com/questions/40431572/is-there-a-simple-way-to-group-js-array-values-by-range\n\tchar_codes.sort((a, b) => a - b);\n\tvar accumulator: number[][] = [];\n\tchar_codes.reduce(function (accumulator, currentValue, index, source) {\n\n\t\tif( !index ){\n\t\t\taccumulator.push( [currentValue,currentValue] );\n\n\t\t}else if( currentValue - source[index - 1] > tolerance ){\n\t\t\taccumulator.push( [currentValue,currentValue] );\n\n\t\t}else{\n\n\t\t\tlet range = accumulator.pop();\n\t\t\tif( range ){\n\t\t\t\taccumulator.push( [range[0],currentValue]);\n\t\t\t}\n\t\t}\n\n\t\treturn accumulator;\n\t}, accumulator);\n\n}\n\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n *\n */\nexport const arrayToPattern = (chars:string[],glue:string='|'):string =>{\n\t\n\tif( chars.length == 1 ){\n\t\treturn chars[0];\n\t}\n\t\n\tvar longest = 1;\n\tchars.forEach((a)=>{longest = Math.max(longest,a.length)});\n\n\tif( longest == 1 ){\n\t\treturn '['+chars.join('')+']';\n\t}\n\n\treturn '(?:'+chars.join(glue)+')';\t\n};\n\n/**\n * Get all possible combinations of substrings that add up to the given string\n * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n *\n */\nexport const allSubstrings = (input:string):string[][] => {\n\n if( input.length === 1) return [[input]];\n\n var result:string[][] = [];\n allSubstrings(input.substring(1)).forEach(function(subresult) {\n var tmp = subresult.slice(0);\n tmp[0] = input.charAt(0) + tmp[0];\n result.push(tmp);\n\n tmp = subresult.slice(0);\n tmp.unshift(input.charAt(0));\n result.push(tmp);\n });\n \n return result;\n}\n\n/**\n * Generate a list of diacritics from the list of code points\n *\n */\nexport const generateDiacritics = ():TDiacraticList => {\t\n\n\tvar diacritics:{[key:string]:string[]} = {};\n\tcode_points.forEach((code_range)=>{\n\n\t\tfor(let i = code_range[0]; i <= code_range[1]; i++){\n\t\t\t\n\t\t\tlet diacritic\t= String.fromCharCode(i);\n\t\t\tlet\tlatin\t\t= asciifold(diacritic);\n\n\t\t\tif( latin == diacritic.toLowerCase() ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif( !(latin in diacritics) ){\n\t\t\t\tdiacritics[latin] = [latin];\n\t\t\t}\n\t\t\t\n\t\t\tvar patt = new RegExp( arrayToPattern(diacritics[latin]),'iu');\n\t\t\tif( diacritic.match(patt) ){\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tdiacritics[latin].push(diacritic);\n\t\t}\n\t});\n\t\t\n\tvar latin_chars = Object.keys(diacritics);\n\t\n\t\n\t// latin character pattern\n\t// match longer substrings first\n\tlatin_chars\t\t= latin_chars.sort((a, b) => b.length - a.length );\n\tlatin_pat\t\t= new RegExp('('+ arrayToPattern(latin_chars) + accent_pat + '*)','g');\n\t\n\t\n\t// build diacritic patterns\n\t// ae needs: \n\t//\t(?:(?:ae|Æ|Ǽ|Ǣ)|(?:A|Ⓐ|A...)(?:E|ɛ|Ⓔ...))\n\tvar diacritic_patterns:TDiacraticList = {};\n\tlatin_chars.sort((a,b) => a.length -b.length).forEach((latin)=>{\n\t\t\n\t\tvar substrings\t= allSubstrings(latin);\n\t\tvar pattern = substrings.map((sub_pat)=>{\n\t\t\t\n\t\t\tsub_pat = sub_pat.map((l)=>{\n\t\t\t\tif( diacritics.hasOwnProperty(l) ){\n\t\t\t\t\treturn arrayToPattern(diacritics[l]);\n\t\t\t\t}\n\t\t\t\treturn l;\n\t\t\t});\n\t\t\t\n\t\t\treturn arrayToPattern(sub_pat,'');\n\t\t});\n\t\t\n\t\tdiacritic_patterns[latin] = arrayToPattern(pattern);\t\t\n\t});\n\t\t\t\n\treturn diacritic_patterns;\n}\n\n/**\n * Expand a regular expression pattern to include diacritics\n * \teg /a/ becomes /aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑAⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ/\n *\n */\nexport const diacriticRegexPoints = (regex:string):string => {\n\n\tif( diacritic_patterns === undefined ){\n\t\tdiacritic_patterns = generateDiacritics();\n\t}\n\t\n\tconst decomposed\t\t= regex.normalize('NFKD').toLowerCase();\n\t\n\treturn decomposed.split(latin_pat).map((part:string)=>{\n\t\t\n\t\tif( part == '' ){\n\t\t\treturn '';\n\t\t}\n\t\t\n\t\t// \"ffl\" or \"ffl\"\n\t\tconst no_accent = asciifold(part);\t\t\t\t\n\t\tif( diacritic_patterns.hasOwnProperty(no_accent) ){\n\t\t\treturn diacritic_patterns[no_accent];\n\t\t}\n\t\t\n\t\t// 'أهلا' (\\u{623}\\u{647}\\u{644}\\u{627}) or 'أهلا' (\\u{627}\\u{654}\\u{647}\\u{644}\\u{627})\n\t\tconst composed_part = part.normalize('NFC');\n\t\tif( composed_part != part ){\n\t\t\treturn arrayToPattern([part,composed_part]);\n\t\t}\n\t\t\t\t\n\t\treturn part;\n\t}).join('');\n\t\n}\n","\n// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport { asciifold } from './diacritics.ts';\n\n// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport * as T from './types.ts';\n\n\n/**\n * A property getter resolving dot-notation\n * @param {Object} obj The root object to fetch property on\n * @param {String} name The optionally dotted property name to fetch\n * @return {Object} The resolved property value\n */\nexport const getAttr = (obj:{[key:string]:any}, name:string ) => {\n if (!obj ) return;\n return obj[name];\n};\n\n/**\n * A property getter resolving dot-notation\n * @param {Object} obj The root object to fetch property on\n * @param {String} name The optionally dotted property name to fetch\n * @return {Object} The resolved property value\n */\nexport const getAttrNesting = (obj:{[key:string]:any}, name:string ) => {\n if (!obj ) return;\n var part, names = name.split(\".\");\n\twhile( (part = names.shift()) && (obj = obj[part]));\n return obj;\n};\n\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\nexport const scoreValue = (value:string, token:T.Token, weight:number ):number => {\n\tvar score, pos;\n\n\tif (!value) return 0;\n\n\tvalue = value + '';\n\tpos = value.search(token.regex);\n\tif (pos === -1) return 0;\n\n\tscore = token.string.length / value.length;\n\tif (pos === 0) score += 0.5;\n\n\treturn score * weight;\n};\n\n/**\n *\n * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n */\nexport const escape_regex = (str:string):string => {\t\n\treturn (str + '').replace(/([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])/gu, '\\\\$1');\n};\n\n\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\nexport const propToArray = (obj:{[key:string]:any}, key:string) => {\n\tvar value = obj[key];\n\t\n\tif( typeof value == 'function' ) return value;\n\t\n\tif( value && !Array.isArray(value) ){\n\t\tobj[key] = [value];\n\t}\n}\n\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:number|string)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nexport const cmp = (a:number|string, b:number|string) => {\n\tif (typeof a === 'number' && typeof b === 'number') {\n\t\treturn a > b ? 1 : (a < b ? -1 : 0);\n\t}\n\ta = asciifold(a + '').toLowerCase();\n\tb = asciifold(b + '').toLowerCase();\n\tif (a > b) return 1;\n\tif (b > a) return -1;\n\treturn 0;\n};\n","/**\n * sifter.js\n * Copyright (c) 2013–2020 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\n // @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport { scoreValue, getAttr, getAttrNesting, escape_regex, propToArray, iterate, cmp } from './utils.ts';\n// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport { diacriticRegexPoints } from './diacritics.ts';\n// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport * as T from 'types.ts';\n\nexport default class Sifter{\n\n\tpublic items; // []|{};\n\tpublic settings: T.Settings;\n\n\t/**\n\t * Textually searches arrays and hashes of objects\n\t * by property (or multiple properties). Designed\n\t * specifically for autocomplete.\n\t *\n\t */\n\tconstructor(items:any, settings:T.Settings) {\n\t\tthis.items = items;\n\t\tthis.settings = settings || {diacritics: true};\n\t};\n\n\t/**\n\t * Splits a search string into an array of individual\n\t * regexps to be used to match results.\n\t *\n\t */\n\ttokenize(query:string, respect_word_boundaries?:boolean, weights?:T.Weights ):T.Token[] {\n\t\tif (!query || !query.length) return [];\n\n\t\tconst tokens:T.Token[]\t= [];\n\t\tconst words\t\t\t\t= query.split(/\\s+/);\n\t\tvar field_regex:RegExp;\n\n\t\tif( weights ){\n\t\t\tfield_regex = new RegExp( '^('+ Object.keys(weights).map(escape_regex).join('|')+')\\:(.*)$');\n\t\t}\n\n\t\twords.forEach((word:string) => {\n\t\t\tlet field_match;\n\t\t\tlet field:null|string\t= null;\n\t\t\tlet regex:null|string\t= null;\n\n\t\t\t// look for \"field:query\" tokens\n\t\t\tif( field_regex && (field_match = word.match(field_regex)) ){\n\t\t\t\tfield\t= field_match[1];\n\t\t\t\tword\t= field_match[2];\n\t\t\t}\n\n\t\t\tif( word.length > 0 ){\n\t\t\t\tregex = escape_regex(word);\n\t\t\t\tif( this.settings.diacritics ){\n\t\t\t\t\tregex = diacriticRegexPoints(regex);\n\t\t\t\t}\n\t\t\t\tif( respect_word_boundaries ) regex = \"\\\\b\"+regex;\n\t\t\t}\n\n\t\t\ttokens.push({\n\t\t\t\tstring : word,\n\t\t\t\tregex : regex ? new RegExp(regex,'iu') : null,\n\t\t\t\tfield : field,\n\t\t\t});\n\t\t});\n\n\t\treturn tokens;\n\t};\n\n\n\t/**\n\t * Returns a function to be used to score individual results.\n\t *\n\t * Good matches will have a higher score than poor matches.\n\t * If an item is not a match, 0 will be returned by the function.\n\t *\n\t * @returns {function}\n\t */\n\tgetScoreFunction(query:string, options:T.Options ){\n\t\tvar search = this.prepareSearch(query, options);\n\t\treturn this._getScoreFunction(search);\n\t}\n\n\t_getScoreFunction(search:T.PrepareObj ){\n\t\tconst tokens\t\t= search.tokens,\n\t\ttoken_count\t\t\t= tokens.length;\n\n\t\tif (!token_count) {\n\t\t\treturn function() { return 0; };\n\t\t}\n\n\t\tconst fields\t= search.options.fields,\n\t\tweights\t\t\t= search.weights,\n\t\tfield_count\t\t= fields.length,\n\t\tgetAttrFn\t\t= search.getAttrFn;\n\n\t\tif (!field_count) {\n\t\t\treturn function() { return 1; };\n\t\t}\n\n\n\t\t/**\n\t\t * Calculates the score of an object\n\t\t * against the search query.\n\t\t *\n\t\t */\n\t\tconst scoreObject = (function() {\n\n\n\t\t\tif (field_count === 1) {\n\t\t\t\treturn function(token:T.Token, data:{}) {\n\t\t\t\t\tconst field = fields[0].field;\n\t\t\t\t\treturn scoreValue(getAttrFn(data, field), token, weights[field]);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn function(token:T.Token, data:{}) {\n\t\t\t\tvar sum = 0;\n\n\t\t\t\t// is the token specific to a field?\n\t\t\t\tif( token.field ){\n\n\t\t\t\t\tconst value = getAttrFn(data, token.field);\n\n\t\t\t\t\tif( !token.regex && value ){\n\t\t\t\t\t\tsum += (1/field_count);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tsum += scoreValue(value, token, 1);\n\t\t\t\t\t}\n\n\n\n\t\t\t\t}else{\n\t\t\t\t\titerate(weights, (weight:number, field:string) => {\n\t\t\t\t\t\tsum += scoreValue(getAttrFn(data, field), token, weight);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn sum / field_count;\n\t\t\t};\n\t\t})();\n\n\t\tif (token_count === 1) {\n\t\t\treturn function(data:{}) {\n\t\t\t\treturn scoreObject(tokens[0], data);\n\t\t\t};\n\t\t}\n\n\t\tif (search.options.conjunction === 'and') {\n\t\t\treturn function(data:{}) {\n\t\t\t\tvar i = 0, score, sum = 0;\n\t\t\t\tfor (; i < token_count; i++) {\n\t\t\t\t\tscore = scoreObject(tokens[i], data);\n\t\t\t\t\tif (score <= 0) return 0;\n\t\t\t\t\tsum += score;\n\t\t\t\t}\n\t\t\t\treturn sum / token_count;\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(data:{}) {\n\t\t\t\tvar sum = 0;\n\t\t\t\titerate(tokens,(token:T.Token)=>{\n\t\t\t\t\tsum += scoreObject(token, data);\n\t\t\t\t});\n\t\t\t\treturn sum / token_count;\n\t\t\t};\n\t\t}\n\t};\n\n\t/**\n\t * Returns a function that can be used to compare two\n\t * results, for sorting purposes. If no sorting should\n\t * be performed, `null` will be returned.\n\t *\n\t * @return function(a,b)\n\t */\n\tgetSortFunction(query:string, options:T.Options) {\n\t\tvar search = this.prepareSearch(query, options);\n\t\treturn this._getSortFunction(search);\n\t}\n\n\t_getSortFunction(search:T.PrepareObj){\n\t\tvar i, n, implicit_score;\n\n\t\tconst self\t= this,\n\t\toptions\t\t= search.options,\n\t\tsort\t\t= (!search.query && options.sort_empty) ? options.sort_empty : options.sort,\n\t\tsort_flds:T.Sort[]\t\t= [],\n\t\tmultipliers:number[]\t= [];\n\n\n\t\tif( typeof sort == 'function' ){\n\t\t\treturn sort.bind(this);\n\t\t}\t\t\t\n\n\t\t/**\n\t\t * Fetches the specified sort field value\n\t\t * from a search result item.\n\t\t *\n\t\t */\n\t\tconst get_field = function(name:string, result:T.ResultItem):string|number {\n\t\t\tif (name === '$score') return result.score;\n\t\t\treturn search.getAttrFn(self.items[result.id], name);\n\t\t};\n\n\t\t// parse options\n\t\tif (sort) {\n\t\t\tfor (i = 0, n = sort.length; i < n; i++) {\n\t\t\t\tif (search.query || sort[i].field !== '$score') {\n\t\t\t\t\tsort_flds.push(sort[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// the \"$score\" field is implied to be the primary\n\t\t// sort field, unless it's manually specified\n\t\tif (search.query) {\n\t\t\timplicit_score = true;\n\t\t\tfor (i = 0, n = sort_flds.length; i < n; i++) {\n\t\t\t\tif (sort_flds[i].field === '$score') {\n\t\t\t\t\timplicit_score = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (implicit_score) {\n\t\t\t\tsort_flds.unshift({field: '$score', direction: 'desc'});\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0, n = sort_flds.length; i < n; i++) {\n\t\t\t\tif (sort_flds[i].field === '$score') {\n\t\t\t\t\tsort_flds.splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, n = sort_flds.length; i < n; i++) {\n\t\t\tmultipliers.push(sort_flds[i].direction === 'desc' ? -1 : 1);\n\t\t}\n\n\t\t// build function\n\t\tconst sort_flds_count = sort_flds.length;\n\t\tif (!sort_flds_count) {\n\t\t\treturn null;\n\t\t} else if (sort_flds_count === 1) {\n\t\t\tconst sort_fld = sort_flds[0].field;\n\t\t\tconst multiplier = multipliers[0];\n\t\t\treturn function(a:T.ResultItem, b:T.ResultItem) {\n\t\t\t\treturn multiplier * cmp(\n\t\t\t\t\tget_field(sort_fld, a),\n\t\t\t\t\tget_field(sort_fld, b)\n\t\t\t\t);\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(a:T.ResultItem, b:T.ResultItem) {\n\t\t\t\tvar i, result, field;\n\t\t\t\tfor (i = 0; i < sort_flds_count; i++) {\n\t\t\t\t\tfield = sort_flds[i].field;\n\t\t\t\t\tresult = multipliers[i] * cmp(\n\t\t\t\t\t\tget_field(field, a),\n\t\t\t\t\t\tget_field(field, b)\n\t\t\t\t\t);\n\t\t\t\t\tif (result) return result;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t};\n\t\t}\n\t};\n\n\t/**\n\t * Parses a search query and returns an object\n\t * with tokens and fields ready to be populated\n\t * with results.\n\t *\n\t */\n\tprepareSearch(query:string, optsUser:Partial<T.Options>):T.PrepareObj {\n\t\tconst weights:T.Weights = {};\n\t\tvar options\t\t= Object.assign({},optsUser);\n\n\t\tpropToArray(options,'sort');\n\t\tpropToArray(options,'sort_empty');\n\n\t\t// convert fields to new format\n\t\tif( options.fields ){\n\t\t\tpropToArray(options,'fields');\n\t\t\tconst fields:T.Field[] = [];\n\t\t\toptions.fields.forEach((field:string|T.Field) => {\n\t\t\t\tif( typeof field == 'string' ){\n\t\t\t\t\tfield = {field:field,weight:1};\n\t\t\t\t}\n\t\t\t\tfields.push(field);\n\t\t\t\tweights[field.field] = ('weight' in field) ? field.weight : 1;\n\t\t\t});\n\t\t\toptions.fields = fields;\n\t\t}\n\n\n\t\treturn {\n\t\t\toptions\t\t: options,\n\t\t\tquery\t\t: query.toLowerCase().trim(),\n\t\t\ttokens\t\t: this.tokenize(query, options.respect_word_boundaries, weights),\n\t\t\ttotal\t\t: 0,\n\t\t\titems\t\t: [],\n\t\t\tweights\t\t: weights,\n\t\t\tgetAttrFn\t: (options.nesting) ? getAttrNesting : getAttr,\n\t\t};\n\t};\n\n\t/**\n\t * Searches through all items and returns a sorted array of matches.\n\t *\n\t */\n\tsearch(query:string, options:T.Options) : T.PrepareObj {\n\t\tvar self = this, score, search:T.PrepareObj;\n\n\t\tsearch = this.prepareSearch(query, options);\n\t\toptions = search.options;\n\t\tquery = search.query;\n\n\t\t// generate result scoring function\n\t\tconst fn_score = options.score || self._getScoreFunction(search);\n\n\t\t// perform search and sort\n\t\tif (query.length) {\n\t\t\titerate(self.items, (item:T.ResultItem, id:string|number) => {\n\t\t\t\tscore = fn_score(item);\n\t\t\t\tif (options.filter === false || score > 0) {\n\t\t\t\t\tsearch.items.push({'score': score, 'id': id});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\titerate(self.items, (_:T.ResultItem, id:string|number) => {\n\t\t\t\tsearch.items.push({'score': 1, 'id': id});\n\t\t\t});\n\t\t}\n\n\t\tconst fn_sort = self._getSortFunction(search);\n\t\tif (fn_sort) search.items.sort(fn_sort);\n\n\t\t// apply limits\n\t\tsearch.total = search.items.length;\n\t\tif (typeof options.limit === 'number') {\n\t\t\tsearch.items = search.items.slice(0, options.limit);\n\t\t}\n\n\t\treturn search;\n\t};\n}\n","\nimport { iterate } from '@orchidjs/sifter/lib/utils';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tlet div = document.createElement('div');\n\t\tdiv.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn div.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\11\\12\\14\\15\\40]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n","/**\n * highlight v3 | MIT license | Johann Burkard <jb@eaio.com>\n * Highlights arbitrary terms in a node.\n *\n * - Modified by Marshal <beatgates@gmail.com> 2011-6-24 (added regex)\n * - Modified by Brian Reavis <brian@thirdroute.com> 2012-8-27 (cleanup)\n */\n\nimport {replaceNode} from '../vanilla';\n\n\nexport const highlight = (element:HTMLElement, regex:string|RegExp) => {\n\n\tif( regex === null ) return;\n\n\t// convet string to regex\n\tif( typeof regex === 'string' ){\n\n\t\tif( !regex.length ) return;\n\t\tregex = new RegExp(regex, 'i');\n\t}\n\n\n\t// Wrap matching part of text node with highlighting <span>, e.g.\n\t// Soccer -> <span class=\"highlight\">Soc</span>cer for regex = /soc/i\n\tconst highlightText = ( node:Text ):number => {\n\n\t\tvar match = node.data.match(regex);\n\t\tif( match && node.data.length > 0 ){\n\t\t\tvar spannode\t\t= document.createElement('span');\n\t\t\tspannode.className\t= 'highlight';\n\t\t\tvar middlebit\t\t= node.splitText(match.index as number);\n\n\t\t\tmiddlebit.splitText(match[0].length);\n\t\t\tvar middleclone\t\t= middlebit.cloneNode(true);\n\n\t\t\tspannode.appendChild(middleclone);\n\t\t\treplaceNode(middlebit, spannode);\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 0;\n\t};\n\n\t// Recurse element node, looking for child text nodes to highlight, unless element\n\t// is childless, <script>, <style>, or already highlighted: <span class=\"hightlight\">\n\tconst highlightChildren = ( node:Element ):void => {\n\t\tif( node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && ( node.className !== 'highlight' || node.tagName !== 'SPAN' ) ){\n\t\t\tfor (var i = 0; i < node.childNodes.length; ++i) {\n\t\t\t\ti += highlightRecursive(node.childNodes[i]);\n\t\t\t}\n\t\t}\n\t};\n\n\n\tconst highlightRecursive = ( node:Node|Element ):number => {\n\n\t\tif( node.nodeType === 3 ){\n\t\t\treturn highlightText(node as Text);\n\t\t}\n\n\t\thighlightChildren(node as Element);\n\n\t\treturn 0;\n\t};\n\n\thighlightRecursive( element );\n};\n\n/**\n * removeHighlight fn copied from highlight v5 and\n * edited to remove with(), pass js strict mode, and use without jquery\n */\nexport const removeHighlight = (el:HTMLElement) => {\n\tvar elements = el.querySelectorAll(\"span.highlight\");\n\tArray.prototype.forEach.call(elements, function(el:HTMLElement){\n\t\tvar parent = el.parentNode as Node;\n\t\tparent.replaceChild(el.firstChild as Node, el);\n\t\tparent.normalize();\n\t});\n};\n","export const KEY_A\t\t\t\t= 65;\nexport const KEY_RETURN\t\t\t= 13;\nexport const KEY_ESC\t\t\t= 27;\nexport const KEY_LEFT\t\t\t= 37;\nexport const KEY_UP\t\t\t\t= 38;\nexport const KEY_RIGHT\t\t\t= 39;\nexport const KEY_DOWN\t\t\t= 40;\nexport const KEY_BACKSPACE\t\t= 8;\nexport const KEY_DELETE\t\t\t= 46;\nexport const KEY_TAB\t\t\t= 9;\n\nexport const IS_MAC \t\t= typeof navigator === 'undefined' ? false : /Mac/.test(navigator.userAgent);\nexport const KEY_SHORTCUT\t\t= IS_MAC ? 'metaKey' : 'ctrlKey'; // ctrl key or apple key for ma\n","\nexport default {\n\toptions: [],\n\toptgroups: [],\n\n\tplugins: [],\n\tdelimiter: ',',\n\tsplitOn: null, // regexp or string for splitting up values from a paste command\n\tpersist: true,\n\tdiacritics: true,\n\tcreate: null,\n\tcreateOnBlur: false,\n\tcreateFilter: null,\n\thighlight: true,\n\topenOnFocus: true,\n\tshouldOpen: null,\n\tmaxOptions: 50,\n\tmaxItems: null,\n\thideSelected: null,\n\tduplicates: false,\n\taddPrecedence: false,\n\tselectOnTab: false,\n\tpreload: null,\n\tallowEmptyOption: false,\n\t//closeAfterSelect: false,\n\n\tloadThrottle: 300,\n\tloadingClass: 'loading',\n\n\tdataAttr: null, //'data-data',\n\toptgroupField: 'optgroup',\n\tvalueField: 'value',\n\tlabelField: 'text',\n\tdisabledField: 'disabled',\n\toptgroupLabelField: 'label',\n\toptgroupValueField: 'value',\n\tlockOptgroupOrder: false,\n\n\tsortField: '$order',\n\tsearchField: ['text'],\n\tsearchConjunction: 'and',\n\n\tmode: null,\n\twrapperClass: 'ts-wrapper',\n\tcontrolClass: 'ts-control',\n\tdropdownClass: 'ts-dropdown',\n\tdropdownContentClass: 'ts-dropdown-content',\n\titemClass: 'item',\n\toptionClass: 'option',\n\n\tdropdownParent: null,\n\tcontrolInput: '<input type=\"text\" autocomplete=\"off\" size=\"1\" />',\n\n\tcopyClassesToDropdown: false,\n\n\tplaceholder: null,\n\thidePlaceholder: null,\n\n\tshouldLoad: function(query:string):boolean{\n\t\treturn query.length > 0;\n\t},\n\n\t/*\n\tload : null, // function(query, callback) { ... }\n\tscore : null, // function(search) { ... }\n\tonInitialize : null, // function() { ... }\n\tonChange : null, // function(value) { ... }\n\tonItemAdd : null, // function(value, $item) { ... }\n\tonItemRemove : null, // function(value) { ... }\n\tonClear : null, // function() { ... }\n\tonOptionAdd : null, // function(value, data) { ... }\n\tonOptionRemove : null, // function(value) { ... }\n\tonOptionClear : null, // function() { ... }\n\tonOptionGroupAdd : null, // function(id, data) { ... }\n\tonOptionGroupRemove : null, // function(id) { ... }\n\tonOptionGroupClear : null, // function() { ... }\n\tonDropdownOpen : null, // function(dropdown) { ... }\n\tonDropdownClose : null, // function(dropdown) { ... }\n\tonType : null, // function(str) { ... }\n\tonDelete : null, // function(values) { ... }\n\t*/\n\n\trender: {\n\t\t/*\n\t\titem: null,\n\t\toptgroup: null,\n\t\toptgroup_header: null,\n\t\toption: null,\n\t\toption_create: null\n\t\t*/\n\t}\n};\n","\nimport TomSelect from './tom-select';\nimport { TomLoadCallback } from './types/index';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;');\n};\n\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Prevent default\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n","import defaults from './defaults';\nimport { hash_key } from './utils';\nimport { TomOption, TomSettings } from './types/index';\nimport { iterate } from '@orchidjs/sifter/lib/utils';\nimport { TomInput } from './types/index';\n\n\nexport default function getSettings( input:TomInput, settings_user:Partial<TomSettings>):TomSettings{\n\tvar settings:TomSettings\t= Object.assign({}, defaults, settings_user);\n\n\tvar attr_data\t\t\t\t= settings.dataAttr;\n\tvar field_label\t\t\t\t= settings.labelField;\n\tvar field_value\t\t\t\t= settings.valueField;\n\tvar field_disabled\t\t\t= settings.disabledField;\n\tvar field_optgroup\t\t\t= settings.optgroupField;\n\tvar field_optgroup_label\t= settings.optgroupLabelField;\n\tvar field_optgroup_value\t= settings.optgroupValueField;\n\n\tvar tag_name\t\t\t\t= input.tagName.toLowerCase();\n\tvar placeholder\t\t\t\t= input.getAttribute('placeholder') || input.getAttribute('data-placeholder');\n\n\tif (!placeholder && !settings.allowEmptyOption) {\n\t\tlet option\t\t= input.querySelector('option[value=\"\"]');\n\t\tif( option ){\n\t\t\tplaceholder = option.textContent;\n\t\t}\n\n\t}\n\n\tvar settings_element:{\n\t\tplaceholder\t: null|string,\n\t\toptions\t\t: TomOption[],\n\t\toptgroups\t: TomOption[],\n\t\titems\t\t: string[],\n\t\tmaxItems\t: null|number,\n\t} = {\n\t\tplaceholder\t: placeholder,\n\t\toptions\t\t: [],\n\t\toptgroups\t: [],\n\t\titems\t\t: [],\n\t\tmaxItems\t: null,\n\t};\n\n\n\t/**\n\t * Initialize from a <select> element.\n\t *\n\t */\n\tvar init_select = () => {\n\t\tvar tagName;\n\t\tvar options = settings_element.options;\n\t\tvar optionsMap:{[key:string]:any} = {};\n\t\tvar group_count = 1;\n\n\t\tvar readData = (el:HTMLElement):TomOption => {\n\n\t\t\tvar data\t= Object.assign({},el.dataset); // get plain object from DOMStringMap\n\t\t\tvar json\t= attr_data && data[attr_data];\n\n\t\t\tif( typeof json === 'string' && json.length ){\n\t\t\t\tdata = Object.assign(data,JSON.parse(json));\n\t\t\t}\n\n\t\t\treturn data;\n\t\t};\n\n\t\tvar addOption = (option:HTMLOptionElement, group?:string) => {\n\n\t\t\tvar value = hash_key(option.value);\n\t\t\tif ( value == null ) return;\n\t\t\tif ( !value && !settings.allowEmptyOption) return;\n\n\t\t\t// if the option already exists, it's probably been\n\t\t\t// duplicated in another optgroup. in this case, push\n\t\t\t// the current group to the \"optgroup\" property on the\n\t\t\t// existing option so that it's rendered in both places.\n\t\t\tif (optionsMap.hasOwnProperty(value)) {\n\t\t\t\tif (group) {\n\t\t\t\t\tvar arr = optionsMap[value][field_optgroup];\n\t\t\t\t\tif (!arr) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = group;\n\t\t\t\t\t} else if (!Array.isArray(arr)) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = [arr, group];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarr.push(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\tvar option_data = readData(option);\n\t\t\t\toption_data[field_label] = option_data[field_label] || option.textContent;\n\t\t\t\toption_data[field_value] = option_data[field_value] || value;\n\t\t\t\toption_data[field_disabled] = option_data[field_disabled] || option.disabled;\n\t\t\t\toption_data[field_optgroup] = option_data[field_optgroup] || group;\n\t\t\t\toption_data.$option\t\t\t= option;\n\n\t\t\t\toptionsMap[value] = option_data;\n\t\t\t\toptions.push(option_data);\n\t\t\t}\n\n\t\t\tif( option.selected ){\n\t\t\t\tsettings_element.items.push(value);\n\t\t\t}\n\t\t};\n\n\t\tvar addGroup = ( optgroup:HTMLOptGroupElement ) => {\n\t\t\tvar id:string, optgroup_data\n\n\t\t\toptgroup_data\t\t\t\t\t\t\t= readData(optgroup);\n\t\t\toptgroup_data[field_optgroup_label]\t\t= optgroup_data[field_optgroup_label] || optgroup.getAttribute('label') || '';\n\t\t\toptgroup_data[field_optgroup_value]\t\t= optgroup_data[field_optgroup_value] || group_count++;\n\t\t\toptgroup_data[field_disabled]\t\t\t= optgroup_data[field_disabled] || optgroup.disabled;\n\t\t\tsettings_element.optgroups.push(optgroup_data);\n\n\t\t\tid = optgroup_data[field_optgroup_value];\n\n\t\t\titerate(optgroup.children, (option)=>{\n\t\t\t\taddOption(option as HTMLOptionElement, id);\n\t\t\t});\n\n\t\t};\n\n\t\tsettings_element.maxItems = input.hasAttribute('multiple') ? null : 1;\n\n\t\titerate(input.children,(child)=>{\n\t\t\ttagName = child.tagName.toLowerCase();\n\t\t\tif (tagName === 'optgroup') {\n\t\t\t\taddGroup(child as HTMLOptGroupElement);\n\t\t\t} else if (tagName === 'option') {\n\t\t\t\taddOption(child as HTMLOptionElement);\n\t\t\t}\n\t\t});\n\n\t};\n\n\n\t/**\n\t * Initialize from a <input type=\"text\"> element.\n\t *\n\t */\n\tvar init_textbox = () => {\n\t\tconst data_raw = input.getAttribute(attr_data);\n\n\t\tif (!data_raw) {\n\t\t\tvar value = input.value.trim() || '';\n\t\t\tif (!settings.allowEmptyOption && !value.length) return;\n\t\t\tconst values = value.split(settings.delimiter);\n\n\t\t\titerate( values, (value) => {\n\t\t\t\tconst option:TomOption = {};\n\t\t\t\toption[field_label] = value;\n\t\t\t\toption[field_value] = value;\n\t\t\t\tsettings_element.options.push(option);\n\t\t\t});\n\t\t\tsettings_element.items = values;\n\t\t} else {\n\t\t\tsettings_element.options = JSON.parse(data_raw);\n\t\t\titerate( settings_element.options, (opt) => {\n\t\t\t\tsettings_element.items.push(opt[field_value]);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tif (tag_name === 'select') {\n\t\tinit_select();\n\t} else {\n\t\tinit_textbox();\n\t}\n\n\treturn Object.assign( {}, defaults, settings_element, settings_user) as TomSettings;\n};\n","\nimport MicroEvent from './contrib/microevent';\nimport MicroPlugin from './contrib/microplugin';\nimport Sifter from '@orchidjs/sifter/lib/sifter';\nimport { escape_regex, iterate } from '@orchidjs/sifter/lib/utils';\nimport { TomInput, TomArgObject, TomOption, TomOptions, TomCreateFilter, TomCreateCallback, TomItem, TomSettings, TomTemplateNames } from './types/index';\nimport {highlight, removeHighlight} from './contrib/highlight';\nimport * as constants from './constants';\nimport getSettings from './getSettings';\nimport {\n\thash_key,\n\tget_hash,\n\tescape_html,\n\tdebounce_events,\n\tgetSelection,\n\tpreventDefault,\n\taddEvent,\n\tloadDebounce,\n\tisKeyDown,\n\tgetId,\n\taddSlashes,\n\tappend\n} from './utils';\n\nimport {\n\tgetDom,\n\tisHtmlString,\n\tescapeQuery,\n\ttriggerEvent,\n\tapplyCSS,\n\taddClasses,\n\tremoveClasses,\n\tparentMatch,\n\tgetTail,\n\tisEmptyObject,\n\tnodeIndex,\n\tsetAttr,\n\treplaceNode\n} from './vanilla';\n\nvar instance_i = 0;\n\nexport default class TomSelect extends MicroPlugin(MicroEvent){\n\n\tpublic control_input\t\t\t: HTMLInputElement;\n\tpublic wrapper\t\t\t\t\t: HTMLElement;\n\tpublic dropdown\t\t\t\t\t: HTMLElement;\n\tpublic control\t\t\t\t\t: HTMLElement;\n\tpublic dropdown_content\t\t\t: HTMLElement;\n\tpublic focus_node\t\t\t\t: HTMLElement;\n\n\tpublic order\t\t\t\t\t: number = 0;\n\tpublic settings\t\t\t\t\t: TomSettings;\n\tpublic input\t\t\t\t\t: TomInput;\n\tpublic tabIndex\t\t\t\t\t: number;\n\tpublic is_select_tag\t\t\t: boolean;\n\tpublic rtl\t\t\t\t\t\t: boolean;\n\tprivate inputId\t\t\t\t\t: string;\n\n\tprivate _destroy\t\t\t\t!: () => void;\n\tpublic sifter\t\t\t\t\t: Sifter;\n\n\n\tpublic isOpen\t\t\t\t\t: boolean = false;\n\tpublic isDisabled\t\t\t\t: boolean = false;\n\tpublic isRequired\t\t\t\t: boolean;\n\tpublic isInvalid\t\t\t\t: boolean = false; // @deprecated 1.8\n\tpublic isValid\t\t\t\t\t: boolean = true;\n\tpublic isLocked\t\t\t\t\t: boolean = false;\n\tpublic isFocused\t\t\t\t: boolean = false;\n\tpublic isInputHidden\t\t\t: boolean = false;\n\tpublic isSetup\t\t\t\t\t: boolean = false;\n\tpublic ignoreFocus\t\t\t\t: boolean = false;\n\tpublic hasOptions\t\t\t\t: boolean = false;\n\tpublic currentResults\t\t\t?: ReturnType<Sifter['search']>;\n\tpublic lastValue\t\t\t\t: string = '';\n\tpublic caretPos\t\t\t\t\t: number = 0;\n\tpublic loading\t\t\t\t\t: number = 0;\n\tpublic loadedSearches\t\t\t: { [key: string]: boolean } = {};\n\n\tpublic activeOption\t\t\t\t: null|HTMLElement = null;\n\tpublic activeItems\t\t\t\t: TomItem[] = [];\n\n\tpublic optgroups\t\t\t\t: TomOptions = {};\n\tpublic options\t\t\t\t\t: TomOptions = {};\n\tpublic userOptions\t\t\t\t: {[key:string]:boolean} = {};\n\tpublic items\t\t\t\t\t: string[] = [];\n\n\n\n\tconstructor( input_arg: string|TomInput, user_settings:Partial<TomSettings> ){\n\t\tsuper();\n\n\t\tinstance_i++;\n\n\t\tvar dir;\n\t\tvar input\t\t\t\t= getDom( input_arg ) as TomInput;\n\n\t\tif( input.tomselect ){\n\t\t\tthrow new Error('Tom Select already initialized on this element');\n\t\t}\n\n\n\t\tinput.tomselect\t\t\t= this;\n\n\n\t\t// detect rtl environment\n\t\tvar computedStyle\t\t= window.getComputedStyle && window.getComputedStyle(input, null);\n\t\tdir\t\t\t\t\t\t= computedStyle.getPropertyValue('direction');\n\n\t\t// setup default state\n\t\tconst settings\t\t\t= getSettings( input, user_settings );\n\t\tthis.settings\t\t\t= settings;\n\t\tthis.input\t\t\t\t= input;\n\t\tthis.tabIndex\t\t\t= input.tabIndex || 0;\n\t\tthis.is_select_tag\t\t= input.tagName.toLowerCase() === 'select';\n\t\tthis.rtl\t\t\t\t= /rtl/i.test(dir);\n\t\tthis.inputId\t\t\t= getId(input, 'tomselect-'+instance_i);\n\t\tthis.isRequired\t\t\t= input.required;\n\n\n\t\t// search system\n\t\tthis.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\n\t\t// option-dependent defaults\n\t\tsettings.mode = settings.mode || (settings.maxItems === 1 ? 'single' : 'multi');\n\t\tif (typeof settings.hideSelected !== 'boolean') {\n\t\t\tsettings.hideSelected = settings.mode === 'multi';\n\t\t}\n\n\t\tif( typeof settings.hidePlaceholder !== 'boolean' ){\n\t\t\tsettings.hidePlaceholder = settings.mode !== 'multi';\n\t\t}\n\n\t\t// set up createFilter callback\n\t\tvar filter = settings.createFilter;\n\t\tif( typeof filter !== 'function' ){\n\n\t\t\tif( typeof filter === 'string' ){\n\t\t\t\tfilter = new RegExp(filter);\n\t\t\t}\n\n\t\t\tif( filter instanceof RegExp ){\n\t\t\t\tsettings.createFilter = (input) => (filter as RegExp).test(input);\n\t\t\t}else{\n\t\t\t\tsettings.createFilter = (value) => {\n\t\t\t\t\treturn this.settings.duplicates || !this.options[value];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\n\t\tthis.initializePlugins(settings.plugins);\n\t\tthis.setupCallbacks();\n\t\tthis.setupTemplates();\n\n\n\t\t// Create all elements\n\t\tconst wrapper\t\t\t= getDom('<div>');\n\t\tconst control\t\t\t= getDom('<div>');\n\t\tconst dropdown\t\t\t= this._render('dropdown');\n\t\tconst dropdown_content\t= getDom(`<div role=\"listbox\" tabindex=\"-1\">`);\n\n\t\tconst classes\t\t\t= this.input.getAttribute('class') || '';\n\t\tconst inputMode\t\t\t= settings.mode;\n\n\t\tvar control_input: HTMLInputElement;\n\n\n\t\taddClasses( wrapper, settings.wrapperClass, classes, inputMode);\n\n\n\t\taddClasses(control,settings.controlClass);\n\t\tappend( wrapper, control );\n\n\n\t\taddClasses(dropdown, settings.dropdownClass, inputMode);\n\t\tif( settings.copyClassesToDropdown ){\n\t\t\taddClasses( dropdown, classes);\n\t\t}\n\n\n\t\taddClasses(dropdown_content, settings.dropdownContentClass);\n\t\tappend( dropdown, dropdown_content );\n\n\t\tgetDom( settings.dropdownParent || wrapper ).appendChild( dropdown );\n\n\n\t\t// default controlInput\n\t\tif( isHtmlString(settings.controlInput) ){\n\t\t\tcontrol_input\t\t= getDom(settings.controlInput ) as HTMLInputElement;\n\n\t\t\t// set attributes\n\t\t\tvar attrs = ['autocorrect','autocapitalize','autocomplete'];\n\t\t\titerate(attrs,(attr) => {\n\t\t\t\tif( input.getAttribute(attr) ){\n\t\t\t\t\tsetAttr(control_input,{[attr]:input.getAttribute(attr)});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontrol_input.tabIndex = -1;\n\t\t\tcontrol.appendChild( control_input );\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t// dom element\n\t\t}else if( settings.controlInput ){\n\t\t\tcontrol_input\t\t= getDom( settings.controlInput ) as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t}else{\n\t\t\tcontrol_input\t\t= getDom('<input/>') as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control;\n\t\t}\n\n\t\tthis.wrapper\t\t\t= wrapper;\n\t\tthis.dropdown\t\t\t= dropdown;\n\t\tthis.dropdown_content\t= dropdown_content;\n\t\tthis.control \t\t\t= control;\n\t\tthis.control_input\t\t= control_input;\n\n\t\tthis.setup();\n\t}\n\n\t/**\n\t * set up event bindings.\n\t *\n\t */\n\tsetup(){\n\n\t\tconst self = this;\n\t\tconst settings\t\t\t\t= self.settings;\n\t\tconst control_input\t\t\t= self.control_input;\n\t\tconst dropdown\t\t\t\t= self.dropdown;\n\t\tconst dropdown_content\t\t= self.dropdown_content;\n\t\tconst wrapper\t\t\t\t= self.wrapper;\n\t\tconst control\t\t\t\t= self.control;\n\t\tconst input\t\t\t\t\t= self.input;\n\t\tconst focus_node\t\t\t= self.focus_node;\n\t\tconst passive_event\t\t\t= { passive: true };\n\t\tconst listboxId\t\t\t\t= self.inputId +'-ts-dropdown';\n\n\n\t\tsetAttr(dropdown_content,{\n\t\t\tid: listboxId\n\t\t});\n\n\t\tsetAttr(focus_node,{\n\t\t\trole:'combobox',\n\t\t\t'aria-haspopup':'listbox',\n\t\t\t'aria-expanded':'false',\n\t\t\t'aria-controls':listboxId\n\t\t});\n\n\t\tconst control_id\t= getId(focus_node,self.inputId + '-ts-control');\n\t\tconst query\t\t\t= \"label[for='\"+escapeQuery(self.inputId)+\"']\";\n\t\tconst label\t\t\t= document.querySelector(query);\n\t\tconst label_click\t= self.focus.bind(self);\n\t\tif( label ){\n\t\t\taddEvent(label,'click', label_click );\n\t\t\tsetAttr(label,{for:control_id});\n\t\t\tconst label_id = getId(label,self.inputId+'-ts-label');\n\t\t\tsetAttr(focus_node,{'aria-labelledby':label_id});\n\t\t\tsetAttr(dropdown_content,{'aria-labelledby':label_id});\n\t\t}\n\n\t\twrapper.style.width = input.style.width;\n\n\t\tif (self.plugins.names.length) {\n\t\t\tconst classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n\t\t\taddClasses( [wrapper,dropdown], classes_plugins);\n\t\t}\n\n\t\tif ((settings.maxItems === null || settings.maxItems > 1) && self.is_select_tag ){\n\t\t\tsetAttr(input,{multiple:'multiple'});\n\t\t}\n\n\t\tif (settings.placeholder) {\n\t\t\tsetAttr(control_input,{placeholder:settings.placeholder});\n\t\t}\n\n\t\t// if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\t\tif (!settings.splitOn && settings.delimiter) {\n\t\t\tsettings.splitOn = new RegExp('\\\\s*' + escape_regex(settings.delimiter) + '+\\\\s*');\n\t\t}\n\n\t\t// debounce user defined load() if loadThrottle > 0\n\t\t// after initializePlugins() so plugins can create/modify user defined loaders\n\t\tif( settings.load && settings.loadThrottle ){\n\t\t\tsettings.load = loadDebounce(settings.load,settings.loadThrottle)\n\t\t}\n\n\t\tself.control_input.type\t= input.type;\n\n\n\t\t// clicking on an option should select it\n\t\taddEvent(dropdown,'click',(evt) => {\n\t\t\tconst option = parentMatch(evt.target as HTMLElement, '[data-selectable]');\n\t\t\tif( option ){\n\t\t\t\tself.onOptionSelect( evt as MouseEvent, option );\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\t\t});\n\n\t\taddEvent(control,'click', (evt) => {\n\n\t\t\tvar target_match = parentMatch( evt.target as HTMLElement, '[data-ts-item]', control);\n\t\t\tif( target_match && self.onItemSelect(evt as MouseEvent, target_match as TomItem) ){\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// retain focus (see control_input mousedown)\n\t\t\tif( control_input.value != '' ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.onClick();\n\t\t\tpreventDefault(evt,true);\n\t\t});\n\n\n\t\t// keydown on focus_node for arrow_down/arrow_up\n\t\taddEvent(focus_node,'keydown',\t\t(e) => self.onKeyDown(e as KeyboardEvent) );\n\n\t\t// keypress and input/keyup\n\t\taddEvent(control_input,'keypress',\t(e) => self.onKeyPress(e as KeyboardEvent) );\n\t\taddEvent(control_input,'input',\t\t(e) => self.onInput(e as KeyboardEvent) );\n\n\t\taddEvent(focus_node,'resize',\t\t() => self.positionDropdown(), passive_event);\n\t\taddEvent(focus_node,'blur', \t\t(e) => self.onBlur(e as FocusEvent) );\n\t\taddEvent(focus_node,'focus',\t\t(e) => self.onFocus(e as MouseEvent) );\n\t\taddEvent(focus_node,'paste',\t\t(e) => self.onPaste(e as MouseEvent) );\n\n\n\t\tconst doc_mousedown = (evt:Event) => {\n\n\t\t\t// blur if target is outside of this instance\n\t\t\t// dropdown is not always inside wrapper\n\t\t\tconst target = evt.composedPath()[0];\n\t\t\tif( !wrapper.contains(target as HTMLElement) && !dropdown.contains(target as HTMLElement) ){\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\tself.blur();\n\t\t\t\t}\n\t\t\t\tself.inputState();\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t// retain focus by preventing native handling. if the\n\t\t\t// event target is the input it should not be modified.\n\t\t\t// otherwise, text selection within the input won't work.\n\t\t\t// Fixes bug #212 which is no covered by tests\n\t\t\tif( target == control_input && self.isOpen ){\n\t\t\t\tevt.stopPropagation();\n\n\t\t\t// clicking anywhere in the control should not blur the control_input (which would close the dropdown)\n\t\t\t}else{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\n\t\t};\n\n\t\tvar win_scroll = () => {\n\t\t\tif (self.isOpen) {\n\t\t\t\tself.positionDropdown();\n\t\t\t}\n\t\t};\n\n\n\t\taddEvent(document,'mousedown', doc_mousedown);\n\t\taddEvent(window,'scroll', win_scroll, passive_event);\n\t\taddEvent(window,'resize', win_scroll, passive_event);\n\n\t\tthis._destroy = () => {\n\t\t\tdocument.removeEventListener('mousedown',doc_mousedown);\n\t\t\twindow.removeEventListener('scroll',win_scroll);\n\t\t\twindow.removeEventListener('resize',win_scroll);\n\t\t\tif( label ) label.removeEventListener('click',label_click);\n\t\t};\n\n\t\t// store original html and tab index so that they can be\n\t\t// restored when the destroy() method is called.\n\t\tthis.revertSettings = {\n\t\t\tinnerHTML : input.innerHTML,\n\t\t\ttabIndex : input.tabIndex\n\t\t};\n\n\n\t\tinput.tabIndex = -1;\n\t\tinput.insertAdjacentElement('afterend', self.wrapper);\n\n\t\tself.sync(false);\n\t\tsettings.items = [];\n\t\tdelete settings.optgroups;\n\t\tdelete settings.options;\n\n\t\taddEvent(input,'invalid', (e) => {\n\t\t\tif( self.isValid ){\n\t\t\t\tself.isValid = false;\n\t\t\t\tself.isInvalid = true;\n\t\t\t\tself.refreshState();\n\t\t\t}\n\t\t});\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshItems();\n\t\tself.close(false);\n\t\tself.inputState();\n\t\tself.isSetup = true;\n\n\t\tif( input.disabled ){\n\t\t\tself.disable();\n\t\t}else{\n\t\t\tself.enable(); //sets tabIndex\n\t\t}\n\n\t\tself.on('change', this.onChange);\n\n\t\taddClasses(input,'tomselected','ts-hidden-accessible');\n\t\tself.trigger('initialize');\n\n\t\t// preload options\n\t\tif (settings.preload === true) {\n\t\t\tself.preload();\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Register options and optgroups\n\t *\n\t */\n\tsetupOptions(options:TomOption[] = [], optgroups:TomOption[] = []){\n\n\t\t// build options table\n\t\tthis.addOptions(options);\n\n\n\t\t// build optgroup table\n\t\titerate( optgroups, (optgroup) => {\n\t\t\tthis.registerOptionGroup(optgroup);\n\t\t});\n\t}\n\n\t/**\n\t * Sets up default rendering functions.\n\t */\n\tsetupTemplates() {\n\t\tvar self = this;\n\t\tvar field_label = self.settings.labelField;\n\t\tvar field_optgroup = self.settings.optgroupLabelField;\n\n\t\tvar templates = {\n\t\t\t'optgroup': (data:TomOption) => {\n\t\t\t\tlet optgroup = document.createElement('div');\n\t\t\t\toptgroup.className = 'optgroup';\n\t\t\t\toptgroup.appendChild(data.options);\n\t\t\t\treturn optgroup;\n\n\t\t\t},\n\t\t\t'optgroup_header': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n\t\t\t},\n\t\t\t'option': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'item': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'option_create': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>';\n\t\t\t},\n\t\t\t'no_results':() => {\n\t\t\t\treturn '<div class=\"no-results\">No results found</div>';\n\t\t\t},\n\t\t\t'loading':() => {\n\t\t\t\treturn '<div class=\"spinner\"></div>';\n\t\t\t},\n\t\t\t'not_loading':() => {},\n\t\t\t'dropdown':() => {\n\t\t\t\treturn '<div></div>';\n\t\t\t}\n\t\t};\n\n\n\t\tself.settings.render = Object.assign({}, templates, self.settings.render);\n\t}\n\n\t/**\n\t * Maps fired events to callbacks provided\n\t * in the settings used when creating the control.\n\t */\n\tsetupCallbacks() {\n\t\tvar key, fn;\n\t\tvar callbacks:{[key:string]:string} = {\n\t\t\t'initialize' : 'onInitialize',\n\t\t\t'change' : 'onChange',\n\t\t\t'item_add' : 'onItemAdd',\n\t\t\t'item_remove' : 'onItemRemove',\n\t\t\t'item_select' : 'onItemSelect',\n\t\t\t'clear' : 'onClear',\n\t\t\t'option_add' : 'onOptionAdd',\n\t\t\t'option_remove' : 'onOptionRemove',\n\t\t\t'option_clear' : 'onOptionClear',\n\t\t\t'optgroup_add' : 'onOptionGroupAdd',\n\t\t\t'optgroup_remove' : 'onOptionGroupRemove',\n\t\t\t'optgroup_clear' : 'onOptionGroupClear',\n\t\t\t'dropdown_open' : 'onDropdownOpen',\n\t\t\t'dropdown_close' : 'onDropdownClose',\n\t\t\t'type' : 'onType',\n\t\t\t'load' : 'onLoad',\n\t\t\t'focus' : 'onFocus',\n\t\t\t'blur' : 'onBlur'\n\t\t};\n\n\t\tfor (key in callbacks) {\n\n\t\t\tfn = this.settings[callbacks[key] as (keyof TomSettings)];\n\t\t\tif (fn) this.on(key, fn);\n\n\t\t}\n\t}\n\n\t/**\n\t * Sync the Tom Select instance with the original input or select\n\t *\n\t */\n\tsync(get_settings:boolean=true):void{\n\t\tconst self\t\t= this;\n\t\tconst settings\t= get_settings ? getSettings( self.input, {delimiter:self.settings.delimiter} as TomSettings ) : self.settings;\n\n\t\tself.setupOptions(settings.options,settings.optgroups);\n\n\t\tself.setValue(settings.items||[],true); // silent prevents recursion\n\n\t\tself.lastQuery = null; // so updated options will be displayed in dropdown\n\t}\n\n\t/**\n\t * Triggered when the main control element\n\t * has a click event.\n\t *\n\t */\n\tonClick():void {\n\t\tvar self = this;\n\n\t\tif( self.activeItems.length > 0 ){\n\t\t\tself.clearActiveItems();\n\t\t\tself.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.isFocused && self.isOpen ){\n\t\t\tself.blur();\n\t\t} else {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * @deprecated v1.7\n\t *\n\t */\n\tonMouseDown():void {}\n\n\t/**\n\t * Triggered when the value of the control has been changed.\n\t * This should propagate the event to the original DOM\n\t * input / select element.\n\t */\n\tonChange() {\n\t\ttriggerEvent(this.input, 'input');\n\t\ttriggerEvent(this.input, 'change');\n\t}\n\n\t/**\n\t * Triggered on <input> paste.\n\t *\n\t */\n\tonPaste(e:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif( self.isInputHidden || self.isLocked ){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\t// If a regex or string is included, this will split the pasted\n\t\t// input and create Items for each separate value\n\t\tif (self.settings.splitOn) {\n\n\t\t\t// Wait for pasted text to be recognized in value\n\t\t\tsetTimeout(() => {\n\t\t\t\tvar pastedText = self.inputValue();\n\t\t\t\tif( !pastedText.match(self.settings.splitOn)){\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tvar splitInput = pastedText.trim().split(self.settings.splitOn);\n\t\t\t\titerate( splitInput, (piece) => {\n\t\t\t\t\tself.createItem(piece);\n\t\t\t\t});\n\t\t\t}, 0);\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keypress.\n\t *\n\t */\n\tonKeyPress(e:KeyboardEvent):void {\n\t\tvar self = this;\n\t\tif(self.isLocked){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t\tvar character = String.fromCharCode(e.keyCode || e.which);\n\t\tif (self.settings.create && self.settings.mode === 'multi' && character === self.settings.delimiter) {\n\t\t\tself.createItem();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keydown.\n\t *\n\t */\n\tonKeyDown(e:KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif (self.isLocked) {\n\t\t\tif (e.keyCode !== constants.KEY_TAB) {\n\t\t\t\tpreventDefault(e);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\n\t\t\t// ctrl+A: select all\n\t\t\tcase constants.KEY_A:\n\t\t\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\t\t\tif( self.control_input.value == '' ){\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\tself.selectAll();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// esc: close dropdown\n\t\t\tcase constants.KEY_ESC:\n\t\t\t\tif (self.isOpen) {\n\t\t\t\t\tpreventDefault(e,true);\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\n\t\t\t// down: open dropdown or move selection down\n\t\t\tcase constants.KEY_DOWN:\n\t\t\t\tif (!self.isOpen && self.hasOptions) {\n\t\t\t\t\tself.open();\n\t\t\t\t} else if (self.activeOption) {\n\t\t\t\t\tlet next = self.getAdjacent(self.activeOption, 1);\n\t\t\t\t\tif (next) self.setActiveOption(next);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// up: move selection up\n\t\t\tcase constants.KEY_UP:\n\t\t\t\tif (self.activeOption) {\n\t\t\t\t\tlet prev = self.getAdjacent(self.activeOption, -1);\n\t\t\t\t\tif (prev) self.setActiveOption(prev);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// return: select active option\n\t\t\tcase constants.KEY_RETURN:\n\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// if the option_create=null, the dropdown might be closed\n\t\t\t\t}else if (self.settings.create && self.createItem()) {\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t}\n\t\t\t\treturn;\n\n\t\t\t// left: modifiy item selection to the left\n\t\t\tcase constants.KEY_LEFT:\n\t\t\t\tself.advanceSelection(-1, e);\n\t\t\t\treturn;\n\n\t\t\t// right: modifiy item selection to the right\n\t\t\tcase constants.KEY_RIGHT:\n\t\t\t\tself.advanceSelection(1, e);\n\t\t\t\treturn;\n\n\t\t\t// tab: select active option and/or create item\n\t\t\tcase constants.KEY_TAB:\n\n\t\t\t\tif( self.settings.selectOnTab ){\n\t\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\n\t\t\t\t\t\t// prevent default [tab] behaviour of jump to the next field\n\t\t\t\t\t\t// if select isFull, then the dropdown won't be open and [tab] will work normally\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t\tif (self.settings.create && self.createItem()) {\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\n\t\t\t// delete|backspace: delete items\n\t\t\tcase constants.KEY_BACKSPACE:\n\t\t\tcase constants.KEY_DELETE:\n\t\t\t\tself.deleteSelection(e);\n\t\t\t\treturn;\n\t\t}\n\n\t\t// don't enter text in the control_input when active items are selected\n\t\tif( self.isInputHidden && !isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\tpreventDefault(e);\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keyup.\n\t *\n\t */\n\tonInput(e:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif( self.isLocked ){\n\t\t\treturn;\n\t\t}\n\n\t\tvar value = self.inputValue();\n\t\tif (self.lastValue !== value) {\n\t\t\tself.lastValue = value;\n\n\t\t\tif( self.settings.shouldLoad.call(self,value) ){\n\t\t\t\tself.load(value);\n\t\t\t}\n\n\t\t\tself.refreshOptions();\n\t\t\tself.trigger('type', value);\n\t\t}\n\t}\n\n\n\t/**\n\t * Triggered on <input> focus.\n\t *\n\t */\n\tonFocus(e?:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\t\tvar wasFocused = self.isFocused;\n\n\t\tif (self.isDisabled) {\n\t\t\tself.blur();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (self.ignoreFocus) return;\n\t\tself.isFocused = true;\n\t\tif( self.settings.preload === 'focus' ) self.preload();\n\n\t\tif (!wasFocused) self.trigger('focus');\n\n\t\tif (!self.activeItems.length) {\n\t\t\tself.showInput();\n\t\t\tself.refreshOptions(!!self.settings.openOnFocus);\n\t\t}\n\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Triggered on <input> blur.\n\t *\n\t */\n\tonBlur(e?:FocusEvent):void {\n\n\t\tif( document.hasFocus() === false ) return;\n\n\t\tvar self = this;\n\t\tif (!self.isFocused) return;\n\t\tself.isFocused = false;\n\t\tself.ignoreFocus = false;\n\n\t\tvar deactivate = () => {\n\t\t\tself.close();\n\t\t\tself.setActiveItem();\n\t\t\tself.setCaret(self.items.length);\n\t\t\tself.trigger('blur');\n\t\t};\n\n\t\tif (self.settings.create && self.settings.createOnBlur) {\n\t\t\tself.createItem(null, false, deactivate);\n\t\t} else {\n\t\t\tdeactivate();\n\t\t}\n\t}\n\n\n\t/**\n\t * Triggered when the user clicks on an option\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionSelect( evt:MouseEvent|KeyboardEvent, option:HTMLElement ){\n\t\tvar value, self = this;\n\n\n\t\t// should not be possible to trigger a option under a disabled optgroup\n\t\tif( option.parentElement && option.parentElement.matches('[data-disabled]') ){\n\t\t\treturn;\n\t\t}\n\n\n\t\tif( option.classList.contains('create') ){\n\t\t\tself.createItem(null, true, () => {\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = option.dataset.value;\n\t\t\tif (typeof value !== 'undefined') {\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tself.addItem(value);\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( !self.settings.hideSelected && evt.type && /click/.test(evt.type) ){\n\t\t\t\t\tself.setActiveOption(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return true if the given option can be selected\n\t *\n\t */\n\tcanSelect(option:HTMLElement|null):boolean{\n\n\t\tif( this.isOpen && option && this.dropdown_content.contains(option) ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Triggered when the user clicks on an item\n\t * that has been selected.\n\t *\n\t */\n\tonItemSelect( evt?:MouseEvent, item?:TomItem ):boolean{\n\t\tvar self = this;\n\n\t\tif( !self.isLocked && self.settings.mode === 'multi' ){\n\t\t\tpreventDefault(evt);\n\t\t\tself.setActiveItem(item, evt);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determines whether or not to invoke\n\t * the user-provided option provider / loader\n\t *\n\t * Note, there is a subtle difference between\n\t * this.canLoad() and this.settings.shouldLoad();\n\t *\n\t *\t- settings.shouldLoad() is a user-input validator.\n\t *\tWhen false is returned, the not_loading template\n\t *\twill be added to the dropdown\n\t *\n\t *\t- canLoad() is lower level validator that checks\n\t * \tthe Tom Select instance. There is no inherent user\n\t *\tfeedback when canLoad returns false\n\t *\n\t */\n\tcanLoad(value:string):boolean{\n\n\t\tif( !this.settings.load ) return false;\n\t\tif( this.loadedSearches.hasOwnProperty(value) ) return false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Invokes the user-provided option provider / loader.\n\t *\n\t */\n\tload(value:string):void {\n\t\tconst self = this;\n\n\t\tif( !self.canLoad(value) ) return;\n\n\t\taddClasses(self.wrapper,self.settings.loadingClass);\n\t\tself.loading++;\n\n\t\tconst callback = self.loadCallback.bind(self);\n\t\tself.settings.load.call(self, value, callback);\n\t}\n\n\t/**\n\t * Invoked by the user-provided option provider\n\t *\n\t */\n\tloadCallback( options:TomOption[], optgroups:TomOption[] ):void{\n\t\tconst self = this;\n\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\tself.lastQuery = null;\n\n\t\tself.clearActiveOption(); // when new results load, focus should be on first option\n\t\tself.setupOptions(options,optgroups);\n\n\t\tself.refreshOptions(self.isFocused && !self.isInputHidden);\n\n\t\tif (!self.loading) {\n\t\t\tremoveClasses(self.wrapper,self.settings.loadingClass);\n\t\t}\n\n\t\tself.trigger('load', options, optgroups);\n\t}\n\n\tpreload():void{\n\t\tvar classList = this.wrapper.classList;\n\t\tif( classList.contains('preloaded') ) return;\n\t\tclassList.add('preloaded');\n\t\tthis.load('');\n\t}\n\n\n\t/**\n\t * Sets the input field of the control to the specified value.\n\t *\n\t */\n\tsetTextboxValue(value:string = '') {\n\t\tvar input = this.control_input;\n\t\tvar changed = input.value !== value;\n\t\tif (changed) {\n\t\t\tinput.value = value;\n\t\t\ttriggerEvent(input,'update');\n\t\t\tthis.lastValue = value;\n\t\t}\n\t}\n\n\t/**\n\t * Returns the value of the control. If multiple items\n\t * can be selected (e.g. <select multiple>), this returns\n\t * an array. If only one item can be selected, this\n\t * returns a string.\n\t *\n\t */\n\tgetValue():string|string[] {\n\n\t\tif( this.is_select_tag && this.input.hasAttribute('multiple')) {\n\t\t\treturn this.items;\n\t\t}\n\n\t\treturn this.items.join(this.settings.delimiter);\n\t}\n\n\t/**\n\t * Resets the selected items to the given value.\n\t *\n\t */\n\tsetValue( value:string|string[], silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change'];\n\n\t\tdebounce_events(this, events,() => {\n\t\t\tthis.clear(silent);\n\t\t\tthis.addItems(value, silent);\n\t\t});\n\t}\n\n\n\t/**\n\t * Resets the number of max items to the given value\n\t *\n\t */\n\tsetMaxItems(value:null|number){\n\t\tif(value === 0) value = null; //reset to unlimited items.\n\t\tthis.settings.maxItems = value;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Sets the selected item.\n\t *\n\t */\n\tsetActiveItem( item?:TomItem, e?:MouseEvent|KeyboardEvent ){\n\t\tvar self = this;\n\t\tvar eventName;\n\t\tvar i, begin, end, swap;\n\t\tvar last;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\t// clear the active selection\n\t\tif( !item ){\n\t\t\tself.clearActiveItems();\n\t\t\tif (self.isFocused) {\n\t\t\t\tself.showInput();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// modify selection\n\t\teventName = e && e.type.toLowerCase();\n\n\t\tif (eventName === 'click' && isKeyDown('shiftKey',e) && self.activeItems.length) {\n\t\t\tlast\t= self.getLastActive();\n\t\t\tbegin\t= Array.prototype.indexOf.call(self.control.children, last);\n\t\t\tend\t\t= Array.prototype.indexOf.call(self.control.children, item);\n\n\t\t\tif (begin > end) {\n\t\t\t\tswap = begin;\n\t\t\t\tbegin = end;\n\t\t\t\tend = swap;\n\t\t\t}\n\t\t\tfor (i = begin; i <= end; i++) {\n\t\t\t\titem = self.control.children[i] as TomItem;\n\t\t\t\tif (self.activeItems.indexOf(item) === -1) {\n\t\t\t\t\tself.setActiveItemClass(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpreventDefault(e);\n\t\t} else if ((eventName === 'click' && isKeyDown(constants.KEY_SHORTCUT,e) ) || (eventName === 'keydown' && isKeyDown('shiftKey',e))) {\n\t\t\tif( item.classList.contains('active') ){\n\t\t\t\tself.removeActiveItem( item );\n\t\t\t} else {\n\t\t\t\tself.setActiveItemClass(item);\n\t\t\t}\n\t\t} else {\n\t\t\tself.clearActiveItems();\n\t\t\tself.setActiveItemClass(item);\n\t\t}\n\n\t\t// ensure control has focus\n\t\tself.hideInput();\n\t\tif (!self.isFocused) {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Set the active and last-active classes\n\t *\n\t */\n\tsetActiveItemClass( item:TomItem ){\n\t\tconst self = this;\n\t\tconst last_active = self.control.querySelector('.last-active');\n\t\tif( last_active ) removeClasses(last_active as HTMLElement,'last-active');\n\n\t\taddClasses(item,'active last-active');\n\t\tself.trigger('item_select', item);\n\t\tif( self.activeItems.indexOf(item) == -1 ){\n\t\t\tself.activeItems.push( item );\n\t\t}\n\t}\n\n\t/**\n\t * Remove active item\n\t *\n\t */\n\tremoveActiveItem( item:TomItem ){\n\t\tvar idx = this.activeItems.indexOf(item);\n\t\tthis.activeItems.splice(idx, 1);\n\t\tremoveClasses(item,'active');\n\t}\n\n\t/**\n\t * Clears all the active items\n\t *\n\t */\n\tclearActiveItems(){\n\t\tremoveClasses(this.activeItems,'active');\n\t\tthis.activeItems = [];\n\t}\n\n\t/**\n\t * Sets the selected item in the dropdown menu\n\t * of available options.\n\t *\n\t */\n\tsetActiveOption( option:null|HTMLElement ):void{\n\n\t\tif( option === this.activeOption ){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearActiveOption();\n\t\tif( !option ) return;\n\n\t\tthis.activeOption = option;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':option.getAttribute('id')});\n\t\tsetAttr(option,{'aria-selected':'true'});\n\t\taddClasses(option,'active');\n\t\tthis.scrollToOption(option);\n\t}\n\n\t/**\n\t * Sets the dropdown_content scrollTop to display the option\n\t *\n\t */\n\tscrollToOption( option:null|HTMLElement, behavior?:string ):void{\n\n\t\tif( !option ) return;\n\n\t\tconst content\t\t= this.dropdown_content;\n\t\tconst height_menu\t= content.clientHeight;\n\t\tconst scrollTop\t\t= content.scrollTop || 0;\n\t\tconst height_item\t= option.offsetHeight;\n\t\tconst y\t\t\t\t= option.getBoundingClientRect().top - content.getBoundingClientRect().top + scrollTop;\n\n\t\tif (y + height_item > height_menu + scrollTop) {\n\t\t\tthis.scroll(y - height_menu + height_item, behavior);\n\n\t\t} else if (y < scrollTop) {\n\t\t\tthis.scroll(y, behavior);\n\t\t}\n\t}\n\n\t/**\n\t * Scroll the dropdown to the given position\n\t *\n\t */\n\tscroll( scrollTop:number, behavior?:string ):void{\n\t\tconst content = this.dropdown_content;\n\t\tif( behavior ){\n\t\t\tcontent.style.scrollBehavior = behavior;\n\t\t}\n\t\tcontent.scrollTop = scrollTop;\n\t\tcontent.style.scrollBehavior = '';\n\t}\n\n\t/**\n\t * Clears the active option\n\t *\n\t */\n\tclearActiveOption(){\n\t\tif( this.activeOption ){\n\t\t\tremoveClasses(this.activeOption,'active');\n\t\t\tsetAttr(this.activeOption,{'aria-selected':null});\n\t\t}\n\t\tthis.activeOption = null;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':null});\n\t}\n\n\n\t/**\n\t * Selects all items (CTRL + A).\n\t */\n\tselectAll() {\n\t\tconst self = this;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\tconst activeItems = self.controlChildren();\n\n\t\tif( !activeItems.length ) return;\n\n\t\tself.hideInput();\n\t\tself.close();\n\n\t\tself.activeItems = activeItems;\n\t\titerate( activeItems, (item) => {\n\t\t\tself.setActiveItemClass(item);\n\t\t});\n\n\t}\n\n\t/**\n\t * Determines if the control_input should be in a hidden or visible state\n\t *\n\t */\n\tinputState(){\n\t\tvar self = this;\n\n\t\tif( !self.control.contains(self.control_input) ) return;\n\n\t\tsetAttr(self.control_input,{placeholder:self.settings.placeholder});\n\n\t\tif( self.activeItems.length > 0 || (!self.isFocused && self.settings.hidePlaceholder && self.items.length > 0) ){\n\t\t\tself.setTextboxValue();\n\t\t\tself.isInputHidden = true;\n\n\t\t}else{\n\n\t\t\tif( self.settings.hidePlaceholder && self.items.length > 0 ){\n\t\t\t\tsetAttr(self.control_input,{placeholder:''});\n\t\t\t}\n\t\t\tself.isInputHidden = false;\n\t\t}\n\n\t\tself.wrapper.classList.toggle('input-hidden', self.isInputHidden );\n\t}\n\n\t/**\n\t * Hides the input element out of view, while\n\t * retaining its focus.\n\t * @deprecated 1.3\n\t */\n\thideInput() {\n\t\tthis.inputState();\n\t}\n\n\t/**\n\t * Restores input visibility.\n\t * @deprecated 1.3\n\t */\n\tshowInput() {\n\t\tthis.inputState();\n\t}\n\n\t/**\n\t * Get the input value\n\t */\n\tinputValue(){\n\t\treturn this.control_input.value.trim();\n\t}\n\n\t/**\n\t * Gives the control focus.\n\t */\n\tfocus() {\n\t\tvar self = this;\n\t\tif (self.isDisabled) return;\n\n\t\tself.ignoreFocus = true;\n\n\t\tif( self.control_input.offsetWidth ){\n\t\t\tself.control_input.focus();\n\t\t}else{\n\t\t\tself.focus_node.focus();\n\t\t}\n\n\t\tsetTimeout(() => {\n\t\t\tself.ignoreFocus = false;\n\t\t\tself.onFocus();\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Forces the control out of focus.\n\t *\n\t */\n\tblur():void {\n\t\tthis.focus_node.blur();\n\t\tthis.onBlur();\n\t}\n\n\t/**\n\t * Returns a function that scores an object\n\t * to show how good of a match it is to the\n\t * provided query.\n\t *\n\t * @return {function}\n\t */\n\tgetScoreFunction(query:string) {\n\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t}\n\n\t/**\n\t * Returns search options for sifter (the system\n\t * for scoring and sorting results).\n\t *\n\t * @see https://github.com/orchidjs/sifter.js\n\t * @return {object}\n\t */\n\tgetSearchOptions() {\n\t\tvar settings = this.settings;\n\t\tvar sort = settings.sortField;\n\t\tif (typeof settings.sortField === 'string') {\n\t\t\tsort = [{field: settings.sortField}];\n\t\t}\n\n\t\treturn {\n\t\t\tfields : settings.searchField,\n\t\t\tconjunction : settings.searchConjunction,\n\t\t\tsort : sort,\n\t\t\tnesting : settings.nesting\n\t\t};\n\t}\n\n\t/**\n\t * Searches through available options and returns\n\t * a sorted array of matches.\n\t *\n\t */\n\tsearch(query:string) : ReturnType<Sifter['search']>{\n\t\tvar i, result, calculateScore;\n\t\tvar self = this;\n\t\tvar options = this.getSearchOptions();\n\n\t\t// validate user-provided result scoring function\n\t\tif ( self.settings.score ){\n\t\t\tcalculateScore = self.settings.score.call(self,query);\n\t\t\tif (typeof calculateScore !== 'function') {\n\t\t\t\tthrow new Error('Tom Select \"score\" setting must be a function that returns a function');\n\t\t\t}\n\t\t}\n\n\t\t// perform search\n\t\tif (query !== self.lastQuery) {\n\t\t\tself.lastQuery\t\t\t= query;\n\t\t\tresult\t\t\t\t\t= self.sifter.search(query, Object.assign(options, {score: calculateScore}));\n\t\t\tself.currentResults\t\t= result;\n\t\t} else {\n\t\t\tresult\t\t\t\t\t= Object.assign( {}, self.currentResults);\n\t\t}\n\n\t\t// filter out selected items\n\t\tif( self.settings.hideSelected ){\n\t\t\tfor (i = result.items.length - 1; i >= 0; i--) {\n\t\t\t\tlet hashed = hash_key(result.items[i].id);\n\t\t\t\tif( hashed && self.items.indexOf(hashed) !== -1 ){\n\t\t\t\t\tresult.items.splice(i, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Refreshes the list of available options shown\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\trefreshOptions( triggerDropdown:boolean = true ){\n\t\tvar i, j, k, n, optgroup, optgroups, html:DocumentFragment, has_create_option, active_value, active_group;\n\t\tvar create;\n\t\tconst groups: {[key:string]:DocumentFragment} = {};\n\n\t\tconst groups_order:string[]\t= [];\n\t\tvar self\t\t\t\t\t= this;\n\t\tvar query\t\t\t\t\t= self.inputValue();\n\t\tvar results\t\t\t\t\t= self.search(query);\n\t\tvar active_option\t\t\t= null; //self.activeOption;\n\t\tvar show_dropdown\t\t\t= self.settings.shouldOpen || false;\n\t\tvar dropdown_content\t\t= self.dropdown_content;\n\n\t\tif( self.activeOption ){\n\t\t\tactive_value = self.activeOption.dataset.value;\n\t\t\tactive_group = self.activeOption.closest('[data-group]') as HTMLElement;\n\t\t}\n\n\t\t// build markup\n\t\tn = results.items.length;\n\t\tif (typeof self.settings.maxOptions === 'number') {\n\t\t\tn = Math.min(n, self.settings.maxOptions);\n\t\t}\n\n\t\tif( n > 0 ){\n\t\t\tshow_dropdown = true;\n\t\t}\n\n\t\t// render and group available options individually\n\t\tfor (i = 0; i < n; i++) {\n\n\t\t\t// get option dom element\n\t\t\tlet opt_value\t\t= results.items[i].id;\n\t\t\tlet option\t\t\t= self.options[opt_value];\n\t\t\tlet option_el\t\t= self.getOption(opt_value,true) as HTMLElement;\n\n\n\t\t\t// toggle 'selected' class\n\t\t\tif( !self.settings.hideSelected ){\n\t\t\t\toption_el.classList.toggle('selected', self.items.includes(opt_value) );\n\t\t\t}\n\n\t\t\toptgroup = option[self.settings.optgroupField] || '';\n\t\t\toptgroups = Array.isArray(optgroup) ? optgroup : [optgroup];\n\n\t\t\tfor (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n\t\t\t\toptgroup = optgroups[j];\n\t\t\t\tif (!self.optgroups.hasOwnProperty(optgroup)) {\n\t\t\t\t\toptgroup = '';\n\t\t\t\t}\n\t\t\t\tif (!groups.hasOwnProperty(optgroup)) {\n\t\t\t\t\tgroups[optgroup] = document.createDocumentFragment();\n\t\t\t\t\tgroups_order.push(optgroup);\n\t\t\t\t}\n\n\t\t\t\t// nodes can only have one parent, so if the option is in mutple groups, we need a clone\n\t\t\t\tif( j > 0 ){\n\t\t\t\t\toption_el = option_el.cloneNode(true) as HTMLElement;\n\t\t\t\t\tsetAttr(option_el,{id: option.$id+'-clone-'+j,'aria-selected':null});\n\t\t\t\t\toption_el.classList.add('ts-cloned');\n\t\t\t\t\tremoveClasses(option_el,'active');\n\t\t\t\t}\n\n\t\t\t\t// make sure we keep the activeOption in the same group\n\t\t\t\tif( !active_option && active_value == opt_value ){\n\t\t\t\t\tif( active_group ){\n\t\t\t\t\t\tif( active_group.dataset.group === optgroup ){\n\t\t\t\t\t\t\tactive_option = option_el;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tactive_option = option_el;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgroups[optgroup].appendChild(option_el);\n\t\t\t}\n\t\t}\n\n\t\t// sort optgroups\n\t\tif (this.settings.lockOptgroupOrder) {\n\t\t\tgroups_order.sort((a, b) => {\n\t\t\t\tvar a_order = self.optgroups[a] && self.optgroups[a].$order || 0;\n\t\t\t\tvar b_order = self.optgroups[b] && self.optgroups[b].$order || 0;\n\t\t\t\treturn a_order - b_order;\n\t\t\t});\n\t\t}\n\n\t\t// render optgroup headers & join groups\n\t\thtml = document.createDocumentFragment();\n\t\titerate( groups_order, (optgroup) => {\n\t\t\tif (self.optgroups.hasOwnProperty(optgroup) && groups[optgroup].children.length) {\n\n\t\t\t\tlet group_options = document.createDocumentFragment();\n\t\t\t\tlet header = self.render('optgroup_header', self.optgroups[optgroup]);\n\t\t\t\tappend( group_options, header );\n\t\t\t\tappend( group_options, groups[optgroup] );\n\n\t\t\t\tlet group_html = self.render('optgroup', {group:self.optgroups[optgroup],options:group_options} );\n\n\t\t\t\tappend( html, group_html );\n\n\t\t\t} else {\n\t\t\t\tappend( html, groups[optgroup] );\n\t\t\t}\n\t\t});\n\n\t\tdropdown_content.innerHTML = '';\n\t\tappend( dropdown_content, html );\n\n\t\t// highlight matching terms inline\n\t\tif (self.settings.highlight) {\n\t\t\tremoveHighlight( dropdown_content );\n\t\t\tif (results.query.length && results.tokens.length) {\n\t\t\t\titerate( results.tokens, (tok) => {\n\t\t\t\t\thighlight( dropdown_content, tok.regex);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// helper method for adding templates to dropdown\n\t\tvar add_template = (template:TomTemplateNames) => {\n\t\t\tlet content = self.render(template,{input:query});\n\t\t\tif( content ){\n\t\t\t\tshow_dropdown = true;\n\t\t\t\tdropdown_content.insertBefore(content, dropdown_content.firstChild);\n\t\t\t}\n\t\t\treturn content;\n\t\t};\n\n\n\t\t// add loading message\n\t\tif( self.loading ){\n\t\t\tadd_template('loading');\n\n\t\t// invalid query\n\t\t}else if( !self.settings.shouldLoad.call(self,query) ){\n\t\t\tadd_template('not_loading');\n\n\t\t// add no_results message\n\t\t}else if( results.items.length === 0 ){\n\t\t\tadd_template('no_results');\n\n\t\t}\n\n\n\n\t\t// add create option\n\t\thas_create_option = self.canCreate(query);\n\t\tif (has_create_option) {\n\t\t\tcreate = add_template('option_create');\n\t\t}\n\n\n\t\t// activate\n\t\tself.hasOptions = results.items.length > 0 || has_create_option;\n\t\tif( show_dropdown ){\n\n\t\t\tif (results.items.length > 0) {\n\n\t\t\t\tif( !active_option && self.settings.mode === 'single' && self.items.length ){\n\t\t\t\t\tactive_option = self.getOption(self.items[0]);\n\t\t\t\t}\n\n\t\t\t\tif( !dropdown_content.contains(active_option) ){\n\n\t\t\t\t\tlet active_index = 0;\n\t\t\t\t\tif( create && !self.settings.addPrecedence ){\n\t\t\t\t\t\tactive_index = 1;\n\t\t\t\t\t}\n\t\t\t\t\tactive_option = self.selectable()[active_index] as HTMLElement;\n\t\t\t\t}\n\n\t\t\t}else if( create ){\n\t\t\t\tactive_option = create;\n\t\t\t}\n\n\t\t\tif( triggerDropdown && !self.isOpen ){\n\t\t\t\tself.open();\n\t\t\t\tself.scrollToOption(active_option,'auto');\n\t\t\t}\n\t\t\tself.setActiveOption(active_option);\n\n\t\t}else{\n\t\t\tself.clearActiveOption();\n\t\t\tif( triggerDropdown && self.isOpen ){\n\t\t\t\tself.close(false); // if create_option=null, we want the dropdown to close but not reset the textbox value\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return list of selectable options\n\t *\n\t */\n\tselectable():NodeList{\n\t\treturn this.dropdown_content.querySelectorAll('[data-selectable]');\n\t}\n\n\n\n\t/**\n\t * Adds an available option. If it already exists,\n\t * nothing will happen. Note: this does not refresh\n\t * the options list dropdown (use `refreshOptions`\n\t * for that).\n\t *\n\t * Usage:\n\t *\n\t * this.addOption(data)\n\t *\n\t */\n\taddOption( data:TomOption, user_created = false ):false|string {\n\t\tconst self = this;\n\n\t\t// @deprecated 1.7.7\n\t\t// use addOptions( array, user_created ) for adding multiple options\n\t\tif( Array.isArray(data) ){\n\t\t\tself.addOptions( data, user_created);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst key = hash_key(data[self.settings.valueField]);\n\t\tif( key === null || self.options.hasOwnProperty(key) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tdata.$order\t\t\t= data.$order || ++self.order;\n\t\tdata.$id\t\t\t= self.inputId + '-opt-' + data.$order;\n\t\tself.options[key]\t= data;\n\t\tself.lastQuery\t\t= null;\n\n\t\tif( user_created ){\n\t\t\tself.userOptions[key] = user_created;\n\t\t\tself.trigger('option_add', key, data);\n\t\t}\n\n\t\treturn key;\n\t}\n\n\t/**\n\t * Add multiple options\n\t *\n\t */\n\taddOptions( data:TomOption[], user_created = false ):void{\n\t\titerate( data, (dat) => {\n\t\t\tthis.addOption(dat, user_created);\n\t\t});\n\t}\n\n\t/**\n\t * @deprecated 1.7.7\n\t */\n\tregisterOption( data:TomOption ):false|string {\n\t\treturn this.addOption(data);\n\t}\n\n\t/**\n\t * Registers an option group to the pool of option groups.\n\t *\n\t * @return {boolean|string}\n\t */\n\tregisterOptionGroup(data:TomOption) {\n\t\tvar key = hash_key(data[this.settings.optgroupValueField]);\n\n\t\tif ( key === null ) return false;\n\n\t\tdata.$order = data.$order || ++this.order;\n\t\tthis.optgroups[key] = data;\n\t\treturn key;\n\t}\n\n\t/**\n\t * Registers a new optgroup for options\n\t * to be bucketed into.\n\t *\n\t */\n\taddOptionGroup(id:string, data:TomOption) {\n\t\tvar hashed_id;\n\t\tdata[this.settings.optgroupValueField] = id;\n\n\t\tif( hashed_id = this.registerOptionGroup(data) ){\n\t\t\tthis.trigger('optgroup_add', hashed_id, data);\n\t\t}\n\t}\n\n\t/**\n\t * Removes an existing option group.\n\t *\n\t */\n\tremoveOptionGroup(id:string) {\n\t\tif (this.optgroups.hasOwnProperty(id)) {\n\t\t\tdelete this.optgroups[id];\n\t\t\tthis.clearCache();\n\t\t\tthis.trigger('optgroup_remove', id);\n\t\t}\n\t}\n\n\t/**\n\t * Clears all existing option groups.\n\t */\n\tclearOptionGroups() {\n\t\tthis.optgroups = {};\n\t\tthis.clearCache();\n\t\tthis.trigger('optgroup_clear');\n\t}\n\n\t/**\n\t * Updates an option available for selection. If\n\t * it is visible in the selected items or options\n\t * dropdown, it will be re-rendered automatically.\n\t *\n\t */\n\tupdateOption(value:string, data:TomOption) {\n\t\tconst self = this;\n\t\tvar item_new;\n\t\tvar index_item;\n\n\t\tconst value_old\t\t= hash_key(value);\n\t\tconst value_new\t\t= hash_key(data[self.settings.valueField]);\n\n\t\t// sanity checks\n\t\tif( value_old === null ) return;\n\t\tif( !self.options.hasOwnProperty(value_old) ) return;\n\t\tif( typeof value_new !== 'string' ) throw new Error('Value must be set in option data');\n\n\n\t\tconst option\t\t= self.getOption(value_old);\n\t\tconst item\t\t\t= self.getItem(value_old);\n\n\n\t\tdata.$order = data.$order || self.options[value_old].$order;\n\t\tdelete self.options[value_old];\n\n\t\t// invalidate render cache\n\t\t// don't remove existing node yet, we'll remove it after replacing it\n\t\tself.uncacheValue(value_new);\n\n\t\tself.options[value_new] = data;\n\n\t\t// update the option if it's in the dropdown\n\t\tif( option ){\n\t\t\tif( self.dropdown_content.contains(option) ){\n\n\t\t\t\tconst option_new\t= self._render('option', data);\n\t\t\t\treplaceNode(option, option_new);\n\n\t\t\t\tif( self.activeOption === option ){\n\t\t\t\t\tself.setActiveOption(option_new);\n\t\t\t\t}\n\t\t\t}\n\t\t\toption.remove();\n\t\t}\n\n\t\t// update the item if we have one\n\t\tif( item ){\n\t\t\tindex_item = self.items.indexOf(value_old);\n\t\t\tif (index_item !== -1) {\n\t\t\t\tself.items.splice(index_item, 1, value_new);\n\t\t\t}\n\n\t\t\titem_new\t= self._render('item', data);\n\n\t\t\tif( item.classList.contains('active') ) addClasses(item_new,'active');\n\n\t\t\treplaceNode( item, item_new);\n\t\t}\n\n\t\t// invalidate last query because we might have updated the sortField\n\t\tself.lastQuery = null;\n\t}\n\n\t/**\n\t * Removes a single option.\n\t *\n\t */\n\tremoveOption(value:string, silent?:boolean):void {\n\t\tconst self = this;\n\t\tvalue = get_hash(value);\n\n\t\tself.uncacheValue(value);\n\n\t\tdelete self.userOptions[value];\n\t\tdelete self.options[value];\n\t\tself.lastQuery = null;\n\t\tself.trigger('option_remove', value);\n\t\tself.removeItem(value, silent);\n\t}\n\n\t/**\n\t * Clears all options.\n\t */\n\tclearOptions() {\n\n\t\tthis.loadedSearches\t\t= {};\n\t\tthis.userOptions\t\t= {};\n\t\tthis.clearCache();\n\t\tvar selected:TomOptions\t= {};\n\t\titerate(this.options,(option,key)=>{\n \t\tif( this.items.indexOf(key as string) >= 0 ){\n\t\t\t\tselected[key] = this.options[key];\n\t\t\t}\n\t\t});\n\n\t\tthis.options = this.sifter.items = selected;\n\t\tthis.lastQuery = null;\n\t\tthis.trigger('option_clear');\n\t}\n\n\n\t/**\n\t * Returns the dom element of the option\n\t * matching the given value.\n\t *\n\t */\n\tgetOption(value:null|string, create:boolean=false):null|HTMLElement {\n\t\tconst hashed = hash_key(value);\n\n\t\tif( hashed !== null && this.options.hasOwnProperty(hashed) ){\n\t\t\tconst option = this.options[hashed];\n\n\t\t\tif( option.$div ){\n\t\t\t\treturn option.$div;\n\t\t\t}\n\n\t\t\tif( create ){\n\t\t\t\treturn this._render('option', option);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Returns the dom element of the next or previous dom element of the same type\n\t * Note: adjacent options may not be adjacent DOM elements (optgroups)\n\t *\n\t */\n\tgetAdjacent( option:null|HTMLElement, direction:number, type:string = 'option' ) : HTMLElement|null{\n\t\tvar self = this, all;\n\n\t\tif( !option ){\n\t\t\treturn null;\n\t\t}\n\n\t\tif( type == 'item' ){\n\t\t\tall\t\t\t= self.controlChildren();\n\t\t}else{\n\t\t\tall\t\t\t= self.dropdown_content.querySelectorAll('[data-selectable]');\n\t\t}\n\n\t\tfor( let i = 0; i < all.length; i++ ){\n\t\t\tif( all[i] != option ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif( direction > 0 ){\n\t\t\t\treturn all[i+1] as HTMLElement;\n\t\t\t}\n\n\t\t\treturn all[i-1] as HTMLElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\n\t/**\n\t * Returns the dom element of the item\n\t * matching the given value.\n\t *\n\t */\n\tgetItem(item:string|TomItem|null):null|TomItem {\n\n\t\tif( typeof item == 'object' ){\n\t\t\treturn item;\n\t\t}\n\n\t\tvar value = hash_key(item);\n\t\treturn value !== null\n\t\t\t? this.control.querySelector(`[data-value=\"${addSlashes(value)}\"]`)\n\t\t\t: null;\n\t}\n\n\t/**\n\t * \"Selects\" multiple items at once. Adds them to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItems( values:string|string[], silent?:boolean ):void{\n\t\tvar self = this;\n\n\t\tvar items = Array.isArray(values) ? values : [values];\n\t\titems = items.filter(x => self.items.indexOf(x) === -1);\n\t\tfor (let i = 0, n = items.length; i < n; i++) {\n\t\t\tself.isPending = (i < n - 1);\n\t\t\tself.addItem(items[i], silent);\n\t\t}\n\t}\n\n\t/**\n\t * \"Selects\" an item. Adds it to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItem( value:string, silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change','dropdown_close'];\n\n\t\tdebounce_events(this, events, () => {\n\t\t\tvar item, wasFull;\n\t\t\tconst self = this;\n\t\t \tconst inputMode = self.settings.mode;\n\t\t\tconst hashed = hash_key(value);\n\n\t\t\tif( hashed && self.items.indexOf(hashed) !== -1 ){\n\n\t\t\t\tif( inputMode === 'single' ){\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( inputMode === 'single' || !self.settings.duplicates ){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hashed === null || !self.options.hasOwnProperty(hashed)) return;\n\t\t\tif (inputMode === 'single') self.clear(silent);\n\t\t\tif (inputMode === 'multi' && self.isFull()) return;\n\n\t\t\titem = self._render('item', self.options[hashed]);\n\n\t\t\tif( self.control.contains(item) ){ // duplicates\n\t\t\t\titem = item.cloneNode(true) as HTMLElement;\n\t\t\t}\n\n\t\t\twasFull = self.isFull();\n\t\t\tself.items.splice(self.caretPos, 0, hashed);\n\t\t\tself.insertAtCaret(item);\n\n\t\t\tif (self.isSetup) {\n\n\t\t\t\t// update menu / remove the option (if this is not one item being added as part of series)\n\t\t\t\tif( !self.isPending && self.settings.hideSelected ){\n\t\t\t\t\tlet option = self.getOption(hashed);\n\t\t\t\t\tlet next = self.getAdjacent(option, 1);\n\t\t\t\t\tif( next ){\n\t\t\t\t\t\tself.setActiveOption(next);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// refreshOptions after setActiveOption(),\n\t\t\t\t// otherwise setActiveOption() will be called by refreshOptions() with the wrong value\n\t\t\t\tif( !self.isPending && !self.settings.closeAfterSelect ){\n\t\t\t\t\tself.refreshOptions(self.isFocused && inputMode !== 'single');\n\t\t\t\t}\n\n\t\t\t\t// hide the menu if the maximum number of items have been selected or no options are left\n\t\t\t\tif( self.settings.closeAfterSelect != false && self.isFull() ){\n\t\t\t\t\tself.close();\n\t\t\t\t} else if (!self.isPending) {\n\t\t\t\t\tself.positionDropdown();\n\t\t\t\t}\n\n\t\t\t\tself.trigger('item_add', hashed, item);\n\n\t\t\t\tif (!self.isPending) {\n\t\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!self.isPending || (!wasFull && self.isFull())) {\n\t\t\t\tself.inputState();\n\t\t\t\tself.refreshState();\n\t\t\t}\n\n\t\t});\n\t}\n\n\t/**\n\t * Removes the selected item matching\n\t * the provided value.\n\t *\n\t */\n\tremoveItem( item:string|TomItem|null=null, silent?:boolean ){\n\t\tconst self\t\t= this;\n\t\titem\t\t\t= self.getItem(item);\n\n\t\tif( !item ) return;\n\n\t\tvar i,idx;\n\t\tconst value\t= item.dataset.value;\n\t\ti = nodeIndex(item);\n\n\t\titem.remove();\n\t\tif( item.classList.contains('active') ){\n\t\t\tidx = self.activeItems.indexOf(item);\n\t\t\tself.activeItems.splice(idx, 1);\n\t\t\tremoveClasses(item,'active');\n\t\t}\n\n\t\tself.items.splice(i, 1);\n\t\tself.lastQuery = null;\n\t\tif (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n\t\t\tself.removeOption(value, silent);\n\t\t}\n\n\t\tif (i < self.caretPos) {\n\t\t\tself.setCaret(self.caretPos - 1);\n\t\t}\n\n\t\tself.updateOriginalInput({silent: silent});\n\t\tself.refreshState();\n\t\tself.positionDropdown();\n\t\tself.trigger('item_remove', value, item);\n\n\t}\n\n\t/**\n\t * Invokes the `create` method provided in the\n\t * TomSelect options that should provide the data\n\t * for the new item, given the user input.\n\t *\n\t * Once this completes, it will be added\n\t * to the item list.\n\t *\n\t */\n\tcreateItem( input:null|string=null, triggerDropdown:boolean=true, callback:TomCreateCallback = ()=>{} ):boolean{\n\t\tvar self = this;\n\t\tvar caret = self.caretPos;\n\t\tvar output;\n\t\tinput = input || self.inputValue();\n\n\t\tif (!self.canCreate(input)) {\n\t\t\tcallback();\n\t\t\treturn false;\n\t\t}\n\n\t\tself.lock();\n\n\t\tvar created = false;\n\t\tvar create = (data?:boolean|TomOption) => {\n\t\t\tself.unlock();\n\n\t\t\tif (!data || typeof data !== 'object') return callback();\n\t\t\tvar value = hash_key(data[self.settings.valueField]);\n\t\t\tif( typeof value !== 'string' ){\n\t\t\t\treturn callback();\n\t\t\t}\n\n\t\t\tself.setTextboxValue();\n\t\t\tself.addOption(data,true);\n\t\t\tself.setCaret(caret);\n\t\t\tself.addItem(value);\n\t\t\tcallback(data);\n\t\t\tcreated = true;\n\t\t};\n\n\t\tif( typeof self.settings.create === 'function' ){\n\t\t\toutput = self.settings.create.call(this, input, create);\n\t\t}else{\n\t\t\toutput = {\n\t\t\t\t[self.settings.labelField]: input,\n\t\t\t\t[self.settings.valueField]: input,\n\t\t\t};\n\t\t}\n\n\t\tif( !created ){\n\t\t\tcreate(output);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Re-renders the selected item lists.\n\t */\n\trefreshItems() {\n\t\tvar self = this;\n\t\tself.lastQuery = null;\n\n\t\tif (self.isSetup) {\n\t\t\tself.addItems(self.items);\n\t\t}\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Updates all state-dependent attributes\n\t * and CSS classes.\n\t */\n\trefreshState() {\n\t\tconst self = this;\n\n\t\tself.refreshValidityState();\n\n\t\tconst isFull\t= self.isFull();\n\t\tconst isLocked\t= self.isLocked;\n\n\t\tself.wrapper.classList.toggle('rtl',self.rtl);\n\n\n\t\tconst wrap_classList = self.wrapper.classList;\n\n\t\twrap_classList.toggle('focus', self.isFocused)\n\t\twrap_classList.toggle('disabled', self.isDisabled)\n\t\twrap_classList.toggle('required', self.isRequired)\n\t\twrap_classList.toggle('invalid', !self.isValid)\n\t\twrap_classList.toggle('locked', isLocked)\n\t\twrap_classList.toggle('full', isFull)\n\t\twrap_classList.toggle('input-active', self.isFocused && !self.isInputHidden)\n\t\twrap_classList.toggle('dropdown-active', self.isOpen)\n\t\twrap_classList.toggle('has-options', isEmptyObject(self.options) )\n\t\twrap_classList.toggle('has-items', self.items.length > 0);\n\n\t}\n\n\n\t/**\n\t * Update the `required` attribute of both input and control input.\n\t *\n\t * The `required` property needs to be activated on the control input\n\t * for the error to be displayed at the right place. `required` also\n\t * needs to be temporarily deactivated on the input since the input is\n\t * hidden and can't show errors.\n\t */\n\trefreshValidityState() {\n\t\tvar self = this;\n\n\t\tif( !self.input.checkValidity ){\n\t\t\treturn;\n\t\t}\n\n\t\tself.isValid = self.input.checkValidity();\n\t\tself.isInvalid = !self.isValid;\n\t}\n\n\t/**\n\t * Determines whether or not more items can be added\n\t * to the control without exceeding the user-defined maximum.\n\t *\n\t * @returns {boolean}\n\t */\n\tisFull() {\n\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t}\n\n\t/**\n\t * Refreshes the original <select> or <input>\n\t * element to reflect the current state.\n\t *\n\t */\n\tupdateOriginalInput( opts:TomArgObject = {} ){\n\t\tconst self = this;\n\t\tvar option, label;\n\n\t\tconst empty_option = self.input.querySelector('option[value=\"\"]') as HTMLOptionElement;\n\n\t\tif( self.is_select_tag ){\n\n\t\t\tconst selected:HTMLOptionElement[]\t\t= [];\n\t\t\tconst has_selected:number\t\t\t\t= self.input.querySelectorAll('option:checked').length;\n\n\t\t\tfunction AddSelected(option_el:HTMLOptionElement|null, value:string, label:string):HTMLOptionElement{\n\n\t\t\t\tif( !option_el ){\n\t\t\t\t\toption_el = getDom('<option value=\"' + escape_html(value) + '\">' + escape_html(label) + '</option>') as HTMLOptionElement;\n\t\t\t\t}\n\n\t\t\t\t// don't move empty option from top of list\n\t\t\t\t// fixes bug in firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1725293\n\t\t\t\tif( option_el != empty_option ){\n\t\t\t\t\tself.input.append(option_el);\n\t\t\t\t}\n\n\t\t\t\tselected.push(option_el);\n\n\t\t\t\t// marking empty option as selected can break validation\n\t\t\t\t// fixes https://github.com/orchidjs/tom-select/issues/303\n\t\t\t\tif( option_el != empty_option || has_selected > 0 ){\n\t\t\t\t\toption_el.selected = true;\n\t\t\t\t}\n\n\t\t\t\treturn option_el;\n\t\t\t}\n\n\t\t\t// unselect all selected options\n\t\t\tself.input.querySelectorAll('option:checked').forEach((option_el:Element) => {\n\t\t\t\t(<HTMLOptionElement>option_el).selected = false;\n\t\t\t});\n\n\n\t\t\t// nothing selected?\n\t\t\tif( self.items.length == 0 && self.settings.mode == 'single' ){\n\n\t\t\t\tAddSelected(empty_option, \"\", \"\");\n\n\t\t\t// order selected <option> tags for values in self.items\n\t\t\t}else{\n\n\t\t\t\tself.items.forEach((value)=>{\n\t\t\t\t\toption\t\t\t= self.options[value];\n\t\t\t\t\tlabel\t\t\t= option[self.settings.labelField] || '';\n\n\t\t\t\t\tif( selected.includes(option.$option) ){\n\t\t\t\t\t\tconst reuse_opt = self.input.querySelector(`option[value=\"${addSlashes(value)}\"]:not(:checked)`) as HTMLOptionElement;\n\t\t\t\t\t\tAddSelected(reuse_opt, value, label);\n\t\t\t\t\t}else{\n\t\t\t\t\t\toption.$option\t= AddSelected(option.$option, value, label);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t} else {\n\t\t\tself.input.value = self.getValue() as string;\n\t\t}\n\n\t\tif (self.isSetup) {\n\t\t\tif (!opts.silent) {\n\t\t\t\tself.trigger('change', self.getValue() );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Shows the autocomplete dropdown containing\n\t * the available options.\n\t */\n\topen() {\n\t\tvar self = this;\n\n\t\tif (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;\n\t\tself.isOpen = true;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'true'});\n\t\tself.refreshState();\n\t\tapplyCSS(self.dropdown,{visibility: 'hidden', display: 'block'});\n\t\tself.positionDropdown();\n\t\tapplyCSS(self.dropdown,{visibility: 'visible', display: 'block'});\n\t\tself.focus();\n\t\tself.trigger('dropdown_open', self.dropdown);\n\t}\n\n\t/**\n\t * Closes the autocomplete dropdown menu.\n\t */\n\tclose(setTextboxValue=true) {\n\t\tvar self = this;\n\t\tvar trigger = self.isOpen;\n\n\t\tif( setTextboxValue ){\n\n\t\t\t// before blur() to prevent form onchange event\n\t\t\tself.setTextboxValue();\n\n\t\t\tif (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\tself.hideInput();\n\t\t\t}\n\t\t}\n\n\t\tself.isOpen = false;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'false'});\n\t\tapplyCSS(self.dropdown,{display: 'none'});\n\t\tif( self.settings.hideSelected ){\n\t\t\tself.clearActiveOption();\n\t\t}\n\t\tself.refreshState();\n\n\t\tif (trigger) self.trigger('dropdown_close', self.dropdown);\n\t}\n\n\t/**\n\t * Calculates and applies the appropriate\n\t * position of the dropdown if dropdownParent = 'body'.\n\t * Otherwise, position is determined by css\n\t */\n\tpositionDropdown(){\n\n\t\tif( this.settings.dropdownParent !== 'body' ){\n\t\t\treturn;\n\t\t}\n\n\t\tvar context\t\t\t= this.control;\n\t\tvar rect\t\t\t= context.getBoundingClientRect();\n\t\tvar top\t\t\t\t= context.offsetHeight + rect.top + window.scrollY;\n\t\tvar left\t\t\t= rect.left + window.scrollX;\n\n\n\t\tapplyCSS(this.dropdown,{\n\t\t\twidth : rect.width + 'px',\n\t\t\ttop : top + 'px',\n\t\t\tleft : left + 'px'\n\t\t});\n\n\t}\n\n\t/**\n\t * Resets / clears all selected items\n\t * from the control.\n\t *\n\t */\n\tclear(silent?:boolean) {\n\t\tvar self = this;\n\n\t\tif (!self.items.length) return;\n\n\t\tvar items = self.controlChildren();\n\t\titerate(items,(item)=>{\n\t\t\tself.removeItem(item,true);\n\t\t});\n\n\t\tself.showInput();\n\t\tif( !silent ) self.updateOriginalInput();\n\t\tself.trigger('clear');\n\t}\n\n\t/**\n\t * A helper method for inserting an element\n\t * at the current caret position.\n\t *\n\t */\n\tinsertAtCaret(el:HTMLElement) {\n\t\tconst self\t\t= this;\n\t\tconst caret\t\t= self.caretPos;\n\t\tconst target\t= self.control;\n\n\t\ttarget.insertBefore(el, target.children[caret]);\n\n\t\tself.setCaret(caret + 1);\n\t}\n\n\t/**\n\t * Removes the current selected item(s).\n\t *\n\t */\n\tdeleteSelection(e:KeyboardEvent):boolean {\n\t\tvar direction, selection, caret, tail;\n\t\tvar self = this;\n\n\t\tdirection = (e && e.keyCode === constants.KEY_BACKSPACE) ? -1 : 1;\n\t\tselection = getSelection(self.control_input);\n\n\n\t\t// determine items that will be removed\n\t\tconst rm_items:TomItem[]\t= [];\n\n\t\tif (self.activeItems.length) {\n\n\t\t\ttail = getTail(self.activeItems, direction);\n\t\t\tcaret = nodeIndex(tail);\n\n\t\t\tif (direction > 0) { caret++; }\n\n\t\t\titerate(self.activeItems, (item) => rm_items.push(item) );\n\n\t\t} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n\t\t\tconst items = self.controlChildren();\n\t\t\tif (direction < 0 && selection.start === 0 && selection.length === 0) {\n\t\t\t\trm_items.push( items[self.caretPos - 1]);\n\n\t\t\t} else if (direction > 0 && selection.start === self.inputValue().length) {\n\t\t\t\trm_items.push(items[self.caretPos]);\n\t\t\t}\n\t\t}\n\n\t\tconst values = rm_items.map(item => item.dataset.value);\n\n\t\t// allow the callback to abort\n\t\tif (!values.length || (typeof self.settings.onDelete === 'function' && self.settings.onDelete.call(self,values,e) === false)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tpreventDefault(e,true);\n\n\t\t// perform removal\n\t\tif (typeof caret !== 'undefined') {\n\t\t\tself.setCaret(caret);\n\t\t}\n\n\t\twhile( rm_items.length ){\n\t\t\tself.removeItem(rm_items.pop());\n\t\t}\n\n\t\tself.showInput();\n\t\tself.positionDropdown();\n\t\tself.refreshOptions(false);\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Selects the previous / next item (depending on the `direction` argument).\n\t *\n\t * > 0 - right\n\t * < 0 - left\n\t *\n\t */\n\tadvanceSelection(direction:number, e?:MouseEvent|KeyboardEvent) {\n\t\tvar last_active, adjacent, self = this;\n\n\t\tif (self.rtl) direction *= -1;\n\t\tif( self.inputValue().length ) return;\n\n\n\t\t// add or remove to active items\n\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) || isKeyDown('shiftKey',e) ){\n\n\t\t\tlast_active\t\t\t= self.getLastActive(direction);\n\t\t\tif( last_active ){\n\n\t\t\t\tif( !last_active.classList.contains('active') ){\n\t\t\t\t\tadjacent\t\t\t= last_active;\n\t\t\t\t}else{\n\t\t\t\t\tadjacent\t\t\t= self.getAdjacent(last_active,direction,'item');\n\t\t\t\t}\n\n\t\t\t// if no active item, get items adjacent to the control input\n\t\t\t}else if( direction > 0 ){\n\t\t\t\tadjacent\t\t\t= self.control_input.nextElementSibling;\n\t\t\t}else{\n\t\t\t\tadjacent\t\t\t= self.control_input.previousElementSibling;\n\t\t\t}\n\n\n\t\t\tif( adjacent ){\n\t\t\t\tif( adjacent.classList.contains('active') ){\n\t\t\t\t\tself.removeActiveItem(last_active);\n\t\t\t\t}\n\t\t\t\tself.setActiveItemClass(adjacent); // mark as last_active !! after removeActiveItem() on last_active\n\t\t\t}\n\n\t\t// move caret to the left or right\n\t\t}else{\n\t\t\tself.moveCaret(direction);\n\t\t}\n\t}\n\n\tmoveCaret(direction:number){}\n\n\t/**\n\t * Get the last active item\n\t *\n\t */\n\tgetLastActive(direction?:number){\n\n\t\tlet last_active = this.control.querySelector('.last-active');\n\t\tif( last_active ){\n\t\t\treturn last_active;\n\t\t}\n\n\n\t\tvar result = this.control.querySelectorAll('.active');\n\t\tif( result ){\n\t\t\treturn getTail(result,direction);\n\t\t}\n\t}\n\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tsetCaret(new_pos:number) {\n\t\tthis.caretPos = this.items.length;\n\t}\n\n\t/**\n\t * Return list of item dom elements\n\t *\n\t */\n\tcontrolChildren():TomItem[]{\n\t\treturn Array.from( this.control.querySelectorAll('[data-ts-item]') ) as TomItem[];\n\t}\n\n\t/**\n\t * Disables user input on the control. Used while\n\t * items are being asynchronously created.\n\t */\n\tlock() {\n\t\tthis.isLocked = true;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Re-enables user input on the control.\n\t */\n\tunlock() {\n\t\tthis.isLocked = false;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Disables user input on the control completely.\n\t * While disabled, it cannot receive focus.\n\t */\n\tdisable() {\n\t\tvar self = this;\n\t\tself.input.disabled\t\t\t\t= true;\n\t\tself.control_input.disabled\t\t= true;\n\t\tself.focus_node.tabIndex\t\t= -1;\n\t\tself.isDisabled\t\t\t\t\t= true;\n\t\tthis.close();\n\t\tself.lock();\n\t}\n\n\t/**\n\t * Enables the control so that it can respond\n\t * to focus and user input.\n\t */\n\tenable() {\n\t\tvar self = this;\n\t\tself.input.disabled\t\t\t\t= false;\n\t\tself.control_input.disabled\t\t= false;\n\t\tself.focus_node.tabIndex\t\t= self.tabIndex;\n\t\tself.isDisabled\t\t\t\t\t= false;\n\t\tself.unlock();\n\t}\n\n\t/**\n\t * Completely destroys the control and\n\t * unbinds all event listeners so that it can\n\t * be garbage collected.\n\t */\n\tdestroy() {\n\t\tvar self = this;\n\t\tvar revertSettings = self.revertSettings;\n\n\t\tself.trigger('destroy');\n\t\tself.off();\n\t\tself.wrapper.remove();\n\t\tself.dropdown.remove();\n\n\t\tself.input.innerHTML = revertSettings.innerHTML;\n\t\tself.input.tabIndex = revertSettings.tabIndex;\n\n\t\tremoveClasses(self.input,'tomselected','ts-hidden-accessible');\n\n\t\tself._destroy();\n\n\t\tdelete self.input.tomselect;\n\t}\n\n\t/**\n\t * A helper method for rendering \"item\" and\n\t * \"option\" templates, given the data.\n\t *\n\t */\n\trender( templateName:TomTemplateNames, data?:any ):null|HTMLElement{\n\n\t\tif( typeof this.settings.render[templateName] !== 'function' ){\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this._render(templateName, data);\n\t}\n\n\t/**\n\t * _render() can be called directly when we know we don't want to hit the cache\n\t * return type could be null for some templates, we need https://github.com/microsoft/TypeScript/issues/33014\n\t */\n\t_render( templateName:TomTemplateNames, data?:any ):HTMLElement{\n\t\tvar value = '', id, html;\n\t\tconst self = this;\n\n\t\tif( templateName === 'option' || templateName == 'item' ){\n\t\t\tvalue\t= get_hash(data[self.settings.valueField]);\n\t\t}\n\n\t\t// render markup\n\t\thtml = self.settings.render[templateName].call(this, data, escape_html);\n\n\t\tif( html == null ){\n\t\t\treturn html;\n\t\t}\n\n\t\thtml = getDom( html );\n\n\t\t// add mandatory attributes\n\t\tif (templateName === 'option' || templateName === 'option_create') {\n\n\t\t\tif( data[self.settings.disabledField] ){\n\t\t\t\tsetAttr(html,{'aria-disabled':'true'});\n\t\t\t}else{\n\t\t\t\tsetAttr(html,{'data-selectable': ''});\n\t\t\t}\n\n\t\t}else if (templateName === 'optgroup') {\n\t\t\tid = data.group[self.settings.optgroupValueField];\n\t\t\tsetAttr(html,{'data-group': id});\n\t\t\tif(data.group[self.settings.disabledField]) {\n\t\t\t\tsetAttr(html,{'data-disabled': ''});\n\t\t\t}\n\t\t}\n\n\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\tsetAttr(html,{'data-value': value });\n\n\n\t\t\t// make sure we have some classes if a template is overwritten\n\t\t\tif( templateName === 'item' ){\n\t\t\t\taddClasses(html,self.settings.itemClass);\n\t\t\t\tsetAttr(html,{'data-ts-item':''});\n\t\t\t}else{\n\t\t\t\taddClasses(html,self.settings.optionClass);\n\t\t\t\tsetAttr(html,{\n\t\t\t\t\trole:'option',\n\t\t\t\t\tid:data.$id\n\t\t\t\t});\n\n\t\t\t\t// update cache\n\t\t\t\tself.options[value].$div = html;\n\t\t\t}\n\n\n\t\t}\n\n\t\treturn html;\n\t}\n\n\n\t/**\n\t * Clears the render cache for a template. If\n\t * no template is given, clears all render\n\t * caches.\n\t *\n\t */\n\tclearCache():void{\n\n\t\titerate(this.options, (option, value)=>{\n\t\t\tif( option.$div ){\n\t\t\t\toption.$div.remove();\n\t\t\t\tdelete option.$div;\n\t\t\t}\n\t\t});\n\n\t}\n\n\t/**\n\t * Removes a value from item and option caches\n\t *\n\t */\n\tuncacheValue(value:string){\n\n\t\tconst option_el\t\t\t= this.getOption(value);\n\t\tif( option_el ) option_el.remove();\n\n\t}\n\n\t/**\n\t * Determines whether or not to display the\n\t * create item prompt, given a user input.\n\t *\n\t */\n\tcanCreate( input:string ):boolean {\n\t\treturn this.settings.create && (input.length > 0) && (this.settings.createFilter as TomCreateFilter ).call(this, input);\n\t}\n\n\n\t/**\n\t * Wraps this.`method` so that `new_fn` can be invoked 'before', 'after', or 'instead' of the original method\n\t *\n\t * this.hook('instead','onKeyDown',function( arg1, arg2 ...){\n\t *\n\t * });\n\t */\n\thook( when:string, method:string, new_fn:any ){\n\t\tvar self = this;\n\t\tvar orig_method = self[method];\n\n\n\t\tself[method] = function(){\n\t\t\tvar result, result_new;\n\n\t\t\tif( when === 'after' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\tresult_new = new_fn.apply(self, arguments );\n\n\t\t\tif( when === 'instead' ){\n\t\t\t\treturn result_new;\n\t\t\t}\n\n\t\t\tif( when === 'before' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\n\t}\n\n};\n"],"names":["forEvents","events","callback","split","forEach","event","MicroEvent","constructor","_events","on","fct","push","off","n","arguments","length","splice","indexOf","trigger","args","self","apply","MicroPlugin","Interface","plugins","names","settings","requested","loaded","define","name","fn","initializePlugins","key","queue","Array","isArray","plugin","options","hasOwnProperty","shift","require","loadPlugin","Error","latin_pat","accent_pat","accent_reg","RegExp","diacritic_patterns","latin_convert","convert_pat","Object","keys","join","code_points","asciifold","str","normalize","replace","toLowerCase","foreignletter","arrayToPattern","chars","glue","longest","a","Math","max","allSubstrings","input","result","substring","subresult","tmp","slice","charAt","unshift","generateDiacritics","diacritics","code_range","i","diacritic","String","fromCharCode","latin","patt","match","latin_chars","sort","b","substrings","pattern","map","sub_pat","l","diacriticRegexPoints","regex","undefined","decomposed","part","no_accent","composed_part","getAttr","obj","getAttrNesting","scoreValue","value","token","weight","score","pos","search","string","escape_regex","propToArray","iterate","object","cmp","Sifter","items","tokenize","query","respect_word_boundaries","weights","tokens","words","field_regex","word","field_match","field","getScoreFunction","prepareSearch","_getScoreFunction","token_count","fields","field_count","getAttrFn","scoreObject","data","sum","conjunction","getSortFunction","_getSortFunction","implicit_score","sort_empty","sort_flds","multipliers","bind","get_field","id","direction","sort_flds_count","sort_fld","multiplier","optsUser","assign","trim","total","nesting","fn_score","item","filter","_","fn_sort","limit","getDom","jquery","HTMLElement","isHtmlString","div","document","createElement","innerHTML","firstChild","querySelector","arg","escapeQuery","triggerEvent","dom_el","event_name","createEvent","initEvent","dispatchEvent","applyCSS","css","style","addClasses","elmts","classes","norm_classes","classesArray","castAsArray","el","cls","classList","add","removeClasses","remove","_classes","concat","Boolean","parentMatch","target","selector","wrapper","contains","matches","parentNode","getTail","list","isEmptyObject","nodeIndex","amongst","nodeName","previousElementSibling","setAttr","attrs","val","attr","removeAttribute","setAttribute","replaceNode","existing","replacement","replaceChild","highlight","element","highlightText","node","spannode","className","middlebit","splitText","index","middleclone","cloneNode","appendChild","highlightChildren","nodeType","childNodes","test","tagName","highlightRecursive","removeHighlight","elements","querySelectorAll","prototype","call","parent","KEY_A","KEY_RETURN","KEY_ESC","KEY_LEFT","KEY_UP","KEY_RIGHT","KEY_DOWN","KEY_BACKSPACE","KEY_DELETE","KEY_TAB","IS_MAC","navigator","userAgent","KEY_SHORTCUT","optgroups","delimiter","splitOn","persist","create","createOnBlur","createFilter","openOnFocus","shouldOpen","maxOptions","maxItems","hideSelected","duplicates","addPrecedence","selectOnTab","preload","allowEmptyOption","loadThrottle","loadingClass","dataAttr","optgroupField","valueField","labelField","disabledField","optgroupLabelField","optgroupValueField","lockOptgroupOrder","sortField","searchField","searchConjunction","mode","wrapperClass","controlClass","dropdownClass","dropdownContentClass","itemClass","optionClass","dropdownParent","controlInput","copyClassesToDropdown","placeholder","hidePlaceholder","shouldLoad","render","hash_key","get_hash","escape_html","loadDebounce","delay","timeout","loading","clearTimeout","setTimeout","loadedSearches","debounce_events","types","type","event_args","getSelection","start","selectionStart","selectionEnd","preventDefault","evt","stop","stopPropagation","addEvent","addEventListener","isKeyDown","key_name","count","altKey","ctrlKey","shiftKey","metaKey","getId","existing_id","getAttribute","addSlashes","append","getSettings","settings_user","defaults","attr_data","field_label","field_value","field_disabled","field_optgroup","field_optgroup_label","field_optgroup_value","tag_name","option","textContent","settings_element","init_select","optionsMap","group_count","readData","dataset","json","JSON","parse","addOption","group","arr","option_data","disabled","$option","selected","addGroup","optgroup","optgroup_data","children","hasAttribute","child","init_textbox","data_raw","values","opt","instance_i","TomSelect","input_arg","user_settings","control_input","dropdown","control","dropdown_content","focus_node","order","tabIndex","is_select_tag","rtl","inputId","_destroy","sifter","isOpen","isDisabled","isRequired","isInvalid","isValid","isLocked","isFocused","isInputHidden","isSetup","ignoreFocus","hasOptions","currentResults","lastValue","caretPos","activeOption","activeItems","userOptions","dir","tomselect","computedStyle","window","getComputedStyle","getPropertyValue","required","setupCallbacks","setupTemplates","_render","inputMode","setup","passive_event","passive","listboxId","role","control_id","label","label_click","focus","for","label_id","width","classes_plugins","multiple","load","onOptionSelect","target_match","onItemSelect","onClick","e","onKeyDown","onKeyPress","onInput","positionDropdown","onBlur","onFocus","onPaste","doc_mousedown","composedPath","blur","inputState","win_scroll","removeEventListener","revertSettings","insertAdjacentElement","sync","refreshState","updateOriginalInput","refreshItems","close","disable","enable","onChange","setupOptions","addOptions","registerOptionGroup","templates","escape","callbacks","get_settings","setValue","lastQuery","clearActiveItems","onMouseDown","pastedText","inputValue","splitInput","piece","createItem","character","keyCode","which","constants","selectAll","open","next","getAdjacent","setActiveOption","prev","canSelect","advanceSelection","deleteSelection","refreshOptions","wasFocused","showInput","hasFocus","deactivate","setActiveItem","setCaret","parentElement","closeAfterSelect","addItem","canLoad","loadCallback","clearActiveOption","setTextboxValue","changed","getValue","silent","clear","addItems","setMaxItems","eventName","begin","end","swap","last","getLastActive","setActiveItemClass","removeActiveItem","hideInput","last_active","idx","scrollToOption","behavior","content","height_menu","clientHeight","scrollTop","height_item","offsetHeight","y","getBoundingClientRect","top","scroll","scrollBehavior","controlChildren","toggle","offsetWidth","getSearchOptions","calculateScore","hashed","triggerDropdown","j","k","html","has_create_option","active_value","active_group","groups","groups_order","results","active_option","show_dropdown","closest","min","opt_value","option_el","getOption","includes","createDocumentFragment","$id","a_order","$order","b_order","group_options","header","group_html","tok","add_template","template","insertBefore","canCreate","active_index","selectable","user_created","dat","registerOption","addOptionGroup","hashed_id","removeOptionGroup","clearCache","clearOptionGroups","updateOption","item_new","index_item","value_old","value_new","getItem","uncacheValue","option_new","removeOption","removeItem","clearOptions","$div","all","x","isPending","wasFull","isFull","insertAtCaret","caret","output","lock","created","unlock","refreshValidityState","wrap_classList","checkValidity","opts","empty_option","has_selected","AddSelected","reuse_opt","visibility","display","context","rect","scrollY","left","scrollX","selection","tail","rm_items","onDelete","pop","adjacent","nextElementSibling","moveCaret","new_pos","from","destroy","templateName","hook","when","method","new_fn","orig_method","result_new"],"mappings":"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"}
1
+ {"version":3,"file":"tom-select.js","sources":["../../src/contrib/microevent.ts","../../src/contrib/microplugin.ts","../../node_modules/@orchidjs/sifter/lib/diacritics.ts","../../node_modules/@orchidjs/sifter/lib/utils.ts","../../node_modules/@orchidjs/sifter/lib/sifter.ts","../../src/vanilla.ts","../../src/contrib/highlight.ts","../../src/constants.ts","../../src/defaults.ts","../../src/utils.ts","../../src/getSettings.ts","../../src/tom-select.ts"],"sourcesContent":["/**\n * MicroEvent - to make any js object an event emitter\n *\n * - pure javascript - server compatible, browser compatible\n * - dont rely on the browser doms\n * - super simple - you get it immediatly, no mistery, no magic involved\n *\n * @author Jerome Etienne (https://github.com/jeromeetienne)\n */\n\ntype TCallback = (...args:any) => any;\n\n/**\n * Execute callback for each event in space separated list of event names\n *\n */\nfunction forEvents(events:string,callback:(event:string)=>any){\n\tevents.split(/\\s+/).forEach((event) =>{\n\t\tcallback(event);\n\t});\n}\n\nexport default class MicroEvent{\n\n\tpublic _events: {[key:string]:TCallback[]};\n\n\tconstructor(){\n\t\tthis._events = {};\n\t}\n\n\ton(events:string, fct:TCallback){\n\t\tforEvents(events,(event) => {\n\t\t\tthis._events[event] = this._events[event] || [];\n\t\t\tthis._events[event].push(fct);\n\t\t});\n\t}\n\n\toff(events:string, fct:TCallback){\n\t\tvar n = arguments.length;\n\t\tif( n === 0 ){\n\t\t\tthis._events = {};\n\t\t\treturn;\n\t\t}\n\n\t\tforEvents(events,(event) => {\n\n\t\t\tif (n === 1) return delete this._events[event];\n\n\t\t\tif (event in this._events === false) return;\n\t\t\tthis._events[event].splice(this._events[event].indexOf(fct), 1);\n\t\t});\n\t}\n\n\ttrigger(events:string, ...args:any){\n\t\tvar self = this;\n\n\t\tforEvents(events,(event) => {\n\t\t\tif(event in self._events === false) return;\n\t\t\tfor( let fct of self._events[event] ){\n\t\t\t\tfct.apply(self, args );\n\t\t\t}\n\t\t});\n\t}\n};\n","/**\n * microplugin.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\ntype TSettings = {\n\t[key:string]:any\n}\n\ntype TPlugins = {\n\tnames: string[],\n\tsettings: TSettings,\n\trequested: {[key:string]:boolean},\n\tloaded: {[key:string]:any}\n};\n\nexport type TPluginItem = {name:string,options:{}};\nexport type TPluginHash = {[key:string]:{}};\n\n\n\n\nexport default function MicroPlugin(Interface: any ){\n\n\tInterface.plugins = {};\n\n\treturn class extends Interface{\n\n\t\tpublic plugins:TPlugins = {\n\t\t\tnames : [],\n\t\t\tsettings : {},\n\t\t\trequested : {},\n\t\t\tloaded : {}\n\t\t};\n\n\t\t/**\n\t\t * Registers a plugin.\n\t\t *\n\t\t * @param {function} fn\n\t\t */\n\t\tstatic define(name:string, fn:(this:any,settings:TSettings)=>any){\n\t\t\tInterface.plugins[name] = {\n\t\t\t\t'name' : name,\n\t\t\t\t'fn' : fn\n\t\t\t};\n\t\t}\n\n\n\t\t/**\n\t\t * Initializes the listed plugins (with options).\n\t\t * Acceptable formats:\n\t\t *\n\t\t * List (without options):\n\t\t * ['a', 'b', 'c']\n\t\t *\n\t\t * List (with options):\n\t\t * [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t\t *\n\t\t * Hash (with options):\n\t\t * {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t\t *\n\t\t * @param {array|object} plugins\n\t\t */\n\t\tinitializePlugins(plugins:string[]|TPluginItem[]|TPluginHash) {\n\t\t\tvar key, name;\n\t\t\tconst self = this;\n\t\t\tconst queue:string[] = [];\n\n\t\t\tif (Array.isArray(plugins)) {\n\t\t\t\tplugins.forEach((plugin:string|TPluginItem)=>{\n\t\t\t\t\tif (typeof plugin === 'string') {\n\t\t\t\t\t\tqueue.push(plugin);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.plugins.settings[plugin.name] = plugin.options;\n\t\t\t\t\t\tqueue.push(plugin.name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (plugins) {\n\t\t\t\tfor (key in plugins) {\n\t\t\t\t\tif (plugins.hasOwnProperty(key)) {\n\t\t\t\t\t\tself.plugins.settings[key] = plugins[key];\n\t\t\t\t\t\tqueue.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile( name = queue.shift() ){\n\t\t\t\tself.require(name);\n\t\t\t}\n\t\t}\n\n\t\tloadPlugin(name:string) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\t\t\tvar plugin = Interface.plugins[name];\n\n\t\t\tif (!Interface.plugins.hasOwnProperty(name)) {\n\t\t\t\tthrow new Error('Unable to find \"' + name + '\" plugin');\n\t\t\t}\n\n\t\t\tplugins.requested[name] = true;\n\t\t\tplugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t\t\tplugins.names.push(name);\n\t\t}\n\n\t\t/**\n\t\t * Initializes a plugin.\n\t\t *\n\t\t */\n\t\trequire(name:string) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\n\t\t\tif (!self.plugins.loaded.hasOwnProperty(name)) {\n\t\t\t\tif (plugins.requested[name]) {\n\t\t\t\t\tthrow new Error('Plugin has circular dependency (\"' + name + '\")');\n\t\t\t\t}\n\t\t\t\tself.loadPlugin(name);\n\t\t\t}\n\n\t\t\treturn plugins.loaded[name];\n\t\t}\n\n\t};\n\n}\n","\n// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport { escape_regex } from './utils.ts';\n\ntype TDiacraticList = {[key:string]:string};\n\n// https://github.com/andrewrk/node-diacritics/blob/master/index.js\n\nvar latin_pat:RegExp;\nconst accent_pat = '[\\u0300-\\u036F\\u{b7}\\u{2be}]'; // \\u{2bc}\nconst accent_reg = new RegExp(accent_pat,'gu');\nvar diacritic_patterns:TDiacraticList;\n\nconst latin_convert:TDiacraticList = {\n\t'æ': 'ae',\n\t'ⱥ': 'a',\n\t'ø': 'o',\n};\n\nconst convert_pat = new RegExp(Object.keys(latin_convert).join('|'),'gu');\n\nconst code_points:[[number,number]] = [[ 0, 65535 ]];\n\n/**\n * Remove accents\n * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n *\n */\nexport const asciifold = (str:string):string => {\n\treturn str\n\t\t.normalize('NFKD')\n\t\t.replace(accent_reg, '')\n\t\t.toLowerCase()\n\t\t.replace(convert_pat,function(foreignletter) {\n\t\t\treturn latin_convert[foreignletter];\n\t\t});\n};\n\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n *\n */\nexport const arrayToPattern = (chars:string[],glue:string='|'):string =>{\n\n\tif( chars.length == 1 ){\n\t\treturn chars[0];\n\t}\n\n\tvar longest = 1;\n\tchars.forEach((a)=>{longest = Math.max(longest,a.length)});\n\n\tif( longest == 1 ){\n\t\treturn '['+chars.join('')+']';\n\t}\n\n\treturn '(?:'+chars.join(glue)+')';\n};\n\nexport const escapeToPattern = (chars:string[]):string =>{\n\tconst escaped = chars.map((diacritic) => escape_regex(diacritic));\n\treturn arrayToPattern(escaped);\n};\n\n/**\n * Get all possible combinations of substrings that add up to the given string\n * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n *\n */\nexport const allSubstrings = (input:string):string[][] => {\n\n if( input.length === 1) return [[input]];\n\n var result:string[][] = [];\n allSubstrings(input.substring(1)).forEach(function(subresult) {\n var tmp = subresult.slice(0);\n tmp[0] = input.charAt(0) + tmp[0];\n result.push(tmp);\n\n tmp = subresult.slice(0);\n tmp.unshift(input.charAt(0));\n result.push(tmp);\n });\n\n return result;\n}\n\n/**\n * Generate a list of diacritics from the list of code points\n *\n */\nexport const generateDiacritics = (code_points:[[number,number]]):TDiacraticList => {\n\n\tvar diacritics:{[key:string]:string[]} = {};\n\tcode_points.forEach((code_range)=>{\n\n\t\tfor(let i = code_range[0]; i <= code_range[1]; i++){\n\n\t\t\tlet diacritic\t= String.fromCharCode(i);\n\t\t\tlet\tlatin\t\t= asciifold(diacritic);\n\n\t\t\tif( latin == diacritic.toLowerCase() ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// skip when latin is a string longer than 3 characters long\n\t\t\t// bc the resulting regex patterns will be long\n\t\t\t// eg:\n\t\t\t// latin صلى الله عليه وسلم length 18 code point 65018\n\t\t\t// latin جل جلاله length 8 code point 65019\n\t\t\tif( latin.length > 3 ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif( !(latin in diacritics) ){\n\t\t\t\tdiacritics[latin] = [latin];\n\t\t\t}\n\n\t\t\tvar patt = new RegExp( escapeToPattern(diacritics[latin]),'iu');\n\t\t\tif( diacritic.match(patt) ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdiacritics[latin].push(diacritic);\n\t\t}\n\t});\n\n\t// filter out if there's only one character in the list\n\tlet latin_chars = Object.keys(diacritics);\n\tfor( let i = 0; i < latin_chars.length; i++){\n\t\tconst latin = latin_chars[i];\n\t\tif( diacritics[latin].length < 2 ){\n\t\t\tdelete diacritics[latin];\n\t\t}\n\t}\n\n\n\t// latin character pattern\n\t// match longer substrings first\n\tlatin_chars\t\t= Object.keys(diacritics).sort((a, b) => b.length - a.length );\n\tlatin_pat\t\t= new RegExp('('+ escapeToPattern(latin_chars) + accent_pat + '*)','gu');\n\n\n\t// build diacritic patterns\n\t// ae needs:\n\t//\t(?:(?:ae|Æ|Ǽ|Ǣ)|(?:A|Ⓐ|A...)(?:E|ɛ|Ⓔ...))\n\tvar diacritic_patterns:TDiacraticList = {};\n\tlatin_chars.sort((a,b) => a.length -b.length).forEach((latin)=>{\n\n\t\tvar substrings\t= allSubstrings(latin);\n\t\tvar pattern = substrings.map((sub_pat)=>{\n\n\t\t\tsub_pat = sub_pat.map((l)=>{\n\t\t\t\tif( diacritics.hasOwnProperty(l) ){\n\t\t\t\t\treturn escapeToPattern(diacritics[l]);\n\t\t\t\t}\n\t\t\t\treturn l;\n\t\t\t});\n\n\t\t\treturn arrayToPattern(sub_pat,'');\n\t\t});\n\n\t\tdiacritic_patterns[latin] = arrayToPattern(pattern);\n\t});\n\n\n\treturn diacritic_patterns;\n}\n\n/**\n * Expand a regular expression pattern to include diacritics\n * \teg /a/ becomes /aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑAⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ/\n *\n */\nexport const diacriticRegexPoints = (regex:string):string => {\n\n\tif( diacritic_patterns === undefined ){\n\t\tdiacritic_patterns = generateDiacritics(code_points);\n\t}\n\n\tconst decomposed\t\t= regex.normalize('NFKD').toLowerCase();\n\n\treturn decomposed.split(latin_pat).map((part:string)=>{\n\n\t\t// \"ffl\" or \"ffl\"\n\t\tconst no_accent = asciifold(part);\n\t\tif( no_accent == '' ){\n\t\t\treturn '';\n\t\t}\n\n\t\tif( diacritic_patterns.hasOwnProperty(no_accent) ){\n\t\t\treturn diacritic_patterns[no_accent];\n\t\t}\n\n\t\treturn part;\n\t}).join('');\n\n}\n","\n// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport { asciifold } from './diacritics.ts';\n\n// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport * as T from './types.ts';\n\n\n/**\n * A property getter resolving dot-notation\n * @param {Object} obj The root object to fetch property on\n * @param {String} name The optionally dotted property name to fetch\n * @return {Object} The resolved property value\n */\nexport const getAttr = (obj:{[key:string]:any}, name:string ) => {\n if (!obj ) return;\n return obj[name];\n};\n\n/**\n * A property getter resolving dot-notation\n * @param {Object} obj The root object to fetch property on\n * @param {String} name The optionally dotted property name to fetch\n * @return {Object} The resolved property value\n */\nexport const getAttrNesting = (obj:{[key:string]:any}, name:string ) => {\n if (!obj ) return;\n var part, names = name.split(\".\");\n\twhile( (part = names.shift()) && (obj = obj[part]));\n return obj;\n};\n\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\nexport const scoreValue = (value:string, token:T.Token, weight:number ):number => {\n\tvar score, pos;\n\n\tif (!value) return 0;\n\n\tvalue = value + '';\n\tpos = value.search(token.regex);\n\tif (pos === -1) return 0;\n\n\tscore = token.string.length / value.length;\n\tif (pos === 0) score += 0.5;\n\n\treturn score * weight;\n};\n\n/**\n *\n * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n */\nexport const escape_regex = (str:string):string => {\n\treturn (str + '').replace(/([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])/gu, '\\\\$1');\n};\n\n\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\nexport const propToArray = (obj:{[key:string]:any}, key:string) => {\n\tvar value = obj[key];\n\n\tif( typeof value == 'function' ) return value;\n\n\tif( value && !Array.isArray(value) ){\n\t\tobj[key] = [value];\n\t}\n}\n\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:number|string)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nexport const cmp = (a:number|string, b:number|string) => {\n\tif (typeof a === 'number' && typeof b === 'number') {\n\t\treturn a > b ? 1 : (a < b ? -1 : 0);\n\t}\n\ta = asciifold(a + '').toLowerCase();\n\tb = asciifold(b + '').toLowerCase();\n\tif (a > b) return 1;\n\tif (b > a) return -1;\n\treturn 0;\n};\n","/**\n * sifter.js\n * Copyright (c) 2013–2020 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\n // @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport { scoreValue, getAttr, getAttrNesting, escape_regex, propToArray, iterate, cmp } from './utils.ts';\n// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport { diacriticRegexPoints } from './diacritics.ts';\n// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\nimport * as T from 'types.ts';\n\nexport default class Sifter{\n\n\tpublic items; // []|{};\n\tpublic settings: T.Settings;\n\n\t/**\n\t * Textually searches arrays and hashes of objects\n\t * by property (or multiple properties). Designed\n\t * specifically for autocomplete.\n\t *\n\t */\n\tconstructor(items:any, settings:T.Settings) {\n\t\tthis.items = items;\n\t\tthis.settings = settings || {diacritics: true};\n\t};\n\n\t/**\n\t * Splits a search string into an array of individual\n\t * regexps to be used to match results.\n\t *\n\t */\n\ttokenize(query:string, respect_word_boundaries?:boolean, weights?:T.Weights ):T.Token[] {\n\t\tif (!query || !query.length) return [];\n\n\t\tconst tokens:T.Token[]\t= [];\n\t\tconst words\t\t\t\t= query.split(/\\s+/);\n\t\tvar field_regex:RegExp;\n\n\t\tif( weights ){\n\t\t\tfield_regex = new RegExp( '^('+ Object.keys(weights).map(escape_regex).join('|')+')\\:(.*)$');\n\t\t}\n\n\t\twords.forEach((word:string) => {\n\t\t\tlet field_match;\n\t\t\tlet field:null|string\t= null;\n\t\t\tlet regex:null|string\t= null;\n\n\t\t\t// look for \"field:query\" tokens\n\t\t\tif( field_regex && (field_match = word.match(field_regex)) ){\n\t\t\t\tfield\t= field_match[1];\n\t\t\t\tword\t= field_match[2];\n\t\t\t}\n\n\t\t\tif( word.length > 0 ){\n\t\t\t\tif( this.settings.diacritics ){\n\t\t\t\t\tregex = diacriticRegexPoints(word);\n\t\t\t\t}else{\n\t\t\t\t\tregex = escape_regex(word);\n\t\t\t\t}\n\t\t\t\tif( respect_word_boundaries ) regex = \"\\\\b\"+regex;\n\t\t\t}\n\n\t\t\ttokens.push({\n\t\t\t\tstring : word,\n\t\t\t\tregex : regex ? new RegExp(regex,'iu') : null,\n\t\t\t\tfield : field,\n\t\t\t});\n\t\t});\n\n\t\treturn tokens;\n\t};\n\n\n\t/**\n\t * Returns a function to be used to score individual results.\n\t *\n\t * Good matches will have a higher score than poor matches.\n\t * If an item is not a match, 0 will be returned by the function.\n\t *\n\t * @returns {function}\n\t */\n\tgetScoreFunction(query:string, options:T.Options ){\n\t\tvar search = this.prepareSearch(query, options);\n\t\treturn this._getScoreFunction(search);\n\t}\n\n\t_getScoreFunction(search:T.PrepareObj ){\n\t\tconst tokens\t\t= search.tokens,\n\t\ttoken_count\t\t\t= tokens.length;\n\n\t\tif (!token_count) {\n\t\t\treturn function() { return 0; };\n\t\t}\n\n\t\tconst fields\t= search.options.fields,\n\t\tweights\t\t\t= search.weights,\n\t\tfield_count\t\t= fields.length,\n\t\tgetAttrFn\t\t= search.getAttrFn;\n\n\t\tif (!field_count) {\n\t\t\treturn function() { return 1; };\n\t\t}\n\n\n\t\t/**\n\t\t * Calculates the score of an object\n\t\t * against the search query.\n\t\t *\n\t\t */\n\t\tconst scoreObject = (function() {\n\n\n\t\t\tif (field_count === 1) {\n\t\t\t\treturn function(token:T.Token, data:{}) {\n\t\t\t\t\tconst field = fields[0].field;\n\t\t\t\t\treturn scoreValue(getAttrFn(data, field), token, weights[field]);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn function(token:T.Token, data:{}) {\n\t\t\t\tvar sum = 0;\n\n\t\t\t\t// is the token specific to a field?\n\t\t\t\tif( token.field ){\n\n\t\t\t\t\tconst value = getAttrFn(data, token.field);\n\n\t\t\t\t\tif( !token.regex && value ){\n\t\t\t\t\t\tsum += (1/field_count);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tsum += scoreValue(value, token, 1);\n\t\t\t\t\t}\n\n\n\n\t\t\t\t}else{\n\t\t\t\t\titerate(weights, (weight:number, field:string) => {\n\t\t\t\t\t\tsum += scoreValue(getAttrFn(data, field), token, weight);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn sum / field_count;\n\t\t\t};\n\t\t})();\n\n\t\tif (token_count === 1) {\n\t\t\treturn function(data:{}) {\n\t\t\t\treturn scoreObject(tokens[0], data);\n\t\t\t};\n\t\t}\n\n\t\tif (search.options.conjunction === 'and') {\n\t\t\treturn function(data:{}) {\n\t\t\t\tvar i = 0, score, sum = 0;\n\t\t\t\tfor (; i < token_count; i++) {\n\t\t\t\t\tscore = scoreObject(tokens[i], data);\n\t\t\t\t\tif (score <= 0) return 0;\n\t\t\t\t\tsum += score;\n\t\t\t\t}\n\t\t\t\treturn sum / token_count;\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(data:{}) {\n\t\t\t\tvar sum = 0;\n\t\t\t\titerate(tokens,(token:T.Token)=>{\n\t\t\t\t\tsum += scoreObject(token, data);\n\t\t\t\t});\n\t\t\t\treturn sum / token_count;\n\t\t\t};\n\t\t}\n\t};\n\n\t/**\n\t * Returns a function that can be used to compare two\n\t * results, for sorting purposes. If no sorting should\n\t * be performed, `null` will be returned.\n\t *\n\t * @return function(a,b)\n\t */\n\tgetSortFunction(query:string, options:T.Options) {\n\t\tvar search = this.prepareSearch(query, options);\n\t\treturn this._getSortFunction(search);\n\t}\n\n\t_getSortFunction(search:T.PrepareObj){\n\t\tvar i, n, implicit_score;\n\n\t\tconst self\t= this,\n\t\toptions\t\t= search.options,\n\t\tsort\t\t= (!search.query && options.sort_empty) ? options.sort_empty : options.sort,\n\t\tsort_flds:T.Sort[]\t\t= [],\n\t\tmultipliers:number[]\t= [];\n\n\n\t\tif( typeof sort == 'function' ){\n\t\t\treturn sort.bind(this);\n\t\t}\n\n\t\t/**\n\t\t * Fetches the specified sort field value\n\t\t * from a search result item.\n\t\t *\n\t\t */\n\t\tconst get_field = function(name:string, result:T.ResultItem):string|number {\n\t\t\tif (name === '$score') return result.score;\n\t\t\treturn search.getAttrFn(self.items[result.id], name);\n\t\t};\n\n\t\t// parse options\n\t\tif (sort) {\n\t\t\tfor (i = 0, n = sort.length; i < n; i++) {\n\t\t\t\tif (search.query || sort[i].field !== '$score') {\n\t\t\t\t\tsort_flds.push(sort[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// the \"$score\" field is implied to be the primary\n\t\t// sort field, unless it's manually specified\n\t\tif (search.query) {\n\t\t\timplicit_score = true;\n\t\t\tfor (i = 0, n = sort_flds.length; i < n; i++) {\n\t\t\t\tif (sort_flds[i].field === '$score') {\n\t\t\t\t\timplicit_score = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (implicit_score) {\n\t\t\t\tsort_flds.unshift({field: '$score', direction: 'desc'});\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0, n = sort_flds.length; i < n; i++) {\n\t\t\t\tif (sort_flds[i].field === '$score') {\n\t\t\t\t\tsort_flds.splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, n = sort_flds.length; i < n; i++) {\n\t\t\tmultipliers.push(sort_flds[i].direction === 'desc' ? -1 : 1);\n\t\t}\n\n\t\t// build function\n\t\tconst sort_flds_count = sort_flds.length;\n\t\tif (!sort_flds_count) {\n\t\t\treturn null;\n\t\t} else if (sort_flds_count === 1) {\n\t\t\tconst sort_fld = sort_flds[0].field;\n\t\t\tconst multiplier = multipliers[0];\n\t\t\treturn function(a:T.ResultItem, b:T.ResultItem) {\n\t\t\t\treturn multiplier * cmp(\n\t\t\t\t\tget_field(sort_fld, a),\n\t\t\t\t\tget_field(sort_fld, b)\n\t\t\t\t);\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(a:T.ResultItem, b:T.ResultItem) {\n\t\t\t\tvar i, result, field;\n\t\t\t\tfor (i = 0; i < sort_flds_count; i++) {\n\t\t\t\t\tfield = sort_flds[i].field;\n\t\t\t\t\tresult = multipliers[i] * cmp(\n\t\t\t\t\t\tget_field(field, a),\n\t\t\t\t\t\tget_field(field, b)\n\t\t\t\t\t);\n\t\t\t\t\tif (result) return result;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t};\n\t\t}\n\t};\n\n\t/**\n\t * Parses a search query and returns an object\n\t * with tokens and fields ready to be populated\n\t * with results.\n\t *\n\t */\n\tprepareSearch(query:string, optsUser:Partial<T.Options>):T.PrepareObj {\n\t\tconst weights:T.Weights = {};\n\t\tvar options\t\t= Object.assign({},optsUser);\n\n\t\tpropToArray(options,'sort');\n\t\tpropToArray(options,'sort_empty');\n\n\t\t// convert fields to new format\n\t\tif( options.fields ){\n\t\t\tpropToArray(options,'fields');\n\t\t\tconst fields:T.Field[] = [];\n\t\t\toptions.fields.forEach((field:string|T.Field) => {\n\t\t\t\tif( typeof field == 'string' ){\n\t\t\t\t\tfield = {field:field,weight:1};\n\t\t\t\t}\n\t\t\t\tfields.push(field);\n\t\t\t\tweights[field.field] = ('weight' in field) ? field.weight : 1;\n\t\t\t});\n\t\t\toptions.fields = fields;\n\t\t}\n\n\n\t\treturn {\n\t\t\toptions\t\t: options,\n\t\t\tquery\t\t: query.toLowerCase().trim(),\n\t\t\ttokens\t\t: this.tokenize(query, options.respect_word_boundaries, weights),\n\t\t\ttotal\t\t: 0,\n\t\t\titems\t\t: [],\n\t\t\tweights\t\t: weights,\n\t\t\tgetAttrFn\t: (options.nesting) ? getAttrNesting : getAttr,\n\t\t};\n\t};\n\n\t/**\n\t * Searches through all items and returns a sorted array of matches.\n\t *\n\t */\n\tsearch(query:string, options:T.Options) : T.PrepareObj {\n\t\tvar self = this, score, search:T.PrepareObj;\n\n\t\tsearch = this.prepareSearch(query, options);\n\t\toptions = search.options;\n\t\tquery = search.query;\n\n\t\t// generate result scoring function\n\t\tconst fn_score = options.score || self._getScoreFunction(search);\n\n\t\t// perform search and sort\n\t\tif (query.length) {\n\t\t\titerate(self.items, (item:T.ResultItem, id:string|number) => {\n\t\t\t\tscore = fn_score(item);\n\t\t\t\tif (options.filter === false || score > 0) {\n\t\t\t\t\tsearch.items.push({'score': score, 'id': id});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\titerate(self.items, (_:T.ResultItem, id:string|number) => {\n\t\t\t\tsearch.items.push({'score': 1, 'id': id});\n\t\t\t});\n\t\t}\n\n\t\tconst fn_sort = self._getSortFunction(search);\n\t\tif (fn_sort) search.items.sort(fn_sort);\n\n\t\t// apply limits\n\t\tsearch.total = search.items.length;\n\t\tif (typeof options.limit === 'number') {\n\t\t\tsearch.items = search.items.slice(0, options.limit);\n\t\t}\n\n\t\treturn search;\n\t};\n}\n","\nimport { iterate } from '@orchidjs/sifter/lib/utils';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tlet div = document.createElement('div');\n\t\tdiv.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn div.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\11\\12\\14\\15\\40]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n","/**\n * highlight v3 | MIT license | Johann Burkard <jb@eaio.com>\n * Highlights arbitrary terms in a node.\n *\n * - Modified by Marshal <beatgates@gmail.com> 2011-6-24 (added regex)\n * - Modified by Brian Reavis <brian@thirdroute.com> 2012-8-27 (cleanup)\n */\n\nimport {replaceNode} from '../vanilla';\n\n\nexport const highlight = (element:HTMLElement, regex:string|RegExp) => {\n\n\tif( regex === null ) return;\n\n\t// convet string to regex\n\tif( typeof regex === 'string' ){\n\n\t\tif( !regex.length ) return;\n\t\tregex = new RegExp(regex, 'i');\n\t}\n\n\n\t// Wrap matching part of text node with highlighting <span>, e.g.\n\t// Soccer -> <span class=\"highlight\">Soc</span>cer for regex = /soc/i\n\tconst highlightText = ( node:Text ):number => {\n\n\t\tvar match = node.data.match(regex);\n\t\tif( match && node.data.length > 0 ){\n\t\t\tvar spannode\t\t= document.createElement('span');\n\t\t\tspannode.className\t= 'highlight';\n\t\t\tvar middlebit\t\t= node.splitText(match.index as number);\n\n\t\t\tmiddlebit.splitText(match[0].length);\n\t\t\tvar middleclone\t\t= middlebit.cloneNode(true);\n\n\t\t\tspannode.appendChild(middleclone);\n\t\t\treplaceNode(middlebit, spannode);\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 0;\n\t};\n\n\t// Recurse element node, looking for child text nodes to highlight, unless element\n\t// is childless, <script>, <style>, or already highlighted: <span class=\"hightlight\">\n\tconst highlightChildren = ( node:Element ):void => {\n\t\tif( node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && ( node.className !== 'highlight' || node.tagName !== 'SPAN' ) ){\n\t\t\tfor (var i = 0; i < node.childNodes.length; ++i) {\n\t\t\t\ti += highlightRecursive(node.childNodes[i]);\n\t\t\t}\n\t\t}\n\t};\n\n\n\tconst highlightRecursive = ( node:Node|Element ):number => {\n\n\t\tif( node.nodeType === 3 ){\n\t\t\treturn highlightText(node as Text);\n\t\t}\n\n\t\thighlightChildren(node as Element);\n\n\t\treturn 0;\n\t};\n\n\thighlightRecursive( element );\n};\n\n/**\n * removeHighlight fn copied from highlight v5 and\n * edited to remove with(), pass js strict mode, and use without jquery\n */\nexport const removeHighlight = (el:HTMLElement) => {\n\tvar elements = el.querySelectorAll(\"span.highlight\");\n\tArray.prototype.forEach.call(elements, function(el:HTMLElement){\n\t\tvar parent = el.parentNode as Node;\n\t\tparent.replaceChild(el.firstChild as Node, el);\n\t\tparent.normalize();\n\t});\n};\n","export const KEY_A\t\t\t\t= 65;\nexport const KEY_RETURN\t\t\t= 13;\nexport const KEY_ESC\t\t\t= 27;\nexport const KEY_LEFT\t\t\t= 37;\nexport const KEY_UP\t\t\t\t= 38;\nexport const KEY_RIGHT\t\t\t= 39;\nexport const KEY_DOWN\t\t\t= 40;\nexport const KEY_BACKSPACE\t\t= 8;\nexport const KEY_DELETE\t\t\t= 46;\nexport const KEY_TAB\t\t\t= 9;\n\nexport const IS_MAC \t\t= typeof navigator === 'undefined' ? false : /Mac/.test(navigator.userAgent);\nexport const KEY_SHORTCUT\t\t= IS_MAC ? 'metaKey' : 'ctrlKey'; // ctrl key or apple key for ma\n","\nexport default {\n\toptions: [],\n\toptgroups: [],\n\n\tplugins: [],\n\tdelimiter: ',',\n\tsplitOn: null, // regexp or string for splitting up values from a paste command\n\tpersist: true,\n\tdiacritics: true,\n\tcreate: null,\n\tcreateOnBlur: false,\n\tcreateFilter: null,\n\thighlight: true,\n\topenOnFocus: true,\n\tshouldOpen: null,\n\tmaxOptions: 50,\n\tmaxItems: null,\n\thideSelected: null,\n\tduplicates: false,\n\taddPrecedence: false,\n\tselectOnTab: false,\n\tpreload: null,\n\tallowEmptyOption: false,\n\t//closeAfterSelect: false,\n\n\tloadThrottle: 300,\n\tloadingClass: 'loading',\n\n\tdataAttr: null, //'data-data',\n\toptgroupField: 'optgroup',\n\tvalueField: 'value',\n\tlabelField: 'text',\n\tdisabledField: 'disabled',\n\toptgroupLabelField: 'label',\n\toptgroupValueField: 'value',\n\tlockOptgroupOrder: false,\n\n\tsortField: '$order',\n\tsearchField: ['text'],\n\tsearchConjunction: 'and',\n\n\tmode: null,\n\twrapperClass: 'ts-wrapper',\n\tcontrolClass: 'ts-control',\n\tdropdownClass: 'ts-dropdown',\n\tdropdownContentClass: 'ts-dropdown-content',\n\titemClass: 'item',\n\toptionClass: 'option',\n\n\tdropdownParent: null,\n\tcontrolInput: '<input type=\"text\" autocomplete=\"off\" size=\"1\" />',\n\n\tcopyClassesToDropdown: false,\n\n\tplaceholder: null,\n\thidePlaceholder: null,\n\n\tshouldLoad: function(query:string):boolean{\n\t\treturn query.length > 0;\n\t},\n\n\t/*\n\tload : null, // function(query, callback) { ... }\n\tscore : null, // function(search) { ... }\n\tonInitialize : null, // function() { ... }\n\tonChange : null, // function(value) { ... }\n\tonItemAdd : null, // function(value, $item) { ... }\n\tonItemRemove : null, // function(value) { ... }\n\tonClear : null, // function() { ... }\n\tonOptionAdd : null, // function(value, data) { ... }\n\tonOptionRemove : null, // function(value) { ... }\n\tonOptionClear : null, // function() { ... }\n\tonOptionGroupAdd : null, // function(id, data) { ... }\n\tonOptionGroupRemove : null, // function(id) { ... }\n\tonOptionGroupClear : null, // function() { ... }\n\tonDropdownOpen : null, // function(dropdown) { ... }\n\tonDropdownClose : null, // function(dropdown) { ... }\n\tonType : null, // function(str) { ... }\n\tonDelete : null, // function(values) { ... }\n\t*/\n\n\trender: {\n\t\t/*\n\t\titem: null,\n\t\toptgroup: null,\n\t\toptgroup_header: null,\n\t\toption: null,\n\t\toption_create: null\n\t\t*/\n\t}\n};\n","\nimport TomSelect from './tom-select';\nimport { TomLoadCallback } from './types/index';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;');\n};\n\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Prevent default\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n","import defaults from './defaults';\nimport { hash_key } from './utils';\nimport { TomOption, TomSettings } from './types/index';\nimport { iterate } from '@orchidjs/sifter/lib/utils';\nimport { TomInput } from './types/index';\n\n\nexport default function getSettings( input:TomInput, settings_user:Partial<TomSettings>):TomSettings{\n\tvar settings:TomSettings\t= Object.assign({}, defaults, settings_user);\n\n\tvar attr_data\t\t\t\t= settings.dataAttr;\n\tvar field_label\t\t\t\t= settings.labelField;\n\tvar field_value\t\t\t\t= settings.valueField;\n\tvar field_disabled\t\t\t= settings.disabledField;\n\tvar field_optgroup\t\t\t= settings.optgroupField;\n\tvar field_optgroup_label\t= settings.optgroupLabelField;\n\tvar field_optgroup_value\t= settings.optgroupValueField;\n\n\tvar tag_name\t\t\t\t= input.tagName.toLowerCase();\n\tvar placeholder\t\t\t\t= input.getAttribute('placeholder') || input.getAttribute('data-placeholder');\n\n\tif (!placeholder && !settings.allowEmptyOption) {\n\t\tlet option\t\t= input.querySelector('option[value=\"\"]');\n\t\tif( option ){\n\t\t\tplaceholder = option.textContent;\n\t\t}\n\n\t}\n\n\tvar settings_element:{\n\t\tplaceholder\t: null|string,\n\t\toptions\t\t: TomOption[],\n\t\toptgroups\t: TomOption[],\n\t\titems\t\t: string[],\n\t\tmaxItems\t: null|number,\n\t} = {\n\t\tplaceholder\t: placeholder,\n\t\toptions\t\t: [],\n\t\toptgroups\t: [],\n\t\titems\t\t: [],\n\t\tmaxItems\t: null,\n\t};\n\n\n\t/**\n\t * Initialize from a <select> element.\n\t *\n\t */\n\tvar init_select = () => {\n\t\tvar tagName;\n\t\tvar options = settings_element.options;\n\t\tvar optionsMap:{[key:string]:any} = {};\n\t\tvar group_count = 1;\n\n\t\tvar readData = (el:HTMLElement):TomOption => {\n\n\t\t\tvar data\t= Object.assign({},el.dataset); // get plain object from DOMStringMap\n\t\t\tvar json\t= attr_data && data[attr_data];\n\n\t\t\tif( typeof json === 'string' && json.length ){\n\t\t\t\tdata = Object.assign(data,JSON.parse(json));\n\t\t\t}\n\n\t\t\treturn data;\n\t\t};\n\n\t\tvar addOption = (option:HTMLOptionElement, group?:string) => {\n\n\t\t\tvar value = hash_key(option.value);\n\t\t\tif ( value == null ) return;\n\t\t\tif ( !value && !settings.allowEmptyOption) return;\n\n\t\t\t// if the option already exists, it's probably been\n\t\t\t// duplicated in another optgroup. in this case, push\n\t\t\t// the current group to the \"optgroup\" property on the\n\t\t\t// existing option so that it's rendered in both places.\n\t\t\tif (optionsMap.hasOwnProperty(value)) {\n\t\t\t\tif (group) {\n\t\t\t\t\tvar arr = optionsMap[value][field_optgroup];\n\t\t\t\t\tif (!arr) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = group;\n\t\t\t\t\t} else if (!Array.isArray(arr)) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = [arr, group];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarr.push(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\tvar option_data = readData(option);\n\t\t\t\toption_data[field_label] = option_data[field_label] || option.textContent;\n\t\t\t\toption_data[field_value] = option_data[field_value] || value;\n\t\t\t\toption_data[field_disabled] = option_data[field_disabled] || option.disabled;\n\t\t\t\toption_data[field_optgroup] = option_data[field_optgroup] || group;\n\t\t\t\toption_data.$option\t\t\t= option;\n\n\t\t\t\toptionsMap[value] = option_data;\n\t\t\t\toptions.push(option_data);\n\t\t\t}\n\n\t\t\tif( option.selected ){\n\t\t\t\tsettings_element.items.push(value);\n\t\t\t}\n\t\t};\n\n\t\tvar addGroup = ( optgroup:HTMLOptGroupElement ) => {\n\t\t\tvar id:string, optgroup_data\n\n\t\t\toptgroup_data\t\t\t\t\t\t\t= readData(optgroup);\n\t\t\toptgroup_data[field_optgroup_label]\t\t= optgroup_data[field_optgroup_label] || optgroup.getAttribute('label') || '';\n\t\t\toptgroup_data[field_optgroup_value]\t\t= optgroup_data[field_optgroup_value] || group_count++;\n\t\t\toptgroup_data[field_disabled]\t\t\t= optgroup_data[field_disabled] || optgroup.disabled;\n\t\t\tsettings_element.optgroups.push(optgroup_data);\n\n\t\t\tid = optgroup_data[field_optgroup_value];\n\n\t\t\titerate(optgroup.children, (option)=>{\n\t\t\t\taddOption(option as HTMLOptionElement, id);\n\t\t\t});\n\n\t\t};\n\n\t\tsettings_element.maxItems = input.hasAttribute('multiple') ? null : 1;\n\n\t\titerate(input.children,(child)=>{\n\t\t\ttagName = child.tagName.toLowerCase();\n\t\t\tif (tagName === 'optgroup') {\n\t\t\t\taddGroup(child as HTMLOptGroupElement);\n\t\t\t} else if (tagName === 'option') {\n\t\t\t\taddOption(child as HTMLOptionElement);\n\t\t\t}\n\t\t});\n\n\t};\n\n\n\t/**\n\t * Initialize from a <input type=\"text\"> element.\n\t *\n\t */\n\tvar init_textbox = () => {\n\t\tconst data_raw = input.getAttribute(attr_data);\n\n\t\tif (!data_raw) {\n\t\t\tvar value = input.value.trim() || '';\n\t\t\tif (!settings.allowEmptyOption && !value.length) return;\n\t\t\tconst values = value.split(settings.delimiter);\n\n\t\t\titerate( values, (value) => {\n\t\t\t\tconst option:TomOption = {};\n\t\t\t\toption[field_label] = value;\n\t\t\t\toption[field_value] = value;\n\t\t\t\tsettings_element.options.push(option);\n\t\t\t});\n\t\t\tsettings_element.items = values;\n\t\t} else {\n\t\t\tsettings_element.options = JSON.parse(data_raw);\n\t\t\titerate( settings_element.options, (opt) => {\n\t\t\t\tsettings_element.items.push(opt[field_value]);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tif (tag_name === 'select') {\n\t\tinit_select();\n\t} else {\n\t\tinit_textbox();\n\t}\n\n\treturn Object.assign( {}, defaults, settings_element, settings_user) as TomSettings;\n};\n","\nimport MicroEvent from './contrib/microevent';\nimport MicroPlugin from './contrib/microplugin';\nimport Sifter from '@orchidjs/sifter/lib/sifter';\nimport { escape_regex, iterate } from '@orchidjs/sifter/lib/utils';\nimport { TomInput, TomArgObject, TomOption, TomOptions, TomCreateFilter, TomCreateCallback, TomItem, TomSettings, TomTemplateNames, TomClearFilter } from './types/index';\nimport {highlight, removeHighlight} from './contrib/highlight';\nimport * as constants from './constants';\nimport getSettings from './getSettings';\nimport {\n\thash_key,\n\tget_hash,\n\tescape_html,\n\tdebounce_events,\n\tgetSelection,\n\tpreventDefault,\n\taddEvent,\n\tloadDebounce,\n\tisKeyDown,\n\tgetId,\n\taddSlashes,\n\tappend\n} from './utils';\n\nimport {\n\tgetDom,\n\tisHtmlString,\n\tescapeQuery,\n\ttriggerEvent,\n\tapplyCSS,\n\taddClasses,\n\tremoveClasses,\n\tparentMatch,\n\tgetTail,\n\tisEmptyObject,\n\tnodeIndex,\n\tsetAttr,\n\treplaceNode\n} from './vanilla';\n\nvar instance_i = 0;\n\nexport default class TomSelect extends MicroPlugin(MicroEvent){\n\n\tpublic control_input\t\t\t: HTMLInputElement;\n\tpublic wrapper\t\t\t\t\t: HTMLElement;\n\tpublic dropdown\t\t\t\t\t: HTMLElement;\n\tpublic control\t\t\t\t\t: HTMLElement;\n\tpublic dropdown_content\t\t\t: HTMLElement;\n\tpublic focus_node\t\t\t\t: HTMLElement;\n\n\tpublic order\t\t\t\t\t: number = 0;\n\tpublic settings\t\t\t\t\t: TomSettings;\n\tpublic input\t\t\t\t\t: TomInput;\n\tpublic tabIndex\t\t\t\t\t: number;\n\tpublic is_select_tag\t\t\t: boolean;\n\tpublic rtl\t\t\t\t\t\t: boolean;\n\tprivate inputId\t\t\t\t\t: string;\n\n\tprivate _destroy\t\t\t\t!: () => void;\n\tpublic sifter\t\t\t\t\t: Sifter;\n\n\n\tpublic isOpen\t\t\t\t\t: boolean = false;\n\tpublic isDisabled\t\t\t\t: boolean = false;\n\tpublic isRequired\t\t\t\t: boolean;\n\tpublic isInvalid\t\t\t\t: boolean = false; // @deprecated 1.8\n\tpublic isValid\t\t\t\t\t: boolean = true;\n\tpublic isLocked\t\t\t\t\t: boolean = false;\n\tpublic isFocused\t\t\t\t: boolean = false;\n\tpublic isInputHidden\t\t\t: boolean = false;\n\tpublic isSetup\t\t\t\t\t: boolean = false;\n\tpublic ignoreFocus\t\t\t\t: boolean = false;\n\tpublic ignoreHover\t\t\t\t: boolean = false;\n\tpublic hasOptions\t\t\t\t: boolean = false;\n\tpublic currentResults\t\t\t?: ReturnType<Sifter['search']>;\n\tpublic lastValue\t\t\t\t: string = '';\n\tpublic caretPos\t\t\t\t\t: number = 0;\n\tpublic loading\t\t\t\t\t: number = 0;\n\tpublic loadedSearches\t\t\t: { [key: string]: boolean } = {};\n\n\tpublic activeOption\t\t\t\t: null|HTMLElement = null;\n\tpublic activeItems\t\t\t\t: TomItem[] = [];\n\n\tpublic optgroups\t\t\t\t: TomOptions = {};\n\tpublic options\t\t\t\t\t: TomOptions = {};\n\tpublic userOptions\t\t\t\t: {[key:string]:boolean} = {};\n\tpublic items\t\t\t\t\t: string[] = [];\n\n\n\n\tconstructor( input_arg: string|TomInput, user_settings:Partial<TomSettings> ){\n\t\tsuper();\n\n\t\tinstance_i++;\n\n\t\tvar dir;\n\t\tvar input\t\t\t\t= getDom( input_arg ) as TomInput;\n\n\t\tif( input.tomselect ){\n\t\t\tthrow new Error('Tom Select already initialized on this element');\n\t\t}\n\n\n\t\tinput.tomselect\t\t\t= this;\n\n\n\t\t// detect rtl environment\n\t\tvar computedStyle\t\t= window.getComputedStyle && window.getComputedStyle(input, null);\n\t\tdir\t\t\t\t\t\t= computedStyle.getPropertyValue('direction');\n\n\t\t// setup default state\n\t\tconst settings\t\t\t= getSettings( input, user_settings );\n\t\tthis.settings\t\t\t= settings;\n\t\tthis.input\t\t\t\t= input;\n\t\tthis.tabIndex\t\t\t= input.tabIndex || 0;\n\t\tthis.is_select_tag\t\t= input.tagName.toLowerCase() === 'select';\n\t\tthis.rtl\t\t\t\t= /rtl/i.test(dir);\n\t\tthis.inputId\t\t\t= getId(input, 'tomselect-'+instance_i);\n\t\tthis.isRequired\t\t\t= input.required;\n\n\n\t\t// search system\n\t\tthis.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\n\t\t// option-dependent defaults\n\t\tsettings.mode = settings.mode || (settings.maxItems === 1 ? 'single' : 'multi');\n\t\tif (typeof settings.hideSelected !== 'boolean') {\n\t\t\tsettings.hideSelected = settings.mode === 'multi';\n\t\t}\n\n\t\tif( typeof settings.hidePlaceholder !== 'boolean' ){\n\t\t\tsettings.hidePlaceholder = settings.mode !== 'multi';\n\t\t}\n\n\t\t// set up createFilter callback\n\t\tvar filter = settings.createFilter;\n\t\tif( typeof filter !== 'function' ){\n\n\t\t\tif( typeof filter === 'string' ){\n\t\t\t\tfilter = new RegExp(filter);\n\t\t\t}\n\n\t\t\tif( filter instanceof RegExp ){\n\t\t\t\tsettings.createFilter = (input) => (filter as RegExp).test(input);\n\t\t\t}else{\n\t\t\t\tsettings.createFilter = (value) => {\n\t\t\t\t\treturn this.settings.duplicates || !this.options[value];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\n\t\tthis.initializePlugins(settings.plugins);\n\t\tthis.setupCallbacks();\n\t\tthis.setupTemplates();\n\n\n\t\t// Create all elements\n\t\tconst wrapper\t\t\t= getDom('<div>');\n\t\tconst control\t\t\t= getDom('<div>');\n\t\tconst dropdown\t\t\t= this._render('dropdown');\n\t\tconst dropdown_content\t= getDom(`<div role=\"listbox\" tabindex=\"-1\">`);\n\n\t\tconst classes\t\t\t= this.input.getAttribute('class') || '';\n\t\tconst inputMode\t\t\t= settings.mode;\n\n\t\tvar control_input: HTMLInputElement;\n\n\n\t\taddClasses( wrapper, settings.wrapperClass, classes, inputMode);\n\n\n\t\taddClasses(control,settings.controlClass);\n\t\tappend( wrapper, control );\n\n\n\t\taddClasses(dropdown, settings.dropdownClass, inputMode);\n\t\tif( settings.copyClassesToDropdown ){\n\t\t\taddClasses( dropdown, classes);\n\t\t}\n\n\n\t\taddClasses(dropdown_content, settings.dropdownContentClass);\n\t\tappend( dropdown, dropdown_content );\n\n\t\tgetDom( settings.dropdownParent || wrapper ).appendChild( dropdown );\n\n\n\t\t// default controlInput\n\t\tif( isHtmlString(settings.controlInput) ){\n\t\t\tcontrol_input\t\t= getDom(settings.controlInput ) as HTMLInputElement;\n\n\t\t\t// set attributes\n\t\t\tvar attrs = ['autocorrect','autocapitalize','autocomplete'];\n\t\t\titerate(attrs,(attr) => {\n\t\t\t\tif( input.getAttribute(attr) ){\n\t\t\t\t\tsetAttr(control_input,{[attr]:input.getAttribute(attr)});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontrol_input.tabIndex = -1;\n\t\t\tcontrol.appendChild( control_input );\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t// dom element\n\t\t}else if( settings.controlInput ){\n\t\t\tcontrol_input\t\t= getDom( settings.controlInput ) as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t}else{\n\t\t\tcontrol_input\t\t= getDom('<input/>') as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control;\n\t\t}\n\n\t\tthis.wrapper\t\t\t= wrapper;\n\t\tthis.dropdown\t\t\t= dropdown;\n\t\tthis.dropdown_content\t= dropdown_content;\n\t\tthis.control \t\t\t= control;\n\t\tthis.control_input\t\t= control_input;\n\n\t\tthis.setup();\n\t}\n\n\t/**\n\t * set up event bindings.\n\t *\n\t */\n\tsetup(){\n\n\t\tconst self = this;\n\t\tconst settings\t\t\t\t= self.settings;\n\t\tconst control_input\t\t\t= self.control_input;\n\t\tconst dropdown\t\t\t\t= self.dropdown;\n\t\tconst dropdown_content\t\t= self.dropdown_content;\n\t\tconst wrapper\t\t\t\t= self.wrapper;\n\t\tconst control\t\t\t\t= self.control;\n\t\tconst input\t\t\t\t\t= self.input;\n\t\tconst focus_node\t\t\t= self.focus_node;\n\t\tconst passive_event\t\t\t= { passive: true };\n\t\tconst listboxId\t\t\t\t= self.inputId +'-ts-dropdown';\n\n\n\t\tsetAttr(dropdown_content,{\n\t\t\tid: listboxId\n\t\t});\n\n\t\tsetAttr(focus_node,{\n\t\t\trole:'combobox',\n\t\t\t'aria-haspopup':'listbox',\n\t\t\t'aria-expanded':'false',\n\t\t\t'aria-controls':listboxId\n\t\t});\n\n\t\tconst control_id\t= getId(focus_node,self.inputId + '-ts-control');\n\t\tconst query\t\t\t= \"label[for='\"+escapeQuery(self.inputId)+\"']\";\n\t\tconst label\t\t\t= document.querySelector(query);\n\t\tconst label_click\t= self.focus.bind(self);\n\t\tif( label ){\n\t\t\taddEvent(label,'click', label_click );\n\t\t\tsetAttr(label,{for:control_id});\n\t\t\tconst label_id = getId(label,self.inputId+'-ts-label');\n\t\t\tsetAttr(focus_node,{'aria-labelledby':label_id});\n\t\t\tsetAttr(dropdown_content,{'aria-labelledby':label_id});\n\t\t}\n\n\t\twrapper.style.width = input.style.width;\n\n\t\tif (self.plugins.names.length) {\n\t\t\tconst classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n\t\t\taddClasses( [wrapper,dropdown], classes_plugins);\n\t\t}\n\n\t\tif ((settings.maxItems === null || settings.maxItems > 1) && self.is_select_tag ){\n\t\t\tsetAttr(input,{multiple:'multiple'});\n\t\t}\n\n\t\tif (settings.placeholder) {\n\t\t\tsetAttr(control_input,{placeholder:settings.placeholder});\n\t\t}\n\n\t\t// if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\t\tif (!settings.splitOn && settings.delimiter) {\n\t\t\tsettings.splitOn = new RegExp('\\\\s*' + escape_regex(settings.delimiter) + '+\\\\s*');\n\t\t}\n\n\t\t// debounce user defined load() if loadThrottle > 0\n\t\t// after initializePlugins() so plugins can create/modify user defined loaders\n\t\tif( settings.load && settings.loadThrottle ){\n\t\t\tsettings.load = loadDebounce(settings.load,settings.loadThrottle)\n\t\t}\n\n\t\tself.control_input.type\t= input.type;\n\n\t\taddEvent(dropdown,'mouseenter', (e) => {\n\n\t\t\tvar target_match = parentMatch(e.target as HTMLElement, '[data-selectable]', dropdown);\n\t\t\tif( target_match ) self.onOptionHover( e as MouseEvent, target_match );\n\n\t\t}, {capture:true});\n\n\t\t// clicking on an option should select it\n\t\taddEvent(dropdown,'click',(evt) => {\n\t\t\tconst option = parentMatch(evt.target as HTMLElement, '[data-selectable]');\n\t\t\tif( option ){\n\t\t\t\tself.onOptionSelect( evt as MouseEvent, option );\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\t\t});\n\n\t\taddEvent(control,'click', (evt) => {\n\n\t\t\tvar target_match = parentMatch( evt.target as HTMLElement, '[data-ts-item]', control);\n\t\t\tif( target_match && self.onItemSelect(evt as MouseEvent, target_match as TomItem) ){\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// retain focus (see control_input mousedown)\n\t\t\tif( control_input.value != '' ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.onClick();\n\t\t\tpreventDefault(evt,true);\n\t\t});\n\n\n\t\t// keydown on focus_node for arrow_down/arrow_up\n\t\taddEvent(focus_node,'keydown',\t\t(e) => self.onKeyDown(e as KeyboardEvent) );\n\n\t\t// keypress and input/keyup\n\t\taddEvent(control_input,'keypress',\t(e) => self.onKeyPress(e as KeyboardEvent) );\n\t\taddEvent(control_input,'input',\t\t(e) => self.onInput(e as KeyboardEvent) );\n\n\t\taddEvent(focus_node,'resize',\t\t() => self.positionDropdown(), passive_event);\n\t\taddEvent(focus_node,'blur', \t\t(e) => self.onBlur(e as FocusEvent) );\n\t\taddEvent(focus_node,'focus',\t\t(e) => self.onFocus(e as MouseEvent) );\n\t\taddEvent(control_input,'paste',\t\t(e) => self.onPaste(e as MouseEvent) );\n\n\n\t\tconst doc_mousedown = (evt:Event) => {\n\n\t\t\t// blur if target is outside of this instance\n\t\t\t// dropdown is not always inside wrapper\n\t\t\tconst target = evt.composedPath()[0];\n\t\t\tif( !wrapper.contains(target as HTMLElement) && !dropdown.contains(target as HTMLElement) ){\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\tself.blur();\n\t\t\t\t}\n\t\t\t\tself.inputState();\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t// retain focus by preventing native handling. if the\n\t\t\t// event target is the input it should not be modified.\n\t\t\t// otherwise, text selection within the input won't work.\n\t\t\t// Fixes bug #212 which is no covered by tests\n\t\t\tif( target == control_input && self.isOpen ){\n\t\t\t\tevt.stopPropagation();\n\n\t\t\t// clicking anywhere in the control should not blur the control_input (which would close the dropdown)\n\t\t\t}else{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\n\t\t};\n\n\t\tconst win_scroll = () => {\n\t\t\tif (self.isOpen) {\n\t\t\t\tself.positionDropdown();\n\t\t\t}\n\t\t};\n\n\t\tconst win_hover = () => {\n\t\t\tself.ignoreHover = false;\n\t\t};\n\n\t\taddEvent(document,'mousedown', doc_mousedown);\n\t\taddEvent(window,'scroll', win_scroll, passive_event);\n\t\taddEvent(window,'resize', win_scroll, passive_event);\n\t\taddEvent(window,'mousemove', win_hover, passive_event);\n\n\t\tthis._destroy = () => {\n\t\t\tdocument.removeEventListener('mousedown',doc_mousedown);\n\t\t\twindow.removeEventListener('mousemove',win_hover);\n\t\t\twindow.removeEventListener('scroll',win_scroll);\n\t\t\twindow.removeEventListener('resize',win_scroll);\n\t\t\tif( label ) label.removeEventListener('click',label_click);\n\t\t};\n\n\t\t// store original html and tab index so that they can be\n\t\t// restored when the destroy() method is called.\n\t\tthis.revertSettings = {\n\t\t\tinnerHTML : input.innerHTML,\n\t\t\ttabIndex : input.tabIndex\n\t\t};\n\n\n\t\tinput.tabIndex = -1;\n\t\tinput.insertAdjacentElement('afterend', self.wrapper);\n\n\t\tself.sync(false);\n\t\tsettings.items = [];\n\t\tdelete settings.optgroups;\n\t\tdelete settings.options;\n\n\t\taddEvent(input,'invalid', (e) => {\n\t\t\tif( self.isValid ){\n\t\t\t\tself.isValid = false;\n\t\t\t\tself.isInvalid = true;\n\t\t\t\tself.refreshState();\n\t\t\t}\n\t\t});\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshItems();\n\t\tself.close(false);\n\t\tself.inputState();\n\t\tself.isSetup = true;\n\n\t\tif( input.disabled ){\n\t\t\tself.disable();\n\t\t}else{\n\t\t\tself.enable(); //sets tabIndex\n\t\t}\n\n\t\tself.on('change', this.onChange);\n\n\t\taddClasses(input,'tomselected','ts-hidden-accessible');\n\t\tself.trigger('initialize');\n\n\t\t// preload options\n\t\tif (settings.preload === true) {\n\t\t\tself.preload();\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Register options and optgroups\n\t *\n\t */\n\tsetupOptions(options:TomOption[] = [], optgroups:TomOption[] = []){\n\n\t\t// build options table\n\t\tthis.addOptions(options);\n\n\n\t\t// build optgroup table\n\t\titerate( optgroups, (optgroup) => {\n\t\t\tthis.registerOptionGroup(optgroup);\n\t\t});\n\t}\n\n\t/**\n\t * Sets up default rendering functions.\n\t */\n\tsetupTemplates() {\n\t\tvar self = this;\n\t\tvar field_label = self.settings.labelField;\n\t\tvar field_optgroup = self.settings.optgroupLabelField;\n\n\t\tvar templates = {\n\t\t\t'optgroup': (data:TomOption) => {\n\t\t\t\tlet optgroup = document.createElement('div');\n\t\t\t\toptgroup.className = 'optgroup';\n\t\t\t\toptgroup.appendChild(data.options);\n\t\t\t\treturn optgroup;\n\n\t\t\t},\n\t\t\t'optgroup_header': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n\t\t\t},\n\t\t\t'option': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'item': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'option_create': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>';\n\t\t\t},\n\t\t\t'no_results':() => {\n\t\t\t\treturn '<div class=\"no-results\">No results found</div>';\n\t\t\t},\n\t\t\t'loading':() => {\n\t\t\t\treturn '<div class=\"spinner\"></div>';\n\t\t\t},\n\t\t\t'not_loading':() => {},\n\t\t\t'dropdown':() => {\n\t\t\t\treturn '<div></div>';\n\t\t\t}\n\t\t};\n\n\n\t\tself.settings.render = Object.assign({}, templates, self.settings.render);\n\t}\n\n\t/**\n\t * Maps fired events to callbacks provided\n\t * in the settings used when creating the control.\n\t */\n\tsetupCallbacks() {\n\t\tvar key, fn;\n\t\tvar callbacks:{[key:string]:string} = {\n\t\t\t'initialize' : 'onInitialize',\n\t\t\t'change' : 'onChange',\n\t\t\t'item_add' : 'onItemAdd',\n\t\t\t'item_remove' : 'onItemRemove',\n\t\t\t'item_select' : 'onItemSelect',\n\t\t\t'clear' : 'onClear',\n\t\t\t'option_add' : 'onOptionAdd',\n\t\t\t'option_remove' : 'onOptionRemove',\n\t\t\t'option_clear' : 'onOptionClear',\n\t\t\t'optgroup_add' : 'onOptionGroupAdd',\n\t\t\t'optgroup_remove' : 'onOptionGroupRemove',\n\t\t\t'optgroup_clear' : 'onOptionGroupClear',\n\t\t\t'dropdown_open' : 'onDropdownOpen',\n\t\t\t'dropdown_close' : 'onDropdownClose',\n\t\t\t'type' : 'onType',\n\t\t\t'load' : 'onLoad',\n\t\t\t'focus' : 'onFocus',\n\t\t\t'blur' : 'onBlur'\n\t\t};\n\n\t\tfor (key in callbacks) {\n\n\t\t\tfn = this.settings[callbacks[key] as (keyof TomSettings)];\n\t\t\tif (fn) this.on(key, fn);\n\n\t\t}\n\t}\n\n\t/**\n\t * Sync the Tom Select instance with the original input or select\n\t *\n\t */\n\tsync(get_settings:boolean=true):void{\n\t\tconst self\t\t= this;\n\t\tconst settings\t= get_settings ? getSettings( self.input, {delimiter:self.settings.delimiter} as TomSettings ) : self.settings;\n\n\t\tself.setupOptions(settings.options,settings.optgroups);\n\n\t\tself.setValue(settings.items||[],true); // silent prevents recursion\n\n\t\tself.lastQuery = null; // so updated options will be displayed in dropdown\n\t}\n\n\t/**\n\t * Triggered when the main control element\n\t * has a click event.\n\t *\n\t */\n\tonClick():void {\n\t\tvar self = this;\n\n\t\tif( self.activeItems.length > 0 ){\n\t\t\tself.clearActiveItems();\n\t\t\tself.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.isFocused && self.isOpen ){\n\t\t\tself.blur();\n\t\t} else {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * @deprecated v1.7\n\t *\n\t */\n\tonMouseDown():void {}\n\n\t/**\n\t * Triggered when the value of the control has been changed.\n\t * This should propagate the event to the original DOM\n\t * input / select element.\n\t */\n\tonChange() {\n\t\ttriggerEvent(this.input, 'input');\n\t\ttriggerEvent(this.input, 'change');\n\t}\n\n\t/**\n\t * Triggered on <input> paste.\n\t *\n\t */\n\tonPaste(e:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif( self.isInputHidden || self.isLocked ){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\t// If a regex or string is included, this will split the pasted\n\t\t// input and create Items for each separate value\n\t\tif( !self.settings.splitOn ){\n\t\t\treturn;\n\t\t}\n\n\t\t// Wait for pasted text to be recognized in value\n\t\tsetTimeout(() => {\n\t\t\tvar pastedText = self.inputValue();\n\t\t\tif( !pastedText.match(self.settings.splitOn)){\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tvar splitInput = pastedText.trim().split(self.settings.splitOn);\n\t\t\titerate( splitInput, (piece) => {\n\n\t\t\t\tpiece = hash_key(piece);\n\t\t\t\tif( this.options[piece] ){\n\t\t\t\t\tself.addItem(piece);\n\t\t\t\t}else{\n\t\t\t\t\tself.createItem(piece);\n\t\t\t\t}\n\t\t\t});\n\t\t}, 0);\n\n\t}\n\n\t/**\n\t * Triggered on <input> keypress.\n\t *\n\t */\n\tonKeyPress(e:KeyboardEvent):void {\n\t\tvar self = this;\n\t\tif(self.isLocked){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t\tvar character = String.fromCharCode(e.keyCode || e.which);\n\t\tif (self.settings.create && self.settings.mode === 'multi' && character === self.settings.delimiter) {\n\t\t\tself.createItem();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keydown.\n\t *\n\t */\n\tonKeyDown(e:KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tself.ignoreHover = true;\n\n\t\tif (self.isLocked) {\n\t\t\tif (e.keyCode !== constants.KEY_TAB) {\n\t\t\t\tpreventDefault(e);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\n\t\t\t// ctrl+A: select all\n\t\t\tcase constants.KEY_A:\n\t\t\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\t\t\tif( self.control_input.value == '' ){\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\tself.selectAll();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// esc: close dropdown\n\t\t\tcase constants.KEY_ESC:\n\t\t\t\tif (self.isOpen) {\n\t\t\t\t\tpreventDefault(e,true);\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\n\t\t\t// down: open dropdown or move selection down\n\t\t\tcase constants.KEY_DOWN:\n\t\t\t\tif (!self.isOpen && self.hasOptions) {\n\t\t\t\t\tself.open();\n\t\t\t\t} else if (self.activeOption) {\n\t\t\t\t\tlet next = self.getAdjacent(self.activeOption, 1);\n\t\t\t\t\tif (next) self.setActiveOption(next);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// up: move selection up\n\t\t\tcase constants.KEY_UP:\n\t\t\t\tif (self.activeOption) {\n\t\t\t\t\tlet prev = self.getAdjacent(self.activeOption, -1);\n\t\t\t\t\tif (prev) self.setActiveOption(prev);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// return: select active option\n\t\t\tcase constants.KEY_RETURN:\n\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// if the option_create=null, the dropdown might be closed\n\t\t\t\t}else if (self.settings.create && self.createItem()) {\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// don't submit form when searching for a value\n\t\t\t\t}else if( document.activeElement == self.control_input && self.isOpen ){\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t// left: modifiy item selection to the left\n\t\t\tcase constants.KEY_LEFT:\n\t\t\t\tself.advanceSelection(-1, e);\n\t\t\t\treturn;\n\n\t\t\t// right: modifiy item selection to the right\n\t\t\tcase constants.KEY_RIGHT:\n\t\t\t\tself.advanceSelection(1, e);\n\t\t\t\treturn;\n\n\t\t\t// tab: select active option and/or create item\n\t\t\tcase constants.KEY_TAB:\n\n\t\t\t\tif( self.settings.selectOnTab ){\n\t\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\n\t\t\t\t\t\t// prevent default [tab] behaviour of jump to the next field\n\t\t\t\t\t\t// if select isFull, then the dropdown won't be open and [tab] will work normally\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t\tif (self.settings.create && self.createItem()) {\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\n\t\t\t// delete|backspace: delete items\n\t\t\tcase constants.KEY_BACKSPACE:\n\t\t\tcase constants.KEY_DELETE:\n\t\t\t\tself.deleteSelection(e);\n\t\t\t\treturn;\n\t\t}\n\n\t\t// don't enter text in the control_input when active items are selected\n\t\tif( self.isInputHidden && !isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\tpreventDefault(e);\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keyup.\n\t *\n\t */\n\tonInput(e:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif( self.isLocked ){\n\t\t\treturn;\n\t\t}\n\n\t\tvar value = self.inputValue();\n\t\tif (self.lastValue !== value) {\n\t\t\tself.lastValue = value;\n\n\t\t\tif( self.settings.shouldLoad.call(self,value) ){\n\t\t\t\tself.load(value);\n\t\t\t}\n\n\t\t\tself.refreshOptions();\n\t\t\tself.trigger('type', value);\n\t\t}\n\t}\n\n\t/**\n\t * Triggered when the user rolls over\n\t * an option in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionHover( evt:MouseEvent|KeyboardEvent, option:HTMLElement ):void{\n\t\tif( this.ignoreHover ) return;\n\t\tthis.setActiveOption(option, false);\n\t}\n\n\t/**\n\t * Triggered on <input> focus.\n\t *\n\t */\n\tonFocus(e?:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\t\tvar wasFocused = self.isFocused;\n\n\t\tif (self.isDisabled) {\n\t\t\tself.blur();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (self.ignoreFocus) return;\n\t\tself.isFocused = true;\n\t\tif( self.settings.preload === 'focus' ) self.preload();\n\n\t\tif (!wasFocused) self.trigger('focus');\n\n\t\tif (!self.activeItems.length) {\n\t\t\tself.showInput();\n\t\t\tself.refreshOptions(!!self.settings.openOnFocus);\n\t\t}\n\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Triggered on <input> blur.\n\t *\n\t */\n\tonBlur(e?:FocusEvent):void {\n\n\t\tif( document.hasFocus() === false ) return;\n\n\t\tvar self = this;\n\t\tif (!self.isFocused) return;\n\t\tself.isFocused = false;\n\t\tself.ignoreFocus = false;\n\n\t\tvar deactivate = () => {\n\t\t\tself.close();\n\t\t\tself.setActiveItem();\n\t\t\tself.setCaret(self.items.length);\n\t\t\tself.trigger('blur');\n\t\t};\n\n\t\tif (self.settings.create && self.settings.createOnBlur) {\n\t\t\tself.createItem(null, false, deactivate);\n\t\t} else {\n\t\t\tdeactivate();\n\t\t}\n\t}\n\n\n\t/**\n\t * Triggered when the user clicks on an option\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionSelect( evt:MouseEvent|KeyboardEvent, option:HTMLElement ){\n\t\tvar value, self = this;\n\n\n\t\t// should not be possible to trigger a option under a disabled optgroup\n\t\tif( option.parentElement && option.parentElement.matches('[data-disabled]') ){\n\t\t\treturn;\n\t\t}\n\n\n\t\tif( option.classList.contains('create') ){\n\t\t\tself.createItem(null, true, () => {\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = option.dataset.value;\n\t\t\tif (typeof value !== 'undefined') {\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tself.addItem(value);\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( !self.settings.hideSelected && evt.type && /click/.test(evt.type) ){\n\t\t\t\t\tself.setActiveOption(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return true if the given option can be selected\n\t *\n\t */\n\tcanSelect(option:HTMLElement|null):boolean{\n\n\t\tif( this.isOpen && option && this.dropdown_content.contains(option) ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Triggered when the user clicks on an item\n\t * that has been selected.\n\t *\n\t */\n\tonItemSelect( evt?:MouseEvent, item?:TomItem ):boolean{\n\t\tvar self = this;\n\n\t\tif( !self.isLocked && self.settings.mode === 'multi' ){\n\t\t\tpreventDefault(evt);\n\t\t\tself.setActiveItem(item, evt);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determines whether or not to invoke\n\t * the user-provided option provider / loader\n\t *\n\t * Note, there is a subtle difference between\n\t * this.canLoad() and this.settings.shouldLoad();\n\t *\n\t *\t- settings.shouldLoad() is a user-input validator.\n\t *\tWhen false is returned, the not_loading template\n\t *\twill be added to the dropdown\n\t *\n\t *\t- canLoad() is lower level validator that checks\n\t * \tthe Tom Select instance. There is no inherent user\n\t *\tfeedback when canLoad returns false\n\t *\n\t */\n\tcanLoad(value:string):boolean{\n\n\t\tif( !this.settings.load ) return false;\n\t\tif( this.loadedSearches.hasOwnProperty(value) ) return false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Invokes the user-provided option provider / loader.\n\t *\n\t */\n\tload(value:string):void {\n\t\tconst self = this;\n\n\t\tif( !self.canLoad(value) ) return;\n\n\t\taddClasses(self.wrapper,self.settings.loadingClass);\n\t\tself.loading++;\n\n\t\tconst callback = self.loadCallback.bind(self);\n\t\tself.settings.load.call(self, value, callback);\n\t}\n\n\t/**\n\t * Invoked by the user-provided option provider\n\t *\n\t */\n\tloadCallback( options:TomOption[], optgroups:TomOption[] ):void{\n\t\tconst self = this;\n\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\tself.lastQuery = null;\n\n\t\tself.clearActiveOption(); // when new results load, focus should be on first option\n\t\tself.setupOptions(options,optgroups);\n\n\t\tself.refreshOptions(self.isFocused && !self.isInputHidden);\n\n\t\tif (!self.loading) {\n\t\t\tremoveClasses(self.wrapper,self.settings.loadingClass);\n\t\t}\n\n\t\tself.trigger('load', options, optgroups);\n\t}\n\n\tpreload():void{\n\t\tvar classList = this.wrapper.classList;\n\t\tif( classList.contains('preloaded') ) return;\n\t\tclassList.add('preloaded');\n\t\tthis.load('');\n\t}\n\n\n\t/**\n\t * Sets the input field of the control to the specified value.\n\t *\n\t */\n\tsetTextboxValue(value:string = '') {\n\t\tvar input = this.control_input;\n\t\tvar changed = input.value !== value;\n\t\tif (changed) {\n\t\t\tinput.value = value;\n\t\t\ttriggerEvent(input,'update');\n\t\t\tthis.lastValue = value;\n\t\t}\n\t}\n\n\t/**\n\t * Returns the value of the control. If multiple items\n\t * can be selected (e.g. <select multiple>), this returns\n\t * an array. If only one item can be selected, this\n\t * returns a string.\n\t *\n\t */\n\tgetValue():string|string[] {\n\n\t\tif( this.is_select_tag && this.input.hasAttribute('multiple')) {\n\t\t\treturn this.items;\n\t\t}\n\n\t\treturn this.items.join(this.settings.delimiter);\n\t}\n\n\t/**\n\t * Resets the selected items to the given value.\n\t *\n\t */\n\tsetValue( value:string|string[], silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change'];\n\n\t\tdebounce_events(this, events,() => {\n\t\t\tthis.clear(silent);\n\t\t\tthis.addItems(value, silent);\n\t\t});\n\t}\n\n\n\t/**\n\t * Resets the number of max items to the given value\n\t *\n\t */\n\tsetMaxItems(value:null|number){\n\t\tif(value === 0) value = null; //reset to unlimited items.\n\t\tthis.settings.maxItems = value;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Sets the selected item.\n\t *\n\t */\n\tsetActiveItem( item?:TomItem, e?:MouseEvent|KeyboardEvent ){\n\t\tvar self = this;\n\t\tvar eventName;\n\t\tvar i, begin, end, swap;\n\t\tvar last;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\t// clear the active selection\n\t\tif( !item ){\n\t\t\tself.clearActiveItems();\n\t\t\tif (self.isFocused) {\n\t\t\t\tself.showInput();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// modify selection\n\t\teventName = e && e.type.toLowerCase();\n\n\t\tif (eventName === 'click' && isKeyDown('shiftKey',e) && self.activeItems.length) {\n\t\t\tlast\t= self.getLastActive();\n\t\t\tbegin\t= Array.prototype.indexOf.call(self.control.children, last);\n\t\t\tend\t\t= Array.prototype.indexOf.call(self.control.children, item);\n\n\t\t\tif (begin > end) {\n\t\t\t\tswap = begin;\n\t\t\t\tbegin = end;\n\t\t\t\tend = swap;\n\t\t\t}\n\t\t\tfor (i = begin; i <= end; i++) {\n\t\t\t\titem = self.control.children[i] as TomItem;\n\t\t\t\tif (self.activeItems.indexOf(item) === -1) {\n\t\t\t\t\tself.setActiveItemClass(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpreventDefault(e);\n\t\t} else if ((eventName === 'click' && isKeyDown(constants.KEY_SHORTCUT,e) ) || (eventName === 'keydown' && isKeyDown('shiftKey',e))) {\n\t\t\tif( item.classList.contains('active') ){\n\t\t\t\tself.removeActiveItem( item );\n\t\t\t} else {\n\t\t\t\tself.setActiveItemClass(item);\n\t\t\t}\n\t\t} else {\n\t\t\tself.clearActiveItems();\n\t\t\tself.setActiveItemClass(item);\n\t\t}\n\n\t\t// ensure control has focus\n\t\tself.hideInput();\n\t\tif (!self.isFocused) {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Set the active and last-active classes\n\t *\n\t */\n\tsetActiveItemClass( item:TomItem ){\n\t\tconst self = this;\n\t\tconst last_active = self.control.querySelector('.last-active');\n\t\tif( last_active ) removeClasses(last_active as HTMLElement,'last-active');\n\n\t\taddClasses(item,'active last-active');\n\t\tself.trigger('item_select', item);\n\t\tif( self.activeItems.indexOf(item) == -1 ){\n\t\t\tself.activeItems.push( item );\n\t\t}\n\t}\n\n\t/**\n\t * Remove active item\n\t *\n\t */\n\tremoveActiveItem( item:TomItem ){\n\t\tvar idx = this.activeItems.indexOf(item);\n\t\tthis.activeItems.splice(idx, 1);\n\t\tremoveClasses(item,'active');\n\t}\n\n\t/**\n\t * Clears all the active items\n\t *\n\t */\n\tclearActiveItems(){\n\t\tremoveClasses(this.activeItems,'active');\n\t\tthis.activeItems = [];\n\t}\n\n\t/**\n\t * Sets the selected item in the dropdown menu\n\t * of available options.\n\t *\n\t */\n\tsetActiveOption( option:null|HTMLElement,scroll:boolean=true ):void{\n\n\t\tif( option === this.activeOption ){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearActiveOption();\n\t\tif( !option ) return;\n\n\t\tthis.activeOption = option;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':option.getAttribute('id')});\n\t\tsetAttr(option,{'aria-selected':'true'});\n\t\taddClasses(option,'active');\n\t\tif( scroll ) this.scrollToOption(option);\n\t}\n\n\t/**\n\t * Sets the dropdown_content scrollTop to display the option\n\t *\n\t */\n\tscrollToOption( option:null|HTMLElement, behavior?:string ):void{\n\n\t\tif( !option ) return;\n\n\t\tconst content\t\t= this.dropdown_content;\n\t\tconst height_menu\t= content.clientHeight;\n\t\tconst scrollTop\t\t= content.scrollTop || 0;\n\t\tconst height_item\t= option.offsetHeight;\n\t\tconst y\t\t\t\t= option.getBoundingClientRect().top - content.getBoundingClientRect().top + scrollTop;\n\n\t\tif (y + height_item > height_menu + scrollTop) {\n\t\t\tthis.scroll(y - height_menu + height_item, behavior);\n\n\t\t} else if (y < scrollTop) {\n\t\t\tthis.scroll(y, behavior);\n\t\t}\n\t}\n\n\t/**\n\t * Scroll the dropdown to the given position\n\t *\n\t */\n\tscroll( scrollTop:number, behavior?:string ):void{\n\t\tconst content = this.dropdown_content;\n\t\tif( behavior ){\n\t\t\tcontent.style.scrollBehavior = behavior;\n\t\t}\n\t\tcontent.scrollTop = scrollTop;\n\t\tcontent.style.scrollBehavior = '';\n\t}\n\n\t/**\n\t * Clears the active option\n\t *\n\t */\n\tclearActiveOption(){\n\t\tif( this.activeOption ){\n\t\t\tremoveClasses(this.activeOption,'active');\n\t\t\tsetAttr(this.activeOption,{'aria-selected':null});\n\t\t}\n\t\tthis.activeOption = null;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':null});\n\t}\n\n\n\t/**\n\t * Selects all items (CTRL + A).\n\t */\n\tselectAll() {\n\t\tconst self = this;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\tconst activeItems = self.controlChildren();\n\n\t\tif( !activeItems.length ) return;\n\n\t\tself.hideInput();\n\t\tself.close();\n\n\t\tself.activeItems = activeItems;\n\t\titerate( activeItems, (item) => {\n\t\t\tself.setActiveItemClass(item);\n\t\t});\n\n\t}\n\n\t/**\n\t * Determines if the control_input should be in a hidden or visible state\n\t *\n\t */\n\tinputState(){\n\t\tvar self = this;\n\n\t\tif( !self.control.contains(self.control_input) ) return;\n\n\t\tsetAttr(self.control_input,{placeholder:self.settings.placeholder});\n\n\t\tif( self.activeItems.length > 0 || (!self.isFocused && self.settings.hidePlaceholder && self.items.length > 0) ){\n\t\t\tself.setTextboxValue();\n\t\t\tself.isInputHidden = true;\n\n\t\t}else{\n\n\t\t\tif( self.settings.hidePlaceholder && self.items.length > 0 ){\n\t\t\t\tsetAttr(self.control_input,{placeholder:''});\n\t\t\t}\n\t\t\tself.isInputHidden = false;\n\t\t}\n\n\t\tself.wrapper.classList.toggle('input-hidden', self.isInputHidden );\n\t}\n\n\t/**\n\t * Hides the input element out of view, while\n\t * retaining its focus.\n\t * @deprecated 1.3\n\t */\n\thideInput() {\n\t\tthis.inputState();\n\t}\n\n\t/**\n\t * Restores input visibility.\n\t * @deprecated 1.3\n\t */\n\tshowInput() {\n\t\tthis.inputState();\n\t}\n\n\t/**\n\t * Get the input value\n\t */\n\tinputValue(){\n\t\treturn this.control_input.value.trim();\n\t}\n\n\t/**\n\t * Gives the control focus.\n\t */\n\tfocus() {\n\t\tvar self = this;\n\t\tif (self.isDisabled) return;\n\n\t\tself.ignoreFocus = true;\n\n\t\tif( self.control_input.offsetWidth ){\n\t\t\tself.control_input.focus();\n\t\t}else{\n\t\t\tself.focus_node.focus();\n\t\t}\n\n\t\tsetTimeout(() => {\n\t\t\tself.ignoreFocus = false;\n\t\t\tself.onFocus();\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Forces the control out of focus.\n\t *\n\t */\n\tblur():void {\n\t\tthis.focus_node.blur();\n\t\tthis.onBlur();\n\t}\n\n\t/**\n\t * Returns a function that scores an object\n\t * to show how good of a match it is to the\n\t * provided query.\n\t *\n\t * @return {function}\n\t */\n\tgetScoreFunction(query:string) {\n\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t}\n\n\t/**\n\t * Returns search options for sifter (the system\n\t * for scoring and sorting results).\n\t *\n\t * @see https://github.com/orchidjs/sifter.js\n\t * @return {object}\n\t */\n\tgetSearchOptions() {\n\t\tvar settings = this.settings;\n\t\tvar sort = settings.sortField;\n\t\tif (typeof settings.sortField === 'string') {\n\t\t\tsort = [{field: settings.sortField}];\n\t\t}\n\n\t\treturn {\n\t\t\tfields : settings.searchField,\n\t\t\tconjunction : settings.searchConjunction,\n\t\t\tsort : sort,\n\t\t\tnesting : settings.nesting\n\t\t};\n\t}\n\n\t/**\n\t * Searches through available options and returns\n\t * a sorted array of matches.\n\t *\n\t */\n\tsearch(query:string) : ReturnType<Sifter['search']>{\n\t\tvar i, result, calculateScore;\n\t\tvar self = this;\n\t\tvar options = this.getSearchOptions();\n\n\t\t// validate user-provided result scoring function\n\t\tif ( self.settings.score ){\n\t\t\tcalculateScore = self.settings.score.call(self,query);\n\t\t\tif (typeof calculateScore !== 'function') {\n\t\t\t\tthrow new Error('Tom Select \"score\" setting must be a function that returns a function');\n\t\t\t}\n\t\t}\n\n\t\t// perform search\n\t\tif (query !== self.lastQuery) {\n\t\t\tself.lastQuery\t\t\t= query;\n\t\t\tresult\t\t\t\t\t= self.sifter.search(query, Object.assign(options, {score: calculateScore}));\n\t\t\tself.currentResults\t\t= result;\n\t\t} else {\n\t\t\tresult\t\t\t\t\t= Object.assign( {}, self.currentResults);\n\t\t}\n\n\t\t// filter out selected items\n\t\tif( self.settings.hideSelected ){\n\t\t\tfor (i = result.items.length - 1; i >= 0; i--) {\n\t\t\t\tlet hashed = hash_key(result.items[i].id);\n\t\t\t\tif( hashed && self.items.indexOf(hashed) !== -1 ){\n\t\t\t\t\tresult.items.splice(i, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Refreshes the list of available options shown\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\trefreshOptions( triggerDropdown:boolean = true ){\n\t\tvar i, j, k, n, optgroup, optgroups, html:DocumentFragment, has_create_option, active_value, active_group;\n\t\tvar create;\n\t\tconst groups: {[key:string]:DocumentFragment} = {};\n\n\t\tconst groups_order:string[]\t= [];\n\t\tvar self\t\t\t\t\t= this;\n\t\tvar query\t\t\t\t\t= self.inputValue();\n\t\tvar results\t\t\t\t\t= self.search(query);\n\t\tvar active_option\t\t\t= null; //self.activeOption;\n\t\tvar show_dropdown\t\t\t= self.settings.shouldOpen || false;\n\t\tvar dropdown_content\t\t= self.dropdown_content;\n\n\t\tif( self.activeOption ){\n\t\t\tactive_value = self.activeOption.dataset.value;\n\t\t\tactive_group = self.activeOption.closest('[data-group]') as HTMLElement;\n\t\t}\n\n\t\t// build markup\n\t\tn = results.items.length;\n\t\tif (typeof self.settings.maxOptions === 'number') {\n\t\t\tn = Math.min(n, self.settings.maxOptions);\n\t\t}\n\n\t\tif( n > 0 ){\n\t\t\tshow_dropdown = true;\n\t\t}\n\n\t\t// render and group available options individually\n\t\tfor (i = 0; i < n; i++) {\n\n\t\t\t// get option dom element\n\t\t\tlet opt_value\t\t= results.items[i].id;\n\t\t\tlet option\t\t\t= self.options[opt_value];\n\t\t\tlet option_el\t\t= self.getOption(opt_value,true) as HTMLElement;\n\n\n\t\t\t// toggle 'selected' class\n\t\t\tif( !self.settings.hideSelected ){\n\t\t\t\toption_el.classList.toggle('selected', self.items.includes(opt_value) );\n\t\t\t}\n\n\t\t\toptgroup = option[self.settings.optgroupField] || '';\n\t\t\toptgroups = Array.isArray(optgroup) ? optgroup : [optgroup];\n\n\t\t\tfor (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n\t\t\t\toptgroup = optgroups[j];\n\t\t\t\tif (!self.optgroups.hasOwnProperty(optgroup)) {\n\t\t\t\t\toptgroup = '';\n\t\t\t\t}\n\t\t\t\tif (!groups.hasOwnProperty(optgroup)) {\n\t\t\t\t\tgroups[optgroup] = document.createDocumentFragment();\n\t\t\t\t\tgroups_order.push(optgroup);\n\t\t\t\t}\n\n\t\t\t\t// nodes can only have one parent, so if the option is in mutple groups, we need a clone\n\t\t\t\tif( j > 0 ){\n\t\t\t\t\toption_el = option_el.cloneNode(true) as HTMLElement;\n\t\t\t\t\tsetAttr(option_el,{id: option.$id+'-clone-'+j,'aria-selected':null});\n\t\t\t\t\toption_el.classList.add('ts-cloned');\n\t\t\t\t\tremoveClasses(option_el,'active');\n\t\t\t\t}\n\n\t\t\t\t// make sure we keep the activeOption in the same group\n\t\t\t\tif( !active_option && active_value == opt_value ){\n\t\t\t\t\tif( active_group ){\n\t\t\t\t\t\tif( active_group.dataset.group === optgroup ){\n\t\t\t\t\t\t\tactive_option = option_el;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tactive_option = option_el;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgroups[optgroup].appendChild(option_el);\n\t\t\t}\n\t\t}\n\n\t\t// sort optgroups\n\t\tif (this.settings.lockOptgroupOrder) {\n\t\t\tgroups_order.sort((a, b) => {\n\t\t\t\tvar a_order = self.optgroups[a] && self.optgroups[a].$order || 0;\n\t\t\t\tvar b_order = self.optgroups[b] && self.optgroups[b].$order || 0;\n\t\t\t\treturn a_order - b_order;\n\t\t\t});\n\t\t}\n\n\t\t// render optgroup headers & join groups\n\t\thtml = document.createDocumentFragment();\n\t\titerate( groups_order, (optgroup) => {\n\t\t\tif (self.optgroups.hasOwnProperty(optgroup) && groups[optgroup].children.length) {\n\n\t\t\t\tlet group_options = document.createDocumentFragment();\n\t\t\t\tlet header = self.render('optgroup_header', self.optgroups[optgroup]);\n\t\t\t\tappend( group_options, header );\n\t\t\t\tappend( group_options, groups[optgroup] );\n\n\t\t\t\tlet group_html = self.render('optgroup', {group:self.optgroups[optgroup],options:group_options} );\n\n\t\t\t\tappend( html, group_html );\n\n\t\t\t} else {\n\t\t\t\tappend( html, groups[optgroup] );\n\t\t\t}\n\t\t});\n\n\t\tdropdown_content.innerHTML = '';\n\t\tappend( dropdown_content, html );\n\n\t\t// highlight matching terms inline\n\t\tif (self.settings.highlight) {\n\t\t\tremoveHighlight( dropdown_content );\n\t\t\tif (results.query.length && results.tokens.length) {\n\t\t\t\titerate( results.tokens, (tok) => {\n\t\t\t\t\thighlight( dropdown_content, tok.regex);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// helper method for adding templates to dropdown\n\t\tvar add_template = (template:TomTemplateNames) => {\n\t\t\tlet content = self.render(template,{input:query});\n\t\t\tif( content ){\n\t\t\t\tshow_dropdown = true;\n\t\t\t\tdropdown_content.insertBefore(content, dropdown_content.firstChild);\n\t\t\t}\n\t\t\treturn content;\n\t\t};\n\n\n\t\t// add loading message\n\t\tif( self.loading ){\n\t\t\tadd_template('loading');\n\n\t\t// invalid query\n\t\t}else if( !self.settings.shouldLoad.call(self,query) ){\n\t\t\tadd_template('not_loading');\n\n\t\t// add no_results message\n\t\t}else if( results.items.length === 0 ){\n\t\t\tadd_template('no_results');\n\n\t\t}\n\n\n\n\t\t// add create option\n\t\thas_create_option = self.canCreate(query);\n\t\tif (has_create_option) {\n\t\t\tcreate = add_template('option_create');\n\t\t}\n\n\n\t\t// activate\n\t\tself.hasOptions = results.items.length > 0 || has_create_option;\n\t\tif( show_dropdown ){\n\n\t\t\tif (results.items.length > 0) {\n\n\t\t\t\tif( !active_option && self.settings.mode === 'single' && self.items.length ){\n\t\t\t\t\tactive_option = self.getOption(self.items[0]);\n\t\t\t\t}\n\n\t\t\t\tif( !dropdown_content.contains(active_option) ){\n\n\t\t\t\t\tlet active_index = 0;\n\t\t\t\t\tif( create && !self.settings.addPrecedence ){\n\t\t\t\t\t\tactive_index = 1;\n\t\t\t\t\t}\n\t\t\t\t\tactive_option = self.selectable()[active_index] as HTMLElement;\n\t\t\t\t}\n\n\t\t\t}else if( create ){\n\t\t\t\tactive_option = create;\n\t\t\t}\n\n\t\t\tif( triggerDropdown && !self.isOpen ){\n\t\t\t\tself.open();\n\t\t\t\tself.scrollToOption(active_option,'auto');\n\t\t\t}\n\t\t\tself.setActiveOption(active_option);\n\n\t\t}else{\n\t\t\tself.clearActiveOption();\n\t\t\tif( triggerDropdown && self.isOpen ){\n\t\t\t\tself.close(false); // if create_option=null, we want the dropdown to close but not reset the textbox value\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return list of selectable options\n\t *\n\t */\n\tselectable():NodeList{\n\t\treturn this.dropdown_content.querySelectorAll('[data-selectable]');\n\t}\n\n\n\n\t/**\n\t * Adds an available option. If it already exists,\n\t * nothing will happen. Note: this does not refresh\n\t * the options list dropdown (use `refreshOptions`\n\t * for that).\n\t *\n\t * Usage:\n\t *\n\t * this.addOption(data)\n\t *\n\t */\n\taddOption( data:TomOption, user_created = false ):false|string {\n\t\tconst self = this;\n\n\t\t// @deprecated 1.7.7\n\t\t// use addOptions( array, user_created ) for adding multiple options\n\t\tif( Array.isArray(data) ){\n\t\t\tself.addOptions( data, user_created);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst key = hash_key(data[self.settings.valueField]);\n\t\tif( key === null || self.options.hasOwnProperty(key) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tdata.$order\t\t\t= data.$order || ++self.order;\n\t\tdata.$id\t\t\t= self.inputId + '-opt-' + data.$order;\n\t\tself.options[key]\t= data;\n\t\tself.lastQuery\t\t= null;\n\n\t\tif( user_created ){\n\t\t\tself.userOptions[key] = user_created;\n\t\t\tself.trigger('option_add', key, data);\n\t\t}\n\n\t\treturn key;\n\t}\n\n\t/**\n\t * Add multiple options\n\t *\n\t */\n\taddOptions( data:TomOption[], user_created = false ):void{\n\t\titerate( data, (dat) => {\n\t\t\tthis.addOption(dat, user_created);\n\t\t});\n\t}\n\n\t/**\n\t * @deprecated 1.7.7\n\t */\n\tregisterOption( data:TomOption ):false|string {\n\t\treturn this.addOption(data);\n\t}\n\n\t/**\n\t * Registers an option group to the pool of option groups.\n\t *\n\t * @return {boolean|string}\n\t */\n\tregisterOptionGroup(data:TomOption) {\n\t\tvar key = hash_key(data[this.settings.optgroupValueField]);\n\n\t\tif ( key === null ) return false;\n\n\t\tdata.$order = data.$order || ++this.order;\n\t\tthis.optgroups[key] = data;\n\t\treturn key;\n\t}\n\n\t/**\n\t * Registers a new optgroup for options\n\t * to be bucketed into.\n\t *\n\t */\n\taddOptionGroup(id:string, data:TomOption) {\n\t\tvar hashed_id;\n\t\tdata[this.settings.optgroupValueField] = id;\n\n\t\tif( hashed_id = this.registerOptionGroup(data) ){\n\t\t\tthis.trigger('optgroup_add', hashed_id, data);\n\t\t}\n\t}\n\n\t/**\n\t * Removes an existing option group.\n\t *\n\t */\n\tremoveOptionGroup(id:string) {\n\t\tif (this.optgroups.hasOwnProperty(id)) {\n\t\t\tdelete this.optgroups[id];\n\t\t\tthis.clearCache();\n\t\t\tthis.trigger('optgroup_remove', id);\n\t\t}\n\t}\n\n\t/**\n\t * Clears all existing option groups.\n\t */\n\tclearOptionGroups() {\n\t\tthis.optgroups = {};\n\t\tthis.clearCache();\n\t\tthis.trigger('optgroup_clear');\n\t}\n\n\t/**\n\t * Updates an option available for selection. If\n\t * it is visible in the selected items or options\n\t * dropdown, it will be re-rendered automatically.\n\t *\n\t */\n\tupdateOption(value:string, data:TomOption) {\n\t\tconst self = this;\n\t\tvar item_new;\n\t\tvar index_item;\n\n\t\tconst value_old\t\t= hash_key(value);\n\t\tconst value_new\t\t= hash_key(data[self.settings.valueField]);\n\n\t\t// sanity checks\n\t\tif( value_old === null ) return;\n\t\tif( !self.options.hasOwnProperty(value_old) ) return;\n\t\tif( typeof value_new !== 'string' ) throw new Error('Value must be set in option data');\n\n\n\t\tconst option\t\t= self.getOption(value_old);\n\t\tconst item\t\t\t= self.getItem(value_old);\n\n\n\t\tdata.$order = data.$order || self.options[value_old].$order;\n\t\tdelete self.options[value_old];\n\n\t\t// invalidate render cache\n\t\t// don't remove existing node yet, we'll remove it after replacing it\n\t\tself.uncacheValue(value_new);\n\n\t\tself.options[value_new] = data;\n\n\t\t// update the option if it's in the dropdown\n\t\tif( option ){\n\t\t\tif( self.dropdown_content.contains(option) ){\n\n\t\t\t\tconst option_new\t= self._render('option', data);\n\t\t\t\treplaceNode(option, option_new);\n\n\t\t\t\tif( self.activeOption === option ){\n\t\t\t\t\tself.setActiveOption(option_new);\n\t\t\t\t}\n\t\t\t}\n\t\t\toption.remove();\n\t\t}\n\n\t\t// update the item if we have one\n\t\tif( item ){\n\t\t\tindex_item = self.items.indexOf(value_old);\n\t\t\tif (index_item !== -1) {\n\t\t\t\tself.items.splice(index_item, 1, value_new);\n\t\t\t}\n\n\t\t\titem_new\t= self._render('item', data);\n\n\t\t\tif( item.classList.contains('active') ) addClasses(item_new,'active');\n\n\t\t\treplaceNode( item, item_new);\n\t\t}\n\n\t\t// invalidate last query because we might have updated the sortField\n\t\tself.lastQuery = null;\n\t}\n\n\t/**\n\t * Removes a single option.\n\t *\n\t */\n\tremoveOption(value:string, silent?:boolean):void {\n\t\tconst self = this;\n\t\tvalue = get_hash(value);\n\n\t\tself.uncacheValue(value);\n\n\t\tdelete self.userOptions[value];\n\t\tdelete self.options[value];\n\t\tself.lastQuery = null;\n\t\tself.trigger('option_remove', value);\n\t\tself.removeItem(value, silent);\n\t}\n\n\t/**\n\t * Clears all options.\n\t */\n\tclearOptions(filter?:TomClearFilter ) {\n\n\t\tconst boundFilter = (filter || this.clearFilter).bind(this);\n\n\t\tthis.loadedSearches\t\t= {};\n\t\tthis.userOptions\t\t= {};\n\t\tthis.clearCache();\n\n\t\tconst selected:TomOptions\t= {};\n\t\titerate(this.options,(option,key)=>{\n\t\t\tif( boundFilter(option,key as string) ){\n\t\t\t\tselected[key] = this.options[key];\n\t\t\t}\n\t\t});\n\n\t\tthis.options = this.sifter.items = selected;\n\t\tthis.lastQuery = null;\n\t\tthis.trigger('option_clear');\n\t}\n\n\t/**\n\t * Used by clearOptions() to decide whether or not an option should be removed\n\t * Return true to keep an option, false to remove\n\t *\n\t */\n\tclearFilter(option:TomOption,value:string){\n\t\tif( this.items.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Returns the dom element of the option\n\t * matching the given value.\n\t *\n\t */\n\tgetOption(value:null|string, create:boolean=false):null|HTMLElement {\n\t\tconst hashed = hash_key(value);\n\n\t\tif( hashed !== null && this.options.hasOwnProperty(hashed) ){\n\t\t\tconst option = this.options[hashed];\n\n\t\t\tif( option.$div ){\n\t\t\t\treturn option.$div;\n\t\t\t}\n\n\t\t\tif( create ){\n\t\t\t\treturn this._render('option', option);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Returns the dom element of the next or previous dom element of the same type\n\t * Note: adjacent options may not be adjacent DOM elements (optgroups)\n\t *\n\t */\n\tgetAdjacent( option:null|HTMLElement, direction:number, type:string = 'option' ) : HTMLElement|null{\n\t\tvar self = this, all;\n\n\t\tif( !option ){\n\t\t\treturn null;\n\t\t}\n\n\t\tif( type == 'item' ){\n\t\t\tall\t\t\t= self.controlChildren();\n\t\t}else{\n\t\t\tall\t\t\t= self.dropdown_content.querySelectorAll('[data-selectable]');\n\t\t}\n\n\t\tfor( let i = 0; i < all.length; i++ ){\n\t\t\tif( all[i] != option ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif( direction > 0 ){\n\t\t\t\treturn all[i+1] as HTMLElement;\n\t\t\t}\n\n\t\t\treturn all[i-1] as HTMLElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\n\t/**\n\t * Returns the dom element of the item\n\t * matching the given value.\n\t *\n\t */\n\tgetItem(item:string|TomItem|null):null|TomItem {\n\n\t\tif( typeof item == 'object' ){\n\t\t\treturn item;\n\t\t}\n\n\t\tvar value = hash_key(item);\n\t\treturn value !== null\n\t\t\t? this.control.querySelector(`[data-value=\"${addSlashes(value)}\"]`)\n\t\t\t: null;\n\t}\n\n\t/**\n\t * \"Selects\" multiple items at once. Adds them to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItems( values:string|string[], silent?:boolean ):void{\n\t\tvar self = this;\n\n\t\tvar items = Array.isArray(values) ? values : [values];\n\t\titems = items.filter(x => self.items.indexOf(x) === -1);\n\t\tfor (let i = 0, n = items.length; i < n; i++) {\n\t\t\tself.isPending = (i < n - 1);\n\t\t\tself.addItem(items[i], silent);\n\t\t}\n\t}\n\n\t/**\n\t * \"Selects\" an item. Adds it to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItem( value:string, silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change','dropdown_close'];\n\n\t\tdebounce_events(this, events, () => {\n\t\t\tvar item, wasFull;\n\t\t\tconst self = this;\n\t\t \tconst inputMode = self.settings.mode;\n\t\t\tconst hashed = hash_key(value);\n\n\t\t\tif( hashed && self.items.indexOf(hashed) !== -1 ){\n\n\t\t\t\tif( inputMode === 'single' ){\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( inputMode === 'single' || !self.settings.duplicates ){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hashed === null || !self.options.hasOwnProperty(hashed)) return;\n\t\t\tif (inputMode === 'single') self.clear(silent);\n\t\t\tif (inputMode === 'multi' && self.isFull()) return;\n\n\t\t\titem = self._render('item', self.options[hashed]);\n\n\t\t\tif( self.control.contains(item) ){ // duplicates\n\t\t\t\titem = item.cloneNode(true) as HTMLElement;\n\t\t\t}\n\n\t\t\twasFull = self.isFull();\n\t\t\tself.items.splice(self.caretPos, 0, hashed);\n\t\t\tself.insertAtCaret(item);\n\n\t\t\tif (self.isSetup) {\n\n\t\t\t\t// update menu / remove the option (if this is not one item being added as part of series)\n\t\t\t\tif( !self.isPending && self.settings.hideSelected ){\n\t\t\t\t\tlet option = self.getOption(hashed);\n\t\t\t\t\tlet next = self.getAdjacent(option, 1);\n\t\t\t\t\tif( next ){\n\t\t\t\t\t\tself.setActiveOption(next);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// refreshOptions after setActiveOption(),\n\t\t\t\t// otherwise setActiveOption() will be called by refreshOptions() with the wrong value\n\t\t\t\tif( !self.isPending && !self.settings.closeAfterSelect ){\n\t\t\t\t\tself.refreshOptions(self.isFocused && inputMode !== 'single');\n\t\t\t\t}\n\n\t\t\t\t// hide the menu if the maximum number of items have been selected or no options are left\n\t\t\t\tif( self.settings.closeAfterSelect != false && self.isFull() ){\n\t\t\t\t\tself.close();\n\t\t\t\t} else if (!self.isPending) {\n\t\t\t\t\tself.positionDropdown();\n\t\t\t\t}\n\n\t\t\t\tself.trigger('item_add', hashed, item);\n\n\t\t\t\tif (!self.isPending) {\n\t\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!self.isPending || (!wasFull && self.isFull())) {\n\t\t\t\tself.inputState();\n\t\t\t\tself.refreshState();\n\t\t\t}\n\n\t\t});\n\t}\n\n\t/**\n\t * Removes the selected item matching\n\t * the provided value.\n\t *\n\t */\n\tremoveItem( item:string|TomItem|null=null, silent?:boolean ){\n\t\tconst self\t\t= this;\n\t\titem\t\t\t= self.getItem(item);\n\n\t\tif( !item ) return;\n\n\t\tvar i,idx;\n\t\tconst value\t= item.dataset.value;\n\t\ti = nodeIndex(item);\n\n\t\titem.remove();\n\t\tif( item.classList.contains('active') ){\n\t\t\tidx = self.activeItems.indexOf(item);\n\t\t\tself.activeItems.splice(idx, 1);\n\t\t\tremoveClasses(item,'active');\n\t\t}\n\n\t\tself.items.splice(i, 1);\n\t\tself.lastQuery = null;\n\t\tif (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n\t\t\tself.removeOption(value, silent);\n\t\t}\n\n\t\tif (i < self.caretPos) {\n\t\t\tself.setCaret(self.caretPos - 1);\n\t\t}\n\n\t\tself.updateOriginalInput({silent: silent});\n\t\tself.refreshState();\n\t\tself.positionDropdown();\n\t\tself.trigger('item_remove', value, item);\n\n\t}\n\n\t/**\n\t * Invokes the `create` method provided in the\n\t * TomSelect options that should provide the data\n\t * for the new item, given the user input.\n\t *\n\t * Once this completes, it will be added\n\t * to the item list.\n\t *\n\t */\n\tcreateItem( input:null|string=null, triggerDropdown:boolean=true, callback:TomCreateCallback = ()=>{} ):boolean{\n\t\tvar self = this;\n\t\tvar caret = self.caretPos;\n\t\tvar output;\n\t\tinput = input || self.inputValue();\n\n\t\tif (!self.canCreate(input)) {\n\t\t\tcallback();\n\t\t\treturn false;\n\t\t}\n\n\t\tself.lock();\n\n\t\tvar created = false;\n\t\tvar create = (data?:boolean|TomOption) => {\n\t\t\tself.unlock();\n\n\t\t\tif (!data || typeof data !== 'object') return callback();\n\t\t\tvar value = hash_key(data[self.settings.valueField]);\n\t\t\tif( typeof value !== 'string' ){\n\t\t\t\treturn callback();\n\t\t\t}\n\n\t\t\tself.setTextboxValue();\n\t\t\tself.addOption(data,true);\n\t\t\tself.setCaret(caret);\n\t\t\tself.addItem(value);\n\t\t\tcallback(data);\n\t\t\tcreated = true;\n\t\t};\n\n\t\tif( typeof self.settings.create === 'function' ){\n\t\t\toutput = self.settings.create.call(this, input, create);\n\t\t}else{\n\t\t\toutput = {\n\t\t\t\t[self.settings.labelField]: input,\n\t\t\t\t[self.settings.valueField]: input,\n\t\t\t};\n\t\t}\n\n\t\tif( !created ){\n\t\t\tcreate(output);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Re-renders the selected item lists.\n\t */\n\trefreshItems() {\n\t\tvar self = this;\n\t\tself.lastQuery = null;\n\n\t\tif (self.isSetup) {\n\t\t\tself.addItems(self.items);\n\t\t}\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Updates all state-dependent attributes\n\t * and CSS classes.\n\t */\n\trefreshState() {\n\t\tconst self = this;\n\n\t\tself.refreshValidityState();\n\n\t\tconst isFull\t= self.isFull();\n\t\tconst isLocked\t= self.isLocked;\n\n\t\tself.wrapper.classList.toggle('rtl',self.rtl);\n\n\n\t\tconst wrap_classList = self.wrapper.classList;\n\n\t\twrap_classList.toggle('focus', self.isFocused)\n\t\twrap_classList.toggle('disabled', self.isDisabled)\n\t\twrap_classList.toggle('required', self.isRequired)\n\t\twrap_classList.toggle('invalid', !self.isValid)\n\t\twrap_classList.toggle('locked', isLocked)\n\t\twrap_classList.toggle('full', isFull)\n\t\twrap_classList.toggle('input-active', self.isFocused && !self.isInputHidden)\n\t\twrap_classList.toggle('dropdown-active', self.isOpen)\n\t\twrap_classList.toggle('has-options', isEmptyObject(self.options) )\n\t\twrap_classList.toggle('has-items', self.items.length > 0);\n\n\t}\n\n\n\t/**\n\t * Update the `required` attribute of both input and control input.\n\t *\n\t * The `required` property needs to be activated on the control input\n\t * for the error to be displayed at the right place. `required` also\n\t * needs to be temporarily deactivated on the input since the input is\n\t * hidden and can't show errors.\n\t */\n\trefreshValidityState() {\n\t\tvar self = this;\n\n\t\tif( !self.input.validity ){\n\t\t\treturn;\n\t\t}\n\n\t\tself.isValid = self.input.validity.valid;\n\t\tself.isInvalid = !self.isValid;\n\t}\n\n\t/**\n\t * Determines whether or not more items can be added\n\t * to the control without exceeding the user-defined maximum.\n\t *\n\t * @returns {boolean}\n\t */\n\tisFull() {\n\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t}\n\n\t/**\n\t * Refreshes the original <select> or <input>\n\t * element to reflect the current state.\n\t *\n\t */\n\tupdateOriginalInput( opts:TomArgObject = {} ){\n\t\tconst self = this;\n\t\tvar option, label;\n\n\t\tconst empty_option = self.input.querySelector('option[value=\"\"]') as HTMLOptionElement;\n\n\t\tif( self.is_select_tag ){\n\n\t\t\tconst selected:HTMLOptionElement[]\t\t= [];\n\t\t\tconst has_selected:number\t\t\t\t= self.input.querySelectorAll('option:checked').length;\n\n\t\t\tfunction AddSelected(option_el:HTMLOptionElement|null, value:string, label:string):HTMLOptionElement{\n\n\t\t\t\tif( !option_el ){\n\t\t\t\t\toption_el = getDom('<option value=\"' + escape_html(value) + '\">' + escape_html(label) + '</option>') as HTMLOptionElement;\n\t\t\t\t}\n\n\t\t\t\t// don't move empty option from top of list\n\t\t\t\t// fixes bug in firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1725293\n\t\t\t\tif( option_el != empty_option ){\n\t\t\t\t\tself.input.append(option_el);\n\t\t\t\t}\n\n\t\t\t\tselected.push(option_el);\n\n\t\t\t\t// marking empty option as selected can break validation\n\t\t\t\t// fixes https://github.com/orchidjs/tom-select/issues/303\n\t\t\t\tif( option_el != empty_option || has_selected > 0 ){\n\t\t\t\t\toption_el.selected = true;\n\t\t\t\t}\n\n\t\t\t\treturn option_el;\n\t\t\t}\n\n\t\t\t// unselect all selected options\n\t\t\tself.input.querySelectorAll('option:checked').forEach((option_el:Element) => {\n\t\t\t\t(<HTMLOptionElement>option_el).selected = false;\n\t\t\t});\n\n\n\t\t\t// nothing selected?\n\t\t\tif( self.items.length == 0 && self.settings.mode == 'single' ){\n\n\t\t\t\tAddSelected(empty_option, \"\", \"\");\n\n\t\t\t// order selected <option> tags for values in self.items\n\t\t\t}else{\n\n\t\t\t\tself.items.forEach((value)=>{\n\t\t\t\t\toption\t\t\t= self.options[value];\n\t\t\t\t\tlabel\t\t\t= option[self.settings.labelField] || '';\n\n\t\t\t\t\tif( selected.includes(option.$option) ){\n\t\t\t\t\t\tconst reuse_opt = self.input.querySelector(`option[value=\"${addSlashes(value)}\"]:not(:checked)`) as HTMLOptionElement;\n\t\t\t\t\t\tAddSelected(reuse_opt, value, label);\n\t\t\t\t\t}else{\n\t\t\t\t\t\toption.$option\t= AddSelected(option.$option, value, label);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t} else {\n\t\t\tself.input.value = self.getValue() as string;\n\t\t}\n\n\t\tif (self.isSetup) {\n\t\t\tif (!opts.silent) {\n\t\t\t\tself.trigger('change', self.getValue() );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Shows the autocomplete dropdown containing\n\t * the available options.\n\t */\n\topen() {\n\t\tvar self = this;\n\n\t\tif (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;\n\t\tself.isOpen = true;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'true'});\n\t\tself.refreshState();\n\t\tapplyCSS(self.dropdown,{visibility: 'hidden', display: 'block'});\n\t\tself.positionDropdown();\n\t\tapplyCSS(self.dropdown,{visibility: 'visible', display: 'block'});\n\t\tself.focus();\n\t\tself.trigger('dropdown_open', self.dropdown);\n\t}\n\n\t/**\n\t * Closes the autocomplete dropdown menu.\n\t */\n\tclose(setTextboxValue=true) {\n\t\tvar self = this;\n\t\tvar trigger = self.isOpen;\n\n\t\tif( setTextboxValue ){\n\n\t\t\t// before blur() to prevent form onchange event\n\t\t\tself.setTextboxValue();\n\n\t\t\tif (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\tself.hideInput();\n\t\t\t}\n\t\t}\n\n\t\tself.isOpen = false;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'false'});\n\t\tapplyCSS(self.dropdown,{display: 'none'});\n\t\tif( self.settings.hideSelected ){\n\t\t\tself.clearActiveOption();\n\t\t}\n\t\tself.refreshState();\n\n\t\tif (trigger) self.trigger('dropdown_close', self.dropdown);\n\t}\n\n\t/**\n\t * Calculates and applies the appropriate\n\t * position of the dropdown if dropdownParent = 'body'.\n\t * Otherwise, position is determined by css\n\t */\n\tpositionDropdown(){\n\n\t\tif( this.settings.dropdownParent !== 'body' ){\n\t\t\treturn;\n\t\t}\n\n\t\tvar context\t\t\t= this.control;\n\t\tvar rect\t\t\t= context.getBoundingClientRect();\n\t\tvar top\t\t\t\t= context.offsetHeight + rect.top + window.scrollY;\n\t\tvar left\t\t\t= rect.left + window.scrollX;\n\n\n\t\tapplyCSS(this.dropdown,{\n\t\t\twidth : rect.width + 'px',\n\t\t\ttop : top + 'px',\n\t\t\tleft : left + 'px'\n\t\t});\n\n\t}\n\n\t/**\n\t * Resets / clears all selected items\n\t * from the control.\n\t *\n\t */\n\tclear(silent?:boolean) {\n\t\tvar self = this;\n\n\t\tif (!self.items.length) return;\n\n\t\tvar items = self.controlChildren();\n\t\titerate(items,(item)=>{\n\t\t\tself.removeItem(item,true);\n\t\t});\n\n\t\tself.showInput();\n\t\tif( !silent ) self.updateOriginalInput();\n\t\tself.trigger('clear');\n\t}\n\n\t/**\n\t * A helper method for inserting an element\n\t * at the current caret position.\n\t *\n\t */\n\tinsertAtCaret(el:HTMLElement) {\n\t\tconst self\t\t= this;\n\t\tconst caret\t\t= self.caretPos;\n\t\tconst target\t= self.control;\n\n\t\ttarget.insertBefore(el, target.children[caret]);\n\n\t\tself.setCaret(caret + 1);\n\t}\n\n\t/**\n\t * Removes the current selected item(s).\n\t *\n\t */\n\tdeleteSelection(e:KeyboardEvent):boolean {\n\t\tvar direction, selection, caret, tail;\n\t\tvar self = this;\n\n\t\tdirection = (e && e.keyCode === constants.KEY_BACKSPACE) ? -1 : 1;\n\t\tselection = getSelection(self.control_input);\n\n\n\t\t// determine items that will be removed\n\t\tconst rm_items:TomItem[]\t= [];\n\n\t\tif (self.activeItems.length) {\n\n\t\t\ttail = getTail(self.activeItems, direction);\n\t\t\tcaret = nodeIndex(tail);\n\n\t\t\tif (direction > 0) { caret++; }\n\n\t\t\titerate(self.activeItems, (item) => rm_items.push(item) );\n\n\t\t} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n\t\t\tconst items = self.controlChildren();\n\t\t\tif (direction < 0 && selection.start === 0 && selection.length === 0) {\n\t\t\t\trm_items.push( items[self.caretPos - 1]);\n\n\t\t\t} else if (direction > 0 && selection.start === self.inputValue().length) {\n\t\t\t\trm_items.push(items[self.caretPos]);\n\t\t\t}\n\t\t}\n\n\t\tif( !self.shouldDelete(rm_items,e) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tpreventDefault(e,true);\n\n\t\t// perform removal\n\t\tif (typeof caret !== 'undefined') {\n\t\t\tself.setCaret(caret);\n\t\t}\n\n\t\twhile( rm_items.length ){\n\t\t\tself.removeItem(rm_items.pop());\n\t\t}\n\n\t\tself.showInput();\n\t\tself.positionDropdown();\n\t\tself.refreshOptions(false);\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Return true if the items should be deleted\n\t */\n\tshouldDelete(items:TomItem[],evt:MouseEvent|KeyboardEvent){\n\n\t\tconst values = items.map(item => item.dataset.value);\n\n\t\t// allow the callback to abort\n\t\tif( !values.length || (typeof this.settings.onDelete === 'function' && this.settings.onDelete(values,evt) === false) ){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Selects the previous / next item (depending on the `direction` argument).\n\t *\n\t * > 0 - right\n\t * < 0 - left\n\t *\n\t */\n\tadvanceSelection(direction:number, e?:MouseEvent|KeyboardEvent) {\n\t\tvar last_active, adjacent, self = this;\n\n\t\tif (self.rtl) direction *= -1;\n\t\tif( self.inputValue().length ) return;\n\n\n\t\t// add or remove to active items\n\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) || isKeyDown('shiftKey',e) ){\n\n\t\t\tlast_active\t\t\t= self.getLastActive(direction);\n\t\t\tif( last_active ){\n\n\t\t\t\tif( !last_active.classList.contains('active') ){\n\t\t\t\t\tadjacent\t\t\t= last_active;\n\t\t\t\t}else{\n\t\t\t\t\tadjacent\t\t\t= self.getAdjacent(last_active,direction,'item');\n\t\t\t\t}\n\n\t\t\t// if no active item, get items adjacent to the control input\n\t\t\t}else if( direction > 0 ){\n\t\t\t\tadjacent\t\t\t= self.control_input.nextElementSibling;\n\t\t\t}else{\n\t\t\t\tadjacent\t\t\t= self.control_input.previousElementSibling;\n\t\t\t}\n\n\n\t\t\tif( adjacent ){\n\t\t\t\tif( adjacent.classList.contains('active') ){\n\t\t\t\t\tself.removeActiveItem(last_active);\n\t\t\t\t}\n\t\t\t\tself.setActiveItemClass(adjacent); // mark as last_active !! after removeActiveItem() on last_active\n\t\t\t}\n\n\t\t// move caret to the left or right\n\t\t}else{\n\t\t\tself.moveCaret(direction);\n\t\t}\n\t}\n\n\tmoveCaret(direction:number){}\n\n\t/**\n\t * Get the last active item\n\t *\n\t */\n\tgetLastActive(direction?:number){\n\n\t\tlet last_active = this.control.querySelector('.last-active');\n\t\tif( last_active ){\n\t\t\treturn last_active;\n\t\t}\n\n\n\t\tvar result = this.control.querySelectorAll('.active');\n\t\tif( result ){\n\t\t\treturn getTail(result,direction);\n\t\t}\n\t}\n\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tsetCaret(new_pos:number) {\n\t\tthis.caretPos = this.items.length;\n\t}\n\n\t/**\n\t * Return list of item dom elements\n\t *\n\t */\n\tcontrolChildren():TomItem[]{\n\t\treturn Array.from( this.control.querySelectorAll('[data-ts-item]') ) as TomItem[];\n\t}\n\n\t/**\n\t * Disables user input on the control. Used while\n\t * items are being asynchronously created.\n\t */\n\tlock() {\n\t\tthis.isLocked = true;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Re-enables user input on the control.\n\t */\n\tunlock() {\n\t\tthis.isLocked = false;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Disables user input on the control completely.\n\t * While disabled, it cannot receive focus.\n\t */\n\tdisable() {\n\t\tvar self = this;\n\t\tself.input.disabled\t\t\t\t= true;\n\t\tself.control_input.disabled\t\t= true;\n\t\tself.focus_node.tabIndex\t\t= -1;\n\t\tself.isDisabled\t\t\t\t\t= true;\n\t\tthis.close();\n\t\tself.lock();\n\t}\n\n\t/**\n\t * Enables the control so that it can respond\n\t * to focus and user input.\n\t */\n\tenable() {\n\t\tvar self = this;\n\t\tself.input.disabled\t\t\t\t= false;\n\t\tself.control_input.disabled\t\t= false;\n\t\tself.focus_node.tabIndex\t\t= self.tabIndex;\n\t\tself.isDisabled\t\t\t\t\t= false;\n\t\tself.unlock();\n\t}\n\n\t/**\n\t * Completely destroys the control and\n\t * unbinds all event listeners so that it can\n\t * be garbage collected.\n\t */\n\tdestroy() {\n\t\tvar self = this;\n\t\tvar revertSettings = self.revertSettings;\n\n\t\tself.trigger('destroy');\n\t\tself.off();\n\t\tself.wrapper.remove();\n\t\tself.dropdown.remove();\n\n\t\tself.input.innerHTML = revertSettings.innerHTML;\n\t\tself.input.tabIndex = revertSettings.tabIndex;\n\n\t\tremoveClasses(self.input,'tomselected','ts-hidden-accessible');\n\n\t\tself._destroy();\n\n\t\tdelete self.input.tomselect;\n\t}\n\n\t/**\n\t * A helper method for rendering \"item\" and\n\t * \"option\" templates, given the data.\n\t *\n\t */\n\trender( templateName:TomTemplateNames, data?:any ):null|HTMLElement{\n\n\t\tif( typeof this.settings.render[templateName] !== 'function' ){\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this._render(templateName, data);\n\t}\n\n\t/**\n\t * _render() can be called directly when we know we don't want to hit the cache\n\t * return type could be null for some templates, we need https://github.com/microsoft/TypeScript/issues/33014\n\t */\n\t_render( templateName:TomTemplateNames, data?:any ):HTMLElement{\n\t\tvar value = '', id, html;\n\t\tconst self = this;\n\n\t\tif( templateName === 'option' || templateName == 'item' ){\n\t\t\tvalue\t= get_hash(data[self.settings.valueField]);\n\t\t}\n\n\t\t// render markup\n\t\thtml = self.settings.render[templateName].call(this, data, escape_html);\n\n\t\tif( html == null ){\n\t\t\treturn html;\n\t\t}\n\n\t\thtml = getDom( html );\n\n\t\t// add mandatory attributes\n\t\tif (templateName === 'option' || templateName === 'option_create') {\n\n\t\t\tif( data[self.settings.disabledField] ){\n\t\t\t\tsetAttr(html,{'aria-disabled':'true'});\n\t\t\t}else{\n\t\t\t\tsetAttr(html,{'data-selectable': ''});\n\t\t\t}\n\n\t\t}else if (templateName === 'optgroup') {\n\t\t\tid = data.group[self.settings.optgroupValueField];\n\t\t\tsetAttr(html,{'data-group': id});\n\t\t\tif(data.group[self.settings.disabledField]) {\n\t\t\t\tsetAttr(html,{'data-disabled': ''});\n\t\t\t}\n\t\t}\n\n\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\tsetAttr(html,{'data-value': value });\n\n\n\t\t\t// make sure we have some classes if a template is overwritten\n\t\t\tif( templateName === 'item' ){\n\t\t\t\taddClasses(html,self.settings.itemClass);\n\t\t\t\tsetAttr(html,{'data-ts-item':''});\n\t\t\t}else{\n\t\t\t\taddClasses(html,self.settings.optionClass);\n\t\t\t\tsetAttr(html,{\n\t\t\t\t\trole:'option',\n\t\t\t\t\tid:data.$id\n\t\t\t\t});\n\n\t\t\t\t// update cache\n\t\t\t\tself.options[value].$div = html;\n\t\t\t}\n\n\n\t\t}\n\n\t\treturn html;\n\t}\n\n\n\t/**\n\t * Clears the render cache for a template. If\n\t * no template is given, clears all render\n\t * caches.\n\t *\n\t */\n\tclearCache():void{\n\n\t\titerate(this.options, (option, value)=>{\n\t\t\tif( option.$div ){\n\t\t\t\toption.$div.remove();\n\t\t\t\tdelete option.$div;\n\t\t\t}\n\t\t});\n\n\t}\n\n\t/**\n\t * Removes a value from item and option caches\n\t *\n\t */\n\tuncacheValue(value:string){\n\n\t\tconst option_el\t\t\t= this.getOption(value);\n\t\tif( option_el ) option_el.remove();\n\n\t}\n\n\t/**\n\t * Determines whether or not to display the\n\t * create item prompt, given a user input.\n\t *\n\t */\n\tcanCreate( input:string ):boolean {\n\t\treturn this.settings.create && (input.length > 0) && (this.settings.createFilter as TomCreateFilter ).call(this, input);\n\t}\n\n\n\t/**\n\t * Wraps this.`method` so that `new_fn` can be invoked 'before', 'after', or 'instead' of the original method\n\t *\n\t * this.hook('instead','onKeyDown',function( arg1, arg2 ...){\n\t *\n\t * });\n\t */\n\thook( when:string, method:string, new_fn:any ){\n\t\tvar self = this;\n\t\tvar orig_method = self[method];\n\n\n\t\tself[method] = function(){\n\t\t\tvar result, result_new;\n\n\t\t\tif( when === 'after' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\tresult_new = new_fn.apply(self, arguments );\n\n\t\t\tif( when === 'instead' ){\n\t\t\t\treturn result_new;\n\t\t\t}\n\n\t\t\tif( when === 'before' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\n\t}\n\n};\n"],"names":["forEvents","events","callback","split","forEach","event","MicroEvent","constructor","_events","on","fct","push","off","n","arguments","length","splice","indexOf","trigger","args","self","apply","MicroPlugin","Interface","plugins","names","settings","requested","loaded","define","name","fn","initializePlugins","key","queue","Array","isArray","plugin","options","hasOwnProperty","shift","require","loadPlugin","Error","latin_pat","accent_pat","accent_reg","RegExp","diacritic_patterns","latin_convert","convert_pat","Object","keys","join","code_points","asciifold","str","normalize","replace","toLowerCase","foreignletter","arrayToPattern","chars","glue","longest","a","Math","max","escapeToPattern","escaped","map","diacritic","escape_regex","allSubstrings","input","result","substring","subresult","tmp","slice","charAt","unshift","generateDiacritics","diacritics","code_range","i","String","fromCharCode","latin","patt","match","latin_chars","sort","b","substrings","pattern","sub_pat","l","diacriticRegexPoints","regex","undefined","decomposed","part","no_accent","getAttr","obj","getAttrNesting","scoreValue","value","token","weight","score","pos","search","string","propToArray","iterate","object","cmp","Sifter","items","tokenize","query","respect_word_boundaries","weights","tokens","words","field_regex","word","field_match","field","getScoreFunction","prepareSearch","_getScoreFunction","token_count","fields","field_count","getAttrFn","scoreObject","data","sum","conjunction","getSortFunction","_getSortFunction","implicit_score","sort_empty","sort_flds","multipliers","bind","get_field","id","direction","sort_flds_count","sort_fld","multiplier","optsUser","assign","trim","total","nesting","fn_score","item","filter","_","fn_sort","limit","getDom","jquery","HTMLElement","isHtmlString","div","document","createElement","innerHTML","firstChild","querySelector","arg","escapeQuery","triggerEvent","dom_el","event_name","createEvent","initEvent","dispatchEvent","applyCSS","css","style","addClasses","elmts","classes","norm_classes","classesArray","castAsArray","el","cls","classList","add","removeClasses","remove","_classes","concat","Boolean","parentMatch","target","selector","wrapper","contains","matches","parentNode","getTail","list","isEmptyObject","nodeIndex","amongst","nodeName","previousElementSibling","setAttr","attrs","val","attr","removeAttribute","setAttribute","replaceNode","existing","replacement","replaceChild","highlight","element","highlightText","node","spannode","className","middlebit","splitText","index","middleclone","cloneNode","appendChild","highlightChildren","nodeType","childNodes","test","tagName","highlightRecursive","removeHighlight","elements","querySelectorAll","prototype","call","parent","KEY_A","KEY_RETURN","KEY_ESC","KEY_LEFT","KEY_UP","KEY_RIGHT","KEY_DOWN","KEY_BACKSPACE","KEY_DELETE","KEY_TAB","IS_MAC","navigator","userAgent","KEY_SHORTCUT","optgroups","delimiter","splitOn","persist","create","createOnBlur","createFilter","openOnFocus","shouldOpen","maxOptions","maxItems","hideSelected","duplicates","addPrecedence","selectOnTab","preload","allowEmptyOption","loadThrottle","loadingClass","dataAttr","optgroupField","valueField","labelField","disabledField","optgroupLabelField","optgroupValueField","lockOptgroupOrder","sortField","searchField","searchConjunction","mode","wrapperClass","controlClass","dropdownClass","dropdownContentClass","itemClass","optionClass","dropdownParent","controlInput","copyClassesToDropdown","placeholder","hidePlaceholder","shouldLoad","render","hash_key","get_hash","escape_html","loadDebounce","delay","timeout","loading","clearTimeout","setTimeout","loadedSearches","debounce_events","types","type","event_args","getSelection","start","selectionStart","selectionEnd","preventDefault","evt","stop","stopPropagation","addEvent","addEventListener","isKeyDown","key_name","count","altKey","ctrlKey","shiftKey","metaKey","getId","existing_id","getAttribute","addSlashes","append","getSettings","settings_user","defaults","attr_data","field_label","field_value","field_disabled","field_optgroup","field_optgroup_label","field_optgroup_value","tag_name","option","textContent","settings_element","init_select","optionsMap","group_count","readData","dataset","json","JSON","parse","addOption","group","arr","option_data","disabled","$option","selected","addGroup","optgroup","optgroup_data","children","hasAttribute","child","init_textbox","data_raw","values","opt","instance_i","TomSelect","input_arg","user_settings","control_input","dropdown","control","dropdown_content","focus_node","order","tabIndex","is_select_tag","rtl","inputId","_destroy","sifter","isOpen","isDisabled","isRequired","isInvalid","isValid","isLocked","isFocused","isInputHidden","isSetup","ignoreFocus","ignoreHover","hasOptions","currentResults","lastValue","caretPos","activeOption","activeItems","userOptions","dir","tomselect","computedStyle","window","getComputedStyle","getPropertyValue","required","setupCallbacks","setupTemplates","_render","inputMode","setup","passive_event","passive","listboxId","role","control_id","label","label_click","focus","for","label_id","width","classes_plugins","multiple","load","e","target_match","onOptionHover","capture","onOptionSelect","onItemSelect","onClick","onKeyDown","onKeyPress","onInput","positionDropdown","onBlur","onFocus","onPaste","doc_mousedown","composedPath","blur","inputState","win_scroll","win_hover","removeEventListener","revertSettings","insertAdjacentElement","sync","refreshState","updateOriginalInput","refreshItems","close","disable","enable","onChange","setupOptions","addOptions","registerOptionGroup","templates","escape","callbacks","get_settings","setValue","lastQuery","clearActiveItems","onMouseDown","pastedText","inputValue","splitInput","piece","addItem","createItem","character","keyCode","which","constants","selectAll","open","next","getAdjacent","setActiveOption","prev","canSelect","activeElement","advanceSelection","deleteSelection","refreshOptions","wasFocused","showInput","hasFocus","deactivate","setActiveItem","setCaret","parentElement","closeAfterSelect","canLoad","loadCallback","clearActiveOption","setTextboxValue","changed","getValue","silent","clear","addItems","setMaxItems","eventName","begin","end","swap","last","getLastActive","setActiveItemClass","removeActiveItem","hideInput","last_active","idx","scroll","scrollToOption","behavior","content","height_menu","clientHeight","scrollTop","height_item","offsetHeight","y","getBoundingClientRect","top","scrollBehavior","controlChildren","toggle","offsetWidth","getSearchOptions","calculateScore","hashed","triggerDropdown","j","k","html","has_create_option","active_value","active_group","groups","groups_order","results","active_option","show_dropdown","closest","min","opt_value","option_el","getOption","includes","createDocumentFragment","$id","a_order","$order","b_order","group_options","header","group_html","tok","add_template","template","insertBefore","canCreate","active_index","selectable","user_created","dat","registerOption","addOptionGroup","hashed_id","removeOptionGroup","clearCache","clearOptionGroups","updateOption","item_new","index_item","value_old","value_new","getItem","uncacheValue","option_new","removeOption","removeItem","clearOptions","boundFilter","clearFilter","$div","all","x","isPending","wasFull","isFull","insertAtCaret","caret","output","lock","created","unlock","refreshValidityState","wrap_classList","validity","valid","opts","empty_option","has_selected","AddSelected","reuse_opt","visibility","display","context","rect","scrollY","left","scrollX","selection","tail","rm_items","shouldDelete","pop","onDelete","adjacent","nextElementSibling","moveCaret","new_pos","from","destroy","templateName","hook","when","method","new_fn","orig_method","result_new"],"mappings":"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"}