tom-select-rails 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +26 -0
  4. data/Rakefile +3 -0
  5. data/lib/tom-select-rails/engine.rb +8 -0
  6. data/lib/tom-select-rails/version.rb +5 -0
  7. data/lib/tom-select-rails.rb +7 -0
  8. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.complete.js +4887 -0
  9. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.complete.js.map +1 -0
  10. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.js +4085 -0
  11. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.js.map +1 -0
  12. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.popular.js +4337 -0
  13. data/vendor/assets/javascripts/tom-select-rails/cjs/tom-select.popular.js.map +1 -0
  14. data/vendor/assets/javascripts/tom-select-rails/cjs/utils.js +196 -0
  15. data/vendor/assets/javascripts/tom-select-rails/cjs/utils.js.map +1 -0
  16. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/caret_position/plugin.js +162 -0
  17. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/caret_position/plugin.js.map +1 -0
  18. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/change_listener/plugin.js +50 -0
  19. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/change_listener/plugin.js.map +1 -0
  20. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/checkbox_options/plugin.js +172 -0
  21. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/checkbox_options/plugin.js.map +1 -0
  22. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/clear_button/plugin.js +91 -0
  23. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/clear_button/plugin.js.map +1 -0
  24. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/drag_drop/plugin.js +62 -0
  25. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/drag_drop/plugin.js.map +1 -0
  26. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/dropdown_header/plugin.js +118 -0
  27. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/dropdown_header/plugin.js.map +1 -0
  28. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/dropdown_input/plugin.js +230 -0
  29. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/dropdown_input/plugin.js.map +1 -0
  30. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/input_autogrow/plugin.js +80 -0
  31. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/input_autogrow/plugin.js.map +1 -0
  32. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/no_active_items/plugin.js +25 -0
  33. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/no_active_items/plugin.js.map +1 -0
  34. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/no_backspace_delete/plugin.js +32 -0
  35. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/no_backspace_delete/plugin.js.map +1 -0
  36. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/optgroup_columns/plugin.js +108 -0
  37. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/optgroup_columns/plugin.js.map +1 -0
  38. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/remove_button/plugin.js +146 -0
  39. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/remove_button/plugin.js.map +1 -0
  40. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/restore_on_backspace/plugin.js +43 -0
  41. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/restore_on_backspace/plugin.js.map +1 -0
  42. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/virtual_scroll/plugin.js +261 -0
  43. data/vendor/assets/javascripts/tom-select-rails/esm/plugins/virtual_scroll/plugin.js.map +1 -0
  44. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.complete.js +4885 -0
  45. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.complete.js.map +1 -0
  46. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.js +4083 -0
  47. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.js.map +1 -0
  48. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.popular.js +4335 -0
  49. data/vendor/assets/javascripts/tom-select-rails/esm/tom-select.popular.js.map +1 -0
  50. data/vendor/assets/javascripts/tom-select-rails/esm/utils.js +181 -0
  51. data/vendor/assets/javascripts/tom-select-rails/esm/utils.js.map +1 -0
  52. data/vendor/assets/javascripts/tom-select-rails/js/plugins/caret_position.js +170 -0
  53. data/vendor/assets/javascripts/tom-select-rails/js/plugins/caret_position.js.map +1 -0
  54. data/vendor/assets/javascripts/tom-select-rails/js/plugins/change_listener.js +58 -0
  55. data/vendor/assets/javascripts/tom-select-rails/js/plugins/change_listener.js.map +1 -0
  56. data/vendor/assets/javascripts/tom-select-rails/js/plugins/checkbox_options.js +180 -0
  57. data/vendor/assets/javascripts/tom-select-rails/js/plugins/checkbox_options.js.map +1 -0
  58. data/vendor/assets/javascripts/tom-select-rails/js/plugins/clear_button.js +99 -0
  59. data/vendor/assets/javascripts/tom-select-rails/js/plugins/clear_button.js.map +1 -0
  60. data/vendor/assets/javascripts/tom-select-rails/js/plugins/drag_drop.js +70 -0
  61. data/vendor/assets/javascripts/tom-select-rails/js/plugins/drag_drop.js.map +1 -0
  62. data/vendor/assets/javascripts/tom-select-rails/js/plugins/dropdown_header.js +126 -0
  63. data/vendor/assets/javascripts/tom-select-rails/js/plugins/dropdown_header.js.map +1 -0
  64. data/vendor/assets/javascripts/tom-select-rails/js/plugins/dropdown_input.js +238 -0
  65. data/vendor/assets/javascripts/tom-select-rails/js/plugins/dropdown_input.js.map +1 -0
  66. data/vendor/assets/javascripts/tom-select-rails/js/plugins/input_autogrow.js +88 -0
  67. data/vendor/assets/javascripts/tom-select-rails/js/plugins/input_autogrow.js.map +1 -0
  68. data/vendor/assets/javascripts/tom-select-rails/js/plugins/no_active_items.js +33 -0
  69. data/vendor/assets/javascripts/tom-select-rails/js/plugins/no_active_items.js.map +1 -0
  70. data/vendor/assets/javascripts/tom-select-rails/js/plugins/no_backspace_delete.js +40 -0
  71. data/vendor/assets/javascripts/tom-select-rails/js/plugins/no_backspace_delete.js.map +1 -0
  72. data/vendor/assets/javascripts/tom-select-rails/js/plugins/optgroup_columns.js +116 -0
  73. data/vendor/assets/javascripts/tom-select-rails/js/plugins/optgroup_columns.js.map +1 -0
  74. data/vendor/assets/javascripts/tom-select-rails/js/plugins/remove_button.js +154 -0
  75. data/vendor/assets/javascripts/tom-select-rails/js/plugins/remove_button.js.map +1 -0
  76. data/vendor/assets/javascripts/tom-select-rails/js/plugins/restore_on_backspace.js +51 -0
  77. data/vendor/assets/javascripts/tom-select-rails/js/plugins/restore_on_backspace.js.map +1 -0
  78. data/vendor/assets/javascripts/tom-select-rails/js/plugins/virtual_scroll.js +269 -0
  79. data/vendor/assets/javascripts/tom-select-rails/js/plugins/virtual_scroll.js.map +1 -0
  80. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.base.js +4092 -0
  81. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.base.js.map +1 -0
  82. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.base.min.js +303 -0
  83. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.base.min.js.map +1 -0
  84. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.complete.js +4894 -0
  85. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.complete.js.map +1 -0
  86. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.complete.min.js +362 -0
  87. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.complete.min.js.map +1 -0
  88. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.popular.js +4344 -0
  89. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.popular.js.map +1 -0
  90. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.popular.min.js +324 -0
  91. data/vendor/assets/javascripts/tom-select-rails/js/tom-select.popular.min.js.map +1 -0
  92. data/vendor/assets/javascripts/tom-select-rails/types/constants.d.ts +12 -0
  93. data/vendor/assets/javascripts/tom-select-rails/types/contrib/highlight.d.ts +13 -0
  94. data/vendor/assets/javascripts/tom-select-rails/types/contrib/microevent.d.ts +20 -0
  95. data/vendor/assets/javascripts/tom-select-rails/types/contrib/microplugin.d.ts +71 -0
  96. data/vendor/assets/javascripts/tom-select-rails/types/defaults.d.ts +51 -0
  97. data/vendor/assets/javascripts/tom-select-rails/types/getSettings.d.ts +3 -0
  98. data/vendor/assets/javascripts/tom-select-rails/types/plugins/caret_position/plugin.d.ts +16 -0
  99. data/vendor/assets/javascripts/tom-select-rails/types/plugins/change_listener/plugin.d.ts +16 -0
  100. data/vendor/assets/javascripts/tom-select-rails/types/plugins/checkbox_options/plugin.d.ts +16 -0
  101. data/vendor/assets/javascripts/tom-select-rails/types/plugins/clear_button/plugin.d.ts +17 -0
  102. data/vendor/assets/javascripts/tom-select-rails/types/plugins/clear_button/types.d.ts +5 -0
  103. data/vendor/assets/javascripts/tom-select-rails/types/plugins/drag_drop/plugin.d.ts +16 -0
  104. data/vendor/assets/javascripts/tom-select-rails/types/plugins/dropdown_header/plugin.d.ts +17 -0
  105. data/vendor/assets/javascripts/tom-select-rails/types/plugins/dropdown_header/types.d.ts +8 -0
  106. data/vendor/assets/javascripts/tom-select-rails/types/plugins/dropdown_input/plugin.d.ts +16 -0
  107. data/vendor/assets/javascripts/tom-select-rails/types/plugins/input_autogrow/plugin.d.ts +15 -0
  108. data/vendor/assets/javascripts/tom-select-rails/types/plugins/no_active_items/plugin.d.ts +15 -0
  109. data/vendor/assets/javascripts/tom-select-rails/types/plugins/no_backspace_delete/plugin.d.ts +15 -0
  110. data/vendor/assets/javascripts/tom-select-rails/types/plugins/optgroup_columns/plugin.d.ts +16 -0
  111. data/vendor/assets/javascripts/tom-select-rails/types/plugins/remove_button/plugin.d.ts +17 -0
  112. data/vendor/assets/javascripts/tom-select-rails/types/plugins/remove_button/types.d.ts +6 -0
  113. data/vendor/assets/javascripts/tom-select-rails/types/plugins/restore_on_backspace/plugin.d.ts +21 -0
  114. data/vendor/assets/javascripts/tom-select-rails/types/plugins/virtual_scroll/plugin.d.ts +16 -0
  115. data/vendor/assets/javascripts/tom-select-rails/types/tom-select.complete.d.ts +2 -0
  116. data/vendor/assets/javascripts/tom-select-rails/types/tom-select.d.ts +579 -0
  117. data/vendor/assets/javascripts/tom-select-rails/types/tom-select.popular.d.ts +2 -0
  118. data/vendor/assets/javascripts/tom-select-rails/types/types/core.d.ts +44 -0
  119. data/vendor/assets/javascripts/tom-select-rails/types/types/index.d.ts +2 -0
  120. data/vendor/assets/javascripts/tom-select-rails/types/types/settings.d.ts +81 -0
  121. data/vendor/assets/javascripts/tom-select-rails/types/utils.d.ts +76 -0
  122. data/vendor/assets/javascripts/tom-select-rails/types/vanilla.d.ts +76 -0
  123. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap4.css +548 -0
  124. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap4.css.map +1 -0
  125. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap4.min.css +2 -0
  126. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap4.min.css.map +1 -0
  127. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap5.css +592 -0
  128. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap5.css.map +1 -0
  129. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap5.min.css +2 -0
  130. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.bootstrap5.min.css.map +1 -0
  131. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.css +391 -0
  132. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.css.map +1 -0
  133. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.default.css +476 -0
  134. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.default.css.map +1 -0
  135. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.default.min.css +2 -0
  136. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.default.min.css.map +1 -0
  137. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.min.css +2 -0
  138. data/vendor/assets/stylesheets/tom-select-rails/css/tom-select.min.css.map +1 -0
  139. data/vendor/assets/stylesheets/tom-select-rails/scss/_dropdown.scss +104 -0
  140. data/vendor/assets/stylesheets/tom-select-rails/scss/_items.scss +115 -0
  141. data/vendor/assets/stylesheets/tom-select-rails/scss/plugins/checkbox_options.scss +5 -0
  142. data/vendor/assets/stylesheets/tom-select-rails/scss/plugins/clear_button.scss +30 -0
  143. data/vendor/assets/stylesheets/tom-select-rails/scss/plugins/drag_drop.scss +16 -0
  144. data/vendor/assets/stylesheets/tom-select-rails/scss/plugins/dropdown_header.scss +23 -0
  145. data/vendor/assets/stylesheets/tom-select-rails/scss/plugins/dropdown_input.scss +47 -0
  146. data/vendor/assets/stylesheets/tom-select-rails/scss/plugins/input_autogrow.scss +18 -0
  147. data/vendor/assets/stylesheets/tom-select-rails/scss/plugins/optgroup_columns.scss +23 -0
  148. data/vendor/assets/stylesheets/tom-select-rails/scss/plugins/remove_button.scss +44 -0
  149. data/vendor/assets/stylesheets/tom-select-rails/scss/tom-select.bootstrap4.scss +219 -0
  150. data/vendor/assets/stylesheets/tom-select-rails/scss/tom-select.bootstrap5.scss +274 -0
  151. data/vendor/assets/stylesheets/tom-select-rails/scss/tom-select.default.scss +87 -0
  152. data/vendor/assets/stylesheets/tom-select-rails/scss/tom-select.scss +175 -0
  153. metadata +195 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tom-select.complete.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","../../src/plugins/change_listener/plugin.ts","../../src/plugins/checkbox_options/plugin.ts","../../src/plugins/clear_button/plugin.ts","../../src/plugins/drag_drop/plugin.ts","../../src/plugins/dropdown_header/plugin.ts","../../src/plugins/caret_position/plugin.ts","../../src/plugins/dropdown_input/plugin.ts","../../src/plugins/input_autogrow/plugin.ts","../../src/plugins/no_backspace_delete/plugin.ts","../../src/plugins/no_active_items/plugin.ts","../../src/plugins/optgroup_columns/plugin.ts","../../src/plugins/remove_button/plugin.ts","../../src/plugins/restore_on_backspace/plugin.ts","../../src/plugins/virtual_scroll/plugin.ts","../../src/tom-select.complete.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","/**\n * Plugin: \"change_listener\" (Tom Select)\n * Copyright (c) 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 */\n\nimport TomSelect from '../../tom-select';\nimport { addEvent } from '../../utils';\n\nexport default function(this:TomSelect) {\n\taddEvent(this.input,'change',()=>{\n\t\tthis.sync();\n\t});\n};\n","/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) 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 */\n\nimport TomSelect from '../../tom-select';\nimport { preventDefault, hash_key } from '../../utils';\nimport { getDom } from '../../vanilla';\n\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tvar orig_onOptionSelect = self.onOptionSelect;\n\n\tself.settings.hideSelected = false;\n\n\n\t// update the checkbox for an option\n\tvar UpdateCheckbox = function(option:HTMLElement){\n\t\tsetTimeout(()=>{\n\t\t\tvar checkbox = option.querySelector('input') as HTMLInputElement;\n\t\t\tif( option.classList.contains('selected') ){\n\t\t\t\tcheckbox.checked = true;\n\t\t\t}else{\n\t\t\t\tcheckbox.checked = false;\n\t\t\t}\n\t\t},1);\n\t};\n\n\t// add checkbox to option template\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_option = self.settings.render.option;\n\n\t\tself.settings.render.option = (data, escape_html) => {\n\t\t\tvar rendered = getDom(orig_render_option.call(self, data, escape_html));\n\t\t\tvar checkbox = document.createElement('input');\n\t\t\tcheckbox.addEventListener('click',function(evt){\n\t\t\t\tpreventDefault(evt);\n\t\t\t});\n\n\t\t\tcheckbox.type = 'checkbox';\n\t\t\tconst hashed = hash_key(data[self.settings.valueField]);\n\n\n\t\t\tif( hashed && self.items.indexOf(hashed) > -1 ){\n\t\t\t\tcheckbox.checked = true;\n\t\t\t}\n\n\t\t\trendered.prepend(checkbox);\n\t\t\treturn rendered;\n\t\t};\n\t});\n\n\t// uncheck when item removed\n\tself.on('item_remove',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\toption.classList.remove('selected'); // selected class won't be removed yet\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\t// check when item added\n\tself.on('item_add',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\n\t// remove items when selected option is clicked\n\tself.hook('instead','onOptionSelect',( evt:KeyboardEvent, option:HTMLElement )=>{\n\n\t\tif( option.classList.contains('selected') ){\n\t\t\toption.classList.remove('selected')\n\t\t\tself.removeItem(option.dataset.value);\n\t\t\tself.refreshOptions();\n\t\t\tpreventDefault(evt,true);\n\t\t\treturn;\n }\n\n\t\torig_onOptionSelect.call(self, evt, option);\n\n\t\tUpdateCheckbox(option);\n\t});\n\n};\n","/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) 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 */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { CBOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:CBOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\tclassName: 'clear-button',\n\t\ttitle: 'Clear All',\n\t\thtml: (data:CBOptions) => {\n\t\t\treturn `<div class=\"${data.className}\" title=\"${data.title}\">&times;</div>`;\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar button = getDom(options.html(options));\n\t\tbutton.addEventListener('click',(evt)=>{\n\n\t\t\tif( self.isDisabled ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.clear();\n\n\t\t\tif( self.settings.mode === 'single' && self.settings.allowEmptyOption ){\n\t\t\t\tself.addItem('');\n\t\t\t}\n\n\t\t\tevt.preventDefault();\n\t\t\tevt.stopPropagation();\n\t\t});\n\t\tself.control.appendChild(button);\n\t});\n\n};\n","/**\n * Plugin: \"drag_drop\" (Tom Select)\n * Copyright (c) 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 */\n\nimport TomSelect from '../../tom-select';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tif (!$.fn.sortable) throw new Error('The \"drag_drop\" plugin requires jQuery UI \"sortable\".');\n\tif (self.settings.mode !== 'multi') return;\n\n\tvar orig_lock\t\t= self.lock;\n\tvar orig_unlock\t\t= self.unlock;\n\n\tself.hook('instead','lock',()=>{\n\t\tvar sortable = $(self.control).data('sortable');\n\t\tif (sortable) sortable.disable();\n\t\treturn orig_lock.call(self);\n\t});\n\n\tself.hook('instead','unlock',()=>{\n\t\tvar sortable = $(self.control).data('sortable');\n\t\tif (sortable) sortable.enable();\n\t\treturn orig_unlock.call(self);\n\t});\n\n\tself.on('initialize',()=>{\n\t\tvar $control = $(self.control).sortable({\n\t\t\titems: '[data-value]',\n\t\t\tforcePlaceholderSize: true,\n\t\t\tdisabled: self.isLocked,\n\t\t\tstart: (e, ui) => {\n\t\t\t\tui.placeholder.css('width', ui.helper.css('width'));\n\t\t\t\t$control.css({overflow: 'visible'});\n\t\t\t},\n\t\t\tstop: ()=>{\n\t\t\t\t$control.css({overflow: 'hidden'});\n\n\t\t\t\tvar values:string[] = [];\n\t\t\t\t$control.children('[data-value]').each(function(this:HTMLElement){\n\t\t\t\t\tif( this.dataset.value ) values.push(this.dataset.value);\n\t\t\t\t});\n\n\t\t\t\tself.setValue(values);\n\t\t\t}\n\t\t});\n\n\t});\n\n};\n","/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) 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 */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { preventDefault } from '../../utils';\nimport { DHOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:DHOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttitle : 'Untitled',\n\t\theaderClass : 'dropdown-header',\n\t\ttitleRowClass : 'dropdown-header-title',\n\t\tlabelClass : 'dropdown-header-label',\n\t\tcloseClass : 'dropdown-header-close',\n\n\t\thtml: (data:DHOptions) => {\n\t\t\treturn (\n\t\t\t\t'<div class=\"' + data.headerClass + '\">' +\n\t\t\t\t\t'<div class=\"' + data.titleRowClass + '\">' +\n\t\t\t\t\t\t'<span class=\"' + data.labelClass + '\">' + data.title + '</span>' +\n\t\t\t\t\t\t'<a class=\"' + data.closeClass + '\">&times;</a>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</div>'\n\t\t\t);\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar header = getDom(options.html(options));\n\n\t\tvar close_link = header.querySelector('.'+options.closeClass);\n\t\tif( close_link ){\n\t\t\tclose_link.addEventListener('click',(evt)=>{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\tself.close();\n\t\t\t});\n\t\t}\n\n\t\tself.dropdown.insertBefore(header, self.dropdown.firstChild);\n\t});\n\n};\n","/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) 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 */\n\nimport TomSelect from '../../tom-select';\nimport { nodeIndex, removeClasses } from '../../vanilla';\n\n\nexport default function(this:TomSelect) {\n\tvar self = this;\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\tself.hook('instead','setCaret',(new_pos:number) => {\n\n\t\tif( self.settings.mode === 'single' || !self.control.contains(self.control_input) ) {\n\t\t\tnew_pos = self.items.length;\n\t\t} else {\n\t\t\tnew_pos = Math.max(0, Math.min(self.items.length, new_pos));\n\n\t\t\tif( new_pos != self.caretPos && !self.isPending ){\n\n\t\t\t\tself.controlChildren().forEach((child,j) => {\n\t\t\t\t\tif( j < new_pos ){\n\t\t\t\t\t\tself.control_input.insertAdjacentElement('beforebegin', child );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.control.appendChild( child );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tself.caretPos = new_pos;\n\t});\n\n\tself.hook('instead','moveCaret',(direction:number) => {\n\n\t\tif( !self.isFocused ) return;\n\n\t\t// move caret before or after selected items\n\t\tconst last_active\t\t= self.getLastActive(direction);\n\t\tif( last_active ){\n\t\t\tconst idx = nodeIndex(last_active);\n\t\t\tself.setCaret(direction > 0 ? idx + 1: idx);\n\t\t\tself.setActiveItem();\n\t\t\tremoveClasses(last_active as HTMLElement,'last-active');\n\n\t\t// move caret left or right of current position\n\t\t}else{\n\t\t\tself.setCaret(self.caretPos + direction);\n\n\t\t}\n\n\t});\n\n};\n","/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) 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 */\n\nimport TomSelect from '../../tom-select';\nimport * as constants from '../../constants';\nimport { getDom, addClasses } from '../../vanilla';\nimport { addEvent, preventDefault } from '../../utils';\n\n\nexport default function(this:TomSelect) {\n\tconst self = this;\n\n\tself.settings.shouldOpen = true; // make sure the input is shown even if there are no options to display in the dropdown\n\n\tself.hook('before','setup',()=>{\n\t\tself.focus_node\t\t= self.control;\n\n\t\taddClasses( self.control_input, 'dropdown-input');\n\n\t \tconst div = getDom('<div class=\"dropdown-input-wrap\">');\n\t\tdiv.append(self.control_input);\n\t\tself.dropdown.insertBefore(div, self.dropdown.firstChild);\n\n\t\t// set a placeholder in the select control\n\t\tconst placeholder = getDom('<input class=\"items-placeholder\" tabindex=\"-1\" />') as HTMLInputElement;\n\t\tplaceholder.placeholder = self.settings.placeholder ||'';\n\t\tself.control.append(placeholder);\n\n\t});\n\n\n\tself.on('initialize',()=>{\n\n\t\t// set tabIndex on control to -1, otherwise [shift+tab] will put focus right back on control_input\n\t\tself.control_input.addEventListener('keydown',(evt:KeyboardEvent) =>{\n\t\t//addEvent(self.control_input,'keydown' as const,(evt:KeyboardEvent) =>{\n\t\t\tswitch( evt.keyCode ){\n\t\t\t\tcase constants.KEY_ESC:\n\t\t\t\t\tif (self.isOpen) {\n\t\t\t\t\t\tpreventDefault(evt,true);\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\t\t\t\tcase constants.KEY_TAB:\n\t\t\t\t\tself.focus_node.tabIndex = -1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn self.onKeyDown.call(self,evt);\n\t\t});\n\n\t\tself.on('blur',()=>{\n\t\t\tself.focus_node.tabIndex = self.isDisabled ? -1 : self.tabIndex;\n\t\t});\n\n\n\t\t// give the control_input focus when the dropdown is open\n\t\tself.on('dropdown_open',() =>{\n\t\t\tself.control_input.focus();\n\t\t});\n\n\t\t// prevent onBlur from closing when focus is on the control_input\n\t\tconst orig_onBlur = self.onBlur;\n\t\tself.hook('instead','onBlur',(evt?:FocusEvent)=>{\n\t\t\tif( evt && evt.relatedTarget == self.control_input ) return;\n\t\t\treturn orig_onBlur.call(self);\n\t\t});\n\n\t\taddEvent(self.control_input,'blur', () => self.onBlur() );\n\n\t\t// return focus to control to allow further keyboard input\n\t\tself.hook('before','close',() =>{\n\n\t\t\tif( !self.isOpen ) return;\n\t\t\tself.focus_node.focus();\n\t\t});\n\n\t});\n\n};\n","/**\n * Plugin: \"input_autogrow\" (Tom Select)\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 */\n\nimport TomSelect from '../../tom-select';\nimport { addEvent } from '../../utils';\n\nexport default function(this:TomSelect) {\n\tvar self\t\t\t\t\t= this;\n\n\tself.on('initialize',()=>{\n\n\n\t\tvar test_input\t\t\t\t= document.createElement('span');\n\t\tvar control\t\t\t\t\t= self.control_input;\n\t\ttest_input.style.cssText\t= 'position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ';\n\n\t\tself.wrapper.appendChild(test_input);\n\n\n\t\tvar transfer_styles\t\t\t= [ 'letterSpacing', 'fontSize', 'fontFamily', 'fontWeight', 'textTransform' ];\n\n\t\tfor( const style_name of transfer_styles ){\n\t\t\t// @ts-ignore TS7015 https://stackoverflow.com/a/50506154/697576\n\t\t\ttest_input.style[style_name] = control.style[style_name];\n\t\t}\n\n\n\t\t/**\n\t\t * Set the control width\n\t\t *\n\t\t */\n\t\tvar resize = ()=>{\n\t\t\tif( self.items.length > 0 ){\n\t\t\t\ttest_input.textContent\t= control.value;\n\t\t\t\tcontrol.style.width\t\t= test_input.clientWidth+'px';\n\t\t\t}else{\n\t\t\t\tcontrol.style.width\t\t= '';\n\t\t\t}\n\n\t\t};\n\n\t\tresize();\n\t\tself.on('update item_add item_remove',resize);\n\t\taddEvent(control,'input', resize );\n\t\taddEvent(control,'keyup', resize );\n\t\taddEvent(control,'blur', resize );\n\t\taddEvent(control,'update', resize );\n\t});\n\n};\n","/**\n * Plugin: \"input_autogrow\" (Tom Select)\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 */\n\nimport TomSelect from '../../tom-select';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tvar orig_deleteSelection = self.deleteSelection;\n\n\tthis.hook('instead','deleteSelection',(evt:KeyboardEvent) => {\n\n\t\tif( self.activeItems.length ){\n\t\t\treturn orig_deleteSelection.call(self, evt);\n\t\t}\n\n\t\treturn false;\n\t});\n\n};\n","/**\n * Plugin: \"no_active_items\" (Tom Select)\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 */\n\nimport TomSelect from '../../tom-select';\n\nexport default function(this:TomSelect) {\n\tthis.hook('instead','setActiveItem',() => {});\n\tthis.hook('instead','selectAll',() => {});\n};\n","/**\n * Plugin: \"optgroup_columns\" (Tom Select.js)\n * Copyright (c) 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 */\n\nimport TomSelect from '../../tom-select';\nimport * as constants from '../../constants';\nimport { parentMatch, nodeIndex } from '../../vanilla';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\tvar orig_keydown = self.onKeyDown;\n\n\tself.hook('instead','onKeyDown',(evt:KeyboardEvent)=>{\n\t\tvar index, option, options, optgroup;\n\n\t\tif( !self.isOpen || !(evt.keyCode === constants.KEY_LEFT || evt.keyCode === constants.KEY_RIGHT)) {\n\t\t\treturn orig_keydown.call(self,evt);\n\t\t}\n\n\t\toptgroup\t\t\t= parentMatch(self.activeOption,'[data-group]');\n\t\tindex\t\t\t\t= nodeIndex(self.activeOption,'[data-selectable]');\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( evt.keyCode === constants.KEY_LEFT ){\n\t\t\toptgroup = optgroup.previousSibling;\n\t\t} else {\n\t\t\toptgroup = optgroup.nextSibling;\n\t\t}\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\toptions\t\t\t\t= (<HTMLOptGroupElement>optgroup).querySelectorAll('[data-selectable]');\n\t\toption\t\t\t\t= options[ Math.min(options.length - 1, index) ] as HTMLElement;\n\n\t\tif( option ){\n\t\t\tself.setActiveOption(option);\n\t\t}\n\n\t});\n\n};\n","/**\n * Plugin: \"remove_button\" (Tom Select)\n * Copyright (c) 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 */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { escape_html, preventDefault, addEvent } from '../../utils';\nimport { TomOption } from '../../types/index';\nimport { RBOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:RBOptions) {\n\n\tconst options = Object.assign({\n\t\t\tlabel : '&times;',\n\t\t\ttitle : 'Remove',\n\t\t\tclassName : 'remove',\n\t\t\tappend : true\n\t\t}, userOptions);\n\n\n\t//options.className = 'remove-single';\n\tvar self\t\t\t= this;\n\n\t// override the render method to add remove button to each item\n\tif( !options.append ){\n\t\treturn;\n\t}\n\n\tvar html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_item = self.settings.render.item;\n\n\t\tself.settings.render.item = (data:TomOption, escape:typeof escape_html) => {\n\n\t\t\tvar rendered = getDom(orig_render_item.call(self, data, escape));\n\n\t\t\tvar close_button = getDom(html);\n\t\t\trendered.appendChild(close_button);\n\n\t\t\taddEvent(close_button,'mousedown',(evt) => {\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t});\n\n\t\t\taddEvent(close_button,'click',(evt) => {\n\n\t\t\t\t// propagating will trigger the dropdown to show for single mode\n\t\t\t\tpreventDefault(evt,true);\n\n\t\t\t\tif (self.isLocked) return;\n\n\t\t\t\tvar value = rendered.dataset.value;\n\t\t\t\tself.removeItem(value);\n\t\t\t\tself.refreshOptions(false);\n\t\t\t\tself.inputState();\n\t\t\t});\n\n\t\t\treturn rendered;\n\t\t};\n\n\t});\n\n\n};\n","/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) 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 */\nimport TomSelect from '../../tom-select';\nimport { TomOption } from '../../types/index';\n\ntype TPluginOptions = {\n\ttext?:(option:TomOption)=>string,\n};\n\nexport default function(this:TomSelect, userOptions:TPluginOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttext: (option:TomOption) => {\n\t\t\treturn option[self.settings.labelField];\n\t\t}\n\t},userOptions);\n\n\tself.on('item_remove',function(value:string){\n\t\tif( !self.isFocused ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.control_input.value.trim() === '' ){\n\t\t\tvar option = self.options[value];\n\t\t\tif( option ){\n\t\t\t\tself.setTextboxValue(options.text.call(self, option));\n\t\t\t}\n\t\t}\n\t});\n\n};\n","/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) 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 */\n\nimport TomSelect from '../../tom-select';\nimport { TomOption } from '../../types/index';\nimport { addClasses } from '../../vanilla';\n\nexport default function(this:TomSelect) {\n\tconst self\t\t\t\t\t\t\t= this;\n\tconst orig_canLoad\t\t\t\t\t= self.canLoad;\n\tconst orig_clearActiveOption\t\t= self.clearActiveOption;\n\tconst orig_loadCallback\t\t\t\t= self.loadCallback;\n\n\tvar pagination:{[key:string]:any}\t= {};\n\tvar dropdown_content:HTMLElement;\n\tvar loading_more\t\t\t\t\t= false;\n\tvar load_more_opt:HTMLElement;\n\n\n\tif( !self.settings.shouldLoadMore ){\n\n\t\t// return true if additional results should be loaded\n\t\tself.settings.shouldLoadMore = function():boolean{\n\n\t\t\tconst scroll_percent = dropdown_content.clientHeight / (dropdown_content.scrollHeight - dropdown_content.scrollTop);\n\t\t\tif( scroll_percent > 0.9 ){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif( self.activeOption ){\n\t\t\t\tvar selectable\t= self.selectable();\n\t\t\t\tvar index\t\t= [...selectable].indexOf(self.activeOption);\n\t\t\t\tif( index >= (selectable.length-2) ){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t}\n\n\n\tif( !self.settings.firstUrl ){\n\t\tthrow 'virtual_scroll plugin requires a firstUrl() method';\n\t\treturn;\n\t}\n\n\n\t// in order for virtual scrolling to work,\n\t// options need to be ordered the same way they're returned from the remote data source\n\tself.settings.sortField\t\t\t= [{field:'$order'},{field:'$score'}];\n\n\n\t// can we load more results for given query?\n\tfunction canLoadMore(query:string):boolean{\n\n\t\tif( typeof self.settings.maxOptions === 'number' && dropdown_content.children.length >= self.settings.maxOptions ){\n\t\t\treturn false;\n\t\t}\n\n\t\tif( (query in pagination) && pagination[query] ){\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\t// set the next url that will be\n\tself.setNextUrl = function(value:string,next_url:any):void{\n\t\tpagination[value] = next_url;\n\t};\n\n\t// getUrl() to be used in settings.load()\n\tself.getUrl = function(query:string):any{\n\n\t\tif( query in pagination ){\n\t\t\tconst next_url = pagination[query];\n\t\t\tpagination[query] = false;\n\t\t\treturn next_url;\n\t\t}\n\n\t\t// if the user goes back to a previous query\n\t\t// we need to load the first page again\n\t\tpagination = {};\n\n\t\treturn self.settings.firstUrl.call(self,query);\n\t};\n\n\n\t// don't clear the active option (and cause unwanted dropdown scroll)\n\t// while loading more results\n\tself.hook('instead','clearActiveOption',()=>{\n\n\t\tif( loading_more ){\n\t\t\treturn;\n\t\t}\n\n\t\treturn orig_clearActiveOption.call(self);\n\t});\n\n\t// override the canLoad method\n\tself.hook('instead','canLoad',(query:string)=>{\n\n\t\t// first time the query has been seen\n\t\tif( !(query in pagination) ){\n\t\t\treturn orig_canLoad.call(self,query);\n\t\t}\n\n\t\treturn canLoadMore(query);\n\t});\n\n\n\t// wrap the load\n\tself.hook('instead','loadCallback',( options:TomOption[], optgroups:TomOption[])=>{\n\n\t\tif( !loading_more ){\n\t\t\tself.clearOptions();\n\t\t}else if( load_more_opt && options.length > 0 ){\n\t\t\tload_more_opt.dataset.value\t\t= options[0][self.settings.valueField];\n\t\t}\n\n\t\torig_loadCallback.call( self, options, optgroups);\n\n\t\tloading_more = false;\n\t});\n\n\n\t// add templates to dropdown\n\t//\tloading_more if we have another url in the queue\n\t//\tno_more_results if we don't have another url in the queue\n\tself.hook('after','refreshOptions',()=>{\n\n\t\tconst query\t\t= self.lastValue;\n\t\tvar option;\n\n\t\tif( canLoadMore(query) ){\n\t\t\toption = self.render('loading_more',{query:query});\n\t\t\tif( option ){\n\t\t\t\toption.setAttribute('data-selectable',''); // so that navigating dropdown with [down] keypresses can navigate to this node\n\t\t\t\tload_more_opt = option;\n\t\t\t}\n\n\t\t}else if( (query in pagination) && !dropdown_content.querySelector('.no-results') ){\n\t\t\toption = self.render('no_more_results',{query:query});\n\t\t}\n\n\t\tif( option ){\n\t\t\taddClasses(option,self.settings.optionClass);\n\t\t\tdropdown_content.append( option );\n\t\t}\n\n\t});\n\n\n\t// add scroll listener and default templates\n\tself.on('initialize',()=>{\n\t\tdropdown_content = self.dropdown_content;\n\n\t\t// default templates\n\t\tself.settings.render = Object.assign({}, {\n\t\t\tloading_more:function(){\n\t\t\t\treturn `<div class=\"loading-more-results\">Loading more results ... </div>`;\n\t\t\t},\n\t\t\tno_more_results:function(){\n\t\t\t\treturn `<div class=\"no-more-results\">No more results</div>`;\n\t\t\t}\n\t\t},self.settings.render);\n\n\n\t\t// watch dropdown content scroll position\n\t\tdropdown_content.addEventListener('scroll',function(){\n\n\t\t\tif( !self.settings.shouldLoadMore.call(self) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// !important: this will get checked again in load() but we still need to check here otherwise loading_more will be set to true\n\t\t\tif( !canLoadMore(self.lastValue) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// don't call load() too much\n\t\t\tif( loading_more ) return;\n\n\n\t\t\tloading_more = true;\n\t\t\tself.load.call(self,self.lastValue);\n\t\t});\n\t});\n\n};\n","import TomSelect from './tom-select';\n\nimport change_listener from './plugins/change_listener/plugin';\nimport checkbox_options from './plugins/checkbox_options/plugin';\nimport clear_button from './plugins/clear_button/plugin';\nimport drag_drop from './plugins/drag_drop/plugin';\nimport dropdown_header from './plugins/dropdown_header/plugin';\nimport caret_position from './plugins/caret_position/plugin';\nimport dropdown_input from './plugins/dropdown_input/plugin';\nimport input_autogrow from './plugins/input_autogrow/plugin';\nimport no_backspace_delete from './plugins/no_backspace_delete/plugin';\nimport no_active_items from './plugins/no_active_items/plugin';\nimport optgroup_columns from './plugins/optgroup_columns/plugin';\nimport remove_button from './plugins/remove_button/plugin';\nimport restore_on_backspace from './plugins/restore_on_backspace/plugin';\nimport virtual_scroll from './plugins/virtual_scroll/plugin';\n\nTomSelect.define('change_listener', change_listener);\nTomSelect.define('checkbox_options', checkbox_options);\nTomSelect.define('clear_button', clear_button);\nTomSelect.define('drag_drop', drag_drop);\nTomSelect.define('dropdown_header', dropdown_header);\nTomSelect.define('caret_position', caret_position);\nTomSelect.define('dropdown_input', dropdown_input);\nTomSelect.define('input_autogrow', input_autogrow);\nTomSelect.define('no_backspace_delete', no_backspace_delete);\nTomSelect.define('no_active_items', no_active_items);\nTomSelect.define('optgroup_columns', optgroup_columns);\nTomSelect.define('remove_button', remove_button);\nTomSelect.define('restore_on_backspace', restore_on_backspace);\nTomSelect.define('virtual_scroll', virtual_scroll);\n\nexport default TomSelect;\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","orig_onOptionSelect","UpdateCheckbox","checkbox","checked","orig_render_option","rendered","prepend","title","button","$","sortable","orig_lock","orig_unlock","$control","forcePlaceholderSize","ui","helper","overflow","each","headerClass","titleRowClass","labelClass","closeClass","close_link","orig_onBlur","relatedTarget","test_input","cssText","transfer_styles","style_name","resize","clientWidth","orig_deleteSelection","orig_keydown","previousSibling","nextSibling","orig_render_item","close_button","text","orig_canLoad","orig_clearActiveOption","orig_loadCallback","pagination","loading_more","load_more_opt","shouldLoadMore","scroll_percent","scrollHeight","firstUrl","canLoadMore","setNextUrl","next_url","getUrl","no_more_results","change_listener","checkbox_options","clear_button","drag_drop","dropdown_header","caret_position","dropdown_input","input_autogrow","no_backspace_delete","no_active_items","optgroup_columns","remove_button","restore_on_backspace","virtual_scroll"],"mappings":"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"}