'), d = this.input.getAttribute("class") || "", u = n.mode
var p
if (H(r, n.wrapperClass, d, u), H(l, n.controlClass), lt(r, l), H(a, n.dropdownClass, u), n.copyClassesToDropdown && H(a, d), H(c, n.dropdownContentClass), lt(a, c), $(n.dropdownParent || r).appendChild(a), j(n.controlInput)) {
p = $(n.controlInput)
E(["autocorrect", "autocapitalize", "autocomplete"], (t => { s.getAttribute(t) && Q(p, { [t]: s.getAttribute(t) }) })), p.tabIndex = -1, l.appendChild(p), this.focus_node = p
} else n.controlInput ? (p = $(n.controlInput), this.focus_node = p) : (p = $("
"), this.focus_node = l)
this.wrapper = r, this.dropdown = a, this.dropdown_content = c, this.control = l, this.control_input = p, this.setup()
} setup() {
const t = this, e = t.settings, i = t.control_input, s = t.dropdown, n = t.dropdown_content, o = t.wrapper, l = t.control, a = t.input, c = t.focus_node, d = { passive: !0 }, u = t.inputId + "-ts-dropdown"
Q(n, { id: u }), Q(c, { role: "combobox", "aria-haspopup": "listbox", "aria-expanded": "false", "aria-controls": u })
const p = ot(c, t.inputId + "-ts-control"), h = "label[for='" + (t => t.replace(/['"\\]/g, "\\$&"))(t.inputId) + "']", g = document.querySelector(h), f = t.focus.bind(t)
if (g) {
st(g, "click", f), Q(g, { for: p })
const e = ot(g, t.inputId + "-ts-label")
Q(c, { "aria-labelledby": e }), Q(n, { "aria-labelledby": e })
} if (o.style.width = a.style.width, t.plugins.names.length) {
const e = "plugin-" + t.plugins.names.join(" plugin-")
H([o, s], e)
} (null === e.maxItems || e.maxItems > 1) && t.is_select_tag && Q(a, { multiple: "multiple" }), e.placeholder && Q(i, { placeholder: e.placeholder }), !e.splitOn && e.delimiter && (e.splitOn = new RegExp("\\s*" + r(e.delimiter) + "+\\s*")), e.load && e.loadThrottle && (e.load = tt(e.load, e.loadThrottle)), t.control_input.type = a.type, st(s, "mousemove", (() => { t.ignoreHover = !1 })), st(s, "mouseenter", (e => {
var i = z(e.target, "[data-selectable]", s)
i && t.onOptionHover(e, i)
}), { capture: !0 }), st(s, "click", (e => {
const i = z(e.target, "[data-selectable]")
i && (t.onOptionSelect(e, i), it(e, !0))
})), st(l, "click", (e => {
var s = z(e.target, "[data-ts-item]", l)
s && t.onItemSelect(e, s) ? it(e, !0) : "" == i.value && (t.onClick(), it(e, !0))
})), st(c, "keydown", (e => t.onKeyDown(e))), st(i, "keypress", (e => t.onKeyPress(e))), st(i, "input", (e => t.onInput(e))), st(c, "blur", (e => t.onBlur(e))), st(c, "focus", (e => t.onFocus(e))), st(i, "paste", (e => t.onPaste(e)))
const v = e => {
const n = e.composedPath()[0]
if (!o.contains(n) && !s.contains(n)) return t.isFocused && t.blur(), void t.inputState()
n == i && t.isOpen ? e.stopPropagation() : it(e, !0)
}, m = () => { t.isOpen && t.positionDropdown() }
st(document, "mousedown", v), st(window, "scroll", m, d), st(window, "resize", m, d), this._destroy = () => { document.removeEventListener("mousedown", v), window.removeEventListener("scroll", m), window.removeEventListener("resize", m), g && g.removeEventListener("click", f) }, this.revertSettings = { innerHTML: a.innerHTML, tabIndex: a.tabIndex }, a.tabIndex = -1, a.insertAdjacentElement("afterend", t.wrapper), t.sync(!1), e.items = [], delete e.optgroups, delete e.options, st(a, "invalid", (() => { t.isValid && (t.isValid = !1, t.isInvalid = !0, t.refreshState()) })), t.updateOriginalInput(), t.refreshItems(), t.close(!1), t.inputState(), t.isSetup = !0, a.disabled ? t.disable() : t.enable(), t.on("change", this.onChange), H(a, "tomselected", "ts-hidden-accessible"), t.trigger("initialize"), !0 === e.preload && t.preload()
} setupOptions(t = [], e = []) { this.addOptions(t), E(e, (t => { this.registerOptionGroup(t) })) } setupTemplates() {
var t = this, e = t.settings.labelField, i = t.settings.optgroupLabelField, s = {
optgroup: t => {
let e = document.createElement("div")
return e.className = "optgroup", e.appendChild(t.options), e
}, optgroup_header: (t, e) => '", option: (t, i) => "
" + i(t[e]) + "
", item: (t, i) => "
" + i(t[e]) + "
", option_create: (t, e) => '
Add ' + e(t.input) + "…
", no_results: () => '
No results found
', loading: () => '
', not_loading: () => { }, dropdown: () => "
"
}
t.settings.render = Object.assign({}, s, t.settings.render)
} setupCallbacks() {
var t, e, i = { initialize: "onInitialize", change: "onChange", item_add: "onItemAdd", item_remove: "onItemRemove", item_select: "onItemSelect", clear: "onClear", option_add: "onOptionAdd", option_remove: "onOptionRemove", option_clear: "onOptionClear", optgroup_add: "onOptionGroupAdd", optgroup_remove: "onOptionGroupRemove", optgroup_clear: "onOptionGroupClear", dropdown_open: "onDropdownOpen", dropdown_close: "onDropdownClose", type: "onType", load: "onLoad", focus: "onFocus", blur: "onBlur" }
for (t in i) (e = this.settings[i[t]]) && this.on(t, e)
} sync(t = !0) {
const e = this, i = t ? at(e.input, { delimiter: e.settings.delimiter }) : e.settings
e.setupOptions(i.options, i.optgroups), e.setValue(i.items || [], !0), e.lastQuery = null
} onClick() {
var t = this
if (t.activeItems.length > 0) return t.clearActiveItems(), void t.focus()
t.isFocused && t.isOpen ? t.blur() : t.focus()
} onMouseDown() { } onChange() { q(this.input, "input"), q(this.input, "change") } onPaste(t) {
var e = this
e.isInputHidden || e.isLocked ? it(t) : e.settings.splitOn && setTimeout((() => {
var t = e.inputValue()
if (t.match(e.settings.splitOn)) {
var i = t.trim().split(e.settings.splitOn)
E(i, (t => { X(t) && (this.options[t] ? e.addItem(t) : e.createItem(t)) }))
}
}), 0)
} onKeyPress(t) {
var e = this
if (!e.isLocked) {
var i = String.fromCharCode(t.keyCode || t.which)
return e.settings.create && "multi" === e.settings.mode && i === e.settings.delimiter ? (e.createItem(), void it(t)) : void 0
} it(t)
} onKeyDown(t) {
var e = this
if (e.ignoreHover = !0, e.isLocked) 9 !== t.keyCode && it(t)
else {
switch (t.keyCode) {
case 65: if (nt(U, t) && "" == e.control_input.value) return it(t), void e.selectAll()
break
case 27: return e.isOpen && (it(t, !0), e.close()), void e.clearActiveItems()
case 40: if (!e.isOpen && e.hasOptions) e.open()
else if (e.activeOption) {
let t = e.getAdjacent(e.activeOption, 1)
t && e.setActiveOption(t)
} return void it(t)
case 38: if (e.activeOption) {
let t = e.getAdjacent(e.activeOption, -1)
t && e.setActiveOption(t)
} return void it(t)
case 13: return void (e.canSelect(e.activeOption) ? (e.onOptionSelect(t, e.activeOption), it(t)) : (e.settings.create && e.createItem() || document.activeElement == e.control_input && e.isOpen) && it(t))
case 37: return void e.advanceSelection(-1, t)
case 39: return void e.advanceSelection(1, t)
case 9: return void (e.settings.selectOnTab && (e.canSelect(e.activeOption) && (e.onOptionSelect(t, e.activeOption), it(t)), e.settings.create && e.createItem() && it(t)))
case 8: case 46: return void e.deleteSelection(t)
}e.isInputHidden && !nt(U, t) && it(t)
}
} onInput(t) {
var e = this
if (!e.isLocked) {
var i = e.inputValue()
e.lastValue !== i && (e.lastValue = i, e.settings.shouldLoad.call(e, i) && e.load(i), e.refreshOptions(), e.trigger("type", i))
}
} onOptionHover(t, e) { this.ignoreHover || this.setActiveOption(e, !1) } onFocus(t) {
var e = this, i = e.isFocused
if (e.isDisabled) return e.blur(), void it(t)
e.ignoreFocus || (e.isFocused = !0, "focus" === e.settings.preload && e.preload(), i || e.trigger("focus"), e.activeItems.length || (e.showInput(), e.refreshOptions(!!e.settings.openOnFocus)), e.refreshState())
} onBlur(t) {
if (!1 !== document.hasFocus()) {
var e = this
if (e.isFocused) {
e.isFocused = !1, e.ignoreFocus = !1
var i = () => { e.close(), e.setActiveItem(), e.setCaret(e.items.length), e.trigger("blur") }
e.settings.create && e.settings.createOnBlur ? e.createItem(null, i) : i()
}
}
} onOptionSelect(t, e) {
var i, s = this
e.parentElement && e.parentElement.matches("[data-disabled]") || (e.classList.contains("create") ? s.createItem(null, (() => { s.settings.closeAfterSelect && s.close() })) : void 0 !== (i = e.dataset.value) && (s.lastQuery = null, s.addItem(i), s.settings.closeAfterSelect && s.close(), !s.settings.hideSelected && t.type && /click/.test(t.type) && s.setActiveOption(e)))
} canSelect(t) { return !!(this.isOpen && t && this.dropdown_content.contains(t)) } onItemSelect(t, e) {
var i = this
return !i.isLocked && "multi" === i.settings.mode && (it(t), i.setActiveItem(e, t), !0)
} canLoad(t) { return !!this.settings.load && !this.loadedSearches.hasOwnProperty(t) } load(t) {
const e = this
if (!e.canLoad(t)) return
H(e.wrapper, e.settings.loadingClass), e.loading++
const i = e.loadCallback.bind(e)
e.settings.load.call(e, t, i)
} loadCallback(t, e) {
const i = this
i.loading = Math.max(i.loading - 1, 0), i.lastQuery = null, i.clearActiveOption(), i.setupOptions(t, e), i.refreshOptions(i.isFocused && !i.isInputHidden), i.loading || N(i.wrapper, i.settings.loadingClass), i.trigger("load", t, e)
} preload() {
var t = this.wrapper.classList
t.contains("preloaded") || (t.add("preloaded"), this.load(""))
} setTextboxValue(t = "") {
var e = this.control_input
e.value !== t && (e.value = t, q(e, "update"), this.lastValue = t)
} getValue() { return this.is_select_tag && this.input.hasAttribute("multiple") ? this.items : this.items.join(this.settings.delimiter) } setValue(t, e) { et(this, e ? [] : ["change"], (() => { this.clear(e), this.addItems(t, e) })) } setMaxItems(t) { 0 === t && (t = null), this.settings.maxItems = t, this.refreshState() } setActiveItem(t, e) {
var i, s, n, o, r, l, a = this
if ("single" !== a.settings.mode) {
if (!t) return a.clearActiveItems(), void (a.isFocused && a.showInput())
if ("click" === (i = e && e.type.toLowerCase()) && nt("shiftKey", e) && a.activeItems.length) {
for (l = a.getLastActive(), (n = Array.prototype.indexOf.call(a.control.children, l)) > (o = Array.prototype.indexOf.call(a.control.children, t)) && (r = n, n = o, o = r), s = n; s <= o; s++)t = a.control.children[s], -1 === a.activeItems.indexOf(t) && a.setActiveItemClass(t)
it(e)
} else "click" === i && nt(U, e) || "keydown" === i && nt("shiftKey", e) ? t.classList.contains("active") ? a.removeActiveItem(t) : a.setActiveItemClass(t) : (a.clearActiveItems(), a.setActiveItemClass(t))
a.hideInput(), a.isFocused || a.focus()
}
} setActiveItemClass(t) {
const e = this, i = e.control.querySelector(".last-active")
i && N(i, "last-active"), H(t, "active last-active"), e.trigger("item_select", t), -1 == e.activeItems.indexOf(t) && e.activeItems.push(t)
} removeActiveItem(t) {
var e = this.activeItems.indexOf(t)
this.activeItems.splice(e, 1), N(t, "active")
} clearActiveItems() { N(this.activeItems, "active"), this.activeItems = [] } setActiveOption(t, e = !0) { t !== this.activeOption && (this.clearActiveOption(), t && (this.activeOption = t, Q(this.focus_node, { "aria-activedescendant": t.getAttribute("id") }), Q(t, { "aria-selected": "true" }), H(t, "active"), e && this.scrollToOption(t))) } scrollToOption(t, e) {
if (!t) return
const i = this.dropdown_content, s = i.clientHeight, n = i.scrollTop || 0, o = t.offsetHeight, r = t.getBoundingClientRect().top - i.getBoundingClientRect().top + n
r + o > s + n ? this.scroll(r - s + o, e) : r < n && this.scroll(r, e)
} scroll(t, e) {
const i = this.dropdown_content
e && (i.style.scrollBehavior = e), i.scrollTop = t, i.style.scrollBehavior = ""
} clearActiveOption() { this.activeOption && (N(this.activeOption, "active"), Q(this.activeOption, { "aria-selected": null })), this.activeOption = null, Q(this.focus_node, { "aria-activedescendant": null }) } selectAll() {
const t = this
if ("single" === t.settings.mode) return
const e = t.controlChildren()
e.length && (t.hideInput(), t.close(), t.activeItems = e, E(e, (e => { t.setActiveItemClass(e) })))
} inputState() {
var t = this
t.control.contains(t.control_input) && (Q(t.control_input, { placeholder: t.settings.placeholder }), t.activeItems.length > 0 || !t.isFocused && t.settings.hidePlaceholder && t.items.length > 0 ? (t.setTextboxValue(), t.isInputHidden = !0) : (t.settings.hidePlaceholder && t.items.length > 0 && Q(t.control_input, { placeholder: "" }), t.isInputHidden = !1), t.wrapper.classList.toggle("input-hidden", t.isInputHidden))
} hideInput() { this.inputState() } showInput() { this.inputState() } inputValue() { return this.control_input.value.trim() } focus() {
var t = this
t.isDisabled || (t.ignoreFocus = !0, t.control_input.offsetWidth ? t.control_input.focus() : t.focus_node.focus(), setTimeout((() => { t.ignoreFocus = !1, t.onFocus() }), 0))
} blur() { this.focus_node.blur(), this.onBlur() } getScoreFunction(t) { return this.sifter.getScoreFunction(t, this.getSearchOptions()) } getSearchOptions() {
var t = this.settings, e = t.sortField
return "string" == typeof t.sortField && (e = [{ field: t.sortField }]), { fields: t.searchField, conjunction: t.searchConjunction, sort: e, nesting: t.nesting }
} search(t) {
var e, i, s = this, n = this.getSearchOptions()
if (s.settings.score && "function" != typeof (i = s.settings.score.call(s, t))) throw new Error('Tom Select "score" setting must be a function that returns a function')
return t !== s.lastQuery ? (s.lastQuery = t, e = s.sifter.search(t, Object.assign(n, { score: i })), s.currentResults = e) : e = Object.assign({}, s.currentResults), s.settings.hideSelected && (e.items = e.items.filter((t => {
let e = X(t.id)
return !(e && -1 !== s.items.indexOf(e))
}))), e
} refreshOptions(t = !0) {
var e, i, s, n, o, r, l, a, c, d
const u = {}, p = []
var h = this, g = h.inputValue()
const f = g === h.lastQuery || "" == g && null == h.lastQuery
var v, m = h.search(g), y = null, O = h.settings.shouldOpen || !1, b = h.dropdown_content
for (f && (y = h.activeOption) && (c = y.closest("[data-group]")), n = m.items.length, "number" == typeof h.settings.maxOptions && (n = Math.min(n, h.settings.maxOptions)), n > 0 && (O = !0), e = 0; e < n; e++) {
let t = m.items[e]
if (!t) continue
let n = t.id, l = h.options[n]
if (void 0 === l) continue
let a = Y(n), d = h.getOption(a, !0)
for (h.settings.hideSelected || d.classList.toggle("selected", h.items.includes(a)), o = l[h.settings.optgroupField] || "", i = 0, s = (r = Array.isArray(o) ? o : [o]) && r.length; i < s; i++) {
o = r[i], h.optgroups.hasOwnProperty(o) || (o = "")
let t = u[o]
void 0 === t && (t = document.createDocumentFragment(), p.push(o)), i > 0 && (d = d.cloneNode(!0), Q(d, { id: l.$id + "-clone-" + i, "aria-selected": null }), d.classList.add("ts-cloned"), N(d, "active"), h.activeOption && h.activeOption.dataset.value == n && c && c.dataset.group === o.toString() && (y = d)), t.appendChild(d), u[o] = t
}
} h.settings.lockOptgroupOrder && p.sort(((t, e) => {
const i = h.optgroups[t], s = h.optgroups[e]
return (i && i.$order || 0) - (s && s.$order || 0)
})), l = document.createDocumentFragment(), E(p, (t => {
let e = u[t]
if (!e || !e.children.length) return
let i = h.optgroups[t]
if (void 0 !== i) {
let t = document.createDocumentFragment(), s = h.render("optgroup_header", i)
lt(t, s), lt(t, e)
let n = h.render("optgroup", { group: i, options: t })
lt(l, n)
} else lt(l, e)
})), b.innerHTML = "", lt(b, l), h.settings.highlight && (v = b.querySelectorAll("span.highlight"), Array.prototype.forEach.call(v, (function (t) {
var e = t.parentNode
e.replaceChild(t.firstChild, t), e.normalize()
})), m.query.length && m.tokens.length && E(m.tokens, (t => { J(b, t.regex) })))
var w = t => {
let e = h.render(t, { input: g })
return e && (O = !0, b.insertBefore(e, b.firstChild)), e
}
if (h.loading ? w("loading") : h.settings.shouldLoad.call(h, g) ? 0 === m.items.length && w("no_results") : w("not_loading"), (a = h.canCreate(g)) && (d = w("option_create")), h.hasOptions = m.items.length > 0 || a, O) {
if (m.items.length > 0) {
if (y || "single" !== h.settings.mode || null == h.items[0] || (y = h.getOption(h.items[0])), !b.contains(y)) {
let t = 0
d && !h.settings.addPrecedence && (t = 1), y = h.selectable()[t]
}
} else d && (y = d)
t && !h.isOpen && (h.open(), h.scrollToOption(y, "auto")), h.setActiveOption(y)
} else h.clearActiveOption(), t && h.isOpen && h.close(!1)
} selectable() { return this.dropdown_content.querySelectorAll("[data-selectable]") } addOption(t, e = !1) {
const i = this
if (Array.isArray(t)) return i.addOptions(t, e), !1
const s = X(t[i.settings.valueField])
return null !== s && !i.options.hasOwnProperty(s) && (t.$order = t.$order || ++i.order, t.$id = i.inputId + "-opt-" + t.$order, i.options[s] = t, i.lastQuery = null, e && (i.userOptions[s] = e, i.trigger("option_add", s, t)), s)
} addOptions(t, e = !1) { E(t, (t => { this.addOption(t, e) })) } registerOption(t) { return this.addOption(t) } registerOptionGroup(t) {
var e = X(t[this.settings.optgroupValueField])
return null !== e && (t.$order = t.$order || ++this.order, this.optgroups[e] = t, e)
} addOptionGroup(t, e) {
var i
e[this.settings.optgroupValueField] = t, (i = this.registerOptionGroup(e)) && this.trigger("optgroup_add", i, e)
} removeOptionGroup(t) { this.optgroups.hasOwnProperty(t) && (delete this.optgroups[t], this.clearCache(), this.trigger("optgroup_remove", t)) } clearOptionGroups() { this.optgroups = {}, this.clearCache(), this.trigger("optgroup_clear") } updateOption(t, e) {
const i = this
var s, n
const o = X(t), r = X(e[i.settings.valueField])
if (null === o) return
const l = i.options[o]
if (null == l) return
if ("string" != typeof r) throw new Error("Value must be set in option data")
const a = i.getOption(o), c = i.getItem(o)
if (e.$order = e.$order || l.$order, delete i.options[o], i.uncacheValue(r), i.options[r] = e, a) {
if (i.dropdown_content.contains(a)) {
const t = i._render("option", e)
G(a, t), i.activeOption === a && i.setActiveOption(t)
} a.remove()
} c && (-1 !== (n = i.items.indexOf(o)) && i.items.splice(n, 1, r), s = i._render("item", e), c.classList.contains("active") && H(s, "active"), G(c, s)), i.lastQuery = null
} removeOption(t, e) {
const i = this
t = Y(t), i.uncacheValue(t), delete i.userOptions[t], delete i.options[t], i.lastQuery = null, i.trigger("option_remove", t), i.removeItem(t, e)
} clearOptions(t) {
const e = (t || this.clearFilter).bind(this)
this.loadedSearches = {}, this.userOptions = {}, this.clearCache()
const i = {}
E(this.options, ((t, s) => { e(t, s) && (i[s] = t) })), this.options = this.sifter.items = i, this.lastQuery = null, this.trigger("option_clear")
} clearFilter(t, e) { return this.items.indexOf(e) >= 0 } getOption(t, e = !1) {
const i = X(t)
if (null === i) return null
const s = this.options[i]
if (null != s) {
if (s.$div) return s.$div
if (e) return this._render("option", s)
} return null
} getAdjacent(t, e, i = "option") {
var s
if (!t) return null
s = "item" == i ? this.controlChildren() : this.dropdown_content.querySelectorAll("[data-selectable]")
for (let i = 0; i < s.length; i++)if (s[i] == t) return e > 0 ? s[i + 1] : s[i - 1]
return null
} getItem(t) {
if ("object" == typeof t) return t
var e = X(t)
return null !== e ? this.control.querySelector(`[data-value="${rt(e)}"]`) : null
} addItems(t, e) {
var i = this, s = Array.isArray(t) ? t : [t]
const n = (s = s.filter((t => -1 === i.items.indexOf(t))))[s.length - 1]
s.forEach((t => { i.isPending = t !== n, i.addItem(t, e) }))
} addItem(t, e) {
et(this, e ? [] : ["change", "dropdown_close"], (() => {
var i, s
const n = this, o = n.settings.mode, r = X(t)
if ((!r || -1 === n.items.indexOf(r) || ("single" === o && n.close(), "single" !== o && n.settings.duplicates)) && null !== r && n.options.hasOwnProperty(r) && ("single" === o && n.clear(e), "multi" !== o || !n.isFull())) {
if (i = n._render("item", n.options[r]), n.control.contains(i) && (i = i.cloneNode(!0)), s = n.isFull(), n.items.splice(n.caretPos, 0, r), n.insertAtCaret(i), n.isSetup) {
if (!n.isPending && n.settings.hideSelected) {
let t = n.getOption(r), e = n.getAdjacent(t, 1)
e && n.setActiveOption(e)
} n.isPending || n.settings.closeAfterSelect || n.refreshOptions(n.isFocused && "single" !== o), 0 != n.settings.closeAfterSelect && n.isFull() ? n.close() : n.isPending || n.positionDropdown(), n.trigger("item_add", r, i), n.isPending || n.updateOriginalInput({ silent: e })
} (!n.isPending || !s && n.isFull()) && (n.inputState(), n.refreshState())
}
}))
} removeItem(t = null, e) {
const i = this
if (!(t = i.getItem(t))) return
var s, n
const o = t.dataset.value
s = K(t), t.remove(), t.classList.contains("active") && (n = i.activeItems.indexOf(t), i.activeItems.splice(n, 1), N(t, "active")), i.items.splice(s, 1), i.lastQuery = null, !i.settings.persist && i.userOptions.hasOwnProperty(o) && i.removeOption(o, e), s < i.caretPos && i.setCaret(i.caretPos - 1), i.updateOriginalInput({ silent: e }), i.refreshState(), i.positionDropdown(), i.trigger("item_remove", o, t)
} createItem(t = null, e = (() => { })) {
3 === arguments.length && (e = arguments[2]), "function" != typeof e && (e = () => { })
var i, s = this, n = s.caretPos
if (t = t || s.inputValue(), !s.canCreate(t)) return e(), !1
s.lock()
var o = !1, r = t => {
if (s.unlock(), !t || "object" != typeof t) return e()
var i = X(t[s.settings.valueField])
if ("string" != typeof i) return e()
s.setTextboxValue(), s.addOption(t, !0), s.setCaret(n), s.addItem(i), e(t), o = !0
}
return i = "function" == typeof s.settings.create ? s.settings.create.call(this, t, r) : { [s.settings.labelField]: t, [s.settings.valueField]: t }, o || r(i), !0
} refreshItems() {
var t = this
t.lastQuery = null, t.isSetup && t.addItems(t.items), t.updateOriginalInput(), t.refreshState()
} refreshState() {
const t = this
t.refreshValidityState()
const e = t.isFull(), i = t.isLocked
t.wrapper.classList.toggle("rtl", t.rtl)
const s = t.wrapper.classList
var n
s.toggle("focus", t.isFocused), s.toggle("disabled", t.isDisabled), s.toggle("required", t.isRequired), s.toggle("invalid", !t.isValid), s.toggle("locked", i), s.toggle("full", e), s.toggle("input-active", t.isFocused && !t.isInputHidden), s.toggle("dropdown-active", t.isOpen), s.toggle("has-options", (n = t.options, 0 === Object.keys(n).length)), s.toggle("has-items", t.items.length > 0)
} refreshValidityState() {
var t = this
t.input.validity && (t.isValid = t.input.validity.valid, t.isInvalid = !t.isValid)
} isFull() { return null !== this.settings.maxItems && this.items.length >= this.settings.maxItems } updateOriginalInput(t = {}) {
const e = this
var i, s
const n = e.input.querySelector('option[value=""]')
if (e.is_select_tag) {
const t = [], r = e.input.querySelectorAll("option:checked").length
function o(i, s, o) { return i || (i = $('
")), i != n && e.input.append(i), t.push(i), (i != n || r > 0) && (i.selected = !0), i } e.input.querySelectorAll("option:checked").forEach((t => { t.selected = !1 })), 0 == e.items.length && "single" == e.settings.mode ? o(n, "", "") : e.items.forEach((n => { if (i = e.options[n], s = i[e.settings.labelField] || "", t.includes(i.$option)) { o(e.input.querySelector(`option[value="${rt(n)}"]:not(:checked)`), n, s) } else i.$option = o(i.$option, n, s) }))
} else e.input.value = e.getValue()
e.isSetup && (t.silent || e.trigger("change", e.getValue()))
} open() {
var t = this
t.isLocked || t.isOpen || "multi" === t.settings.mode && t.isFull() || (t.isOpen = !0, Q(t.focus_node, { "aria-expanded": "true" }), t.refreshState(), D(t.dropdown, { visibility: "hidden", display: "block" }), t.positionDropdown(), D(t.dropdown, { visibility: "visible", display: "block" }), t.focus(), t.trigger("dropdown_open", t.dropdown))
} close(t = !0) {
var e = this, i = e.isOpen
t && (e.setTextboxValue(), "single" === e.settings.mode && e.items.length && e.hideInput()), e.isOpen = !1, Q(e.focus_node, { "aria-expanded": "false" }), D(e.dropdown, { display: "none" }), e.settings.hideSelected && e.clearActiveOption(), e.refreshState(), i && e.trigger("dropdown_close", e.dropdown)
} positionDropdown() {
if ("body" === this.settings.dropdownParent) {
var t = this.control, e = t.getBoundingClientRect(), i = t.offsetHeight + e.top + window.scrollY, s = e.left + window.scrollX
D(this.dropdown, { width: e.width + "px", top: i + "px", left: s + "px" })
}
} clear(t) {
var e = this
if (e.items.length) {
var i = e.controlChildren()
E(i, (t => { e.removeItem(t, !0) })), e.showInput(), t || e.updateOriginalInput(), e.trigger("clear")
}
} insertAtCaret(t) {
const e = this, i = e.caretPos, s = e.control
s.insertBefore(t, s.children[i] || null), e.setCaret(i + 1)
} deleteSelection(t) {
var e, i, s, n, o, r = this
e = t && 8 === t.keyCode ? -1 : 1, i = { start: (o = r.control_input).selectionStart || 0, length: (o.selectionEnd || 0) - (o.selectionStart || 0) }
const l = []
if (r.activeItems.length) n = B(r.activeItems, e), s = K(n), e > 0 && s++, E(r.activeItems, (t => l.push(t)))
else if ((r.isFocused || "single" === r.settings.mode) && r.items.length) {
const t = r.controlChildren()
let s
e < 0 && 0 === i.start && 0 === i.length ? s = t[r.caretPos - 1] : e > 0 && i.start === r.inputValue().length && (s = t[r.caretPos]), void 0 !== s && l.push(s)
} if (!r.shouldDelete(l, t)) return !1
for (it(t, !0), void 0 !== s && r.setCaret(s); l.length;)r.removeItem(l.pop())
return r.showInput(), r.positionDropdown(), r.refreshOptions(!1), !0
} shouldDelete(t, e) {
const i = t.map((t => t.dataset.value))
return !(!i.length || "function" == typeof this.settings.onDelete && !1 === this.settings.onDelete(i, e))
} advanceSelection(t, e) {
var i, s, n = this
n.rtl && (t *= -1), n.inputValue().length || (nt(U, e) || nt("shiftKey", e) ? (s = (i = n.getLastActive(t)) ? i.classList.contains("active") ? n.getAdjacent(i, t, "item") : i : t > 0 ? n.control_input.nextElementSibling : n.control_input.previousElementSibling) && (s.classList.contains("active") && n.removeActiveItem(i), n.setActiveItemClass(s)) : n.moveCaret(t))
} moveCaret(t) { } getLastActive(t) {
let e = this.control.querySelector(".last-active")
if (e) return e
var i = this.control.querySelectorAll(".active")
return i ? B(i, t) : void 0
} setCaret(t) { this.caretPos = this.items.length } controlChildren() { return Array.from(this.control.querySelectorAll("[data-ts-item]")) } lock() { this.isLocked = !0, this.refreshState() } unlock() { this.isLocked = !1, this.refreshState() } disable() {
var t = this
t.input.disabled = !0, t.control_input.disabled = !0, t.focus_node.tabIndex = -1, t.isDisabled = !0, this.close(), t.lock()
} enable() {
var t = this
t.input.disabled = !1, t.control_input.disabled = !1, t.focus_node.tabIndex = t.tabIndex, t.isDisabled = !1, t.unlock()
} destroy() {
var t = this, e = t.revertSettings
t.trigger("destroy"), t.off(), t.wrapper.remove(), t.dropdown.remove(), t.input.innerHTML = e.innerHTML, t.input.tabIndex = e.tabIndex, N(t.input, "tomselected", "ts-hidden-accessible"), t._destroy(), delete t.input.tomselect
} render(t, e) {
var i, s
const n = this
if ("function" != typeof this.settings.render[t]) return null
if (!(s = n.settings.render[t].call(this, e, Z))) return null
if (s = $(s), "option" === t || "option_create" === t ? e[n.settings.disabledField] ? Q(s, { "aria-disabled": "true" }) : Q(s, { "data-selectable": "" }) : "optgroup" === t && (i = e.group[n.settings.optgroupValueField], Q(s, { "data-group": i }), e.group[n.settings.disabledField] && Q(s, { "data-disabled": "" })), "option" === t || "item" === t) {
const i = Y(e[n.settings.valueField])
Q(s, { "data-value": i }), "item" === t ? (H(s, n.settings.itemClass), Q(s, { "data-ts-item": "" })) : (H(s, n.settings.optionClass), Q(s, { role: "option", id: e.$id }), e.$div = s, n.options[i] = e)
} return s
} _render(t, e) {
const i = this.render(t, e)
if (null == i) throw "HTMLElement expected"
return i
} clearCache() { E(this.options, (t => { t.$div && (t.$div.remove(), delete t.$div) })) } uncacheValue(t) {
const e = this.getOption(t)
e && e.remove()
} canCreate(t) { return this.settings.create && t.length > 0 && this.settings.createFilter.call(this, t) } hook(t, e, i) {
var s = this, n = s[e]
s[e] = function () {
var e, o
return "after" === t && (e = n.apply(s, arguments)), o = i.apply(s, arguments), "instead" === t ? o : ("before" === t && (e = n.apply(s, arguments)), e)
}
}
} return dt
}))
var tomSelect = function (t, e) { return new TomSelect(t, e) }
//# sourceMappingURL=tom-select.base.min.js.map