Packages
Phoenix component that utilizes Lea Verou's autocomplete autosuggest accessible (WCAG 2) Awesomplete widget, featuring dynamic data loading
Current section
Files
Jump to
Current section
Files
priv/static/awesomplete_bundle.min.mjs.map
{
"version": 3,
"sources": ["../../assets/vendor/awesomplete.js", "../../assets/vendor/awesomplete-util.js", "../../assets/js/index.js", "../../assets/js/attach-awesomplete.js", "../../assets/js/copy-value-to-id.js"],
"sourcesContent": ["/**\n * Simple, lightweight, usable local autocomplete library for modern browsers\n * Because there weren\u2019t enough autocomplete scripts in the world? Because I\u2019m completely insane and have NIH syndrome? Probably both. :P\n * @author Lea Verou http://leaverou.github.io/awesomplete\n * MIT license\n */\n\n(function () {\n\nvar _ = function (input, o) {\n\tvar me = this;\n\n\t// Keep track of number of instances for unique IDs\n\t_.count = (_.count || 0) + 1;\n\tthis.count = _.count;\n\n\t// Setup\n\n\tthis.isOpened = false;\n\n\tthis.input = $(input);\n\tthis.input.setAttribute(\"autocomplete\", \"off\");\n\tthis.input.setAttribute(\"aria-autocomplete\", \"list\");\n\tthis.input.setAttribute(\"aria-expanded\", \"false\");\n\tthis.input.setAttribute(\"aria-controls\", \"awesomplete_list_\" + this.count); // Since ARIA 1.1 use this instead of aria-owns.\n\t// this.input.setAttribute(\"aria-owns\", \"awesomplete_list_\" + this.count); // removed, see https://www.w3.org/WAI/ARIA/apg/patterns/combobox/\n\tthis.input.setAttribute(\"role\", \"combobox\");\n\n\t// store constructor options in case we need to distinguish\n\t// between default and customized behavior later on\n\tthis.options = o = o || {};\n\n\tconfigure(this, {\n\t\tminChars: 2,\n\t\tmaxItems: 10,\n\t\tautoFirst: false,\n\t\tdata: _.DATA,\n\t\tfilter: _.FILTER_CONTAINS,\n\t\tsort: o.sort === false ? false : _.SORT_BYLENGTH,\n\t\tcontainer: _.CONTAINER,\n\t\titem: _.ITEM,\n\t\treplace: _.REPLACE,\n\t\ttabSelect: false,\n\t\tlistLabel: \"Results List\",\n\t\tstatusNoResults: \"No results found\",\n\t\tstatusXResults: \"{0} results found\", // uses index placeholder {0}\n\t\tstatusTypeXChar: \"Type {0} or more characters for results\"\n\t}, o);\n\n\tthis.index = -1;\n\n\t// Create necessary elements\n\n\tthis.container = this.container(input);\n\n\tthis.ul = $.create(\"ul\", {\n\t\thidden: \"hidden\",\n\t\trole: \"listbox\",\n\t\tid: \"awesomplete_list_\" + this.count,\n\t\tinside: this.container,\n\t\t\"aria-label\": this.listLabel\n\t});\n\n\tthis.status = $.create(\"span\", {\n\t\tclassName: \"visually-hidden\",\n\t\trole: \"status\",\n\t\t\"aria-live\": \"assertive\",\n\t\t\"aria-atomic\": true,\n\t\tinside: this.container,\n\t\ttextContent: \"\" // live region should start empty. Only when the text is changed it will be read by the screen reader.\n\t});\n\n\t// Bind events\n\n\tthis._events = {\n\t\tinput: {\n\t\t\t\"input\": this.evaluate.bind(this),\n\t\t\t\"blur\": this.close.bind(this, { reason: \"blur\" }),\n\t\t\t\"keydown\": function(evt) {\n\t\t\t\tvar c = evt.keyCode;\n\n\t\t\t\t// If the dropdown `ul` is in view, then act on keydown for the following keys:\n\t\t\t\t// Enter / Esc / Up / Down\n\t\t\t\tif(me.opened) {\n\t\t\t\t\tif (c === 13 && me.selected) { // Enter\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tme.select(undefined, undefined, evt);\n\t\t\t\t\t}\n\t\t\t\t\telse if (c === 9 && me.selected && me.tabSelect) {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tme.select(undefined, undefined, evt);\n\t\t\t\t\t}\n\t\t\t\t\telse if (c === 27) { // Esc\n\t\t\t\t\t\tme.close({ reason: \"esc\" });\n\t\t\t\t\t}\n\t\t\t\t\telse if (c === 38 || c === 40) { // Down/Up arrow\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tme[c === 38? \"previous\" : \"next\"]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tform: {\n\t\t\t\"submit\": this.close.bind(this, { reason: \"submit\" })\n\t\t},\n\t\tul: {\n\t\t\t// Prevent the default mousedowm, which ensures the input is not blurred.\n\t\t\t// The actual selection will happen on click. This also ensures dragging the\n\t\t\t// cursor away from the list item will cancel the selection\n\t\t\t\"mousedown\": function(evt) {\n\t\t\t\tevt.preventDefault();\n\t\t\t},\n\t\t\t// The click event is fired even if the corresponding mousedown event has called preventDefault\n\t\t\t\"click\": function(evt) {\n\t\t\t\tvar li = evt.target;\n\n\t\t\t\tif (li !== this) {\n\n\t\t\t\t\twhile (li && !/li/i.test(li.nodeName)) {\n\t\t\t\t\t\tli = li.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (li && evt.button === 0) { // Only select on left click\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tme.select(li, evt.target, evt);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$.bind(this.input, this._events.input);\n\t$.bind(this.input.form, this._events.form);\n\t$.bind(this.ul, this._events.ul);\n\n\tif (this.input.hasAttribute(\"list\")) {\n\t\tthis.list = \"#\" + this.input.getAttribute(\"list\");\n\t\tthis.input.removeAttribute(\"list\");\n\t}\n\telse {\n\t\tthis.list = this.input.getAttribute(\"data-list\") || o.list || [];\n\t}\n\n\t_.all.push(this);\n};\n\n_.prototype = {\n\tset list(list) {\n\t\tif (Array.isArray(list)) {\n\t\t\tthis._list = list;\n\t\t}\n\t\telse if (typeof list === \"string\" && list.indexOf(\",\") > -1) {\n\t\t\t\tthis._list = list.split(/\\s*,\\s*/);\n\t\t}\n\t\telse { // Element or CSS selector\n\t\t\tlist = $(list);\n\n\t\t\tif (list && list.children) {\n\t\t\t\tvar items = [];\n\t\t\t\tslice.apply(list.children).forEach(function (el) {\n\t\t\t\t\tif (!el.disabled) {\n\t\t\t\t\t\tvar text = el.textContent.trim();\n\t\t\t\t\t\tvar value = el.value || text;\n\t\t\t\t\t\tvar label = el.label || text;\n\t\t\t\t\t\tif (value !== \"\") {\n\t\t\t\t\t\t\titems.push({ label: label, value: value });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis._list = items;\n\t\t\t}\n\t\t}\n\n\t\tif (document.activeElement === this.input) {\n\t\t\tthis.evaluate();\n\t\t}\n\t},\n\n\tget selected() {\n\t\treturn this.index > -1;\n\t},\n\n\tget opened() {\n\t\treturn this.isOpened;\n\t},\n\n\tclose: function (o) {\n\t\tif (!this.opened) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.input.setAttribute(\"aria-expanded\", \"false\");\n\t\tthis.ul.setAttribute(\"hidden\", \"\");\n\t\tthis.isOpened = false;\n\t\tthis.index = -1;\n\n\t\tthis.status.setAttribute(\"hidden\", \"\");\n\t\tthis.input.setAttribute(\"aria-activedescendant\", \"\");\n\n\t\t$.fire(this.input, \"awesomplete-close\", o || {});\n\t},\n\n\topen: function () {\n\t\tthis.input.setAttribute(\"aria-expanded\", \"true\");\n\t\tthis.ul.removeAttribute(\"hidden\");\n\t\tthis.isOpened = true;\n\n\t\tthis.status.removeAttribute(\"hidden\");\n\n\t\tif (this.autoFirst && this.index === -1) {\n\t\t\tthis.goto(0);\n\t\t}\n\n\t\t$.fire(this.input, \"awesomplete-open\");\n\t},\n\n\tdestroy: function() {\n\t\t//remove events from the input and its form\n\t\t$.unbind(this.input, this._events.input);\n\t\t$.unbind(this.input.form, this._events.form);\n\n\t\t// cleanup container if it was created by Awesomplete but leave it alone otherwise\n\t\tif (!this.options.container) {\n\t\t\t//move the input out of the awesomplete container and remove the container and its children\n\t\t\tvar parentNode = this.container.parentNode;\n\n\t\t\tparentNode.insertBefore(this.input, this.container);\n\t\t\tparentNode.removeChild(this.container);\n\t\t}\n\n\t\t// remove autocomplete and aria attributes\n\t\tthis.input.removeAttribute(\"autocomplete\");\n\t\tthis.input.removeAttribute(\"aria-autocomplete\");\n\t\tthis.input.removeAttribute(\"aria-expanded\");\n\t\tthis.input.removeAttribute(\"aria-controls\");\n\t\t// this.input.removeAttribute(\"aria-owns\"); // Since ARIA 1.1, use aria-controls\n\t\tthis.input.removeAttribute(\"role\");\n\n\t\t//remove this awesomeplete instance from the global array of instances\n\t\tvar indexOfAwesomplete = _.all.indexOf(this);\n\n\t\tif (indexOfAwesomplete !== -1) {\n\t\t\t_.all.splice(indexOfAwesomplete, 1);\n\t\t}\n\t},\n\n\tnext: function () {\n\t\tvar count = this.ul.children.length;\n\t\tthis.goto(this.index < count - 1 ? this.index + 1 : (count ? 0 : -1) );\n\t},\n\n\tprevious: function () {\n\t\tvar count = this.ul.children.length;\n\t\tvar pos = this.index - 1;\n\n\t\tthis.goto(this.selected && pos !== -1 ? pos : count - 1);\n\t},\n\n\t// Should not be used, highlights specific item without any checks!\n\tgoto: function (i) {\n\t\tvar lis = this.ul.children;\n\n\t\tif (this.selected) {\n\t\t\tlis[this.index].setAttribute(\"aria-selected\", \"false\");\n\t\t}\n\n\t\tthis.index = i;\n\n\t\tif (i > -1 && lis.length > 0) {\n\t\t\tlis[i].setAttribute(\"aria-selected\", \"true\");\n\n\t\t\t// fix: Turned off this status update.\n\t\t\t//\t\tScreen readers Voiceover and Talkback won't read this status change.\n\t\t\t//\t\tNarrator and NVDA do, but they already tell: 'X of Y (selected)'\n\t\t\t// this.status.textContent = lis[i].textContent + \", list item \" + (i + 1) + \" of \" + lis.length;\n\n\t\t\tthis.input.setAttribute(\"aria-activedescendant\", this.ul.id + \"_item_\" + this.index);\n\n\t\t\t// scroll to highlighted element in case parent's height is fixed\n\t\t\tthis.ul.scrollTop = lis[i].offsetTop - this.ul.clientHeight + lis[i].clientHeight;\n\n\t\t\t$.fire(this.input, \"awesomplete-highlight\", {\n\t\t\t\ttext: this.suggestions[this.index]\n\t\t\t});\n\t\t}\n\t},\n\n\tselect: function (selected, origin, originalEvent) {\n\t\tif (selected) {\n\t\t\tthis.index = $.siblingIndex(selected);\n\t\t} else {\n\t\t\tselected = this.ul.children[this.index];\n\t\t}\n\n\t\tif (selected) {\n\t\t\tvar suggestion = this.suggestions[this.index];\n\n\t\t\tvar allowed = $.fire(this.input, \"awesomplete-select\", {\n\t\t\t\ttext: suggestion,\n\t\t\t\torigin: origin || selected,\n\t\t\t\toriginalEvent: originalEvent\n\t\t\t});\n\n\t\t\tif (allowed) {\n\t\t\t\tthis.replace(suggestion);\n\t\t\t\tthis.close({ reason: \"select\" });\n\t\t\t\t$.fire(this.input, \"awesomplete-selectcomplete\", {\n\t\t\t\t\ttext: suggestion,\n\t\t\t\t\toriginalEvent: originalEvent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\n\tevaluate: function() {\n\t\tvar me = this;\n\t\tvar value = this.input.value;\n\n\t\tif (value.length >= this.minChars && this._list && this._list.length > 0) {\n\t\t\tthis.index = -1;\n\t\t\t// Populate list with options that match\n\t\t\tthis.ul.innerHTML = \"\";\n\n\t\t\tthis.suggestions = this._list\n\t\t\t\t.map(function(item) {\n\t\t\t\t\treturn new Suggestion(me.data(item, value));\n\t\t\t\t})\n\t\t\t\t.filter(function(item) {\n\t\t\t\t\treturn me.filter(item, value);\n\t\t\t\t});\n\n\t\t\tif (this.sort !== false) {\n\t\t\t\tthis.suggestions = this.suggestions.sort(this.sort);\n\t\t\t}\n\n\t\t\tthis.suggestions = this.suggestions.slice(0, this.maxItems);\n\n\t\t\tthis.suggestions.forEach(function(text, index) {\n\t\t\t\t\tme.ul.appendChild(me.item(text, value, index));\n\t\t\t\t});\n\n\t\t\tif (this.ul.children.length === 0) {\n\n\t\t\t\tthis.status.textContent = this.statusNoResults;\n\n\t\t\t\tthis.close({ reason: \"nomatches\" });\n\n\t\t\t} else {\n\t\t\t\tthis.input.setAttribute(\"aria-activedescendant\", \"\"); // none of the list items currently has aria-selected=\"true\"\n\n\t\t\t\tthis.open();\n\n\t\t\t\tthis.status.textContent = this.statusXResults.replaceAll('{0}', this.ul.children.length); // N results found;\n\t\t\t}\n\t\t}\n\t\telse {\n\n\t\t\tthis.close({ reason: \"nomatches\" });\n\n\t\t\tif (this.minChar <= 1 || value.length >= this.minChars) {\n\t\t\t this.status.textContent = this.statusNoResults;\n\t\t\t} else {\n\t\t\t this.status.textContent = this.statusTypeXChar.replaceAll('{0}', this.minChars); // Type N or more characters for results\n\t\t\t}\n\n\t\t}\n\t}\n};\n\n// Static methods/properties\n\n_.all = [];\n\n_.FILTER_CONTAINS = function (text, input) {\n\treturn RegExp($.regExpEscape(input.trim()), \"i\").test(text);\n};\n\n_.FILTER_STARTSWITH = function (text, input) {\n\treturn RegExp(\"^\" + $.regExpEscape(input.trim()), \"i\").test(text);\n};\n\n_.SORT_BYLENGTH = function (a, b) {\n\tif (a.length !== b.length) {\n\t\treturn a.length - b.length;\n\t}\n\n\treturn a < b? -1 : 1;\n};\n\n_.CONTAINER = function (input) {\n\treturn $.create(\"div\", {\n\t\tclassName: \"awesomplete\",\n\t\taround: input\n\t});\n}\n\n_.ITEM = function (text, input, item_id) {\n\tvar html = input.trim() === \"\" ? text : text.replace(RegExp($.regExpEscape(input.trim()), \"gi\"), \"<mark>$&</mark>\");\n\treturn $.create(\"li\", {\n\t\tinnerHTML: html,\n\t\t\"role\": \"option\",\n\t\t\"aria-selected\": \"false\",\n\t\t\"tabindex\": \"-1\", // for the Talkback screen reader\n\t\t\"id\": \"awesomplete_list_\" + this.count + \"_item_\" + item_id\n\t});\n};\n\n_.REPLACE = function (text) {\n\tthis.input.value = text.value;\n};\n\n_.DATA = function (item/*, input*/) { return item; };\n\n// Private functions\n\nfunction Suggestion(data) {\n\tvar o = Array.isArray(data)\n\t ? { label: data[0], value: data[1] }\n\t : typeof data === \"object\" && \"label\" in data && \"value\" in data ? data : { label: data, value: data };\n\n\tthis.label = o.label || o.value;\n\tthis.value = o.value;\n}\nObject.defineProperty(Suggestion.prototype = Object.create(String.prototype), \"length\", {\n\tget: function() { return this.label.length; }\n});\nSuggestion.prototype.toString = Suggestion.prototype.valueOf = function () {\n\treturn \"\" + this.label;\n};\n\nfunction configure(instance, properties, o) {\n\tfor (var i in properties) {\n\t\tvar initial = properties[i],\n\t\t\tattrValue = instance.input.getAttribute(\"data-\" + i.toLowerCase());\n\n\t\tif (typeof initial === \"number\") {\n\t\t\tinstance[i] = parseInt(attrValue);\n\t\t}\n\t\telse if (initial === false) { // Boolean options must be false by default anyway\n\t\t\tinstance[i] = attrValue !== null;\n\t\t}\n\t\telse if (initial instanceof Function) {\n\t\t\tinstance[i] = null;\n\t\t}\n\t\telse {\n\t\t\tinstance[i] = attrValue;\n\t\t}\n\n\t\tif (!instance[i] && instance[i] !== 0) {\n\t\t\tinstance[i] = (i in o)? o[i] : initial;\n\t\t}\n\t}\n}\n\n// Helpers\n\nvar slice = Array.prototype.slice;\n\nfunction $(expr, con) {\n\treturn typeof expr === \"string\"? (con || document).querySelector(expr) : expr || null;\n}\n\nfunction $$(expr, con) {\n\treturn slice.call((con || document).querySelectorAll(expr));\n}\n\n$.create = function(tag, o) {\n\tvar element = document.createElement(tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t\tif (ref.getAttribute(\"autofocus\") != null) {\n\t\t\t\tref.focus();\n\t\t\t}\n\t\t}\n\t\telse if (i in element) {\n\t\t\telement[i] = val;\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(i, val);\n\t\t}\n\t}\n\n\treturn element;\n};\n\n$.bind = function(element, o) {\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function (event) {\n\t\t\t\telement.addEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n};\n\n$.unbind = function(element, o) {\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function(event) {\n\t\t\t\telement.removeEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n};\n\n$.fire = function(target, type, properties) {\n\tvar evt = document.createEvent(\"HTMLEvents\");\n\n\tevt.initEvent(type, true, true );\n\n\tfor (var j in properties) {\n\t\tevt[j] = properties[j];\n\t}\n\n\treturn target.dispatchEvent(evt);\n};\n\n$.regExpEscape = function (s) {\n\treturn s.replace(/[-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n};\n\n$.siblingIndex = function (el) {\n\t/* eslint-disable no-cond-assign */\n\tfor (var i = 0; el = el.previousElementSibling; i++);\n\treturn i;\n};\n\n// Initialization\n\nfunction init() {\n\t$$(\"input.awesomplete\").forEach(function (input) {\n\t\tnew _(input);\n\t});\n}\n\n// Make sure to export Awesomplete on self when in a browser\nif (typeof self !== \"undefined\") {\n\tself.Awesomplete = _;\n}\n\n// Are we in a browser? Check for Document constructor\nif (typeof Document !== \"undefined\") {\n\t// DOM already loaded?\n\tif (document.readyState !== \"loading\") {\n\t\tinit();\n\t}\n\telse {\n\t\t// Wait for it\n\t\tdocument.addEventListener(\"DOMContentLoaded\", init);\n\t}\n}\n\n_.$ = $;\n_.$$ = $$;\n\n// Expose Awesomplete as a CJS module\nif (typeof module === \"object\" && module.exports) {\n\tmodule.exports = _;\n}\n\nreturn _;\n\n}());\n", "/*eslint-env browser*/\n/*global Awesomplete*/\n/*exported AwesompleteUtil*/\n\n/*\n * Library endorsing Lea Verou's Awesomplete widget, providing:\n * - dynamic remote data loading\n * - labels with HTML markup\n * - events and styling for exact matches\n * - events and styling for mismatches\n * - select item when TAB key is used\n *\n * (c) Nico Hoogervorst\n * License: MIT\n *\n */\nvar AwesompleteUtil = function() {\n\n //\n // event names and css classes\n //\n var _AWE = 'awesomplete-',\n _AWE_LOAD = _AWE + 'loadcomplete',\n _AWE_SELECT_COMPLETE = _AWE + 'selectcomplete',\n _AWE_MATCH = _AWE + 'match',\n _AWE_PREPOP = _AWE + 'prepop',\n _AWE_SELECT = _AWE + 'select',\n _CLS_FOUND = 'awe-found',\n _CLS_NOT_FOUND = 'awe-not-found',\n $ = Awesomplete.$; /* shortcut for document.querySelector */\n\n //\n // private functions\n //\n\n // Some parts are shamelessly copied from Awesomplete.js like the logic inside this _suggestion function.\n // Returns an object with label and value properties. Data parameter is plain text or Object/Array with label and value.\n function _suggestion(data) {\n var lv = Array.isArray(data)\n ? { label: data[0], value: data[1] }\n : typeof data === \"object\" && \"label\" in data && \"value\" in data ? data : { label: data, value: data };\n return {label: lv.label || lv.value, value: lv.value};\n }\n\n // Helper to send events with detail property.\n function _fire(target, name, detail) {\n // $.fire uses deprecated methods but other methods don't work in IE11.\n return $.fire(target, name, {detail: detail});\n }\n\n // Look if there is an exact match or a mismatch, set awe-found, awe-not-found css class and send match events.\n function _matchValue(awe, prepop) {\n var input = awe.input, /* the input field */\n classList = input.classList,\n utilprops = awe.utilprops, /* extra properties piggybacked on Awesomplete object */\n selected = utilprops.selected, /* the exact selected Suggestion with label and value */\n val = utilprops.convertInput.call(awe, input.value), /* trimmed lowercased value */\n opened = awe.opened, /* is the suggestion list opened? */\n result = [], /* matches with value */\n list = awe._list, /* current list of suggestions */\n suggestion, fake, rec, j; /* function scoped variables */\n utilprops.prepop = false; /* after the first call it's not a prepopulation phase anymore */\n if (list) { /* if there is a suggestion list */\n for (j = 0; j < list.length; j++) { /* loop all suggestions */\n rec = list[j];\n suggestion = _suggestion(awe.data(rec, val)); /* call data convert function */\n // with maxItems = 0 cannot look if suggestion list is opened to determine if there are still matches,\n // instead call the filter method to see if there are still some options.\n if (awe.maxItems === 0) {\n // Awesomplete.FILTER_CONTAINS and Awesomplete.FILTER_STARTSWITH use the toString method.\n suggestion.toString = function() { return '' + this.label; };\n if (awe.filter(suggestion, val)) {\n // filter returns true, so there is at least one partial match.\n opened = true;\n }\n }\n // Don't want to change the real input field, emulate a fake one.\n fake = {input: {value: ''}};\n // Determine how this suggestion would look like if it is replaced in the input field,\n // it is an exact match if somebody types exactly that.\n // Use the fake input here. fake.input.value will contain the result of the replace function.\n awe.replace.call(fake, suggestion);\n // Trim and lowercase also the fake input and compare that with the currently typed-in value.\n if (utilprops.convertInput.call(awe, fake.input.value) === val) {\n // This is an exact match. However there might more suggestions with the same value.\n // If the user selected a suggestion from the list, check if this one matches, assuming that\n // value + label is unique (if not it will be difficult for the user to make an informed decision).\n if (selected && selected.value === suggestion.value && selected.label === suggestion.label) {\n // this surely is the selected one\n result = [rec];\n break;\n }\n // add the matching record to the result set.\n result.push(rec);\n } // end if\n } // end loop\n\n // if the result differs from the previous result\n // if (utilprops.prevSelected !== result) { // is always true\n // if there is an exact match\n if (result.length > 0) {\n // if prepopulation phase (initial/autofill value); not triggered by user input\n if (prepop) {\n _fire(input, _AWE_PREPOP, result);\n } else if (utilprops.changed) { /* if input is changed */\n utilprops.prevSelected = result; /* new result */\n classList.remove(_CLS_NOT_FOUND); /* remove class */\n classList.add(_CLS_FOUND); /* add css class */\n _fire(input, _AWE_MATCH, result); /* fire event */\n }\n } else if (prepop) { /* no exact match, if in prepopulation phase */\n _fire(input, _AWE_PREPOP, []);\n } else if (utilprops.changed) { /* no exact match, if input is changed */\n utilprops.prevSelected = [];\n classList.remove(_CLS_FOUND);\n // Mark as not-found if there are no suggestions anymore or if another field is now active\n if (!opened || (input !== document.activeElement)) {\n if (val !== '') {\n classList.add(_CLS_NOT_FOUND);\n _fire(input, _AWE_MATCH, []);\n }\n } else {\n classList.remove(_CLS_NOT_FOUND);\n }\n }\n // }\n }\n }\n\n // Listen to certain events of THIS awesomplete object to trigger input validation.\n function _match(ev) {\n var awe = this;\n if ((ev.type === _AWE_SELECT_COMPLETE || ev.type === _AWE_LOAD || ev.type === 'blur') && ev.target === awe.input) {\n _matchValue(awe, awe.utilprops.prepop && ev.type === _AWE_LOAD);\n }\n }\n\n // Select currently selected item if tab or shift-tab key is used.\n function _onKeydown(ev) {\n var awe = this;\n if (ev.target === awe.input && ev.keyCode === 9) { // TAB key\n awe.select(undefined, undefined, ev); // take current selected item\n }\n }\n\n // Handle selection event. State changes when an item is selected.\n function _select(ev) {\n var awe = this;\n // cancel previous ajax call if it hasn't started yet.\n clearTimeout(awe.utilprops.timeoutID)\n awe.utilprops.changed = true; // yes, user made a change\n awe.utilprops.selected = ev.text; // Suggestion object\n }\n\n // check if the object is empty {} object\n function _isEmpty(val) {\n return Object.keys(val).length === 0 && val.constructor === Object\n }\n\n // Need an updated suggestion list if:\n // - There is no result yet, or there is a result but not for the characters we entered\n // - or there might be more specific results because the limit was reached.\n function _ifNeedListUpdate(awe, val, queryVal) {\n var utilprops = awe.utilprops;\n return (!utilprops.listQuery\n ||\n (!utilprops.loadall && /* with loadall, if there is a result, there is no need for new lists */\n val.lastIndexOf(queryVal, 0) === 0 &&\n (val.lastIndexOf(utilprops.listQuery, 0) !== 0 ||\n ('number' === typeof utilprops.limit && awe._list.length >= utilprops.limit))));\n }\n\n // Set a new suggestion list. Trigger loadcomplete event.\n function _loadComplete(awe, list, queryVal) {\n awe.list = list;\n awe.utilprops.listQuery = queryVal;\n _fire(awe.input, _AWE_LOAD, queryVal);\n }\n\n function _updateList(awe, data, queryVal, forceUpdate) {\n var prop;\n // are we still interested in this response?\n if (forceUpdate || _ifNeedListUpdate(awe, awe.utilprops.val, queryVal)) {\n if ('string' === typeof data) data = JSON.parse(data)\n if (awe.utilprops.convertResponse) data = awe.utilprops.convertResponse.call(awe, data);\n if (!Array.isArray(data)) {\n if (awe.utilprops.limit === 0 || awe.utilprops.limit === 1) {\n // if there is max 1 result expected, the array is not needed.\n // Fur further processing, take the whole result and put it as one element in an array.\n data = _isEmpty(data) ? [] : [data]\n } else {\n // search for the first property that contains an array\n for (prop in data) {\n if (Array.isArray(data[prop])) {\n data = data[prop];\n break;\n }\n }\n }\n }\n // can only handle arrays\n if (Array.isArray(data)) {\n // accept the new suggestion list\n _loadComplete(awe, data, queryVal || awe.utilprops.loadall);\n }\n }\n return awe;\n }\n\n // Handle ajax response. Expects HTTP OK (200) response with JSON object with suggestion(s) (array).\n function _onLoad() {\n var t = this,\n awe = t.awe,\n xhr = t.xhr,\n queryVal = t.queryVal;\n if (xhr.status === 200) {\n _updateList(awe, xhr.responseText, queryVal, false);\n }\n }\n\n function _ajax(awe, val) {\n var xhr = new XMLHttpRequest();\n awe.utilprops.ajax.call(awe,\n awe.utilprops.url,\n awe.utilprops.urlEnd,\n awe.utilprops.loadall ? '' : val,\n _onLoad.bind({awe: awe, xhr: xhr, queryVal: val}),\n xhr\n );\n }\n\n // Perform suggestion list lookup for the current value and validate. Use ajax when there is an url specified.\n // Optional debounce parameter in milliseconds.\n function _lookup(awe, val, debounce) {\n if (awe.utilprops.url) {\n // are we still interested in this response?\n if (_ifNeedListUpdate(awe, val, val)) {\n if ('number' === typeof debounce && debounce > 0) {\n // start ajax call after debounce value in milleseconds\n awe.utilprops.timeoutID = setTimeout(_ajax.bind(null, awe, val), debounce)\n } else {\n // call ajax instantly\n _ajax(awe, val)\n }\n } else {\n _matchValue(awe, awe.utilprops.prepop);\n }\n } else {\n _matchValue(awe, awe.utilprops.prepop);\n }\n }\n\n // Restart autocomplete search: clear css classes and send match-event with empty list.\n function _restart(awe) {\n var elem = awe.input, classList = elem.classList;\n // IE11 only handles the first parameter of the remove method.\n classList.remove(_CLS_NOT_FOUND);\n classList.remove(_CLS_FOUND);\n _fire(elem, _AWE_MATCH, []);\n }\n\n // handle new input value\n function _update(awe, val, prepop) {\n // prepop parameter is optional. Default value is false.\n awe.utilprops.prepop = prepop || false;\n // if value changed\n if (awe.utilprops.val !== val) {\n // cancel previous ajax call if it hasn't started yet.\n clearTimeout(awe.utilprops.timeoutID)\n // new value, clear previous selection\n awe.utilprops.selected = null;\n // yes, user made a change\n awe.utilprops.changed = true;\n awe.utilprops.val = val;\n // value is empty or smaller than minChars\n if (val === '' || val.length < awe.minChars) {\n // restart autocomplete search\n _restart(awe);\n }\n if (val.length >= awe.minChars) {\n // lookup suggestions and validate input\n _lookup(awe, val, awe.utilprops.debounce);\n }\n }\n return awe;\n }\n\n // handle input changed event for THIS awesomplete object\n function _onInput(e) {\n var awe = this,\n val;\n if (e.target === awe.input) {\n // lowercase and trim input value\n val = awe.utilprops.convertInput.call(awe, awe.input.value);\n _update(awe, val);\n }\n }\n\n // item function (as specified in Awesomplete) which just creates the 'li' HTML tag.\n function _item(html, input, item_id) {\n return $.create('li', {\n innerHTML: html,\n 'role': 'option',\n 'aria-selected': 'false',\n 'tabindex': '-1', // for the Talkback screen reader\n 'id': 'awesomplete_list_' + this.count + '_item_' + item_id // for aria-activedescendant on the input element\n });\n }\n\n // Escape HTML characters in text.\n function _htmlEscape(text) {\n return text.replace('&', '&').replace('<', '<').replace('>', '>');\n }\n\n // Function to copy a field from the selected autocomplete item to another DOM element.\n function _copyFun(e) {\n var t = this,\n sourceId = t.sourceId,\n dataField = t.dataField,\n targetId = t.targetId,\n elem,\n val;\n if (e.target === $(sourceId)) {\n if ('function' === typeof targetId) {\n targetId(e, dataField);\n } else {\n // lookup target element if it isn't resolved yet\n elem = $(targetId);\n // don't override target inputs if user is currently editing it.\n if (elem && elem !== document.activeElement) {\n // event must contain 1 item from suggestion list\n val = Array.isArray(e.detail) && e.detail.length === 1 ? e.detail[0] : null;\n // if a datafield is specified, take that value\n val = (dataField && val ? val[dataField] : val) || '';\n // if it is an input control\n if ('undefined' !== typeof elem.value) {\n // set new value\n elem.value = val;\n // not really sure if it is an input control, check if it has a classList\n if (elem.classList && elem.classList.remove) {\n // it might be another awesomplete control, if so the input is not wrong anymore because it's changed now\n elem.classList.remove(_CLS_NOT_FOUND);\n }\n } else if ('undefined' !== typeof elem.src) { /* is it an image tag? */\n elem.src = val;\n } else {\n // use innerHTML to set the new value, because value might intentionally contain HTML markup\n elem.innerHTML = val;\n }\n }\n }\n }\n }\n\n // click function for the combobox button\n function _clickFun(e) {\n var t = this,\n awe,\n minChars;\n if (e.target === $(t.btnId)) {\n e.preventDefault();\n awe = t.awe;\n // toggle open/close\n if (awe.ul.childNodes.length === 0 || awe.ul.hasAttribute('hidden')) {\n minChars = awe.minChars;\n // ignore that the input value is empty\n awe.minChars = 0;\n // show the suggestion list\n awe.evaluate();\n awe.minChars = minChars;\n } else {\n awe.close();\n }\n }\n }\n\n // Return text with mark tags arround matching input. Don't replace inside <HTML> tags.\n // When startsWith is true, mark only the matching begin text.\n function _mark(text, input, startsWith) {\n var searchText = $.regExpEscape(_htmlEscape(input).trim()),\n regExp = searchText === '' ? null : startsWith ? RegExp('^' + searchText, 'i') : RegExp('(?!<[^>]+?>)' + searchText + '(?![^<]*?>)', 'gi');\n return text.replace(regExp, '<mark>$&</mark>');\n }\n\n // Recursive jsonFlatten function\n function _jsonFlatten(result, cur, prop, level, opts) {\n var root = opts.root, /* filter resulting json tree on root property (optional) */\n value = opts.value, /* search for this property and copy it's value to a new 'value' property\n (optional, do not specify it if the json array contains plain strings) */\n label = opts.label || opts.value, /* search this property and copy it's value to a new 'label' property.\n If there is a 'opts.value' field but no 'opts.label', assume label is the same. */\n isEmpty = true, arrayResult = [], j;\n // at top level, look if there is a property which starts with root (if specified)\n if (level === 0 && root && prop && (prop + '.').lastIndexOf(root + '.', 0) !== 0 && (root + '.').lastIndexOf(prop + '.', 0) !== 0) {\n return result;\n }\n // handle current part of the json tree\n if (Object(cur) !== cur) {\n if (prop) {\n result[prop] = cur;\n } else {\n result = cur;\n }\n } else if (Array.isArray(cur)) {\n for (j = 0; j < cur.length; j++) {\n arrayResult.push(_jsonFlatten({}, cur[j], '', level + 1, opts));\n }\n if (prop) {\n result[prop] = arrayResult;\n } else {\n result = arrayResult;\n }\n } else {\n for (j in cur) {\n isEmpty = false;\n _jsonFlatten(result, cur[j], prop ? prop + '.' + j : j, level, opts);\n }\n if (isEmpty && prop) result[prop] = {};\n }\n // for arrays at top and subtop level\n if (level < 2 && prop) {\n // if a 'value' is specified and found a mathing property, create extra 'value' property.\n if (value && (prop + '.').lastIndexOf(value + '.', 0) === 0) { result['value'] = result[prop]; }\n // if a 'label' is specified and found a mathing property, create extra 'label' property.\n if (label && (prop + '.').lastIndexOf(label + '.', 0) === 0) { result['label'] = result[prop]; }\n }\n if (level === 0) {\n // Make sure that both value and label properties exist, even if they are nil.\n // This is handy with limit 0 or 1 when the result doesn't have to contain an array.\n if (value && !('value' in result)) { result['value'] = null; }\n if (label && !('label' in result)) { result['label'] = null; }\n }\n return result;\n }\n\n // Stop AwesompleteUtil; detach event handlers from the Awesomplete object.\n function _detach() {\n var t = this,\n elem = t.awe.input,\n boundMatch = t.boundMatch,\n boundOnInput = t.boundOnInput,\n boundOnKeydown = t.boundOnKeydown,\n boundSelect = t.boundSelect;\n\n elem.removeEventListener(_AWE_SELECT, boundSelect);\n elem.removeEventListener(_AWE_LOAD, boundMatch);\n elem.removeEventListener(_AWE_SELECT_COMPLETE, boundMatch);\n elem.removeEventListener('blur', boundMatch);\n elem.removeEventListener('input', boundOnInput);\n elem.removeEventListener('keydown', boundOnKeydown);\n }\n\n //\n // public methods\n //\n\n return {\n\n // ajax call for url + val + urlEnd. fn is the callback function. xhr parameter is optional.\n ajax: function(url, urlEnd, val, fn, xhr) {\n var encodedVal = encodeURIComponent(val);\n xhr = xhr || new XMLHttpRequest();\n xhr.open('GET', url + ('function' === typeof urlEnd ? urlEnd(encodedVal) : encodedVal + (urlEnd || '')));\n xhr.onload = fn;\n xhr.send();\n return xhr;\n },\n\n // Convert input before comparing it with suggestion. lowercase and trim the text\n convertInput: function(text) {\n return 'string' === typeof text ? text.trim().toLowerCase() : '';\n },\n\n // item function as defined in Awesomplete, but without mark tags.\n // item(html, input, item_id). input is ignored in this implementation\n item: _item,\n\n // Set a new suggestion list. Trigger loadcomplete event.\n // load(awesomplete, list, queryValue)\n load: _loadComplete,\n\n // Return text with mark tags arround matching input. Don't replace inside <HTML> tags.\n // When startsWith is true, mark only the matching begin text.\n // mark(text, input, startsWith)\n mark: _mark,\n\n // highlight items: Marks input in the first line, not in the optional description\n itemContains: function(text, input, item_id) {\n var arr;\n if (input.trim() !== '') {\n arr = ('' + text).split(/<p>/);\n arr[0] = _mark(arr[0], input);\n text = arr.join('<p>');\n }\n return _item.call(this, text, input, item_id);\n },\n\n // highlight items: mark all occurrences of the input text\n itemMarkAll: function(text, input, item_id) {\n return _item.call(this, input.trim() === '' ? '' + text : _mark('' + text, input), input, item_id);\n },\n\n // highlight items: mark input in the begin text\n itemStartsWith: function(text, input, item_id) {\n return _item.call(this, input.trim() === '' ? '' + text : _mark('' + text, input, true), input, item_id);\n },\n\n // highlight items: highlight matching words\n itemWords: function(text, input, item_id) {\n var arr, words = input.split(/\\s+/), j;\n if (input.trim() !== '') {\n /* Label contains value and optional extra HTML markup.\n Do not mark text after the first < character */\n arr = ('' + text).split('<');\n /* iterate words */\n for (j = 0; j < words.length; j++) {\n /* highlight word with <mark> </mark> tags */\n arr[0] = _mark(arr[0], words[j]);\n }\n text = arr.join('<');\n }\n return _item.call(this, text, input, item_id);\n },\n\n // create Awesomplete object for input control elemId. opts are passed unchanged to Awesomplete.\n create: function(elemId, utilOpts, opts) {\n opts.item = opts.item || this.itemContains; /* by default uses itemContains, can be overridden */\n var awe = new Awesomplete(elemId, opts);\n awe.utilprops = utilOpts || {};\n // loadall is true if there is no url (there is a static data-list)\n if (!awe.utilprops.url && 'undefined' === typeof awe.utilprops.loadall) {\n awe.utilprops.loadall = true;\n }\n awe.utilprops.ajax = awe.utilprops.ajax || this.ajax; /* default ajax function can be overridden */\n awe.utilprops.convertInput = awe.utilprops.convertInput || this.convertInput; /* the same applies for convertInput */\n return awe;\n },\n\n // attach Awesomplete object to event listeners\n attach: function(awe) {\n var elem = awe.input,\n boundMatch = _match.bind(awe),\n boundOnKeydown = _onKeydown.bind(awe),\n boundOnInput = _onInput.bind(awe),\n boundSelect = _select.bind(awe),\n boundDetach = _detach.bind({awe: awe,\n boundMatch: boundMatch,\n boundOnInput: boundOnInput,\n boundOnKeydown: boundOnKeydown,\n boundSelect: boundSelect\n }),\n events = {\n 'keydown': boundOnKeydown,\n 'input': boundOnInput\n };\n events['blur'] = events[_AWE_SELECT_COMPLETE] = events[_AWE_LOAD] = boundMatch;\n events[_AWE_SELECT] = boundSelect;\n $.bind(elem, events);\n\n awe.utilprops.detach = boundDetach;\n // Perform ajax call if prepop is true and there is an initial input value, or when all values must be loaded (loadall)\n if (awe.utilprops.prepop && (awe.utilprops.loadall || elem.value !== '')) {\n awe.utilprops.val = awe.utilprops.convertInput.call(awe, elem.value);\n _lookup(awe, awe.utilprops.val);\n }\n return awe;\n },\n\n // update input value via javascript. Use prepop=true when this is an initial/prepopulation value.\n update: function(awe, value, prepop) {\n awe.input.value = value;\n return _update(awe, value, prepop);\n },\n\n // replace the current list with suggestions with a new list.\n // queryResult should contain an array or an object with an array or a json string.\n // By default forceUpdate is false and it only replaces the list if the queryValue matches the current input value.\n updateList: function(awe, queryResult, queryValue, forceUpdate) {\n return _updateList(awe, queryResult, queryValue, forceUpdate);\n },\n\n // create and attach Awesomplete object for input control elemId. opts are passed unchanged to Awesomplete.\n start: function(elemId, utilOpts, opts) {\n return this.attach(this.create(elemId, utilOpts, opts));\n },\n\n // Stop AwesompleteUtil; detach event handlers from the Awesomplete object.\n detach: function(awe) {\n // cancel ajax call if it hasn't started yet.\n clearTimeout(awe.utilprops.timeoutID)\n if (awe.utilprops.detach) {\n awe.utilprops.detach();\n delete awe.utilprops.detach\n }\n return awe;\n },\n\n // Create function to copy a field from the selected autocomplete item to another DOM element.\n // dataField can be null.\n createCopyFun: function(sourceId, dataField, targetId) {\n return _copyFun.bind({sourceId: sourceId, dataField: dataField, targetId: $(targetId) || targetId});\n },\n\n // attach copy function to event listeners. prepop is optional and by default true.\n // if true the copy function will also listen to awesomplete-prepop events.\n // The optional listenEl is the element that listens, defaults to document.body.\n attachCopyFun: function(fun, prepop, listenEl) {\n // prepop parameter defaults to true\n prepop = 'boolean' === typeof prepop ? prepop : true;\n listenEl = listenEl || document.body;\n listenEl.addEventListener(_AWE_MATCH, fun);\n if (prepop) listenEl.addEventListener(_AWE_PREPOP, fun);\n return fun;\n },\n\n // Create and attach copy function.\n startCopy: function(sourceId, dataField, targetId, prepop) {\n var sourceEl = $(sourceId);\n return this.attachCopyFun(this.createCopyFun(sourceEl || sourceId, dataField, targetId), prepop, sourceEl);\n },\n\n // Stop copy function. Detach it from event listeners.\n // The optional listenEl must be the same element that was used during startCopy/attachCopyFun;\n // in general: Awesomplete.$(sourceId). listenEl defaults to document.body.\n detachCopyFun: function(fun, listenEl) {\n listenEl = listenEl || document.body;\n listenEl.removeEventListener(_AWE_PREPOP, fun);\n listenEl.removeEventListener(_AWE_MATCH, fun);\n return fun;\n },\n\n // Create function for combobox button (btnId) to toggle dropdown list.\n createClickFun: function(btnId, awe) {\n return _clickFun.bind({btnId: btnId, awe : awe});\n },\n\n // Attach click function for combobox to click event.\n // The optional listenEl is the element that listens, defaults to document.body.\n attachClickFun: function(fun, listenEl) {\n listenEl = listenEl || document.body;\n listenEl.addEventListener('click', fun);\n return fun;\n },\n\n // Create and attach click function for combobox button. Toggles open/close of suggestion list.\n startClick: function(btnId, awe) {\n var btnEl = $(btnId);\n return this.attachClickFun(this.createClickFun(btnEl || btnId, awe), btnEl);\n },\n\n // Stop click function. Detach it from event listeners.\n // The optional listenEl must be the same element that was used during startClick/attachClickFun;\n // in general: Awesomplete.$(btnId). listenEl defaults to document.body.\n detachClickFun: function(fun, listenEl) {\n listenEl = listenEl || document.body;\n listenEl.removeEventListener('click', fun);\n return fun;\n },\n\n // filter function as specified in Awesomplete. Filters suggestion list on items containing input value.\n // Awesomplete.FILTER_CONTAINS filters on data.label, however\n // this function filters on value and not on the shown label which may contain markup.\n filterContains: function(data, input) {\n return Awesomplete.FILTER_CONTAINS(data.value, input);\n },\n\n // filter function as specified in Awesomplete. Filters suggestion list on matching begin text.\n // Awesomplete.FILTER_STARTSWITH filters on data.label, however\n // this function filters on value and not on the shown label which may contain markup.\n filterStartsWith: function(data, input) {\n return Awesomplete.FILTER_STARTSWITH(data.value, input);\n },\n\n // Do not filter; rely on server responses to filter the results.\n filterOff: function(_data, _input) {\n return true;\n },\n\n // filter on words without caring about word order.\n // To return true: all words in the input must be found.\n // A word is also a match when a longer word is found which starts with the input word.\n filterWords: function(data, input) {\n var words = input.split(/\\s+/), result = true, j;\n data = ' ' + data;\n /* iterate words */\n for (j = 0; result && j < words.length; j++) {\n /* all entered words must be found */\n result = Awesomplete.FILTER_CONTAINS(data, ' ' + words[j]);\n }\n return result;\n },\n\n // Flatten JSON.\n // { \"a\":{\"b\":{\"c\":[{\"d\":{\"e\":1}}]}}} becomes {\"a.b.c\":[{\"d.e\":1}]}.\n // This function can be bind to configure it with extra options;\n // bind({root: '<root path>', value: '<value property>', label: '<label property>'})\n jsonFlatten: function(data) {\n // start json tree recursion\n return _jsonFlatten({}, data, '', 0, this);\n }\n };\n}();\n\n// Expose AwesompleteUtil as a CommonJS module\nif (typeof module === \"object\" && module.exports) {\n module.exports = AwesompleteUtil;\n}\n\n// Make sure to export AwesompleteUtil on self when in a browser\nif (typeof self !== \"undefined\") {\n self.AwesompleteUtil = AwesompleteUtil;\n}\n", "\n/*\n * @module AwesompleteBundle\n */\n\nimport Awesomplete from '../vendor/awesomplete.js'\nimport AwesompleteUtil from '../vendor/awesomplete-util.js'\nimport attachAwesomplete from './attach-awesomplete.js'\nimport copyValueToId from './copy-value-to-id.js'\n\nexport {\n Awesomplete\n , AwesompleteUtil\n , attachAwesomplete\n , copyValueToId\n}\n", "/*eslint-env browser*/\n/*global Awesomplete, AwesompleteUtil*/\n/*exported attachAwesomplete*/\n\nconst\n UTIL = AwesompleteUtil,\n getCustomFunction = (customCtx, lookupValue, name) => {\n if (lookupValue == null) return null // null or undefined\n if ('function' !== typeof customCtx[lookupValue]) throw new Error('Unknown ' + name + ' function ' + lookupValue)\n return customCtx[lookupValue]\n }, // end getCustomFuncion\n\n makeReplaceFun = (replaceFun, multipleChar, descrSearch) => {\n var re = null, separator\n if (multipleChar) {\n re = new RegExp(\"^.+[\" + multipleChar + \"]\\\\s*|\")\n separator = multipleChar[0]\n if (multipleChar[0] !== ' ') separator += ' '\n }\n return function(data) {\n var selectedValue = descrSearch ? data.value.substring(0, data.value.lastIndexOf('|')) : data.value,\n replaceText = re ? this.input.value.match(re)[0] + selectedValue + separator : selectedValue\n if (replaceFun) {\n (replaceFun).call(this, replaceText)\n } else {\n this.input.value = replaceText\n }\n }\n }, // end makeReplaceFun\n\n // would be a lot easier if custom itemFun is not combined with multiple\n makeItemFun = (itemFun, filterAtStart, re, descrSearch) => {\n if (!itemFun) {\n if (descrSearch) { //\n itemFun = UTIL.itemMarkAll;\n } else if (filterAtStart) {\n itemFun = UTIL.itemStartsWith;\n } else if (re) { // itemContains is the default. No need to specify it when re is null.\n itemFun = UTIL.itemContains;\n }\n }\n if (!re) return itemFun;\n return function(text, inp, item_id) {\n return (itemFun).call(this, text, inp.match(re)[0], item_id);\n }\n }, // end makeItemFun\n\n makeFilterFun = (filterFun, filterAtStart, re, labelOrDescrAttr, descrSearch) => {\n // Label/descr without value attr is not allowed.\n // When there is a labelAttr or a descrAttr, a data function\n // which returns value + label will be used. This label might contain HTML, so search in value.\n // Filters are called with a Suggestion, which always has a value and label property,\n // The suggestion toString is used for string conversion. The toString returns: label || value.\n if (!re && !labelOrDescrAttr) return filterFun; // Suggestion label == value\n let applyThisFilter = filterFun;\n const AWE = Awesomplete;\n if (filterAtStart) {\n if (descrSearch) {\n // description search i.c.w. start-with filter needs special threatment\n // to search at the beginning in both value and description.\n applyThisFilter = function(datValue, inputPart) {\n return AWE.FILTER_STARTSWITH(datValue, inputPart)\n || AWE.FILTER_STARTSWITH(datValue.substring(datValue.lastIndexOf('|') + 1), inputPart);\n }\n } else {\n if (!re) return UTIL.filterStartsWith // do not search in label, search in value\n applyThisFilter = AWE.FILTER_STARTSWITH\n }\n } else if (!filterFun\n || filterFun === UTIL.filterContains\n || filterFun === AWE.FILTER_CONTAINS) {\n if (!re) return UTIL.filterContains // do not search in label, search in value\n applyThisFilter = AWE.FILTER_CONTAINS\n }\n return function(dat, inp) {\n // For simplicity, call enclosed filter with just the text string, not a Suggestion object.\n const inputPart = re ? inp.match(re)[0] : inp;\n // In multiple mode an extra check on minChars is needed; only show suggestions when minChars is reached.\n if (re && this.minChars > 1 && inputPart.trimStart().length < this.minChars) return false;\n return (applyThisFilter).call(this, !labelOrDescrAttr ? dat : dat.value, inputPart);\n }\n }, // end makeFilterFun\n\n makeDataFun = (dataFun, valueAttr, labelAttr, descrAttr, descrSearch) => {\n // precondition: makeDataFun is only called when valueAttr or dataFun is not null\n let resultDataFun = null;\n if (labelAttr || descrAttr) {\n resultDataFun =\n function(rec, _input) {\n return {\n label: (rec[labelAttr || valueAttr] || '').replace('<p>', '<p >')\n + (descrAttr ? '<p>' + (rec[descrAttr] || '') : ''),\n value: (rec[valueAttr] || '') +\n (descrSearch ? '|' + (rec[descrAttr] || '').replace('|', ' ') : '')\n };\n }\n } else if (valueAttr) {\n resultDataFun = function(rec, _input) { return rec[valueAttr] || ''; }\n } else { // dataFun is not null, valueAttr is null\n return dataFun;\n }\n if (!dataFun) return resultDataFun;\n // combine custom function with the above resultDataFun\n return function(rec, input) { return (dataFun).call(this, resultDataFun(rec, input), input); }\n }, // end makeDataFun\n\n makeConvertInputFun = (convertInputFun, multipleChar) => {\n if (!multipleChar) return convertInputFun;\n\n // select the text that will be considered to be the current input.\n const rem = new RegExp(\"[\" + multipleChar + \"]\\\\s*$\"),\n rel = new RegExp(\"[^\" + multipleChar + \"]*$\");\n\n return function(inp) {\n var convInp = inp.replace(rem, '').match(rel)[0].trim().toLowerCase();\n return convertInputFun ? (convertInputFun).call(this, convInp) : convInp;\n }\n }, // end makeConvertInputFun\n\n attachAwesomplete = (node, customCtx, defaultSettings) => {\n defaultSettings = defaultSettings || {}\n customCtx = customCtx || {}\n const b = node.getAttribute.bind(node)\n , a = function(attr) { return b(attr) || defaultSettings[attr] }\n , ajax = a('ajax')\n , assign = a('assign')\n , autoFirst = a('autoFirst')\n , combobox = a('combobox')\n , container = a('container')\n , convertInput = a('convertInput')\n , convertResponse = a('convertResponse')\n , data = a('data')\n , debounce = a('debounce')\n , descr = a('descr')\n , descrSearch = a('descrSearch')\n , item = a('item')\n , filter = a('filter')\n , forField = a('forField')\n , label = a('label')\n , limit = a('limit')\n , list = a('list')\n , loadall = a('loadall')\n , listLabel = a('listLabel')\n , maxItems = a('maxItems')\n , minChars = a('minChars')\n , multiple = a('multiple')\n , prepop = a('prepop')\n , replace = a('replace')\n , sort = a('sort')\n , statusNoResults = a('statusNoResults')\n , statusTypeXChar = a('statusTypeXChar')\n , statusXResults = a('statusXResults')\n , value = a('value')\n , url = a('url')\n , urlEnd = a('urlEnd')\n\n , convertInputFun = getCustomFunction(customCtx, convertInput, 'convertInput')\n , dataFun = getCustomFunction(customCtx, data, 'data')\n , filterFun = getCustomFunction(customCtx, filter, 'filter')\n , itemFun = getCustomFunction(customCtx, item, 'item')\n , replaceFun = getCustomFunction(customCtx, replace, 'replace')\n , filterAtStart = (filterFun === Awesomplete.FILTER_STARTSWITH || filterFun === UTIL.filterStartsWith)\n , isDescrSearch = (descrSearch === 'true' || descrSearch === true)\n\n if (forField === undefined) throw new Error('Missing forField attribute.')\n\n let opts = {}, awesompleteOpts = {}, multipleChar = null, separator = null, re = null;\n\n if (url) opts['url'] = url\n if (urlEnd) opts['urlEnd'] = 'function' === typeof customCtx[urlEnd] ? customCtx[urlEnd] : urlEnd\n if (loadall) opts['loadall'] = (loadall === 'true' || loadall === true)\n if (prepop) opts['prepop'] = (prepop === 'true' || prepop === true)\n if (debounce) opts['debounce'] = Number(debounce)\n if (limit) opts['limit'] = Number(limit)\n if (!value && descr) throw new Error(\"'descr' without 'value' parameter.\")\n if (!value && label) throw new Error(\"'label' without 'value' parameter.\")\n if (isDescrSearch && !descr) throw new Error('Cannot search description texts without knowing the description field. Please supply descr parameter.')\n if (convertResponse) opts['convertResponse'] = getCustomFunction(customCtx, convertResponse, 'convertResponse')\n if (ajax) opts['ajax'] = getCustomFunction(customCtx, ajax, 'ajax')\n if (multiple && multiple !== 'false') {\n multipleChar = (multiple === 'true' || multiple === true ? ' ' : multiple)\n separator = (combobox && combobox !== 'false' ? '' : '([' + multipleChar + ']\\\\s*)?'),\n re = new RegExp('[^' + multipleChar + ']*' + separator + '$')\n }\n\n const madeConvertInputFun = makeConvertInputFun(convertInputFun, multipleChar)\n , madeFilterFun = makeFilterFun(filterFun, filterAtStart, re, label || descr, isDescrSearch)\n , madeItemFun = makeItemFun(itemFun, filterAtStart, re, isDescrSearch)\n\n if (madeConvertInputFun) opts['convertInput'] = madeConvertInputFun\n if (madeFilterFun) awesompleteOpts['filter'] = madeFilterFun\n if (madeItemFun) awesompleteOpts['item'] = madeItemFun\n\n if (minChars) awesompleteOpts['minChars'] = Number(minChars)\n if (maxItems) awesompleteOpts['maxItems'] = Number(maxItems)\n if (autoFirst) awesompleteOpts['autoFirst'] = (autoFirst === 'true' || autoFirst === true)\n if (container) awesompleteOpts['container'] = getCustomFunction(customCtx, container, 'container')\n if (replace || multipleChar || isDescrSearch) {\n awesompleteOpts['replace'] = makeReplaceFun(replaceFun, multipleChar, isDescrSearch)\n }\n if (value || data) {\n awesompleteOpts['data'] = makeDataFun(dataFun, value, label, descr, isDescrSearch)\n }\n if (list) {\n // if list is a function, it will be called (when mounted) and the result will be used.\n // but it can also be an object, array or string array in the customCtx\n // or just a string array\n awesompleteOpts['list'] = ('function' === typeof customCtx[list] ? customCtx[list]() : customCtx[list]) || list\n }\n if (listLabel) awesompleteOpts['listLabel'] = listLabel\n if (statusNoResults) awesompleteOpts['statusNoResults'] = statusNoResults\n if (statusXResults) awesompleteOpts['statusXResults'] = statusXResults\n if (statusTypeXChar) awesompleteOpts['statusTypeXChar'] = statusTypeXChar\n if (sort === 'false' || sort === false) {\n awesompleteOpts['sort'] = false // turn off sorting\n } else if (sort) {\n awesompleteOpts['sort'] = customCtx[sort] || sort\n }\n\n const aweInstance = UTIL.start('#' + forField,\n opts,\n awesompleteOpts\n )\n\n if (assign && assign !== 'false') {\n customCtx[assign === 'true' || assign === true ? 'awe_' + forField : assign] = aweInstance\n }\n\n if (combobox && combobox !== 'false') {\n UTIL.startClick(\n '#' + (combobox === 'true' || combobox === true ? 'awe_btn_' + forField : combobox)\n , aweInstance)\n }\n\n return aweInstance\n } // end attachAwesomplete\n\nexport default attachAwesomplete\n", "/*global AwesompleteUtil*/\n\nconst copyValueToId = (node) => {\n const a = node.getAttribute.bind(node)\n , dataField = a('dataField')\n , field = a('field')\n , targetField = a('targetField')\n , target = a('target')\n if (field == null) throw new Error(\"Missing field attribute.\") // null or undefined\n if (target == null && targetField == null) throw new Error(\"Missing target or targetField attribute.\")\n AwesompleteUtil.startCopy('#' + field, dataField, targetField ? '#' + targetField : target)\n}\n\nexport default copyValueToId"],
"mappings": "0hBAAA,IAAAA,GAAAC,GAAA,CAAAC,GAAAC,IAAA,EAOC,UAAY,CAEb,IAAIC,EAAI,SAAUC,EAAOC,EAAG,CAC3B,IAAIC,EAAK,KAGTH,EAAE,OAASA,EAAE,OAAS,GAAK,EAC3B,KAAK,MAAQA,EAAE,MAIf,KAAK,SAAW,GAEhB,KAAK,MAAQI,EAAEH,CAAK,EACpB,KAAK,MAAM,aAAa,eAAgB,KAAK,EAC7C,KAAK,MAAM,aAAa,oBAAqB,MAAM,EACnD,KAAK,MAAM,aAAa,gBAAiB,OAAO,EAChD,KAAK,MAAM,aAAa,gBAAiB,oBAAsB,KAAK,KAAK,EAEzE,KAAK,MAAM,aAAa,OAAQ,UAAU,EAI1C,KAAK,QAAUC,EAAIA,GAAK,CAAC,EAEzBG,EAAU,KAAM,CACf,SAAU,EACV,SAAU,GACV,UAAW,GACX,KAAML,EAAE,KACR,OAAQA,EAAE,gBACV,KAAME,EAAE,OAAS,GAAQ,GAAQF,EAAE,cACnC,UAAWA,EAAE,UACb,KAAMA,EAAE,KACR,QAASA,EAAE,QACX,UAAW,GACX,UAAW,eACX,gBAAiB,mBACjB,eAAgB,oBAChB,gBAAiB,yCAClB,EAAGE,CAAC,EAEJ,KAAK,MAAQ,GAIb,KAAK,UAAY,KAAK,UAAUD,CAAK,EAErC,KAAK,GAAKG,EAAE,OAAO,KAAM,CACxB,OAAQ,SACR,KAAM,UACN,GAAI,oBAAsB,KAAK,MAC/B,OAAQ,KAAK,UACb,aAAc,KAAK,SACpB,CAAC,EAED,KAAK,OAASA,EAAE,OAAO,OAAQ,CAC9B,UAAW,kBACX,KAAM,SACN,YAAa,YACb,cAAe,GACf,OAAQ,KAAK,UACb,YAAa,EACd,CAAC,EAID,KAAK,QAAU,CACd,MAAO,CACN,MAAS,KAAK,SAAS,KAAK,IAAI,EAChC,KAAQ,KAAK,MAAM,KAAK,KAAM,CAAE,OAAQ,MAAO,CAAC,EAChD,QAAW,SAASE,EAAK,CACxB,IAAIC,EAAID,EAAI,QAITH,EAAG,SACDI,IAAM,IAAMJ,EAAG,UAIVI,IAAM,GAAKJ,EAAG,UAAYA,EAAG,WAHrCG,EAAI,eAAe,EACnBH,EAAG,OAAO,OAAW,OAAWG,CAAG,GAM3BC,IAAM,GACdJ,EAAG,MAAM,CAAE,OAAQ,KAAM,CAAC,GAElBI,IAAM,IAAMA,IAAM,MAC1BD,EAAI,eAAe,EACnBH,EAAGI,IAAM,GAAI,WAAa,MAAM,EAAE,GAGrC,CACD,EACA,KAAM,CACL,OAAU,KAAK,MAAM,KAAK,KAAM,CAAE,OAAQ,QAAS,CAAC,CACrD,EACA,GAAI,CAIH,UAAa,SAASD,EAAK,CAC1BA,EAAI,eAAe,CACpB,EAEA,MAAS,SAASA,EAAK,CACtB,IAAIE,EAAKF,EAAI,OAEb,GAAIE,IAAO,KAAM,CAEhB,KAAOA,GAAM,CAAC,MAAM,KAAKA,EAAG,QAAQ,GACnCA,EAAKA,EAAG,WAGLA,GAAMF,EAAI,SAAW,IACxBA,EAAI,eAAe,EACnBH,EAAG,OAAOK,EAAIF,EAAI,OAAQA,CAAG,GAGhC,CACD,CACD,EAEAF,EAAE,KAAK,KAAK,MAAO,KAAK,QAAQ,KAAK,EACrCA,EAAE,KAAK,KAAK,MAAM,KAAM,KAAK,QAAQ,IAAI,EACzCA,EAAE,KAAK,KAAK,GAAI,KAAK,QAAQ,EAAE,EAE3B,KAAK,MAAM,aAAa,MAAM,GACjC,KAAK,KAAO,IAAM,KAAK,MAAM,aAAa,MAAM,EAChD,KAAK,MAAM,gBAAgB,MAAM,GAGjC,KAAK,KAAO,KAAK,MAAM,aAAa,WAAW,GAAKF,EAAE,MAAQ,CAAC,EAGhEF,EAAE,IAAI,KAAK,IAAI,CAChB,EAEAA,EAAE,UAAY,CACb,IAAI,KAAKS,EAAM,CACd,GAAI,MAAM,QAAQA,CAAI,EACrB,KAAK,MAAQA,UAEL,OAAOA,GAAS,UAAYA,EAAK,QAAQ,GAAG,EAAI,GACvD,KAAK,MAAQA,EAAK,MAAM,SAAS,UAGlCA,EAAOL,EAAEK,CAAI,EAETA,GAAQA,EAAK,SAAU,CAC1B,IAAIC,EAAQ,CAAC,EACbC,EAAM,MAAMF,EAAK,QAAQ,EAAE,QAAQ,SAAUG,EAAI,CAChD,GAAI,CAACA,EAAG,SAAU,CACjB,IAAIC,EAAOD,EAAG,YAAY,KAAK,EAC3BE,EAAQF,EAAG,OAASC,EACpBE,EAAQH,EAAG,OAASC,EACpBC,IAAU,IACbJ,EAAM,KAAK,CAAE,MAAOK,EAAO,MAAOD,CAAM,CAAC,EAG5C,CAAC,EACD,KAAK,MAAQJ,EAIX,SAAS,gBAAkB,KAAK,OACnC,KAAK,SAAS,CAEhB,EAEA,IAAI,UAAW,CACd,OAAO,KAAK,MAAQ,EACrB,EAEA,IAAI,QAAS,CACZ,OAAO,KAAK,QACb,EAEA,MAAO,SAAUR,EAAG,CACd,KAAK,SAIV,KAAK,MAAM,aAAa,gBAAiB,OAAO,EAChD,KAAK,GAAG,aAAa,SAAU,EAAE,EACjC,KAAK,SAAW,GAChB,KAAK,MAAQ,GAEb,KAAK,OAAO,aAAa,SAAU,EAAE,EACrC,KAAK,MAAM,aAAa,wBAAyB,EAAE,EAEnDE,EAAE,KAAK,KAAK,MAAO,oBAAqBF,GAAK,CAAC,CAAC,EAChD,EAEA,KAAM,UAAY,CACjB,KAAK,MAAM,aAAa,gBAAiB,MAAM,EAC/C,KAAK,GAAG,gBAAgB,QAAQ,EAChC,KAAK,SAAW,GAEhB,KAAK,OAAO,gBAAgB,QAAQ,EAEhC,KAAK,WAAa,KAAK,QAAU,IACpC,KAAK,KAAK,CAAC,EAGZE,EAAE,KAAK,KAAK,MAAO,kBAAkB,CACtC,EAEA,QAAS,UAAW,CAMnB,GAJAA,EAAE,OAAO,KAAK,MAAO,KAAK,QAAQ,KAAK,EACvCA,EAAE,OAAO,KAAK,MAAM,KAAM,KAAK,QAAQ,IAAI,EAGvC,CAAC,KAAK,QAAQ,UAAW,CAE5B,IAAIY,EAAa,KAAK,UAAU,WAEhCA,EAAW,aAAa,KAAK,MAAO,KAAK,SAAS,EAClDA,EAAW,YAAY,KAAK,SAAS,EAItC,KAAK,MAAM,gBAAgB,cAAc,EACzC,KAAK,MAAM,gBAAgB,mBAAmB,EAC9C,KAAK,MAAM,gBAAgB,eAAe,EAC1C,KAAK,MAAM,gBAAgB,eAAe,EAE1C,KAAK,MAAM,gBAAgB,MAAM,EAGjC,IAAIC,EAAqBjB,EAAE,IAAI,QAAQ,IAAI,EAEvCiB,IAAuB,IAC1BjB,EAAE,IAAI,OAAOiB,EAAoB,CAAC,CAEpC,EAEA,KAAM,UAAY,CACjB,IAAIC,EAAQ,KAAK,GAAG,SAAS,OAC7B,KAAK,KAAK,KAAK,MAAQA,EAAQ,EAAI,KAAK,MAAQ,EAAKA,EAAQ,EAAI,EAAI,CACtE,EAEA,SAAU,UAAY,CACrB,IAAIA,EAAQ,KAAK,GAAG,SAAS,OACzBC,EAAM,KAAK,MAAQ,EAEvB,KAAK,KAAK,KAAK,UAAYA,IAAQ,GAAKA,EAAMD,EAAQ,CAAC,CACxD,EAGA,KAAM,SAAU,EAAG,CAClB,IAAIE,EAAM,KAAK,GAAG,SAEd,KAAK,UACRA,EAAI,KAAK,KAAK,EAAE,aAAa,gBAAiB,OAAO,EAGtD,KAAK,MAAQ,EAET,EAAI,IAAMA,EAAI,OAAS,IAC1BA,EAAI,CAAC,EAAE,aAAa,gBAAiB,MAAM,EAO3C,KAAK,MAAM,aAAa,wBAAyB,KAAK,GAAG,GAAK,SAAW,KAAK,KAAK,EAGnF,KAAK,GAAG,UAAYA,EAAI,CAAC,EAAE,UAAY,KAAK,GAAG,aAAeA,EAAI,CAAC,EAAE,aAErEhB,EAAE,KAAK,KAAK,MAAO,wBAAyB,CAC3C,KAAM,KAAK,YAAY,KAAK,KAAK,CAClC,CAAC,EAEH,EAEA,OAAQ,SAAUiB,EAAUC,EAAQC,EAAe,CAOlD,GANIF,EACH,KAAK,MAAQjB,EAAE,aAAaiB,CAAQ,EAEpCA,EAAW,KAAK,GAAG,SAAS,KAAK,KAAK,EAGnCA,EAAU,CACb,IAAIG,EAAa,KAAK,YAAY,KAAK,KAAK,EAExCC,EAAUrB,EAAE,KAAK,KAAK,MAAO,qBAAsB,CACtD,KAAMoB,EACN,OAAQF,GAAUD,EAClB,cAAeE,CAChB,CAAC,EAEGE,IACH,KAAK,QAAQD,CAAU,EACvB,KAAK,MAAM,CAAE,OAAQ,QAAS,CAAC,EAC/BpB,EAAE,KAAK,KAAK,MAAO,6BAA8B,CAChD,KAAMoB,EACN,cAAeD,CAChB,CAAC,GAGJ,EAEA,SAAU,UAAW,CACpB,IAAIpB,EAAK,KACLW,EAAQ,KAAK,MAAM,MAEnBA,EAAM,QAAU,KAAK,UAAY,KAAK,OAAS,KAAK,MAAM,OAAS,GACtE,KAAK,MAAQ,GAEb,KAAK,GAAG,UAAY,GAEpB,KAAK,YAAc,KAAK,MACtB,IAAI,SAASY,EAAM,CACnB,OAAO,IAAIC,EAAWxB,EAAG,KAAKuB,EAAMZ,CAAK,CAAC,CAC3C,CAAC,EACA,OAAO,SAASY,EAAM,CACtB,OAAOvB,EAAG,OAAOuB,EAAMZ,CAAK,CAC7B,CAAC,EAEE,KAAK,OAAS,KACjB,KAAK,YAAc,KAAK,YAAY,KAAK,KAAK,IAAI,GAGnD,KAAK,YAAc,KAAK,YAAY,MAAM,EAAG,KAAK,QAAQ,EAE1D,KAAK,YAAY,QAAQ,SAASD,EAAMe,EAAO,CAC7CzB,EAAG,GAAG,YAAYA,EAAG,KAAKU,EAAMC,EAAOc,CAAK,CAAC,CAC9C,CAAC,EAEE,KAAK,GAAG,SAAS,SAAW,GAE/B,KAAK,OAAO,YAAc,KAAK,gBAE/B,KAAK,MAAM,CAAE,OAAQ,WAAY,CAAC,IAGlC,KAAK,MAAM,aAAa,wBAAyB,EAAE,EAEnD,KAAK,KAAK,EAEV,KAAK,OAAO,YAAc,KAAK,eAAe,WAAW,MAAO,KAAK,GAAG,SAAS,MAAM,KAKxF,KAAK,MAAM,CAAE,OAAQ,WAAY,CAAC,EAE9B,KAAK,SAAW,GAAKd,EAAM,QAAU,KAAK,SAC3C,KAAK,OAAO,YAAc,KAAK,gBAE/B,KAAK,OAAO,YAAc,KAAK,gBAAgB,WAAW,MAAO,KAAK,QAAQ,EAInF,CACD,EAIAd,EAAE,IAAM,CAAC,EAETA,EAAE,gBAAkB,SAAUa,EAAMZ,EAAO,CAC1C,OAAO,OAAOG,EAAE,aAAaH,EAAM,KAAK,CAAC,EAAG,GAAG,EAAE,KAAKY,CAAI,CAC3D,EAEAb,EAAE,kBAAoB,SAAUa,EAAMZ,EAAO,CAC5C,OAAO,OAAO,IAAMG,EAAE,aAAaH,EAAM,KAAK,CAAC,EAAG,GAAG,EAAE,KAAKY,CAAI,CACjE,EAEAb,EAAE,cAAgB,SAAU6B,EAAGC,EAAG,CACjC,OAAID,EAAE,SAAWC,EAAE,OACXD,EAAE,OAASC,EAAE,OAGdD,EAAIC,EAAG,GAAK,CACpB,EAEA9B,EAAE,UAAY,SAAUC,EAAO,CAC9B,OAAOG,EAAE,OAAO,MAAO,CACtB,UAAW,cACX,OAAQH,CACT,CAAC,CACF,EAEAD,EAAE,KAAO,SAAUa,EAAMZ,EAAO8B,EAAS,CACxC,IAAIC,EAAO/B,EAAM,KAAK,IAAM,GAAKY,EAAOA,EAAK,QAAQ,OAAOT,EAAE,aAAaH,EAAM,KAAK,CAAC,EAAG,IAAI,EAAG,iBAAiB,EAClH,OAAOG,EAAE,OAAO,KAAM,CACrB,UAAW4B,EACX,KAAQ,SACR,gBAAiB,QACjB,SAAY,KACZ,GAAM,oBAAsB,KAAK,MAAQ,SAAWD,CACrD,CAAC,CACF,EAEA/B,EAAE,QAAU,SAAUa,EAAM,CAC3B,KAAK,MAAM,MAAQA,EAAK,KACzB,EAEAb,EAAE,KAAO,SAAU0B,EAAiB,CAAE,OAAOA,CAAM,EAInD,SAASC,EAAWM,EAAM,CACzB,IAAI/B,EAAI,MAAM,QAAQ+B,CAAI,EACtB,CAAE,MAAOA,EAAK,CAAC,EAAG,MAAOA,EAAK,CAAC,CAAE,EACjC,OAAOA,GAAS,UAAY,UAAWA,GAAQ,UAAWA,EAAOA,EAAO,CAAE,MAAOA,EAAM,MAAOA,CAAK,EAEvG,KAAK,MAAQ/B,EAAE,OAASA,EAAE,MAC1B,KAAK,MAAQA,EAAE,KAChB,CACA,OAAO,eAAeyB,EAAW,UAAY,OAAO,OAAO,OAAO,SAAS,EAAG,SAAU,CACvF,IAAK,UAAW,CAAE,OAAO,KAAK,MAAM,MAAQ,CAC7C,CAAC,EACDA,EAAW,UAAU,SAAWA,EAAW,UAAU,QAAU,UAAY,CAC1E,MAAO,GAAK,KAAK,KAClB,EAEA,SAAStB,EAAU6B,EAAUC,EAAYjC,EAAG,CAC3C,QAASkC,KAAKD,EAAY,CACzB,IAAIE,EAAUF,EAAWC,CAAC,EACzBE,EAAYJ,EAAS,MAAM,aAAa,QAAUE,EAAE,YAAY,CAAC,EAE9D,OAAOC,GAAY,SACtBH,EAASE,CAAC,EAAI,SAASE,CAAS,EAExBD,IAAY,GACpBH,EAASE,CAAC,EAAIE,IAAc,KAEpBD,aAAmB,SAC3BH,EAASE,CAAC,EAAI,KAGdF,EAASE,CAAC,EAAIE,EAGX,CAACJ,EAASE,CAAC,GAAKF,EAASE,CAAC,IAAM,IACnCF,EAASE,CAAC,EAAKA,KAAKlC,EAAIA,EAAEkC,CAAC,EAAIC,GAGlC,CAIA,IAAI1B,EAAQ,MAAM,UAAU,MAE5B,SAASP,EAAEmC,EAAMC,EAAK,CACrB,OAAO,OAAOD,GAAS,UAAWC,GAAO,UAAU,cAAcD,CAAI,EAAIA,GAAQ,IAClF,CAEA,SAASE,EAAGF,EAAMC,EAAK,CACtB,OAAO7B,EAAM,MAAM6B,GAAO,UAAU,iBAAiBD,CAAI,CAAC,CAC3D,CAEAnC,EAAE,OAAS,SAASsC,EAAKxC,EAAG,CAC3B,IAAIyC,EAAU,SAAS,cAAcD,CAAG,EAExC,QAASN,KAAKlC,EAAG,CAChB,IAAI0C,EAAM1C,EAAEkC,CAAC,EAEb,GAAIA,IAAM,SACThC,EAAEwC,CAAG,EAAE,YAAYD,CAAO,UAElBP,IAAM,SAAU,CACxB,IAAIS,EAAMzC,EAAEwC,CAAG,EACfC,EAAI,WAAW,aAAaF,EAASE,CAAG,EACxCF,EAAQ,YAAYE,CAAG,EAEnBA,EAAI,aAAa,WAAW,GAAK,MACpCA,EAAI,MAAM,OAGHT,KAAKO,EACbA,EAAQP,CAAC,EAAIQ,EAGbD,EAAQ,aAAaP,EAAGQ,CAAG,EAI7B,OAAOD,CACR,EAEAvC,EAAE,KAAO,SAASuC,EAASzC,EAAG,CAC7B,GAAIyC,EACH,QAASG,KAAS5C,EAAG,CACpB,IAAI6C,EAAW7C,EAAE4C,CAAK,EAEtBA,EAAM,MAAM,KAAK,EAAE,QAAQ,SAAUA,EAAO,CAC3CH,EAAQ,iBAAiBG,EAAOC,CAAQ,CACzC,CAAC,EAGJ,EAEA3C,EAAE,OAAS,SAASuC,EAASzC,EAAG,CAC/B,GAAIyC,EACH,QAASG,KAAS5C,EAAG,CACpB,IAAI6C,EAAW7C,EAAE4C,CAAK,EAEtBA,EAAM,MAAM,KAAK,EAAE,QAAQ,SAASA,EAAO,CAC1CH,EAAQ,oBAAoBG,EAAOC,CAAQ,CAC5C,CAAC,EAGJ,EAEA3C,EAAE,KAAO,SAAS4C,EAAQC,EAAMd,EAAY,CAC3C,IAAI7B,EAAM,SAAS,YAAY,YAAY,EAE3CA,EAAI,UAAU2C,EAAM,GAAM,EAAK,EAE/B,QAASC,KAAKf,EACb7B,EAAI4C,CAAC,EAAIf,EAAWe,CAAC,EAGtB,OAAOF,EAAO,cAAc1C,CAAG,CAChC,EAEAF,EAAE,aAAe,SAAU+C,EAAG,CAC7B,OAAOA,EAAE,QAAQ,uBAAwB,MAAM,CAChD,EAEA/C,EAAE,aAAe,SAAUQ,EAAI,CAE9B,QAASwB,EAAI,EAAGxB,EAAKA,EAAG,uBAAwBwB,IAAI,CACpD,OAAOA,CACR,EAIA,SAASgB,GAAO,CACfX,EAAG,mBAAmB,EAAE,QAAQ,SAAUxC,EAAO,CAChD,IAAID,EAAEC,CAAK,CACZ,CAAC,CACF,CAGA,OAAI,OAAO,MAAS,cACnB,KAAK,YAAcD,GAIhB,OAAO,UAAa,cAEnB,SAAS,aAAe,UAC3BoD,EAAK,EAIL,SAAS,iBAAiB,mBAAoBA,CAAI,GAIpDpD,EAAE,EAAII,EACNJ,EAAE,GAAKyC,EAGH,OAAO1C,GAAW,UAAYA,EAAO,UACxCA,EAAO,QAAUC,GAGXA,CAEP,GAAE,IChkBF,IAAAqD,GAAAC,GAAA,CAAAC,GAAAC,IAAA,CAgBA,IAAIC,GAAkB,UAAW,CAK7B,IAAIC,EAAO,eACPC,EAAYD,EAAO,eACnBE,EAAuBF,EAAO,iBAC9BG,EAAaH,EAAO,QACpBI,EAAcJ,EAAO,SACrBK,EAAcL,EAAO,SACrBM,EAAa,YACbC,EAAiB,gBACjBC,EAAI,YAAY,EAQhB,SAASC,EAAYC,EAAM,CACzB,IAAIC,EAAK,MAAM,QAAQD,CAAI,EACrB,CAAE,MAAOA,EAAK,CAAC,EAAG,MAAOA,EAAK,CAAC,CAAE,EACjC,OAAOA,GAAS,UAAY,UAAWA,GAAQ,UAAWA,EAAOA,EAAO,CAAE,MAAOA,EAAM,MAAOA,CAAK,EACvG,MAAO,CAAC,MAAOC,EAAG,OAASA,EAAG,MAAO,MAAOA,EAAG,KAAK,CACxD,CAGA,SAASC,EAAMC,EAAQC,EAAMC,EAAQ,CAEnC,OAAOP,EAAE,KAAKK,EAAQC,EAAM,CAAC,OAAQC,CAAM,CAAC,CAC9C,CAGA,SAASC,EAAYC,EAAKC,EAAQ,CAChC,IAAIC,EAAQF,EAAI,MACZG,EAAYD,EAAM,UAClBE,EAAYJ,EAAI,UAChBK,EAAWD,EAAU,SACrBE,EAAMF,EAAU,aAAa,KAAKJ,EAAKE,EAAM,KAAK,EAClDK,EAASP,EAAI,OACbQ,EAAS,CAAC,EACVC,EAAOT,EAAI,MACXU,EAAYC,EAAMC,EAAKC,EAE3B,GADAT,EAAU,OAAS,GACfK,EAAM,CACR,IAAKI,EAAI,EAAGA,EAAIJ,EAAK,OAAQI,IAoB3B,GAnBAD,EAAMH,EAAKI,CAAC,EACZH,EAAalB,EAAYQ,EAAI,KAAKY,EAAKN,CAAG,CAAC,EAGvCN,EAAI,WAAa,IAEnBU,EAAW,SAAW,UAAW,CAAE,MAAO,GAAK,KAAK,KAAO,EACvDV,EAAI,OAAOU,EAAYJ,CAAG,IAE5BC,EAAS,KAIbI,EAAO,CAAC,MAAO,CAAC,MAAO,EAAE,CAAC,EAI1BX,EAAI,QAAQ,KAAKW,EAAMD,CAAU,EAE7BN,EAAU,aAAa,KAAKJ,EAAKW,EAAK,MAAM,KAAK,IAAML,EAAK,CAI9D,GAAID,GAAYA,EAAS,QAAUK,EAAW,OAASL,EAAS,QAAUK,EAAW,MAAO,CAE1FF,EAAS,CAACI,CAAG,EACb,MAGFJ,EAAO,KAAKI,CAAG,EAObJ,EAAO,OAAS,EAEdP,EACFN,EAAMO,EAAOf,EAAaqB,CAAM,EACvBJ,EAAU,UACnBA,EAAU,aAAeI,EACzBL,EAAU,OAAOb,CAAc,EAC/Ba,EAAU,IAAId,CAAU,EACxBM,EAAMO,EAAOhB,EAAYsB,CAAM,GAExBP,EACTN,EAAMO,EAAOf,EAAa,CAAC,CAAC,EACnBiB,EAAU,UACnBA,EAAU,aAAe,CAAC,EAC1BD,EAAU,OAAOd,CAAU,EAEvB,CAACkB,GAAWL,IAAU,SAAS,cAC5BI,IAAQ,KACVH,EAAU,IAAIb,CAAc,EAC5BK,EAAMO,EAAOhB,EAAY,CAAC,CAAC,GAG9BiB,EAAU,OAAOb,CAAc,GAKzC,CAGA,SAASwB,EAAOC,EAAI,CAClB,IAAIf,EAAM,MACLe,EAAG,OAAS9B,GAAwB8B,EAAG,OAAS/B,GAAa+B,EAAG,OAAS,SAAWA,EAAG,SAAWf,EAAI,OACzGD,EAAYC,EAAKA,EAAI,UAAU,QAAUe,EAAG,OAAS/B,CAAS,CAElE,CAGA,SAASgC,EAAWD,EAAI,CACtB,IAAIf,EAAM,KACNe,EAAG,SAAWf,EAAI,OAASe,EAAG,UAAY,GAC5Cf,EAAI,OAAO,OAAW,OAAWe,CAAE,CAEvC,CAGA,SAASE,EAAQF,EAAI,CACnB,IAAIf,EAAM,KAEV,aAAaA,EAAI,UAAU,SAAS,EACpCA,EAAI,UAAU,QAAU,GACxBA,EAAI,UAAU,SAAWe,EAAG,IAC9B,CAGA,SAASG,EAASZ,EAAK,CACrB,OAAO,OAAO,KAAKA,CAAG,EAAE,SAAW,GAAKA,EAAI,cAAgB,MAC9D,CAKA,SAASa,EAAkBnB,EAAKM,EAAKc,EAAU,CAC7C,IAAIhB,EAAYJ,EAAI,UACpB,MAAQ,CAACI,EAAU,WAEV,CAACA,EAAU,SACXE,EAAI,YAAYc,EAAU,CAAC,IAAM,IAChCd,EAAI,YAAYF,EAAU,UAAW,CAAC,IAAM,GAC7B,OAAOA,EAAU,OAA9B,UAAuCJ,EAAI,MAAM,QAAUI,EAAU,MACnF,CAGA,SAASiB,EAAcrB,EAAKS,EAAMW,EAAU,CAC1CpB,EAAI,KAAOS,EACXT,EAAI,UAAU,UAAYoB,EAC1BzB,EAAMK,EAAI,MAAOhB,EAAWoC,CAAQ,CACtC,CAEA,SAASE,EAAYtB,EAAKP,EAAM2B,EAAUG,EAAa,CACrD,IAAIC,EAEJ,GAAID,GAAeJ,EAAkBnB,EAAKA,EAAI,UAAU,IAAKoB,CAAQ,EAAG,CAGtE,GAFiB,OAAO3B,GAApB,WAA0BA,EAAO,KAAK,MAAMA,CAAI,GAChDO,EAAI,UAAU,kBAAiBP,EAAOO,EAAI,UAAU,gBAAgB,KAAKA,EAAKP,CAAI,GAClF,CAAC,MAAM,QAAQA,CAAI,GACrB,GAAIO,EAAI,UAAU,QAAU,GAAKA,EAAI,UAAU,QAAU,EAGvDP,EAAOyB,EAASzB,CAAI,EAAI,CAAC,EAAI,CAACA,CAAI,MAGlC,KAAK+B,KAAQ/B,EACX,GAAI,MAAM,QAAQA,EAAK+B,CAAI,CAAC,EAAG,CAC7B/B,EAAOA,EAAK+B,CAAI,EAChB,OAMJ,MAAM,QAAQ/B,CAAI,GAEpB4B,EAAcrB,EAAKP,EAAM2B,GAAYpB,EAAI,UAAU,OAAO,EAG9D,OAAOA,CACT,CAGA,SAASyB,GAAU,CACjB,IAAI,EAAI,KACJzB,EAAM,EAAE,IACR0B,EAAM,EAAE,IACRN,EAAW,EAAE,SACbM,EAAI,SAAW,KACjBJ,EAAYtB,EAAK0B,EAAI,aAAcN,EAAU,EAAK,CAEtD,CAEA,SAASO,EAAM3B,EAAKM,EAAK,CACvB,IAAIoB,EAAM,IAAI,eACd1B,EAAI,UAAU,KAAK,KAAKA,EACJA,EAAI,UAAU,IACdA,EAAI,UAAU,OACdA,EAAI,UAAU,QAAU,GAAKM,EAC7BmB,EAAQ,KAAK,CAAC,IAAKzB,EAAK,IAAK0B,EAAK,SAAUpB,CAAG,CAAC,EAChDoB,CACF,CACpB,CAIA,SAASE,EAAQ5B,EAAKM,EAAKuB,EAAU,CAC/B7B,EAAI,UAAU,KAEZmB,EAAkBnB,EAAKM,EAAKA,CAAG,EAChB,OAAOuB,GAApB,UAAgCA,EAAW,EAE7C7B,EAAI,UAAU,UAAY,WAAW2B,EAAM,KAAK,KAAM3B,EAAKM,CAAG,EAAGuB,CAAQ,EAG1EF,EAAM3B,EAAKM,CAAG,EAMjBP,EAAYC,EAAKA,EAAI,UAAU,MAAM,CAEzC,CAGA,SAAS8B,EAAS9B,EAAK,CACrB,IAAI+B,EAAO/B,EAAI,MAAOG,EAAY4B,EAAK,UAEvC5B,EAAU,OAAOb,CAAc,EAC/Ba,EAAU,OAAOd,CAAU,EAC3BM,EAAMoC,EAAM7C,EAAY,CAAC,CAAC,CAC5B,CAGA,SAAS8C,EAAQhC,EAAKM,EAAKL,EAAQ,CAEjC,OAAAD,EAAI,UAAU,OAASC,GAAU,GAE7BD,EAAI,UAAU,MAAQM,IAExB,aAAaN,EAAI,UAAU,SAAS,EAEpCA,EAAI,UAAU,SAAW,KAEzBA,EAAI,UAAU,QAAU,GACxBA,EAAI,UAAU,IAAMM,GAEhBA,IAAQ,IAAMA,EAAI,OAASN,EAAI,WAEjC8B,EAAS9B,CAAG,EAEVM,EAAI,QAAUN,EAAI,UAEpB4B,EAAQ5B,EAAKM,EAAKN,EAAI,UAAU,QAAQ,GAGrCA,CACT,CAGA,SAASiC,EAASC,EAAG,CACnB,IAAIlC,EAAM,KACNM,EACA4B,EAAE,SAAWlC,EAAI,QAEnBM,EAAMN,EAAI,UAAU,aAAa,KAAKA,EAAKA,EAAI,MAAM,KAAK,EAC1DgC,EAAQhC,EAAKM,CAAG,EAEpB,CAGA,SAAS6B,EAAMC,EAAMlC,EAAOmC,EAAS,CACnC,OAAO9C,EAAE,OAAO,KAAM,CACpB,UAAW6C,EACX,KAAQ,SACR,gBAAiB,QACjB,SAAY,KACZ,GAAM,oBAAsB,KAAK,MAAQ,SAAWC,CACtD,CAAC,CACH,CAGA,SAASC,EAAYC,EAAM,CACzB,OAAOA,EAAK,QAAQ,IAAK,OAAO,EAAE,QAAQ,IAAK,MAAM,EAAE,QAAQ,IAAK,MAAM,CAC5E,CAGA,SAASC,EAASN,EAAG,CACnB,IAAIO,EAAI,KACJC,EAAYD,EAAE,SACdE,EAAYF,EAAE,UACdG,EAAYH,EAAE,SACdV,EACAzB,EACA4B,EAAE,SAAW3C,EAAEmD,CAAQ,IACN,OAAOE,GAAtB,WACFA,EAASV,EAAGS,CAAS,GAGrBZ,EAAOxC,EAAEqD,CAAQ,EAEbb,GAAQA,IAAS,SAAS,gBAE5BzB,EAAM,MAAM,QAAQ4B,EAAE,MAAM,GAAKA,EAAE,OAAO,SAAW,EAAIA,EAAE,OAAO,CAAC,EAAI,KAEvE5B,GAAOqC,GAAarC,EAAMA,EAAIqC,CAAS,EAAIrC,IAAQ,GAE/B,OAAOyB,EAAK,OAA5B,aAEFA,EAAK,MAAQzB,EAETyB,EAAK,WAAaA,EAAK,UAAU,QAEnCA,EAAK,UAAU,OAAOzC,CAAc,GAEb,OAAOyC,EAAK,KAA5B,YACTA,EAAK,IAAMzB,EAGXyB,EAAK,UAAYzB,IAK3B,CAGA,SAASuC,EAAUX,EAAG,CACpB,IAAIO,EAAI,KACJzC,EACA8C,EACAZ,EAAE,SAAW3C,EAAEkD,EAAE,KAAK,IACxBP,EAAE,eAAe,EACjBlC,EAAMyC,EAAE,IAEJzC,EAAI,GAAG,WAAW,SAAW,GAAKA,EAAI,GAAG,aAAa,QAAQ,GAChE8C,EAAW9C,EAAI,SAEfA,EAAI,SAAW,EAEfA,EAAI,SAAS,EACbA,EAAI,SAAW8C,GAEf9C,EAAI,MAAM,EAGhB,CAIA,SAAS+C,EAAMR,EAAMrC,EAAO8C,EAAY,CACtC,IAAIC,EAAa1D,EAAE,aAAa+C,EAAYpC,CAAK,EAAE,KAAK,CAAC,EACrDgD,EAASD,IAAe,GAAK,KAAOD,EAAa,OAAO,IAAMC,EAAY,GAAG,EAAI,OAAO,eAAiBA,EAAa,cAAe,IAAI,EAC7I,OAAOV,EAAK,QAAQW,EAAQ,iBAAiB,CAC/C,CAGA,SAASC,EAAa3C,EAAQ4C,EAAK5B,EAAM6B,EAAOC,EAAM,CACpD,IAAIC,EAAOD,EAAK,KACZE,EAAQF,EAAK,MAEbG,EAAQH,EAAK,OAASA,EAAK,MAE3BI,EAAU,GAAMC,EAAc,CAAC,EAAG9C,EAEtC,GAAIwC,IAAU,GAAKE,GAAQ/B,IAASA,EAAO,KAAK,YAAY+B,EAAO,IAAK,CAAC,IAAM,IAAMA,EAAO,KAAK,YAAY/B,EAAO,IAAK,CAAC,IAAM,EAC9H,OAAOhB,EAGT,GAAI,OAAO4C,CAAG,IAAMA,EACd5B,EACFhB,EAAOgB,CAAI,EAAI4B,EAEf5C,EAAS4C,UAEF,MAAM,QAAQA,CAAG,EAAG,CAC7B,IAAKvC,EAAI,EAAGA,EAAIuC,EAAI,OAAQvC,IAC1B8C,EAAY,KAAKR,EAAa,CAAC,EAAGC,EAAIvC,CAAC,EAAG,GAAIwC,EAAQ,EAAGC,CAAI,CAAC,EAE5D9B,EACFhB,EAAOgB,CAAI,EAAImC,EAEfnD,EAASmD,MAEN,CACL,IAAK9C,KAAKuC,EACRM,EAAU,GACVP,EAAa3C,EAAQ4C,EAAIvC,CAAC,EAAGW,EAAOA,EAAO,IAAMX,EAAIA,EAAGwC,EAAOC,CAAI,EAEjEI,GAAWlC,IAAMhB,EAAOgB,CAAI,EAAI,CAAC,GAGvC,OAAI6B,EAAQ,GAAK7B,IAEXgC,IAAUhC,EAAO,KAAK,YAAYgC,EAAQ,IAAK,CAAC,IAAM,IAAKhD,EAAO,MAAWA,EAAOgB,CAAI,GAExFiC,IAAUjC,EAAO,KAAK,YAAYiC,EAAQ,IAAK,CAAC,IAAM,IAAKjD,EAAO,MAAWA,EAAOgB,CAAI,IAE1F6B,IAAU,IAGRG,GAAS,EAAE,UAAWhD,KAAWA,EAAO,MAAW,MACnDiD,GAAS,EAAE,UAAWjD,KAAWA,EAAO,MAAW,OAElDA,CACT,CAGA,SAASoD,GAAU,CACjB,IAAI,EAAI,KACJ7B,EAAO,EAAE,IAAI,MACb8B,EAAa,EAAE,WACfC,EAAiB,EAAE,aACnBC,EAAiB,EAAE,eACnBC,EAAiB,EAAE,YAEvBjC,EAAK,oBAAoB3C,EAAa4E,CAAW,EACjDjC,EAAK,oBAAoB/C,EAAa6E,CAAU,EAChD9B,EAAK,oBAAoB9C,EAAuB4E,CAAU,EAC1D9B,EAAK,oBAAoB,OAAa8B,CAAU,EAChD9B,EAAK,oBAAoB,QAAa+B,CAAY,EAClD/B,EAAK,oBAAoB,UAAagC,CAAc,CACtD,CAMJ,MAAO,CAGH,KAAM,SAASE,EAAKC,EAAQ5D,EAAK6D,EAAIzC,EAAK,CACxC,IAAI0C,EAAa,mBAAmB9D,CAAG,EACvC,OAAAoB,EAAMA,GAAO,IAAI,eACjBA,EAAI,KAAK,MAAOuC,GAAsB,OAAOC,GAAtB,WAA+BA,EAAOE,CAAU,EAAIA,GAAcF,GAAU,IAAI,EACvGxC,EAAI,OAASyC,EACbzC,EAAI,KAAK,EACFA,CACT,EAGA,aAAc,SAASa,EAAM,CAC3B,OAAoB,OAAOA,GAApB,SAA2BA,EAAK,KAAK,EAAE,YAAY,EAAI,EAChE,EAIA,KAAMJ,EAIN,KAAMd,EAKN,KAAM0B,EAGN,aAAc,SAASR,EAAMrC,EAAOmC,EAAS,CAC3C,IAAIgC,EACJ,OAAInE,EAAM,KAAK,IAAM,KACnBmE,GAAO,GAAK9B,GAAM,MAAM,KAAK,EAC7B8B,EAAI,CAAC,EAAItB,EAAMsB,EAAI,CAAC,EAAGnE,CAAK,EAC5BqC,EAAO8B,EAAI,KAAK,KAAK,GAEhBlC,EAAM,KAAK,KAAMI,EAAMrC,EAAOmC,CAAO,CAC9C,EAGA,YAAa,SAASE,EAAMrC,EAAOmC,EAAS,CAC1C,OAAOF,EAAM,KAAK,KAAMjC,EAAM,KAAK,IAAM,GAAK,GAAKqC,EAAOQ,EAAM,GAAKR,EAAMrC,CAAK,EAAGA,EAAOmC,CAAO,CACnG,EAGA,eAAgB,SAASE,EAAMrC,EAAOmC,EAAS,CAC7C,OAAOF,EAAM,KAAK,KAAMjC,EAAM,KAAK,IAAM,GAAK,GAAKqC,EAAOQ,EAAM,GAAKR,EAAMrC,EAAO,EAAI,EAAGA,EAAOmC,CAAO,CACzG,EAGA,UAAW,SAASE,EAAMrC,EAAOmC,EAAS,CACxC,IAAIgC,EAAKC,EAAQpE,EAAM,MAAM,KAAK,EAAGW,EACrC,GAAIX,EAAM,KAAK,IAAM,GAAI,CAKvB,IAFAmE,GAAO,GAAK9B,GAAM,MAAM,GAAG,EAEtB1B,EAAI,EAAGA,EAAIyD,EAAM,OAAQzD,IAE5BwD,EAAI,CAAC,EAAItB,EAAMsB,EAAI,CAAC,EAAGC,EAAMzD,CAAC,CAAC,EAEjC0B,EAAO8B,EAAI,KAAK,GAAG,EAErB,OAAOlC,EAAM,KAAK,KAAMI,EAAMrC,EAAOmC,CAAO,CAC9C,EAGA,OAAQ,SAASkC,EAAQC,EAAUlB,EAAM,CACvCA,EAAK,KAAOA,EAAK,MAAQ,KAAK,aAC9B,IAAItD,EAAM,IAAI,YAAYuE,EAAQjB,CAAI,EACtC,OAAAtD,EAAI,UAAYwE,GAAY,CAAC,EAEzB,CAACxE,EAAI,UAAU,KAAuB,OAAOA,EAAI,UAAU,SAArC,cACxBA,EAAI,UAAU,QAAU,IAE1BA,EAAI,UAAU,KAAOA,EAAI,UAAU,MAAQ,KAAK,KAChDA,EAAI,UAAU,aAAeA,EAAI,UAAU,cAAgB,KAAK,aACzDA,CACT,EAGA,OAAQ,SAASA,EAAK,CACpB,IAAI+B,EAAO/B,EAAI,MACX6D,EAAa/C,EAAO,KAAKd,CAAG,EAC5B+D,EAAiB/C,EAAW,KAAKhB,CAAG,EACpC8D,EAAiB7B,EAAS,KAAKjC,CAAG,EAClCgE,EAAiB/C,EAAQ,KAAKjB,CAAG,EACjCyE,EAAiBb,EAAQ,KAAK,CAAC,IAAK5D,EACL,WAAgB6D,EAChB,aAAgBC,EAChB,eAAgBC,EAChB,YAAgBC,CACjB,CAAC,EAC/BU,EAAS,CACP,QAAWX,EACX,MAAWD,CACb,EACJ,OAAAY,EAAO,KAAUA,EAAOzF,CAAoB,EAAIyF,EAAO1F,CAAS,EAAI6E,EACpEa,EAAOtF,CAAW,EAAI4E,EACtBzE,EAAE,KAAKwC,EAAM2C,CAAM,EAEnB1E,EAAI,UAAU,OAASyE,EAEnBzE,EAAI,UAAU,SAAWA,EAAI,UAAU,SAAW+B,EAAK,QAAU,MACnE/B,EAAI,UAAU,IAAMA,EAAI,UAAU,aAAa,KAAKA,EAAK+B,EAAK,KAAK,EACnEH,EAAQ5B,EAAKA,EAAI,UAAU,GAAG,GAEzBA,CACT,EAGA,OAAQ,SAASA,EAAKwD,EAAOvD,EAAQ,CACnC,OAAAD,EAAI,MAAM,MAAQwD,EACXxB,EAAQhC,EAAKwD,EAAOvD,CAAM,CACnC,EAKA,WAAY,SAASD,EAAK2E,EAAaC,EAAYrD,EAAa,CAC9D,OAAOD,EAAYtB,EAAK2E,EAAaC,EAAYrD,CAAW,CAC9D,EAGA,MAAO,SAASgD,EAAQC,EAAUlB,EAAM,CACtC,OAAO,KAAK,OAAO,KAAK,OAAOiB,EAAQC,EAAUlB,CAAI,CAAC,CACxD,EAGA,OAAQ,SAAStD,EAAK,CAEpB,oBAAaA,EAAI,UAAU,SAAS,EAChCA,EAAI,UAAU,SAChBA,EAAI,UAAU,OAAO,EACrB,OAAOA,EAAI,UAAU,QAEhBA,CACT,EAIA,cAAe,SAAS0C,EAAUC,EAAWC,EAAU,CACrD,OAAOJ,EAAS,KAAK,CAAC,SAAUE,EAAU,UAAWC,EAAW,SAAUpD,EAAEqD,CAAQ,GAAKA,CAAQ,CAAC,CACpG,EAKA,cAAe,SAASiC,EAAK5E,EAAQ6E,EAAU,CAE7C,OAAA7E,EAAuB,OAAOA,GAArB,UAA8BA,EAAS,GAChD6E,EAAWA,GAAY,SAAS,KAChCA,EAAS,iBAAiB5F,EAAY2F,CAAG,EACrC5E,GAAQ6E,EAAS,iBAAiB3F,EAAa0F,CAAG,EAC/CA,CACT,EAGA,UAAW,SAASnC,EAAUC,EAAWC,EAAU3C,EAAQ,CACzD,IAAI8E,EAAWxF,EAAEmD,CAAQ,EACzB,OAAO,KAAK,cAAc,KAAK,cAAcqC,GAAYrC,EAAUC,EAAWC,CAAQ,EAAG3C,EAAQ8E,CAAQ,CAC3G,EAKA,cAAe,SAASF,EAAKC,EAAU,CACrC,OAAAA,EAAWA,GAAY,SAAS,KAChCA,EAAS,oBAAoB3F,EAAa0F,CAAG,EAC7CC,EAAS,oBAAoB5F,EAAY2F,CAAG,EACrCA,CACT,EAGA,eAAgB,SAASG,EAAOhF,EAAK,CACnC,OAAO6C,EAAU,KAAK,CAAC,MAAOmC,EAAO,IAAMhF,CAAG,CAAC,CACjD,EAIA,eAAgB,SAAS6E,EAAKC,EAAU,CACtC,OAAAA,EAAWA,GAAY,SAAS,KAChCA,EAAS,iBAAiB,QAASD,CAAG,EAC/BA,CACT,EAGA,WAAY,SAASG,EAAOhF,EAAK,CAC/B,IAAIiF,EAAQ1F,EAAEyF,CAAK,EACnB,OAAO,KAAK,eAAe,KAAK,eAAeC,GAASD,EAAOhF,CAAG,EAAGiF,CAAK,CAC5E,EAKA,eAAgB,SAASJ,EAAKC,EAAU,CACtC,OAAAA,EAAWA,GAAY,SAAS,KAChCA,EAAS,oBAAoB,QAASD,CAAG,EAClCA,CACT,EAKA,eAAgB,SAASpF,EAAMS,EAAO,CACpC,OAAO,YAAY,gBAAgBT,EAAK,MAAOS,CAAK,CACtD,EAKA,iBAAkB,SAAST,EAAMS,EAAO,CACtC,OAAO,YAAY,kBAAkBT,EAAK,MAAOS,CAAK,CACxD,EAGA,UAAW,SAASgF,EAAOC,EAAQ,CACjC,MAAO,EACT,EAKA,YAAa,SAAS1F,EAAMS,EAAO,CACjC,IAAIoE,EAAQpE,EAAM,MAAM,KAAK,EAAGM,EAAS,GAAMK,EAG/C,IAFApB,EAAO,IAAMA,EAERoB,EAAI,EAAGL,GAAUK,EAAIyD,EAAM,OAAQzD,IAEtCL,EAAS,YAAY,gBAAgBf,EAAM,IAAM6E,EAAMzD,CAAC,CAAC,EAE3D,OAAOL,CACT,EAMA,YAAa,SAASf,EAAM,CAE1B,OAAO0D,EAAa,CAAC,EAAG1D,EAAM,GAAI,EAAG,IAAI,CAC3C,CACJ,CACJ,EAAE,EAGE,OAAOZ,GAAW,UAAYA,EAAO,UACrCA,EAAO,QAAUC,IAIjB,OAAO,MAAS,cAChB,KAAK,gBAAkBA,MCjsB3B,IAAAsG,GAAwB,SACxBC,GAA4B,SCF5B,IACEC,EAAO,gBACPC,EAAoB,CAACC,EAAWC,EAAaC,IAAS,CACpD,GAAID,GAAe,KAAM,OAAO,KAChC,GAAmB,OAAOD,EAAUC,CAAW,GAA3C,WAA8C,MAAM,IAAI,MAAM,WAAaC,EAAO,aAAeD,CAAW,EAChH,OAAOD,EAAUC,CAAW,CAC9B,EAEAE,GAAiB,CAACC,EAAYC,EAAcC,IAAgB,CAC1D,IAAIC,EAAK,KAAMC,EACf,OAAIH,IACFE,EAAK,IAAI,OAAO,OAASF,EAAe,QAAQ,EAChDG,EAAYH,EAAa,CAAC,EACtBA,EAAa,CAAC,IAAM,MAAKG,GAAa,MAErC,SAASC,EAAM,CACpB,IAAIC,EAAgBJ,EAAcG,EAAK,MAAM,UAAU,EAAGA,EAAK,MAAM,YAAY,GAAG,CAAC,EAAIA,EAAK,MAC1FE,EAAcJ,EAAK,KAAK,MAAM,MAAM,MAAMA,CAAE,EAAE,CAAC,EAAIG,EAAgBF,EAAYE,EAC/EN,EACDA,EAAY,KAAK,KAAMO,CAAW,EAEnC,KAAK,MAAM,MAAQA,CAEvB,CACF,EAGAC,GAAc,CAACC,EAASC,EAAeP,EAAID,KACpCO,IACCP,EACFO,EAAUf,EAAK,YACNgB,EACTD,EAAUf,EAAK,eACNS,IACTM,EAAUf,EAAK,eAGdS,EACE,SAASQ,EAAMC,EAAKC,EAAS,CAClC,OAAQJ,EAAS,KAAK,KAAME,EAAMC,EAAI,MAAMT,CAAE,EAAE,CAAC,EAAGU,CAAO,CAC7D,EAHgBJ,GAMlBK,GAAgB,CAACC,EAAWL,EAAeP,EAAIa,EAAkBd,IAAgB,CAM/E,GAAI,CAACC,GAAM,CAACa,EAAkB,OAAOD,EACrC,IAAIE,EAAkBF,EAChBG,EAAM,YACZ,GAAIR,EACF,GAAIR,EAGFe,EAAkB,SAASE,EAAUC,EAAW,CAC9C,OAAOF,EAAI,kBAAkBC,EAAUC,CAAS,GACzCF,EAAI,kBAAkBC,EAAS,UAAUA,EAAS,YAAY,GAAG,EAAI,CAAC,EAAGC,CAAS,CAC3F,MACK,CACL,GAAI,CAACjB,EAAI,OAAOT,EAAK,iBACrBuB,EAAkBC,EAAI,0BAEf,CAACH,GACEA,IAAcrB,EAAK,gBACnBqB,IAAcG,EAAI,gBAAiB,CAC/C,GAAI,CAACf,EAAI,OAAOT,EAAK,eACrBuB,EAAkBC,EAAI,gBAExB,OAAO,SAASG,EAAKT,EAAK,CAExB,IAAMQ,EAAYjB,EAAKS,EAAI,MAAMT,CAAE,EAAE,CAAC,EAAIS,EAE1C,OAAIT,GAAM,KAAK,SAAW,GAAKiB,EAAU,UAAU,EAAE,OAAS,KAAK,SAAiB,GAC5EH,EAAiB,KAAK,KAAOD,EAAyBK,EAAI,MAAVA,EAAiBD,CAAS,CACpF,CACF,EAEAE,GAAc,CAACC,EAASC,EAAWC,EAAWC,EAAWxB,IAAgB,CAEzE,IAAIyB,EAAgB,KAClB,GAAIF,GAAaC,EACfC,EACE,SAASC,EAAKC,EAAQ,CACpB,MAAO,CACL,OAAQD,EAAIH,GAAaD,CAAS,GAAK,IAAI,QAAQ,MAAO,MAAM,GACxDE,EAAY,OAASE,EAAIF,CAAS,GAAK,IAAM,IACrD,OAAQE,EAAIJ,CAAS,GAAK,KAClBtB,EAAc,KAAO0B,EAAIF,CAAS,GAAK,IAAI,QAAQ,IAAK,GAAG,EAAI,GACzE,CACF,UACOF,EACTG,EAAgB,SAASC,EAAKC,EAAQ,CAAE,OAAOD,EAAIJ,CAAS,GAAK,EAAI,MAErE,QAAOD,EAET,OAAKA,EAEE,SAASK,EAAKE,EAAO,CAAE,OAAQP,EAAS,KAAK,KAAMI,EAAcC,EAAKE,CAAK,EAAGA,CAAK,CAAG,EAFxEH,CAGvB,EAEAI,GAAsB,CAACC,EAAiB/B,IAAiB,CACvD,GAAI,CAACA,EAAc,OAAO+B,EAG1B,IAAMC,EAAM,IAAI,OAAO,IAAMhC,EAAe,QAAQ,EAClDiC,EAAM,IAAI,OAAO,KAAOjC,EAAe,KAAK,EAE9C,OAAO,SAASW,EAAK,CACnB,IAAIuB,EAAUvB,EAAI,QAAQqB,EAAK,EAAE,EAAE,MAAMC,CAAG,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EACpE,OAAOF,EAAmBA,EAAiB,KAAK,KAAMG,CAAO,EAAIA,CACnE,CACF,EAEAC,GAAoB,CAACC,EAAMzC,EAAW0C,IAAoB,CACxDA,EAAkBA,GAAmB,CAAC,EACtC1C,EAAYA,GAAa,CAAC,EAC1B,IAAM2C,EAAIF,EAAK,aAAa,KAAKA,CAAI,EACnCG,EAAI,SAASC,GAAM,CAAE,OAAOF,EAAEE,EAAI,GAAKH,EAAgBG,EAAI,CAAE,EAC7DC,EAAOF,EAAE,MAAM,EACfG,EAASH,EAAE,QAAQ,EACnBI,EAAYJ,EAAE,WAAW,EACzBK,EAAWL,EAAE,UAAU,EACvBM,EAAYN,EAAE,WAAW,EACzBO,EAAeP,EAAE,cAAc,EAC/BQ,EAAkBR,EAAE,iBAAiB,EACrCnC,EAAOmC,EAAE,MAAM,EACfS,EAAWT,EAAE,UAAU,EACvBU,EAAQV,EAAE,OAAO,EACjBtC,EAAcsC,EAAE,aAAa,EAC7BW,EAAOX,EAAE,MAAM,EACfY,EAASZ,EAAE,QAAQ,EACnBa,EAAWb,EAAE,UAAU,EACvBc,EAAQd,EAAE,OAAO,EACjBe,EAAQf,EAAE,OAAO,EACjBgB,EAAOhB,EAAE,MAAM,EACfiB,EAAUjB,EAAE,SAAS,EACrBkB,EAAYlB,EAAE,WAAW,EACzBmB,EAAWnB,EAAE,UAAU,EACvBoB,EAAWpB,EAAE,UAAU,EACvBqB,EAAWrB,EAAE,UAAU,EACvBsB,EAAStB,EAAE,QAAQ,EACnBuB,EAAUvB,EAAE,SAAS,EACrBwB,EAAOxB,EAAE,MAAM,EACfyB,EAAkBzB,EAAE,iBAAiB,EACrC0B,EAAkB1B,EAAE,iBAAiB,EACrC2B,EAAiB3B,EAAE,gBAAgB,EACnC4B,EAAQ5B,EAAE,OAAO,EACjB6B,EAAM7B,EAAE,KAAK,EACb8B,EAAS9B,EAAE,QAAQ,EAEnBR,EAAkBrC,EAAkBC,EAAWmD,EAAc,cAAc,EAC3ExB,EAAU5B,EAAkBC,EAAWS,EAAM,MAAM,EACnDU,EAAYpB,EAAkBC,EAAWwD,EAAQ,QAAQ,EACzD3C,EAAUd,EAAkBC,EAAWuD,EAAM,MAAM,EACnDnD,EAAaL,EAAkBC,EAAWmE,EAAS,SAAS,EAC5DrD,EAAiBK,IAAc,YAAY,mBAAqBA,IAAcrB,EAAK,iBACnF6E,EAAiBrE,IAAgB,QAAUA,IAAgB,GAE7D,GAAImD,IAAa,OAAW,MAAM,IAAI,MAAM,6BAA6B,EAEzE,IAAImB,EAAO,CAAC,EAAGC,EAAkB,CAAC,EAAGxE,EAAe,KAAMG,EAAY,KAAMD,EAAK,KAQjF,GANIkE,IAAKG,EAAK,IAASH,GACnBC,IAAQE,EAAK,OAA2B,OAAO5E,EAAU0E,CAAM,GAAtC,WAA0C1E,EAAU0E,CAAM,EAAIA,GACvFb,IAASe,EAAK,QAAcf,IAAY,QAAUA,IAAY,IAC9DK,IAAQU,EAAK,OAAaV,IAAW,QAAUA,IAAW,IAC1Db,IAAUuB,EAAK,SAAc,OAAOvB,CAAQ,GAC5CM,IAAOiB,EAAK,MAAW,OAAOjB,CAAK,GACnC,CAACa,GAASlB,EAAO,MAAM,IAAI,MAAM,oCAAoC,EACzE,GAAI,CAACkB,GAASd,EAAO,MAAM,IAAI,MAAM,oCAAoC,EACzE,GAAIiB,GAAiB,CAACrB,EAAO,MAAM,IAAI,MAAM,uGAAuG,EAChJF,IAAiBwB,EAAK,gBAAqB7E,EAAkBC,EAAWoD,EAAiB,iBAAiB,GAC1GN,IAAM8B,EAAK,KAAU7E,EAAkBC,EAAW8C,EAAM,MAAM,GAC9DmB,GAAYA,IAAa,UAC3B5D,EAAgB4D,IAAa,QAAUA,IAAa,GAAO,IAAMA,EACjEzD,EAAayC,GAAYA,IAAa,QAAU,GAAK,KAAO5C,EAAe,UAC3EE,EAAK,IAAI,OAAO,KAAOF,EAAe,KAAOG,EAAY,GAAG,GAG9D,IAAMsE,EAAsB3C,GAAoBC,EAAiB/B,CAAY,EAC3E0E,GAAgB7D,GAAcC,EAAWL,EAAeP,EAAImD,GAASJ,EAAOqB,CAAa,EACzFK,GAAcpE,GAAYC,EAASC,EAAeP,EAAIoE,CAAa,EAEjEG,IAAqBF,EAAK,aAAkBE,GAC5CC,KAAeF,EAAgB,OAAYE,IAC3CC,KAAaH,EAAgB,KAAUG,IAEvChB,IAAUa,EAAgB,SAAc,OAAOb,CAAQ,GACvDD,IAAUc,EAAgB,SAAc,OAAOd,CAAQ,GACvDf,IAAW6B,EAAgB,UAAgB7B,IAAc,QAAUA,IAAc,IACjFE,IAAW2B,EAAgB,UAAe9E,EAAkBC,EAAWkD,EAAW,WAAW,IAC7FiB,GAAW9D,GAAgBsE,KAC7BE,EAAgB,QAAa1E,GAAeC,EAAYC,EAAcsE,CAAa,IAEjFH,GAAS/D,KACXoE,EAAgB,KAAUnD,GAAYC,EAAS6C,EAAOd,EAAOJ,EAAOqB,CAAa,GAE/Ef,IAIFiB,EAAgB,MAA0B,OAAO7E,EAAU4D,CAAI,GAApC,WAAwC5D,EAAU4D,CAAI,EAAE,EAAI5D,EAAU4D,CAAI,IAAMA,GAEzGE,IAAWe,EAAgB,UAAef,GAC1CO,IAAiBQ,EAAgB,gBAAqBR,GACtDE,IAAiBM,EAAgB,eAAqBN,GACtDD,IAAiBO,EAAgB,gBAAqBP,GACtDF,IAAS,SAAWA,IAAS,GAC/BS,EAAgB,KAAU,GACjBT,IACTS,EAAgB,KAAU7E,EAAUoE,CAAI,GAAKA,GAG/C,IAAMa,EAAcnF,EAAK,MAAM,IAAM2D,EACnCmB,EACAC,CACF,EAEA,OAAI9B,GAAUA,IAAW,UACvB/C,EAAU+C,IAAW,QAAUA,IAAW,GAAO,OAASU,EAAWV,CAAM,EAAIkC,GAG7EhC,GAAYA,IAAa,SAC3BnD,EAAK,WACH,KAAOmD,IAAa,QAAUA,IAAa,GAAO,WAAaQ,EAAWR,GACxEgC,CAAW,EAGVA,CACT,EAEKC,GAAQ1C,GC3Of,IAAM2C,GAAiBC,GAAS,CAC5B,IAAMC,EAAID,EAAK,aAAa,KAAKA,CAAI,EACnCE,EAAYD,EAAE,WAAW,EACzBE,EAAQF,EAAE,OAAO,EACjBG,EAAcH,EAAE,aAAa,EAC7BI,EAASJ,EAAE,QAAQ,EACrB,GAAIE,GAAS,KAAM,MAAM,IAAI,MAAM,0BAA0B,EAC7D,GAAIE,GAAU,MAAQD,GAAe,KAAM,MAAM,IAAI,MAAM,0CAA0C,EACrG,gBAAgB,UAAU,IAAMD,EAAOD,EAAWE,EAAc,IAAMA,EAAcC,CAAM,CAC9F,EAEOC,GAAQP",
"names": ["require_awesomplete", "__commonJSMin", "exports", "module", "_", "input", "o", "me", "$", "configure", "evt", "c", "li", "list", "items", "slice", "el", "text", "value", "label", "parentNode", "indexOfAwesomplete", "count", "pos", "lis", "selected", "origin", "originalEvent", "suggestion", "allowed", "item", "Suggestion", "index", "a", "b", "item_id", "html", "data", "instance", "properties", "i", "initial", "attrValue", "expr", "con", "$$", "tag", "element", "val", "ref", "event", "callback", "target", "type", "j", "s", "init", "require_awesomplete_util", "__commonJSMin", "exports", "module", "AwesompleteUtil", "_AWE", "_AWE_LOAD", "_AWE_SELECT_COMPLETE", "_AWE_MATCH", "_AWE_PREPOP", "_AWE_SELECT", "_CLS_FOUND", "_CLS_NOT_FOUND", "$", "_suggestion", "data", "lv", "_fire", "target", "name", "detail", "_matchValue", "awe", "prepop", "input", "classList", "utilprops", "selected", "val", "opened", "result", "list", "suggestion", "fake", "rec", "j", "_match", "ev", "_onKeydown", "_select", "_isEmpty", "_ifNeedListUpdate", "queryVal", "_loadComplete", "_updateList", "forceUpdate", "prop", "_onLoad", "xhr", "_ajax", "_lookup", "debounce", "_restart", "elem", "_update", "_onInput", "e", "_item", "html", "item_id", "_htmlEscape", "text", "_copyFun", "t", "sourceId", "dataField", "targetId", "_clickFun", "minChars", "_mark", "startsWith", "searchText", "regExp", "_jsonFlatten", "cur", "level", "opts", "root", "value", "label", "isEmpty", "arrayResult", "_detach", "boundMatch", "boundOnInput", "boundOnKeydown", "boundSelect", "url", "urlEnd", "fn", "encodedVal", "arr", "words", "elemId", "utilOpts", "boundDetach", "events", "queryResult", "queryValue", "fun", "listenEl", "sourceEl", "btnId", "btnEl", "_data", "_input", "import_awesomplete", "import_awesomplete_util", "UTIL", "getCustomFunction", "customCtx", "lookupValue", "name", "makeReplaceFun", "replaceFun", "multipleChar", "descrSearch", "re", "separator", "data", "selectedValue", "replaceText", "makeItemFun", "itemFun", "filterAtStart", "text", "inp", "item_id", "makeFilterFun", "filterFun", "labelOrDescrAttr", "applyThisFilter", "AWE", "datValue", "inputPart", "dat", "makeDataFun", "dataFun", "valueAttr", "labelAttr", "descrAttr", "resultDataFun", "rec", "_input", "input", "makeConvertInputFun", "convertInputFun", "rem", "rel", "convInp", "attachAwesomplete", "node", "defaultSettings", "b", "a", "attr", "ajax", "assign", "autoFirst", "combobox", "container", "convertInput", "convertResponse", "debounce", "descr", "item", "filter", "forField", "label", "limit", "list", "loadall", "listLabel", "maxItems", "minChars", "multiple", "prepop", "replace", "sort", "statusNoResults", "statusTypeXChar", "statusXResults", "value", "url", "urlEnd", "isDescrSearch", "opts", "awesompleteOpts", "madeConvertInputFun", "madeFilterFun", "madeItemFun", "aweInstance", "attach_awesomplete_default", "copyValueToId", "node", "a", "dataField", "field", "targetField", "target", "copy_value_to_id_default"]
}