jqwidgets-ng 17.0.1 → 17.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/jqxgantt/angular_jqxgantt.mjs +1385 -0
- package/esm2020/jqxgantt/angular_jqxgantt.module.mjs +21 -0
- package/esm2020/jqxgantt/index.mjs +1 -0
- package/esm2020/jqxgantt/jqwidgets-ng-jqxgantt.mjs +4 -0
- package/esm2020/jqxgantt/public_api.mjs +2 -0
- package/fesm2015/jqwidgets-ng-jqxgantt.mjs +1413 -0
- package/fesm2020/jqwidgets-ng-jqxgantt.mjs +1413 -0
- package/jqwidgets/jqx-all.js +4 -2
- package/jqwidgets/jqxangular.js +1 -1
- package/jqwidgets/jqxbarcode.js +1 -1
- package/jqwidgets/jqxbargauge.js +1 -1
- package/jqwidgets/jqxbulletchart.js +1 -1
- package/jqwidgets/jqxbuttongroup.js +1 -1
- package/jqwidgets/jqxbuttons.js +1 -1
- package/jqwidgets/jqxcalendar.js +1 -1
- package/jqwidgets/jqxchart.annotations.js +1 -1
- package/jqwidgets/jqxchart.api.js +1 -1
- package/jqwidgets/jqxchart.core.js +2 -2
- package/jqwidgets/jqxchart.js +2 -2
- package/jqwidgets/jqxchart.rangeselector.js +1 -1
- package/jqwidgets/jqxchart.waterfall.js +1 -1
- package/jqwidgets/jqxcheckbox.js +1 -1
- package/jqwidgets/jqxcheckboxgroup.js +1 -1
- package/jqwidgets/jqxcolorpicker.js +1 -1
- package/jqwidgets/jqxcombobox.js +1 -1
- package/jqwidgets/jqxcomplexinput.js +1 -1
- package/jqwidgets/jqxcore.js +1 -1
- package/jqwidgets/jqxdata.export.js +1 -1
- package/jqwidgets/jqxdata.js +1 -1
- package/jqwidgets/jqxdatatable.js +1 -1
- package/jqwidgets/jqxdate.js +1 -1
- package/jqwidgets/jqxdatetimeinput.js +1 -1
- package/jqwidgets/jqxdocking.js +1 -1
- package/jqwidgets/jqxdockinglayout.js +1 -1
- package/jqwidgets/jqxdockpanel.js +1 -1
- package/jqwidgets/jqxdragdrop.js +1 -1
- package/jqwidgets/jqxdraw.js +1 -1
- package/jqwidgets/jqxdropdownbutton.js +1 -1
- package/jqwidgets/jqxdropdownlist.js +1 -1
- package/jqwidgets/jqxeditor.js +1 -1
- package/jqwidgets/jqxexpander.js +1 -1
- package/jqwidgets/jqxfileupload.js +1 -1
- package/jqwidgets/jqxform.js +1 -1
- package/jqwidgets/jqxformattedinput.js +1 -1
- package/jqwidgets/jqxgantt.api.js +382 -0
- package/jqwidgets/jqxgantt.js +9 -0
- package/jqwidgets/jqxgauge.js +1 -1
- package/jqwidgets/jqxgrid.aggregates.js +1 -1
- package/jqwidgets/jqxgrid.columnsreorder.js +1 -1
- package/jqwidgets/jqxgrid.columnsresize.js +1 -1
- package/jqwidgets/jqxgrid.edit.js +1 -1
- package/jqwidgets/jqxgrid.export.js +1 -1
- package/jqwidgets/jqxgrid.filter.js +1 -1
- package/jqwidgets/jqxgrid.grouping.js +1 -1
- package/jqwidgets/jqxgrid.js +1 -1
- package/jqwidgets/jqxgrid.pager.js +1 -1
- package/jqwidgets/jqxgrid.selection.js +1 -1
- package/jqwidgets/jqxgrid.sort.js +1 -1
- package/jqwidgets/jqxgrid.storage.js +1 -1
- package/jqwidgets/jqxheatmap.js +1 -1
- package/jqwidgets/jqxinput.js +1 -1
- package/jqwidgets/jqxkanban.js +1 -1
- package/jqwidgets/jqxknob.js +1 -1
- package/jqwidgets/jqxknockout.js +1 -1
- package/jqwidgets/jqxlayout.js +1 -1
- package/jqwidgets/jqxlistbox.js +1 -1
- package/jqwidgets/jqxlistmenu.js +1 -1
- package/jqwidgets/jqxloader.js +1 -1
- package/jqwidgets/jqxmaskedinput.js +1 -1
- package/jqwidgets/jqxmenu.js +1 -1
- package/jqwidgets/jqxnavbar.js +1 -1
- package/jqwidgets/jqxnavigationbar.js +1 -1
- package/jqwidgets/jqxnotification.js +1 -1
- package/jqwidgets/jqxnumberinput.js +1 -1
- package/jqwidgets/jqxpanel.js +1 -1
- package/jqwidgets/jqxpasswordinput.js +1 -1
- package/jqwidgets/jqxpivot.js +1 -1
- package/jqwidgets/jqxpivotdesigner.js +1 -1
- package/jqwidgets/jqxpivotgrid.js +1 -1
- package/jqwidgets/jqxpopover.js +1 -1
- package/jqwidgets/jqxprogressbar.js +1 -1
- package/jqwidgets/jqxqrcode.js +1 -1
- package/jqwidgets/jqxradiobutton.js +1 -1
- package/jqwidgets/jqxradiobuttongroup.js +1 -1
- package/jqwidgets/jqxrangeselector.js +1 -1
- package/jqwidgets/jqxrating.js +1 -1
- package/jqwidgets/jqxresponsivepanel.js +1 -1
- package/jqwidgets/jqxribbon.js +1 -1
- package/jqwidgets/jqxscheduler.api.js +1 -1
- package/jqwidgets/jqxscheduler.js +1 -1
- package/jqwidgets/jqxscrollbar.js +1 -1
- package/jqwidgets/jqxscrollview.js +1 -1
- package/jqwidgets/jqxslider.js +1 -1
- package/jqwidgets/jqxsortable.js +1 -1
- package/jqwidgets/jqxsplitlayout.js +2445 -6
- package/jqwidgets/jqxsplitter.js +1 -1
- package/jqwidgets/jqxswitchbutton.js +1 -1
- package/jqwidgets/jqxtabs.js +1 -1
- package/jqwidgets/jqxtagcloud.js +1 -1
- package/jqwidgets/jqxtextarea.js +1 -1
- package/jqwidgets/jqxtimepicker.js +1 -1
- package/jqwidgets/jqxtoolbar.js +1 -1
- package/jqwidgets/jqxtooltip.js +1 -1
- package/jqwidgets/jqxtouch.js +1 -1
- package/jqwidgets/jqxtree.js +1 -1
- package/jqwidgets/jqxtreegrid.js +1 -1
- package/jqwidgets/jqxtreemap.js +1 -1
- package/jqwidgets/jqxvalidator.js +1 -1
- package/jqwidgets/jqxwindow.js +1 -1
- package/jqwidgets/styles/gantt/font/jqx-icons.eot +0 -0
- package/jqwidgets/styles/gantt/font/jqx-icons.svg +332 -0
- package/jqwidgets/styles/gantt/font/jqx-icons.ttf +0 -0
- package/jqwidgets/styles/gantt/font/jqx-icons.woff +0 -0
- package/jqwidgets/styles/gantt/font/jqx-icons.woff2 +0 -0
- package/jqwidgets/styles/gantt/jqx.gantt.css +18668 -0
- package/jqwidgets/styles/jqx.base.css +11 -0
- package/jqwidgets.d.ts +153 -0
- package/jqxgantt/angular_jqxgantt.d.ts +316 -0
- package/jqxgantt/angular_jqxgantt.module.d.ts +8 -0
- package/jqxgantt/index.d.ts +1 -0
- package/jqxgantt/jqwidgets-ng-jqxgantt.d.ts +5 -0
- package/jqxgantt/package.json +13 -0
- package/jqxgantt/public_api.d.ts +2 -0
- package/package.json +2 -1
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
|
|
2
|
+
/*
|
|
3
|
+
Copyright (c) 2011-2023 jQWidgets.
|
|
4
|
+
License: https://jqwidgets.com/license/ */
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
/******/ (() => { // webpackBootstrap
|
|
8
|
+
/******/ var __webpack_modules__ = ({
|
|
9
|
+
|
|
10
|
+
/***/ 2612:
|
|
11
|
+
/***/ (() => {
|
|
12
|
+
|
|
13
|
+
JQX("jqx-button", class extends JQX.ContentElement { static get properties() { return { value: { type: "string" }, name: { type: "string" }, type: { value: "button", type: "string" }, clickMode: { allowedValues: ["hover", "press", "release", "pressAndRelease"], type: "string", value: "release" } } } static get styleUrls() { return ["jqx.button.css"] } template() { return "<button class=\"jqx-button jqx-unselectable\" inner-h-t-m-l='[[innerHTML]]' id='button' type='[[type]]' name='[[name]]' value='[[value]]' disabled='[[disabled]]' role=\"presentation\"></button>" } refresh() { } static get listeners() { return { "button.down": "_downHandler", "button.mouseenter": "_mouseEnterHandler", "button.mouseleave": "_mouseLeaveHandler", "button.touchend": "_touchEndHandler", "button.click": "_clickHandler", "button.up": "_upHandler", up: "_upHandler", "button.focus": "_focusHandler", "button.blur": "_blurHandler" } } focus() { const e = this; e.$.button ? e.$.button.focus() : HTMLElement.prototype.focus.call(e) } blur() { const e = this; e.$.button ? e.$.button.blur() : HTMLElement.prototype.blur.call(e) } _upHandler(e) { const t = this; if (e.stopPropagation(), t.$.setAttributeValue("active", !1), t.dataset.target) { const n = document.querySelector(t.dataset.target); let a = t.dataset.toggle; const r = "jqx-window".toLowerCase(); if (n && n.nodeName.toLowerCase() === r && "modal" === a && (a = "openModal"), "tab" === a || "pill" === a || "list" === a) { const e = this.closest(".nav, .list-group"), a = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', r = !e || "UL" !== e.nodeName && "OL" !== e.nodeName ? e.children(".active") : e.querySelectorAll("li > .active"); if (e) { const n = e.querySelectorAll(a); for (let e = 0; e < n.length; e++)n[e].classList.remove("primary"); for (let e = 0; e < r.length; e++)r[e].classList.remove("active"); let i = t.parentNode; for (; i;) { if ("LI" === i.nodeName) { i.classList.add("active"); break } i = i.parentNode } t.classList.add("primary") } return n.parentNode.querySelectorAll(".active").forEach((e => { e.classList.remove("active"), e.classList.add("jqx-hidden") })), n.classList.add("active"), void n.classList.remove("jqx-hidden") } a && n && !n[a] && "collapse" === a && (setTimeout((() => { n.classList.contains("jqx-hidden") ? n.classList.remove("jqx-hidden") : n.classList.add("jqx-hidden") })), e.originalEvent.preventDefault()), a && n && !n[a] && "dropdown" === a ? (setTimeout((() => { n.opened = !n.opened })), e.originalEvent.preventDefault()) : a && n && n[a] && (setTimeout((() => { n[a]() }), 50), e.originalEvent.preventDefault()) } } _focusHandler() { this.$.setAttributeValue("focus", !0), this.$.fireEvent("focus") } _blurHandler() { this.$.setAttributeValue("focus", !1), this.$.fireEvent("blur") } _clickHandler(e) { const t = this; ("release" !== t.clickMode && "pressAndRelease" !== t.clickMode || t.readonly) && (e.preventDefault(), e.stopPropagation()) } _downHandler(e) { const t = this; if (!(t.disabled || (t.hasRippleAnimation && JQX.Utilities.Animation.Ripple.animate(t, e.pageX, e.pageY), t.$.setAttributeValue("active", !0), "press" !== t.clickMode && "pressAndRelease" !== t.clickMode || t.readonly))) { if (t.hasAttribute("jqx-blazor")) return void t.$.dispatchEvent(new Event("click")); const n = "buttons" in e ? e.buttons : e.which; t.$.fireEvent("click", { buttons: n, clientX: e.clientX, clientY: e.clientY, pageX: e.pageX, pageY: e.pageY, screenX: e.screenX, screenY: e.screenY }) } } _mouseEnterHandler(e) { const t = this; if (!t.readonly && (t.$button.setAttributeValue("hover", !0), t.$.setAttributeValue("hover", !0), "hover" === t.clickMode)) { const n = "buttons" in e ? e.buttons : e.which; if (t.hasAttribute("jqx-blazor")) return void t.$.dispatchEvent(new Event("click")); t.$.fireEvent("click", { buttons: n, clientX: e.clientX, clientY: e.clientY, pageX: e.pageX, pageY: e.pageY, screenX: e.screenX, screenY: e.screenY }) } } _touchEndHandler() { const e = this; setTimeout((function () { e.$button.setAttributeValue("hover", !1), e.$.setAttributeValue("hover", !1) }), 300) } _mouseLeaveHandler() { this.$button.setAttributeValue("hover", !1), this.$.setAttributeValue("hover", !1) } propertyChangedHandler(e, t, n) { super.propertyChangedHandler(e, t, n); const a = this; "disabled" === e ? (a._setFocusable(), a.$button && a.$button.setAttributeValue("hover", !1), a.$.setAttributeValue("hover", !1), a instanceof JQX.RepeatButton && a._stopRepeat()) : "unfocusable" === e && a._setFocusable() } _setFocusable() { const e = this, t = e.$.button ? e.$.button : e; if (e.disabled || e.unfocusable) return t.removeAttribute("tabindex"), void (t.tabIndex = -1); t.tabIndex = e.tabIndex > 0 ? e.tabIndex : 0 } ready() { const e = this; super.ready(), e.setAttribute("role", "button"), e._setFocusable(), e.enableShadowDOM && e.$.hiddenInput && e.appendChild(e.$.hiddenInput) } }), JQX("jqx-repeat-button", class extends JQX.Button { static get properties() { return { delay: { value: 50, type: "number" }, initialDelay: { value: 150, type: "number" } } } static get listeners() { return { "button.down": "_startRepeat", "button.mouseenter": "_overriddenHandler", "button.mouseleave": "_overriddenHandler", "button.pointerenter": "_updateInBoundsFlag", "button.pointerleave": "_updateInBoundsFlag", "button.touchmove": "_touchmoveHandler", "document.up": "_stopRepeat" } } _clickHandler(e) { const t = this; ("release" !== t.clickMode || t.preventDefaultClick || t.readonly || t.disabled) && (e.preventDefault(), e.stopPropagation(), t.preventDefaultClick = !1) } _updateInBoundsFlag(e) { const t = this; -1 !== e.type.indexOf("leave") ? (t._isPointerInBounds = !1, t.$button.setAttributeValue("hover", !1), t.$.setAttributeValue("hover", !1)) : (t._isPointerInBounds = !0, t.$button.setAttributeValue("hover", !0), t.$.setAttributeValue("hover", !0)), 1 !== ("buttons" in e ? e.buttons : e.which) && t._stopRepeat(e) } _startRepeat(e) { const t = this; t.setAttribute("active", ""), t._initialTimer || t.readonly || (t._initialTimer = setTimeout((function () { t._repeatTimer = setInterval((() => { if (t._isPointerInBounds) { if (t.hasAttribute("jqx-blazor")) return t.$.dispatchEvent(new Event("click")), void (t.preventDefaultClick = !0); const n = "buttons" in e ? e.buttons : e.which; t.$.fireEvent("click", { buttons: n, clientX: e.clientX, clientY: e.clientY, pageX: e.pageX, pageY: e.pageY, screenX: e.screenX, screenY: e.screenY }), t.preventDefaultClick = !0 } }), t.delay) }), t.initialDelay)) } _stopRepeat(e) { const t = this; t.readonly || e && ("pointercancel" === e.type || e.originalEvent && "pointercancel" === e.originalEvent.type) || (t.$.setAttributeValue("active", !1), t._repeatTimer && (clearInterval(t._repeatTimer), t._repeatTimer = null), t._initialTimer && (clearTimeout(t._initialTimer), t._initialTimer = null)) } _touchmoveHandler(e) { this.preventDefaultClick && e.cancelable && (e.preventDefault(), e.stopPropagation()) } _overriddenHandler() { } }), JQX("jqx-toggle-button", class extends JQX.Button { static get properties() { return { checked: { value: !1, type: "boolean?" }, falseContent: { value: "", reflectToAttribute: !1, type: "string" }, indeterminateContent: { value: "", reflectToAttribute: !1, type: "string" }, indeterminate: { value: !1, type: "boolean" }, trueContent: { value: "", reflectToAttribute: !1, type: "string" }, indeterminateTemplate: { value: null, type: "any" }, trueTemplate: { value: null, type: "any" }, falseTemplate: { value: null, type: "any" }, type: { value: "toggle", type: "string", defaultReflectToAttribute: !0, readonly: !0 } } } static get listeners() { return { keydown: "_keyHandler", keyup: "_keyHandler", dragstart: "_dragStartHandler", "button.click": "_buttonClickHandler", "button.mouseenter": "_buttonMouseEnterHandler", "button.mouseleave": "_buttonMouseLeaveHandler", "document.up": "_documentUpHandler" } } ready() { super.ready(), this._setAriaState(), this._updateGroupValue() } _setAriaState() { const e = this, t = e.checked; null !== t ? e.setAttribute("aria-pressed", t) : e.setAttribute("aria-pressed", "mixed") } _buttonClickHandler() { } _buttonMouseLeaveHandler() { this.removeAttribute("hover") } _buttonMouseEnterHandler() { const e = this; e.setAttribute("hover", ""), e.disabled || e.readonly || "hover" !== e.clickMode || (e._changeCheckState("pointer"), e.focus(), e._updateHidenInputNameAndValue()) } _documentUpHandler(e) { const t = this; t._pressed && (t._pressed = !1, t.disabled || t.readonly || "press" === t.clickMode || "pointercancel" === e.originalEvent.type || (t._changeCheckState("pointer"), t.focus(), t._updateHidenInputNameAndValue())) } _downHandler(e) { const t = this; t.disabled || t.readonly || (t.hasRippleAnimation && JQX.Utilities.Animation.Ripple.animate(t, e.pageX, e.pageY), t._pressed = !0, "press" !== t.clickMode && "pressAndRelease" !== t.clickMode || (t._changeCheckState("pointer"), t.hasAttribute("jqx-blazor") ? t.$.dispatchEvent(new Event("click")) : t.$.fireEvent("click"), t._updateHidenInputNameAndValue()), "press" === t.clickMode && (e.preventDefault(), e.stopPropagation())) } _dragStartHandler(e) { e.preventDefault() } _keyHandler(e) { const t = this; if (!0 !== t.disabled && !t.readonly && 32 === e.keyCode) { if ("keydown" === e.type) return void e.preventDefault(); if ("none" === t.switchMode) return; t._changeCheckState("keyboard"), t._updateHidenInputNameAndValue() } } _updateGroupValue() { const e = this; if (e.dataset.target) { const t = document.querySelector(e.dataset.target); if (t) { const n = document.querySelectorAll('[data-target="' + e.dataset.target + '"]'), a = []; if (e.checked) { const n = e.dataset.property, a = e.dataset.value; if (n && void 0 !== t[n]) { let e = a; "true" === e && (e = !0), "false" === e && (e = !1), t[n] = e } } for (let t = 0; t < n.length; t++) { const r = n[t]; r.checked && (r.name ? (a.push(r.name), e.id && r.setAttribute("data-id", e.id)) : e.id && a.push(e.id)) } t.value = a.toString(), e._targetDispatchTimer && clearTimeout(e._targetDispatchTimer), e._targetDispatchTimer = setTimeout((() => { t.dispatchEvent(new Event("change")) }), 100) } } } _changeCheckState(e) { const t = this; let n = null; null === t.checked ? t.checked = !0 : (n = t.checked, t.checked = !t.checked), t._handleTextSelection(), t.$.fireEvent("change", { value: t.checked, oldValue: n, changeType: e }), t.checked ? t.$.fireEvent("checkValue", { changeType: e }) : t.$.fireEvent("uncheckValue", { changeType: e }), t._updateGroupValue(), t._setAriaState() } _handleTextSelection() { const e = this; e.$.addClass("jqx-unselectable"), e.timer && clearTimeout(e.timer), e.timer = setTimeout((() => e.$.removeClass("jqx-unselectable")), 500) } propertyChangedHandler(e, t, n) { super.propertyChangedHandler(e, t, n); const a = this; if ("checked" === e) return a.$.fireEvent("change", { value: n, oldValue: t, changeType: "api" }), void a._setAriaState(); switch (e) { case "trueTemplate": a._handleTemplate(!0); break; case "falseTemplate": a._handleTemplate(!1); break; case "indeterminateTemplate": a._handleTemplate() } } _htmlBindOnInitialization() { const e = this; e._bindContentProperty("trueContent", "jqx-true-content"), e._bindContentProperty("falseContent", "jqx-false-content"), e._bindContentProperty("indeterminateContent", "jqx-indeterminate-content") } _bindContentProperty(e, t) { const n = this; if (!n.$[e + "Container"]) return; let a = document.createElement("div"); a.innerHTML = n.innerHTML; let r, i = a.getElementsByClassName(t); if (i.length > 0) for (let e = 0; e < i.length; e++)r = i[e]; "" === n[e] && (n[e] = void 0 === r ? "" : r.outerHTML), n.$[e + "Container"].innerHTML = n[e] } _updateContentProperties() { const e = this; function t(t) { e.$[t + "Container"] && (e[t] = e.$[t + "Container"].innerHTML) } t("trueContent"), t("falseContent"), t("indeterminateContent") } _updateHidenInputValue() { const e = this; if (!e.$.hiddenInput) return; let t; t = null === e.checked ? "null" : !1 === e.checked ? "off" : e.value || "on", e.$.hiddenInput.setAttribute("value", t) } _updateHidenInputName() { const e = this; if (!e.$.hiddenInput) return; let t = !1 === e.checked ? "" : e.name || ""; e.$.hiddenInput.setAttribute("name", t) } _updateHidenInputNameAndValue() { this._updateHidenInputName(), this._updateHidenInputValue() } _handleTemplate(e, t) { const n = this; let a, r, i; if (!0 === e ? (a = n.trueTemplate, r = n.$.trueContentContainer, i = n.trueContent) : !1 === e ? (a = n.falseTemplate, r = n.$.falseContentContainer, i = n.falseContent) : (a = n.indeterminateTemplate, r = n.$.indeterminateContentContainer, i = n.indeterminateContent), t && (r.innerHTML = i || ""), null === a || !a) return; if ("function" == typeof a) return void a(r, { value: i }); if (!("content" in document.createElement("template"))) return void n.error(n.localize("htmlTemplateNotSuported", { elementType: n.nodeName.toLowerCase() })); if (a = document.getElementById(a), null === a || !("content" in a)) return void n.error(n.localize("invalidTemplate", { elementType: n.nodeName.toLowerCase(), property: "template" })); const o = a.content, l = o.childNodes.length, s = /{{\w+}}/g; let u, d = []; for (let e = 0; e < l; e++)for (u = s.exec(o.childNodes[e].innerHTML); u;)d.push({ childNodeIndex: e, bindingString: u[0] }), u = s.exec(o.childNodes[e].innerHTML); const c = d.length; let p, h, m = document.importNode(a.content, !0); for (let e = 0; e < c; e++) { p = m.childNodes[d[e].childNodeIndex], h = d.length; for (let t = 0; t < h; t++)p.innerHTML = p.innerHTML.replace(d[e].bindingString, i) } r.innerHTML = ""; for (let e = 0; e < m.childNodes.length; e++)m.childNodes[e].outerHTML && (r.innerHTML += m.childNodes[e].outerHTML) } });
|
|
14
|
+
|
|
15
|
+
/***/
|
|
16
|
+
}),
|
|
17
|
+
|
|
18
|
+
/***/ 5810:
|
|
19
|
+
/***/ (() => {
|
|
20
|
+
|
|
21
|
+
JQX("jqx-calendar", class extends JQX.BaseElement { static get properties() { return { animationSettings: { value: null, type: "object" }, calendarMode: { value: "default", allowedValues: ["default", "classic"], type: "string" }, dayNameFormat: { value: "firstTwoLetters", allowedValues: ["narrow", "firstTwoLetters", "long", "short"], type: "string" }, dateFormatFunction: { value: null, type: "function" }, disableAutoNavigation: { value: !1, type: "boolean" }, displayMode: { value: "month", allowedValues: ["month", "year", "decade"], type: "string" }, displayModeView: { value: "table", allowedValues: ["table", "list"], type: "string" }, dropDownHeight: { value: "200", type: "string" }, dropDownWidth: { value: "", type: "string" }, firstDayOfWeek: { value: 0, type: "number", defaultValue: 0, validator: "_firstDayOfWeekValidator" }, footerTemplate: { value: null, type: "any" }, headerTemplate: { value: null, type: "any" }, hideDayNames: { value: !1, type: "boolean" }, hideOtherMonthDays: { value: !1, type: "boolean" }, hideTooltipArrow: { value: !1, type: "boolean" }, importantDates: { value: [], type: "array", defaultValue: [] }, importantDatesTemplate: { value: null, type: "any" }, max: { value: new Date(2100, 0, 1), type: "any", defaultValue: new Date(2100, 0, 1) }, min: { value: new Date(1900, 0, 1), type: "any", defaultValue: new Date(1900, 0, 1) }, months: { value: 1, type: "number", defaultValue: 1, validator: "_monthsValidator" }, monthNameFormat: { value: "long", allowedValues: ["narrow", "firstTwoLetters", "long", "short", "2-digit", "numeric"], type: "string" }, name: { value: "", type: "string" }, restrictedDates: { value: [], type: "array", defaultValue: [] }, scrollButtonsNavigationMode: { value: "landscape", allowedValues: ["portrait", "landscape"], type: "string" }, scrollButtonsPosition: { value: "both", allowedValues: ["near", "far", "both"], type: "string" }, selectedDates: { value: [], reflectToAttribute: !1, type: "array" }, selectionMode: { value: "default", allowedValues: ["none", "default", "one", "oneExtended", "many", "zeroOrMany", "oneOrMany", "zeroOrOne", "week", "range"], type: "string" }, spinButtonsDelay: { value: 80, type: "number" }, spinButtonsInitialDelay: { value: 0, type: "number" }, titleTemplate: { value: null, type: "any" }, tooltip: { value: !1, type: "boolean" }, tooltipArrow: { value: !0, type: "boolean" }, tooltipArrowDirection: { allowedValues: ["bottom", "top", "left", "right", "none"], value: "bottom", type: "string" }, tooltipDelay: { value: 100, type: "number" }, tooltipOffset: { value: [], type: "array" }, tooltipPosition: { value: "auto", allowedValues: ["auto", "bottom", "top", "left", "right", "absolute"], type: "string" }, tooltipTemplate: { value: null, type: "any" }, view: { value: "portrait", allowedValues: ["landscape", "portrait"], type: "string" }, viewSections: { value: ["header"], type: "array" }, weekNumbers: { value: !1, type: "boolean" }, weeks: { value: 6, type: "number", defaultValue: 6, validator: "_weeksValidator" }, yearFormat: { value: "numeric", allowedValues: ["2-digit", "numeric"], type: "string" } } } static get listeners() { return { "container.down": "_downHandler", "document.up": "_documentUpHandler", "body.move": "_moveHandler", "container.wheel": "_containerWheelHandler", "body.focus": "_bodyFocusStateHandler", "body.blur": "_bodyBlurStateHandler", "header.click": "_headerClickHandler", "header.change": "_headerChangeHandler", keydown: "_keyDownHandler", keyup: "_keyUpHandler", mouseenter: "_mouseEventsHandler", mouseleave: "_mouseEventsHandler", "container.mouseover": "_mouseEventsHandler", "container.mouseout": "_mouseEventsHandler", "container.open": "_popupEventHandler", "container.close": "_popupEventHandler" } } static get methods() { return { select: "select(date=new Date(): date|string): void", clearSelection: "clearSelection(): void", today: "today(): date", navigate: "navigate(step: date|string|int): bool" } } static get styleUrls() { return ["jqx.calendar.css"] } template() { return '<div id="container" role="presentation">\n <div id="title" class="jqx-calendar-title" role="heading" aria-level="1">\n <div id="yearContainer" class="jqx-calendar-year-container" role="button"></div>\n <div id="dateContainer" class="jqx-calendar-date-container jqx-calendar-selected" role="button"></div>\n </div>\n <div id="calendarContainer" class="jqx-calendar-container">\n <div id="header" class="jqx-calendar-header">\n <jqx-repeat-button prev-month class="jqx-calendar-button" id="previousMonthButton" animation="[[animation]]" initial-delay="[[spinButtonsInitialDelay]]" delay="[[spinButtonsDelay]]" disabled="[[disabled]]" readonly="[[readonly]]" right-to-left="[[rightToLeft]]" aria-label="Previous month">\n <span aria-hidden="true"></span>\n </jqx-repeat-button>\n <div id="dateElement" class="jqx-calendar-date-element" role="presentation">\n <div id="defaultHeaderDate" role="button"></div>\n <div id="classicHeaderDate">\n <div id="monthElement" class="jqx-calendar-month-element" disabled="[[disabled]]" role="presentation">\n </div>\n <input class="jqx-calendar-year-element" id="yearElement" disabled="[[disabled]]" readonly="[[readonly]]" aria-label="Year" />\n <span class="jqx-calendar-year-elements">\n <jqx-repeat-button next-year class="jqx-calendar-button" id="nextYearButton" animation="[[animation]]" initial-delay="[[spinButtonsInitialDelay]]" delay="[[spinButtonsDelay]]" disabled="[[disabled]]" readonly="[[readonly]]" right-to-left="[[rightToLeft]]" aria-label="Next year">\n <span aria-hidden="true"></span>\n </jqx-repeat-button>\n <jqx-repeat-button prev-year class="jqx-calendar-button" id="previousYearButton" animation="[[animation]]" initial-delay="[[spinButtonsInitialDelay]]" delay="[[spinButtonsDelay]]" disabled="[[disabled]]" readonly="[[readonly]]" right-to-left="[[rightToLeft]]" aria-label="Previous year">\n <span aria-hidden="true"></span>\n </jqx-repeat-button>\n </span>\n </div>\n </div>\n <jqx-repeat-button next-month class="jqx-calendar-button" id="nextMonthButton" animation="[[animation]]" initial-delay="[[spinButtonsInitialDelay]]" delay="[[spinButtonsDelay]]" disabled="[[disabled]]" readonly="[[readonly]]" right-to-left="[[rightToLeft]]" aria-label="Next month">\n <span aria-hidden="true"></span>\n </jqx-repeat-button>\n </div>\n <div id="body" class="jqx-content jqx-calendar-body" role="presentation">\n <div id="monthsContainer" class="jqx-calendar-months-container" role="presentation">\n <div id="month" class="jqx-calendar-month" role="grid">\n <div id="monthName" class="jqx-calendar-month-name"></div>\n <div id="weekTitles" class="jqx-calendar-week-titles" role="row">\n <div class="jqx-calendar-week-title" role="columnheader"></div>\n <div class="jqx-calendar-week-title" role="columnheader"></div>\n <div class="jqx-calendar-week-title" role="columnheader"></div>\n <div class="jqx-calendar-week-title" role="columnheader"></div>\n <div class="jqx-calendar-week-title" role="columnheader"></div>\n <div class="jqx-calendar-week-title" role="columnheader"></div>\n <div class="jqx-calendar-week-title" role="columnheader"></div>\n <div class="jqx-calendar-week-title" role="columnheader"></div>\n </div>\n <div id="weeks" class="jqx-calendar-weeks" role="rowgroup">\n <div class="jqx-calendar-week" role="row">\n <div class="jqx-calendar-week-number" role="rowheader"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n </div>\n <div class="jqx-calendar-week" role="row">\n <div class="jqx-calendar-week-number" role="rowheader"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n </div>\n <div class="jqx-calendar-week" role="row">\n <div class="jqx-calendar-week-number" role="rowheader"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n </div>\n <div class="jqx-calendar-week" role="row">\n <div class="jqx-calendar-week-number" role="rowheader"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n </div>\n <div class="jqx-calendar-week" role="row">\n <div class="jqx-calendar-week-number" role="rowheader"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n </div>\n <div class="jqx-calendar-week" role="row">\n <div class="jqx-calendar-week-number" role="rowheader"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"></div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n <div class="jqx-calendar-cell" role="gridcell"> </div>\n </div>\n </div>\n </div>\n </div>\n <div id="dateViewContainer" class="jqx-calendar-date-view-container jqx-hidden">\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n <div class="jqx-calendar-cell" role="button"></div>\n </div>\n <div id="monthsSeparator" class="jqx-calendar-month-separator"></div>\n <div id="nextMonthsContainer" class="jqx-calendar-next-months-container" aria-hidden="true"></div>\n <div id="animationPanel" class="jqx-calendar-animation-panel jqx-hidden"></div>\n </div>\n <div id="footer" class="jqx-calendar-footer jqx-hidden">\n <div id="selectedDatesRange"></div>\n </div>\n <input id="hiddenInput" type="hidden" name="[[name]]">\n </div>\n </div>' } _updateTargetValue() { const e = this; if (e.dataset.target) { const t = document.querySelector(e.dataset.target); if (t) { const a = e.dataset.property, n = e.selectedDates.toString(); a && void 0 !== t[a] && (t[a] = n) } } } propertyChangedHandler(e, t, a) { super.propertyChangedHandler(e, t, a); const n = this; switch (e) { case "animationSettings": n._applyAnimationSettings(); break; case "disabled": case "unfocusable": n._setFocusable(); break; case "calendarMode": case "dropDownWidth": case "dropDownHeight": n.displayMode = "month", n._refreshHeaderElements(), n._refreshCalendarMode(), n._setDisplayModeContent(); break; case "dayNameFormat": n._refreshDayOfWeekTitles(n.$.month); break; case "dateFormatFunction": { let e = n.$.monthsContainer.children; for (let t = 0; t < e.length; t++)e[t].firstElementChild.innerHTML = a ? a(e[t]._date) : n._monthsNames[e[t]._date.getMonth()] + " " + e[t]._date.toLocaleDateString(n.locale, { year: n.yearFormat }); n._refreshHeaderTitle(); break } case "displayMode": if ("classic" === n.calendarMode && "month" !== a) { n[e] = "month"; break } n._setDisplayMode(t, a); break; case "displayModeView": n._applyAnimationSettings(!0), "month" !== n.displayMode && n._setDisplayModeContent(); break; case "firstDayOfWeek": n._handleMonths(), n._refreshDayOfWeekTitles(); break; case "hideTooltipArrow": n.$.tooltip && (n.$.tooltip.arrow = !a); break; case "titleTemplate": case "headerTemplate": case "footerTemplate": n._handleLayoutTemplate(n.$[e.split(/[T]/)[0]], a), "titleTemplate" === e ? n._refreshTitle() : "headerTemplate" === e ? n._refreshHeaderTitle() : n._refreshFooter(); break; case "importantDates": n.importantDates = n._getValidDates(a), n._refreshImportantDates(); break; case "importantDatesTemplate": n._handleImportantDateTemplate(), n._refreshImportantDates(); break; case "locale": n._refreshMonthNames(), n._refreshDayOfWeekTitles(), n._refreshHeaderTitle(), n._refreshTitle(), n._refreshFooter(), n.displayMode && "month" !== n.displayMode && n._setDisplayModeContent(); break; case "max": case "min": n._validateMinMax(e, a, t), n._validateSelectedDates(), n._noFocusingRequired = !1, n._refreshHeaderElements(); break; case "months": n._handleMonths(); break; case "monthNameFormat": n._refreshCalendarMode(), n._refreshHeaderTitle(); break; case "restrictedDates": n._setRestrictedDates(n.restrictedDates = n._getValidDates(a)); break; case "rightToLeft": n._refreshDayOfWeekTitles(), n._handleMonths(); break; case "scrollButtonsNavigationMode": n._setScrollButtonsNavigationMode(); break; case "selectedDates": if (n._clearSelection(!0), n._validateSelectedDates(n._getValidDates(a)), n._applySelectionMode(!0), n._viewDates) { let e = n.selectedDates[n.selectedDates.length - 1]; n._isDateInView(e) ? n.selectedDates.map((e => n._selectDate(e, !0, !0))) : n._handleMonths(e) } n._refreshFooter(), n._setWeeksVisibility(n.$.monthsContainer), n.$.hiddenInput.value = n.selectedDates.toString(), n.isInitialized && (n.$.fireEvent("change", { value: n.selectedDates }), n._updateTargetValue()), n._refreshTitle(), "month" !== n.displayMode && n._setDisplayModeContent(); break; case "selectionMode": n._applySelectionMode(!1, t), n._refreshTitle(); break; case "tooltip": n._handleTooltip(); break; case "tooltipArrow": case "tooltipArrowDirection": case "tooltipDelay": case "tooltipOffset": case "tooltipPosition": case "tooltipTemplate": if (n.$.tooltip) { const t = e.replace("tooltip", ""); n.$.tooltip[t.charAt(0).toLowerCase() + t.slice(1)] = a } break; case "view": n._refreshTitle(); break; case "viewSections": a.indexOf("title") > -1 ? n.$title.removeClass("jqx-hidden") : n.$title.addClass("jqx-hidden"), n._refreshTitle(), a.indexOf("header") > -1 ? n.$header.removeClass("jqx-hidden") : n.$header.addClass("jqx-hidden"), n._refreshHeaderTitle(), a.indexOf("footer") > -1 ? n.$footer.removeClass("jqx-hidden") : n.$footer.addClass("jqx-hidden"), n._refreshFooter(), n._setFocusable(); break; case "weeks": n._setWeeksVisibility(n.$.monthsContainer); break; case "yearFormat": if (n._refreshCalendarMode(), n._refreshFooter(), n.months > 1 && "month" === n.displayMode) { let e = n._animationStarted ? n.$.nextMonthsContainer.children : n.$.monthsContainer.children; for (let t = 0; t < e.length; t++)e[t].firstElementChild.innerHTML = n.dateFormatFunction ? n.dateFormatFunction(e[t]._date) : n._monthsNames[e[t]._date.getMonth()] + " " + e[t]._date.toLocaleDateString(n.locale, { year: a }) } n._refreshTitle(), n._refreshHeaderTitle() } } ready() { super.ready(); const e = this; e._keysPressed = {}, e._applyAnimationSettings(), e.importantDates = e._getValidDates(e.importantDates), e.restrictedDates = e._getValidDates(e.restrictedDates) } render() { const e = this; e.setAttribute("role", "dialog"), e._refreshMonthNames(), e._validateMinMax(), e._validateSelectedDates(e._getValidDates(e.selectedDates)), e._handleLayoutTemplate(e.$.title, e.titleTemplate), e._handleLayoutTemplate(e.$.header, e.headerTemplate), e._handleLayoutTemplate(e.$.footer, e.footerTemplate), e._handleImportantDateTemplate(), e._setFocusable(), e._refreshDayOfWeekTitles(), e._applySelectionMode(!0), e._handleMonths(0 === e.selectedDates.length ? new Date((new Date).setHours(0, 0, 0, 0)) : e.selectedDates[e.selectedDates.length - 1]), e._handleTooltip(), e._updateViewSectionsVisibility(), e._setScrollButtonsNavigationMode(), e._refreshCalendarMode(), e._setDisplayMode(), e._refreshTitle(), e._refreshFooter(), e._refreshImportantDates(), e.$.monthElement && e.$.monthElement._setDropDownSize && e.$.monthElement._setDropDownSize(), e._changeEventFired = 0, e.$.hiddenInput.value = e.selectedDates.toString(), e.shadowRoot && e.appendChild(e.$.hiddenInput), e.isInitialized = !0, super.render() } refresh() { this.isInitialized && this.render() } _updateViewSectionsVisibility() { const e = this; e.viewSections.indexOf("title") > -1 ? e.$title.removeClass("jqx-hidden") : e.$title.addClass("jqx-hidden"), e.viewSections.indexOf("header") > -1 ? e.$header.removeClass("jqx-hidden") : e.$header.addClass("jqx-hidden"), e.viewSections.indexOf("footer") > -1 ? e.$footer.removeClass("jqx-hidden") : e.$footer.addClass("jqx-hidden") } clearSelection() { this._clearSelection() } _setFocusable() { const e = this; let t = e.tabIndex > 0 ? e.tabIndex : 0; function a(e, a) { if (a) return e && e instanceof a ? ("function" == typeof e._setFocusable && e.isCompleted ? e.unfocusable = t <= -1 : e.setAttribute("tabindex", t), e) : e || void 0 } (e.disabled || e.unfocusable) && (t = -1), e.$.previousMonthButton = a(e.$.previousMonthButton, JQX.Button), e.$.nextMonthButton = a(e.$.nextMonthButton, JQX.Button), e.$.nextYearButton = a(e.$.nextYearButton, JQX.Button), e.$.previousYearButton = a(e.$.previousYearButton, JQX.Button), e.$.monthElement = a(e.$.monthElement, JQX.Input), e.$.yearElement = a(e.$.yearElement, HTMLInputElement), e.viewSections.indexOf("title") > -1 && (e.$.dateContainer.setAttribute("tabindex", t), e.$.yearContainer.setAttribute("tabindex", t)), e.$.body.setAttribute("tabindex", t), "default" === e.calendarMode ? e.$.dateElement.setAttribute("tabindex", t) : e.$.dateElement.removeAttribute("tabindex"), e.unfocusable ? e.removeAttribute("tabindex") : e.tabIndex = e.readonly && !e.disabled ? e.tabIndex > 0 ? e.tabIndex : 0 : t } static get requires() { return { "JQX.DropDownList": "jqx.dropdownlist.js", "JQX.ListBox": "jqx.listbox.js", "JQX.RepeatButton": "jqx.button.js", "JQX.Tooltip": "jqx.tooltip.js" } } navigate(e) { const t = this; let a, n, l; if (e) { if ("number" == typeof e) { if (e = parseInt(e), isNaN(e) || 0 === e) return !1; if (6 !== t.weeks && 0 !== t.weeks && "month" === t.displayMode) { let l, i; t._focusedCell || t._focusCell(); const s = [].slice.call(t._focusedCell.closest(".jqx-calendar-weeks").children).filter((e => !e.classList.contains("jqx-hidden"))); e < 0 ? (i = s[0].querySelectorAll(".jqx-calendar-cell"), l = t.rightToLeft ? i[i.length - 1] : i[0]) : (i = s[s.length - 1].querySelectorAll(".jqx-calendar-cell"), l = t.rightToLeft ? i[0] : i[i.length - 1]), n = new Date(l.value), n.setDate(n.getDate() + e), a = n } else a = t._getNextDate(e) } else { if (a = e = t._getValidDate(e), l = !0, isNaN(a.getTime())) return !1; const i = t._viewDates[0]; if (i && a.getMonth() === i.getMonth() && a.getFullYear() === i.getFullYear()) return !1; 6 !== t.weeks && 0 !== t.weeks && "month" === t.displayMode && (n = a) } return !(!a || t.$.fireEvent("navigationChanging", { value: new Date(a), type: t.displayMode }).defaultPrevented || ("month" !== t.displayMode ? (!l && t.hasAnimation ? (t.$nextMonthsContainer.addClass("jqx-calendar-date-view-container"), "list" === t.displayModeView ? t._setDisplayModeContent(a) : t._navigationDate && t._navigationDate.getTime() === a.getTime() || t._animateNavigation(a, e)) : t._setDisplayModeContent(a), t.$.fireEvent("navigationChange", { value: new Date(a), type: t.displayMode }), 0) : (t.hasAnimation ? (t._animateNavigation(a, e), t.$nextMonthsContainer.hasClass("jqx-date-view-container") && t.$nextMonthsContainer.removeClass("jqx-date-view-container")) : (t._handleMonths(a), t._refreshHeaderElements(), t._refreshHeaderTitle()), n && (t._focusCell(t._getCellByDate(n, t._animationStarted ? t.$.nextMonthsContainer : void 0), !0), t._updateWeeksVisibility(e)), t.$.fireEvent("navigationChange", { value: new Date(a), type: t.displayMode }), 0))) } } set value(e) { this._select(e) } get value() { return this.selectedDates && this.selectedDates.length > 0 ? this.selectedDates[0] : null } select(e) { this._select(e) } _select(e) { const t = this; t._viewDates && void 0 !== t._viewDates[0] && "none" !== t.selectionMode && e && (e = t._getValidDate(e)) instanceof Date && ("one" === t.selectionMode && t.selectedDates.map(Number).indexOf(e.getTime()) > -1 || e.getTime() < t.min.getTime() || e.getTime() > t.max.getTime() || ("one" !== t.selectionMode && "default" !== t.selectionMode && "zeroOrOne" !== t.selectionMode || t._clearSelection(!0), t._selectDate(e), 1 !== t.selectedDates.length || t._isDateInView(t.selectedDates[0]) || t._handleMonths(t.selectedDates[0]))) } today() { const e = this; let t = new Date; return t.setHours(0, 0, 0, 0), t.getTime() < e.min.getTime() || t.getTime() > e.max.getTime() ? t = new Date(e.max) : e._selectDate(t), e._handleMonths(t), t } _animateNavigation(e, t, a) { const n = this; n._navigationDate = e, n._animationSettings || n._applyAnimationSettings(), n.$animationPanel.addClass("jqx-hidden"), n.$.dateViewContainer.style.transform = "", n.$.dateViewContainer.style.opacity = "", n.$.monthsContainer.style.transform = "", n.$.monthsContainer.style.opacity = ""; const l = "month" !== n.displayMode ? n.$.dateViewContainer : n.$.monthsContainer, i = n.$.body[n._animationSettings.scrollMax] - n.$.body[n._animationSettings.size]; n._scrollStep = n.$.body[n._animationSettings.size] * n._animationSettings.startSpeed, n._animationStarted && n._getMonthCells(n.$.monthsContainer, n.rightToLeft).map((e => { n._setCellState(e, "restricted", !1), n._setCellState(e, "selected", !1), n._setCellState(e, "otherMonth", !1), n._setCellState(e, "focus", !1), n._setCellState(e, "important", !1), n._setCellState(e, "today", !1), n._setCellState(e, "disabled", !1), n._setCellState(e, "hover", !1) })), n._animationStarted = !0, "month" !== n.displayMode ? (n._setCellState(n._focusedCell, "focus", !1), n._setDisplayModeContent(e, n.$.nextMonthsContainer)) : n._handleMonths(e, n.$.nextMonthsContainer), n.rightToLeft && (t *= -1), a || (t > 0 ? (l.style.order = 1, n.$.nextMonthsContainer.style.order = 3, (!n._animationStarted || n._animationStarted && n.$.body[n._animationSettings.scrollSize] > n.$.body[n._animationSettings.scrollMax] * n._animationSettings.resetThreshold * 2) && (n.$.body[n._animationSettings.scrollSize] = 0)) : (l.style.order = 3, n.$.nextMonthsContainer.style.order = 1, (!n._animationStarted || n._animationStarted && n.$.body[n._animationSettings.scrollSize] < n.$.body[n._animationSettings.scrollMax] * n._animationSettings.resetThreshold) && (n.$.body[n._animationSettings.scrollSize] = n.$.body[n._animationSettings.scrollMax]))), cancelAnimationFrame(n._animationId), n._animationId = requestAnimationFrame((function e() { let a = t > 0 ? n.$.body[n._animationSettings.scrollSize] >= i : 0 === n.$.body[n._animationSettings.scrollSize], l = n._scrollStep / 2; a ? n._animateNavigationCompleted() : (t > 0 && n.$.body[n._animationSettings.scrollSize] > i * n._animationSettings.easeThreshold ? (l = Math.max(n.$.body[n._animationSettings.scrollSize] / n._animationSettings.stepEaseSize, Math.abs(l - (i - n.$.body[n._animationSettings.scrollSize]) * n._animationSettings.step)), n._scrollStep = n._scrollStep * n._animationSettings.step + l) : t < 0 && n.$.body[n._animationSettings.scrollSize] < i * n._animationSettings.easeThreshold && (l = Math.max(n.$.body[n._animationSettings.scrollMax] / n._animationSettings.stepEaseSize, Math.abs(l - n.$.body[n._animationSettings.scrollSize] * n._animationSettings.step)), n._scrollStep = n._scrollStep * n._animationSettings.step + l), n.$.body[n._animationSettings.scrollSize] += t > 0 ? n._scrollStep : -n._scrollStep, n._animationId = requestAnimationFrame(e)) })) } _animateNavigationCompleted() { const e = this; let t, a, n, l = "month" !== e.displayMode ? e.$.dateViewContainer : e.$.monthsContainer; if (cancelAnimationFrame(e._animationId), "month" !== e.displayMode) { let i = [].slice.call(l.children).indexOf(e._focusedCell); l.innerHTML = e.$.nextMonthsContainer.innerHTML; let s, o = l.children[i]; a = l.children, n = e.$.nextMonthsContainer.children; for (let t = 0; t < a.length; t++)a[t].value = n[t].value, a[t].restricted = n[t].restricted, a[t].important = n[t].important, a[t].otherMonth = n[t].otherMonth, a[t].value.getTime() <= e.max.getTime() && (s = a[t]); t = o && o.value.getTime() >= e.max.getTime() ? s.value : e._focusedCell ? e._focusedCell.value : void 0 } else { let i = l.children, s = e.$.nextMonthsContainer.children; e._focusedCell && e.$.nextMonthsContainer.contains(e._focusedCell) && (t = e._focusedCell.value); for (let t = 0; t < i.length && s[t]._date; t++) { i[t]._date = s[t]._date, i[t].innerHTML = s[t].innerHTML, a = e._getMonthCells(i[t]), n = e._getMonthCells(s[t]); for (let e = 0; e < a.length; e++)a[e].value = n[e].value, a[e].restricted = n[e].restricted, a[e].important = n[e].important, a[e].otherMonth = n[e].otherMonth, a[e].removeAttribute("focus") } e._selectedCells.length > 0 && (e._selectedCells = e._selectedCells.map((t => e._getCellByDate(t.value))).filter((e => void 0 !== e))) } e._focusCell(e._getCellByDate(t)), l.style.order = 1, e.$.nextMonthsContainer.style.order = 3, e.$.body[e._animationSettings.scrollSize] = 0, e._animationStarted = !1, delete e._navigationDate } _applyAnimationSettings(e) { const t = this; t._animationSettings = t.animationSettings ? t.animationSettings : t._animationSettings || {}, "portrait" === t.scrollButtonsNavigationMode ? (t._animationSettings.scrollMax = "scrollHeight", t._animationSettings.size = "offsetHeight", t._animationSettings.scrollSize = "scrollTop") : (t._animationSettings.scrollMax = "scrollWidth", t._animationSettings.size = "offsetWidth", t._animationSettings.scrollSize = "scrollLeft"), e || (t._animationSettings.startSpeed = t._animationSettings.startSpeed ? t._animationSettings.startSpeed : .2, t._animationSettings.easeThreshold = t._animationSettings.easeThreshold ? t._animationSettings.easeThreshold : .5, t._animationSettings.step = t._animationSettings.step ? t._animationSettings.step : .25, t._animationSettings.stepEaseSize = t._animationSettings.stepEaseSize ? t._animationSettings.stepEaseSize : 200, t._animationSettings.resetThreshold = t._animationSettings.resetThreshold ? t._animationSettings.resetThreshold : .2) } _applySelectionMode(e, t) { const a = this; let n = [], l = !!e, i = a.selectionMode; function s(e, t) { const n = a.$.monthsContainer.children; for (let l = 0; l < n.length; l++)a._getMonthCells(n[l]).map((n => { a._setCellState(n, e, t) })) } switch ("many" === i && "range" === i || s("hover", !1), a._newRangeSelectionStarted = a.selectedDates.length > 0 && "range" === i, -1 !== ["default", "many", "zeroOrMany", "oneOrMany", "week", "range"].indexOf(i) ? Array.from(a.getElementsByClassName("jqx-calendar-month")).forEach((e => e.setAttribute("aria-multiselectable", !0))) : Array.from(a.getElementsByClassName("jqx-calendar-month")).forEach((e => e.removeAttribute("aria-multiselectable"))), "none" !== i && "none" !== t || s("selected", !1), i) { case "none": return void a._clearSelection(l); case "range": return void (a.selectedDates.length > 1 && a._selectMultipleDates(a.selectedDates[0], a.selectedDates[a.selectedDates.length - 1])); case "many": case "default": case "oneOrMany": if (0 === a.selectedDates.length) { n.push(new Date(Math.min(Math.max(a.min.getTime(), (new Date).setHours(0, 0, 0, 0)), a.max.getTime()))); break } return; case "oneExtended": case "one": if (1 === a.selectedDates.length) return; a.selectedDates.length > 1 ? (n.push(a.selectedDates[a.selectedDates.length - 1]), a._clearSelection(l)) : n.push(new Date(Math.min(Math.max(a.min.getTime(), (new Date).setHours(0, 0, 0, 0)), a.max.getTime()))); break; case "zeroOrOne": if (a.selectedDates.length > 1) { n.push(a.selectedDates[a.selectedDates.length - 1]), a._clearSelection(l); break } return; case "zeroOrMany": return; case "week": if (a.selectedDates.length >= 1) { let e = a.selectedDates[a.selectedDates.length - 1]; for (let t = 0; t < 7; t++)n.push(new Date(e)), e.setDate(e.getDate() + 1); a._clearSelection(l) } }if (a.selectedDates = [], e) return void (a.selectedDates = n); const o = n.length; for (let e = 0; e < o; e++)a._selectDate(n[e], e < o - 1) } _clearSelection(e) { const t = this, a = t.selectedDates.slice(0), n = t.selectionMode; if (t.isRendered) { if (t._selectedCells && t._selectedCells.map((e => { t._setCellState(e, "selected", !1) })), t.selectedDates = [], t._selectedCells = [], "many" === n || "range" === n) { const e = t.$.monthsContainer.children; for (let a = 0; a < e.length; a++)t._getMonthCells(e[a]).map((e => { t._setCellState(e, "hover", !1) })) } t.$.footer && t._refreshFooter(), t.$.hiddenInput.value = t.selectedDates.toString(), !e && t.isInitialized && a.length && (t.$.fireEvent("change", { value: [] }), t._updateTargetValue()), t.$.title && t._refreshTitle() } else t.set("selectedDates", []) } _bodyBlurStateHandler(e) { this._bodyStateHandler(e), this.$.fireEvent("blur") } _bodyFocusStateHandler(e) { this._bodyStateHandler(e), this.$.fireEvent("focus") } _bodyStateHandler(e) { const t = this; if (t._focusedCell) { if ("blur" === e.type || "focus" === e.type && t._noFocusingRequired) return t._noFocusingRequired = !1, void t._setCellState(t._focusedCell, "focus", !1); if ("month" !== t.displayMode) return void ("focus" !== e.type || t.$.dateViewContainer.querySelector("jqx-calendar-cell[focus]") || t._setCellState(t._focusedCell || t.$.dateViewContainer.querySelector(".jqx-calendar-cell"), "focus", !0)) } "focus" === e.type && t._focusCell() } _containerWheelHandler(e) { const t = this; if (t.disabled || t.readonly || "month" !== t.displayMode && "list" === t.displayModeView) return; let a, n; n = document.activeElement, t.shadowRoot ? n = t.shadowRoot.activeElement : t.isInShadowDOM && (n = t.getRootNode().activeElement), t.$.yearElement === n && (a = 12), (n && t.shadowRoot || n.closest("jqx-calendar") === t) && (a = e.target === t.$.yearElement ? 12 : 1), a && (e.preventDefault(), a = 12 === a ? a : a * t.months, e.deltaY > 0 ? t.navigate(-a) : t.navigate(a)) } _downHandler(e) { const t = this; let a = e.originalEvent.target; if (t._dragStartDetails = void 0, t.disabled || t.readonly) return; if (t.hasRippleAnimation && (a.value instanceof Date || a.parentElement && a.parentElement.classList.contains("jqx-calendar-title") || a.parentElement === t.$.dateElement) && JQX.Utilities.Animation.Ripple.animate(a, e.pageX, e.pageY), a = e.originalEvent.target.closest(".jqx-calendar-header"), e.originalEvent.target.closest(".jqx-calendar-year-container") && "decade" !== t.displayMode) { if ("classic" === t.calendarMode) return; return void t._showDateView("year") } if (e.originalEvent.target.closest(".jqx-calendar-date-container") && "month" !== t.displayMode) { if ("classic" === t.calendarMode) return; return void t._displayModeHandler("list" === t.displayModeView ? t.$.listViewContainer.querySelector("li.active") : t._focusedCell, "month") } if (t._animationStarted && t._animateNavigationCompleted(), JQX.Utilities.Core.isMobile && e.originalEvent.target.closest(".jqx-calendar-body") === t.$.body) return void (t._dragStartDetails = { x: e.pageX, y: e.pageY, startTime: Date.now(), target: e.originalEvent.target }); if (a = e.originalEvent.target, a.closest(".jqx-calendar-week") || a.parentElement === t.$.dateViewContainer) { for (; a && !(a.value instanceof Date);)a = a.parentElement; return void (a && ("month" !== t.displayMode ? t._displayModeHandler(a) : t._weeksDownHandler(e, a))) } if (a.closest(".jqx-calendar-month-element")) return; if (e.originalEvent.stopPropagation(), "list" === t.displayModeView && "month" !== t.displayMode) return a = (t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target).closest("jqx-list-item"), void (a && t._displayModeHandler(a)); const n = document.scrollingElement || document.documentElement, l = n.scrollLeft, i = n.scrollTop; t.unfocusable || t.focus(), window.scrollTo(l, i) } _displayModeHandler(e, t) { const a = this; if (a._animationStarted && a._animateNavigationCompleted(), e instanceof HTMLElement && e.closest(".jqx-calendar-week") && e.otherMonth) { if ("decade" === a.displayMode && (e.value.getFullYear() < a.min.getFullYear() || e.value.getFullYear() > a.max.getFullYear())) return; if ("year" === a.displayMode && (e.value.getFullYear() < a.min.getFullYear() || e.value.getFullYear() === a.min.getFullYear() && e.value.getMonth() < a.min.getMonth() || e.value.getFullYear() > a.max.getFullYear() || e.value.getFullYear() === a.max.getFullYear() && e.value.getMonth() > a.max.getMonth())) return } switch (t = t || a.displayMode) { case "year": t = "month"; break; case "decade": t = "year" }if (a.displayMode === t) return; const n = a.$.listViewContainer, l = n && n.contains(e); a.$.fireEvent("displayModeChanging", { oldDisplayMode: a.displayMode, newDisplayMode: t }).defaultPrevented || (a.set("displayMode", t), a.$nextMonthsContainer.removeClass("jqx-calendar-date-view-container"), e.parentElement !== a.$.dateViewContainer || e.disabled || e.restricted || a._focusCell(e), a.hasAnimation ? (l && e instanceof HTMLLIElement ? e.offsetHeight ? a.$.animationPanel.style.transformOrigin = e.offsetWidth / 2 + "px " + (e.offsetTop + e.offsetHeight / 2) + "px" : a.$.animationPanel.style.transformOrigin = n.offsetLeft + n.offsetWidth / 2 + "px " + (n.offsetTop + n.offsetHeight / 2) + "px" : (a.$.dateViewContainer.style.order = 1, a.$.nextMonthsContainer.style.order = 3, e = a._focusedCell, a.$.animationPanel.style.transformOrigin = e.offsetLeft + e.offsetWidth / 2 + "px " + (e.offsetTop + e.offsetHeight / 2) + "px"), a._animateView(1, e)) : a._setDisplayModeContent(e.value instanceof Date ? e.value : new Date(e.getAttribute("value") || e.value))) } _animateView(e, t) { const a = this; let n, l, i = t instanceof Date ? t : new Date(t.getAttribute("value") || t.value), s = !1, o = 1, r = 1; const d = a.$.listViewContainer; "list" === a.displayModeView ? n = d.contains(t) ? d : l = "month" !== a.displayMode ? a.$.monthsContainer : d : t.value instanceof Date || (t = a._focusedCell ? a._focusedCell : a._selectedCells.length > 0 ? a._selectedCells[a._selectedCells.length - 1] : a._getCellByDate(new Date)), n || (n = t.parentElement === a.$.dateViewContainer ? a.$.dateViewContainer : a.$.monthsContainer), l || (l = "month" === a.displayMode ? a.$.monthsContainer : "list" === a.displayModeView ? d : a.$.dateViewContainer), l.style.transformOrigin = a.$.animationPanel.style.transformOrigin, n === d ? (a.$.animationPanel.innerHTML = "", a.$.animationPanel.appendChild(n.cloneNode(!0))) : a.$.animationPanel.innerHTML = n.innerHTML, a._setDisplayModeContent(i), n.style.order = 1, a.$.nextMonthsContainer.style.order = 3, a.$.body[a._animationSettings.scrollSize] = 0, a.$.animationPanel.style.width = a.$.body.offsetWidth + "px", a.$.animationPanel.style.height = a.$.body.offsetHeight + "px", a.$.animationPanel.style.transform = "scale(1)", a.$.animationPanel.style.opacity = 1, a.$animationPanel.removeClass("jqx-hidden"), l.style.opacity = "0", l.style.transform = "scale(3.5)", n.$.hasClass("jqx-calendar-date-view-container") ? a.$animationPanel.addClass("jqx-calendar-date-view-container") : a.$animationPanel.removeClass("jqx-calendar-date-view-container"), cancelAnimationFrame(a._animationId), a._animationId = requestAnimationFrame((function t() { if ((e > 0 && o >= 3.5 || e < 0 && o <= 0) && (s = !0), s) { if (cancelAnimationFrame(a._animationId), a.$animationPanel.addClass("jqx-hidden"), a.$.animationPanel.style.transform = "", a.$.animationPanel.style.opacity = "", n.style.order = 1, a.$.nextMonthsContainer.style.order = 3, a.$.body[a._animationSettings.scrollSize] = 0, l.style.transform = "", l.style.opacity = "", a.unfocusable) return; "month" === a.displayMode ? a.$.body.focus() : "list" === a.displayModeView && a.focus() } else a.$.animationPanel.style.opacity = r, l.style.opacity = 1 - r, r -= .05, e > 0 ? (a.$.animationPanel.style.transform = "scale(" + o + ")", l.style.transform = "scale(" + Math.min((o - 1) / 2, 1) + ")", o += .125) : (a.$.animationPanel.style.transform = "scale(" + Math.max(o, 0) + ")", l.style.transform = "scale(" + Math.max(1 + o, 1) + ")", o -= .06), a._animationId = requestAnimationFrame(t) })) } _documentUpHandler(e) { const t = this; let a = e.originalEvent.target; if ((t.isInShadowDOM || t.shadowRoot && a === t) && (a = e.originalEvent.composedPath()[0]), t._newRangeSelectionStarted && !t.$.container.contains(a) && delete t._newRangeSelectionStarted, a && a.classList && a.classList.contains("jqx-calendar-cell") && t._dragStartDetails && (e.originalEvent.stopPropagation(), e.originalEvent.preventDefault(), e.preventDefault()), !JQX.Utilities.Core.isMobile || !t._dragStartDetails || e.originalEvent.target.closest(".jqx-calendar-list-view")) return; delete t._previousIteration; const n = Date.now(); let l = {}; (t.isInShadowDOM || t.shadowRoot && a === t) && (a = e.originalEvent.composedPath()[0]), "portrait" === t.scrollButtonsNavigationMode ? (l.coordinate = "y", l.direction = "pageY") : (l.coordinate = "x", l.direction = "pageX"); const i = t._dragStartDetails.step * (t.rightToLeft ? -1 : 1); if (Math.abs(t._dragStartDetails[l.coordinate] - e[l.direction]) <= 10) { if (a = "list" === t.displayModeView && "month" !== t.displayMode ? a.closest("jqx-list-item") : a, !a) return void (t._dragStartDetails = void 0); if ("month" !== t.displayMode) return t._displayModeHandler(a), "portrait" === t.scrollButtonsNavigationMode ? t.$.body.scrollTop = 0 : t.$.body.scrollLeft = 0, void (t._dragStartDetails = void 0); if (t._weeksDownHandler(e, a), !t.disableAutoNavigation && a.otherMonth) return } else { const a = Math.abs((e[l.direction] - t._dragStartDetails[l.coordinate]) / (n - t._dragStartDetails.startTime)); if (a > 1) { const e = parseInt(a); for (let a = 0; a < e; a++)if (!t.navigate(i)) { t._cancelAnimation(); break } return void (t._dragStartDetails = void 0) } } if (!t.hasAnimation) return t.navigate(t._dragStartDetails.step), void (t._dragStartDetails = void 0); let s = ("month" !== t.displayMode ? t.$.dateViewContainer[t._animationSettings.scrollMax] : t.$.monthsContainer[t._animationSettings.scrollMax]) + t.$.monthsSeparator[t._animationSettings.size]; if (t._dragStartDetails.step > 0 && t.$.body[t._animationSettings.scrollSize] > s * t._animationSettings.easeThreshold || t._dragStartDetails.step < 0 && t.$.body[t._animationSettings.scrollSize] < s * t._animationSettings.easeThreshold) return t._animateNavigation(t._dragStartDetails.navigationDate, i, !0), 6 !== t.weeks && 0 !== t.weeks && "month" === t.displayMode && t._updateWeeksVisibility(i, t._getCellByDate(t._dragStartDetails.navigationDate, t.$.nextMonthsContainer)), t.$.fireEvent("navigationChange", { value: new Date(t._dragStartDetails.navigationDate), type: t.displayMode }), void (t._dragStartDetails = void 0); t._cancelAnimation(), t._dragStartDetails = void 0 } _cancelAnimation() { const e = this, t = "month" !== e.displayMode ? e.$.dateViewContainer : e.$.monthsContainer; let a = e.$.animationPanel.style.transform, n = e.$.animationPanel.style.opacity; a && (a = parseFloat(a.substring(a.indexOf("(") + 1 || 0, a.indexOf(")")))), t.style.order = 1, e.$.nextMonthsContainer.style.order = 3, e.$.body[e._animationSettings.scrollSize] = 0, e._animationId = requestAnimationFrame((function t() { if (!a || a >= 3.5) { cancelAnimationFrame(e._animationId), e.$animationPanel.addClass("jqx-hidden"), e.$.animationPanel.style.transform = "", e.$.animationPanel.style.opacity = ""; const t = "month" === e.displayMode ? e.$.monthsContainer : e.$.listViewContainer; return t.style.transform = "", t.style.opacity = "", e.unfocusable || ("month" === e.displayMode ? e.$.body.focus() : "list" === e.displayModeView && e.focus()), void (e._animationStarted = !1) } e.$.animationPanel.style.opacity = n -= .25, e.$.animationPanel.style.transform = "scale(" + (a += .5) + ")", e._animationId = requestAnimationFrame(t) })) } _focusCell(e, t) { const a = this; if (a._focusedCell && a._setCellState(a._focusedCell, "focus", !1), a.disabled || a.readonly) return; if (e) { if ("month" !== a.displayMode) return a._setCellState(e, "focus", !0), void (a._focusedCell = e); if (e.disabled || e.restricted) return; return t || a._setCellState(e, "focus", !0), void (a._focusedCell = e) } if ("month" !== a.displayMode && 0 === a.$.monthsContainer.offsetHeight) return; const n = a._selectedCells[a._selectedCells.length - 1]; if (n && n.offsetHeight) a._setCellState(n, "focus", !0), a._focusedCell = n; else { const e = a.$.monthsContainer.children; if (!e[0]._date || a.min.getTime < e[0]._date.getTime()) return; const t = a._getMonthCells(e[0], a.rightToLeft); for (let e = 0; e < t.length; e++) { const n = t[e]; if (!n.otherMonth) { if (n.disabled || n.restricted || !n.offsetHeight) continue; a._focusedCell = n; break } } } a._focusedCell && a._setCellState(a._focusedCell, "focus", !0) } _getDays(e, t) { const a = t.length; let n = []; if (a > 0) for (let l = 0; l < a; l++)t[l].getFullYear() === e.getFullYear() && t[l].getMonth() === e.getMonth() && n.push(t[l].getDate()); return n } _getCellByDate(e, t) { const a = this; if (!(e instanceof Date)) return; if (t || (t = a.$.monthsContainer), "month" !== a.displayMode) { if ("list" === a.displayModeView) return; let t = arguments[1] ? a.$.nextMonthsContainer.children : a.$.dateViewContainer.children; for (let n = 0; n < t.length; n++)if ("year" !== a.displayMode) { if (t[n].value.getFullYear() === e.getFullYear()) return t[n] } else if (t[n].value.getMonth() === e.getMonth()) return t[n]; return } let n, l, i = t.children; for (let t = 0; t < i.length; t++)if (e.getFullYear() === i[t]._date.getFullYear() && e.getMonth() === i[t]._date.getMonth()) { n = i[t]; break } if (n) { l = a._getMonthCells(n); for (let t = 0; t < l.length; t++)if ((!l[t].otherMonth || l[t].hover) && l[t].value.getMonth() === e.getMonth() && l[t].value.getDate() === e.getDate()) return l[t] } } _getMonthCells(e, t) { const a = e.getElementsByClassName("jqx-calendar-week"); let n = []; if (t) for (let e = 0; e < a.length; e++) { let t = a[e].children; for (let e = t.length - 1; e > 0; e--)t[e].classList.contains("jqx-calendar-cell") && n.push(t[e]) } else for (let e = 0; e < a.length; e++) { let t = a[e].children; for (let e = 1; e < t.length; e++)t[e].classList.contains("jqx-calendar-cell") && n.push(t[e]) } return n } _getWeekNumber(e) { const t = this; let a, n = new Date(e.getFullYear(), 0, 1), l = Math.round((e.getTime() - n.getTime() - 6e4 * (e.getTimezoneOffset() - n.getTimezoneOffset())) / 864e5) + 1, i = n.getDay() - t.firstDayOfWeek; return i = i >= 0 ? i : i + 7, i < 4 ? (a = Math.floor((l + i - 1) / 7) + 1, a > 52 && (n = new Date(e.getFullYear() + 1, 0, 1), i = n.getDay() - t.firstDayOfWeek, i = i >= 0 ? i : i + 7, a = i < 4 ? 1 : 53)) : a = Math.round((l + i - 1) / 7), a } _handleDateSelection(e) { const t = this; if (void 0 !== e && !e.disabled && !e.restricted) switch (t.selectionMode) { case "none": t._focusCell(e); break; case "oneExtended": case "one": case "default": if (t._keysPressed.Control) return t.selectedDates.length > 1 || 1 === t.selectedDates.length && !e.selected ? void t._selectDate(e.value) : void t._focusCell(e); if (t._keysPressed.Shift) return void t._selectMultipleDates(new Date(t.selectedDates[0]), e); t._clearSelection(!0), t._selectDate(e.value, t._selectedCells.indexOf(e.value) > -1); break; case "many": { if (0 === t.selectedDates.length) return void t._selectDate(e.value); const a = t.selectedDates[t.selectedDates.length - 1]; let n = new Date(t.selectedDates[0]); if (e.value.getTime() === n.getTime() || e.value.getTime() === a.getTime()) return t._clearSelection(), void t._focusCell(e); t.selectedDates.length > 0 && t._selectMultipleDates(n, e); break } case "range": { if (t.selectedDates.length > 1 && !t._keysPressed.Control && !t._newRangeSelectionStarted && t._clearSelection(!0), 0 === t.selectedDates.length || t._keysPressed.Control && t.selectedDates.length > 1 && !t._newRangeSelectionStarted) { if (e.value && t.selectedDates.find((t => t.getTime() === e.value.getTime()))) return; return t._newRangeSelectionStarted = !0, void t._selectDate(e.value) } const a = t.selectedDates[t.selectedDates.length - 1]; let n = t._keysPressed.Control || t._newRangeSelectionStarted ? a : new Date(t.selectedDates[0]); t.selectedDates.length > 0 && t._selectMultipleDates(n, e), delete t._newRangeSelectionStarted; break } case "zeroOrMany": t._selectDate(e.value); break; case "oneOrMany": if (1 === t.selectedDates.length && e.selected) return void t._focusCell(e); t._selectDate(e.value); break; case "zeroOrOne": if (1 === t.selectedDates.length && e.selected) return void t._selectDate(e.value); t._clearSelection(!0), t._selectDate(e.value); break; case "week": { if (e.selected && (e.value.getTime() === t.selectedDates[0].getTime() || e.value.getTime() === t.selectedDates[t.selectedDates.length - 1].getTime())) return t._clearSelection(), void t._focusCell(e); t._clearSelection(!0); let a = new Date(e.value); t._selectDate(a); for (let e = 1; e < 7; e++)a.setDate(a.getDate() + 1), t._selectDate(a); t._isDateInView(a) || t.navigate(1); break } } } _handleImportantDateTemplate() { const e = this; if (e._importantDatesTemplate = e._validateTemplate("importantDatesTemplate", e.importantDatesTemplate), !e._importantDatesTemplate || !e._importantDatesTemplate.content) return; let t = e._importantDatesTemplate.content; const a = t.childNodes.length, n = /{{\w+}}/g; let l; e._bindingDetails = []; for (let i = 0; i < a; i++)if (l = n.exec(t.childNodes[i].innerHTML), l) return void e._bindingDetails.push({ childNodeIndex: i, bindingString: l[0] }) } _handleLayoutTemplate(e, t) { const a = this, n = a._validateTemplate(e.$.hasClass("jqx-header") ? "headerTemplate" : e.$.hasClass("jqx-calendar-footer") ? "footerTemplate" : "titleTemplate", t); if (!n || !n.content) return void ("function" == typeof t && t(e, {})); a._layoutTemplates || (a._layoutTemplates = []); let l = document.importNode(n.content, !0); e.innerHTML = ""; const i = l.childNodes.length, s = /{{\w+}}/g; let o, r = []; for (let e = 0; e < i; e++)o = s.exec(l.childNodes[e].innerHTML), o && r.push({ childNodeIndex: e, bindingString: o[0] }); if (a._layoutTemplates = a._layoutTemplates.filter((t => t.selector !== e)), a._layoutTemplates.push({ selector: e, template: n, bindings: r }), a.shadowRoot) return e.innerHTML = "<slot></slot>", void a.appendChild(l); e.appendChild(l) } _handleCalendarCellHover(e, t) { const a = this; if (!a._animationStarted) { if ("month" === a.displayMode) if ("mouseover" === e.type && ("many" === a.selectionMode || "range" === a.selectionMode && a._newRangeSelectionStarted) && a.selectedDates.length > 0) { const e = a.$.monthsContainer.children; for (let t = 0; t < e.length; t++)a._getMonthCells(e[t]).map((e => { a._setCellState(e, "hover", !1) })); let n = new Date("range" === a.selectionMode ? a.selectedDates[a.selectedDates.length - 1] : a.selectedDates[0]), l = new Date(t.value), i = t; const s = n.getTime() > l.getTime() ? -1 : 1, o = function () { i = a._getCellByDate(n), !i || i.selected || i.restricted || a._setCellState(i, "hover", !0) }; if (n.getTime() !== l.getTime()) { for (n.setDate(n.getDate() + s); n.getTime() !== l.getTime();)o(), n.setDate(n.getDate() + s); o() } } else a._setCellState(t, "hover", !1); "mouseover" !== e.type || t.otherMonth ? a._setCellState(t, "hover", !1) : a._setCellState(t, "hover", !0) } } _handleMonths(e, t) { const a = this; let n; function l(e) { let t, n = e.children.length, l = document.createDocumentFragment(); for (; n < a.months; n++)t = a.$.month.cloneNode(!1), t.innerHTML = a.$.month.innerHTML, l.appendChild(t); return l } function i(t) { let n = t.children; for (let t = 0; t < n.length; t++)a._setMonth(e, n[t]), e.setMonth(e.getMonth() + 1); a._setWeeksVisibility(t), a._refreshHeaderElements(), a._refreshHeaderTitle(), a.tooltip && a.$.tooltip && a.$.tooltip.close(), a.$.body === document.activeElement && a._focusCell() } if (e || (e = a._viewDates && a._viewDates.length > 0 ? a._viewDates[0] : new Date), e = new Date(Math.min(Math.max(a.min.getTime(), e.getTime()), a.max.getTime())), t || (t = a.$.monthsContainer), a._selectedCells = [], a.hasAnimation) { for (n = a.$.nextMonthsContainer.children, n.length > 0 && n[0].value instanceof Date && (a.$.nextMonthsContainer.innerHTML = ""); a.$.nextMonthsContainer.childElementCount < a.months;)a.$.nextMonthsContainer.appendChild(l(a.$.nextMonthsContainer)); for (; a.$.nextMonthsContainer.childElementCount > a.months;)a.$.nextMonthsContainer.removeChild(n[a.$.nextMonthsContainer.childElementCount - 1]); if (arguments[1] === a.$.nextMonthsContainer) return void i(a.$.nextMonthsContainer) } if (n = a.$.monthsContainer.children, n.length > a.months) { for (; a.$.monthsContainer.childElementCount > a.months;)a.$.monthsContainer.removeChild(n[a.$.monthsContainer.childElementCount - 1]), a._viewDates.pop(); i(a.$.monthsContainer) } else a.$.monthsContainer.children.length !== a.months ? (a._viewDates = [], a.$.monthsContainer.appendChild(l(a.$.monthsContainer)), i(a.$.monthsContainer)) : i(a.$.monthsContainer) } _headerChangeHandler(e) { const t = this; if (e.stopPropagation(), t.disabled || t.readonly) return; if (e.target.ownerElement === t.$.monthElement && 0 !== t._changeEventFired) return void t._changeEventFired--; const a = t.displayMode; e.target === t.$.yearElement && (t._viewDates[0].setFullYear(Math.min(Math.max(t.min.getFullYear(), isNaN(parseInt(t.$.yearElement.value)) ? 0 : parseInt(t.$.yearElement.value)), t.max.getFullYear())), t._handleMonths(t._viewDates[0])), !t.$.monthElement || e.target !== t.$.monthElement && e.target.ownerElement !== t.$.monthElement || (t._handleMonths(new Date(t.$.monthsContainer.children[0]._date.getFullYear(), t.$.monthElement.selectedIndex, 1)), "month" !== a && t._setDisplayMode(t.displayMode, t.displayMode = "month")) } _headerClickHandler(e) { const t = this; if (t.disabled || t.readonly) return; let a = e.target.closest("jqx-repeat-button"); if (!a || !a.disabled) { switch (a) { case t.$.previousMonthButton: return t._isInteractiveNavigation = !0, void t.navigate(-1 * t.months * (t.rightToLeft ? -1 : 1)); case t.$.nextMonthButton: return t._isInteractiveNavigation = !0, void t.navigate(1 * t.months * (t.rightToLeft ? -1 : 1)); case t.$.previousYearButton: return void t.navigate(-12); case t.$.nextYearButton: return void t.navigate(12) }"classic" !== t.calendarMode && e.target.closest(".jqx-calendar-date-element") && (t._animationStarted && t._animateNavigationCompleted(), t._isInteractiveNavigation = !0, t._showDateView()) } } _selectMultipleDates(e, t) { const a = this; if (t instanceof HTMLElement && (t = t.value), a._newRangeSelectionStarted ? a._selectDate(e, !0) : a._clearSelection(!0), "range" !== a.selectionMode || t.getTime() !== e.getTime()) { if ((e = new Date(e)).getTime() < t.getTime()) for (; e.getTime() <= t.getTime();)a.selectedDates.find((t => t.getTime() === e.getTime())) || a._selectDate(e, !0), e.setDate(e.getDate() + 1); else if (e.getTime() > t.getTime()) for (; e.getTime() >= t.getTime();)a.selectedDates.find((t => t.getTime() === e.getTime())) || a._selectDate(e, !0), e.setDate(e.getDate() - 1); else a._selectDate(t, !0); a.$.hiddenInput.value = a.selectedDates.toString(), a._refreshFooter(), a.isInitialized && (a.$.fireEvent("change", { value: a.selectedDates }), a._updateTargetValue()), a._refreshTitle() } } _setDisplayMode(e, t, a) { const n = this; if (n.$nextMonthsContainer.removeClass("jqx-calendar-date-view-container"), 0 !== arguments.length && n.hasAnimation) if (n._animationStarted && (n.displayMode = e, n._animateNavigationCompleted(), n.displayMode = t), "month" === e && "year" === t || "year" === e && "decade" === t) n.displayMode = e, n._showDateView(a ? void 0 : n.displayMode); else if ("month" === e && "decade" === t) n._showDateView(n.displayMode = "year"); else { let e; "list" === n.displayModeView ? (e = n.$.listViewContainer.querySelector("li.active"), n.$.animationPanel.style.transformOrigin = e.offsetLeft + e.offsetWidth / 2 + "px " + (e.offsetTop > 0 ? e.offsetTop - e.offsetHeight / 2 : e.offsetTop + e.offsetHeight / 2) + "px") : (n.$.dateViewContainer.style.order = 1, n.$.nextMonthsContainer.style.order = 3, e = n._focusedCell, n.$.animationPanel.style.transformOrigin = e.offsetLeft + e.offsetWidth / 2 + "px " + (e.offsetTop + e.offsetHeight / 2) + "px"), n._animateView(1, e) } else { if ("classic" === n.calendarMode) return void (n.displayMode = "month"); if ("month" !== n.displayMode && (n.$monthsContainer.addClass("jqx-hidden"), n.$dateViewContainer.hasClass("jqx-hidden") && n.$dateViewContainer.removeClass("jqx-hidden")), !n.isCompleted && "month" === n.displayMode) return; n._setDisplayModeContent() } } _setDisplayModeContent(e, t) { const a = this; let n = e && "Invalid Date" !== e.toString() ? e : a.selectedDates.length > 0 ? a.selectedDates[a.selectedDates.length - 1] : new Date; n.setTime(Math.min(Math.max(n.getTime(), a.min.getTime()), a.max.getTime())), n.setHours(0, 0, 0, 0); const l = a._prepareView(n); if (!l) return; let i; t ? (a.$.nextMonthsContainer.innerHTML = a.$.dateViewContainer.innerHTML, i = a.$.nextMonthsContainer) : i = a.$.dateViewContainer; const s = i.children; let o; for (let e = 0; e < s.length; e++) { const t = s[e]; t.innerHTML = l.viewContent[e], t.value = l.dates[e], "year" === a.displayMode ? (t.value.getFullYear() < a.min.getFullYear() || t.value.getFullYear() === a.min.getFullYear() && t.value.getMonth() < a.min.getMonth() || t.value.getFullYear() > a.max.getFullYear() || t.value.getFullYear() === a.max.getFullYear() && t.value.getMonth() > a.max.getMonth() ? a._setCellState(t, "otherMonth", !0) : a._setCellState(t, "otherMonth", !1), n.getFullYear() === t.value.getFullYear() && n.getMonth() === t.value.getMonth() && (o = t)) : "decade" === a.displayMode && (0 === e || e === s.length - 1 || t.value.getFullYear() < a.min.getFullYear() || t.value.getFullYear() > a.max.getFullYear() ? a._setCellState(t, "otherMonth", !0) : a._setCellState(t, "otherMonth", !1), n.getFullYear() === t.value.getFullYear() && (o = t)), a._setCellState(t, "hover", !1), a._setCellState(t, "focus", !1) } if (o.otherMonth) for (let e = 0; e < s.length; e++)if (!s[e].otherMonth) { o = s[e]; break } a._mobileScrolling || (a._focusedCell && a._setCellState(a._focusedCell, "focus", !1), a._focusedCell = o, a._focusCell(a._focusedCell), a._refreshHeaderTitle(), a._refreshHeaderElements(), a.$.fireEvent("displayModeChange"), a._isInteractiveNavigation ? a._isInteractiveNavigation = void 0 : (a._setCellState(o, "focus", !0), setTimeout((function () { a.unfocusable || (a.$.body.focus(), a._focusCell(a._focusedCell)) }), 0))) } _prepareView(e) { const t = this, a = t.$.listViewContainer; let n, l, i = [], s = []; function o(e, t, a) { let n = new Date(e, t + 1, 0), l = n.getDate(); return a > l ? n.setDate(l) : n.setDate(a), n } if ("month" === t.displayMode) return t.$nextMonthsContainer.hasClass("jqx-date-view-container") && t.$nextMonthsContainer.removeClass("jqx-date-view-container"), a && a.classList.add("jqx-hidden"), t.$dateViewContainer.hasClass("jqx-visibility-hidden") && t.$dateViewContainer.removeClass("jqx-visibility-hidden"), t._isDateInView(e) || t._handleMonths(e), t.$header.hasClass("jqx-hidden") && t.$header.removeClass("jqx-hidden"), t.$body.hasClass("jqx-calendar-list-view") && t.$body.removeClass("jqx-calendar-list-view"), t.$dateContainer.addClass("jqx-calendar-selected"), t.$yearContainer.removeClass("jqx-calendar-selected"), t.$dateViewContainer.addClass("jqx-hidden"), t.$monthsContainer.removeClass("jqx-hidden"), t._refreshHeaderTitle(), t.$.body.setAttribute("tabindex", t.tabIndex > 0 ? t.tabIndex : 0), t._refreshHeaderElements(), t.unfocusable || t.$.body.focus(), t._focusCell(t._getCellByDate(e)), void t.$.fireEvent("displayModeChange"); if ("list" === t.displayModeView) return t._setDisplayModeListContent(e), void t.$.fireEvent("displayModeChange"); if (t.$header.hasClass("jqx-hidden") && t.$header.removeClass("jqx-hidden"), t.$dateViewContainer.hasClass("jqx-visibility-hidden") && t.$dateViewContainer.removeClass("jqx-visibility-hidden"), a && a.classList.add("jqx-hidden"), t.$.body.setAttribute("tabindex", t.tabIndex > 0 ? t.tabIndex : 0), "year" === t.displayMode) { let a = new Date; for (let n = 0; n < 12; n++)a = o(a.getFullYear(), n, a.getDate()), i.push(a.toLocaleDateString(t.locale, { month: "short" })), s.push(o(e.getFullYear(), n, e.getDate())) } else { n = e ? e.getFullYear() : t._viewDates[0].getFullYear(), l = n % 10, 0 !== l && (n -= l), n -= 1; for (let t = 0; t < 12; t++)i.push(n + ""), s.push(new Date(n, e.getMonth(), e.getDate())), ++n } return { viewContent: i, dates: s } } _setDisplayModeListContent(e) { const t = this; let a = []; function n(e, t, a) { let n = new Date(e, t + 1, 0), l = n.getDate(); return a > l ? n.setDate(l) : n.setDate(a), n } if (t.$dateViewContainer.addClass("jqx-visibility-hidden"), "year" === t.displayMode) { let l = new Date; for (let i = 0; i < 12; i++)l = n(l.getFullYear(), i, l.getDate()), a.push({ label: l.toLocaleDateString(t.locale, { month: "short" }), value: n(e.getFullYear(), i, e.getDate()).toDateString() }); t.$yearContainer.removeClass("jqx-calendar-selected"), t.$dateContainer.addClass("jqx-calendar-selected") } else { let n = t.min.getFullYear(), l = t.max.getFullYear(); l = Math.min(t.max.getFullYear(), e.getFullYear() + 10), n = Math.max(t.min.getFullYear(), l - 10); for (let t = n; t < l; t++)a.push({ label: t.toString(), value: new Date(t, e.getMonth(), e.getDate()).toDateString() }); t.$yearContainer.addClass("jqx-calendar-selected"), t.$dateContainer.removeClass("jqx-calendar-selected") } t._prepareListViewer(a, e.toDateString()), t._refreshHeaderTitle(), t._refreshHeaderElements(), t.unfocusable || t.focus() } _prepareListViewer(e = [], t) { const a = this, n = a.$.body; let l = a.$.listViewContainer; l || (a.$.listViewContainer = l = document.createElement("jqx-scroll-viewer"), l.classList.add("jqx-input-drop-down-menu", "jqx-calendar-list-view"), l.ensureVisible = a._listViewerEnsureVisible.bind(a), l._handleKeyStrokes = a._listViewerKeyStrokesHandler.bind(a), l._setActiveDescendant = a._listViewerSetActiveDescendant.bind(a)); let i = l.querySelector("ul"); i || (i = document.createElement("ul"), i.onclick = a._listViewContainerItemClickHandler.bind(a), l.appendChild(i)), n.contains(l) && n.removeChild(l), i.innerHTML = ""; for (let a = 0; a < e.length; a++) { const n = e[a], s = n.label, o = n.value, r = document.createElement("li"), d = document.createElement("a"); t === o ? (r.setAttribute("aria-selected", !0), r.classList.add("active"), t = r) : r.setAttribute("aria-selected", !1), r.id = l.id + "Item" + Math.floor(65536 * (1 + Math.random())).toString(16).substring(1), r.setAttribute("value", o), r.setAttribute("role", "option"), r.setAttribute("aria-label", s), d.innerHTML = s, d.setAttribute("aria-hidden", !0), r.appendChild(d), i.appendChild(r) } l.classList.remove("jqx-hidden"), n.classList.add("jqx-calendar-list-view"), n.removeAttribute("tabindex"), n.insertBefore(l, a.$.animationPanel), l.refresh(), l.ensureVisible() } _listViewerEnsureVisible() { const e = this.$.listViewContainer, t = e.querySelector(".active"); if (!t) return; const a = Array.from(e.querySelectorAll("li")); t.offsetTop + t.offsetHeight >= e.scrollTop + e.offsetHeight && (e.scrollTop = t.offsetTop + t.offsetHeight), (t.offsetTop <= e.scrollTop || t.offsetTop >= e.scrollTop + e.offsetHeight) && (e.scrollTop = t.offsetTop), 0 === a.indexOf(t) ? e.scrollTop = 0 : a.indexOf(t) === a.length - 1 && (e.scrollTop = e.scrollHeight) } _listViewerKeyStrokesHandler(e) { if (["ArrowUp", "ArrowDown"].indexOf(e) < 0) return; event.preventDefault(); const t = this.$.listViewContainer, a = t.querySelector(".active"); if (!a) { const e = t.querySelector("li"); return e.classList.add("active"), void t._setActiveDescendant(e) } const n = a["ArrowDown" === e ? "nextElementSibling" : "previousElementSibling"]; n && (a.classList.remove("active"), n.classList.add("active"), t._setActiveDescendant(n), t.ensureVisible()) } _listViewerSetActiveDescendant(e) { const t = this.$.listViewContainer; e ? t.setAttribute("aria-activedescendant", e.id) : t.removeAttribute("aria-activedescendant") } _listViewContainerItemClickHandler(e) { const t = this, a = e.target.closest("li"); a && "list" === t.displayModeView && "month" !== t.displayMode && t._displayModeHandler(a) } _isDateInView(e) { const t = this; if (!e) return !1; for (let a = 0; a < t._viewDates.length; a++)if (e.getFullYear() === t._viewDates[a].getFullYear() && e.getMonth() === t._viewDates[a].getMonth()) { let a = t._getCellByDate(e, t._animationStarted ? t.$.nextMonthsContainer : void 0); if (!a) return; return !(a.otherMonth || !a.offsetHeight || a.classList.contains("jqx-visibility-hidden")) } return !1 } _keyDownHandler(e) { const t = this; if (t.disabled || t.readonly) return; const a = (t.shadowRoot || t.getRootNode()).activeElement || document.activeElement; switch (a) { case t.$.yearElement: "Escape" === e.key && t._refreshHeaderElements(); break; case t.$.dateElement: if ("default" === t.calendarMode && " " === e.key || "Enter" === e.key) return e.preventDefault(), t._isInteractiveNavigation = !0, void t._showDateView(); t._focusedCell || t._focusCell(), e.key.indexOf("Arrow") > -1 && t.$.dateElement === a && !t.unfocusable && t.$.body.focus(), t._navigateDays(e); break; case t.$.body: " " === e.key && e.preventDefault(), t._navigateDays(e); break; case t.$.yearContainer: if (" " !== e.key && "Enter" !== e.key || "decade" === t.displayMode || (e.preventDefault(), t._isInteractiveNavigation = !0, t._showDateView("year")), e.key.indexOf("Arrow") > -1) { if (e.preventDefault(), t._focusedCell || t._focusCell(), "month" !== t.displayMode && "list" === t.displayModeView) return t.unfocusable || t.focus(), void t.$.listViewContainer._handleKeyStrokes(e.key); t._navigateDays(e) } break; case t.$.dateContainer: if (" " !== e.key && "Enter" !== e.key || "month" === t.displayMode || (e.preventDefault(), t._displayModeHandler("list" === t.displayModeView ? t.$.listViewContainer.querySelector("li.active") : t._focusedCell, "month")), e.key.indexOf("Arrow") > -1) { if (t._focusedCell || t._focusCell(), "month" !== t.displayMode && "list" === t.displayModeView) return t.unfocusable || t.focus(), void t.$.listViewContainer._handleKeyStrokes(e.key); t._navigateDays(e) } break; default: if ("month" !== t.displayMode && "list" === t.displayModeView) return ["Arrow", "End", "Home", "Page"].indexOf(e.key) && e.preventDefault(), " " === e.key || "Enter" === e.key || e.ctrlKey && ("ArrowUp" === e.key || "ArrowDown" === e.key) ? void t._navigateDays(e) : void t.$.listViewContainer._handleKeyStrokes(e.key); e.key.indexOf("Arrow") > -1 && (t._focusedCell || t._focusCell(), t._navigateDays(e)) } } _showDateView(e) { const t = this; switch (e = e || t.displayMode) { case "month": e = "year"; break; case "year": e = "decade" }if (t.displayMode === e) return; if (t.$.fireEvent("displayModeChanging", { oldDisplayMode: t.displayMode, newDisplayMode: e }).defaultPrevented) return; let a; if (t.displayMode = e, "list" === t.displayModeView && "month" !== t.displayMode) { t._setDisplayModeListContent(t._focusedCell ? t._focusedCell.value : t._viewDates[0]); const e = t.$.listViewContainer; e.classList.remove("jqx-hidden"), a = e.querySelector("li.active"), a.offsetHeight ? t.$.animationPanel.style.transformOrigin = a.offsetLeft + a.offsetWidth / 2 + "px " + (a.offsetTop > 0 ? a.offsetTop - a.offsetHeight / 2 : a.offsetTop + a.offsetHeight / 2) + "px" : t.$.animationPanel.style.transformOrigin = e.offsetLeft + e.offsetWidth / 2 + "px " + (a.offsetTop > 0 ? a.offsetTop - a.offsetHeight / 2 : e.offsetTop + e.offsetHeight / 2) + "px" } else t._focusedCell || t._focusCell(), a = t._focusedCell, t.$.animationPanel.style.transformOrigin = a.offsetLeft + a.offsetWidth / 2 + "px " + (a.offsetTop + a.offsetHeight / 2) + "px"; t.$monthsContainer.addClass("jqx-hidden"), t.$dateViewContainer.hasClass("jqx-hidden") && t.$dateViewContainer.removeClass("jqx-hidden"), "decade" === t.displayMode && (t.$yearContainer.addClass("jqx-calendar-selected"), t.$dateContainer.removeClass("jqx-calendar-selected")), t.hasAnimation ? t._animateView(-1, a) : t._setDisplayModeContent(t._focusedCell ? t._focusedCell.value : t._viewDates[0]) } _keyUpHandler(e) { const t = this; t.disabled || t.readonly || "default" !== t.selectionMode && "range" !== t.selectionMode || "Shift" !== e.key && "Control" !== e.key || (t._keysPressed[e.key] = !1) } _handleTooltip() { const e = this, t = e.tooltip; let a = e.$.tooltip; t ? (a || (a = document.createElement("jqx-tooltip"), a.tooltipTemplate = e.tooltipTemplate, a.arrow = e.tooltipArrow, a.arrowDirection = e.tooltipArrowDirection, a.offset = e.tooltipOffset, a.position = e.tooltipPosition, a.delay = e.tooltipDelay, a.rightToLeft = e.rightToLeft, a.openMode = "manual", e.$.tooltip = a), a.parentElement || e.$.calendarContainer.appendChild(a)) : a && a.remove() } _mouseEventsHandler(e) { const t = this; if (t.disabled || t.readonly) return; const a = t.$.tooltip; if ("mouseenter" === e.type) return void t.$.setAttributeValue("hover", !0); if ("mouseleave" === e.type) { if (t.$.setAttributeValue("hover", !1), t._newRangeSelectionStarted && "range" === t.selectionMode) { const e = t.$.monthsContainer.children; for (let a = 0; a < e.length; a++)t._getMonthCells(e[a]).map((e => { t._setCellState(e, "hover", !1) })) } return void (t.tooltip && a && a.close()) } const n = t.shadowRoot || t.isInShadowDOM ? e.composedPath()[0] : e.target; if (!n.closest(".jqx-calendar-week")) return void (t.tooltip && a && (clearTimeout(t._tooltipAutoCloseTimeout), a[a.contains(n) ? "open" : "close"]())); const l = n.closest(".jqx-calendar-cell"); if (!l) return; if (JQX.Utilities.Core.isMobile || t._handleCalendarCellHover(e, l), !t.tooltip && a) return void a.close(); const i = l.hasAttribute("important"); if (clearTimeout(t._tooltipAutoCloseTimeout), i && a && "mouseover" === e.type) return a.selector = l, void (a.selector !== l ? a.close() : (t.tooltipTemplate || (a.innerHTML = 0 === a.innerHTML.trim().length ? "Important day!" : a.innerHTML), a.open(), t.$.fireEvent("open", { target: a, value: new Date(l.value) }))); t._tooltipAutoCloseTimeout = setTimeout(function () { !a || "mouseout" !== e.type && l && i || a.close(), clearTimeout(t._tooltipAutoCloseTimeout) }.bind(t), t.tooltipDelay) } _popupEventHandler(e) { const t = this, a = t.$.tooltip; if (e.stopPropagation(), e.target !== t.$.monthElement) if (e.target === a) if ("close" !== e.type); else { const e = a.selector; t.$.fireEvent("close", { target: a, value: e ? new Date(e.value) : null }) } else t.$.fireEvent(e.type, { target: e.target }) } _moveHandler(e) { const t = this; if (!JQX.Utilities.Core.isMobile || !t._dragStartDetails || "list" === t.displayModeView && "month" !== t.displayMode) return; e.originalEvent.preventDefault(), e.preventDefault(), e.stopPropagation(); const a = { x: Math.round(e.pageX), y: Math.round(e.pageY) }; let n, l, i; if (n = "portrait" === t.scrollButtonsNavigationMode ? a.y > t._dragStartDetails.y ? -1 * t.months : 1 * t.months : a.x < t._dragStartDetails.x ? 1 * t.months : -1 * t.months, t._previousIteration && n === t._previousIteration.step) l = t._previousIteration.date; else if (6 !== t.weeks && 0 !== t.weeks && "month" === t.displayMode) { let e, a; t._focusedCell || t._focusCell(); const i = [].slice.call(t._focusedCell.closest(".jqx-calendar-weeks").children).filter((e => !e.classList.contains("jqx-hidden"))); if (i.length) { let s; !t.rightToLeft && n < 0 || t.rightToLeft && n > 0 ? (s = i[0].querySelectorAll(".jqx-calendar-cell"), a = t.rightToLeft ? s[s.length - 1] : s[0]) : (s = i[i.length - 1].querySelectorAll(".jqx-calendar-cell"), a = t.rightToLeft ? s[0] : s[s.length - 1]), e = new Date(a.value), e.setDate(e.getDate() + n * (t.rightToLeft ? -1 : 1)), l = e } else l = t._getNextDate(n * (t.rightToLeft ? -1 : 1)) } else l = t._getNextDate(n * (t.rightToLeft ? -1 : 1)); if (!l) return; if (!t._dragStartDetails.navigationDate && t.$.fireEvent("navigationChanging", { value: new Date(l), type: t.displayMode }).defaultPrevented) return t._cancelAnimation(), void (t._dragStartDetails = void 0); if (t._dragStartDetails.step = n, t._dragStartDetails.navigationDate = new Date(l), !t.hasAnimation) return; if (t._previousIteration = { step: n, date: l }, t._mobileScrolling = !0, "month" !== t.displayMode) t.$nextMonthsContainer.addClass("jqx-calendar-date-view-container"), i = t.$.dateViewContainer, t.$.nextMonthsContainer.children[0].value instanceof Date && t.$.nextMonthsContainer.children[1].value.getFullYear() === l.getFullYear() || t._setDisplayModeContent(l, t.$.nextMonthsContainer); else if (t.$nextMonthsContainer.hasClass("jqx-calendar-date-view-container") && t.$nextMonthsContainer.removeClass("jqx-calendar-date-view-container"), i = t.$.monthsContainer, !t.$.nextMonthsContainer.children[0]._date || t.$.nextMonthsContainer.children[0]._date.getTime() !== l.getTime()) { let e = t.$.nextMonthsContainer.children; for (let a = 0; a < e.length; a++)l.setMonth(t._dragStartDetails.navigationDate.getMonth() + a * (t.rightToLeft ? -1 : 1)), t._setMonth(new Date(l), e[a], !0) } 6 !== t.weeks && 0 !== t.weeks && "month" === t.displayMode && t._updateWeeksVisibility(n * (t.rightToLeft ? -1 : 1), t._getCellByDate(l, t.$.nextMonthsContainer)), delete t._mobileScrolling, n < 0 ? (i.style.order = 3, t.$.nextMonthsContainer.style.order = 1, t.$.body[t._animationSettings.scrollSize] = t.$.body[t._animationSettings.scrollMax]) : (i.style.order = 1, t.$.nextMonthsContainer.style.order = 3, t.$.body[t._animationSettings.scrollSize] = 0); const s = "portrait" === t.scrollButtonsNavigationMode ? "y" : "x"; Math.abs(t._dragStartDetails[s] - a[s]) > 5 && (t.$.body[t._animationSettings.scrollSize] += 2 * -(a[s] - t._dragStartDetails[s])) } _getNextDate(e) { const t = this; let a; if ("month" !== t.displayMode) { let n; const l = t._focusedCell && t._focusedCell.value.getFullYear(); if ("list" === t.displayModeView) a = new Date(t.$.listViewContainer.querySelector("li").getAttribute("value")); else { let e = t._animationStarted ? t.$.nextMonthsContainer : t.$.dateViewContainer; a = new Date("year" === t.displayMode ? e.children[0].value : e.children[1].value) } n = "year" === t.displayMode ? 1 : 0 !== e ? 10 : 1, a.setFullYear(a.getFullYear() + (e > 0 ? n : -n)), a.getTime() < t.min.getTime() && (a = t.min), a.getTime() > t.max.getTime() && (a = t.max); const i = "month" !== t.displayMode && "list" === t.displayModeView; if (a.getFullYear() < t.min.getFullYear() || a.getFullYear() > t.max.getFullYear() || !i && l === a.getFullYear()) return } else { let n = t._viewDates[0]; if (a = new Date(n), a.setDate(1), a.setMonth(a.getMonth() + e), a.setTime(Math.min(Math.max(a.getTime(), t.min.getTime()), t.max.getTime())), n.getMonth() === a.getMonth() && n.getFullYear() === a.getFullYear()) return } return a } _navigateDays(e) { const t = this; let a = "ArrowUp" === e.key || "ArrowDown" === e.key ? 7 : 1, n = "ArrowUp" === e.key || "ArrowLeft" === e.key || "PageUp" === e.key ? -1 : 1; switch (e.key) { case "ArrowUp": case "ArrowLeft": case "ArrowDown": case "ArrowRight": if (!t._handleArrowKeys(e, a, n)) return; break; case " ": case "Enter": { if ("month" !== t.displayMode) return void t._displayModeHandler("list" === t.displayModeView ? t.$.listViewContainer.querySelector("li.active") : t._focusedCell); const e = t._focusedCell; if ("oneExtended" === t.selectionMode && e) return t._clearSelection(!0), void t._selectDate(e.value, t._selectedCells.indexOf(e.value) > -1); break } case "Control": case "Shift": return "default" === t.selectionMode && (t._keysPressed[e.key] = !0), void ("range" === t.selectionMode && (t._keysPressed[e.key] = "Control" === e.key)); case "Home": case "End": { e.preventDefault(); let a, n = function (t) { if ("Home" === e.key) { for (let e = 0; e < t.length; e++)if (!t[e].otherMonth && (!t[e].disabled || !t[e].restricted) && t[e].offsetHeight) return t[e] } else for (let e = t.length - 1; e >= 0; e--)if (!t[e].otherMonth && (!t[e].disabled || !t[e].restricted) && t[e].offsetHeight) return t[e] }; if (a = "month" !== t.displayMode ? n(t.$.dateViewContainer.children) : n(t._getMonthCells(t._focusedCell.closest(".jqx-calendar-month"), t.rightToLeft)), !a) return; if (t._focusCell(a), "month" !== t.displayMode) return; break } case "PageUp": case "PageDown": if (!t._handlePageUpDownKeys(e, n)) return; break; default: return }"oneExtended" !== t.selectionMode && t._focusedCell && t._handleDateSelection(t._focusedCell) } _handleArrowKeys(e, t, a) { const n = this; let l; if ("month" !== n.displayMode || n._animationStarted || n.unfocusable || n.$.body.focus(), n._focusedCell || n._focusCell(n._getCellByDate(new Date)), e.altKey) return; if (e.ctrlKey) { if ("ArrowDown" === e.key || "ArrowUp" === e.key) { if ("classic" === n.calendarMode) return; let t; switch (n.displayMode) { case "month": t = "ArrowDown" === e.key ? "month" : "year"; break; case "year": t = "ArrowDown" === e.key ? "month" : "decade"; break; case "decade": t = "ArrowDown" === e.key ? "year" : "decade" }if (t !== n.displayMode) { const e = n.displayMode; n.displayMode = t, n._setDisplayMode(e, t, "month" === e), n._keysPressed && delete n._keysPressed.Control } } return } if (e.preventDefault(), !n.rightToLeft || "ArrowLeft" !== e.key && "ArrowRight" !== e.key || (a *= -1), "month" !== n.displayMode && "list" !== n.displayModeView) { const i = n._animationStarted ? n.$.nextMonthsContainer.children : n.$.dateViewContainer.children; if (t = "ArrowUp" === e.key || "ArrowDown" === e.key ? 4 : 1, "year" === n.displayMode) { const e = n._focusedCell.value.getMonth() + a * t; let i = new Date(n._focusedCell.value.getFullYear(), e + 1, 0); n._focusedCell.value.getDate() <= i.getDate() && (i = n._focusedCell.value), l = new Date(n._focusedCell.value.getFullYear(), e, i.getDate()) } else l = new Date(n._focusedCell.value.getFullYear() + a * t, n._focusedCell.value.getMonth(), n._focusedCell.value.getDate()); if ("year" === n.displayMode) { if (l.getFullYear() < n.min.getFullYear() || l.getFullYear() === n.min.getFullYear() && l.getMonth() < n.min.getMonth() || l.getFullYear() > n.max.getFullYear() || l.getFullYear() === n.max.getFullYear() && l.getMonth() > n.max.getMonth()) return; l.getTime() > i[i.length - 1].value.getTime() ? n.navigate(1) : l.getTime() < i[0].value.getTime() && n.navigate(-1) } else { if (l.getFullYear() < n.min.getFullYear() || l.getFullYear() > n.max.getFullYear()) return; if (l.getFullYear() < i[1].value.getFullYear() || l.getFullYear() > i[10].value.getFullYear()) { let t = n._focusedCell; n.navigate(a), "ArrowUp" !== e.key && "ArrowDown" !== e.key || (t === i[3] || t === i[4] || t === i[7] || t === i[8] ? l.setFullYear(l.getFullYear() + 2 * a) : l.setFullYear(l.getFullYear() - 2 * a)) } } return void n._focusCell(n._getCellByDate(l, n._animationStarted ? n.$.nextMonthsContainer : void 0)) } if (!n._focusedCell) return; const i = n.restrictedDates.map(Number); for (l = new Date(n._focusedCell.value.getFullYear(), n._focusedCell.value.getMonth(), n._focusedCell.value.getDate() + a * t, 0, 0, 0, 0); i.indexOf(l.getTime()) > -1;)l.setDate(l.getDate() + a); if (l.getTime() < n.min.getTime() || l.getTime() > n.max.getTime()) return; n._isDateInView(l) || n.navigate(a * n.months); let s = n._getCellByDate(l, n._animationStarted ? n.$.nextMonthsContainer : void 0); return n._focusCell(s), n._updateWeeksVisibility(a), !(["zeroOrMany", "oneOrMany", "none", "many", "week", "range"].indexOf(n.selectionMode) > -1) || void 0 } _handlePageUpDownKeys(e, t) { const a = this; let n; if (e.preventDefault(), "month" !== a.displayMode) { if (n = a._focusedCell, !a.navigate(t)) return; for (; n && n.classList.contains("jqx-visibility-hidden");)n = null === n.previousElementSibling ? n.nextElementSibling : n.previousElementSibling; return a._focusCell(n), void (a.hasAnimation && "decade" === a.displayMode && a._focusedCell.value.setFullYear(a._focusedCell.value.getFullYear() + 10 * t)) } n = new Date(a._focusedCell.value.getFullYear(), a._focusedCell.value.getMonth() + t, 1, 0, 0, 0, 0); let l = new Date(n.getFullYear(), n.getMonth() + 1, 0).getDate(); return a._focusedCell.value.getDate() > l ? n.setDate(l) : n.setDate(a._focusedCell.value.getDate()), a._isDateInView(n) || a.navigate(n), a._animationStarted ? a._focusCell(a._getCellByDate(n, a.$.nextMonthsContainer)) : a._focusCell(a._getCellByDate(n)), !0 } _selectDate(e, t, a) { const n = this; if (void 0 === n._viewDates || "none" === n.selectionMode) return; let l, i = n.selectedDates.slice(0), s = n._getCellByDate(e, n._animationStarted ? n.$.nextMonthsContainer : void 0); s && n._selectCell(s), (e = new Date(e)).setHours(0, 0, 0, 0), l = i.map(Number).indexOf(e.getTime()), n.restrictedDates.map(Number).indexOf(e.getTime()) > -1 || e.getTime() < n.min.getTime() || e.getTime() > n.max.getTime() || (l > -1 ? i.splice(l, 1) : i.push(e), a || (n.selectedDates = i), n._refreshFooter(), n.$.hiddenInput.value = n.selectedDates.toString(), !t && n.isInitialized && (n.$.fireEvent("change", { value: [e] }), n._updateTargetValue()), n._refreshTitle()) } _selectCell(e) { const t = this; if (!e || t.restrictedDates.map(Number).indexOf(e.value.getTime()) > -1 || t.disableAutoNavigation && !1 === e.otherMonth || e.value.getTime() < t.min.getTime() || e.value.getTime() > t.max.getTime()) return; const a = t._selectedCells.indexOf(e); a > -1 ? (t._setCellState(e, "selected", !1), t._selectedCells.splice(a, 1)) : (t._setCellState(e, "selected", !0), t._selectedCells.push(e)), t._focusCell(e) } _refreshDayOfWeekTitles() { const e = this; let t, a = [], n = new Date; function l(t) { let a; return "firstTwoLetters" === e.dayNameFormat ? (a = new Intl.DateTimeFormat(e.locale, { weekday: "long" }).format(t), a = 8206 === a.charCodeAt(0) ? a.substring(1, 3) : a.substring(0, 2)) : a = new Intl.DateTimeFormat(e.locale, { weekday: e.dayNameFormat }).format(t), a } for (let e = 1; e < 8; e++)n.setDate(e), t = { number: n.getDay(), name: l(n) }, a.push(t); a.sort(((e, t) => e.number > t.number ? 1 : -1)); const i = e.$.monthsContainer.children; let s, o; for (let t = 0; t < i.length; t++)if (s = i[t].getElementsByClassName("jqx-calendar-week-titles")[0].children, o = e.firstDayOfWeek > 6 ? 0 : e.firstDayOfWeek, e.rightToLeft) for (let e = s.length - 1; e >= 1; e--)s[e].textContent = a[o++].name, o = o > 6 ? 0 : o; else for (let e = 1; e < s.length; e++)s[e].textContent = a[o++].name, o = o > 6 ? 0 : o; if (e.hasAnimation) { const t = e.$.monthsContainer.getElementsByClassName("jqx-calendar-week-titles")[0].innerHTML, a = e.$.nextMonthsContainer.getElementsByClassName("jqx-calendar-week-titles"); for (let e = 0; e < a.length; e++)a[e].innerHTML = t } } _refreshCalendarMode() { const e = this; if (!e.headerTemplate) if (e._refreshMonthNames(), "default" === e.calendarMode) { e.$classicHeaderDate.addClass("jqx-hidden"), e.$defaultHeaderDate.removeClass("jqx-hidden"); const t = e._viewDates.slice(0).sort(((e, t) => e.getTime() - t.getTime())), a = t[0], n = t[t.length - 1]; a.setDate(2); let l = e.monthNameFormat; "firstTwoLetters" === l && (l = "long"); let i = a.toLocaleDateString(e.locale, { year: e.yearFormat, month: l }); e.months > 1 && (n.setDate(2), i += " - " + n.toLocaleDateString(e.locale, { year: e.yearFormat, month: l })), e.$.defaultHeaderDate.innerHTML = i, e.unfocusable || e.$.dateElement.setAttribute("tabindex", e.tabIndex > 0 ? e.tabIndex : 0) } else e.$defaultHeaderDate.addClass("jqx-hidden"), e.$classicHeaderDate.removeClass("jqx-hidden"), e.$.dateElement.removeAttribute("tabindex") } _refreshFooter() { const e = this; if (!(e.viewSections.indexOf("footer") < 0 || 0 === e.$.footer.offsetHeight)) if (e.footerTemplate) { if ("function" == typeof e.footerTemplate) return; let a = e._layoutTemplates.filter((t => t.selector === e.$.footer))[0], n = document.importNode(a.template.content, !0); if (a.bindings.length > 0) { let e = n.childNodes[a.bindings[0].childNodeIndex]; a.selector.childNodes[a.bindings[0].childNodeIndex].innerHTML = e.innerHTML.replace(a.bindings[0].bindingString, t()) } } else e.$.selectedDatesRange.innerHTML = t(); function t() { if (0 === e.selectedDates.length) return ""; if (1 === e.selectedDates.length) return e.selectedDates[0].toLocaleDateString(e.locale, { year: e.yearFormat, weekday: "short", month: "short", day: "numeric" }); { let t = e.selectedDates.slice(0).sort(((e, t) => e.getTime() - t.getTime())); return t[0].toLocaleDateString(e.locale, { year: e.yearFormat, weekday: "short", month: "short", day: "numeric" }) + " - " + t[t.length - 1].toLocaleDateString(e.locale, { year: e.yearFormat, weekday: "short", month: "short", day: "numeric" }) } } } _refreshImportantDates() { const e = this; if ("month" === e.displayMode) { e._clearImportantDates(); for (let t = 0; t < e.importantDates.length; t++)e._setImportantDate(e.importantDates[t]) } } _clearImportantDates() { const e = this, t = e.$.monthsContainer.children; for (let a = 0; a < t.length; a++)e._getMonthCells(t[a]).map((t => { e._setCellState(t, "important", !1) })) } _setImportantDate(e, t) { const a = this, n = a._getCellByDate(e); t || (t = n), t && (a._setCellState(t, "important", !0), a._applyImportantDateTemplate(t)) } _applyImportantDateTemplate(e) { const t = this; if (!t._importantDatesTemplate) return "function" == typeof t.importantDatesTemplate ? void t.importantDatesTemplate(e, { value: e.value }) : void (e.innerHTML = e.value.getDate() + ""); let a = document.importNode(t._importantDatesTemplate.content, !0); if (t._bindingDetails && t._bindingDetails.length > 0) { let n = a.childNodes[t._bindingDetails[0].childNodeIndex]; n.innerHTML = n.innerHTML.replace(t._bindingDetails[0].bindingString, e.value.getDate()) } e.innerHTML = ""; for (let t = 0; t < a.childNodes.length; t++)a.childNodes[t].outerHTML && (e.innerHTML += a.childNodes[t].outerHTML) } _setMonth(e, t, a) { const n = this, l = n._getDays(e, n.selectedDates), i = n._getDays(e, n.importantDates), s = n._getDays(e, n.restrictedDates); e.setDate(1), t || (t = n.$.month), t._date = new Date(e), a || ((!n._viewDates || n._viewDates.length >= n.months) && (n._viewDates = []), n._viewDates.push(new Date(e))); let o = ((e = new Date(e)).getDay() - n.firstDayOfWeek + 7) % 7; e.setDate(0); let r = e.getDate(); if (e.setDate(32), e.setDate(1), e.setDate(32), n._selectedCells) for (let e = 0; e < n._selectedCells.length; e++)n._selectedCells[e].closest(".jqx-calendar-month") === t && n._setCellState(n._selectedCells[e], "selected", !1); n._setMonthContent(e, t, { previusMonthDays: r, firstDayOfWeek: o, selectedDates: l, importantDates: i, restrictedDates: s }) } _setMonthContent(e, t, a) { const n = this, l = 32 - e.getDate(), i = n._getMonthCells(t, n.rightToLeft), s = t._date.getMonth(), o = t._date.getFullYear(), r = new Date; let d, c = 1, m = 1; r.setHours(0, 0, 0, 0), i.map((e => { n._setCellState(e, "restricted", !1), n._setCellState(e, "selected", !1), n._setCellState(e, "otherMonth", !1), n._setCellState(e, "focus", !1), n._setCellState(e, "important", !1), n._setCellState(e, "today", !1), n._setCellState(e, "disabled", !1), n._setCellState(e, "hover", !1) })); for (let e = 0; e < i.length; e++) { const h = i[e]; e === a.firstDayOfWeek && m <= l ? (h.className = "jqx-calendar-cell", h.value = new Date(o, s, m), h.innerHTML = h.value.getDate().toString(), a.restrictedDates.indexOf(m) > -1 || h.value.getTime() < n.min.getTime() || h.value.getTime() > n.max.getTime() ? n._setCellState(h, "restricted", !0) : a.selectedDates.indexOf(m) > -1 && (n._setCellState(h, "selected", !0), n._selectedCells.indexOf(h) < 0 && n._selectedCells.push(h)), a.importantDates.indexOf(m) > -1 && (n._setImportantDate(h.value, h), a.importantDates.splice(a.importantDates.indexOf(m), 1)), h.value.getTime() === r.getTime() && n._setCellState(h, "today", !0), a.firstDayOfWeek++, m++) : (1 === m ? (h.value = new Date(o, s - 1, ++a.previusMonthDays - a.firstDayOfWeek), d = !!(h.value.getTime() < n.min.getTime() || t.previousElementSibling)) : (h.value = new Date(o, s + 1, c++), d = !!(h.value.getTime() > n.max.getTime() || t.nextElementSibling)), h.innerHTML = h.value.getDate().toString(), n._setCellState(h, "otherMonth", !0), d ? h.classList.add("jqx-visibility-hidden") : h.classList.remove("jqx-visibility-hidden")) } n.months > 1 && (t.firstElementChild.innerHTML = n.dateFormatFunction ? n.dateFormatFunction(t._date) : n._monthsNames[s] + " " + t._date.toLocaleDateString(n.locale, { year: n.yearFormat })), n._setMonthWeekNumbers(t) } _refreshMonthNames() { const e = this; let t, a = new Date; function n(t) { let a = e.monthNameFormat; "firstTwoLetters" === a && (a = "long"); let n = new Intl.DateTimeFormat(e.locale, { month: a }).format(t); return "firstTwoLetters" === e.monthNameFormat && (n = 8206 === n.charCodeAt(0) ? n.substring(0, 2) : n.substring(1, 3)), n } a.setDate(1), e._monthsNames = []; for (let l = 0; l < 12; l++)a.setMonth(l), t = n(a), e._monthsNames.push(t); if ("classic" === e.calendarMode && e.$.monthElement) { let t = e.$.monthsContainer.children; if (e.$.monthElement.dataSource && (e._changeEventFired = 1), e.shadowRoot ? e._setMonthElementPropertyInShadowDOM("dataSource", e._monthsNames) : e.$.monthElement.dataSource = e._monthsNames, e._viewDates) { for (let a = 0; a < t.length; a++)t[a].firstElementChild.textContent = e._monthsNames[t[a]._date.getMonth()] + " " + t[a]._date.getFullYear(); e._changeEventFired = 1, e.shadowRoot ? e._setMonthElementPropertyInShadowDOM("selectedIndex", e._viewDates.map((e => e.getMonth()))[0]) : e.$.monthElement.selectedIndex = e._viewDates.map((e => e.getMonth()))[0] } } } _setMonthWeekNumbers(e) { const t = this, a = function (e) { for (let t = 1; t < e.children.length; t++)if (!e.children[t].classList.contains("jqx-visibility-hidden")) return !0 }; let n = e.getElementsByClassName("jqx-calendar-week"); n = [].slice.call(n); for (let l = 0; l < n.length; l++) { if (!a(n[l])) { n[l].children[0].innerHTML = ""; continue } const i = n[l].children[1], s = i.otherMonth ? i.value.getTime() > e._date.getTime() ? 1 : -1 : 0; n[l].children[0].innerHTML = t._getWeekNumber(new Date(e._date.getFullYear(), e._date.getMonth() + s, i.value.getDate())) } } _setRestrictedDates(e) { const t = this, a = t.$.monthsContainer.children; for (let e = 0; e < a.length; e++)t._getMonthCells(a[e]).map((e => { t._setCellState(e, "restricted", !1) })); if (t._viewDates) { const a = function (e) { for (let a = 0; a < t._viewDates.length; a++)if (t._viewDates[a].getFullYear() === e.getFullYear() && t._viewDates[a].getMonth() === e.getMonth()) return !0 }; for (let n = 0; n < e.length; n++)if (a(e[n])) { const a = t._getCellByDate(e[n]); t._setCellState(a, "restricted", !0) } } } _setScrollButtonsNavigationMode() { const e = this; "landscape" !== e.scrollButtonsNavigationMode ? (e.$.previousMonthButton && (e.$.previousMonthButton.$.button.firstElementChild.className = "jqx-arrow-down jqx-arrow"), e.$.nextMonthButton && (e.$.nextMonthButton.$.button.firstElementChild.className = "jqx-arrow-up jqx-arrow")) : (e.$.previousMonthButton && (e.$.previousMonthButton.$.button.firstElementChild.className = "jqx-arrow-left jqx-arrow"), e.$.nextMonthButton && (e.$.nextMonthButton.$.button.firstElementChild.className = "jqx-arrow-right jqx-arrow")), e._applyAnimationSettings(!0) } _refreshTitle() { const e = this; let t = e.selectedDates.length > 0 ? e.selectedDates[e.selectedDates.length - 1] : new Date; if (e.titleTemplate) { if ("function" == typeof e.titleTemplate) return; let a = e._layoutTemplates.filter((t => t.selector === e.$.title))[0], n = document.importNode(a.template.content, !0); if (a.bindings.length > 0) { let l = n.childNodes[a.bindings[0].childNodeIndex]; return t = t.toLocaleDateString(e.locale, { year: e.yearFormat, weekday: "short", month: "short", day: "numeric" }), void (a.selector.childNodes[a.bindings[0].childNodeIndex].innerHTML = l.innerHTML.replace(a.bindings[0].bindingString, t)) } } e.$.title.children[0].innerHTML = t.toLocaleDateString(e.locale, { year: e.yearFormat }), e.$.title.children[1].innerHTML = "landscape" === e.view ? t.toLocaleDateString(e.locale, { weekday: "short" }) + ",</br>" + t.toLocaleDateString(e.locale, { month: "short", day: "numeric" }) : t.toLocaleDateString(e.locale, { weekday: "short" }) + ", " + t.toLocaleDateString(e.locale, { month: "short", day: "numeric" }) } _setWeeksVisibility(e) { const t = this, a = e.children; let n; function l(e) { (function (e) { for (let t = 1; t < e.children.length; t++)if (!e.children[t].classList.contains("jqx-visibility-hidden")) return !1; return !0 })(e) || n >= t.weeks ? e.classList.add("jqx-hidden") : n < t.weeks && (e.classList.remove("jqx-hidden"), n++) } for (let e = 0; e < a.length; e++) { let i = a[e].getElementsByClassName("jqx-calendar-week"); i = [].slice.call(i); let s = t._selectedCells.filter((t => t.closest(".jqx-calendar-month") === a[e])); if (6 !== t.weeks) if (n = 0, s.length > 0) { let e = s[s.length - 1], t = i.indexOf(e.parentElement); for (let e = t; e < i.length; e++)l(i[e]); for (let e = t - 1; e >= 0; e--)l(i[e]) } else for (let e = 0; e < i.length; e++)l(i[e]); else i.map((e => e.classList.remove("jqx-hidden"))) } } _refreshHeaderElements() { const e = this, t = document.activeElement.closest("jqx-calendar") === e, a = e._animationStarted ? e.$.nextMonthsContainer : e.$.dateViewContainer; let n, l, i = e._viewDates[e._viewDates.length - 1], s = e._viewDates.map((e => e.getFullYear())); if ("month" === e.displayMode || "list" !== e.displayModeView) { if ("classic" === e.calendarMode && e.$.monthElement && e.$.monthElement instanceof HTMLDivElement) { const t = document.createElement("jqx-input"); t.setAttribute("jqx-id", "monthElement"), t.classList.add("jqx-calendar-month-element"), t.dropDownPosition = "bottom", t.selectionMode = "one", t.disabled = e.disabled, t.rightToLeft = e.rightToLeft, t.theme = e.theme, t.dropDownWidth = e.dropDownWidth, t.dropDownHeight = e.dropDownHeight, t.readonly = !0, t.dropDownButtonPosition = "right"; const a = e.$.monthElement; e.$.monthElement.parentNode.insertBefore(t, e.$.monthElement), e.$.monthElement = t, a.remove() } if (e.$.previousMonthButton && !e.disabled && ("month" !== e.displayMode && e.$.dateViewContainer.children[0].value ? l = "year" === e.displayMode ? a.children[0].value.getFullYear() - 1 : a.children[1].value.getFullYear() - 1 : e._viewDates[0].getMonth() - 1 < 0 ? (n = 11, l = e._viewDates[0].getFullYear() - 1) : (n = e._viewDates[0].getMonth() - 1, l = e._viewDates[0].getFullYear()), e.$.previousMonthButton.disabled = l < e.min.getFullYear() || l === e.min.getFullYear() && n < e.min.getMonth(), e.$.previousMonthButton.disabled && t && e.$.body.focus()), e.$.nextMonthButton && !e.disabled && ("month" !== e.displayMode && e.$.dateViewContainer.children[0].value ? l = "year" === e.displayMode ? a.children[0].value.getFullYear() + 1 : a.children[1].value.getFullYear() + 11 : i.getMonth() + 1 > 11 ? (n = 0, l = i.getFullYear() + 1) : (n = i.getMonth() + 1, l = i.getFullYear()), e.$.nextMonthButton.disabled = l > e.max.getFullYear() || l === e.max.getFullYear() && n > e.max.getMonth(), e.$.nextMonthButton.disabled && t && e.$.body.focus()), "classic" === e.calendarMode && e.$.monthElement) { let t = [...e._monthsNames]; if (s.indexOf(e.min.getFullYear()) > -1) for (let a = 0; a < e.min.getMonth(); a++)t[a] = ""; if (s.indexOf(e.max.getFullYear()) > -1) for (let a = e.max.getMonth() + 1; a < t.length; a++)t[a] = ""; t = t.filter((e => "" !== e)); const a = Math.max(0, e.$.monthElement.selectedIndex); e.$.monthElement.dataSource = t, e._changeEventFired = 0 !== e.$.monthElement.selectedIndex, e.shadowRoot ? e._setMonthElementPropertyInShadowDOM("selectedIndex", e._viewDates[0].getMonth()) : e.$.monthElement.selectedIndex = a, e._changeEventFired = 0 } e.$.previousYearButton && !e.disabled && (l = e._viewDates[0].getFullYear() - 1, e.$.previousYearButton.disabled = l < e.min.getFullYear(), e.$.previousYearButton.disabled && t && e.$.body.focus()), e.$.nextYearButton && !e.disabled && (l = i.getFullYear() + 1, e.$.nextYearButton.disabled = l > e.max.getFullYear(), e.$.nextYearButton.disabled && t && e.$.body.focus()), e.$.yearElement && (e.$.yearElement.value = s[0], e.$.yearElement.disabled = i.getFullYear() + 1 > e.max.getFullYear() && e._viewDates[0].getFullYear() - 1 < e.min.getFullYear()) } } _setMonthElementPropertyInShadowDOM(e, t) { const a = this.$.monthElement, n = a.context; a.context = document, this.$.monthElement[e] = t, a.context = n } _refreshHeaderTitle() { const e = this; let t; function a() { if ("month" !== e.displayMode) { if ("list" === e.displayModeView) { const a = e.$.listViewContainer; if (!a) return; const n = a.querySelectorAll("li"); if (!n.length) return ""; let l; a.querySelector("li.active") && (l = a.querySelector("li.active").getAttribute("value")), t = "year" === e.displayMode ? new Date(l || n[0].getAttribute("value")).getFullYear() : new Date(n[0].getAttribute("value")).getFullYear() + " - " + new Date(n[n.length - 1].getAttribute("value")).getFullYear() } else if (e.$.dateViewContainer.children[0].value) { let a = e._animationStarted ? e.$.nextMonthsContainer.children : e.$.dateViewContainer.children; t = "year" === e.displayMode ? a[0].value.getFullYear() : a[1].value.getFullYear() + " - " + a[a.length - 2].value.getFullYear() } if (t) return t } const a = e._viewDates.slice(0).sort(((e, t) => e.getTime() - t.getTime())), n = a[0], l = a[a.length - 1]; n.setDate(2); let i = e.monthNameFormat; return "firstTwoLetters" === i && (i = "long"), t = n.toLocaleDateString(e.locale, { year: e.yearFormat, month: i }), e.months > 1 && (l.setDate(2), t += " - " + l.toLocaleDateString(e.locale, { year: e.yearFormat, month: i })), t } if ("default" === e.calendarMode && (e.$.defaultHeaderDate.innerHTML = a()), "function" == typeof e.headerTemplate || !e._layoutTemplates) return; let n = e._layoutTemplates.filter((t => t.selector === e.$.header))[0]; if (!n) return; let l = document.importNode(n.template.content, !0); if (n.bindings.length > 0) { const t = l.childNodes[n.bindings[0].childNodeIndex]; (e.shadowRoot ? e : n.selector).childNodes[n.bindings[0].childNodeIndex].innerHTML = t.innerHTML.replace(n.bindings[0].bindingString, e.dateFormatFunction ? e.dateFormatFunction(e._viewDates) : a()) } } _updateWeeksVisibility(e, t) { const a = this; let n = (t || a._focusedCell).parentElement; function l() { for (let e = o; e < s.length; e++)if (s[e].classList.contains("jqx-hidden") && !r(s[e]) && (s[e].classList.remove("jqx-hidden"), d++, d === a.weeks)) return !0 } function i() { for (let e = o; e >= 0; --e)if (s[e].classList.contains("jqx-hidden") && !r(s[e]) && (s[e].classList.remove("jqx-hidden"), d++, d === a.weeks)) return !0 } if (!t && !n.classList.contains("jqx-hidden")) return; const s = [].slice.call(n.parentElement.children), o = s.indexOf(n), r = function (e) { for (let t = 1; t < e.children.length; t++)if (!e.children[t].classList.contains("jqx-visibility-hidden")) return !1; return !0 }; let d = 0; if (s.map((e => e.classList.add("jqx-hidden"))), e > 0) { if (l()) return; i() } else { if (i()) return; l() } } _getValidDates(e) { let t = []; function a(e) { if (e instanceof Date) return e; if (JQX.Utilities.DateTime && e instanceof JQX.Utilities.DateTime) return e.toDate(); if ("string" == typeof e) { if ("new Date()" === e.trim() || "new JQX.Utilities.DateTime()" === e.trim()) return new Date; let t = /(\d+[,-.\/]{1}\s*\d+[,-.\/]{1}\s*\d+)/; const a = () => (e = e.replace(/[,-.\/]/g, ",").split(",")).length > 2 ? e = new Date(parseInt(e[0]), parseInt(e[1]) - 1, parseInt(e[2])) : new Date; return t.test(e) && (e = t.exec(e)[0].replace(/[,-.\/]/g, ",").split(",")) ? new Date(parseInt(e[0]), parseInt(e[1]) - 1, parseInt(e[2])) : a() } } if (void 0 === e) return null; if (Array.isArray(e)) for (let n = 0; n < e.length; n++)t.push(a(e[n])); else t.push(a(e)); return t = t.filter((e => e && "Invalid Date" !== e.toDateString())), t.map((e => e.setHours(0, 0, 0, 0))), t } _getValidDate(e) { const t = this._getValidDates(e); return t.length > 0 ? t[0] : null } _validateSelectedDates(e) { const t = this; let a = []; e || (e = t.selectedDates); let n = e.slice(0), l = function (e) { for (let a = 0; a < t.restrictedDates.length; a++)if (t.restrictedDates[a].getTime() === e.getTime()) return !0 }; t.selectedDates = n.filter((function (e) { if (e.getTime() >= t.min.getTime() && e.getTime() <= t.max.getTime() && !l(e)) return !0; a.push(e) })), t._viewDates && (a.map((e => t._selectDate(e))), t._focusCell()) } _validateMinMax(e, t, a) { const n = this; switch (e) { case "min": t = n._getValidDate(n[e]), n.min = t || a || n.properties.min.defaultValue; break; case "max": t = n._getValidDate(n[e]), n.max = t || a || n.properties.max.defaultValue; break; default: t = n._getValidDate(n.min), n.min = t || a || n.properties.min.defaultValue, t = n._getValidDate(n.max), n.max = t || a || n.properties.max.defaultValue }n.min = n.min.getTime() > n.max.getTime() ? n.max : n.min, n.min.setHours(0, 0, 0, 0), n.max.setHours(0, 0, 0, 0); let l, i = n.$.monthsContainer.children; if (n._viewDates) { if (n._viewDates[0].getTime() > n.max.getTime() || n._viewDates[0].getTime() < n.min.getTime()) return void n._handleMonths(); for (let e = 0; e < i.length; e++) { l = n._getMonthCells(i[e]); for (let t = 0; t < l.length; t++) { const a = l[t]; if (a.value.getTime() >= n.min.getTime() && a.value.getTime() <= n.max.getTime()) n._setCellState(a, "restricted", !1), a.value.getMonth() === i[e]._date.getMonth() ? a.classList.remove("jqx-visibility-hidden") : n.hideOtherMonthDays || (n._setCellState(a, "otherMonth", !0), a.classList.remove("jqx-visibility-hidden")), "month" !== n.displayMode && n._setCellState(a, "otherMonth", !1); else { if (a.otherMonth) { if (a.classList.contains("jqx-visibility-hidden")) { n._setCellState(a, "restricted", !1); continue } } else n._setCellState(a, "restricted", !0); "month" !== n.displayMode && (a.classList.remove("jqx-visibility-hidden"), n._setCellState(a, "otherMonth", !0)) } } } } } _setCellState(e, t, a) { e[t] = a; const n = JQX.Utilities.Core.toDash(t); a ? (e.setAttribute(n, ""), "selected" === t ? e.setAttribute("aria-selected", !0) : "today" === t ? e.setAttribute("aria-current", "date") : "restricted" === t ? e.removeAttribute("aria-selected") : "disabled" === t && (e.removeAttribute("aria-selected"), e.setAttribute("aria-disabled", !0))) : (e.removeAttribute(n), "selected" === t ? "none" === this.selectionMode || e.restricted || e.disabled ? e.removeAttribute("aria-selected") : e.setAttribute("aria-selected", !1) : "today" === t ? e.removeAttribute("aria-current") : "restricted" !== t || e.disabled ? "disabled" === t && (e.removeAttribute("aria-disabled"), e.restricted || e.setAttribute("aria-selected", !1)) : e.setAttribute("aria-selected", !1)) } _validateTemplate(e, t) { if (null === t || !t) return; if ("function" == typeof t) return; const a = this; if ("content" in document.createElement("template")) { if ("string" == typeof t && (t = document.getElementById(t)), null !== t && "content" in t) return t; a.error(a.localize("invalidTemplate", { elementType: a.nodeName.toLowerCase(), property: e })) } else a.error(a.localize("htmlTemplateNotSuported", { elementType: a.nodeName.toLowerCase() })) } _weeksDownHandler(e, t) { const a = this, n = t.value; let l; if (a.$.body.contains(t)) if (t.otherMonth && (l = t.value.getTime() > t.closest(".jqx-calendar-month")._date.getTime() ? 1 : -1), n && a.hasRippleAnimation && JQX.Utilities.Animation.Ripple.animate(t, e.pageX, e.pageY), l) { if (a._isDateInView(n)) return; a.disableAutoNavigation || a.navigate(l * a.months) } else (t = a._getCellByDate(n)) && (t.disabled || t.restricted) || a._handleDateSelection(t) } _firstDayOfWeekValidator(e, t) { return Math.min(Math.max(0, isNaN(t) ? 6 : t), 6) } _weeksValidator(e, t) { return Math.min(Math.max(1, isNaN(t) ? 6 : t), 6) } _monthsValidator(e, t) { return Math.min(Math.max(1, isNaN(t) ? 1 : t), 12) } });
|
|
22
|
+
|
|
23
|
+
/***/
|
|
24
|
+
}),
|
|
25
|
+
|
|
26
|
+
/***/ 6057:
|
|
27
|
+
/***/ (() => {
|
|
28
|
+
|
|
29
|
+
(() => { JQX.DataAdapter = window.jqxDataAdapter = class { constructor(e) { e || (e = {}); const t = Object.assign(this, e); t.key = (65536 * (1 + Math.random()) | 0).toString(16).substring(1), t.$document = JQX.Utilities.Extend(document), t.boundSource = !1 === t.observable || t.virtualDataSource ? [] : new JQX.ObservableArray, t.dataItemById = [], void 0 === t.allowAdd && (t.allowAdd = !0), void 0 === t.allowRemove && (t.allowRemove = !0), void 0 === t.allowUpdate && (t.allowUpdate = !0), void 0 === t.mapChar && (t.mapChar = "."), void 0 !== e.observable || t.virtualDataSource ? t.observable = !1 : t.observable = !0, void 0 === t.sanitizeHTML && (t.sanitizeHTML = "blackList"), t._expandedRowIds = [], e.dataSource || (t.dataSource = []), e.dataFields || (t.dataFields = []), e.dataSourceType || (t.dataSourceType = "array"), e.id || (t.id = null), e.autoFetch || (t.autoFetch = !0), void 0 === e.skipFirstRow && (t.skipFirstRow = !1), e.dataFields && (t.dataFields = e.dataFields), Object.defineProperty(t, "groupBy", { configurable: !1, enumerable: !0, get: () => t._groupBy ? t._groupBy : [], set(e) { const a = () => { t.boundHierarchy = null, t.refreshHierarchy(), t.onGroup && t.onGroup() }; t._groupBy = new JQX.ObservableArray(e), t._groupBy.notify((function () { a() })), t.isInitialized && a() } }), e.groupBy ? e.groupBy.toArray ? t.groupBy = e.groupBy.toArray() : t.groupBy = e.groupBy : t.groupBy = [], e && !1 !== e.autoBind && t.dataBind(), t.isInitialized = !0 } beginUpdate() { this.isUpdating = !0 } endUpdate() { const e = this; e.isUpdating = !1, e.refreshIndexes(), e.refreshHierarchy() } get expandHierarchy() { return void 0 === this._expandHierarchy && (this._expandHierarchy = !1), this._expandHierarchy } set expandHierarchy(e) { const t = this; t._expandHierarchy = e, t.isInitialized && t.refreshHierarchy() } _getDataField(e) { switch (e.name) { case "leaf": case "parent": case "expanded": case "checked": case "selected": case "level": case "icon": case "data": case "group": case "children": case "items": e.map ? e.map = e.map.replace(e.name, "$" + e.name) : e.map = e.name, e.name = "$" + e.name } } get dataFields() { return this._dataFields } set dataFields(e) { const t = this; return t._dataFields = t._getDataFieldObjects(e), t._dataFields } _getDataFieldObjects(e) { const t = this; let a = []; if ("number" == typeof e) { const t = "A".charCodeAt(0); let n = "", r = 0; for (let i = 0; i < e; i++) { const e = String.fromCharCode(t + r); r++; const i = n + e; a.push({ name: i, dataType: "string" }), r >= 26 && (r = 0, n += "A") } } else if (Array.isArray(e) && e.length > 0) for (let n = 0; n < e.length; n++) { const r = e[n]; if ("string" == typeof r) { const e = r.split(":"), t = e[0].trim(), n = e.length > 1 ? e[1].trim() : "string"; a.push({ name: t, dataType: n }) } else a.push(r); t._getDataField(a[a.length - 1]) } return a } get dataSource() { const e = this; return e._dataSource || (e._dataSource = []), e._dataSource } set dataSource(e) { const t = this; t._dataSource = e, t.isInitialized && (t.boundSource = !1 === t.observable || t.virtualDataSource ? [] : new JQX.ObservableArray, t.dataItemById = [], t.bindingCompleted = !1, t.dataBind(), t.refreshIndexes()) } get canNotify() { const e = this; return void 0 === e._canNotify && (e._canNotify = !0), e._canNotify } set canNotify(e) { this._canNotify = e } _notify(e) { const t = this; t.canNotify && t.notifyFn && t.notifyFn(e) } notify(e) { e && (this.notifyFn = e) } toArray() { const e = this; return !1 === e.observable ? e.boundSource : e.boundSource.toArray() } forEach(e) { const t = this; if (e) if (t.boundHierarchy && t.boundHierarchy.length > 0) { const a = (e => { let t = []; for (; e;) { t = t.concat(e); for (let a = 0; a < e.length; a++)e[a].children && (t = t.concat(e[a].children)); e = e.children } return t })(t.boundHierarchy); for (let t = 0; t < a.length; t++) { e(a[t], t) } } else for (let a = 0; a < t.boundSource.length; a++) { e(t.boundSource[a], a) } } dataBind() { const t = this; t.bindingCompleted = !1, t.clear(); const a = () => { t.observable && (t.boundSource.notify || (t.boundSource = new JQX.ObservableArray), t.boundSource.notify((function (e) { if ("update" === e.action && e.path && e.path.indexOf(".") >= 0 && -1 === e.path.indexOf("children") && -1 === e.path.indexOf("parent") && -1 === e.path.indexOf("loaded") && -1 === e.path.indexOf("level") && -1 === e.path.indexOf("leaf") && -1 === e.path.indexOf("expanded")) { let a = !1; for (let n = 0; n < t.dataFields.length; n++) { const r = t.dataFields[n].name; e.path.indexOf(r) >= 0 && (a = !0) } t._notify && a && t._notify({ action: "update", data: e.target, index: e.index }) } }))), t._onBindingComplete() }; if ("string" == typeof t.dataSource && (t.dataSource.indexOf(".json") >= 0 || "json" === t.dataSourceType)) t.url = t.dataSource, t.dataSourceType = "json", new e(t, (e => { t.dataSource = e })); else if ("string" == typeof t.dataSource && t.dataSource.indexOf(".xml") >= 0) t.url = t.dataSource, t.dataSourceType = "xml", new e(t, (e => { t.dataSource = e })); else if ("string" == typeof t.dataSource && t.dataSource.indexOf(".xlsx") >= 0) t.url = t.dataSource, t.dataSourceType = "xlsx", new e(t, (e => { if (!e[0]) return e = [], t._bindToArray(), void a(); const n = Object.keys(e[0]), r = {}, i = []; if (!1 !== t.exportHeader) { let a = 0; for (let e in n) { r[n[e]] = t.dataFields[a++].name } for (let t = 1; t < e.length; t++) { const a = e[t], o = {}; for (let e in n) { const t = n[e]; o[r[t]] = a[t] } i.push(o) } t.dataSource = i } t._bindToArray(), a() })); else if ("string" == typeof t.dataSource && t.dataSource.indexOf(".csv") >= 0) t.url = t.dataSource, t.dataSourceType = "csv", new e(t, (e => { t.dataSource = e })); else if ("string" == typeof t.dataSource && t.dataSource.indexOf(".tsv") >= 0) t.url = t.dataSource, t.dataSourceType = "tsv", new e(t, (e => { t.dataSource = e })); else if ("string" == typeof t.dataSource && (t.dataSource.indexOf(".ics") >= 0 || t.dataSource.indexOf(".php") >= 0 && "ics" === t.dataSourceType || t.dataSource.indexOf(".txt") >= 0 && "ics" === t.dataSourceType)) t.url = t.dataSource, t.dataSourceType = "ics", new e(t, (e => { t.dataSource = e })); else if ("string" == typeof t.dataSource && (t.dataSource.indexOf("BEGIN:VCALENDAR") >= 0 || "ics" === t.dataSourceType)) t._bindToICS(), a(); else if ("string" == typeof t.dataSource && (t.dataSource.indexOf("<?xml") >= 0 || "xml" === t.dataSourceType)) t._bindToXML(), a(); else if ("string" == typeof t.dataSource && (t.dataSource.indexOf(" ") >= 0 || t.dataSource.indexOf(",") >= 0 || "tsv" === t.dataSourceType || "csv" === t.dataSourceType || "tab" === t.dataSourceType)) t._bindToCSV(), a(); else if ("array" === t.dataSourceType) t._bindToArray(), a(); else if ("json" === t.dataSourceType) { if (t.dataSource && t.dataSource.url) return t.url = t.dataSource.url, t.dataSource.method && (t.type = t.dataSource.method), t.dataSource.type && (t.type = t.dataSource.type), t.dataSource.data && (t.data = t.dataSource.data), void new e(t, (e => { t.dataSource = e })); t._bindToJSON(), a() } } _bindToXML() { const e = this; let t = null, a = null; window.DOMParser && (t = new DOMParser, a = t.parseFromString(e.dataSource, "text/xml")), void 0 === e.root && (e.root = ""), void 0 === e.record && (e.record = ""); const n = a.querySelectorAll(e.root + " " + e.record), r = n.length, i = []; let o = e.dataFields ? e.dataFields.length : 0; if (0 === o) { const t = n[0], a = new Array; for (let e in t) { const t = e; a[a.length] = { name: t } } e.dataFields = a, o = a.length } for (let t = 0; t < r; t++) { const a = n[t], r = {}; if (void 0 === a) break; if (e.id) { const t = a.querySelector(e.id); r[e.id] = t.textContent } for (let t = 0; t < o; t++) { const n = e.dataFields[t], i = a.querySelector(n.map || n.name); r[n.name] = i.textContent } i[t] = r } e.canNotify = !1, e.dataSource = i, e.canNotify = !0, e._bindToArray() } static BindToCSV(e, t = !1) { const a = "" + e, n = -1 === a.indexOf(",") ? "\t" : ",", r = a.split("\r"), i = new Array, o = []; let d = a.split("\n"), l = d.length; 1 === l && r.length > 1 && (d = r, l = d.length); const s = !0 === t; for (let e = 0; e < l; e++) { const t = {}, a = d[e].split(n); for (let n = 0; n < a.length; n++) { let r = o[n], i = a[n]; if (r || (o.push({ name: i.trim() }), r = o[o.length - 1]), i = i.trim(), 1 !== e || s) switch (r.dataType) { case "boolean": i = "false" !== i; break; case "number": i = parseFloat(i); break; case "date": i = new Date(i) } else { let e = "string"; "false" === i || "true" === i ? (e = "boolean", i = "false" !== i) : isNaN(parseInt(i) && -1 === i.indexOf("/")) ? (i.indexOf("-") >= 0 || i.indexOf("/") >= 0 || i.indexOf(":") >= 0) && "Invalid Date" !== new Date(i).toString() && (e = "date", i = new Date(i)) : (e = "number", i = parseFloat(i)), r.dataType || (r.dataType = e) } t[r.name] = i } (s || e > 0) && i.push(t) } return i } _bindToCSV() { const e = this, t = "" + e.dataSource, a = -1 === t.indexOf(",") ? "\t" : ",", n = t.split("\r"), r = new Array; let i = t.split("\n"), o = i.length; 1 === o && n.length > 1 && (i = n, o = i.length); const d = e.dataFields.length > 0; for (let t = 0; t < o; t++) { const n = i[t], o = {}; let l = i[t].split(a); if (t > 0) { let e = [], a = 0, n = !1, r = i[t]; for (let t = 0; t < r.length; t++)if ('"' === r.charAt(t)) n = !n; else if ("," === r.charAt(t) && !n) { let n = r.substring(a, t); n = n.trim(), n = n.replaceAll('"', ""), e.push(n), a = t + 1 } let o = r.substring(a); o = o.trim(), o = o.replaceAll('"', ""), "," === o ? e.push('""') : e.push(o), l = e } for (let a = 0; a < l.length; a++) { let r = e.dataFields[a], i = l[a]; if (r || (e.dataFields.push({ name: i.trim() }), r = e.dataFields[e.dataFields.length - 1]), r.map && (i = n[r.map]), i = i.trim(), 1 !== t || d) switch (r.dataType) { case "boolean": i = "false" !== i; break; case "number": i = parseFloat(i); break; case "date": i = new Date(i) } else { let e = "string"; "false" === i || "true" === i ? (e = "boolean", i = "false" !== i) : isNaN(parseInt(i) && -1 === i.indexOf("/") && -1 === i.indexOf("-")) ? (i.indexOf("-") >= 0 || i.indexOf("/") >= 0 || i.indexOf(":") >= 0) && "Invalid Date" !== new Date(i).toString() && (e = "date", i = new Date(i)) : i.indexOf(".") >= 0 && i.lastIndexOf(".") !== i.indexOf(".") ? -1 === i.indexOf(",") && (e = "date", i = new Date(i)) : (e = "number", i = parseFloat(i)), r.dataType || (r.dataType = e) } o[r.map || r.name || a.toString()] = i } 0 === t && e.skipFirstRow || (d || t > 0) && r.push(o) } e.canNotify = !1, e.dataSource = r, e.canNotify = !0, e._bindToArray() } _onBindingComplete() { const e = this; e._buildHierarchy(), e.onBindingComplete && e.onBindingComplete({ data: e.boundSource }), e._notify && e._notify({ action: "bindingComplete", data: e.boundSource }), e.bindingCompleted = !0 } refreshHierarchy() { this.isUpdating || this._buildHierarchy() } find() { return this.boundSource.find.apply(this.boundSource, arguments) } onVirtualDataSourceRequested(e, t) { const a = this; let n = t ? t.first : 1 / 0, r = t ? t.last : 1 / 0, i = t ? t.row : null; if (void 0 === n && (n = 1 / 0), void 0 === r && (r = 1 / 0), a.virtualFirstIndex = n, a.virtualLastIndex = r, a.virtualDataSource) { const o = function (r) { void 0 !== r.virtualDataSourceLength && (a.virtualDataSourceLength = r.virtualDataSourceLength), new JQX.DataAdapter({ dataSource: r.dataSource, dataFields: r.dataFields || a.dataFields, data: t, keyDataField: r.keyDataField, parentDataField: r.parentDataField, observable: !1, id: r.id || a.id, onBindingComplete(r) { if (void 0 === t.result && (t.result = !0), t.data = r.data, a.virtualDataSourceOnExpand && i) return a.groupBy.length > 0 ? r.data && r.data.length > 0 && a.add(r.data) : r.data && r.data.length > 0 ? a.add(r.data, i.$.id) : i.leaf = !0, a.onFilter && a.onFilter(), void e(t); n === 1 / 0 && "scroll" === t.action ? r.data && r.data.length && a.add(r.data) : "filter" === t.action || "group" === t.action ? (a.canNotify = !1, a.dataSource = r.data, a.canNotify = !0) : ("add" === t.action || "update" === t.action || t.action, a.canNotify = !1, a.dataSource = r.data, a.canNotify = !0), a.onFilter && a.onFilter(), e(t) } }) }; let d = {}; if (t.sorting && t.sorting.length > 0) { let e = []; for (let a in t.sorting) e.push(a + " " + t.sorting[a].sortOrder.toUpperCase()); const a = " ORDER BY " + e.join(", "); d.orderBy = a } else d.orderBy = ""; if (void 0 === n || void 0 === r || 0 === n && 0 === r) d.limit = ""; else { const e = r - n, t = " LIMIT " + e + " OFFSET " + n; d.limit = t, isNaN(e) && (d.limit = "") } if (t.grouping && t.grouping.length > 0) { const e = " GROUP BY " + t.grouping[0]; d.groupBy = e } else d.groupBy = ""; if (t.filtering && t.filtering.length > 0) { const e = (e, t) => { switch (t.condition) { case "EMPTY": return e + " = ''"; case "NOT_EMPTY": return e + " != ''"; case "EQUAL": return e + " = '" + t.value + "'"; case "NOT_EQUAL": return e + " != '" + t.value + "'"; case "CONTAINS_CASE_SENSITIVE": case "CONTAINS": return e + " LIKE '%" + t.value + "%'"; case "DOES_NOT_CONTAIN_CASE_SENSITIVE": case "DOES_NOT_CONTAIN": return e + " NOT LIKE '%" + t.value + "%'"; case "STARTS_WITH_CASE_SENSITIVE": case "STARTS_WITH": return e + " LIKE '" + t.value + "%'"; case "ENDS_WITH_CASE_SENSITIVE": case "ENDS_WITH": return e + " LIKE '%" + t.value + "'"; case "NULL": return e + " IS NULL"; case "NOT_NULL": return e + " IS NOT NULL" } }, a = (e, t) => { let a = t.value, n = t.valueTo; if (a && a instanceof Date) { a = `'${new JQX.Utilities.DateTime(a).toString("yyyy-MM-dd")}'` } if (t.valueTo && t.valueTo instanceof Date) { n = `'${new JQX.Utilities.DateTime(n).toString("yyyy-MM-dd")}'` } switch (t.condition) { case "EQUAL": return e + " = " + a; case "NOT_EQUAL": return e + " != " + a; case "GREATER_THAN": return e + " > " + a; case "GREATER_THAN_OR_EQUAL": return e + " >= " + a; case "LESS_THAN": return e + " < " + a; case "LESS_THAN_OR_EQUAL": return e + " <= " + a; case "NULL": return e + " IS NULL"; case "NOT_NULL": return e + " IS NOT NULL"; case "RANGE": return "(" + e + " >= " + a + " and " + e + " <= " + n + ")" } }, n = (e, t, a) => { if (a.operator) { var n = e(t, a.condition1), r = e(t, a.condition2); return "(" + n + " " + a.operator + " " + r + ")" } return e(t, a) }; let r = []; for (let i in t.filtering) { const o = t.filtering[i]; let d = o.filters, l = [], s = " AND "; for (let t = 0; t < d.length; t++) { const r = d[t]; switch (r.type) { case "stringFilter": l.push(n(e, i, r)); break; case "numericFilter": case "dateFilter": case "booleanFilter": l.push(n(a, i, r)) }1 !== o.logicalOperators[t] && "or" !== o.logicalOperators[t] || (s = " OR ") } l.length && r.push("(" + l.join(s) + ")") } if (r.length > 0) { let e = " AND "; t.filterOperator && "or" === t.filterOperator.toLowerCase() && (e = " OR "), d.where = " WHERE " + r.join(e) } else d.where = "" } else d.where = ""; if ("dataBind" === t.action && a.virtualDataSourceOnExpand && a.keyDataField && a.parentDataField && (d.where ? d.where += " AND " + a.parentDataField + " IS NULL" : d.where = " WHERE " + a.parentDataField + " IS NULL"), "update" === t.action) { const e = []; for (let n in t.edit.row) "$" !== n && n !== a.id && e.push(n + "='" + t.edit.row[n] + "'"); null === a.id ? d.update = " SET " + e.join(", ") : d.update = " SET " + e.join(", ") + " WHERE " + a.id + "=" + t.edit.row[a.id] } if ("remove" === t.action) { const e = []; for (let n in t.edit.row) "$" !== n && n !== a.id && e.push(n + " = '" + t.edit.row[n] + "'"); d.remove = " WHERE " + a.id + "=" + t.edit.row[a.id] } if ("add" === t.action) { const e = [], a = []; for (let n in t.edit.row) "$" !== n && (a.push(n), null !== t.edit.row[n] ? e.push("'" + t.edit.row[n] + "'") : e.push("null")); d.add = " (" + a.join(", ") + ") VALUES (" + e.join(", ") + ")" } "expand" === t.action ? (a.groupDataField ? d.where ? d.where += " AND " + a.groupDataField + " = '" + i[a.groupDataField] + "'" : d.where = " WHERE " + a.groupDataField + " = '" + i[a.groupDataField] + "'" : a.keyDataField && a.parentDataField ? d.where ? d.where += " AND " + a.parentDataField + " = " + i[a.keyDataField] : d.where = " WHERE " + a.parentDataField + " = " + i[a.keyDataField] : d.where ? d.where += " AND " + i.groupDataField + " = '" + i.label + "'" : d.where = " WHERE " + i.groupDataField + " = '" + i.label + "'", d.where.indexOf("undefined") >= 0 && (d.where = ""), d.limit = "", d.groupBy = "", a.virtualDataSourceOnExpand(o, { first: n, last: r, row: t.row, sorting: t.sorting, filtering: t.filtering, grouping: t.grouping, action: t.action, query: d })) : a.virtualDataSource(o, { first: n, last: r, sorting: t.sorting, edit: t.edit, filtering: t.filtering, filterOperator: t.filterOperator || "and", grouping: t.grouping, action: t.action, query: d }) } else e() } add(e, t) { const a = this; if (!e) return; let n = !0; const r = function (e) { const r = a._getDataItem(e, a.boundSource.length); if (a.dataItemById[r.$.id]) return void 0 !== t && (r.$.parentId = t), null; a[a.boundSource.length] = r, a.dataItemById[r.$.id] = r; const i = a.boundSource.push(r); return void 0 !== t && (r.$.parentId = t), i || (n = !1), r }; if (e.length) { let t = []; for (let a = 0; a < e.length; a++) { const n = r(e[a]); n && t.push(n) } a._notify({ action: "add", data: t }) } else { const t = r(e); a._notify({ action: "add", data: t }) } return a.refreshHierarchy(), n } refreshIndexes() { const e = this; for (let t = 0; t < e.boundSource.length; t++)e[t] = e.boundSource[t], e[t].$.index = t, e.dataItemById[e[t].$.id] = e[t]; let t = e.boundSource.length; for (; e[t];)delete e[t], t++ } removeLast() { const e = this; delete e[e.boundSource.length - 1]; const t = e.boundSource.pop(); return delete e.dataItemById[t.$.id], e._notify({ action: "removeLast", data: t }), e.refreshHierarchy(), t } removeById(e) { const t = this, a = t.indexOf(t.dataItemById[e]); t.boundSource[a] && t.removeAt(a) } remove(e) { const t = this; let a = t.indexOf(e); -1 === a && e && e.$ && (a = t.indexOf(t.dataItemById[e.$.id])); t.boundSource[a] && t.removeAt(a) } removeAt(e) { const t = this, a = t.boundSource[e]; if (!a) throw new Error("Invalid Item Index"); t.boundSource.splice(e, 1), delete t.dataItemById[a.$.id], t.refreshIndexes(), t._notify({ action: "remove", index: e, data: a }), t.refreshHierarchy() } update(e, t) { const a = this; if (JQX.Utilities.Types.isArray(e) && JQX.Utilities.Types.isArray(t) && 0 === e.length && 0 === t.length) return void a.refreshHierarchy(); if (t.length && e.length) { let n = []; for (let r = 0; r < e.length; r++) { const i = a._getDataItem(t[r], e[r]), o = e[r]; n.push(i), a.boundSource[o] = i, a[o] = a.boundSource[o], a.dataItemById[i.$.id] = a[o] } return a._notify({ action: "update", index: e, data: n }), void a.refreshHierarchy() } const n = a._getDataItem(t, e), r = a.boundSource[e].$.id; return n.$.id = r, a.boundSource[e] = n, a[e] = a.boundSource[e], a.dataItemById[n.$.id] = a[e], a._notify({ action: "update", index: e, data: n }), a.refreshHierarchy(), n } insert(e, t) { const a = this; if (t.length) { const n = []; for (let r = 0; r < t.length; r++) { const i = a._getDataItem(t[r], e + r); n.push(i) } t = n } else t = a._getDataItem(t, e); const n = a.boundSource.splice(e, 0, t); return a.refreshIndexes(), a._notify({ action: "insert", index: e, data: t }), a.refreshHierarchy(), n } move(e, t) { if (t > e && t - e == 1 || e === t) return; const a = this, n = a.boundSource.splice(e, 1)[0]; t > e ? (t--, a.boundSource.splice(t, 0, n)) : a.boundSource.splice(t, 0, n), a.refreshIndexes(), a._notify({ action: "move", index: t, data: a.boundSource[t] }), a.refreshHierarchy() } indexOf(e) { return this.boundSource.indexOf(e) } get length() { const e = this; return void 0 !== e.virtualDataSourceLength ? e.virtualDataSourceLength : e.dataSourceLength ? e.dataSourceLength : "number" == typeof e.dataSource ? e.dataSource : e.bindingCompleted ? e.boundSource.length : e.dataSource && "string" != typeof e.dataSource && e.dataSource.length ? e.dataSource.length : e.boundSource.length } clear() { const e = this; if (!e.isInitialized) return e._cachedValues = [], void (e.dataItemById = []); for (let t = 0; t < e.boundSource.length; t++)delete e[t]; e._expandedRowIds = [], e._cachedValues = [], e.boundSource = e.observable ? new JQX.ObservableArray : [], e.dataItemById = [], e.refreshHierarchy() } _getId(e, t, a) { if (null === e || void 0 === e.name || !e.name || !t.getAttribute) { if (e && e.toString().length > 0 && t.getAttribute) { let a = t.getAttribute(e); if (null !== a && a.toString().length > 0) return a.trim().split(" ").join("").replace(/([ #;?%&,.+*~\':'!^$[\]()=>|\/@])/g, ""); { let a = e.split(this.mapChar); if (a.length > 1) { let e = t; for (let t = 0; t < a.length; t++)void 0 !== e && (e = e[a[t]]); if (void 0 !== e) return e } else if (void 0 !== t[e]) return t[e] } } return a } { let n = t.getAttribute(e.name); if (null !== n && n.toString().length > 0) return n; if (e.map) try { let a = t.getAttribute(e.map); if (null !== a && a.toString().length > 0) return a } catch (e) { return a } } } _buildHierarchy() { const e = this; if (e.reservedNames) { const t = e.reservedNames; t.leaf || (t.leaf = "leaf"), t.parent || (t.parent = "parent"), t.expanded || (t.expanded = "expanded"), t.checked || (t.checked = "checked"), t.selected || (t.selected = "selected"), t.level || (t.level = "level"), t.data || (t.data = "data") } else e.reservedNames = { leaf: "leaf", parent: "parent", expanded: "expanded", checked: "checked", selected: "selected", level: "level", icon: "icon", data: "data" }; const t = e.reservedNames; if (e.childrenDataField) { const a = []; for (let n = 0; n < e.boundSource.length; n++) { const r = JSON.parse(JSON.stringify(e.boundSource[n])); if (!r) continue; a.push(r); const i = function (a) { const n = e.childrenDataField.split(e.mapChar); let r = null; if (n.length > 1) { let e = a; for (let t = 0; t < n.length; t++)void 0 !== e && (e = e[n[t]]); r = e } else r = a.children; a.children = r, (null === a.children || void 0 === a.children || a.children && 0 === a.children.length) && (a[t.leaf] = !0) }; i(r), r[t.level] = 0, r.$ || (r.$ = {}), r[t.parent] = null, r[t.data] = r, void 0 === r[t.expanded] && (r[t.expanded] = !1, e.expandHierarchy && (r[t.expanded] = !0)); const o = function (a, n) { if (n) for (let r = 0; r < n.length; r++) { let d = e._getDataItem(n[r], r); if (d) { if (i(d), !e.id) { const e = function () { const e = function () { return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) }; return e() + e() }; d.$.id = e() } d[t.level] = a[t.level] + 1, d[t.parent] = a, d[t.data] = Object.assign({}, d), a && (a.children[r] = d), void 0 === d[t.expanded] && (d[t.expanded] = !1, e.expandHierarchy && (d[t.expanded] = !0)), o(d, d.children) } } else a.children = new Array }; o(r, r.children) } if (e.boundHierarchy = a, !e._boundSourceUpdate) { for (let t = 0; t < e.boundHierarchy.length; t++) { const a = e.boundHierarchy[t]; if (a.children) { const t = function (a) { if (e.dataItemById[a.$.id] || (e.boundSource.canNotify = !1, e.dataItemById[a.$.id] = a, e.boundSource.canNotify = !0), a.children) for (let e = 0; e < a.children.length; e++) { const n = a.children[e]; n.children && t(n) } }; t(a) } } e._boundSourceUpdate = !0 } } if (e.xmlRoot && "xml" === e.dataSourceType && (e.boundHierarchy = this._getHierarchy("uid", "_parentuid", "children", null, e.boundSource)), e.keyDataField && e.parentDataField) return ["keyDataField", "parentDataField"].forEach((t => { if ("parent" === e[t]) e[t] = "$" + e[t] })), void (e.boundHierarchy = this._getHierarchy(e.keyDataField, e.parentDataField, "children", null, e.boundSource)); e.groupBy && e.groupBy.length > 0 ? e.boundHierarchy = this._getGroupHierarchy(e.groupBy, "children", "label", null, "data", null, "parent", e.boundSource) : e.virtualDataSourceOnExpand && (e.boundHierarchy = this._getHierarchy("id", "parentId", "children", null, e.boundSource)) } _getGroupHierarchy(e, t, a, n, r, i, o, d, l) { let s = this; l || (l = 0); let c = s.reservedNames; const u = function () { function e() { return Math.floor(65536 * (1 + Math.random())).toString(16).substring(1) } return e() + e() + "-" + e() + "-" + e() + "-" + e() + "-" + e() + e() + e() }; let f = new Array; for (let t = 0; t < e.length; t++)f[t] = u(); t || (t = "children"), a || (a = "group"), r || (r = "item"), o || (o = "parent"), void 0 === i && (i = "value"); const h = new Array, p = new Array; let g = 0; const S = function (t) { let a = t; for (let n = 0; n < e.length; n++) { if (void 0 === t[e[n]]) { a = s._getDataItem(t, t.$.index); break } } if (n) for (let e in n) { const t = n[e]; t.name && t.map && (a[t.map] = a[t.name]) } return a }; let y = !1; for (let n = 0; n < d.length; n++) { let m = Object.assign({}, S(d[n])); m[c.leaf] = !1; let T = new Array, b = 0; for (let t = 0; t < e.length; t++) { const a = e[t], n = m[a]; null != n ? (("" === n || void 0 === n && 0 === t) && (y = !0), T[b++] = { value: n, group: a, hash: f[t] }) : (T[b++] = { value: null, group: a, hash: f[t] }, 0 === t && (y = !0)) } if (T.length !== e.length) break; let x = null, v = ""; for (let e = 0; e < T.length; e++) { const n = T[e].value, d = T[e].group; if (v = v + "_" + T[e].hash + "_" + n, void 0 === p[v] || null === p[v]) { if (null === x) { x = { $: {} }, x[c.level] = 0, x[c.leaf] = !1, x[o] = null, x[a] = n, x[r] = m, x.groupDataField = d, x[d] || (x[d] = x.data[d]), void 0 !== m[c.expanded] ? x[c.expanded] = m[c.expanded] : (x[c.expanded] = !1, s.expandHierarchy && (x[c.expanded] = !0)), i && (x[i] = m[i]), x[t] = new Array; let e = h.length + l; this.id && "number" != typeof m.$.id && !isFinite(m.$.id) || (e = "Item" + e), void 0 === x.$.id && (x.$.id = e), s._expandedRowIds[x.$.id] && (x[c.expanded] = !0), s.expandHierarchy && s._collapsedIds && s._collapsedIds[x.$.id] && (x[c.expanded] = !1), h[g++] = x } else { const e = { $: {} }; e[c.level] = x[c.level] + 1, e[o] = x, e[a] = n, e[t] = new Array, e[r] = m, e.groupDataField = d, e[c.leaf] = !1, e[d] || (e[d] = e.data[d]), void 0 !== m[c.expanded] ? e[c.expanded] = m[c.expanded] : (e[c.expanded] = !1, s.expandHierarchy && (e[c.expanded] = !0)), i && (e[i] = m[i]), void 0 === e.$.id && (e.$.id = x.$.id + "_" + x[t].length), s.expandHierarchy && s._collapsedIds && s._collapsedIds[e.$.id] && (e[c.expanded] = !1), s._expandedRowIds[e.$.id] && (e[c.expanded] = !0), x[t][x[t].length] = e, x = e } p[v] = x } else x = p[v] } m && (m[c.leaf] = !0), null !== x ? (null === this.id ? void 0 === m.$.id && (m.$.id = x.$.id + "_" + x[t].length) : void 0 === m.$.id && -1 === m.$.id.toString().indexOf(x.$.id) && (m.$.id = x.$.id + "_" + m.$.id), m[o] = x, m[c.level] = x[c.level] + 1, x[t][x[t].length] = m) : void 0 === m.$.id && (m.$.id = u()) } if (y) { let e = null, t = !1; for (let a = 0; a < h.length; a++) { const n = h[a]; if (!n[n.groupDataField]) { e = n, e.$.id.toString().startsWith("Item") && (t = !0), h.splice(a, 1); break } } if (e && (h.push(e), t)) for (let e = 0; e < h.length; e++) { const t = h[e]; t.$.id = "Item" + e, Object.keys(s._expandedRowIds).length > 0 && (s._expandedRowIds[t.$.id] ? t[c.expanded] = !0 : t[c.expanded] = !1, s.expandHierarchy && (t[c.expanded] = !0, s._collapsedIds && s._collapsedIds[t.$.id] && (t[c.expanded] = !1))) } } return h } _getHierarchy(e, t, a, n, r) { const i = this, o = new Array; let d = this.boundSource; if (r && (d = r), 0 === this.boundSource.length) return null; const l = null !== a ? a : "children"; let s = new Array, c = d, u = c.length, f = i.reservedNames; const h = function (e) { let t = e; if (n) for (let e in n) { const a = n[e]; a.name && a.map && (t[a.map] = t[a.name]) } return t }; for (let a = 0; a < u; a++) { let n = c[a], r = n[t], o = n[e]; "parentId" === t && (r = n.$.parentId), "id" === e && (o = n.$.id), null === o && (o = n[e] = n.$.id), n[l] = new Array, i.expandHierarchy && void 0 === n[f.expanded] && (n[f.expanded] = i.expandHierarchy), s[o] = { parentId: r, item: n } } for (let a = 0; a < u; a++) { const n = c[a]; let r = n[t], i = n[e]; if ("parentId" === t && (r = n.$.parentId), "id" === e && (i = n.$.id), void 0 !== s[r]) { let e = { parentId: r, item: s[i].item }, t = s[r].item; t[l] || (t[l] = new Array); let a = t[l].length; e = e.item, f ? e[f.parent] = t : e.parent = t; const n = h(e); t[l][a] = n, s[r].item = t, s[i].item = e } else { let e = s[i].item; f ? void 0 === e[f.parent] && (e[f.parent] = null) : void 0 === e.parent && (e.parent = null); const t = h(e); f ? t[f.level] = 0 : t.level = 0, o[o.length] = t } } if (0 !== o.length) { let e = function (t, a) { for (let n = 0; n < a.length; n++) { const r = a[n]; f ? r[f.level] = t : r.level = t; const o = r[l]; o && o.length > 0 ? (r.leaf = !1, e(t + 1, o)) : i.virtualDataSourceOnExpand ? void 0 === r.leaf && (r.leaf = !1) : f ? r[f.leaf] = !0 : r.leaf = !0 } }; e(0, o) } return o } summarize(e, t) { const a = this; Array.isArray(e) || (e = [e]); let n = []; for (let t = 0; t < e.length; t++) { const a = e[t]; for (let e in a) { const t = a[e]; n.push({ dataField: e, functions: t }) } } e = n; let r = {}, i = new Array; t || (t = a.boundSource); let o = t.length, d = 0; if (0 !== o && void 0 !== o) { for (let a = 0; a < o; a++) { let n = t[a]; if ((!n || !n.$ || !1 !== n.$.filtered) && n) { d++; for (let t = 0; t < e.length; t++) { const o = e[t]; let d = n[o.dataField]; if (void 0 !== d && "uncategorized" !== d || (d = ""), o.functions && o.functions.length > 0) { r[o.dataField] = r[o.dataField] || {}, i[o.dataField] = i[o.dataField] || 0, i[o.dataField]++; const e = function (e) { for (let t in e) { let a = r[o.dataField][t]; null == a && (r[o.dataField][t] = 0, a = 0), "function" == typeof e[t] && (a = e[t](a, d, o.dataField, n)), r[o.dataField][t] = a } }, t = d; let l = parseFloat(d); l = !isNaN(l), t && t.toDate && (l = !1), "string" == typeof d && d.startsWith("+") && (l = !1), l && (d = parseFloat(d)), "number" == typeof d && isFinite(d) ? o.functions.forEach((function (t) { let n = r[o.dataField][t]; if (null == n && (n = 0, "min" === t && (n = 9999999999999), "max" === t && (n = -9999999999999), "median" === t && (n = [])), "sum" === t || "avg" === t || "stdev" === t || "stdevp" === t || "var" === t || "varp" === t) n += parseFloat(d); else if ("product" === t) 0 === a ? n = parseFloat(d) : n *= parseFloat(d); else if ("min" === t) n = Math.min(n, parseFloat(d)); else if ("max" === t) n = Math.max(n, parseFloat(d)); else if ("count" === t) n++; else if ("median" === t) n.push(parseFloat(d)); else if ("blank" === t) n = r[o.dataField][t], null == n && (n = 0), d || n++; else if ("filled" === t) n = r[o.dataField][t], null == n && (n = 0), void 0 !== d && n++; else if ("unique" === t) n = r[o.dataField][t], null == n && (n = []), -1 === n.indexOf(d) && n.push(d); else if ("status" === t) n = r[o.dataField][t], null == n && (n = []), n[d] || (n[d] = []), n[d].push(d); else if ("object" == typeof t) return void e(t); r[o.dataField][t] = n })) : o.functions.forEach((function (t) { if ("min" === t || "max" === t || "count" === t || "product" === t || "sum" === t || "avg" === t || "stdev" === t || "stdevp" === t || "var" === t || "varp" === t) { if (null === d && "count" !== t) return !0; let e = r[o.dataField][t]; return null == e && (e = 0), r[o.dataField][t] = e, !0 } if ("blank" === t) { let e = r[o.dataField][t]; null == e && (e = 0), d || e++, r[o.dataField][t] = e } else if ("filled" === t) { let e = r[o.dataField][t]; null == e && (e = 0), d && e++, r[o.dataField][t] = e } else if ("unique" === t) { let e = r[o.dataField][t]; null == e && (e = []), -1 === e.indexOf(d) && e.push(d), r[o.dataField][t] = e } else if ("status" === t) { let e = r[o.dataField][t]; null == e && (e = []), e[d] || (e[d] = []), e[d].push(d), r[o.dataField][t] = e } "object" == typeof t && e(t) })) } } } } for (let a = 0; a < e.length; a++) { const n = e[a]; if (n.functions && (!n.functions || 0 !== n.functions.length)) { if (r[n.dataField] || (r[n.dataField] = {}, n.functions.forEach((function (e) { r[n.dataField][e] = 0 }))), void 0 !== r[n.dataField].avg) { const e = r[n.dataField].avg, t = i[n.dataField]; r[n.dataField].avg = 0 === t || void 0 === t ? 0 : e / t } else void 0 !== r[n.dataField].count && (r[n.dataField].count = d); if (void 0 !== r[n.dataField].unique) { const e = r[n.dataField].unique; r[n.dataField].unique = e.length } if (void 0 !== r[n.dataField].status) { const e = r[n.dataField].status; r[n.dataField].status = e } if (void 0 !== r[n.dataField].median) { let e = r[n.dataField].median; e.sort((function (e, t) { return e - t })), r[n.dataField].median = .5 * (e[Math.floor((e.length + 1) / 2) - 1] + e[Math.ceil((e.length + 1) / 2) - 1]) } (r[n.dataField].stdev || r[n.dataField].stdevp || r[n.dataField].var || r[n.dataField].varp) && n.functions.forEach((function (e) { if ("stdev" === e || "var" === e || "varp" === e || "stdevp" === e) { const a = r[n.dataField][e], i = o, d = a / o; let l = 0; for (let e = 0; e < o; e++) { let a = t[e][n.dataField]; l += (a - d) * (a - d) } let s = "stdevp" === e || "varp" === e ? i : i - 1; 0 === s && (s = 1), "var" === e || "varp" === e ? r[n.dataField][e] = l / s : "stdevp" !== e && "stdev" !== e || (r[n.dataField][e] = Math.sqrt(l / s)) } })) } } return r } } _getDataItem(e, t) { const a = this, n = {}, r = "number" == typeof a.dataSource || a.dataSourceLength; if (!e) return { $: { id: t, isEmpty: !0, index: t } }; if ("string" == typeof e && (e = { "": e }), r) { for (let e = 0; e < a.dataFields.length; e++) { n[(a.dataFields ? a.dataFields[e] : {}).name] = "" } return n.$ = {}, n.$.id = t, n.$.index = t, n } const i = e; if (void 0 !== i.expanded && (n.expanded = i.expanded, "true" === i.expanded || !0 === i.expanded || 1 === i.expanded ? n.expanded = !0 : n.expanded = !1), a.childrenDataField ? void 0 !== i[a.childrenDataField] && (n.children = i[a.childrenDataField]) : void 0 !== i.children ? n.children = i.children : void 0 !== i.items && (n.children = i.items), void 0 !== i.leaf && (n.leaf = i.leaf), void 0 !== i.level && (n.level = i.level), a.keyDataField && void 0 !== i[a.keyDataField] && (n[a.keyDataField] = i[a.keyDataField]), a.parentDataField && void 0 !== i[a.parentDataField] && (n[a.parentDataField] = i[a.parentDataField]), 0 === a.dataFields.length) { const t = Object.getOwnPropertyNames(e); for (let e = 0; e < t.length; e++)"$" !== t[e] && a.dataFields.push({ name: t[e], dataType: "string" }) } for (let t = 0; t < a.dataFields.length; t++) { const r = a.dataFields ? a.dataFields[t] : {}; let o = ""; if (null == r) continue; if (e.length && (o = e[t]), r.map) { let e = r.map.split(a.mapChar); if (e.length > 0) { let t = i; for (let a = 0; a < e.length; a++)i && t && (t = t[e[a]]); o = t } else o = i[r.map] } null != o ? o = o.toString() : void 0 === o && null !== o && (o = ""); let d = !1; if ("" === o && (d = !0, o = e[r.name], void 0 === r.dataType && (r.dataType = "any"), null != o ? "array" !== r.dataType && ("any" === r.dataType ? o = Array.isArray(e[r.name]) ? [...e[r.name]] : "object" == typeof e[r.name] ? Object.assign({}, e[r.name]) : e[r.name] : "date" !== r.dataType && (o = o.toString())) : o = void 0 === o && "any" === r.dataType ? null : ""), "[object Object]" === o && r.map && d && (o = ""), a._cachedValues[o + "_" + r.dataType]) o = a._cachedValues[o + "_" + r.dataType]; else { if ("bool" === r.dataType || "boolean" === r.dataType) "true" === o || "1" === o ? o = !0 : "false" !== o && "0" !== o || (o = !1); else if ("number" === r.dataType) -1 === o.indexOf(".") && o.indexOf(",") >= 0 && o.substring(1 + o.indexOf(",")).length < 3 && (o = o.replace(",", ".")), o = a.$document.deserialize("" + o, r.dataType, !0); else if ("date" === r.dataType) { if (o && "string" == typeof o && o.indexOf("[") >= 0) { const e = JSON.parse(o); if (r.formatString && JQX.Utilities.DateTime) { const t = JQX.Utilities.DateTime.ParseDate(e[0], r.formatString), a = JQX.Utilities.DateTime.ParseDate(e[1], r.formatString); e[0] = t, e[1] = a } else { const t = a.$document.deserialize("" + e[0], r.dataType, !0), n = a.$document.deserialize("" + e[1], r.dataType, !0); e[0] = t, e[1] = n } o = e, n[r.name] = o; continue } if (r.formatString && JQX.Utilities.DateTime) { o = JQX.Utilities.DateTime.ParseDate(o, r.formatString) } else o = a.$document.deserialize("" + o, r.dataType, !0) } else "any" !== r.dataType && (o = "string" === r.dataType && "null" === o ? "null" : a.$document.deserialize("" + o, r.dataType, !0)); "any" !== r.dataType && (a._cachedValues[o + "_" + r.dataType] = o) } "string" !== r.dataType && "boolean" !== r.dataType && "bool" !== r.dataType && "any" !== r.dataType && (isNaN(o) || o === -1 / 0 || o === 1 / 0) && (o = "date" === r.dataType || "number" === r.dataType ? null : 0), "parent" !== r.name && "group" !== r.name && "leaf" !== r.name && "level" !== r.name ? ("string" === r.dataType && /<.+?>/.test(o) && o.replace && ("all" === a.sanitizeHTML ? o = o.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, """) : "blackList" === a.sanitizeHTML && (o = window.JQX.Utilities.Core.sanitizeHTML(o), o.indexOf("<br") >= 0 && (o = o.replaceAll("<br/>", "\n\r"), o = o.replaceAll("<br>", "\n\r")))), n[r.name] = o) : n.$[r.name] = o } let o = t; if (a.id) { if (o = i[a.id], void 0 === o) { const e = function () { return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) }; o = e() + e() } "object" == typeof o && (o = t), i.$ && void 0 !== i.$.id && (o = i.$.id) } else if (!a.virtualDataSource && a.dataItemById && a.dataItemById[o]) for (o = a.length; a.dataItemById[o];)o++; return n.$ || (n.$ = {}), n.$.id = o, n.$.index = t, new Object(n) } _bindToArray() { const e = this, t = "number" == typeof e.dataSource || e.dataSourceLength, a = []; e.boundSource.canNotify = !1; const n = t ? "number" == typeof e.dataSource ? e.dataSource : e.dataSource.length : e.observable ? e.length : e.dataSource.length; for (let r = 0; r < n; r++) { const n = t ? {} : e.dataSource[r], i = e._getDataItem(n, r); a.push(i) } if (t && e.dataSourceLength && e.dataSource.length > 0) for (let t = 0; t < e.dataSource.length; t++) { const n = e.dataSource[t].cell, r = e.dataSource[t].value, i = n.replace(/[^0-9]/g, ""), o = n.replace(/[0-9]/g, ""); a[i - 1][o] = r } e.boundSource = !1 === e.observable || e.virtualDataSource ? [] : new JQX.ObservableArray(a), e.observable && (e.boundSource = new JQX.ObservableArray(a)); for (let t = 0; t < n; t++)e.observable ? e[t] = e.boundSource[t] : e[t] = a[t], e.dataItemById[e[t].$.id] = e[t]; !1 === e.observable && (e.boundSource = a), e.boundSource.canNotify = !0 } _bindToICS() { const e = this, t = "" + e.dataSource, a = e.rowDelimiter || "\n", n = t.split("\r"), r = []; let i = t.split(a), o = i.length; 1 === o && n.length > 1 && (i = n, o = i.length); const d = function (e, t) { var a = /^(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2})Z)?$/.exec(e); if (!a) throw new Error("Invalid UNTIL value: " + e); return t ? new Date(a[1], a[2] - 1, a[3], 0, 0, 0, 0) : new Date(Date.UTC(a[1], a[2] - 1, a[3], a[5] || 0, a[6] || 0, a[7] || 0)) }; for (let e = 0; e < o; e++) { const t = i[e].trim(); if (t.indexOf("BEGIN:VEVENT") >= 0) var l = {}; else if (l) if (t.indexOf("BEGIN:VALARM") >= 0) var s = {}; else { if (s) { if (t.indexOf("ACTION") >= 0) { s.ACTION = t.substring(t.indexOf("ACTION") + 7); continue } if (t.indexOf("DESCRIPTION") >= 0) { s.DESCRIPTION = t.substring(t.indexOf("DESCRIPTION") + 12); continue } if (t.indexOf("TRIGGER") >= 0) { s.TRIGGER = t.substring(t.indexOf("TRIGGER") + 8); continue } if (t.indexOf("END:VALARM") >= 0) { l.ALARM || (l.ALARM = []), l.ALARM.push(s), s = void 0; continue } } if (t.indexOf("SUMMARY") >= 0) l.SUMMARY = t.substring(t.indexOf("SUMMARY") + 8); else if (t.indexOf("LOCATION") >= 0) l.LOCATION = t.substring(t.indexOf("LOCATION") + 9); else if (t.indexOf("DESCRIPTION") >= 0) l.DESCRIPTION = t.substring(t.indexOf("DESCRIPTION") + 12); else if (t.indexOf("RRULE") >= 0) l.RRULE = t.substring(t.indexOf("RRULE") + 6); else if (t.indexOf("RECURRENCE-ID") >= 0) l.RECURRENCEID = t.substring(t.indexOf("RECURRENCE-ID") + 14); else if (t.indexOf("RECURRENCE-ID;VALUE=DATE") >= 0) l.RECURRENCEID = t.substring(t.indexOf("RECURRENCE-ID;VALUE=DATE") + 25); else if (t.indexOf("EXDATE;VALUE=DATE") >= 0) { const e = t.substring(t.indexOf("EXDATE;VALUE=DATE") + 20); l.EXDATE = e } else if (t.indexOf("EXDATE") >= 0) { const e = t.substring(t.indexOf("EXDATE") + 7); l.EXDATE = e } else t.indexOf("DTEND;VALUE=DATE") >= 0 ? l.DTEND = d(t.substring(t.indexOf("DTEND;VALUE=DATE") + 17), !0) : t.indexOf("DTEND") >= 0 ? l.DTEND = d(t.substring(t.indexOf("DTEND") + 6)) : t.indexOf("DTSTART;VALUE=DATE") >= 0 ? l.DTSTART = d(t.substring(t.indexOf("DTSTART;VALUE=DATE") + 19), !0) : t.indexOf("DTSTART") >= 0 ? l.DTSTART = d(t.substring(t.indexOf("DTSTART") + 8)) : t.indexOf("UID") >= 0 ? l.uid = l.UID = t.substring(t.indexOf("UID") + 4) : t.indexOf("STATUS") >= 0 ? l.STATUS = t.substring(t.indexOf("STATUS") + 7) : t.indexOf("TITLE") >= 0 ? l.TITLE = t.substring(t.indexOf("TITLE") + 6) : t.indexOf("CATEGORIES") >= 0 ? l.CATEGORIES = t.substring(t.indexOf("CATEGORIES") + 11) : t.indexOf("END:VEVENT") >= 0 && (r.push(l), l.ALARM && (l.ALARM = JSON.stringify(l.ALARM)), s = void 0) } } e.canNotify = !1, e.dataSource = r, e.canNotify = !0, e._bindToArray() } _bindToJSON() { const e = this, t = [], a = e.dataSource.length ? e.dataSource : Object.entries(e.dataSource); e.boundSource.canNotify = !1; for (let n = 0; n < a.length; n++) { const r = a[n], i = e._getDataItem(r, n); t.push(i) } e.boundSource = !1 === e.observable || e.virtualDataSource ? [] : new JQX.ObservableArray(t); for (let t = 0; t < e.length; t++)e[t] = e.boundSource[t], e.dataItemById[e[t].$.id] = e[t]; !1 === e.observable && (e.boundSource = t), e.boundSource.canNotify = !0 } sortBy(e, t, a) { const n = this; if (!t) for (let a = 0; a < n.dataFields.length; a++) { const r = n.dataFields[a]; if (r.name === e) { t = r.dataType; break } } if (n.boundHierarchy) { if ((!e || 0 === e.length) && n.groupBy.length > 0) return void n.refreshHierarchy(); const r = (e => { let t = []; for (; e;) { t = t.concat(e); for (let a = 0; a < e.length; a++)e[a].children && (t = t.concat(e[a].children)); e = e.children } return t })(n.boundHierarchy); if (r) { r.find((e => { if (e.summaryRow) return e })) && n.refreshHierarchy() } const i = function (r) { n._sort(r, e, a, t); for (let n = 0; n < r.length; n++) { const o = r[n]; o.children && i(o.children, e, a, t) } }; i(n.boundHierarchy) } else n._sort(n.boundSource, e, a, t) } _createFilter(e, t) { const a = { "=": "EQUAL", "<>": "NOT_EQUAL", "!=": "NOT_EQUAL", not_like: "DOES_NOT_CONTAIN", like: "CONTAINS", "<": "LESS_THAN", ">": "GREATER_THAN", "<=": "LESS_THAN_OR_EQUAL", ">=": "GREATER_THAN_OR_EQUAL", equal: "EQUAL", "not equal": "NOT_EQUAL", "less than": "LESS_THAN", "greater than": "GREATER_THAN", "greater than or equal": "GREATER_THAN_OR_EQUAL", "less than or equal": "LESS_THAN_OR_EQUAL", "starts with": "STARTS_WITH", "ends with": "ENDS_WITH", notEqual: "NOT_EQUAL", not_equal: "NOT_EQUAL", lessThan: "LESS_THAN", greaterThan: "GREATER_THAN", greaterThanOrEqual: "GREATER_THAN_OR_EQUAL", lessThanOrEqual: "LESS_THAN_OR_EQUAL", less_than: "LESS_THAN", greater_than: "GREATER_THAN", greater_than_or_equal: "GREATER_THAN_OR_EQUAL", less_than_or_equal: "LESS_THAN_OR_EQUAL", null: "null", "": "EMPTY", isblank: "EMPTY", isnotblank: "NOT_EMPTY", isBlank: "EMPTY", isNotBlank: "NOT_EMPTY", CONTAINS: "CONTAINS", DOES_NOT_CONTAIN: "DOES_NOT_CONTAIN", contains: "CONTAINS", does_not_contain: "DOES_NOT_CONTAIN", "not contains": "DOES_NOT_CONTAIN", notcontains: "DOES_NOT_CONTAIN", notContains: "DOES_NOT_CONTAIN", startswith: "STARTS_WITH", endswith: "ENDS_WITH", starts_with: "STARTS_WITH", ends_with: "ENDS_WITH", startsWith: "STARTS_WITH", endsWith: "ENDS_WITH", NULL: "NULL", NOT_NULL: "NOT_NULL" }; let n = []; "string" == typeof t && (t = [t]); for (let e = 0; e < t.length; e++) { const a = t[e], r = -1 === a.indexOf('"') ? a.split(" ") : a.split('"'); let i = []; for (let e = 0; e < r.length; e++) { const t = r[e]; if ("" !== t && " " !== t) { if ("true" === t.trim()) { i.push(!0); continue } if ("false" === t.trim()) { i.push(!1); continue } if (t.indexOf("or ") >= 0 || t.indexOf("and ") >= 0 || t.indexOf("1 ") >= 0 || t.indexOf("0 ") >= 0 || t.indexOf("| ") >= 0 || t.indexOf("& ") >= 0) { const e = t.trim().split(" "); if (e.length > 1) { const t = e[0].trim(), a = e[1].trim(); "1" === t ? i.push("or") : "0" === t ? i.push("and") : i.push(t), i.push(a) } else i.push(t.trim()) } else i.push(t.trim()) } } n.push(i) } const r = new JQX.FilterGroup, i = [], o = []; for (let t = 0; t < n.length; t++) { const r = n[t]; if (r.length > 1) { const t = new JQX.FilterGroup; let n = r.length > 2 ? "" : "and", i = 0, d = []; for (let o = 0; o < r.length; o++) { let l = r[o]; if ("and" !== l && "or" !== l) { if (i++, 2 === i) { let s = a[r[o - 1]]; s || (s = r[o - 1]), "number" === e && (l = parseFloat(l)), "date" === e && (l = new Date(l)); const c = t.createFilter(e, l, s); if (i = 0, d.push(c), n) { for (let e = 0; e < d.length; e++)t.addFilter(n, d[e]); d = [] } } } else n = l } o.push(t) } else { let e = r[0]; if (e && a[e] && (e = "and"), "and" !== e && "or" !== e) throw new Error('Filter Exprresion expects "AND" or "OR", but the token is: ' + e); i.push(e) } } let d = 0; if (1 === o.length) return o[0]; for (let e = 0; e < o.length; e++) { let t = i[d]; (e + 1) % 2 == 0 && d++, t || (t = "and"), r.addFilter(t, o[e]) } return r } filterBy(e, ...t) { const a = this, n = (() => { for (let t = 0; t < a.dataFields.length; t++) { const n = a.dataFields[t]; if (n.name === e) return n.dataType } })(), r = a._createFilter(n, t); return a.boundSource.filter((t => r.evaluate(t[e]))) } _filter(e, t = "and") { const a = this, n = [], r = []; if (0 === e.length) return void a.clearFilter(); const i = e => { for (let t = 0; t < a.dataFields.length; t++) { const n = a.dataFields[t]; if (n.name === e) return n.dataType } }; let o, d; "and" === t ? (o = !0, d = function (e, t, a) { return e && t.evaluate(a[t.dataField]) }) : (o = !1, d = function (e, t, a) { return e || t.evaluate(a[t.dataField]) }); for (let t = 0; t < e.length; t++) { const o = e[t], d = o[0]; let l = null; l = o[1] instanceof JQX.FilterGroup ? o[1] : a._createFilter(i(d), o.splice(1)), l && (r.push(d), l.dataField = d, n.push(l)) } if (a.boundHierarchy) { const e = function (e) { let t = o; for (let a = 0; a < n.length; a++) { const r = n[a]; t = d(t, r, e) } return e.$.filtered = t, t }, t = function (n, r, i) { let o = 0; for (let a = 0; a < n.length; a++) { const i = n[a]; e(i), i.$.filtered && o++, i.children && t(i.children, i, r) } o > 0 && a.groupBy.length > 0 && r ? (r.$.filtered = !0, i && !i.$.filtered && (i.$.filtered = !0)) : o > 0 && o !== n.length && r ? (r.$.filtered = null, i && !i.$.filtered && (i.$.filtered = null)) : o > 0 && o === n.length && r && (r.$.filtered = !0, i && !i.$.filtered && (i.$.filtered = !0)) }; t(a.boundHierarchy, null, null) } else for (let e = 0; e < a.boundSource.length; e++) { const t = a.boundSource[e]; let r = o; for (let e = 0; e < n.length; e++) { const a = n[e]; r = d(r, a, t) } t.$.filtered = r } a.onFilter && a.onFilter() } clearGroup() { const e = this; e.groupBy = [], e.boundHierarchy = null, e.refreshHierarchy(), e.onGroup && e.onGroup() } clearFilter() { const e = this; for (let t = 0; t < e.boundSource.length; t++) { e.boundSource[t].$.filtered = !0 } if (e.boundHierarchy) { const t = function (e, a, n) { for (let n = 0; n < e.length; n++) { const r = e[n]; r.$.filtered = !0, r.$.filtered, r.children && t(r.children, r, a) } a && (a.$.filtered = !0, n && !n.$.filtered && (n.$.filtered = !0)) }; t(e.boundHierarchy, null, null) } e.onFilter && e.onFilter() } clearSort() { this._sort(this.boundSource, [], [], []) } _sort(e, t, a, n, r, i) { const o = this; let d = !1; if (0 === e.length) return; if (e && e.constructor && e instanceof JQX.ObservableArray && (d = !0), (!e || !Array.isArray(e) || 0 === e.length || !t || Array.isArray(t) && 0 === t.length) && !d && !o.boundHierarchy) { if (o.virtualDataSource) return; throw new Error("sort: Missing or Invalid arguments!") } "string" == typeof t && (t = [t]); const l = [], s = []; void 0 === a && (a = []); const c = function (e, t) { let a; switch (t || typeof e) { case "string": a = (new Intl.Collator).compare; break; case "number": case "int": case "bigInt": case "float": case "double": a = function (e, t) { return e - t }; break; case "boolean": case "bool": a = function (e, t) { return e === t ? 0 : !1 === e ? -1 : 1 }; break; case "date": case "time": case "dateTime": a = e instanceof Date ? function (e, t) { return e || t ? e ? t ? e.getTime() - t.getTime() : 1 : -1 : 0 } : e instanceof JQX.Utilities.DateTime || e instanceof JQX.Utilities.BigNumber ? function (e, t) { return e.compare(t) } : function (e, t) { return e - t }; break; case "object": if (e instanceof Date) a = function (e, t) { return e || t ? e ? t ? e.getTime() - t.getTime() : 1 : -1 : 0 }; else if (e instanceof JQX.Utilities.DateTime || e instanceof JQX.Utilities.BigNumber) a = function (e, t) { return e.compare(t) }; else if (e instanceof JQX.Utilities.Complex || window.NIComplex && e instanceof window.NIComplex) { const e = new JQX.Utilities.ComplexNumericProcessor; a = function (t, a) { return e.compareComplexNumbers(t, a) } } }return a }; for (let r = 0; r < t.length; r++) { void 0 === a[r] || "asc" === a[r] || "ascending" === a[r] ? l[r] = 1 : l[r] = -1; let d = e[0][t[r]]; if (void 0 === d && e[0] && e[0].children && e[0].data && (d = e[0].data[t[r]]), i && i) { const e = t[r]; if (i[e]) { s[r] = i[e]; continue } } o.sortComparators && o.sortComparators[t[r]] ? s[r] = o.sortComparators[t[r]] : s[r] = c(d, n[r]) } t.length > 0 && r ? r(e, t, a, s) : e.sort((function (e, a) { for (let n = 0; n < t.length; n++) { const r = s[n](e[t[n]], a[t[n]]); if (0 === r) { if (t[n + 1]) continue; return void 0 !== e.$.index ? (e.$.index - a.$.index) * l[n] : 0 } return r * l[n] } if (0 === t.length) return e.$.index < a.$.index ? -1 : e.$.index > a.$.index ? 1 : 0 })); for (let t = 0; t < e.length; t++)o[t] = e[t] } static Filter(e, t, a, n, r = "and") { let i, o; "and" === r ? (i = !0, o = function (e, t, a, r) { return n ? e && n(t, a, r) : e && r.evaluate(t[a]) }) : (i = !1, o = function (e, t, a, r) { return n ? e || n(t, a, r) : e || r.evaluate(t[a]) }); return e.filter((e => { let n = i; for (let r = 0; r < a.length; r++) { const i = a[r], d = t[r]; n = o(n, e, d, i) } return n })) } filter(e, t, a) { JQX.DataAdapter.Filter(this.boundSource, e, t, a) } sort(e, t, a) { JQX.DataAdapter.Sort(this.boundSource, e, t, a) } static Sort(e, t, a, n) { const r = function (e) { let t; switch (typeof e) { case "string": if (e.indexOf("-") >= 0 || e.indexOf("/") >= 0) { const t = new Date(e); if (t && "Invalid Date" !== t.toString()) { const e = function (e, t) { const a = new Date(e), n = new Date(t); return a || n ? a ? n ? a.getTime() - n.getTime() : 1 : -1 : 0 }; return e } } t = (new Intl.Collator).compare; break; case "number": t = function (e, t) { return e - t }; break; case "boolean": t = function (e, t) { return e === t ? 0 : !1 === e ? -1 : 1 }; break; case "object": if (e instanceof Date) t = function (e, t) { return e || t ? e ? t ? e.getTime() - t.getTime() : 1 : -1 : 0 }; else if (e instanceof JQX.Utilities.DateTime || e instanceof JQX.Utilities.BigNumber) t = function (e, t) { return e.compare(t) }; else if (e instanceof JQX.Utilities.Complex || window.NIComplex && e instanceof window.NIComplex) { const e = new JQX.Utilities.ComplexNumericProcessor; t = function (t, a) { return e.compareComplexNumbers(t, a) } } else t = function (e, t) { return e - t } }return t }; if (!e || !Array.isArray(e) || 0 === e.length || !t || Array.isArray(t) && 0 === t.length) return; "string" == typeof t && (t = [t]); const i = [], o = []; void 0 === a && (a = []); for (let n = 0; n < t.length; n++)void 0 === a[n] || "asc" === a[n] || "ascending" === a[n] ? i[n] = 1 : i[n] = -1, o[n] = r(e[0][t[n]]); if (n) return void n(e, t, a, o); const d = e.slice(0); return d.sort((function (e, a) { for (let n = 0; n < t.length; n++) { const r = o[n](e[t[n]], a[t[n]]); if (0 === r) { if (t[n + 1]) continue; return void 0 !== e._index ? (e._index - a._index) * i[n] : 0 } return r * i[n] } })), d } }; class e { constructor(e, t) { const a = this; a.config = e, a.callback = t, !1 !== e.autoFetch && a.call(e) } call(e) { const t = this; e || (e = t.config); let a = "GET", n = e.url, r = null, i = !0; if (e.type && (a = e.type), e.data) if ("GET" === a) { n += "?"; for (let t in e.data) Object.prototype.hasOwnProperty.call(e.data, t) && (n += encodeURI(t + "=" + e.data[t] + "&")); "&" === n.charAt(n.length - 1) && (n = n.slice(0, n.length - 1)) } else "POST" === a && (r = JSON.stringify(e.data)); e && !1 === e.async && "xlsx" !== e.dataSourceType && (i = !1), void 0 !== window.fetch && i ? t.ajaxFetch(e, a, n, r) : t.ajaxXMLHttpRequest(e, a, n, r, i) } ajaxFetch(e, t, a, n) { const r = this, i = { method: t }; let o, d, l, s; switch (e.dataSourceType) { case "json": o = "json"; break; case "xlsx": o = "arrayBuffer"; break; default: o = "text" }if (e && e.contentType && (i.headers = new Headers({ "Content-Type": e.contentType })), null !== n && (i.body = n), e.timeout && (l = setTimeout((function () { s = !0 }), e.timeout)), e.beforeSend) { if (!1 === e.beforeSend(i, e)) return } fetch(a, i).then((function (e) { if (s) throw d = 408, new Error("timeout"); if (l && clearTimeout(l), d = e.status, !e.ok) throw new Error(e.statusText); return e[o]() })).then((function (t) { if ("arrayBuffer" === o) return JSZip.loadAsync(t).then((function (t) { return t.files["xl/worksheets/sheet1.xml"].async("text").then((function (a) { return t.files["xl/sharedStrings.xml"].async("text").then((function (t) { const n = r.parseXLSXData(a, t); r.ajaxComplete(e, n, d) })) })) })); r.ajaxComplete(e, t, d) })).catch((function (t) { "JSZip is not defined" === t.message && (t.message = "JSZip is not defined. Please include a reference to JSZip to be able to load data from XLSX files."), e && e.loadError && e.loadError(d, t), r.callback && r.callback(t, d) })) } ajaxXMLHttpRequest(e, t, a, n, r) { const i = new XMLHttpRequest, o = this; if (i.open(t, a, r), i.ontimeout = function () { e && e.loadError && e.loadError(408, "timeout") }, i.onload = function () { if (4 === i.readyState) { const t = i.status; let a = i.response; t >= 200 && t <= 299 ? ("json" === e.dataSourceType && (a = JSON.parse(a)), o.ajaxComplete(e, a, t)) : e && e.loadError && e.loadError(t, a) } }, i.onerror = function () { e && e.loadError && e.loadError(i.status, i.response) }, e && e.contentType && i.setRequestHeader("Content-Type", e.contentType), r && e.timeout && (i.timeout = e.timeout), e.beforeSend) { if (!1 === e.beforeSend(i, e)) return } i.send(n) } ajaxComplete(e, t, a) { if (e) { if (e.beforeLoadComplete) { const a = e.beforeLoadComplete(t); a && (t = a) } e.loadComplete && e.loadComplete(t, a), this.callback && this.callback(t, a) } } parseXLSXData(e, t) { const a = new DOMParser, n = a.parseFromString(t, "text/xml"), r = Array.from(n.getElementsByTagName("si")), i = [], o = a.parseFromString(e, "text/xml"), d = Array.from(o.getElementsByTagName("row")), l = []; return r.forEach((function (e) { let t = e.getElementsByTagName("t"); if (1 === t.length) i.push(t[0].innerHTML); else { let e = ""; t = Array.from(t), t.forEach((function (t) { e += t.innerHTML })), i.push(e) } })), d.forEach((function (e) { const t = {}; Array.from(e.getElementsByTagName("c")).forEach((function (e) { const a = e.getAttribute("r").match(/\D+/)[0], n = e.getAttribute("t"), r = e.getElementsByTagName("v")[0].innerHTML; let o; switch (n) { case "s": o = i[parseFloat(r)]; break; case "b": o = 1 === parseFloat(r); break; default: o = parseFloat(r) }t[a] = o })), l.push(t) })), l } } JQX.Ajax = window.Ajax = e })();
|
|
30
|
+
|
|
31
|
+
/***/
|
|
32
|
+
}),
|
|
33
|
+
|
|
34
|
+
/***/ 2052:
|
|
35
|
+
/***/ (() => {
|
|
36
|
+
|
|
37
|
+
(() => { const e = -1 * (new Date).getTimezoneOffset(), t = [{ id: "Local", offset: e, offsetHours: e / 60, displayName: "", supportsDaylightSavingTime: !1 }, { id: "Dateline Standard Time", offset: -720, offsetHours: -12, displayName: "(UTC-12:00) International Date Line West", supportsDaylightSavingTime: !1 }, { id: "UTC-11", offset: -660, offsetHours: -11, displayName: "(UTC-11:00) Coordinated Universal Time-11", supportsDaylightSavingTime: !1 }, { id: "Hawaiteratoran Standard Time", offset: -600, offsetHours: -10, displayName: "(UTC-10:00) Hawaiterator", supportsDaylightSavingTime: !1 }, { id: "Alaskan Standard Time", offset: -540, offsetHours: -9, displayName: "(UTC-09:00) Alaska", supportsDaylightSavingTime: !0 }, { id: "Pacific Standard Time (Mexico)", offset: -480, offsetHours: -8, displayName: "(UTC-08:00) Baja California", supportsDaylightSavingTime: !0 }, { id: "Pacific Standard Time", offset: -480, offsetHours: -8, displayName: "(UTC-08:00) Pacific Time (US & Canada)", supportsDaylightSavingTime: !0 }, { id: "US Mountain Standard Time", offset: -420, offsetHours: -7, displayName: "(UTC-07:00) Arizona", supportsDaylightSavingTime: !1 }, { id: "Mountain Standard Time (Mexico)", offset: -420, offsetHours: -7, displayName: "(UTC-07:00) Chihuahua, La Paz, Mazatlan", supportsDaylightSavingTime: !0 }, { id: "Mountain Standard Time", offset: -420, offsetHours: -7, displayName: "(UTC-07:00) Mountain Time (US & Canada)", supportsDaylightSavingTime: !0 }, { id: "Central Standard Time", offset: -360, offsetHours: -6, displayName: "(UTC-06:00) Central Time (US & Canada)", supportsDaylightSavingTime: !0 }, { id: "Central America Standard Time", offset: -360, offsetHours: -6, displayName: "(UTC-06:00) Central America", supportsDaylightSavingTime: !1 }, { id: "Canada Central Standard Time", offset: -360, offsetHours: -6, displayName: "(UTC-06:00) Saskatchewan", supportsDaylightSavingTime: !1 }, { id: "Central Standard Time (Mexico)", offset: -360, offsetHours: -6, displayName: "(UTC-06:00) Guadalajara, Mexico City, Monterrey", supportsDaylightSavingTime: !0 }, { id: "SA Pacific Standard Time", offset: -300, offsetHours: -5, displayName: "(UTC-05:00) Bogota, Lima, Quito, Rio Branco", supportsDaylightSavingTime: !1 }, { id: "Eastern Standard Time", offset: -300, offsetHours: -5, displayName: "(UTC-05:00) Eastern Time (US & Canada)", supportsDaylightSavingTime: !0 }, { id: "US Eastern Standard Time", offset: -300, offsetHours: -5, displayName: "(UTC-05:00) Indiana (East)", supportsDaylightSavingTime: !0 }, { id: "Venezuela Standard Time", offset: -270, offsetHours: -4.5, displayName: "(UTC-04:30) Caracas", supportsDaylightSavingTime: !1 }, { id: "Atlantic Standard Time", offset: -240, offsetHours: -4, displayName: "(UTC-04:00) Atlantic Time (Canada)", supportsDaylightSavingTime: !0 }, { id: "Paraguay Standard Time", offset: -240, offsetHours: -4, displayName: "(UTC-04:00) Asuncion", supportsDaylightSavingTime: !0 }, { id: "Central Brazilian Standard Time", offset: -240, offsetHours: -4, displayName: "(UTC-04:00) Cuiaba", supportsDaylightSavingTime: !0 }, { id: "Pacific SA Standard Time", offset: -240, offsetHours: -4, displayName: "(UTC-04:00) Santiago", supportsDaylightSavingTime: !0 }, { id: "SA Western Standard Time", offset: -240, offsetHours: -4, displayName: "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan", supportsDaylightSavingTime: !1 }, { id: "Newfoundland Standard Time", offset: -210, offsetHours: -3.5, displayName: "(UTC-03:30) Newfoundland", supportsDaylightSavingTime: !0 }, { id: "SA Eastern Standard Time", offset: -180, offsetHours: -3, displayName: "(UTC-03:00) Cayenne, Fortaleza", supportsDaylightSavingTime: !1 }, { id: "Argentina Standard Time", offset: -180, offsetHours: -3, displayName: "(UTC-03:00) Buenos Aires", supportsDaylightSavingTime: !0 }, { id: "E. South America Standard Time", offset: -180, offsetHours: -3, displayName: "(UTC-03:00) Brasilia", supportsDaylightSavingTime: !0 }, { id: "Bahia Standard Time", offset: -180, offsetHours: -3, displayName: "(UTC-03:00) Salvador", supportsDaylightSavingTime: !0 }, { id: "Montevideo Standard Time", offset: -180, offsetHours: -3, displayName: "(UTC-03:00) Montevideo", supportsDaylightSavingTime: !0 }, { id: "Greenland Standard Time", offset: -180, offsetHours: -3, displayName: "(UTC-03:00) Greenland", supportsDaylightSavingTime: !0 }, { id: "UTC-02", offset: -120, offsetHours: -2, displayName: "(UTC-02:00) Coordinated Universal Time-02", supportsDaylightSavingTime: !1 }, { id: "Mid-Atlantic Standard Time", offset: -120, offsetHours: -2, displayName: "(UTC-02:00) Mid-Atlantic - Old", supportsDaylightSavingTime: !0 }, { id: "Azores Standard Time", offset: -60, offsetHours: -1, displayName: "(UTC-01:00) Azores", supportsDaylightSavingTime: !0 }, { id: "Cape Verde Standard Time", offset: -60, offsetHours: -1, displayName: "(UTC-01:00) Cape Verde Is.", supportsDaylightSavingTime: !1 }, { id: "Morocco Standard Time", offset: 0, offsetHours: 0, displayName: "(UTC) Casablanca", supportsDaylightSavingTime: !0 }, { id: "UTC", offset: 0, offsetHours: 0, displayName: "(UTC) Coordinated Universal Time", supportsDaylightSavingTime: !1 }, { id: "GMT Standard Time", offset: 0, offsetHours: 0, displayName: "(UTC) Dublin, Edinburgh, Lisbon, London", supportsDaylightSavingTime: !0 }, { id: "Greenwich Standard Time", offset: 0, offsetHours: 0, displayName: "(UTC) Monrovia, Reykjavik", supportsDaylightSavingTime: !1 }, { id: "Central European Standard Time", offset: 60, offsetHours: 1, displayName: "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb", supportsDaylightSavingTime: !0 }, { id: "Namibia Standard Time", offset: 60, offsetHours: 1, displayName: "(UTC+01:00) Windhoek", supportsDaylightSavingTime: !0 }, { id: "W. Central Africa Standard Time", offset: 60, offsetHours: 1, displayName: "(UTC+01:00) West Central Africa", supportsDaylightSavingTime: !1 }, { id: "W. Europe Standard Time", offset: 60, offsetHours: 1, displayName: "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", supportsDaylightSavingTime: !0 }, { id: "Central Europe Standard Time", offset: 60, offsetHours: 1, displayName: "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", supportsDaylightSavingTime: !0 }, { id: "Romance Standard Time", offset: 60, offsetHours: 1, displayName: "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris", supportsDaylightSavingTime: !0 }, { id: "FLE Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius", supportsDaylightSavingTime: !0 }, { id: "South Africa Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) Harare, Pretoria", supportsDaylightSavingTime: !1 }, { id: "Turkey Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) Istanbul", supportsDaylightSavingTime: !0 }, { id: "GTB Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) Athens, Bucharest", supportsDaylightSavingTime: !0 }, { id: "Libya Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) Tripoli", supportsDaylightSavingTime: !0 }, { id: "E. Europe Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) E. Europe", supportsDaylightSavingTime: !0 }, { id: "Jordan Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) Amman", supportsDaylightSavingTime: !0 }, { id: "Middle East Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) Beirut", supportsDaylightSavingTime: !0 }, { id: "Egypt Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) Cairo", supportsDaylightSavingTime: !0 }, { id: "Syria Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) Damascus", supportsDaylightSavingTime: !0 }, { id: "Israel Standard Time", offset: 120, offsetHours: 2, displayName: "(UTC+02:00) Jerusalem", supportsDaylightSavingTime: !0 }, { id: "Arab Standard Time", offset: 180, offsetHours: 3, displayName: "(UTC+03:00) Kuwait, Riyadh", supportsDaylightSavingTime: !1 }, { id: "E. Africa Standard Time", offset: 180, offsetHours: 3, displayName: "(UTC+03:00) Nairobi", supportsDaylightSavingTime: !1 }, { id: "Arabic Standard Time", offset: 180, offsetHours: 3, displayName: "(UTC+03:00) Baghdad", supportsDaylightSavingTime: !0 }, { id: "Kaliningrad Standard Time", offset: 180, offsetHours: 3, displayName: "(UTC+03:00) Kaliningrad, Minsk", supportsDaylightSavingTime: !0 }, { id: "Iran Standard Time", offset: 210, offsetHours: 3.5, displayName: "(UTC+03:30) Tehran", supportsDaylightSavingTime: !0 }, { id: "Mauritius Standard Time", offset: 240, offsetHours: 4, displayName: "(UTC+04:00) Port Louis", supportsDaylightSavingTime: !0 }, { id: "Georgian Standard Time", offset: 240, offsetHours: 4, displayName: "(UTC+04:00) Tbilisi", supportsDaylightSavingTime: !1 }, { id: "Caucasus Standard Time", offset: 240, offsetHours: 4, displayName: "(UTC+04:00) Yerevan", supportsDaylightSavingTime: !0 }, { id: "Arabian Standard Time", offset: 240, offsetHours: 4, displayName: "(UTC+04:00) Abu Dhabi, Muscat", supportsDaylightSavingTime: !1 }, { id: "Azerbaijan Standard Time", offset: 240, offsetHours: 4, displayName: "(UTC+04:00) Baku", supportsDaylightSavingTime: !0 }, { id: "Russian Standard Time", offset: 240, offsetHours: 4, displayName: "(UTC+04:00) Moscow, St. Petersburg, Volgograd", supportsDaylightSavingTime: !0 }, { id: "Afghanistan Standard Time", offset: 270, offsetHours: 4.5, displayName: "(UTC+04:30) Kabul", supportsDaylightSavingTime: !1 }, { id: "Pakistan Standard Time", offset: 300, offsetHours: 5, displayName: "(UTC+05:00) Islamabad, Karachi", supportsDaylightSavingTime: !0 }, { id: "West Asia Standard Time", offset: 300, offsetHours: 5, displayName: "(UTC+05:00) Ashgabat, Tashkent", supportsDaylightSavingTime: !1 }, { id: "India Standard Time", offset: 330, offsetHours: 5.5, displayName: "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi", supportsDaylightSavingTime: !1 }, { id: "Sri Lanka Standard Time", offset: 330, offsetHours: 5.5, displayName: "(UTC+05:30) Sri Jayawardenepura", supportsDaylightSavingTime: !1 }, { id: "Nepal Standard Time", offset: 345, offsetHours: 5.75, displayName: "(UTC+05:45) Kathmandu", supportsDaylightSavingTime: !1 }, { id: "Central Asia Standard Time", offset: 360, offsetHours: 6, displayName: "(UTC+06:00) Astana", supportsDaylightSavingTime: !1 }, { id: "Bangladesh Standard Time", offset: 360, offsetHours: 6, displayName: "(UTC+06:00) Dhaka", supportsDaylightSavingTime: !0 }, { id: "Ekaterinburg Standard Time", offset: 360, offsetHours: 6, displayName: "(UTC+06:00) Ekaterinburg", supportsDaylightSavingTime: !0 }, { id: "Myanmar Standard Time", offset: 390, offsetHours: 6.5, displayName: "(UTC+06:30) Yangon (Rangoon)", supportsDaylightSavingTime: !1 }, { id: "SE Asia Standard Time", offset: 420, offsetHours: 7, displayName: "(UTC+07:00) Bangkok, Hanoi, Jakarta", supportsDaylightSavingTime: !1 }, { id: "N. Central Asia Standard Time", offset: 420, offsetHours: 7, displayName: "(UTC+07:00) Novosibirsk", supportsDaylightSavingTime: !0 }, { id: "Ulaanbaatar Standard Time", offset: 480, offsetHours: 8, displayName: "(UTC+08:00) Ulaanbaatar", supportsDaylightSavingTime: !1 }, { id: "China Standard Time", offset: 480, offsetHours: 8, displayName: "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi", supportsDaylightSavingTime: !1 }, { id: "Singapore Standard Time", offset: 480, offsetHours: 8, displayName: "(UTC+08:00) Kuala Lumpur, Singapore", supportsDaylightSavingTime: !1 }, { id: "North Asia Standard Time", offset: 480, offsetHours: 8, displayName: "(UTC+08:00) Krasnoyarsk", supportsDaylightSavingTime: !0 }, { id: "Taipei Standard Time", offset: 480, offsetHours: 8, displayName: "(UTC+08:00) Taipei", supportsDaylightSavingTime: !1 }, { id: "W. Australia Standard Time", offset: 480, offsetHours: 8, displayName: "(UTC+08:00) Perth", supportsDaylightSavingTime: !0 }, { id: "Korea Standard Time", offset: 540, offsetHours: 9, displayName: "(UTC+09:00) Seoul", supportsDaylightSavingTime: !1 }, { id: "North Asia East Standard Time", offset: 540, offsetHours: 9, displayName: "(UTC+09:00) Irkutsk", supportsDaylightSavingTime: !0 }, { id: "Tokyo Standard Time", offset: 540, offsetHours: 9, displayName: "(UTC+09:00) Osaka, Sapporo, Tokyo", supportsDaylightSavingTime: !1 }, { id: "AUS Central Standard Time", offset: 570, offsetHours: 9.5, displayName: "(UTC+09:30) Darwin", supportsDaylightSavingTime: !1 }, { id: "Cen. Australia Standard Time", offset: 570, offsetHours: 9.5, displayName: "(UTC+09:30) Adelaide", supportsDaylightSavingTime: !0 }, { id: "West Pacific Standard Time", offset: 600, offsetHours: 10, displayName: "(UTC+10:00) Guam, Port Moresby", supportsDaylightSavingTime: !1 }, { id: "Tasmania Standard Time", offset: 600, offsetHours: 10, displayName: "(UTC+10:00) Hobart", supportsDaylightSavingTime: !0 }, { id: "E. Australia Standard Time", offset: 600, offsetHours: 10, displayName: "(UTC+10:00) Brisbane", supportsDaylightSavingTime: !1 }, { id: "AUS Eastern Standard Time", offset: 600, offsetHours: 10, displayName: "(UTC+10:00) Canberra, Melbourne, Sydney", supportsDaylightSavingTime: !0 }, { id: "Yakutsk Standard Time", offset: 600, offsetHours: 10, displayName: "(UTC+10:00) Yakutsk", supportsDaylightSavingTime: !0 }, { id: "Vladivostok Standard Time", offset: 660, offsetHours: 11, displayName: "(UTC+11:00) Vladivostok", supportsDaylightSavingTime: !0 }, { id: "Central Pacific Standard Time", offset: 660, offsetHours: 11, displayName: "(UTC+11:00) Solomon Is., New Caledonia", supportsDaylightSavingTime: !1 }, { id: "Magadan Standard Time", offset: 720, offsetHours: 12, displayName: "(UTC+12:00) Magadan", supportsDaylightSavingTime: !0 }, { id: "Kamchatka Standard Time", offset: 720, offsetHours: 12, displayName: "(UTC+12:00) Petropavlovsk-Kamchatsky - Old", supportsDaylightSavingTime: !0 }, { id: "Fiji Standard Time", offset: 720, offsetHours: 12, displayName: "(UTC+12:00) Fiji", supportsDaylightSavingTime: !0 }, { id: "New Zealand Standard Time", offset: 720, offsetHours: 12, displayName: "(UTC+12:00) Auckland, Wellington", supportsDaylightSavingTime: !0 }, { id: "UTC+12", offset: 720, offsetHours: 12, displayName: "(UTC+12:00) Coordinated Universal Time+12", supportsDaylightSavingTime: !1 }, { id: "Tonga Standard Time", offset: 780, offsetHours: 13, displayName: "(UTC+13:00) Nuku'alofa", supportsDaylightSavingTime: !1 }, { id: "Samoa Standard Time", offset: 780, offsetHours: 13, displayName: "(UTC+13:00) Samoa", supportsDaylightSavingTime: !0 }], a = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365], s = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]; JQX.Utilities.Assign("TimeSpan", class { constructor() { const e = this; if (e.ticksPerMillisecond = 1e4, e.millisecondsPerTick = 1e-4, e.ticksPerSecond = 1e7, e.secondsPerTick = 1e-7, e.ticksPerMinute = 6e8, e.minutesPerTick = 1 / 6e8, e.ticksPerHour = 36e9, e.hoursPerTick = 1 / 36e9, e.ticksPerDay = 864e9, e.daysPerTick = 1 / 864e9, e.millisPerSecond = 1e3, e.millisPerMinute = 6e4, e.millisPerHour = 36e5, e.millisPerDay = 864e5, e._ticks = 0, 1 === arguments.length) { if (isNaN(arguments[0])) throw new Error("Argument must be a number."); e._ticks = arguments[0] } else if (3 === arguments.length) e._ticks = e.timeToMS(arguments[0], arguments[1], arguments[2], 0); else if (4 === arguments.length) { const t = 1e3 * (3600 * arguments[0] * 24 + 3600 * arguments[1] + 60 * arguments[2] + arguments[3]) + 0; e._ticks = t * e.ticksPerMillisecond } else if (5 === arguments.length) { const t = 1e3 * (3600 * arguments[0] * 24 + 3600 * arguments[1] + 60 * arguments[2] + arguments[3]) + arguments[4]; e._ticks = t * e.ticksPerMillisecond } } ticks() { return this._ticks } days() { return parseInt(this._ticks / this.ticksPerDay) } timeToMS(e, t, a, s) { return parseInt((3600 * e + 60 * t + a + s / 1e3) * this.ticksPerSecond) } hours() { return parseInt(this._ticks / this.ticksPerHour) % 24 } milliseconds() { return parseInt(this._ticks / this.ticksPerMillisecond) % 1e3 } minutes() { return parseInt(this._ticks / this.ticksPerMinute) % 60 } seconds() { return parseInt(this._ticks / this.ticksPerSecond) % 60 } totalDays() { return parseInt(this._ticks * this.daysPerTick) } totalHours() { return parseInt(this._ticks * this.hoursPerTick) } totalMilliseconds() { const e = this._ticks * this.millisecondsPerTick; return parseInt(e) } totalMinutes() { return parseInt(this._ticks * this.minutesPerTick) } totalSeconds() { return parseInt(this._ticks * this.secondsPerTick) } add(e) { const t = this._ticks + e._ticks; return new JQX.Utilities.TimeSpan(t) } subtract(e) { const t = this._ticks - e._ticks; return new JQX.Utilities.TimeSpan(t) } duration() { const e = this; return e._ticks >= 0 ? new JQX.Utilities.TimeSpan(e._ticks) : new JQX.Utilities.TimeSpan(-e._ticks) } equals(e) { return this._ticks === e._ticks } valueOf() { return this._ticks } compare(e, t) { return e._ticks > t._ticks ? 1 : e._ticks < t._ticks ? -1 : 0 } interval(e, t) { const a = e * t + (e >= 0 ? .5 : -.5); return new JQX.Utilities.TimeSpan(a * this.ticksPerMillisecond) } fromDays(e) { return this.interval(e, this.millisPerDay) } fromHours(e) { return this.interval(e, this.millisPerHour) } fromMilliseconds(e) { return this.interval(e, 1) } fromMinutes(e) { return this.interval(e, this.millisPerMinute) } fromSeconds(e) { return this.interval(e, this.millisPerSecond) } fromTicks(e) { return new JQX.Utilities.TimeSpan(e) } toString() { return this.totalMilliseconds().toString() } negate() { return new JQX.Utilities.TimeSpan(-this._ticks) } }), JQX.Utilities.Assign("DateTime", class { constructor() { function e(e) { const t = i.regexISOString.exec(e); r = new JQX.Utilities.DateTime(parseFloat(t[1]), parseFloat(t[2]), parseFloat(t[3]), parseFloat(t[4]), parseFloat(t[5]), parseFloat(t[6]), parseFloat(t[7]), 0, 0, 0, 0, 0, 0, 0, "UTC") } const i = this; let r; if (i.ticksPerMillisecond = 1e4, i.millisecondsPerTick = 1e-4, i.ticksPerSecond = 1e7, i.secondsPerTick = 1e-7, i.ticksPerMinute = 6e8, i.minutesPerTick = 1 / 6e8, i.ticksPerHour = 36e9, i.hoursPerTick = 1 / 36e9, i.ticksPerDay = 864e9, i.daysPerTick = 1 / 864e9, i.millisPerSecond = 1e3, i.millisPerMinute = 6e4, i.millisPerHour = 36e5, i.millisPerDay = 864e5, i.daysPerYear = 365, i.daysPer4Years = 1461, i.daysPer100Years = 36524, i.daysPer400Years = 146097, i.daysTo1601 = 584388, i.daysTo1899 = 693593, i.daysTo10000 = 3652059, i.minTicks = 0, i.maxTicks = 3155378976e9, i.maxMillis = 3155378976e5, i.datePartYear = 0, i.datePartDayOfYear = 1, i.datePartMonth = 2, i.datePartDay = 3, i.daysToMonth365 = a, i.daysToMonth366 = s, i.minValue = new Date(0), i.maxValue = new Date(3155378976e9), i.ticksMask = 0x4000000000000000, i.flagsMask = 0xc000000000000000, i.localMask = 0x8000000000000000, i.ticksCeiling = 0x4000000000000000, i.kindUnspecified = 0, i.kindUtc = 0x4000000000000000, i.kindLocal = 0x8000000000000000, i.kindLocalAmbiguousDst = 0xc000000000000000, i.kindShift = 62, i.regexTrim = /^\s+|\s+$/g, i.regexInfinity = /^[+-]?infinity$/i, i.regexHex = /^0x[a-f0-9]+$/i, i.regexParseFloat = /^[+-]?\d*\.?\d*(e[+-]?\d+)?$/, i.regexISOString = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{3})Z$/, i.calendar = { "/": "/", ":": ":", firstDay: 0, days: { names: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], namesAbbr: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], namesShort: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"] }, months: { names: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ""], namesAbbr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ""] }, AM: ["AM", "am", "AM"], PM: ["PM", "pm", "PM"], eras: [{ name: "A.D.", start: null, offset: 0 }], twoDigitYearMax: 2029, patterns: { d: "M/d/yyyy", D: "dddd, MMMM dd, yyyy", t: "h:mm tt", T: "h:mm:ss tt", f: "dddd, MMMM dd, yyyy h:mm tt", F: "dddd, MMMM dd, yyyy h:mm:ss tt", M: "MMMM dd", Y: "yyyy MMMM", S: "yyyy'-'MM'-'dd'T'HH':'mm':'ss", ISO: "yyyy-MM-dd hh:mm:ss", ISO2: "yyyy-MM-dd HH:mm:ss", ISO8601: "yyyy-MM-ddTHH:mm:ss.sssZ", d1: "dd.MM.yyyy", d2: "dd-MM-yyyy", zone1: "yyyy-MM-ddTHH:mm:ss-HH:mm", zone2: "yyyy-MM-ddTHH:mm:ss+HH:mm", custom: "yyyy-MM-ddTHH:mm:ss.fff", custom2: "yyyy-MM-dd HH:mm:ss.fff", FP: "yyyy-MM-dd HH:mm:ss:fff:uu:nn:pp:ee:aa:xx:oo", FPA: "yyyy/MM/dd HH:mm:ss:fffuunnppeeaaxxoo", FPA2: "yyyy-MM-dd HH:mm:ss:fffuunnppeeaaxxoo", FT: "HH:mm:ss:fff:uu:nn:pp:ee:aa:xx:oo", PP: "yyyy-MM-dd HH:mm:ss:fff:uu:nn:pp", PT: "HH:mm:ss:fff:uu:nn:pp" }, percentsymbol: "%", currencysymbol: "$", currencysymbolposition: "before", decimalseparator: ".", thousandsseparator: "," }, i.dateData = 0, i.timeZone = null, i.timeZones = t, i._codeToUnit = { u: "_microsecond", uu: "_microsecond", n: "_nanosecond", nn: "_nanosecond", p: "_picosecond", pp: "_picosecond", e: "_femtosecond", ee: "_femtosecond", a: "_attosecond", aa: "_attosecond", x: "_zeptosecond", xx: "_zeptosecond", o: "_yoctosecond", oo: "_yoctosecond" }, i._smallUnits = ["_microsecond", "_nanosecond", "_picosecond", "_femtosecond", "_attosecond", "_zeptosecond", "_yoctosecond"], i._microsecond = 0, i._nanosecond = 0, i._picosecond = 0, i._femtosecond = 0, i._attosecond = 0, i._zeptosecond = 0, i._yoctosecond = 0, 0 === arguments.length) { const e = new Date; i.dateData = i.dateToMS(e.getFullYear(), e.getMonth() + 1, e.getDate()) + i.timeToMS(e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()) } else if (1 === arguments.length) { void 0 === arguments[0] && (arguments[0] = "todayDate"); if ("number" == typeof arguments[0] && isFinite(arguments[0]) || "string" != typeof arguments[0]) if ("number" == typeof arguments[0]) i.dateData = arguments[0]; else if (arguments[0] instanceof Date) { const e = arguments[0]; i.dateData = i.dateToMS(e.getFullYear(), e.getMonth() + 1, e.getDate()) + i.timeToMS(e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()) } else i.dateData = arguments[0]; else { let t; "today" === arguments[0] ? t = new Date : "todayDate" === arguments[0] ? (t = new Date, t.setHours(0, 0, 0, 0)) : i.regexISOString.test(arguments[0]) ? e(arguments[0]) : t = i.tryparseDate(arguments[0]), t && (i.dateData = i.dateToMS(t.getFullYear(), t.getMonth() + 1, t.getDate()) + i.timeToMS(t.getHours(), t.getMinutes(), t.getSeconds(), t.getMilliseconds())) } } else if (2 === arguments.length) { void 0 === arguments[0] && (arguments[0] = "todayDate"); if ("number" == typeof arguments[0] && isFinite(arguments[0]) || "string" != typeof arguments[0]) if ("number" == typeof arguments[0]) i.dateData = arguments[0]; else if (arguments[0] instanceof Date) { const e = arguments[0]; i.dateData = i.dateToMS(e.getFullYear(), e.getMonth() + 1, e.getDate()) + i.timeToMS(e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()) } else i.dateData = arguments[0]; else { let t; "today" === arguments[0] ? t = new Date : "todayDate" === arguments[0] ? (t = new Date, t.setHours(0, 0, 0, 0)) : i.regexISOString.test(arguments[0]) ? e(arguments[0]) : t = i.tryparseDate(arguments[0]), t && (i.dateData = i.dateToMS(t.getFullYear(), t.getMonth() + 1, t.getDate()) + i.timeToMS(t.getHours(), t.getMinutes(), t.getSeconds(), t.getMilliseconds())) } i.validateTimeZone(arguments[1]) } else if (arguments.length > 2) if ("string" == typeof arguments[0]) { const e = i.tryparseDate(arguments[0], arguments[2], arguments[1]); i.dateData = i.dateToMS(e.getFullYear(), e.getMonth() + 1, e.getDate()) + i.timeToMS(e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()) } else { const e = arguments[0], t = arguments[7] || 0, a = arguments[8] || 0, s = arguments[9] || 0, r = arguments[10] || 0, n = arguments[11] || 0, o = arguments[12] || 0, d = arguments[13] || 0, l = new Date(e, arguments[1] - 1, arguments[2], arguments[3] || 0, arguments[4] || 0, arguments[5] || 0, arguments[6] || 0); e < 1970 && l.setFullYear(e), i.dateData = i.dateToMS(l.getFullYear(), l.getMonth() + 1, l.getDate()) + i.timeToMS(l.getHours(), l.getMinutes(), l.getSeconds(), l.getMilliseconds()), i._microsecond = t, i._nanosecond = a, i._picosecond = s, i._femtosecond = r, i._attosecond = n, i._zeptosecond = o, i._yoctosecond = d, arguments[14] && i.validateTimeZone(arguments[14]) } if (i.timeZone || i.validateTimeZone("Local"), r) { const e = r.toTimeZone(i.timeZone); i.dateData = e.dateData } } static isValidDate(e) { const t = this.validateDate(e); return !(!t || t && !t.dateData) } static validateDate(e, t, a) { if (e instanceof JQX.Utilities.DateTime) return e; if (e instanceof Date) return new JQX.Utilities.DateTime(e); try { if ("string" == typeof e && a) return this.parseDateString(e, t, a); if (new RegExp(/^\d{1,2}\/\d{1,2}\/\d{4}(, \d{1,2}:\d{2}:\d{1,2} [A|P]M)?$/).test(e)) { const t = new Date(e); if (!isNaN(t.getTime())) return new JQX.Utilities.DateTime(t) } if ("string" == typeof e) return this.parseDateString(e, t, a); if ("number" == typeof e) return new JQX.Utilities.DateTime(new Date(e)) } catch (e) { } return t } static parseDateString(e, t, a) { const s = new Date(e); if (!isNaN(s.getTime())) return e && "string" == typeof e && a ? new JQX.Utilities.DateTime(e, a, null) : new JQX.Utilities.DateTime(s); const i = e.indexOf("Date("), r = e.indexOf("DateTime("), n = e.lastIndexOf(")"); let o = e; if (-1 === i && -1 === r || -1 === n) { const t = new JQX.Utilities.DateTime, s = t.parseDate(e, a); if (s) return o = new JQX.Utilities.DateTime(s), t.copySmallTimePartValues(o), o } else { if (o = -1 !== i ? e.slice(i + 5, n) : e.slice(r + 9, n), o = o.replace(/'/g, "").replace(/"/g, "").replace(/^\s+|\s+$|\s+(?=\s)/g, ""), "" === o.trim()) return new JQX.Utilities.DateTime; if (new RegExp(/(^(\d+)(\s*,\s*\d+)+(\s*,\s*[a-zA-Z ]+)?$)/g).test(o)) return o = o.split(","), o.map((function (e, t) { isNaN(o[t]) ? o[t] = e.trim() : o[t] = parseInt(e) })), -1 !== i && o[1]++, o.unshift(null), o = new (Function.prototype.bind.apply(JQX.Utilities.DateTime, o)), o } if ("" === o.trim()) return t; if (!isNaN(o)) return o = new Date(parseInt(o, 10)), new JQX.Utilities.DateTime(o); try { const e = o.split(","); 2 === e.length ? (e[1] = e[1].trim(), e.unshift(null), o = new (Function.prototype.bind.apply(JQX.Utilities.DateTime, e))) : o = new JQX.Utilities.DateTime(o) } catch (e) { o = t } return o } static fromFullTimeStamp(e) { e = e.toString(); const t = new JQX.Utilities.DateTime(parseFloat(e.slice(0, e.length - 21))); let a = e.slice(e.length - 21), s = 0; for (; a.length > 0;)t[t._smallUnits[s]] = parseInt(a.slice(0, 3), 10), a = a.slice(3), s++; return t } static getConstructorParameters(e) { return [e.year(), e.month(), e.day(), e.hour(), e.minute(), e.second(), e.millisecond(), e._microsecond, e._nanosecond, e._picosecond, e._femtosecond, e._attosecond, e._zeptosecond, e._yoctosecond, e.timeZone] } static detectDisplayMode(e, t, a) { if (e.calendar.patterns[t]) return -1 !== ["d", "D", "M", "Y", "d1", "d2"].indexOf(t) ? "calendar" : -1 !== ["t", "T", "FT", "PT"].indexOf(t) ? "timePicker" : "default"; const s = ["d", "M", "y"], i = ["h", "H", "m", "s", "t", "f", "u", "n", "p", "e", "a", "x", "o"], r = a.groups; let n = !1, o = !1; for (let e = 0; e < r.length; e++) { const t = r[e].charAt(0); if (-1 !== s.indexOf(t) ? n = !0 : -1 !== i.indexOf(t) && (o = !0), n && o) break } return n === o ? "default" : n ? "calendar" : "timePicker" } static getLocalizedNames(e) { const t = { names: [], namesAbbr: [], namesShort: [] }, a = { names: [], namesAbbr: [] }; if (this[e]) return this[e]; for (let a = 23; a < 30; a++) { const s = new Date(2017, 6, a), i = s.toLocaleString(e, { weekday: "long" }); t.names.push(i), t.namesAbbr.push(s.toLocaleString(e, { weekday: "short" })), t.namesShort.push(i.substring(0, 2)) } for (let t = 0; t < 12; t++) { const s = new Date(2017, t, 1).toLocaleString(e, { month: "long" }); a.names.push(s), a.namesAbbr.push(s.substring(0, 3)) } return a.names.push(""), a.namesAbbr.push(""), this[e] = { days: t, months: a }, this[e] } internalMS() { return this.dateData } getDatePart(e) { const t = this, a = t.internalMS(); let s = parseInt(a / t.millisPerDay); const i = parseInt(s / t.daysPer400Years); s -= i * t.daysPer400Years; let r = parseInt(s / t.daysPer100Years); 4 === r && (r = 3), s -= r * t.daysPer100Years; const n = parseInt(s / t.daysPer4Years); s -= n * t.daysPer4Years; let o = parseInt(s / t.daysPerYear); if (4 === o && (o = 3), e === t.datePartYear) return parseInt(400 * i + 100 * r + 4 * n + o + 1); if (s -= o * t.daysPerYear, e === t.datePartDayOfYear) return parseInt(s + 1); const d = 3 === o && (24 !== n || 3 === r) ? t.daysToMonth366 : t.daysToMonth365; let l = s >> 6; for (; s >= d[l];)l++; return e === t.datePartMonth ? parseInt(l) : parseInt(s - d[l - 1] + 1) } dayOfWeek() { const e = this.dateData; return parseInt(e / this.millisPerDay + 1) % 7 } dayOfYear() { return this.getDatePart(this.datePartDayOfYear) } weekOfYear(e) { const t = this.toDate(), a = e || this.calendar.firstDay, s = new Date(t.getFullYear(), 0, 1), i = Math.floor((t.getTime() - s.getTime() - 6e4 * (t.getTimezoneOffset() - s.getTimezoneOffset())) / 864e5) + 1; let r, n = s.getDay() - a; if (n = n >= 0 ? n : n + 7, n < 4) { if (r = Math.floor((i + n - 1) / 7) + 1, r > 52) { let e = new Date(t.getFullYear() + 1, 0, 1).getDay() - a; e = e >= 0 ? e : e + 7, r = e < 4 ? 1 : 53 } } else r = Math.floor((i + n - 1) / 7); return r } subtract(e) { const t = this; return new JQX.Utilities.TimeSpan(t.dateData * t.ticksPerMillisecond - e.dateData * t.ticksPerMillisecond) } dateToMS(e, t, a) { const s = this; if (e >= 1 && e <= 9999 && t >= 1 && t <= 12) { e = parseInt(e); const i = s.isLeapYear(e) ? s.daysToMonth366 : s.daysToMonth365; if (a >= 1 && a <= i[t] - i[t - 1]) { const r = e - 1; return (365 * r + parseInt(r / 4) - parseInt(r / 100) + parseInt(r / 400) + i[t - 1] + a - 1) * s.millisPerDay } } } isLeapYear(e) { if (e < 1 || e > 9999) throw new Error("Year out of Range"); return e % 4 == 0 && (e % 100 != 0 || e % 400 == 0) } timeToMS(e, t, a, s) { const i = this; if (e >= 0 && e < 24 && t >= 0 && t < 60 && a >= 0 && a < 60) { const r = parseInt(3600 * e + 60 * t + a); return s > 0 && s < 1e3 ? r * i.millisPerSecond + s : r * i.millisPerSecond } } daysInMonth(e, t) { if (t < 1 || t > 12) throw new Error("Month out of Range"); const a = this, s = a.isLeapYear(e) ? a.daysToMonth366 : a.daysToMonth365; return s[t] - s[t - 1] } arrayIndexOf(e, t) { return e.indexOf(t) } startsWith(e, t) { return 0 === e.indexOf(t) } endsWith(e, t) { return e.substr(e.length - t.length) === t } trim(e) { return (e + "").replace(this.regexTrim, "") } expandFormat(e, t) { t = t || "F"; let a, s = e.patterns, i = t.length; if (s[t]) return s[t]; if (1 === i) { if (a = s[t], !a) throw "Invalid date format string '" + t + "'."; t = a } else 2 === i && "%" === t.charAt(0) && (t = t.charAt(1)); return t } getEra(e, t) { if (!t) return 0; if ("string" == typeof e) return 0; let a, s = e.getTime(); for (let e = 0, i = t.length; e < i; e++)if (a = t[e].start, null === a || s >= a) return e; return 0 } toUpper(e) { return e.split(" ").join(" ").toUpperCase() } toUpperArray(e) { const t = []; for (let a = 0, s = e.length; a < s; a++)t[a] = this.toUpper(e[a]); return t } getEraYear(e, t, a, s) { let i = e.getFullYear(); return !s && t.eras && (i -= "number" == typeof a ? a : t.eras[a].offset), i } getDayIndex(e, t, a) { const s = this, i = e.days; let r, n = e._upperDays; return n || (e._upperDays = n = [s.toUpperArray(i.names), s.toUpperArray(i.namesAbbr), s.toUpperArray(i.namesShort)]), t = t.toUpperCase(), a ? (r = s.arrayIndexOf(n[1], t), -1 === r && (r = s.arrayIndexOf(n[2], t))) : r = s.arrayIndexOf(n[0], t), r } getMonthIndex(e, t, a) { const s = this; let i = e.months, r = e.monthsGenitive || e.months, n = e._upperMonths, o = e._upperMonthsGen; n || (e._upperMonths = n = [s.toUpperArray(i.names), s.toUpperArray(i.namesAbbr)], e._upperMonthsGen = o = [s.toUpperArray(r.names), s.toUpperArray(r.namesAbbr)]), t = s.toUpper(t); let d = s.arrayIndexOf(a ? n[1] : n[0], t); return d < 0 && (d = s.arrayIndexOf(a ? o[1] : o[0], t)), d } appendPreOrPostMatch(e, t) { let a = 0, s = !1; for (let i = 0, r = e.length; i < r; i++) { const r = e.charAt(i); switch (r) { case "'": s ? t.push("'") : a++, s = !1; break; case "\\": s && t.push("\\"), s = !s; break; default: t.push(r), s = !1 } } return a } getTokenRegExp() { return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyyy|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|uu|u|nn|n|pp|p|ee|e|aa|a|xx|x|oo|o|i{1,24}|zzz|zz|z|gg|g/g } static ParseDate(e, t) { return (new JQX.Utilities.DateTime).tryparseDate(e, null, t) } tryparseDate(e, t, a) { const s = this; if (null == t && (t = s.calendar), void 0 !== a) { if (Array.isArray(a)) for (let i = 0; i < a.length; i++) { const r = s.parseDate(e, a[i], t); if (r) return r } const i = s.parseDate(e, a, t); if (i) return i } if ("" === e) return null; if (null == e || e.substring || (e = e.toString()), null != e && "/Date(" === e.substring(0, 6)) { const t = /^\/Date\((-?\d+)(\+|-)?(\d+)?\)\/$/; let a = new Date(+e.replace(/\/Date\((\d+)\)\//, "$1")); if ("Invalid Date" === a) { const t = e.match(/^\/Date\((\d+)([-+]\d\d)(\d\d)\)\/$/); a = null, t && (a = new Date(1 * t[1] + 36e5 * t[2] + 6e4 * t[3])) } if (null == a || "Invalid Date" === a || isNaN(a)) { const a = t.exec(e); if (a) { const e = new Date(parseInt(a[1])); if (a[2]) { let t = parseInt(a[3]); "-" === a[2] && (t = -t); const s = e.getUTCMinutes(); e.setUTCMinutes(s - t) } if (!isNaN(e.valueOf())) return e } } return a } const i = { jqxdate: "yyyy-MM-dd HH:mm:ss", d: "M/d/yyyy", D: "dddd, MMMM dd, yyyy", t: "h:mm tt", T: "h:mm:ss tt", f: "dddd, MMMM dd, yyyy h:mm tt", F: "dddd, MMMM dd, yyyy h:mm:ss tt", M: "MMMM dd", Y: "yyyy MMMM", S: "yyyy'-'MM'-'dd'T'HH':'mm':'ss", ISO: "yyyy-MM-dd hh:mm:ss", ISO2: "yyyy-MM-dd HH:mm:ss", ISO8601: "yyyy-MM-ddTHH:mm:ss.sssZ", d1: "dd.MM.yyyy", d2: "dd-MM-yyyy", d3: "MM-dd-yyyy", d4: "MM.dd.yyyy", zone1: "yyyy-MM-ddTHH:mm:ss-HH:mm", zone2: "yyyy-MM-ddTHH:mm:ss+HH:mm", custom: "yyyy-MM-ddTHH:mm:ss.fff", custom2: "yyyy-MM-dd HH:mm:ss.fff", custom3: "yyyy-MM-ddTHH:mm:ss.fff+HH:mm", custom4: "yyyy-MM-ddTHH:mm:ss.fff-HH:mm", custom5: "yyyy-MM-ddTHH:mm:ss.ffffff+HH:mm", custom6: "yyyy-MM-ddTHH:mm:ss.ffffff-HH:mm", iso: "yyyy-MM-ddTHH:mm:ssZ", iso2: "yyyy-MM-ddTHH:mm.fffZ", iso_date1: "yyyy-MM-dd", iso_date2: "yyyy-MM-dd", iso_date3: "yyyy-ddd", iso_date4: "yyyy-MM-dd HH:mm", iso_date5: "yyyy-MM-dd HH:mm Z", iso_date6: "yyyy-MMM-dd", iso_date7: "yyyy-MM", iso_date8: "yyyy-MMM", iso_date9: "yyyy-MMMM", iso_date10: "yyyy-MMMM-dd", iso_time1: "HH:mm:ss.tttt", iso_time2: "HH:mm:ss", iso_time3: "HH:mm", iso_time4: "HH", iso_time5: "yyyyyy-MM-dd", iso_time6: "yyyyyy-MM-dd", iso_time7: "dd/MM/yyyy HH:mm", iso_time8: "dd.MM.yyyy HH:mm", iso_time9: "dd-MM-yyyy HH:mm", iso_time10: "MM.dd.yyyy HH:mm", iso_time11: "MM-dd-yyyy HH:mm", iso_time12: "dd/MM/yyyy", iso_time13: "MM.dd.yyyy h:mm tt", iso_time14: "MM-dd-yyyy h:mm tt", iso_time15: "MM/dd/yyyy h:mm tt" }; for (let a in i) { const r = s.parseDate(e, i[a], t); if (r) return r } const r = t.patterns; for (let a in r) { const i = s.parseDate(e, r[a], t); if (i) { if ("ISO" === a) { const a = s.parseDate(e, r.ISO2, t); if (a) return a } return i } } let n; if ("string" == typeof e) { const a = [":", "/", "-", " ", ","]; let i = "", r = e = function (e, t, a) { return a.replace(new RegExp(e, "g"), t) }(", ", ",", e = s.trim(e)); e.indexOf(":") >= 0 ? (i = e.substring(e.indexOf(":") - 2), i = s.trim(i), r = e.substring(0, e.indexOf(":") - 2)) : e.toUpperCase().indexOf("AM") >= 0 ? (i = e.substring(e.toUpperCase().indexOf("AM") - 2), i = s.trim(i), r = e.substring(0, e.toUpperCase().indexOf("AM") - 2)) : e.toUpperCase().indexOf("PM") >= 0 && (i = e.substring(e.toUpperCase().indexOf("PM") - 2), i = s.trim(i), r = e.substring(0, e.toUpperCase().indexOf("PM") - 2)); let o = new Date, d = !1; if (r) { for (let e = 0; e < a.length; e++)if (r.indexOf(a[e]) >= 0) { n = r.split(a[e]); break } if (!n) return null; let e = new Array, i = new Array, l = new Array, f = null, m = null; for (let a = 0; a < n.length; a++) { const i = n[a], r = s.parseDate(i, "d", t) || s.parseDate(i, "dd", t) || s.parseDate(i, "ddd", t) || s.parseDate(i, "dddd", t); if (r && (e.push(r.getDate()), i.length > 2)) { f = a; break } } for (let e = 0; e < n.length; e++) { const a = n[e], r = s.parseDate(a, "M", t) || s.parseDate(a, "MM", t) || s.parseDate(a, "MMM", t) || s.parseDate(a, "MMMM", t); if (r) { if (null != f && f === e) continue; if (i.push(r.getMonth()), a.length > 2) { m = e; break } } } for (let e = 0; e < n.length; e++) { const a = n[e], i = s.parseDate(a, "yyyy", t); if (i) { if (null != f && f === e) continue; if (null != m && m === e) continue; l.push(i.getFullYear()) } } const c = new Array; for (let t = e.length - 1; t >= 0; t--)for (let a = 0; a < i.length; a++)for (let s = 0; s < l.length; s++) { const r = new Date(l[s], i[a], e[t]); l[s] < 1970 && r.setFullYear(l[s]), isNaN(r.getTime()) || c.push(r) } c.length > 0 && (o = c[0], d = !0) } if (i) { const e = i.indexOf(":") >= 0 ? i.split(":") : i, a = s.parseDate(i, "h:mm tt", t) || s.parseDate(i, "HH:mm:ss.fff", t) || s.parseDate(i, "HH:mm:ss.ff", t) || s.parseDate(i, "h:mm:ss tt", t) || s.parseDate(i, "HH:mm:ss.tttt", t) || s.parseDate(i, "HH:mm:ss", t) || s.parseDate(i, "HH:mm", t) || s.parseDate(i, "HH", t); let r = 0, n = 0, l = 0, f = 0; a && !isNaN(a.getTime()) ? (r = a.getHours(), n = a.getMinutes(), l = a.getSeconds(), f = a.getMilliseconds()) : (1 === e.length && (r = parseInt(e[0])), 2 === e.length && (r = parseInt(e[0]), n = parseInt(e[1])), 3 === e.length && (r = parseInt(e[0]), n = parseInt(e[1]), e[2].indexOf(".") >= 0 ? (l = parseInt(e[2].toString().split(".")[0]), f = parseInt(e[2].toString().split(".")[1])) : l = parseInt(e[2])), 4 === e.length && (r = parseInt(e[0]), n = parseInt(e[1]), l = parseInt(e[2]), f = parseInt(e[3]))), !o || isNaN(r) || isNaN(n) || isNaN(l) || isNaN(f) || (o.setHours(r, n, l, f), d = !0) } if (d) return o } if (null != e) { n = [":", "/", "-"]; let t = !0; for (let a = 0; a < n.length; a++)-1 !== e.indexOf(n[a]) && (t = !1); if (t) { const t = new Number(e); if (!isNaN(t)) return new Date(t) } } return null } getParseRegExp(e, t) { const a = this; let s = e._parseRegExp; if (s) { const e = s[t]; if (e) return e } else e._parseRegExp = s = {}; let i, r = a.expandFormat(e, t).replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1"), n = ["^"], o = [], d = 0, l = 0, f = a.getTokenRegExp(); for (; null !== (i = f.exec(r));) { const e = r.slice(d, i.index); if (d = f.lastIndex, l += a.appendPreOrPostMatch(e, n), l % 2) { n.push(i[0]); continue } let t, s = i[0], m = s.length; switch (s) { case "dddd": case "ddd": case "MMMM": case "MMM": case "gg": case "g": t = "(\\D+)"; break; case "tt": case "t": t = "(\\D*)"; break; case "yyyyy": t = "(\\d{1,4})"; break; case "yyyy": t = "(\\d{" + m + "})"; break; case "fff": case "ff": case "f": t = "(\\d{1," + m + "})"; break; case "dd": case "d": case "MM": case "M": case "yy": case "y": case "HH": case "H": case "hh": case "h": case "mm": case "m": case "ss": case "s": t = "(\\d\\d?)"; break; case "uu": case "nn": case "pp": case "ee": case "aa": case "xx": case "oo": t = "(\\d{1,3})"; break; case "zzz": t = "([+-]?\\d\\d?:\\d{2})"; break; case "zz": case "z": t = "([+-]?\\d\\d?)"; break; case "/": t = "/"; break; default: if (!/i{1,24}/.test(s)) throw "Invalid date format pattern '" + s + "'."; t = "(\\d{" + s.length + "})" }t && n.push(t), "/" !== s && o.push(i[0]) } a.appendPreOrPostMatch(r.slice(d), n), n.push("$"); const m = { regExp: n.join("").replace(/\s+/g, "\\s+"), groups: o }; return s[t] = m } outOfRange(e, t, a) { return e < t || e > a } expandYear(e, t) { const a = this, s = new Date, i = a.getEra(s); if (t < 100) { let r = e.twoDigitYearMax; r = "string" == typeof r ? (new Date).getFullYear() % 100 + parseInt(r, 10) : r; const n = a.getEraYear(s, e, i); (t += n - n % 100) > r && (t -= 100) } return t } padZeros(e, t) { let a, s = e + ""; return t > 1 && s.length < t ? (a = ["0", "00", "000"][t - 2] + s, a.substr(a.length - t, t)) : (a = s, a) } parseDate(e, t, a) { const s = this; null == a && (a = s.calendar), e = s.trim(e); const i = a, r = s.getParseRegExp(i, t), n = new RegExp(r.regExp).exec(e); if (null === n) return null; let o, d = r.groups, l = null, f = null, m = null, c = null, u = null, p = 0, y = 0, g = 0, h = 0, T = null, M = !1; for (let e = 0, t = d.length; e < t; e++) { const t = n[e + 1]; if (t) { const a = d[e], r = a.length, n = parseInt(t, 10); switch (a) { case "dd": case "d": if (c = n, s.outOfRange(c, 1, 31)) return null; break; case "MMM": case "MMMM": case "MMMMM": case "MMMMMM": case "MMMMMMM": case "MMMMMMMM": if (m = s.getMonthIndex(i, t, 3 === r), s.outOfRange(m, 0, 11)) return null; break; case "M": case "MM": if (m = n - 1, s.outOfRange(m, 0, 11)) return null; break; case "y": case "yy": case "yyyy": if (f = r < 4 ? s.expandYear(i, n) : n, s.outOfRange(f, 0, 9999)) return null; break; case "h": case "hh": if (p = n, 12 === p && (p = 0), s.outOfRange(p, 0, 11)) return null; break; case "H": case "HH": if (p = n, s.outOfRange(p, 0, 23)) return null; break; case "m": case "mm": if (y = n, s.outOfRange(y, 0, 59)) return null; break; case "s": case "ss": if (g = n, s.outOfRange(g, 0, 59)) return null; break; case "tt": case "t": if (M = i.PM && (t === i.PM[0] || t === i.PM[1] || t === i.PM[2]), !M && (!i.AM || t !== i.AM[0] && t !== i.AM[1] && t !== i.AM[2])) return null; break; case "f": case "ff": case "fff": if (h = n * Math.pow(10, 3 - r), s.outOfRange(h, 0, 999)) return null; break; case "uu": case "nn": case "pp": case "ee": case "aa": case "xx": case "oo": if (s.outOfRange(n, 0, 1e3)) return null; s[s._codeToUnit[a]] = n; break; case "ddd": case "dddd": if (u = s.getDayIndex(i, t, 3 === r), s.outOfRange(u, 0, 6)) return null; break; case "zzz": { const e = t.split(/:/); if (2 !== e.length) return null; if (o = parseInt(e[0], 10), s.outOfRange(o, -12, 13)) return null; const a = parseInt(e[1], 10); if (s.outOfRange(a, 0, 59)) return null; T = 60 * o + (s.startsWith(t, "-") ? -a : a); break } case "z": case "zz": if (o = n, s.outOfRange(o, -12, 13)) return null; T = 60 * o; break; case "g": case "gg": { let e = t; if (!e || !i.eras) return null; e = this.trim(e.toLowerCase()); for (let t = 0, a = i.eras.length; t < a; t++)if (e === i.eras[t].nathat.toLowerCase()) { l = t; break } if (null === l) return null; break } default: { let e = t; e.length % 3 == 1 ? e += "00" : e.length % 3 == 2 && (e += "0"), h = parseInt(e.slice(0, 3), 10), e = e.slice(3); let a = 0; for (; e.length > 0;)s[s._smallUnits[a]] = parseInt(e.slice(0, 3), 10), e = e.slice(3), a++ } } } } let S, D = new Date, H = i.convert; if (S = D.getFullYear(), null === f ? f = S : i.eras && (f += i.eras[l || 0].offset), null === m && (m = 0), null === c && (c = 1), H) { if (D = H.toGregorian(f, m, c), null === D) return null } else { if (D.setFullYear(f, m, c), D.getDate() !== c) return null; if (null !== u && D.getDay() !== u) return null } if (M && p < 12 && (p += 12), D.setHours(p, y, g, h), null !== T) { const e = D.getMinutes() - (T + D.getTimezoneOffset()); D.setHours(D.getHours() + parseInt(e / 60, 10), e % 60) } return D } toString(e, t) { const a = this; void 0 === e && (e = "yyyy-MM-dd HH:mm:ss"); const s = a.dateData.toString() + a.getFractionsOfSecondStamp() + e + (a.timeZone || ""); if (JQX.Utilities.DateTime.cache && JQX.Utilities.DateTime.cache[s] && !1 !== a.showTodayDateAsString) return JQX.Utilities.DateTime.cache[s]; const i = a.toDate(); if (null == t && (t = a.calendar), "string" == typeof i) return i; if (!e || !e.length || "i" === e) { let e; return e = a.formatDate(i, t.patterns.F, t), e } const r = t.eras, n = "s" === e; e = a.expandFormat(t, e); const o = []; let d, l = 0, f = a.getTokenRegExp(); function m(e, t) { if (void 0 !== e.getMonth) switch (t) { case 0: return e.getFullYear(); case 1: return e.getMonth(); case 2: return e.getDate() } } for (; ;) { const s = f.lastIndex, c = f.exec(e), u = e.slice(s, c ? c.index : e.length); if (l += a.appendPreOrPostMatch(u, o), !c) break; if (l % 2) { o.push(c[0]); continue } const p = c[0], y = p.length; let g; if (/i{1,24}/.test(p)) o.push(a.getFirstNDigitsOfPrecision(p.length)); else switch (p) { case "ddd": case "dddd": { const e = 3 === y ? t.days.namesAbbr : t.days.names; o.push(e[i.getDay()]); break } case "d": case "dd": o.push(a.padZeros(m(i, 2), y)); break; case "MMM": case "MMMM": g = m(i, 1), o.push(t.months[3 === y ? "namesAbbr" : "names"][g]); break; case "M": case "MM": o.push(a.padZeros(m(i, 1) + 1, y)); break; case "y": case "yy": case "yyyy": g = a.getEraYear(i, t, a.getEra(i, r), n), y < 4 && (g %= 100), o.push(a.padZeros(g, y)); break; case "h": case "hh": d = i.getHours() % 12, 0 === d && (d = 12), o.push(a.padZeros(d, y)); break; case "H": case "HH": o.push(a.padZeros(i.getHours(), y)); break; case "m": case "mm": o.push(a.padZeros(i.getMinutes(), y)); break; case "s": case "ss": o.push(a.padZeros(i.getSeconds(), y)); break; case "t": case "tt": g = i.getHours() < 12 ? t.AM ? t.AM[0] : " " : t.PM ? t.PM[0] : " ", o.push(1 === y ? g.charAt(0) : g); break; case "f": case "ff": case "fff": o.push(a.padZeros(i.getMilliseconds(), 3).substr(0, y)); break; case "u": case "n": case "p": case "e": case "a": case "x": case "o": o.push(a[a._codeToUnit[p]]); break; case "uu": case "nn": case "pp": case "ee": case "aa": case "xx": case "oo": o.push(a.padZeros(a[a._codeToUnit[p]], 3)); break; case "z": case "zz": o.push((a.timeZoneOffsetHours >= 0 ? "+" : "-") + a.padZeros(Math.floor(Math.abs(a.timeZoneOffsetHours)), y)); break; case "zzz": o.push((a.timeZoneOffsetHours >= 0 ? "+" : "-") + a.padZeros(Math.floor(Math.abs(a.timeZoneOffsetHours)), 2) + ":" + a.padZeros(60 * Math.abs(a.timeZoneOffsetHours % 1), 2)); break; case "g": case "gg": t.eras && o.push(t.eras[a.getEra(i, r)].name); break; case "/": o.push(t["/"]); break; default: throw "Invalid date format pattern '" + p + "'." } } let c = o.join(""); if (JQX.Utilities.DateTime.cache || (JQX.Utilities.DateTime.cache = new Array), a._today || (a._today = new Date), a.calendar && a.calendar.today && -1 === e.indexOf(":") && i.getFullYear() === a._today.getFullYear() && i.getDate() === a._today.getDate() && i.getMonth() === a._today.getMonth()) { if (!1 === a.showTodayDateAsString) return JQX.Utilities.DateTime.cache[s] = c, c; c = a.calendar.today } return JQX.Utilities.DateTime.cache[s] = c, c } getFractionsOfSecondStamp() { const e = this; return e._microsecond.toString() + e._nanosecond + e._picosecond + e._femtosecond + e._attosecond + e._zeptosecond + e._yoctosecond } getFirstNDigitsOfPrecision(e, t) { const a = this; return ("" + (!0 !== t ? a.padZeros(a.millisecond(), 3) : "") + a.padZeros(a._microsecond, 3) + a.padZeros(a._nanosecond, 3) + a.padZeros(a._picosecond, 3) + a.padZeros(a._femtosecond, 3) + a.padZeros(a._attosecond, 3) + a.padZeros(a._zeptosecond, 3) + a.padZeros(a._yoctosecond, 3)).slice(0, e) } copySmallTimePartValues(e) { const t = this; e._microsecond = t._microsecond, e._nanosecond = t._nanosecond, e._picosecond = t._picosecond, e._femtosecond = t._femtosecond, e._attosecond = t._attosecond, e._zeptosecond = t._zeptosecond, e._yoctosecond = t._yoctosecond } add(e, t, a) { const s = this, i = s.internalMS(); if (void 0 === t) { if (!1 === a) return s.dateData = i + parseInt(e._ticks / s.ticksPerMillisecond), s; const t = new JQX.Utilities.DateTime(i + parseInt(e._ticks / s.ticksPerMillisecond)); return s.copyTimeZone(t), s.copySmallTimePartValues(t), t } const r = e * t; if (r <= -s.maxMillis || r >= s.maxMillis) throw new Error("Out of Range"); if (!1 === a) return s.dateData = i + r, s; const n = new JQX.Utilities.DateTime(i + r); return s.copyTimeZone(n), s.copySmallTimePartValues(n), n } addDays(e, t) { return this.add(e, this.millisPerDay, t) } clone() { const e = this, t = new JQX.Utilities.DateTime(e.dateData); return e.copyTimeZone(t), e.copySmallTimePartValues(t), t } clearTime() { const e = this, t = e.month(), a = e.year(), s = e.day(), i = new JQX.Utilities.DateTime(a, t, s, 0, 0, 0, 0); return e.copyTimeZone(i), i } addHours(e, t) { return this.add(e, this.millisPerHour, t) } addDeciseconds(e, t) { return this.add(100 * e, 1, t) } addCentiseconds(e, t) { return this.add(10 * e, 1, t) } addMilliseconds(e, t) { return this.add(e, 1, t) } addMinutes(e, t) { return this.add(e, this.millisPerMinute, t) } addMonths(e, t) { const a = this; if (e < -12e4 || e > 12e4) throw new Error("Invalid Months Value"); let s = parseInt(a.getDatePart(a.datePartYear)), i = parseInt(a.getDatePart(a.datePartMonth)), r = parseInt(a.getDatePart(a.datePartDay)); if (e % 12 == 0) s += e / 12; else { const t = i - 1 + e; t >= 0 ? (i = t % 12 + 1, s += t / 12) : (i = 12 + (t + 1) % 12, s += (t - 11) / 12), s = parseInt(s) } if (s < 1 || s > 9999) throw new Error("Year out of range"); const n = a.daysInMonth(s, i); if (r > n && (r = n), !1 === t) return a.dateData = a.dateToMS(s, i, r) + a.internalMS() % a.millisPerDay, a; const o = new JQX.Utilities.DateTime(a.dateToMS(s, i, r) + a.internalMS() % a.millisPerDay); return a.copyTimeZone(o), a.copySmallTimePartValues(o), o } addSeconds(e, t) { return this.add(e, this.millisPerSecond, t) } addYears(e, t) { return this.addMonths(12 * e, t) } addMicroseconds(e, t) { if (0 === e) return; const a = this; let s, i; e < 0 && 0 === a.hour() && 0 === a.minute() && 0 === a.second() && 0 === a.millisecond() && 0 === a._microsecond && (s = parseInt(e / 1e3, 10) - 1, i = 1e3 + e % 1e3); const r = 1e3 * a.timeToMS(a.hour(), a.minute(), a.second(), a.millisecond()) + a._microsecond, n = r + e; let o; if (void 0 === s && (s = parseInt(n / 1e3, 10) - parseInt(r / 1e3, 10)), void 0 === i && (i = parseInt(n % 1e3, 10)), 0 !== s && (o = a.addMilliseconds(s, t)), !1 !== t) return o || (o = a.clone()), o._microsecond = i, o; a._microsecond = i } addFractionsOfSecond(e, t, a, s, i) { if (0 === e) return; const r = this, n = 1e3 * r[s] + r[a], o = e + n; let d, l = parseInt(o / 1e3, 10) - parseInt(n / 1e3, 10), f = parseInt(o % 1e3, 10); if (e < 0 && o < 0 && f < 0 && (l--, f = 1e3 + f), 0 !== l && (d = r[i](l, t)), !1 !== t) return d || (d = r.clone()), d[a] = f, d; r[a] = f } addNanoseconds(e, t) { return this.addFractionsOfSecond(e, t, "_nanosecond", "_microsecond", "addMicroseconds") } addPicoseconds(e, t) { return this.addFractionsOfSecond(e, t, "_picosecond", "_nanosecond", "addNanoseconds") } addFemtoseconds(e, t) { return this.addFractionsOfSecond(e, t, "_femtosecond", "_picosecond", "addPicoseconds") } addAttoseconds(e, t) { return this.addFractionsOfSecond(e, t, "_attosecond", "_femtosecond", "addFemtoseconds") } addZeptoseconds(e, t) { return this.addFractionsOfSecond(e, t, "_zeptosecond", "_attosecond", "addAttoseconds") } addYoctoseconds(e, t) { return this.addFractionsOfSecond(e, t, "_yoctosecond", "_zeptosecond", "addZeptoseconds") } getTimeZoneOffset() { const e = new Date, t = new Date(e.getFullYear(), 0, 1), a = new Date(e.getFullYear(), 6, 1), s = e.getTimezoneOffset() < Math.max(t.getTimezoneOffset(), a.getTimezoneOffset()); return { offset: -e.getTimezoneOffset() / 60, dst: +s } } isInDaylightSavingTime() { const e = new Date, t = new Date(e.getFullYear(), 0, 1), a = new Date(e.getFullYear(), 6, 1); return this.date().getTimezoneOffset() < Math.max(t.getTimezoneOffset(), a.getTimezoneOffset()) } supportsDaylightSavingTime() { const e = new Date, t = new Date(e.getFullYear(), 0, 1), a = new Date(e.getFullYear(), 6, 1); return t.getTimezoneOffset() !== a.getTimezoneOffset() } date() { const e = this, t = e.month(), a = e.year(), s = e.day(), i = new JQX.Utilities.DateTime(a, t, s); return e.copyTimeZone(i), i } isWeekend() { return 0 === this.dayOfWeek() || 6 === this.dayOfWeek() } toDate(e) { const t = this, a = t.month(), s = t.year(), i = t.day(), r = t.hour(), n = t.minute(), o = t.second(), d = t.millisecond(); let l = new Date(s, a - 1, i); if (s < 1970 && l.setFullYear(s), l.setHours(r, n, o, d), e) { const a = t.timeZones.filter((function (t) { return t.id === e })); if (a.length) { let e = a[0].offset; const s = l.getTime(); let i = 60 * l.getTimezoneOffset() * 1e3; if (t.timeZone) { const e = t.timeZones.filter((function (e) { return e.id === t.timeZone })); e.length && (i = 60 * -e[0].offset * 1e3) } l = new Date(s + i + 6e4 * e) } } return l } toTimeZone(e) { const t = this; let a = e; if (null == a && (a = "Local"), t.timeZone === a) return t.clone(); const s = t.timeZones.filter((function (e) { return e.id === a })); if (0 === s.length) return t.clone(); const i = this.toDate(a), r = new JQX.Utilities.DateTime(i); return r.timeZone = a, r.timeZoneOffset = s[0].offset, r.timeZoneOffsetHours = s[0].offsetHours, t.copySmallTimePartValues(r), r } day() { return this.getDatePart(this.datePartDay) } month() { return this.getDatePart(this.datePartMonth) } year() { return this.getDatePart(this.datePartYear) } millisecond() { return parseInt(this.internalMS() % 1e3) } hour() { return parseInt(Math.floor(this.internalMS() / this.millisPerHour) % 24) } minute() { return parseInt(this.internalMS() / this.millisPerMinute % 60) } second() { return parseInt(this.internalMS() / this.millisPerSecond % 60) } microsecond() { return this._microsecond } nanosecond() { return this._nanosecond } picosecond() { return this._picosecond } femtosecond() { return this._femtosecond } attosecond() { return this._attosecond } zeptosecond() { return this._zeptosecond } yoctosecond() { return this._yoctosecond } valueOf() { return this.dateData } equals(e) { const t = this; return t.dateData === e.dateData && t._microsecond === e._microsecond && t._nanosecond === e._nanosecond && t._picosecond === e._picosecond && t._femtosecond === e._femtosecond && t._attosecond === e._attosecond && t._zeptosecond === e._zeptosecond && t._yoctosecond === e._yoctosecond } equalDateParts(e) { const t = this; return t.year() === e.year() && t.month() === e.month() && t.day() === e.day() } compare(e) { const t = this; if (t.equals(e)) return 0; const a = ["dateData", "_microsecond", "_nanosecond", "_picosecond", "_femtosecond", "_attosecond", "_zeptosecond", "_yoctosecond"]; for (let s = 0; s < a.length; s++) { const i = a[s]; if (t[i] > e[i]) return 1; if (t[i] < e[i]) return -1 } return 0 } toDateString() { return this.toDate().toDateString() } toLocaleDateString() { return this.toDate().toLocaleDateString(this.calendar.locale) } toLocaleString() { return this.toDate().toLocaleString(this.calendar.locale) } toLocaleTimeString() { return this.toDate().toLocaleTimeString(this.calendar.locale) } validateTimeZone(e) { const t = this; if ("string" != typeof e) return; const a = t.timeZones.filter((function (t) { return t.id === e })); 0 !== a.length && (t.timeZone = e, t.timeZoneOffset = a[0].offset, t.timeZoneOffsetHours = a[0].offsetHours) } copyTimeZone(e) { const t = this; e.timeZone = t.timeZone, e.timeZoneOffset = t.timeZoneOffset, e.timeZoneOffsetHours = t.timeZoneOffsetHours } getTimeStamp() { return new JQX.Utilities.BigNumber(this.dateData.toString() + this.getFirstNDigitsOfPrecision(void 0, !0)) } }) })();
|
|
38
|
+
|
|
39
|
+
/***/
|
|
40
|
+
}),
|
|
41
|
+
|
|
42
|
+
/***/ 7054:
|
|
43
|
+
/***/ (() => {
|
|
44
|
+
|
|
45
|
+
JQX("jqx-date-time-picker", class extends JQX.BaseElement { static get properties() { return { animationSettings: { value: null, type: "object" }, autoClose: { value: !1, type: "boolean" }, autoCloseDelay: { value: 0, type: "number" }, autoSwitchToMinutes: { value: !1, type: "boolean" }, calendarButton: { value: !1, type: "boolean" }, calendarButtonPosition: { value: "right", allowedValues: ["left", "right"], type: "string" }, calendarMode: { value: "default", allowedValues: ["default", "classic"], type: "string" }, dayNameFormat: { value: "firstTwoLetters", allowedValues: ["narrow", "firstTwoLetters", "long", "short"], type: "string" }, disableAutoNavigation: { value: !1, type: "boolean" }, displayKind: { value: "unspecified", allowedValues: ["UTC", "local", "unspecified"], type: "string" }, displayModeView: { value: "table", allowedValues: ["table", "list"], type: "string" }, displayMode: { allowedValues: ["outlined", "filled", "underlined"], value: "outlined", type: "string" }, dropDownAppendTo: { value: null, type: "any" }, dropDownDisplayMode: { value: "default", allowedValues: ["default", "classic", "calendar", "timePicker", "auto"], type: "string" }, dropDownOverlay: { value: !1, type: "boolean" }, dropDownPosition: { value: "auto", allowedValues: ["auto", "bottom", "overlay-top", "overlay-center", "overlay-bottom", "top", "center-bottom", "center-top"], type: "string" }, editMode: { value: "default", allowedValues: ["default", "full", "partial"], type: "string" }, enableMouseWheelAction: { value: !1, type: "boolean" }, firstDayOfWeek: { value: 0, type: "number" }, footerTemplate: { value: null, type: "any" }, footer: { value: !1, type: "boolean" }, formatString: { value: "dd-MMM-yy HH:mm:ss.fff", type: "string" }, headerTemplate: { value: null, type: "any" }, hideDayNames: { value: !1, type: "boolean" }, hideOtherMonthDays: { value: !1, type: "boolean" }, hideTooltipArrow: { value: !1, type: "boolean" }, hint: { value: "", type: "string" }, importantDates: { value: [], type: "array" }, importantDatesTemplate: { value: null, type: "any" }, interval: { value: new JQX.Utilities.TimeSpan(0, 0, 1), type: "any" }, label: { value: "", type: "string" }, max: { value: new JQX.Utilities.DateTime(3001, 1, 1), type: "any" }, messages: { value: { en: { now: "Now", dateTabLabel: "DATE", timeTabLabel: "TIME" } }, type: "object", extend: !0 }, min: { value: new JQX.Utilities.DateTime(1600, 1, 1), type: "any" }, name: { value: "", type: "string" }, nullable: { value: !1, type: "boolean" }, opened: { value: !1, type: "boolean" }, placeholder: { value: "Enter date", type: "string" }, restrictedDates: { value: [], type: "array" }, spinButtons: { value: !1, type: "boolean" }, spinButtonsDelay: { value: 75, type: "number" }, spinButtonsInitialDelay: { value: 0, type: "number" }, spinButtonsPosition: { value: "right", allowedValues: ["left", "right"], type: "string" }, tooltip: { value: !1, type: "boolean" }, tooltipDelay: { value: 100, type: "number" }, tooltipPosition: { value: "top", allowedValues: ["bottom", "top", "left", "right", "absolute"], type: "string" }, tooltipTemplate: { value: null, type: "any" }, validation: { value: "strict", allowedValues: ["strict", "interaction"], type: "string" }, value: { defaultReflectToAttribute: !0, value: new JQX.Utilities.DateTime, type: "any" }, weekNumbers: { value: !1, type: "boolean" }, weeks: { value: 6, type: "number" }, yearCutoff: { value: 1926, type: "number" } } } static get listeners() { return { "container.mouseout": "_mouseoutHandler", "container.mouseover": "_mouseoverHandler", "calendarButton.click": "_calendarButtonClickHandler", "calendarDropDown.change": "_calendarDropDownChangeHandler", "calendarDropDown.click": "_calendarDropDownClickHandler", "downButton.click": "_spinButtonsClickHandler", "input.blur": "_inputBlurHandler", "input.change": "_inputChangeHandler", "input.dragstart": "_inputDragstartHandler", "input.focus": "_inputFocusHandler", "input.keydown": "_inputKeydownHandler", "input.down": "_inputDownHandler", "input.paste": "_inputPasteHandler", "input.select": "_inputSelectHandler", "input.up": "_inputUpHandler", "input.wheel": "_inputWheelHandler", "dropDownContainer.keydown": "_dropDownKeydownHandler", "dropDownContainer.transitionend": "_dropDownTransitionendHandler", "dropDownHeader.click": "_dropDownHeaderClickHandler", "upButton.click": "_spinButtonsClickHandler", "document.up": "_documentUpHandler" } } static get requires() { return { "JQX.Utilities.DateTime": "jqx.date.js", "JQX.Utilities.Draw": "jqx.draw.js", "JQX.Utilities.BigNumber": "jqx.math.js", "JQX.Utilities.NumericProcessor": "jqx.numeric.js", "JQX.RepeatButton": "jqx.button.js", "JQX.Calendar": "jqx.calendar.js", "JQX.TimePicker": "jqx.timepicker.js" } } static get styleUrls() { return ["jqx.datetimepicker.css"] } template() { return '<div id="container" role="presentation">\n <span id="label" class="jqx-label">[[label]]</span>\n <div id="content" class="jqx-content">\n <input id="input" class="jqx-input jqx-date-time-input" type="text" readonly="[[readonly]]" disabled="[[disabled]]" placeholder="[[placeholder]]" name="[[name]]" aria-label="[[placeholder]]" />\n <div id="spinButtonsContainer" class="jqx-spin-buttons-container" role="presentation">\n <jqx-repeat-button initial-delay="[[spinButtonsInitialDelay]]" animation="[[animation]]" delay="[[spinButtonsDelay]]" readonly="[[readonly]]" unfocusable id="upButton" right-to-left="[[rightToLeft]]" class="jqx-spin-button" aria-label="Increment">\n <div class="jqx-arrow jqx-arrow-up" aria-hidden="true"></div>\n </jqx-repeat-button>\n <jqx-repeat-button initial-delay="[[spinButtonsInitialDelay]]" animation="[[animation]]" delay="[[spinButtonsDelay]]" readonly="[[readonly]]" unfocusable id="downButton" right-to-left="[[rightToLeft]]" class="jqx-spin-button" aria-label="Decrement">\n <div class="jqx-arrow jqx-arrow-down" aria-hidden="true"></div>\n </jqx-repeat-button>\n </div>\n <div id="calendarButton" class="jqx-drop-down-button jqx-calendar-button" role="button" aria-haspopup="dialog" aria-label="Toggle popup"></div>\n <div id="dropDownContainer" class="jqx-drop-down jqx-date-time-drop-down jqx-drop-down-container jqx-visibility-hidden" role="dialog">\n <div id="dropDownHeader" class="jqx-drop-down-header jqx-hidden" role="heading" aria-level="1">\n <div id="selectDate" class="jqx-selected" role="button"></div>\n <div id="selectTime" role="button"></div>\n </div>\n <div id="dropDownContent" class="jqx-drop-down-content" role="presentation">\n <jqx-calendar id="calendarDropDown" class="jqx-hidden"\n animation="[[animation]]"\n animation-settings="[[animationSettings]]"\n calendar-mode="[[calendarMode]]"\n day-name-format="[[dayNameFormat]]"\n disable-auto-navigation="[[disableAutoNavigation]]"\n display-mode-view="[[displayModeView]]"\n first-day-of-week="[[firstDayOfWeek]]"\n header-template="[[headerTemplate]]"\n hide-day-names="[[hideDayNames]]"\n hide-other-month-days="[[hideOtherMonthDays]]"\n hide-tooltip-arrow="[[hideTooltipArrow]]"\n important-dates="[[importantDates]]"\n important-dates-template="[[importantDatesTemplate]]"\n locale="[[locale]]"\n right-to-left="[[rightToLeft]]"\n selection-mode="one"\n spin-buttons-delay="[[spinButtonsDelay]]"\n spin-buttons-initial-delay="[[spinButtonsInitialDelay]]"\n theme="[[theme]]"\n tooltip="[[tooltip]]"\n tooltip-delay="[[tooltipDelay]]"\n tooltip-position="[[tooltipPosition]]"\n tooltip-template="[[tooltipTemplate]]"\n unfocusable="[[unfocusable]]"\n view-sections=\'["header", "footer"]\'\n week-numbers="[[weekNumbers]]"\n weeks="[[weeks]]"></jqx-calendar>\n </div>\n </div>\n </div>\n <span id="hint" inner-h-t-m-l="[[hint]]" class="jqx-hint jqx-hidden"></span>\n </div>' } attached() { const e = this; super.attached(), e.isCompleted && (e._defaultFooterTemplateApplied && e._addCalendarFooterListeners(), e.$.timePickerDropDown && e._addTimePickerListener(), e._positionDetection && e._positionDetection.dropDownAttached()) } detached() { const e = this; if (super.detached(), e.close(), e._defaultFooterTemplateApplied) { const t = e.$.calendarDropDown.$footer; t.unlisten("change"), t.unlisten("click"), t.unlisten("wheel") } e.$.timePickerDropDown && e.$.timePickerDropDown.$.unlisten("change"), e._positionDetection && e._positionDetection.dropDownDetached() } ready() { super.ready(); const e = this; e._edgeMacFF = JQX.Utilities.Core.Browser.Edge || JQX.Utilities.Core.Browser.Firefox && -1 !== navigator.platform.toLowerCase().indexOf("mac"), e._iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform), e._edgeMacFF && e.$dropDownContainer.addClass("not-in-view"), e._defaultFooterTemplate = document.createElement("template"), e._defaultFooterTemplate.innerHTML = '<div class="jqx-date-time-picker-footer">\n <div class="jqx-footer-component jqx-footer-component-hour" role="presentation">\n <input type="text" class="jqx-hour-element" aria-label="Hours" />\n <span role="presentation">\n <jqx-repeat-button initial-delay="0" delay="75" aria-label="Increment hours">\n <span class="jqx-arrow jqx-arrow-up" aria-hidden="true"></span>\n </jqx-repeat-button>\n <jqx-repeat-button initial-delay="0" delay="75" aria-label="Decrement hours">\n <span class="jqx-arrow jqx-arrow-down" aria-hidden="true"></span>\n </jqx-repeat-button>\n </span>\n </div>\n <div class="jqx-footer-component jqx-footer-component-minute" role="presentation">\n <input class="jqx-minute-element" aria-label="Minutes" />\n <span role="presentation">\n <jqx-repeat-button initial-delay="0" delay="75" aria-label="Increment minutes">\n <span class="jqx-arrow jqx-arrow-up" aria-hidden="true"></span>\n </jqx-repeat-button>\n <jqx-repeat-button initial-delay="0" delay="75" aria-label="Decrement minutes">\n <span class="jqx-arrow jqx-arrow-down" aria-hidden="true"></span>\n </jqx-repeat-button>\n </span>\n </div>\n <div class="jqx-footer-component jqx-footer-component-ampm" role="presentation">\n <input type="text" class="jqx-am-pm-element" aria-label="AM/PM" />\n </div>\n <div class="jqx-footer-component jqx-footer-component-today" role="presentation">\n <div tabindex="-1" class="jqx-today-element" role="button" aria-label="Now"></div>\n </div>\n </div>', e._codeToMethod = { y: "addYears", yy: "addYears", yyyy: "addYears", yyyyy: "addYears", M: "addMonths", MM: "addMonths", MMM: "addMonths", MMMM: "addMonths", d: "addDays", dd: "addDays", ddd: "addDays", dddd: "addDays", H: "addHours", HH: "addHours", h: "addHours", hh: "addHours", m: "addMinutes", mm: "addMinutes", s: "addSeconds", ss: "addSeconds", f: "addDeciseconds", ff: "addCentiseconds", fff: "addMilliseconds", u: "addMicroseconds", uu: "addMicroseconds", n: "addNanoseconds", nn: "addNanoseconds", p: "addPicoseconds", pp: "addPicoseconds", e: "addFemtoseconds", ee: "addFemtoseconds", a: "addAttoseconds", aa: "addAttoseconds", x: "addZeptoseconds", xx: "addZeptoseconds", o: "addYoctoseconds", oo: "addYoctoseconds" }, e._codeToIndex = { y: 0, yy: 0, yyyy: 0, yyyyy: 0, M: 1, MM: 1, MMM: 1, MMMM: 1, d: 2, dd: 2, ddd: 2, dddd: 2, H: 3, HH: 3, h: 3, hh: 3, m: 4, mm: 4, s: 5, ss: 5, f: 6, ff: 6, fff: 6, u: 7, uu: 7, n: 8, nn: 8, p: 9, pp: 9, e: 10, ee: 10, a: 11, aa: 11, x: 12, xx: 12, o: 13, oo: 13 }, e._getLocalizedNames(), e.checkLicense() } render() { const e = this; e.rightToLeft && (e.calendarButtonPosition = "right" === e.calendarButtonPosition ? "left" : "right"), e._positionDetection = new JQX.Utilities.PositionDetection(e, e.$.dropDownContainer, e.$.content, "close"), e._positionDetection.customPositionDropDown = e._positionExternalDropDown, e._positionDetection.getDropDownParent(!0), e._positionDetection.setDropDownPosition(), e.$.dropDownContainer.style.left = null, e._positionDetection.handleAutoPositioning(), e._setIds(), e._validateInitialPropertyValues(), e._setFocusable(), e.setAttribute("role", "presentation"), e.$.input.setAttribute("aria-describedby", e.$.hint.id), e.$.input.setAttribute("aria-labelledby", e.$.label.id), e.$.calendarButton.setAttribute("aria-owns", e.$.dropDownContainer.id), e.$.dropDownContainer.setAttribute("animation", e.animation), e.$.dropDownContainer.setAttribute("drop-down-display-mode", e.dropDownDisplayMode), super.render(), e.isInitialized = !0 } close() { this.opened && this._close() } focus() { this.$.input.focus() } select() { this.$.input.select() } open() { this.opened || this._open() } _handleFooter() { const e = this; if (e.footer) { e.$.dropDownContainer.setAttribute("footer", ""); const t = e.$.calendarDropDown; "default" === e._dropDownDisplayMode ? t.viewSections = ["title", "header", "footer"] : "classic" === e._dropDownDisplayMode ? t.viewSections = ["header", "footer"] : "calendar" === e._dropDownDisplayMode && (t.viewSections = ["title", "header", "footer"]) } else e.$.dropDownContainer.removeAttribute("footer") } propertyChangedHandler(e, t, a) { super.propertyChangedHandler(e, t, a); const n = this; switch (e) { case "animation": case "theme": n.$.timePickerDropDown && (n.$.timePickerDropDown[e] = a), "animation" === e && (n.$.dropDownContainer.setAttribute("animation", n.animation), n._defaultFooterTemplateApplied && Array.from(n.$.calendarDropDown.$.footer.getElementsByTagName("jqx-repeat-button")).forEach((function (e) { e.animation = a }))); break; case "calendarButton": n.$.dropDownContainer.style.transition = "none", a || n.close(); break; case "calendarButtonPosition": n.$.dropDownContainer.style.transition = "none", n.close(), "left" === a ? n.$.content.insertBefore(n.$.calendarButton, n.$.content.firstElementChild) : null === n._dropDownParent ? n.$.content.insertBefore(n.$.calendarButton, n.$.dropDownContainer) : n.$.content.appendChild(n.$.calendarButton); break; case "disabled": a ? (n.close(), n.$.upButton.disabled = !0, n.$.downButton.disabled = !0) : n._disableSpinButtons(), n._setFocusable(), n._positionDetection.handleAutoPositioning(); break; case "displayKind": { const e = n._outputTimeZone; switch (a) { case "unspecified": n._outputTimeZone = n._inputTimeZone; break; case "UTC": n._outputTimeZone = "UTC"; break; case "local": n._outputTimeZone = "Local" }if (n._outputTimeZone === e) return; null !== n._value && (n.close(), n._toSync = !0, n._value = n._value.toTimeZone(n._outputTimeZone), n._applyFormatString()), n.min = n.min.toTimeZone(n._outputTimeZone), n.max = n.max.toTimeZone(n._outputTimeZone); for (let e = 0; e < n.restrictedDates.length; e++) { let t = n.restrictedDates[e]; t = t.toTimeZone(n._outputTimeZone) } break } case "dropDownAppendTo": n._positionDetection.dropDownAppendToChangedHandler(); break; case "dropDownDisplayMode": n._changeDropDownDisplayMode(); break; case "dropDownOverlay": a || n._positionDetection.removeOverlay(); break; case "dropDownPosition": n._positionDetection.dropDownPositionChangedHandler(); break; case "footer": n._handleFooter(); break; case "footerTemplate": if (null !== a) { n._defaultFooterTemplateApplied = !1; const e = n.$.calendarDropDown.$footer; e.unlisten("change"), e.unlisten("click"), e.unlisten("wheel"), n.$.calendarDropDown.footerTemplate = a } else { n._setDefaultFooterTemplate(); const e = n._value; n._hourElement.value = e.toString("hh"), n._minuteElement.value = e.toString("mm"), n._ampmElement.value = e.toString("tt") } n._handleFooter(); break; case "formatString": "" === a && (n.formatString = "dd-MMM-yy HH:mm:ss.fff"), n._getFormatStringRegExp(), n._applyFormatString(), "auto" === n.dropDownDisplayMode && n._changeDropDownDisplayMode(), n._timePickerInitialized && (n.$.timePickerDropDown.format = n._formatStringRegExp.groups.find((e => -1 !== e.indexOf("H"))) ? "24-hour" : "12-hour"); break; case "interval": n._validateInterval(t); break; case "locale": case "messages": if (n.$.selectDate.innerHTML = n.localize("dateTabLabel"), n.$.selectTime.innerHTML = n.localize("timeTabLabel"), n._defaultFooterTemplateApplied && (n._todayElement.title = n.localize("now")), "messages" === e) return; n._getLocalizedNames(), n.min.calendar.days = n._localizedDays, n.min.calendar.months = n._localizedMonths, n.min.calendar.locale = n.locale, n.max.calendar.days = n._localizedDays, n.max.calendar.months = n._localizedMonths, n.max.calendar.locale = n.locale, null !== n.value && (n._value.calendar.days = n._localizedDays, n._value.calendar.months = n._localizedMonths, n._value.calendar.locale = n.locale, n.value.calendar.days = n._localizedDays, n.value.calendar.months = n._localizedMonths, n.value.calendar.locale = n.locale), JQX.Utilities.DateTime.cache = [], n._applyFormatString(); break; case "max": case "min": n._validateMinMax(e, t), "strict" === n.validation ? n._validateValue() : n._minMaxChanged = !0; break; case "nullable": !0 === t && null === n._value && n._validateValue(n._now(), null); break; case "opened": a ? n._open() : n._close(); break; case "readonly": case "unfocusable": a && n.close(), "unfocusable" === e && n._setFocusable(); break; case "restrictedDates": n._validateRestrictedDates(), n._validateValue(); break; case "spinButtonsPosition": "right" === a ? n.$.content.insertBefore(n.$.spinButtonsContainer, n.$.input.nextElementSibling) : n.$.content.insertBefore(n.$.spinButtonsContainer, n.$.input); break; case "validation": "strict" === a && (delete n._minMaxChanged, n._validateValue()); break; case "value": { let e; null !== a ? (e = JQX.Utilities.DateTime.validateDate(a, n._now(), n.formatString), e = e.toTimeZone(n._outputTimeZone)) : e = null, n._validateValue(e, n._value, void 0, !0); break } } } setDate(e) { const t = this; let a; null !== e ? (a = JQX.Utilities.DateTime.validateDate(e, t._now(), t.formatString), a = a.toTimeZone(t._outputTimeZone)) : a = null, t._validateValue(a, t._value, void 0, !0) } getDate() { return this.value && this.value.toDate ? this.value.toDate() : null } _addCalendarFooterListeners() { const e = this, t = e.$.calendarDropDown.$footer; t.listen("change", e._footerChangeHandler.bind(e)), t.listen("click", e._footerClickHandler.bind(e)), t.listen("wheel", e._footerWheelHandler.bind(e)) } _updateTargetValue() { const e = this; if (e.dataset.target) { const t = document.querySelector(e.dataset.target); if (t) { const a = e.dataset.property, n = e.value; a && void 0 !== t[a] && (t[a] = n) } } } _addTimePickerListener() { const e = this; e.$.timePickerDropDown.$.listen("change", (function (t) { const a = e.context, n = t.detail.value, i = JQX.Utilities.DateTime.getConstructorParameters(null !== e._value ? e._value : e._now()); e.context = e, i[3] = n.getHours(), i[4] = n.getMinutes(), e._timePickerInitiatedChange = !0, i.unshift(null), e._validateValue(new (Function.prototype.bind.apply(JQX.Utilities.DateTime, i))), e._timePickerInitiatedChange = !1, e.context = a })) } _applyFormatString() { const e = this; null !== e.value && (e.$.input.value = e._value.toString(e.formatString)) } _calendarButtonClickHandler(e) { const t = this; t._highlightedTimePart = void 0, t.disabled || t.readonly || (t.hasRippleAnimation && JQX.Utilities.Animation.Ripple.animate(t.$.calendarButton, e.pageX, e.pageY), t.opened ? t._close() : t._open()) } _calendarDropDownChangeHandler(e) { const t = this; if (e.stopPropagation(), t._disregardCalendarChangeEvent) t._disregardCalendarChangeEvent = !1; else if (this.$.calendarDropDown.selectedDates.length > 0) { const a = e.detail.value[0], n = null !== t._value ? t._value : t._now(), i = JQX.Utilities.DateTime.getConstructorParameters(n); if (i[0] = a.getFullYear(), i[1] = a.getMonth() + 1, i[2] = a.getDate(), t._calendarInitiatedChange = !0, i.unshift(null), t._validateValue(new (Function.prototype.bind.apply(JQX.Utilities.DateTime, i))), t._defaultFooterTemplateApplied) { const e = t._value; "" === t._hourElement.value && (t._hourElement.value = e.toString("hh")), "" === t._ampmElement.value && (t._ampmElement.value = e.toString("tt")), "" === t._minuteElement.value && (t._minuteElement.value = e.toString("mm")) } t._calendarInitiatedChange = !1 } else t._setNullValue() } _calendarDropDownClickHandler(e) { const t = this; t.autoClose && e.target.closest(".jqx-calendar-cell") && (clearTimeout(t._autoCloseTimeout), t._autoCloseTimeout = setTimeout((function () { t.close() }), t.autoCloseDelay)) } _changeDropDownDisplayMode() { function e(e, a, n, i) { t.$dropDownHeader[e]("jqx-hidden"), t.$calendarDropDown[a]("jqx-hidden"), t._timePickerInitialized && t.$.timePickerDropDown.$[n]("jqx-hidden"), i && (t.opened ? t.$.calendarDropDown._refreshTitle() : t._toSync = !0) } const t = this, a = t._dropDownDisplayMode; t._detectDisplayMode(), t._dropDownDisplayMode !== a && ("default" === t._dropDownDisplayMode ? (t.calendarMode = "default", t.$.calendarDropDown.viewSections = ["title", "header"], t.$selectDate.addClass("jqx-selected"), t.$selectTime.removeClass("jqx-selected"), e("removeClass", "removeClass", "addClass", !0)) : "classic" === t._dropDownDisplayMode ? (t.calendarMode = "classic", t.$.calendarDropDown.viewSections = ["header", "footer"], e("addClass", "removeClass", "addClass")) : "calendar" === t._dropDownDisplayMode ? (t.calendarMode = "default", t.$.calendarDropDown.viewSections = ["title", "header"], e("addClass", "removeClass", "addClass", !0)) : (t.calendarMode = "default", e("addClass", "addClass", "removeClass"), t._timePickerInitialized || t._initializeTimePicker()), t.$.dropDownContainer.setAttribute("drop-down-display-mode", t.dropDownDisplayMode)) } _cloneValue() { const e = this; return null !== e._value ? e._value.clone() : null } _close() { const e = this; if (e.$.fireEvent("closing").defaultPrevented) e.opened = !0; else { e.$.calendarDropDown.disabled = !0, e.$calendarButton.removeClass("jqx-calendar-button-pressed"), e.$.calendarButton.removeAttribute("active"), e.$dropDownContainer.addClass("jqx-visibility-hidden"); const t = e.$.calendarDropDown.$.container.querySelector(".jqx-calendar-cell[hover]"); t && t.removeAttribute("hover"), e.opened = !1, e._positionDetection.removeOverlay(!0), e.$.fireEvent("close"), e._edgeMacFF && !e.hasAnimation && (e.$.dropDownContainer.style.top = null, e.$.dropDownContainer.style.left = null, e.$dropDownContainer.addClass("not-in-view")), e.$.input.focus() } e.$.calendarButton.setAttribute("aria-expanded", e.opened) } _detectDisplayMode() { const e = this; "auto" !== e.dropDownDisplayMode ? e._dropDownDisplayMode = e.dropDownDisplayMode : e._dropDownDisplayMode = JQX.Utilities.DateTime.detectDisplayMode(e.value || e.min, e.formatString, e._formatStringRegExp), "timePicker" === e._dropDownDisplayMode ? (e.$calendarButton.addClass("time"), "Enter date" === e.placeholder && (e.placeholder = "Enter time")) : (e.$calendarButton.removeClass("time"), "Enter time" === e.placeholder && (e.placeholder = "Enter date")), "default" === e._dropDownDisplayMode ? e.$dropDownContent.removeClass("partial") : e.$dropDownContent.addClass("partial") } _disableSpinButtons() { const e = this; if (e.disabled) return; const t = null === e._value; e.$.upButton.disabled = t, e.$.downButton.disabled = t } _documentUpHandler(e) { const t = this, a = (t.shadowRoot || t.getRootNode()).activeElement || document.activeElement, n = t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; JQX.Utilities.Core.isMobile || a !== t.$.input || "partial" !== t.editMode || null === t._value || n === t.$.input && t.$.input.selectionStart !== t.$.input.selectionEnd ? n === t.$.calendarButton || t.$.dropDownContainer.contains(n) || t.$.dropDownContainer.contains(t._getRootShadowHost(n)) || (t.close(), a === t.$.input || t.contains(n) || (t._highlightedTimePart = void 0)) : (t._highlightedTimePartEdit = !1, t._validateValue(t.$.input.value, t._cloneValue(), !1), t._highlightTimePartBasedOnCursor()), t._mouseFocus = !1 } _getRootShadowHost(e) { const t = this; if (!t.shadowRoot && !t.isInShadowDOM) return; let a, n = e.getRootNode().host; for (; n && n !== t && n !== document;)a = n, n = n.getRootNode().host; return a } _dropDownHeaderClickHandler(e) { const t = this; if (e.target === t.$.selectDate) { if (t.$selectDate.hasClass("jqx-selected")) return; t.$selectDate.addClass("jqx-selected"), t.$selectTime.removeClass("jqx-selected"), t.$.timePickerDropDown.$.addClass("jqx-hidden"), t.$calendarDropDown.removeClass("jqx-hidden") } else { if (t.$selectTime.hasClass("jqx-selected")) return; t.$selectDate.removeClass("jqx-selected"), t.$selectTime.addClass("jqx-selected"), t.$calendarDropDown.addClass("jqx-hidden"), t._timePickerInitialized ? t.$.timePickerDropDown.$.removeClass("jqx-hidden") : t._initializeTimePicker() } } _dropDownKeydownHandler(e) { const t = this, a = e.key, n = t.shadowRoot ? t.shadowRoot.activeElement : document.activeElement; !t.$.dropDownHeader.contains(n) || "Enter" !== a && " " !== a ? "Escape" === a || e.altKey && "ArrowUp" === a ? (e.preventDefault(), t.close(), t.$.input.focus()) : "Enter" !== a && " " !== a || !n.classList.contains("jqx-footer-component-today") ? "Enter" === a && (n === t.$.calendarDropDown.$.body && t.$.calendarDropDown.querySelectorAll(".jqx-calendar-cell[selected][focus]").length > 0 || t._timePickerInitialized && n === t.$.timePickerDropDown.$.picker) && (e.preventDefault(), t.close()) : (e.preventDefault(), t._validateValue(t._now()), t.close()) : (e.preventDefault(), t._dropDownHeaderClickHandler({ target: n })) } _dropDownTransitionendHandler() { const e = this; if (e.hasAnimation) return e.opened && e._toFocus ? (e._toFocus.focus(), delete e._toFocus, void (e._timePickerInitialized && !e.$.timePickerDropDown.classList.contains("jqx-hidden") && requestAnimationFrame((() => e.$.timePickerDropDown._highlightLabel())))) : e._edgeMacFF && !e.opened ? (e.$.dropDownContainer.style.top = null, e.$.dropDownContainer.style.left = null, void e.$dropDownContainer.addClass("not-in-view")) : void 0 } _footerChangeHandler(e) { const t = this, a = t.context, n = e.target, i = null !== t._value ? t._value : t._now(); let o, l = n.value; if (t.context = t, e.stopPropagation(), n.classList.contains("jqx-hour-element")) { if (l = parseInt(l, 10), isNaN(l) || l < 0 || l > 12) return void (n.value = i.toString("hh")); l > 0 && l < 12 && "PM" === i.toString("tt") && (l += 12), o = "hh" } else { if (!n.classList.contains("jqx-minute-element")) { if (null === t._value) return void (n.value = ""); const e = i.toString("tt"); return l = l.toLowerCase(), void ("PM" === e && ("a" === l || "am" === l) || "AM" === e && ("p" === l || "pm" === l) ? (t._incrementDecrement(void 0, "tt"), n.value = t._value.toString("tt")) : n.value = e) } if (l = parseInt(l, 10), isNaN(l) || l < 0 || l > 59) return void (n.value = i.toString("mm")); o = "mm" } const r = JQX.Utilities.DateTime.getConstructorParameters(i); r[t._codeToIndex[o]] = l, r.unshift(null), t._validateValue(new (Function.prototype.bind.apply(JQX.Utilities.DateTime, r))), n.value = t._value.toString(o), t.context = a } _footerClickHandler(e) { const t = this, a = t.context, n = e.target; if (t.context = t, n.classList.contains("jqx-today-element")) t._validateValue(t._now()), t.autoClose && (clearTimeout(t._autoCloseTimeout), t._autoCloseTimeout = setTimeout((function () { t.close() }), t.autoCloseDelay)); else { const e = n.closest("jqx-repeat-button"); if (null !== e) { const a = e === e.parentElement.children[1], n = e.closest(".jqx-footer-component").classList.contains("jqx-footer-component-hour") ? "hh" : "mm"; t._incrementDecrement(a, n) } } t.context = a } _footerWheelHandler(e) { const t = this, a = t.shadowRoot ? t.shadowRoot.activeElement : document.activeElement; if (t.enableMouseWheelAction && e.target instanceof HTMLInputElement && a === e.target) { const a = t.context, n = e.target; t.context = t, n.classList.contains("jqx-hour-element") ? t._incrementDecrement(e.deltaY > 0, "hh") : n.classList.contains("jqx-minute-element") ? t._incrementDecrement(e.deltaY > 0, "mm") : t._incrementDecrement(void 0, "tt"), t.context = a, e.stopPropagation() } } _getAndHighlightTimePart(e, t, a) { const n = this; n._programmaticSelection = !0, n.$.input.selectionStart !== e || n.$.input.selectionEnd !== t ? n.$.input.setSelectionRange(e, t) : setTimeout((function () { n.$.input.setSelectionRange(e, t) }), 200), n._highlightedTimePart = { code: n._formatStringRegExp.groups[a], index: a, from: e, to: t } } _getFormatStringRegExp() { const e = this; e._formatStringRegExp = e.min.getParseRegExp(e.min.calendar, e.formatString.replace(/y+/g, "yyyyy")), e._formatStringRegExp.regExp = new RegExp(e._formatStringRegExp.regExp) } _getLocalizedNames() { const e = this, t = JQX.Utilities.DateTime.getLocalizedNames(e.locale); e._localizedDays = t.days, e._localizedMonths = t.months, e.$.selectDate.innerHTML = e.localize("dateTabLabel"), e.$.selectTime.innerHTML = e.localize("timeTabLabel") } _handleManualTimePartEdit(e) { const t = this, a = JQX.Utilities.DateTime.getConstructorParameters(t._value); if (e = e[t._highlightedTimePart.index + 1], isNaN(e)) { if (1 === t._codeToIndex[t._highlightedTimePart.code]) { let n = -1; if (e.length > 1 && t._localizedMonths.names.some((function (t, a) { if (-1 !== t.toLowerCase().indexOf(e.toLowerCase())) return n = a, !0 })), -1 === n) return void t._applyFormatString(); a[1] = n + 1 } } else { if ("f" === t._highlightedTimePart.code) e = 100 * parseInt(e, 10); else if ("ff" === t._highlightedTimePart.code) e = 10 * parseInt(e, 10); else if (-1 !== t._highlightedTimePart.code.indexOf("y") && e.length < 3) { const a = t.yearCutoff.toString(), n = parseInt(a.slice(2), 10); let i = parseInt(a.slice(0, 2), 10); (e = parseInt(e, 10)) < n && i++, e = e.toString(), e = i + "" + "0".repeat(2 - e.length) + e } else if (-1 !== t._highlightedTimePart.code.indexOf("h")) { const a = t._value.hour(); e = parseInt(e, 10), a > 11 && e <= 11 && (e += 12) } a[t._codeToIndex[t._highlightedTimePart.code]] = parseInt(e, 10) } try { a.unshift(null), t._validateValue(new (Function.prototype.bind.apply(JQX.Utilities.DateTime, a))) } catch (e) { t._applyFormatString() } } _highlightTimePartBasedOnCursor(e) { const t = this, a = t.$.input.value, n = t._formatStringRegExp.regExp.exec(a); function i() { return void 0 === e ? t.$.input.selectionStart : e } if (null === n) return void (t._highlightedTimePart = void 0); t._iOS || void 0 !== e || (e = t.$.input.selectionStart); let o, l = n.index; for (let e = 1; e < n.length; e++) { const r = n[e]; if (o = a.indexOf(r, l), l = o + r.length, 1 === e && i() < o) { t._getAndHighlightTimePart(o, l, 0); break } if (i() >= o && i() <= l) { t._getAndHighlightTimePart(o, l, e - 1); break } const s = n[e + 1]; if (!s) { t._programmaticSelection = !0, t.$.input.setSelectionRange(o, l), t._highlightedTimePart = { code: t._formatStringRegExp.groups[e - 1], index: e - 1, from: o, to: l }; break } { const n = a.indexOf(s, l); if (i() > l && i() < n) { i() - l <= n - i() ? t._getAndHighlightTimePart(o, l, e - 1) : (t._formatStringRegExp.groups[e], t._programmaticSelection = !0, t.$.input.setSelectionRange(n, n + s.length)); break } } } } _highlightTimePartBasedOnIndex(e) { const t = this, a = t.$.input.value, n = t._formatStringRegExp.regExp.exec(a); if (null === n) return t._validateValue(void 0, t._cloneValue(), !1), void t._highlightTimePartBasedOnIndex(e); let i, o = n.index; const l = t.shadowRoot ? t.shadowRoot.activeElement : document.activeElement; if (!(e < 0 || e >= n.length)) { t.$.input !== l && t.$.input.focus(); for (let l = 1; l < n.length; l++) { const r = n[l]; if (i = a.indexOf(r, o), o = i + r.length, e === l - 1) { t._getAndHighlightTimePart(i, o, e); break } } } } _incrementDecrement(e, t) { const a = this, n = a._cloneValue(); if (a._minMaxChanged && (a._value = a._rangeValidation(a._value), delete a._minMaxChanged), void 0 === t && a._highlightedTimePart && (t = a._highlightedTimePart.code), void 0 !== t) { if ("z" === t || "zz" === t || "zzz" === t) return void a._highlightTimePartBasedOnIndex(a._highlightedTimePart.index); a._value = "t" === t || "tt" === t ? a._value.addHours(a._value.hour() < 12 ? 12 : -12, !0) : a._value[a._codeToMethod[t]](e ? -1 : 1, !0), a._validateValue(void 0, n, !1), a._highlightedTimePart && a._highlightTimePartBasedOnIndex(a._highlightedTimePart.index) } else a._value = a._value.add(e ? a.interval.negate() : a.interval, void 0, !0), a._validateValue(void 0, n, !1); 0 !== n.compare(a._value) && a.isInitialized && (a.$.fireEvent("change", { oldValue: n.toTimeZone(a._inputTimeZone), value: a.value }), a._updateTargetValue()) } _initializeTimePicker() { const e = this, t = document.createElement("jqx-time-picker"); t.rightToLeft = e.rightToLeft, t.animation = e.animation, t.autoSwitchToMinutes = e.autoSwitchToMinutes, t.format = e._formatStringRegExp.groups.find((e => -1 !== e.indexOf("H"))) ? "24-hour" : "12-hour", t.theme = e.theme, t.value = null !== e._value ? e._value.toDate() : e._now(), e.$.timePickerDropDown = t, t.$ = JQX.Utilities.Extend(t), e.$.dropDownContent.appendChild(t), e._timePickerInitialized = !0, e._addTimePickerListener() } _inputBlurHandler() { const e = this; e.removeAttribute("focus"), e._fullEdit = !1, e._highlightedTimePartEdit = !1, e.$.fireEvent("blur") } _inputChangeHandler(e) { const t = this; if (e && e.stopPropagation(), "" !== t.$.input.value) { if (t._fullEdit || null === t._value) t._fullEdit = !1, t._validateValue(t.$.input.value), t._highlightTimePartBasedOnCursor(); else if (t._highlightedTimePartEdit) { t._highlightedTimePartEdit = !1; let e = t._formatStringRegExp.regExp.exec(t.$.input.value); null !== e ? t._handleManualTimePartEdit(e) : t._applyFormatString() } } else t._setNullValue() } _inputDragstartHandler(e) { e.preventDefault() } _inputFocusHandler() { const e = this; if (e.setAttribute("focus", ""), "full" !== e.editMode) { const t = JQX.Utilities.Core.isMobile ? 10 : 0; setTimeout((function () { e._iOS ? e._highlightTimePartBasedOnCursor() : !0 !== e._mouseFocus && (void 0 === e._highlightedTimePart ? e._highlightTimePartBasedOnCursor(e._iOS ? void 0 : 0) : e._highlightTimePartBasedOnIndex(e._highlightedTimePart.index)) }), t) } e.$.fireEvent("focus") } _inputKeydownHandler(e) { const t = this, a = t.editMode, n = e.key; if ("Tab" !== n) { if (e.altKey && "ArrowDown" === n) return e.preventDefault(), void t.open(); if ("Escape" === n || e.altKey && "ArrowUp" === n) return e.preventDefault(), void t.close(); if ("full" !== a) { if ("partial" === a) { if ("Delete" === n) return void (null !== t._value && (t._setNullValue(), e.preventDefault())); if (null === t._value && (t._validateValue(t._now(), null, !1), t._highlightTimePartBasedOnIndex(0)), -1 !== ["/", ".", "-", ",", " "].indexOf(n)) return t._inputChangeHandler(), t._navigateToNextTimePart(), void e.preventDefault(); if ("Backspace" === n) return t._resetTimePart(), t._highlightedTimePart.index > 0 ? t._navigateToPreviousTimePart() : t._highlightTimePartBasedOnIndex(0), void e.preventDefault() } else if (t._fullEdit || t._highlightedTimePartEdit || t.readonly || -1 !== ["Alt", "Control", "Shift"].indexOf(n) || e.altKey || e.ctrlKey) return; if (-1 !== ["End", "Home", "ArrowLeft", "ArrowUp", "ArrowRight", "ArrowDown"].indexOf(n)) { if (e.preventDefault(), "partial" === a && t._highlightedTimePartEdit && t._inputChangeHandler(), null !== t._value) switch (n) { case "End": t._highlightTimePartBasedOnIndex(t._formatStringRegExp.groups.length - 1); break; case "Home": t._highlightTimePartBasedOnIndex(0); break; case "ArrowLeft": t._navigateToPreviousTimePart(); break; case "ArrowUp": t._incrementDecrement(); break; case "ArrowRight": t._navigateToNextTimePart(); break; case "ArrowDown": t._incrementDecrement(!0) } } else if (t._highlightedTimePart) { if ("partial" !== a && t._highlightedTimePart.to - t._highlightedTimePart.from != t.$.input.selectionEnd - t.$.input.selectionStart) return void (t._fullEdit = !0); const i = t._highlightedTimePart.code; if ("ddd" === i || "dddd" === i || "z" === i || "zz" === i || "zzz" === i || "t" === i || "tt" === i) return void e.preventDefault(); if ("partial" === a && "MMM" !== i && "MMMM" !== i && !1 === new RegExp(/^\d+$/).test(n)) return void ((n.length < 2 || "F" !== n.charAt(0)) && e.preventDefault()); t._highlightedTimePartEdit = !0 } } else t._fullEdit = !0 } } _inputDownHandler() { const e = this; e._fullEdit || e._highlightedTimePartEdit || "full" === e.editMode || JQX.Utilities.Core.isMobile || setTimeout((function () { e._mouseFocus = !0, e._highlightTimePartBasedOnCursor() }), 0) } _inputPasteHandler(e) { "partial" === this.editMode ? e.preventDefault() : this._fullEdit = !0 } _inputSelectHandler() { const e = this, t = e.shadowRoot ? e.shadowRoot.activeElement : document.activeElement; "partial" === e.editMode && t === e.$.input && (!0 === e._programmaticSelection ? e._programmaticSelection = !1 : e._highlightedTimePart ? e._highlightTimePartBasedOnIndex(e._highlightedTimePart.index) : e._highlightTimePartBasedOnIndex(0)) } _inputUpHandler() { const e = this; JQX.Utilities.Core.isMobile && (e._iOS ? (e._mouseFocus = !0, setTimeout((function () { document.activeElement === e.$.input && e._highlightTimePartBasedOnCursor() }), 50)) : setTimeout((function () { e._mouseFocus = !0, e._highlightTimePartBasedOnCursor() }), 10)) } _inputWheelHandler(e) { const t = this; (t.shadowRoot ? t.shadowRoot.activeElement : document.activeElement) !== t.$.input || !t.enableMouseWheelAction || t.disabled || t.readonly || (e.preventDefault(), t._incrementDecrement(e.deltaY > 0)) } _isRestricted(e) { const t = this.restrictedDates; let a = !1; for (let n = 0; n < t.length; n++)if (e.equalDateParts(t[n])) { a = !0; break } return a } _mouseoutHandler(e) { const t = this, a = e.target; t.disabled || a !== t.$.input && a !== t.$.calendarButton || (a.removeAttribute("hover"), t.removeAttribute("hover")) } _mouseoverHandler(e) { const t = this, a = e.target; t.disabled || a !== t.$.input && a !== t.$.calendarButton || (a.setAttribute("hover", ""), t.setAttribute("hover", "")) } _navigateToNextTimePart() { this._highlightTimePartBasedOnIndex(this._highlightedTimePart.index + 1) } _navigateToPreviousTimePart() { this._highlightTimePartBasedOnIndex(this._highlightedTimePart.index - 1) } _now() { const e = this, t = new JQX.Utilities.DateTime("today", "Local"); return "Local" !== e._outputTimeZone ? t.toTimeZone(e._outputTimeZone) : t } _open(e) { const t = this; if (t.disabled || t.readonly) return t.opened = !1, void t.$.calendarButton.setAttribute("aria-expanded", !1); if (t.$.fireEvent("opening").defaultPrevented) return t.opened = !1, void t.$.calendarButton.setAttribute("aria-expanded", !1); t._edgeMacFF && t.$dropDownContainer.removeClass("not-in-view"); const a = t.$.dropDownContainer; a.style.marginLeft = null, e || (a.style.transition = ""), t.$.calendarDropDown.disabled = !1, t.$calendarButton.addClass("jqx-calendar-button-pressed"), t.$.calendarButton.setAttribute("active", ""), ("default" !== t._dropDownDisplayMode && "timePicker" !== t._dropDownDisplayMode || !t._timePickerInitialized || t._timePickerInitialized && t.$.timePickerDropDown.$.hasClass("jqx-hidden")) && t.$calendarDropDown.removeClass("jqx-hidden"), t.opened = !0, t.$.calendarButton.setAttribute("aria-expanded", !0), t._positionDetection.placeOverlay(), t._positionDetection.checkBrowserBounds("vertically"), t._positionDetection.positionDropDown(), t.$dropDownContainer.removeClass("jqx-visibility-hidden"); const n = 1 === window.devicePixelRatio ? document.documentElement.clientWidth : window.innerWidth, i = a.getBoundingClientRect(); if (i.left < 0 ? a.style.marginLeft = -1 * i.left + "px" : i.right > n && (a.style.marginLeft = n - i.right + "px"), t.$.fireEvent("open"), t._toSync) { const e = t._value; if (null !== e) t._disregardCalendarChangeEvent = !0, t.$.calendarDropDown.selectedDates = [e.toDate()], t._defaultFooterTemplateApplied && (t._hourElement.value = e.toString("hh"), t._minuteElement.value = e.toString("mm"), t._ampmElement.value = e.toString("tt")), t._timePickerInitialized && (t.$.timePickerDropDown.value = e.toDate()), t._disregardCalendarChangeEvent = !1; else { const e = t.$.calendarDropDown.context; t.$.calendarDropDown.context = t.$.calendarDropDown, t.$.calendarDropDown._clearSelection(!0), t.$.calendarDropDown.context = e, t._defaultFooterTemplateApplied && (t._hourElement.value = "", t._minuteElement.value = "", t._ampmElement.value = "") } t._toSync = !1 } let o; switch (t._dropDownDisplayMode) { case "default": o = t.$selectDate.hasClass("jqx-selected") ? t.$.calendarDropDown : t.$.timePickerDropDown.$.picker; break; case "classic": case "calendar": o = t.$.calendarDropDown; break; case "timePicker": o = t.$.timePickerDropDown.$.picker }t.hasAnimation ? (t._toFocus = o, function e() { t._toFocus && (0 === t.$.dropDownContainer.getBoundingClientRect().height ? requestAnimationFrame(e) : t._dropDownTransitionendHandler()) }()) : o.focus() } _positionExternalDropDown(e) { const t = this.context, a = !t.calendarButton || "right" === t.calendarButtonPosition, n = t._dropDownListPosition, i = t.$.dropDownContainer; let o, l = a ? e.right - i.offsetWidth : e.left; switch (n) { case "bottom": o = e.bottom; break; case "overlay-top": o = e.bottom - i.offsetHeight; break; case "overlay-center": o = e.top + e.height / 2 - i.offsetHeight / 2; break; case "overlay-bottom": o = e.top; break; case "top": o = e.top - i.offsetHeight; break; case "center-bottom": case "center-top": o = "center-bottom" === n ? e.bottom + 5 : e.top - 5 - i.offsetHeight, l = a ? e.right - i.offsetWidth / 2 - t.$.calendarButton.offsetWidth / 2 : e.left - i.offsetWidth / 2 + t.$.calendarButton.offsetWidth / 2 }return { left: l, top: o } } _rangeValidation(e) { const t = this; return -1 === e.compare(t.min) ? t.min.clone() : 1 === e.compare(t.max) ? t.max.clone() : e } _resetTimePart() { const e = this, t = e._highlightedTimePart.code, a = e._codeToIndex[t], n = JQX.Utilities.DateTime.getConstructorParameters(e._value); let i; i = a > 2 ? 0 : a > 0 ? 1 : e.min.year(), n[a] = i, n.unshift(null), e._validateValue(new (Function.prototype.bind.apply(JQX.Utilities.DateTime, n))) } _setIds() { const e = this; e.$.label.id || (e.$.label.id = e.id + "Label"), e.$.input.id || (e.$.input.id = e.id + "Input"), e.$.calendarButton.id || (e.$.calendarButton.id = e.id + "CalendarButton"), e.$.dropDownContainer.id || (e.$.dropDownContainer.id = e.id + "DropDownContainer"), e.$.hint.id || (e.$.hint.id = e.id + "Hint") } _setDefaultFooterTemplate(e) { const t = this; t.$.calendarDropDown.footerTemplate = t._defaultFooterTemplate, e && t.$.calendarDropDown._handleLayoutTemplate(t.$.calendarDropDown.$.footer, t._defaultFooterTemplate), t._hourElement = t.$.calendarDropDown.getElementsByClassName("jqx-hour-element")[0], t._minuteElement = t.$.calendarDropDown.getElementsByClassName("jqx-minute-element")[0], t._ampmElement = t.$.calendarDropDown.getElementsByClassName("jqx-am-pm-element")[0], t._todayElement = t.$.calendarDropDown.getElementsByClassName("jqx-today-element")[0], t._todayElement.title = t.localize("now"), Array.from(t.$.calendarDropDown.$.footer.getElementsByTagName("jqx-repeat-button")).forEach((function (e) { e.animation = t.animation })), t._addCalendarFooterListeners(), t._defaultFooterTemplateApplied = !0 } _setFocusable() { const e = this; if (e.disabled || e.unfocusable) return e.$.input.tabIndex = -1, e.$.selectDate.removeAttribute("tabindex"), e.$.selectTime.removeAttribute("tabindex"), void (e._defaultFooterTemplateApplied && (e._hourElement.tabIndex = -1, e._ampmElement.tabIndex = -1, e._minuteElement.tabIndex = -1)); const t = e.tabIndex > 0 ? e.tabIndex : 0; e.$.input.removeAttribute("tabindex"), e.$.selectDate.tabIndex = t, e.$.selectTime.tabIndex = t, e._defaultFooterTemplateApplied && (e._hourElement.removeAttribute("tabindex"), e._ampmElement.removeAttribute("tabindex"), e._minuteElement.removeAttribute("tabindex"), e.$.calendarDropDown.getElementsByClassName("jqx-footer-component-today")[0].tabIndex = t) } _setNullValue(e) { const t = this; if (void 0 === e && (e = t._cloneValue()), t.nullable) { if (t._value = null, t.value = null, t._highlightedTimePart = void 0, t.$.input.value = "", null !== e) { if (t.opened) { if (!t._calendarInitiatedChange) { const e = t.$.calendarDropDown.context; t.$.calendarDropDown.context = t.$.calendarDropDown, t.$.calendarDropDown._clearSelection(!0), t.$.calendarDropDown.context = e } t._defaultFooterTemplateApplied && (t._hourElement.value = "", t._ampmElement.value = "", t._minuteElement.value = ""), t._toSync = !1 } else t._toSync = !0; t.isInitialized && (t.$.fireEvent("change", { oldValue: e.toTimeZone(t._inputTimeZone), value: null }), t._updateTargetValue()) } t._disableSpinButtons() } else t._validateValue(t._now(), e) } _spinButtonsClickHandler(e) { const t = this; null === t._value || t.disabled || t.readonly || t._incrementDecrement(t.$.downButton.contains(e.target)) } _validateInitialPropertyValues() { const e = this, t = e.$.calendarDropDown; "left" === e.calendarButtonPosition && e.$.content.insertBefore(e.$.calendarButton, e.$.input), "left" === e.spinButtonsPosition && e.$.content.insertBefore(e.$.spinButtonsContainer, e.$.input), e.disabled && (e.$.upButton.disabled = !0, e.$.downButton.disabled = !0), e.opened && (e.disabled || e.readonly ? e.opened = !1 : (e.$.dropDownContainer.style.transition = "none", e._open(!0))), e.$.calendarButton.setAttribute("aria-expanded", e.opened), null === e.footerTemplate ? e._setDefaultFooterTemplate(!0) : (t.footerTemplate = e.footerTemplate, t._handleLayoutTemplate(t.$.footer, e.footerTemplate)), "" === e.formatString && (e.formatString = "dd-MMM-yy HH:mm:ss.fff"); const a = e.displayKind; let n; if ("UTC" === a ? e._outputTimeZone = "UTC" : "local" === a && (e._outputTimeZone = "Local"), null !== e.value ? (n = JQX.Utilities.DateTime.validateDate(e.value, new JQX.Utilities.DateTime, e.formatString), e._inputTimeZone = n.timeZone, "unspecified" !== a && e._inputTimeZone !== e._outputTimeZone ? n = n.toTimeZone(e._outputTimeZone) : "unspecified" === a && (e._outputTimeZone = e._inputTimeZone)) : (n = null, e._inputTimeZone = "Local"), e._validateRestrictedDates(), e._validateMinMax("both"), e._validateValue(n, e._now(), !1, !0), e._validateInterval(new JQX.Utilities.TimeSpan(0, 0, 1)), e._getFormatStringRegExp(), e._defaultFooterTemplateApplied && "" === e._hourElement.value && null !== e.value) { const t = e.value; e._hourElement.value = t.toString("hh"), e._ampmElement.value = t.toString("tt"), e._minuteElement.value = t.toString("mm") } e._detectDisplayMode(); const i = e._dropDownDisplayMode; "default" === i || "calendar" === i ? (t.viewSections = ["title", "header"], t.$title.hasClass("jqx-hidden") && t.propertyChangedHandler("viewSections", ["header", "footer"], ["title", "header"]), "default" === i && e.$dropDownHeader.removeClass("jqx-hidden")) : "timePicker" === i && (e.$calendarDropDown.addClass("jqx-hidden"), e._initializeTimePicker()), e.footer && e._handleFooter() } _validateInterval(e) { const t = this, a = t.interval; let n = a; if (a instanceof JQX.Utilities.TimeSpan) n = a; else if ("string" == typeof a) { const i = a.indexOf("TimeSpan("), o = a.indexOf(")"); if (-1 !== i && -1 !== o && (n = a.slice(i + 9, o), n = n.replace(/'/g, "").replace(/"/g, "").replace(/^\s+|\s+$|\s+(?=\s)/g, ""), new RegExp(/(^(\d+)(,\s*\d+)*$)/g).test(n) && (n = n.replace(/\s/g, ""), n = n.split(","), n.map((function (e, t) { n[t] = parseInt(e) })), n.unshift(null), n = new (Function.prototype.bind.apply(JQX.Utilities.TimeSpan, n)))), n instanceof JQX.Utilities.TimeSpan == 0) { if ("" === n.trim()) return void (t.interval = e); isNaN(n) || (n = 1e4 * parseInt(n, 10)); try { n = new JQX.Utilities.TimeSpan(n) } catch (a) { return void (t.interval = e) } } } else { if ("number" != typeof a) return void (t.interval = e); n = new JQX.Utilities.TimeSpan(a) } 0 === n._ticks ? t.interval = e : t.interval = n } _validateMinMax(e, t) { const a = this; let n = !1; "max" !== e && (a.min = JQX.Utilities.DateTime.validateDate(a.min, t || new JQX.Utilities.DateTime(1600, 1, 1), a.formatString), a.min = a.min.toTimeZone(a._outputTimeZone), n = !0), "min" !== e && (a.max = JQX.Utilities.DateTime.validateDate(a.max, t || new JQX.Utilities.DateTime(3001, 1, 1), a.formatString), a.max = a.max.toTimeZone(a._outputTimeZone), a.max.calendar.days = a._localizedDays, a.max.calendar.months = a._localizedMonths, a.max.calendar.locale = a.locale, a.$.calendarDropDown.max = a.max.toDate()), a.min.compare(a.max) > 0 && (a.min = a.max.clone(), n = !0), n && (a.min.calendar.days = a._localizedDays, a.min.calendar.months = a._localizedMonths, a.min.calendar.locale = a.locale, a.$.calendarDropDown.min = a.min.toDate()) } _validateRestrictedDates() { const e = this, t = [], a = []; for (let n = 0; n < e.restrictedDates.length; n++) { const i = e.restrictedDates[n]; let o = JQX.Utilities.DateTime.validateDate(i, "invalid", e.formatString); "invalid" !== o && (o = o.toTimeZone(e._outputTimeZone), t.push(o), a.push(o.toDate())) } e.restrictedDates = t, e.$.calendarDropDown.restrictedDates = a } _validateValue(e, t, a, n) { const i = this, o = void 0 !== t ? t : i._cloneValue(); if (null === e || "" === e) return void i._setNullValue(o); if (e && "string" == typeof e) if (-1 === e.indexOf("-") && -1 === e.indexOf("/") && -1 === e.indexOf(".")) { if (i.formatString) { let t = "", a = 0; for (let n = 0; n < i.formatString.length; n++)"-" === i.formatString[n] || "/" === i.formatString[n] || "." === i.formatString[n] ? t += i.formatString[n] : e[a] ? (t += e[a], a++) : t += i.formatString[n]; if (t.indexOf("y") >= 0) { let e = t.substring(t.indexOf("y") - 2); const a = i.yearCutoff.toString(), n = parseInt(a.slice(2), 10); let o = parseInt(a.slice(0, 2), 10); e = parseInt(e, 10), e < n && o++, e = e.toString(), "NaN" !== e ? (e = o + "" + "0".repeat(2 - e.length) + e, t = t.substring(0, t.indexOf("y") - 2) + e) : t = null } e = t } } else { let t = e.indexOf("-") >= 0 ? "-" : ""; if ("" === t && (t = e.indexOf("/") >= 0 ? "/" : ""), "" === t && (t = e.indexOf(".") >= 0 ? "." : ""), t && i.formatString.indexOf("yyyy") >= 0) { const a = e.split(t); let n = a[a.length - 1]; if (n.length < 4) { const o = i.yearCutoff.toString(), l = parseInt(o.slice(2), 10); let r = parseInt(o.slice(0, 2), 10); n = parseInt(n, 10), n < l && r++, n = n.toString(), n = r + "" + "0".repeat(2 - n.length) + n, a[a.length - 1] = n, e = a.join(t) } } } if (void 0 !== e && (i._value = JQX.Utilities.DateTime.validateDate(e, o, i.formatString)), null === i._value) return void i._setNullValue(o); let l = i._value; for (; !0 === i._isRestricted(l);)l.addDays(1, !1); const r = i._rangeValidation(l); n && "strict" !== i.validation ? !1 === l.equals(r) && (i._minMaxChanged = !0) : (i._value = r, delete i._minMaxChanged), i.value = i._value.toTimeZone(i._inputTimeZone); const s = i._value; if (s.calendar.days = i._localizedDays, s.calendar.months = i._localizedMonths, s.calendar.locale = i.locale, i._applyFormatString(), i._disableSpinButtons(), (null === o || null === s) && o !== s || null !== o && null !== s && 0 !== o.compare(s)) { if (!1 !== a && i.isInitialized && !n && (i.$.fireEvent("change", { oldValue: null !== o ? o.toTimeZone(i._inputTimeZone) : null, value: i.value }), i._updateTargetValue()), i._calendarInitiatedChange) return; i.opened ? (null !== o && 0 !== i.$.calendarDropDown.selectedDates.length && o.year() === s.year() && o.month() === s.month() && o.day() === s.day() && i.$.calendarDropDown._isDateInView(s.toDate()) || (i._disregardCalendarChangeEvent = !0, i.$.calendarDropDown.selectedDates = [s.toDate()]), i._defaultFooterTemplateApplied && (null !== o && o.hour() === s.hour() || (i._hourElement.value = s.toString("hh"), i._ampmElement.value = s.toString("tt")), null !== o && o.minute() === s.minute() || (i._minuteElement.value = s.toString("mm"))), i._timePickerInitialized && !i._timePickerInitiatedChange && (i.$.timePickerDropDown.value = s.toDate()), i._toSync = !1) : i._toSync = !0 } } });
|
|
46
|
+
|
|
47
|
+
/***/
|
|
48
|
+
}),
|
|
49
|
+
|
|
50
|
+
/***/ 9613:
|
|
51
|
+
/***/ (() => {
|
|
52
|
+
|
|
53
|
+
JQX.Utilities.Assign("Draw", class { constructor(t, e) { const i = this; i.host = t, i.renderEngine = e || "", i.refresh(); const r = ["clear", "removeElement", "attr", "getAttr", "line", "circle", "rect", "path", "pieslice", "pieSlicePath", "text", "measureText"]; for (let t in r) i._addFn(JQX.Utilities.Draw.prototype, r[t]) } _addFn(t, e) { t[e] || (t[e] = function () { return this.renderer[e].apply(this.renderer, arguments) }) } _initRenderer(t) { return this.createRenderer(this, t) } _internalRefresh() { const t = this; if (t.renderer || (t.host.innerHTML = "", t._initRenderer(t.host)), "none" === window.getComputedStyle(t.host).display) return; const e = t.renderer; if (!e) return; const i = e.getRect(); t._render({ x: 1, y: 1, width: i.width, height: i.height }) } _render(t) { this._plotRect = t } refresh() { this._internalRefresh() } getSize() { const t = this._plotRect; return { width: t.width, height: t.height } } toGreyScale(t) { if (-1 === t.indexOf("#")) return t; const e = this.cssToRgb(t); e[0] = e[1] = e[2] = Math.round(.3 * e[0] + .59 * e[1] + .11 * e[2]); const i = this.rgbToHex(e[0], e[1], e[2]); return "#" + i[0] + i[1] + i[2] } decToHex(t) { return t.toString(16) } hexToDec(t) { return parseInt(t, 16) } rgbToHex(t, e, i) { return [this.decToHex(t), this.decToHex(e), this.decToHex(i)] } hexToRgb(t, e, i) { return [this.hexToDec(t), this.hexToDec(e), this.hexToDec(i)] } cssToRgb(t) { return t.indexOf("rgb") <= -1 ? this.hexToRgb(t.substring(1, 3), t.substring(3, 5), t.substring(5, 7)) : t.substring(4, t.length - 1).split(",") } hslToRgb(t) { let e, i, r; const s = parseFloat(t[0]), n = parseFloat(t[1]), h = parseFloat(t[2]); if (0 === n) e = i = r = h; else { const t = h < .5 ? h * (1 + n) : h + n - h * n, a = 2 * h - t; e = this.hueToRgb(a, t, s + 1 / 3), i = this.hueToRgb(a, t, s), r = this.hueToRgb(a, t, s - 1 / 3) } return [255 * e, 255 * i, 255 * r] } hueToRgb(t, e, i) { return i < 0 && (i += 1), i > 1 && (i -= 1), i < 1 / 6 ? t + 6 * (e - t) * i : i < .5 ? e : i < 2 / 3 ? t + (e - t) * (2 / 3 - i) * 6 : t } rgbToHsl(t) { const e = parseFloat(t[0]) / 255, i = parseFloat(t[1]) / 255, r = parseFloat(t[2]) / 255, s = Math.max(e, i, r), n = Math.min(e, i, r); let h, a, o = (s + n) / 2; if (s === n) h = a = 0; else { const t = s - n; switch (a = o > .5 ? t / (2 - s - n) : t / (s + n), s) { case e: h = (i - r) / t + (i < r ? 6 : 0); break; case i: h = (r - e) / t + 2; break; case r: h = (e - i) / t + 4 }h /= 6 } return [h, a, o] } swap(t, e) { const i = t; t = e, e = i } getNum(t) { if (t.constructor !== Array) { if (isNaN(t)) return 0 } else for (let e = 0; e < t.length; e++)if (!isNaN(t[e])) return t[e]; return 0 } _ptRotate(t, e, i, r, s) { const n = Math.sqrt(Math.pow(Math.abs(t - i), 2) + Math.pow(Math.abs(e - r), 2)), h = Math.asin((t - i) / n) + s; return { x: t = i + Math.cos(h) * n, y: e = r + Math.sin(h) * n } } log(t, e) { return Math.log(t) / (e ? Math.log(e) : 1) } _mod(t, e) { const i = Math.abs(t > e ? e : t); let r = 1; if (0 !== i) for (; i * r < 100;)r *= 10; return (t *= r) % (e *= r) / r } createRenderer(t, e) { const i = t; let r = i.renderer = null; return document.createElementNS && "HTML5" !== i.renderEngine && (r = new JQX.Utilities.SvgRenderer(this)), null !== r || "HTML5" !== i.renderEngine && void 0 !== i.renderEngine || (r = new JQX.Utilities.HTML5Renderer(this)), r.init(e), i.renderer = r, r } getByPriority(t) { let e; for (let i = 0; i < t.length; i++) { const r = t[i]; if (null != r && "" !== r) { e = r; break } } return e } get(t, e, i) { return void 0 !== i ? t[e][i] : t[e] } min(t, e) { let i = NaN; for (let r = 0; r < t.length; r++) { const s = this.get(t, r, e); (isNaN(i) || s < i) && (i = s) } return i } max(t, e) { let i = NaN; for (let r = 0; r < t.length; r++) { const s = this.get(t, r, e); (isNaN(i) || s > i) && (i = s) } return i } sum(t, e) { let i = 0; for (let r = 0; r < t.length; r++) { const s = this.get(t, r, e); isNaN(s) || (i += s) } return i } count(t, e) { let i = 0; for (let r = 0; r < t.length; r++) { const s = this.get(t, r, e); isNaN(s) || i++ } return i } avg(t, e) { return this.sum(t, e) / Math.max(1, this.count(t, e)) } filter(t, e) { if (!e) return t; const i = []; for (let r = 0; r < t.length; r++)e(t[r]) && i.push(t[r]); return i } scale(t, e, i, r) { if (isNaN(t)) return NaN; if ((t < Math.min(e.min, e.max) || t > Math.max(e.min, e.max)) && (!r || !0 !== r.ignore_range)) return NaN; let s = NaN, n = 1; if (void 0 === e.type || "logarithmic" !== e.type) { let i = Math.abs(e.max - e.min); i || (i = 1), n = Math.abs(t - Math.min(e.min, e.max)) / i } else if ("logarithmic" === e.type) { let i = e.base; isNaN(i) && (i = 10); let r = Math.min(e.min, e.max); r <= 0 && (r = 1); let s = Math.max(e.min, e.max); s <= 0 && (s = 1); const h = this.log(s, i); s = Math.pow(i, h); const a = this.log(r, i); r = Math.pow(i, a); const o = this.log(t, i); n = Math.abs(o - a) / (h - a) } if ("logarithmic" === i.type) { let t = i.base; isNaN(t) && (t = 10); const e = this.log(i.max, t), r = this.log(i.min, t); i.flip && (n = 1 - n); const h = Math.min(r, e) + n * Math.abs(e - r); s = Math.pow(t, h) } else s = Math.min(i.min, i.max) + n * Math.abs(i.max - i.min), i.flip && (s = Math.max(i.min, i.max) - s + i.min); return s } axis(t, e, i) { if (i <= 1) return [e, t]; (isNaN(i) || i < 2) && (i = 2); let r = 0; for (; Math.round(t) !== t && Math.round(e) !== e && r < 10;)t *= 10, e *= 10, r++; let s = (e - t) / i; for (; r < 10 && Math.round(s) !== s;)t *= 10, e *= 10, s *= 10, r++; const n = [1, 2, 5]; let h, a = 0; for (; ;) { let t = a % n.length, e = Math.floor(a / n.length), i = Math.pow(10, e) * n[t]; if (t = (a + 1) % n.length, e = Math.floor((a + 1) / n.length), h = Math.pow(10, e) * n[t], s >= i && s < h) break; a++ } const o = h, l = []; let d = this.renderer._rnd(t, o, !1); const c = r <= 0 ? 1 : Math.pow(10, r); for (; d < e + o;)l.push(d / c), d += o; return l } _widgetToImage(t, e, i, r, s) { let n = t; if (!n) return !1; void 0 !== i && "" !== i || (i = "image." + e); let h = n.renderEngine, a = n.animation; if (n.animation = "none", n.renderEngine = "HTML5", n.renderEngine !== h) try { n.refresh() } catch (t) { return n.renderEngine = h, n.refresh(), n.animation = a, !1 } let o = n.renderer.getContainer().firstElementChild, l = !0; "function" == typeof r && (l = r(t, o)); let d = !0; return l && (d = this.exportImage(t, o, e, i, s)), n.renderEngine !== h && (n.renderEngine = h, n.refresh(), n.animation = a), d } _saveAsImage(t, e) { return this._widgetToImage(this, t, e) } saveAsPNG(t) { return this._saveAsImage("png", t) } saveAsJPEG(t) { return this._saveAsImage("jpeg", t) } exportImage(t, e, i, r, s) { if (!e) return !1; let n = "pdf" === i.toLowerCase(); n && (i = "jpeg"), void 0 !== r && "" !== r || (r = "image." + i); let h = !0; if ("print" !== i) { try { if (e) if (n) { s = s || "portrait"; const n = { content: { image: e.toDataURL("image/" + i), width: Math.min(e.width / 1.35, "portrait" === s ? 515 : 762) }, pageOrientation: s }; try { pdfMake.createPdf(n).download(r) } catch (e) { t.error(t.localize("missingReference", { files: "pdfmake.min.js" })) } } else { JQX.Utilities.DataExporter || t.error(t.localize("missingReference", { files: "jqx.export.js" })); const s = new JQX.Utilities.DataExporter; e.toBlob((function (t) { s.downloadFile(t, i, r) })) } } catch (t) { h = !1 } return h } { const t = window.open("", "", "width=800,height=500"), i = t.document.open(), r = '<!DOCTYPE html><html><head><meta charset="utf-8" /><title>jQWidgets Chart</title></head><body><img src="' + e.toDataURL() + '" /></html>'; try { i.write(r), i.close(), setTimeout((function () { t.print(), t.close() }), 100) } catch (t) { } } } }), JQX.Utilities.Assign("Renderer", class { constructor(t) { const e = this; e.draw = t, e._gradients = {}, e._toRadiansCoefficient = 2 * Math.PI / 360 } pieSlicePath(t, e, i, r, s, n, h) { r || (r = 1); const a = Math.abs(s - n), o = a > 180 ? 1 : 0; a >= 360 && (n = s + 359.99); const l = s * this._toRadiansCoefficient, d = n * this._toRadiansCoefficient; let c = t, p = t, u = e, g = e; const f = !isNaN(i) && i > 0; f && (h = 0); const m = Math.cos(l), _ = Math.sin(l), x = Math.cos(d), M = Math.sin(d); if (h + i > 0) { if (h > 0) { const i = (a / 2 + s) * this._toRadiansCoefficient; t += h * Math.cos(i), e -= h * Math.sin(i) } f && (c = t + i * m, u = e - i * _, p = t + i * x, g = e - i * M) } const y = t + r * m, w = t + r * x, N = e - r * _, v = e - r * M; let b = ""; const C = Math.abs(Math.abs(n - s) - 360) > .02; return f ? (b = "M " + p + "," + g, b += " a" + i + "," + i, b += " 0 " + o + ",1 " + (c - p) + "," + (u - g), b += C ? " L" + y + "," + N : " M" + y + "," + N, b += " a" + r + "," + r, b += " 0 " + o + ",0 " + (w - y) + "," + (v - N), C && (b += " Z")) : (b = "M " + w + "," + v, b += " a" + r + "," + r, b += " 0 " + o + ",1 " + (y - w) + "," + (N - v), C && (b += " L" + t + "," + e, b += " Z")), b } measureText(t, e, i, r) { const s = this._getTextParts(t, e, i), n = s.width; let h = s.height; !1 === r && (h /= .6); let a = {}; if (isNaN(e) && (e = 0), 0 === e) a = { width: this._rup(n), height: this._rup(h) }; else { const t = e * Math.PI * 2 / 360, i = Math.abs(Math.sin(t)), r = Math.abs(Math.cos(t)), s = Math.abs(n * i + h * r), o = Math.abs(n * r + h * i); a = { width: this._rup(o), height: this._rup(s) } } return r && (a.textPartsInfo = s), a } alignTextInRect(t, e, i, r, s, n, h, a, o, l) { const d = o * Math.PI * 2 / 360, c = Math.sin(d), p = Math.cos(d), u = s * c, g = s * p; "center" === h || "" === h || "undefined" === h ? t += i / 2 : "right" === h && (t += i), "center" === a || "middle" === a || "" === a || "undefined" === a ? e += r / 2 : "bottom" === a ? e += r - n / 2 : "top" === a && (e += n / 2); let f = "middle"; -1 !== (l = l || "").indexOf("top") ? f = "top" : -1 !== l.indexOf("bottom") && (f = "bottom"); let m = "center"; return -1 !== l.indexOf("left") ? m = "left" : -1 !== l.indexOf("right") && (m = "right"), "center" === m ? (t -= g / 2, e -= u / 2) : "right" === m && (t -= g, e -= u), "top" === f ? (t -= n * c, e += n * p) : "middle" === f && (t -= n * c / 2, e += n * p / 2), { x: t = this._rup(t), y: e = this._rup(e) } } adjustColor(t, e) { if ("string" != typeof t) return "#000000"; if (-1 === t.indexOf("#")) return t; const i = this.draw; let r = i.cssToRgb(t); const s = i.rgbToHsl(r); s[2] = Math.min(1, s[2] * e), s[1] = Math.min(1, s[1] * e * 1.1), r = i.hslToRgb(s), t = "#"; for (let e = 0; e < 3; e++) { let s = Math.round(r[e]); s = i.decToHex(s), 1 === s.toString().length && (t += "0"), t += s } return t.toUpperCase() } _rup(t) { let e = Math.round(t); return t > e && e++, e } _ptdist(t, e, i, r) { return Math.sqrt((i - t) * (i - t) + (r - e) * (r - e)) } _rnd(t, e, i, r) { if (isNaN(t)) return t; void 0 === r && (r = !0); let s = t - (!0 === r ? t % e : this._mod(t, e)); return t === s ? s : (i ? t > s && (s += e) : s > t && (s -= e), 1 === e ? Math.round(s) : s) } _ptrnd(t) { if (!document.createElementNS) return Math.round(t) === t ? t : this._rnd(t, 1, !1, !0); const e = this._rnd(t, .5, !1, !0); return .5 !== Math.abs(e - Math.round(e)) ? e > t ? e - .5 : e + .5 : e } _getContrastColor(t) { if (void 0 === t) return; let e = this.draw.hexToRgb(t.slice(1, 3), t.slice(3, 5), t.slice(5, 7)); return (.299 * e[0] + .61 * e[1] + .114 * e[2]) / 255 > .6 ? "#000000" : "#FFFFFF" } }), JQX.Utilities.Assign("SvgRenderer", class extends JQX.Utilities.Renderer { constructor(t) { super(t); const e = this; e._svgns = "http://www.w3.org/2000/svg", e._openGroups = [], e._clipId = 0 } init(t) { const e = document.createElement("div"); e.className = "drawContainer", e.onselectstart = function () { return !1 }, t.appendChild(e), this.host = t, this.container = e; try { const t = document.createElementNS(this._svgns, "svg"); t.setAttribute("version", "1.1"), t.setAttribute("width", "100%"), t.setAttribute("height", "100%"), t.setAttribute("overflow", "hidden"), e.appendChild(t), this.canvas = t } catch (t) { return !1 } return this._id = (new Date).getTime(), this.clear(), !0 } getType() { return "SVG" } refresh() { } getRect() { return { x: 0, y: 0, width: Math.max(this._rup(this.host.offsetWidth) - 1, 0), height: Math.max(this._rup(this.host.offsetHeight) - 1, 0) } } getContainer() { return this.container } clear() { for (; this.canvas.childNodes.length > 0;)this.removeElement(this.canvas.firstElementChild); this._defaultParent = void 0, this._defs = document.createElementNS(this._svgns, "defs"), this._gradients = {}, this.canvas.appendChild(this._defs) } removeElement(t) { if (void 0 !== t) try { for (; t.firstChild;)this.removeElement(t.firstChild); t.parentNode ? t.parentNode.removeChild(t) : this.canvas.removeChild(t) } catch (t) { } } beginGroup() { const t = this._activeParent(), e = document.createElementNS(this._svgns, "g"); return t.appendChild(e), this._openGroups.push(e), e } endGroup() { 0 !== this._openGroups.length && this._openGroups.pop() } _activeParent() { return 0 === this._openGroups.length ? this.canvas : this._openGroups[this._openGroups.length - 1] } createClipRect(t) { const e = document.createElementNS(this._svgns, "clipPath"), i = document.createElementNS(this._svgns, "rect"); return this.attr(i, { x: t.x, y: t.y, width: t.width, height: t.height, fill: "none" }), this._clipId = this._clipId || 0, e.id = "cl" + this._id + "_" + (++this._clipId).toString(), e.appendChild(i), this._defs.appendChild(e), e } getWindowHref() { let t = window.location.href; return t ? (t = t.replace(/([\('\)])/g, "\\$1"), t = t.replace(/#.*$/, ""), t) : t } setClip(t, e) { const i = "url(" + this.getWindowHref() + "#" + e.id + ")"; return this.attr(t, { "clip-path": i }) } addHandler(t, e, i) { t.addEventListener(e, i) } removeHandler() { } on(t, e, i) { this.addHandler(t, e, i) } off(t, e, i) { this.removeHandler(t, e, i) } shape(t, e) { const i = document.createElementNS(this._svgns, t); if (i) { for (let t in e) i.setAttribute(t, e[t]); return this._activeParent().appendChild(i), i } } _getTextParts(t, e, i) { const r = { width: 0, height: 0, parts: [] }; if (void 0 === t) return r; const s = t.toString().split("<br>"), n = this._activeParent(), h = document.createElementNS(this._svgns, "text"); this.attr(h, i); for (let t = 0; t < s.length; t++) { const e = s[t], i = h.ownerDocument.createTextNode(e); let a; h.appendChild(i), n.appendChild(h); try { a = h.getBBox() } catch (t) { } const o = this._rup(a.width), l = this._rup(.6 * a.height); h.removeChild(i), r.width = Math.max(r.width, o), r.height += l + (t > 0 ? 4 : 0), r.parts.push({ width: o, height: l, text: e }) } return n.removeChild(h), r } _measureText(t, e, i, r) { return super.measureText(t, e, i, r) } measureText(t, e, i) { return this._measureText(t, e, i, !1) } text(t, e, i, r, s, n, h, a, o, l, d) { const c = this._measureText(t, n, h, !0, this).textPartsInfo, p = c.parts, u = this._getContrastColor(arguments[11]); let g; if (o || (o = "center"), l || (l = "center"), (p.length > 1 || a) && (g = this.beginGroup()), a) { const t = this.createClipRect({ x: this._rup(e) - 1, y: this._rup(i) - 1, width: this._rup(r) + 2, height: this._rup(s) + 2 }); this.setClip(g, t) } let f = this._activeParent(), m = 0, _ = 0; m = c.width, _ = c.height, (isNaN(r) || r <= 0) && (r = m), (isNaN(s) || s <= 0) && (s = _); const x = r || 0, M = s || 0; let y = 0; if (!n || 0 === n) { let t; i += _, "center" === l || "middle" === l ? i += (M - _) / 2 : "bottom" === l && (i += M - _), r || (r = m), s || (s = _), f = this._activeParent(); for (let r = p.length - 1; r >= 0; r--) { t = document.createElementNS(this._svgns, "text"), this.attr(t, h), this.attr(t, { cursor: "default" }); const s = t.ownerDocument.createTextNode(p[r].text); t.appendChild(s); let n = e; const a = p[r].width, l = p[r].height; "center" === o ? n += (x - a) / 2 : "right" === o && (n += x - a), this.attr(t, { x: this._rup(n), y: this._rup(i + y), width: this._rup(a), height: this._rup(l) }), void 0 !== u && (t.style.fill = u), f.appendChild(t), y -= p[r].height + 4 } return g ? (this.endGroup(), g) : t } const w = this.alignTextInRect(e, i, r, s, m, _, o, l, n, d); e = w.x, i = w.y; const N = this.shape("g", { transform: "translate(" + e + "," + i + ")" }), v = this.shape("g", { transform: "rotate(" + n + ")" }); N.appendChild(v), y = 0; for (let t = p.length - 1; t >= 0; t--) { const e = document.createElementNS(this._svgns, "text"); this.attr(e, h), this.attr(e, { cursor: "default" }); const i = e.ownerDocument.createTextNode(p[t].text); e.appendChild(i); let r = 0; const s = p[t].width, n = p[t].height; "center" === o ? r += (c.width - s) / 2 : "right" === o && (r += c.width - s), this.attr(e, { x: this._rup(r), y: this._rup(y), width: this._rup(s), height: this._rup(n) }), v.appendChild(e), y -= n + 4 } return f.appendChild(N), g && this.endGroup(), N } line(t, e, i, r, s) { const n = this.shape("line", { x1: t, y1: e, x2: i, y2: r }); return this.attr(n, s), n } path(t, e) { const i = this.shape("path"); return i.setAttribute("d", t), e && this.attr(i, e), i } rect(t, e, i, r, s) { t = this._ptrnd(t), e = this._ptrnd(e), i = Math.max(1, this._rnd(i, 1, !1)), r = Math.max(1, this._rnd(r, 1, !1)); const n = this.shape("rect", { x: t, y: e, width: i, height: r }); return s && this.attr(n, s), n } circle(t, e, i, r) { const s = this.shape("circle", { cx: t, cy: e, r: i }); return r && this.attr(s, r), s } pieslice(t, e, i, r, s, n, h, a) { const o = this.pieSlicePath(t, e, i, r, s, n, h), l = this.shape("path"); return l.setAttribute("d", o), a && this.attr(l, a), l } attr(t, e) { if (t && e) for (let i in e) "textContent" === i ? t.textContent = e[i] : "width" === i || "height" === i ? t.setAttribute(i, Math.max(0, e[i])) : t.setAttribute(i, e[i]) } removeAttr(t, e) { if (t && e) for (let i in e) "textContent" === i ? t.textContent = "" : t.removeAttribute(e[i]) } getAttr(t, e) { return t.getAttribute(e) } _toLinearGradient(t, e, i) { const r = "grd" + this._id + t.replace("#", "") + (e ? "v" : "h"), s = "url(" + this.getWindowHref() + "#" + r + ")"; if (this._gradients[s]) return s; const n = document.createElementNS(this._svgns, "linearGradient"); this.attr(n, { x1: "0%", y1: "0%", x2: e ? "0%" : "100%", y2: e ? "100%" : "0%", id: r }); for (let e = 0; e < i.length; e++) { const r = i[e], s = document.createElementNS(this._svgns, "stop"), h = "stop-color:" + this.adjustColor(t, r[1]); this.attr(s, { offset: r[0] + "%", style: h }), n.appendChild(s) } return this._defs.appendChild(n), this._gradients[s] = !0, s } _toRadialGradient(t, e, i) { const r = "grd" + this._id + t.replace("#", "") + "r" + (void 0 !== i ? i.key : ""), s = "url(" + this.getWindowHref() + "#" + r + ")"; if (this._gradients[s]) return s; const n = document.createElementNS(this._svgns, "radialGradient"); void 0 === i ? this.attr(n, { cx: "50%", cy: "50%", r: "100%", fx: "50%", fy: "50%", id: r }) : this.attr(n, { cx: i.x, cy: i.y, r: i.outerRadius, id: r, gradientUnits: "userSpaceOnUse" }); for (let i = 0; i < e.length; i++) { const r = e[i], s = document.createElementNS(this._svgns, "stop"), h = "stop-color:" + this.adjustColor(t, r[1]); this.attr(s, { offset: r[0] + "%", style: h }), n.appendChild(s) } return this._defs.appendChild(n), this._gradients[s] = !0, s } }), JQX.Utilities.Assign("HTML5Renderer", class extends JQX.Utilities.Renderer { constructor(t) { super(t), this._renderers = new JQX.Utilities.HTML5RenderHelpers(this) } init(t) { try { this.host = t; const e = document.createElement("div"), i = document.createElement("canvas"); e.className = "chartContainer", e.style.position = "relative", e.onselectstart = function () { return !1 }, i.id = "__jqxCanvasWrap", i.style.width = "100%", i.style.height = "100%", e.appendChild(i), t.appendChild(e), this.canvas = i, i.width = t.offsetWidth, i.height = t.offsetHeight, this.ctx = i.getContext("2d"), this._elements = {}, this._maxId = 0, this._gradientId = 0, this._gradients = {}, this._currentPoint = { x: 0, y: 0 }, this._lastCmd = "", this._pos = 0 } catch (t) { return !1 } return !0 } getType() { return "HTML5" } getContainer() { return this.host.getElementsByClassName("chartContainer")[0] } getRect() { return { x: 0, y: 0, width: this.canvas.width - 1, height: this.canvas.height - 1 } } beginGroup() { } endGroup() { } setClip() { } createClipRect() { } addHandler() { } removeHandler() { } on(t, e, i) { this.addHandler(t, e, i) } off(t, e, i) { this.removeHandler(t, e, i) } clear() { this._elements = {}, this._maxId = 0, this._renderers._gradients = {}, this._gradientId = 0 } removeElement(t) { void 0 !== t && this._elements[t.id] && delete this._elements[t.id] } shape(t, e) { let i = { type: t, id: this._maxId++ }; for (let t in e) i[t] = e[t]; return this._elements[i.id] = i, i } attr(t, e) { for (let i in e) t[i] = e[i] } removeAttr(t, e) { for (let i in e) delete t[e[i]] } rect(t, e, i, r, s) { if (isNaN(t)) throw 'Invalid value for "x"'; if (isNaN(e)) throw 'Invalid value for "y"'; if (isNaN(i)) throw 'Invalid value for "width"'; if (isNaN(r)) throw 'Invalid value for "height"'; let n = this.shape("rect", { x: t, y: e, width: i, height: r }); return s && this.attr(n, s), n } path(t, e) { let i = this.shape("path", e); return this.attr(i, { d: t }), i } line(t, e, i, r, s) { return this.path("M " + t + "," + e + " L " + i + "," + r, s) } circle(t, e, i, r) { let s = this.shape("circle", { x: t, y: e, r: i }); return r && this.attr(s, r), s } pieslice(t, e, i, r, s, n, h, a) { let o = this.path(this.pieSlicePath(t, e, i, r, s, n, h), a); return this.attr(o, { x: t, y: e, innerRadius: i, outerRadius: r, angleFrom: s, angleTo: n }), o } _getCSSStyle(t) { const e = document.createElement("div"); e.className = t, e.style.position = "absolute", e.style.visibility = "hidden", this.host.appendChild(e); let i = window.getComputedStyle(e); return i = { color: i.color, fontFamily: i.fontFamily, fontSize: i.fontSize, fontWeight: i.fontWeight }, this.host.removeChild(e), i } _getTextParts(t, e, i) { let r = "Arial", s = "10pt", n = ""; if (i && i.class) { let t = this._getCSSStyle(i.class); t.fontSize && (s = t.fontSize), t.fontFamily && (r = t.fontFamily), t.fontWeight && (n = t.fontWeight) } this.ctx.font = n + " " + s + " " + r; let h = { width: 0, height: 0, parts: [] }, a = t.toString().split("<br>"); for (let t = 0; t < a.length; t++) { let e = a[t], i = this.ctx.measureText(e).width, r = document.createElement("span"); r.className = "chart", r.font = this.ctx.font, r.textContent = e, this.host.appendChild(r); let s = .6 * r.offsetHeight; this.host.removeChild(r), h.width = Math.max(h.width, this._rup(i)), h.height += s + (t > 0 ? 4 : 0), h.parts.push({ width: i, height: s, text: e }) } return h } _measureText(t, e, i, r) { return super.measureText(t, e, i, r) } measureText(t, e, i) { return this._measureText(t, e, i, !1) } text(t, e, i, r, s, n, h, a, o, l, d) { let c = this.shape("text", { text: t, x: e, y: i, width: r, height: s, angle: n, clip: a, halign: o, valign: l, rotateAround: d }); if (h && this.attr(c, h), c.fontFamily = "Arial", c.fontSize = "10pt", c.fontWeight = "", c.color = this._getContrastColor(arguments[11]), h && h.class) { let t = this._getCSSStyle(h.class); c.fontFamily = t.fontFamily || c.fontFamily, c.fontSize = t.fontSize || c.fontSize, c.fontWeight = t.fontWeight || c.fontWeight, c.color = c.color || t.color } c.color = c.color || "#000000"; let p = this._measureText(t, 0, h, !0); return this.attr(c, { textPartsInfo: p.textPartsInfo, textWidth: p.width, textHeight: p.height }), (r <= 0 || isNaN(r)) && this.attr(c, { width: p.width }), (s <= 0 || isNaN(s)) && this.attr(c, { height: p.height }), c } _toLinearGradient(t, e, i) { if (this._renderers._gradients[t]) return t; let r = []; for (let e = 0; e < i.length; e++)r.push({ percent: i[e][0] / 100, color: this.adjustColor(t, i[e][1]) }); let s = "gr" + this._gradientId++; return this.createGradient(s, e ? "vertical" : "horizontal", r), s } _toRadialGradient(t, e) { if (this._renderers._gradients[t]) return t; let i = []; for (let r = 0; r < e.length; r++)i.push({ percent: e[r][0] / 100, color: this.adjustColor(t, e[r][1]) }); let r = "gr" + this._gradientId++; return this.createGradient(r, "radial", i), r } createGradient(t, e, i) { this._renderers.createGradient(this, t, e, i) } refresh() { this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); for (let t in this._elements) { let e = this._elements[t]; this._renderers.setFillStyle(this, e), this._renderers.setStroke(this, e), this._renderers[this._elements[t].type](this.ctx, e) } } }), JQX.Utilities.Assign("HTML5RenderHelpers", class { constructor(t) { this.HTML5Renderer = t, this._cmds = "mlcazq" } ptrnd(t) { if (.5 === Math.abs(Math.round(t) - t)) return t; let e = Math.round(t); return e < t && (e -= 1), e + .5 } createGradient(t, e, i, r) { t._gradients[e] = { orientation: i, colorStops: r } } setStroke(t, e) { let i = t.ctx, r = e["stroke-width"]; i.strokeStyle = e.stroke || "transparent", i.lineWidth = 0 === r ? .01 : void 0 !== r ? r : 1, void 0 !== e["fill-opacity"] ? i.globalAlpha = e["fill-opacity"] : void 0 !== e.opacity ? i.globalAlpha = e.opacity : i.globalAlpha = 1, i.setLineDash && (e["stroke-dasharray"] ? i.setLineDash(e["stroke-dasharray"].split(",")) : i.setLineDash([])) } setFillStyle(t, e) { let i = t.ctx; if (i.fillStyle = "transparent", void 0 !== e["fill-opacity"] ? i.globalAlpha = e["fill-opacity"] : void 0 !== e.opacity ? i.globalAlpha = e.opacity : i.globalAlpha = 1, e.fill && -1 === e.fill.indexOf("#") && t._gradients[e.fill]) { let r, s = "horizontal" !== t._gradients[e.fill].orientation, n = "radial" === t._gradients[e.fill].orientation, h = this.ptrnd(e.x), a = this.ptrnd(e.y), o = this.ptrnd(e.x + (s ? 0 : e.width)), l = this.ptrnd(e.y + (s ? e.height : 0)); if (("circle" === e.type || "path" === e.type || "rect" === e.type) && n) { let t = this.ptrnd(e.x), s = this.ptrnd(e.y); const n = e.innerRadius || 0, h = e.outerRadius || e.r || 0; "rect" === e.type && (t += e.width / 2, s += e.height / 2), r = i.createRadialGradient(t, s, n, t, s, h) } n || ((isNaN(h) || isNaN(o) || isNaN(a) || isNaN(l)) && (h = 0, a = 0, o = s ? 0 : i.canvas.width, l = s ? i.canvas.height : 0), r = i.createLinearGradient(h, a, o, l)); let d = t._gradients[e.fill].colorStops; for (let t = 0; t < d.length; t++)r.addColorStop(d[t].percent, d[t].color); i.fillStyle = r } else e.fill && (i.fillStyle = e.fill) } rect(t, e) { 0 !== e.width && 0 !== e.height && (t.fillRect(this.ptrnd(e.x), this.ptrnd(e.y), e.width, e.height), t.strokeRect(this.ptrnd(e.x), this.ptrnd(e.y), e.width, e.height)) } circle(t, e) { 0 !== e.r && (t.beginPath(), t.arc(this.ptrnd(e.x), this.ptrnd(e.y), e.r, 0, 2 * Math.PI, !1), t.closePath(), t.fill(), t.stroke()) } _parsePoint(t) { return { x: this._parseNumber(t), y: this._parseNumber(t) } } _parseNumber(t) { let e, i = !1; for (e = this._pos; e < t.length; e++)if (t[e] >= "0" && t[e] <= "9" || "." === t[e] || "e" === t[e] || "-" === t[e] && !i || "-" === t[e] && e >= 1 && "e" === t[e - 1]) i = !0; else { if (i || " " !== t[e] && "," !== t[e]) break; this._pos++ } let r = parseFloat(t.substring(this._pos, e)); if (!isNaN(r)) return this._pos = e, r } _isRelativeCmd(t) { return -1 !== this._cmds.indexOf(t) } _parseCmd(t) { for (let e = this._pos; e < t.length; e++) { if (-1 !== this._cmds.toLowerCase().indexOf(t[e].toLowerCase())) return this._pos = e + 1, this._lastCmd = t[e], this._lastCmd; if (" " !== t[e]) { if (t[e] >= "0" && t[e] <= "9") { if (this._pos = e, "" === this._lastCmd) break; return this._lastCmd } } else this._pos++ } } _toAbsolutePoint(t) { return { x: this._currentPoint.x + t.x, y: this._currentPoint.y + t.y } } path(t, e) { let i, r = e.d; for (this._pos = 0, this._lastCmd = "", this._currentPoint = { x: 0, y: 0 }, t.beginPath(); this._pos < r.length;) { let e = this._parseCmd(r); if (void 0 === e) break; if ("M" !== e && "m" !== e) if ("L" !== e && "l" !== e) if ("A" !== e && "a" !== e) if ("Z" !== e && "z" !== e || void 0 === i) if ("C" !== e && "c" !== e) if ("Q" !== e && "q" !== e); else { let e = this._parsePoint(r), i = this._parsePoint(r); t.quadraticCurveTo(e.x, e.y, i.x, i.y), this._currentPoint = i } else { let e = this._parsePoint(r), i = this._parsePoint(r), s = this._parsePoint(r); t.bezierCurveTo(e.x, e.y, i.x, i.y, s.x, s.y), this._currentPoint = s } else t.lineTo(i.x, i.y), this._currentPoint = i; else { let i = this._parseNumber(r), s = this._parseNumber(r), n = this._parseNumber(r) * (Math.PI / 180), h = this._parseNumber(r), a = this._parseNumber(r), o = this._parsePoint(r); if (this._isRelativeCmd(e) && (o = this._toAbsolutePoint(o)), 0 === i || 0 === s) continue; let l = this._currentPoint, d = { x: Math.cos(n) * (l.x - o.x) / 2 + Math.sin(n) * (l.y - o.y) / 2, y: -Math.sin(n) * (l.x - o.x) / 2 + Math.cos(n) * (l.y - o.y) / 2 }, c = Math.pow(d.x, 2) / Math.pow(i, 2) + Math.pow(d.y, 2) / Math.pow(s, 2); c > 1 && (i *= Math.sqrt(c), s *= Math.sqrt(c)); let p = (h === a ? -1 : 1) * Math.sqrt((Math.pow(i, 2) * Math.pow(s, 2) - Math.pow(i, 2) * Math.pow(d.y, 2) - Math.pow(s, 2) * Math.pow(d.x, 2)) / (Math.pow(i, 2) * Math.pow(d.y, 2) + Math.pow(s, 2) * Math.pow(d.x, 2))); isNaN(p) && (p = 0); let u = { x: p * i * d.y / s, y: p * -s * d.x / i }, g = { x: (l.x + o.x) / 2 + Math.cos(n) * u.x - Math.sin(n) * u.y, y: (l.y + o.y) / 2 + Math.sin(n) * u.x + Math.cos(n) * u.y }, f = function (t) { return Math.sqrt(Math.pow(t[0], 2) + Math.pow(t[1], 2)) }, m = function (t, e) { return (t[0] * e[0] + t[1] * e[1]) / (f(t) * f(e)) }, _ = function (t, e) { return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(m(t, e)) }, x = _([1, 0], [(d.x - u.x) / i, (d.y - u.y) / s]), M = [(d.x - u.x) / i, (d.y - u.y) / s], y = [(-d.x - u.x) / i, (-d.y - u.y) / s], w = _(M, y); m(M, y) <= -1 && (w = Math.PI), m(M, y) >= 1 && (w = 0), 0 === a && w > 0 && (w -= 2 * Math.PI), 1 === a && w < 0 && (w += 2 * Math.PI); let N = i > s ? i : s, v = i > s ? 1 : i / s, b = i > s ? s / i : 1; t.translate(g.x, g.y), t.rotate(n), t.scale(v, b), t.arc(0, 0, N, x, x + w, 1 - a), t.scale(1 / v, 1 / b), t.rotate(-n), t.translate(-g.x, -g.y) } else { let e = this._parsePoint(r); if (void 0 === e) break; t.lineTo(e.x, e.y), this._currentPoint = e } else { let e = this._parsePoint(r); if (void 0 === e) break; t.moveTo(e.x, e.y), this._currentPoint = e, void 0 === i && (i = e) } } t.fill(), t.stroke(), t.closePath() } text(t, e) { let i = this.ptrnd(e.x), r = this.ptrnd(e.y), s = this.ptrnd(e.width), n = this.ptrnd(e.height), h = e.halign, a = e.valign, o = e.angle, l = e.rotateAround, d = e.textPartsInfo, c = d.parts, p = e.clip; void 0 === p && (p = !0), t.save(), h || (h = "center"), a || (a = "center"), p && (t.rect(i, r, s, n), t.clip()); let u = e.textWidth, g = e.textHeight, f = s || 0, m = n || 0; if (t.fillStyle = e.color, t.font = e.fontWeight + " " + e.fontSize + " " + e.fontFamily, !o || 0 === o) { r += g, "center" === a || "middle" === a ? r += (m - g) / 2 : "bottom" === a && (r += m - g), s || (s = u), n || (n = g); let e = 0; for (let s = c.length - 1; s >= 0; s--) { let n = c[s], a = i, o = c[s].width; "center" === h ? a += (f - o) / 2 : "right" === h && (a += f - o), t.fillText(n.text, a, r + e), e -= n.height + (s > 0 ? 4 : 0) } return void t.restore() } let _ = this.HTML5Renderer.alignTextInRect(i, r, s, n, u, g, h, a, o, l); i = _.x, r = _.y; let x = o * Math.PI * 2 / 360; t.translate(i, r), t.rotate(x); let M = 0, y = d.width; for (let e = c.length - 1; e >= 0; e--) { let i = 0; "center" === h ? i += (y - c[e].width) / 2 : "right" === h && (i += y - c[e].width), t.fillText(c[e].text, i, M), M -= c[e].height + 4 } t.restore() } }), JQX.Utilities.Assign("Plot", class { constructor(t) { this.renderer = t } get(t, e, i) { return void 0 !== i ? t[e][i] : t[e] } min(t, e) { let i = NaN; for (let r = 0; r < t.length; r++) { let s = this.get(t, r, e); (isNaN(i) || s < i) && (i = s) } return i } max(t, e) { let i = NaN; for (let r = 0; r < t.length; r++) { let s = this.get(t, r, e); (isNaN(i) || s > i) && (i = s) } return i } sum(t, e) { let i = 0; for (let r = 0; r < t.length; r++) { let s = this.get(t, r, e); isNaN(s) || (i += s) } return i } count(t, e) { let i = 0; for (let r = 0; r < t.length; r++) { let s = this.get(t, r, e); isNaN(s) || i++ } return i } avg(t, e) { return this.sum(t, e) / Math.max(1, this.count(t, e)) } filter(t, e) { if (!e) return t; let i = []; for (let r = 0; r < t.length; r++)e(t[r]) && i.push(t[r]); return i } scale(t, e, i, r) { if (isNaN(t)) return NaN; if ((t < Math.min(e.min, e.max) || t > Math.max(e.min, e.max)) && (!r || !0 !== r.ignore_range)) return NaN; let s = NaN, n = 1; if (void 0 === e.type || "logarithmic" !== e.type) { let i = Math.abs(e.max - e.min); i || (i = 1), n = Math.abs(t - Math.min(e.min, e.max)) / i } else if ("logarithmic" === e.type) { let i = e.base; isNaN(i) && (i = 10); let r = Math.min(e.min, e.max); r <= 0 && (r = 1); let s = Math.max(e.min, e.max); s <= 0 && (s = 1); let h = Math.log(s) / Math.log(i); s = Math.pow(i, h); let a = Math.log(r) / Math.log(i); r = Math.pow(i, a); let o = Math.log(t) / Math.log(i); n = Math.abs(o - a) / (h - a) } if ("logarithmic" === i.type) { let t = i.base; isNaN(t) && (t = 10); let e = Math.log(i.max) / Math.log(t), r = Math.log(i.min) / Math.log(t); i.flip && (n = 1 - n); let h = Math.min(r, e) + n * Math.abs(e - r); s = Math.pow(t, h) } else s = Math.min(i.min, i.max) + n * Math.abs(i.max - i.min), i.flip && (s = Math.max(i.min, i.max) - s + i.min); return s } axis(t, e, i) { if (i <= 1) return [e, t]; (isNaN(i) || i < 2) && (i = 2); let r = 0; for (; Math.round(t) !== t && Math.round(e) !== e && r < 10;)t *= 10, e *= 10, r++; let s = (e - t) / i; for (; r < 10 && Math.round(s) !== s;)t *= 10, e *= 10, s *= 10, r++; let n, h = [1, 2, 5], a = 0; for (; ;) { let t = a % h.length, e = Math.floor(a / h.length), i = Math.pow(10, e) * h[t]; if (t = (a + 1) % h.length, e = Math.floor((a + 1) / h.length), n = Math.pow(10, e) * h[t], s >= i && s < n) break; a++ } let o = n, l = [], d = this.renderer._rnd(t, o, !1), c = r <= 0 ? 1 : Math.pow(10, r); for (; d < e + o;)l.push(d / c), d += o; return l } });
|
|
54
|
+
|
|
55
|
+
/***/
|
|
56
|
+
}),
|
|
57
|
+
|
|
58
|
+
/***/ 7650:
|
|
59
|
+
/***/ (() => {
|
|
60
|
+
|
|
61
|
+
JQX("jqx-drop-down-list", class extends JQX.ContentElement { static get properties() { return { autoCloseDelay: { value: 100, type: "number" }, dataSource: { value: null, type: "any", reflectToAttribute: !1 }, displayLoadingIndicator: { value: !1, type: "boolean" }, displayMember: { value: "", type: "string" }, displayMode: { allowedValues: ["outlined", "filled", "underlined"], value: "outlined", type: "string" }, dropDownAppendTo: { value: null, type: "any" }, dropDownButtonPosition: { allowedValues: ["none", "left", "right", "top", "bottom"], value: "right", defaultReflectToAttribute: !0, type: "string" }, dropDownMinHeight: { value: "", type: "any", validator: "_propertyValidator" }, dropDownHeight: { value: "", type: "any", validator: "_propertyValidator" }, dropDownMaxHeight: { value: "", type: "any", validator: "_propertyValidator" }, dropDownOpenMode: { allowedValues: ["none", "default", "dropDownButton", "auto"], value: "default", type: "string" }, dropDownOverlay: { value: !1, type: "boolean" }, dropDownPlaceholder: { value: "No Items", type: "string" }, dropDownPosition: { allowedValues: ["auto", "top", "bottom", "overlay-top", "overlay-center", "overlay-bottom", "center-bottom", "center-top"], value: "auto", type: "string" }, dropDownMinWidth: { value: "", type: "any", validator: "_propertyValidator" }, dropDownWidth: { value: "", type: "any", validator: "_propertyValidator" }, dropDownMaxWidth: { value: "", type: "any", validator: "_propertyValidator" }, filterable: { value: !1, type: "boolean" }, filterInputPlaceholder: { value: "", type: "string" }, filterCallback: { value: null, type: "function?" }, filterMode: { value: "startsWithIgnoreCase", allowedValues: ["contains", "containsIgnoreCase", "doesNotContain", "doesNotContainIgnoreCase", "equals", "equalsIgnoreCase", "startsWith", "startsWithIgnoreCase", "endsWith", "endsWithIgnoreCase", "custom"], type: "string" }, grouped: { value: !1, type: "boolean" }, groupMember: { value: "", type: "string" }, hint: { value: "", type: "string" }, horizontalScrollBarVisibility: { type: "string", value: "auto", allowedValues: ["auto", "disabled", "hidden", "visible"] }, incrementalSearchDelay: { value: 700, type: "number?" }, incrementalSearchMode: { value: "startsWithIgnoreCase", allowedValues: ["contains", "containsIgnoreCase", "doesNotContain", "doesNotContainIgnoreCase", "equals", "equalsIgnoreCase", "startsWith", "startsWithIgnoreCase", "endsWith", "endsWithIgnoreCase"], type: "string" }, itemMeasureMode: { value: "auto", allowedValues: ["auto", "precise"], type: "string" }, inputMember: { value: "label", type: "string" }, itemTemplate: { value: null, type: "any" }, itemHeight: { value: null, type: "number?" }, label: { value: "", type: "string" }, loadingIndicatorPlaceholder: { value: "Loading...", type: "string" }, loadingIndicatorPosition: { value: "center", allowedValues: ["bottom", "center", "top"], type: "string" }, messages: { extend: !0, value: { en: { invalidNode: '{{elementType}}: Invalid parameter "{{node}}" when calling {{method}}.' } }, type: "object" }, name: { value: "", type: "string" }, opened: { value: !1, type: "boolean" }, placeholder: { value: "", type: "string" }, resizeMode: { value: "none", allowedValues: ["none", "horizontal", "vertical", "both"], type: "string" }, resizeIndicator: { value: !1, type: "boolean" }, selectionDisplayMode: { value: "plain", allowedValues: ["plain", "placeholder", "tokens"], type: "string" }, selectionMode: { value: "zeroAndOne", allowedValues: ["none", "oneOrManyExtended", "zeroOrMany", "oneOrMany", "zeroOrOne", "zeroAndOne", "one", "checkBox", "radioButton"], type: "string" }, selectedIndexes: { value: [], type: "array" }, selectedValues: { value: [], type: "array" }, sorted: { value: !1, type: "boolean" }, sortDirection: { value: "asc", type: "string" }, tokenTemplate: { value: null, type: "any" }, type: { value: "list", type: "string", defaultReflectToAttribute: !0, readonly: !0 }, valueMember: { value: "", type: "string" }, virtualized: { value: !1, type: "boolean" }, verticalScrollBarVisibility: { type: "string", value: "auto", allowedValues: ["auto", "disabled", "hidden", "visible"] } } } static get listeners() { return { "actionButton.down": "_buttonsDownHandler", "actionButton.mouseenter": "_buttonsMouseEventsHandler", "actionButton.mouseleave": "_buttonsMouseEventsHandler", "actionButton.focus": "_buttonsFocusHandler", "actionButton.blur": "_buttonsFocusHandler", "document.selectstart": "_selectStartHandler", "document.dragstart": "_dragStartHandler", "document.down": "_documentDownHandler", "document.up": "_documentUpHandler", "document.move": "_documentMoveHandler", "dropDownButton.down": "_buttonsDownHandler", "dropDownButton.mouseenter": "_buttonsMouseEventsHandler", "dropDownButton.mouseleave": "_buttonsMouseEventsHandler", keydown: "_keyDownHandler", keyup: "_keyUpHandler", focus: "_focusEventHandler", blur: "_blurEventHandler", "dropDownButton.focus": "_buttonsFocusHandler", "dropDownButton.blur": "_buttonsFocusHandler", "dropDownContainer.transitionend": "_dropDownTransitionendHandler", "listBox.change": "_listBoxChangeHandler", "listBox.itemClick": "_listBoxItemClickHandler", "listBox.keydown": "_listBoxKeyDownHandler", "listBox.bindingComplete": "_bindingCompleteHandler", mouseenter: "_mouseEnterHandler", mouseleave: "_mouseLeaveHandler", resize: "_resizeHandler", "resizeBar.move": "_resizeBarMoveHandler", styleChanged: "_styleChangedHandler", wheel: "_mouseWheelHandler" } } template() { return '<div id="container" role="presentation">\n <span class="jqx-label" id="label">[[label]]</span>\n <div id="content" class="jqx-content" role="presentation">\n <div class="jqx-buttons-container" id="buttonsContainer" role="presentation">\n <span id="actionButton" class ="jqx-action-button" role="presentation">[[placeholder]]</span>\n <span id="dropDownButton" class="jqx-drop-down-button">\n <span class ="jqx-drop-down-button-icon" id="arrow" aria-hidden="true"></span>\n </span>\n </div>\n <div id="dropDownContainer" class="jqx-drop-down jqx-drop-down-container jqx-visibility-hidden" role="presentation">\n <jqx-list-box id="listBox" unfocusable\n animation="[[animation]]"\n data-source="[[dataSource]]"\n disabled="[[disabled]]"\n display-loading-indicator="[[displayLoadingIndicator]]"\n display-member="[[displayMember]]"\n filterable="[[filterable]]"\n filter-callback="[[filterCallback]]"\n filter-mode="[[filterMode]]"\n filter-input-placeholder="[[filterInputPlaceholder]]"\n grouped="[[grouped]]"\n group-member="[[groupMember]]"\n item-height="[[itemHeight]]"\n item-measure-mode="[[itemMeasureMode]]"\n item-template="[[itemTemplate]]"\n incremental-search-delay="[[incrementalSearchDelay]]"\n incremental-search-mode="[[incrementalSearchMode]]"\n loading-indicator-placeholder="[[loadingIndicatorPlaceholder]]"\n loading-indicator-position="[[loadingIndicatorPosition]]"\n name="[[name]]"\n placeholder="[[dropDownPlaceholder]]"\n right-to-left="[[rightToLeft]]"\n readonly="[[readonly]]"\n selected-indexes="{{selectedIndexes}}"\n selection-mode="[[selectionMode]]"\n selected-values="{{selectedValues}}"\n sorted="[[sorted]]"\n sort-direction="[[sortDirection]]"\n theme="[[theme]]"\n value-member="[[valueMember]]"\n horizontal-scroll-bar-visibility="[[horizontalScrollBarVisibility]]"\n vertical-scroll-bar-visibility="[[verticalScrollBarVisibility]]"\n virtualized="[[virtualized]]">\n <content></content>\n </jqx-list-box>\n <div id="resizeBar" class="jqx-drop-down-resize-bar" aria-label="Resize">\n <div></div>\n </div>\n </div>\n </div>\n <span class="jqx-hint jqx-hidden" id="hint">[[hint]]</span>\n <input id="hiddenInput" type="hidden" name="[[name]]">\n </div>' } static get styleUrls() { return ["jqx.dropdownlist.css", "jqx.dropdown.css"] } propertyChangedHandler(e, t, o) { super.propertyChangedHandler(e, t, o); const n = this; switch (e) { case "animation": n.$.dropDownContainer.setAttribute("animation", n.animation); break; case "disabled": n._setFocusable(), n.close(), n._positionDetection.handleAutoPositioning(); break; case "dataSource": case "displayMember": case "inputMember": n.$.actionButton && (n.$.actionButton.innerHTML = n.placeholder), n._setDropDownSize(), n._positionDetection.checkBrowserBounds("vertically"), n._positionDetection.positionDropDown(), n._positionDetection.checkBrowserBounds("horizontally"); break; case "dropDownAppendTo": n._positionDetection.dropDownAppendToChangedHandler(); break; case "dropDownOpenMode": n._setFocusable(), n.$dropDownContainer.addClass("jqx-visibility-hidden"), n.$.dropDownContainer.setAttribute("drop-down-open-mode", o), n.$.dropDownButton.removeAttribute("selected"), n.removeAttribute("drop-down-button-focus"), n.removeAttribute("action-button-focus"), n.opened = !1, n._ariaButton && n._ariaButton.setAttribute("aria-expanded", !1), n._setAriaRelations(); break; case "dropDownOverlay": o || n._positionDetection.removeOverlay(); break; case "dropDownPosition": n._positionDetection.dropDownPositionChangedHandler(); break; case "dropDownMinWidth": case "dropDownWidth": case "dropDownMaxWidth": case "dropDownHeight": case "dropDownMinHeight": case "dropDownMaxHeight": n._setDropDownSize(); break; case "filterable": n.$.listBox.filterable = o, n._dropDownSize && "auto" === n._dropDownSize.height && n._setDropDownSize(); break; case "label": if (!n._ariaButton) return; o ? n._ariaButton.setAttribute("aria-labelledby", n.$.label.id) : "DropDownList" === n.elementName && n._ariaButton.setAttribute("aria-labelledby", n.$.actionButton.id); break; case "opened": if (n.disabled || n.readonly) return; o ? n.open() : n.close(); break; case "placeholder": case "selectionDisplayMode": n._applySelection(); break; case "readonly": n.close(); break; case "resizeIndicator": o ? n.$.dropDownContainer.setAttribute("resize-indicator", "") : n.$.dropDownContainer.removeAttribute("resize-indicator"); break; case "resizeMode": n.$.dropDownContainer.setAttribute("resize-mode", n.resizeMode); break; case "selectedValues": case "selectedIndexes": 0 === o.length ? n.$.actionButton.innerHTML = n.placeholder : n._applySelection(), n.$.hiddenInput.value = n.selectedValues.toString(); break; case "selectionMode": n.$.listBox && (n.$.listBox[e] = o, "checkBox" !== o && "radioButton" !== o && "checkBox" !== t && "radioButton" !== t || n._setDropDownSize()); break; case "tokenTemplate": n._tokenTemplate = n._validateTemplate(n.tokenTemplate), n._applySelection(); break; case "unfocusable": n._setFocusable() } } _updateTargetValue() { const e = this; if (e.dataset.target) { const t = document.querySelector(e.dataset.target); if (t) { const o = e.dataset.property, n = e.value; o && void 0 !== t[o] && (t[o] = n) } } } appendChild(e) { const t = this; if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e ? (t.$.listBox.appendChild(e), t._dropDownSize && "auto" === t._dropDownSize.height && t._setDropDownSize()) : t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "appendChild", node: "node" })) } attached() { const e = this; super.attached(), e.isCompleted && e.$.dropDownContainer && (e._positionDetection.dropDownAttached("_setDropDownSize"), e._positionDetection.checkBrowserBounds(), e.selectedIndexes && e._applySelection()) } detached() { const e = this; super.detached(), e.$.dropDownContainer && (e.close(), e._positionDetection && e._positionDetection.dropDownDetached()) } clearItems() { const e = this; e.$.listBox && (e.$.listBox.clearItems(), e.$.actionButton.innerHTML = e.placeholder) } clearSelection() { const e = this; e.$.listBox && (e.$.listBox.clearSelection(), e.$.actionButton.innerHTML = e.placeholder) } close() { const e = this; e.$dropDownContainer.hasClass("jqx-visibility-hidden") || e.$.fireEvent("closing").defaultPrevented || (e.$dropDownContainer.addClass("jqx-visibility-hidden"), e.$.fireEvent("close"), e.$.dropDownButton && e.$.dropDownButton.removeAttribute("selected"), e.opened = !1, e._ariaButton && e._ariaButton.setAttribute("aria-expanded", !1), e._preventDropDownClose = !1, e._positionDetection.removeOverlay(!0), e.$.listBox.removeAttribute("focus"), e._edgeMacFF && !e.hasAnimation && e.$.dropDownContainer && (e.$.dropDownContainer.style.top = e.$.dropDownContainer.style.left = "", e.$dropDownContainer.addClass("not-in-view"))) } cloneNode() { const e = this; if (!e.$.listBox) return; let t = HTMLElement.prototype.cloneNode.apply(e, Array.prototype.slice.call(arguments, 0, 1)); return t.dataSource = e.dataSource, t } ensureVisible(e) { this.$.listBox && this.$.listBox.ensureVisible(e) } getItem(e) { if (this.$.listBox) return this.$.listBox.getItem(e) } get items() { const e = this; return e.$ && e.$.listBox ? e.$.listBox.items : [] } get _focusedItem() { const e = this; return e.$ && e.$.listBox ? e.$.listBox._focusedItem : null } insert(e, t) { const o = this; o.$.listBox && (o.$.listBox.insert(e, t), o._applySelection(), o._dropDownSize && "auto" === o._dropDownSize.height && o._setDropDownSize()) } insertBefore(e, t) { const o = this; if (!o.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.insertBefore.apply(o, e.concat(Array.prototype.slice.call(arguments))) } e && t ? o.$.listBox && (o.$.listBox.insertBefore(e, t), o._dropDownSize && "auto" === o._dropDownSize.height && o._setDropDownSize()) : o.error(o.localize("invalidNode", { elementType: o.nodeName.toLowerCase(), method: "insertBefore", node: "newNode/referenceNode" })) } toggle() { const e = this; e.opened ? e.close() : e.open() } open() { const e = this, t = function () { for (let t = 0; t < e.items.length; t++)if (!e.items[t].disabled) return e.items[t] }; if (!e.disabled && e.offsetHeight && e.$dropDownContainer.hasClass("jqx-visibility-hidden")) { if (e.$dropDownContainer.hasClass("not-in-view") && e.$dropDownContainer.removeClass("not-in-view"), e.$.dropDownContainer.style.transition = null, e.dropDownAppendTo) { const t = e.getBoundingClientRect(); if (e.$.container.contains(e.$.dropDownContainer)) { let t = 0; const o = setInterval((function () { const n = e.getBoundingClientRect(); t++, n.top === e._positionTop && t < 10 || (e.open(), clearInterval(o), e._positionTop = n.top) }), 100); return } t.top !== e._positionTop && (e._positionTop = t.top) } e.$.fireEvent("opening").defaultPrevented || (e._shadowDOMStylesDelay && (e._setDropDownSize(), delete e._shadowDOMStylesDelay), e.opened = !0, e._ariaButton && e._ariaButton.setAttribute("aria-expanded", !0), e.$.listBox.setAttribute("focus", ""), e._positionDetection.placeOverlay(), e._positionDetection.checkBrowserBounds("vertically"), e._positionDetection.positionDropDown(), e._positionDetection.checkBrowserBounds("horizontally"), e.$dropDownContainer.removeClass("jqx-visibility-hidden"), e.$.fireEvent("open"), e.$.dropDownButton && ("dropDownButton" === e.dropDownOpenMode ? e.$.dropDownButton.setAttribute("selected", "") : e.$.dropDownButton.removeAttribute("selected")), (e.$.listBox && !e._focusedItem || e._focusedItem && !e._focusedItem._focused) && (e.selectedIndexes.length > 0 ? e._focus(e.items[e.selectedIndexes[0]]) : e._focus(t)), e.$.input && !JQX.Utilities.Core.isMobile && e.$.input.focus()) } } ready() { super.ready() } render() { const e = this; e.rightToLeft && (e.dropDownButtonPosition = "right" === e.dropDownButtonPosition ? "left" : "right"), e.classList.add("jqx-drop-down-box"), e.$.dropDownContainer && (e._positionDetection = new JQX.Utilities.PositionDetection(e, e.$.dropDownContainer, e.$.container, "close"), e._positionDetection.getDropDownParent(!0), e._positionDetection.setDropDownPosition(), e._calculateDropDownSize(), e.$.dropDownContainer.setAttribute("resize-mode", e.resizeMode), e.$.dropDownContainer.setAttribute("drop-down-open-mode", e.dropDownOpenMode), e.resizeIndicator && e.$.dropDownContainer.setAttribute("resize-indicator", ""), e._positionDetection.handleAutoPositioning()), e.opened && e.open(), e._positionTop = e.getBoundingClientRect().top, e._edgeMacFF = JQX.Utilities.Core.Browser.Edge || JQX.Utilities.Core.Browser.Firefox && -1 !== navigator.platform.toLowerCase().indexOf("mac"), e._edgeMacFF && e.hasAnimation && e.$.dropDownContainer && e.$dropDownContainer.addClass("not-in-view"), e.$.label && !e.$.label.id && (e.$.label.id = e.id + "Label"), e.$.actionButton && !e.$.actionButton.id && (e.$.actionButton.id = e.id + "ActionButton"), e.$.hint && !e.$.hint.id && (e.$.hint.id = e.id + "Hint"), e._createElement(), super.render() } removeAt(e) { const t = this; t.$.listBox && (t.$.listBox.removeAt(e), t._applySelection(), t._dropDownSize && "auto" === t._dropDownSize.height && t._setDropDownSize()) } removeChild(e) { const t = this; if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.removeChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e && e instanceof JQX.ListItem ? (t.$.listBox.removeChild(e), t._dropDownSize && "auto" === t._dropDownSize.height && t._setDropDownSize()) : t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "removeChild", node: "node" })) } get value() { const e = this; return e.isRendered && e.$.listBox ? e.$.listBox.value : null } set value(e) { const t = this; return t.isRendered && t.$.listBox ? void (t.$.listBox.value = e) : null } select(e) { this.$.listBox && this.$.listBox.select(e) } _setFocusable() { const e = this; if (e.disabled || e.unfocusable) return e.removeAttribute("tabindex"), e.$.actionButton.removeAttribute("tabindex"), void e.$.dropDownButton.removeAttribute("tabindex"); let t = e.tabIndex > 0 ? e.tabIndex : 0; e.tabIndex = t, "dropDownButton" === e.dropDownOpenMode ? (e.removeAttribute("tabindex"), e.$.actionButton.setAttribute("tabindex", t), e.$.dropDownButton.setAttribute("tabindex", t)) : (e.$.actionButton.removeAttribute("tabindex"), e.$.dropDownButton.removeAttribute("tabindex")) } static get requires() { return { "JQX.ListBox": "jqx.listbox.js" } } unselect(e) { this.$.listBox && this.$.listBox.unselect(e) } update(e, t) { const o = this; o.$.listBox && (o.$.listBox.update(e, t), o._applySelection()) } _resizeBarMoveHandler(e) { "touchmove" === e.originalEvent.type && e.originalEvent.preventDefault() } _createToken() { const e = this; let t, o = !1; const n = document.createDocumentFragment(), i = e.selectedIndexes[e.selectedIndexes.length - 1]; "plain" !== e.selectionDisplayMode || "one" !== e.selectionMode && "zeroAndOne" !== e.selectionMode && "zeroOrOne" !== e.selectionMode && "radioButton" !== e.selectionMode ? "tokens" === e.selectionDisplayMode ? 1 === e.selectedIndexes.length && ["oneOrManyExtended", "oneOrMany", "zeroAndOne", "one", "radioButton"].indexOf(e.selectionMode) > -1 ? t = "" : (t = "✖", o = !0) : t = 1 === e.selectedIndexes.length ? "" : "," : t = ""; const r = e.selectedIndexes, a = e.$.listBox._items; for (let s = 0; s < r.length; s++) { const l = r[s]; a[l] && n.appendChild(e._applyTokenTemplate(a[l][e.inputMember], "tokens" !== e.selectionDisplayMode && l === i ? "" : t, o)) } return n } _applySelection() { const e = this; if ("placeholder" !== e.selectionDisplayMode && 0 !== e.selectedIndexes.length) { if (e.$.listBox._items && 0 !== e.$.listBox._items.length) { if ("plain" === e.selectionDisplayMode) { const t = e.$.listBox.selectedIndexes, o = e.$.listBox._items; let n = []; for (let i = 0; i < t.length; i++) { const r = t[i]; o[r] && n.push(o[r][e.inputMember]) } return e.$.actionButton.innerHTML = n.length ? `<span class="jqx-token">${n.join(", ").trim()}</span>` : "", void (e.$.hiddenInput.value = e.selectedValues.toString()) } e.$.actionButton.innerHTML = "", e.$.actionButton.appendChild(e._createToken()), e.$.hiddenInput.value = e.selectedValues.toString() } } else e.$.actionButton.innerHTML = e.placeholder } _applyTokenTemplate(e, t, o) { const n = this, i = document.createElement("span"), r = function () { return "<span class='jqx-drop-down-list-selection-label' role=\"presentation\">" + e + `</span><span class='jqx-drop-down-list-unselect-button' role="button"${o ? ' aria-label="Unselect"' : ""}>${t}</span>` }; if (i.classList.add("jqx-token"), n._tokenTemplate) { let e = document.importNode(n._tokenTemplate.content, !0); const t = e.childNodes.length, o = /{{\w+}}/g; let a; for (let n = 0; n < t; n++)a = o.exec(e.childNodes[n].innerHTML), a && (e.childNodes[n].innerHTML = e.childNodes[n].innerHTML.replace(a[0], r())), e.childNodes[n].outerHTML && (i.innerHTML += e.childNodes[n].outerHTML) } else "function" == typeof n.tokenTemplate ? n.tokenTemplate(i, { label: e, iconSeparator: t }) : i.innerHTML = r(); return i } _bindingCompleteHandler() { const e = this; e.$.listBox && requestAnimationFrame((() => { e._setDropDownSize(), e._positionDetection.checkBrowserBounds() })) } _buttonsDownHandler(e) { const t = this; if (!t.disabled) { if (t.hasRippleAnimation) if (t.$.buttonsContainer && "dropDownButton" !== t.dropDownOpenMode) { const o = t.$.buttonsContainer; o.firstElementChild.noRipple = !0, JQX.Utilities.Animation.Ripple.animate(o, e.pageX, e.pageY), o.firstElementChild.noRipple = !1 } else JQX.Utilities.Animation.Ripple.animate(e.target, e.pageX, e.pageY); t._preventsSelectStart = !0, t.tagName.toLowerCase().indexOf("jqx-drop-down-") > -1 && "dropDownButton" === t.dropDownOpenMode && e.target === t.$.actionButton && t.$.actionButton.setAttribute("active", ""), t.opened && (t._preventDropDownClose = !0) } } _buttonsMouseEventsHandler(e) { const t = this; t.disabled || ("mouseenter" === e.type ? (t.setAttribute("hover", ""), e.target.setAttribute("hover", ""), "dropDownButton" === t.dropDownOpenMode && e.target === t.$.dropDownButton && t.setAttribute("drop-down-button-hover", "")) : (t.removeAttribute("hover"), t.removeAttribute("drop-down-button-hover"), e.target.removeAttribute("hover"))) } _calculateDropDownSize() { const e = this; e._dropDownSize = {}; const t = window.getComputedStyle(e.$.dropDownContainer), o = parseFloat(t.getPropertyValue("border-top-width").trim()), n = parseFloat(t.getPropertyValue("border-bottom-width").trim()), i = parseFloat(t.getPropertyValue("margin-top").trim()), r = parseFloat(t.getPropertyValue("margin-bottom").trim()), a = parseFloat(t.getPropertyValue("padding-top").trim()), s = parseFloat(t.getPropertyValue("padding-bottom").trim()); JQX.Utilities.Core.CSSVariablesSupport() && (e._dropDownSize.width = t.getPropertyValue("--jqx-drop-down-list-drop-down-width").trim(), e._dropDownSize.height = t.getPropertyValue("--jqx-drop-down-list-drop-down-height").trim()), (!e._dropDownSize.width || e._dropDownSize.width.indexOf("initial") > -1) && (e._dropDownSize.width = e.offsetWidth), e._dropDownSize.height || (e._dropDownSize.height = "auto"), e._dropDownSize.minHeight = parseFloat(t.getPropertyValue("min-height").trim()), e._dropDownSize.maxHeight = parseFloat(t.getPropertyValue("max-height").trim()), e._dropDownSize.borderWidth = (isNaN(o) ? 0 : o) + (isNaN(n) ? 0 : n), e._dropDownSize.paddingWidth = (isNaN(a) ? 0 : a) + (isNaN(s) ? 0 : s), e._dropDownSize.marginWidth = (isNaN(i) ? 0 : i) + (isNaN(r) ? 0 : r) } _createElement() { const e = this; e._tokenTemplate = e._validateTemplate(e.tokenTemplate), e._applySelection(), e._setDropDownSize(), e._setFocusable(), e.$.arrow.noRipple = !0, e._shadowDOMStylesDelay = e.shadowRoot, e._setAriaRelations(!0) } _documentDownHandler(e) { const t = this; if (t.disabled || t.readonly) return; let o = e.originalEvent.target; if (o === t._overlay && (t._overlayDown = !0), t.shadowRoot) { o = e.originalEvent.composedPath()[0]; let n = o.getRootNode().host; for (; n;)n.closest(".jqx-drop-down-container") === t.$.dropDownContainer && (t._isDropDownClicked = !0), n = n.getRootNode().host } else t.isInShadowDOM && (o = e.originalEvent.composedPath()[0]), t._isDropDownClicked = o.closest(".jqx-drop-down-container") === t.$.dropDownContainer; if (t._buttonClicked = o.closest(".jqx-action-button") || o.closest(".jqx-drop-down-button"), t.$.listBox) { let n = o.closest("jqx-list-item"); t.$.listBox.contains(n) || (n = void 0), t.hasRippleAnimation && n && JQX.Utilities.Animation.Ripple.animate(n, e.pageX, e.pageY), (n || o === t.$.listBox.$.filterInput || o.closest(".jqx-token")) && (t._preventDropDownClose = !0) } if (t._isDropDownClicked && (t._preventDropDownClose = !0), o !== t.$.resizeBar || "none" === t.resizeMode) return; t._resizeDetails || (t._resizeDetails = {}); const n = t.$.dropDownContainer.getBoundingClientRect(); t._resizeDetails.started = !0, t._resizeDetails.x = e.pageX, t._resizeDetails.y = e.pageY, t._resizeDetails.width = t.$.dropDownContainer.offsetWidth, t._resizeDetails.height = t.$.dropDownContainer.offsetHeight, t._resizeDetails.offsetXL = e.clientX - n.left, t._resizeDetails.offsetXR = n.left + t.$.dropDownContainer.offsetWidth - e.clientX, t._resizeDetails.offsetY = n.top + t.$.dropDownContainer.offsetHeight - e.clientY, t._resizeDetails.offsetYtop = e.clientY - n.top, t._preventDropDownClose = !0 } _documentMoveHandler(e) { const t = this, o = t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; if ("auto" === t.dropDownOpenMode && null !== t.dropDownAppendTo && (t.contains(o) || t.$.dropDownContainer.contains(o) ? t._isElementHovered = !0 : (t._isElementHovered = !1, t._autoClose())), !t._resizeDetails || t._resizeDetails && !t._resizeDetails.started) return; t.setAttribute("resizing", ""), t._resizeDetails.resizeEventFired || (t.$.fireEvent("resizeStart", { position: { left: e.pageX, top: e.pageY } }), t._resizeDetails.resizeEventFired = !0); const n = document.documentElement, i = t.$.dropDownContainer.getBoundingClientRect(), r = t.getBoundingClientRect(), a = t.$.dropDownContainer.hasAttribute("top") ? "top" : "bottom"; let s; function l() { if (s = e.pageY - t._resizeDetails.y, "bottom" === a) t._resizeDetails.height = Math.min(n.clientHeight - i.top - 6, Math.max(0, t._resizeDetails.height + s)), t._resizeDetails.y = Math.max(i.top + n.scrollTop - t._resizeDetails.offsetY, Math.min(n.clientHeight + n.scrollTop - 1.5 * t._resizeDetails.offsetY, e.pageY)); else { if (t._resizeDetails.height = Math.min(t._dropDownSize.maxHeight, Math.max(0, Math.min(r.top, t._resizeDetails.height - s))), s = Math.max(0, i.top + (i.height - Math.max(t._dropDownSize.minHeight, t._resizeDetails.height))), t.dropDownAppendTo) { const e = Math.abs(parseFloat(getComputedStyle(t.$.dropDownContainer).getPropertyValue("margin-bottom"))) || 0; t.$.dropDownContainer.style.top = t.dropDownAppendTo ? e + s + "px" : "" } const o = r.top + n.scrollTop + t._resizeDetails.offsetYtop; t._resizeDetails.y = Math.max(t._resizeDetails.offsetYtop, Math.min(o, Math.max(o - t._dropDownSize.maxHeight, e.pageY))) } t.$.dropDownContainer.style.height = t._resizeDetails.height + "px" } function d() { s = e.pageX - t._resizeDetails.x, t._resizeDetails.width = Math.min(n.clientWidth - i.left - 6, Math.max(0, t._resizeDetails.width + s)), t.$.dropDownContainer.style.width = t._resizeDetails.width + "px", t._resizeDetails.x = Math.max(i.left + n.scrollLeft - t._resizeDetails.offsetXR, Math.min(n.clientWidth + n.scrollLeft - 1.5 * t._resizeDetails.offsetXR, e.pageX)) } switch (t.resizeMode) { case "vertical": l(); break; case "horizontal": d(); break; case "both": d(), l() } } _documentUpHandler(e) { const t = this; if (t.$.actionButton.removeAttribute("active"), t._resizeDetails && t._resizeDetails.started) return t._resizeDetails.started = t._resizeDetails.resizeEventFired = !1, t.removeAttribute("resizing"), t._preventDropDownClose = !1, t.focus(), void t.$.fireEvent("resizeEnd", { position: { left: e.pageX, top: e.pageY } }); if (t.disabled || t._isDropDownClicked || t.readonly) return void delete t._isDropDownClicked; if (t._overlayDown) return t.close(), void delete t._overlayDown; let o = e.originalEvent.target, n = o.closest ? o.closest("jqx-drop-down-list") : void 0; if ((t.enableShadowDOM || t.isInShadowDOM) && (o = e.originalEvent.composedPath()[0], n = o.getRootNode().host), t._preventsSelectStart = !1, void 0 === o || o === t.$.resizeBar) return; if ("tokens" === t.selectionDisplayMode && o.classList.contains("jqx-drop-down-list-selection-label") && n === t) { "none" !== t.dropDownOpenMode && t.open(); let e = t.$.listBox._items.filter((e => e[t.inputMember].toString() === o.textContent))[0]; return t.$.listBox._scrollView.scrollTop = e.offsetTop, void t._focus(e) } if ("tokens" === t.selectionDisplayMode && o.classList.contains("jqx-drop-down-list-unselect-button") && n === t) { if (1 === t.selectedIndexes.length && ["zeroOrMany", "zeroOrOne", "checkBox"].indexOf(t.selectionMode) < 0) return; return void t.unselect(t.$.listBox._items.filter((e => e[t.inputMember].toString() === o.previousElementSibling.textContent))[0]) } const i = !(!o || !o.closest) && o.closest(".jqx-action-button"); let r; if (t._buttonClicked && ("dropDownButton" === t.dropDownOpenMode && i && t._buttonClicked === t.$.actionButton ? t.$.fireEvent("actionButtonClick") : o.closest(".jqx-drop-down-button") !== t._buttonClicked && i !== t._buttonClicked || (r = !0, t.$.fireEvent("dropDownButtonClick"))), t._buttonClicked = void 0, i === t.$.actionButton || o && o.closest && o.closest(".jqx-drop-down-button") === t.$.dropDownButton) return "dropDownButton" === t.dropDownOpenMode && i === t.$.actionButton ? void t.close() : void (t.$dropDownContainer.hasClass("jqx-visibility-hidden") && "none" !== t.dropDownOpenMode && r && "pointercancel" !== e.originalEvent.type ? t.open() : t.close()); o = t._getUpEventTarget(o), void 0 !== o && ("dropDownContainer" !== o && "item" !== o || "item" === o && "checkBox" !== t.selectionMode && t.selectionMode.indexOf("Many") < 0) && t.close() } _dragStartHandler(e) { this._resizeDetails && this._resizeDetails.started && e.preventDefault() } _dropDownTransitionendHandler() { const e = this; e._edgeMacFF && !e.opened && e.hasAnimation && (e.$.dropDownContainer.style.top = e.$.dropDownContainer.style.left = "", e.$dropDownContainer.addClass("not-in-view")) } _focus(e) { this.$.listBox._focus(e) } _blurEventHandler() { const e = this; e.$.dropDownButton && (e.removeAttribute("focus"), e.$.dropDownButton.removeAttribute("focus")), e.$.actionButton && (e.removeAttribute("focus"), e.$.actionButton.removeAttribute("focus")), e.nodeName && "jqx-drop-down-list" === e.nodeName.toLowerCase() && !e._preventDropDownClose && e.close() } _focusEventHandler() { const e = this; e.$.dropDownButton && (e.setAttribute("focus", ""), e.$.dropDownButton.setAttribute("focus", "")), e.$.actionButton && (e.setAttribute("focus", ""), e.$.actionButton.setAttribute("focus", "")), e.removeAttribute("drop-down-button-focus"), e.removeAttribute("action-button-focus") } _buttonsFocusHandler(e) { const t = this; e.target === t.$.dropDownButton ? "focus" === e.type ? t.setAttribute("drop-down-button-focus", "") : (t.removeAttribute("drop-down-button-focus"), t.nodeName && "jqx-drop-down-list" === t.nodeName.toLowerCase() && !t._preventDropDownClose && t.close()) : "focus" === e.type ? t.setAttribute("action-button-focus", "") : t.removeAttribute("action-button-focus") } _getUpEventTarget(e) { const t = this; let o = e; for (o = void 0 === o.parentElement ? o.getRootNode().host : o.parentElement; o;) { if (o === t.$.dropDownContainer) { o = "dropDownContainer"; break } o = void 0 === o.parentElement ? o.getRootNode().host : o.parentElement } return o } _keyDownHandler(e) { const t = this, o = t.enableShadowDOM && t.shadowRoot.activeElement || document.activeElement, n = t.enableShadowDOM ? e.composedPath()[0] : e.target; if (!(t.$.listBox && n === t.$.listBox.$.filterInput || o !== t && o !== t.$.dropDownButton && o !== t.$.actionButton) || "Tab" === e.key) switch (e.key) { case "Tab": if (t.filterable && t.opened) { const o = function () { for (let e = 0; e < t.items.length; e++)if (!t.items[e].disabled) return t.items[e] }; t.$.listBox.$.filterInput && !JQX.Utilities.Core.isMobile && document.activeElement !== t.$.listBox.$.filterInput ? (t.$.listBox.$.filterInput.focus(), t._preventDropDownClose = !0) : t.$.listBox && (t.focus(), t.selectedIndexes.length > 0 ? t._focus(t.items[t.selectedIndexes[0]]) : t._focus(o), t._preventDropDownClose = !0), e.preventDefault() } break; case "Enter": case " ": e.preventDefault(), n !== t.$.actionButton && (t._keyPressed = !0, t.opened ? (t._focusedItem && t.select(t._focusedItem), ("Enter" === e.key && ["none"].indexOf(t.selectionMode) < 0 || " " === e.key && ["none", "zeroAndOne", "one", "radioButton"].indexOf(t.selectionMode) > -1) && t.close()) : t.opened || t.readonly || "none" === t.dropDownOpenMode || t.open()), "dropDownButton" === t.dropDownOpenMode && n.setAttribute("active", ""); break; case "End": case "Home": case "PageUp": case "PageDown": case "ArrowUp": case "ArrowDown": if (t.readonly) return; if (e.altKey) return t._keyPressed = !1, void (t.$dropDownContainer.hasClass("jqx-visibility-hidden") ? t.open() : t.close()); e.preventDefault(), t.$.listBox._handleKeyStrokes(e.key); break; case "Escape": e.preventDefault(), t.close(); break; default: if (t.readonly) return; "oneOrManyExtended" === t.selectionMode && (t.$.listBox._keysPressed[e.key] = !0), t.$.listBox._applyIncrementalSearch(e.key) } } _keyUpHandler(e) { const t = this, o = t.enableShadowDOM ? e.composedPath()[0] : e.target; t.$.listBox && o === t.$.listBox.$.filterInput || ("Enter" !== e.key && " " !== e.key || (o.removeAttribute("active"), t.$dropDownContainer.hasClass("jqx-visibility-hidden") || (t._keyPressed = !1)), t.$.listBox && "oneOrManyExtended" === t.selectionMode && (t.$.listBox._keysPressed[e.key] = !1)) } _listBoxChangeHandler(e) { const t = this; if (e.target === t.$.listBox) { if ((t.dropDownAppendTo || t.enableShadowDOM) && t.$.fireEvent("change", e.detail), "list" === t.autoComplete && e.detail) { const o = t.$.listBox._items[e.detail.index]; t._lastSelectedItem = o && o.selected ? o : void 0 } t._applySelection(t.selectionMode, e.detail), t._updateTargetValue() } else e.stopPropagation() } _listBoxItemClickHandler(e) { const t = this; (t.dropDownAppendTo || t.enableShadowDOM) && t.$.fireEvent(e.type, e.detail), "checkBox" !== t.selectionMode && t.selectionMode.indexOf("Many") < 0 && t.close(), JQX.Utilities.Core.isMobile || t.focus(), delete t._isDropDownClicked } _listBoxKeyDownHandler(e) { const t = this; if ("Enter" === e.key) return t.close(), "dropDownButton" === t.dropDownOpenMode ? t.$.dropDownButton.focus() : t.focus(), void e.stopPropagation(); "Escape" !== e.key || t.close() } _mouseEnterHandler() { const e = this; e._isElementHovered = !0, e.tagName.toLowerCase().indexOf("jqx-drop-down-") > -1 && "auto" === e.dropDownOpenMode && !e.disabled && !e.readonly && e.open() } _mouseLeaveHandler() { const e = this; e.removeAttribute("hover"), e._isElementHovered = !1, "auto" !== e.dropDownOpenMode || e.disabled || e.readonly || e._autoClose() } _mouseWheelHandler(e) { const t = this; t.disabled || t.readonly || t.items && 0 === t.items.length || t.$dropDownContainer && !t.$dropDownContainer.hasClass("jqx-visibility-hidden") || t.$.listBox && (e.preventDefault(), t.$.listBox._handleKeyStrokes(e.deltaY > 0 ? "ArrowDown" : "ArrowUp")) } _autoClose() { const e = this; e._autoCloseTimeout = setTimeout(function () { e._isElementHovered || e.close(), clearTimeout(e._autoCloseTimeout) }.bind(e), e.autoCloseDelay) } _propertyValidator(e, t) { return "number" != typeof t && "string" != typeof t ? e : t } _resizeHandler() { this.refresh() } refresh() { const e = this; "none" === e.resizeMode && (e._calculateDropDownSize(), e._setDropDownSize()) } _selectStartHandler(e) { this._preventsSelectStart && e.preventDefault() } _setAriaRelations(e) { const t = this; let o, n; "dropDownButton" !== t.dropDownOpenMode ? (o = t.$.dropDownButton, o.setAttribute("aria-hidden", !0), n = t, t.$.actionButton.removeAttribute("role")) : (o = t, n = t.$.dropDownButton, n.removeAttribute("aria-hidden"), t.$.actionButton.setAttribute("role", "button")), t._ariaButton = n, n.setAttribute("role", "button"), n.setAttribute("aria-haspopup", "listbox"), n.setAttribute("aria-owns", t.$.listBox.id), n.setAttribute("aria-describedby", t.$.hint.id), t.label ? n.setAttribute("aria-labelledby", t.$.label.id) : "DropDownList" === t.elementName && n.setAttribute("aria-labelledby", t.$.actionButton.id), o.setAttribute("role", "presentation"), o.removeAttribute("aria-owns"), e ? n.setAttribute("aria-expanded", t.opened) : (o.removeAttribute("aria-describedby"), o.removeAttribute("aria-expanded"), o.removeAttribute("aria-haspopup"), o.removeAttribute("aria-labelledby")) } _setDropDownSize() { const e = this, t = e.$.listBox; let o; if (e._dropDownSize || e._calculateDropDownSize(), ["dropDownMinWidth", "dropDownMaxWidth"].forEach((t => { e.$.dropDownContainer.style[t.replace("dropDown", "").replace(/^./, "m")] = "initial" === e[t] ? e.offsetWidth + "px" : e[t] ? parseFloat(e[t]) + (e[t].toString().endsWith("%") ? "%" : "px") : null })), ["dropDownMinHeight", "dropDownMaxHeight"].forEach((t => { e.$.dropDownContainer.style[t.replace("dropDown", "").replace(/^./, "m")] = e[t] ? parseFloat(e[t]) + (e[t].toString().endsWith("%") ? "%" : "px") : null })), e.dropDownWidth ? "auto" !== e.dropDownWidth ? e.$.dropDownContainer.style.width = ("initial" === e.dropDownWidth ? e.offsetWidth : parseFloat(e.dropDownWidth)) + "px" : e.$.dropDownContainer.style.width = "auto" : e.$.dropDownContainer.style.width = "auto" === e._dropDownSize.width ? "auto" : (parseFloat(e._dropDownSize.width) || 0) + "px", e.dropDownHeight && "auto" !== e.dropDownHeight) e.$.dropDownContainer.style.height = parseFloat(e.dropDownHeight) + ((e.dropDownHeight + "").indexOf("%") > -1 ? "%" : "px"); else if (!e.$.listBox || "auto" !== e._dropDownSize.height && "auto" !== e.dropDownHeight) e.$.dropDownContainer.style.height = e._dropDownSize.height; else { e.$.dropDownContainer.style.height = ""; let n = 0; if (t.$.itemsContainer && (n = 2 * parseInt(window.getComputedStyle(t.$.itemsContainer).getPropertyValue("--jqx-list-item-vertical-offset"))), isNaN(n) && (n = 6), o = n, t.items && t.items.length > 0 ? t.items.map((e => o += e.height || e.offsetHeight)) : o = t.$.placeholder ? t.$.placeholder.offsetHeight : 200, e.filterable) { const e = t.$.filterInputContainer; o += e.offsetHeight + e.offsetTop } o = o + e._dropDownSize.paddingWidth + e._dropDownSize.borderWidth, e.$.dropDownContainer.style.height = o + "px" } if (t) { if (void 0 === o || !t.$) return void t._refreshLayout(); const n = t.$.horizontalScrollBar ? t.$.horizontalScrollBar.offsetHeight : 0, i = Math.max(0, e._dropDownSize.minHeight - (o - n)); i && (e.$.dropDownContainer.style.height = o + i + "px"), !e.opened && e.virtualized && t.refresh() } } _styleChangedHandler(e) { const t = this; if (t.dropDownAppendTo) { const o = e.detail.styleProperties, n = ["font-size", "font-family", "font-style", "font-weight"]; for (let e = 0; e < n.length; e++)o[n[e]] && (t.$.dropDownContainer.style[n[e]] = o[n[e]].value) } "auto" === t._dropDownSize.height && t._setDropDownSize() } _validateTemplate(e) { const t = this; if (e && "function" != typeof e) if ("content" in document.createElement("template")) { if (e instanceof HTMLTemplateElement || (e = document.getElementById(e)), null !== e && "content" in e) return e; t.error(t.localize("invalidTemplate", { elementType: t.nodeName.toLowerCase(), property: "tokenTemplate" })) } else t.error(t.localize("htmlTemplateNotSuported", { elementType: t.nodeName.toLowerCase() })) } });
|
|
62
|
+
|
|
63
|
+
/***/
|
|
64
|
+
}),
|
|
65
|
+
|
|
66
|
+
/***/ 6321:
|
|
67
|
+
/***/ (() => {
|
|
68
|
+
|
|
69
|
+
!function () { const e = "16.0.0", t = []; let n = "JQX"; if (window[n] && window[n].Version) { if (window[n].Version === e) return; if (window[n].Version !== e) n += e; else { let e = 2; for (; window[n];)n += e.toString(), e++ } } const r = navigator.userAgent.indexOf("Edge") > -1 && navigator.appVersion.indexOf("Edge") > -1; document.elementsFromPoint || (document.elementsFromPoint = document.msElementsFromPoint); class o { static isBoolean(e) { return "boolean" == typeof e } static isFunction(e) { return !!(e && e.constructor && e.call && e.apply) } static isArray(e) { return Array.isArray(e) } static isObject(e) { return e && ("object" == typeof e || this.isFunction(e)) || !1 } static isDate(e) { return e instanceof Date } static isString(e) { return "string" == typeof e } static isNumber(e) { return "number" == typeof e } static getType(e) { const t = this, n = ["Boolean", "Number", "String", "Function", "Array", "Date", "Object"].find((n => { if (t["is" + n](e)) return n })); return n ? n.toLowerCase() : void 0 } } class i { static animate(e, t, r, o) { const i = e; if (!i || i instanceof HTMLElement == 0) return; if (0 === i.getElementsByClassName("jqx-ripple").length) { const e = document.createElement("span"); e.classList.add("jqx-ripple"), e.setAttribute("role", "presentation"); let t = !0, r = null; if (window[n].EnableShadowDOM && i.enableShadowDOM && !0 !== i.isInShadowDOM) { for (let e = 0; e < i.shadowRoot.host.shadowRoot.children.length; e++)"link" !== i.shadowRoot.host.shadowRoot.children[e].tagName.toLowerCase() && (r = i.shadowRoot.host.shadowRoot.children[e]); i.shadowRoot.host.shadowRoot.querySelector(".jqx-ripple") && (t = !1) } else r = i.firstElementChild; t && (r && !r.noRipple && r.offsetHeight > 0 ? r.appendChild(e) : i.appendChild(e)) } let s = null; if (s = window[n].EnableShadowDOM && i.shadowRoot ? i.shadowRoot.host.shadowRoot.querySelector(".jqx-ripple") : i.getElementsByClassName("jqx-ripple")[0], !s) return; s.innerHTML = "", s.classList.remove("jqx-animate"), s.style.height = s.style.width = Math.max(i.offsetHeight, i.offsetWidth) + "px"; const a = window.getComputedStyle(s.parentElement), l = parseInt(a.borderLeftWidth) || 0, d = parseInt(a.borderTopWidth) || 0, c = i.getBoundingClientRect(), u = t - (c.left + window.pageXOffset) - s.offsetWidth / 2 - l, p = r - (c.top + window.pageYOffset) - s.offsetHeight / 2 - d; s.style.left = u + "px", s.style.top = p + "px", s.classList.add("jqx-animate"), s.addEventListener("animationend", (function e() { s.parentElement && s.parentElement.removeChild(s), o && o(), s.removeEventListener("animationend", e), s.removeEventListener("animationcancel", e) })), s.addEventListener("animationcancel", (function e() { s.parentElement && s.parentElement.removeChild(s), o && o(), s.removeEventListener("animationcancel", e), s.removeEventListener("animationend", e) })) } } class s { static easeInQuad(e, t, n, r) { return n * (e /= r) * e + t } static easeOutQuad(e, t, n, r) { return -n * (e /= r) * (e - 2) + t } static easeInOutQuad(e, t, n, r) { return (e /= r / 2) < 1 ? n / 2 * e * e + t : -n / 2 * (--e * (e - 2) - 1) + t } static easeInCubic(e, t, n, r) { return n * (e /= r) * e * e + t } static easeOutCubic(e, t, n, r) { return n * ((e = e / r - 1) * e * e + 1) + t } static easeInOutCubic(e, t, n, r) { return (e /= r / 2) < 1 ? n / 2 * e * e * e + t : n / 2 * ((e -= 2) * e * e + 2) + t } static easeInQuart(e, t, n, r) { return n * (e /= r) * e * e * e + t } static easeOutQuart(e, t, n, r) { return -n * ((e = e / r - 1) * e * e * e - 1) + t } static easeInOutQuart(e, t, n, r) { return (e /= r / 2) < 1 ? n / 2 * e * e * e * e + t : -n / 2 * ((e -= 2) * e * e * e - 2) + t } static easeInQuint(e, t, n, r) { return n * (e /= r) * e * e * e * e + t } static easeOutQuint(e, t, n, r) { return n * ((e = e / r - 1) * e * e * e * e + 1) + t } static easeInOutQuint(e, t, n, r) { return (e /= r / 2) < 1 ? n / 2 * e * e * e * e * e + t : n / 2 * ((e -= 2) * e * e * e * e + 2) + t } static easeInSine(e, t, n, r) { return -n * Math.cos(e / r * (Math.PI / 2)) + n + t } static easeOutSine(e, t, n, r) { return n * Math.sin(e / r * (Math.PI / 2)) + t } static easeInOutSine(e, t, n, r) { return -n / 2 * (Math.cos(Math.PI * e / r) - 1) + t } static easeInExpo(e, t, n, r) { return 0 === e ? t : n * Math.pow(2, 10 * (e / r - 1)) + t } static easeOutExpo(e, t, n, r) { return e === r ? t + n : n * (1 - Math.pow(2, -10 * e / r)) + t } static easeInOutExpo(e, t, n, r) { return 0 === e ? t : e === r ? t + n : (e /= r / 2) < 1 ? n / 2 * Math.pow(2, 10 * (e - 1)) + t : n / 2 * (2 - Math.pow(2, -10 * --e)) + t } static easeInCirc(e, t, n, r) { return -n * (Math.sqrt(1 - (e /= r) * e) - 1) + t } static easeOutCirc(e, t, n, r) { return n * Math.sqrt(1 - (e = e / r - 1) * e) + t } static easeInOutCirc(e, t, n, r) { return (e /= r / 2) < 1 ? -n / 2 * (Math.sqrt(1 - e * e) - 1) + t : n / 2 * (Math.sqrt(1 - (e -= 2) * e) + 1) + t } static easeInElastic(e, t, n, r) { let o = 1.70158, i = 0, s = n; return 0 === e ? t : 1 == (e /= r) ? t + n : (i || (i = .3 * r), s < Math.abs(n) ? (s = n, o = i / 4) : o = i / (2 * Math.PI) * Math.asin(n / s), -s * Math.pow(2, 10 * (e -= 1)) * Math.sin((e * r - o) * (2 * Math.PI) / i) + t) } static easeOutElastic(e, t, n, r) { let o = 1.70158, i = 0, s = n; return 0 === e ? t : 1 == (e /= r) ? t + n : (i || (i = .3 * r), s < Math.abs(n) ? (s = n, o = i / 4) : o = i / (2 * Math.PI) * Math.asin(n / s), s * Math.pow(2, -10 * e) * Math.sin((e * r - o) * (2 * Math.PI) / i) + n + t) } static easeInOutElastic(e, t, n, r) { let o = 1.70158, i = 0, s = n; return 0 === e ? t : 2 == (e /= r / 2) ? t + n : (i || (i = r * (.3 * 1.5)), s < Math.abs(n) ? (s = n, o = i / 4) : o = i / (2 * Math.PI) * Math.asin(n / s), e < 1 ? s * Math.pow(2, 10 * (e -= 1)) * Math.sin((e * r - o) * (2 * Math.PI) / i) * -.5 + t : s * Math.pow(2, -10 * (e -= 1)) * Math.sin((e * r - o) * (2 * Math.PI) / i) * .5 + n + t) } static easeInBack(e, t, n, r, o) { return void 0 === o && (o = 1.70158), n * (e /= r) * e * ((o + 1) * e - o) + t } static easeOutBack(e, t, n, r, o) { return void 0 === o && (o = 1.70158), n * ((e = e / r - 1) * e * ((o + 1) * e + o) + 1) + t } static easeInOutBack(e, t, n, r, o) { return void 0 === o && (o = 1.70158), (e /= r / 2) < 1 ? n / 2 * (e * e * ((1 + (o *= 1.525)) * e - o)) + t : n / 2 * ((e -= 2) * e * ((1 + (o *= 1.525)) * e + o) + 2) + t } static easeInBounce(e, t, n, r) { return n - this.easeOutBounce(r - e, 0, n, r) + t } static easeOutBounce(e, t, n, r) { return (e /= r) < 1 / 2.75 ? n * (7.5625 * e * e) + t : e < 2 / 2.75 ? n * (7.5625 * (e -= 1.5 / 2.75) * e + .75) + t : e < 2.5 / 2.75 ? n * (7.5625 * (e -= 2.25 / 2.75) * e + .9375) + t : n * (7.5625 * (e -= 2.625 / 2.75) * e + .984375) + t } static easeInOutBounce(e, t, n, r) { return e < r / 2 ? .5 * this.easeInBounce(2 * e, 0, n, r) + t : .5 * this.easeOutBounce(2 * e - r, 0, n, r) + .5 * n + t } } class a { static get isMobile() { const e = /(iphone|ipod|ipad|android|iemobile|blackberry|bada)/.test(window.navigator.userAgent.toLowerCase()); return e || ["iPad Simulator", "iPhone Simulator", "iPod Simulator", "iPad", "iPhone", "iPod"].includes(navigator.platform) || navigator.userAgent.includes("Mac") && "ontouchend" in document } static get Browser() { let e; const t = function (t) { let n = t.indexOf(e); if (-1 === n) return; const r = t.indexOf("rv:"); return "Trident" === e && -1 !== r ? parseFloat(t.substring(r + 3)) : parseFloat(t.substring(n + e.length + 1)) }; let n = {}; return n[function () { const t = [{ string: navigator.userAgent, subString: "Edge", identity: "Edge" }, { string: navigator.userAgent, subString: "MSIE", identity: "IE" }, { string: navigator.userAgent, subString: "Trident", identity: "IE" }, { string: navigator.userAgent, subString: "Firefox", identity: "Firefox" }, { string: navigator.userAgent, subString: "Opera", identity: "Opera" }, { string: navigator.userAgent, subString: "OPR", identity: "Opera" }, { string: navigator.userAgent, subString: "Chrome", identity: "Chrome" }, { string: navigator.userAgent, subString: "Safari", identity: "Safari" }]; for (let n = 0; n < t.length; n++) { let r = t[n].string; if (e = t[n].subString, -1 !== r.indexOf(t[n].subString)) return t[n].identity } return "Other" }()] = !0, n.version = t(navigator.userAgent) || t(navigator.appVersion) || "Unknown", n } static toCamelCase(e) { return e.replace(/-([a-z])/g, (function (e) { return e[1].toUpperCase() })) } static toDash(e) { return e.split(/(?=[A-Z])/).join("-").toLowerCase() } static unescapeHTML(e) { return (new DOMParser).parseFromString(e, "text/html").documentElement.textContent } static escapeHTML(e) { const t = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "/": "/", "`": "`", "=": "=" }; return String(e).replace(/[&<>"'`=\/]/g, (e => t[e])) } static sanitizeHTML(e) { if (e && (e.indexOf("onclick") >= 0 || e.indexOf("onload") >= 0 || e.indexOf("onerror") >= 0)) return this.escapeHTML(e); const t = new RegExp("<s*(applet|audio|base|bgsound|embed|form|iframe|isindex|keygen|layout|link|meta|object|script|svg|style|template|video)[^>]*>(.*?)<s*/s*(applet|audio|base|bgsound|embed|form|iframe|isindex|keygen|layout|link|meta|object|script|svg|style|template|video)>", "ig"); return String(e).replace(t, (e => this.escapeHTML(e))) } static createGUID() { function e() { return Math.floor(65536 * (1 + Math.random())).toString(16).substring(1) } return e() + e() + "-" + e() + "-" + e() + "-" + e() + "-" + e() + e() + e() } static getScriptLocation() { return "./" !== window[n].BaseUrl ? window[n].BaseUrl : function () { if (document.currentScript) { let e = document.currentScript.src, t = e.lastIndexOf("/"); return e = e.substring(0, t), e } const e = new Error; let t = "(", n = ")"; if (JQX.Utilities.Core.Browser.Safari && (t = "@", n = "\n"), e.fileName) return e.fileName.replace("/jqx.element.js", ""); let r = e.stack.split(t); return r = r[1], r = r.split(n)[0], r = r.split(":"), r.splice(-2, 2), r = r.join(":"), r.replace("/jqx.element.js", "") }() } static CSSVariablesSupport() { return window.CSS && window.CSS.supports && window.CSS.supports("(--fake-var: 0)") } static assign(e, t) { const n = e => e && "object" == typeof e && !Array.isArray(e) && null !== e; let r = Object.assign({}, e); return n(e) && n(t) && Object.keys(t).forEach((o => { n(t[o]) ? o in e ? r[o] = this.assign(e[o], t[o]) : Object.assign(r, { [o]: t[o] }) : Object.assign(r, { [o]: t[o] }) })), r } static html(e, t) { const n = this; let r = "", o = e.childNodes; if (!t) { for (let e, t = 0, i = o.length; t < i && (e = o[t]); t++) { const t = ["strong"]; if (e instanceof HTMLElement || e.tagName && t.indexOf(e.tagName.toLowerCase()) >= 0) { const t = e.tagName.toLowerCase(), o = e.attributes; let i = "<" + t; for (let e, t = 0; e = o[t]; t++)i += " " + e.name + '="' + e.value.replace(/[&\u00A0"]/g, y.Core.escapeHTML) + '"'; i += ">", ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"][t] && (r += i), r = r + i + n.html(e) + "</" + t + ">" } else { if (8 === e.nodeType) continue; r += e.textContent.replace(/[&\u00A0<>]/g, y.Core.escapeHTML) } } return r } { const n = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; e.innerHTML = t.replace(n, "<$1></$2>") } } } let l = []; class d { static watch(e) { switch (e.nodeName.toLowerCase()) { case "jqx-grid": case "jqx-kanban": case "jqx-table": case "jqx-pivot-table": case "jqx-scheduler": case "jqx-tabs": case "jqx-card-view": case "jqx-list-box": case "jqx-combo-box": case "jqx-drop-down-list": case "jqx-calendar": case "jqx-gauge": case "jqx-numeric-text-box": case "jqx-menu": case "jqx-tree": l.push(e); break; default: return }d.start() } static start() { d.isStarted || (d.isStarted = !0, d.interval && clearInterval(d.interval), 0 === l.length || document.hidden ? d.isStarted = !1 : d.interval = setInterval((function () { d.observe() }), 100)) } static stop() { d.isStarted = !1, d.interval && clearInterval(d.interval) } static observeElement(e) { const t = e; if ("test" === window.JQX.Mode || document.hidden) return void (d.interval && clearInterval(d.interval)); let n = e._computedStyle || "resize" !== t.hasStyleObserver ? document.defaultView.getComputedStyle(t, null) : {}, r = !0, o = "resize" !== t.hasStyleObserver ? ["paddingLeft", "paddingRight", "paddingTop", "paddingBottom", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth", "display", "visibility", "font-size", "font-family", "font-style", "font-weight", "max-height", "min-height", "max-width", "min-width", "overflow", "overflow-x", "overflow-y"] : []; if (e.styleProperties && (o = o.concat(e.styleProperties)), e.observableStyleProperties && (o = e.observableStyleProperties), !t._styleInfo) { t._styleInfo = []; for (let e = 0; e < o.length; e++) { const r = o[e], i = r.startsWith("--") ? n.getPropertyValue(r) : n[r]; t._styleInfo[r] = i } return } if (e.isHidden || "none" !== n.display && (0 !== e.offsetWidth && 0 !== e.offsetHeight || (e.isHidden = !0)), e.isHidden) { if (e.visibilityChangedHandler(), e.isHidden) return; r = !1 } let i = []; for (let e = 0; e < o.length; e++) { const r = o[e], s = r.startsWith("--") ? n.getPropertyValue(r) : n[r]; t._styleInfo[r] !== s && (i[r] = { oldValue: t._styleInfo[r], value: s }, i.length++), t._styleInfo[r] = s } i.length > 0 && (t.$.fireEvent("styleChanged", { styleProperties: i }, { bubbles: !1, cancelable: !0 }), i.display && r && t.$.fireEvent("resize", t, { bubbles: !1, cancelable: !0 })) } static observe() { for (let e = 0; e < l.length; e++) { const t = l[e]; this.observeElement(t) } } static unwatch(e) { d.stop(); const t = l.indexOf(e); -1 !== t && l.splice(t, 1), d.start() } } let c = []; const u = [], p = ["resize", "down", "up", "move", "tap", "taphold", "swipeleft", "swiperight", "swipetop", "swipebottom"]; class h { constructor(e) { const t = this; t.target = e, t.$target = new f(e), t.$document = e.$document ? e.$document : new f(document), t.id = (Date.now().toString(36) + Math.random().toString(36).substr(2, 5)).toUpperCase(); let n = { handlers: {}, boundEventTypes: [], listen: t.listen.bind(t), unlisten: t.unlisten.bind(t) }; return t.tapHoldDelay = 750, t.swipeMin = 10, t.swipeMax = 5e3, t.swipeDelay = 1e3, t.tapHoldDelay = 750, t.inputEventProperties = ["clientX", "clientY", "pageX", "pageY", "screenX", "screenY"], p.forEach((e => { n[e] = t => { n.handlers[e] = t }, t[e] = e => { if (!n.handlers[e.type]) { if (("mousemove" === e.type || "pointermove" === e.type || "touchmove" === e.type) && n.handlers.move) { const r = t.createEvent(e, "move"); n.handlers.move(r) } return !0 } return n.handlers[e.type](e) } })), t.listen(), t.handlers = n.handlers, n } listen(e) { const t = this; if ("resize" === e && t.target !== document && t.target !== window && !1 !== t.target.hasResizeObserver) if (JQX.Utilities.Core.Browser.Firefox) { if (!t.target.resizeObserver) { let e, n, r, o = !1, i = t.target.offsetWidth, s = t.target.offsetHeight; const a = new ResizeObserver((() => { if (!o) return void (o = !0); const a = new CustomEvent("resize", { bubbles: !1, cancelable: !0 }); n = t.target.offsetWidth, r = t.target.offsetHeight, e = n !== i || r !== s, t.target.requiresLayout && (e = !0), e && (t.resize(a), t.target.requiresLayout = !1) })); a.observe(t.target), t.target.resizeObserver = a } } else if (!t.target.resizeTrigger) { const e = document.createElement("div"); e.className = "jqx-resize-trigger-container", e.innerHTML = '<div class="jqx-resize-trigger-container"><div class="jqx-resize-trigger"></div></div><div class="jqx-resize-trigger-container"><div class="jqx-resize-trigger-shrink"></div></div>', e.setAttribute("aria-hidden", !0), window[n].EnableShadowDOM && t.target.shadowRoot ? t.target.shadowRoot.appendChild(e) : t.target.appendChild(e), t.target.resizeTrigger = e; const r = e.childNodes[0], o = r.childNodes[0], i = e.childNodes[1], s = function () { o.style.width = "100000px", o.style.height = "100000px", r.scrollLeft = 1e5, r.scrollTop = 1e5, i.scrollLeft = 1e5, i.scrollTop = 1e5 }; let a, l, d, c, u = t.target.offsetWidth, p = t.target.offsetHeight; if (0 === u || 0 === p) { const e = function () { s(), t.target.removeEventListener("resize", e) }; t.target.addEventListener("resize", e), s() } else s(); t.target.resizeHandler = function () { l || (l = requestAnimationFrame((function () { if (l = 0, d = t.target.offsetWidth, c = t.target.offsetHeight, a = d !== u || c !== p, t.target.requiresLayout && (a = !0), !a) return; u = d, p = c; const e = new CustomEvent("resize", { bubbles: !1, cancelable: !0 }); t.resize(e), t.target.requiresLayout = !1 }))), s() }, r.addEventListener("scroll", t.target.resizeHandler), i.addEventListener("scroll", t.target.resizeHandler) } t.isListening || (t.isListening = !0, t.isPressed = !1, t.isReleased = !1, t.isInBounds = !1, window.PointerEvent ? (t.$target.listen("pointerdown.inputEvents" + t.id, t.pointerDown.bind(t)), t.$target.listen("pointerup.inputEvents" + t.id, t.pointerUp.bind(t)), t.$target.listen("pointermove.inputEvents" + t.id, t.pointerMove.bind(t)), t.$target.listen("pointercancel.inputEvents" + t.id, t.pointerCancel.bind(t))) : ("ontouchstart" in window && (t.$target.listen("touchmove.inputEvents" + t.id, t.touchMove.bind(t)), t.$target.listen("touchstart.inputEvents" + t.id, t.touchStart.bind(t)), t.$target.listen("touchend.inputEvents" + t.id, t.touchEnd.bind(t)), t.$target.listen("touchcancel.inputEvents" + t.id, t.touchCancel.bind(t))), t.$target.listen("mousedown.inputEvents" + t.id, t.mouseDown.bind(t)), t.$target.listen("mouseup.inputEvents" + t.id, t.mouseUp.bind(t)), t.$target.listen("mousemove.inputEvents" + t.id, t.mouseMove.bind(t)), t.$target.listen("mouseleave.inputEvents" + t.id, t.mouseLeave.bind(t))), t.target._handleDocumentUp || (t.target._handleDocumentUp = t.handleDocumentUp.bind(t), t.target._handleDocumentUpId = t.id, t.$document.listen("mouseup.inputEvents" + t.target._handleDocumentUpId, t.target._handleDocumentUp))) } unlisten(e) { const t = this; if (t.isListening = !1, window.PointerEvent ? (t.$target.unlisten("pointerdown.inputEvents" + t.id), t.$target.unlisten("pointerup.inputEvents" + t.id), t.$target.unlisten("pointermove.inputEvents" + t.id), t.$target.unlisten("pointercancel.inputEvents" + t.id)) : ("ontouchstart" in window && (t.$target.unlisten("touchstart.inputEvents" + t.id), t.$target.unlisten("touchmove.inputEvents" + t.id), t.$target.unlisten("touchend.inputEvents" + t.id), t.$target.unlisten("touchcancel.inputEvents" + t.id)), t.$target.unlisten("mousedown.inputEvents" + t.id), t.$target.unlisten("mouseup.inputEvents" + t.id), t.$target.unlisten("mousemove.inputEvents" + t.id), t.$target.unlisten("mouseleave.inputEvents" + t.id)), t.target._handleDocumentUp && (t.$document.unlisten("mouseup.inputEvents" + t.target._handleDocumentUpId, t.target._handleDocumentUp), delete t.target._handleDocumentUp, delete t.target._handleDocumentUpId), "resize" === e) if (JQX.Utilities.Core.Browser.Firefox) t.target.resizeObserver && (t.target.resizeObserver.unobserve(t.target), delete t.target.resizeObserver); else if (t.target.resizeTrigger) { const e = t.target.resizeTrigger, n = e.childNodes[0], r = e.childNodes[1]; n.removeEventListener("scroll", t.target.resizeHandler), r.removeEventListener("scroll", t.target.resizeHandler), t.target.resizeHandler = null, e.parentNode.removeChild(e), delete t.target.resizeTrigger } } handleDocumentUp(e) { const t = this; t.isPressed = !1, t.isReleased = !1, t.resetSwipe(e) } createEvent(e, t) { const n = this, r = e.touches, o = e.changedTouches, i = r && r.length ? r[0] : o && o.length ? o[0] : void 0, s = new CustomEvent(t, { bubbles: !0, cancelable: !0, composed: void 0 !== n.$target.element.getRootNode().host }); if (s.originalEvent = e, i) { for (let e = 0; e < n.inputEventProperties.length; e++) { const t = n.inputEventProperties[e]; s[t] = i[t] } return s } for (let t in e) t in s || (s[t] = e[t]); return s } fireTap(e) { const t = this; if (clearTimeout(this.tapHoldTimeout), !this.tapHoldFired && this.isInBounds) { const n = t.createEvent(e, "tap"); t.tap(n) } } initTap(e) { const t = this; t.isInBounds = !0, t.tapHoldFired = !1, t.tapHoldTimeout = setTimeout((function () { if (t.isInBounds) { t.tapHoldFired = !0; const n = t.createEvent(e, "taphold"); t.taphold(n) } }), t.tapHoldDelay) } pointerDown(e) { return this.handleDown(e) } mouseDown(e) { const t = this; if (!(t.isPressed || t.touchStartTime && new Date - t.touchStartTime < 500)) return t.handleDown(e) } touchStart(e) { const t = this; return t.touchStartTime = new Date, t.isTouchMoved = !0, t.handleDown(e) } mouseUp(e) { const t = this; if (!(t.isReleased || t.touchEndTime && new Date - t.touchEndTime < 500)) return t.handleUp(e) } handleDown(e) { const t = this; t.isReleased = !1, t.isPressed = !0; const n = t.createEvent(e, "down"); return (t.handlers.tap || t.handlers.taphold) && t.initTap(n), (t.handlers.swipeleft || t.handlers.swiperight || t.handlers.swipetop || t.handlers.swipebottom) && t.initSwipe(n), t.down(n) } handleUp(e) { const t = this; t.isReleased = !0, t.isPressed = !1; const n = t.createEvent(e, "up"), r = t.up(n); return (t.handlers.tap || t.handlers.taphold) && t.fireTap(n), t.resetSwipe(n), r } handleMove(e) { const t = this; let n = t.move(e); return t.isPressed && (t._maxSwipeVerticalDistance = Math.max(t._maxSwipeVerticalDistance, Math.abs(t._startY - e.pageY)), t._maxSwipeHorizontalDistance = Math.max(t._maxSwipeHorizontalDistance, Math.abs(t._startX - e.pageX)), n = t.handleSwipeEvents(e)), n } touchEnd(e) { return this.touchEndTime = new Date, this.handleUp(e) } pointerUp(e) { return this.handleUp(e) } pointerCancel(e) { this.pointerUp(e) } touchCancel(e) { this.touchEnd(e) } mouseLeave() { this.isInBounds = !1 } mouseMove(e) { if (!this.isTouchMoved) return this.handleMove(e) } pointerMove(e) { return this.handleMove(e) } touchMove(e) { const t = this, n = e.touches, r = e.changedTouches, o = n && n.length ? n[0] : r && r.length ? r[0] : void 0; for (let n = 0; n < t.inputEventProperties.length; n++) { const r = t.inputEventProperties[n]; void 0 === e[r] && (e[r] = o[r]) } return t.isTouchMoved = !0, t.handleMove(e) } handleSwipeEvents(e) { const t = this; let n = !0; return (t.handlers.swipetop || t.handlers.swipebottom) && (n = this.handleVerticalSwipeEvents(e)), !1 === n || (t.handlers.swipeleft || t.handlers.swiperight) && (n = this.handleHorizontalSwipeEvents(e)), n } handleVerticalSwipeEvents(e) { let t, n; return t = e.pageY, n = t - this._startY, this.swiped(e, n, "vertical") } handleHorizontalSwipeEvents(e) { let t, n; return t = e.pageX, n = t - this._startX, this.swiped(e, n, "horizontal") } swiped(e, t, n) { const r = this; if (n = n || 0, Math.abs(t) >= r.swipeMin && !r._swipeEvent && !r._swipeLocked) { let o = t < 0 ? "swipeleft" : "swiperight"; if ("horizontal" === n ? r._swipeEvent = r.createEvent(e, o) : (o = t < 0 ? "swipetop" : "swipebottom", r._swipeEvent = r.createEvent(e, t < 0 ? "swipetop" : "swipebottom")), r[o] && (r[o](this._swipeEvent), Math.abs(t) <= this.swipeMax)) return e.stopImmediatePropagation(), !1 } return !0 } resetSwipe() { this._swipeEvent = null, clearTimeout(this._swipeTimeout) } initSwipe(e) { const t = this; t._maxSwipeVerticalDistance = 0, t._maxSwipeHorizontalDistance = 0, t._startX = e.pageX, t._startY = e.pageY, t._swipeLocked = !1, t._swipeEvent = null, t._swipeTimeout = setTimeout((function () { t._swipeLocked = !0 }), t.swipeDelay) } } class m { get scrollWidth() { const e = this; return e.horizontalScrollBar ? e.horizontalScrollBar.max : -1 } set scrollWidth(e) { const t = this; e < 0 && (e = 0), t.horizontalScrollBar && (t.horizontalScrollBar.max = e) } get scrollHeight() { const e = this; return e.verticalScrollBar ? e.verticalScrollBar.max : -1 } set scrollHeight(e) { const t = this; e < 0 && (e = 0), t.verticalScrollBar && (t.verticalScrollBar.max = e) } get scrollLeft() { const e = this; return e.horizontalScrollBar ? e.horizontalScrollBar.value : -1 } set scrollLeft(e) { const t = this; e < 0 && (e = 0), t.horizontalScrollBar && (t.horizontalScrollBar.value = e) } get scrollTop() { const e = this; return e.verticalScrollBar ? e.verticalScrollBar.value : -1 } set scrollTop(e) { const t = this; e < 0 && (e = 0), t.verticalScrollBar && (t.verticalScrollBar.value = e) } get vScrollBar() { return this.verticalScrollBar } get hScrollBar() { return this.horizontalScrollBar } constructor(e, t, n) { const r = this; r.container = e, r.horizontalScrollBar = t, r.verticalScrollBar = n, r.disableSwipeScroll = !1, r.listen() } listen() { const e = this, t = a.isMobile, n = e.horizontalScrollBar, r = e.verticalScrollBar; let o, i, s, l, d, c, u, p; e.inputEvents = new h(e.container); const m = function (e) { return { amplitude: 0, delta: 0, initialValue: 0, min: 0, max: e.max, previousValue: 0, pointerPosition: 0, targetValue: 0, scrollBar: e, value: 0, velocity: 0 } }, f = m(n), g = m(r), w = function () { const t = e.container.touchVelocityCoefficient || 50; c = Date.now(), u = c - l, l = c; const n = function (e) { e.delta = e.value - e.previousValue, e.previousValue = e.value; let n = t * e.delta / (1 + u); e.velocity = .8 * n + .2 * e.velocity }; n(g), n(f) }, b = function (e) { return p.value = e > p.max ? p.max : e < p.min ? p.min : e, p.scrollBar.value = p.value, e > p.max ? "max" : e < p.min ? "min" : "value" }; function v() { let t, n; p.amplitude && (e.container.$.fireEvent("kineticScroll"), t = Date.now() - l, n = -p.amplitude * Math.exp(-t / 500), n > 5 || n < -5 ? (b(p.targetValue + n), cancelAnimationFrame(i), i = 0, i = requestAnimationFrame(v)) : b(p.targetValue)) } let _; e.inputEvents.down((function (n) { if (!t) return; const r = n.originalEvent.target, i = r && r.closest ? r.closest("jqx-scroll-bar") : void 0; if (i === e.horizontalScrollBar || i === e.verticalScrollBar) return; s = !0, o = !1; const a = function (e, t) { e.amplitude = 0, e.pointerPosition = t, e.previousValue = e.value, e.value = e.scrollBar.value, e.initialValue = e.value, e.max = e.scrollBar.max }; a(g, n.clientY), a(f, n.clientX), l = Date.now(), clearInterval(d), d = setInterval(w, 500) })), e.inputEvents.up((function () { if (!s) return !0; if (clearInterval(d), e.disableSwipeScroll) return void (s = !1); const t = function (e) { p = e, e.amplitude = .8 * e.velocity, e.targetValue = Math.round(e.value + e.amplitude), l = Date.now(), cancelAnimationFrame(i), i = requestAnimationFrame(v), e.velocity = 0 }; g.velocity > 10 || g.velocity < -10 ? t(g) : (f.velocity > 10 || f.velocity < -10) && t(f), s = !1 })), e.inputEvents.move((function (t) { if (!s) return !0; if (e.disableSwipeScroll) return; if (o && (t.originalEvent.preventDefault(), t.originalEvent.stopPropagation()), f.visible = e.scrollWidth > 0, g.visible = e.scrollHeight > 0, !s || !f.visible && !g.visible) return; const n = e.container.touchScrollRatio, r = e.container; let i, a; n && ("number" == typeof n ? (i = -n, a = -n) : "function" == typeof n && (i = n(g.max, r.offsetHeight), a = n(f.max, r.offsetWidth))), g.ratio = i || -g.max / r.offsetHeight, g.delta = (t.clientY - g.pointerPosition) * g.ratio, f.ratio = a || -f.max / r.offsetWidth, f.delta = (t.clientX - f.pointerPosition) * f.ratio; let l = "value"; const d = function (t, n, r) { return t.delta > 5 || t.delta < -5 ? (p = t, l = t.initialValue + t.delta > p.max ? "max" : t.initialValue + t.delta < p.min ? "min" : "value", "min" === l && 0 === t.initialValue || "max" === l && t.initialValue === t.max || !t.visible || (e.container.$.fireEvent("kineticScroll"), b(t.initialValue + t.delta), w(), r.originalEvent.preventDefault(), r.originalEvent.stopPropagation(), o = !0, !1)) : null }; let c = d(g, t.clientY, t); if (null !== c) return c; { let e = d(f, t.clientX, t); if (null !== e) return e } })), e.scrollTo = function (t, n) { const r = !1 === n ? f : g; let o = !1; l || (l = Date.now()), _ || (_ = Date.now()), Math.abs(Date.now() - _) > 375 ? l = Date.now() : o = !0, _ = Date.now(), r.value = r.scrollBar.value, r.delta = t - r.value, r.max = r.scrollBar.max, t <= r.min && (t = r.min), t >= r.max && (t = r.max), r.targetValue = t; const s = t; let a = r.value; r.velocity = 100 * r.delta / (1 + r.max), r.from = a; const d = function (e) { return r.value = e > r.max ? r.max : e < r.min ? r.min : e, r.scrollBar.value = r.value, e > r.max ? "max" : e < r.min ? "min" : "value" }, c = function () { let n, u = Date.now() - _, p = Math.min(1e3, Date.now() - l), h = r.velocity * Math.exp(p / 175); if (o) (h < 0 && r.value <= t || h > 0 && r.value >= t) && (h = 0), (r.value + h <= r.min || r.value + h >= r.max) && (h = 0), h > .5 || h < -.5 ? (d(r.value + h), cancelAnimationFrame(i), i = 0, i = requestAnimationFrame(c)) : d(r.targetValue); else { if (u >= 175) return cancelAnimationFrame(i), e.container.$.fireEvent("kineticScroll"), void (i = 0); n = y.Animation.Easings.easeInSine(u, a, s - a, 175), d(n), cancelAnimationFrame(i), i = 0, i = requestAnimationFrame(c) } }; cancelAnimationFrame(i), i = requestAnimationFrame(c) }, e.inputEvents.listen() } unlisten() { const e = this; e.inputEvents && e.inputEvents.unlisten(), delete e.inputEvents } } class f { constructor(e) { this.events = {}, this.handlers = {}, this.element = e } hasClass(e) { const t = this, n = e.split(" "); for (let e = 0; e < n.length; e++)if (!t.element.classList.contains(n[e])) return !1; return !0 } addClass(e) { const t = this; if (t.hasClass(e)) return; const n = e.split(" "); for (let e = 0; e < n.length; e++)t.element.classList.add(n[e]); t.isNativeElement || d.observeElement(t.element) } removeClass(e) { const t = this; if (0 === arguments.length) return void t.element.removeAttribute("class"); const n = e.split(" "); for (let e = 0; e < n.length; e++)t.element.classList.remove(n[e]); "" === t.element.className && t.element.removeAttribute("class"), t.isNativeElement || d.observeElement(t.element) } get isCustomElement() { const e = this; return !!e.element.tagName.startsWith(n) || e.element instanceof window[n].BaseElement == 1 || "DIV" !== e.element.tagName && "SPAN" !== e.element.tagName && "BUTTON" !== e.element.tagName && "INPUT" !== e.element.tagName && "UL" !== e.element.tagName && "LI" !== e.element.tagName && document.createElement(e.element.nodeName) instanceof window[n].BaseElement == 1 } get isNativeElement() { return !this.isCustomElement } dispatch(e) { const t = this, n = t.events[e.type]; let r = !1; if (n.length > 1) for (let e = 0; e < n.length; e++) { const t = n[e]; if (t.namespace && t.namespace.indexOf("_") >= 0) { r = !0; break } } r && n.sort((function (e, t) { let n = e.namespace, r = t.namespace; return n = -1 === n.indexOf("_") ? 0 : parseInt(n.substring(n.indexOf("_") + 1)), r = -1 === r.indexOf("_") ? 0 : parseInt(r.substring(r.indexOf("_") + 1)), n < r ? -1 : n > r ? 1 : 0 })); for (let r = 0; r < n.length; r++) { const o = n[r]; if (e.namespace = o.namespace, e.context = o.context, e.defaultPrevented) break; const i = o.handler.apply(t.element, [e]); if (void 0 !== i && (e.result = i, !1 === i)) { e.preventDefault(), e.stopPropagation(); break } } return e.result } fireEvent(e, t, r) { const o = this; r || (r = { bubbles: !0, cancelable: !0, composed: null !== o.element.getRootNode().host }), r.detail = t || {}; const i = new CustomEvent(e, r); if (i.originalStopPropagation = i.stopPropagation, i.stopPropagation = function () { return i.isPropagationStopped = !0, i.originalStopPropagation() }, o.dispatchEvent(i), window[n].isVue) { const t = y.Core.toDash(e); if (t !== e) { const e = new CustomEvent(t, r); e.originalStopPropagation = i.stopPropagation, e.stopPropagation = function () { return e.isPropagationStopped = !0, e.originalStopPropagation() }, o.dispatchEvent(e) } } return i } get isPassiveSupported() { const e = this; if (void 0 !== e.supportsPassive) return e.supportsPassive; e.supportsPassive = !1; try { let t = Object.defineProperty({}, "passive", { get: function () { e.supportsPassive = !0 } }); window.addEventListener("testPassive", null, t), window.removeEventListener("testPassive", null, t) } catch (e) { } return e.supportsPassive } dispatchEvent(e) { const t = this, n = e.type, r = t.element.context, o = n.substring(0, 1).toUpperCase() + n.substring(1); t.element.context = document, t.element["on" + o] ? t.element["on" + o](e) : t.element["on" + n.toLowerCase()] ? t.element["on" + n.toLowerCase()](e) : t.element.dispatchEvent(e), t.element.context = r } listen(e, t) { const n = this, r = e.split("."), o = r.slice(1).join("."), i = r[0]; n.events[i] || (n.events[i] = []); const s = { type: i, handler: t, context: n.element, namespace: o }; p.indexOf(i) >= 0 && (n.inputEvents || (n.inputEvents = new h(n.element)), n.inputEvents[i]((function (e) { n.dispatchEvent(e) })), n.inputEvents.boundEventTypes.push(i), n.inputEvents.listen(i)), 0 === n.events[i].length && (n.handlers[i] = n.dispatch.bind(n), "wheel" === i ? n.element.addEventListener("wheel", n.handlers[i], !!n.isPassiveSupported && { passive: !1 }) : "touchmove" === i || "touchstart" === i || "touchend" === i ? n.element.addEventListener(i, n.handlers[i], !!n.isPassiveSupported && { passive: !1 }) : n.element.addEventListener(i, n.handlers[i], !1)), n.events[i].push(s) } unlisten(e) { const t = this, n = e.split("."), r = n.slice(1).join("."), o = n[0]; let i = t.events[o]; if (t.inputEvents && t.inputEvents.boundEventTypes.indexOf(o) >= 0 && (t.inputEvents.boundEventTypes.splice(t.inputEvents.boundEventTypes.indexOf(o), 1), 0 === t.inputEvents.boundEventTypes.length && t.inputEvents.unlisten(o)), i) { for (let e = 0; e < i.length; e++) { if ("" !== r) { let e = i.findIndex((e => e.namespace === r)); i.splice(e, 1); break } i = [] } 0 === i.length && (t.element.removeEventListener(o, t.handlers[o]), t.events[o] = [], delete t.handlers[o]) } } getAttributeValue(e, t) { const n = this, r = n.element.getAttribute(e); if (n.isNativeElement) return n.deserialize(r, t); const o = n.element.propertyByAttributeName[e]; return void 0 === o.deserialize ? n.deserialize(r, t, o.nullable) : n.element[o.deserialize](r) } setAttributeValue(e, t, n) { const r = this; let o, i = !1; if (r.isNativeElement) { if (o = r.serialize(t, n), "boolean" === n && ["checked", "selected", "async", "autofocus", "autoplay", "controls", "defer", "disabled", "hidden", "ismap", "loop", "multiple", "open", "readonly", "required", "scoped"].indexOf(e) >= 0) return void (t ? r.element.setAttribute(e, "") : r.element.removeAttribute(e)) } else { const s = r.element.propertyByAttributeName[e]; i = !s || s.nullable, o = s && s.serialize ? r.element[s.serialize](t) : r.serialize(t, n, i) } "array" !== n && "object" !== n || "[]" !== o && "{}" !== o ? void 0 === o ? (r.element.removeAttribute(e), r.element.shadowRoot && r.element.$.root && r.element.$.root.removeAttribute(e)) : (r.element.setAttribute(e, o), r.element.shadowRoot && r.element.$.root && r.element.$.root.setAttribute(e, o)) : r.element.removeAttribute(e) } serialize(e, t, n) { if (void 0 === t && (t = y.Types.getType(e)), void 0 !== e && (n || null !== e)) { if (n && null === e) return "null"; if ("string" === t) return e; if ("boolean" === t || "bool" === t) { if (!0 === e || "true" === e || 1 === e || "1" === e) return ""; if (!1 === e || "false" === e || 0 === e || "0" === e) return } return "array" === t ? JSON.stringify(e) : ["string", "number", "int", "integer", "float", "date", "any", "function"].indexOf(t) >= 0 ? e.toString() : "object" === t ? JSON.stringify(e) : void 0 } } deserialize(e, t, n) { const r = "null" === e; if (void 0 !== e && (!r || n)) { if (r && n) return null; if ("boolean" === t || "bool" === t) return null !== e; if ("number" === t || "float" === t) return "NaN" === e ? NaN : "Infinity" === e ? 1 / 0 : "-Infinity" === e ? -1 / 0 : parseFloat(e); if ("int" === t || "integer" === t) return "NaN" === e ? NaN : "Infinity" === e ? 1 / 0 : "-Infinity" === e ? -1 / 0 : parseInt(e); if ("string" === t) return e; if ("any" === t) return e; if ("date" === t) return new Date(e); if ("function" === t) { if ("function" == typeof window[e]) return window[e] } else if ("array" === t || "object" === t) try { const t = JSON.parse(e); if (t) return t } catch (n) { if (window[e] && "object" == typeof window[e]) return window[e]; if ("object" === t && e.indexOf("{") >= 0) { let t = (e = e.replace(/{/gi, "").replace(/}/gi, "").replace("[", "").replace("]", "").replace(/'/gi, "").replace(/"/gi, "").trim()).trim().split(","), n = {}; for (let e = 0; e < t.length; e++) { const r = t[e].split(":")[0].trim(), o = t[e].split(":")[1].trim(); n[r] = o } return n } if ("array" === t && e.indexOf("[") >= 0) { if (e.indexOf("{") >= 0) { let t = e.replace(/{/gi, "").replace("[", "").replace("]", "").replace(/'/gi, "").replace(/"/gi, "").trim(); t = t.split("},"); for (let e = 0; e < t.length; e++) { let n = {}, r = t[e].trim().split(","); for (let e = 0; e < r.length; e++) { const t = r[e].split(":")[0].trim(), o = r[e].split(":")[1].trim(); n[t] = o } t[e] = n } return t } return e.replace("[", "").replace("]", "").replace(/'/gi, "").replace(/"/gi, "").trim().split(",") } } } } } class g { static get Ripple() { return i } static get Easings() { return s } } class y { static get Types() { return o } static get Core() { return a } static get Animation() { return g } static get Scroll() { return m } static get InputEvents() { return h } static Extend(e) { return new f(e) } static Assign(e, t) { if (e.indexOf(".") >= 0) { const n = e.split("."); return y[n[0]] || (y[n[0]] = {}), void (y[n[0]][n[1]] = t) } y[e] = t } } const w = y.Extend(document); let b = null; document.addEventListener("click", (() => { d.start(), b && clearTimeout(b), b = setTimeout((() => { d.stop() }), 1e4) })), document.addEventListener("mouseenter", (() => { d.start() })), document.addEventListener("mouseleave", (() => { d.stop() })); class v { } v.cache = {}; class _ extends HTMLElement { static get properties() { return { animation: { value: "advanced", type: "string", allowedValues: ["none", "simple", "advanced"] }, unfocusable: { value: !1, type: "boolean" }, disabled: { value: !1, type: "boolean" }, dataContext: { value: null, reflectToAttribute: !1, type: "any" }, debugMode: { value: !0, type: "boolean", reflectToAttribute: !1 }, locale: { value: "en", type: "string", reflectToAttribute: !1 }, localizeFormatFunction: { value: null, type: "any", reflectToAttribute: !1 }, messages: { value: { en: { propertyUnknownName: "Invalid property name: '{{name}}'!", propertyUnknownType: "'{{name}}' property is with undefined 'type' member!", propertyInvalidValue: "Invalid '{{name}}' property value! Actual value: '{{actualValue}}', Expected value: '{{value}}'!", propertyInvalidValueType: "Invalid '{{name}}' property value type! Actual type: '{{actualType}}', Expected type: '{{type}}'!", methodInvalidValueType: "Invalid '{{name}}' method argument value type! Actual type: '{{actualType}}', Expected type: '{{type}}' for argument with index: '{{argumentIndex}}'!", methodInvalidArgumentsCount: "Invalid '{{name}}' method arguments count! Actual arguments count: '{{actualArgumentsCount}}', Expected at least: '{{argumentsCount}}' argument(s)!", methodInvalidReturnType: "Invalid '{{name}}' method return type! Actual type: '{{actualType}}', Expected type: '{{type}}'!", elementNotInDOM: "Element does not exist in DOM! Please, add the element to the DOM, before invoking a method.", moduleUndefined: "Module is undefined.", missingReference: "{{elementType}}: Missing reference to '{{files}}'.", htmlTemplateNotSuported: "{{elementType}}: Web Browser doesn't support HTMLTemplate elements.", invalidTemplate: "{{elementType}}: '{{property}}' property accepts a string that must match the id of an HTMLTemplate element from the DOM." } }, reflectToAttribute: !1, inherit: !0, type: "object" }, props: { value: null, reflectToAttribute: !1, isHierarchicalProperty: !0, type: "any" }, readonly: { value: !1, type: "boolean" }, renderMode: { value: "auto", type: "string", reflectToAttribute: !1, allowedValues: ["auto", "manual"] }, rightToLeft: { value: !1, type: "boolean" }, rethrowError: { value: !0, type: "boolean", reflectToAttribute: !1 }, theme: { value: window[n].Theme, type: "string" }, visibility: { value: "visible", allowedValues: ["visible", "collapsed", "hidden"], type: "string" }, wait: { value: !1, type: "boolean" } } } getBindings(e, t) { const n = this; let r = 0, o = {}, i = (e => { if (e instanceof HTMLElement) return n.parseAttributes(e); { let t = n.parseProperty(e.data ? e.data.trim() : null, "textContent", e); if (t) return n && e.parentNode === n.$.content && (t.value = "" !== n.$.html ? n.$.html : void 0, n.innerHTML = ""), { textContent: t } } })(e); i && (o.data = i), t || (o.mapping = [], t = o), e.getAttribute && (o.nodeId = e.getAttribute("jqx-id"), t && i && (t.mapping[o.nodeId] = i)), o.node = e, e.firstChild && (o.children = {}); for (let i = e.firstChild; i; i = i.nextSibling)o.children[r++] = n.getBindings(i, t); return o } _addRemovePropertyBinding(e, t, n, r, o) { if (!e || !t || !n) return; const i = this, s = i.bindings, a = n.getAttribute("jqx-id"), l = e.indexOf("{{") >= 0; let d = !1; (e = e.replace("{{", "").replace("}}", "").replace("[[", "").replace("]]", "")).indexOf("!") >= 0 && (e = e.replace("!", ""), d = !0); const c = i._properties[e], u = { name: e, reflectToAttribute: c.reflectToAttribute, twoWay: l, type: c.type, not: d }; if (o && !r) { const n = {}, r = { name: e, targetPropertyName: t, reflectToAttribute: c.reflectToAttribute, twoWay: l, type: c.type, not: d }; n[e] = r, s.mapping[a] = n } const p = function (e) { for (let o in e) { const s = e[o]; if (s.nodeId === a) { s.data || (s.data = {}), r ? (s.data[t] = null, delete s.data[t]) : s.data[t] = u; break } if (s.children) p(s.children); else if (s.node && s.node.children && s.node === n.parentElement) { const e = s.node; if (!e.firstChild) continue; s.children = {}; let t = 0; for (let n = e.firstChild; n; n = n.nextSibling)s.children[t++] = i.getBindings(n); p(s.children) } } }; p(s.children), r ? delete i.boundProperties[e] : i.boundProperties[e] = !0, i.updateBoundNodes(e) } addPropertyBinding(e, t, n, r) { this._addRemovePropertyBinding(e, t, n, !1, r) } removePropertyBinding(e, t, n, r) { this._addRemovePropertyBinding(e, t, n, !0, r) } parseAttributes(e) { const t = this; let n; for (let r = 0; r < e.attributes.length; r++) { const o = e.attributes[r], i = o.name, s = o.value; v.cache["toCamelCase" + i] || (v.cache["toCamelCase" + i] = y.Core.toCamelCase(i)); const a = v.cache["toCamelCase" + i]; if (i.indexOf("(") >= 0) { let r = i.substring(1, i.length - 1); if (t && !t.dataContext) { t.templateListeners[e.getAttribute("jqx-id") + "." + r] = s, e.removeAttribute(i); continue } { n || (n = {}); const e = s.substring(0, s.indexOf("(")); n[a] = { isEvent: !0, name: r, value: e }; continue } } let l = t.parseProperty(s, i, e); l && (n || (n = {}), n[a] = l) } return n } parseProperty(e, t) { if (!e || !e.length) return; const n = this; let r, o = e.length, i = 0, s = 0, a = 0, l = !0; for (; s < o;) { i = e.indexOf("{{", s); let t = e.indexOf("[[", s), n = "}}"; if (t >= 0 && (i < 0 || t < i) && (i = t, l = !1, n = "]]"), a = i < 0 ? -1 : e.indexOf(n, i + 2), a < 0) return; r = r || {}; let o = e.slice(i + 2, a).trim(); r.name = o, s = a + 2 } const d = r.name, c = n ? n._properties[d] : null; return r.twoWay = l, r.ready = !1, n && (d.indexOf("::") >= 0 ? n.boundProperties[d.substring(0, d.indexOf("::"))] = !0 : n.boundProperties[d] = !0), c ? (r.type = c.type, r.reflectToAttribute = c.reflectToAttribute) : (["checked", "selected", "async", "autofocus", "autoplay", "controls", "defer", "disabled", "hidden", "ismap", "loop", "multiple", "open", "readonly", "required", "scoped"].indexOf(t) >= 0 ? r.type = "boolean" : r.type = "string", r.reflectToAttribute = !0), r } updateTextNodes() { const e = this; e.updateTextNode(e.shadowRoot || e, e.bindings, e) } updateTextNode(e, t, n) { const r = this; if (!t) return; let o = 0; for (let i = e.firstChild; i && t.children; i = i.nextSibling)r.updateTextNode(i, t.children[o++], n); if (t && t.data) for (let e in t.data) { const r = t.data[e], o = r.name; "textContent" === e && r.twoWay && !r.updating && void 0 !== r.value && (n[o] = r.value) } } updateBoundProperty(e, t) { if (t.updating) return; const n = this; t.updating = !0, n[e] = t.value, t.updating = !1 } updateBoundNodes(e) { const t = this; if (t.updateBoundNode(t.shadowRoot || t, t.bindings, t, e), t.detachedChildren.length > 0) for (let n = 0; n < t.detachedChildren.length; n++) { const r = t.detachedChildren[n], o = r.getAttribute("jqx-id"), i = function (e) { if (e.nodeId === o) return e; for (let t in e.children) { const n = e.children[t]; if ((n.getAttribute ? n.getAttribute("jqx-id") : "") === o) return e; if (n.children) { const e = i(n); if (e) return e } } return null }, s = i(t.bindings); if (s) t.updateBoundNode(r, s, t, e, !0); else if (r.getAttribute && t.bindings.mapping) { const n = t, r = t.bindings; if (r) for (let o in r.mapping) { const i = n.querySelector('[jqx-id="' + o + '"]'); if (i) { const s = r.mapping[o]; t.updateBoundData(i, s, n, e) } } } } } updateBoundMappedNodes() { const e = this, t = e.bindings, n = e; if (t.mapping) for (let r in t.mapping) { let o = n.querySelector('[jqx-id="' + r + '"]'); if (n.shadowRoot && (o = n.querySelector('[id="' + r + '"]'), o || (o = n.shadowRoot.querySelector('[id="' + r + '"]') || n.shadowRoot.querySelector('[jqx-id="' + r + '"]'))), o) { const i = t.mapping[r]; e.updateBoundData(o, i, n) } else if (n.getAttribute("aria-controls")) { let i = document.getElementById(n.getAttribute("aria-controls")); if (!i && n.shadowRoot && (i = n.shadowRoot.getElementById(n.getAttribute("aria-controls"))), o = i.querySelector('[jqx-id="' + r + '"]'), o) { const i = t.mapping[r]; e.updateBoundData(o, i, n) } } } } updateBoundNode(e, t, n, r, o) { const i = this; if (!t) return; let s = 0; if (o) { if (o && !t.data) for (let a = e.firstChild; a && t.children; a = a.nextSibling)if (a.getAttribute) { const e = a.getAttribute("jqx-id"), o = function () { for (let n in t.children) if (t.children[n].nodeId === e) return t.children[n] }(); i.updateBoundNode(a, o, n, r), s++ } else i.updateBoundNode(a, t.children[s++], n, r, o) } else for (let o = e.firstChild; o && t.children; o = o.nextSibling)if (o.getAttribute) { const e = o.getAttribute("jqx-id"), a = function () { for (let n in t.children) if (t.children[n].nodeId === e) return t.children[n] }(); i.updateBoundNode(o, a, n, r), s++ } else i.updateBoundNode(o, t.children[s++], n, r); if (!t || !t.data) return; const a = t.data; i.updateBoundData(e, a, n, r) } updateBoundData(e, t, n, r) { const o = this; for (let i in t) { const s = t[i]; let a = s.name; if (!s.updating && (a.indexOf("::") >= 0 && (a = a.substring(0, a.indexOf("::"))), void 0 === r || r === a)) { if (a.indexOf("(") >= 0) { let e = a.substring(a.indexOf("(")); const t = a.substring(0, a.indexOf("(")); if (e = e.substring(1, e.length - 1), e = e.replace(/ /gi, ""), e = e.split(","), e.length > 0 && "" !== e[0]) { let r = []; for (let t = 0; t < e.length; t++)r.push(n[e[t]]); s.value = n[t].apply(n, r) } else s.value = n[t](); s.type = typeof s.value } else s.value = n[a]; if ("innerHTML" === a) { if (e[i].toString().trim() !== n[a].toString().trim()) { if (window.jqxBlazor && e[i].indexOf("\x3c!--") >= 0) { (s.ready || n._properties[a].defaultValue !== s.value) && (e[i] = s.value.toString()); continue } (s.ready || n._properties[a].defaultValue !== s.value) && (e[i] = s.value.toString().trim()) } } else s.not ? (e[i] = !s.value, s.targetPropertyName && (e[s.targetPropertyName] = !s.value)) : (e[i] = s.value, s.targetPropertyName && (e[s.targetPropertyName] = s.value)); if (e.$ && e.$.isNativeElement) { v.cache["toDash" + i] || (v.cache["toDash" + i] = y.Core.toDash(i)); const t = v.cache["toDash" + i], n = e.$.getAttributeValue(t, s.type); !s.reflectToAttribute || n === s.value && s.ready || e.$.setAttributeValue(t, s.value, s.type), s.reflectToAttribute || e.$.setAttributeValue(t, null, s.type) } if (!s.ready) { if (e.$ && e.$.isCustomElement) { v.cache["toDash" + i] || (v.cache["toDash" + i] = y.Core.toDash(i)); const t = v.cache["toDash" + i]; e._properties || (e._beforeCreatedProperties = e._properties = e.propertyByAttributeName = []), e._properties[i] || (e._properties[i] = { attributeName: t }, e._beforeCreatedProperties && (e._beforeCreatedProperties[i] = e._properties[i]), e.propertyByAttributeName[t] = e._properties[i]); const n = e._properties[i]; n.isUpdating = !0, s.reflectToAttribute && (s.not ? e.$.setAttributeValue(n.attributeName, !s.value, s.type) : e.$.setAttributeValue(n.attributeName, s.value, s.type)), s.reflectToAttribute || e.$.setAttributeValue(n.attributeName, null, s.type), n.isUpdating = !1 } if (s.twoWay) { const t = function (t) { if (s.value = t, e.$ && e.$.isNativeElement) { v.cache["toDash" + i] || (v.cache["toDash" + i] = y.Core.toDash(i)); const t = v.cache["toDash" + i], n = e.$.getAttributeValue(t, s.type); s.reflectToAttribute && n !== s.value && e.$.setAttributeValue(t, s.value, s.type), s.reflectToAttribute || e.$.setAttributeValue(t, null, s.type) } }; if (s.name.indexOf("::") >= 0) { const n = s.name.indexOf("::"), r = s.name.substring(n + 2); o["$" + e.getAttribute("jqx-id")].listen(r, (function () { t(e[i]); const n = s.name.substring(0, s.name.indexOf("::")); o.updateBoundProperty(n, s) })) } if (e.$ && e.$.isCustomElement) { e._properties[i] && (e._properties[i].notify = !0), v.cache["toDash" + i] || (v.cache["toDash" + i] = y.Core.toDash(i)); const n = v.cache["toDash" + i]; o["$" + e.getAttribute("jqx-id")].listen(n + "-changed", (function (e) { let n = e.detail; t(n.value); const r = o.context; e.context !== document && (o.context = o), o.updateBoundProperty(s.name, s), o.context = r })) } } } s.ready = !0 } } } static clearCache() { this.cache = {} } addMessages(e, t) { Object.assign(this.messages[e], t) } localize(e, t) { const n = this; if (!n.messages || !n.messages[n.locale]) return; let r = n.messages[n.locale][e]; if ("" === r) return ""; if (!r) { const r = n.messages.en; if (r) { let n = r[e]; if (n) { for (let e in t) { let r = t[e]; n = n.replace(new RegExp("{{" + e + "}}", "g"), r) } return n } return e } } const o = r; for (let e in t) { let n = t[e]; r = r.replace(new RegExp("{{" + e + "}}", "g"), n) } if (n.localizeFormatFunction) { const i = n.localizeFormatFunction(o, r, t, e); if (void 0 !== i) return i } return r } static get requires() { return {} } static get listeners() { return { "theme-changed": function (e) { this.theme = e.detail.newValue } } } static get methods() { return {} } get classNamesMap() { return { animation: "jqx-animate", rippleAnimation: "jqx-ripple" } } get hasAnimation() { return "none" !== this.animation } get hasRippleAnimation() { return "none" !== this.animation && "advanced" === this.animation } static get modules() { return window[n].Modules } get properties() { const e = this; return e._properties || (e._properties = []), e._properties } get parents() { const e = this; let t = [], r = e.parentNode; for (; r && 9 !== r.nodeType;)r instanceof HTMLElement == 1 && t.push(r), r = r.parentNode; const o = e.getRootNode(); if (o.host) { const e = e => { let t = [e], n = e.parentNode; for (; n && 9 !== n.nodeType;)n instanceof HTMLElement == 1 && t.push(n), n = n.parentNode; return t }; t = t.concat(e(o.host)) } return window[n].EnableShadowDOM && e.isInShadowDOM && e.shadowParent && (t = t.concat(e.shadowParent.parents)), t } log(e) { this._logger("log", e) } warn(e) { this._logger("warn", e) } error(e) { this._logger("error", e) } _logger(e, t) { if (this.debugMode) { const n = t instanceof Error ? t.message : t.toString(); console[e](n) } if (this.rethrowError && "error" === e) throw t } get focused() { return this.contains(document.activeElement) } template() { return "<div></div>" } registered() { const e = this; e.onRegistered && e.onRegistered() } created() { const e = this; e.isReady = !1, e._initElement(e), e._setModuleState("created"), e.onCreated && e.onCreated() } completed() { const e = this; e.isCompleted = !0, e._onCompleted && e._onCompleted(), e.onCompleted && e.onCompleted() } whenReady(e) { const t = this; t.isCompleted ? e() : (t.whenReadyCallbacks || (t.whenReadyCallbacks = []), t.whenReadyCallbacks.push(e)) } whenRendered(e) { const t = this; t.isRendered ? e() : (t.whenRenderedCallbacks || (t.whenRenderedCallbacks = []), t.whenRenderedCallbacks.push(e)) } addThemeClass() { const e = this; "" !== e.theme && e.classList.add("jqx-" + e.theme) } addDefaultClass() { const e = this; e.classList.add(n.toLowerCase() + "-element"), e.classList.add(e.nodeName.toLowerCase()) } _renderShadowRoot() { const e = this; if (e.shadowRoot) { e.$.root.classList.add(e.nodeName.toLowerCase()); for (let t = 0; t < e.attributes.length; t++) { const n = e.attributes[t]; "class" === n.name || "id" === n.name || "style" === n.name || "tabindex" === n.name || n.name.indexOf("aria") >= 0 || e.$.root.setAttribute(n.name, n.value) } for (let t = 0; t < e.classList.length; t++) { const n = e.classList[t]; "jqx-element-init" !== n && "jqx-element" !== n && "jqx-hidden" !== n && "jqx-visibility-hidden" !== n && e.$.root.classList.add(n) } } } render() { const e = this; if (!e.isRendered && (e.isRendered = !0, e.isRendering = !1, e.context = document, e._renderShadowRoot(), e.whenRenderedCallbacks)) { for (let t = 0; t < e.whenRenderedCallbacks.length; t++)e.whenRenderedCallbacks[t](); e.whenRenderedCallbacks = [] } e.onRender && e.onRender(), e.disabled && e.setAttribute("aria-disabled", !0), e.readonly && -1 !== ["checkbox", "combobox", "grid", "gridcell", "listbox", "radiogroup", "slider", "spinbutton", "textbox"].indexOf(e.getAttribute("role")) && e.setAttribute("aria-readonly", !0) } ready() { const e = this; if (e._setId(), e.addThemeClass(), e.addDefaultClass(), "collapsed" === e.visibility ? e.classList.add("jqx-hidden") : "hidden" === e.visibility && e.classList.add("jqx-visibility-hidden"), e.dataContext && e.applyDataContext(), e.onReady && e.onReady(), e.shadowRoot && JQX(e._selector)) { if (JQX(e._selector).styleUrls) { const t = JQX(e._selector).styleUrls; for (let n = 0; n < t.length; n++)e.importStyle(t[n]) } if (JQX(e._selector).styles) { const t = document.createElement("style"); t.innerHTML = JQX(e._selector).styles, e.shadowRoot.insertBefore(t, e.shadowRoot.firstChild) } } JQX(e._selector) && JQX(e._selector).ready && JQX(e._selector).ready() } _setId() { const e = this; if (!e.id) { const t = e.elementName; e.id = t.slice(0, 1).toLowerCase() + t.slice(1) + Math.floor(65536 * (1 + Math.random())).toString(16).substring(1) } } checkLicense() { const e = this; "Evaluation" === window[n].License && -1 === window.location.hostname.indexOf("htmlelements") && (e.logWatermark(), e.logLicense(), window[n].License = "") } logWatermark() { const e = document.createElement("a"); e.href = "https://www.htmlelements.com/", e.innerHTML = "https://www.htmlelements.com/", e.style.position = "absolute", e.style.right = "5px", e.style.bottom = "5px", e.style.color = "#fff", e.style.padding = "20px", e.style.borderRadius = "5px", e.style.background = "#0C3D78", e.style.cursor = "pointer", e.style.zIndex = "999999", e.style.display = "block", e.style.fontSize = "24px", e.style.textDecoration = "none", e.style.fontWeight = "bold", e.style.opacity = 0, e.style.transition = "opacity .35s ease-in-out", e.id = "watermark", document.getElementById("watermark") || setTimeout((() => { document.getElementById("watermark") || (document.body.appendChild(e), setTimeout((() => { e.style.opacity = 1 })), setTimeout((() => { e.style.opacity = 0, setTimeout((() => { e.parentNode.removeChild(e) }), 350) }), 6e3)) }), 1e3) } logLicense() { console.log("****************************************************************************************************************"), console.log("****************************************************************************************************************"), console.log("****************************************************************************************************************"), console.log("*jQWidgets License Key Not Found."), console.log("*This is an EVALUATION only Version, it is NOT Licensed for software projects intended for PRODUCTION."), console.log("*if you want to hide this message, please send an email to: sales@jqwidgets.com for a license."), console.log("****************************************************************************************************************"), console.log("****************************************************************************************************************"), console.log("****************************************************************************************************************") } get _selector() { const e = this; return e.id ? "#" + e.id : e.classList.length > 0 ? "." + e.classList[0] : "" } applyDataContext(e) { const t = this; let n = "string" == typeof t.dataContext ? window[t.dataContext] || document[t.dataContext] : t.dataContext; if (e && (n = e, t.dataContext = e), n) { if (!n._uid) { n._uid = (Date.now().toString(36) + Math.random().toString(36).substr(2, 5)).toUpperCase(), n._properties = []; for (let e in n) { const r = n[e]; "function" != typeof r && "_properties" !== e && "_uid" !== e && (n._properties[e] = r, Object.defineProperty(n, e, { configurable: !1, enumerable: !0, get: () => n._properties[e], set(r) { const o = n._properties[e]; n._properties[e] = r; let i = []; i[e] = { oldValue: o, value: r }, i.length++, t.updatingDataContext = !0, w.fireEvent("dataContextPropertyChanged", { dataContext: n, properties: i }, { bubbles: !1, cancelable: !0 }), t.updatingDataContext = !1 } })) } } if (t.dataContextProperties = t.parseAttributes(t), t.dataContextPropertiesMap = {}, t.dataContextListeners = {}, t.dataContextProperties) { t.updatingDataContext = !0; for (let e in t.dataContextProperties) { const r = t.dataContextProperties[e], o = r.name; if (r.propertyName = e, t.dataContextPropertiesMap[o] = e, v.cache["toDash" + e] || (v.cache["toDash" + e] = y.Core.toDash(o)), r.isEvent) { const e = r.value; t.dataContextListeners[o] && t.removeEventListener(o, t.dataContextListeners[o]), t.dataContextListeners[o] = function (t) { n[e](t) }, t.addEventListener(o, t.dataContextListeners[o]) } if (o.indexOf(".") >= 0) { const r = o.split("."); let i = n[r[0]]; for (let e = 1; e < r.length; e++)i = i[r[e]]; void 0 !== i && (t[e] = i) } else t[e] = n[o] } t.dataContextPropertyChangedHandler = function (e) { const n = e.detail.properties; if (e.detail.dataContext === ("string" == typeof t.dataContext ? window[t.dataContext] || document[t.dataContext] : t.dataContext)) for (let e in n) { const r = t.dataContextPropertiesMap[e], o = t.context; r && (t.context = document, t[r] = n[e].value, t.context = o) } }, w.listen("dataContextPropertyChanged", t.dataContextPropertyChangedHandler), t.updatingDataContext = !1 } else t.dataContextProperties = null } else { t.dataContextProperties = null; const e = function () { ("string" == typeof t.dataContext ? window[t.dataContext] || document[t.dataContext] : t.dataContext) && (t.applyDataContext(), window.removeEventListener("load", e)) }; window.addEventListener("load", e) } } updateDataContextProperty(e) { const t = this, n = "string" == typeof t.dataContext ? window[t.dataContext] || document[t.dataContext] : t.dataContext, r = t.dataContextProperties[e]; if (!t.updatingDataContext && r.twoWay) { const o = r.name; if (o.indexOf(".") >= 0) { const r = o.split("."); let i = n[r[0]]; for (let e = 1; e < r.length; e++)i = i[r[e]]; void 0 !== i && (i = t[e], c[n._uid] && (c[n._uid][e] = i)) } else n[o] = t[e], c[n._uid] && (c[n._uid][e] = n[o]) } } static get version() { return window[n].Version } initProperties() { const e = this; if (JQX(e._selector) && JQX(e._selector).properties && (e._initProperties = JQX(e._selector).properties), e.hasAttribute("props") && !e.props ? e._initProperties = window[e.getAttribute("props")] : e.props && (e._initProperties = e.props), e._initProperties) { const t = Object.keys(e._initProperties); for (let n = 0; n < t.length; n++) { const r = t[n], o = e._initProperties[r]; if (void 0 !== o) { if (o.constructor === JQX.ObservableArray || o instanceof JQX.ObservableArray) { e[r] = o.toArray(); continue } if (o.constructor === JQX.DataAdapter || "jqxDataAdapter" === o.constructor.name || "object" == typeof o && JQX.DataAdapter && o instanceof JQX.DataAdapter || o instanceof JQX.Observable || o.constructor === JQX.Observable || "object" != typeof o || y.Types.isArray(o) || o instanceof Date) { if (void 0 === e[r] && -1 === ["onReady", "onAttached", "onDetached", "onCreated", "onCompleted"].indexOf(r)) { const t = e.localize("propertyUnknownName", { name: r }); e.log(t) } e[r] = o; continue } } if ("messages" !== r) if ("dataSourceMap" !== r && "rowCSSRules" !== r) { if (o && "object" == typeof o) { const t = function (n, r) { const o = Object.keys(n); for (let i = 0; i < o.length; i++) { const s = o[i], a = n[s], l = e._properties[r + "_" + s]; if (l && null === l.value) { if (void 0 === e[r + "_" + s]) { const t = e.localize("propertyUnknownName", { name: r + "_" + s }); e.log(t) } e[r + "_" + s] = a } else if ("object" == typeof a && !y.Types.isArray(a) && a && a.constructor !== Date) t(a, r + "_" + s); else { if (void 0 === e[r + "_" + s]) { const t = e.localize("propertyUnknownName", { name: r + "_" + s }); e.log(t) } e[r + "_" + s] = a } } }; t(o, r) } } else e[r] = o; else e[r] = Object.assign(e[r], o) } } } setProperties(e) { const t = this, n = Object.keys(e); for (let r = 0; r < n.length; r++) { const o = n[r], i = e[o]; if (i.constructor === JQX.ObservableArray || i instanceof JQX.ObservableArray) t[o] = i.toArray(); else if (i.constructor === JQX.DataAdapter || "jqxDataAdapter" === i.constructor.name || "object" == typeof i && JQX.DataAdapter && i instanceof JQX.DataAdapter || i instanceof JQX.Observable || i.constructor === JQX.Observable || "object" != typeof i || y.Types.isArray(i) || i instanceof Date) { if (void 0 === t[o] && -1 === ["onReady", "onAttached", "onDetached", "onCreated", "onCompleted"].indexOf(o)) continue; const e = t._properties[o]; "int" === e.type || "number" === e.type && "string" == typeof subPropertyValue ? "int" === e.type ? t[o] = parseInt(i) : t[o] = parseFloat(i) : t[o] = i } else if ("messages" !== o && "dataSourceMap" !== o) { if ("object" == typeof i) { const e = function (n, r) { const o = Object.keys(n); for (let i = 0; i < o.length; i++) { const s = o[i], a = n[s], l = t._properties[r + "_" + s]; if (l && null === l.value) { if (void 0 === t[r + "_" + s]) continue; const e = t._properties[r + "_" + s]; "int" === e.type || "number" === e.type && "string" == typeof a ? "int" === e.type ? t[r + "_" + s] = parseInt(a) : t[r + "_" + s] = parseFloat(a) : t[r + "_" + s] = a } else if ("object" == typeof a && !y.Types.isArray(a) && a && a.constructor !== Date) e(a, r + "_" + s); else { if (void 0 === t[r + "_" + s]) continue; const e = t._properties[r + "_" + s]; "int" === e.type || "number" === e.type && "string" == typeof a ? "int" === e.type ? t[r + "_" + s] = parseInt(a) : t[r + "_" + s] = parseFloat(a) : t[r + "_" + s] = a } } }; e(i, o) } } else t[o] = i } } setup() { const e = this; if (e.context = this, e.isReady && !e.isCompleted) return; if (e.isReady) return e._setModuleState("attached"), e.isAttached = !0, e.attached(), e._handleListeners("listen"), void (e.context = document); e.ownerElement && e.ownerElement.detachedChildren.indexOf(e) >= 0 && e.ownerElement.detachedChildren.splice(e.ownerElement.detachedChildren.indexOf(e), 1), e.isReady = !0, e.methods = e.getStaticMember("methods"), e.initProperties(), a.isMobile && e.classList.add("jqx-mobile"); for (let t = 0; t < e.attributes.length; t += 1) { const n = e.propertyByAttributeName[e.attributes[t].name]; if (!n) continue; let r = e.$.getAttributeValue(n.attributeName, n.type); const o = r ? r.toString() : ""; if (!(o.indexOf("{{") >= 0 || o.indexOf("[[") >= 0 || "object" !== n.type && "array" !== n.type && (e.attributes[t].value.indexOf("{{") >= 0 || e.attributes[t].value.indexOf("[[") >= 0) || void 0 === r || n.value === r)) { const o = y.Types.getType(r), i = e.attributes[t].value; if (("any" === n.type || "object" === n.type) && "" + e[n.name] === r) continue; if ("array" === n.type && e[n.name] && JSON.stringify(e[n.name]) === r) continue; if ("number" === o && isNaN(r) && "NaN" !== i && "Infinity" !== i && "-Infinity" !== i) { const t = e.localize("propertyInvalidValueType", { name: n.name, actualType: "string", type: n.type }); e.log(t) } n.isUpdatingFromAttribute = !0, e[n.name] = r, n.isUpdatingFromAttribute = !1 } } for (let t in e._properties) { const n = e._properties[t]; if ("innerHTML" === t && n.value === n.defaultValue && (n.value = n.defaultValue = y.Core.html(e)), "boolean" !== n.type && "bool" !== n.type || "false" === e.getAttribute(n.attributeName) && (n.isUpdating = !0, e.setAttribute(n.attributeName, ""), n.isUpdating = !1), n.defaultReflectToAttribute && n.reflectToAttribute) { if (n.defaultReflectToAttribute && n.defaultReflectToAttributeConditions) { let t = !0; for (let r = 0; r < n.defaultReflectToAttributeConditions.length; r++) { const o = n.defaultReflectToAttributeConditions[r]; let i, s; for (let e in o) i = e, s = o[e]; e._properties[i] && e._properties[i].value !== s && (t = !1) } if (!t) continue } n.isUpdating = !0, e.$.setAttributeValue(n.attributeName, n.value, n.type), n.isUpdating = !1 } } const t = []; if (e.children.length > 0) for (let n = 0; n < e.children.length; n++) { const r = e.children[n]; y.Extend(r).isCustomElement && t.push(r) } e.applyTemplate(), e.complete = function () { if (!e.templateBindingsReady) { const t = e => { e.templateBindingsReady || (e.templateBindingsReady = !0, e.updateTextNodes(), e.updateBoundNodes()) }; if (e.ownerElement) { let n = e.ownerElement, r = []; for (; n;)r.push(n), n = n.ownerElement; for (let e = r.length - 1; e >= 0; e--)t(r[e]); t(e) } else t(e) } const t = () => { if (e._setModuleState("ready"), e.ready(), "auto" !== e.renderMode || e.isRendered || e.render(), e.isAttached = !0, e._setModuleState("attached"), e.attached(), e._handleListeners("listen"), e.isHidden || 0 !== e.offsetWidth && 0 !== e.offsetHeight || (e.isHidden = !0), e.completed(), e.isRendered && (e.context = document), e.whenReadyCallbacks) { for (let t = 0; t < e.whenReadyCallbacks.length; t++)e.whenReadyCallbacks[t](); e.whenReadyCallbacks = [] } }; if (e.wait) e.classList.add("jqx-visibility-hidden"); else if (e.classList.contains("jqx-async")) requestAnimationFrame((() => { t() })); else { const n = e.shadowParent; e.shadowParent = null; const r = e.parents; if (e.shadowParent = n, 0 === r.length) return; const o = () => { let t = e.ownerElement, n = []; for (; t;)n.push(t), t = t.ownerElement; for (let e = n.length - 1; e >= 0; e--)n[e].updateBoundMappedNodes() }; e.ownerElement && "HTML" !== r[r.length - 1].nodeName ? e.getRootNode().host ? t() : e.ownerElement && "HTML" === e.ownerElement.parents[e.ownerElement.parents.length - 1].nodeName ? (o(), t()) : e.checkIsInDomInterval = setInterval((() => { const n = e.parents; "HTML" === n[n.length - 1].nodeName && (clearInterval(e.checkIsInDomInterval), o(), t()) }), 100) : t() } }; let r = [].slice.call(e.querySelectorAll("[jqx-id]")).concat(t); if (window[n].EnableShadowDOM && !0 !== e.isInShadowDOM && (r = [].slice.call(e.shadowRoot.querySelectorAll("[jqx-id]")).concat(t)), 0 === r.length) e.complete(); else { e._completeListeners = 0; for (let t = 0; t < r.length; t++) { const n = r[t]; if (y.Extend(n).isCustomElement) { const t = function () { e._completeListeners--, 0 === e._completeListeners && (e.complete(), delete e._completeListeners) }.bind(e); n.isCompleted || n.isUtilityElement || !0 === n.wait || (e._completeListeners++, n._onCompleted || (n.completeHandlers = [], n._onCompleted = function () { for (let e = 0; e < n.completeHandlers.length; e++)n.completeHandlers[e]() }), n.completeHandlers.push(t)) } } 0 === e._completeListeners && e.complete() } } visibilityChangedHandler() { const e = this; e.isReady && requestAnimationFrame((() => { 0 === e.offsetWidth || 0 === e.offsetHeight ? e.isHidden = !0 : (e.isHidden = !1, e.$.fireEvent("resize", e, { bubbles: !1, cancelable: !0 })) })) } attributeChangedCallback(e, t, n) { const r = this, o = r.propertyByAttributeName[e]; if ("class" !== e && "style" !== e || r.visibilityChangedHandler(), o || r.attributeChanged(e, t, n), r.onAttributeChanged && r.onAttributeChanged(e, t, n), !o || o && o.isUpdating) return; let i = r.$.getAttributeValue(o.attributeName, o.type); void 0 !== n && r[o.name] !== i && (o.isUpdatingFromAttribute = !0, r[o.name] = void 0 !== i ? i : r._properties[o.name].defaultValue, o.isUpdatingFromAttribute = !1) } attributeChanged(e, t, n) { } set hasStyleObserver(e) { const t = this; void 0 === t._hasStyleObserver && (t._hasStyleObserver = e), e ? d.watch(t) : d.unwatch(t) } get hasStyleObserver() { const e = this; return void 0 === e._hasStyleObserver || e._hasStyleObserver } attached() { const e = this; e.hasStyleObserver && d.watch(e), e.onAttached && e.onAttached(), JQX(e._selector) && JQX(e._selector).attached && JQX(e._selector).attached() } detached() { const e = this; e.hasStyleObserver && d.unwatch(e), e._setModuleState("detached"), e.isAttached = !1, e.ownerElement && -1 === e.ownerElement.detachedChildren.indexOf(e) && e.ownerElement.detachedChildren.push(e), e._handleListeners("unlisten"), e.onDetached && e.onDetached(), JQX(e._selector) && JQX(e._selector).detached && JQX(e._selector).detached(), u && u[e._selector] && delete u[e._selector] } propertyChangedHandler(e, t, n) { const r = this; t !== n && ("theme" === e && ("" !== t && r.classList.remove("jqx-" + t), "" !== n && r.classList.add("jqx-" + n)), "visibility" === e ? ("collapsed" === t ? r.classList.remove("jqx-hidden") : "hidden" === t && r.classList.remove("jqx-visibility-hidden"), "collapsed" === n ? r.classList.add("jqx-hidden") : "hidden" === n && r.classList.add("jqx-visibility-hidden")) : ("disabled" === e || "readonly" === e) && r._ariaPropertyChangedHandler(e, n), r.propertyChanged && r.propertyChanged(e, t, n)) } _ariaPropertyChangedHandler(e, t) { const n = this; "readonly" === e && -1 === ["checkbox", "combobox", "grid", "gridcell", "listbox", "radiogroup", "slider", "spinbutton", "textbox"].indexOf(n.getAttribute("role")) || (t ? n.setAttribute("aria-" + e, !0) : n.removeAttribute("aria-" + e)) } _handleListeners(e) { const t = this, n = t.tagName.toLowerCase(), r = r => { for (let o in r) { const i = o.split("."); let s = i[0], a = t.$; if (i[1]) if (s = i[1], a = t["$" + i[0]], "document" === i[0]) { let e = t.jqxId; "" === e && (e = y.Core.toCamelCase(n)), s = s + "." + e } else t.jqxId && (s = s + "." + t.jqxId + "_" + t.parents.length); else t.jqxId && (s = s + "." + t.jqxId); const l = r[o], d = function (e) { const n = t.context; t.context = t, t[l] && t[l].apply(t, [e]), t.context = n }; a && a[e](s, d) } }; r(t.getStaticMember("listeners")), r(t.templateListeners), JQX(t._selector) && JQX(t._selector).properties && r(JQX(t._selector).listeners) } parseTemplate() { const e = this, n = e.template(), o = document.createDocumentFragment(); if (t[e.nodeName] && !r) return t[e.nodeName].cloneNode(!0); if ("" === n) return null; let i = document.createElement("div"); o.appendChild(i), i.innerHTML = n; let s = i.childNodes; i.parentNode.removeChild(i); for (let e = 0; e < s.length; e++)o.appendChild(s[e]); return t[e.nodeName] = o, r ? o : o.cloneNode(!0) } applyTemplate() { const e = this, t = e.parseTemplate(); if (!t) return; if (!t.hasChildNodes) return; const n = t.childNodes[0], r = (t, n) => { e["$" + t] = n.$ = y.Extend(n), e.$[t] = n, n.ownerElement = e }; let o = n; if (n.getElementsByTagName("content").length > 0) { let e = n.getElementsByTagName("content")[0]; o = e.parentNode, o.removeChild(e) } else { const e = t.querySelectorAll("[inner-h-t-m-l]"); e && e.length > 0 && (o = e[0]) } e.$.template = "template" === n.nodeName.toLowerCase() ? n : n.querySelector("template"); let i = t.querySelectorAll("[id]"); 0 === i.length && (i = t.querySelectorAll("*")), r("root", n), r("content", o), e.$.html = e.innerHTML.toString().trim(); for (let t = 0; t < i.length; t += 1) { let n = i[t]; "" === n.id && (n.id = "child" + t), r(n.id, n), n.setAttribute("jqx-id", n.id), e.shadowRoot ? n.shadowParent = e : n.removeAttribute("id") } for (!1 !== e.hasTemplateBindings ? e.bindings = e.getBindings(t) : e.bindings = [], e.$root.addClass("jqx-container"); e.childNodes.length;)o.appendChild(e.firstChild); if (e.appendTemplate(t), e.$.template) { const t = document.createElement("div"); t.classList.add("jqx-template-container"), e.$.templateContainer = t, e.$.template.parentNode.insertBefore(t, e.$.template), e.refreshTemplate() } } refreshTemplate() { const e = this; if (!e.$.templateContainer) return; e.templateDetached(e.$.templateContainer); const t = e.$.template.content.cloneNode(!0); e.templateBindings = e.getBindings(t), e.templateProperties = []; let n = document.createDocumentFragment(); const r = function (t, n, o) { for (let i in t) { const s = t[i], a = s.node.cloneNode(); n.appendChild(a); let l = [], d = !1; if (s.data) for (let t in s.data) { const r = s.data[t], i = r.name; if (e.templateProperties[i] = !0, a.removeAttribute(y.Core.toDash(t)), "*items" === t) l = e[i], d = !0; else if (i.indexOf("item.") >= 0 && void 0 !== o) r.value = o[i.substring("item.".length)], a[t] = r.value; else if (i.indexOf("item") >= 0 && void 0 !== o) r.value = o, a[t] = r.value; else if ("*if" === t) if (i.indexOf("(") >= 0) { let t, r = i.substring(i.indexOf("(")); const o = i.substring(0, i.indexOf("(")); if (r = r.substring(1, r.length - 1), r = r.replace(/ /gi, ""), r = r.split(","), r.length > 0 && "" !== r[0]) { let n = []; for (let t = 0; t < r.length; t++)n.push(e[r[t]]); t = e[o].apply(e, n) } else t = e[o](); !1 === t && n.removeChild(a) } else e[i] || n.removeChild(a); else e.updateBoundNode(a, s, e, i) } if (l.length > 0 || d) { for (let e = 0; e < l.length; e++)s.children && r(s.children, a, l[e]); if ("number" == typeof l) for (let e = 0; e < l; e++)s.children && r(s.children, a, e) } else s.children && r(s.children, a, o) } }; r(e.templateBindings.children, n), e.$.templateContainer.innerHTML = "", e.$.templateContainer.appendChild(n), e.templateAttached(e.$.templateContainer) } templateAttached() { } templateDetached() { } appendTemplate(e) { this.appendChild(e) } defineElementModules() { const e = this, t = e.constructor.prototype; if ("BaseElement" === t.elementName) { t.modules = e.constructor.modules; const n = t.modules; for (let t = 0; t < n.length; t += 1)e.addModule(n[t]) } else { const n = t.modules; if (!n) return; for (let t = 0; t < n.length; t += 1) { const r = n[t], o = r.prototype; e.defineElementMethods(o.methodNames, o), e.defineElementProperties(r.properties) } } } watch(e, t) { const n = this; n._watch = null !== e && null !== t ? { properties: e, propertyChangedCallback: t } : null } unwatch() { this._watch = null } set(e, t, n) { const r = this, o = r.context; r.context = !0 === n ? document : r, r[e] = t, r.context = o } get(e) { return this[e] } _setModuleState(e, t) { const n = this, r = "is" + e.substring(0, 1).toUpperCase() + e.substring(1), o = "on" + e.substring(0, 1).toUpperCase() + e.substring(1); for (let i = 0; i < n.modulesList.length; i++) { const s = n.modulesList[i]; s[r] = !0, s[e] && s[e](t), s[o] && s[o](t) } } addModule(e, t) { const n = this; if (!e) return; const r = n.modules.slice(0), o = e.prototype, i = Object.getPrototypeOf(e); if (i.name && i.name !== e.name && n.addModule(i), !e.moduleName && e.name && (e.moduleName = e.name), -1 === r.findIndex((t => e.moduleName === t.moduleName)) && r.push(e), n.defineModule(e), n.defineElementMethods(o.methodNames, o), n.defineElementProperties(e.properties), n.constructor.prototype.modules = r, t) for (let t in JQX.Elements.tagNames) { const r = JQX.Elements.tagNames[t]; let o = Object.getPrototypeOf(r), i = []; for (; o !== HTMLElement;)i.push(o.prototype), o = Object.getPrototypeOf(o); i.indexOf(n) >= 0 && r !== n && r.prototype.addModule(e) } } defineModule(e) { if (e.isDefined) return; e.prototype._initModule = function (e) { this.ownerElement = e }; const t = e.properties || {}, n = Object.keys(t), r = Object.getOwnPropertyNames(e.prototype); e.prototype.methodNames = r; for (let r = 0; r < n.length; r += 1) { const o = n[r], i = t[o]; Object.defineProperty(e.prototype, o, { configurable: !1, enumerable: !0, get() { return this.ownerElement ? this.ownerElement[o] : i.value }, set(e) { this.ownerElement[o] = e } }) } e.isDefined = !0 } getStaticMember(e, t) { const r = window[n][this.elementName], o = r[e]; t || (t = ""); let i = "array" === t ? [] : "string" === t ? "" : {}, s = Object.getPrototypeOf(r), a = []; for (; s[e];)a.push(s[e]), s = Object.getPrototypeOf(s); for (let e = a.length - 1; e >= 0; e--)if ("array" === t) for (let t = 0; t < a[e].length; t++)-1 === i.indexOf(a[e][t]) && i.push(a[e][t]); else "string" === t ? -1 === i.indexOf(a[e]) && (i += a[e]) : i = y.Core.assign(i, a[e]); if ("array" === t) { for (let e = 0; e < o.length; e++)-1 === i.indexOf(o[e]) && i.push(o[e]); return i } return "string" === t ? (-1 === i.indexOf(o) && (i += o), i) : y.Core.assign(i, o) } defineElementHierarchicalProperties(e, t) { const n = this, r = []; !function (e) { const n = Object.keys(e); for (let o = 0; o < n.length; o++) { const i = n[o]; if ("messages" === i) continue; const s = e[i], a = Object.keys(s), l = a.indexOf("value") >= 0 && a.indexOf("type") >= 0 && "object" == typeof s.value; if ("propertyObject" === s.type || l) { const e = function (n, o) { if (!n.value) return; const i = Object.keys(n.value); for (let s = 0; s < i.length; s++) { const a = i[s], l = n.value[a], d = o + "_" + a; if ("object" != typeof l || null === l) break; const c = Object.keys(l); if (!(c.indexOf("value") >= 0 && c.indexOf("type") >= 0)) break; if ("array" !== n.type && (n.isHierarchicalProperty = !0), l.parentPropertyName = o, t) { const e = t._properties[d]; if (n.value.hasOwnProperty(a)) { if (e.isDefined) continue; delete n.value[a] } e.isDefined = !0, Object.defineProperty(n.value, a, { configurable: !1, enumerable: !0, get: () => t._properties[d].value, set(e) { t.updateProperty(t, t._properties[d], e) } }) } r[d] || (r[d] = l, r.length++), ("propertyObject" === l.type || "object" == typeof l.value && "array" !== l.type) && e(t ? t._properties[d] : l, d) } }; e(s, i) } } }(e), r.length > 0 && !t && n.defineElementProperties(r) } defineElement() { const e = this, t = e.constructor.prototype, r = e.getStaticMember("properties"), o = Object.getOwnPropertyNames(t); t.extendedProperties = {}, t.boundProperties = {}, t.templateListeners = {}, e.defineElementModules(), e.defineElementMethods(o, t), e.defineElementProperties(r), e.defineElementHierarchicalProperties(e.extendedProperties), t._initElement = function () { const e = this, r = t.extendedProperties, o = Object.keys(r), i = e.modules; e.$ = y.Extend(e), e.$document = w, e.jqxId = (Date.now().toString(36) + Math.random().toString(36).substr(2, 5)).toUpperCase(), e.isCreated || (e.modulesList = [], e._properties = [], e._beforeCreatedProperties && (e._properties = e._beforeCreatedProperties, delete e._beforeCreatedProperties), e.detachedChildren = [], e.propertyByAttributeName = []); for (let t = 0; t < i.length; t += 1) { let n = new (0, i[t]); n._initModule(e), e.modulesList.push(n) } const s = []; for (let t = 0; t < o.length; t += 1) { const n = o[t], i = r[n]; let a = i.value; if (e._properties[n]) { if (void 0 !== e._properties[n].notify) continue; delete e._properties[n] } if (E && "innerHTML" === n && delete e[n], -1 === window.navigator.userAgent.indexOf("PhantomJS") && e.hasOwnProperty(n)) if (i.isHierarchicalProperty && e[n]) { const t = e[n]; s.push({ name: n, value: t }), a = i.value, delete e[n] } else a = e[n], delete e[n]; if ("array" === i.type && null != a && (a = a.slice(0)), "object" === i.type && null != a && (a = Array.isArray(a) ? a.slice(0) : Object.assign({}, a)), e._properties[n] = { name: n, notify: i.notify, allowedValues: i.allowedValues, type: i.type, nullable: i.nullable, reflectToAttribute: i.reflectToAttribute, defaultReflectToAttribute: i.defaultReflectToAttribute, defaultReflectToAttributeConditions: i.defaultReflectToAttributeConditions, value: a, readOnly: i.readOnly, defaultValue: a, attributeName: i.attributeName, observer: i.observer, inherit: i.inherit, extend: i.extend, validator: i.validator }, e.propertyByAttributeName[i.attributeName] = e._properties[n], !i.hasOwnProperty("type")) { const t = e.localize("propertyUnknownType", { name: n }); e.log(t) } if ("any" === i.type || "propertyObject" === i.type) continue; const l = y.Types.getType(a); if (null != a && i.type !== l && !i.validator) { if ("object" === i.type && "array" === l) continue; if ("number" === l && ["integer", "int", "float"].findIndex((e => e === i.type)) >= 0) continue; const t = e.localize("propertyInvalidValueType", { name: n, actualType: l, type: i.type }); e.log(t) } } if (e.defineElementHierarchicalProperties(e._properties, e), s.length && "manual" !== window[n].RenderMode) for (let t = 0; t < s.length; t++) { const n = s[t]; e[n.name] = n.value } e.isCreated = !0 }, t.registered() } defineElementMethods(e, t) { const n = this.constructor.prototype, r = function (e, t) { const n = Array.prototype.slice.call(arguments, 2); return function () { if (!this.isReady && "localize" !== t && "localize" !== t && "cloneNode" !== t && "importStyle" !== t && "log" !== t && "parseAttributes" !== t) { const e = this.localize("elementNotInDOM"); this.log(e) } let r = this; for (let e = 0; e < this.modulesList.length; e++) { let n = this.modulesList[e]; if (t in n) { r = n; break } } const o = this.context, i = n.concat(Array.prototype.slice.call(arguments)); let s = null; const a = function (e, t) { return e === t || "number" === e && ("int" === t || "integer" === t || "float" === t) || "bool" === e && "boolean" === t || "boolean" === e && "bool" === t || "object" === e && "any" === t || void 0 }; if (this.methods) { const e = this.methods[t]; if (e) { const n = e.split(":"); s = n[n.length - 1].trim(); const r = [], o = e.substring(1 + e.indexOf("("), e.lastIndexOf(")")).split(","); let l = ""; for (let e = 0; e < o.length; e++) { const t = o[e]; l += t, t.indexOf(":") >= 0 ? (r.push(l), l = "") : l += "," } let d = r.length; for (let e = 0; e < r.length; e++) { const n = r[e].trim().split(":"), o = n[0].split("=")[0].trim().indexOf("?") >= 0, s = n[1].indexOf("?") >= 0, l = n[1].replace(/\?/gi, "").trim(), c = l.split("|"); let u = n[0].split("=")[1]; const p = y.Types.getType(i[e]); if (void 0 === i[e] && u) { switch (u = u.trim(), l[0]) { case "date": { let e = u.substring(u.indexOf("(") + 1, u.lastIndexOf(")")); e = e.length > 0 ? e.split(",").map((e => parseInt(e))) : [], u = 0 === e.length ? new Date : new Date(e[0], e[1], e[2]); break } case "bool": case "boolean": u = "true" === u || "1" === u; break; case "int": case "integer": u = parseInt(u); break; case "float": case "number": u = parseFloat(u); break; case "any": case "object": u = u.indexOf("{") >= 0 ? JSON.parse(u) : u }i.push(u) } else o && d--; if (l !== p && p) { let n = !0; for (let e = 0; e < c.length; e++)if (a(p, c[e])) { n = !1; break } if (n && (null !== i[e] || !s)) { const n = this.localize("methodInvalidValueType", { name: t, actualType: p, type: l, argumentIndex: e }); this.log(n) } } if (i.length < d) { const e = this.localize("methodInvalidArgumentsCount", { name: t, actualArgumentsCount: i.length, argumentsCount: d }); this.log(e) } } } } this.context = this; const l = e.apply(r, i); if (s) { const e = void 0 === y.Types.getType(l) ? "void" : y.Types.getType(l); if (!a(e, s)) { const n = this.localize("methodInvalidReturnType", { name: t, actualType: e, type: s }); this.log(n) } } return this.context = o, l } }, o = ["constructor", "ready", "created", "render", "attached", "detached", "appendChild", "insertBefore", "removeChild", "connect", "disconnectedCallback", "connectedCallback", "attributeChangedCallback", "propertyChangedHandler", "enableShadowDOM", "isInShadowDOM", "addPropertyBindings"]; for (let i in e) { let s = e[i]; s && s.startsWith && s.startsWith("_") || void 0 !== o.find((e => e === s)) || n.extendedProperties[s] || y.Types.isFunction(t[s]) && (n[s] = r(t[s], s)) } } defineElementProperties(e) { if (!e) return; const t = this, n = t.constructor.prototype, r = Object.keys(e), o = t.getStaticMember("properties"); Object.assign(n.extendedProperties, e), t.updateProperty = function (e, t, n) { const r = e; if (!t || t.readOnly) return; if (t.allowedValues) { let e = !1; for (let r = 0; r < t.allowedValues.length; r++)if (t.allowedValues[r] === n) { e = !0; break } if (!e) { const e = JSON.stringify(t.allowedValues).replace(/\[|\]/gi, "").replace(",", ", ").replace(/"/gi, "'"), o = "'" + n + "'", i = r.localize("propertyInvalidValue", { name: t.name, actualValue: o, value: e }); return void r.log(i) } } const o = t.name, i = r._properties[o].value; if (t.validator && r[t.validator]) { const e = r.context; r.context = r; const o = r[t.validator](i, n); void 0 !== o && (n = o), r.context = e } if (i !== n) { if (r.propertyChanging) { const e = r.propertyChanging(o, i, n); if (!1 === e || null === e) return } if (!t.hasOwnProperty("type")) { const e = r.localize("propertyUnknownType", { name: o }); r.log(e) } if ("array" !== t.type || JSON.stringify(i) !== JSON.stringify(n)) { if (null != n && "any" !== t.type && "propertyObject" !== t.type && t.type !== y.Types.getType(n) && !t.validator || null === n && !t.nullable) { let e = !0; if ("object" === t.type && "array" === y.Types.getType(n) && (e = !1), "number" === y.Types.getType(n) && ["integer", "int", "float"].findIndex((e => e === t.type)) >= 0 && (e = !1), e) { const e = r.localize("propertyInvalidValueType", { name: o, actualType: y.Types.getType(n), type: t.type }); return void r.error(e) } } if (t.isUpdating = !0, t.isHierarchicalProperty) { const e = function (t, n) { if (!t) return; const o = Object.keys(t); for (let i = 0; i < o.length; i++) { const s = o[i], a = t[s]; "object" == typeof a && !y.Types.isArray(a) && a && a.constructor !== Date ? e(a, n + "_" + s) : r[n + "_" + s] = a } }; e(n, o) } else r._properties[o].value = n; if (!t.isUpdatingFromAttribute && t.reflectToAttribute && r.$.setAttributeValue(t.attributeName, n, t.type), r.isReady && (!r.ownerElement || r.ownerElement && r.ownerElement.isReady)) { if ("wait" === o && (n || !i || r.isCompleted || (r.classList.remove("jqx-visibility-hidden"), r.ownerElement && r.ownerElement.updateBoundMappedNodes(), r.updateBoundMappedNodes(), r.complete())), "renderMode" === o) return; if (r.context !== r && !r.wait) { const e = r.context; r.context = r, r.propertyChangedHandler(o, i, n), r.context = e, t.observer && r[t.observer] && (r.context = r, r[t.observer](i, n), r.context = document), r._watch && r._watch.properties.indexOf(o) >= 0 && r._watch.propertyChangedCallback(o, i, n) } const e = t.notify || r.boundProperties[o]; e && (r.$.fireEvent(t.attributeName + "-changed", { context: r.context, oldValue: i, value: r[o] }), r.boundProperties[o] && r.updateBoundNodes(o)), e && r.templateProperties && r.templateProperties[o] && r.refreshTemplate(), r.dataContextProperties && ("dataContext" === o ? r.applyDataContext() : r.dataContextProperties[o] && r.updateDataContextProperty(o)) } t.isUpdating = !1 } } }; for (let t = 0; t < r.length; t += 1) { const i = r[t], s = e[i], a = y.Core.toDash(i), l = s.type || "any", d = l.indexOf("?") >= 0 || "any" === l; d && "any" !== l && (s.type = l.substring(0, l.length - 1)), s.nullable = d, s.attributeName = a.toLowerCase(), s.name = i, s.reflectToAttribute = void 0 === s.reflectToAttribute || s.reflectToAttribute, s.inherit && o[i] && (s.value = o[i].value), s.extend && o[i] && y.Core.assign(s.value, o[i].value), n.hasOwnProperty(i) || Object.defineProperty(n, i, { configurable: !1, enumerable: !0, get() { if (this._properties[i]) return this._properties[i].value }, set(e) { const t = this; t.updateProperty(t, t._properties[i], e) } }) } } } let C = [], S = [], x = [], E = !1; const A = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./); A && parseInt(A[2], 10) <= 50 && (E = !0); class P { static register(e, t) { const r = t.prototype; let o = a.toCamelCase(e).replace(/[a-z]+/, ""), i = t.version || window[n].Version; if (window.customElements.get(e) && window.customElements.get(e).version === i) return; let s = e; for (i = i.split("."); window.customElements.get(e);)e = s + "-" + i.join("."), i[2] = parseInt(i[2]) + 1; if (!C[e]) { if (e.startsWith(n.toLowerCase())) C[e] = window[n][o] = window[n.toLowerCase() + o] = t; else { let r = e.split("-")[0]; r = r.substring(0, 1).toUpperCase() + r.substring(1), window[n][r] || (window[n][r] = {}), C[e] = window[n][r][o] = window[r.toLowerCase() + o] = t, window[n][o] && (o = a.toCamelCase(e)), window[n][o] = t } r.elementName = o, r.defineElement(), S[e] && S[e](r), window.customElements.define(e, t) } } static registerElements() { const e = this; if (e.toRegister) { e.isRegistering = !0; for (let t = 0; t < e.toRegister.length; t++) { const n = e.toRegister[t]; e.register(n.tagName, n.element) } e.isRegistering = !1 } } static get(e) { if (C[e]) return C[e] } static whenRegistered(e, t) { if (!e) throw new Error("Syntax Error: Invalid tag name"); const n = S[e], r = this.get(e), o = r ? r.modules.length : 3; try { n || r ? !n && r ? (t(r.prototype), S[e] = void 0) : n && !r ? S[e] = function (e) { n(e), t(e) } : n && r && (r.proto && (n(r.proto), t(r.proto)), S[e] = void 0) : S[e] = function (e) { try { t(e) } catch (e) { const t = e instanceof Error ? e.message : e.toString(); console.log(t) } } } catch (e) { const t = e instanceof Error ? e.message : e.toString(); console.log(t) } if (r && o !== r.prototype.modules.length) { const t = document.querySelectorAll(e); for (let e = 0; e < t.length; e++) { const n = t[e]; n.isCreated && n._initElement() } } } } P.lazyRegister = !1, P.tagNames = []; class T { constructor() { const e = this; e.name = "observableArray", e.observables = arguments.length < 3 ? null : arguments[2]; const t = new Proxy(e, { deleteProperty: function (e, t) { return delete e[t], !0 }, apply: function (e, t, n) { return e.apply(t, n) }, get: function (t, n) { return "symbol" == typeof (r = n) || "object" == typeof r && "[object Symbol]" === Object.prototype.toString.call(r) || t[n] || isNaN(parseInt(n)) ? t[n] : e.getItem(parseInt(n)); var r }, set: function (t, n, r) { return t[n] || isNaN(parseInt(n)) ? (t[n] = r, !0) : (e.setItem(parseInt(n), r), !0) } }); if (e._addArgs = { eventName: "change", object: t, action: "add", index: null, removed: new Array, addedCount: 1 }, e._removeArgs = { eventName: "change", object: t, action: "remove", index: null, removed: null, addedCount: 0 }, arguments.length >= 1 && Array.isArray(arguments[0])) { e._array = []; const t = arguments[0]; for (let n = 0, r = t.length; n < r; n++) { const r = e._getItem(e._array.length, t[n]); e._array.push(r) } } else e._array = Array.apply(null, arguments); return 2 === arguments.length && (e.notifyFn = arguments[1]), t } get canNotify() { const e = this; return void 0 === e._canNotify && (e._canNotify = !0), e._canNotify } set canNotify(e) { this._canNotify = e } _notify(e) { const t = this; t.canNotify && t.notifyFn && t.notifyFn(e) } notify(e) { e && (this.notifyFn = e) } toArray() { return this._array } _getItem(e, t) { const n = this; return "string" == typeof t || "number" == typeof t || void 0 === t ? t : new Proxy(t, { deleteProperty: function (e, t) { return delete e[t], !0 }, set: function (t, r, o) { const i = t[r]; return t[r] = o, !n._canNotify || !1 === t.canNotify || (n.observables && !n.observables[r] || n._notify({ eventName: "change", object: n, target: t, action: "update", index: e, path: e + "." + r, oldValue: i, newValue: o, propertyName: r }), !0) } }) } getItem(e) { return this._array[e] } setItem(e, t) { const n = this, r = n._array[e]; n._array[e] = n._getItem(e, t), n._notify({ eventName: "change", object: n._array, action: "update", index: e, removed: [r], addedCount: 1 }) } get length() { return this._array.length } set length(e) { const t = this; o.isNumber(e) && t._array && t._array.length !== e && t.splice(e, t._array.length - e) } toString() { return this._array.toString() } toLocaleString() { return this._array.toLocaleString() } concat() { const e = this; e._addArgs.index = e._array.length; const t = e._array.concat.apply(e._array, arguments); return new JQX.ObservableArray(t) } join(e) { return this._array.join(e) } pop() { const e = this; e._removeArgs.index = e._array.length - 1, delete e[e._array.length - 1]; const t = e._array.pop(); return e._removeArgs.removed = [t], e._notify(e._removeArgs), e._notifyLengthChange(), t } push() { const e = this; if (e._addArgs.index = e._array.length, 1 === arguments.length && Array.isArray(arguments[0])) { const t = arguments[0]; for (let n = 0, r = t.length; n < r; n++) { const r = e._getItem(e._array.length, t[n]); e._array.push(r) } } else { const t = e._getItem(e._addArgs.index, arguments[0]); e._array.push.apply(e._array, [t]) } return e._addArgs.addedCount = e._array.length - e._addArgs.index, e._notify(e._addArgs), e._notifyLengthChange(), e._array.length } _notifyLengthChange() { const e = this; if (!e.canNotify) return; const t = e._createPropertyChangeData("length", e._array.length); e._notify(t) } _createPropertyChangeData(e, t, n) { return { eventName: "change", object: this, action: e, value: t, oldValue: n } } reverse() { return this._array.reverse() } shift() { const e = this, t = e._array.shift(); return e._removeArgs.index = 0, e._removeArgs.removed = [t], e._notify(e._removeArgs), e._notifyLengthChange(), t } slice(e, t) { return this._array.slice(e, t) } sort(e) { return this._array.sort(e) } splice(e, t, n) { const r = this, o = r._array.length; let i; if (n && n.length) for (let o = 0; o < n.length; o++)i = r._array.splice(e + o, t, n[o]); else i = r._array.splice.apply(r._array, arguments); if (n) { let t = r.canNotify; if (r.canNotify = !1, n.length) for (let t = 0; t < n.length; t++)r.setItem(e + t, n[t]); else r.setItem(e, n); r.canNotify = t, r._notify({ eventName: "change", object: this, action: "add", index: e, added: i, addedCount: r._array.length > o ? r._array.length - o : 0 }) } else r._notify({ eventName: "change", object: this, action: "remove", index: e, removed: i, addedCount: r._array.length > o ? r._array.length - o : 0 }); return r._array.length !== o && r._notifyLengthChange(), i } unshift() { const e = this, t = e._array.length, n = e._array.unshift.apply(e._array, arguments); return e._addArgs.index = 0, e._addArgs.addedCount = n - t, e._notify(this._addArgs), e._notifyLengthChange(), n } indexOf(e, t) { const n = this; for (let r = t || 0, o = n._array.length; r < o; r++)if (n._array[r] === e) return r; return -1 } lastIndexOf(e, t) { const n = this; for (let r = t || n._array.length - 1; r >= 0; r--)if (n._array[r] === e) return r; return -1 } find(e, t) { return this._array.find(e, t) } findIndex(e, t) { return this._array.findIndex(e, t) } every(e, t) { return this._array.every(e, t) } some(e, t) { return this._array.some(e, t) } forEach(e, t) { this._array.forEach(e, t) } map(e, t) { return this._array.map(e, t) } filter(e, t) { return this._array.filter(e, t) } reduce(e, t) { return void 0 !== t ? this._array.reduce(e, t) : this._array.reduce(e) } reduceRight(e, t) { return void 0 !== t ? this._array.reduceRight(e, t) : this._array.reduceRight(e) } move(e, t) { this.splice(t, 0, this.splice(e, 1)[0]) } } let D = {}; window[n] && (D = window[n]), window[n] = function (e, t) { let r = e; if (e) { if (e.indexOf("#") >= 0 || e.indexOf(".") >= 0) return u[e] ? u[e] : t ? (u[e] = new t, function (e, t) { const n = t.properties; t._properties = []; const r = function (n, o) { const i = Object.keys(n); for (let s = 0; s < i.length; s++) { const a = i[s], l = n[a]; t._properties[o + a] = l, Array.isArray(l) ? t._properties[o + a] = new T(l, (function (t) { const n = a + "." + t.path, r = t.newValue, o = document.querySelector(e); if (o) { const e = n.split("."); let t = o; for (let n = 0; n < e.length; n++)t = t[e[n]]; t = r } })) : (Object.defineProperty(n, a, { configurable: !1, enumerable: !0, get: () => t._properties[o + a], set(e) { t._properties[o + a] = e } }), l && "DataAdapter" === l.constructor.name || l && "object" == typeof l && JQX.DataAdapter && l instanceof JQX.DataAdapter || "object" == typeof l && l && Object.keys(l).length > 0 && r(l, o + a + ".")) } }; r(n, ""), Object.defineProperty(t, "properties", { configurable: !1, enumerable: !0, get: () => n }); const o = document.querySelector(e); if (o && o.isReady) for (let e in n) if ("properties" === e) { const t = n[e]; for (let e in t) o[e] = t[e] } else o[e] = n[e]; else if (o) { o.props = {}; for (let e in n) o.props[e] = n[e] } }(e, u[e]), u[e]) : void 0; if (t) { if (P.tagNames[e] = t, P.lazyRegister) { P.toRegister || (P.toRegister = []); const e = a.toCamelCase(r).replace(/[a-z]+/, ""); return window[n][e] = t, void P.toRegister.push({ tagName: r, element: t }) } P.register(r, t) } } }, window.addEventListener("load", (function () { const e = window[n].Elements.tagNames; let t = []; for (let r in e) { const o = e[r]; let i = document.querySelectorAll("[" + r + "]"); for (let e = 0; e < i.length; e++) { const t = i[e]; t instanceof HTMLDivElement && (t.__proto__ = o.prototype, t.created(), t.connectedCallback()), t.classList.add("jqx-element-ready") } let s = o.name; "Item" === s && (s = "ListItem"), i = document.querySelectorAll('[is="' + n.toLocaleLowerCase() + s + '"]'); for (let e = 0; e < i.length; e++)t.push(i[e]) } if (t.length > 0) { const e = e => { let t = [], n = e.parentNode; for (; n && 9 !== n.nodeType;)n instanceof HTMLElement == 1 && t.push(n), n = n.parentNode; return t }; t.sort((function (t, n) { let r = e(t).length, o = e(n).length; return r < o ? 1 : r > o ? -1 : 0 })); for (let e = 0; e < t.length; e++) { const n = t[e], r = n.getAttribute("is"); let o; o = "jqxItem" === r ? new window.jqxListItem(n) : new window[r](n), o.removeAttribute("is") } } })); const L = function () { if ("complete" === document.readyState && "manual" !== window[n].RenderMode) { x.sort((function (e, t) { let n = e.element.parents.length, r = t.element.parents.length; return n < r ? -1 : n > r ? 1 : 0 })); for (let e = 0; e < x.length; e++)window[n].RenderMode = "", x[e].element.isLoading = !1, x[e].callback(), window[n].RenderMode = ""; x = [], document.removeEventListener("readystatechange", L) } }; Object.assign(window[n], { Elements: P, Modules: [], BaseElement: class extends _ { static get observedAttributes() { let e = this, t = ["external-style"]; for (let n in e.prototype.extendedProperties) { const r = e.prototype.extendedProperties[n]; t.push(r.attributeName) } return t } static get styleUrls() { return [] } static get styles() { return "" } get styleUrl() { return this._styleUrl } set styleUrl(e) { this._styleUrl = e } get isInShadowDOM() { const e = this, t = e.getRootNode(); return !e.hasAttribute("jqx-blazor") && t !== document && t !== e } getShadowRootOrBody() { const e = this; return e.isInShadowDOM && e.getRootNode().host ? e.getRootNode().host.shadowRoot : document.body } get enableShadowDOM() { return window[n].EnableShadowDOM } importStyle(e, t) { this._importStyle(e, t) } _importStyle(e, t) { const n = this; if (!n.shadowRoot || !e) return; const r = e => { const r = n.shadowRoot.children; for (let n = 0; n < r.length; n++) { const o = r[n]; if (o instanceof HTMLLinkElement && o.href === e) return t && t(), null } const o = document.createElement("link"); return o.rel = "stylesheet", o.type = "text/css", o.href = e, o.onload = t, o }, o = (() => { const e = n.shadowRoot.children; let t = null; for (let n = 0; n < e.length; n++) { const r = e[n]; r instanceof HTMLLinkElement && (t = r) } return t })(), i = (e, t) => { t.parentNode.insertBefore(e, t.nextSibling) }; if (Array.isArray(e)) { const t = document.createDocumentFragment(); for (let n = 0; n < e.length; n++) { const o = r(e[n]); o && t.appendChild(o) } o ? i(t, o) : n.shadowRoot.insertBefore(t, n.shadowRoot.firstChild) } else { const t = r(e); if (!t) return; o ? i(t, o) : n.shadowRoot.insertBefore(t, n.shadowRoot.firstChild) } } attributeChanged(e, t, n) { "style-url" === e && (this.styleUrl = n) } attributeChangedCallback(e, t, n) { this.isReady && super.attributeChangedCallback(e, t, n) } constructor(e, t) { super(); const n = this; if (e) { t && (n._initProperties = t); const r = e => { if ("string" == typeof e ? document.querySelector(e) : e) { const r = "string" == typeof e ? document.querySelector(e) : e; if (r instanceof HTMLDivElement) { const o = document.createElement(n.tagName); for (let e of r.attributes) o.setAttribute(e.name, r.getAttribute(e.name)); for (; r.childNodes.length;)o.appendChild(r.firstChild); return "string" == typeof e && (o.id = e.substring(1)), o._initProperties = t, r.parentNode && r.parentNode.replaceChild(o, r), o } if (t) { const e = r.context; if (r._initProperties = t, r.isReady) { r.context = r; const n = {}, o = {}; for (let e in t) n[e] = r[e], o[e] = t[e]; Object.getOwnPropertyNames(t).length > 0 && (r.initProperties(), r.propertyChangedHandler(t, n, o)), r.context = e } } return r } }; if ("string" == typeof e) { const t = document.querySelectorAll(e), n = []; if (t.length > 1) { for (let e = 0; e < t.length; e++) { const o = r(t[e]); n.push(o) } return n } } else if (e && e.length > 0) { const t = e; if (t.length > 1) { for (let e = 0; e < t.length; e++) { const n = r(t[e]); C.push(n) } return C } } return r(e) } n._styleUrl = "", n.isUtilityElement || n.created() } _getRootShadowParent() { let e = this.shadowParent; for (; e;) { if (!e.shadowParent) return e; e = e.shadowParent } return e || this.shadowParent } _getStyleUrl(e) { let t = y.Core.getScriptLocation() + window[n].StyleBaseUrl + e; return this.shadowParent && (t = t.replace("scoped/", "")), t } _getStyleUrls() { const e = this; e.nodeName.startsWith(n); const t = e.getStaticMember("styleUrls", "array"), r = []; for (let n = 0; n < t.length; n++) { const o = t[n], i = e._getStyleUrl(o); r.push(i) } return r } _setupShadowRoot() { const e = this; e.classList.add("jqx-element-init"); const t = t => { t.$.root && (t.$.root.classList.add(n.toLowerCase() + "-element"), t.$.root.classList.add(e.nodeName.toLowerCase())), t.setup(), t.classList.remove("jqx-element-init") }; if (document.adoptedStyleSheets) if (window[n].AdoptedStyleSheets) window[n].AdoptedStyleSheetsLoaded ? (e.shadowRoot.adoptedStyleSheets = window[n].AdoptedStyleSheets, t(e)) : (e.shadowRoot.adoptedStyleSheets = window[n].AdoptedStyleSheets, window[n].AdoptedStyleSheetsLoadedQueue || (window[n].AdoptedStyleSheetsLoadedQueue = []), window[n].AdoptedStyleSheetsLoadedQueue.push(e)); else { const r = new CSSStyleSheet; let o = y.Core.getScriptLocation() + "/styles/jqx.default.css"; r.replace('@import url("' + o + '")').then((() => { if (t(e), window[n].AdoptedStyleSheetsLoaded = !0, window[n].AdoptedStyleSheetsLoadedQueue) { const e = window[n].AdoptedStyleSheetsLoadedQueue; for (let n = 0; n < e.length; n++) { const r = e[n]; t(r) } delete window[n].AdoptedStyleSheetsLoadedQueue } })).catch((e => { console.error("Failed to load:", e) })), window[n].AdoptedStyleSheets = [r], document.adoptedStyleSheets = [r], e.shadowRoot.adoptedStyleSheets = window[n].AdoptedStyleSheets } } connect() { const e = this; window[n].EnableShadowDOM && !e.shadowRoot && !0 !== e.isInShadowDOM && (e.attachShadow({ mode: "open" }), e.shadowRoot && e.$.root && (e.shadowRoot.appendChild(e.$.root), e.$.root.classList.add(e.nodeName.toLowerCase()))), e.shadowRoot || e.shadowParent ? e.shadowRoot ? e._setupShadowRoot() : (e.shadowParent && window[n].EnableShadowDOM, e.setup()) : e.setup() } connectedCallback() { const e = this; if (e.isLoading || e.isUtilityElement) return; e.classList.add("jqx-element-init"); const t = function () { e.classList.remove("jqx-element-init") }; if ("complete" === document.readyState && (void 0 === window[n].isAngular && (window[n].isAngular = null !== document.body.querySelector("[ng-version]")), void 0 === window[n].isVue && (window[n].isVue = null !== document.querySelector(".vue-root")), window[n].isAngular)) for (let t = 0; t < e.parents.length && !e.parents[t].nodeName.toLowerCase().startsWith(n.toLowerCase() + "-"); t++)if (e.parents[t].hasAttribute("ng-version") && !e.classList.contains("jqx-angular")) { window[n].RenderMode = "manual"; break } if ("complete" === document.readyState && "manual" !== window[n].RenderMode) { const n = e.parents; n.length && "HTML" === n[n.length - 1].nodeName || e.getRootNode().host ? (e.checkIsInDomTimer && clearInterval(e.checkIsInDomTimer), t(), e.connect()) : (e.checkIsInDomTimer && clearInterval(e.checkIsInDomTimer), n.length > 0 && (e.checkIsInDomTimer = setInterval((() => { const n = e.parents; 0 === n.length && clearInterval(e.checkIsInDomTimer), n.length > 0 && "HTML" === n[n.length - 1].nodeName && (clearInterval(e.checkIsInDomTimer), t(), e.connect()) }), 100))) } else e.isLoading = !0, x.push({ element: this, callback: function () { this.isReady || (t(), this.connect()) }.bind(e) }) } disconnectedCallback() { const e = this; e.isAttached ? (e.shadowParent = null, e.detached()) : e._resetShadowParent() } adoptedCallback() { this.setup() } appendTemplate(e) { const t = this; t.shadowRoot ? t.shadowRoot.appendChild(e) : t.appendChild(e) } _resetShadowParent() { const e = this; if (!window[n].EnableShadowDOM || null === e.shadowParent) return; const t = []; let r = e.parentNode; for (; r && 9 !== r.nodeType;) { if (r instanceof HTMLElement == 1) t.push(r); else if (11 === r.nodeType && r.host) { r = r.host; continue } r = r.parentNode } for (let n = 0; n < t.length; n++)if (t[n] === e.shadowParent) return; t.length > 0 && "HTML" === t[t.length - 1].nodeName && (e.shadowParent = null) } }, Utilities: y, Import: function (e, t) { let n = 0; const r = function (e, t) { return new Promise((n => { const r = document.createElement("script"); r.src = e, r.onload = n; for (let e = 0; e < document.head.children.length; e++) { const r = document.head.children[e]; if (r.src && r.src.toString().indexOf(t) >= 0) return void n() } document.head.appendChild(r) })) }; return new Promise((o => { const i = y.Core.getScriptLocation(), s = function (t) { if (!e[t]) return; const a = i + "/" + e[t]; r(a, e[t]).then((function () { n++, n === e.length && o(), s(t + 1) })) }; if (t) for (let t = 0; t < e.length; t++) { const s = i + "/" + e[t]; r(s, e[t]).then((function () { n++, n === e.length && o() })) } else s(0) })) }, ObservableArray: T, Observable: class { constructor(e, t) { const n = this; var r; return this.name = "observable", e && Object.assign(n, e), r = e, Object.getOwnPropertyNames(Object.getPrototypeOf(r)).forEach((e => "constructor" === e || !!e.startsWith("_") || void (n[e] = r[e]))), new Proxy(n, { deleteProperty: function (e, t) { return delete e[t], !0 }, get: function (e, t) { return e[t] }, set: function (e, r, o) { const i = e[r]; return i === o || (e[r] = o, !("notifyFn" !== r && !r.startsWith("_") && "canNotify" !== r && (!t || -1 !== t.indexOf(r)) && n.canNotify && (n._notify({ target: e, propertyName: r, oldValue: i, newValue: o }), 0))) } }) } get canNotify() { const e = this; return void 0 === e._canNotify && (e._canNotify = !0), e._canNotify } set canNotify(e) { this._canNotify = e } _notify(e) { const t = this; if (t.canNotify && t.notifyFn) for (let n = 0; n < t.notifyFn.length; n++)t.notifyFn[n](e) } notify(e) { const t = this; e && (t.notifyFn || (t.notifyFn = []), t.notifyFn.push(e)) } }, Component: class { constructor(e, t) { const n = this.name; let r = null; return e ? r = new window[n](e, t) : (r = new window[n], r._initProperties = t), this._element = r, r } get name() { return "Component" } get element() { return this._element } }, Theme: D.Theme || "", EnableShadowDOM: D.ShadowDom || !1, BaseUrl: "./", StyleBaseUrl: "/styles/default/", Version: e, Templates: t, RenderMode: D.RenderMode || "auto", Render: function () { const e = () => { window[n].RenderMode = "", L() }; "complete" === document.readyState ? e() : (window.removeEventListener("load", e), window.addEventListener("load", e)) }, Data: u, Mode: D.Mode || "production", License: D.License || "Evaluation" }); let O = window[n].Theme; "manual" !== window[n].RenderMode && document.addEventListener("readystatechange", L), Object.defineProperty(window[n], "Theme", { configurable: !1, enumerable: !0, get: () => O, set(e) { const t = O; O = e, w.fireEvent("theme-changed", { oldValue: t, newValue: e }, { bubbles: !0, cancelable: !0 }) } }), window[n]("jqx-base-element", window[n].BaseElement), window[n]("jqx-content-element", class extends window[n].BaseElement { static get properties() { return { content: { type: "any", reflectToAttribute: !1 }, innerHTML: { type: "string", reflectToAttribute: !1 } } } template() { return "<div inner-h-t-m-l='[[innerHTML]]'></div>" } ready() { super.ready(), this.applyContent() } refresh() { } clearContent() { const e = this; for (; e.$.content.firstChild;)e.$.content.removeChild(e.$.content.firstChild) } applyContent() { const e = this; if (void 0 === e.content) return void (e.content = e.$.content); if ("" === e.content || null === e.content) return void e.clearContent(); if (e.content instanceof HTMLElement) return e.clearContent(), void e.$.content.appendChild(e.content); const t = document.createDocumentFragment(); let n = document.createElement("div"); t.appendChild(n), e.content instanceof HTMLElement ? n.appendChild(e.content) : n.innerHTML = e.content; let r = Array.from(n.childNodes); n.parentNode.removeChild(n); for (let e = 0; e < r.length; e++)t.appendChild(r[e]); e.clearContent(), e.$.content.appendChild(t) } propertyChangedHandler(e, t, n) { super.propertyChangedHandler(e, t, n); const r = this; t !== n && ("innerHTML" === e && (r.content = n, r.applyContent(), r.innerHTML = r.content = y.Core.html(r.$.content)), "content" === e && r.applyContent()) } }), window[n]("jqx-scroll-viewer", class extends window[n].ContentElement { static get properties() { return { autoRefresh: { type: "boolean", value: !1 }, horizontalScrollBarVisibility: { type: "string", value: "auto", allowedValues: ["auto", "disabled", "hidden", "visible"] }, touchScrollRatio: { type: "any", value: null }, touchVelocityCoefficient: { type: "number", value: 50 }, verticalScrollBarVisibility: { type: "string", value: "auto", allowedValues: ["auto", "disabled", "hidden", "visible"] } } } static get listeners() { return { touchmove: "_touchmoveHandler", touchstart: "_touchstartHandler", wheel: "_mouseWheelHandler", "document.up": "_upHandler" } } static get styleUrls() { return ["jqx.scrollviewer.css"] } template() { return '<div id="container" class="jqx-container" role="presentation">\n <div id="scrollViewerContainer" class="jqx-scroll-viewer-container" role="presentation">\n <div id="scrollViewerContentContainer" inner-h-t-m-l=\'[[innerHTML]]\' class="jqx-scroll-viewer-content-container" role="presentation">\n <content></content>\n </div>\n </div>\n <jqx-scroll-bar id="verticalScrollBar" theme="[[theme]]" animation="[[animation]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]" orientation="vertical"></jqx-scroll-bar>\n <jqx-scroll-bar id="horizontalScrollBar" theme="[[theme]]" disabled="[[disabled]]" right-to-left="[[rightToLeft]]"></jqx-scroll-bar>\n </div>' } appendChild(e) { const t = this; if (e) { if (!t.isCompleted || e.classList && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } t.$.scrollViewerContentContainer.appendChild(e) } } removeChild(e) { const t = this; if (e) { if (!t.isCompleted || e.classList && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.removeChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } t.$.scrollViewerContentContainer.removeChild(e) } } removeAll() { const e = this; e.isCompleted && (e.$.scrollViewerContentContainer.innerHTML = "") } _horizontalScrollbarHandler(e) { const t = this; t.$.scrollViewerContentContainer.style.left = (t.rightToLeft ? 1 : -1) * t.scrollLeft + "px", e.stopPropagation && e.stopPropagation(), t.onHorizontalChange && t.onHorizontalChange(e) } _verticalScrollbarHandler(e) { const t = this; t.$.scrollViewerContentContainer.style.top = -t.scrollTop + "px", e.stopPropagation && e.stopPropagation(), t.onVerticalChange && t.onVerticalChange(e) } _touchmoveHandler(e) { const t = this; if (t._touchmoveInside && e.cancelable) return e.preventDefault(), void e.stopPropagation(); const n = t.scrollHeight > 0, r = t.scrollWidth > 0, o = t._touchCoords; if (!n && !r || !o) return; const i = e.touches[0]; let s, a, l, d; t._touchCoords = [i.pageX, i.pageY], n ? (s = t.scrollTop, a = t.scrollHeight, l = i.pageY, d = o[1]) : (s = t.scrollLeft, a = t.scrollWidth, l = i.pageX, d = o[0]); const c = parseFloat(l.toFixed(5)), u = parseFloat(d.toFixed(5)); 0 === s && c >= u || s === a && c <= u || (l !== d && (t._touchmoveInside = !0), e.cancelable && (e.preventDefault(), e.stopPropagation())) } _touchstartHandler(e) { const t = e.touches[0]; this._touchCoords = [t.pageX, t.pageY] } _mouseWheelHandler(e) { const t = this; if (!t.disabled && (t.computedHorizontalScrollBarVisibility || t.computedVerticalScrollBarVisibility)) { if (e.shiftKey && t.computedHorizontalScrollBarVisibility) { const n = t.scrollLeft; if (0 === n && e.deltaX < 0 || n === t.scrollHeight && e.deltaX > 0) return; return e.stopPropagation(), e.preventDefault(), void (t.scrollWidth > 0 && t.scrollTo(void 0, t.scrollLeft + t._getScrollCoefficient(e, t.offsetWidth))) } if (t.computedVerticalScrollBarVisibility) { const n = t.scrollTop; if (0 === n && e.deltaY < 0 || n === t.scrollHeight && e.deltaY > 0) return; if (e.stopPropagation(), e.preventDefault(), t.scrollHeight > 0) { t._wheelrafId = 0; const n = () => { t.scrollTop += e.deltaY }; cancelAnimationFrame(t._wheelrafId), t._wheelrafId = 0, t._wheelrafId = requestAnimationFrame(n) } } } } _overriddenHandler() { } _upHandler() { delete this._touchCoords, delete this._touchmoveInside } _getScrollCoefficient(e, t) { const n = e.deltaMode, r = Math.abs(e.deltaY); let o; return 0 === n ? o = r < 100 / 3 ? r : t : 1 === n ? o = r < 1 ? r * (100 / 3) : t : 2 === n && (o = t), e.deltaY < 0 ? -o : o } applyContent() { super.applyContent(), this.refresh() } get computedHorizontalScrollBarVisibility() { const e = this; return e._scrollView && e._scrollView.hScrollBar ? !e._scrollView.hScrollBar.$.hasClass("jqx-hidden") : null } get computedVerticalScrollBarVisibility() { const e = this; return e._scrollView && e._scrollView.vScrollBar ? !e._scrollView.vScrollBar.$.hasClass("jqx-hidden") : null } scrollTo(e, t) { const n = this; n._scrollView && (void 0 !== e && n._scrollView.scrollTo(e), void 0 !== t && n._scrollView.scrollTo(t, !1)) } refreshScrollBarsVisibility() { const e = this; e._scrollView && (e._scrollView.hScrollBar.disabled = e.disabled, e._scrollView.vScrollBar.disabled = e.disabled, "disabled" === e.horizontalScrollBarVisibility && (e._scrollView.hScrollBar.disabled = !0), "disabled" === e.verticalScrollBarVisibility && (e._scrollView.vScrollBar.disabled = !0), e.scrollWidth > 0 ? e._scrollView.hScrollBar.$.removeClass("jqx-hidden") : "visible" !== e.horizontalScrollBarVisibility && e._scrollView.hScrollBar.$.addClass("jqx-hidden"), e.scrollHeight > 0 ? e._scrollView.vScrollBar.$.removeClass("jqx-hidden") : "visible" !== e.verticalScrollBarVisibility && e._scrollView.vScrollBar.$.addClass("jqx-hidden"), "hidden" === e.horizontalScrollBarVisibility && e._scrollView.hScrollBar.$.addClass("jqx-hidden"), "hidden" === e.verticalScrollBarVisibility && e._scrollView.vScrollBar.$.addClass("jqx-hidden"), "visible" === e.horizontalScrollBarVisibility && e._scrollView.hScrollBar.$.removeClass("jqx-hidden"), "visible" === e.verticalScrollBarVisibility && (e._scrollView.vScrollBar.$.removeClass("jqx-hidden"), e.disabled || (e._scrollView.vScrollBar.disabled = e.scrollHeight <= 0)), e.computedHorizontalScrollBarVisibility && e.computedVerticalScrollBarVisibility ? (e._scrollView.hScrollBar.$.addClass("bottom-corner"), e._scrollView.vScrollBar.$.addClass("bottom-corner")) : (e._scrollView.hScrollBar.$.removeClass("bottom-corner"), e._scrollView.vScrollBar.$.removeClass("bottom-corner"))) } ready() { super.ready(); const e = this; e.$.verticalScrollBar.onChange = t => { t.detail = t, e._verticalScrollbarHandler(t) }, e.$.horizontalScrollBar.onChange = t => { t.detail = t, e._horizontalScrollbarHandler(t) }, e.$.verticalScrollBar.setAttribute("aria-controls", e.id), e.$.horizontalScrollBar.setAttribute("aria-controls", e.id), e._customScrollView || (e._scrollView = new JQX.Utilities.Scroll(e, e.$.horizontalScrollBar, e.$.verticalScrollBar)), e.refresh() } refresh() { const e = this; function t() { const t = e.$.scrollViewerContainer.classList.contains("vscroll"); e.$.scrollViewerContainer.classList.remove("vscroll"); const n = e.$.scrollViewerContentContainer.offsetWidth - e.$.scrollViewerContainer.offsetWidth; return n > 0 && "hidden" !== e.horizontalScrollBarVisibility || "visible" === e.horizontalScrollBarVisibility ? e.$.scrollViewerContainer.classList.add("hscroll") : e.$.scrollViewerContainer.classList.remove("hscroll"), t && e.$.scrollViewerContainer.classList.add("vscroll"), n } function n() { let t; const n = e.$.scrollViewerContainer.classList.contains("hscroll"); if (e.$.scrollViewerContainer.classList.remove("hscroll"), JQX.Utilities.Core.Browser.Safari) { const n = e.$.scrollViewerContentContainer.getBoundingClientRect().height, r = e.$.scrollViewerContainer.getBoundingClientRect().height; t = n && r ? parseInt(n) - parseInt(r) : e.$.scrollViewerContentContainer.offsetHeight - e.$.scrollViewerContainer.offsetHeight } else t = e.$.scrollViewerContentContainer.offsetHeight - e.$.scrollViewerContainer.offsetHeight; return e.virtualScrollHeight && (t = e.virtualScrollHeight), t > 0 && "hidden" !== e.verticalScrollBarVisibility || "visible" === e.verticalScrollBarVisibility ? e.$.scrollViewerContainer.classList.add("vscroll") : e.$.scrollViewerContainer.classList.remove("vscroll"), n && e.$.scrollViewerContainer.classList.add("hscroll"), t } if (!e.$.scrollViewerContentContainer) return; "hidden" === e.verticalScrollBarVisibility && e.$.scrollViewerContentContainer.setAttribute("disable-vertical", ""), "hidden" === e.horizontalScrollBarVisibility && e.$.scrollViewerContentContainer.setAttribute("disable-horizontal", ""); let r = e.scrollWidth, o = e.scrollHeight; e.scrollWidth = t(), e.scrollHeight = n(), e.scrollHeight && o === e.scrollHeight || (e.scrollWidth = t()), e.scrollWidth && r === e.scrollWidth || (e.scrollHeight = n()), e.computedVerticalScrollBarVisibility && (e.scrollHeight += e._scrollView.hScrollBar.offsetHeight), e.computedHorizontalScrollBarVisibility && (e.scrollWidth += e._scrollView.vScrollBar.offsetWidth), 0 === e.scrollHeight && e.scrollWidth > 0 && e.$.container.offsetHeight - e.$.content.offsetHeight < 5 && (e.$.container.style.paddingBottom = e._scrollView.hScrollBar.offsetHeight + "px"), e.autoRefresh && (e.$.scrollViewerContainer.scrollLeft = 0, e.$.scrollViewerContainer.scrollTop = 0) } attached() { const e = this; super.attached(), e._scrollView || e._customScrollView || (e._scrollView = new JQX.Utilities.Scroll(e, e.$.horizontalScrollBar, e.$.verticalScrollBar)) } detached() { const e = this; super.detached(), e._scrollView && (e._scrollView.unlisten(), delete e._scrollView) } get scrollWidth() { const e = this; return e._scrollView && e._scrollView.hScrollBar ? 1 === e._scrollView.hScrollBar.max && "visible" === e.horizontalScrollBarVisibility ? 0 : e._scrollView.hScrollBar.max : -1 } set scrollWidth(e) { const t = this; e < 0 && (e = 0), t._scrollView && t._scrollView.hScrollBar && (0 === e && "visible" === t.horizontalScrollBarVisibility ? t._scrollView.hScrollBar.max = 0 : t._scrollView.hScrollBar.max = e, t.refreshScrollBarsVisibility()) } get scrollHeight() { const e = this; return e._scrollView && e._scrollView.vScrollBar ? 1 === e._scrollView.vScrollBar.max && "visible" === e.verticalScrollBarVisibility ? 0 : e._scrollView.vScrollBar.max : 0 } set scrollHeight(e) { const t = this; e < 0 && (e = 0), t._scrollView && t._scrollView.vScrollBar && (0 === e && "visible" === t.verticalScrollBarVisibility ? t._scrollView.vScrollBar.max = 1 : t._scrollView.vScrollBar.max = e, t.refreshScrollBarsVisibility()) } get scrollLeft() { const e = this; return e._scrollView && e._scrollView.hScrollBar ? e._scrollView.hScrollBar.value : 0 } set scrollLeft(e) { const t = this; e < 0 && (e = 0), t._scrollView && t._scrollView.hScrollBar && (t._scrollView.hScrollBar.value = e) } get scrollTop() { const e = this; return e._scrollView && e._scrollView.vScrollBar ? e._scrollView.vScrollBar.value : 0 } set scrollTop(e) { const t = this; e < 0 && (e = 0), t._scrollView && t._scrollView.vScrollBar && (t._scrollView.vScrollBar.value = e) } propertyChangedHandler(e, t, n) { const r = this; super.propertyChangedHandler(e, t, n), "animation" !== e && "theme" !== e && r.refresh() } }), window[n].Utilities.Assign("PositionDetection", class { constructor(e, t, n, r) { const o = this; if (t) { const n = "dropDown" + Math.floor(65536 * (1 + Math.random())).toString(16).substring(1); t.id = n, e.setAttribute("aria-owns", n) } o.context = e, o.dropDown = t, o.defaultParent = n, o.closeMethod = r } handleAutoPositioning() { const e = this, t = e.context; if ("auto" !== t.dropDownPosition || t.disabled || t.isHidden) return; const n = window.requestAnimationFrame; let r, o = Date.now(); return r = n((function i() { t.isHidden || document.hidden || (r = n(i), "auto" === t.dropDownPosition && !t.disabled && (t.isInShadowDOM ? document.body.contains(t.shadowParent) : document.body.contains(t)) || cancelAnimationFrame(r), t.isHidden && cancelAnimationFrame(r), Date.now() - o >= 200 && (e.scrollHandler(), o = Date.now())) })) } checkBrowserBounds(e) { const t = this.context; if ("auto" === t.dropDownPosition && !t.disabled) switch (e) { case "vertically": this.checkBrowserBoundsVertically(); break; case "horizontally": this.checkBrowserBoundsHorizontally(); break; default: this.checkBrowserBoundsVertically(), this.checkBrowserBoundsHorizontally() } } checkBrowserBoundsHorizontally() { const e = this.context, t = this.dropDown; let n, r = 0; a.isMobile || window.innerWidth === document.documentElement.clientWidth || (r = window.innerWidth - document.documentElement.clientWidth), null !== e._dropDownParent ? n = !0 : t.style.left = ""; const o = window.innerWidth - r; let i = e.getBoundingClientRect().left; if (i < 0 && (t.style.left = (n ? 0 : Math.abs(i)) + "px", i = parseFloat(t.style.left)), i + t.offsetWidth > o) { let e = i - Math.abs(o - i - t.offsetWidth); n && (e += window.pageXOffset), t.style.left = (n ? e : e - i) + "px", window.innerWidth === document.documentElement.clientWidth && (t.style.left = parseFloat(t.style.left) + r + "px"), n && window.innerHeight === document.documentElement.clientHeight && this.positionDropDown(!0) } } checkBrowserBoundsVertically(e) { const t = this.context, n = this.dropDown, r = t._dropDownListPosition; e || (e = t.getBoundingClientRect()), 0 !== e.height && (document.documentElement.clientHeight - Math.abs(e.top + e.height + n.offsetHeight) >= 0 ? t._dropDownListPosition = "bottom" : e.top - n.offsetHeight >= 0 ? t._dropDownListPosition = "top" : t._dropDownListPosition = "overlay-center", this.updatePositionAttribute(r, t._dropDownListPosition)) } scrollHandler() { const e = this.context; if (!e.parentElement) return; const t = e.getBoundingClientRect(); if (t.top === e._positionTop) return; const n = e._dropDownListPosition; this.checkBrowserBoundsVertically(t), e._dropDownListPosition !== n && this.positionDropDown(), e._positionTop = t.top } getDropDownParent(e) { const t = this.context, n = this.dropDown; let r = t.dropDownAppendTo; t._positionedParent = null, null === r ? t._dropDownParent = null : "body" === r || r === document.body ? t.getRootNode().host ? t._dropDownParent = t.getRootNode().host.shadowRoot : t._dropDownParent = document.body : r instanceof HTMLElement ? t._dropDownParent = r : "string" == typeof r ? (r = document.getElementById(r), r instanceof HTMLElement ? t._dropDownParent = r : (t.dropDownAppendTo = null, t._dropDownParent = null)) : (t.dropDownAppendTo = null, t._dropDownParent = null); let o = t._dropDownParent; if (null !== o) { for (; o && o instanceof HTMLElement && "static" === window.getComputedStyle(o).position && o !== t.getShadowRootOrBody();)o = o.parentElement; o === document.body ? t._positionedParent = null : t._positionedParent = o, n && (n.setAttribute("animation", t.animation), "" !== t.theme && n.$.addClass(t.theme), e && (t._dropDownParent.appendChild(n), n.$.addClass("jqx-drop-down-repositioned")), -1 === t.detachedChildren.indexOf(n) && t.detachedChildren.push(n)) } } dropDownAppendToChangedHandler() { const e = this.context, t = this.dropDown, n = e._dropDownParent; this.getDropDownParent(), e._dropDownParent !== n && (e[this.closeMethod](), ["left", "top", "font-size", "font-family", "font-style", "font-weight"].forEach((e => t.style[e] = null)), null === e._dropDownParent ? (this.defaultParent.appendChild(t), t.$.removeClass("jqx-drop-down-repositioned")) : (e._dropDownParent.appendChild(t), t.$.addClass("jqx-drop-down-repositioned"))) } dropDownPositionChangedHandler() { const e = this; e.dropDown.style.transition = "none", e.context[e.closeMethod](), e.setDropDownPosition(), e.handleAutoPositioning() } dropDownAttached(e) { const t = this.context; null !== t._dropDownParent && (t._dropDownParent.appendChild(this.dropDown), this.handleAutoPositioning(), e && t[e]()) } dropDownDetached() { const e = this.context; null !== e._dropDownParent && document.body.contains(this.dropDown) && document.body.contains(e._dropDownParent) && e._dropDownParent.removeChild(this.dropDown) } setDropDownPosition() { const e = this.context, t = e.dropDownPosition, n = e._dropDownListPosition; "auto" === t ? this.checkBrowserBounds() : e._dropDownListPosition = t, this.updatePositionAttribute(n, e._dropDownListPosition) } updatePositionAttribute(e, t) { const n = this.context, r = this.dropDown; n.$.dropDownButton && !n.$.dropDownButton.hasAttribute(t) && (n.$.dropDownButton.removeAttribute(e), n.$.dropDownButton.setAttribute(t, "")), r.hasAttribute(t) || (r.style.transition = "none", r.removeAttribute(e), r.setAttribute(t, ""), requestAnimationFrame((function () { r.style.transition = null }))) } positionDropDown(e) { const t = this.context, n = this.dropDown; if (!t.opened || null === t._dropDownParent) return; const r = t.getBoundingClientRect(); let o, i; if (this.customPositionDropDown) { const e = this.customPositionDropDown(r); o = e.left, i = e.top } else switch (o = r.left, i = r.top, t._dropDownListPosition) { case "bottom": i += t.$.container.offsetHeight - 1; break; case "center-bottom": i += t.$.container.offsetHeight - 1, o += t.offsetWidth - n.offsetWidth / 2; break; case "center-top": i -= n.offsetHeight - 1, o += t.offsetWidth - n.offsetWidth / 2; break; case "top": i -= n.offsetHeight - 1; break; case "overlay-bottom": break; case "overlay-center": i -= n.offsetHeight / 2 - t.offsetHeight / 2; break; case "overlay-top": i -= n.offsetHeight - t.offsetHeight }const s = this.getDropDownOffset(); n.style.top = i + s.y + "px", e || (n.style.left = o + s.x + "px") } getDropDownOffset() { const e = this.context._positionedParent; let t, n; if (e && "#document-fragment" !== e.nodeName) { const r = e.getBoundingClientRect(); t = -r.left, n = -r.top } else t = window.pageXOffset, n = window.pageYOffset; return { x: t, y: n } } placeOverlay() { const e = this.context; if (!e.dropDownOverlay || e._overlay) return; const t = document.createElement("div"); t.classList.add("jqx-drop-down-overlay"), t.style.width = document.documentElement.scrollWidth + "px", t.style.height = document.documentElement.scrollHeight + "px", document.body.appendChild(t), e._overlay = t } removeOverlay(e) { const t = this, n = t.context; n._overlay && (n.hasAnimation && e ? requestAnimationFrame((function e() { t.dropDown.getBoundingClientRect().height > 0 ? requestAnimationFrame(e) : (document.body.removeChild(n._overlay), delete n._overlay) })) : (document.body.removeChild(n._overlay), delete n._overlay)) } }), window.JQX.Color = class { constructor(e) { if (window.JQX._colors || (window.JQX._colors = []), window.JQX._colors[e]) { const t = window.JQX._colors[e]; return this.hex = t.hex, this.r = t.r, this.g = t.g, void (this.b = t.b) } this.r = this.g = this.b = 0, this.hex = ""; const t = this.getStandardizedColor(e); t && (this.setHex(t.substring(1)), window.JQX._colors[e] = { hex: this.hex, r: this.r, g: this.g, b: this.b }) } getStandardizedColor(e) { const t = document.createElement("canvas").getContext("2d"); return t.fillStyle = e, t.fillStyle } getInvertedColor() { return "" === this.hex ? "transparent" : 255 - (.299 * this.r + .587 * this.g + .114 * this.b) < 105 ? "Black" : "White" } hexToRgb(e) { let t = "00", n = "00", r = "00"; return 6 === (e = this.validateHex(e)).length ? (t = e.substring(0, 2), n = e.substring(2, 4), r = e.substring(4, 6)) : (e.length > 4 && (t = e.substring(4, e.length), e = e.substring(0, 4)), e.length > 2 && (n = e.substring(2, e.length), e = e.substring(0, 2)), e.length > 0 && (r = e.substring(0, e.length))), { r: this.hexToInt(t), g: this.hexToInt(n), b: this.hexToInt(r) } } validateHex(e) { return (e = (e = new String(e).toUpperCase()).replace(/[^A-F0-9]/g, "0")).length > 6 && (e = e.substring(0, 6)), e } webSafeDec(e) { return e = Math.round(e / 51), e *= 51 } hexToWebSafe(e) { let t, n, r; return 3 === e.length ? (t = e.substring(0, 1), n = e.substring(1, 1), r = e.substring(2, 1)) : (t = e.substring(0, 2), n = e.substring(2, 4), r = e.substring(4, 6)), this.intToHex(this.webSafeDec(this.hexToInt(t))) + this.intToHex(this.webSafeDec(this.hexToInt(n))) + this.intToHex(this.webSafeDec(this.hexToInt(r))) } rgbToWebSafe(e) { return { r: this.webSafeDec(e.r), g: this.webSafeDec(e.g), b: this.webSafeDec(e.b) } } rgbToHex(e) { return this.intToHex(e.r) + this.intToHex(e.g) + this.intToHex(e.b) } intToHex(e) { let t = parseInt(e).toString(16); return 1 === t.length && (t = "0" + t), t.toUpperCase() } hexToInt(e) { return parseInt(e, 16) } setRgb(e, t, n) { let r = function (e) { return e < 0 || e > 255 || isNaN(parseInt(e)) ? 0 : e }; this.r = r(e), this.g = r(t), this.b = r(n), this.hex = this.rgbToHex(this) } setHex(e) { this.hex = e; let t = this.hexToRgb(this.hex); this.r = t.r, this.g = t.g, this.b = t.b } } }();
|
|
70
|
+
|
|
71
|
+
/***/
|
|
72
|
+
}),
|
|
73
|
+
|
|
74
|
+
/***/ 6802:
|
|
75
|
+
/***/ (() => {
|
|
76
|
+
|
|
77
|
+
JQX.Utilities.Assign("DataExporter", class { constructor(e, t, a, o) { const l = this; e || (e = {}), l.style = e.style, l.header = e.header, l.exportHeader = void 0 === e.exportHeader || e.exportHeader, l.hierarchical = e.hierarchical, l.expandChar = e.expandChar || "+", l.collapseChar = e.collapseChar || "-", l.pageOrientation = e.pageOrientation, l.allowNull = e.allowNull || !1, !l.hierarchical && t && t.length > 0 ? l.groupBy = t : l.mergedCells = e.mergedCells, !l.groupBy && a && Object.keys(a).length > 0 && (l.filterBy = a), o && (l.conditionalFormatting = o), l.timeBetween1900And1970 = new Date(1970, 0, 1, 0, 0, 0).getTime() - new Date(1900, 0, 1, 0, 0, 0).getTime() } downloadFile(e, t, a) { let o; if (!a) return e; if (o = e instanceof Blob ? e : new Blob([e], { type: t }), window.navigator.msSaveOrOpenBlob) window.navigator.msSaveOrOpenBlob(o, a); else { const e = document.createElement("a"), t = URL.createObjectURL(o); e.href = t, e.download = a, e.style.position = "absolute", e.style.visibility = "hidden", document.body.appendChild(e), e.click(), setTimeout((function () { document.body.removeChild(e), window.URL.revokeObjectURL(t) }), 100) } } exportData(e, t, a, o) { const l = this; if (l.actualHierarchy = l.hierarchical, t = t.toLowerCase(), l.exportHeader && (l.header ? (0 === (e = e.slice(0)).length && (l.actualHierarchy = !1), l.processComplexHeader(l.header, e, t)) : 1 === e.length && (l.actualHierarchy = !1)), 0 === e.length) return void console.warn("No data to export."); "xlsx" === t && (l.xlsxStartIndex = l.complexHeader ? l.complexHeader.length : +l.exportHeader), l.actualHierarchy && (e = l.processHierarchicalData(e, t)), l.getDatafields(e), a && a.slice(a.length - t.length - 1, a.length) !== "." + t && (a += "." + t); let r = null; switch (t) { case "csv": r = l.exportToCSVAndTSV(e, { delimiter: ", ", MIME: "text/csv", toRemove: 2 }, a); break; case "html": r = l.exportToHTML(e, a); break; case "jpeg": case "png": l.exportToImage(e, a, t, o); break; case "json": r = l.exportToJSON(e, a); break; case "pdf": r = l.exportToPDF(e, a); break; case "tsv": r = l.exportToCSVAndTSV(e, { delimiter: "\t", MIME: "text/tab-separated-values", toRemove: 1 }, a); break; case "xlsx": r = l.exportToXLSX(e, a, o); break; case "xml": r = l.exportToXML(e, a); break; case "md": r = l.exportToMD(e, a) }return o && r && o(r), delete l.complexHeader, r } exportToCSVAndTSV(e, t, a) { const o = this, l = o.datafields; let r = ""; for (let a = 0; a < e.length; a++) { const n = e[a]; let s = ""; for (let e = 0; e < l.length; e++)o.actualHierarchy && 0 === e ? s += ('""' + t.delimiter).repeat(n._level - 1) + '"' + n[l[e]] + '"' + t.delimiter + ('""' + t.delimiter).repeat(o.maxLevel - n._level) : s += '"' + n[l[e]] + '"' + t.delimiter; s = s.slice(0, s.length - t.toRemove) + "\n", r += s } return a ? this.downloadFile(r, t.MIME, a) : r } exportToHTML(e, t) { const a = this, o = a.datafields, l = a.style; let r = "", n = 0, s = ""; e = a.processGroupingInformation(e), a.data = e, a.exportHeader && (r = a.getHTMLHeader(o, e), n = 1), arguments[2] && (s = `<script type="text/javascript" src="${Array.from(document.getElementsByTagName("script")).find((e => -1 !== e.src.indexOf("html2canvas"))).src}"><\/script>`); let i = `<!DOCTYPE html>\n<html>\n<head>\n <meta charset="UTF-8">\n <style type="text/css">\n${a.getRowStyle()}${a.getColumnStyle()}\n </style>${s}${a.toggleableFunctionality()}\n</head>\n<body>\n <table${a.getTableStyle()}>${r}\n <tbody>\n`; const c = {}, p = {}, m = []; a.getMergedCellsInfo(c, p); e: for (let r = n; r < e.length; r++) { const s = e[r], f = r - n; let d = a.getAlternationIndex(f, " rowN"), h = "", g = "", u = "", y = 0; if (a.actualHierarchy) s._collapsed && (h = " collapsed"), g = ` level="${s._level}"`; else if (a.groupBy) for (let e = 0; e < a.groupBy.length; e++) { const t = a.groupBy[e], o = s[t], l = a.groups[t][o]; if (u += o, -1 === m.indexOf(u)) { i += ` <tr class="row">\n <td class="column group" style="padding-left: ${25 * y}px;" colspan="${a.datafields.length}">${l}</td>\n </tr>`, m.push(u), r--; continue e } y++ } let x = ` <tr class="row row${f}${d}${h}"${g}`; t || (x += ' style="page-break-inside: avoid;"'), x += ">\n"; for (let e = 0; e < o.length; e++) { const t = e + "," + f; let r = 1, n = 1; if (c[t]) r = c[t].colspan, n = c[t].rowspan; else if (p[t]) continue; const i = o[e]; let m = s[i], d = ""; if (a.actualHierarchy && 0 === e) { let e = ""; s._expanded ? e = a.collapseChar : !1 === s._expanded && (e = a.expandChar), d = `<div class="toggle-element" style="margin-left: ${25 * (s._level - 1) + 5}px;" expanded>${e}</div>` } m = a.getFormattedValue(m, i); let h = ""; if (l && l.columns && l.columns[i] && l.columns[i][f]) { const e = l.columns[i][f]; h += `border-color: ${e.border}; background-color: ${e.background}; color: ${e.color};"` } 0 === e && y > 1 && (h += `padding-left: ${25 * (y - 1)}px;"`), h && (h = ` style="${h}"`), x += ` <td class="column column${i}"${h} colspan="${r}" rowspan="${n}">${d + m}</td>\n` } i += x + " </tr>\n" } return i += " </tbody>\n </table>\n</body>\n</html>", arguments[2] ? i : this.downloadFile(i, "text/html", t) } exportToImage(e, t, a, o) { try { html2canvas } catch (e) { throw new Error("jqx-grid: Missing reference to 'html2canvas.min.js'.") } let l = null; const r = this.exportToHTML(e, t, !0), n = document.createElement("iframe"); return n.style.position = "absolute", n.style.top = 0, n.style.left = 0, n.style.border = "none", n.style.width = "100%", n.style.height = "100%", n.style.opacity = 0, n.style.pointerEvents = "none", document.body.appendChild(n), n.contentDocument.write(r), function e() { n.contentDocument.body && n.contentDocument.body.firstElementChild ? n.contentWindow.html2canvas(n.contentDocument.body.firstElementChild).then((e => { const r = new JQX.Utilities.Draw(document.createElement("div")); l = e.toDataURL("image/png"), o ? o(l) : (document.body.appendChild(e), r.exportImage(void 0, e, a, t)), n.remove(), e.remove() })) : requestAnimationFrame(e) }(), l } getMergedCellsInfo(e, t, a) { const o = this; if (!o.mergedCells) return; const l = a && 0 !== a[o.datafields.length - 1]; o.mergedCellsPDF = o.mergedCells.slice(0); for (let r = 0; r < o.mergedCellsPDF.length; r++) { const n = o.mergedCellsPDF[r]; let s = n.colspan, i = n.rowspan; if (i < 2 && s < 2) continue; const c = n.cell[1]; let p = n.cell[0]; if (l && s > 1) { const e = a[p], t = a[p + s - 1], l = []; if (t > e) { let r = e, n = p, m = 0; e: for (let o = e; o <= t; o++) { let e = n, t = 0; for (; a[n] === r;)if (n++, m++, t++, m === s) { l.push({ start: e, span: t }); break e } l.push({ start: e, span: t }), r = a[n] } s = l[0].span; for (let e = 1; e < l.length; e++)o.mergedCellsPDF.push({ cell: [l[e].start, c], colspan: l[e].span, rowspan: i, originalCell: p }) } } for (let a = p; a < p + s; a++)for (let o = c; o < c + i; o++) { const l = a + "," + o; a !== p || o !== c ? t[l] = !0 : e[l] = { colspan: s, rowspan: i, originalCell: n.originalCell } } } } getAlternationIndex(e, t) { if (!this.style) return ""; const a = this.style.rows; return a && a.alternationCount && ((void 0 === a.alternationStart || e >= a.alternationStart) && (void 0 === a.alternationEnd || e <= a.alternationEnd) || a.alternationStart === a.alternationEnd) ? t + e % a.alternationCount : "" } getFormattedValue(e, t) { const a = this, o = a.style; if (null === e) return a.allowNull ? "null" : ""; if (t && o && o.columns && o.columns[t] && o.columns[t].format) { if ("number" == typeof e) return a.formatNumber(e, o.columns[t].format); if (e instanceof Date) return a.formatDate(e, o.columns[t].format) } else if (e instanceof Date) return a.formatDate(e, "d"); return e } exportToJSON(e, t) { return this.downloadFile(JSON.stringify(e, this.datafields.concat("rows")), "application/json", t) } exportToMD(e, t) { const a = this.datafields; let o = ""; for (let t = 0, l = e.length; t < l; t += 1)for (let l = 0, r = a.length; l < r; l += 1) { const r = e[t][a[l]]; "string" == typeof r && (o += r) } return this.downloadFile(o, "application/text", t) } exportToPDF(e, t) { try { pdfMake } catch (e) { throw new Error("Missing reference to 'pdfmake.min.js'.") } const a = this, o = a.datafields, l = +a.exportHeader, r = [], n = {}, s = {}, i = {}, c = l ? a.complexHeader ? a.complexHeader.length : 1 : 0, p = { pageOrientation: a.pageOrientation || "portrait" }; let m, f = [], d = []; function h() { let e = []; for (let t = 0; t < m.length; t++)e.push([]); return e } e = a.processGroupingInformation(e), a.data = e, a.headerRows = c, a.getPDFStyle(); const g = a.styleInfo; m = g ? a.wrapPDFColumns(p, i) : [{ body: f, datafields: o }], l && (f = a.getPDFHeader(o, m, i)), a.getMergedCellsInfo(n, s, i); e: for (let t = l; t < e.length; t++) { const c = e[t]; let p = "", f = 0; if (a.groupBy) for (let e = 0; e < a.groupBy.length; e++) { const o = a.groupBy[e], l = c[o], n = a.groups[o][l]; if (p += l, -1 === r.indexOf(p)) { a.createGroupHeaderRow(m, { text: n, style: ["row", "cell", "group"], marginLeft: 7.5 * f }), r.push(p), t--; continue e } f++ } const d = h(), g = t - l; let u = a.getAlternationIndex(g, ""); for (let e = 0; e < o.length; e++) { const t = o[e], l = { style: ["row", "row" + g, "cell", "cell" + t] }, r = i[e] || 0; if (void 0 !== u && l.style.splice(1, 0, "rowN" + u), a.mergedCellsPDF) { const t = e + "," + g, a = n[t]; if (a) { if (l.colSpan = a.colspan, l.rowSpan = a.rowspan, void 0 !== a.originalCell) { l.text = "", l.style[l.style.length - 1] = "cell" + o[a.originalCell], d[r].push(l); continue } } else if (s[t]) { d[r].push({}); continue } } const p = a.getFormattedValue(c[t], t); l.text = p.toString(), a.getUniqueStylePDF(l, t, g), a.setIndentation(l, { j: e, currentRecord: c, value: p, outlineLevel: f }), d[r].push(l) } for (let e = 0; e < m.length; e++)m[e].body.push(d[e]) } if (g) { for (let e = 0; e < m.length; e++) { const t = m[e].body; for (let a = c - 1; a >= 0; a--)t.unshift(f[e][a]); d.push({ table: { headerRows: c, widths: m[e].widths, heights: function (e) { return g.heights[e] ? g.heights[e] : g.defaultHeight ? g.defaultHeight : void 0 }, body: t }, pageBreak: "after" }) } delete d[m.length - 1].pageBreak, p.styles = g.styles } else { const e = m[0].body; for (let t = c - 1; t >= 0; t--)e.unshift(f[0][t]); d = [{ table: { headerRows: c, body: e } }], p.styles = { header: { bold: !0 }, group: { bold: !0 } } } if (p.content = d, !t) { const e = pdfMake.createPdf(p); return delete a.mergedCellsPDF, delete a.styleInfo, e } pdfMake.createPdf(p).download(t), delete a.mergedCellsPDF, delete a.styleInfo } getPDFStyle() { const e = this, t = e.style; if (!t) return ""; const a = e.data[0], o = t.header, l = t.columns, r = t.rows, n = { heights: [], widths: Array(e.datafields.length).fill("*"), styles: { header: {}, row: {}, cell: {}, group: { fillColor: "#FFFFFF", color: "#000000", bold: !0 } } }; function s(t, o) { if (t) for (let l in t) if (Object.prototype.hasOwnProperty.call(t, l)) if (void 0 === a[l]) if ("height" === l && "header" === o) for (let a = 0; a < e.headerRows; a++)n.heights[a] = parseInt(t[l], 10) / e.headerRows / 1.4; else e.storePDFStyle({ prop: l, value: t[l], toUpdate: o }); else for (let a in t[l]) { if (!isNaN(a) || !Object.prototype.hasOwnProperty.call(t[l], a)) continue; const r = t[l][a], s = e.datafields.indexOf(l); "width" === a && "*" === n.widths[s] ? n.widths[s] = r : e.storePDFStyle({ prop: a, value: r, toUpdate: o + l }) } } if (e.styleInfo = n, s(o, "header"), s(l, "cell"), r) { for (let t in r) { if (!Object.prototype.hasOwnProperty.call(r, t) || -1 !== t.indexOf("alt")) continue; const a = r[t]; if (isNaN(t)) "height" === t ? n.defaultHeight = parseFloat(a) / 1.4 : e.storePDFStyle({ prop: t, value: a, toUpdate: "row" }); else for (let o in a) Object.prototype.hasOwnProperty.call(a, o) && ("height" === o ? n.heights[parseFloat(t) + e.headerRows] = parseFloat(a[o]) / 1.4 : e.storePDFStyle({ prop: o, value: a[o], toUpdate: "row" + t })) } if (r.alternationCount) for (let e = 0; e < r.alternationCount; e++) { const t = {}; r[`alternationIndex${e}Color`] && (t.color = r[`alternationIndex${e}Color`]), r[`alternationIndex${e}BackgroundColor`] && (t.fillColor = r[`alternationIndex${e}BackgroundColor`]), n.styles["rowN" + e] = t } } } storePDFStyle(e) { const t = this; let a = t.styleInfo.styles[e.toUpdate]; a || (a = {}, t.styleInfo.styles[e.toUpdate] = a); let o = e.value; switch (e.prop) { case "backgroundColor": a.fillColor = o; break; case "color": a.color = o; break; case "fontSize": a.fontSize = parseFloat(o); break; case "fontStyle": "italic" === o && (a.italics = !0); break; case "fontWeight": "bold" === o && (a.bold = !0); break; case "textAlign": a.alignment = o } } wrapPDFColumns(e, t) { const a = this, o = this.styleInfo, l = "portrait" === e.pageOrientation ? 655 : 1155, r = []; let n = 0; for (let e = 0; e < o.widths.length; e++) { let s, i = o.widths[e]; if ("*" === i ? s = l / 6 : "string" == typeof i && -1 !== i.indexOf("%") ? (s = Math.min(l, Math.floor(parseFloat(i) / 100 * l)), s === l && (i = "*")) : (i = parseFloat(i), i >= l ? (s = l, i = "*") : (s = i, i /= 1.4)), void 0 === r[n]) { const o = []; r[n] = { body: o, width: s, widths: [i], datafields: [a.datafields[e]] }, t[e] = n; continue } const c = r[n]; c.width + s > l ? (n++, e--) : (t[e] = n, c.width += s, c.widths.push(i), c.datafields.push(a.datafields[e])) } return r } getPDFHeader(e, t, a) { const o = this, l = [], r = o.headerRows, n = [], s = []; let i, c, p = []; o.complexHeader ? (i = o.complexHeader, c = o.complexDataFieldsHeader) : (i = [Object.values(o.data[0])], c = i); for (let e = 0; e < r; e++) { const t = i[e], o = c[e]; for (let l = 0; l < t.length; l++) { let r = a[l] || 0; n[r] || (n[r] = [], s[r] = []), n[r][e] || (n[r][e] = [], s[r][e] = []), n[r][e].push(t[l]), s[r][e].push(o[l]) } } function m(e, t, a, o) { for (let l = 0; l < r; l++) { const n = e[l], s = t[l], i = []; for (let e = 0; e < n.length; e++) { const a = s[e]; let c = 1, p = 1; if (s[e - 1] && s[e - 1] === a || t[l - 1] && t[l - 1][e] === a) { i.push({}); continue } let m = e + 1; for (; s[m] && s[m] === s[m - 1];)c++, m++; for (m = l + 1; t[m] && t[m][e] === a;)p++, m++; const f = l === r - 1 || p + l === r ? o.datafields[e] : null, d = { text: n[e], colSpan: c, rowSpan: p }; f ? d.style = ["header", "header" + f] : (d.alignment = "center", d.style = "header"), i.push(d) } a.push(i) } } for (let e = 0; e < t.length; e++)p = [], m(n[e], s[e], p, t[e]), l.push(p); return l } createGroupHeaderRow(e, t) { for (let a = 0; a < e.length; a++) { const o = Object.assign({}, t), l = e[a].datafields.length, r = [o]; o.colSpan = l, r.length = l, r.fill({}, 1, l - 1), e[a].body.push(r) } } getUniqueStylePDF(e, t, a) { const o = this.style; if (!o || !o.columns || !o.columns[t]) return; const l = o.columns[t][a]; l && (e.fillColor = function (e) { const t = /rgba\((\d+),(\d+),(\d+)\,(\d*.\d+|\d+)\)/gi.exec(e.replace(/\s/g, "")); if (null === t) return e; const a = parseFloat(t[1]).toString(16).toUpperCase(), o = parseFloat(t[2]).toString(16).toUpperCase(), l = parseFloat(t[3]).toString(16).toUpperCase(); return "#" + "0".repeat(2 - a.length) + a + "0".repeat(2 - o.length) + o + "0".repeat(2 - l.length) + l }(l.background), e.color = l.color.toLowerCase()) } setIndentation(e, t) { if (0 !== t.j) return; const a = this; if (a.actualHierarchy) { const o = t.currentRecord; void 0 !== o._expanded ? (e.marginLeft = 25 * (o._level - 1), e.text = a.collapseChar + " " + t.value) : e.marginLeft = 25 * (o._level - 1) + 6 } else t.outlineLevel > 1 && (e.marginLeft = 7.5 * (t.outlineLevel - 1)) } exportToXLSX(e, t, a) { try { JSZip } catch (e) { throw new Error("Missing reference to 'jszip.min.js'.") } const o = this; let l = o.style; if (e = o.processGroupingInformation(e, !0), o.data = e, o.getColumnsArray(), o.complexHeaderMergedCells = [], o.complexHeaderMergeInfo) for (let e in o.complexHeaderMergeInfo) if (Object.prototype.hasOwnProperty.call(o.complexHeaderMergeInfo, e)) { const t = o.complexHeaderMergeInfo[e]; if (t.from[0] === t.to[0] && t.from[1] === t.to[1]) continue; o.complexHeaderMergedCells.push({ from: o.columnsArray[t.from[1]] + (t.from[0] + 1), to: o.columnsArray[t.to[1]] + (t.to[0] + 1) }) } o.getConditionalFormatting(), l || (l = o.generateDefaultStyle(e)); const r = o.generateSharedStrings(e), n = r.collection, s = r.xml, i = o.generateStyles(l), c = o.groupBy ? o.generateSheet1WithGrouping(e, n) : o.generateSheet1(e, n), p = o.generateAuxiliaryFiles(), m = new JSZip, f = m.folder("_rels"), d = m.folder("docProps"), h = m.folder("xl"), g = h.folder("_rels"), u = h.folder("theme"), y = h.folder("worksheets"); f.file(".rels", p._relsRels), d.file("app.xml", p.docPropsAppXml), d.file("core.xml", p.docPropsCoreXml), g.file("workbook.xml.rels", p.xl_relsWorkbookXmlRels), u.file("theme1.xml", p.xlThemeTheme1Xml), y.file("sheet1.xml", c), h.file("sharedStrings.xml", s), h.file("styles.xml", i), h.file("workbook.xml", p.xlWorkbookXml), m.file("[Content_Types].xml", p.Content_TypesXml), m.generateAsync({ type: "blob", mimeType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }).then((function (e) { return !t && a && a(e), o.downloadFile(e, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", t) })), delete o.conditionalFormattingXLSX, delete o.complexHeaderMergeInfo, delete o.defaultRowHeight, delete o.rowHeight } processGroupingInformation(e, t) { const a = this; if (!a.groupBy) return e; let o; if (e = e.slice(0), a.exportHeader && (t && a.complexHeader ? (o = e.slice(0, a.complexHeader.length), e.splice(0, a.complexHeader.length)) : (o = [e[0]], e.splice(0, 1))), e.length > 1) { const t = function (e, t) { let a; switch (t || typeof e) { case "string": a = (new Intl.Collator).compare; break; case "number": a = function (e, t) { return e - t }; break; case "boolean": case "bool": a = function (e, t) { return e === t ? 0 : !1 === e ? -1 : 1 }; break; case "date": case "time": case "dateTime": e instanceof Date ? a = function (e, t) { return e.getTime() - t.getTime() } : (e instanceof JQX.Utilities.DateTime || e instanceof JQX.Utilities.BigNumber) && (a = function (e, t) { return e.compare(t) }); break; case "object": if (e instanceof Date) a = function (e, t) { return e.getTime() - t.getTime() }; else if (e instanceof JQX.Utilities.DateTime || e instanceof JQX.Utilities.BigNumber) a = function (e, t) { return e.compare(t) }; else if (e instanceof JQX.Utilities.Complex || window.NIComplex && e instanceof window.NIComplex) { const e = new JQX.Utilities.ComplexNumericProcessor; a = function (t, a) { return e.compareComplexNumbers(t, a) } } }return a }; !function (e, a, o, l) { if (!e || !Array.isArray(e) || 0 === e.length || !a || Array.isArray(a) && 0 === a.length) return; "string" == typeof a && (a = [a]); const r = [], n = []; void 0 === o && (o = []); for (let l = 0; l < a.length; l++)void 0 === o[l] || "asc" === o[l] || "ascending" === o[l] ? r[l] = 1 : r[l] = -1, n[l] = t(e[0][a[l]]); l ? l(e, a, o, n) : e.sort((function (e, t) { for (let o = 0; o < a.length; o++) { const l = n[o](e[a[o]], t[a[o]]); if (0 === l) { if (a[o + 1]) continue; return void 0 !== e._index ? (e._index - t._index) * r[o] : 0 } return l * r[o] } })) }(e, a.groupBy) } return o && (e = o.concat(e)), a.getGroupLabels(e), e } exportToXML(e, t) { const a = this.datafields.slice(0); let o = '<?xml version="1.0" encoding="UTF-8" ?>\n<table>\n'; return -1 === a.indexOf("rows") && a.push("rows"), o += function e(t, o) { let l = ""; for (let r = 0; r < t.length; r++) { const n = t[r]; l += o + "<row>\n"; for (let t = 0; t < a.length; t++) { const r = a[t]; if ("rows" !== r) l += o + ` <${r}>${n[r]}</${r}>\n`; else { if (!n.rows) continue; l += `${o} <rows>\n${e(n.rows, o + " ")}${o} </rows>\n` } } l += o + "</row>\n" } return l }(e, " ") + "</table>", t ? this.downloadFile(o, "application/xml", t) : o } formatDate(e, t) { if (!JQX.Utilities.DateTime) return e; try { return new JQX.Utilities.DateTime(e).toString(t) } catch (t) { return e } } formatNumber(e, t) { if (!JQX.Utilities.NumberRenderer) return e; const a = (new JQX.Utilities.NumberRenderer).formatNumber(e, t); return void 0 === a ? e : a } generateAuxiliaryFiles() { const e = (new Date).toISOString(); return { _relsRels: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>', docPropsAppXml: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Application>Microsoft Excel</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size="2" baseType="variant"><vt:variant><vt:lpstr>Worksheets</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size="1" baseType="lpstr"><vt:lpstr>Sheet1</vt:lpstr></vt:vector></TitlesOfParts><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>16.0300</AppVersion></Properties>', docPropsCoreXml: `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:creator>JQX HTML Elements</dc:creator><cp:lastModifiedBy>JQX HTML Elements</cp:lastModifiedBy><dcterms:created xsi:type="dcterms:W3CDTF">${e}</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">${e}</dcterms:modified></cp:coreProperties>`, xl_relsWorkbookXmlRels: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/></Relationships>', xlThemeTheme1Xml: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="44546A"/></a:dk2><a:lt2><a:srgbClr val="E7E6E6"/></a:lt2><a:accent1><a:srgbClr val="4472C4"/></a:accent1><a:accent2><a:srgbClr val="ED7D31"/></a:accent2><a:accent3><a:srgbClr val="A5A5A5"/></a:accent3><a:accent4><a:srgbClr val="FFC000"/></a:accent4><a:accent5><a:srgbClr val="5B9BD5"/></a:accent5><a:accent6><a:srgbClr val="70AD47"/></a:accent6><a:hlink><a:srgbClr val="0563C1"/></a:hlink><a:folHlink><a:srgbClr val="954F72"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Calibri Light" panose="020F0302020204030204"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="游ゴシック Light"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="等线 Light"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/><a:font script="Armn" typeface="Arial"/><a:font script="Bugi" typeface="Leelawadee UI"/><a:font script="Bopo" typeface="Microsoft JhengHei"/><a:font script="Java" typeface="Javanese Text"/><a:font script="Lisu" typeface="Segoe UI"/><a:font script="Mymr" typeface="Myanmar Text"/><a:font script="Nkoo" typeface="Ebrima"/><a:font script="Olck" typeface="Nirmala UI"/><a:font script="Osma" typeface="Ebrima"/><a:font script="Phag" typeface="Phagspa"/><a:font script="Syrn" typeface="Estrangelo Edessa"/><a:font script="Syrj" typeface="Estrangelo Edessa"/><a:font script="Syre" typeface="Estrangelo Edessa"/><a:font script="Sora" typeface="Nirmala UI"/><a:font script="Tale" typeface="Microsoft Tai Le"/><a:font script="Talu" typeface="Microsoft New Tai Lue"/><a:font script="Tfng" typeface="Ebrima"/></a:majorFont><a:minorFont><a:latin typeface="Calibri" panose="020F0502020204030204"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="游ゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="等线"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/><a:font script="Armn" typeface="Arial"/><a:font script="Bugi" typeface="Leelawadee UI"/><a:font script="Bopo" typeface="Microsoft JhengHei"/><a:font script="Java" typeface="Javanese Text"/><a:font script="Lisu" typeface="Segoe UI"/><a:font script="Mymr" typeface="Myanmar Text"/><a:font script="Nkoo" typeface="Ebrima"/><a:font script="Olck" typeface="Nirmala UI"/><a:font script="Osma" typeface="Ebrima"/><a:font script="Phag" typeface="Phagspa"/><a:font script="Syrn" typeface="Estrangelo Edessa"/><a:font script="Syrj" typeface="Estrangelo Edessa"/><a:font script="Syre" typeface="Estrangelo Edessa"/><a:font script="Sora" typeface="Nirmala UI"/><a:font script="Tale" typeface="Microsoft Tai Le"/><a:font script="Talu" typeface="Microsoft New Tai Lue"/><a:font script="Tfng" typeface="Ebrima"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:lumMod val="110000"/><a:satMod val="105000"/><a:tint val="67000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:lumMod val="105000"/><a:satMod val="103000"/><a:tint val="73000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:lumMod val="105000"/><a:satMod val="109000"/><a:tint val="81000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:satMod val="103000"/><a:lumMod val="102000"/><a:tint val="94000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:satMod val="110000"/><a:lumMod val="100000"/><a:shade val="100000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:lumMod val="99000"/><a:satMod val="120000"/><a:shade val="78000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="6350" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln><a:ln w="12700" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln><a:ln w="19050" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="57150" dist="19050" dir="5400000" algn="ctr" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="63000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"><a:tint val="95000"/><a:satMod val="170000"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="93000"/><a:satMod val="150000"/><a:shade val="98000"/><a:lumMod val="102000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:tint val="98000"/><a:satMod val="130000"/><a:shade val="90000"/><a:lumMod val="103000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="63000"/><a:satMod val="120000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/><a:extLst><a:ext uri="{05A4C25C-085E-4340-85A3-A5531E510DB2}"><thm15:themeFamily xmlns:thm15="http://schemas.microsoft.com/office/thememl/2012/main" name="Office Theme" id="{62F939B6-93AF-4DB8-9C6B-D6C7DFDC589F}" vid="{4A3C46E8-61CC-4603-A589-7422A47A8E4A}"/></a:ext></a:extLst></a:theme>', xlWorkbookXml: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x15 xr xr6 xr10 xr2" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr6="http://schemas.microsoft.com/office/spreadsheetml/2016/revision6" xmlns:xr10="http://schemas.microsoft.com/office/spreadsheetml/2016/revision10" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2"><fileVersion appName="xl" lastEdited="7" lowestEdited="7" rupBuild="20325"/><workbookPr defaultThemeVersion="166925"/><mc:AlternateContent xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"><mc:Choice Requires="x15"><x15ac:absPath url="C:UsersjqwidgetsDesktop" xmlns:x15ac="http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac"/></mc:Choice></mc:AlternateContent><xr:revisionPtr revIDLastSave="0" documentId="13_ncr:1_{0DEDCB6D-5403-4CD8-AAA5-59B6D238A8B6}" xr6:coauthVersionLast="34" xr6:coauthVersionMax="34" xr10:uidLastSave="{00000000-0000-0000-0000-000000000000}"/><bookViews><workbookView xWindow="0" yWindow="0" windowWidth="19200" windowHeight="6950" xr2:uid="{0CB664E6-3800-4A88-B158-B46A682E7484}"/></bookViews><sheets><sheet name="Sheet1" sheetId="1" r:id="rId1"/></sheets><calcPr calcId="179021"/><extLst><ext uri="{140A7094-0E35-4892-8432-C4D2E57EDEB5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:workbookPr chartTrackingRefBase="1"/></ext></extLst></workbook>', Content_TypesXml: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="bin" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings"/><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/><Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/><Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/><Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/></Types>' } } generateDefaultStyle(e) { const t = this, a = {}, o = t.datafields, l = t.complexHeader ? e[t.complexHeader.length] : e[+t.exportHeader]; if (!l) return a; for (let e = 0; e < o.length; e++)l[o[e]] instanceof Date && (a.columns || (a.columns = []), a.columns[o[e]] = { format: "d" }); return a } generateGroupRow(e) { const t = e.rowNumber, a = "A" + t, o = ` <row r="${t}" outlineLevel="${e.outlineLevel}" spans="1:${e.numberOfColumns}"${this.getCustomRowHeight(t - 1)} x14ac:dyDescent="0.45">\n <c r="${a}" t="s" s="0">\n <v>${e.sharedStringIndex}</v>\n </c>\n </row>\n`; return e.mergedCells.push({ from: a, to: this.columnsArray[e.numberOfColumns - 1] + t }), o } generateSharedStrings(e) { const t = this, a = t.datafields, o = []; let l = "", r = 0, n = 0; function s(e) { r++, -1 === o.indexOf(e) && (n++, o.push(e), e = (e = (e = (e = (e = e.replace(/&(?!amp;)/g, "&")).replace(/'/g, "'")).replace(/"/g, """)).replace(/>/g, ">")).replace(/</g, "<"), l += `<si><t>${e}</t></si>`) } for (let o = 0; o < e.length; o++) { const l = e[o]; for (let e = 0; e < a.length; e++) { let o = l[a[e]]; null !== o || t.allowNull || (o = ""), "string" == typeof o && s(o) } } if (t.groupLabels) for (let e = 0; e < t.groupLabels.length; e++)s(t.groupLabels[e]); return l = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="${r}" uniqueCount="${n}">${l}</sst>`, { collection: o, xml: l } } generateSheet1(e, t) { const a = this, o = a.columnsArray.length, l = e.length, r = a.columnsArray[o - 1] + l, n = a.datafields, s = a.getFilters(), i = [].concat(a.complexHeaderMergedCells); let c = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{7F25248B-C640-4C64-AD47-C0EA0E5D90D0}">\n <sheetPr filterMode="${"" !== s}" />\n <dimension ref="A1:${r}" />\n <sheetViews>\n <sheetView tabSelected="1" workbookViewId="0" />\n </sheetViews>\n <sheetFormatPr defaultRowHeight="14.5" x14ac:dyDescent="0.35" />${a.getCustomColumnWidths()}\n <sheetData>\n`; function p(e, t) { return a.columnsArray[e] + t } for (let l = 0; l <= e.length; l++) { const r = e[l], s = l + 1; let i = ""; if (a.actualHierarchy) { const t = e[l - 1]; t && t._collapsed && (!r || t._level > r._level) && (i = ' collapsed="true"') } if (l === e.length) { i && (c += ` <row r="${s}" outlineLevel="${Math.max(e[l - 1]._level - 2, 0)}" hidden="false" collapsed="true" />\n`); break } let m = ` <row r="${s}"${a.getOutlineLevel(r)} hidden="${r._hidden || r._collapsed || !1}"${i} spans="1:${o}"${a.getCustomRowHeight(s - 1)} x14ac:dyDescent="0.45">\n`; for (let e = 0; e < n.length; e++) { const o = a.getXLSXCellStyle(p(e, s)); m += a.getActualCellData(r[n[e]], { r: p(e, s), s: o }, t) } m += " </row>\n", c += m } return c += ` </sheetData>${a.conditionalFormattingXLSX.conditions}${s}${a.getMergedCells(i)}\n <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3" />\n <pageSetup paperSize="9" orientation="portrait" r:id="rId1" />\n</worksheet>`, c } generateSheet1WithGrouping(e, t) { const a = this, o = a.columnsArray.length, l = e.length, r = a.columnsArray[o - 1] + l, n = a.datafields, s = [].concat(a.complexHeaderMergedCells); let i = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{7F25248B-C640-4C64-AD47-C0EA0E5D90D0}">\n <dimension ref="A1:${r}" />\n <sheetViews>\n <sheetView tabSelected="1" workbookViewId="0" />\n </sheetViews>\n <sheetFormatPr defaultRowHeight="14.5" x14ac:dyDescent="0.35" />${a.getCustomColumnWidths()}\n <sheetData>\n`, c = 0, p = []; function m(e, t) { return a.columnsArray[e] + t } e: for (let l = 0; l < e.length; l++) { const r = e[l], f = l + 1 + c; let d = 0, h = ""; if (!a.exportHeader || !a.complexHeader && 0 !== l || a.complexHeader && l >= a.complexHeader.length) { let e = ""; for (let n = 0; n < a.groupBy.length; n++) { const m = a.groupBy[n], h = r[m], g = a.groups[m][h]; if (e += h, -1 === p.indexOf(e)) { let r = t.indexOf(g); i += a.generateGroupRow({ rowNumber: f, outlineLevel: d, numberOfColumns: o, sharedStringIndex: r, mergedCells: s }), p.push(e), l--, c++; continue e } d++ } h = ` outlineLevel="${d}"` } let g = ` <row r="${f}"${h} spans="1:${o}"${a.getCustomRowHeight(f - 1)} x14ac:dyDescent="0.45">\n`; for (let e = 0; e < n.length; e++) { const o = a.getXLSXCellStyle(m(e, l + 1)); g += a.getActualCellData(r[n[e]], { r: m(e, f), s: o }, t) } g += " </row>\n", i += g } return i += ` </sheetData>${a.getMergedCells(s)}\n <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3" />\n <pageSetup paperSize="9" orientation="portrait" r:id="rId1" />\n</worksheet>`, i } getActualCellData(e, t, a) { const o = t.r, l = t.s || ' s="0"'; return null !== e || this.allowNull || (e = ""), "string" == typeof e ? ` <c r="${o}" t="s"${l}>\n <v>${a.indexOf(e)}</v>\n </c>\n` : "boolean" == typeof e ? ` <c r="${o}" t="b"${l}>\n <v>${+e}</v>\n </c>\n` : e instanceof Date ? ` <c r="${o}"${l}>\n <v>${2 + Math.round(this.timeBetween1900And1970 / 864e5) + (e.getTime() - 60 * e.getTimezoneOffset() * 1e3) / 864e5}</v>\n </c>\n` : ` <c r="${o}"${l}>\n <v>${e}</v>\n </c>\n` } getColumnsArray() { const e = this.datafields.length, t = []; function a(e) { return e < 26 ? "" : String.fromCharCode(64 + Math.floor(e / 26)) } for (let o = 0; o < e; o++)t.push(a(o) + String.fromCharCode(65 + (o < 26 ? o : o % 26))); this.columnsArray = t } getColumnStyle() { const e = this, t = e.style; if (!t) return " .header { border: 1px solid black; padding: 5px; }\n .column { border: 1px solid black; padding: 5px; }\n .group { background-color: #FFFFFF; color: #000000; font-weight: bold; }"; let a; a = t.removeDefault ? { header: "", column: "", group: "" } : { header: "border: 1px solid black; padding: 5px; ", column: "white-space: nowrap; overflow: hidden; border: 1px solid black; padding: 5px; ", group: "background-color: #FFFFFF; color: #000000; font-weight: bold; " }; const o = e.data[0]; let l = ""; const r = t.header || {}; for (let t in r) { if (!Object.prototype.hasOwnProperty.call(r, t)) continue; const l = r[t]; if (o[t]) { a["header" + t] || (a["header" + t] = ""); for (let e in l) if (Object.prototype.hasOwnProperty.call(l, e)) { const o = JQX.Utilities.Core.toDash(e) + ": " + l[e] + "; "; a["header" + t] += o, "width" === e && (a["column" + t] || (a["column" + t] = ""), a["column" + t] += o) } } else "height" === t && e.complexHeader ? a.header += "height: " + parseInt(r[t], 10) / e.complexHeader.length + "px; " : a.header += JQX.Utilities.Core.toDash(t) + ": " + r[t] + "; " } const n = t.columns || {}; for (let e in n) { if (!Object.prototype.hasOwnProperty.call(n, e)) continue; const t = n[e]; if (o[e]) { a["column" + e] || (a["column" + e] = ""); for (let o in t) isNaN(o) && Object.prototype.hasOwnProperty.call(t, o) && "format" !== o && (a["column" + e] += JQX.Utilities.Core.toDash(o) + ": " + t[o] + "; ") } else a.column += JQX.Utilities.Core.toDash(e) + ": " + t + "; " } for (let e in a) Object.prototype.hasOwnProperty.call(a, e) && (l += ` .${e} { ${a[e]}}\n`); return t.custom && (l += `${t.custom}\n`), l } getCustomColumnWidths() { const e = this; if (!e.style || !e.columnWidth || 0 === e.columnWidth.length) return ""; let t = "\n <cols>\n"; for (let a = 0; a < e.columnWidth.length; a++) { let o = e.columnWidth[a]; void 0 !== o && (o = Math.round(parseFloat(o)) / 7, t += ` <col min="${a + 1}" max="${a + 1}" width="${o}" customWidth="1" />\n`) } return t += " </cols>", t } getCustomFilter(e, t) { let a, o = "equal"; switch (e instanceof Date && (e = (e.getTime() + this.timeBetween1900And1970) / 864e5 + 2), t = t.toUpperCase()) { case "EMPTY": a = ""; break; case "NOT_EMPTY": a = "", o = "notEqual"; break; case "CONTAINS": case "CONTAINS_CASE_SENSITIVE": a = `*${e}*`; break; case "DOES_NOT_CONTAIN": case "DOES_NOT_CONTAIN_CASE_SENSITIVE": a = `*${e}*`, o = "notEqual"; break; case "STARTS_WITH": case "STARTS_WITH_CASE_SENSITIVE": a = `${e}*`; break; case "ENDS_WITH": case "ENDS_WITH_CASE_SENSITIVE": a = `*${e}`; break; case "EQUAL": case "EQUAL_CASE_SENSITIVE": a = e; break; case "NULL": a = null; break; case "NOT_NULL": a = null, o = "notEqual"; break; case "NOT_EQUAL": a = e, o = "notEqual"; break; case "LESS_THAN": a = e, o = "lessThan"; break; case "LESS_THAN_OR_EQUAL": a = e, o = "lessThanOrEqual"; break; case "GREATER_THAN": a = e, o = "greaterThan"; break; case "GREATER_THAN_OR_EQUAL": a = e, o = "greaterThanOrEqual" }return ` <customFilter val="${a}" operator="${o}"/>\n` } getCustomRowHeight(e) { const t = this; return t.style && (t.rowHeight[e] || t.defaultRowHeight) || "" } getDatafields(e) { const t = e[0], a = []; for (let e in t) Object.prototype.hasOwnProperty.call(t, e) && "_" !== e.charAt(0) && a.push(e); this.datafields = a } getFilters() { const e = this, t = e.filterBy; if (!t) return ""; let a = ""; for (let o in t) if (Object.prototype.hasOwnProperty.call(t, o)) { const l = e.datafields.indexOf(o); if (-1 === l) continue; const r = t[o], n = r.filters; a += ` <filterColumn colId="${l}">\n <customFilters and="${!r.operator}">\n`; for (let t = 0; t < n.length; t++)a += e.getCustomFilter(n[t].value, n[t].condition); a += " </customFilters>\n </filterColumn>" } return a ? (a = `\n <autoFilter ref="A1:${e.columnsArray[e.columnsArray.length - 1] + e.data.length}">\n${a}\n </autoFilter>`, a) : "" } getGroupLabels(e) { const t = this, a = void 0 !== t.xlsxStartIndex ? t.xlsxStartIndex : +t.exportHeader, o = {}, l = []; for (let r = a; r < e.length; r++) { const n = e[r]; for (let r = 0; r < t.groupBy.length; r++) { const s = t.groupBy[r], i = n[s]; let c = o[s]; void 0 === c && (o[s] = {}, c = o[s]), void 0 === c[i] && (c[i] = (t.exportHeader ? e[a - 1][s] : s) + ": " + i, l.push(c[i])) } } t.groups = o, t.groupLabels = l } getHTMLHeader(e, t) { const a = this; let o = "\n <thead>\n"; if (!a.complexHeader) { o += " <tr>\n"; for (let a = 0; a < e.length; a++) { const l = e[a]; o += ` <th class="header header${l}">${t[0][l]}</th>\n` } return o += " </tr>\n </thead>", o } for (let t = 0; t < a.complexDataFieldsHeader.length; t++) { const l = a.complexDataFieldsHeader[t]; o += " <tr>\n"; for (let r = 0; r < l.length; r++) { const n = l[r]; let s = 1, i = 1; if (l[r - 1] && l[r - 1] === n || a.complexDataFieldsHeader[t - 1] && a.complexDataFieldsHeader[t - 1][r] === n) continue; let c = r + 1; for (; l[c] && l[c] === l[c - 1];)s++, c++; for (c = t + 1; a.complexDataFieldsHeader[c] && a.complexDataFieldsHeader[c][r] === n;)i++, c++; o += ` <th class="header${t === a.complexHeader.length - 1 || i + t === a.complexHeader.length ? " header" + e[r] : ""}" colspan="${s}" rowspan="${i}">${a.complexHeader[t][r]}</th>\n` } o += " </tr>\n" } return o += " </thead>", o } getConditionalFormatting() { const e = this, t = e.conditionalFormatting; if (!t) return void (e.conditionalFormattingXLSX = { conditions: "", styles: "" }); const a = []; let o = "", l = ""; for (let r = t.length - 1; r >= 0; r--) { const n = t[r], s = e.columnsArray[e.datafields.indexOf(n.column)], i = s + (e.xlsxStartIndex + 1), c = i + ":" + s + e.data.length, p = n.background + n.color, m = e.getConditionalAttributes(n, i); let f = a.indexOf(p); -1 === f && (l += ` <dxf>\n <font>\n <b val="0"/>\n <i val="0"/>\n <color rgb="${"White" === n.color ? "FFFFFFFF" : "FF000000"}"/>\n <sz val="10"/>\n </font>\n <fill>\n <patternFill>\n <bgColor rgb="${e.toARGB(n.background)}"/>\n </patternFill>\n </fill>\n </dxf>\n`, f = a.length, a.push(p)), o += ` <conditionalFormatting sqref="${c}">\n <cfRule dxfId="${f}" text="${m.text}" rank="${m.rank}" percent="${m.percent}" bottom="${m.bottom}" equalAverage="${m.equalAverage}" aboveAverage="${m.aboveAverage}"${m.operator}${m.timePeriod} priority="${r + 2}" type="${m.type}">\n${m.formula} </cfRule>\n </conditionalFormatting>\n` } l = ` <dxfs count="${a.length}">\n${l} </dxfs>`, e.conditionalFormattingXLSX = { conditions: o, styles: l } } getConditionalAttributes(e, t) { let a = e.condition, o = e.comparator, l = "", r = 0, n = 0, s = 0, i = 0, c = "", p = "", m = "", f = ""; switch (a) { case "equal": c = "equal", m = "cellIs", f = ` <formula>${o}</formula>\n`; break; case "lessThan": c = "lessThan", m = "cellIs", f = ` <formula>${o}</formula>\n`; break; case "greaterThan": c = "greaterThan", m = "cellIs", f = ` <formula>${o}</formula>\n`; break; case "notEqual": c = "notEqual", m = "cellIs", f = ` <formula>${o}</formula>\n`; break; case "between": c = "between", m = "cellIs", f = ` <formula>${e.min}</formula>\n <formula>${e.max}</formula>\n`; break; case "duplicate": m = "duplicateValues", f = " <formula>0</formula>\n"; break; case "topNItems": r = o, m = "top10"; break; case "bottomNItems": r = o, s = 1, m = "top10"; break; case "topNPercent": r = o, n = 1, m = "top10"; break; case "bottomNPercent": r = o, n = 1, s = 1, m = "top10"; break; case "aboveAverage": i = 1, m = "aboveAverage", f = " <formula>0</formula>\n"; break; case "belowAverage": m = "aboveAverage", f = " <formula>0</formula>\n"; break; case "contains": l = o, c = "containsText", m = "containsText", f = ` <formula>NOT(ISERROR(SEARCH("${o}",${t})))</formula>\n`; break; case "doesNotContain": l = o, c = "notContains", m = "notContainsText", f = ` <formula>ISERROR(SEARCH("${o}",${t}))</formula>\n`; break; case "dateOccur": p = ` timePeriod="${o}"`, m = "timePeriod" }return c && (c = ` operator="${c}" `), { text: l, rank: r, percent: n, bottom: s, equalAverage: 0, aboveAverage: i, operator: c, timePeriod: p, type: m, formula: f } } getMergedCells(e) { const t = this; let a = ""; for (let t = 0; t < e.length; t++)e[t].from !== e[t].to && (a += `\n <mergeCell ref="${e[t].from}:${e[t].to}" />\n`); if (t.mergedCells) for (let e = 0; e < t.mergedCells.length; e++) { const o = t.mergedCells[e]; o.rowspan < 2 && o.colspan < 2 || (a += `\n <mergeCell ref="${t.columnsArray[o.cell[0]] + (o.cell[1] + t.xlsxStartIndex + 1)}:${t.columnsArray[o.cell[0] + o.colspan - 1] + (o.cell[1] + t.xlsxStartIndex + o.rowspan)}" />\n`) } return a && (a = `\n <mergeCells count="${e.length}">${a} </mergeCells>`), a } getNumFmtIndex(e, t) { let a = t.collection.indexOf(e); return -1 === a ? (a = t.collection.length + 100, t.collection.push(e), t.xml += `<numFmt numFmtId="${a}" formatCode="${e}"/>`) : a += 100, a } getOutlineLevel(e) { return this.actualHierarchy && 1 !== e._level ? ` outlineLevel="${e._level - 1}"` : "" } getRowStyle() { const e = this.style; if (!e) return ""; const t = e.rows; if (!t) return ""; const a = { row: "" }; let o = ""; for (let e in t) { if (!Object.prototype.hasOwnProperty.call(t, e) || "alternationCount" === e || "alternationStart" === e || "alternationEnd" === e) continue; const o = t[e]; if (-1 === e.indexOf("alt")) if (isNaN(e)) a.row += JQX.Utilities.Core.toDash(e) + ": " + t[e] + "; "; else { a["row" + e] || (a["row" + e] = ""); for (let t in o) Object.prototype.hasOwnProperty.call(o, t) && (a["row" + e] += JQX.Utilities.Core.toDash(t) + ": " + o[t] + "; ") } else { const t = e.slice(16, 17), l = e.slice(17); a["rowN" + t] || (a["rowN" + t] = ""), a["rowN" + t] += "Color" === l ? "color : " + o + "; " : "BorderColor" === l ? "border-color : " + o + "; " : "background-color : " + o + "; " } } let l = Object.keys(a); l.sort((function (e, t) { if ("row" === e) return -1; if ("row" === t) return 1; const a = !isNaN(e.slice(3)), o = !isNaN(t.slice(3)); return a && !o ? 1 : !a && o ? -1 : +(e < t) })); for (let e = 0; e < l.length; e++)o += ` .${l[e]} { ${a[l[e]]}}\n`; return o } getTableStyle() { const e = this.style; if (!e) return ' style="table-layout: fixed; border: 1px solid black; border-collapse: collapse;"'; let t = "table-layout: fixed; "; for (let a in e) Object.prototype.hasOwnProperty.call(e, a) && -1 === ["header", "columns", "rows", "removeDefault", "custom"].indexOf(a) && (t += JQX.Utilities.Core.toDash(a) + ": " + e[a] + "; "); return t && (t = ' style="' + t + '"'), t } getXLSXCellStyle(e) { const t = this; return void 0 !== t.cellStyleMapping[e] ? ` s="${t.cellStyleMapping[e]}"` : "" } getXLSXFormat(e, t) { if ("number" == typeof t) { if (!/^([a-zA-Z]\d*)$/g.test(e)) return e; let t = parseFloat(e.slice(1)) || 0, a = t > 0 ? "." + "0".repeat(t) : ""; switch (e = e.slice(0, 1)) { case "C": case "c": return "$#,0" + a; case "D": case "d": return t ? "0".repeat(t) : "0"; case "E": case "e": return "0" + a + e + "000"; case "F": case "f": return "0" + a; case "N": case "n": return "#,0" + a; case "P": case "p": return "#,0" + a + " %"; default: return } } else if (t instanceof Date) { switch (e) { case "d": return "m/d/yyyy"; case "D": return "nnnnmmmm dd, yyyy"; case "t": return "h:m AM/PM"; case "T": return "h:mm:ss AM/PM"; case "f": return "nnnnmmmm dd, yyyy h:m AM/PM"; case "F": return "nnnnmmmm dd, yyyy h:mm:ss AM/PM"; case "M": return "mmmm d"; case "Y": return "yyyy mmmm"; case "FP": case "PP": return "yyyy-mm-dd hh:mm:ss"; case "FT": case "PT": return "hh:mm:ss" }return e = (e = (e = (e = e.replace(/f|u|n|p|e|a|x|o/gi, "")).replace(/tt/gi, "AM/PM")).replace(/:{2,}|:\s|:$|\.$/g, "")).trim() } } processColumnStyle(e) { const t = this, a = e.header, o = e.columns, l = t.data[0], r = t.xlsxStartIndex; if (t.columnWidth = [], r && a) for (let e = 0; e < t.columnsArray.length; e++) { const o = t.columnsArray[e], n = o + r, s = a[t.datafields[e]]; for (let e in a) if (Object.prototype.hasOwnProperty.call(a, e) && void 0 === l[e]) if (t.complexHeader) for (let l = 0; l < t.complexHeader.length; l++)"height" !== e ? t.storeCellStyle(o + (l + 1), e, a[e]) : t.rowHeight[l] = ` ht="${parseFloat(a.height) / t.complexHeader.length / 2}"`; else { if ("height" === e) { t.rowHeight[0] = ` ht="${parseFloat(a.height) / 2}"`; continue } t.storeCellStyle(n, e, a[e]) } if (s) for (let a in s) if (Object.prototype.hasOwnProperty.call(s, a)) { if ("width" === a) { t.columnWidth[e] = s.width; continue } t.storeCellStyle(n, a, s[a]) } } else if (a) for (let e = 0; e < t.columnsArray.length; e++) { const o = a[t.datafields[e]]; o && void 0 !== o.width && (t.columnWidth[e] = o.width) } if (!o) return ""; for (let e = r; e < t.data.length; e++)for (let a = 0; a < t.columnsArray.length; a++) { const r = t.columnsArray[a] + (e + 1), n = t.datafields[a], s = o[n]; for (let e in o) Object.prototype.hasOwnProperty.call(o, e) && void 0 === l[e] && t.storeCellStyle(r, e, o[e]); if (s) for (let a in s) isNaN(a) && Object.prototype.hasOwnProperty.call(s, a) && t.storeCellStyle(r, a, s[a], t.data[e][n]) } } processComplexHeader(e, t, a) { const o = this, l = {}, r = -1 !== ["html", "jpeg", "pdf", "png", "xlsx"].indexOf(a) && e.columngroups, n = [], s = {}, i = {}, c = [], p = []; let m = 0; function f(t) { for (let a = 0; a < e.columngroups.length; a++) { const o = e.columngroups[a]; if (o.name === t) return o } } function d(e, t) { const a = []; for (; e;) { if (a.unshift(e[t]), !e.parentGroup) return a; e = f(e.parentGroup) } } if (r) { for (let t = 0; t < e.columngroups.length; t++) { const a = e.columngroups[t], o = d(a, "label"); s[a.name] = o, i[a.name] = d(a, "name"), m = Math.max(m, o.length) } m++; for (let e = 0; e < m; e++)c[e] = [], p[e] = [] } for (let t = 0; t < e.columns.length; t++) { const a = e.columns[t]; if (l[a.dataField] = a.label, !r) continue; if (n[t] = a.dataField, c[m - 1][t] = a.label, p[m - 1][t] = a.dataField, !a.columnGroup) continue; const o = s[a.columnGroup], f = i[a.columnGroup]; if (o) for (let e = 0; e < o.length; e++)c[e][t] = o[e], p[e][t] = f[e] } if (c.length > 1) { const e = Object.keys(l).length; for (let o = 0; o < m - 1; o++) { const l = {}; for (let t = 0; t < e; t++) { if (void 0 === c[o][t]) { let e = o + 1; for (; void 0 === c[e][t];)e++; c[o][t] = c[e][t], p[o][t] = p[e][t] } l[n[t]] = c[o][t] } "xlsx" === a && t.splice(o, 0, l) } if (o.complexHeader = c, o.complexDataFieldsHeader = p, "xlsx" !== a) t.unshift(l); else { t.splice(m - 1, 0, l); const a = {}; for (let t = 0; t < m; t++)for (let o = 0; o < e; o++) { const e = p[t][o]; if (a[e]) { const l = a[e].to; if (t - l[0] > 1 || o - l[1] > 1) { a[e + Math.random().toString(36)] = a[e], a[e] = { from: [t, o], to: [t, o] }; continue } a[e].to = [t, o] } else a[e] = { from: [t, o] }, a[e].to = a[e].from } o.complexHeaderMergeInfo = a } } else t.unshift(l) } processHierarchicalData(e, t) { const a = this, o = "xlsx" !== t ? +a.exportHeader : a.xlsxStartIndex, l = {}, r = []; let n = 0, s = !1; if (void 0 === e[o]._keyDataField) return a.processNestedData(e, t, o); for (let t = o; t < e.length; t++) { const a = Object.assign({}, e[t]); let o = a._parentDataField; void 0 === o && (o = null), void 0 === l[o] ? l[o] = [a] : l[o].push(a) } if (o) for (let a = 0; a < o; a++)r.push(Object.assign({}, e[a])), -1 === ["json", "pdf", "xml"].indexOf(t) && (r[a]._level = 1); return "json" !== t && "xml" !== t ? function e(t, a, o) { const i = l[t]; if (n = Math.max(n, a), void 0 !== i) for (let t = 0; t < i.length; t++) { const n = i[t], c = n._keyDataField; n._collapsed = o, n._level = a, r.push(n), l[c] && (s = !0, n._expanded = void 0 === n._expanded || n._expanded, e(c, a + 1, o || !n._expanded)) } }(null, 1, !1) : function e(a, o, r) { const i = l[a]; if (n = Math.max(n, o), void 0 !== i) for (let a = 0; a < i.length; a++) { const n = i[a], c = n._keyDataField; let p; if ("json" === t) { p = {}; for (let e in n) Object.prototype.hasOwnProperty.call(n, e) && "_" !== e.charAt(0) && (p[e] = n[e]) } else p = Object.assign({}, n); r.push(p), l[c] && (s = !0, p.rows = [], e(c, o + 1, p.rows)) } }(null, 1, r), s || (a.actualHierarchy = !1), a.maxLevel = n, r } processNestedData(e, t, a) { const o = this, l = []; let r = 0, n = !1; if (a) for (let o = 0; o < a; o++)l.push(Object.assign({}, e[o])), -1 === ["json", "pdf", "xml"].indexOf(t) && (l[o]._level = 1); return "json" !== t && "xml" !== t ? function e(t, a, o, s) { r = Math.max(r, o); for (let r = t; r < a.length; r++) { const t = Object.assign({}, a[r]); t._collapsed = s, t._level = o, l.push(t), t.children && t.children.length > 0 && (n = !0, t._expanded = void 0 === t._expanded || t._expanded, e(0, t.children, o + 1, s || !t._expanded)), delete t.children } }(a, e, 1, !1) : function e(t, a, o, s) { r = Math.max(r, s); for (let r = t; r < a.length; r++) { const t = Object.assign({}, a[r]); 1 === s ? l[r] = t : o[r] = t, t.children && t.children.length > 0 && (n = !0, t.rows = [], e(0, t.children, t.rows, s + 1)), delete t.children } }(a, e, void 0, 1), n || (o.actualHierarchy = !1), o.maxLevel = r, l } processRowStyle(e) { const t = this, a = e.rows; if (t.rowHeight = [], !a) return; const o = t.xlsxStartIndex; function l(e, a, l) { for (let r = 0; r < t.columnsArray.length; r++) { const n = t.columnsArray[r] + (e + 1 + o); t.storeCellStyle(n, a, l) } } a.height && (t.defaultRowHeight = ` ht="${parseFloat(a.height) / 2}"`); for (let e = o; e < t.data.length; e++) { const r = e - o; for (let e in a) Object.prototype.hasOwnProperty.call(a, e) && -1 === e.indexOf("alt") && isNaN(e) && "height" !== e && l(r, e, a[e]); if (a.alternationCount && ((void 0 === a.alternationStart || r >= a.alternationStart) && (void 0 === a.alternationEnd || r <= a.alternationEnd) || a.alternationStart === a.alternationEnd)) { const e = (r - (a.alternationStart || 0)) % a.alternationCount; a[`alternationIndex${e}Color`] && l(r, "color", a[`alternationIndex${e}Color`]), a[`alternationIndex${e}BorderColor`] && l(r, "borderColor", a[`alternationIndex${e}BorderColor`]), a[`alternationIndex${e}BackgroundColor`] && l(r, "backgroundColor", a[`alternationIndex${e}BackgroundColor`]) } if (a[r]) for (let o in a[r]) if (Object.prototype.hasOwnProperty.call(a[r], o)) { if ("height" === o) { t.rowHeight[e] = ` ht="${parseFloat(a[r].height) / 2}"`; continue } l(r, o, a[r][o]) } } } storeCellStyle(e, t, a) { const o = this.styleMap[e]; switch (t) { case "backgroundColor": o.fills.fgColor = a; break; case "color": o.fonts.color = a; break; case "fontFamily": o.fonts.name = a.replace(/"/g, "'"); break; case "fontSize": o.fonts.sz = parseFloat(a); break; case "fontStyle": "italic" === a ? o.fonts.i = !0 : delete o.fonts.i; break; case "fontWeight": "bold" === a ? o.fonts.b = !0 : delete o.fonts.b; break; case "numFmt": o.numFmt = a; break; case "textAlign": o.alignment.horizontal = a; break; case "textDecoration": "underline" === a ? o.fonts.u = !0 : delete o.fonts.u; break; case "verticalAlign": "middle" === a && (a = "center"), o.alignment.vertical = a } } toARGB(e) { e = e.replace(/\s/g, ""); const t = /rgb\((\d+),(\d+),(\d+)\)/gi.exec(e); if (null !== t) { const e = parseFloat(t[1]).toString(16).toUpperCase(), a = parseFloat(t[2]).toString(16).toUpperCase(), o = parseFloat(t[3]).toString(16).toUpperCase(); return "FF" + "0".repeat(2 - e.length) + e + "0".repeat(2 - a.length) + a + "0".repeat(2 - o.length) + o } const a = /rgba\((\d+),(\d+),(\d+)\,(\d*.\d+|\d+)\)/gi.exec(e); if (null !== a) { const e = Math.round(255 * parseFloat(a[4])).toString(16).toUpperCase(), t = parseFloat(a[1]).toString(16).toUpperCase(), o = parseFloat(a[2]).toString(16).toUpperCase(), l = parseFloat(a[3]).toString(16).toUpperCase(); return "0".repeat(2 - e.length) + e + "0".repeat(2 - t.length) + t + "0".repeat(2 - o.length) + o + "0".repeat(2 - l.length) + l } const o = /^#(.)(.)(.)$/gi.exec(e); if (null !== o) { const e = o[1].toUpperCase(), t = o[2].toUpperCase(), a = o[3].toUpperCase(); return "FF" + e + e + t + t + a + a } return "FF" + e.toUpperCase().slice(1) } toggleableFunctionality() { const e = this; return e.actualHierarchy ? `\n <style type="text/css">\n .toggle-element {\n width: 5px;\n height: 1px;\n padding-right: 5px;\n float: left;\n text-align: right;\n cursor: pointer;\n user-select: none;\n }\n\n .collapsed {\n display: none;\n }\n </style>\n <script type="text/javascript">\n window.onload = function () {\n var expandChar = '${e.expandChar}',\n collapseChar = '${e.collapseChar}',\n toggleElements = document.getElementsByClassName('toggle-element');\n\n function getParent(child) {\n var prevSibling = child.previousElementSibling;\n\n while (prevSibling) {\n if (child.getAttribute('level') > prevSibling.getAttribute('level')) {\n return prevSibling;\n }\n\n prevSibling = prevSibling.previousElementSibling;\n }\n\n }\n\n function getFirstCollapsedAncestor(child) {\n var parent = getParent(child);\n\n while (parent) {\n if (parent.firstElementChild.firstElementChild.innerHTML === expandChar) {\n return parent;\n }\n\n parent = getParent(parent);\n }\n }\n\n for (var i = 0; i < toggleElements.length; i++) {\n toggleElements[i].addEventListener('click', function (event) {\n var expanded = this.innerHTML === collapseChar,\n row = this.parentElement.parentElement,\n sibling = row.nextElementSibling;\n\n if (expanded) {\n this.innerHTML = expandChar;\n }\n else {\n this.innerHTML = collapseChar;\n }\n\n while (sibling && row.getAttribute('level') < sibling.getAttribute('level')) {\n if (expanded) {\n sibling.style.display = 'none';\n }\n else {\n var firstCollapsedAncestor = getFirstCollapsedAncestor(sibling);\n\n if (!firstCollapsedAncestor || firstCollapsedAncestor === row) {\n sibling.classList.remove('collapsed');\n sibling.style.display = null;\n }\n\n }\n\n sibling = sibling.nextElementSibling;\n }\n });\n }\n }\n <\/script>` : "" } generateStyles(e) { const t = this; if (t.cellStyleMapping = {}, 0 === Object.keys(e).length && !t.complexHeader) return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac x16r2 xr" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision"><fonts count="1" x14ac:knownFonts="1"><font><sz val="11"/><color theme="1"/><name val="Calibri"/><family val="2"/><charset val="204"/><scheme val="minor"/></font></fonts><fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>${t.conditionalFormattingXLSX.styles || '<dxfs count="0"/>'}<tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/><extLst><ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/></ext><ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/></ext></extLst></styleSheet>`; t.styleMap = {}; for (let e = 0; e < t.data.length; e++)for (let a = 0; a < t.columnsArray.length; a++)t.styleMap[t.columnsArray[a] + (e + 1)] = { numFmts: {}, fonts: {}, fills: {}, borders: {}, alignment: {} }; if (e && e.columns) for (let a = 0; a < t.columnsArray.length; a++) { const o = t.datafields[a]; if (!e.columns[o] || !e.columns[o].format) continue; const l = t.getXLSXFormat(e.columns[o].format, t.data[1][o]), r = t.getXLSXFormat(e.columns[o].format, t.data[t.data.length - 1][o]); if (r) e.columns[o].numFmt = r; else if (l) e.columns[o].numFmt = l; else if (e.columns[o].format && o.toLowerCase().indexOf("date") >= 0) { let t = e.columns[o].format; switch (t) { case "d": t = "m/d/yyyy"; break; case "D": t = "nnnnmmmm dd, yyyy"; break; case "t": t = "h:m AM/PM"; break; case "T": t = "h:mm:ss AM/PM"; break; case "f": t = "nnnnmmmm dd, yyyy h:m AM/PM"; break; case "F": t = "nnnnmmmm dd, yyyy h:mm:ss AM/PM"; break; case "M": t = "mmmm d"; break; case "Y": t = "yyyy mmmm"; break; case "FP": case "PP": t = "yyyy-mm-dd hh:mm:ss"; break; case "FT": case "PT": t = "hh:mm:ss" }t = t.replace(/f|u|n|p|e|a|x|o/gi, ""), t = t.replace(/tt/gi, "AM/PM"), t = t.replace(/:{2,}|:\s|:$|\.$/g, ""), t = t.trim(), e.columns[o].numFmt = t } } t.processRowStyle(e), t.processColumnStyle(e); const a = {}; for (let e = 0; e < t.complexHeaderMergedCells.length; e++) { const o = t.complexHeaderMergedCells[e]; parseFloat(o.to[1]) !== t.complexHeader.length ? (t.styleMap[o.from].alignment.horizontal = "center", t.styleMap[o.from].alignment.vertical = "center") : a[o.to] = o.from } const o = { xml: '<font><sz val="11" /><color theme="1" /><name val="Calibri" /><family val="2" /><charset val="204" /><scheme val="minor" /></font>', collection: ["default"] }, l = { xml: '<fill><patternFill patternType="none" /></fill><fill><patternFill patternType="gray125" /></fill>', collection: ["default", "gray125"] }, r = { xml: "", collection: [] }, n = { xml: '<xf fontId="0" fillId="0" borderId="1"/>', collection: ["default"] }; for (let e = 0; e < t.data.length; e++)for (let s = 0; s < t.columnsArray.length; s++) { const i = t.columnsArray[s] + (e + 1), c = t.styleMap[i]; let p = "", m = "", f = "", d = [], h = [], g = [], u = []; for (let e in c.fonts) if (Object.prototype.hasOwnProperty.call(c.fonts, e)) { const a = c.fonts[e]; switch (e) { case "color": d[0] = a, p += `<color rgb="${t.toARGB(a)}" />`; break; case "name": d[1] = a, p += `<name val="${a}" />`; break; case "sz": d[2] = a, p += `<sz val="${a}" />`; break; case "i": d[3] = a, p += "<i />"; break; case "b": d[4] = a, p += "<b />"; break; case "u": d[5] = a, p += "<u />" } } for (let e in c.fills) if (Object.prototype.hasOwnProperty.call(c.fills, e)) { const a = c.fills[e]; "fgColor" === e && (h[0] = a, m += `<fgColor rgb="${t.toARGB(a)}" />`) } for (let e in c.alignment) if (Object.prototype.hasOwnProperty.call(c.alignment, e)) { const t = c.alignment[e]; switch (e) { case "horizontal": g[0] = t, f += `horizontal="${t}" `; break; case "vertical": g[1] = t, f += `vertical="${t}" ` } } if (d = d.toString(), h = h.toString(), "" !== p) { let e = o.collection.indexOf(d); -1 === e && (e = o.collection.length, o.xml += "<font>" + p + "</font>", o.collection.push(d)), u[0] = e } if ("" !== m) { let e = l.collection.indexOf(h); -1 === e && (e = l.collection.length, l.xml += '<fill><patternFill patternType="solid">' + m + "</patternFill></fill>", l.collection.push(h)), u[1] = e } g.length > 0 && (u[2] = f), void 0 !== c.numFmt && (u[3] = t.getNumFmtIndex(c.numFmt, r)); const y = u.toString(); if ("" !== y) { let e = n.collection.indexOf(y); if (-1 === e) { let t = "<xf "; e = n.collection.length, void 0 !== u[0] && (t += `fontId="${u[0]}" `), void 0 !== u[1] && (t += `fillId="${u[1]}" `), void 0 !== u[3] && (t += `numFmtId="${u[3]}" `), void 0 !== u[2] ? t += `applyAlignment="1" borderId="1"><alignment ${f}/></xf>` : t += ' borderId="1"/>', n.xml += t, n.collection.push(y) } t.cellStyleMapping[a[i] || i] = e } } return r.collection.length && (r.xml = `<numFmts count="${r.collection.length}">${r.xml}</numFmts>`), `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac x16r2 xr" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision">${r.xml}<fonts count="${o.collection.length}" x14ac:knownFonts="1">${o.xml}</fonts><fills count="${l.collection.length}">${l.xml}</fills><borders count="2"><border><left/><right/><top/><bottom/></border><border><left style="hair"/><right style="hair"/><top style="hair"/><bottom style="hair"/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="${n.collection.length}">${n.xml}</cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>${t.conditionalFormattingXLSX.styles}<dxfs count="0"/><tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/><extLst><ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/></ext><ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/></ext></extLst></styleSheet>` } });
|
|
78
|
+
|
|
79
|
+
/***/
|
|
80
|
+
}),
|
|
81
|
+
|
|
82
|
+
/***/ 6170:
|
|
83
|
+
/***/ (() => {
|
|
84
|
+
|
|
85
|
+
JQX.Utilities.Assign("FilterGroup", class t { constructor() { const t = this; t.stringConditions = ["EMPTY", "NOT_EMPTY", "CONTAINS", "CONTAINS_CASE_SENSITIVE", "DOES_NOT_CONTAIN", "DOES_NOT_CONTAIN_CASE_SENSITIVE", "STARTS_WITH", "STARTS_WITH_CASE_SENSITIVE", "ENDS_WITH", "ENDS_WITH_CASE_SENSITIVE", "EQUAL", "NOT_EQUAL", "EQUAL_CASE_SENSITIVE", "NOT_EQUAL_CASE_SENSITIVE", "NULL", "NOT_NULL"], t.numericConditions = ["EQUAL", "NOT_EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "NULL", "NOT_NULL"], t.dateConditions = ["EQUAL", "NOT_EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "NULL", "NOT_NULL"], t.booleanConditions = ["EQUAL", "NOT_EQUAL", "NULL", "NOT_NULL"], t.filters = new Array, t.logicalOperators = new Array } toString() { const t = this; let e = ""; for (let r = 0; r < t.filters.length; r++)r > 0 && (e += " " + t.logicalOperators[r - 1] + " "), e += t.filters[r].toString(); return e } evaluate(t) { const e = this; let r = !0; for (let n = 0; n < e.filters.length; n++) { if (!e.filters[n].evaluate) continue; let i = e.filters[n].evaluate(t); r = 0 === n ? i : 1 === e.logicalOperators[n] || "or" === e.logicalOperators[n] ? r || i : r && i } return r } getFiltersCount() { return this.filters.length } setConditions(t, e) { const r = this; switch (t) { case "numeric": r.numericConditions = e; break; case "string": r.stringConditions = e; break; case "date": case "time": r.dateConditions = e; break; case "bool": case "boolean": r.booleanConditions = e } } getConditions(t) { const e = this; let r = new Array; switch (t) { case "numeric": r = e.numericConditions.slice(0); break; case "string": r = e.stringConditions.slice(0); break; case "date": case "time": r = e.dateConditions.slice(0); break; case "bool": case "boolean": r = e.booleanConditions.slice(0) }return r } generateFilterKey() { const t = function () { return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) }; return t() + "-" + t() + "-" + t() } createFilter(t, e, r, n, i, s, l) { if (null == t) return null; switch (t) { case "int": case "float": case "int64": case "double": case "numeric": case "number": case "numericFilter": return new JQX.Utilities.NumericFilter(e, r.toUpperCase()); case "string": case "stringFilter": return new JQX.Utilities.StringFilter(e, r.toUpperCase(), s); case "date": case "time": case "dateFilter": return new JQX.Utilities.DateFilter(e, r.toUpperCase(), i, s, l); case "bool": case "boolean": case "booleanFilter": return new JQX.Utilities.BooleanFilter(e, r.toUpperCase()); case "custom": return new JQX.Utilities.CustomFilter(e, r.toUpperCase(), n) }throw new Error('jqxGrid: There is no such filter type. The available filter types are: "numericFilter", "stringFilter", "dateFilter" and "booleanFilter"') } getFilters() { const e = this; let r = new Array; for (let n = 0; n < e.filters.length; n++) { const i = e.filters[n]; if (i instanceof t) { let t = i.getFilters(); r.push({ value: t, logicalOperator: e.logicalOperators[n], type: "FilterGroup" }) } else { const t = { value: i.value, condition: i.condition, logicalOperator: e.logicalOperators[n], type: i.type }; i.data && (t.id = i.data), r.push(t) } } return r } addFilter(t, e) { const r = this; r.filters[r.filters.length] = e, e.key = r.generateFilterKey(), r.logicalOperators[r.logicalOperators.length] = t } removeFilter(t) { const e = this; for (let r = 0; r < e.filters.length; r++)if (e.filters[r].key === t.key) { e.filters.splice(r, 1), e.logicalOperators.splice(r, 1); break } } getOperatorAt(t) { return null == t || t < 0 || t > this.filters.length ? null : this.logicalOperators[t] } setOperatorAt(t, e) { return null == t || t < 0 || t > this.filters.length ? null : void (this.logicalOperators[e] = e) } getFilterAt(t) { return null == t || t < 0 || t > this.filters.length ? null : this.filters[t] } setFilterAt(t, e) { const r = this; return null == t || t < 0 || t > r.filters.length ? null : (e.key = r.generateFilterKey(), void (r.filters[t] = e)) } clear() { this.filters = new Array, this.logicalOperators = new Array } getUniqueValues(t, e) { const r = t.data, n = [], i = [], s = "dateFilter" === t.filterType && "timePicker" === t.displayMode; let l, a = !1; for (let e = 0; e < r.length; e++) { let l, o = r[e][t.dataField]; "" !== o && null != o ? (l = s ? new JQX.Utilities.DateTime(o).toString(t.formatString) : o.toString(), -1 === n.indexOf(l) && (n.push(l), i.push({ label: l, value: o, customAttribute: "default-item" }))) : a = !0 } switch (t.filterType) { case "numericFilter": case "booleanFilter": l = function (t, e) { return t.value - e.value }; break; case "stringFilter": l = function (t, e) { return (new Intl.Collator).compare(t.value, e.value) }; break; case "dateFilter": l = s ? function (t, e) { try { const r = t.value.getHours(), n = e.value.getHours(); if (r !== n) return r - n; const i = t.value.getMinutes(), s = e.value.getMinutes(); if (i !== s) return i - s; const l = t.value.getSeconds(), a = e.value.getSeconds(); return l !== a ? l - a : 0 } catch (t) { return -1 } } : function (t, e) { try { return t.value.getTime() - e.value.getTime() } catch (t) { return -1 } } }return i.sort(l), "booleanFilter" === t.filterType && i.map((function (t) { t.label = t.label.toUpperCase() })), a && i.push({ label: e.localize("blanks"), value: "", customAttribute: "default-item" }), i } }), JQX.Utilities.Assign("StringFilter", class { constructor(t, e, r) { const n = this; n.value = t, n.condition = e, n.locale = r || "en", n.type = "stringFilter" } toString() { return this.condition + ' "' + this.value + '"' } evaluate(t) { const e = this, r = e.value, n = e.condition; if (null == t || "" === t) { if ("NULL" === n) return !0; if ("EQUAL" === n && t === r) return !0; if ("NOT_EQUAL" === n && t !== r) return !0; if ("CONTAINS" === n && t === r) return !0; if ("EMPTY" !== n) return !1; if ("" === t) return !0 } let i = ""; try { i = t.toString() } catch (t) { return !0 } const s = function (t, r) { const i = e.locale; switch (n) { case "EQUAL": return 0 === t.localeCompare(r, i, { sensitivity: "accent" }); case "EQUAL_CASE_SENSITIVE": return 0 === t.localeCompare(r, i, { sensitivity: "variant" }); case "NOT_EQUAL": return 0 !== t.localeCompare(r, i, { sensitivity: "accent" }); case "NOT_EQUAL_CASE_SENSITIVE": return 0 !== t.localeCompare(r, i, { sensitivity: "variant" }); case "CONTAINS": return "number" == typeof r ? t === r : -1 !== t.toLowerCase().indexOf(r.toLowerCase()); case "CONTAINS_CASE_SENSITIVE": return -1 !== t.indexOf(r); case "DOES_NOT_CONTAIN": return -1 === t.toLowerCase().indexOf(r.toLowerCase()); case "DOES_NOT_CONTAIN_CASE_SENSITIVE": return -1 === t.indexOf(r); case "EMPTY": return "" === t; case "NOT_EMPTY": return "" !== t; case "NOT_NULL": return null !== t; case "STARTS_WITH": return 0 === (t = t.substring(0, r.length)).localeCompare(r, i, { sensitivity: "accent" }); case "ENDS_WITH": return 0 === (t = t.substring(t.length - r.length, t.length)).localeCompare(r, i, { sensitivity: "accent" }); case "ENDS_WITH_CASE_SENSITIVE": return 0 === (t = t.substring(t.length - r.length, t.length)).localeCompare(r, i, { sensitivity: "variant" }); case "STARTS_WITH_CASE_SENSITIVE": return 0 === (t = t.substring(0, r.length)).localeCompare(r, i, { sensitivity: "variant" }); default: return !1 } }, l = new Array; if (r && r.indexOf && (r.indexOf("|") >= 0 || r.indexOf(" AND ") >= 0 || r.indexOf(" OR ") >= 0 || r.indexOf(" and ") >= 0 || r.indexOf(" or ") >= 0)) { const t = s(i, r); if (t) return t; const e = r.indexOf(" and ") >= 0 ? r.split(" and ") : new Array, n = r.indexOf(" or ") >= 0 ? r.split(" or ") : new Array, a = r.indexOf("|") >= 0 ? r.split("|") : new Array; let o = r.indexOf(" AND ") >= 0 ? r.split(" AND ") : new Array, c = r.indexOf(" OR ") >= 0 ? r.split(" OR ") : new Array; if (a.length > 0) for (let t = 0; t < a.length; t++)a[t] = a[t].trim; const u = r.indexOf(" ") >= 0 ? r.split(" ") : new Array; if (u.length > 0) for (let t = 0; t < u.length; t++)u[t] = u[t].trim; if (o = o.concat(u), o = o.concat(e), c = c.concat(a), c = c.concat(n), o.length > 0) for (let t = 0; t < o.length; t++)!o[t].indexOf(" OR ") >= 0 && l.push(o[t]); if (c.length > 0) for (let t = 0; t < c.length; t++)!c[t].indexOf(" AND ") >= 0 && l.push(c[t]); let S; for (let t = 0; t < l.length; t++) { const e = s(i, l[t]), r = t < o.length ? "and" : "or"; S = void 0 === S ? e : "or" === r ? S || e : S && e } return S } return s(i, r) } }), JQX.Utilities.Assign("BooleanFilter", class { constructor(t, e) { const r = this; r.value = t, r.condition = e, r.type = "booleanFilter" } toString() { return this.condition + " " + this.value } evaluate(t) { const e = this.value, r = t; switch (this.condition) { case "EQUAL": return r === e; case "NOT_EQUAL": return r !== e; case "NULL": return null == t || "" === t; case "NOT_NULL": return !(null == t || "" === t); default: return !1 } } }), JQX.Utilities.Assign("NumericFilter", class { constructor(t, e) { const r = this; r.value = t, r.condition = e, r.type = "numericFilter" } toString() { return this.condition + " " + this.value } evaluate(t) { let e = this.value, r = this.condition; if (null == t || "" === t) { if ("NOT_NULL" === r) return !1; if ("NULL" === r) return !0; switch (r) { case "EQUAL": return t === e; case "NOT_EQUAL": return t !== e }return !1 } if ("NULL" === r) return !1; if ("NOT_NULL" === r) return !0; let n = t; try { n = parseFloat(n) } catch (e) { if (null !== t && "" !== t.toString()) return !1 } const i = function (t, e) { switch ("number" == typeof t && "number" != typeof e && (e = parseFloat(e)), r) { case "EQUAL": return t === e; case "NOT_EQUAL": return t !== e; case "GREATER_THAN": return t > e; case "GREATER_THAN_OR_EQUAL": return t >= e; case "LESS_THAN": return t < e; case "LESS_THAN_OR_EQUAL": return t <= e; case "STARTS_WITH": return e = e.toString().toLowerCase(), t.toString().toLowerCase().substring(0, e.length) === e; case "ENDS_WITH": return t = t.toString().toLowerCase(), e = e.toString().toLowerCase(), t.substring(t.length - e.length, t.length) === e; case "ENDS_WITH_CASE_SENSITIVE": return t = t.toString(), e = e.toString(), t.substring(t.length - e.length, t.length) === e; case "STARTS_WITH_CASE_SENSITIVE": return e = e.toString(), t.toString().substring(0, e.length) === e; case "CONTAINS": return -1 !== t.toString().toLowerCase().indexOf(e.toString().toLowerCase()); case "CONTAINS_CASE_SENSITIVE": return -1 !== t.toString().indexOf(e.toString()); case "DOES_NOT_CONTAIN": return -1 === t.toString().toLowerCase().indexOf(e.toString().toLowerCase()); case "DOES_NOT_CONTAIN_CASE_SENSITIVE": return -1 === t.toString().indexOf(e.toString()); default: return !0 } }; let s = new Array; if (e && e.indexOf && (e.indexOf("|") >= 0 || e.indexOf(" AND ") >= 0 || e.indexOf(" OR ") >= 0 || e.indexOf(" and ") >= 0 || e.indexOf(" or ") >= 0)) { let t = i(n, e); if (t) return t; e = e.toString(); const r = e.indexOf(" and ") >= 0 ? e.split(" and ") : new Array, l = e.indexOf(" or ") >= 0 ? e.split(" or ") : new Array, a = e.indexOf("|") >= 0 ? e.split("|") : new Array; let o, c = e.indexOf(" AND ") >= 0 ? e.split(" AND ") : new Array, u = e.indexOf(" OR ") >= 0 ? e.split(" OR ") : new Array; if (c = c.concat(r), u = u.concat(l), a.length > 0) for (let t = 0; t < a.length; t++)a[t] = a[t].trim; if (u = u.concat(a), c.length > 0) for (let t = 0; t < c.length; t++)!c[t].indexOf(" OR ") >= 0 && s.push(c[t]); if (u.length > 0) for (let t = 0; t < u.length; t++)!u[t].indexOf(" AND ") >= 0 && s.push(u[t]); for (let e = 0; e < s.length; e++) { const r = s[e]; if (r && r.indexOf && r.indexOf("..") >= 0) { const e = r.toString().split(".."); 2 === e.length && (t = n >= e[0] && n <= e[1]) } else t = i(n, r); const l = e < c.length ? "and" : "or"; o = void 0 === o ? t : "or" === l ? o || t : o && t } return o } return e && e.indexOf && e.indexOf("..") >= 0 && (s = e.toString().split(".."), 2 === s.length) ? n >= s[0] && n <= s[1] : i(n, e) } }), JQX.Utilities.Assign("DateFilter", class { constructor(t, e, r, n, i) { const s = this, l = new JQX.Utilities.DateTime; if (s.value = t, s.type = "dateFilter", void 0 !== r) { const e = l.parseDate(t, r); if (null !== e) s.filterdate = e; else { const e = l.tryparseDate(t); null !== e && (s.filterdate = e) } } else { const e = new Date(t); "NaN" === e.toString() || "Invalid Date" === e.toString() ? s.filterdate = l.tryparseDate(t) : s.filterdate = e } if (!s.filterdate) { const e = new Date(t); "NaN" === e.toString() || "Invalid Date" === e.toString() ? s.filterdate = l.tryparseDate(t) : s.filterdate = e } s.condition = e, s.formatString = r, s.timeOnly = i } toString() { return this.value && this.value instanceof Date ? this.condition + ' "' + this.value.toISOString() + '"' : this.condition + " " + this.value } evaluate(t) { const e = this, r = e.condition, n = e.formatString; let i = e.value; if (e.timeOnly) return e.evaluateTimeOnly(t); if (null == t || "" === t) { if ("NOT_NULL" === r) return !1; if ("NULL" === r) return !0; switch (r) { case "EQUAL": return t === i; case "NOT_EQUAL": return t !== i }return !1 } if ("NULL" === r) return !1; if ("NOT_NULL" === r) return !0; let s, l = new Date; l.setFullYear(1900, 0, 1), l.setHours(12, 0, 0, 0); try { const r = new JQX.Utilities.DateTime, a = new Date(t); if (l = t = "NaN" === a.toString() || "Invalid Date" === a.toString() ? r.tryparseDate(t) : a, s = !1, void 0 !== n && (n.indexOf("t") >= 0 || n.indexOf("T") >= 0 || n.indexOf(":") >= 0 || n.indexOf("f") >= 0) && (s = !0, i && -1 === i.toString().indexOf(":"))) { const t = r.tryparseDate(i.toString() + ":00"); null !== t && (e.filterdate = t) } s || (l.setHours(0), l.setMinutes(0), l.setSeconds(0)) } catch (e) { if (null !== t && "" !== t.toString()) return !1 } if (null !== e.filterdate) i = e.filterdate; else if (i && i.indexOf && (-1 !== i.indexOf(":") || !isNaN(parseInt(i)))) { const t = new Date(l); t.setHours(12, 0, 0, 0); const e = i.split(":"); for (let r = 0; r < e.length; r++)0 === r && t.setHours(e[r]), 1 === r && t.setMinutes(e[r]), 2 === r && t.setSeconds(e[r]); i = t } s && i && i.setFullYear && l && l.getFullYear && -1 === n.indexOf("d") && -1 === n.indexOf("M") && -1 === n.indexOf("y") && i.setFullYear(l.getFullYear(), l.getMonth(), l.getDate()); const a = function (t, e) { switch (null === t && (t = ""), r) { case "EQUAL": return t.toString() === e.toString(); case "NOT_EQUAL": return t.toString() !== e.toString(); case "GREATER_THAN": return t > e; case "GREATER_THAN_OR_EQUAL": return t >= e; case "LESS_THAN": return t < e; case "LESS_THAN_OR_EQUAL": return t <= e; case "STARTS_WITH": return e = e.toString().toLowerCase(), t.toString().toLowerCase().substring(0, e.length) === e; case "ENDS_WITH": return t = t.toString().toLowerCase(), e = e.toString().toLowerCase(), t.substring(t.length - e.length, t.length) === e; case "ENDS_WITH_CASE_SENSITIVE": return t = t.toString(), e = e.toString(), t.substring(t.length - e.length, t.length) === e; case "STARTS_WITH_CASE_SENSITIVE": return e = e.toString(), t.toString().substring(0, e.length) === e; case "CONTAINS": return -1 !== t.toString().toLowerCase().indexOf(e.toString().toLowerCase()); case "CONTAINS_CASE_SENSITIVE": return -1 !== t.toString().indexOf(e.toString()); case "DOES_NOT_CONTAIN": return -1 === t.toString().toLowerCase().indexOf(e.toString().toLowerCase()); case "DOES_NOT_CONTAIN_CASE_SENSITIVE": return -1 === t.toString().indexOf(e.toString()); default: return !0 } }; let o = new Array; if (i && i.indexOf && (i.indexOf("|") >= 0 || i.indexOf(" AND ") >= 0 || i.indexOf(" OR ") >= 0 || i.indexOf(" and ") >= 0 || i.indexOf(" or ") >= 0)) { let t = a(l, i); if (t) return t; const e = i.indexOf(" and ") >= 0 ? i.split(" and ") : new Array, r = i.indexOf(" or ") >= 0 ? i.split(" or ") : new Array, n = i.indexOf("|") >= 0 ? i.split("|") : new Array; let s, c = i.indexOf(" AND ") >= 0 ? i.split(" AND ") : new Array, u = i.indexOf(" OR ") >= 0 ? i.split(" OR ") : new Array; if (c = c.concat(e), u = u.concat(r), n.length > 0) for (let t = 0; t < n.length; t++)n[t] = n[t].trim; if (u = u.concat(n), c.length > 0) for (let t = 0; t < c.length; t++)!c[t].indexOf(" OR ") >= 0 && o.push(c[t]); if (u.length > 0) for (let t = 0; t < u.length; t++)!u[t].indexOf(" AND ") >= 0 && o.push(u[t]); for (let e = 0; e < o.length; e++) { const r = o[e]; if (r && r.indexOf && r.indexOf("..") >= 0) { const e = r.toString().split(".."); 2 === e.length && (t = l >= e[0] && l <= e[1]) } else t = a(l, r); const n = e < c.length ? "and" : "or"; s = void 0 === s ? t : "or" === n ? s || t : s && t } return s } return i && i.indexOf && i.indexOf("..") >= 0 && (o = i.toString().split(".."), 2 === o.length) ? l >= o[0] && l <= o[1] : a(l, i) } evaluateTimeOnly(t) { const e = this.value; return e ? !!(t && t instanceof Date) && (t.getHours() === e.getHours() && (t.getMinutes() === e.getMinutes() && t.getSeconds() === e.getSeconds())) : !t } }), JQX.Utilities.Assign("CustomFilter", class { constructor(t, e, r) { const n = this; n.value = t, n.condition = e, n.customfilter = r } toString() { return this.condition + " " + this.value } evaluate(t) { const e = this; return e.customfilter(e.value, t, e.condition) } }), JQX.FilterGroup = JQX.Utilities.FilterGroup, JQX.StringFilter = JQX.Utilities.StringFilter, JQX.NumericFilter = JQX.Utilities.NumericFilter, JQX.DateFilter = JQX.Utilities.DateFilter, JQX.CustomFilter = JQX.Utilities.CustomFilter;
|
|
86
|
+
|
|
87
|
+
/***/
|
|
88
|
+
}),
|
|
89
|
+
|
|
90
|
+
/***/ 2515:
|
|
91
|
+
/***/ (() => {
|
|
92
|
+
|
|
93
|
+
JQX.Utilities.Assign("ConditionalFormatter", class { constructor(e) { const t = this; t.data = e || [], t._allowedDateComparators = ["yesterday", "today", "tomorrow", "last7Days", "lastWeek", "thisWeek", "nextWeek", "lastMonth", "thisMonth", "nextMonth", "lastYear", "thisYear", "nextYear"], t._colorSchemes = [{ name: "scheme01", colors: ["#307DD7", "#AA4643", "#89A54E", "#71588F", "#4198AF"] }, { name: "scheme02", colors: ["#7FD13B", "#EA157A", "#FEB80A", "#00ADDC", "#738AC8"] }, { name: "scheme03", colors: ["#E8601A", "#FF9639", "#F5BD6A", "#599994", "#115D6E"] }, { name: "scheme04", colors: ["#D02841", "#FF7C41", "#FFC051", "#5B5F4D", "#364651"] }, { name: "scheme05", colors: ["#25A0DA", "#309B46", "#8EBC00", "#FF7515", "#FFAE00"] }, { name: "scheme06", colors: ["#0A3A4A", "#196674", "#33A6B2", "#9AC836", "#D0E64B"] }, { name: "scheme07", colors: ["#CC6B32", "#FFAB48", "#FFE7AD", "#A7C9AE", "#888A63"] }, { name: "scheme08", colors: ["#3F3943", "#01A2A6", "#29D9C2", "#BDF271", "#FFFFA6"] }, { name: "scheme09", colors: ["#1B2B32", "#37646F", "#A3ABAF", "#E1E7E8", "#B22E2F"] }, { name: "scheme10", colors: ["#5A4B53", "#9C3C58", "#DE2B5B", "#D86A41", "#D2A825"] }, { name: "scheme11", colors: ["#993144", "#FFA257", "#CCA56A", "#ADA072", "#949681"] }, { name: "scheme12", colors: ["#105B63", "#EEEAC5", "#FFD34E", "#DB9E36", "#BD4932"] }, { name: "scheme13", colors: ["#BBEBBC", "#F0EE94", "#F5C465", "#FA7642", "#FF1E54"] }, { name: "scheme14", colors: ["#60573E", "#F2EEAC", "#BFA575", "#A63841", "#BFB8A3"] }, { name: "scheme15", colors: ["#444546", "#FFBB6E", "#F28D00", "#D94F00", "#7F203B"] }, { name: "scheme16", colors: ["#583C39", "#674E49", "#948658", "#F0E99A", "#564E49"] }, { name: "scheme17", colors: ["#142D58", "#447F6E", "#E1B65B", "#C8782A", "#9E3E17"] }, { name: "scheme18", colors: ["#4D2B1F", "#635D61", "#7992A2", "#97BFD5", "#BFDCF5"] }, { name: "scheme19", colors: ["#844341", "#D5CC92", "#BBA146", "#897B26", "#55591C"] }, { name: "scheme20", colors: ["#56626B", "#6C9380", "#C0CA55", "#F07C6C", "#AD5472"] }, { name: "scheme21", colors: ["#96003A", "#FF7347", "#FFBC7B", "#FF4154", "#642223"] }, { name: "scheme22", colors: ["#5D7359", "#E0D697", "#D6AA5C", "#8C5430", "#661C0E"] }, { name: "scheme23", colors: ["#16193B", "#35478C", "#4E7AC7", "#7FB2F0", "#ADD5F7"] }, { name: "scheme24", colors: ["#7B1A25", "#BF5322", "#9DA860", "#CEA457", "#B67818"] }, { name: "scheme25", colors: ["#0081DA", "#3AAFFF", "#99C900", "#FFEB3D", "#309B46"] }, { name: "scheme26", colors: ["#0069A5", "#0098EE", "#7BD2F6", "#FFB800", "#FF6800"] }, { name: "scheme27", colors: ["#FF6800", "#A0A700", "#FF8D00", "#678900", "#0069A5"] }, { name: "scheme28", colors: ["#63BE7B", "#FDD17F", "#F8696B"] }, { name: "scheme29", colors: ["#F8696B", "#FDD17F", "#63BE7B"] }, { name: "scheme30", colors: ["#63BE7B", "#FCFCFF", "#F8696B"] }, { name: "scheme31", colors: ["#F8696B", "#FCFCFF", "#63BE7B"] }, { name: "scheme32", colors: ["#5A8AC6", "#FCFCFF", "#F8696B"] }, { name: "scheme33", colors: ["#F8696B", "#FCFCFF", "#5A8AC6"] }, { name: "scheme34", colors: ["#FCFCFF", "#F8696B"] }, { name: "scheme35", colors: ["#F8696B", "#FCFCFF"] }, { name: "scheme36", colors: ["#63BE7B", "#FCFCFF"] }, { name: "scheme37", colors: ["#FCFCFF", "#63BE7B"] }, { name: "scheme38", colors: ["#63BE7B", "#FFEF9C"] }, { name: "scheme39", colors: ["#FFEF9C", "#63BE7B"] }, { name: "scheme40", colors: ["#000000", "#8b0000 ", "#FFFF00", "#FFFFFF"] }, { name: "scheme41", colors: ["#63BE7B", "#FDD17F ", "#F8696B", "#FF69B4"] }, { name: "scheme42", colors: ["#63BE7B", "#FDD17F ", "#FDD17F", "#F8696B"] }, { name: "scheme00", colors: ["#63BE7B", "#FDD17F", "#FDD17F", "#FDD17F", "#F8696B"] }] } format(e, t, o) { const a = this, r = a.data; if (0 === r.length) return; if (e ? a.condition = e : e = a.condition, !e) return; void 0 !== a.comparator && null !== a.comparator || (a.comparator = o), t ? a.columns = t : t = a.columns, a.color && (a.color = /^#[0-9A-F]{6}$/i.test(a.color) ? a.color : void 0), (!t || !Array.isArray(t) || Array.isArray(t) && 0 === t.length) && (t = a.columns = []); let n = {}; for (let e = 0; e < t.length; e++) { const o = t[e]; void 0 !== r[0][o] && (n[o] = a._validateColumnData(o)) } return 0 !== Object.keys(n).length ? n : void 0 } _applyColorScale(e) { const t = this, o = e.length; function a(e) { let t = 0; for (; t < i;) { if (e <= c[t].max) return t; t++ } return Math.max(0, Math.min(i - 1, t)) } if (0 === o) return; const r = void 0 !== t.colorScheme ? t._getSchemeColors() : [t.color]; if (0 === r.length || void 0 === r[0] || null === r[0]) return; let n, l, s = {}, c = {}; const i = r.length - ("iconSet" === t.condition ? 0 : 1), m = t._getColumnRange(e), F = parseFloat(t.min) || m.min, h = Math.max(F, parseFloat(t.max) || m.max); for (let e = 0; e < i; e++)c[e] = { min: c[e - 1] ? c[e - 1].max : F, max: F + (e + 1) / i * (h - F) }; 0 === i && (c[0] = { min: F, max: h }); for (let m = 0; m < o; m++) { let o = e[m] instanceof Date ? e[m].getTime() : e[m]; o = Math.min(h, Math.max(F, o)), "number" == typeof o && (n = a(o) || 0, "iconSet" === t.condition ? s[m] = { "--icon-set": " ", "--icon-set-color": r[n], "--icon-set-rotation-angle": t._getRotationAngle(n / (i - 1) || 0) + "deg" } : (l = 1 - ((o - c[n].min) / (c[n].max - c[n].min) || 0), s[m] = t._getCellStyle(t._mixColors(r[n], r[Math.min(n + 1, i)], l)))) } return s } _applyColorBar(e) { const t = this, o = e.length, a = t._getColumnRange(e), r = t.min ? parseFloat(t.min) || 0 : a.min, n = t.max ? parseFloat(t.max) || 0 : a.max, l = void 0 !== t.colorScheme ? t._getSchemeColors() : [t.color]; let s, c = "", i = {}; for (let e = 0; e < l.length; e++)void 0 !== l[e] && null !== l[e] && (c += l[e] + ","); if (c) { c = c.slice(0, -1), s = 1 === l.length ? l[0] : "-webkit-linear-gradient(left," + c + ")"; for (let t = 0; t < o; t++) { let o = e[t] instanceof Date ? e[t].getTime() : e[t]; o = Math.min(n, Math.max(r, e[t])), "number" == typeof o && (i[t] = { "--color-bar": " ", "--bar-width": ((o - r) / (n - r) * 100 || 0) + "%", "--bar-color": s }) } return i } console.log("Invalid color/colorScheme detected.") } _applyRule(e) { const t = this, o = e.length, a = "string" == typeof t.condition ? t.condition.trim() : ""; let r, n, l, s = parseFloat(t.min) || 0, c = Math.max(s, parseFloat(t.max) || 0); function i(i) { switch (a) { case "between": if (i instanceof Date && (i = i.getTime()), i >= s && i <= c) return i; break; case "contains": if ((i + "").indexOf(r) > -1) return i; break; case "duplicate": { let t = 0; for (let a = 0; a < o; a++)if (e[a] === i && t++, t > 1) return i; break } case "dateOccur": { const e = t._getDateRange(i, r); if (!e) break; if (i = new Date(i), isNaN(i.getTime())) break; const o = i.getTime(), a = e.min.getTime(), n = e.max.getTime(); if (o >= a && o <= n) return i; break } case "doesNotContain": if ((i + "").indexOf(r) < 0) return i; break; case "equal": if ("number" == typeof i && i === parseFloat(r)) return i; if ("string" == typeof i && 0 === i.localeCompare(r + "")) return i; if ("boolean" == typeof i && i + "" == r + "") return i; if (i instanceof Date && i.getTime() === new Date(r).getTime()) return i; break; case "greaterThan": if (i > parseFloat(r)) return i; break; case "lessThan": if (i < parseFloat(r)) return i; break; case "notEqual": if ("number" == typeof i && i !== parseFloat(r)) return i; if ("string" == typeof i && 0 !== i.localeCompare(r + "")) return i; if ("boolean" == typeof i && i + "" != r + "") return i; if (i instanceof Date && i.getTime() !== new Date(r).getTime()) return i; break; case "topNItems": case "bottomNItems": case "topNPercent": case "bottomNPercent": if (n || (n = e.slice(0).sort(0 === a.indexOf("top") ? (e, t) => e < t ? 1 : e > t ? -1 : 0 : (e, t) => e > t ? 1 : e < t ? -1 : 0).slice(0, parseInt(a.indexOf("Percent") > 0 ? o * r / 100 : r))), n.indexOf(i) > -1) return i; break; case "aboveAverage": case "belowAverage": if (!l) { let t = 0; e.map((e => t += parseFloat(e))), l = t / o } if ("aboveAverage" === a && i > l) return i; if ("belowAverage" === a && i < l) return i }return null } if (r = "dateOccur" === a ? "string" == typeof t.comparator && t._allowedDateComparators.indexOf(t.comparator.trim()) > -1 ? t.comparator.trim() : void 0 : Array.isArray(t.comparator) ? t.comparator[0].trim() : t.comparator, !e || 0 === e.length) return; if (["odd", "even", "duplicate", "dateOccur", "between", "aboveAverage", "belowAverage"].indexOf(a) < 0 && 0 !== a.indexOf("everyN") && null == r) return console.warn(t.condition + " requires a comparator."), []; if ("odd" === a || "even" === a || 0 === a.indexOf("everyN")) return t._getAlternateItems(e); let m, F = []; for (let t = 0; t < o; t++)m = i(e[t]), null != m && F.push(t); return F } _getAlternateItems(e) { const t = this, o = e.length, a = "string" == typeof t.condition ? t.condition.trim() : "", r = parseInt(t.min) || 0, n = Math.max(r, parseInt(t.max) || o) - 1, l = parseInt(t.comparator); let s = [], c = 0; for (let e = 0; e <= o; e++)if (!(e < r)) { if (e > n) break; "even" === a && (e + 1) % 2 == 0 || "odd" === a && (e + 1) % 2 != 0 ? s.push(e) : void 0 === l || isNaN(l) || (c === l ? (s.push(e), c = 0) : c++) } return s } _getColumnRange(e) { const t = e.length; let o, a, r = 0; for (let n = 0; n < t; n++)a = e[n], a instanceof Date && (a = a.getTime()), a > r && (r = a), void 0 === o && (o = a), a < o && (o = a); return { min: parseFloat(o) || 0, max: parseFloat(r) || 0 } } _getCellStyle(e, t) { var o = e; return { background: this._hexToRgba(e, t).toString(), color: this._getTextElementByColor(this._hexToRgba(e, .7)), border: o } } _getDateRange(e, t) { let o, a; if (!(new Date(e) instanceof Date && t)) return; const r = new Date; switch (t) { case "yesterday": case "today": case "tomorrow": "yesterday" === t ? a = new Date(r.getFullYear(), r.getMonth(), r.getDate() - 1) : "today" === t ? (a = new Date, a.setHours(0, 0, 0, 0)) : a = new Date(r.getFullYear(), r.getMonth(), r.getDate() + 1), o = a; break; case "last7Days": a = new Date(r.getFullYear(), r.getMonth(), r.getDate() - 6), o = new Date(r); break; case "lastWeek": case "thisWeek": case "nextWeek": a = "lastWeek" === t ? new Date(r.getFullYear(), r.getMonth(), r.getDate() - 6 - r.getDay()) : "thisWeek" === t ? new Date(r.getFullYear(), r.getMonth(), r.getDate() - Math.abs(1 - r.getDay())) : new Date(r.getFullYear(), r.getMonth(), r.getDate() + Math.abs(7 - r.getDay())), o = new Date(a.getFullYear(), a.getMonth(), a.getDate() + 6); break; case "lastMonth": case "thisMonth": case "nextMonth": "lastMonth" === t ? (o = new Date(r.getFullYear(), r.getMonth(), 0), a = new Date(o.getFullYear(), o.getMonth(), 1)) : "thisMonth" === t ? (a = new Date(r.getFullYear(), r.getMonth(), 1), o = new Date(r.getFullYear(), r.getMonth() + 1, 0)) : (a = new Date(r.getFullYear(), r.getMonth() + 1, 1), o = new Date(r.getFullYear(), r.getMonth() + 2, 0)); break; case "lastYear": case "thisYear": case "nextYear": "lastYear" === t ? (a = new Date(r.getFullYear() - 1, 0, 1), o = new Date(r.getFullYear() - 1, 12, 0)) : "thisYear" === t ? (a = new Date(r.getFullYear(), 0, 1), o = new Date(r.getFullYear(), 12, 0)) : (a = new Date(r.getFullYear() + 1, 0, 1), o = new Date(r.getFullYear() + 1, 12, 0)) }return { min: a, max: o } } _getRotationAngle(e) { let t = e; return e < .25 ? t = Math.round(e) ? .25 : 0 : e > .25 && e < .5 ? t = Math.round(e) ? .5 : .25 : e > .5 && e < .75 ? t = Math.round(e) ? .75 : .5 : e > .75 && e < 1 && (t = Math.round(e) ? 1 : .75), 180 * t } _getSchemeColors() { const e = this; let t; if ("string" == typeof e.colorScheme) t = 0 === e.colorScheme.indexOf("scheme") ? e._colorSchemes.filter((t => t.name === e.colorScheme))[0] : void 0; else { if ("number" != typeof e.colorScheme) return []; t = e._colorSchemes[e.colorScheme] ? e._colorSchemes[e.colorScheme] : void 0 } return "object" == typeof t ? t.colors : e._colorSchemes[0].colors } _getTextElementByColor(e) { return .299 * e.r + .587 * e.g + .114 * e.b >= 125 ? "Black" : "White" } _hexToRgba(e, t) { const o = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e); var a = function () { return this.alpha > 1 || void 0 === this.alpha || null === this.alpha ? this.alpha = 1 : this.alpha < 0 && (this.alpha = 0), "rgba(" + this.r + ", " + this.g + ", " + this.b + ", " + this.alpha + ")" }; return void 0 === t ? o ? { r: parseInt(o[1], 16), g: parseInt(o[2], 16), b: parseInt(o[3], 16), toString: a } : null : (t > 1 ? t = 1 : t < 0 && (t = 0), o ? { r: parseInt(o[1], 16), g: parseInt(o[2], 16), b: parseInt(o[3], 16), alpha: t, toString: a } : null) } _mixColors(e, t, o) { const a = e => parseInt(e, 16); let r, n = "#"; o = void 0 !== o ? o : .5, e = e.replace(/#/g, ""), t = t.replace(/#/g, ""); for (let l = 0; l <= 5; l += 2) { const s = a(e.substr(l, 2)), c = a(t.substr(l, 2)); for (r = Math.floor(c + (s - c) * o).toString(16); r.length < 2;)r = "0" + r; n += r } return n } _shadeColor(e, t) { var o = parseInt(e.slice(1), 16), a = t < 0 ? 0 : 255, r = t < 0 ? -1 * t : t, n = o >> 16, l = o >> 8 & 255, s = 255 & o; return "#" + (16777216 + 65536 * (Math.round((a - n) * r) + n) + 256 * (Math.round((a - l) * r) + l) + (Math.round((a - s) * r) + s)).toString(16).slice(1) } _validateColumnData(e) { const t = this, o = [], a = t.data; let r, n = {}; for (let t = 0; t < a.length; t++)a[t] && o.push(a[t][e]); if ("colorScale" === t.condition || "iconSet" === t.condition) return t._applyColorScale(o); if ("colorBar" === t.condition) return t._applyColorBar(o); if (r = t._applyRule(o), r) { if (t.color) { for (let e = 0; e < r.length; e++)n[r[e]] = t._getCellStyle(t.color); return n } console.warn('No color is provided. "color" property is not set.') } } });
|
|
94
|
+
|
|
95
|
+
/***/
|
|
96
|
+
}),
|
|
97
|
+
|
|
98
|
+
/***/ 859:
|
|
99
|
+
/***/ (() => {
|
|
100
|
+
|
|
101
|
+
JQX("jqx-gantt-chart", class extends JQX.ScrollViewer { static get properties() { return { adjustToNonworkingTime: { value: !1, type: "boolean" }, autoSchedule: { value: !1, type: "boolean" }, autoScheduleStrictMode: { value: !1, type: "boolean" }, autoScrollStep: { value: 5, type: "number" }, columnMenu: { value: !1, type: "boolean" }, columnMinWidth: { value: "50px", type: "any" }, columnResize: { value: !1, type: "boolean" }, columnResizeFeedback: { value: !1, type: "boolean" }, currentTime: { value: new Date, type: "any", validator: "_dateValidator" }, currentTimeIndicator: { value: !1, type: "boolean" }, currentTimeIndicatorInterval: { value: 1, validator: "_currentTimeIndicatorIntervalValidator", type: "number" }, dataExport: { value: { exportFiltered: { value: !1, type: "boolean" }, itemType: { value: "task", type: "string" }, fileName: { value: "jqxGanttChart", type: "string?" } }, type: "object" }, dataSource: { value: [], type: "any", reflectToAttribute: !1 }, dateEnd: { value: "", type: "any", validator: "_dateValidator" }, dateStart: { value: "", type: "any", validator: "_dateValidator" }, dateMarkers: { value: [], reflectToAttribute: !1, type: "array" }, dayFormat: { value: "short", allowedValues: ["2-digit", "numeric", "long", "short", "narrow"], type: "string" }, disableAutoScroll: { value: !1, type: "boolean" }, disableTaskDrag: { value: !1, type: "boolean" }, disableTaskProgressChange: { value: !1, type: "boolean" }, disableTaskResize: { value: !1, type: "boolean" }, disableSelection: { value: !1, type: "boolean" }, disableSegmentDrag: { value: !1, type: "boolean" }, disableSegmentResize: { value: !1, type: "boolean" }, disableWindowEditor: { value: !1, type: "boolean" }, durationUnit: { value: "milisecond", allowedValues: ["day", "week", "hour", "minute", "second", "milisecond"], type: "string" }, filterRow: { value: !1, type: "boolean" }, firstDayOfWeek: { value: -1, type: "number" }, groupByResources: { value: !1, type: "boolean" }, headerTemplate: { value: null, type: "any" }, hourFormat: { value: "default", allowedValues: ["default", "2-digit", "numeric"], type: "string" }, hideDateMarkers: { value: !1, type: "boolean" }, hideTimelineHeaderDetails: { value: !1, type: "boolean" }, hideTimelineSecondHeaderDetails: { value: !0, type: "boolean" }, hideTimelineHeader: { value: !1, type: "boolean" }, hideResourcePanel: { value: !1, type: "boolean" }, showSelectionColumn: { value: !1, type: "boolean" }, infiniteTimeline: { value: !1, type: "boolean" }, infiniteTimelineStep: { value: 5, type: "number" }, inverted: { value: !1, type: "boolean" }, keyboardNavigation: { value: !1, type: "boolean" }, messages: { extend: !0, value: { en: { duplicateIds: "{{elementType}}: DataSource contains duplicate ids. Tasks should have unique ids. The following ids are duplicating: {{duplicates}}.", invalidNonworkingRange: "{{elementType}}: Invalid {{property}} value. {{property}} should not contain all possible days/hours because it will result in an endless timeline. The value has been validated by removing the last item from the new value range.", invalidValue: "{{elementType}}: Invalid {{property}} value. {{property}} should be of type {{typeOne}} or {{typeTwo}}.", incorrectArgument: "{{elementType}}: Incorrect argument {{argumentName}} in method {{methodName}}.", outOfBounds: "{{elementType}}: Out of bounds argument {{argumentName}} in method {{methodName}}.", missingReference: "{{elementType}}: Missing reference to {{file}} in method {{methodName}}.", alreadyExists: "{{elementType}}: The item already exists when calling the {{methodName}} method.", notExisting: "{{elementType}}: The item does not exists when calling the {{methodName}} method.", notAProject: "{{elementType}}: The {{argumentName}} argument in {{methodName}} method does not reference an item of type 'project'.", noId: "jqxGanttChart requires an id in order to save/load/clear a state.", ok: "Ok", add: "Add", remove: "Remove", cancel: "Cancel", delete: "Delete", confirm: "{{componentName}} will be deleted permanently, <b>are you sure? </b>", taskColumnLabel: "Task Name", resourceColumnLabel: "Resource Name", deleteLink: "Delete link", unassigned: "Unassigned", generalTab: "General", dependencyTab: "Dependency", segmentsTab: "Segments", segment: "Segment", dependencyValidation: "*The Task cannot be connected to itself.", segmentsCountValidation: "*Segmented Tasks must have at least 2 segments. ", segmentConflictError: '*The Segment "{{label}}" is in conflict, because it starts on/before and ends on/after the {{dateConflict}} of Segment "{{conflictLabel}}." ', segmentStartError: '*The Segment "{{label}}" cannot start before it ends and cannot end before it starts.', segmentEndError: '*The Segment "{{label}}" cannot start when it ends.', segmentRangeError: '*The Segment "{{label}}" is out of Task date range. The first segment must start when the task starts and the last segment must end when the task ends.', label: "Label", duration: "Duration", dateStart: "Date Start", dateEnd: "Date End", id: "Id", name: "Name", type: "Type", lag: "Lag", startToStart: "Start-To-Start", endToStart: "End-To-Start", endToEnd: "End-To-End", startToEnd: "Start-To-End", overdue: "Overdue", weeks: "week(s)", days: "day(s)", hours: "hour(s)", minutes: "minute(s)", seconds: "second(s)", miliseconds: "milisecond(s)", task: "Task", resource: "Resource", assignments: "Assignments", startTask: "Task Start", endTask: "Task End", deadline: "Deadline", quarter: "Quarter", quarterShort: "Q" } }, type: "object" }, monthFormat: { value: "short", allowedValues: ["2-digit", "numeric", "long", "short", "narrow"], type: "string" }, monthScale: { value: "week", allowedValues: ["day", "week"], type: "string" }, max: { value: new Date(2100, 0, 1), type: "any", validator: "_dateValidator" }, min: { value: new Date(1900, 0, 1), type: "any", validator: "_dateValidator" }, nonworkingDays: { value: [], type: "array", validator: "_nonworkingDayValidator" }, nonworkingHours: { value: [], type: "array", validator: "_nonworkingTimeValidator" }, onTaskRender: { value: null, reflectToAttribute: !1, type: "function?" }, popupWindowCustomizationFunction: { value: null, reflectToAttribute: !1, type: "function?" }, popupWindowTabs: { value: ["general", "dependency", "segments"], reflectToAttribute: !1, type: "array" }, progressLabelFormatFunction: { value: null, reflectToAttribute: !1, type: "function?" }, resizeHandlesVisibility: { allowedValues: ["auto", "hidden", "visible"], value: "auto", type: "string" }, quarterFormat: { value: "short", allowedValues: ["long", "short", "numeric"], type: "string" }, resourceColumns: { value: [{ label: "resourceColumnLabel", value: "label" }], type: "array", reflectToAttribute: !1 }, resourceFiltering: { value: !1, type: "boolean" }, resourceGroupFormatFunction: { value: null, reflectToAttribute: !1, type: "function?" }, resourcePanelHeaderTemplate: { value: null, type: "any" }, resourcePanelMin: { value: 100, type: "any" }, resourcePanelSize: { value: "", type: "any" }, resourcePanelRefreshRate: { value: 0, reflectToAttribute: !1, type: "number" }, resourceTimelineFormatFunction: { value: null, reflectToAttribute: !1, type: "function?" }, resourceTimelineMode: { allowedValues: ["diagram", "histogram", "custom"], value: "diagram", type: "string" }, resourceTimelineView: { allowedValues: ["hours", "tasks", "custom"], value: "hours", type: "string" }, selectedTaskIds: { value: [], type: "array" }, selectedResourceIds: { value: [], type: "array" }, shadeUntilCurrentTime: { value: !1, type: "boolean" }, showBaseline: { value: !1, type: "boolean" }, showProgressLabel: { value: !1, type: "boolean" }, snapToNearest: { value: !1, type: "boolean" }, sortFunction: { value: null, type: "function?", reflectToAttribute: !1 }, sortMode: { value: "none", allowedValues: ["none", "one", "many"], type: "string" }, taskColumns: { value: [{ label: "taskColumnLabel", value: "label" }], type: "array", reflectToAttribute: !1 }, taskFiltering: { value: !1, type: "boolean" }, taskPanelMin: { value: 200, type: "any" }, taskPanelSize: { value: "", type: "any" }, timelineHeaderFormatFunction: { value: null, reflectToAttribute: !1, type: "function?" }, timelineMin: { value: 200, type: "any" }, treeMin: { value: 100, type: "any" }, treeSize: { value: "20%", type: "any" }, tooltip: { value: { enabled: { value: !1, type: "boolean" }, arrow: { value: !1, type: "boolean" }, delay: { value: 50, type: "number" }, offset: { value: [0, 5], type: "array" } }, type: "object" }, verticalScrollBarVisibility: { type: "string", value: "auto", allowedValues: ["auto", "disabled", "hidden", "visible"] }, view: { value: "year", allowedValues: ["day", "week", "month", "quarter", "year"], type: "any" }, yearFormat: { value: "numeric", allowedValues: ["2-digit", "numeric"], type: "string" }, weekFormat: { value: "long", allowedValues: ["long", "numeric"], type: "string" } } } template() { return '<div id="container" role="presentation">\n <jqx-splitter id="mainSplitter" auto-fit-mode="end" keep-proportions-on-resize right-to-left="[[rightToLeft]]" animation="[[animation]]" orientation="horizontal">\n <jqx-splitter-item id="taskSplitterItem" class="jqx-task-splitter-item">\n <div id="taskSplitterItemHeader" class="jqx-task-panel-header"></div>\n <jqx-splitter id="taskSplitter" class="jqx-task-splitter" auto-fit-mode="end">\n <jqx-splitter-item id="tableSplitterItem">\n <jqx-table right-to-left="[[rightToLeft]]" wait id="taskTable" class="jqx-task-table" virtualization animation="none" deferred-scroll-delay="0" ></jqx-table>\n </jqx-splitter-item>\n <jqx-splitter-item id="timelineSplitterItem" class="jqx-timeline-splitter-item">\n <div id="timeline" class="jqx-timeline">\n <div id="timelineHeader" class="jqx-timeline-header" role="rowgroup">\n <div id="timelineHeaderContent" class="jqx-timeline-header-content">\n <div class="jqx-timeline-view-details" id="timelineViewDetails" role="row"></div>\n <div class="jqx-timeline-view-details jqx-hidden" id="timelineViewSubDetails" role="row"></div>\n <div class="jqx-timeline-view-cells" id="timelineViewCells" role="row"></div>\n </div>\n </div>\n <div id="taskTimelineContainer" class="jqx-timeline-content-container">\n <div id="timelineContent" class="jqx-timeline-content">\n <div id="taskTimelineCellsContainer" class="jqx-timeline-cells-container" aria-hidden="true"></div>\n <div id="taskIndicatorsContainer" class="jqx-timeline-indicators-container" role="group"></div>\n <div id="timelineConnectionsContainer" class="jqx-timeline-connections-container" role="group"></div>\n <div id="timelineBaselinesContainer" class="jqx-timeline-baselines-container" role="group"></div>\n <div id="timelineTasksContainer" class="jqx-timeline-tasks-container" role="group"></div>\n <div id="timelineMarkers" class="jqx-timeline-markers-container" role="group"></div>\n <div id="timelineDeadlines" class="jqx-timeline-deadlines-container" role="group"></div>\n </div>\n </div>\n </div>\n <jqx-scroll-bar id="verticalScrollBar" class="jqx-timeline-scroll-bar" orientation="vertical"\n right-to-left="[[rightToLeft]]" aria-controls="[[id]]">\n </jqx-scroll-bar>\n </jqx-splitter-item>\n </jqx-splitter>\n </jqx-splitter-item>\n </jqx-splitter>\n <jqx-scroll-bar wait id="horizontalScrollBar" class="jqx-timeline-scroll-bar"></jqx-scroll-bar>\n </div>' } static get listeners() { return { down: "_downHandler", "document.move": "_documentMoveHandler", "document.up": "_documentUpHandler", "document.dragstart": "_dragStartHandler", "container.wheel": "_mouseWheelHandler", "horizontalScrollBar.change": "_horizontalScrollbarHandler", "verticalScrollBar.change": "_verticalScrollbarHandler", "resourceVerticalScrollBar.change": "_verticalScrollbarHandler", "mainSplitter.resizeEnd": "_resizeEventHandler", "mainSplitter.resize": "_resizeEventHandler", move: "_moveHandler", "mainSplitter.change": "_tableChangeHandler", "mainSplitter.filter": "_tableSortFilterHandler", "mainSplitter.sort": "_tableSortFilterHandler", "mainSplitter.columnResize": "_tableColumnResizeHandler", "taskTable.group": "_taskTableGroupEventHandler", "taskTable.collapse": "_taskTableExpandHandler", "taskTable.expand": "_taskTableExpandHandler", "taskTable.keydown": "_taskTableKeyDownHandler" } } static get styleUrls() { return ["jqx.ganttchart.css"] } attached() { const e = this; if (super.attached(), e._scrollView || (e._scrollView = new JQX.Utilities.Scroll(e.$.taskSplitterItem, e.$.horizontalScrollBar, e.$.verticalScrollBar)), !e._resourceScrollView && e.$.mainSplitter.contains(e.$.resourceSplitter) && (e._resourceScrollView = new JQX.Utilities.Scroll(e.$.resourceSplitterItem, e.$.horizontalScrollBar, e.$.resourceVerticalScrollBar)), e.scrollLeft) { const t = e._getScrollLeft(e.scrollLeft); e.$.timelineHeader.scrollLeft = e.$.taskTimelineContainer.scrollLeft = t, e.$.mainSplitter.contains(e.$.resourceTimelineHeader) && (e.$.resourceTimelineHeader.scrollLeft = e.$.resourceTimelineContent.scrollLeft = t) } if (e.scrollTop) { const t = e.scrollTop; e.$.taskTimelineContainer.scrollTop = t, e.$.timelineContent.scrollTop = t, e.$.mainSplitter.contains(e.$.resourceTimelineHeader) && (e.$.resourceTimelineContent.scrollTop = t) } const t = ["taskPopupWindow", "connectionPopupWindow", "confirmPopupWindow"]; for (let i = 0; i < t.length; i++) { const n = t[i]; if (e.$[n] && e.$[n].opened) { const t = e["$" + n]; e._handleModal(!0), t.listen("close", e._popupWindowCloseHandler.bind(e)), t.listen("closing", e._popupWindowClosingHandler.bind(e)), t.listen("open", e._popupWindowOpenHandler.bind(e)), t.listen("click", e._popupWindowClickHandler.bind(e)), t.listen("change", e._popupWindowChangeHandler.bind(e)), t.listen("transitionend", e._popupWindowTransitionendHandler.bind(e)), e.getShadowRootOrBody().appendChild(e.$[n]) } } e._handleTooltipEvents(!0), e._currentTimeIndicatorInterval || !e.currentTimeIndicator && !e.shadeUntilCurrentTime || e._setCurrentTimeIndicators() } detached() { const e = this; super.detached(), e._scrollView && (e._scrollView.unlisten(), delete e._scrollView), e._resourceScrollView && (e._resourceScrollView.unlisten(), delete e._resourceScrollView); const t = ["taskPopupWindow", "connectionPopupWindow", "confirmPopupWindow"]; e._handleModal(); for (let i = 0; i < t.length; i++) { const n = t[i], a = e["$" + n]; e.$[n] && e.$[n].remove(), a && (a.unlisten("open"), a.unlisten("close"), a.unlisten("closing"), a.unlisten("click"), a.unlisten("change"), a.unlisten("transitionend")) } e._handleTooltipEvents(), clearInterval(e._currentTimeIndicatorInterval), delete e._currentTimeIndicatorInterval } propertyChangedHandler(e, t, i) { const n = this; switch (e) { case "adjustToNonworkingTime": for (let e = 0; e < n._tasks.length; e++) { const t = n._tasks[e], i = t.$.project; n._validateTaskDates(t, i), n._validateTaskSegments(t), n._synchronizeProjectDates(t, i), n._refreshTableColumnsData(t, ["dateEnd", "duration"]) } n._refreshTimeline(); break; case "animation": break; case "autoSchedule": i ? n._autoSchedule() : n._autoScheduleRestore(); break; case "autoScheduleStrictMode": i && (n._autoSchedule(), n._refreshTimeline()); break; case "columnMinWidth": case "columnResizeFeedback": case "columnResize": { const t = n.$.taskTable, a = n.$.resourceTable; t[e] = i, a && (a[e] = i); break } case "currentTimeIndicator": case "shadeUntilCurrentTime": n._setCurrentTimeIndicators(); break; case "dataSource": n.scrollLeft = n.scrollTop = 0, n._createTasks(), n._refreshTableDataSource(), n._createTimeline(), n._createResourceTimeline(), n._setAriaControls(); break; case "dateMarkers": n._createDateMarkers(); break; case "hideDateMarkers": n._recycleDateMarkers(); break; case "disableSelection": { const e = n.$.taskTable, t = n.$.resourceTable; e && (e.selection = !n.disableSelection), t && (t.selection = !n.disableSelection); break } case "durationUnit": for (let e = 0; e < n._tasks.length; e++) { const t = n._tasks[e], i = t.$.project; n._validateTaskDuration(t), n._validateTaskDates(t, i), n._validateTaskSegments(t), n._synchronizeProjectDates(t, i) } n._createTimelineCells(), n._insertTimelineTasks(), n.taskColumns.some((e => (e.value + "").toLowerCase().indexOf("duration") > -1)) && n._refreshTableDataSource(); break; case "filterRow": n.$.taskTable[e] = i; break; case "groupByResources": n._setTable(n.$.taskTable), n._createTimelineContent(), n._recycleTimelineTasks(), n._refresh(); break; case "infiniteTimeline": i ? n._scrollView.hScrollBar.value === n._scrollView.hScrollBar.max && n._handleInfiniteTimeline() : n.set("dateEnd", ""); break; case "keyboardNavigation": case "columnMenu": case "hideSelectionColumn": case "sortMode": n.$.taskTable[e] = i, n.$.resourceTable && (n.$.resourceTable[e] = i); break; case "popupWindowTabs": case "popupWindowCustomizationFunction": { const e = n.$.taskPopupWindow; e && (e.opened && (e.close(), delete e._target), e.clear()); break } case "taskFiltering": n.$.taskTable.filtering = i, n._refresh(); break; case "resourceFiltering": { const e = n.$.resourceTable; e && (e.filtering = i, n._refresh()); break } case "tooltip_enabled": { const e = n.$.tooltip; e && (i || e.remove(), n._handleTooltipEvents(i)); break } case "tooltip_arrow": case "tooltip_delay": case "tooltip_offset": { const t = n.$.tooltip; t && (t[e.replace("tooltip_", "")] = i); break } case "headerTemplate": n._handleHeaderTemplate(); break; case "inverted": if (n._handleInverted(), n.scrollLeft) { const e = n._getScrollLeft(n.scrollLeft); n.$.timelineHeader.scrollLeft = n.$.taskTimelineContainer.scrollLeft = e, n.$.mainSplitter.contains(n.$.resourceTimelineHeader) && (n.$.resourceTimelineHeader.scrollLeft = n.$.resourceTimelineContent.scrollLeft = e) } break; case "rightToLeft": Array.from(n.querySelectorAll("jqx-splitter, jqx-table, jqx-scroll-bar")).forEach((t => t[e] = i)), n.closeWindow(), n._handleInverted(), n._refreshTimeline(); break; case "firstDayOfWeek": case "dateStart": case "dateEnd": n._refreshTimeline(); break; case "messages": case "locale": case "dayFormat": case "hourFormat": case "timelineHeaderFormatFunction": case "monthFormat": case "yearFormat": n._refreshHeaderDate(!0), n._refreshColumnsHeaders(), n._recycleResourceHeaderCells(); break; case "hideResourcePanel": n._createResourceTimeline(), n._refreshTimeline(); break; case "nonworkingDays": case "nonworkingHours": n._refreshAfterWorkingTimeChange(); break; case "selectedTaskIds": n.$.taskTable.selected = n._getSelection("task", i); break; case "selectedResourceIds": n.$.resourceTable && (n.$.resourceTable.selected = n._getSelection("resource", i)); break; case "resourceColumns": n._setTable(n.$.resourceTable), n._highlightAssignedItem("task", n._getSelection("task", n.selectedTaskIds)); break; case "resourcePanelHeaderTemplate": n._handleHeaderTemplate("resource"); break; case "resourceTimelineView": case "resourceTimelineMode": case "resourceTimelineFormatFunction": n.$.mainSplitter.contains(n.$.resourceSplitter) && n._resources.forEach((e => n._refreshResourceTimelineContent(e))); break; case "showProgressLabel": case "progressLabelFormatFunction": n._tasks.forEach((e => n._setTaskBarProgress(e))); break; case "sortFunction": n.$.taskTable.sort = i, n.$.resourceTable && (n.$.resourceTable.sort = i); break; case "showSelectionColumn": n.$.taskTable.hideSelectionColumn = !i, n.$.resourceTable && (n.$.resourceTable.hideSelectionColumn = !i); break; case "taskColumns": n._setTable(n.$.taskTable); break; case "timelineMin": n.$.timelineSplitterItem.min = i, n.$.taskSplitter.refresh(), n.$.mainSplitter.contains(n.$.resourceSplitter) && n._synchronizeSplitters(n.$.taskSplitter, n.$.resourceSplitter); break; case "treeMin": case "treeSize": { const t = e.toLowerCase().indexOf("size") > -1 ? "size" : "min"; n.$.tableSplitterItem[t] = i, n.$.taskSplitter.refresh(), n.$.mainSplitter.contains(n.$.resourceSplitter) && n._synchronizeSplitters(n.$.taskSplitter, n.$.resourceSplitter); break } case "taskPanelMin": case "taskPanelSize": case "resourcePanelSize": case "resourcePanelMin": { const t = e.indexOf("Min") > -1 ? "min" : "size", a = e.indexOf("resource") > -1 ? "resource" : "task"; n.$.mainSplitter.contains(n.$.resourceSplitter) && (n.$[`${a}SplitterItem`][t] = i, n.$.taskSplitterItem._setSize("size", n.taskPanelSize), n.refresh()); break } case "unfocusable": n._setFocusable(); break; case "view": n._refreshTimeline(t); break; default: super.propertyChangedHandler(e, t, i) } } _predefPropertyGetter(e) { const t = this; Object.defineProperty(t, e, { get: function () { switch (e) { case "dataSource": { if (t.context === t) return t.properties[e].value; const i = function (e) { if (!e.length) return e; for (let n = 0; n < e.length; n++) { const a = e[n]; let s = t._getProjectTasks(a); s && Array.isArray(s) && (s = i(s.filter((e => e.$ && e.$.project === a)))), e[n] = t._cloneObject(a), s && s.length ? e[n].tasks = s : delete e[n].tasks } return e }, n = t.properties[e].value; return n instanceof JQX.DataAdapter ? n : i(n.slice(0)) } case "dateStart": case "dateEnd": { const i = t._timelineCells; if (i.length) { const n = t._getCellDateRange({ _date: i["dateStart" === e ? 0 : i.length - 1].date }); return new Date(n[e]) } return t.properties[e].value } default: return t.properties[e].value } }, set(i) { t.updateProperty(t, t._properties[e], i) } }) } ready() { this._customScrollView = !0, super.ready() } render() { const e = this, t = window.getComputedStyle(e), i = JQX.Utilities.Core; e._isMobile = i.isMobile, e._isFirefox = i.Firefox, e._taskBarMinWidth = parseFloat(t.getPropertyValue("--jqx-gantt-chart-timeline-task-min-width")) || 0, e._taskDefaultHeight = parseFloat(t.getPropertyValue("--jqx-gantt-chart-task-default-height")) || 30, e._timelineCellSize = parseFloat(t.getPropertyValue("--jqx-gantt-chart-timeline-cell-size")) || 0, e._timelineCellMinSize = parseFloat(t.getPropertyValue("--jqx-gantt-chart-timeline-cell-min-size")) || 0, e._taskConnectionWidth = parseFloat(t.getPropertyValue("--jqx-gantt-chart-timeline-task-connection-width")) || 1, e._baselineProportion = parseFloat(t.getPropertyValue("--jqx-gantt-chart-baseline-proportion")) || 0, e._predefPropertyGetter("dataSource"), e._predefPropertyGetter("dateStart"), e._predefPropertyGetter("dateEnd"), e.$.tableSplitterItem.size = e.treeSize, e.$.tableSplitterItem.min = e.treeMin, e.$.timelineSplitterItem.min = e.timelineMin, e._setScrollBars(), e._handleHeaderTemplate(), e._handleInverted(!0), e._createTasks(), e._setTable(), e._createTimeline(), e._createResourceTimeline(), e._setAriaControls(), e._setFocusable(), e.checkLicense(), (e.shadowRoot || e._isFirefox) && requestAnimationFrame((() => e.refresh())), super.render() } refresh(e) { const t = this; if (e) return t._refreshTimeline(), t._setTable(t.$.taskTable), void t._createResourceTimeline(); t.isRendered && t._resizeEventHandler() } addFilter(e, t) { const i = this; if (!i.taskFiltering && !i.resourceFiltering || !(t instanceof JQX.Utilities.FilterGroup)) return; Array.isArray(e) || (e = "object" == typeof e ? [e] : []); const n = i.taskColumns, a = i.resourceColumns, s = i.$.taskTable, r = i.$.resourceTable; for (let i = 0; i < e.length; i++) { const o = e[i], l = o.type, [d, c] = "resource" === l || a.includes(o) ? [r, a] : [s, n], m = c.find((e => o.value && e.value === o.value)); m && d.addFilter(m.value, t) } } clearSelection() { this._unselectAll("task"), this._unselectAll("resource") } static get requires() { return { "JQX.Splitter": "jqx.splitter.js", "JQX.Tree": "jqx.tree.js", "JQX.Window": "jqx.window.js" } } ensureVisible(e, t = "task") { const i = this, n = i._getValidItemAndIndex(e, t); (e = n ? n.item : void 0) && (i._ensureVisible(e, t), i._scrollTo(e.dateStart, !0)) } removeAllConnections() { const e = this; e.isCompleted && (e.$.timelineConnectionsContainer.innerHTML = "", e._connections = [], e._tasks.map((e => e.connections = []))) } removeConnection() { const e = this, t = Array.from(arguments).filter((e => void 0 !== e)); if (!e.isCompleted) return; let i; if (1 === t.length) { if ("string" == typeof t[0]) { const e = document.getElementById(t[0]); e && (i = e.getAttribute("connection-id")) } i || (i = (t[0] + "").split("-"), i = e._getValidConnectionId(i[0], i[1], i[2], "removeConnection")) } else 3 === t.length && (i = e._getValidConnectionId(t[0], t[1], t[2], "removeConnection")); i && (e._removeConnection(i), e.$.fireEvent("itemRemove", { type: "connection", id: `${i[0]}-${i[1]}-${i[2]}`, item: { source: i[0], target: i[1], type: i[2] } })) } removeTaskConnection(e, t) { const i = this; if (!i.isCompleted) return; if ((e += "").indexOf("-") > -1 && !t) { const i = e.split("-"); t = i[1], e = i[0] } const n = i._getValidItemAndIndex(e), a = i._getValidItemAndIndex(t); e = n ? n.index : void 0, t = a ? a.index : void 0, isNaN(e) ? i.error(i.localize("incorrectArgument", { elementType: i.nodeName.toLowerCase(), methodName: "removeTaskConnection", argumentName: "taskEndIndex" })) : i._removeConnection("" + e + (isNaN(t) ? "" : t)) } beginUpdate() { this._isUpdating = { started: !0, type: {} }, this.$.fireEvent("beginUpdate") } endUpdate() { const e = this; function t() { e._refreshTableDataSource(), e._createTimelineContent(), e._recycleTimelineTasks(), e._setAriaControls(); const t = e._resources; for (let i = 0; i < t.length; i++)e._refreshTableColumnsData(t[i], void 0, "resource") } function i() { if (e.hideResourcePanel) return; e._refreshTableDataSource("resource"), e._recycleResourceHeaderCells(), e._createResourceTimelineContent(), e._refresh(); const t = e._tasks; for (let i = 0; i < t.length; i++)e._refreshTableColumnsData(t[i]) } if (!e._isUpdating) return; const n = 1 === Object.keys(e._isUpdating.type).length ? Object.keys(e._isUpdating.type)[0] : void 0; let a, s; switch (e._selected && ({ task: a, resource: s } = e._selected), delete e._isUpdating, n) { case "task": t(); break; case "resource": i(); break; default: t(), i() }a && (e._refreshSelectedItems("task", a), e.$.taskTable.selected = e._getSelection("task", e.selectedTaskIds)), s && (e._refreshSelectedItems("resource", s), e.$.resourceTable.selected = e._getSelection("resource", e.selectedResourceIds)), e.$.fireEvent("endUpdate") } clearFilters(e) { this._resetFromAction(e, "clearFilters") } clearSort(e) { const t = this; "task" !== e && "resource" !== e ? (t._resetFromAction("task", "clearSort"), t._resetFromAction("resource", "clearSort")) : t._resetFromAction(e, "clearSort") } clearTasks() { this._clearTasks() } _clearTasks() { const e = this; e._selected && delete e._selected.task, e.set("selectedTaskIds", []), e._tasks = [], e._timelineCells = [], e._timelineVCells = [], e._timelineHeaderCells = [], e.$.timelineContent.style.width = "", e.$.container.style.removeProperty("--jqx-gantt-chart-task-timeline-content-height"), e.$.timelineViewDetails.innerHTML = "", e.$.timelineViewCells.innerHTML = "", e.$.taskTimelineCellsContainer.innerHTML = "", e.$.timelineConnectionsContainer.innerHTML = "", e.$.timelineTasksContainer.innerHTML = "", e.$.taskIndicatorsContainer.innerHTML = "", e.$.timelineContent.style.height = "", delete e._hoveredItem, e.$.taskTable.dataSource = [], e._closeTooltip(), e.closeWindow(), e._refresh() } clearResources() { const e = this; e._unselectAll("resource"), e._resources = [], e.$.resourceTable && (e.$.resourceTable.dataSource = []), e.$.resourceTimelineCellsContainer.innerHTML = "", e._tasks.forEach((t => { t.resources = [], e._refreshTableColumnsData(t, ["resources"]) })), e._refreshTimeline(), e._createResourceTimeline() } createConnection() { const e = this, t = e._tasks; let i, n = Array.from(arguments).filter((e => void 0 !== e)); if (!e.isCompleted || 0 === t.length) return; if (i = 1 === n.length ? (n[0] + "").split("-") : n, !e._getValidConnectionId(i[0], i[1], i[2], "createConnection")) return; const a = parseInt(i[3]); e._connectTask([i[0], i[1], i[2], isNaN(a) ? 0 : a]), e._recycleConnections(), e.$.fireEvent("itemInsert", { type: "connection", item: { source: i[0], target: i[1], type: i[2], lag: a } }) } collapse(e) { this._handleCollapseExpandMethods(e, "collapse") } expand(e) { this._handleCollapseExpandMethods(e, "expand") } exportData(e, t) { const i = this; if (!JQX.Utilities.DataExporter) return void i.error(i.localize("missingReference", { elementType: i.nodeName.toLowerCase(), methodName: "exportData", file: "jqx.export.js" })); try { new JSZip } catch (e) { return void i.error(i.localize("missingReference", { elementType: i.nodeName.toLowerCase(), methodName: "exportData", file: "jszip.min.js" })) } if ("pdf" === e & !window.pdfMake) return void i.error(i.localize("missingReference", { elementType: i.nodeName.toLowerCase(), methodName: "exportData", file: "pdfMake.min.js" })); const n = "task" === i.dataExport.itemType ? i.$.taskTable : i.$.resourceTable; return n ? n.exportData(e, i.dataExport.fileName, i.dataExport.exportFiltered, t) : void 0 } print() { const e = this, t = e.dataExport.fileName; e.dataExport.fileName = null; const i = e.exportData("html"), n = window.open("", "", "width=800,height=500"), a = n.document.open(), s = '<!DOCTYPE html><html><head><meta charset="utf-8" /><title>' + t + "</title></head><body>" + i + "</body></html>"; try { a.write(s), a.close(), setTimeout((function () { n.print(), n.close() }), 100) } catch (e) { } e.dataExport.fileName = t } getConnectionDetails(e) { const t = this; if ("string" != typeof e) return; const i = t._getConnectionObjById(e); if (!i) return; const n = i.startTask, a = i.endTask, s = { startTask: t._cloneObject(i.startTask), endTask: t._cloneObject(i.endTask), startTaskId: "string" == typeof n.id || "number" == typeof n.id ? n.id : n.$.id, endTaskId: "string" == typeof a.id || "number" == typeof a.id ? a.id : a.$.id, type: i.type }; return void 0 !== i.lag && (s.lag = i.lag), s } getConnections() { const e = this; return e._connections.map((t => { const i = t.startTask, n = t.endTask; return { id: t.startIndex + "-" + t.endIndex + "-" + t.type, startTask: e._cloneObject(i), endTask: e._cloneObject(n), startIndex: t.startIndex, startTaskId: "string" == typeof i.id || "number" == typeof i.id ? i.id : i.$.id, endTaskId: "string" == typeof n.id || "number" == typeof n.id ? n.id : n.$.id, endIndex: t.endIndex, type: t.type, lag: t.lag } })) } getState() { const e = this, t = e._getTasksJSON(!0) || []; return { tasks: JSON.parse(JSON.stringify(t)), selectedTaskIds: e.selectedTaskIds.slice(0), resources: JSON.parse(JSON.stringify(e._resources.slice(0))), scrollLeft: e.scrollLeft, scrollTop: e.scrollTop } } get tasks() { return this.isReady ? this.getTasks() : [] } get resources() { return this.isReady ? this.getResources() : [] } getTask(e) { const t = this, i = t._getValidItemAndIndex(e); if (i.item) return t._cloneObject(i.item) } getTasks() { const e = this, t = e._tasks; return e.isReady && t && t.length ? t.map((t => e._cloneObject(t))) : [] } getResource(e) { const t = this, i = t._getValidItemAndIndex(e, "resource"); if (i.item) return t._cloneObject(i.item) } getResources() { const e = this, t = e._resources; return e.isReady && t && t.length ? t.map((t => e._cloneObject(t))) : [] } getItemPath(e) { if (!e || void 0 === e.type) return; const t = "string" == typeof e.type ? "task" : "resource", i = this._getValidItemAndIndex(e, t); return i.item ? i.item.$.id : void 0 } getTaskIndex(e) { const t = this; return "string" == typeof e ? t._getTaskIndexById(e) : t._getItemIndex(e, "task") } getTaskProject(e) { const t = this; if ((e = t._tasks[t._getItemIndex(e, "task")]) && e.$ && e.$.project) return t._cloneObject(e.$.project) } getTaskConnections(e) { const t = this._getValidItemAndIndex(e, "task"); return t && t.item ? this._getTaskConnections(t.item).taskConnections.map((e => ({ target: e.endIndex, type: e.type, lag: e.lag }))) : [] } getResourceIndex(e) { return this._getItemIndex(e, "resource") } getResourceTasks(e) { const t = this._getValidItemAndIndex(e, "resource"); if (e = t ? t.item : void 0) return this._getTasksAssigned(e) } getSelectedIds() { const e = this, t = e.selectedTaskIds, i = e.selectedResourceIds; return e.disableSelection || !t.length && !i.length ? null : { task: t.slice(), resources: i.slice() } } getSelectedTasks() { return this._getSelectedItems("task") } getSelectedResources() { return this._getSelectedItems("resource") } getWorkingHours() { const e = this.nonworkingHours; let t = []; for (let i = 0, n = 23; i < n; i += 1)e.indexOf(i) < 0 && t.push(i); return t } isWorkingDay(e) { return e = new Date(e), !isNaN(e.getTime()) && this.nonworkingDays.indexOf(e.getDay()) < 0 } clearState() { const e = this; e.id ? window.localStorage.removeItem("jqxGanttChart" + e.id) : e.warn(e.localize("noId")) } loadState(e) { const t = this; if (!e) { if (!t.id) return; e = JSON.parse(window.localStorage.getItem("jqxGanttChart" + t.id)) } if (!e) return; let i = JSON.stringify(e.tasks), n = JSON.stringify(e.selectedTaskIds), a = JSON.stringify(e.resources); if (i && (i = JSON.parse(i)), n && (n = JSON.parse(n)), a && (a = JSON.parse(a)), t._noChangeEvent = !0, Array.isArray(i) && (t._createTasks(i), t.set("dataSource", i)), Array.isArray(a)) { let e = a; for (let i = 0; i < e.length; i++) { const e = a[i]; let n = t._resources.find((t => t.id && t.id.toString() === e.id.toString())) || {}; t._setResource(n, e), Object.values(n).length && !t._resources.includes(n) && t._resources.push(n) } t._refreshItemIds("resource") } "number" == typeof e.scrollLeft && (t.scrollLeft = e.scrollLeft), "number" == typeof e.scrollTop && (t.scrollTop = e.scrollTop), t._setTable(t.$.taskTable), t._createTimeline(), t._createResourceTimeline(), Array.isArray(n) && (t.$.taskTable.selected = t._getSelection("task", n)), delete t._noChangeEvent } saveState() { const e = this; e.id ? window.localStorage.setItem("jqxGanttChart" + e.id, JSON.stringify(e.getState())) : e.warn(e.localize("noId")) } insertTask(e, t, i) { const n = this; if ("object" != typeof e) return void n.error(n.localize("incorrectArgument", { elementType: n.nodeName.toLowerCase(), methodName: "insertTask", argumentName: "newTask" })); const a = n._tasks; if (a.indexOf(e) > -1) return void n.error(n.localize("alreadyExists", { elementType: n.nodeName.toLowerCase(), methodName: "insertTask" })); const s = n._createTasks([e], !0); if (!a) return; let r, o, l; const d = n._getSelection("task", n.selectedTaskIds); if ("string" == typeof i && i.indexOf(!1)) { const e = i.split("."); i = parseInt(e.slice(-1)), null == t && (t = e.slice(0, -1).join(".")) } if ("string" == typeof t ? (r = a.find((e => e.id && e.id.toString() === t)), r || (r = n._getItemByTableId("task", t))) : "number" == typeof t && (r = a[t]), r) { if ("project" !== r.type) return void n.error(n.localize("notAProject", { elementType: n.nodeName.toLowerCase(), argumentName: "project", methodName: "insertTask" })); s[0].$.project = r } return n._synchronizeProjectVisibility(s[0].$.project, s[0]), n._insertTasks(s, r, i), n._refreshItemIds(), n._refreshConnectionIds(), n._isUpdating ? (n._isUpdating.type.task = !0, void (n._isUpdating.type.resource = !0)) : (n._selected && n._selected.task && n._setSelection("task", l = n._selected.task.map((e => e.$.id))), n._refreshTableDataSource(), n._refreshTimeline(), l && d.toString() !== l.toString() && (n.$.taskTable.selected = l.slice(0)), n._refreshTaskResources(o), n._ensureVisible(o), n.$.fireEvent("itemInsert", { type: "task", item: n._cloneObject(s[0]) }), s[0].id || s[0].$.id + "") } openWindow(e) { const t = this; if (t.disableWindowEditor) return; if ("string" == typeof e) { if (e.indexOf(".") > -1) { const i = t._getVCellById("task", e), n = i ? i.task : void 0; return void (n && t._openPopupWindow(n)) } if (e.indexOf("-") > -1) { let e = (arguments[0] + "").split("-"); if (e = t._getValidConnectionId(e[0], e[1], e[2], "openEditor"), e) return void t._openPopupWindow(e) } } const i = t._getValidItemAndIndex(e); i && t._openPopupWindow(i.item) } closeWindow() { const e = this, t = ["confirm", "task", "connection"]; for (let i = 0; i < t.length; i++) { const n = e.$[t[i] + "PopupWindow"]; n && (n.close(), delete n._target) } } updateTask(e, t) { const i = this, n = i._getValidItemAndIndex(e), a = n ? n.item : void 0; "object" == typeof a ? "object" == typeof t ? i._updateTask(a, t) : i.error(i.localize("incorrectArgument", { elementType: i.nodeName.toLowerCase(), methodName: "updateTask", argumentName: "taskDetails" })) : i.error(i.localize("notExisting", { elementType: i.nodeName.toLowerCase(), methodName: "updateTask", argumentName: "newTask" })) } removeTask(e) { const t = this, i = t._tasks, n = t._getValidItemAndIndex(e), a = n ? n.item : void 0; i && i.length && ("object" == typeof a ? t._removeTask(a) : t.error(t.localize("notExisting", { elementType: t.nodeName.toLowerCase(), methodName: "removeTask", argumentName: "index" }))) } setWorkTime(e) { this._setWorkTime(e, (function (e, t) { for (let i = 0, n = e.length; i < n; i += 1) { const n = parseInt(e[i]), a = t.indexOf(n); a > -1 && t.splice(a, 1) } return t })) } selectTask(e) { this._handleItemSelection(e, "task") } selectResource(e) { const t = this; t.$.mainSplitter.contains(t.$.resourceTable) && t._handleItemSelection(e, "resource") } sort(e) { const t = this; if ("none" === t.sortMode) return; Array.isArray(e) || (e = "object" == typeof e ? [e] : []); const i = t.taskColumns, n = t.resourceColumns, a = t.$.taskTable, s = t.$.resourceTable; for (let t = 0; t < e.length; t++) { const r = e[t], o = "desc" === r.sortOrder ? "desc" : "asc", [l, d] = "resource" === r.type || n.includes(r) ? [s, n] : [a, i], c = d.find((e => r.value && e.value === r.value)); c && l.sortBy(c.value, o) } } unselectTask(e) { this._handleItemSelection(e, "task", !0) } unselectResource(e) { const t = this; t.$.mainSplitter.contains(t.$.resourceTable) && t._handleItemSelection(e, "resource", !0) } unsetWorkTime(e) { this._setWorkTime(e, (function (e, t) { for (let i = 0, n = e.length; i < n; i += 1) { const n = parseInt(e[i]); t.indexOf(n) < 0 && t.push(n) } return t }), !0) } hideTooltip() { this._closeTooltip() } showTooltip(e, t) { this._openTooltip(e, void 0, t) } _getSelectedItems(e = "task") { const t = this, i = t[`_${e}s`], n = t._getSelection(e, "task" === e ? t.selectedTaskIds : t.selectedResourceIds); if (!n.length) return []; let a = []; for (let e = 0, s = i.length; e < s; e += 1) { const s = i[e]; n.indexOf(s.$.id) > -1 && a.push(t._cloneObject(s)) } return a } _getTasksAssigned(e) { const t = this, i = t._tasks || []; let n = []; for (let a = 0; a < i.length; a++) { const s = i[a]; !s.disableResources && s.resources.find((t => t === e.id)) && n.push(t._cloneObject(s)) } return n } _getItemIndex(e, t) { t || (t = "task"); const i = this[`_${t}s`]; if (e instanceof HTMLElement && e.classList.contains("jqx-timeline-task")) return i.indexOf(e._cellObj[`_${t}`]); const n = "resource" === t ? ["id", "label", "value", "progress"] : ["id", "label", "type", "class", "dateStart", "dateEnd", "resources", "connections"]; if ("object" == typeof e) for (let t = 0; t < i.length; t++)if (n.every((n => Array.isArray(e[n]) ? JSON.stringify(e[n]) === JSON.stringify(i[t][n]) : n.indexOf("date") > -1 ? new Date(e[n]).getTime() === new Date(i[t][n]).getTime() : e[n] === i[t][n]))) return i.indexOf(i[t]); return -1 } _handleItemSelection(e, t = "task", i) { const n = this, a = n._getValidItemAndIndex(e, t); if (a.item) { const s = a.item, r = n._getSelection(t, "task" === t ? n.selectedTaskIds : n.selectedResourceIds); if (e = s.$.id, i) { const i = r.indexOf(e); i > -1 && (r.splice(i, 1), n.$[`${t}Table`].selected = r) } else r.indexOf(e) < 0 && (r.push(e), n.$[`${t}Table`].selected = r); return "string" == typeof s.id || "number" == typeof s.id ? s.id : s.$.id } } _refreshAfterWorkingTimeChange() { const e = this; if (e.adjustToNonworkingTime) for (let t = 0; t < e._tasks.length; t++) { const i = e._tasks[t], n = i.$.project; e._validateTaskDates(i, n), e._synchronizeProjectDates(i, n), e._refreshTableColumnsData(i, ["dateEnd", "duration"]) } e._refreshTimeline() } _refreshItemIds(e = "task") { const t = this[`_${e}s`]; if (!t) return; let i = {}, n = 0; for (let e = 0, a = t.length; e < a; e += 1) { const a = t[e], s = a.$.project; if (void 0 !== s) { const e = s.$.id; i[e] || (i[e] = 0), a.$.id = e + "." + i[e], i[e]++ } else a.$.id = n + "", n++ } } _refreshConnectionIds() { const e = this._tasks, t = this._connections; if (t && t.length) for (let i = 0, n = t.length; i < n; i += 1) { const a = t[i], s = e.indexOf(a.startTask), r = e.indexOf(a.endTask); (s < 0 || r < 0) && (t.splice(i, 1), n--), a.startIndex = s, a.endIndex = r } } _refreshSelectedItems(e = "task", t) { const i = this, n = i[`_${e}s`]; if (n && (!t && i._selected && i._selected[e] && (t = i._selected[e]), t)) { for (let e = 0, i = t.length; e < i; e += 1) { const a = t[e]; (n.indexOf(a) < 0 || a.hidden) && (t.splice(e, 1), e -= 1, i--) } i._setSelection(e, t.map((e => e.$.id))) } } _resetFromAction(e = "task", t = "clearSort") { const i = this; function n() { i.$.taskTable[t](), i._createTimelineContent(), i._recycleTimelineTasks() } function a() { const e = i.$.resourceTable; e && (e[t](), i._createResourceTimelineVCells(), i._recycleResourceContent()) } "resource" === e ? a() : "task" === e ? n() : (n(), a()) } _setWorkTime(e, t, i) { const n = this; if ("object" != typeof e) return; let a, s = e.days, r = e.hours; null != s && (Array.isArray(s) || (s = [s]), s = n._nonworkingDayValidator(void 0, s), a = t(s, i ? n.nonworkingDays : [0, 1, 2, 3, 4, 5, 6]), n.set("nonworkingDays", 7 === a.length ? [] : a), n._refreshAfterWorkingTimeChange()), null != r && (Array.isArray(r) || (r = [r]), r = n._nonworkingTimeValidator(void 0, r), a = t(r, i ? n.nonworkingHours : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]), n.set("nonworkingHours", 24 === a.length ? [] : a), n._refreshAfterWorkingTimeChange()) } _getValidConnectionId(e, t, i, n) { const a = this, s = a._tasks, r = 0 === n.indexOf("_"); let o; if ("string" == typeof e && (o = a._getTaskIndexById(e), o >= 0 && (e = o)), "string" == typeof t && (o = a._getTaskIndexById(t), o >= 0 && (t = o)), e = parseInt(e), t = parseInt(t), i = parseInt(i), isNaN(e) || isNaN(t) || e === t) r || a.error(a.localize("incorrectArgument", { elementType: a.nodeName.toLowerCase(), methodName: n, argumentName: "taskIndex" })); else if (e >= s.length || e < 0 || t >= s.length || t < 0) r || a.error(a.localize("outOfBounds", { elementType: a.nodeName.toLowerCase(), methodName: n, argumentName: "taskIndex" })); else { if (!(isNaN(i) || i < 0 || i > 3)) return r ? [e, t, i] : e + "-" + t + "-" + i; r || a.error(a.localize("incorrectArgument", { elementType: a.nodeName.toLowerCase(), methodName: n, argumentName: "connectionType" })) } } _autoSchedule(e) { const t = this, i = t._tasks; if (t.autoSchedule) { e ? Array.isArray(e) || (e = [e]) : e = i; for (let i = 0; i < e.length; i++) { const n = e[i]; "project" === n.type && n.synchronized || (n.minDateStart = n.minDateEnd = void 0, t._autoScheduleTasks(n)) } t._isUpdateRequired && (t._createTimelineCells(), t._recycleTimelineTasks(!0), delete t._isUpdateRequired) } } _getTaskConnections(e) { const t = this._tasks, i = this._connections; let n = [], a = []; if (t && t.length && i && i.length) { const s = t.indexOf(e); for (let e = 0; e < i.length; e += 1) { const t = i[e]; t.startIndex === s ? n.push(t) : t.endIndex === s && a.push(t) } } return { taskConnections: n, connectedTasks: a } } _autoScheduleTasks(e) { const t = this, i = t._tasks, n = t._getTaskConnections(e), a = n.taskConnections, s = n.connectedTasks; let r, o, l; for (let n = 0; n < a.length; n++)t._isAutoScheduled(e, i[a[n].endIndex], !0); for (let n = 0; n < s.length; n++) { const a = s[n], d = i[a.startIndex], c = a.type, m = a.lag, u = e.$.project; d && "project" === d.type && d.synchronized || (0 === c || 1 === c ? (l = new Date((0 === c ? d.dateStart : d.dateEnd).getTime() + m), e.minDateStart = new Date(e.minDateStart ? Math.max(e.minDateStart.getTime(), l.getTime()) : l), o = e.minDateStart.getTime() - e.dateStart.getTime(), r = new Date(e.dateEnd.getTime() + (t.autoScheduleStrictMode ? o : Math.max(0, o))), r.getTime() !== e.dateEnd.getTime() && (e.dateEnd = r, t._isUpdateRequired = !0), t.autoScheduleStrictMode && e.minDateStart.getTime() !== e.dateStart.getTime() && (e.dateStart = e.minDateStart, t._isUpdateRequired = !0)) : (l = new Date((2 === c ? d.dateEnd : d.dateStart).getTime() + m), e.minDateEnd = new Date(e.minDateEnd ? Math.min(e.minDateEnd.getTime(), l.getTime()) : l), o = e.minDateEnd.getTime() - e.dateEnd.getTime(), r = new Date(e.dateStart.getTime() + (t.autoScheduleStrictMode ? o : Math.max(0, o))), r.getTime() !== e.dateStart.getTime() && (e.dateStart = r, t._isUpdateRequired = !0), t.autoScheduleStrictMode && e.minDateEnd.getTime() !== e.dateEnd.getTime() && (e.dateEnd = e.minDateEnd, t._isUpdateRequired = !0)), t._validateTaskDates(e, u), t._synchronizeProjectDates(e, u)) } for (let e = 0; e < a.length; e++) { const n = i[a[e].endIndex]; !n || "project" === n.type && n.synchronized || (n.minDateStart = n.minDateEnd = void 0, t._autoScheduleTasks(n)) } } _autoScheduleRestore(e, t) { const i = this._tasks; e || (e = i), Array.isArray(e) || (e = [e]); for (let n = 0; n < e.length; n++) { const a = e[n]; i.indexOf(e[n]) > -1 && (t ? 0 === t || 1 === t ? a.minDateStart = void 0 : a.minDateEnd = void 0 : a.minDateStart = a.minDateEnd = void 0) } } _autoScroll(e) { const t = this, i = t.hasAttribute("dragged"), n = t.hasAttribute("resized"); function a(a, s) { if (!t._dragDetails) return clearInterval(t._scrollInterval), t._scrollInterval = void 0, void delete t._autoScrolling; t._autoScrolling = !0, s ? i || (t.scrollTop -= t.autoScrollStep * a, t._dragDetails.coordinates.y += t.autoScrollStep * a) : (t.scrollLeft -= (t.rightToLeft ? -1 : 1) * t.autoScrollStep * a, t._dragDetails.coordinates.x += t.autoScrollStep * a), i ? t._handleTaskBarDrag(e) : n && t._handleTaskBarResize(e) } if (t.disableAutoScroll || !e || !i && !n && !t.hasAttribute("connecting-task")) return; const s = t.$.timeline.getBoundingClientRect(); t._scrollInterval && clearInterval(t._scrollInterval), t._scrollInterval = setInterval((function () { (t.scrollLeft || t.rightToLeft) && e.clientX <= s.left + 20 ? a(1) : t.scrollLeft !== (t.rightToLeft ? 0 : t.scrollWidth) && e.clientX >= s.left + s.width - 20 ? a(-1) : t.scrollTop && e.clientY <= s.top + 20 ? a(1, !0) : t.scrollTop !== t.scrollHeight && e.clientY >= s.top + s.height - 20 ? a(-1, !0) : (clearInterval(t._scrollInterval), t._scrollInterval = void 0, delete t._autoScrolling) }), 1) } _checkTaskBarResizability(e) { const t = this; let i = e.originalEvent.target; t.shadowRoot && i === t && (i = e.originalEvent.composedPath()[0]); const n = t.$.timeline; if (!i.closest) return void n.removeAttribute("task-bar-hovered"); let a, s = i.closest(".jqx-timeline-row") || i.closest(".jqx-timeline-task"); if (t.disabled || t.disableTaskResize || !s || !n.contains(s)) return void n.removeAttribute("task-bar-hovered"); const r = s._cellObj.task, o = t._getTaskDOMIndex(r); if (s.classList.contains("jqx-timeline-row") ? a = t.$.timelineTasksContainer.children[o] : s.classList.contains("jqx-timeline-task") && (a = s, s = t.$.taskTimelineCellsContainer.children[o]), !a || a.classList.contains("milestone") || r.synchronized || r.disableResize) return; const l = i.closest(".jqx-task-segment"), d = r.segments ? r.segments.length : 1; if (i.classList && i.classList.contains("jqx-task-connection-point") || l && (d > 1 && t.disableSegmentResize || l._segmentObj && l._segmentObj.disableResize)) return void n.removeAttribute("task-bar-hovered"); const c = e.pageX - window.pageXOffset, m = "visible" === t.resizeHandlesVisibility || t._isMobile ? 20 : 5, u = (l || a).getBoundingClientRect(), h = s.getBoundingClientRect(), g = Math.min(m, c - h.left), f = Math.min(m, h.left + h.width - c); Math.round(u.left) + g >= c && Math.round(u.left) - g <= c ? n.setAttribute("task-bar-hovered", "left") : Math.round(u.left + u.width) + f >= c && Math.round(u.left + u.width) - f <= c ? n.setAttribute("task-bar-hovered", "right") : n.removeAttribute("task-bar-hovered") } _onShadowDomLoaded(e, t, i) { requestAnimationFrame((function n() { const a = (e.shadowRoot || e.getRootNode()).querySelectorAll("link"); for (let e = 0; e < a.length; e++)if (-1 !== a[e].href.indexOf(t)) return void i(); requestAnimationFrame(n) })) } _getConnectionObjById(e) { const t = this._connections; if (!e || !t || !t.length) return; const i = e.split("-"), n = parseInt(i[0]), a = parseInt(i[1]), s = parseInt(i[2]); for (let e = 0, i = t.length; e < i; e += 1) { const i = t[e]; if (i.startIndex === n && i.endIndex === a && i.type === s) return i } } _positionWindow() { const e = this, t = e.getShadowRootOrBody(), i = [e.$.taskPopupWindow, e.$.connectionPopupWindow, e.$.confirmPopupWindow]; for (let n = 0; n < i.length; n++) { const a = i[n]; if (!a || !t.contains(a)) continue; const s = e.getBoundingClientRect(); a.opened || (a.style.left = a.style.top = ""), e._isMobile ? (a.setAttribute("mobile", ""), a.style.left = s.left + window.pageXOffset + "px", a.style.top = s.top + window.pageYOffset + "px", a.style.width = s.width + "px", a.style.height = s.height + "px") : (a.style.left = Math.max(s.left + window.pageXOffset, s.left + window.pageXOffset + s.width / 2 - a.offsetWidth / 2) + "px", a.style.top = Math.max(s.top + window.pageYOffset, s.top + window.pageYOffset + s.height / 2 - a.offsetHeight / 2) + "px") } } _openPopupWindow(e, t) { const i = this; function n() { function t() { i._positionWindow(), s.opened ? (s.bringToFront(), s._onOpenCallback ? s._onOpenCallback() : s._handleActiveState()) : s.open() } if (i.popupWindowCustomizationFunction ? i.popupWindowCustomizationFunction(s, a, "connection" === a ? e.startIndex + "-" + e.endIndex + "-" + e.type : i._cloneObject(e)) : s._onOpenCallback = () => { const e = (s.shadowRoot || s).querySelectorAll(".jqx-gantt-chart-popup-window-editor .jqx-input, .jqx-popup-window-button"); (e[0] || e[1] || s).focus({ preventScroll: !0 }), s._handleActiveState() }, i._setPopupWindowTemplate("header", a, e), i._setPopupWindowTemplate("footer", a, e), i._setPopupWindowTemplate("content", a, e), !i._popupWindow[a + "PopupWindow"]) { const e = i["$" + a + "PopupWindow"]; e.unlisten("transitionend"), e.unlisten("open"), e.unlisten("close"), e.unlisten("closing"), e.unlisten("click"), e.unlisten("change"), e.listen("transitionend", i._popupWindowTransitionendHandler.bind(i)), e.listen("open", i._popupWindowOpenHandler.bind(i)), e.listen("close", i._popupWindowCloseHandler.bind(i)), e.listen("closing", i._popupWindowClosingHandler.bind(i)), e.listen("click", i._popupWindowClickHandler.bind(i)), e.listen("change", i._popupWindowChangeHandler.bind(i)) } s.shadowRoot ? (s.importStyle(JQX.Utilities.Core.getScriptLocation() + JQX.StyleBaseUrl.replace("/scoped/", "/jqx.textbox.css")), i._onShadowDomLoaded(s, "jqx.window.css", t)) : t(); const n = (i.getAttribute("aria-owns") || "") + " " + s.id; i.setAttribute("aria-owns", n.trim()), i._popupWindow[a + "PopupWindow"] = s } if (e && e.classList) if (e.classList.contains("jqx-task-connection")) e = i._getConnectionObjById(e.getAttribute("connection-id")); else if ("TR" === e.nodeType) { const t = e ? "task" : "resource", n = i._getVCellById(t, e.getAttribute("row-id")); e = n ? n[t] : void 0 } else e = e._cellObj.task; if (!e || e.isGroup) return; const a = t ? "confirm" : "string" == typeof e.type ? "task" : "connection", s = i._createPopupWindow(a); !t && i.$.fireEvent("opening", { target: s, type: a }).defaultPrevented || (i._closeTooltip(), s._target = e, i._popupWindow || (i._popupWindow = {}), s.parentElement || i.getShadowRootOrBody().appendChild(s), s.isCompleted ? n() : s.whenReady((() => n()))) } _createPopupWindow(e) { const t = this, i = e + "PopupWindow"; if (t.$[i]) return t.$[i]; const n = document.createElement("jqx-window"); return n.classList.add("jqx-" + e + "-popup-window"), n.classList.add("jqx-gantt-chart-popup-window"), n.setAttribute("jqx-id", i), t.$[i] = n, t["$" + i] = JQX.Utilities.Extend(n), n.rightToLeft = t.rightToLeft, n.theme = t.theme, n.animation = t.animation, n.disableSnap = !0, n.headerButtons = ["close"], n } _popupWindowOpenHandler(e) { const t = this, i = t["$" + e.target.getAttribute("jqx-id")]; if (i) { const n = e.target.classList.contains("jqx-confirm-popup-window") ? "confirm" : e.target.classList.contains("jqx-connection-popup-window") ? "connection" : "task"; t._handleModal(!0), t.$.fireEvent(e.type, Object.assign({ type: n, target: e.target }, e.detail)), i.unlisten("open") } } _popupWindowClosingHandler(e) { const t = this["$" + e.target.getAttribute("jqx-id")]; if (!t) return; const i = e.target.classList.contains("jqx-confirm-popup-window") ? "confirm" : e.target.classList.contains("jqx-connection-popup-window") ? "connection" : "task"; this.$.fireEvent(e.type, { target: e.target, type: i }).defaultPrevented ? e.preventDefault() : t.unlisten(e.type) } _popupWindowCloseHandler(e) { const t = this, i = e.target.getAttribute("jqx-id"), n = t["$" + i]; if (n) { const a = e.target.classList.contains("jqx-confirm-popup-window") ? "confirm" : e.target.classList.contains("jqx-connection-popup-window") ? "connection" : "task"; if (t._handleModal(), t.$.fireEvent(e.type, Object.assign({ type: a, target: e.target }, e.detail)), n.unlisten("close"), n.unlisten("click"), t.hasAttribute("aria-owns")) { const e = t.getAttribute("aria-owns").replace(t._popupWindow[i].id, "").trim(); e ? t.setAttribute("aria-owns", e) : t.removeAttribute("aria-owns") } delete t._popupWindow[i]; const s = Object.keys(t._popupWindow); 1 === s.length && t._popupWindow.confirmPopupWindow && (delete t._popupWindow.confirmPopupWindow._target, t._popupWindow.confirmPopupWindow.close()), s.length ? requestAnimationFrame((() => { const e = t._popupWindow[s[s.length - 1]]; e && e.focus() })) : t.keyboardNavigation && t.$.taskTable.focus({ preventScroll: !0 }) } } _popupWindowTransitionendHandler(e) { const t = this, i = e.target; i instanceof JQX.Window && !i.opened && "visibility" === e.propertyName && (t["$" + i.getAttribute("jqx-id")].unlisten("transitionend"), i.parentElement && i.parentElement.removeChild(i)) } _handleModal(e) { const t = this; let i = (t.shadowRoot || t).querySelector(".jqx-popup-window-modal"); e ? (i || (i = document.createElement("div"), i.classList.add("jqx-popup-window-modal")), i.parentElement || (t.$.container.appendChild(i), t.setAttribute("modal", ""))) : i && i.parentElement && Object.keys(t._popupWindow).length < 2 && (i.parentElement.removeChild(i), t.removeAttribute("modal")) } _findTaskEditor(e, t) { if (!e || !t) return; const i = t.children; for (let t = 0, n = i.length; t < n; t += 1) { const n = i[t]; if (n.getAttribute("value") === e) return n } } _createTaskEditor(e, t, i) { const n = this, a = e.value, s = t[e.value]; let r, o, l = i.find((e => e._label === a)); if (l) r = l.querySelector(".jqx-gantt-chart-label-container"), o = l.lastElementChild; else { const t = "editorLabel" + Math.floor(65536 * (1 + Math.random())).toString(16).substring(1); if (r = document.createElement("div"), r.classList.add("jqx-gantt-chart-label-container"), r.innerHTML = `<label id="${t}"></label>`, "deadline" === a) { const e = document.createElement("span"); e.classList.add("jqx-popup-window-editor-toggle"), r.appendChild(e) } if (l = document.createElement("div"), l.classList.add("jqx-gantt-chart-popup-window-editor"), l.setAttribute("value", a || ""), l._label = a, e.customEditor) return l.appendChild(e.customEditor(a, s)), l; if ("number" == typeof s || "string" == typeof s) o = document.createElement("input"), o.classList.add("jqx-input"); else if (s instanceof Date || "deadline" === a) JQX.DateTimePicker ? (o = document.createElement("jqx-date-time-picker"), o.locale = n.locale, o.dropDownAppendTo = "body", o.calendarButton = !0, o.dropDownDisplayMode = "auto", o.enableMouseWheelAction = !0, o.formatString = "yyyy-MMM-dd HH:mm:ss") : (o = document.createElement("input"), o.type = "datetime-local"); else if (Array.isArray(s)) if (JQX.DropDownList) o = document.createElement("jqx-drop-down-list"), o.virtualized = !0, o.dropDownAppendTo = "body", o.selectionMode = "zeroOrMany"; else { o = document.createElement("input"), o.classList.add("jqx-input"); const e = document.createElement("datalist"); e.id = "resourceList", o.setAttribute("list", e.id), l.appendChild(e) } o && o.setAttribute("aria-labelledby", t) } if (!l.parentElement) return r && l.appendChild(r), o && l.appendChild(o), l; n._setPopupWindowEditors(e, t, l) } _setAriaControls() { this.setAttribute("role", "treegrid") } _setPopupWindowEditors(e, t, i) { const n = this, a = i.querySelector("label"), s = i.querySelector(".jqx-popup-window-editor-toggle"), r = i.lastElementChild, o = e.value + "", l = o.split(/(?=[A-Z])/).join(" "), d = t[o]; if (e.customEditor) e.setCustomEditorValue && e.setCustomEditorValue(i, l, d); else { if (a.innerHTML = n.localize(e.value) || l.charAt(0).toUpperCase() + l.slice(1), s) if ("deadline" === o) { const e = null == d ? "add" : "remove"; r.classList[e]("jqx-hidden"), s.textContent = n.localize(e) } else s.remove(); if ("number" == typeof d) r.value = parseFloat(d); else if ("string" == typeof d) r.value = d; else if (d instanceof Date) r.value = new Date(d); else if (Array.isArray(d)) { const e = n._resources; if (r.placeholder = n.localize("unassigned"), JQX.DropDownList && r instanceof JQX.DropDownList) r.dataSource = e.map((e => ({ label: e.label, value: e.id }))), r.selectedValues = t.disableResources ? [] : t.resources.map((e => e.toString())); else { let n = i.querySelector("datalist"), a = document.createDocumentFragment(); n.innerHTML = ""; for (let t = 0; t < e.length; t++) { const i = e[t], n = document.createElement("option"); n.value = i.id, n.innerHTML = i.label, a.appendChild(n) } r.value = t.resources.toString(), n.appendChild(a) } } "project" === t.type && t.synchronized && ["duration", "date"].indexOf(l.toLowerCase()) > -1 || "resources" === l && t.disableResources ? r.disabled = !0 : r.disabled = !!e.disableEdit, r.rightToLeft = n.rightToLeft, r.animation = n.animation, r.theme = n.theme } } _setupPopupWindowTabs(e, t) { const i = this, n = i.popupWindowTabs, a = "milestone" === t.type, s = [{ label: i.localize("generalTab"), value: "general" }, { label: i.localize("dependencyTab"), value: "dependency" }, { label: i.localize("segmentsTab"), value: "segments" }]; let r = e.querySelector(".jqx-gantt-chart-popup-window-tabs"); r || (r = document.createElement("jqx-tabs"), r.classList.add("jqx-gantt-chart-popup-window-tabs"), e.clear(), e.appendChild(r)), r.animation = i.animation, r.rightToLeft = i.rightToLeft, r.theme = i.theme; const o = r.getTabs().slice(0); for (let e = 0, t = s.length; e < t; e += 1) { const t = s[e], i = t.value; let l = o[e]; n.indexOf(i) < 0 ? l && r.removeChild(l) : (l || (l = document.createElement("jqx-tab-item"), r.appendChild(l)), l.label = t.label, l.setAttribute("value", i || ""), l.disabled = a && "segments" === i) } return r } _setPopupWindowContent(e, t) { const i = this, n = i.$[e + "PopupWindow"], a = [].slice.call(n.querySelectorAll(".jqx-gantt-chart-popup-window-editor")); if (n.content && (!n.content.innerHTML || a.length)) if ("task" === e && t) { const e = i.taskColumns; let s = []; const r = i._setupPopupWindowTabs(n, t); 0 !== r.selectedIndex && (r.selectedIndex = 0); const o = r.getTabs()[0]; if ("general" !== o.getAttribute("value")) return void i._handleTabsContent(o, n); "string" == typeof o.content ? o.content = "" : o.content.innerHTML = ""; for (let n = 0; n < e.length; n++) { const r = e[n], l = r.value; if (void 0 === t[l] && "deadline" !== l || "overdue" === l) continue; let d = i._findTaskEditor(l, o); d || (d = i._createTaskEditor(r, t, a), d && o.appendChild(d)), d && (i._setPopupWindowEditors(r, t, d), s.push(d)) } for (let e = 0, t = a.length; e < t; e += 1) { const t = a[e]; s.indexOf(t) < 0 && t.remove() } t.id && n.setAttribute("aria-controls", t.id) } else if ("confirm" === e) { if (n.innerHTML = '<div class="jqx-gantt-chart-popup-window-editor">' + i.localize("confirm", { componentName: "The task" }) + "</div >", i._popupWindow) { const e = Object.keys(i._popupWindow); e.length && n.setAttribute("aria-controls", i._popupWindow[e[e.length - 1]].id) } } else { const e = t.startTask, a = t.endTask; n.innerHTML = '<div class="jqx-gantt-chart-popup-window-editor">' + i.localize("deleteLink") + "<b> " + e.label + " - " + a.label + "?</b></div>" } } _setPopupWindowTemplate(e, t, i) { const n = this, a = n.$[t + "PopupWindow"]; if ("content" !== e) { if (a[e + "Template"] || (a[e + "Template"] = n._createPopupWindowTemplate(e, t)), "header" === e && i && "string" == typeof i.type) { const e = (a.shadowRoot || a).querySelector(".jqx-popup-window-label"); e && (e.innerHTML = i.label) } else if ("footer" === e) { const e = (a.shadowRoot || a).querySelectorAll(".jqx-popup-window-button"); for (let i = 0; i < e.length; i++) { const a = e[i]; a.innerHTML = "task" === t ? '<span class="jqx-icon"></span>' : "", a.theme = n.theme, a.rightToLeft = n.rightToLeft, a.animation = n.animation, a.disabled = !1, a.classList.contains("ok") ? (a.innerHTML += n.localize("ok"), a.setAttribute("aria-label", "ok")) : a.classList.contains("cancel") ? (a.innerHTML += n.localize("cancel"), a.setAttribute("aria-label", "cancel")) : a.classList.contains("delete") && (a.innerHTML += n.localize("delete"), a.setAttribute("aria-label", "delete")); const s = a.querySelector(".jqx-ripple"); s && s.parentElement.removeChild(s) } } } else n._setPopupWindowContent(t, i) } _createPopupWindowTemplate(e, t) { const i = this, n = document.createElement("template"); if ("footer" === e) switch (t) { case "task": n.innerHTML = `<jqx-button class="jqx-popup-window-button ok primary"\n animation="${i.animation}" theme="${i.theme}" ${i.rightToLeft ? "right-to-left" : ""}>\n </jqx-button>\n <jqx-button class="jqx-popup-window-button cancel"\n animation="${i.animation}" theme="${i.theme}" ${i.rightToLeft ? "right-to-left" : ""}>\n </jqx-button>\n <jqx-button class="jqx-popup-window-button delete secondary"\n animation="${i.animation}" theme="${i.theme}" ${i.rightToLeft ? "right-to-left" : ""}>\n </jqx-button>`; break; case "connection": case "confirm": n.innerHTML = `<jqx-button class="jqx-popup-window-button ok primary"\n animation="${i.animation}" theme="${i.theme}" ${i.rightToLeft ? "right-to-left" : ""}>\n </jqx-button>\n <jqx-button class="jqx-popup-window-button cancel"\n animation="${i.animation}" theme="${i.theme}" ${i.rightToLeft ? "right-to-left" : ""}>\n </jqx-button>` } else "header" !== e || "task" !== t && "confirm" !== t || (n.innerHTML = '<span class="jqx-popup-window-label"></span>'); return n } _handleTabsContent(e, t) { const i = this, n = t._target; if (!e | !n) return; const a = e.getAttribute("value"); if ("general" === a) return; let s = e.querySelector(".jqx-gantt-popup-window-table"), r = e.querySelector(".jqx-gantt-window-table-buttons"), o = e.querySelector(".jqx-gantt-window-validation-message"); r || (r = document.createElement("div"), r.classList.add("jqx-gantt-window-table-buttons"), r.innerHTML = `<jqx-button class="jqx-gantt-chart-button" action="add">${i.localize("add")}</jqx-button>\n <jqx-button class="jqx-gantt-chart-button" disabled action="delete">${i.localize("delete")}</jqx-button>`, e.insertBefore(r, s)), s || (s = document.createElement("jqx-table"), s.classList.add("jqx-gantt-popup-window-table"), s.editing = !0, s.editMode = "row", s.keyboardNavigation = !0, s.wait = !0, s.hideSelectionColumn = !0, s.selection = !0, s.selectionMode = "one", s.columnMinWidth = "10px", s.addEventListener("rowEndEdit", (r => { const o = r.detail.row; switch (a) { case "dependency": { const e = i._tasks, t = o.name, a = e.indexOf(n), r = e.findIndex((e => e.$.id === t)); r > -1 && s.updateRow(o.$.id, { id: `${r}-${a}-${o.type}` }); break } case "segments": { const e = o.dateStart, t = o.dateEnd; e.getTime && t.getTime && s.updateRow(o.$.id, { duration: parseFloat(i._convertDuration(i.nonworkingDays.length > 0 || i.nonworkingHours.length > 0 ? i._getWorkingTime(e, t) : t.getTime() - e.getTime(), !0).toFixed(2)) }); break } }i._applyTableValidation(e, s, t), i._isPopupWindowTableModified = !0 })), e.innerHTML && (e.innerHTML = ""), e.appendChild(s)); const l = i._getTabsTableData(a, n); s.selected.length && (s.selected = []), s.dataSource = l.source, s.columns = l.columns, s.wait = !1, delete i._isPopupWindowTableModified, o || (o = document.createElement("label"), o.classList.add("jqx-gantt-window-validation-message"), e.appendChild(o)), o.textContent = "" } _applyTableValidation(e, t, i) { const n = this, a = e.getAttribute("value"), s = e.querySelector(".jqx-gantt-window-validation-message"), r = i.querySelector(".jqx-popup-window-button.ok"), o = t.dataSource, l = o.length; if (!s) return void (r && (r.disabled = !1)); if (!l) return s.textContent = "", void (r && (r.disabled = !1)); let d = ""; if ("segments" === a) if (l < 2) d = n.localize("segmentsCountValidation"); else { const e = i._target, t = e.dateStart.getTime(), a = e.dateEnd.getTime(); let s = {}; for (let e = 0; e < l; e += 1) { const i = o[e], r = i.label, l = i.dateStart.getTime(), c = i.dateEnd.getTime(); for (let e in s) { const t = s[e], a = t.timeStart, r = t.timeEnd, o = l <= a && c >= a; (o || l <= r && c >= r) && (d += n.localize("segmentConflictError", { dateConflict: o ? "dateStart" : "dateEnd", label: i.label, conflictLabel: t.label }) + "\r\n") } l > c ? d += n.localize("segmentStartError", { label: i.label }) + "\r\n" : l === c && (d += n.localize("segmentEndError", { label: i.label }) + "\r\n"), (l < t || c > a) && (d += n.localize("segmentRangeError", { label: i.label }) + "\r\n"), void 0 === s[e] && (s[e] = { label: r, timeStart: l, timeEnd: c }) } } else if ("dependency" === a) for (let e = 0; e < l; e += 1) { const t = o[e].id.split("-"); t[0] === t[1] && (d += n.localize("dependencyValidation") + "\r\n") } s.textContent = d, r && (r.disabled = d.length > 0) } _getTabsTableData(e, t) { const i = this; if ("dependency" === e) { const e = i._getTaskConnections(t).connectedTasks, n = { connectionTypes: [{ label: i.localize("startToStart"), value: 0 }, { label: i.localize("endToStart"), value: 1 }, { label: i.localize("endToEnd"), value: 2 }, { label: i.localize("startToEnd"), value: 3 }], tasks: (() => { const e = i._tasks; let n = []; for (let i = 0, a = e.length; i < a; i += 1) { const a = e[i]; a !== t && n.push({ value: a.$.id, label: a.label }) } return n })() }; return { source: new window.JQX.DataAdapter({ dataSource: e && e.length ? e.map((e => ({ id: e.startIndex + "-" + e.endIndex + "-" + e.type, name: e.startTask.$.id || "", type: e.type, lag: e.lag || 0 }))) : [], dataFields: ["id: any", "name: any", "type: number", "lag: number"] }), columns: [{ label: i.localize("id"), dataField: "id", dataType: "any", autoWidth: !1, allowEdit: !1 }, { label: i.localize("name"), dataField: "name", dataType: "any", width: "35%", autoWidth: !1, editor: i._getColumnEditorSetup("name", n), formatFunction: e => { const t = n.tasks.find((t => t.value === e.value)); t && (e.value = t.label) } }, { label: i.localize("type"), dataField: "type", dataType: "number", width: "25%", autoWidth: !1, editor: i._getColumnEditorSetup("type", n), formatFunction: e => { const t = n.connectionTypes.find((t => t.value === e.value)); t && (e.value = t.label) } }, { label: i.localize("lag"), dataField: "lag", dataType: "number", autoWidth: !1 }] } } if ("segments" === e) { const e = { task: t }; return { source: new window.JQX.DataAdapter({ dataSource: t.segments, dataFields: ["label: string", "dateStart: date", "dateEnd: date", "duration: number"] }), columns: [{ label: i.localize("name"), dataField: "label", dataType: "string", autoWidth: !1, width: "20%" }, { label: i.localize("dateStart"), dataField: "dateStart", dataType: "date", autoWidth: !1, editor: i._getColumnEditorSetup("dateStart", e), formatFunction: e => { e.value = i._formatDate(e.data.dateStart) } }, { label: i.localize("dateEnd"), dataField: "dateEnd", dataType: "date", autoWidth: !1, editor: i._getColumnEditorSetup("dateEnd", e), formatFunction: e => { e.value = i._formatDate(e.data.dateEnd) } }, { label: i.localize("duration"), dataField: "duration", dataType: "number", autoWidth: !1, width: "15%", allowEdit: !1 }] } } return { source: [], columns: [] } } _getColumnEditorSetup(e, t) { const i = this; switch (e) { case "dateStart": case "dateEnd": return { template: '<jqx-date-time-picker drop-down-append-to="body" wait></jqx-date-time-picker>', onInit: (e, n, a, s) => { const r = t.task; s || (s = new Date(r.dateStart)), a.rightToLeft = i.rightToLeft, a.animation = i.animation, a.theme = i.theme, a.min = r.dateStart, a.max = r.dateEnd, a.locale = i.locale, a.calendarButton = !0, a.dropDownDisplayMode = "auto", a.enableMouseWheelAction = !0, a.formatString = "yyyy-MMM-dd HH:mm:ss", a.value = new Date(Math.max(r.dateStart.getTime(), Math.min(r.dateEnd.getTime(), s.getTime()))), a.removeAttribute("wait") }, getValue: e => e.value.toDate() }; case "name": return { template: '<jqx-drop-down-list virtualized drop-down-append-to="body" wait></jqx-drop-down-list>', onInit: (e, n, a, s) => { a.rightToLeft = i.rightToLeft, a.animation = i.animation, a.theme = i.theme, a.dataSource = t.tasks, a.selectedValues = [s], a.removeAttribute("wait") }, getValue: e => e.selectedValues[0] }; case "type": return { template: "<jqx-input wait></jqx-input>", onInit: (e, n, a, s) => { const r = t.connectionTypes, o = r.find((e => e.value === s)); a.readonly = !0, a.rightToLeft = i.rightToLeft, a.animation = i.animation, a.theme = i.theme, a.dropDownButtonPosition = "right", a.dataSource = r, a.value = (o || r[0]).label + "", a.removeAttribute("wait") }, getValue: e => { if (e.selectedValues.length) return e.selectedValues[0]; const i = t.connectionTypes.find((t => t.label === e.value)); return i ? i.value : void 0 } } } } _popupWindowChangeHandler(e) { const t = this, i = e.target, n = i.closest("jqx-window") || (i.getRootNode() && i.getRootNode().host ? i.getRootNode().host : void 0); if (n._target) if (i.classList.contains("jqx-gantt-chart-popup-window-tabs")) { const a = n.querySelector(".jqx-popup-window-button.ok"); a && (a.disabled = !1), t._handleTabsContent(i.getTabs()[e.detail.index], n) } else if (i.classList.contains("jqx-gantt-popup-window-table")) { const e = i.closest("jqx-tab-item").querySelector('.jqx-gantt-chart-button[action="delete"]'); e && (e.disabled = 0 === i.selected.length) } } _popupWindowClickHandler(e) { const t = this; let i = (e.originalEvent || e).target; i.shadowRoot && (i = (e.originalEvent || e).composedPath()[0]); const n = i.closest("jqx-window") || (i.getRootNode() && i.getRootNode().host ? i.getRootNode().host : void 0), a = n._target; if (i.closest(".jqx-popup-window-button.cancel")) return t._popupWindow && t._popupWindow.confirmPopupWindow && n !== t._popupWindow.confirmPopupWindow && t._popupWindow.confirmPopupWindow.close(), n.close(), void delete n._target; if (i.closest(".jqx-popup-window-button.ok")) { if (n === t.$.connectionPopupWindow && "number" == typeof a.type) t._removeConnection(a.startIndex + "-" + a.endIndex + "-" + a.type); else if (n === t.$.confirmPopupWindow) { const e = a; void 0 !== e.$._resourceId ? t._removeResource(e) : t._removeTask(e), n.close(), t.$.taskPopupWindow && t.$.taskPopupWindow.close(), delete n._target } else { const e = n.shadowRoot || n, i = e.querySelectorAll(".jqx-gantt-chart-popup-window-editor"), s = a; let r = {}; for (let e = 0; e < i.length; e++) { const n = i[e]._label, a = t.taskColumns.find((e => e.value === n)); if (a.customEditor && a.getCustomEditorValue) r[n] = a.getCustomEditorValue(i[e]); else { const t = i[e].lastElementChild; let a; if (!t) continue; if (t.classList.contains("jqx-hidden")) { r[n] = void 0; continue } a = JQX.DateTimePicker && t instanceof JQX.DateTimePicker ? t.value.toDate ? t.value.toDate() : t.value : t instanceof HTMLInputElement && "datetime-local" === t.type ? new Date(t.value) : JQX.DropDownList && t instanceof JQX.DropDownList ? t.selectedValues.slice(0) : t.hasAttribute("list") ? t.value.split(",").map((e => e.trim())) : t.value, a instanceof Date && isNaN(a.getTime()) && (a = void 0), null != a && (r[n] = a) } } if (void 0 !== s.$._resourceId) t._updateResource(s, r); else { const i = r.dateStart ? r.dateStart : void 0, n = r.dateEnd ? r.dateEnd : void 0; if ((i && i.getTime && i.getTime() !== s.dateStart.getTime() || n && n.getTime && n.getTime() !== s.dateEnd.getTime()) && (r.duration = void 0), t._isPopupWindowTableModified) { const i = e.querySelectorAll(".jqx-gantt-popup-window-table"); for (let e = 0, n = i.length; e < n; e += 1) { const n = i[e]; n.closest('.jqx-tab-item[value="dependency"]') ? t._updateTaskDependencies(n, s) : n.closest('.jqx-tab-item[value="segments"]') && t._updateTaskSegments(n, s) } } t._updateTask(s, r) } } return t._popupWindow && t._popupWindow.confirmPopupWindow && n !== t._popupWindow.confirmPopupWindow && t._popupWindow.confirmPopupWindow.close(), n.close(), void delete n._target } if (i.closest(".jqx-popup-window-button.delete")) return void t._openPopupWindow(n._target, !0); if (i.closest(".jqx-popup-window-editor-toggle")) { const e = i.closest('.jqx-gantt-chart-popup-window-editor[value="deadline"]'), n = e ? e.lastElementChild : void 0; if (n) { const e = n.classList.contains("jqx-hidden") ? "remove" : "add"; n.classList[e]("jqx-hidden"), i.textContent = t.localize(e) } return } const s = i.closest(".jqx-gantt-chart-button"); if (s) { const e = i.closest("jqx-tab-item"), r = e.querySelector(".jqx-gantt-popup-window-table"); if (!r) return; const o = s.getAttribute("action"), l = e.getAttribute("value"), d = a; switch (o) { case "add": { let e; e = "segments" === l ? { label: `${t.localize("segment")} ${r.dataSource.length + 1}`, dateStart: new Date(d.dateStart), dateEnd: new Date(d.dateEnd), duration: parseFloat((d.duration || 0).toFixed(2)) } : { id: "", name: "", type: 0, lag: 0 }, r.addRow(e), r.beginEdit(r.rows.length - 1), t._isPopupWindowTableModified = !0; break } case "delete": { const e = r.selected; r.beginUpdate(); for (let t = 0, i = e.length; t < i; t += 1)r.removeRow(e[t]); r.endUpdate(), t._isPopupWindowTableModified = !0; break } }t._applyTableValidation(e, r, n) } } _updateTaskDependencies(e, t) { const i = this, n = i._tasks.indexOf(t), a = i._getTaskConnections(t).connectedTasks, s = e.rows; for (let e = 0, t = a.length; e < t; e += 1) { const t = a[e]; i._removeConnection(`${t.startIndex}-${t.endIndex}-${t.type}`) } for (let e = 0, t = s.length; e < t; e += 1) { const t = s[e].data, a = t.name, r = t.type; if (!i._getValidConnectionId(a, n, r, "_")) continue; const o = parseInt(t.lag); i._connectTask([a, n, r, isNaN(o) ? 0 : o]) } i._recycleConnections() } _updateTaskSegments(e, t) { const i = e.rows; let n = []; for (let e = 0, t = i.length; e < t; e += 1) { const t = i[e].data, a = t.label, s = new Date(t.dateStart), r = new Date(t.dateEnd); isNaN(s) || isNaN(r) || n.push({ label: "string" == typeof a ? a : "", dateStart: s, dateEnd: r }) } t.segments = n, this._validateTaskSegments(t) } _createTasks(e, t) { const i = this, n = {}, a = []; e || (e = i.dataSource), i.dataSource instanceof JQX.DataAdapter && (e = i._parseAdapterData(i.dataSource.toArray())), t || i.clearTasks(); let s = []; if (function e(r, o) { let l = []; if (!r || 0 === r.length) return []; for (let d = 0; d < r.length; d++) { let c, m = r[d]; if ("object" != typeof m) continue; if (m = i._validateTaskProperties(m, o), !m) continue; const u = m.tasks, h = m.id; m.$.project = o, m.$.id = o ? o.$.id + "." + d : d + "", "string" != typeof h && "number" != typeof h || (n[h] ? a.push(h) : n[h] = 1), u instanceof Array && u.length > 0 && (m.synchronized && (m.dateStart = m.minDateStart = m.maxDateStart = void 0, m.dateEnd = m.minDateEnd = m.maxDateEnd = void 0), m.type = "project", c = e(u, m), c.length && (m.hidden = !c.some((e => !e.hidden)), m.hidden ? c.forEach((e => e.hidden = m.hidden)) : i._synchronizeProjectVisibility(o, m))), (!m.type || ["project", "task", "milestone"].indexOf(m.type) < 0) && (m.type = "task"), o && "project" === m.type && c && c.length > 0 ? (l.push(m), l = l.concat(c)) : (o || ((t && "project" === m.type && m.synchronized || m.dateStart && m.dateEnd && !isNaN(m.dateStart.getTime()) && !isNaN(m.dateEnd.getTime())) && s.push(m), c && (s = s.concat(c))), l.push(m)) } return o && i._synchronizeProjectDates(o, l), l }(e), t) return s.slice(0); a.length && console.warn(i.localize("duplicateIds", { elementType: i.nodeName.toLowerCase(), duplicates: a.toString() })), i._tasks = s.slice(0), i._handleResources() } _createTimeline() { const e = this; e._tasks && 0 !== e._tasks.length ? (delete e.__tasks, e._createConnections(), e._autoSchedule(), e._createTimelineCells(), e._insertTimelineTasks(), e.$.taskSplitter.refresh()) : e._clearTasks() } _createConnections() { const e = this, t = e._tasks; e._connections = []; for (let i = 0, n = t.length; i < n; i += 1)t[i].connections && e._handleTaskConnections(i) } _createTooltip() { const e = this, t = e.tooltip; let i = e.$.tooltip; if (t.enabled) return i || (e.$.tooltip = i = document.createElement("jqx-tooltip"), i.classList.add("jqx-gantt-chart-tooltip"), i.setAttribute("jqx-id", "tooltip")), e.$tooltip || e._handleTooltipEvents(!0), i.rightToLeft = e.rightToLeft, i.theme = e.theme, i.openMode = "manual", i.arrow = t.arrow, i.delay = t.delay, i.parentElement || e.$.container.appendChild(i), i; i && (i.close(), i.remove()) } _handleTooltipEvents(e) { const t = this, i = t.$.tooltip; if (!i) return; let n = t.$tooltip; e ? (n = t.$tooltip = JQX.Utilities.Extend(i), n.listen("close", t._tooltipVisibilityHandler.bind(t)), n.listen("closing", t._tooltipVisibilityHandler.bind(t)), n.listen("open", t._tooltipVisibilityHandler.bind(t)), n.listen("opening", t._tooltipVisibilityHandler.bind(t))) : n && (n.unlisten("close"), n.unlisten("closing"), n.unlisten("open"), n.unlisten("opening"), delete t.$tooltip) } _toggleTooltip(e) { const t = this; if (t._dragDetails || !t.tooltip.enabled || !t.$.container.contains(e.target)) return void t._closeTooltip(); const i = t.getRootNode(), n = { "jqx-task-segment": null, "jqx-timeline-task": null, "jqx-gantt-chart-task-indicator": null, "jqx-resource-timeline-view-cell": null, "jqx-task-connection": null }, a = (i.host ? i.host.shadowRoot : i).elementsFromPoint(e.clientX, e.clientY); let s; for (let e = 0, t = a.length; e < t; e += 1) { const t = a[e], i = t.classList; if (i.contains("jqx-task-container")) n["jqx-timeline-task"] = t.closest(".jqx-timeline-task"); else for (let e in n) i.contains(e) && (n[e] = t) } if (n["jqx-task-segment"]) { const e = n["jqx-timeline-task"], t = e ? e._cellObj.task : void 0; s = t && t.segments && t.segments.length ? n["jqx-task-segment"] : e } else if (n["jqx-gantt-chart-task-indicator"]) s = n["jqx-gantt-chart-task-indicator"]; else for (let e in n) if (n[e]) { s = n[e]; break } s ? t._openTooltip(s, e) : t._closeTooltip() } _getConnectionTypeName(e) { const t = this; switch (e) { case 0: return t.localize("startToStart"); case 1: return t.localize("endToStart"); case 2: return t.localize("endToEnd"); case 3: return t.localize("startToEnd"); default: return "" } } _getSegmentTask(e) { const t = this._tasks; for (let i = 0, n = t.length; i < n; i += 1) { const n = t[i]; if (Array.isArray(n.segments) && n.segments.indexOf(e) > -1) return n } } _getTooltipContent(e) { const t = this; if (!e) return; const i = e.classList; let n, a; if (i.contains("jqx-task-segment")) { if (a = e._segmentObj, a) { let e = a.label; if (void 0 === e) { const i = t._getSegmentTask(a); i && (e = i.label) } n = `<label><b>${t.localize("segment")}</b>: ${e || ""}</label>\n <label><b>${t.localize("dateStart")}</b>: ${t._formatDate(a.dateStart) || ""}</label>\n <label><b>${t.localize("dateEnd")}</b>: ${t._formatDate(a.dateEnd) || ""}</label>` } } else if (i.contains("jqx-timeline-task")) a = e._cellObj.task, a && !a.segments && (n = `<label><b>${t.localize("task")}</b>: ${a.label || ""}</label>\n <label><b>${t.localize("dateStart")}</b>: ${t._formatDate(a.dateStart) || ""}</label>\n <label><b>${t.localize("dateEnd")}</b>: ${t._formatDate(a.dateEnd) || ""}</label>`); else if (i.contains("jqx-gantt-chart-task-indicator")) a = e._indicatorObj, a && (n = a.label || ""); else if (i.contains("jqx-resource-timeline-view-cell")) { if (!e.hasAttribute("load")) return; const i = e.closest(".jqx-timeline-cell"); if ((e = e.closest(".jqx-timeline-row")) && e._cellObj && (a = e._cellObj.resource), a) { const s = t._getResourceTasks(a), r = "hours" === t.resourceTimelineView ? "h" : "", o = t._tasks, l = t.$.resourceTimelineViewCells.children, d = Array.from(e.children).findIndex((e => e === i)); n = `<label><b>${t.localize("resource")}</b>: ${a.label || ""}</label>\n <label><b>${t.localize("assignments")}</b>:</label>`; for (let e = 0, i = s.length; e < i; e += 1) { const i = s[e], c = o.indexOf(i), m = t._getResourceCellCapacity({ cellDateRange: t._getCellDateRange(l[d]), cellTaskIndexAssigned: [c], index: d, resource: a, task: i, cellIndex: d }); void 0 !== m && (n += `<label>${t.localize("task")} #${c}: (${parseFloat(m.capacity.toFixed(1))}${r}) ${i.label || ""}</label>`) } } } else i.contains("jqx-task-connection") && (a = t.getConnectionDetails(e.getAttribute("connection-id")), void 0 !== a && (n = `<label><b>${t.localize("startTask")}</b>: ${a.startTask.label || ""}</label>\n <label><b>${t.localize("endTask")}</b>: ${a.endTask.label || ""}</label>\n <label><b>${t.localize("type")}</b>: ${t._getConnectionTypeName(a.type) || ""}</label>`, a.lag && (n += `<label><b>${t.localize("lag")}</b>: ${parseFloat(a.lag.toFixed(1))}</label>`))); return a ? a.tooltip ? a.tooltip + "" : n || "" : void 0 } _openTooltip(e, t, i) { const n = this, a = n.tooltip; if (i = "string" == typeof i ? i : n._getTooltipContent(e), !(a.enabled && i && e && e.nodeName)) return void n._closeTooltip(); const s = n.$.tooltip || n._createTooltip(); let r, o; if (i && s.value !== i && (s.value = i), s.selector = e, t && t.pageX) { const i = document.body.getBoundingClientRect(), n = e.getBoundingClientRect(), l = a, d = l.offset[0] || 0, c = l.offset[1] || 0, m = s.offsetWidth, u = s.offsetHeight; let h = "bottom"; "absolute" !== s.position && (s.position = "absolute", s.offset = []), o = Math.min(i.left + i.width - m, t.pageX - m / 2 - d), r = n.top - u - c, r < i.top && (r = n.bottom + c, h = "top"), o < i.left && (o = i.left + d, h = "left"), h !== s.arrowDirection && (s.arrowDirection = h), s.style.left = o + "px", s.style.top = r + "px" } else "auto" !== s.position && (s.position = "auto", s.offset = a.offset); s.visible || (n.getShadowRootOrBody().appendChild(s), s.open()) } _closeTooltip() { const e = this.$.tooltip; e && e.visible && e.close() } _tooltipVisibilityHandler(e) { const t = this, i = e.type, n = t.$.tooltip; e.target === n && (e.stopPropagation(), t._fireTooltipVisibilityEvent(e) ? e.preventDefault() : "opening" === i ? n.classList.remove("jqx-visibility-hidden") : "closing" === i && (n.hasAnimation ? n.addEventListener("transitionend", (() => { n.visible || (n.classList.add("jqx-visibility-hidden"), n.style.top = n.style.left = 0, t.$.container.appendChild(n)) }), { once: !0 }) : t.$.container.appendChild(n))) } _fireTooltipVisibilityEvent(e) { const t = this, i = e.type, n = t.$.tooltip, a = e.detail.owner; let s = { target: n, owner: a }; if (a) if (a.classList.contains("jqx-task-connection")) { s.type = "connection"; const e = t.getConnectionDetails(a.getAttribute("connection-id")); e && (s.item = e) } else if (a.classList.contains("jqx-gantt-chart-task-indicator")) s.type = "indicator", a._indicatorObj && (s.item = t._cloneObject(a._indicatorObj)); else if (a.classList.contains("jqx-task-segment")) s.type = "segment", a._segmentObj && (s.item = t._cloneObject(a._segmentObj)); else if (a.classList.contains("jqx-timeline-task")) s.type = "task", a._cellObj && a._cellObj.task && (s.item = t._cloneObject(a._cellObj.task)); else if (a.classList.contains("jqx-resource-timeline-view-cell")) { s.type = "resource"; const e = a.closest(".jqx-timeline-row"); e._cellObj && (s.item = t._cloneObject(e._cellObj.resource)) } let r = t.getAttribute("aria-owns") || ""; switch (i) { case "open": t.setAttribute("aria-owns", (r + " " + n.id).trim()), t.$.fireEvent(i, s); break; case "close": r = r.replace(n.id, "").trim(), r ? t.setAttribute("aria-owns", r) : t.removeAttribute("aria-owns"), t.$.fireEvent(i, s); break; case "closing": case "opening": if (t.$.fireEvent(i, s).defaultPrevented) return !0 } } _parseAdapterData(e) { let t = {}; for (let i = 0, n = e.length; i < n; i += 1) { const n = e[i], a = Object.assign({}, n), s = n.parent, r = n.$.id; if (s && s !== n) { const e = s.$.id; t[e] || (t[e] = Object.assign({}, s)); const i = t[e]; i.tasks || (i.tasks = []), i.tasks.push(a) } else t[r] = a; delete a.parent, delete a.children, delete a.$ } return Object.values(t) } _handleTaskConnections(e) { const t = this, i = t._tasks; let n; if ("number" == typeof e && (n = e, e = i[e]), !e) return; void 0 === n && (n = i.indexOf(e)); const a = e.connections, s = i.length; for (let e = 0; e < a.length; e++) { const i = a[e], r = t._getTaskIndexById(i.target); null == r || isNaN(r) || r < 0 || r >= s || r === n || t._connectTask([n, r, i.type, i.lag]) } delete e.connections } _insertTasks(e, t, i) { const n = this, a = n._tasks; if (t) { const s = n._getProjectTasks(t, !0); if (s.length) { const t = s[s.length - 1]; let r, o; "number" == typeof i && i < s.length ? r = s[i = Math.max(0, i)] : (r = t, o = !0); const l = n._getProjectTasks(r); i = o && l.length ? a.indexOf(l[l.length - 1]) : a.indexOf(r), a.splice.apply(a, [i + (o ? 1 : 0), 0].concat(e)) } else a.splice.apply(a, [a.indexOf(t) + 1, 0].concat(e)) } else "number" == typeof i ? (i += "", (i = a.findIndex((e => e.$.id === i))) < 0 && (i = a.length)) : i = a.length, a.splice.apply(a, [i, 0].concat(e)) } _insertTimelineTasks() { const e = this, t = e._timelineVCells; t && t.length ? (e._recycleTimelineTasks(), e._refresh()) : e._resetTimeline() } _recycleTimelineTasks(e) { const t = this, i = t.$.taskIndicatorsContainer, n = i.children, a = t.$.taskTimelineCellsContainer.childElementCount, s = t._timelineVCells; for (; i.childElementCount > a;)i.firstElementChild.remove(); if (t._closeTooltip(), !s || !s.length) return; const r = s.indexOf(t._getFirstContentCellInView()), o = t._getSelection("task", t.selectedTaskIds), l = { timelineStart: t.dateStart.getTime(), timelineEnd: t.dateEnd.getTime() }; for (let i = 0, d = a; i < d; i++) { const a = n[i], d = s[r + i]; if (!d) { a && a.remove(); continue } const c = d.task; t._snapToNearestDates(c), t._recycleTaskBars(d, i, o), t._setTimelineTaskBar(d, i), t._setTimelineTaskBaseline(d, i), t._setTaskBarProgress(c, i), t._setTaskBarLabel(c, i), t._setTaskIndicators(d, i, l), t._setTaskDeadline(d, i, l), e && t._refreshTableColumnsData(c) } t._recycleConnections() } _ensureVisible(e, t = "task") { const i = this; if (null == e) return; let n, a = "task" === t ? i._timelineVCells : i._timelineResourceVCells; n || (n = i.$[`${t}Table`]); const s = a.find((i => i[t] === e)); if (!s) return; let r, o; if ("task" === t) { const t = i._getTimelineTaskCellByDate(e.dateStart); if (r = i.$.taskTimelineContainer.offsetHeight, o = i, t) { const e = i.scrollLeft, n = i.$.taskTimelineContainer.offsetWidth; t.left + t.width > e + n ? i.scrollLeft = Math.max(0, t.left + t.width - n) : t.left < e && (i.scrollLeft = Math.max(0, t.left)) } } else r = i.$.resourceTimelineContent.offsetHeight, o = i._resourceScrollView; const l = o.scrollTop; s.top + s.height > l + r ? o.scrollTop = Math.max(0, s.top + s.height - r) : s.top < l && (o.scrollTop = Math.max(0, s.top)) } _isTaskExpanded(e, t) { if (!e || !e.$) return; let i, n = e.$[this.groupByResources ? "group" : "project"]; if (!n) return !0; for (; n;) { if (i = n.expanded, !i) return !1; if (n = n.$.project, n === t) break } return i } _getItemByTreeIndex(e, t, i) { if (!t) return; const n = t.split("."); let a = this[`_${e}s`].filter((e => !e.$.project))[t.split(".")[0]]; if (a) { if (!a[`${e}s`] || !a[`${e}s`].length) return i ? null : a; for (let t = 1; t < n.length; t++) { const s = a[`${e}s`].filter((e => !e.hidden && e.$.project === a))[n[t]]; if (!s || i && "project" !== s.type) break; if (a = s, "project" !== a.type) break } return i ? a && "project" === a.type ? a : void 0 : a } } _getItemByTableId(e, t, i) { if (null == t) return; const n = this[`_${e}s`]; let a; for (let e = 0, i = n.length; e < i; e += 1) { const i = n[e]; if (i.$.id === t) { a = i; break } } return a ? i ? "project" === a.type ? a : void 0 : a : void 0 } _tableChangeHandler(e) { const t = e.target; (t.classList.contains("jqx-task-table") || t.classList.contains("jqx-resource-table")) && (e.stopPropagation(), this._handleTableSelection(t === this.$.taskTable ? "task" : "resource", t.selected)) } _tableColumnResizeHandler(e) { const t = e.target, i = e.detail, n = t.classList.contains("jqx-task-table"); if (!n && !t.classList.contains("jqx-resource-table")) return; e.stopPropagation(); const a = i.dataField, s = this[(n ? "task" : "resource") + "Columns"].find((e => e.value === a)); s && (s.size = i.width), this.$.fireEvent("columnResize", i) } _tableSortFilterHandler(e) { const t = this, i = e.target; let n; i.classList.contains("jqx-task-table") ? (n = "task", t._createTimelineContent(), t._recycleTimelineTasks()) : i.classList.contains("jqx-resource-table") && (n = "resource", t._createResourceTimelineContent(), t._recycleResourceContent()), n && (t._refresh(), e.stopPropagation(), t.$.fireEvent(e.type, Object.assign({ type: n }, e.detail))) } _taskTableExpandHandler(e) { const t = this, i = e.target; if (!i.classList.contains("jqx-task-table") && !i.classList.contains("jqx-resource-table")) return; const n = i === t.$.taskTable ? "task" : "resource"; if (e.stopPropagation(), !t[`${n}s`] || !t[`${n}s`].length) return; const a = e.detail.record.itemId, s = t._getItemByTableId(n, a, !0); s && (delete t._hoveredItem, s.expanded = "collapse" !== e.type, t._createTimelineContent(), t._refresh(), t._recycleTimelineTasks(), t.$.fireEvent(e.type, { item: t._cloneObject(s), id: s.id || s.$.id, index: t._tasks.indexOf(s), label: s.label, value: s.value })) } _taskTableKeyDownHandler(e) { const t = this, i = e.key; if (t.keyboardNavigation && !t.disabled && !t.readonly) switch (i) { case "Delete": case "Enter": { const e = t.$.taskTable._focusedCell; if (!e || !e.closest) return; const n = e.closest("tbody tr"); if (!n) return; const a = t._getVCellById("task", n.getAttribute("row-id")); a && t._openPopupWindow(a.task, "Delete" === i); break } } } _getVCellById(e = "task", t) { const i = "task" === e ? this._timelineVCells : this._timelineResourceVCells; if (i && i.length) for (let n = 0, a = i.length; n < a; n += 1) { const a = i[n][e]; if (a.$ && a.$.id === t) return i[n] } } _getGroupVCellByPath(e, t) { const i = "task" === e ? this._timelineVCells : this._timelineResourceVCells; if (i && i.length) for (let n = 0, a = i.length; n < a; n += 1) { const a = i[n][e]; if (a.$ && a.$.id === t) return i[n] } } _taskTableGroupEventHandler(e) { const t = this, i = e.detail.action, n = e.target; if (["collapse", "expand"].indexOf(i) < 0 || !n.classList.contains("jqx-task-table") && !n.classList.contains("jqx-resource-table")) return; const a = n === t.$.taskTable ? "task" : "resource", s = t.$.taskTable._getGroupByIndex(e.detail.path), r = t._getGroupVCellByPath(a, s.$.id); if (!r || !r[a].isGroup) return; const o = r[a]; e.stopPropagation(), o.expanded = "collapse" !== i, t._createTimelineContent(), t._refresh(), t._recycleTimelineTasks(), t.$.fireEvent(i, { isGroup: !0, item: t._cloneObject(o), id: o.$.id, label: o.label }) } _resetTimeline() { const e = this, t = e.$.taskTimelineContainer; if (e.$.taskTimelineCellsContainer.innerHTML = "", e.$.timelineTasksContainer.innerHTML = "", e.$.timelineConnectionsContainer.innerHTML = "", e.$.timelineContent.style.height = "", e.$.taskIndicatorsContainer.innerHTML = "", e.rightToLeft && e.scrollLeft !== t.scrollLeft) { const i = e._getScrollLeft(e.scrollLeft); t.scrollLeft = i, e.$.mainSplitter.contains(e.$.resourceTimelineHeader) && (e.$.resourceTimelineContent.scrollLeft = i) } e._closeTooltip(), e.$.container.style.removeProperty("--jqx-gantt-chart-task-timeline-content-height") } _refreshTimeline(e) { const t = this; e || (e = t.view); const i = t._getDateFromCell(t.scrollLeft, t._getFirstCellObjInView(), e), n = t.scrollTop; t._refreshing = !0, t.scrollLeft = 0, t.scrollTop = 0, t.$.mainSplitter.contains(t.$.resourceTimelineHeader) && t._resourceScrollView && (t._resourceScrollView.scrollLeft = 0), t._resetTimeline(), t._createTimelineCells(), t._recycleTimelineTasks(!0), t.$.mainSplitter.contains(t.$.resourceSplitter) && t._refreshResourceTimeline(), t._refresh(), t._refreshing = !1, t._scrollTo(i), t.scrollTop = n } _scrollTo(e, t) { const i = this, n = i._timelineCells; let a; if (void 0 !== e && !isNaN(new Date(e).getTime())) for (let s = 0; s < n.length; s++) { const r = n[s], o = r.date; switch (i.view) { case "quarter": case "year": if (o.getFullYear() === e.getFullYear() && o.getMonth() === e.getMonth()) { if (t) { a = r.left; break } let i = new Date(e); i.setMonth(e.getMonth() + 1), i.setDate(0), i = i.getDate(), a = r.left + (e.getDate() - 1) / i * r.width } break; case "month": { let i = new Date(o), n = new Date(o); i.setDate(i.getDate() - i.getDay()), n.setDate(n.getDate() + (6 - n.getDay()) + 1), n.setMilliseconds(n.getMilliseconds() - 1), e.getTime() >= i.getTime() && e.getTime() <= n.getTime() && (a = r.left + (t || t ? 0 : e.getDay() / 7 * r.width)); break } case "week": o.getFullYear() === e.getFullYear() && o.getMonth() === e.getMonth() && o.getDate() === e.getDate() && (a = r.left + parseFloat(e.getHours() + "." + e.getMinutes() + e.getSeconds()) / 24 * r.width); break; case "day": o.getFullYear() === e.getFullYear() && o.getMonth() === e.getMonth() && o.getDate() === e.getDate() && o.getHours() === e.getHours() && (a = r.left + (t ? 0 : parseFloat(e.getMinutes() + e.getSeconds()) / 60 * r.width)) }if (void 0 !== a) return i.scrollLeft = a, void (i.$.mainSplitter.contains(i.$.resourceTimelineHeader) && (i.$.resourceTimelineHeader.scrollLeft = i.$.resourceTimelineContent.scrollLeft = a, i._refreshResourceTimeline())) } } _updateConnection(e, t) { const i = this, n = i._tasks, [a, s, r, o] = e, l = n[a], d = n[s]; if (!l || !d || "number" != typeof r) return; let c = i._connections, m = -1; c || (c = i._connections = []); for (let e = 0, t = c.length; e < t; e += 1) { const t = c[e], i = t.startIndex, n = t.endIndex; if (i === a && n === s || i === s && n === a) { m = e; break } } if (!t) { if (m < 0) c.push({ startTask: n[a], endTask: n[s], startIndex: a, endIndex: s, type: r, lag: o }); else { const e = c[m]; if (!e) return; if (e.startIndex = a, e.startTask = n[a], e.endIndex = s, e.endTask = n[s], e.type = r, o !== e.lag) { const t = parseInt(o); isNaN(t) || (e.lag = t) } } return !0 } m > -1 && c.splice(m, 1) } _createTimelineCells() { const e = this, t = e._tasks, i = new Date(e.properties.dateStart.value), n = new Date(e.properties.dateEnd.value); let a, s; if (isNaN(i.getTime()) || (a = i), isNaN(n.getTime()) || (s = n), t.length > 0) { let e = t[0].dateStart, i = t[0].dateEnd; for (let n = 0; n < t.length; n++)t[n].dateStart && t[n].dateEnd && (e || (e = t[n].dateStart), i || (i = t[n].dateEnd), e.getTime() > t[n].dateStart.getTime() && (e = t[n].dateStart), i.getTime() < t[n].dateEnd.getTime() && (i = t[n].dateEnd)); (!a || a.getTime() > e.getTime()) && (a = e), (!s || s.getTime() < i.getTime()) && (s = i) } a && s && (a = e._minMaxDateValidator(a), s = e._minMaxDateValidator(s), e._createTimelineHeader(a, e._getCellsCount(a, s)), e._createTimelineContent(), e._createDateMarkers(), e._refresh()) } _getCellsCount(e, t, i) { let n, a, s, r, o, l, d = new Date(e), c = new Date(t); const m = this, u = t.getFullYear() - e.getFullYear(); if (a = n = Math.round(u) + 1, "year" === i) return { year: a }; if (d.setHours(d.getHours(), 0, 0, 0), c.setHours(c.getHours(), 0, 0, 0), l = Math.floor((t.getTime() - e.getTime()) / 36e5), l > 0) { let e = new Date(d); if (l = 1, d.getFullYear() !== c.getFullYear()) { let t = new Date(d.getFullYear() + 1, 0, 1, 0, 0, 0, 0); for (; e.getTime() !== t.getTime();) { const t = e.getTime(); e.setHours(e.getHours() + 1), e.getTime() === t && e.setHours(e.getHours() + 2), l++ } const i = c.getFullYear() - t.getFullYear(); for (let t = 0; t < i; t++) { const t = e.getFullYear(); l += 24 * ((t % 100 == 0 ? t % 400 == 0 : t % 4 == 0) ? 366 : 365) - 1, e.setFullYear(t + 1) } } for (; e.getTime() < c.getTime();) { const t = e.getTime(); e.setHours(e.getHours() + 1), e.getTime() === t && e.setHours(e.getHours() + 2), l++ } } if ("hour" === i) return { hour: l }; if (d.setHours(0, 0, 0, 0), c.setHours(23, 59, 59, 999), o = n = Math.round((c.getTime() - d.getTime()) / 864e5), "day" === i) return { day: o }; if (d.setDate(d.getDate() - d.getDay()), c.setDate(c.getDate() + 6 - c.getDay()), r = n = Math.round((c.getTime() - d.getTime()) / 6048e5), "week" === i) { if (-1 !== m.firstDayOfWeek) { const t = e.getDay() - m.firstDayOfWeek; e.setDate(e.getDate() - e.getDay() + m.firstDayOfWeek - (t >= 0 ? 0 : 7)) } return { week: r } } if ("month" === this.view && (0 !== e.getDay() && (e = new Date(e.setDate(e.getDate() - e.getDay()))), 6 !== t.getDay() && (t = new Date(t.setDate(t.getDate() + 6 - t.getDay()))), -1 !== m.firstDayOfWeek)) { const t = e.getDay() - m.firstDayOfWeek; e.setDate(e.getDate() - e.getDay() + m.firstDayOfWeek - (t >= 0 ? 0 : 7)) } if (e.getFullYear() !== t.getFullYear()) { n = 12 - e.getMonth(); const i = t.getFullYear(); for (let a = e.getFullYear() + 1; a <= i; a++)n += a === t.getFullYear() ? t.getMonth() + 1 : 12 } else n = t.getMonth() - e.getMonth() + 1; return s = Math.ceil(n), "months" === i ? { month: s } : ("day" === this.view && 0 === l && (l = 1), { year: a, month: s, week: r, day: o, hour: l }) } _recycleTaskBars(e, t, i) { const n = this, a = e.task, s = n.$.timelineTasksContainer, r = n.$.taskTimelineCellsContainer, o = "project" === a.type && a.synchronized, l = a.type, d = a.$.id, c = s.children[t], m = r.children[t]; m._cellObj = e, m.setAttribute("row-id", d), m.style.top = e.top + "px", m.removeAttribute("hover"), c.removeAttribute("hover"), c.classList.contains(l) || (c.innerHTML = "milestone" === l ? '<div class="jqx-task-container" aria-hidden="true">\n <div class="jqx-task-connection-point start"></div>\n <div class="jqx-task-segments"></div>\n <div class="jqx-task-connection-point end"></div>\n </div>' : '<div class="jqx-task-container" aria-hidden="true">\n <div class="jqx-task-connection-point start"></div>\n <div class="jqx-task-segments"></div>\n <div class="jqx-timeline-task-progress-thumb"></div>\n <div class="jqx-task-connection-point end"></div>\n </div>'), a.connectionType && (a.connectionType.includes("start") || c.querySelector(".start").classList.add("jqx-hidden"), a.connectionType.includes("end") || c.querySelector(".end").classList.add("jqx-hidden")), n._recycleSegments(a, c), delete c._cellStart, delete c._cellEnd, a.disableDrag || o && !a.dragProject ? c.setAttribute("disable-drag", "") : c.removeAttribute("disable-drag"), a.disableResize || o ? c.setAttribute("disable-resize", "") : c.removeAttribute("disable-resize"), a.isGroup ? c.setAttribute("resource-group", "") : c.removeAttribute("resource-group"), i && (i.indexOf(d) > -1 ? (c.setAttribute("selected", ""), m.setAttribute("selected", "")) : (c.removeAttribute("selected"), m.removeAttribute("selected"))), a.id ? c.id = a.id : c.id = "ganttTask" + Math.floor(65536 * (1 + Math.random())).toString(16).substring(1), c._cellObj = e, c.className = "jqx-timeline-task " + l, c.setAttribute("row-id", d), a.class && c.classList.add(a.class), c.setAttribute("aria-label", a.label + " Start date: " + n._toISODate(a.dateStart) + ", End date: " + n._toISODate(a.dateEnd)), c.setAttribute("aria-selected", "false") } _toISODate(e) { const t = e.getFullYear(), i = e.getMonth() + 1, n = e.getDate(); return t + "-" + (i < 10 ? "0" + i : i) + "-" + (n < 10 ? "0" + n : n) } _recycleSegments(e, t) { const i = this, n = t.querySelector(".jqx-task-segments"); let a, s = e.segments; if (!n) return; for (Array.isArray(s) && s && s.length && "task" === e.type || (s = [e]); n.childElementCount > s.length;)n.children[0].remove(); const r = document.createDocumentFragment(), o = n.children, l = "milestone" === e.type ? '<div class="jqx-timeline-task-fill"></div>' : '<div class="jqx-timeline-task-fill">\n <div class="jqx-timeline-task-progress"></div>\n </div>\n <div class="jqx-timeline-task-label"></div>'; for (let t = 0, n = s.length; t < n; t += 1) { const n = s[t]; let d = o[t]; n.dateStart = new Date(Math.max(e.dateStart.getTime(), n.dateStart.getTime())), n.dateEnd = new Date(Math.min(e.dateEnd.getTime(), n.dateEnd.getTime())), d ? (delete d._cellStart, delete d._cellEnd) : (d = document.createElement("div"), d.classList.add("jqx-task-segment"), d.innerHTML = l, r.appendChild(d)), n.disableDrag ? d.setAttribute("disable-drag", "") : d.removeAttribute("disable-drag"), n.disableResize ? d.setAttribute("disable-resize", "") : d.removeAttribute("disable-resize"), d._segmentObj = n, d.setAttribute("aria-label", (n.label || "") + " Start date: " + i._toISODate(n.dateStart) + ", End date: " + i._toISODate(n.dateEnd)), a = d } r.childElementCount && n.appendChild(r), i._setTaskBarDeadline(e, a) } _createCells(e) { let t, i = document.createDocumentFragment(); for (let n = 0; n < e; n++)t = document.createElement("div"), t.classList.add("jqx-timeline-view-cell"), t.setAttribute("role", "columnheader"), i.appendChild(t); return i } _getTimelineVisibleCellsCount() { const e = this, t = e._timelineCells; if (!t) return; const i = e._getFirstCellObjInView(); if (!i) return t.length; const n = 1 - (i.left + i.width - e.scrollLeft) / t[0].width; return Math.min(t.length, Math.ceil(parseFloat((e.$.timeline.offsetWidth / i.width).toFixed(2)) + n)) } _getHeaderVisibleCellsCount() { const e = this; if (!e._timelineHeaderCells) return; const t = Math.abs(e.scrollLeft), i = e.$.timeline.offsetWidth, n = e._timelineHeaderCells; let a = 0; for (let e = 0; e < n.length; e++) { const s = n[e]; s.left + s.width > t && s.left < i + t && a++ } return a } _getHeaderSubVisibleCellsCount() { const e = this; if (!e._timelineHeaderSubCells) return; const t = Math.abs(e.scrollLeft), i = e.$.timeline.offsetWidth, n = e._timelineHeaderSubCells; let a = 0; for (let e = 0; e < n.length; e++) { const s = n[e]; s.left + s.width > t && s.left < i + t && a++ } return a } _refreshHeaderDate(e) { const t = this, i = t._getCellsViewType(), n = t.$.timelineHeader.scrollLeft, a = t.$.timelineViewCells.children, s = t._timelineCells; let r; t._refreshHeaderSubDetailsDate(e), t._refreshHeaderDetailsDate(e); for (let e = 0; e < s.length; e++) { const t = s[e]; if (n <= t.left + t.width) { r = e; break } } for (let n = 0; n < a.length; n++) { const o = a[n], l = s[r]; if (!l) break; r++; const d = l.date; o.innerHTML = `<div>${t._getDateString(new Date(d), i)}</div>`, e || (o._date = new Date(d), o.setAttribute("date", d.toLocaleDateString()), o.style.width = l.width + "px", o.style[t.rightToLeft ? "right" : "left"] = l.left + "px", l.weekend ? o.setAttribute("weekend", "") : o.removeAttribute("weekend"), l.nonworking ? o.setAttribute("nonworking", "") : o.removeAttribute("nonworking")) } } _getDateString(e, t, i) { const n = this, a = ["2-digit", "numeric"][n.dayFormat] || "numeric"; let s; if ("year" === t || "quarter" === t) s = e.toLocaleDateString(n.locale, { year: n.yearFormat }); else if ("month" === t) s = e.toLocaleDateString(n.locale, { month: n.monthFormat }), "month" === n.view && (s += " " + e.toLocaleDateString(n.locale, { year: n.yearFormat })); else if ("week" === t) s = "numeric" !== n.weekFormat && i ? e.toLocaleDateString(n.locale, { day: a, month: n.monthFormat, year: n.yearFormat }) : n._getWeekNumber(e); else if ("day" === t) s = "month" === n.view ? "numeric" !== n.dayFormat && "2-digit" !== n.dayFormat ? e.toLocaleDateString(n.locale, { day: "numeric" }) + " " + e.toLocaleDateString(n.locale, { weekday: n.dayFormat }) : e.toLocaleDateString(n.locale, { day: "numeric" }) + " " + e.toLocaleDateString(n.locale, { weekday: "short" }) : e.toLocaleDateString(n.locale, "day" === n.view ? { day: a, month: n.monthFormat, year: n.yearFormat } : ["long", "short", "narrow"].indexOf(n.dayFormat) > -1 ? { weekday: n.dayFormat } : { day: n.dayFormat }); else if ("hour" === t) if (s = "default" === n.hourFormat ? e.toLocaleTimeString(n.locale, { hour12: !1 }) : e.toLocaleDateString(n.locale, { hour: n.hourFormat }), "default" !== n.hourFormat) s.indexOf(",") >= 0 && (s = s.substring(s.indexOf(",") + 1).trim()); else if (s.indexOf(":") !== s.lastIndexOf(":") && s.indexOf(":") >= 0) { let e = s.toLowerCase().indexOf("am") >= 0 ? " AM" : ""; e = s.toLowerCase().indexOf("pm") >= 0 ? " PM" : e, s = s.substring(0, s.lastIndexOf(":")) + e } return n.timelineHeaderFormatFunction ? n.timelineHeaderFormatFunction(new Date(e), t, i, s) : s } _refreshHeaderSubDetailsDate(e) { const t = this, i = (t.view, t.scrollLeft), n = t.$.timelineViewSubDetails.children, a = t._timelineHeaderSubCells; let s; if (t.$.timelineViewSubDetails.classList.contains("jqx-hidden")) return; for (let e = 0; e < a.length; e++) { const t = a[e]; if (i <= t.left + t.width) { s = e; break } } let r = [], o = 0; for (let i = 0; i < n.length; i++) { const l = a[s], d = n[i]; if (!l) continue; let c = new Date(l.date); "week" === t.view && c.setDate(c.getDate() - c.getDay()), s++, c = new Date(Math.max(l.date.getTime(), c.getTime())); const m = e => { var i, n = e.getMonth(); return i = n >= 9 ? 4 : n >= 6 ? 3 : n >= 3 ? 2 : 1, "long" === t.quarterFormat ? t.localize("quarter") + " " + i : "numeric" === t.quarterFormat ? i : t.localize("quarterShort") + i }; let u = ""; "quarter" === t.view || "year" === t.view ? (u = m(c), "quarter" === t.view && t.hideTimelineSecondHeaderDetails && (u += " " + c.getFullYear())) : "month" === t.view && (-1 === t.firstDayOfWeek ? u = t._getWeekNumber(c) : ((c.getDay() - t.firstDayOfWeek) % 7 == 0 && i > 0 && o++, u = o)); const h = u + "_" + c.getFullYear(); r[h] || (r[h] = []), d.classList.remove("jqx-visibility-hidden"), r[h].push({ element: d, cell: l }), d.innerHTML = `<div>${u}</div>`, d.classList.add("middle"), e || (d._date = c, d.style[t.rightToLeft ? "right" : "left"] = l.left + "px", d.style.width = l.width + "px") } for (let e in r) { const i = r[e]; let n = 0; for (let e = 0; e < i.length; e++)n += i[e].cell.width; if (i[0].element.style.width = n + "px", "year" === t.view) { const e = i[0].cell.date.toLocaleDateString(t.locale, { month: t.monthFormat }), n = i[i.length - 1].cell.date.toLocaleDateString(t.locale, { month: t.monthFormat }); i.length > 1 ? i[0].element.innerHTML = `<div>${e}-${n}</div>` : i[0].element.innerHTML = `<div>${e}</div>` } else if ("month" === t.view) { const e = "numeric" !== t.dayFormat && "2-digit" !== t.dayFormat ? t.dayFormat : "short", n = i[0].cell.date.toLocaleDateString(t.locale, { day: "numeric" }) + " " + i[0].cell.date.toLocaleDateString(t.locale, { weekday: e }), a = i[i.length - 1].cell.date.toLocaleDateString(t.locale, { day: "numeric" }) + " " + i[i.length - 1].cell.date.toLocaleDateString(t.locale, { weekday: e }); i.length > 1 ? i[0].element.innerHTML = `<div>${n}-${a}</div>` : i[0].element.innerHTML = `<div>${n}</div>`, "numeric" === t.weekFormat && (i[0].element.innerHTML = t._getWeekNumber(i[0].cell.date)) } if (t.timelineHeaderFormatFunction) { const e = t.timelineHeaderFormatFunction(new Date(i[0].cell.date), t.view, !0, i[0].element.innerHTML); i[0].element.innerHTML !== e && (i[0].element.innerHTML = e) } for (let e = 1; e < i.length; e++)i[e].element.classList.add("jqx-visibility-hidden") } } _refreshHeaderDetailsDate(e) { const t = this, i = t.view, n = t.scrollLeft, a = t.$.timelineViewDetails.children, s = t._timelineHeaderCells; let r; for (let e = 0; e < s.length; e++) { const t = s[e]; if (n <= t.left + t.width) { r = e; break } } for (let n = 0; n < a.length; n++) { const o = s[r], l = a[n]; let d = new Date(o.date); if ("week" === t.view) if (-1 !== t.firstDayOfWeek) { const e = d.getDay() - t.firstDayOfWeek; d.setDate(d.getDate() - d.getDay() + t.firstDayOfWeek - (e >= 0 ? 0 : 7)) } else d.setDate(d.getDate() - d.getDay()); r++, d = new Date(Math.max(o.date.getTime(), d.getTime())), l.innerHTML = `<div>${t._getDateString(d, i, !0)}</div>`, e || (l._date = d, l.style[t.rightToLeft ? "right" : "left"] = o.left + "px", l.style.width = o.width + "px") } } _getWeekNumber(e) { let t, i = new Date(e.getFullYear(), 0, 1), n = Math.round((e.getTime() - i.getTime() - 6e4 * (e.getTimezoneOffset() - i.getTimezoneOffset())) / 864e5) + 1, a = i.getDay(); if (a = a >= 0 ? a : a + 7, a < 4) t = Math.floor((n + a - 1) / 7) + 1, t > 52 && (i = new Date(e.getFullYear() + 1, 0, 1), a = i.getDay(), a = a >= 0 ? a : a + 7, t = a < 4 ? 1 : 53); else if ("week" === this.view) { const i = function (e) { var t = new Date(e.valueOf()), i = (e.getDay() + 6) % 7; t.setDate(t.getDate() - i + 3); var n = t.valueOf(); return t.setMonth(0, 1), 4 !== t.getDay() && t.setMonth(0, 1 + (4 - t.getDay() + 7) % 7), 1 + Math.ceil((n - t) / 6048e5) }; t = i(e) } else t = Math.round((n + a - 1) / 7); return t } _convertDuration(e, t) { if (!e) return 0; let i; switch (this.durationUnit) { case "day": i = 864e5; break; case "hour": i = 36e5; break; case "minute": i = 6e4; break; case "second": i = 1e3; break; case "milisecond": return e; case "week": i = 6048e5 }return Math.max(0, t ? e / i : e * i) } _createTimelineHeader(e, t) { const i = this, n = i._getCellsViewType(); if (!e) { const t = i.$.timelineViewCells.children; if (0 === t.length) return; e = t[0]._date } if ("day" !== i.view && e.setHours(0, 0, 0, 0), -1 !== i.firstDayOfWeek) { const t = e.getDay() - i.firstDayOfWeek; e.setDate(e.getDate() - e.getDay() + i.firstDayOfWeek - (t >= 0 ? 0 : 7)) } if (i.$.timelineContent.offsetWidth === i.$.timeline.offsetWidth && i._timelineCells && i._timelineCells[0] && i._timelineCells[0].date.getTime() === e.getTime() && i._timelineCells.length === t[i._getCellsViewType()]) return void i._refresh(); i.$.timelineContent.style.width = i.$.timelineHeaderContent.style.width = "", i._createTimelineCellsObj(e, t), i._createTimelineHeaderCellsObj(e, t), i._createTimelineHeaderSubCellsObj(e, t), i.$.timelineViewDetails.innerHTML = "", i.$.timelineViewDetails.appendChild(i._createCells(i._getHeaderVisibleCellsCount())), i.$.timelineViewSubDetails.innerHTML = "", i.$.timelineViewCells.classList.remove("jqx-hidden"), i.$.timelineViewSubDetails.classList.add("jqx-hidden"); let a = 2; if ("quarter" === i.view ? (a = 3, i.$.timelineViewSubDetails.classList.remove("jqx-hidden"), i.$.timelineViewSubDetails.appendChild(i._createCells(i._getTimelineVisibleCellsCount()))) : "month" === i.view && "day" === i.monthScale ? (a = 3, i.$.timelineViewSubDetails.classList.remove("jqx-hidden"), i.$.timelineViewSubDetails.appendChild(i._createCells(t.day))) : "year" === i.view && (a = 3, i.$.timelineViewSubDetails.classList.remove("jqx-hidden"), i.$.timelineViewSubDetails.appendChild(i._createCells(t.month))), i.hideTimelineHeader && (i.$.timelineViewCells.classList.add("jqx-hidden"), a--), i.hideTimelineHeaderDetails && (i.$.timelineViewDetails.classList.add("jqx-hidden"), a--), i.hideTimelineSecondHeaderDetails && ("quarter" === i.view ? i.$.timelineViewDetails.classList.add("jqx-hidden") : i.$.timelineViewSubDetails.classList.add("jqx-hidden"), ("year" === i.view || "month" === i.view && "day" === i.monthScale || "quarter" === i.view) && a--), i.$.taskTable.style.setProperty("--jqx-table-column-header-height", "calc(" + a + " * var(--jqx-gantt-chart-task-default-height) - calc(" + a + " * var(--jqx-border-width) / " + a + "))"), i.$.timelineViewCells.innerHTML = "", i.$.timelineViewCells.appendChild(i._createCells(i._getTimelineVisibleCellsCount())), i.$.timelineContent.style.width = i.$.timelineHeaderContent.style.width = Math.max(t[n] * i._timelineCells[0].width, i.$.timeline.parentElement.offsetWidth) + "px", i.scrollLeft) { const e = i._getScrollLeft(i.scrollLeft); i.$.timelineHeader.scrollLeft = e, i.$.mainSplitter.contains(i.$.resourceTimelineHeader) && (i.$.resourceTimelineHeader.scrollLeft = e) } i._refreshHeaderDate(), i._setCurrentTimeIndicators() } _createTimelineContent() { const e = this, t = e.$.container, i = e.$.timelineContent, n = e._taskDefaultHeight, a = e.$.taskTimelineContainer, s = e.scrollLeft; if (i.style.height = "", t.style.removeProperty("--jqx-gantt-chart-task-timeline-content-height"), e._createTimelineVCells(n), i.style.height = e._timelineVCells.length * n + "px", t.style.setProperty("--jqx-gantt-chart-task-timeline-content-height", e.$.timeline.offsetHeight + "px"), s || s !== a.scrollLeft) { const t = e._getScrollLeft(e.scrollLeft); a.scrollLeft = t, e.$.mainSplitter.contains(e.$.resourceTimelineHeader) && (e.$.resourceTimelineContent.scrollLeft = t) } e.scrollTop && (a.scrollTop = e.scrollTop), e._recycleContentCells() } _createDateMarkers() { const e = this, t = e.dateMarkers; let i = []; delete e._markers; for (let n = 0, a = t.length; n < a; n += 1) { const a = t[n], s = e._dateValidator(void 0, a.date); if (s) { const e = { date: s }, t = a.label, n = a.className; ("string" == typeof t || "number" == typeof t && !isNaN(t)) && (e.label = t), "string" == typeof n && (e.className = n), i.push(e) } } i.length && (e._markers = i), e._recycleDateMarkers() } _createTimelineRowCells(e, t) { const i = this, n = e.children, a = e.querySelectorAll(".jqx-task-bar-limiter"), s = document.createDocumentFragment(), [r, o] = i.rightToLeft ? ["right", "left"] : ["left", "right"]; t || (t = i.$.timelineViewCells.children); for (let e = 0, t = a.length; e < t; e += 1)a[e].remove(); const l = t.length; for (; e.childElementCount > l;)e.lastElementChild.remove(); for (let t = e.childElementCount; t < l; t += 1) { const e = document.createElement("div"); e.classList.add("jqx-timeline-cell"), s.appendChild(e) } s.childElementCount && e.appendChild(s); for (let e = 0; e < l; e += 1) { const i = t[e], a = n[e]; i.hasAttribute("weekend") ? a.setAttribute("weekend", "") : a.removeAttribute("weekend"), i.hasAttribute("nonworking") ? a.setAttribute("nonworking", "") : a.removeAttribute("nonworking"), a.style[o] = i.style[o], a.style[r] = i.style[r], a.style.width = i.style.width } for (let t = 0, i = a.length; t < i; t += 1)e.appendChild(a[t]) } _recycleTimelineRowCells() { const e = this, t = e.$.timelineViewCells.children, i = e.$.taskTimelineCellsContainer.children; for (let n = 0, a = i.length; n < a; n += 1)e._createTimelineRowCells(i[n], t) } _createTimelineVCells(e) { const t = this, i = t._tasks, n = t.$.taskTable.rows, a = t.groupByResources; let s = 0, r = {}; t._timelineVCells = []; for (let o = 0, l = n.length; o < l; o++) { const l = n[o].data; let d = i[l.itemIndex]; if (a) if (!d && l.groupDataField) { const e = l.$.id; d = { $: { id: e, project: void 0 }, label: t._formatResourceGroupLabel(l.label), value: l.label, expanded: l.expanded, synchronized: !0, isGroup: !0, type: "project" }, r[e] = d } else l.parent ? (d.$.group = r[l.parent.$.id], t._synchronizeProjectDates(d.$.group, [d])) : delete d.$.group; else delete d.$.group; !d.hidden && t._isTaskExpanded(d) && (t._timelineVCells.push({ top: s, height: e, task: d }), s = parseFloat((s + e).toFixed(2))) } } _getCellsViewType() { const e = this; switch (e.view) { case "quarter": case "year": return "month"; case "month": return "day" === e.monthScale ? "day" : "week"; case "week": return "day"; case "day": return "hour" } } _createTimelineCellsObj(e, t) { const i = this, n = i._getCellsViewType(); t = t[n]; const a = i.$.timeline.parentElement.offsetWidth; let s = Math.max(i._timelineCellSize, i._timelineCellMinSize), r = 0, o = new Date(e); t * s < a && (s = a / t), s = parseFloat(s.toFixed(2)), i._timelineCells = []; for (let e = 0; e < t; e++) { const e = { left: r, width: s }; if ("year" === n || "quarter" === n) o.setMonth(0), e.date = new Date(o), o.setFullYear(o.getFullYear() + 1); else if ("month" === n) o.setDate(1), e.date = new Date(o), o.setMonth(o.getMonth() + 1); else if ("week" === n) o.setHours(0, 0, 0, 0), o.setDate(o.getDate() - o.getDay()), e.date = new Date(o), o.setDate(o.getDate() + 7); else if ("day" === n) i.nonworkingDays.indexOf(o.getDay()) > -1 && (e.nonworking = !0), o.setHours(0, 0, 0, 0), e.date = new Date(o), o.setDate(o.getDate() + 1), e.weekend = 0 === e.date.getDay() || 6 === e.date.getDay(); else if ("hour" === n) { (i.nonworkingHours.indexOf(o.getHours()) > -1 || i.nonworkingDays.indexOf(o.getDay()) > -1) && (e.nonworking = !0), o.setHours(o.getHours(), 0, 0, 0), e.date = new Date(o); const t = o.getTime(); o.setHours(o.getHours() + 1), t === o.getTime() && o.setHours(o.getHours() + 2), e.weekend = 0 === e.date.getDay() || 6 === e.date.getDay() } i._timelineCells.push(e), r = parseFloat((r + s).toFixed(2)) } } _createTimelineHeaderSubCellsObj(e, t) { const i = this, n = i._getCellsViewType(); t = "month" === i.view && "day" === i.monthScale ? t.day : t[n]; const a = i.$.timeline.parentElement.offsetWidth; let s = Math.max(i._timelineCellSize, i._timelineCellMinSize), r = 0, o = new Date(e); t * s < a && (s = a / t), s = parseFloat(s.toFixed(2)), i._timelineHeaderSubCells = []; for (let e = 0; e < t; e++) { const e = { left: r, width: s }; if ("year" === n || "quarter" === n) o.setMonth(0), e.date = new Date(o), o.setFullYear(o.getFullYear() + 1); else if ("month" === n) o.setDate(1), e.date = new Date(o), o.setMonth(o.getMonth() + 1); else if ("week" === n) o.setHours(0, 0, 0, 0), o.setDate(o.getDate() - o.getDay()), e.date = new Date(o), o.setDate(o.getDate() + 7); else if ("day" === n) i.nonworkingDays.indexOf(o.getDay()) > -1 && (e.nonworking = !0), o.setHours(0, 0, 0, 0), e.date = new Date(o), o.setDate(o.getDate() + 1), e.weekend = 0 === e.date.getDay() || 6 === e.date.getDay(); else if ("hour" === n) { (i.nonworkingHours.indexOf(o.getHours()) > -1 || i.nonworkingDays.indexOf(o.getDay()) > -1) && (e.nonworking = !0), o.setHours(o.getHours(), 0, 0, 0), e.date = new Date(o); const t = o.getTime(); o.setHours(o.getHours() + 1), t === o.getTime() && o.setHours(o.getHours() + 2), e.weekend = 0 === e.date.getDay() || 6 === e.date.getDay() } i._timelineHeaderSubCells.push(e), r = parseFloat((r + s).toFixed(2)) } } _createTimelineHeaderCellsObj(e, t) { const i = this; let n = i.view, a = 0, s = new Date(e); "quarter" === n && (n = "year"), t = t[n], i._timelineHeaderCells = []; for (let e = 0; e < t; e++) { const t = {}; switch (t.date = new Date(s), n) { case "quarter": case "year": s.setFullYear(s.getFullYear() + 1); break; case "month": s.setDate(1), s.setMonth(s.getMonth() + 1); break; case "week": s.setDate(s.getDate() + 7); break; case "day": s.setDate(s.getDate() + 1) }a = i._refreshViewDetailCell(t, a, e), i._timelineHeaderCells.push(t) } } _minMaxDateValidator(e) { if (!e || isNaN(e.getTime())) return e; const t = new Date(this.min), i = new Date(this.max); return t && (e = new Date(Math.max(t.getTime(), e.getTime()))), i && (e = new Date(Math.min(i.getTime(), e.getTime()))), e } _dateValidator(e, t) { const i = this; let n; if (t instanceof Date) return i._minMaxDateValidator(t); if (JQX.Utilities.DateTime && t instanceof JQX.Utilities.DateTime) return i._minMaxDateValidator(t.toDate()); if ("string" != typeof t) return i._minMaxDateValidator(e); { const e = /\d+:\d+:\d+/; if ("new Date()" === t.trim() || "new JQX.Utilities.DateTime()" === t.trim()) return i._minMaxDateValidator(new Date); if (isNaN(Date.parse(t))) { const i = /(\d+[,-.\/]{1}\s*\d+[,-.\/]{1}\s*\d+)/; if (i.test(t)) { const a = i.exec(t)[0].replace(/[,-.\/]/g, ",").split(","); if (3 === a.length) { const [i, s] = parseInt(a[0]) < parseInt(a[2]) ? [a[0], a[2]] : [a[2], a[0]]; if (n = new Date(parseInt(s), parseInt(a[1]) - 1, parseInt(i)), e.test(t)) { const i = e.exec(t)[0].split(":"); n.setHours(i[0] || 0, i[1] || 0, i[2] || 0) } t = n } } } else n = new Date(Date.parse(t)), e.test(t) || n.setHours(0, 0, 0, 0), t = n } return i._minMaxDateValidator(new Date(t)) } _currentTimeIndicatorIntervalValidator(e, t) { return Math.max(1, t) } _getTaskBarPositionLimits(e, t) { const i = this; function n(e) { const t = i._getTimelineTaskCellByDate(e); if (t) return t.left + i._getTimelineTaskOffset(t, e) || 0 } return { min: n(e["min" + t]), max: n(e["max" + t]) } } _getTimelineTaskOffset(e, t) { if (!e) return; let i, n; switch (this.view) { case "quarter": case "year": { const a = t.getHours() / 24 + t.getMinutes() / 1440 + t.getSeconds() / 86400; i = new Date(e.date.getFullYear(), e.date.getMonth() + 1, 0), n = (t.getDate() - 1 + a) / i.getDate() * e.width; break } case "month": n = t.getDay() / 7 * e.width; break; case "week": n = parseFloat(t.getHours() + t.getMinutes() / 60 + t.getSeconds() / 3600) / 24 * e.width; break; case "day": n = parseFloat(t.getMinutes() + t.getSeconds() / 60) / 60 * e.width }return n } _getTaskBarSizeLimits(e, t) { const i = this, n = i._getTaskBarDateRange(e); let a, s = 0, r = i._convertDuration(e._cellObj.task.minDuration) || i._getMinDuration(e, t), o = i._convertDuration(e._cellObj.task.maxDuration); function l(a, s) { if (!a) return; let r, o; "left" === t && !i.rightToLeft || "right" === t && i.rightToLeft ? (a *= -1, o = n.dateEnd) : o = n.dateStart, s && Math.abs(r) === Math.abs(a) && (r = 0); let l = i._getTaskWorkingDateEnd({ dateStart: o }, a); const d = l.getTime() + 60 * (l.getTimezoneOffset() - o.getTimezoneOffset()) * 1e3, c = i._getTimelineTaskCellByDate(new Date(d)); if (!c) return; const m = i._getTimelineTaskOffset(c, new Date(d)); return i.rightToLeft ? "left" === t ? m - (i.$.timelineContent.offsetWidth - e.offsetLeft - e.offsetWidth - c.left) : i.$.timelineContent.offsetWidth - e.offsetLeft - c.left - m : "left" === t ? e.offsetLeft + e.offsetWidth - c.left - m : c.left - e.offsetLeft + m } if ("left" === t && !i.rightToLeft || "right" === t && i.rightToLeft) { const t = e._cellObj.task.maxDateStart, i = e._cellObj.task.minDateStart; i && (s = 60 * (i.getTimezoneOffset() - n.dateEnd.getTimezoneOffset()) * 1e3, a = Math.abs(i.getTime() - n.dateEnd.getTime()) + s, o = o ? Math.min(a, o) : a), t && (s = 60 * (t.getTimezoneOffset() - n.dateEnd.getTimezoneOffset()) * 1e3, a = Math.abs(t.getTime() - n.dateEnd.getTime()) + s, r = r ? Math.max(a, r) : a) } else { const t = e._cellObj.task.maxDateEnd, i = e._cellObj.task.minDateEnd; i && (s = 60 * (i.getTimezoneOffset() - n.dateStart.getTimezoneOffset()) * 1e3, a = Math.abs(i.getTime() - n.dateStart.getTime()) + s, r = r ? Math.max(a, r) : a), t && (s = 60 * (t.getTimezoneOffset() - n.dateStart.getTimezoneOffset()) * 1e3, a = Math.abs(t.getTime() - n.dateStart.getTime()) + s, o = o ? Math.min(a, o) : a) } return o && (r = Math.min(r, o)), { min: l(r, !0), max: l(o) } } _getMinDuration(e, t) { const i = this, n = i._taskBarMinWidth; if (!n || !i._timelineCells || 0 === i._timelineCells.length) return; const a = e._cellObj.task; let s, r, o = 1; r = i.rightToLeft ? parseFloat(e.style.right) || i.$.timelineContent.offsetWidth - e.offsetLeft - e.offsetWidth : parseFloat(e.style.left) || e.offsetLeft, "left" === t ? (s = a.dateEnd, r += parseFloat(e.style.width) || e.offsetWidth, o = -1) : s = a.dateStart; const l = r + o * n; let d; for (let e = 0; e < i._timelineCells.length; e++) { const t = i._timelineCells[e]; if (l < t.left) break; d = t } const c = i._getDateFromCell(l, d); return c ? Math.abs(s.getTime() - c.getTime()) : void 0 } _createDelimiter(e, t) { const i = this, n = i._dragDetails, a = n.segment, s = e.slice(0, 3), r = document.createElement("div"); if (r.classList.add("jqx-task-bar-limiter", e), e.indexOf("date") > -1) { if (!n[s] || !n[s].left) return; const [e, t] = a ? [a.element, a.originalPosition.x] : [n.timelineTask, 0], o = i.$.taskTimelineCellsContainer.children[i._getTaskDOMIndex(n.task)]; s.indexOf("max") > -1 ? r.style.width = o.offsetWidth - n[s].left - t - e.offsetWidth + "px" : r.style.width = n[s].left + t + "px" } else { if (!n[s].width) return; r.style["left" === t ? "right" : "left"] = n[s].width + "px" } return r } _doubleClickHandler(e) { const t = this; let i = e.target; if (t.disabled || t.disableWindowEditor) return; t.shadowRoot && i === t && (i = e.composedPath()[0]); let n = i.closest ? i.closest(".jqx-task-connection") : void 0; if (n) t._openPopupWindow(n); else if (n = i.closest(".jqx-timeline-task") || i.closest(".jqx-table tbody tr[row-id]"), n && t.$.taskSplitter.contains(n)) if (n.classList.contains("jqx-timeline-task")) t._openPopupWindow(n._cellObj.task); else { const e = t._getVCellById("task", n.getAttribute("row-id")); e && t._openPopupWindow(e.task) } } _checkDoubleClick(e) { const t = this; let i = e.target; if (t.shadowRoot && i === t && (i = e.composedPath()[0]), void 0 === t._dblClickDetails && (t._dblClickDetails = { clicks: 0 }), clearTimeout(t._dblClickDetails.timeOut), i !== t._dblClickDetails.target && (t._dblClickDetails.clicks = 0), t._dblClickDetails.target = i, t._dblClickDetails.clicks++, t._dblClickDetails.timeOut = setTimeout((function () { t._dblClickDetails && (t._dblClickDetails.clicks = 0) }), 250), 2 === t._dblClickDetails.clicks) return t._doubleClickHandler(e), t._dblClickDetails.clicks = 0, !0 } _downHandler(e) { const t = this, i = e.originalEvent, n = t.shadowRoot || t.isInShadowDOM ? i.composedPath()[0] : i.target, a = n.closest ? n.closest(".jqx-timeline-row") || n.closest(".jqx-timeline-task") : null; if (e.stopPropagation(), delete t._itemClickDetails, t._dragDetails) return delete t._dragDetails, void t._setConnectionFeedback(); const s = t.$.taskSplitter.contains(n) ? "task" : "resource"; if ((n.closest(".jqx-timeline-content") || n.closest(`.jqx-${s}-table`)) && requestAnimationFrame((() => t.$[`${s}Table`].focus({ preventScroll: !0 }))), t._itemClickDetails = { target: n }, !t._isMobile && 0 !== e.button) return; if (!a) { if (n.classList.contains("jqx-popup-window-modal")) { if (t._popupWindow) { const e = Object.keys(t._popupWindow); requestAnimationFrame((() => t._popupWindow[e[e.length - 1]].focus())) } return } return void ((n.closest(".jqx-table tbody tr[row-id]") && !n.classList.contains("jqx-arrow") || n.closest(".jqx-task-connection")) && t._checkDoubleClick(i)) } if (n.closest(".jqx-resource-timeline-view-cell") || t.disabled) return; const r = Array.from(t.$.timelineTasksContainer.children).find((e => e._cellObj.task === a._cellObj.task)); if (!r) return; const o = r._cellObj.task; if (!o) return; const l = t.$.timeline.getAttribute("task-bar-hovered"); if (r.getElementsByClassName("jqx-timeline-task-fill")[0] || l) { if ((n.closest(".jqx-timeline-task-fill") || r.classList.contains("milestone") && n.closest(".jqx-task-container")) && t._checkDoubleClick(i)) return; const a = n.closest(".jqx-timeline-task-progress-thumb"), s = e.pageX - window.pageXOffset, d = e.pageY - window.pageYOffset, c = t._dragDetails = {}, m = t.rightToLeft; let u, h = n.closest(".jqx-task-segment"); if (l && !h) { const e = r.querySelectorAll(".jqx-task-segment"); c.segments = e, h = "left" === l && !m || "right" === l && m ? e[0] : e[e.length - 1] } if (c.target = (a || n).className, c.timelineTask = r, c.task = r._cellObj.task, c.taskDimensions = { width: r.offsetWidth, height: r.offsetHeight, left: r.offsetLeft, top: r.offsetTop }, c.coordinates = { x: s, y: d }, !e.ctrlKey && h && o.segments && o.segments.length > 1 && !t.disableSegmentDrag) { const e = h.getBoundingClientRect(), t = h._segmentObj, i = c.task.segments, n = i.indexOf(t); c.segment = { element: h, dimensions: { width: e.width, left: h.offsetLeft }, offset: { x: s - e.left }, originalSize: { width: e.width }, isFirstSegment: 0 === n, isLastSegment: n === i.length - 1, min: {}, max: {} }, u = c.segment.dimensions } const g = c.taskDimensions; t.rightToLeft ? (g.right = t.$.timelineContent.offsetWidth - (g.left + g.width), c.originalPosition = { x: g.right, y: g.top }, c.segment && (u.right = g.width - (u.left + u.width), c.segment.originalPosition = { x: u.right })) : (c.originalPosition = { x: g.left, y: g.top }, c.segment && (c.segment.originalPosition = { x: u.left })); const f = (a || r).getBoundingClientRect(); if (c.offset = { x: s - f.left, y: d - f.top }, c.originalSize = { width: g.width, height: g.height }, a || !a && "project" === o.type && o.synchronized && !o.dragProject) return void (n.closest(".jqx-task-connection-point") && (c.timelineTask = void 0, c.relatedConnections = {})); ("visible" === t.resizeHandlesVisibility || t._isMobile && "auto" === t.resizeHandlesVisibility) && (n.closest(".jqx-timeline-task-fill") ? t._checkTaskBarResizability(e) : t.$.timeline.removeAttribute("task-bar-hovered")), c.min = {}, c.max = {}, t._setDragLimits(n) } } _documentMoveHandler(e) { const t = this; if (!t._dragDetails || !t._dragDetails.target) { let i = e.originalEvent.target; t.shadowRoot && i === t && (i = e.originalEvent.composedPath()[0]); const n = i.closest && i.closest(".jqx-table tbody tr[row-id]"); return n && n.data ? t._handleTableItemHover(n.data.itemId, i) : t._handleTimelineHover(e), t._checkTaskBarResizability(e), void t._toggleTooltip(e.originalEvent) } if (t._dragDetails.target.includes("jqx-task-connection-point")) return t._setConnectionFeedback(e), t._handleTimelineHover(e), void t._autoScroll(e); if (t._dragDetails.target.includes("jqx-timeline-task-progress-thumb")) t._handleTaskProgressChange(e); else if (t._autoScroll(e), !t._autoScrolling) if (t.$.timeline.hasAttribute("task-bar-hovered")) t._handleTaskBarResize(e); else if (t._dragDetails.target.includes("jqx-timeline-task-fill")) { const i = t._dragDetails.task; if (!i || i.disableDrag || "project" === i.type && i.synchronized && !i.dragProject) return; t._handleTaskBarDrag(e) } } _documentUpHandler(e) { const t = this, i = e.originalEvent; let n = i.target; if (t._upHandler(), !t._dragDetails) return void t._handleItemClick(i); if (t._scrollView.disableSwipeScroll = t._touchmoveInside = !1, t.shadowRoot && n === t && (n = i.composedPath()[0]), t.hasAttribute("connecting-task")) { const i = t._connectTask(e), n = t._tasks; if (t._setConnectionFeedback(), i) { const e = i.taskStart, a = i.taskEnd, [s, r, o] = [n.indexOf(i.taskStart), n.indexOf(i.taskEnd), i.type]; t.$.fireEvent("connectionEnd", { id: `${s}-${r}-${o}`, startIndex: s, startTaskId: "string" == typeof e.id || "number" == typeof e.id ? e.id : e.$.id, endIndex: r, endTaskId: "string" == typeof a.id || "number" == typeof a.id ? a.id : a.$.id, type: o }), t._autoSchedule(i.taskStart) } return t._isMobile && t._handleTimelineHover(e, !0), void delete t._dragDetails } const a = t._dragDetails.task; if (!a) return void delete t._dragDetails; let s; const r = t._dragDetails.segment ? t._dragDetails.segment.element : void 0; if (s || (s = Array.from(t.$.timelineTasksContainer.children).find((e => e._cellObj.task === a))), t.hasAttribute("dragged")) { t._snapToNearest(s, r), r || t._checkWorkingDays(s, r), t._refreshProject(a.$.project), t.groupByResources && t._refreshProject(a.$.group), t._autoSchedule(a), t._resourceTreeRefreshTimeout ? (clearTimeout(t._resourceTreeRefreshTimeout), delete t._resourceTreeRefreshTimeout, t._refreshAssignedResources(a)) : (t.snapToNearest || t.nonworkingDays.length > 0 || t.nonworkingHours.length > 0) && t._refreshAssignedResources(a), t.removeAttribute("dragged"); const e = { id: "string" == typeof a.id || "number" == typeof a.id ? a.id : a.$.id, item: t._cloneObject(a), dateStart: new Date(a.dateStart), dateEnd: new Date(a.dateEnd) }; r && (e.segment = t._cloneObject(r._segmentObj)), t.$.fireEvent("dragEnd", e) } else if (t.hasAttribute("progress-change")) t._resourceTreeRefreshTimeout && (clearTimeout(t._resourceTreeRefreshTimeout), delete t._resourceTreeRefreshTimeout, t._refreshAssignedResources(a, ["progress"])), t.removeAttribute("progress-change"), t.$.fireEvent("progressChangeEnd", { id: "string" == typeof a.id || "number" == typeof a.id ? a.id : a.$.id, item: t._cloneObject(a), progress: a.progress || 0 }); else if (t.hasAttribute("resized")) { t._snapToNearest(s, r), t._refreshProject(a.$.project), t.groupByResources && t._refreshProject(a.$.group), t._resourceTreeRefreshTimeout ? (clearTimeout(t._resourceTreeRefreshTimeout), delete t._resourceTreeRefreshTimeout, t._refreshAssignedResources(a, ["workload"])) : t.snapToNearest && t._refreshAssignedResources(a, ["workload"]), t.removeAttribute("resized"); const e = { id: "string" == typeof a.id || "number" == typeof a.id ? a.id : a.$.id, item: t._cloneObject(a), dateStart: a.dateStart, dateEnd: a.dateEnd }; r && (e.segment = t._cloneObject(r._segmentObj)), t.$.fireEvent("resizeEnd", e), t._autoSchedule(a) } else n.closest(".jqx-timeline-task") === s && (t._select("task", a.$.id, !0), delete t._dragDetails, t._handleItemClick(i)); const o = t.$.timelineContent.querySelectorAll(".jqx-task-bar-limiter"); for (let e = 0, t = o.length; e < t; e += 1)o[e].remove(); delete t._dragDetails } _handleItemClick(e) { const t = this, i = e.target; if (t._dragDetails || !t._itemClickDetails || t._itemClickDetails.target !== i) return void delete t._itemClickDetails; let n, a, s; if (i.closest(".jqx-timeline-task-fill")) a = i.closest(".jqx-timeline-task")._cellObj.task, s = "task"; else if (n = i.closest(".jqx-task-connection"), n) a = n.getAttribute("connection-id").split("-"), a = { source: a[0], target: a[1], type: a[2] }, s = "connection"; else if (i.closest(".milestone")) a = i.closest(".milestone")._cellObj.task, s = "milestone"; else if (n = i.closest(".jqx-table tbody tr"), n) { const e = t._getVCellById(s, n.getAttribute("row-id")); s = t.$.taskTable.contains(n) ? "task" : "resource", a = e ? e[s] : void 0 } if (!a) return; const r = { originalEvent: e, type: s, item: t._cloneObject(a) }; r.id = "connection" === s ? `${a.source}-${a.target}-${a.type}` : "string" == typeof a.id || "number" == typeof a.id ? a.id : a.$.id, delete t._itemClickDetails, t.$.fireEvent("itemClick", r) } _moveHandler(e) { const t = this; t._isMobile || e.stopPropagation(), (t.hasAttribute("dragged") || t.hasAttribute("progress-change")) && "touchmove" === e.originalEvent.type && e.originalEvent.preventDefault() } _handleTableItemHover(e, t) { const i = this, n = i._hoveredItem; let a, s; if (t && ([a, s] = i.$.taskSplitter.contains(t) ? [i.$.taskTable, "task"] : [i.$.resourceTable, "resource"]), n && "itemType" === n.type && n.id === e) return; const r = i.$.mainSplitter.querySelectorAll("table tbody tr[hover]"); for (let e = 0; e < r.length; e++)r[e].removeAttribute("hover"); if (void 0 === e) return void i._handleTimelineHover({ target: i }); if (!a) return; i._setTableHoverState(a, e); const o = i.$["task" === s ? "taskTimelineCellsContainer" : "resourceTimelineCellsContainer"].children; for (let t = 0, n = o.length; t < n; t += 1) { const n = o[t]; if (n._cellObj[s].$.id === e) { i._handleTimelineHover({ target: n }); break } } } _setTableHoverState(e, t) { const i = this; e || (e = i.$.taskTable); const n = e === i.$.taskTable ? "task" : "resource", a = e.querySelectorAll("table tbody tr"); if (!i._isMobile && i[n + "Columns"].length) for (let e = 0; e < a.length; e++) { let i = a[e]; const n = i.data; n && n.itemId === t && i.setAttribute("hover", "") } } _checkWorkingDays(e) { const t = this, i = t._dragDetails; if (!(i && i._taskDuration || t._timelineCells.length)) return; if (!e.classList || !e.classList.contains("jqx-timeline-task") || !t.hasAttribute("dragged") || 0 === t.nonworkingDays.length && 0 === t.nonworkingHours.length || !i || !i._taskDuration) return; const n = e._cellObj, a = n.task, s = t._getTaskWorkingDateEnd(a), r = a.segments; let o = new Date(t._timelineCells[t._timelineCells.length - 1].date); if ("year" === t.view || "quarter" === t.view ? (o.setMonth(o.getMonth() + 1), o.setDate(0), o.setHours(23, 59, 59, 999)) : "month" === t.view ? (o.setDate(o.getDate() + 6 - o.getDay()), o.setHours(23, 59, 59, 999)) : "week" === t.view ? o.setHours(23, 59, 59, 999) : o.setHours(o.getHours(), 59, 59, 999), s && (a.dateEnd = a.maxDateEnd ? new Date(Math.min(s.getTime(), a.maxDateEnd.getTime())) : s), a.dateEnd = new Date(Math.min(o.getTime(), a.dateEnd.getTime())), a.duration = t._convertDuration(t.nonworkingDays.length > 0 || t.nonworkingHours.length > 0 ? t._getWorkingTime(a.dateStart, a.dateEnd) : a.dateEnd.getTime() - a.dateStart.getTime(), !0), r && r.length > 1) { for (let e = 0, i = r.length; e < i; e += 1)t._snapToNearestDates(r[e], !0); t._validateTaskSegments(a), a.segments.length !== r.length && t._recycleSegments(a, e), t._setTaskBarSegments(n, e, !0), t._setTaskBarProgress(a) } t._setTimelineTaskBar(n, void 0, !0), t._refreshTaskConnections(n.task), t._refreshTableColumnsData(a, ["dateEnd", "duration", "overdue"]) } _getTaskWorkingDateEnd(e, t) { const i = this; if (!e || !e.dateStart) return; let n, a, s = new Date(e.dateStart); if (t || (t = i._dragDetails ? i._dragDetails._taskDuration : i._getWorkingTime(e.dateStart, e.dateEnd)), !i.adjustToNonworkingTime) return new Date(e.dateStart.getTime() + t); const r = t < 0 ? -1 : 1, o = i.nonworkingDays, l = i.nonworkingHours; for (t = Math.abs(t); t > 0;) { const e = Math.min(t, 36e5 - (60 * s.getMinutes() * 1e3 + 1e3 * s.getSeconds() + s.getMilliseconds())); if (o.indexOf(s.getDay()) > -1) a = new Date(s), a.setHours(0, 0, 0, 0), a.setDate(s.getDate() + 1 * r), n = Math.min(e, a.getTime() - s.getTime()), s = new Date(s.getTime() + n); else if (l.indexOf(s.getHours()) > -1) { a = new Date(s); const t = a.getTime(); a.setHours(s.getHours() + 1 * r, 0, 0, 0), t === a.getTime() && a.setHours(s.getHours() + 2 * r, 0, 0, 0), n = Math.min(e, a.getTime() - s.getTime()), s = new Date(s.getTime() + n) } else t -= e, s = new Date(s.getTime() + r * e) } return s } _createConnectingElement(e, t, i, n, a) { const s = this; if (!s._connectionDetails || !s._connectionDetails.start) return; const r = s._connectionDetails, o = r.type, l = s.$.timelineConnectionsContainer; let d = r.connections.shift(); d || (d = document.createElement("div"), d.classList.add("jqx-task-connection")), d.style.width = d.style.width = "", "horizontal" === n ? (d.style.width = Math.abs(i) + "px", d.style.height = "") : (d.style.width = "", d.style.height = Math.abs(i) + "px"), d.style[s.rightToLeft ? "left" : "right"] = "", d.style[s.rightToLeft ? "right" : "left"] = e + "px", d.style.top = t + "px", d.setAttribute("connection-id", r.id); const c = r.start.task.label, m = 0 === o || 3 === o ? "start" : "end", u = r.end.task.label, h = 0 === o || 1 === o ? "start" : "end"; if (d.setAttribute("aria-label", "Connection between " + c + " (" + m + ") and " + u + " (" + h + ")"), a) { let e = 0 === o || 1 === o ? "right" : "left"; s.rightToLeft && (e = "left" === e ? "right" : "left"), d.setAttribute("arrow-direction", e) } else d.removeAttribute("arrow-direction"); d.parentElement || l.appendChild(d) } _getConnectionType(e, t) { if (!e || !t) return; let i, n; return "string" == typeof e ? i = !e.includes("end") : e instanceof HTMLElement && (i = !e.classList.contains("end")), "string" == typeof t ? n = t.includes("end") : t instanceof HTMLElement && (n = t.classList.contains("end")), i && !n ? 0 : i || n ? !i && n ? 2 : i && n ? 3 : void 0 : 1 } _setConnectionFeedback(e) { const t = this, i = t._dragDetails; if (!i || !i.target || !e) { const e = t._connectionFeedback; return e && e.parentElement && e.remove(), t.removeAttribute("connecting-task"), void delete t._connectionFeedback } if (!i.target || !i.target.includes("jqx-task-connection-point")) return; const n = i.task, a = i.taskDimensions; if (!n) return; if (!t.hasAttribute("connecting-task")) { if (t.$.fireEvent("connectionStart", { startIndex: t._tasks.indexOf(n) }).defaultPrevented) return void delete t._dragDetails.target; t.setAttribute("connecting-task", ""), t._isMobile && (t._scrollView.disableSwipeScroll = t._touchmoveInside = !0) } const s = "milestone" === n.type, r = t.rightToLeft; let o = s ? -1 * a.height / 2 : 0; t._dragDetails.target.includes("end") && (o = s ? -1 * o : a.width), t._connectionFeedback || (t._connectionFeedback = document.createElement("div"), t._connectionFeedback.classList.add("jqx-task-connection-feedback")); const l = t._dragDetails.coordinates.x + (r ? -1 : 1) * o, d = t._dragDetails.coordinates.y, c = t._dragDetails.offset.x - (r ? a.width : 0), m = t._dragDetails.offset.y, u = e.pageX - window.pageXOffset + c, h = e.pageY - window.pageYOffset + m - a.height / 2; r ? (t._connectionFeedback.style.left = "", t._connectionFeedback.style.right = a.right + o + "px") : (t._connectionFeedback.style.left = a.left + o + "px", t._connectionFeedback.style.right = ""), t._connectionFeedback.style.top = a.top + a.height / 2 + "px", t._connectionFeedback.style.width = Math.sqrt(Math.pow(Math.abs(u - l), 2) + Math.pow(Math.abs(h - d), 2)) + "px", t._connectionFeedback.style.transform = t.rightToLeft ? "rotate(" + 180 * (Math.atan2(d - h, l - u) || 0) / Math.PI + "deg)" : "rotate(" + 180 * (Math.atan2(h - d, u - l) || 0) / Math.PI + "deg)", t._connectionFeedback.parentElement || t.$.timelineContent.appendChild(t._connectionFeedback) } _connectTask(e) { const t = this, i = t._tasks; let n, a, s, r, o, l, d, c, m; if (e.originalEvent) { const r = e.originalEvent; let o = t._isMobile ? document.elementFromPoint(r.pageX - window.pageXOffset, r.pageY - window.pageYOffset) : r.target; if (!(t._dragDetails && t._dragDetails.target && o && o.classList)) return; if (t.shadowRoot && o === t && (o = t._isMobile ? t.shadowRoot.elementFromPoint(r.pageX - window.pageXOffset, r.pageY - window.pageYOffset) : r.composedPath()[0]), n = t._dragDetails.target.includes("jqx-task-connection-point") ? t._dragDetails.target : void 0, a = o.classList.contains("jqx-task-connection-point") ? o : void 0, n && (l = t._dragDetails.task), a) s = a.closest(".jqx-timeline-task"); else if (t._isMobile && o.classList.contains("jqx-timeline-task-fill") && (s = o.closest(".jqx-timeline-task"), s)) { const e = r.pageX - window.pageXOffset - s.getBoundingClientRect().left; a = s.querySelector(".jqx-task-connection-point." + (e >= s.offsetWidth / 2 ? "end" : "start")) } if (!l || !s) return; d = s._cellObj.task; for (let e = 0, t = i.length; e < t; e += 1) { const t = i[e]; if (t !== l) if (t !== d) { if (void 0 !== c && void 0 !== m) break } else m = e; else c = e } } else { if (!e || e.length < 3) return; const n = t._getValidConnectionId(e[0], e[1], e[2], "_connectTask"); if (void 0 === n) return;[c, m] = [parseInt(n[0]), parseInt(n[1])], [l, d] = [i[c], i[m]], r = parseInt(e[2]), o = e[4] || 0 } if (!l || !d || l === d || l.isGroup || d.isGroup || t._isAutoScheduled(l, d) || t.hasAttribute("dragged") || t.hasAttribute("resized")) return; void 0 === r && (r = t._getConnectionType(n, a)); let u = t._connections; return u || (t._connections = u = []), t._updateConnection([c, m, r, o]) ? (e.originalEvent && t._recycleConnections([{ startIndex: c, endIndex: m, type: r }]), e.originalEvent && t.$.fireEvent("itemInsert", { type: "connection", item: { source: c, target: m, type: r } }), { taskStart: l, taskEnd: d, type: r }) : void 0 } _recycleConnections(e) { const t = this, i = t._tasks; if (e ? Array.isArray(e) || (e = [e]) : e = t._connections, !i || !i.length || !e) return; const n = t.$.timelineTasksContainer.children, a = t.$.timelineConnectionsContainer; let s, r = []; if (n.length) { const a = n[0], o = (() => { let e = []; for (let t = 0, a = n.length; t < a; t += 1)e.push(i.indexOf(n[t]._cellObj.task)); return e })(), l = a.querySelector(".jqx-task-connection-point." + (t.rightToLeft ? "end" : "start")), d = t._baselineProportion, c = t.showBaseline ? t._taskDefaultHeight / d : 0; s = { top: l.offsetTop, width: l.offsetWidth }, s.offset = Math.abs(l.offsetLeft) - s.width; for (let n = 0, a = e.length; n < a; n += 1) { const a = e[n], l = a.startIndex, d = a.endIndex; if (o.indexOf(l) < 0 && o.indexOf(d) < 0) continue; const m = i[l], u = i[d], { vCellStart: h, vCellEnd: g } = t._getTasksVCell(m, u); if (!h || !g) continue; const f = a.type, p = { start: { width: s.width, top: s.top, index: l, task: m }, end: { width: s.width, top: s.top, index: d, task: u }, type: f }, _ = t._getTaskBarDetails(h, t._getTimelineCellByDate(m.dateStart), t._getTimelineCellByDate(m.dateEnd)), T = t._getTaskBarDetails(g, t._getTimelineCellByDate(u.dateStart), t._getTimelineCellByDate(u.dateEnd)); "milestone" === m.type && (_.width = h.height - c), "milestone" === u.type && (T.width = h.height - c), p.start.left = 0 === f || 3 === f ? -1 * (s.width + s.offset) : _.width + s.offset, p.end.left = 0 === f || 1 === f ? -1 * (s.width + s.offset) : T.width + s.offset, t._connectionDetails = p, _.height = T.height = h.height - c, _.type = m.type, T.type = u.type, t._setConnectionDetails(_, T), t._createTaskConnection(), r.push(t._connectionDetails.id), delete t._connectionDetails } } if (arguments.length) return; const o = Array.from(a.children); for (let e = 0, t = o.length; e < t; e += 1) { const t = o[e]; r.indexOf(t.getAttribute("connection-id")) < 0 && t.remove() } } _getTasksVCell(e, t) { const i = this._timelineVCells; let n, a; for (let s = 0, r = i.length; s < r; s += 1) { const r = i[s]; if (r.task === e && (n = r), r.task === t && (a = r), n && a) break } return { vCellStart: n, vCellEnd: a } } _isAutoScheduled(e, t, i) { const n = this, a = n._tasks; let s = {}; if (n.autoSchedule) return e instanceof HTMLElement && (e = e._cellObj.task), t instanceof HTMLElement && (t = t._cellObj.task), function e(t, r) { const o = n._getTaskConnections().taskConnections, l = a.indexOf(t); s[l] = !0; for (let t = 0; t < o.length; t++) { const d = o[t], c = d.endIndex; if (c === r) return i && n._removeConnection(l + "-" + c + "-" + d.type, !0), !0; if (!s[c] && e(a[c], r)) return !0 } }(t, a.indexOf(e)) } _setConnectionDetails(e, t) { const i = this; if (!i._connectionDetails) return; const n = i._connectionDetails, a = n.start, s = n.end, r = n.type; if (!a || !s) return; let o, l = e.width, d = t.width, c = e.left, m = t.left, u = e.top, h = t.top, g = a.left, f = s.left; const p = a.index, _ = s.index; if ("milestone" === e.type && (l = e.height, c -= l / 2), "milestone" === t.type && (d = t.height, m -= d / 2), n.id = p + "-" + _ + "-" + r, !n.connectionStartOffset || !n.connectionEndOffset) { switch (r) { case 0: g = Math.abs(g) - a.width, f = Math.abs(f) - s.width; break; case 1: g -= l, f = Math.abs(f) - s.width; break; case 2: g -= l, f -= d; break; default: g = Math.abs(g) - a.width, f -= d }n.start.offset = g += a.width / 2, n.end.offset = f += s.width / 2 } if (0 === r && c > m || 1 === r && c + l + g > m - f && h > u || 2 === r && m + d > c + l || 3 === r && (c - g < m + d + f && h > u || c - g > m + d + f && u > h)) { o = !0; let i = e; e = t, t = i, i = g, g = f, f = i, i = l, l = d, d = i, i = c, c = m, m = i, i = u, u = h, h = i } let T = c, b = m; !o && 1 === r || o && 3 === r ? T += l : !o && 3 === r || o && 1 === r ? b += d : 2 === r && (T += l, b += d); let k = i.$.timelineConnectionsContainer.querySelectorAll('.jqx-task-connection[connection-id^="' + p + "-" + _ + '-"]'); 0 === k.length && (k = i.$.timelineConnectionsContainer.querySelectorAll('.jqx-task-connection[connection-id^="' + _ + "-" + p + '"]')), n.connections = [].slice.call(k), n.start.x = T, n.start.y = u + a.top, n.end.x = b, n.end.y = h + s.top, n.type = r, n.inverted = o } _createTaskConnection() { const e = this, t = e._connectionDetails; if (!t) return; const i = 2 * e._taskConnectionWidth, n = t.start.x, a = t.start.y, s = t.start.offset, r = t.start.top, o = t.end.x, l = t.end.y, d = t.end.offset, c = t.type, m = t.inverted, u = !m && 3 === c || m && 1 === c, h = !m && 1 === c || m && 3 === c; let g, f, p, _ = n, T = o; u ? (_ = n - d, T = o + d) : h && (_ = n + s, T = o - d); const b = _ <= T && u, k = _ >= T && h, y = 2 === c || h; !function d(u) { g !== o && (u ? "horizontal" === u ? (p = g - o + (b ? -1 : 1) * s, g = _ > T ? g - Math.abs(p) : g, e._createConnectingElement(g, f, (_ === T ? 0 : Math.abs(p)) + (y ? i : 0), "horizontal"), g = _ < T ? g - p : g, d("vertical")) : (p = Math.abs(f - l), f += a < l ? 0 : -1 * p, g -= m && 1 === c || !m && 3 === c && a > l ? i : 0, e._createConnectingElement(g, f, p, "vertical"), d()) : (g ? (p = Math.abs(g - o), g >= o && (g += -1 * p, p += i), e._createConnectingElement(g, f + (a < l ? Math.abs(f - l) : 0), p, "horizontal", !t.inverted), g = o) : (g = n, f = a, (0 === c || !m && 3 === c || m && 1 === c) && (g -= s), e._createConnectingElement(g, f, s, "horizontal", t.inverted), y && (g += s - i), b || k ? (e._createConnectingElement(g, f -= a > l ? r : 0, r, "vertical"), f += a < l ? r : 0) : d("vertical")), d("horizontal"))) }(), t.connections.map((e => e.parentElement.removeChild(e))) } _getTaskIndexById(e, t) { const i = this; if (t || (t = i._tasks), "number" == typeof e) return isNaN(parseInt(e)) ? -1 : parseInt(e); if ("object" == typeof e) return i._getItemIndex(e, "task"); for (let i = 0, n = t.length; i < n; i += 1)if (t[i].id === e) return i; return -1 } _refreshTaskConnections(e) { const t = this, i = e instanceof HTMLElement ? e._cellObj.task : e, n = t._tasks.indexOf(i); if (void 0 === n || e.classList && e.classList.contains("jqx-visibility-hidden")) return; let a; if (t._dragDetails && (a = t._dragDetails.relatedConnections[n]), !a) { a = []; const e = t._connections; if (!e || !e.length) return; for (let t = 0, i = e.length; t < i; t += 1) { const i = e[t]; i.startIndex !== n && i.endIndex !== n || a.push(i) } t._dragDetails && (t._dragDetails.relatedConnections[n] = a) } t._recycleConnections(a) } _dragStartHandler(e) { const t = this, i = e.target.closest; (t._dragDetails || i && i.call(t, "jqx-gantt-chart") === t) && e.preventDefault() } _getFirstCellObjInView(e) { const t = this; if (e || (e = t._timelineCells), !e) return; const i = Math.abs(t.scrollLeft); let n, a; for (let t = 0; t < e.length; t++) { const s = e[t]; if (s.left + s.width > i) { n = s; break } a = s } return !n && a && (n = i > a.left ? a : e[0]), n } _getFirstContentCellInView(e = "task") { const t = this; let i, n, a, s; if ("task" === e ? (i = t._timelineVCells, n = t.scrollTop) : (i = t._timelineResourceVCells, n = t.$.resourceVerticalScrollBar.value), !i) return 0; for (let e = 0; e < i.length; e++) { const t = i[e]; if (t.top + t.height > n) { a = t; break } s = t } return !a && s && (a = n > s.left ? s : i[0]), a } _getProjectTasks(e, t) { const i = this, n = i.groupByResources && e.isGroup ? "group" : "project", a = i._tasks; if (!e || "project" !== e.type) return []; let s = []; for (let r = 0, o = a.length; r < o; r += 1) { const o = a[r]; o.$[n] === e && (s.push(o), "project" !== o.type || t || (s = s.concat(i._getProjectTasks(o, t)))) } return s } _getSubTaskLimits(e) { const t = this; if (!e) return; const i = e._cellObj.task, n = t._getProjectTasks(i); let a, s; if (!n.length) return; let r = n[0], o = n[0]; for (let e = 0; e < n.length; e++) { const t = n[e]; n[e].dateEnd && n[e].dateStart && (r.dateStart || (r = t[e]), o.dateEnd || (o = t[e]), n[e].dateEnd.getTime() > o.dateEnd.getTime() && (o = n[e]), n[e].dateStart.getTime() < r.dateStart.getTime() && (r = n[e])) } const l = t.$.timelineContent.offsetWidth; let d, c, m; if (r && (d = t._getTimelineSubTaskOffset(r), d && (c = d.left, m = d.width, a = Math.max(0, t.rightToLeft ? l - e.offsetLeft - e.offsetWidth - (l - c - m) : e.offsetLeft - c))), o && (d = t._getTimelineSubTaskOffset(o), d)) if (c = d.left, m = d.width, t.rightToLeft) { const t = l - e.offsetLeft - e.offsetWidth; s = Math.max(t, t + l - (l - c)) } else s = Math.max(e.offsetLeft, e.offsetLeft + l - (c + m)); return { min: a, max: s } } _getTimelineSubTaskOffset(e) { const t = this, i = t.$.timelineTasksContainer.children[t._tasks.filter((e => !e.hidden)).indexOf(e)]; let n, a, s; if (i) n = i.offsetLeft, s = i.offsetWidth; else { const i = t._getTimelineTaskCellByDate(e.dateStart), r = t._getTimelineTaskCellByDate(e.dateEnd); i && (n = i.left + t._getTimelineTaskOffset(i, e.dateStart) || 0), r && (a = r.left + t._getTimelineTaskOffset(r, e.dateEnd) || 0), s = a - n } return { left: n, width: s } } _getTaskDragLimits(e) { const t = this, i = t._dragDetails, n = i.segment ? i.segment.element : void 0, a = n && n.previousElementSibling ? {} : t._getTaskBarPositionLimits(e._cellObj.task, "DateStart"), s = n && n.nextElementSibling ? {} : t._getTaskBarPositionLimits(e._cellObj.task, "DateEnd"), r = t._dragDetails.taskDimensions; let o = {}; return (a.min || s.min) && (o.min = Math.max(a.min || 0, Math.max(0, (s.min || 0) - r.width))), s.max && (o.max = Math.max(0, s.max - r.width)), a.max && (o.max = o.max ? Math.min(a.max, o.max) : a.max), o } _getTaskBarDateRange(e) { if (!e) return; const t = this, i = e.classList.contains("milestone"), n = parseFloat(e.style.width) || e.offsetWidth, a = i ? n / 2 : n, s = t.rightToLeft ? parseFloat(e.style.right) || t.$.timelineContent.offsetWidth - e.offsetLeft - a : parseFloat(e.style.left) || e.offsetLeft, r = e._cellStart, o = e._cellEnd, l = e._cellObj.task, d = l.minDateStart, c = l.maxDateEnd; let m, u; return m = t._getDateFromCell(s, r), !d || "project" === e._cellObj.task.type && e._cellObj.task.synchronized || (m = new Date(Math.max(d.getTime(), m.getTime()))), u = i ? new Date(m) : t._getDateFromCell(s + a, o), !c || "project" === e._cellObj.task.type && e._cellObj.task.synchronized || (u = new Date(Math.min(c.getTime(), u.getTime()))), { dateStart: m, dateEnd: u } } _getTaskBarDetails(e, t, i) { const n = this, a = e.task; if (!e) return; let s = new Date(a.dateStart); const r = new Date(a.dateEnd); if (!n._dragDetails && n.snapToNearest) { let s, r, o = a.dateStart, l = a.dateEnd; const d = new Date(t.date), c = n._getDateFromCell(t.left + t.width, t), m = new Date(i.date), u = n._getDateFromCell(i.left + i.width, i); return s = c.getTime() - o.getTime() >= c.getTime() - d.getTime() ? t.left : t.left + t.width, "milestone" !== a.type && (r = u.getTime() - l.getTime() >= l.getTime() - m.getTime() ? i.left - s : i.left - s + i.width), { left: s, width: r, top: e.top } } let o, l, d, c, m, u; switch (n.view) { case "quarter": case "year": { d = new Date(s.getFullYear(), s.getMonth() + 1, 0).getDate(), c = new Date(r.getFullYear(), r.getMonth() + 1, 0).getDate(); const e = s.getHours() / 24 + s.getMinutes() / 1440 + s.getSeconds() / 86400, n = r.getHours() / 24 + r.getMinutes() / 1440 + r.getSeconds() / 86400; o = t.left + (s.getDate() - 1 + e) / d * t.width, l = i.left + (r.getDate() - 1 + n) / c * i.width - o; break } case "month": m = parseFloat(s.getHours() + "." + s.getMinutes() + s.getSeconds()) / 24 * (t.width / 7), u = parseFloat(r.getHours() + "." + r.getMinutes() + r.getSeconds()) / 24 * (t.width / 7), o = t.left + s.getDay() / 7 * t.width + m, l = i.left + r.getDay() / 7 * i.width - o + u; break; case "week": m = parseFloat(s.getHours() + "." + s.getMinutes() + s.getSeconds()) / 24 * t.width, u = parseFloat(r.getHours() + "." + r.getMinutes() + r.getSeconds()) / 24 * t.width, o = t.left + m, l = i.left + (u - m) - t.left; break; case "day": m = parseFloat(s.getMinutes() + s.getSeconds() / 60) / 60 * t.width, u = parseFloat(r.getMinutes() + r.getSeconds() / 60) / 60 * t.width, o = t.left + m, l = i.left + (u - m) - t.left }return { width: "milestone" === a.type ? "" : l, left: o, top: e.top } } _snapToNearestDates(e, t) { const i = this; if (!i.snapToNearest) return; if (e.classList && e._cellObj && (e = e._cellObj.task), !e) return; let n = e.dateStart, a = e.dateEnd; const { cellStart: s, cellEnd: r } = { cellStart: i._getTimelineCellByDate(n), cellEnd: i._getTimelineCellByDate(a) }, o = new Date(s.date), l = i._getDateFromCell(s.left + s.width, s), d = new Date(r.date), c = i._getDateFromCell(r.left + r.width, r); if (n = l.getTime() - n.getTime() >= l.getTime() - o.getTime() ? o : l, "milestone" !== e.type && (a = c.getTime() - a.getTime() >= c.getTime() - d.getTime() ? d : c), e.dateEnd = a, a.getTime() < n.getTime() && (n = new Date(a)), e.dateStart = n, e.duration = e.duration = i._convertDuration(i.nonworkingDays.length > 0 || i.nonworkingHours.length > 0 ? i._getWorkingTime(e.dateStart, e.dateEnd) : e.dateEnd.getTime() - e.dateStart.getTime(), !0), !t && e.segments && e.segments.length > 1) { const t = e.segments; for (let e = 0, n = t.length; e < n; e += 1)i._snapToNearestDates(t[e], !0); i._validateTaskSegments(e) } } _getTimelineTaskCellByDate(e) { if (!e) return; const t = this, i = t.view, n = t._timelineCells; for (let a = 0; a < n.length; a++) { const s = n[a]; if (t._isDateInCell(s.date, e, i)) return s } } _isDateInCell(e, t, i) { switch (i) { case "quarter": case "year": if (e.getYear() === t.getYear() && e.getMonth() === t.getMonth()) return !0; break; case "month": { let i = new Date(e); if (i.setDate(i.getDate() + (6 - i.getDay()) + 1), i.setMilliseconds(i.getMilliseconds() - 1), t.getTime() >= e.getTime() && t.getTime() <= i.getTime()) return !0; break } case "week": if (e.getYear() === t.getYear() && e.getMonth() === t.getMonth() && e.getDate() === t.getDate()) return !0; break; case "day": if (e.getYear() === t.getYear() && e.getMonth() === t.getMonth() && e.getDate() === t.getDate() && e.getHours() === t.getHours()) return !0 } } _handleInverted(e) { const t = this; function i(e) { e || (e = "task"); const i = t.$[`${e}Splitter`]; if (!t.$.mainSplitter.contains(i)) return; const [n, a, s, r, o] = "task" === e ? [t.$.tableSplitterItem, t.$.timelineSplitterItem, t, t.$.taskTimelineContainer, "scrollTop"] : [t.$.resourceTableItem, t.$.resourceTimelineSplitterItem, t.$.resourceVerticalScrollBar, t.$.resourceTimelineContent, "value"], l = t.treeSize !== n.size ? n.style[i._measurements.dimension] : t.treeSize; n.size = "", i.removeChild(a), t.inverted && !t.rightToLeft || !t.inverted && t.rightToLeft ? i.insertBefore(a, n) : i.appendChild(a), n.size = l, r.scrollTop = s[o] } (!e || t.inverted || t.rightToLeft) && (i("task"), i("resource")) } _createResourceTimeline() { const e = this; if (e._handleResourcePanelVisibility(), e.$.taskSplitterItem._setSize("size", e.taskPanelSize), !e._resources || !e.$.mainSplitter.contains(e.$.resourceTable)) return; const t = e.$.resourceSplitterItemHeader.innerHTML; (e.resourcePanelHeaderTemplate && !t || !e.resourcePanelHeaderTemplate && t) && e._handleHeaderTemplate("resource"), e._setTable(e.$.resourceTable), e._recycleResourceHeaderCells(), e._createResourceTimelineContent(), e._synchronizeSplitters(e.$.taskSplitter, e.$.resourceSplitter), e.$.resourceTimelineContent.scrollLeft = e.$.resourceTimelineHeader.scrollLeft = e.$.timelineHeader.scrollLeft, e.$.resourceSplitter.refresh(), e._refresh(), e._highlightAssignedItem("task", e._getSelection("task", e.selectedTaskIds)) } _createResourceTimelineContent() { const e = this, t = e._timelineVCells, i = t.length ? t[0].height : e._taskDefaultHeight; e._createResourceTimelineVCells(i); const n = e._timelineResourceVCells.length * i; e.$.resourceTimelineCellsContainer.style.height = n + "px", e.$.container.style.setProperty("--jqx-gantt-chart-resource-timeline-content-height", n + "px"), e._recycleResourceContent() } _recycleResourceContent() { const e = this; if (!e.$.mainSplitter.contains(e.$.resourceSplitterItem)) return; const t = e._timelineResourceVCells, i = e.$.resourceTimelineCellsContainer, n = e._getFirstContentCellInView("resource"), a = e.$.tooltip; if (a && i.contains(a.selector) && e._closeTooltip(), !n) return void (i.innerHTML = ""); const s = t.indexOf(n), r = n.height, o = 1 - (n.top + r - Math.abs(e.$.resourceVerticalScrollBar.value)) / r, l = t ? t.length : 0, d = !e.$.resourceSplitter.offsetHeight, c = e.$.resourceTimelineContent.offsetHeight, m = !d && c ? Math.min(l, Math.ceil((parseFloat((c / r).toFixed(2)) + o).toFixed(2))) : l, u = i.children, h = e.$.timelineViewCells.children, g = document.createDocumentFragment(); for (; i.childElementCount > m;)i.lastElementChild.remove(); for (let t = 0; t < m; t += 1) { let i = u[t]; i || (i = document.createElement("div"), i.classList.add("jqx-timeline-row"), g.appendChild(i)), e._createTimelineRowCells(i, h) } g.childElementCount && i.appendChild(g); const f = i.children, p = e._getSelection("resource", e.selectedResourceIds); for (let i = 0; i < m; i += 1) { const n = t[s + i], a = f[i]; if (!n) { a && a.remove(); continue } const r = n.resource, o = r.$.id; p.indexOf(o) > -1 ? a.setAttribute("selected", "") : a.removeAttribute("selected"), a._cellObj = n, a.setAttribute("row-id", o), a.style.top = n.top + "px", e._refreshResourceTimelineContent(r, a) } } _createResourceTimelineVCells(e) { const t = this, i = t._resources, n = t.$.resourceTable.rows, a = t._timelineResourceVCells = []; let s = 0; if (void 0 === e) { const i = t._timelineVCells; e = i.length ? i[0].height : t._taskDefaultHeight } for (let t = 0, r = n.length; t < r; t += 1) { const r = i[n[t].data.itemIndex]; r.hidden || (a.push({ top: s, height: e, resource: r }), s = parseFloat((s + e).toFixed(2))) } } _handleResourcePanelVisibility() { const e = this, t = e.$.container, i = e._resources.filter((e => !e.hidden)), n = e.$.mainSplitter, a = e.$.resourceSplitterItem, s = e.$.taskSplitterItem; if (!i || !i.length || e.hideResourcePanel) return a && !a.size && (a._size = a.style[n._measurements.dimension]), e._resourceScrollView && (e._resourceScrollView.unlisten(), delete e._resourceScrollView), s.size = "", s.min = "", e.$.resourceTable && e.$.resourceTable.clearSelection(), n.contains(a) && (n.removeChild(a), e._refresh()), e._highlightAssignedItem("resource"), void t.removeAttribute("show-resource-panel"); n.contains(a) || (s.min = e.taskPanelMin, e._createResourcePanel(), e._setupResourcePanel(), e._resourceScrollView = new JQX.Utilities.Scroll(e.$.resourceSplitterItem, e.$.horizontalScrollBar, e.$.resourceVerticalScrollBar)), t.setAttribute("show-resource-panel", ""), e._synchronizeSplitters(e.$.taskSplitter, e.$.resourceSplitter) } _createResourcePanel() { const e = this, t = e.$.mainSplitter; let i = e.$.resourceSplitterItem; if (!i) { i = document.createElement("jqx-splitter-item"), i.classList.add("jqx-resource-splitter-item"), i.innerHTML = `<div jqx-id="resourceSplitterItemHeader" class="jqx-resource-panel-header"></div>\n <jqx-splitter jqx-id="resourceSplitter" wait class="jqx-resource-splitter" auto-fit-mode="end">\n <jqx-splitter-item jqx-id="resourceTableItem" class="jqx-resource-table-item">\n <jqx-table wait jqx-id="resourceTable" class="jqx-resource-table" virtualization deferred-scroll-delay="0"></jqx-table>\n </jqx-splitter-item>\n <jqx-splitter-item jqx-id="resourceTimelineSplitterItem" class="jqx-timeline-splitter-item">\n <div class="jqx-timeline" jqx-id="resourceTimeline">\n <div class="jqx-timeline-container" role="presentation">\n <div class="jqx-timeline-header" jqx-id="resourceTimelineHeader" role="rowgroup">\n <div class="jqx-timeline-view-cells" jqx-id="resourceTimelineViewCells" role="row"></div>\n </div>\n <div jqx-id="resourceTimelineContent" class="jqx-timeline-content" role="rowgroup">\n <div jqx-id="resourceTimelineCellsContainer" class="jqx-timeline-cells-container" aria-hidden="true"></div>\n </div>\n </div>\n </div>\n <jqx-scroll-bar wait jqx-id="resourceVerticalScrollBar" class="jqx-timeline-scroll-bar jqx-resource-scroll-bar" \n orientation="vertical" aria-controls="[[${e.id || ""}]]">\n </jqx-scroll-bar>\n </jqx-splitter-item>\n </jqx-splitter>`, t.contains(i) || t.appendChild(i); const n = JQX.Utilities, a = i.querySelectorAll(".jqx-resource-panel-header, .jqx-resource-splitter, .jqx-resource-table-item, \n .jqx-resource-table, .jqx-timeline-splitter-item, .jqx-timeline, .jqx-timeline-header, .jqx-timeline-view-cells, .jqx-timeline-content,\n .jqx-timeline-cells-container, .jqx-timeline-scroll-bar"), [s, r, o, l, d, c, m, u, h, g, f] = a; e.$.resourceSplitterItem = i, e.$resourceSplitterItem = n.Extend(i), e.$.resourceSplitterItemHeader = s, e.$resourceSplitterItemHeader = n.Extend(s), e.$.resourceSplitter = r, r.hasResizeObserver = !1, r.wait = !1, e.$resourceSplitter = n.Extend(r), e.$.resourceTableItem = o, e.$resourceTableItem = n.Extend(o), e.$.resourceTable = l, l.hasResizeObserver = !1, e.$resourceTable = n.Extend(l), e.$.resourceTimelineSplitterItem = d, e.$resourceTimelineSplitterItem = n.Extend(d), e.$.resourceTimelineViewCells = u, e.$resourceTimelineViewCells = n.Extend(u), e.$.resourceTimeline = c, e.$resourceTimeline = n.Extend(c), e.$.resourceTimelineContent = h, e.$resourceTimelineContent = n.Extend(h), e.$.resourceTimelineHeader = m, e.$resourceTimelineHeader = n.Extend(m), e.$.resourceTimelineCellsContainer = g, e.$resourceTimelineCellsContainer = n.Extend(g), e.$.resourceVerticalScrollBar = f, e.$resourceVerticalScrollBar = n.Extend(f) } } _setupResourcePanel() { const e = this, t = e.rightToLeft, i = e.$.resourceSplitterItem, n = e.$.resourceTableItem, a = e.$.resourceTable, s = e.$.resourceTimelineSplitterItem, r = e.$.resourceVerticalScrollBar; e.$.mainSplitter.contains(i) ? ([e.$.resourceSplitter, a, e.$.resourceVerticalScrollBar].forEach((e => e.rightToLeft = t)), a.$.virtualizationContainer._scrollView.disableSwipeScroll = !0, a.$.virtualizationContainer.verticalScrollBarVisibility = "hidden", a.$.virtualizationContainer.disabled = !0, n.size = e.treeSize, n.min = e.treeMin, s.min = e.timelineMin, i.min = e.resourcePanelMin, i.size = i._size || e.resourcePanelSize, r.hasStyleObserver = !1, r.hasResizeObserver = !1, r.wait = !1) : e.$.mainSplitter.appendChild(i) } _refreshResourceTimeline() { const e = this; e._resources && e.$.mainSplitter.contains(e.$.resourceSplitter) && (e._recycleResourceHeaderCells(), e._recycleResourceContent()) } _getResourceCellWorkTime(e, t) { const i = e.dateStart, n = e.dateEnd, a = t.dateStart, s = t.dateEnd, r = e.dateStart.getTime() < a.getTime() ? a : i, o = n.getTime() > s.getTime() ? s : n, l = Math.round(this._getWorkingTime(r, o) / 36e5); return { value: Math.max(0, l), max: r.getTime() === a.getTime() && o.getTime() === s.getTime() ? l : Math.round(this._getWorkingTime(a, s) / 36e5) } } _refreshResourceTimelineContent(e, t) { const i = this, n = i._resources.indexOf(e), a = i._getResourceTasks(e); if (t || (t = (() => { const t = i.$.resourceTimelineCellsContainer.children; for (let i = 0, n = t.length; i < n; i += 1) { const n = t[i]; if (n._cellObj && n._cellObj.resource === e) return n } })()), n < 0 || !t || !t.childElementCount) return; let s = t.children; const r = i.$.resourceTimelineViewCells.children, o = i._tasks.filter((e => !e.hidden)); for (let t = 0, l = s.length; t < l; t += 1) { const l = s[t]; let d, c = l.firstElementChild; a.length && !e.hidden ? (c ? (c.classList.remove("hide-left-border", "hide-right-border"), c.removeAttribute("load"), c.innerHTML = c.style.height = "") : (c = document.createElement("div"), c.classList.add("jqx-resource-timeline-view-cell"), d = !0), e.class && c.classList.add(e.class), i._setResourceCellLoad({ cell: c, cellIndex: t, resource: e, resourceCell: l, resourceIndex: n, resourceTasks: a, tasks: o, viewCells: r }), c.hasAttribute("load") ? d && l.appendChild(c) : c.remove()) : c && c.remove() } } _setResourceCellLoad(e) { const t = this, i = t.resourceTimelineFormatFunction, { cell: n, cellIndex: a, resource: s, resourceCell: r, resourceIndex: o, resourceTasks: l, tasks: d, viewCells: c } = e; let m = {}; for (let e = 0, u = l.length; e < u; e += 1) { const u = l[e]; if (u.hidden) continue; const h = d.indexOf(u), g = t._getCellDateRange(c[a]), { dateStart: f, dateEnd: p } = g; if (!f || f.getTime() >= u.dateEnd.getTime() || p.getTime() <= u.dateStart.getTime()) continue; if (m[a] && m[a].indexOf(h) < 0 ? m[a].push(h) : m[n] || (m[a] = [h]), "custom" === t.resourceTimelineMode) { i && (n.innerHTML = i.call(t, m[a] || [], o, new Date(f)) || ""); continue } const _ = t._getResourceCellCapacity({ cell: n, cellDateRange: g, cellTaskIndexAssigned: m, index: o, resource: s, task: u, cellIndex: a }); if (!_) continue; const { capacity: T, maxCapacity: b } = _, k = parseFloat(((parseFloat(n.getAttribute("load")) || 0) + (T || 0)).toFixed(1)); k > b ? n.classList.add("warning") : n.classList.remove("warning"), "histogram" !== t.resourceTimelineMode ? k && n.setAttribute("load", k) : t._setCellHistogram({ cell: n, load: k, maxCapacity: b, previousViewCell: r.previousElementSibling }) } } _getResourceCellCapacity(e) { const t = this, i = t.resourceTimelineView, { cell: n, cellDateRange: a, cellTaskIndexAssigned: s, index: r, resource: o, task: l, cellIndex: d } = e; let c, m; if ("tasks" === i) c = 1, m = o.maxCapacity; else if ("hours" === i) { const e = t._getResourceCellWorkTime(l, a), i = e.max / 24; c = parseFloat((e.value / e.max * o.capacity * i).toFixed(1)), m = Math.min(e.max, parseFloat((o.maxCapacity * i).toFixed(1))) } else { const e = t.resourceTimelineFormatFunction; if (!e) return; let i = e.call(t, s[d] || [], r, new Date(a.dateStart)); if (null != i) if (i = "object" != typeof i ? [i] : Object.values(i), 2 === i.length) c = parseFloat(i[0]) || 0, m = parseFloat(i[1]) || 0; else if (1 === i.length) return void (n && n.setAttribute("load", i[0])) } return { capacity: c, maxCapacity: m } } _setCellHistogram(e) { const { load: t, cell: i, maxCapacity: n, previousViewCell: a } = e, s = Math.min(100, 100 * parseFloat((t / n).toFixed(2))), r = a ? a.firstElementChild : void 0; if (r) { const e = parseFloat(r.style.height) || 0; s ? e === s ? (i.classList.add("hide-left-border"), r.classList.add("hide-right-border")) : e > s ? (i.classList.add("hide-left-border"), r.classList.remove("hide-right-border")) : e < s && (i.classList.remove("hide-left-border"), r.classList.add("hide-right-border")) : (i.classList.remove("hide-left-border"), r.classList.remove("hide-right-border")) } i.style.height = s + "%", t && i.setAttribute("load", t + "/" + n) } _recycleResourceHeaderCells() { const e = this; if (!e.$.mainSplitter.contains(e.$.resourceSplitterItem)) return; const t = e.$.resourceTimelineViewCells, i = t.children, n = e.$.timelineViewCells.children; let a = document.createDocumentFragment(); for (; i.length > n.length;)i[0].remove(); for (let e = 0; e < n.length; e++) { const t = n[e]; let s = i[e]; s || (s = t.cloneNode(!0), a.appendChild(s)), s.style.left = t.style.left, s.style.right = t.style.right, s.style.width = t.style.width, s.innerHTML = t.innerHTML, s._date = t._date, t.hasAttribute("weekend") ? s.setAttribute("weekend", "") : s.removeAttribute("weekend"), t.hasAttribute("nonworking") ? s.setAttribute("nonworking", "") : s.removeAttribute("nonworking") } a.childElementCount && t.appendChild(a), e.$.resourceTimelineCellsContainer.style.width = e.$.resourceTimelineViewCells.style.width = e.$.timelineContent.style.width } _refreshResourceScrollBar() { const e = this, t = e.$.resourceVerticalScrollBar; if (!e.$.mainSplitter.contains(e.$.resourceSplitter)) return; const i = Math.max(0, e.$.resourceTimelineCellsContainer.offsetHeight - e.$.resourceTimelineContent.offsetHeight); 0 === i && "visible" === e.verticalScrollBarVisibility ? (t.max = 1, e.scrollHeight || e.$container.removeClass("vscroll")) : i && e.$container.addClass("vscroll"), t.max = i, t.disabled = "disabled" === e.verticalScrollBarVisibility || e.disabled || i <= 0, !e.$.container.classList.contains("vscroll") && t.disabled ? t.classList.add("jqx-hidden") : (t.classList.remove("jqx-hidden"), t.refresh(), e.$.container.classList.contains("hscroll") ? e.$.horizontalScrollBar.classList.add("bottom-corner") : e.$.container.classList.contains("vscroll") || e.$.horizontalScrollBar.classList.remove("bottom-corner")) } _handleResources(e) { const t = this, i = e ? [e] : t._tasks; t._resources || (t._resources = []); for (let e = 0; e < i.length; e++) { let n = i[e].resources; Array.isArray(n) || (n = [n].reduce(((e, t) => e.concat(t)), [])); for (let a = 0; a < n.length; a++) { let s = n[a]; if ("object" != typeof s || !s || void 0 === s.id || null === s.id) { "number" == typeof s && (n[a] = s + ""); continue } let r = t._resources.find((e => e.id && e.id.toString() === s.id.toString())) || {}; t._setResource(r, s, i[e]), n[a] = r.id, Object.values(r).length && !t._resources.includes(r) && t._resources.push(r) } } t._refreshItemIds("resource"); const n = t._resources; for (let e = 0, i = n.length; e < i; e += 1)t._refreshResource(n[e]) } _refreshAssignedResources(e, t = []) { const i = this; if (!e.$.id || i._tasks.indexOf(e) < 0) return; const n = i._getTaskResources(e); for (let e = 0; e < n.length; e++) { const a = n[e]; let s = []; i.resourceColumns.forEach((e => { void 0 !== e.formatFunction && s.push(e.value) })), s.concat(t), i.$.mainSplitter.contains(i.$.resourceSplitter) && i._refreshResourceTimelineContent(a), t.includes("workload") ? i._refreshResource(a, "workload") : t.includes("progress") && i._refreshResource(a, "progress"), s.length && i._refreshTableColumnsData(a, s, "resource") } } _refreshResource(e, t) { const i = this; if (!i._resources.length) return; const n = i._getResourceTasks(e), a = 864e5; switch (t) { case "progress": e.progress = parseFloat((n.reduce(((e, t) => e + t.progress), 0) / n.length).toFixed(2)); break; case "workload": e.workload = parseFloat((i._convertDuration(n.reduce(((e, t) => e + t.duration), 0)) / a * e.maxCapacity).toFixed(2)); break; default: e.progress = parseFloat((n.reduce(((e, t) => e + t.progress), 0) / n.length).toFixed(2)), e.workload = parseFloat((i._convertDuration(n.reduce(((e, t) => e + t.duration), 0)) / a * e.maxCapacity).toFixed(2)) }i.$.mainSplitter.contains(i.$.resourceSplitter) && i._refreshResourceTimelineContent(e) } _setResource(e, t) { if (t && "object" == typeof t) return e.id ? e.id = e.id.trim() : e.id = (t.id + "").trim(), e.$ || (e.$ = {}), e.class = t.class || e.class, e.minCapacity = t.minCapacity || e.minCapacity || 0, e.maxCapacity = t.maxCapacity || e.maxCapacity || 24, e.progress = t.progress || e.progress || 0, e.capacity = t.capacity || e.capacity || 8, e.type = t.type || e.type, e.hidden = !!("boolean" == typeof t.hidden ? t.hidden : e.hidden), e.workload = e.workload || 0, t.label ? e.label = t.label : void 0 === e.label && (e.label = ""), t.value && (e.value = t.value), e } insertResource(e, t) { const i = this, n = Array.from(arguments).filter((e => void 0 !== e)); let a, s = i._resources; if (1 === n.length && (t = n[0]), "object" != typeof t) return void i.error(i.localize("incorrectArgument", { elementType: i.nodeName.toLowerCase(), methodName: "insertResources", argumentName: "resource" })); if (t.id && s.find((e => e.id && e.id.toString() === t.id.toString()))) return void i.updateResource(t.id, t); if (t.assignedTo && (a = [t.assignedTo].reduce(((e, t) => e.concat(t, [])))), !(t = i._setResource({}, t))) return; i._refreshItemIds("resource"), s = i._resources; const r = i._getValidItemAndIndex(e, "resource").index; if (r < 0 ? s.push(t) : s.splice(r, 0, t), i._tasks.length) { if (void 0 !== a) { Array.isArray(a) || (a = [a]); for (let e = 0, n = a.length; e < n; e += 1) { const n = i._getValidItemAndIndex(a[e], "task"); if (n) { const e = n.item; !e || e.disableResources || e.resources.includes(t.id.toString()) || e.resources.push(t.id) } } if (i._isUpdating) return void (i._isUpdating.type.resource = !0); i._highlightAssignedItem("task", i._getSelection("task", i.selectedTaskIds)), i._refreshResource(t) } if (i._isUpdating) return i._isUpdating.type.resource = !0, void (i._isUpdating.type.task = !0); if (i.groupByResources) i._refreshTableDataSource(), i._refreshTimeline(); else if (i.taskColumns.find((e => "resources" === e.value))) { const e = i._tasks.filter((e => e.resources.includes(t.id))); for (let t = 0; t < e.length; t++)i._refreshTableColumnsData(e[t], ["resources"]) } } i._isUpdating ? i._isUpdating.type.resource = !0 : (i._createResourceTimeline(), i.$.fireEvent("itemInsert", { type: "resource", item: i._cloneObject(t) })) } _insertTimelineResource(e, t, i) { const n = this, a = n.$.resourceTimelineCellsContainer, s = document.createElement("div"); s.classList.add("jqx-timeline-row"), s._resource = t, n._refreshResourceTimelineContent(t, s), n.$.resourceTimelineCellsContainer.insertBefore(s, e > -1 ? a.children[e] : void 0), n.$.container.style.setProperty("--jqx-gantt-chart-resource-timeline-content-height", a.offsetHeight + "px"), n._refreshResourceScrollBar(), n._insertNewTreeItem(e, t, i, "resource"), n.$.resourceTree.refresh(), n._highlightAssignedItem("task", n._getSelection("task", n.selectedTaskIds)) } updateResource(e, t) { if (void 0 === e) return; const i = this._getValidItemAndIndex(e, "resource"); i && i.item && this._updateResource(i.item, t) } removeResource(e) { if (void 0 === e) return; const t = this._getValidItemAndIndex(e, "resource"); t && t.item && this._removeResource(t.item) } _getResourceTasks(e) { const t = this._resources, i = this._tasks; if (!e || !t.length || !i.length) return; let n = []; for (let t = 0; t < i.length; t++)i[t].resources.includes(e.id) && n.push(i[t]); return n } _getTaskResources(e) { const t = this; if (!e) return []; const i = [e.resources].reduce(((e, t) => e.concat(t)), []); let n = []; for (let e = 0; e < i.length; e++) { const a = t._resources.find((t => t.id && t.id.toString() === i[e].toString())); a && n.push(a) } return n } _resourceValidator(e, t) { const i = this; return Array.isArray(t) || t instanceof JQX.ObservableArray || "number" == typeof t || "string" == typeof t || null == t ? t : (i.error(i.localize("invalidValue", { elementType: i.nodeName.toLowerCase(), property: "resources", typeOne: "array", typeTwo: "number" })), null) } _handleTaskProgressChange(e) { const t = this, i = t._dragDetails.task, n = t._dragDetails.timelineTask; if (t.disableTaskProgressChange) return; if (!t.hasAttribute("progress-change")) { if (t.$.fireEvent("progressChangeStart", { id: "string" == typeof i.id || "number" == typeof i.id ? i.id : i.$.id, item: t._cloneObject(i), progress: i.progress || 0 }).defaultPrevented) return void delete t._dragDetails.target; t._closeTooltip(), t.setAttribute("progress-change", ""), t._scrollView.disableSwipeScroll = t._touchmoveInside = !0 } const { left: a, width: s } = n.getBoundingClientRect(), r = e.pageX - window.pageXOffset; t._dragDetails.progress || (t._dragDetails.progress = i.progress / 100 * s), t._dragDetails.progress = Math.max(0, Math.min(s, t._dragDetails.progress + (t.rightToLeft ? -1 : 1) * (r - t._dragDetails.coordinates.x))), t._dragDetails.coordinates.x = Math.max(a + t._dragDetails.offset.x, Math.min(a + s + t._dragDetails.offset.x, r)); const o = t._dragDetails.task.progress = t._dragDetails.progress / s * 100; i.progress = parseFloat(o.toFixed(2)), t._setTaskBarProgress(i, n), t._refreshTableColumnsData(i, ["progress"]), clearTimeout(t._resourceTreeRefreshTimeout), t.$.mainSplitter.contains(t.$.resourceSplitter) && (t._resourceTreeRefreshTimeout = setTimeout((function () { t._refreshAssignedResources(i, ["progress"]), delete t._resourceTreeRefreshTimeout }), t.resourcePanelRefreshRate)) } _handleTaskSegmentDrag(e) { const t = this, i = t._dragDetails, n = i.segment, a = n.element, s = a._segmentObj; if (!s || s.disableDrag) return; const r = i.task, o = t._dragDetails.timelineTask, l = n.isFirstSegment, d = n.isLastSegment, c = t.rightToLeft, m = c ? "right" : "left"; i.timelineRow || (i.timelineRow = Array.from(t.$.taskTimelineCellsContainer.children).find((e => e._cellObj.task === r))); const u = i.timelineRow; if (!t.hasAttribute("dragged")) { if (t.$.fireEvent("dragStart", { id: "string" == typeof r.id || "number" == typeof r.id ? r.id : r.$.id, item: t._cloneObject(r), dateStart: r.dateStart, dateEnd: r.dateEnd, segment: t._cloneObject(s) }).defaultPrevented) return void delete i.timelineTask; if (t.setAttribute("dragged", ""), t._closeTooltip(), t._touchmoveInside = !0, l || d) { const e = t._createDelimiter("min-date"), i = t._createDelimiter("max-date"); e && u.appendChild(e), i && u.appendChild(i) } } if (l) { const n = i.size ? i.size.width : i.originalSize.width; t._handleTaskResize(e, c ? "right" : "left"), i.segments || (i.segments = o.querySelectorAll(".jqx-task-segment")); const a = i.size.width - n, s = i.segments; for (let e = 0, t = s.length; e < t; e += 1) { const t = s[e]; 0 !== e && (t.style[m] = (parseFloat(t.style[m]) || t.offsetLeft) + a + "px") } } else { if (!d) return void t._handleSegmentDrag(e); { const s = n.dimensions; t._handleTaskResize(e, c ? "left" : "right"), a.style[m] = i.size.width - s.width + "px" } } t._refreshTask(o, [a]), t._refreshProject(r.$.project), t.groupByResources && t._refreshProject(r.$.group), clearTimeout(t._resourceTreeRefreshTimeout), t.$.mainSplitter.contains(t.$.resourceSplitter) && (t._resourceTreeRefreshTimeout = setTimeout((function () { t._refreshAssignedResources(o._cellObj.task), delete t._resourceTreeRefreshTimeout }), t.resourcePanelRefreshRate)) } _handleSegmentDrag(e) { const t = this, i = t._dragDetails, n = i.segment, a = n.element, s = i.task, r = t._dragDetails.timelineTask, o = t.rightToLeft, l = o ? "right" : "left"; i.timelineRow || (i.timelineRow = Array.from(t.$.taskTimelineCellsContainer.children).find((e => e._cellObj.task === s))); const d = i.timelineRow, { left: c } = d.getBoundingClientRect(), m = i.taskDimensions.left; n.position || (n.position = { x: n.originalPosition.x }); const u = r.offsetWidth, h = e.pageX - window.pageXOffset; let g = 0, f = n.min.left || 0, p = n.max.left; o && (f = u - (f + n.dimensions.width), p = u - p), n.position.x = Math.max(f, Math.min(p, n.position.x + (o ? -1 : 1) * (h - i.coordinates.x))), void 0 !== p && (g = o ? m + n.min.left : m + n.max.left, n.position.x = Math.min(p, n.position.x)), f = m + (o ? n.max.left - n.dimensions.width : f), i.coordinates.x = Math.max(c + n.offset.x + f, Math.min(c + n.offset.x + g, h)), a.style[l] = n.position.x + "px", t._refreshTaskSegments(r, [a]) } _handleTaskBarDrag(e) { const t = this; if (t.disableTaskDrag) return; const i = t._dragDetails; if (Math.abs(e.pageX - i.coordinates.x) <= 5) return void (t._scrollView.disableSwipeScroll = !0); if (i.segment) return void t._handleTaskSegmentDrag(e); const n = i.task, a = i.timelineTask; i.timelineRow || (i.timelineRow = Array.from(t.$.taskTimelineCellsContainer.children).find((e => e._cellObj.task === n))); const s = i.timelineRow; if (!t.hasAttribute("dragged")) { if (t.$.fireEvent("dragStart", { id: "string" == typeof n.id || "number" == typeof n.id ? n.id : n.$.id, item: t._cloneObject(n), dateStart: n.dateStart, dateEnd: n.dateEnd }).defaultPrevented) return void delete i.timelineTask; t.setAttribute("dragged", ""), t._closeTooltip(), t._touchmoveInside = !0; const e = t._createDelimiter("min-date"), a = t._createDelimiter("max-date"); e && s.appendChild(e), a && s.appendChild(a) } i.position || (i.position = { x: i.originalPosition.x, y: i.originalPosition.y }); const r = s.getBoundingClientRect().left, o = s.offsetWidth, l = a.offsetWidth, d = i.min.left || 0, c = i.max.left, m = e.pageX - window.pageXOffset, u = t.rightToLeft; let h = 0; i.position.x = Math.max(d, Math.min(o - l, i.position.x + (u ? -1 : 1) * (m - i.coordinates.x))), void 0 !== c && (i.position.x = Math.min(c, i.position.x), h = o - l - c), i.coordinates.x = u ? Math.max(r + i.offset.x + h, Math.min(r + o - (l - i.offset.x + d), m)) : Math.max(r + i.offset.x + d, Math.min(r + o - (l - i.offset.x + h), m)); const g = n.dateStart.getTime(), f = n.dateEnd.getTime(); a.style[u ? "right" : "left"] = i.position.x + "px", t._refreshTask(a), t._refreshProject(n.$.project), t.groupByResources && t._refreshProject(n.$.group), "project" === n.type && n.dragProject && t._refreshProjectTasks(n, { startTime: n.dateStart.getTime() - g, endTime: n.dateEnd.getTime() - f }), clearTimeout(t._resourceTreeRefreshTimeout), t.$.mainSplitter.contains(t.$.resourceSplitter) && (t._resourceTreeRefreshTimeout = setTimeout((function () { t._refreshAssignedResources(a._cellObj.task), delete t._resourceTreeRefreshTimeout }), t.resourcePanelRefreshRate)) } _handleTaskBarResize(e) { const t = this; if (t.disableTaskResize) return; const i = t._dragDetails; if (i.segment) return void t._handleTaskSegmentResize(e); const n = i.timelineTask, a = i.task; if (!t.hasAttribute("resized")) { if (t.$.fireEvent("resizeStart", { id: "string" == typeof a.id || "number" == typeof a.id ? a.id : a.$.id, item: t._cloneObject(a), dateStart: a.dateStart, dateEnd: a.dateEnd }).defaultPrevented) return void t.$.timeline.removeAttribute("task-bar-hovered"); t.setAttribute("resized", ""), t._closeTooltip(), t._scrollView.disableSwipeScroll = t._touchmoveInside = !0 } t._handleTaskResize(e, t.$.timeline.getAttribute("task-bar-hovered")), t._updateSegmentsOnTaskResize(), t._refreshTask(n), t._refreshProject(a.$.project), t.groupByResources && t._refreshProject(a.$.group), clearTimeout(t._resourceTreeRefreshTimeout), t.$.mainSplitter.contains(t.$.resourceSplitter) && (t._resourceTreeRefreshTimeout = setTimeout((function () { t._refreshAssignedResources(n._cellObj.task, ["workload"]), delete t._resourceTreeRefreshTimeout }), t.resourcePanelRefreshRate)) } _updateSegmentsOnTaskResize() { const e = this, t = e._dragDetails, i = t.task, n = t.timelineTask; if (!i || !i.segments) return; let a; t && t.segments ? a = t.segments : t.segments = a = n.querySelectorAll(".jqx-task-segment"); const s = a.length, r = t.size.width, o = e.rightToLeft ? "right" : "left"; for (let t = 0; t < s; t += 1) { const i = a[t], n = i.style.width ? parseFloat(i.style.width) : i.offsetWidth, l = i.style[o] ? parseFloat(i.style[o]) : 0; if (l + n > r) { const t = r - (l + n), a = n + t; a < e._taskBarMinWidth && (i.style[o] = l + t + "px"), i.style.width = a + "px" } else t === s - 1 && (i.style.width = r - l + "px") } } _handleTaskSegmentResize(e) { const t = this, i = t._dragDetails, n = i.segment, a = n.element, s = a._segmentObj; if (!s || s.disableResize) return; const r = i.task, o = t._dragDetails.timelineTask, l = n.isFirstSegment, d = n.isLastSegment, c = t.rightToLeft, m = c ? "right" : "left"; if (!t.hasAttribute("resized")) { if (t.$.fireEvent("resizeStart", { id: "string" == typeof r.id || "number" == typeof r.id ? r.id : r.$.id, item: t._cloneObject(r), dateStart: r.dateStart, dateEnd: r.dateEnd, segment: t._cloneObject(s) }).defaultPrevented) return void t.$.timeline.removeAttribute("task-bar-hovered"); t.setAttribute("resized", ""), t._closeTooltip(), t._scrollView.disableSwipeScroll = t._touchmoveInside = !0 } const u = t.$.timeline.getAttribute("task-bar-hovered"); if (l && ("left" === u && !c || "right" === u && c)) { const s = i.size ? i.size.width : i.originalSize.width; void 0 === n.size && (n.size = { width: n.originalSize.width }), t._handleTaskResize(e, u), i.segments || (i.segments = o.querySelectorAll(".jqx-task-segment")); const r = i.size.width - s, l = i.segments; for (let e = 0, t = l.length; e < t; e += 1) { const t = l[e]; 0 !== e && (t.style[m] = (parseFloat(t.style[m]) || t.offsetLeft) + r + "px") } a.style.width = (n.size.width += r) + "px" } else { if (!d || !("right" === u && !c || "left" === u && c)) return t._handleSegmentResize(e, u), void t._refreshTaskSegments(o, [a]); { const s = i.size ? i.size.width : i.originalSize.width; void 0 === n.size && (n.size = { width: n.originalSize.width }), t._handleTaskResize(e, u), a.style.width = (n.size.width += i.size.width - s) + "px" } } t._refreshTask(o, [a]), t._refreshProject(r.$.project), t.groupByResources && t._refreshProject(r.$.group), clearTimeout(t._resourceTreeRefreshTimeout), t.$.mainSplitter.contains(t.$.resourceSplitter) && (t._resourceTreeRefreshTimeout = setTimeout((function () { t._refreshAssignedResources(o._cellObj.task, ["workload"]), delete t._resourceTreeRefreshTimeout }), t.resourcePanelRefreshRate)) } _handleSegmentResize(e, t) { const i = this, n = i._dragDetails, a = n.task, s = n.segment, r = s.element, o = i.rightToLeft, l = n.taskDimensions.left; n.timelineRow || (n.timelineRow = Array.from(i.$.taskTimelineCellsContainer.children).find((e => e._cellObj.task === a))); const d = n.timelineRow; s.position || (s.position = { x: s.originalPosition.x }), s.size || (s.size = { width: s.originalSize.width }); const c = e.pageX - window.pageXOffset; let m = s.size.width, u = s.min.width || 0, h = s.max.width, g = s.min.left || 0, f = s.max.left, p = r.offsetLeft, { left: _ } = d.getBoundingClientRect(), T = "object" == typeof e ? c - n.coordinates.x : e; if (_ += l, "left" === t && !o || "right" === t && o) if (o) { const e = n.taskDimensions.width; T = T < 0 ? -1 * Math.min(Math.abs(T), m - u) : Math.min(h - m, Math.abs(T)), m = Math.max(u, Math.min(h, m + T)), r.style.left = "", r.style.right = (p = Math.max(e - g, (parseFloat(r.style.right) || d.offsetWidth - p - m) - T)) + "px", n.coordinates.x = Math.max(_ + e - p + u, Math.min(_ + e - p, c)) } else T = T > 0 ? Math.min(T, m - (u || 0)) : -1 * Math.min(h - m, Math.abs(T)), m = Math.max(u, Math.min(p + m, m - T)), r.style.right = "", r.style.left = (p = Math.max(g, (parseFloat(r.style.left) || p) + T)) + "px", n.coordinates.x = Math.max(_ + g + u, Math.min(_ + p + m - u, c)); else o ? (T < 0 && (T = -1 * Math.min(h - m, Math.abs(T))), m = Math.max(u, Math.min(p + m, m - T)), f -= s.dimensions.width, n.coordinates.x = Math.max(_ + f, Math.min(_ + f + h, c))) : (T > 0 && (T = Math.min(h - m, T)), m = Math.max(u, Math.min(h, m + T)), n.coordinates.x = Math.max(_ + p + u, Math.min(_ + p + h, c))); r.style.width = (s.size.width = m) + "px" } _handleTaskResize(e, t) { const i = this, n = i._dragDetails, a = n.task; n.position || (n.position = { x: n.originalPosition.x, y: n.originalPosition.y }), n.size || (n.size = { width: n.originalSize.width }), n.timelineRow || (n.timelineRow = Array.from(i.$.taskTimelineCellsContainer.children).find((e => e._cellObj.task === a))); const s = n.timelineRow, r = n.timelineTask, o = n.segment, l = e.pageX - window.pageXOffset; let d = n.size.width, c = n.min.width || 0, m = n.max.width, u = s.getBoundingClientRect().left, h = i.rightToLeft, g = "object" == typeof e ? l - n.coordinates.x : e; if ("left" === t && !h || "right" === t && h) if (o && (h ? (u -= o.dimensions.width - o.offset.x, c = Math.max(o.max.left + o.min.width, c)) : (u += o.offset.x, c = Math.max(n.taskDimensions.width - o.max.left + o.min.width, c))), h) { g < 0 ? g = -1 * Math.min(Math.abs(g), d - (c || 0)) : void 0 !== m && (g = Math.min(m - d, Math.abs(g))), d = n.size.width = Math.max(c, Math.min(s.offsetWidth - r.offsetLeft, d + g)); const e = r.offsetLeft; r.style.left = "", r.style.right = (n.position.x = Math.max(0, (parseFloat(r.style.right) || s.offsetWidth - r.offsetLeft - r.offsetWidth) - g)) + "px", n.coordinates.x = Math.max(u + r.offsetLeft + c, Math.min(u + e + d, l)) } else g > 0 ? g = Math.min(g, d - (c || 0)) : void 0 !== m && (g = -1 * Math.min(m - d, Math.abs(g))), d = n.size.width = Math.max(c, Math.min(r.offsetLeft + d, d - g)), r.style.right = "", r.style.left = (n.position.x = Math.max(0, (parseFloat(r.style.left) || r.offsetLeft) + g)) + "px", n.coordinates.x = Math.max(u + r.offsetLeft, Math.min(u + r.offsetLeft + d - c, l)); else h ? (o && (u += o.offset.x, c = Math.max(n.taskDimensions.width - o.min.left + o.min.width, c)), g < 0 && void 0 !== m && (g = -1 * Math.min(m - d, Math.abs(g))), d = n.size.width = Math.max(c, Math.min(r.offsetLeft + r.offsetWidth, d - g)), r.style.width = n.size.width + "px", n.coordinates.x = Math.max(u + r.offsetLeft, Math.min(u + r.offsetLeft + d - c, l))) : (o && (u -= o.dimensions.width - o.offset.x, c = Math.max(o.min.left + o.min.width, c)), g > 0 && void 0 !== m && (g = Math.min(m - d, g)), d = n.size.width = Math.max(c, Math.min(s.offsetWidth - r.offsetLeft, d + g)), n.coordinates.x = Math.max(u + r.offsetLeft + c, Math.min(u + r.offsetLeft + (m || d), l))); r.style.width = n.size.width + "px" } _handleTimelineConnectionHover(e) { const t = this; if (!(t.shadowRoot || t).contains(e)) return; const i = t.$.timelineConnectionsContainer.children, n = e.closest(".jqx-task-connection"); if (n || !t.$.timelineConnectionsContainer.querySelector(".jqx-task-connection[hover]")) { if (n) { const e = n.getAttribute("connection-id"); for (let t = 0; t < i.length; t++) { const n = i[t]; n.getAttribute("connection-id") === e ? n.setAttribute("hover", "") : n.removeAttribute("hover") } t._hoveredConnectionTasks = n.tasks } } else for (let e = 0; e < i.length; e++)i[e].removeAttribute("hover") } _resetItemHover() { const e = this; if (e._hoveredItem) { const t = e.$.mainSplitter.querySelectorAll(".jqx-timeline-task[hover], .jqx-timeline-row[hover], tr[hover]"); for (let e = 0; e < t.length; e++)t[e].removeAttribute("hover"); e.$.timeline.removeAttribute("task-bar-hovered"), delete e._hoveredItem } } _handleTimelineHover(e, t) { const i = this, n = i._isMobile; if (!e || n) return void i._resetItemHover(); const a = e.originalEvent || e; let s = "task", r = a.pageX && n ? document.elementFromPoint(a.pageX - window.pageXOffset, a.pageY - window.pageYOffset) : a.target; if (a.pageX && i.shadowRoot && r === i && (r = a.pageX && n ? i.shadowRoot.elementFromPoint(a.pageX - window.pageXOffset, a.pageY - window.pageYOffset) : a.composedPath()[0]), !r || !r.closest || r === i || t) return void i._resetItemHover(); i.$.resourceSplitter && i.$.resourceSplitter.contains(r) ? s = "resource" : i._handleTimelineConnectionHover(r); let o = r.closest(".jqx-timeline-row") || r.closest(".jqx-timeline-task"); if (!o || !(i.shadowRoot || i).contains(o)) return void i._resetItemHover(); const l = o._cellObj[s], d = l.$.id, c = i._hoveredItem; if (!(c && c.type === s && c.id === d || (i._resetItemHover(), l.isGroup || ("task" === s && o.classList.contains("jqx-timeline-row") && (o = i.$.timelineTasksContainer.querySelector(`.jqx-timeline-task[row-id="${d}"]`)), !o || i._connectionFeedback && o.contains(i._connectionFeedback) || (o.setAttribute("hover", ""), i._hoveredItem = { id: d, type: s }, n))))) { const e = ("task" === s ? i.$.taskTimelineCellsContainer : i.$.resourceTimelineCellsContainer).querySelector(`.jqx-timeline-row[row-id="${d}"]`); e && (e.setAttribute("hover", ""), i._handleTableItemHover(d, r)) } } _getScrollLeft(e) { return this.rightToLeft ? e *= -1 : e } _synchronizeSplitters(e, t) { if (this.$.mainSplitter.contains(this.$.resourceSplitter)) { const i = e._measurements, n = e.items, a = t.items, [s, r, o] = [i.dimension, i.minDimension, i.maxDimension], [l, d] = [a[0], n[0]], [c, m] = [a[1], n[1]]; t.keepProportionsOnResize = !0, t.setAttribute("orientation-change", ""), [r, o, s].forEach((e => { const t = e === s ? "size" : e === r ? "min" : "max"; l.set(t, ""), c.set(t, ""), l[t] = d.style[e], c[t] = m.style[e] })), t.removeAttribute("orientation-change"), t.keepProportionsOnResize = !1 } } _resizeEventHandler(e) { const t = this, i = t.$.taskSplitter; function n(e) { e.refresh(), e === i && t._synchronizeSplitters(i, t.$.resourceSplitter) } if (e && "resizeEnd" === e.type) { if (e.target === t.$.taskTreeSplitter || e.target === t.$.resourceTreeSplitter) return void n(e.target); e.target === t.$.resourceSplitter && t._synchronizeSplitters(t.$.resourceSplitter, i) } if (!t._timelineCells) return void t._refresh(); t.$.mainSplitter.refresh(), n(i); const a = t._getScrollLeft(t.scrollLeft); t._autoSchedule(), t._createTimelineCells(), t._recycleTimelineTasks(), t._recycleTimelineRowCells(), t._refreshResourceTimeline(), t._refresh(), t.$.taskTable.refresh(), t.$.timelineHeader.scrollLeft = t.$.taskTimelineContainer.scrollLeft = a, t.$.taskTable.scrollTop = t.$.taskTimelineContainer.scrollTop = t.scrollTop, t.$.mainSplitter.contains(t.$.resourceTimelineHeader) && (t.$.resourceTimelineHeader.scrollLeft = t.$.resourceTimelineContent.scrollLeft = a, t.$.resourceTable.refresh(), t.$.resourceTable.scrollTop = t.$.resourceTimelineContent.scrollTop = t.$.resourceVerticalScrollBar.value), t._positionWindow() } _recycle(e) { const t = this, i = e && "horizontal" === e.context.orientation; if (e && !i || (t._recycleHeaderCells(t.$.timelineViewCells), t._recycleHeaderCells(t.$.timelineViewDetails), t.$.timelineViewSubDetails.classList.contains("jqx-hidden") || t._recycleHeaderSubCells(t.$.timelineViewSubDetails), t._recycleResourceContent()), i) return; if (t._recycleResourceContent(), t._recycleContentCells(), t._recycleTimelineTasks(), !e) return; const n = Math.round(e.detail.value); e.target !== t.$.resourceVerticalScrollBar ? t._refreshTableScrollTop(t.$.taskTable, n) : t._refreshTableScrollTop(t.$.resourceTable, n) } _recycleContentCells() { const e = this, t = e._getFirstContentCellInView(), i = e.$.taskTimelineCellsContainer, n = e.$.timelineTasksContainer; if (!t) return void (i.innerHTML = n.innerHTML = ""); const a = t.height, s = 1 - (t.top + a - Math.abs(e.scrollTop)) / a, r = e._timelineVCells ? e._timelineVCells.length : 0, o = !e.$.taskSplitter.offsetHeight, l = e.$.taskTimelineContainer.offsetHeight, d = !o && l ? Math.min(r, Math.ceil((parseFloat((l / a).toFixed(2)) + s).toFixed(2))) : r, c = e.$.timelineViewCells.children, m = document.createDocumentFragment(); for (; i.childElementCount > d;)i.lastElementChild.remove(); for (; n.childElementCount > d;)n.lastElementChild.remove(); for (let t = i.childElementCount; t < d; t += 1) { const t = document.createElement("div"); t.classList.add("jqx-timeline-row"), e._createTimelineRowCells(t, c), m.appendChild(t) } m.childElementCount && i.appendChild(m); for (let e = n.childElementCount; e < d; e += 1) { const e = document.createElement("div"); e.classList.add("jqx-timeline-task"), m.appendChild(e) } m.childElementCount && n.appendChild(m) } _getCellIndexByDate(e) { const t = this._timelineCells; let i = []; if (e && e.length && t) { Array.isArray(e) || (e = [e]); for (let t = 0, n = e.length; t < n; t += 1) { const n = e[t]; e[t] = n.getTime ? n.getTime() : n, i[t] = -1 } for (let n = 0, a = t.length; n < a; n += 1) { const a = t[n], s = e.indexOf(a.date.getTime()); if (s > -1 && (i[s] = n, i.every((e => -1 !== e)))) break } return 1 === i.length ? i[0] : i } } _recycleDateMarkers() { const e = this, t = e.$.timelineMarkers, i = e._markers; if (!i || e.hideDateMarkers) return void (t.childElementCount && (t.innerHTML = "")); const n = e.$.timelineViewCells.children, a = n[0]._date, s = n[n.length - 1]._date, [r, o] = e._getCellIndexByDate([a, s]); if (!a || !s) return; const l = a.getTime(), d = e._getCellDateRange({ _date: s }).dateEnd.getTime(), c = t.children, [m, u] = e.rightToLeft ? ["right", "left"] : ["left", "right"], h = document.createDocumentFragment(); let g = 0; for (let t = 0, n = i.length; t < n; t += 1) { const n = i[t], a = i[t].date, s = a.getTime(); if (s < l || s > d) continue; const f = e._getTimelineCellByDate(a, r, o); if (f) { const t = f.left + e._getTimelineTaskOffset(f, a), i = n.label, s = n.className; let r = c[g]; r || (r = document.createElement("div"), h.appendChild(r)), r.className = "jqx-gantt-chart-date-marker", void 0 !== i && (r.firstElementChild || (r.innerHTML = '<div class="jqx-gantt-chart-marker-label"></div>'), r.firstElementChild.textContent = i + ""), void 0 !== s && r.classList.add(s), r.style[u] = "", r.style[m] = t + "px", g++ } } for (h.childElementCount && t.insertBefore(h, t.firstElementChild); c.length > g;)c[c.length - 1].remove() } _refreshTableScrollTop(e, t) { this.$.mainSplitter.contains(e) && void 0 !== t && (e.scrollTop = t) } _recycleHeaderCells(e) { let t = this, i = e.children, n = t.scrollLeft, a = e === t.$.timelineViewCells, s = a ? t._timelineCells : t._timelineHeaderCells; if (e === t.$.timelineViewSubDetails && (a = !1, s = t._timelineHeaderSubCells), !s.length) return; let r = document.createDocumentFragment(); for (; i.length;)r.appendChild(e.firstElementChild); let o = t._getFirstCellObjInView(s), l = 1 - (o.left + o.width - Math.abs(n)) / s[0].width, d = r.children.length, c = a ? Math.ceil((parseFloat((t.$.timeline.offsetWidth / o.width).toFixed(2)) + l).toFixed(2)) : t._getHeaderVisibleCellsCount(); if (e === t.$.timelineViewSubDetails && (c = t._getHeaderSubVisibleCellsCount()), d > c) for (; r.children.length && r.children.length !== c;)r.removeChild(r.firstElementChild); else if (d < c) { const e = t._createCells(c - d); for (; e.children.length;)r.appendChild(e.firstElementChild) } const m = [t.rightToLeft ? "right" : "left"], u = a ? t._getCellsViewType() : t.view; let h = s.indexOf(o); for (let e = 0; e < r.children.length; e++) { const i = r.children[e], n = s[h]; if (!n) break; let o = new Date(n.date); a || "week" !== t.view || (o.setDate(o.getDate() - o.getDay()), o = new Date(Math.max(n.date.getTime(), o.getTime()))), i.style[m] = n.left + "px", i.style.width = n.width + "px", i._date = o, i.innerHTML = `<div>${t._getDateString(o, u, !a)}</div>`, n.weekend ? i.setAttribute("weekend", "") : i.removeAttribute("weekend"), n.nonworking ? i.setAttribute("nonworking", "") : i.removeAttribute("nonworking"), h++ } e.appendChild(r), a && (t._recycleTimelineRowCells(), t._recycleResourceHeaderCells(), t._recycleDateMarkers(), t._setTodayCell()) } _recycleHeaderSubCells(e) { let t = this, i = e.children, n = t.scrollLeft, a = t._timelineHeaderSubCells; if (!a.length) return; let s = document.createDocumentFragment(); for (; i.length;)s.appendChild(e.firstElementChild); let r = t._getFirstCellObjInView(a), o = (r.left, r.width, Math.abs(n), a[0].width, s.children.length), l = t._getHeaderSubVisibleCellsCount(); if (o > l) for (; s.children.length && s.children.length !== l;)s.removeChild(s.firstElementChild); else if (o < l) { const e = t._createCells(l - o); for (; e.children.length;)s.appendChild(e.firstElementChild) } const d = [t.rightToLeft ? "right" : "left"], c = t.view; let m = a.indexOf(r); for (let e = 0; e < s.children.length; e++) { const i = s.children[e], n = a[m]; if (!n) break; let r = new Date(n.date); "week" === t.view && (r.setDate(r.getDate() - r.getDay()), r = new Date(Math.max(n.date.getTime(), r.getTime()))), i.style[d] = n.left + "px", i.style.width = n.width + "px", i._date = r, i.innerHTML = `<div>${t._getDateString(r, c, !0)}</div>`, n.weekend ? i.setAttribute("weekend", "") : i.removeAttribute("weekend"), n.nonworking ? i.setAttribute("nonworking", "") : i.removeAttribute("nonworking"), m++ } e.appendChild(s), t._refreshHeaderSubDetailsDate() } _refresh() { const e = this; let t = "disabled" === e.verticalScrollBarVisibility; function i() { const t = e.$.timelineHeader, i = t.scrollWidth - t.offsetWidth; return i > 0 && "hidden" !== e.horizontalScrollBarVisibility || "visible" === e.horizontalScrollBarVisibility ? e.$container.addClass("hscroll") : e.$container.removeClass("hscroll"), i } function n() { let i = Math.max(0, e.$.timelineContent.offsetHeight - e.$.taskTimelineContainer.offsetHeight); return i > 0 && "hidden" !== e.verticalScrollBarVisibility || "visible" === e.verticalScrollBarVisibility ? e.$container.addClass("vscroll") : e.$.mainSplitter.contains(e.$.resourceSplitter) ? (i = 1, t = !0, e.$.resourceVerticalScrollBar.max || e.$container.removeClass("vscroll")) : e.$container.removeClass("vscroll"), i } const a = e.scrollWidth, s = e.scrollHeight; let r = i(), o = n(); o && s === o || (r = i()), r && a === r || (o = n()), e.scrollWidth = r, e.scrollHeight = o, e.$.verticalScrollBar.disabled = t, e.$.horizontalScrollBar.refresh(), e.$.verticalScrollBar.refresh(), e.$.mainSplitter.contains(e.$.resourceSplitter) && (e._refreshResourceScrollBar(), e._refreshTableScrollTop(e.$.resourceTable)) } _refreshProjectTasks(e, t) { const i = this, n = i._getProjectTasks(e); if (!n.length) return; const a = i.nonworkingDays, s = i.nonworkingHours, r = i._timelineVCells; for (let e = 0, o = n.length; e < o; e++) { const o = n[e]; if (o) { const e = i._getTaskDOMIndex(o), n = r[e], l = o.segments; if (o.dateStart = new Date(Math.max(i.dateStart.getTime(), o.dateStart.getTime() + t.startTime)), o.dateEnd = new Date(Math.min(i.dateEnd.getTime(), o.dateEnd.getTime() + t.endTime)), o.duration = i._convertDuration(a.length > 0 || s.length > 0 ? i._getWorkingTime(o.dateStart, o.dateEnd) : o.dateEnd.getTime() - o.dateStart.getTime(), !0), l && l.length > 1) { for (let e = 0, i = l.length; e < i; e += 1) { const i = l[e]; i.dateStart = new Date(i.dateStart.getTime() + t.startTime), i.dateEnd = new Date(i.dateEnd.getTime() + t.endTime) } i._validateTaskSegments(o) } n && (i._recycleTaskBars(n, e), i._setTimelineTaskBar(n, e), l && l.length > 1 && i._setTaskBarProgress(o), i._refreshTaskConnections(o), i._refreshTableColumnsData(o, ["dateStart", "dateEnd", "duration", "overdue"])) } } } _refreshProject(e) { const t = this; function i(e) { let i, n, a; if (e instanceof HTMLElement) i = e.offsetLeft, a = e.offsetWidth; else if (e) { const s = t._getTimelineTaskCellByDate(e.dateStart), r = t._getTimelineTaskCellByDate(e.dateEnd); s && r && (i = s.left + t._getTimelineTaskOffset(s, e.dateStart) || 0, n = r.left + t._getTimelineTaskOffset(r, e.dateEnd) || 0, a = n - i) } return [i, a] } if (!e) return; const n = t.groupByResources && e.isGroup ? "group" : "project"; if (e.synchronized) for (; e && e.synchronized;) { const a = t._getProjectTasks(e); let s = a[0], r = a[0]; for (let e = 0; e < a.length; e++)s.dateStart.getTime() >= a[e].dateStart.getTime() && (s = a[e]), r.dateEnd.getTime() <= a[e].dateEnd.getTime() && (r = a[e]); const o = t.$.timelineTasksContainer.children, l = t.$.timelineContent.offsetWidth; let d, c, m; for (let t = 0, i = o.length; t < i; t += 1) { const i = o[t], n = i._cellObj ? i._cellObj.task : void 0; n && (n === e ? d = i : n === s ? c = i : n === e && (m = i)) } if (!d) { s && (e.dateStart = s.dateStart), r && (e.dateEnd = r.dateEnd), e = e.$[n]; continue } s && (e.dateStart = s.dateStart); let [u, h] = i(c || s); void 0 !== u && void 0 !== h && (t.rightToLeft ? (d.style.width = d.offsetWidth - (l - u - h - (l - d.offsetLeft - d.offsetWidth)) + "px", d.style.right = c ? c.style.right : u + "px") : (d.style.width = d.offsetWidth - (u - d.offsetLeft) + "px", d.style.left = c ? c.style.left : u + "px")), r && (e.dateEnd = r.dateEnd), [u, h] = i(m || r), void 0 !== u && void 0 !== h && (t.rightToLeft ? d.style.width = Math.max(0, d.offsetWidth - (l - d.offsetLeft - (l - u))) + "px" : d.style.width = Math.max(0, d.offsetWidth - (d.offsetLeft + d.offsetWidth - (u + h))) + "px"), t._refreshTask(d), e = e.$[n] } else t._refreshProject(e.$[n]) } _refreshTask(e, t) { const i = this, n = i._getTaskBarCellRange(e), a = n.cellStart, s = n.cellEnd; if (!n || !a || !s) return; e._cellStart = a, e._cellEnd = s; const r = i._getTaskBarDateRange(e); if (!r) return; const o = e._cellObj.task; if (Array.from(i.$.taskTimelineCellsContainer.children).find((e => e._cellObj.task === o))) { if (o.dateStart = r.dateStart, o.dateEnd = r.dateEnd, o.duration = o.duration = i._convertDuration(i.nonworkingDays.length > 0 || i.nonworkingHours.length > 0 ? i._getWorkingTime(o.dateStart, o.dateEnd) : o.dateEnd.getTime() - o.dateStart.getTime(), !0), e.setAttribute("aria-label", o.label + " Start date: " + i._toISODate(o.dateStart) + ", End date: " + i._toISODate(o.dateEnd)), i._refreshTaskConnections(e), t) Array.isArray(t) && i._refreshTaskSegments(e, t); else { const t = i._dragDetails; let n; e.classList.contains("task") ? t && t.segments ? n = t.segments : t.segments = n = e.querySelectorAll(".jqx-task-segment") : n = e.querySelectorAll(".jqx-task-segment"), i._refreshTaskSegments(e, n) } i._refreshTableColumnsData(o, ["dateStart", "dateEnd", "duration", "overdue"]) } } _refreshTaskSegments(e, t) { const i = this, n = e._cellObj.task; if (!n || !n.segments || !n.segments.length) return void i._setTaskBarDeadline(n, t ? t[0] : void 0); const a = i.nonworkingDays.length > 0 || i.nonworkingHours.length > 0, s = i.rightToLeft, r = s ? "right" : "left", o = parseFloat(e.style[r]) || e.offsetLeft; let l; for (let n = 0, d = t.length; n < d; n += 1) { const d = t[n], c = d._segmentObj, m = i._getSegmentCellRange(d), u = m.cellStart, h = m.cellEnd; if (!m || !u || !h) continue; const g = parseFloat(d.style.width) || d.offsetWidth, f = o + parseFloat(d.style[r]) || (s ? (parseFloat(e.style.width) || e.offsetWidth) - (d.offsetLeft + d.offsetWidth) : d.offsetLeft); d._cellStart = u, d._cellEnd = h, l = d; let p = i._getDateFromCell(f, u), _ = i._getDateFromCell(f + g, h); c.dateStart = p, c.dateEnd = _, c.duration = i._convertDuration(a ? i._getWorkingTime(p, _) : _.getTime() - p.getTime(), !0), e.setAttribute("aria-label", (c.label || "") + " Start date: " + i._toISODate(p) + ", End date: " + i._toISODate(_)) } i._setTaskBarProgress(n, e), i._setTaskBarDeadline(n, l) } _refreshTaskResources(e, t = []) { const i = this; if (e && (t || (t = i._getTaskResources(e)), t.length)) for (let e = 0; e < t.length; e++) { const n = t[e]; i._refreshResource(n), i._refreshTableColumnsData(n, void 0, "resource") } } _refreshTableColumnsData(e, t, i) { const n = this; if (i || (i = "task"), !e) return; const a = n[`${i}Columns`], s = n.$[`${i}Table`]; if (!n.$.mainSplitter.contains(s)) return; const r = e.$.id; t = t ? t.map((e => a.find((t => t.value === e)))) : a; for (let i = 0; i < t.length; i++) { const a = t[i]; a && s.setValue(r, a.value, n._formatColumnData(e, a)) } n.$[`${i}Splitter`].refresh() } _removeConnection(e, t) { const i = this, n = i.$.connectionPopupWindow, a = i.$.timelineConnectionsContainer; if (e.classList && e.classList.contains("jqx-task-connection") ? e = e.getAttribute("connection-id") : e += "", void 0 === e) return; const s = a.querySelectorAll('.jqx-task-connection[connection-id^="' + e + (e.indexOf("-") < 0 ? "-" : "") + '"]'), r = i._tasks, o = e.split("-"), l = parseInt(o[1]); for (let e = 0; e < s.length; e++)a.removeChild(s[e]); let d; const c = parseInt(o[0]), m = parseInt(o[1]), u = parseInt(o[2]); if (n && void 0 !== n._target && "number" == typeof n._target.type) { const t = n._target; d = t.startIndex + "-" + t.endIndex + "-" + t.type === e } i._updateConnection([c, m, u], !0), !t && i.autoSchedule && (i._autoScheduleRestore(r[l], parseInt(o[2])), i._autoSchedule(r[l])), d && i.$.fireEvent("itemRemove", { type: "connection", id: `${c}-${m}-${u}`, item: { source: c, target: m, type: u } }) } _removeTaskConnections(e, t) { const i = this, n = i._connections; if (n && n.length) { for (let t = 0, i = n.length; t < i; t += 1)n[t].startTask === e && (n.splice(t, 1), i--); e.connections = [], t && i._recycleConnections() } } _removeTask(e) { const t = this, i = t._tasks; if (!e || !i || !i.length) return; const n = t._getSelection("task", t.selectedTaskIds), a = t.$.taskPopupWindow; let s; if (t._highlightAssignedItem("task", [e]), a && a._target === e && a.close(), "project" === e.type) { const n = t._getProjectTasks(e); for (let e = 0, t = n.length; e < t; e += 1)i.splice(i.indexOf(n[e]), 1) } if (i.splice(i.indexOf(e), 1), t._refreshItemIds(), t._refreshConnectionIds(), t._isUpdating) return t._isUpdating.type.task = !0, void (t._isUpdating.type.resource = !0); t._refreshSelectedItems(), t._refreshTableDataSource(), t._refreshTimeline(), t._selected && t._selected.task && (s = t._selected.task.map((e => e.$.id)), n.toString() !== s.toString() && (t.$.taskTable.selected = t._getSelection("task", t.selectedTaskIds))), t.$.fireEvent("itemRemove", { type: "task", id: "string" == typeof e.id || "number" == typeof e.id ? e.id : e.$.id, item: t._cloneObject(e) }) } _removeResource(e) { const t = this, i = t._resources, n = i.indexOf(e); if (e && !(n < 0)) { if (t._isUpdating) return i.splice(n, 1), t._isUpdating.type.resource = !0, void (t._isUpdating.type.task = !0); if (i.splice(n, 1), t.groupByResources) t._refreshTableDataSource(), t._createTimelineContent(), t._refresh(), t._recycleTimelineTasks(); else if (t.taskColumns.find((e => "resources" === e.value))) { const i = t._tasks.filter((t => t.resources.includes(e.id))); for (let e = 0; e < i.length; e++)t._refreshTableColumnsData(i[e], ["resources"]) } if (!i.filter((e => !e.hidden)).length) return t._createResourceTimeline(), t._resizeEventHandler(), void a(); t._refreshResourceTimeline(), t._refreshTableDataSource("resource"), t.$.mainSplitter.contains(t.$.resourceSplitter) ? (t._refreshResourceScrollBar(), t._resizeEventHandler(), a()) : a() } function a() { t.$.fireEvent("itemRemove", { type: "resource", id: "string" == typeof e.id || "number" == typeof e.id ? e.id : e.$.id, item: t._cloneObject(e) }) } } _updateTask(e, t) { const i = this, n = i._tasks; if (!e || !n || !n.length) return; const a = i.$.taskPopupWindow, s = i._getSelection("task", i.selectedTaskIds); a && a._target === e && a.close(); let r, o = i._getTaskResources(e); for (let a in t) { let s = e[a], l = t[a]; if ("type" === a && s !== l && ["task", "project", "milestone"].indexOf(l) > -1 && "project" === s) { const t = i._getProjectTasks(e); for (let e = 0, i = t.length; e < i; e += 1)n.splice(n.indexOf(t[e]), 1); delete e.tasks } if ("project" !== e.type || !e.synchronized || !(a.toLowerCase().indexOf("date") > -1 || a.toLowerCase().indexOf("duration") > -1)) if ("dateEnd" === a && new Date(s).getTime() !== new Date(l).getTime() && (r = !0), "tasks" !== a) "connections" === a && (i._removeTaskConnections(e), i._handleTaskConnections(e)), e[a] = l, "resources" === a && (i._handleResources(e), e.disableResources || (o = o.concat(i._getTaskResources(e)), o = o.filter(((e, t) => o.indexOf(e) === t)))), "milestone" !== e.type || "dateStart" !== a && "dateEnd" !== a || (e.dateEnd = e.dateStart = l); else if ("project" === e.type) { const t = i._getProjectTasks(e); for (let e = 0, i = t.length; e < i; e += 1)n.splice(n.indexOf(t[e]), 1); const a = i._createTasks(l, !0); for (let t = 0, i = a.length; t < i; t += 1)a[t].$.project = e; i._insertTasks(a, e, n.indexOf(e)) } } r && delete e.duration; const l = e.$, d = e.$.project; if (i._validateTaskProperties(e, d), e.$ = l, d && i._synchronizeProjectDates(d), "project" === e.type && e.hidden && i._getProjectTasks(e).forEach((t => t.hidden = e.hidden)), i._synchronizeProjectVisibility(e.$.project, e), i._refreshItemIds(), i._refreshConnectionIds(), i._isUpdating) return void (i._isUpdating.type.task = !0); let c; i._selected && i._selected.task && i._setSelection("task", c = i._selected.task.map((e => e.$.id))), i._refreshTableDataSource(), i._refreshTimeline(), i._ensureVisible(e), c && s.toString() !== c.toString() && (i.$.taskTable.selected = c.slice(0)), i._refreshTaskResources(e, o), i._highlightAssignedItem("task", i._getSelection("task", i.selectedTaskIds)), i.$.fireEvent("itemUpdate", { type: "task", id: "string" == typeof e.id || "number" == typeof e.id ? e.id : e.$.id, item: i._cloneObject(e) }) } _updateResource(e, t) { const i = this; if (!e) return; const n = e.hidden; if (i._setResource(e, t), i._isUpdating) i._isUpdating.type.resource = !0; else { if (i.groupByResources) i._refreshTableDataSource(), i._refreshTimeline(); else if (i.taskColumns.find((e => "resources" === e.value))) { const t = i._tasks.filter((t => t.resources.includes(e.id))); for (let e = 0; e < t.length; e++)i._refreshTableColumnsData(t[e], ["resources"]) } if (n !== e.hidden) return i._createResourceTimeline(), void i.$.fireEvent("itemUpdate", { type: "resource", id: "string" == typeof e.id || "number" == typeof e.id ? e.id : e.$.id, item: i._cloneObject(e) }); if (i._refreshTableColumnsData(e, void 0, "resource"), i.$.mainSplitter.contains(i.$.resourceTimelineCellsContainer)) { const t = i.$.resourceTimelineCellsContainer.children; for (let n = 0; n < t.length; n++) { const a = t[n]; a._resource === e && i._refreshResourceTimelineContent(e, a) } } i.$.fireEvent("itemUpdate", { type: "resource", id: "string" == typeof e.id || "number" == typeof e.id ? e.id : e.$.id, item: i._cloneObject(e) }) } } _select(e = "task", t) { const i = this; if (i.disableSelection || !t) return void i._unselectAll(e); let n, a; "task" === e ? (n = "selectedTaskIds", a = i._tasks) : (n = "selectedResourceIds", a = i._resources); const s = a.findIndex((e => e.$.id === t)), r = i._getSelection(e, i[n]); s < 0 || (r.indexOf(t) > -1 ? i.$[`${e}Table`].unselect(t) : i.$[`${e}Table`].select(t)) } _handleTableSelection(e = "task", t) { const i = this; if (i.disableSelection || !t.length) return void i._unselectAll(e); let n, a, s, r, o, l = i._selected; l || (l = i._selected = {}); const d = t[t.length - 1], c = l[e] = []; "task" === e ? (o = i._tasks, n = "selectedTaskIds", a = i.$.taskTimelineCellsContainer.children, s = i.$.timelineTasksContainer.children) : (o = i._resources, n = "selectedResourceIds", a = i.$.resourceTimelineCellsContainer.children, s = []); for (let e = 0, i = o.length; e < i; e += 1) { const i = o[e]; t.indexOf(i.$.id) > -1 && c.push(i) } for (let i = 0, n = a.length; i < n; i += 1) { const n = a[i], o = s[i], l = n._cellObj[e].$.id; d === l && (r = s[i]), t.indexOf(l) > -1 ? (n.setAttribute("selected", ""), n.setAttribute("aria-selected", "true"), o && o.setAttribute("selected", "")) : (n.removeAttribute("selected"), n.setAttribute("aria-selected", "false"), o && o.removeAttribute("selected")) } const m = i[n].slice(0); if (i._setSelection(e, t), !i._tableChangeEventFired) { const n = document.scrollingElement || document.documentElement, a = n.scrollLeft, s = n.scrollTop; i._highlightAssignedItem(e, t), i.$[`${e}Table`].focus({ preventScroll: !0 }), window.scrollTo(a, s) } if ("task" === e && r) { const e = r._cellStart; if (i.scrollLeft > e.left || e.left + r.offsetWidth > i.scrollLeft + i.$.timeline.offsetWidth) { const t = i._timelineCells.indexOf(e); i._scrollTo((i._timelineCells[t - 1] ? i._timelineCells[t - 1] : e).date) } } i._noChangeEvent || i.$.fireEvent("change", { type: e, value: i[n].slice(0), oldValue: m }) } _setSelection(e = "task", t) { const i = this; let [n, a] = "task" === e ? [i._tasks, "selectedTaskIds"] : [i._resources, "selectedResourceIds"], s = []; for (let e = 0, i = t.length; e < i; e += 1) { const i = t[e], a = n.find((e => e.$.id === i)); a && s.push(void 0 !== a.id ? a.id : i) } i.set(a, s) } _getSelection(e = "task", t) { const i = "task" === e ? this._tasks : this._resources; let n = t.slice(0); if (!t || !t.length) return n; for (let e = 0, a = i.length; e < a; e += 1) { const a = i[e], s = t.indexOf(a.id); s > -1 && (n[s] = a.$.id) } return n } _highlightAssignedItem(e, t) { const i = this, [n, a] = "task" === e ? ["resource", "_getTaskResources"] : ["task", "_getResourceTasks"], s = i.$[`${n}Table`], r = i[`_${n}s`]; if (!s || !i.$.mainSplitter.contains(s) || !r.length) return; t && Array.isArray(t) || (t = []); let o = []; for (let n = 0, s = t.length; n < s; n += 1) { const s = i._getValidItemAndIndex(t[n], e); s && (o = o.concat(i[a](s.item).filter((e => !e.hidden)))) } i._tableChangeEventFired = !0, s.selected = o.map((e => e.$.id)), o.length && i._ensureVisible(o[0], n), delete i._tableChangeEventFired } _selectResource(e) { const t = this, i = t._resources.indexOf(e); if (i < 0) return void t._unselectAll("resource"); const n = t.$.resourceTimelineCellsContainer.children[i]; n && n.hasAttribute("selected") ? t._unselectAllTasks() : t.$.resourceTree.focus({ preventScroll: !0 }) } _snapToNearest(e, t) { const i = this; if (!(i.snapToNearest && e && e.classList && e.classList.contains("jqx-timeline-task") && e._cellObj)) return; const n = e._cellObj.task, a = n.segments; if (t && t.classList.contains("jqx-task-segment")) { const n = a.indexOf(t._segmentObj), s = 0 === n, r = n === a.length - 1; if (i._handleSnapToNearestSegment(e, t, s ? "first" : r ? "last" : void 0), i._refreshTaskSegments(e, [t]), !s && !r) return; i._refreshTask(e, !0) } else i._handleSnapToNearest(i._getTaskBarCellRange(e), e), i._refreshTask(e); if (a && a.length > 1) { for (let e = 0, t = a.length; e < t; e += 1)i._snapToNearestDates(a[e], !0); i._validateTaskSegments(n), n.segments.length !== a.length && i._recycleSegments(n, e), i._setTaskBarSegments(e._cellObj, e, !0), i._setTaskBarProgress(n) } if ("project" !== n.type || !n.dragProject) return; const s = i._getProjectTasks(n); if (s && Array.isArray(s)) for (let e = 0; e < s.length; e++) { const t = i.$.timelineTasksContainer.children[i._tasks.indexOf(s[e])]; t && i._snapToNearest(t) } } _handleSnapToNearestSegment(e, t, i) { const n = this, a = n.rightToLeft, s = a ? "right" : "left", r = parseFloat(e.style[s]) || 0, o = t, l = n._getSegmentCellRange(t), d = l.cellStart, c = l.cellEnd, m = "first" === i, u = "last" === i; let h = parseFloat(o.style.width) || o.offsetWidth, g = parseFloat(o.style[s]) || 0, f = r + g; if (n.hasAttribute("dragged")) { const t = c.width - (f + h - c.left); let n; if (f - d.left <= t ? (n = d.left - r, o.style[s] = Math.max(0, m ? 0 : n) + "px") : (n = g + t, o.style[s] = Math.max(0, m ? 0 : n) + "px"), i) { const t = parseFloat(e.style.width) || e.offsetWidth; m && (e.style[s] = r + (n - g) + "px"), e.style.width = t + (m ? -1 : 1) * (n - g) + "px" } } else if (n.hasAttribute("resized")) { const t = d === c ? n._taskBarMinWidth : 0; let l; if ("left" === n.$.timeline.getAttribute("task-bar-hovered")) { if (l = f - d.left, l -= l >= d.width / 2 ? d.width - t : 0, f -= l, o.style[s] = Math.max(0, m ? 0 : f - r) + "px", l = f + h > c.left + c.width / 2 ? c.left + c.width - (f + h) : c.left - (f + h), o.style.width = Math.max(t, h + l) + "px", i) { const t = parseFloat(e.style.width) || e.offsetWidth; m && !a && (e.style[s] = f + "px", e.style.width = t + l + "px"), u && a && (e.style.width = t + l + "px") } } else if (f > d.left + d.width / 2 ? (f = d.left + d.width, o.style[s] = Math.max(0, m ? 0 : f - r) + "px") : (f = d.left, o.style[s] = Math.max(0, m ? 0 : f - r) + "px"), l = f + h - c.left, l = -1 * (l - (l >= d.width / 2 ? c.width : t)), o.style.width = h + l + "px", i) { const t = parseFloat(e.style.width) || e.offsetWidth; m && a && (e.style[s] = f + "px", e.style.width = t + l + "px"), u && !a && (e.style.width = t + l + "px") } } } _handleSnapToNearest(e, t) { const i = this; if (!e) return; const n = i.rightToLeft ? "right" : "left", a = e.cellStart, s = e.cellEnd; let r = parseFloat(t.style.width) || t.offsetWidth, o = parseFloat(t.style[n]) || 0; if (i.hasAttribute("dragged")) { const e = s.width - (o + r - s.left); o - a.left <= e ? t.style[n] = a.left + "px" : t.style[n] = o + e + "px" } else if (i.hasAttribute("resized")) { const e = a === s ? i._taskBarMinWidth : 0; let l; "left" === i.$.timeline.getAttribute("task-bar-hovered") ? (l = o - a.left, l -= l >= a.width / 2 ? a.width - e : 0, t.style[n] = (o -= l) + "px", l = o + r > s.left + s.width / 2 ? s.left + s.width - (o + r) : s.left - (o + r), t.style.width = Math.max(e, r + l) + "px") : (o > a.left + a.width / 2 ? t.style[n] = a.left + a.width + "px" : t.style[n] = a.left + "px", o = parseFloat(t.style[n]) || 0, l = o + r - s.left, l = -1 * (l - (l >= a.width / 2 ? s.width : e)), t.style.width = r + l + "px") } } _setDragLimits(e) { const t = this, i = t._dragDetails; if (!i) return; const n = i.timelineTask; if (!n || !e) return; const a = t.$.timeline.getAttribute("task-bar-hovered"), s = n._cellObj.task; if (a) { if (s.disableResize) return void delete t._dragDetails; const e = t._getTaskBarSizeLimits(n, a); i.min.width = e.min, i.max.width = e.max, t._setSegmentLimits(a); const r = t._createDelimiter("min", a), o = t._createDelimiter("max", a); r && n.appendChild(r), o && n.appendChild(o) } else if (e.closest(".jqx-task-connection-point")) i.timelineTask = void 0; else if (e.closest(".jqx-timeline-task") === n) { let e; if (t._connections) { const i = t._tasks.indexOf(n._cellObj.task); e = t._connections.some((e => e.startIndex === i || e.endIndex === i)) } if (s.disableDrag || e && t.autoSchedule && t.autoScheduleStrictMode) return void delete i.target; i._taskDuration = t._getWorkingTime(s.dateStart, s.dateEnd), n.classList.contains("milestone") && (i.target = "jqx-timeline-task-fill"); const a = t._getTaskDragLimits(n), r = t.rightToLeft ? t.$.timelineContent.offsetWidth - n.offsetLeft - n.offsetWidth : n.offsetLeft; if (void 0 !== a.min && (i.min.left = a.min, "project" === n._cellObj.task.type && a.min > r && (i.min.left = r)), void 0 !== a.max && (i.max.left = a.max, "project" === n._cellObj.task.type && a.max < r && (i.max.left = r)), "project" === s.type && s.dragProject && !t.synchronized) { const e = t._getSubTaskLimits(n); void 0 !== e.min && (i.min.left = i.min.left ? Math.max(i.min.left, e.min) : e.min), void 0 !== e.max && (i.max.left = i.max.left ? Math.min(i.max.left, e.max) : e.max) } else "milestone" === s.type && (i.target = "jqx-timeline-task-fill"); t._setSegmentLimits() } else i.timelineTask = void 0; i.relatedConnections = {} } _setSegmentLimits(e) { const t = this, i = t._dragDetails; if (!i || !i.segment) return; const n = i.segment; if (n) { const a = n.element, s = n.dimensions, r = a.previousElementSibling, o = a.nextElementSibling; if (n.min.width = e ? t._taskBarMinWidth : 0, t.rightToLeft) { if (r) n.min.left = "left" === e ? s.left + s.width : r.offsetLeft - (e ? 0 : s.width), "right" === e && (n.max.width = r.offsetLeft - s.left); else if (!e) { const e = t._getTaskBarSizeLimits(i.timelineTask, "right"); i.min.width = e.min, i.max.width = e.max } if (o) n.max.left = "right" === e ? n.dimensions.left : o.offsetLeft + o.offsetWidth + s.width, e && "left" !== e || (n.max.width = s.left + s.width - (o.offsetLeft + o.offsetWidth)); else if (!e) { const e = t._getTaskBarSizeLimits(i.timelineTask, "left"); i.min.width = e.min, i.max.width = e.max } } else { if (r) n.min.left = "right" === e ? s.left : r.offsetLeft + r.offsetWidth + (e || o ? 0 : s.width), "left" === e && (n.max.width = s.left + s.width - n.min.left); else if (!e) { const e = t._getTaskBarSizeLimits(i.timelineTask, "left"); i.min.width = e.min, i.max.width = e.max } if (o) n.max.left = "left" === e ? s.left + s.width : o.offsetLeft - s.width, e && "right" !== e || (n.max.width = o.offsetLeft - s.left); else if (!e) { const e = t._getTaskBarSizeLimits(i.timelineTask, "right"); i.min.width = e.min, i.max.width = e.max } } } } _setScrollBars() { const e = this; e._scrollView || (e._scrollView = new JQX.Utilities.Scroll(e.$.taskSplitterItem, e.$.horizontalScrollBar, e.$.verticalScrollBar)); const t = e._scrollView.vScrollBar, i = e._scrollView.hScrollBar; i.$.addClass("jqx-hidden"), t.$.addClass("jqx-hidden"), t.hasStyleObserver = !1, i.hasStyleObserver = !1, t.hasResizeObserver = !1, i.hasResizeObserver = !1, t.rightToLeft = i.rightToLeft = e.rightToLeft, i.wait = !1, e._refresh() } _getWorkingTime(e, t) { const i = this; if (!e || !t) return; if (!i.adjustToNonworkingTime) return t.getTime() - e.getTime(); const n = i.nonworkingHours, a = i.nonworkingDays; function s(e, t) { let i, s, r = t.getTime() - e.getTime(), o = new Date(e), l = 0; for (; r > 0;) { const e = Math.min(r, 36e5 - (60 * o.getMinutes() * 1e3 + 1e3 * o.getSeconds() + o.getMilliseconds())); if (a.indexOf(o.getDay()) > -1) s = new Date(o), s.setHours(0, 0, 0, 0), s.setDate(o.getDate() + 1), i = Math.min(e, s.getTime() - o.getTime()), o = new Date(o.getTime() + i), r -= i; else if (n.indexOf(o.getHours()) > -1) { s = new Date(o); const t = s.getTime(); s.setHours(o.getHours() + 1, 0, 0, 0), t === s.getTime() && s.setHours(o.getHours() + 2, 0, 0, 0), i = Math.min(e, s.getTime() - o.getTime()), o = new Date(o.getTime() + i), r -= i } else l += e, r -= e, o = new Date(o.getTime() + e) } return l } if (e.getFullYear() === t.getFullYear()) return s(e, t); let r = new Date(e.getFullYear() + 1, 0, 1, 0, 0, 0, 0), o = s(e, r); if (t.getFullYear() > r.getFullYear()) { const e = Math.max(0, t.getFullYear() - r.getFullYear()); for (let t = 0; t < e; t++) { let e = i._getWorkingDaysBetweenDays(r); o += 60 * (24 * e - e * i.nonworkingHours.length) * 60 * 1e3, r.setFullYear(r.getFullYear() + 1) } } return o += s(r, t), o } _getWorkingDaysBetweenDays(e) { const t = this, i = e.getFullYear(), n = (i % 100 == 0 ? i % 400 == 0 : i % 4 == 0) ? 366 : 365; let a = new Date(e), s = 0; for (let e = 0; e < n; e++)t.nonworkingDays.indexOf(a.getDay()) < 0 && s++, a.setDate(a.getDate() + 1); return s } _setFocusable() { const e = this; e.disabled || e.unfocusable ? e.tabIndex = -1 : e.tabIndex = e.tabIndex > 0 ? e.tabIndex : 0 } _setTaskBarLabel(e, t) { const i = this; void 0 === t && (t = i._getTaskDOMIndex(e)); const n = i.$.timelineTasksContainer.children[t]; if (!n) return; const a = n.querySelector(".jqx-task-segments").children; let s = e.segments; Array.isArray(s) && s && s.length && "task" === e.type || (s = [e]); for (let r = 0, o = s.length; r < o; r += 1) { const o = s[r], l = a[r], d = l ? l.getElementsByClassName("jqx-timeline-task-label")[0] : void 0; if (!d) continue; d.firstElementChild || (d.innerHTML = "<div></div>"); let c = d.firstElementChild; "string" == typeof o.label || "number" == typeof o.label ? c.textContent = o.formatFunction ? o.formatFunction(o.label || "", t) || "" : o.label || "" : c.textContent = e.formatFunction ? o.formatFunction(e.label || "", t) || "" : e.label || "", i.onTaskRender && i.onTaskRender(e, o, n, l, c), e.onRender && e.onRender(e, o, n, l, c) } } _setTaskBarProgress(e, t) { const i = this; if ("number" == typeof t ? t = i.$.timelineTasksContainer.children[t] : void 0 === t && (t = i.$.timelineTasksContainer.children[i._getTaskDOMIndex(e)]), !t || !e) return; let n = e.progress; const a = t.querySelector(".jqx-timeline-task-progress-thumb"); if (!a) return; n = Math.min(100, Math.max(0, n)) || 0; const s = e.dateStart.getTime(), r = e.dateEnd.getTime(), o = t.querySelector(".jqx-task-segments").children; let l, d, c = e.segments, m = 0; c && c.length || (c = [e]); for (let e = 0, t = c.length; e < t; e += 1) { const t = c[e], i = o[e], a = i ? i.querySelector(".jqx-timeline-task-progress") : void 0; if (!a) continue; const u = (t.dateStart.getTime() - s) / (r - s) * 100, h = (t.dateEnd.getTime() - s) / (r - s) * 100, g = Math.max(0, Math.min(100, (n - u) / (h - u) * 100)); a.style.width = g + "%", a.removeAttribute("value"), i.removeAttribute("show-progress-label"), n >= u ? (m = Math.max(u, Math.min(n, h)), l = a, d = i) : l || (l = a, d = i) } if (a.style[i.rightToLeft ? "left" : "right"] = "", a.style[i.rightToLeft ? "right" : "left"] = m + "%", !l || !i.showProgressLabel) return; const u = i.progressLabelFormatFunction; d.setAttribute("show-progress-label", ""), l.setAttribute("value", u ? u(n) + "" : parseFloat(n.toFixed(2)) + "%") } _setTaskDeadline(e, t, i) { const n = this, a = e.task, { timelineStart: s, timelineEnd: r } = i, o = a.deadline, l = n.$.timelineDeadlines, d = l.children, c = o && o.getTime && !isNaN(o.getTime()) ? o.getTime() : void 0; let m; for (let e = 0, i = d.length; e < i; e += 1) { const i = d[e]; if (parseInt(i.getAttribute("task-index")) === t) { m = i; break } } if (!c || c < s || c > r) return void (m && m.remove()); const u = n._getTimelineCellByDate(o), [h, g] = n.rightToLeft ? ["right", "left"] : ["left", "right"]; m || (m = document.createElement("div"), m.classList.add("jqx-gantt-chart-task-deadline"), m.setAttribute("task-index", t), l.appendChild(m)), m.setAttribute("date", o.toString()), m.setAttribute("title", n._formatDate(o)), m.style.top = e.top + "px", m.style[g] = "", m.style[h] = u.left + (n._getTimelineTaskOffset(u, o) || 0) + "px" } _setTaskBarDeadline(e, t) { const i = this, n = e.deadline; if (!n || !n.getTime || isNaN(n) || !t) return; const a = e.deadline.getTime() - e.dateEnd.getTime(); if (!e.deadline || a > 0) return t.removeAttribute("deadline"), void (e.overdue = !1); e.overdue = !0, t.setAttribute("deadline", `${i.localize("overdue")}: ${Math.round(i._convertDuration(Math.abs(a), !0))} ${i.durationUnit + "s"}`) } _setTaskIndicators(e, t, i) { const n = this, a = e.task, { timelineStart: s, timelineEnd: r } = i, [o, l] = n.rightToLeft ? ["right", "left"] : ["left", "right"], d = n.$.taskIndicatorsContainer, c = d.children, m = a.indicators; let u; for (let e = 0, i = c.length; e < i; e += 1) { const i = c[e]; if (parseInt(i.getAttribute("task-index")) === t) { u = i; break } } if (!Array.isArray(m)) return void (u && u.remove()); const h = document.createDocumentFragment(), g = document.createDocumentFragment(); u || (u = document.createElement("div"), u.classList.add("jqx-gantt-chart-indicator"), u.setAttribute("task-index", t), h.appendChild(u)); const f = u.children; for (; f.childElementCount > m.length;)f.firstElementChild.remove(); for (let t = 0, i = m.length; t < i; t += 1) { let i = f[t]; const a = m[t], d = a.date; if (!d || !d.getTime) { i && i.remove(); continue } const c = d.getTime(); if (c < s || c > r) { i && i.remove(); continue } const u = n._getTimelineCellByDate(d), h = a.label, p = a.className, _ = a.icon; i || (i = document.createElement("div"), g.appendChild(i)), i.className = "jqx-gantt-chart-task-indicator", i._indicatorObj = a; const T = i.classList; "string" == typeof p && T.add(p), _ ? (T.add("icon"), i.style.setProperty("--jqx-gantt-chart-indicator-icon", `'${_}'`)) : T.contains("icon") && (T.remove("icon"), i.style.removeProperty("--jqx-gantt-chart-indicator-icon")), i.textContent = h || "", i.style.top = e.top + "px", i.style[l] = "", i.style[o] = u.left + (n._getTimelineTaskOffset(u, d) || 0) + "px" } g.childElementCount && u.appendChild(g), h.childElementCount && d.appendChild(h) } _setTimelineTaskBar(e, t, i) { const n = this, a = e.task, s = void 0 === t ? n._getTaskDOMIndex(a) : t, r = n.$.timelineTasksContainer.children, o = r[s]; let l, d; if (0 === r.length || !o || !o.classList || !o.classList.contains("jqx-timeline-task")) return; const c = a.dateStart instanceof Date ? a.dateStart : new Date(a.dateStart), m = a.dateEnd instanceof Date ? a.dateEnd : new Date(a.dateEnd); if (l = !i && o._cellStart || n._getTimelineCellByDate(c), d = !i && o._cellEnd || n._getTimelineCellByDate(m), !l || !d) return void o.classList.add("jqx-visibility-hidden"); o._cellStart = l, o._cellEnd = d, o.classList.remove("jqx-visibility-hidden"); const u = n._getTaskBarDetails(e, l, d); u && (o.style[n.rightToLeft ? "left" : "right"] = "", o.style[n.rightToLeft ? "right" : "left"] = u.left + "px", o.style.width = u.width ? u.width + "px" : "", o.style.top = u.top + "px"), n._setTaskBarSegments(e, o, i) } _setTimelineTaskBaseline(e, t) { const i = this, n = e.task, a = i.$.timelineBaselinesContainer; if (!i.showBaseline) return void (a.innerHTML && (a.innerHTML = "")); const s = n.planned, r = a.children; let o; for (let e = 0, i = r.length; e < i; e += 1) { const i = r[e]; if (parseInt(i.getAttribute("task-index")) === t) { o = i; break } } if (!s || "milestone" === n.type || !s.dateStart || !s.dateEnd) return void (o && o.remove()); const l = s.dateStart, d = s.dateEnd, c = i._getTimelineCellByDate(l), m = i._getTimelineCellByDate(d); if (!c || !m) return; o || (o = document.createElement("div"), o.classList.add("jqx-gantt-chart-task-baseline"), o.setAttribute("task-index", t), a.appendChild(o)); const [u, h] = i.rightToLeft ? ["right", "left"] : ["left", "right"], g = i._getTaskBarDetails(e, c, m); if (g) { const e = o.style; e.width = g.width ? g.width + "px" : "", e.top = g.top + "px", e[u] = g.left + "px", e[h] = "" } o.setAttribute("aria-label", n.label + " Start date: " + i._toISODate(l) + ", End date: " + i._toISODate(d)) } _setTaskBarSegments(e, t, i) { const n = this, a = e.task, s = t.querySelector(".jqx-task-segments").children; let r, o, l = a.segments; if (Array.isArray(l) && l && l.length && "task" === a.type || (l = [a]), 1 === l.length) { const e = s[0].style; return void (e.right = e.left = e.width = "") } const d = n.rightToLeft, c = parseFloat(t.style[d ? "right" : "left"]); let m; for (let e = 0, t = l.length; e < t; e += 1) { const t = l[e], a = s[e]; if (!a) continue; const u = t.dateStart instanceof Date ? t.dateStart : new Date(t.dateStart), h = t.dateEnd instanceof Date ? t.dateEnd : new Date(t.dateEnd); r = !i && a._cellStart || n._getTimelineCellByDate(u), o = !i && a._cellEnd || n._getTimelineCellByDate(h), a._cellStart = r, a._cellEnd = o; const g = n._getTaskBarDetails({ task: t }, r, o); g && (a.style[d ? "left" : "right"] = "", a.style[d ? "right" : "left"] = Math.max(0, g.left - c) + "px", a.style.width = g.width + "px"), m = a } n._setTaskBarDeadline(a, m) } _setCurrentTimeIndicators() { const e = this; if (clearInterval(e._currentTimeIndicatorInterval), delete e._currentTimeIndicatorInterval, e.currentTimeIndicator || e.shadeUntilCurrentTime) e._refreshTimeIndicators(), e._currentTimeIndicatorInterval = setInterval(e._refreshTimeIndicators.bind(e), 1e3 * e.currentTimeIndicatorInterval); else { const t = e.$.timelineIndicatorsContainer; t && t.remove() } } _refreshTimeIndicators() { const e = this, t = e.currentTime, i = e.view, n = e._getTodayCellObj(t); let a = e.$.timelineIndicatorsContainer; if (!n) return a && a.remove(), clearInterval(e._currentTimeIndicatorInterval), void delete e._currentTimeIndicatorInterval; a || (e.$.timelineIndicatorsContainer = a = document.createElement("div"), a.classList.add("jqx-gantt-chart-time-indicators-container"), a.setAttribute("role", "presentation")), new Date(n.date); let s, r, o = t.getMinutes(); switch (i) { case "quarter": case "year": { const e = new Date(t.getFullYear(), t.getMonth() + 1, 1, 0, 0, 0, 0); e.setDate(0), o += 24 * t.getDate() * 60, s = 24 * e.getDate() * 60; break } case "month": o += 24 * (t.getDay() + 1) * 60, s = 10080; break; case "week": o += 60 * t.getHours(), s = 1440; break; case "day": s = 60 }r = { cellObj: n, minutes: o, max: s, today: t }, e._refreshCurrentTimeShader(r), e._refreshCurrentTimeIndicator(r), a.childElementCount || (clearInterval(e._currentTimeIndicatorInterval), delete e._currentTimeIndicatorInterval), a.parentElement || e.$.timelineContent.appendChild(a) } _refreshCurrentTimeIndicator(e) { const t = this, i = t.$.timelineIndicatorsContainer; let n = i.querySelector(".jqx-gantt-chart-current-time-indicator"); if (!t.currentTimeIndicator || !e) return void (n && n.remove()); const { cellObj: a, minutes: s, max: r } = e; n || (n = document.createElement("div"), n.classList.add("jqx-gantt-chart-current-time-indicator")), t.rightToLeft ? n.style.right = a.left + a.width * (s / r) + "px" : n.style.left = a.left + a.width * (s / r) + "px", n.setAttribute("aria-label", "Current Time Indicator"), n.parentElement || i.appendChild(n), t._setTodayCell(a.date) } _refreshCurrentTimeShader(e) { const t = this.$.timelineIndicatorsContainer; let i = t.querySelector(".jqx-gantt-chart-current-time-shader"); if (!this.shadeUntilCurrentTime || !e) return void (i && i.remove()); const { cellObj: n, minutes: a, max: s } = e; i || (i = document.createElement("div"), i.classList.add("jqx-gantt-chart-current-time-shader")), i.style.width = n.left + n.width * (a / s) + "px", i.setAttribute("aria-label", "Current Time Shader"), i.parentElement || t.appendChild(i) } _setTodayCell(e) { const t = this; if (e) e instanceof Date && (e = e.getTime()); else { let i = 0; e = t.currentTime, "day" === t.view && (i = e.getHours()), e.setHours(i, 0, 0, 0), e = e.getTime() } if ("number" != typeof e) return; const i = t.$.timelineViewCells.children; for (let t = 0; t < i.length; t++) { const n = i[t], a = new Date(n._date); a && (a.getTime() === e ? n.setAttribute("current", "") : n.removeAttribute("current")) } } _getTodayCellObj(e) { const t = this, i = t.view, n = t._timelineCells; e && e.getTime || (e = t.currentTime); for (let t = 0, a = n.length; t < a; t += 1) { const a = n[t], s = a.date; switch (i) { case "quarter": case "year": if (e.getFullYear() === s.getFullYear() && e.getMonth() === s.getMonth()) return a; break; case "month": { const t = new Date(e); if (t.setDate(e.getDate() - e.getDay()), e.getFullYear() === s.getFullYear() && e.getMonth() === s.getMonth() && t.getDate() === s.getDate()) return a; break } case "week": if (e.getFullYear() === s.getFullYear() && e.getMonth() === s.getMonth() && e.getDate() === s.getDate()) return a; break; case "day": if (e.getFullYear() === s.getFullYear() && e.getMonth() === s.getMonth() && e.getDate() === s.getDate() && s.getHours() === e.getHours()) return a } } } _getTaskDOMIndex(e) { const t = this.$.timelineTasksContainer.children; if (!e || void 0 === e.$.id) return -1; for (let i = 0, n = t.length; i < n; i += 1)if (t[i]._cellObj.task === e) return i; return -1 } _getTimelineCellByDate(e, t, i) { const n = this, a = n._timelineCells; if (!a || 0 === a.length) return; const s = a.length - 1; i = Math.min(s, "number" == typeof i ? i : s); for (let s = t = Math.min(i, Math.max(0, "number" == typeof t ? t : 0)); s <= i; s++) { const t = a[s]; if (!t) continue; const i = t.date; switch (n.view) { case "quarter": case "year": if (i.getFullYear() === e.getFullYear() && i.getMonth() === e.getMonth()) return t; break; case "month": { const n = new Date(i); let a = new Date(i); if (a.setDate(a.getDate() + (6 - a.getDay()) + 1), a.setMilliseconds(a.getMilliseconds() - 1), e.getTime() >= n.getTime() && e.getTime() <= a.getTime()) return t; break } case "week": if (i.getFullYear() === e.getFullYear() && i.getMonth() === e.getMonth() && i.getDate() === e.getDate()) return t; break; case "day": if (i.getFullYear() === e.getFullYear() && i.getMonth() === e.getMonth() && i.getDate() === e.getDate() && i.getHours() === e.getHours()) return t } } const r = a[0], o = a[a.length - 1]; return e.getTime() < r.date.getTime() ? r : e.getTime() > o.date.getTime() ? o : void 0 } _refreshViewDetailCell(e, t, i) { const n = this, a = n._timelineCells, s = e.date; let r = 0, o = 0 === i ? 0 : void 0; for (void 0 === t && (t = 0); t < a.length; t++) { const e = a[t], i = n._getCellWidth(e, s); if (i) void 0 === o && (o = e.left + e.width - i), r += i; else if (e.date.getTime() > s.getTime()) break } return n._isLastWeekCellNotFull && (delete n._isLastWeekCellNotFull, t--), e.width = r, e.left = o, t } _getCellWidth(e, t) { const i = this, n = e.date, a = (e, t) => e.getFullYear() === t.getFullYear(), s = (e, t) => e.getMonth() === t.getMonth(), r = e.width; switch (i.view) { case "month": { let e = new Date(n), o = new Date(e), l = 0; for (o.setDate(o.getDate() + (6 - e.getDay()) + 1), o.setMilliseconds(o.getMilliseconds() - 1); e.getTime() <= o.getTime();)a(e, t) && s(e, t) && l++, e.setDate(e.getDate() + 1); if (0 === l) return; "day" !== i.monthScale && (i._isLastWeekCellNotFull = l / 7 != 1); let d = r * l / 7; return d < 70 ? 70 : d } case "quarter": case "year": if (a(n, t)) return r; break; case "week": { const e = new Date(t), a = new Date(t); if (-1 !== i.firstDayOfWeek) { const t = e.getDay() - i.firstDayOfWeek; e.setDate(e.getDate() - e.getDay() + i.firstDayOfWeek - (t >= 0 ? 0 : 7)), a.setDate(e.getDate() + 6) } else e.setDate(t.getDate() - t.getDay()), a.setDate(t.getDate() + (6 - t.getDay())); if (n.getTime() >= e.getTime() && n.getTime() <= a.getTime()) return r; break } case "day": if (a(n, t) && s(n, t) && n.getDate() === t.getDate()) return r } } _getCellByOffsetLeft(e) { const t = this._timelineCells; if (!e) return; let i; for (let n = 0; n < t.length && !(t[n].left >= e); n++)i = t[n]; return i } _unselectAll(e, t) { const i = this, n = i.$[`${e}TimelineCellsContainer`]; let a; delete i._selected; const s = n.querySelectorAll(".jqx-timeline-row[selected]"); for (let e = 0; e < s.length; e++)s[e].removeAttribute("selected"); if ("task" === e) { a = "selectedTaskIds"; const e = i.$.timelineTasksContainer.querySelectorAll(".jqx-timeline-task[selected]"); for (let t = 0; t < e.length; t++)e[t].removeAttribute("selected"), e[t].setAttribute("aria-selected", "false") } else a = "selectedResourceIds"; if (i[`_${e}TreeChangeEventFired`] || i.$[e + "Table"].clearSelection(), i._highlightAssignedItem(e), t) return; const r = i[a].slice(0); r.length && (i[a] = [], i._noChangeEvent || i.$.fireEvent("change", { value: [], oldValue: r, type: e })) } _getSegmentCellRange(e) { const t = this; if (!e.classList || !e.classList.contains("jqx-task-segment")) return; const i = e.closest(".jqx-timeline-task"); if (!i) return; let n, a, s = i._cellStart, r = i._cellEnd; s && r || ({ cellStart: s, cellEnd: r } = t._getTaskBarCellRange(i)); const o = t.rightToLeft, l = parseFloat(e.style.width) || e.offsetWidth, d = t._timelineCells; let c = parseFloat(i.style[o ? "right" : "left"]); c && !isNaN(c) || (c = i.offsetLeft, o && (c = t.$.timelineContent.offsetWidth - c)); const m = c + parseFloat(e.style[o ? "right" : "left"]) || (o ? (parseFloat(i.style.width) || i.offsetWidth) - (e.offsetLeft + e.offsetWidth) : e.offsetLeft), u = parseFloat((m + l).toFixed(2)); for (let e = d.indexOf(s), t = d.indexOf(r); e <= t; e++) { const t = d[e], i = t.left, s = t.width, r = parseFloat((i + s).toFixed(2)); if (m >= i && m <= r && (n = t), !a && u > i && u <= r && (a = t), n && a) break } return n || (n = a || d[0]), a || (a = d[d.length - 1]), { cellStart: n, cellEnd: a } } _getTaskBarCellRange(e) { const t = this; if (!e.classList || !e.classList.contains("jqx-timeline-task")) return; let i = parseFloat(e.style.width) || e.offsetWidth; const n = t._timelineCells, a = t.$.timelineContent, s = parseFloat(e.style[t.rightToLeft ? "right" : "left"]) || (t.rightToLeft ? (parseFloat(a.style.width) || a.offsetWidth) - (e.offsetLeft + e.offsetWidth) : e.offsetLeft); let r, o; e.classList.contains("milestone") && (i /= 2); const l = parseFloat((s + i).toFixed(2)); for (let e = 0; e < n.length; e++) { const t = n[e], i = t.left, a = t.width, d = parseFloat((i + a).toFixed(2)); if (s >= i && s <= d && (r = t), !o && l > i && l <= d && (o = t), r && o) break } return r || (r = e.classList.contains("milestone") && o ? o : n[0]), o || (o = n[n.length - 1]), { cellStart: r, cellEnd: o } } _getDateFromCell(e, t, i) { if (!t) return new Date; const n = this, a = new Date(t.date); let s, r = 0, o = 0, l = new Date(a); switch (l.setHours(0, 0, 0, 0), i || (i = n.view), i) { case "quarter": case "year": s = new Date(a.getFullYear(), a.getMonth() + 1, 0).getDate(), r = 1, l.setDate(s); break; case "month": r = a.getDate(), s = 7, l.setDate(l.getDate() + 6); break; case "week": s = 1, r = a.getDate(); break; case "day": s = 1 / 24, r = a.getDate(), o = a.getHours() }l.setHours(23, 59, 59, 999); const d = parseFloat(((e - t.left) / t.width * s).toFixed(12)), c = Math.min(s, Math.floor(d)), m = d % 1 * 24, u = Math.floor(m), h = 60 * Math.abs(m - u), g = Math.floor(h), f = 60 * Math.abs(h - g), p = Math.floor(f), _ = 1e3 * Math.abs(f - p), T = Math.floor(_), b = new Date(a.getFullYear(), a.getMonth(), r + c, o + u, g, p, T); return b.getTime() > l ? l : b } _getCellDateRange(e) { if (!e || !e._date) return; const t = new Date(e._date); let i = new Date(t); switch (i.setHours(0, 0, 0, 0), this.view) { case "quarter": case "year": i.setDate(1), i.setMonth(i.getMonth() + 1), i.setDate(0); break; case "month": i.setDate(i.getDate() + 6); break; case "day": return i.setHours(t.getHours(), 59, 59, 999), { dateStart: t, dateEnd: i } }return i.setHours(23, 59, 59, 999), { dateStart: t, dateEnd: i } } _getTasksJSON() { const e = this; let t = e._tasks, i = "project"; return function t(n, a) { if (!n) return; let s = []; for (let r = 0; r < n.length; r++) { const o = n[r]; let l; if (!o.$[i] && !a || o.$[i] === a) { const i = e._getTaskConnections(o).taskConnections; l = e._cloneObject(o, !0), i.length && (l.connections = i.map((e => { const t = { target: e.endIndex, type: e.type }; return e.lag && (t.lag = e.lag), t }))), l.tasks = t(e._getProjectTasks(o), o), delete l.$, s.push(l) } } return s }(t) } _cloneObject(e, t) { let i = {}; for (let n in e) { let a = e[n]; "tasks" !== n && ("connections" !== n ? a instanceof Date ? i[n] = t ? a.toISOString() : new Date(a) : i[n] = a : i[n] = JSON.parse(JSON.stringify(a))) } return t || delete i.$, i } _setTable(e) { const t = this; e || (e = t.$.taskTable); const [i, n] = e === t.$.taskTable ? [t.taskColumns, "task"] : [t.resourceColumns, "resource"]; if (!t.contains(e)) return; if (!i.length) return void (t.$[n + "Table"].dataSource = []); const a = t._getTableColumns(n); "task" === n && (e.filterRow = t.filterRow, [e.grouping, e.groupFormatFunction] = t.groupByResources ? [!0, t._formatResourceGroups.bind(t)] : [!1, null]), e.isRendered && e.resetState("expanded"), e.style.setProperty("--jqx-table-row-height", ""), e.columns = a, e.dataSource = t._getTableDataSource(n, a), e.wait && (t.$.taskTable.hasResizeObserver = !1, e.$.virtualizationContainer._scrollView.disableSwipeScroll = !0, e.$.virtualizationContainer.verticalScrollBarVisibility = "hidden", e.$.virtualizationContainer.disabled = !0, e.columnMinWidth = t.columnMinWidth, e.columnResize = t.columnResize, e.columnResizeFeedback = t.columnResizeFeedback, e.filtering = t[`${n}Filtering`], e.sort = t.sortFunction, e.sortMode = t.sortMode, e.keyboardNavigation = t.keyboardNavigation, e.selectionByHierarchy = !1, e.selection = !t.disableSelection, e.hideSelectionColumn = !t.showSelectionColumn, e.onKeyboardScroll = (i, n) => { const a = e === t.$.taskTable ? t : t._resourceScrollView; n !== a.scrollTop && (a.scrollTop = n) }, e.wait = !1), e.$.virtualizationContainer.scrollTop = "task" === n ? t.scrollTop : t.$.resourceVerticalScrollBar.value, t._refresh() } _formatResourceGroups(e) { const t = this, i = t._resources, n = e.data.data.resources.split(","); let a = []; for (let e = 0, t = i.length; e < t; e += 1) { const t = i[e], s = t.id + ""; n.indexOf(s) > -1 && a.push(t.label || t.value || t.id) } t.resourceGroupFormatFunction ? e.template = t.resourceGroupFormatFunction(n) : e.template = "<strong>" + (a.length ? a.join(", ") : t.localize("unassigned")) + "</strong>" } _formatResourceGroupLabel(e) { const t = this, i = t._resources, n = e.split(","); if (!e) return t.localize("unassigned"); let a = []; for (let e = 0, t = i.length; e < t; e += 1) { const t = i[e], s = t.id + ""; n.indexOf(s) > -1 && a.push(t.label || t.value || t.id) } return a.length ? a.join(", ") : t.localize("unassigned") } _getTableColumns(e = "task") { const t = this, i = ["dateStart", "dateEnd", "minDateStart", "maxDateStart", "minDateEnd", "maxDateEnd"], n = ["progress", "capacity", "workload", "maxCapacity", "minCapacity"]; let a = "task" === e ? t.taskColumns : t.resourceColumns, s = []; "task" === e && t.groupByResources && !a.find((e => "resources" === e.value)) && (a = a.slice(0), a.push({ label: "", value: "resources", hidden: !0 })); for (let r = 0, o = a.length; r < o; r++) { const o = a[r], l = o.value, d = {}; d.label = t.localize(o.label) || o.label, d.dataField = l, l.startsWith("date") || i.indexOf(l) > -1 ? d.dataType = "date" : d.dataType = "overdue" === l ? "boolean" : l.startsWith("duration") || n.indexOf(l) > -1 ? "number" : "string", o.hidden && (d.visible = !1), "function" == typeof o.formatFunction ? d.formatFunction = i => { const n = t._getValidItemAndIndex(i.data.itemId, e).item, a = i.column.toLowerCase(); let s = i.value; a.indexOf("date") > -1 ? s = new Date(s) : "resources" === a && (s = s ? s.split(",") : []), i.template = o.formatFunction.call(t, s, n ? t._cloneObject(n) : void 0) } : ["date", "number"].indexOf(d.dataType) > -1 ? d.formatFunction = i => { const n = t._getValidItemAndIndex(i.data.itemId, e).item, a = t._formatColumnData(t._cloneObject(n), o); i.template = a } : "overdue" === l && (d.formatFunction = e => { const t = e.cell; e.value + "" == "true" ? t.setAttribute("overdue", "") : t.removeAttribute("overdue"), e.value = "" }, d.width = t._taskDefaultHeight), o.size && (d.width = o.size), s.push(d) } return s } _getTableDataSource(e = "task", t) { const i = this, n = "task" === e ? i._getTableData(i._tasks, i.taskColumns, e) : i._getTableData(i._resources, i.resourceColumns, e), a = i.groupByResources, s = (() => { let e = []; e.push("itemId: string"), e.push("projectId: string"), e.push("itemIndex: number"), a && e.push("resources: string"); for (let i = 0, n = t.length; i < n; i += 1) { const n = t[i]; e.push(`${n.dataField}: ${n.dataType}`) } return e })(); return i.groupByResources ? new window.JQX.DataAdapter({ dataFields: s, dataSource: n, groupBy: ["resources"], id: "itemId" }) : new window.JQX.DataAdapter({ dataFields: s, dataSource: n, keyDataField: "itemId", parentDataField: "projectId", id: "itemId" }) } _refreshTableDataSource(e = "task") { const t = this, i = "task" === e ? t.$.taskTable : t.$.resourceTable; t.contains(i) && (i.resetState("expanded"), i.dataSource = t._getTableDataSource(e, t._getTableColumns(e))) } _refreshColumnsHeaders(e) { const t = this; e || (e = "task"); const i = t.$[`${e}Table`].columns, n = t[`${e}Columns`]; for (let e = 0, a = i.length; e < a; e++)i[e].label = t.localize(n[e].label) || n[e].label; !arguments.length && t.$.mainSplitter.contains(t.$.resourceSplitter) && t._refreshColumnsHeaders("resource") } _getTaskResourceIds(e) { const t = e.resources, i = this._resources.map((e => e.id)); let n = []; if (Array.isArray(t)) for (let e = 0, a = t.length; e < a; e += 1) { const a = t[e].id || t[e]; i.indexOf(a) > -1 && n.push(a) } return n.sort() } _getTableData(e, t, i) { const n = this, a = n.groupByResources; i || (i = "task"); const s = t.map((e => e.value)); let r = [], o = []; for (let l = 0, d = e.length; l < d; l += 1) { const d = e[l]; if (d.hidden || a && d.disableResources) continue; const c = {}, m = d.$.project, u = n._getTaskResourceIds(d); for (let e = 0, a = s.length; e < a; e += 1)c[s[e]] = n._formatColumnData(d, t[e], i); c.expanded = a || d.expanded, c.itemId = d.$.id || d.id || "", c.itemIndex = l, u && u.length ? c.resources = u.toString() : delete c.resources, d.$ && m && (m.$.id ? c.projectId = d.$.project.$.id : o.push(((e, t) => { e.projectId = t.$.id }).bind(null, d, m))), r.push(c) } for (let e = 0, t = o.length; e < t; e += 1)o[e](); return r } _formatColumnData(e, t) { const i = this, n = t.value; let a = e[n]; if (n) { const e = (n + "").toLowerCase(); if (e.indexOf("date") > -1 || t.dateFormat) return i._formatDate(a, t); if (e.indexOf("duration") > -1 || t.numberFormat) { const e = parseFloat(a.toFixed(1)); return t.numberFormat ? i._formatNumber(e, t.numberFormat) : e } } return null != a ? a.toString() : i.localize("unassigned") } _formatDate(e, t) { const i = this; if (e = Date.parse(e), !isNaN(e)) { let n = t ? t.dateFormat : void 0; if ("string" == typeof n) return new JQX.Utilities.DateTime(new Date(e)).toString(n); if ("object" == typeof n) n = t.dateFormat; else { const e = i.view; n = { year: "numeric", month: "2-digit", day: "numeric" }, ["day", "week"].indexOf(e) > -1 && (n.hour = "numeric", n.minute = "numeric", n.second = "numeric") } return new Intl.DateTimeFormat(i.locale, n).format(new Date(e)) } } _formatNumber(e, t, i) { const n = this; if ("object" == typeof t) return new Intl.NumberFormat(n.locale, t).format("" + e); i || (i = { percentSymbol: "%", currencySymbol: "$", currencySymbolPosition: "before", decimalSeparator: ".", thousandsSeparator: "," }); const a = e => "number" == typeof e && isFinite(e); if ("" === t || null === t) return e; let s; a(e) || (e *= 1), t.length > 1 && (s = parseInt(t.slice(1), 10)); let r = {}, o = t.charAt(0).toUpperCase(); switch (r.thousandsSeparator = i.thousandsSeparator, r.decimalSeparator = i.decimalSeparator, o) { case "D": case "d": case "F": case "f": r.decimalPlaces = s; break; case "N": case "n": r.decimalPlaces = 0; break; case "C": case "c": r.decimalPlaces = s, "before" === i.currencySymbolPosition ? r.prefix = i.currencySymbol : r.suffix = i.currencySymbol; break; case "P": case "p": r.suffix = i.percentSymbol, r.decimalPlaces = s; break; default: throw "Bad number format specifier: " + o }if (a(e)) { const t = e < 0; let i = e + ""; const n = r.decimalSeparator ? r.decimalSeparator : "."; let s; if (a(r.decimalPlaces)) { var l = r.decimalPlaces, d = Math.pow(10, l); if (i = (e * d).toFixed(0) / d + "", s = i.lastIndexOf("."), l > 0) for (s < 0 ? (i += n, s = i.length - 1) : "." !== n && (i = i.replace(".", n)); i.length - 1 - s < l;)i += "0" } else { let t = e + ""; s = t.lastIndexOf("."), s > 0 && void 0 === l && "." !== n && (t = t.replace(".", n)) } if (r.thousandsSeparator) { const e = r.thousandsSeparator; s = i.lastIndexOf(n), s = s > -1 ? s : i.length; let a = i.substring(s), o = -1; for (var c = s; c > 0; c--)o++, o % 3 == 0 && c !== s && (!t || c > 1) && (a = e + a), a = i.charAt(c - 1) + a; i = a } return i = r.prefix ? r.prefix + i : i, i = r.suffix ? i + r.suffix : i, i } return e } _validateDate(e, t) { return e[t] = this._dateValidator(void 0, e[t]), e[t] && !isNaN(e[t].getTime()) || (e[t] = void 0), e[t] } _validateTaskProperties(e, t) { const i = this; if (e.$ = {}, e.tasks instanceof Array && e.tasks.length > 0 ? e.type = "project" : (!e.type || ["project", "task", "milestone"].indexOf(e.type) < 0) && (e.type = "task"), i._validateTaskDuration(e), void 0 === e.hidden && t && (e.hidden = t.hidden), e.hidden = !!e.hidden, void 0 === e.resources ? e.resources = [] : e.resources = [e.resources].reduce(((e, t) => e.concat(t)), []), "project" === e.type ? e.expanded = !!e.expanded : delete e.expanded, e.progress = Math.min(Math.max(0, parseFloat(e.progress) || 0), 100), i._validateTaskDates(e, t), i._validateTaskSegments(e), i._validateTaskIndicators(e), i._validateTaskPlannedDates(e), e.deadline) { const t = i._validateDate(e, "deadline"); !t || isNaN(t.getTime()) ? delete e.deadline : e.dateEnd && (e.overdue = e.deadline.getTime() - e.dateEnd.getTime() < 0) } else e.overdue = !1, delete e.deadline; if (!e.dateStart && !e.dateEnd && "project" === e.type && !e.synchronized) return; const n = e.connections; if (n instanceof Array) { for (let e = 0; e < n.length; e++) { const t = n[e], i = t.target = "string" == typeof t.target ? t.target : parseInt(t.target), a = t.type = parseInt(t.type); null == i || "number" == typeof i && isNaN(i) || isNaN(a) ? (n.splice(n.indexOf(t), 1), e--) : t.lag = parseInt(t.lag) || 0 } e.connections = e.connections.map((e => Object.assign({}, e))) } else e.connections = []; return e.class = e.class ? e.class + "" : "", e.class = void 0 !== e.class && null !== e.class ? e.class : "", e } _validateTaskIndicators(e) { const t = this, i = e.indicators; if (!i || !Array.isArray(i) || !i.length) return void delete e.indicators; let n = []; for (let e = 0, a = i.length; e < a; e += 1) { const a = i[e]; if ("object" != typeof a) continue; const s = t._validateDate(a, "date"); s && s.getTime && !isNaN(s.getTime()) && n.push(a) } e.indicators = n } _validateTaskSegments(e) { const t = this, i = e.segments; if (!i || !Array.isArray(i) || i.length < 2 || "task" !== e.type) return void delete e.segments; const n = t.nonworkingDays.length > 0 || t.nonworkingHours.length > 0; let a, s = [], r = []; for (let e = 0, n = i.length; e < n; e += 1) { const n = i[e]; if ("object" != typeof n) continue; let a = parseFloat(n.duration); isNaN(a) && delete n.duration, t._validateTaskDates(n), n.dateStart && n.dateEnd && s.push(n) } s.sort(((e, t) => e.dateStart.getTime() - t.dateStart.getTime())); for (let i = 0, o = s.length; i < o; i += 1) { const o = s[i]; let l = o.dateStart, d = o.dateEnd; o.dateStart = l = new Date(Math.max(e.dateStart.getTime(), l.getTime())), o.dateEnd = d = new Date(Math.min(e.dateEnd.getTime(), d.getTime())), a && a.dateEnd.getTime() > l.getTime() && (o.dateStart = l = new Date(a.dateEnd.getTime() + 1e3), l.getTime() >= d.getTime()) || l.getTime() > d.getTime() || (o.duration = t._convertDuration(n ? t._getWorkingTime(l, d) : d.getTime() - l.getTime(), !0), a = o, r.push(o)) } r.length < 2 ? delete e.segments : (r[0].dateStart = new Date(e.dateStart), r[r.length - 1].dateEnd = new Date(e.dateEnd), e.segments = r) } _validateTaskDuration(e) { const t = this; let i = t._convertDuration(parseFloat(e.duration)) || 0, n = t._convertDuration(parseFloat(e.minDuration)) || 0, a = t._convertDuration(parseFloat(e.maxDuration)) || 0; n && a && (a = Math.max(n, a)), i && (n ? i = Math.max(n, i) : a && (i = Math.min(i, a))), e.duration = t._convertDuration(i, !0), e.minDuration = t._convertDuration(n, !0), e.maxDuration = t._convertDuration(a, !0) } _validateTaskDates(e, t) { const i = this, n = i._convertDuration(e.minDuration), a = i._convertDuration(e.maxDuration); let s = i._convertDuration(e.duration); if (void 0 !== e.minDateStart && (e.minDateStart = i._validateDate(e, "minDateStart")), void 0 !== e.maxDateStart && (e.maxDateStart = i._validateDate(e, "maxDateStart")), e.minDateStart && e.maxDateStart && (e.maxDateStart = new Date(Math.max(e.minDateStart.getTime(), e.maxDateStart.getTime()))), void 0 !== e.minDateEnd && (e.minDateEnd = i._validateDate(e, "minDateEnd")), void 0 !== e.maxDateEnd && (e.maxDateEnd = i._validateDate(e, "maxDateEnd")), e.minDateEnd && e.maxDateEnd && (e.maxDateEnd = new Date(Math.max(e.minDateEnd.getTime(), e.maxDateEnd.getTime()))), e.dateStart = i._validateDate(e, "dateStart"), e.dateEnd = i._validateDate(e, "dateEnd"), e.dateStart || (e.minDateStart ? e.dateStart = e.minDateStart : e.maxDateStart ? e.dateStart = e.maxDateStart : e.dateStart = i.dateStart), e.dateEnd || (e.minDateEnd ? e.dateEnd = e.minDateEnd : e.maxDateEnd && (e.dateEnd = e.maxDateEnd)), e.minDateStart && (e.dateStart = new Date(Math.max(e.minDateStart.getTime(), e.dateStart.getTime()))), e.maxDateStart && (e.dateStart = new Date(Math.min(e.maxDateStart.getTime(), e.dateStart.getTime()))), e.minDateEnd && (e.dateEnd = new Date(Math.max(e.minDateEnd.getTime(), e.dateEnd.getTime()))), e.maxDateEnd && (e.dateEnd = new Date(Math.min(e.maxDateEnd.getTime(), e.dateEnd.getTime()))), e.dateStart && (i.min && (s = Math.min(e.dateStart.getTime() - i.min.getTime(), s), e.duration = i._convertDuration(s, !0)), i.max && (s = Math.min(i.max.getTime() - e.dateStart.getTime(), s), e.duration = i._convertDuration(s, !0))), !e.dateStart && s && e.dateEnd && (e.dateStart = new Date(e.dateEnd.getTime() - s)), "task" !== e.type || e.dateStart && !isNaN(e.dateStart.getTime()) || !t || (e.dateStart = new Date(t.dateStart)), n && e.dateStart) if (i.adjustToNonworkingTime && (i.nonworkingDays.length > 0 || i.nonworkingHours.length > 0)) { const t = i._getTaskWorkingDateEnd(e, n); e.dateEnd = new Date(Math.max(e.dateEnd ? e.dateEnd.getTime() : 0, t.getTime())) } else e.dateEnd = new Date(Math.max(e.dateEnd ? e.dateEnd.getTime() : 0, e.dateStart.getTime() + n)); if (s && e.dateStart && (i.adjustToNonworkingTime && (i.nonworkingDays.length > 0 || i.nonworkingHours.length > 0) ? e.dateEnd = i._getTaskWorkingDateEnd(e, s) : e.dateEnd = new Date(e.dateStart.getTime() + s)), s || a) { let t; t = i.adjustToNonworkingTime && (i.nonworkingDays.length > 0 || i.nonworkingHours.length > 0) ? i._getTaskWorkingDateEnd(e, Math.max(s, a)) : new Date(e.dateStart.getTime() + Math.max(s, a)), e.dateEnd.getTime() > t.getTime() && (e.dateEnd = t) } "task" === e.type && !e.dateEnd && t && (e.dateEnd = new Date(t.dateEnd)), e.dateStart = i._minMaxDateValidator(e.dateStart), e.dateEnd = i._minMaxDateValidator(e.dateEnd), "milestone" === e.type && (e.dateStart = i._validateDate(e, "dateStart"), e.dateEnd = i._validateDate(e, "dateEnd"), e.dateStart = e.dateEnd = new Date(Math.max(e.dateStart ? e.dateStart.getTime() : 0, e.dateEnd ? e.dateEnd.getTime() : 0))), (e.dateStart || e.dateEnd || "project" !== e.type || e.synchronized) && ("milestone" !== e.type && e.dateStart && (e.dateEnd && e.dateStart.getTime() > e.dateEnd.getTime() || !e.dateEnd) && (e.dateEnd = new Date(e.dateStart.getTime() + 36e5 * ("day" === i.view ? 1 : 24))), e.dateStart && e.dateEnd && (e.duration = i._convertDuration(i.nonworkingDays.length > 0 || i.nonworkingHours.length > 0 ? i._getWorkingTime(e.dateStart, e.dateEnd) : e.dateEnd.getTime() - e.dateStart.getTime(), !0))) } _validateTaskPlannedDates(e) { const t = this; if (!e) return; const i = e.type, n = e.planned; if ("milestone" === i || !n) return; const a = t._validateDate(n, "dateStart"), s = t._validateDate(n, "dateEnd"); a && s && (n.duration = t._convertDuration(t.nonworkingDays.length > 0 || t.nonworkingHours.length > 0 ? t._getWorkingTime(a, s) : s.getTime() - a.getTime(), !0)) } _synchronizeProjectDates(e, t) { const i = this; if (e) { void 0 === t && (t = i._getProjectTasks(e)); for (let a = 0, s = t.length; a < s; a += 1) { const s = t[a]; e.synchronized && (s.dateStart && (e.dateStart = n(s, "dateStart", "min")), s.dateEnd && (e.dateEnd = n(s, "dateEnd", "max")), s.minDateStart && (e.minDateStart = n(s, "minDateStart", "max")), s.maxDateStart && (e.maxDateStart = n(s, "maxDateStart", "min")), s.minDateEnd && (e.minDateEnd = n(s, "minDateEnd", "max")), s.maxDateEnd && (e.maxDateEnd = n(s, "maxDateEnd", "min")), e.dateStart && e.dateEnd && (e.duration = i._convertDuration(i.nonworkingDays.length > 0 || i.nonworkingHours.length > 0 ? i._getWorkingTime(e.dateStart, e.dateEnd) : e.dateEnd.getTime() - e.dateStart.getTime(), !0))) } e.$ && i._synchronizeProjectDates(e.$.project, t) } function n(t, i, n) { const a = e[i]; let s = t[i]; return void 0 === a ? new Date(s) : s instanceof Date ? new Date(Math[n](a.getTime(), s.getTime())) : void 0 } } _synchronizeProjectVisibility(e, t) { const i = this; e && e.hidden && !t.hidden && (e.hidden = t.hidden, e.$ && i._synchronizeProjectVisibility(e.$.project, e)) } _mouseWheelHandler(e) { const t = this, i = (t.shadowRoot || t).querySelector(".jqx-task-popup-window"); if (i && i.modal && i.opened) return void e.stopPropagation(); if (t.disabled || !t.computedHorizontalScrollBarVisibility && !t.computedVerticalScrollBarVisibility) return; if (e.shiftKey) return void t._handleHorizontalScroll(e); const n = t.$.resourceSplitterItem; t.$.mainSplitter.contains(n) && n.contains(e.target) ? t._handleVerticalScroll(e, !0) : t.$.taskSplitterItem.contains(e.target) && t._handleVerticalScroll(e) } _handleVerticalScroll(e, t) { const i = this; let n, a, s, r; if (t) { if (n = i.$.resourceVerticalScrollBar, n.classList.contains("jqx-hidden") || n.disabled) return !0; a = n.value, s = n.max, r = i._resourceScrollView } else { if (!i.computedVerticalScrollBarVisibility || i.$.verticalScrollBar.disabled) return !0; a = i.scrollTop, s = i.scrollHeight, r = i } if (0 === a && e.deltaY < 0 || a === s && e.deltaY > 0) return void e.stopPropagation(); const o = i.$[t ? "resourceTable" : "taskTable"]; if (e.stopPropagation(), e.preventDefault(), a += i._getScrollCoefficient(e, i.offsetHeight), r) { const e = o.$.virtualizationContainer; e.scrollHeight !== r.scrollHeight && (e.scrollHeight = r.scrollHeight), r.scrollTo(a, void 0) } o.scrollTop = a, i._hoveredItem && i._handleTableItemHover() } _handleHorizontalScroll(e) { const t = this; if (!t.computedHorizontalScrollBarVisibility) return !0; const i = t.scrollLeft; (0 === i && e.deltaX < 0 || i === t.scrollHeight && e.deltaX > 0) && e.stopPropagation(), e.stopPropagation(), e.preventDefault(), t.scrollWidth > 0 && t.scrollTo(void 0, t.scrollLeft + t._getScrollCoefficient(e, t.offsetWidth)) } _handleHeaderTemplate(e = "task") { const t = this; if (!("content" in document.createElement("template"))) return void t.error(t.localize("htmlTemplateNotSuported", { elementType: t.nodeName.toLowerCase() })); const i = t.$[`${e}SplitterItemHeader`], n = t.$[`${e}SplitterItem`], a = "task" === e ? "headerTemplate" : "resourcePanelHeaderTemplate"; let s = t[a]; if (n.removeAttribute("show-header"), i.innerHTML = "", !s) return; if ("function" == typeof s) return s(i, {}), void (i.innerHTML ? n.setAttribute("show-header", "") : n.removeAttribute("show-header")); if ("string" == typeof s && (s = document.getElementById(s)), null === s || !("content" in s)) return void t.error(t.localize("invalidTemplate", { elementType: t.nodeName.toLowerCase(), property: a })); let r = document.importNode(s.content, !0); if (n.setAttribute("show-header", ""), t.shadowRoot) return i.innerHTML = "<slot></slot>", void t.appendChild(r); i.appendChild(r) } _handleCollapseExpandMethods(e, t) { const i = this, n = i._tasks; if (null == e || !n || !n.length) return; const a = i._getValidItemAndIndex(e); if (!a || !a.item) return void i.error(i.localize("incorrectArgument", { elementType: i.nodeName.toLowerCase(), methodName: "collapse", argumentName: "task" })); let s = a.item; "project" !== s.type && (s = s.$.project), s && (s.hidden ? s.expanded = "expand" === t : i.$.taskTable["expand" === t ? "expandRow" : "collapseRow"](s.$.id)) } _getValidItemAndIndex(e, t = "task") { const i = this, n = "task" === t ? i._tasks : i._resources; let a; if (null == e || !n || !n.length) return {}; if ("string" == typeof e || "number" == typeof e) { const t = e.toString(); let i, s; for (let a = 0, r = n.length; a < r; a += 1) { const r = n[a]; if (!i) { const n = r.id; if (null != n && n.toString && n.toString() === t) { i = r, e = a; break } } r.$.id === t && (s = r, e = a) } a = i || s } else "object" == typeof e && (a = n[i._getItemIndex(e, t)], e = n.indexOf(a)); return { item: a, index: e } } _horizontalScrollbarHandler(e) { const t = this, i = t._getScrollLeft(e.detail.value); e.stopPropagation && e.stopPropagation(), t.$.timelineHeader.scrollLeft = t.$.taskTimelineContainer.scrollLeft = i, t.$.mainSplitter.contains(t.$.resourceTimelineHeader) && (t.$.resourceTimelineHeader.scrollLeft = t.$.resourceTimelineContent.scrollLeft = i), t._recycle(e), e.context.min !== e.context.value ? e.context.max === e.context.value && (t._handleInfiniteTimeline(), t.$.fireEvent("scrollRightReached")) : t.$.fireEvent("scrollLeftReached") } _verticalScrollbarHandler(e) { const t = this, i = e.target, n = Math.round(e.detail.value); e.stopPropagation && e.stopPropagation(), t._refreshing || (i && i === t.$.resourceVerticalScrollBar ? t.$.resourceTable.scrollTop = t.$.resourceTimelineContent.scrollTop = n : (t.$.taskTimelineContainer.scrollTop = n, t.$.taskTable.scrollTop = n), t._recycle(e), e.context.max !== e.context.value ? e.context.min === e.context.value && t.$.fireEvent("scrollTopReached") : t.$.fireEvent("scrollBottomReached")) } _handleInfiniteTimeline() { const e = this, t = e._timelineCells; if (!e.infiniteTimeline || !t || !t.length) return; const i = e.infiniteTimelineStep, n = t[t.length - 1].date; switch (e.view) { case "quarter": case "year": n.setMonth(n.getMonth() + i); break; case "month": n.setDate(n.getDate() + 7 * i); break; case "week": n.setDate(n.getDate() + i); break; case "day": n.setHours(n.getHours() + i) }e.set("dateEnd", n), e._createTimelineCells(), e._recycleTimelineTasks(!0), e.$.mainSplitter.contains(e.$.resourceSplitter) && e._refreshResourceTimeline(), e._refresh() } _nonworkingDayValidator(e, t) { return this._nonworkingDateTimeValidator(e, t) } _nonworkingTimeValidator(e, t) { return this._nonworkingDateTimeValidator(e, t, !0) } _nonworkingDateTimeValidator(e, t, i) { const n = this, [a, s, r] = i ? [0, 23, 24] : [0, 6, 7]; let o = []; function l(e) { let t = Math.max(a, Math.min(s, parseInt(e[0]))), i = Math.max(a, Math.min(s, parseInt(e[1]))); if (!isNaN(t) && !isNaN(i)) { for (; t !== i;)o.push(t), t = t === s ? a : ++t; o.push(t) } return o } for (let e = 0; e < t.length; e++) { const i = t[e]; "number" != typeof i || isNaN(i) ? "string" == typeof i ? o = l(i.split("-").map((e => parseInt(e)))) : Array.isArray(i) && (o = l(i)) : o.push(Math.max(a, Math.min(s, parseInt(i)))) } return o.length === r && (o.pop(), n.warn(n.localize("invalidNonworkingRange", { elementType: n.nodeName.toLowerCase(), property: i ? "nonworkingHours" : "nonworkingDays" }))), o } });
|
|
102
|
+
|
|
103
|
+
/***/
|
|
104
|
+
}),
|
|
105
|
+
|
|
106
|
+
/***/ 3176:
|
|
107
|
+
/***/ (() => {
|
|
108
|
+
|
|
109
|
+
JQX("jqx-grid-panel", class extends JQX.BaseElement { static get properties() { return { closeButtonPosition: { value: "left", allowedValues: ["left", "right"], type: "string" }, dataSource: { value: [], type: "array", reflectToAttribute: !1 }, messages: { value: { en: { apply: "Ok", booleanFirst: "☐", booleanLast: "☑", cancel: "Cancel", dateFirst: "1", dateLast: "9", from: "from", numberFirst: "1", numberLast: "9", stringFirst: "A", stringLast: "Z", thenBy: "then by" } }, type: "object", extend: !0 } } } static get listeners() { return { change: "_changeHandler", click: "_clickHandler", keydown: "_keydownHandler", "sortable.dragEnd": "_sortableDragEndHandler" } } static get requires() { return { "JQX.Input": "jqx.input.js", "JQX.Sortable": "jqx.sortable.js" } } static get styleUrls() { return ["jqx.gridpanel.css"] } template() { return '<div id="container" role="presentation">\n <jqx-sortable id="sortable" disable-mode="manual" animation="[[animation]]" disabled="[[readonly]]" right-to-left="[[rightToLeft]]"\n drag-mode="handle" handle-position="right" handle-visibility="visible" theme="[[theme]]">\n </jqx-sortable>\n <div id="footer" class="jqx-grid-panel-container-footer" role="presentation">\n <jqx-input id="inputNotSorted" right-to-left="[[rightToLeft]]" animation="[[animation]]" readonly theme="[[theme]]"></jqx-input>\n <div id="buttonsContainer" class="jqx-grid-panel-buttons-container jqx-unselectable" role="presentation">\n <span class="jqx-grid-panel-cancel-button" role="button"></span>\n <span class="jqx-grid-panel-apply-button primary" role="button"></span>\n </div>\n </div>\n </div>' } ready() { super.ready() } render() { const e = this; e.setAttribute("role", "dialog"), "right" === e.closeButtonPosition && (e.$.sortable.handlePosition = "left"), e._localize(), e._createSources(), super.render() } propertyChangedHandler(e, t, a) { super.propertyChangedHandler(e, t, a); const n = this; switch (e) { case "animation": case "theme": Array.from(n.$.sortable.getElementsByTagName("jqx-input")).forEach((t => t[e] = a)); break; case "disabled": case "unfocusable": n._setFocusable(); break; case "closeButtonPosition": "right" === n.closeButtonPosition ? n.$.sortable.handlePosition = "left" : n.$.sortable.handlePosition = "right"; break; case "dataSource": n.$.sortable.$.container.innerHTML = "", n._createSources(); break; case "locale": case "messages": { const e = n.$.sortable._items; n._localize(), e.length && (e[0].children[1].innerHTML = n.localize("firstBy"), e.forEach((function (e, t) { 0 !== t && (e.children[1].innerHTML = n.localize("thenBy")); const a = n._HTMLToSourceMap.get(e), i = n._ascDescTemplates[a.dataType] || n._ascDescTemplates.string; e.children[3].innerHTML = n.localize("from"), e.children[4].firstElementChild.innerHTML = i[0], e.children[4].children[1].innerHTML = i[1] }))); break } case "maxLevel": if (null != a) for (; n.$.sortable._items.length > 0 && n.$.sortable._items.length > a;)n._interactionHandler(n.$.sortable._items[n.$.sortable._items.length - 1].firstElementChild); n._disableItemAddition(); break; case "rightToLeft": n.$.inputNotSorted.rightToLeft = a, n.$.inputNotSorted.dropDownButtonPosition = a ? "left" : "right", n.$.sortable._items.forEach((e => { const t = e.querySelector("jqx-input"); t.rightToLeft = a, t.dropDownButtonPosition = a ? "left" : "right" })) } } _changeHandler(e) { const t = this, a = t.shadowRoot || t.isInShadowDOM ? e.composedPath()[0] : e.target; if (t.$.inputNotSorted.contains(a)) { const e = t.$.inputNotSorted.value, a = t._labelToSourceMap.get(e); return t._createSortItem(a, t.$.sortable._items.length), t.$.sortable.updateItems(), t._visibleLabels.push(e), t._updateHiddenSource(), t._disableItemAddition(), void (t.$.inputNotSorted.value = "") } const n = a.closest("jqx-input"); if (!n) return; const i = n.parentElement.parentElement, l = i.children[4].firstElementChild, o = i.children[4].children[1], r = n.value, s = t._HTMLToSourceMap.get(i).label, d = t._labelToSourceMap.get(r), c = t._ascDescTemplates[d.dataType] || t._ascDescTemplates.string; t._HTMLToSourceMap.set(i, d), t._visibleLabels.splice(t._visibleLabels.indexOf(s), 1, r), t._updateHiddenSource(), l.innerHTML = c[0], o.innerHTML = c[1], d.sortDirection && -1 === d.sortDirection.indexOf("asc") ? (o.classList.add("selected"), l.classList.remove("selected")) : (l.classList.add("selected"), o.classList.remove("selected")) } _updateHiddenSource() { const e = this; e._hiddenSource = e.dataSource.map((e => ({ label: e.label, value: e.dataField, icon: e.icon }))).filter((t => -1 === e._visibleLabels.indexOf(t.label))); const t = e.$.inputNotSorted.context; e.$.inputNotSorted.context = e.$.inputNotSorted, e.$.inputNotSorted.dataSource = e._hiddenSource, e.$.sortable._items.forEach((t => { const a = t.getElementsByTagName("jqx-input")[0], n = a.context; a.context = a, a.dataSource = e._hiddenSource, a.context = n })), e.$.inputNotSorted.context = t, e._disableItemAddition(), e.$.fireEvent("dataSourceChange") } _clickHandler(e) { const t = this; t._interactionHandler(t.shadowRoot || t.isInShadowDOM ? e.composedPath()[0] : e.target, e) } _interactionHandler(e, t) { const a = this; if (a.disabled || a.readonly) return !0; const n = e.closest(".jqx-grid-panel-item"); if (n) { if (e === n.firstElementChild) { const e = a._HTMLToSourceMap.get(n).label; a.$.sortable.$.container.removeChild(n), a.$.sortable.updateItems(), a._visibleLabels.splice(a._visibleLabels.indexOf(e), 1), a._updateHiddenSource(), a._disableItemAddition(), a.$.sortable._items.length && (a.$.sortable._items[0].children[1].innerHTML = a.localize("firstBy")), a.$.fireEvent("remove") } else if (n.children[4].contains(e)) { const i = n.children[4].firstElementChild, l = n.children[4].children[1]; "click" === t.type ? e.classList.contains("selected") || (e === i ? (l.classList.remove("selected"), i.classList.add("selected"), a._HTMLToSourceMap.get(n).sortDirection = "ascending") : e === l && (i.classList.remove("selected"), l.classList.add("selected"), a._HTMLToSourceMap.get(n).sortDirection = "descending")) : (i.classList.toggle("selected"), l.classList.toggle("selected"), a._HTMLToSourceMap.get(n).sortDirection = i.classList.contains("selected") ? "ascending" : "descending") } return !0 } if (e === a.$.buttonsContainer.firstElementChild) return a.$.fireEvent("cancel"), !0; if (e === a.$.buttonsContainer.children[1]) { const e = [], t = { dataFields: [], dataTypes: [], orderBy: [] }, n = { value: e }; return a.$.sortable._items.forEach((n => { const i = a._HTMLToSourceMap.get(n); e.push({ dataField: i.dataField, sortDirection: i.sortDirection }), t.dataFields.push(i.dataField), t.dataTypes.push(i.dataType), t.orderBy.push(i.sortDirection) })), a instanceof JQX.SortPanel && a.$.maintainSortContainer && (t.maintainSort = a.$.maintainSortContainer.firstElementChild.hasAttribute("active")), (a instanceof JQX.SortPanel || a instanceof JQX.GroupPanel) && (n.sortByInfo = t), a.$.fireEvent("apply", n), !0 } } _keydownHandler(e) { const t = this, a = e.key; " " !== a && "Enter" !== a || (e.preventDefault(), t._interactionHandler((t.shadowRoot || t.getRootNode()).activeElement, e)) } _sortableDragEndHandler(e) { const t = this, a = e.detail.oldIndex, n = e.detail.newIndex, i = Math.max(a, n), l = t.$.sortable._items; 0 === (a && n) && (l[0].children[1].innerHTML = t.localize("firstBy"), l[1].children[1].innerHTML = t.localize("thenBy"), i > 1 && (l[i].children[1].innerHTML = t.localize("thenBy"))) } _localize() { const e = this; e.$.inputNotSorted.placeholder = e.localize("pickAnother"), e.$.buttonsContainer.firstElementChild.innerHTML = e.localize("cancel"), e.$.buttonsContainer.children[1].innerHTML = e.localize("apply"), e._ascDescTemplates = { boolean: [e.localize("booleanFirst") + " → " + e.localize("booleanLast"), e.localize("booleanLast") + " → " + e.localize("booleanFirst")], date: [e.localize("dateFirst") + " → " + e.localize("dateLast"), e.localize("dateLast") + " → " + e.localize("dateFirst")], number: [e.localize("numberFirst") + " → " + e.localize("numberLast"), e.localize("numberLast") + " → " + e.localize("numberFirst")], string: [e.localize("stringFirst") + " → " + e.localize("stringLast"), e.localize("stringLast") + " → " + e.localize("stringFirst")] } } _createSources() { const e = this, t = (e instanceof JQX.SortPanel ? "sort" : "group") + "Index", a = [], n = []; if (e._HTMLToSourceMap = new Map, e._labelToSourceMap = new Map, e.dataSource.forEach((n => { e._labelToSourceMap.set(n.label, n), -1 !== n[t] && void 0 !== n[t] && a.push(n) })), a.sort(((e, a) => e[t] - a[t])), void 0 !== e.maxLevel && null !== e.maxLevel) for (; a.length > 0 && a.length > e.maxLevel;)a.pop(); e.$.inputNotSorted.dropDownButtonPosition = e.rightToLeft ? "left" : "right", e.$.inputNotSorted.dataSource && e.$.inputNotSorted.dataSource.length < 10 && e.$.inputNotSorted.dataSource.length > 0 ? e.$.inputNotSorted.dropDownHeight = "auto" : e.$.inputNotSorted.dropDownHeight = 250, a.forEach((e => n.push(e.label))), e._visibleLabels = n, e._updateHiddenSource(), a.forEach(((t, a) => { e._createSortItem(t, a) })), e.$.sortable.updateItems(), e._disableItemAddition(), e._setFocusable() } _createSortItem(e, t) { const a = this, n = a.disabled || a.unfocusable ? -1 : 0, i = document.createElement("div"), l = a._ascDescTemplates[e.dataType] || a._ascDescTemplates.string; i.className = "jqx-grid-panel-item", i.innerHTML = `<div class="jqx-grid-panel-item-close-button" tabindex="${n}" role="button" aria-label="Close"></div>\n<div class="jqx-grid-panel-label-by jqx-unselectable" role="presentation">${a.localize(t > 0 ? "thenBy" : "firstBy")}</div>\n<div class="jqx-grid-panel-field-container" role="presentation"><jqx-input class="jqx-grid-panel-field-selection" value="${e.label}" animation="${a.animation}" readonly theme="${a.theme}" aria-label="Field name"></jqx-input></div>\n<div class="jqx-grid-panel-from jqx-unselectable" role="presentation">${a.localize("from")}</div >\n<div class="jqx-grid-panel-direction jqx-unselectable" tabindex="${n}" role="presentation">\n <div class="jqx-grid-panel-asc" role="button" aria-label="Ascending">${l[0]}</div >\n <div class="jqx-grid-panel-desc" role="button" aria-label="Descending">${l[1]}</div>\n</div>\n`; const o = i.querySelector("jqx-input"); o.dataSource = a._hiddenSource, o.rightToLeft = a.rightToLeft, o.dropDownButtonPosition = a.rightToLeft ? "left" : "right", o.dataSource && o.dataSource.length < 10 ? o.dropDownHeight = "auto" : o.dropDownHeight = 250, a.$.sortable.$.container.appendChild(i), o.tabIndex = n, e.sortDirection && -1 === e.sortDirection.indexOf("asc") ? i.children[4].children[1].classList.add("selected") : (e.sortDirection = "ascending", i.children[4].firstElementChild.classList.add("selected")), a._HTMLToSourceMap.set(i, e) } _disableItemAddition() { const e = this, t = e.maxLevel, a = 0 === e._hiddenSource.length || null != t && Math.max(0, t) === e.$.sortable._items.length; e.$.inputNotSorted.disabled = a, a && e.$.inputNotSorted.removeAttribute("focus") } _setFocusable() { const e = this, t = e.disabled || e.unfocusable ? -1 : 0, a = Array.from(e.getElementsByClassName("jqx-grid-panel-item-close-button")), n = Array.from(e.getElementsByClassName("jqx-grid-panel-direction")), i = Array.from(e.getElementsByTagName("input")), l = a.concat(n).concat(i); e.$.buttonsContainer.firstElementChild.tabIndex = t, e.$.buttonsContainer.children[1].tabIndex = t, l.forEach((e => e.tabIndex = t)) } }), JQX("jqx-sort-panel", class extends JQX.GridPanel { static get properties() { return { messages: { value: { en: { firstBy: "Sort by", noSorting: "No sorting applied", pickAnother: "Pick another field to sort by", maintainSort: "Maintain Sort", applyOnce: "Apply once" } }, type: "object", extend: !0 } } } template() { return '<div id="container" role="presentation">\n <jqx-sortable disable-mode="manual" right-to-left="[[rightToLeft]]" id="sortable" animation="[[animation]]" disabled="[[readonly]]" drag-mode="handle" handle-position="right" handle-visibility="visible" theme="[[theme]]"></jqx-sortable>\n <div id="footer" class="jqx-grid-panel-container-footer" role="presentation">\n <div>\n <jqx-input right-to-left="[[rightToLeft]]" id="inputNotSorted" animation="[[animation]]" readonly theme="[[theme]]"></jqx-input>\n <div id="maintainSortContainer" class="jqx-hidden jqx-grid-panel-buttons-container jqx-grid-panel-maintain-sort jqx-unselectable" role="presentation">\n <span class="jqx-grid-panel-maintain-sort-button" role="button"></span>\n </div>\n \n </div>\n <div id="buttonsContainer" class="jqx-grid-panel-buttons-container jqx-unselectable" role="presentation">\n <span class="jqx-grid-panel-cancel-button" role="button"></span>\n <span class="jqx-grid-panel-apply-button primary" role="button"></span>\n </div>\n </div>\n </div>' } _changeApplyButtonText(e) { const t = this, a = t.$.maintainSortContainer.firstElementChild, n = t.querySelector(".jqx-grid-panel-apply-button"); e ? a.hasAttribute("active") ? (a.removeAttribute("active"), n && (n.innerHTML = t.localize("applyOnce"))) : (a.setAttribute("active", ""), n && (n.innerHTML = t.localize("apply"))) : a.hasAttribute("active") ? n.innerHTML = t.localize("apply") : n.innerHTML = t.localize("applyOnce") } _interactionHandler(e, t) { const a = this; super._interactionHandler(e, t) || e === a.$.maintainSortContainer.firstElementChild && a._changeApplyButtonText(!0) } static get styleUrls() { return ["jqx.textbox.css"] } _localize() { super._localize(); const e = this; e.$.sortable.$.container.setAttribute("no-sorting", e.localize("noSorting")), e.$.maintainSortContainer.firstElementChild.innerHTML = e.localize("maintainSort"), e._changeApplyButtonText() } }), JQX("jqx-group-panel", class extends JQX.GridPanel { static get properties() { return { maxLevel: { value: 8, type: "number?" }, messages: { value: { en: { collapseAll: "Collapse all", expandAll: "Expand all", firstBy: "Group by", noGrouping: "No grouping", pickAnother: "Pick another field to group by" } }, type: "object", extend: !0 } } } template() { return '<div id="container" role="presentation">\n <jqx-sortable disable-mode="manual" right-to-left="[[rightToLeft]]" id="sortable" animation="[[animation]]" disabled="[[readonly]]" drag-mode="handle" handle-position="right" handle-visibility="visible" theme="[[theme]]"></jqx-sortable>\n <div id="expandCollapseContainer" class="jqx-grid-panel-buttons-container jqx-grid-panel-expand-collapse jqx-unselectable" role="presentation">\n <span class="jqx-group-panel-collapse-button" role="button"></span>\n <span class="jqx-group-panel-expand-button" role="button"></span>\n </div>\n <div id="footer" class="jqx-grid-panel-container-footer" role="presentation">\n <jqx-input right-to-left="[[rightToLeft]]" id="inputNotSorted" animation="[[animation]]" readonly theme="[[theme]]"></jqx-input>\n <div id="buttonsContainer" class="jqx-grid-panel-buttons-container jqx-unselectable" role="presentation">\n <span class="jqx-grid-panel-cancel-button" role="button"></span>\n <span class="jqx-grid-panel-apply-button primary" role="button"></span>\n </div>\n </div>\n </div>' } _interactionHandler(e, t) { const a = this; super._interactionHandler(e, t) || (e === a.$.expandCollapseContainer.firstElementChild ? a.$.fireEvent("collapseAll") : e === a.$.expandCollapseContainer.children[1] && a.$.fireEvent("expandAll")) } _localize() { super._localize(); const e = this; e.$.expandCollapseContainer.firstElementChild.innerHTML = e.localize("collapseAll"), e.$.expandCollapseContainer.children[1].innerHTML = e.localize("expandAll"), e.$.sortable.$.container.setAttribute("no-grouping", e.localize("noGrouping")) } _setFocusable() { super._setFocusable(); const e = this, t = e.disabled || e.unfocusable ? -1 : 0; e.$.expandCollapseContainer.firstElementChild.tabIndex = t, e.$.expandCollapseContainer.children[1].tabIndex = t } }), JQX("jqx-multi-column-filter-panel", class extends JQX.BaseElement { static get properties() { return { closeButtonPosition: { value: "left", allowedValues: ["left", "right"], type: "string" }, dataSource: { value: [], type: "array", reflectToAttribute: !1 }, editorCallback: { value: null, type: "function?", reflectToAttribute: !1 }, editorPlaceholder: { value: "Value", type: "string" }, messages: { value: { en: { addFilter: "+ Add filter", and: "And", apply: "Ok", cancel: "Cancel", CONTAINS: "contains", CONTAINS_CASE_SENSITIVE: "contains (case sensitive)", DOES_NOT_CONTAIN: "does not contain", DOES_NOT_CONTAIN_CASE_SENSITIVE: "does not contain (case sensitive)", EMPTY: "empty", ENDS_WITH: "ends with", ENDS_WITH_CASE_SENSITIVE: "ends with (case sensitive)", EQUAL: "equal", EQUAL_CASE_SENSITIVE: "equal (case sensitive)", GREATER_THAN: "greater than", GREATER_THAN_OR_EQUAL: "greater than or equal", LESS_THAN: "less than", LESS_THAN_OR_EQUAL: "less than or equal", noFilters: "No filters applied", NOT_EMPTY: "not empty", NOT_EQUAL: "not equal", NOT_NULL: "not null", NULL: "null", or: "Or", STARTS_WITH: "starts with", STARTS_WITH_CASE_SENSITIVE: "starts with (case sensitive)", where: "Where" } }, type: "object", extend: !0 }, operator: { value: "and", allowedValues: ["and", "or"], type: "string" }, value: { value: [], type: "array" } } } static get listeners() { return { change: "_changeHandler", click: "_interactionHandler", keydown: "_interactionHandler" } } static get requires() { return { "JQX.Button": "jqx.button.js", "JQX.CheckBox": "jqx.checkbox.js", "JQX.DateTimePicker": "jqx.datetimepicker.js", "JQX.FilterGroup": "jqx.filter.js", "JQX.Input": "jqx.input.js", "JQX.NumericTextBox": "jqx.numerictextbox.js" } } static get styleUrls() { return ["jqx.gridpanel.css"] } template() { return '<div id="container" role="presentation">\n <div id="itemsContainer" class="jqx-filter-panel-items-container jqx-unselectable"></div>\n <div id="footer" class="jqx-grid-panel-container-footer" role="presentation">\n <div id="addFilterButton" class="jqx-filter-panel-add-filter-button jqx-unselectable" role="button"></div>\n <div id="buttonsContainer" class="jqx-grid-panel-buttons-container jqx-unselectable" role="presentation">\n <span class="jqx-grid-panel-cancel-button" role="button"></span>\n <span class="jqx-grid-panel-apply-button primary" role="button"></span>\n </div>\n </div>\n </div>' } ready() { super.ready() } render() { const e = this; e.setAttribute("role", "dialog"), e._setFocusable(), e._localize(), e._applyValue(), super.render() } propertyChangedHandler(e, t, a) { super.propertyChangedHandler(e, t, a); const n = this; switch (e) { case "animation": case "theme": case "rightToLeft": Array.from(n.$.itemsContainer.querySelectorAll("jqx-date-time-picker, jqx-numeric-text-box, jqx-check-box, jqx-input")).forEach((t => { t[e] = a, "jqx-input" === t.tagName.toLowerCase() && "rightToLeft" === e && "none" !== t.dropDownButtonPosition && (t.dropDownButtonPosition = a ? "left" : "right") })); break; case "disabled": case "unfocusable": n._setFocusable(!0); break; case "dataSource": case "value": n._applyValue(); break; case "editorPlaceholder": Array.from(n.$.itemsContainer.getElementsByClassName("editor")).forEach((e => e.placeholder = a)); break; case "locale": case "messages": n._localize(!0); break; case "operator": n._setOperator() } } _setOperator() { const e = this, t = e.localize(e.operator); for (let a = 2; a < e._items.length; a++)e._items[a].children[1].innerHTML = t } _changeHandler(e) { const t = this, a = t.shadowRoot || t.isInShadowDOM ? e.composedPath()[0] : e.target; if (a instanceof JQX.Input == 0) return; const n = a.parentElement, i = n.children; if (a === i[1]) t.operator = a.$.input.dataValue, t._setOperator(); else if (a === i[2]) { let a, l, o = t.dataSource.find((t => t.dataField === e.detail.oldValue)).dataType, r = t.dataSource.find((t => t.dataField === e.detail.oldValue)), s = t.dataSource.find((t => t.dataField === e.detail.value)), d = s.dataType, c = []; if (s.options && (d = "enum", c = s.options.map((e => { const t = e.color || "var(--jqx-primary)"; return e.prefix = '<span style="background: ' + t + '; width: 14px; height: 14px; display: inline-block; border-radius: 50%; margin-left:-4px; margin-right: 8px; top: 2px; position: relative;"></span>', "" === e.label && (e.label = " "), e }))), r && r.options && (o = "enum"), "enum" !== d && d === o) return void (t.editorCallback && t.editorCallback(i[4], s)); let u = i[3].value; switch (d) { case "date": a = t._numberAndDateConditions, l = document.createElement("jqx-date-time-picker"), l.calendarButton = !0, l.dropDownAppendTo = "body", l.dropDownDisplayMode = "auto", l.formatString = "M/d/yy H:mm", u = ""; break; case "number": a = t._numberAndDateConditions, l = document.createElement("jqx-numeric-text-box"), u = ""; break; case "boolean": a = t._booleanConditions, l = document.createElement("jqx-check-box"), u = ""; break; case "enum": a = t._enumConditions, l = document.createElement("jqx-input"), l.dataSource = c.length ? c : s.options, l.readonly = !0, l.dropDownButtonPosition = "right", u = a[0]; break; default: a = t._stringConditions, u = t._stringConditions.find((e => "CONTAINS" === e.value)), l = document.createElement("jqx-input") }a.forEach((e => { delete e.selected })), l.rightToLeft = t.rightToLeft, l.animation = t.animation, l.theme = t.theme, l.unfocusable = t.disabled || t.unfocusable, l.classList.add("underlined"), l.dataSource && l.dataSource.length < 10 ? l.dropDownHeight = "auto" : l.dropDownHeight = 250, "boolean" !== d && (l.placeholder = t.editorPlaceholder), t.editorCallback && t.editorCallback(l, s), i[4].remove(), n.appendChild(l), "" === u || a.find((e => e.label === u)) || (u.value ? (i[3].value = u.label, i[3].selectedValue = u.value) : (i[3].value = "", i[3].selectedValue = "")), i[3].dataSource = a, a.length >= 10 ? i[3].dropDownHeight = 250 : i[3].dropDownHeight = "auto", n.dataType = d } else if (a === i[3]) { const e = i[4], t = a.$.input.dataValue; -1 !== t.indexOf("NULL") || -1 !== t.indexOf("EMPTY") ? (e.value = "", e.checked = !1, e.classList.add("jqx-visibility-hidden")) : e.classList.remove("jqx-visibility-hidden"), a.condition = t } } _interactionHandler(e) { const t = this; if (t.disabled || t.readonly) return; if ("keydown" === e.type) { if ("Enter" !== e.key) return; e.preventDefault() } const a = t.shadowRoot || t.isInShadowDOM ? e.composedPath()[0] : e.target, n = a.closest(".jqx-grid-panel-item"); if (n) { if (a === n.firstElementChild) { const e = t._items.indexOf(n); let a; t._items.splice(e, 1), n.remove(), t._items.length > 0 && e < 2 && (0 === e && (t._items[0].children[1].remove(), a = document.createElement("div"), a.innerHTML = t.localize("where"), t._items[0].insertBefore(a, t._items[0].children[1])), t._items.length > 1 && (t._items[1].children[1].remove(), a = document.createElement("jqx-input"), a.className = "underlined", a.dataSource = [{ value: "and", label: t.localize("and") }, { value: "or", label: t.localize("or") }], a.dropDownButtonPosition = t.rightToLeft ? "left" : "right", a.readonly = !0, a.value = t.localize(t.operator), a.animation = t.animation, a.theme = t.theme, a.rightToLeft = t.rightToLeft, a.unfocusable = t.disabled || t.unfocusable, t._items[1].insertBefore(a, t._items[1].children[1]))) } } else if (a === t.$.addFilterButton && t.dataSource.length > 0) t.$.itemsContainer.appendChild(t._createItem(t.dataSource[0], "", "", t._items.length)); else if (a !== t.$.buttonsContainer.firstElementChild) { if (a === t.$.buttonsContainer.children[1]) { let e = t._stringConditions.concat(t._numberAndDateConditions), a = t.operator, n = [], i = {}, l = []; t._customConditions && (e = e.concat(t._customConditions)), t._items.forEach((l => { const o = t.dataSource.find((e => e.label === l.children[2].value)), r = []; let s = l.children[3].value; if ("" === s) return; let d = o.dataType; if (s = e.find((e => e.label === s)).value, r.push(o.dataField, s), -1 === s.indexOf("NULL") && -1 === s.indexOf("EMPTY")) if ("boolean" === d) r.push(l.children[4].checked); else if ("date" === d) r.push(l.children[4].value.toDate()); else if ("enum" === d || o.options) { let e = l.children[4].$.input.dataValue; if (void 0 === e) { const t = o.options.find((e => e.label === l.children[4].value)); if (!t) return; e = t.value } d = "string", r.push(e) } else r.push(l.children[4].value); let c = i[r[0]]; void 0 === c && (c = new JQX.Utilities.FilterGroup, i[r[0]] = c); const u = c.createFilter(d, r[2], r[1]); c.addFilter(a, u), n.push(r) })); for (let e in i) l.push([e, i[e]]); t.value = n, t.$.fireEvent("apply", { filters: l, operator: a, value: n }) } } else t.$.fireEvent("cancel") } _applyValue() { const e = this, t = document.createDocumentFragment(); let a = 0; for (e._items = []; e.$.itemsContainer.firstElementChild;)e.$.itemsContainer.firstElementChild.remove(); 0 !== e.dataSource.length && (e.value.forEach((n => { if (!Array.isArray(n)) return; const i = n[0], l = e.dataSource.find((e => e.dataField === i)); if (!l) return; const o = e._createItem(l, n[1], n[2], a); t.appendChild(o), a++ })), e.$.itemsContainer.appendChild(t)) } _createItem(e, t, a, n) { const i = this, l = i.disabled || i.unfocusable ? -1 : 0, o = document.createElement("div"), r = document.createDocumentFragment(), s = document.createElement("div"), d = document.createElement("jqx-input"), c = document.createElement("jqx-input"); let u, p; if (s.className = "jqx-grid-panel-item-close-button", s.tabIndex = l, s.setAttribute("role", "button"), s.setAttribute("aria-label", "button"), r.appendChild(s), 0 === n ? (u = document.createElement("div"), u.innerHTML = i.localize("where"), u.setAttribute("role", "presentation")) : 1 === n ? (u = document.createElement("jqx-input"), u.className = "underlined", u.dataSource = [{ value: "and", label: i.localize("and") }, { value: "or", label: i.localize("or") }], u.dropDownButtonPosition = i.rightToLeft ? "left" : "right", u.readonly = !0, u.value = i.localize(i.operator), u.animation = i.animation, u.theme = i.theme, u.rightToLeft = i.rightToLeft, u.unfocusable = i.disabled || i.unfocusable, u.setAttribute("aria-label", "Operator")) : (u = document.createElement("div"), u.innerHTML = i.localize(i.operator), u.setAttribute("role", "presentation")), r.appendChild(u), d.className = "underlined", d.dataSource = i.dataSource.map((e => ({ value: e.dataField, label: e.label, icon: e.icon }))), d.dropDownButtonPosition = i.rightToLeft ? "left" : "right", d.readonly = !0, d.value = e.label, d.animation = i.animation, d.theme = i.theme, d.rightToLeft = i.rightToLeft, d.unfocusable = i.disabled || i.unfocusable, d.setAttribute("aria-label", "Field"), d.dataSource && d.dataSource.length < 10 ? d.dropDownHeight = "auto" : d.dropDownHeight = 250, r.appendChild(d), "boolean" === e.dataType) c.dataSource = JSON.parse(JSON.stringify(i._booleanConditions)), p = document.createElement("jqx-check-box"), p.checked = "boolean" == typeof a && a; else if ("date" === e.dataType) c.dataSource = i._numberAndDateConditions, p = document.createElement("jqx-date-time-picker"), p.dropDownDisplayMode = "auto", p.calendarButton = !0, p.dropDownAppendTo = "body", p.formatString = "M/d/yy H:mm", p.value = a; else if ("number" === e.dataType) c.dataSource = JSON.parse(JSON.stringify(i._numberAndDateConditions)), p = document.createElement("jqx-numeric-text-box"), p.value = "number" == typeof a || "string" == typeof a ? a : 0; else if ("enum" === e.dataType || e.options) { c.dataSource = JSON.parse(JSON.stringify(i._enumConditions)), p = document.createElement("jqx-input"); let t = []; e.options && (t = e.options.map((e => { const t = e.color || "var(--jqx-primary)"; return e.prefix = '<span style="background: ' + t + '; width: 14px; height: 14px; display: inline-block; border-radius: 50%; margin-left:-4px; margin-right: 8px; top: 2px; position: relative;"></span>', "" === e.label && (e.label = " "), e }))), p.dataSource = t.length ? t : e.options, p.readonly = !0, p.dropDownButtonPosition = "right"; const n = a ? e.options.find((e => e.value === a)) : null; p.value = n && a ? n.label : "" } else c.dataSource = JSON.parse(JSON.stringify(i._stringConditions)), p = document.createElement("jqx-input"), p.value = null != a ? a.toString() : "", t || (t = "CONTAINS"); return c.className = "underlined", c.dropDownButtonPosition = i.rightToLeft ? "left" : "right", c.readonly = !0, c.animation = i.animation, c.theme = i.theme, c.rightToLeft = i.rightToLeft, c.unfocusable = i.disabled || i.unfocusable, c.setAttribute("aria-label", "Condition"), c.classList.add("jqx-filter-panel-list"), c.dataSource.forEach((e => { delete e.selected })), c.dataSource.find((e => e.value === t)) ? (c.value = i.localize(t), c.selectedValue = t, c.condition = t) : (p.value = "", p.checked = !1), void 0 === t || -1 === t.indexOf("NULL") && -1 === t.indexOf("EMPTY") || (p.value = "", p.checked = !1, p.classList.add("jqx-visibility-hidden")), c.dataSource && c.dataSource.length < 10 ? c.dropDownHeight = "auto" : c.dropDownHeight = 250, p.animation = i.animation, p.classList.add("editor"), p.rightToLeft = i.rightToLeft, p.theme = i.theme, p.unfocusable = i.disabled || i.unfocusable, p.classList.add("underlined"), "boolean" !== e.dataType && (p.placeholder = i.editorPlaceholder), i.editorCallback && i.editorCallback(p, e), r.appendChild(c), r.appendChild(p), o.appendChild(r), o.className = "jqx-grid-panel-item", i._items.push(o), o.dataType = e.dataType, o } _localize(e) { const t = this; t.$.addFilterButton.innerHTML = t.localize("addFilter"), t.$.buttonsContainer.firstElementChild.innerHTML = t.localize("cancel"), t.$.buttonsContainer.children[1].innerHTML = t.localize("apply"), t.$.itemsContainer.setAttribute("no-filters", t.localize("noFilters")), t._stringConditions = [{ prefix: '<span class="jqx-icon jqx-icon-empty"></span>', value: "EMPTY", label: t.localize("EMPTY") }, { prefix: '<span class="jqx-icon jqx-icon-not-empty"></span>', value: "NOT_EMPTY", label: t.localize("NOT_EMPTY") }, { prefix: '<span class="jqx-icon jqx-icon-contains"></span>', value: "CONTAINS", label: t.localize("CONTAINS") }, { prefix: '<span class="jqx-icon jqx-icon-does-not-contain"></span>', value: "DOES_NOT_CONTAIN", label: t.localize("DOES_NOT_CONTAIN") }, { prefix: '<span class="jqx-icon jqx-icon-starts-with"></span>', value: "STARTS_WITH", label: t.localize("STARTS_WITH") }, { prefix: '<span class="jqx-icon jqx-icon-ends-with"></span>', value: "ENDS_WITH", label: t.localize("ENDS_WITH") }, { prefix: '<span class="jqx-icon jqx-icon-equal"></span>', value: "EQUAL", label: t.localize("EQUAL") }, { prefix: '<span class="jqx-icon jqx-icon-not-equal"></span>', value: "NOT_EQUAL", label: t.localize("NOT_EQUAL") }, { prefix: '<span class="jqx-icon jqx-icon-null"></span>', value: "NULL", label: t.localize("NULL") }, { prefix: '<span class="jqx-icon jqx-icon-not-null"></span>', value: "NOT_NULL", label: t.localize("NOT_NULL") }], t._enumConditions = [{ prefix: '<span class="jqx-icon jqx-icon-equal"></span>', value: "EQUAL", label: t.localize("EQUAL") }, { prefix: '<span class="jqx-icon jqx-icon-not-equal"></span>', value: "NOT_EQUAL", label: t.localize("NOT_EQUAL") }], t._numberAndDateConditions = [{ prefix: '<span class="jqx-icon jqx-icon-equal"></span>', value: "EQUAL", label: t.localize("EQUAL") }, { prefix: '<span class="jqx-icon jqx-icon-not-equal"></span>', value: "NOT_EQUAL", label: t.localize("NOT_EQUAL") }, { prefix: '<span class="jqx-icon jqx-icon-less-than"></span>', value: "LESS_THAN", label: t.localize("LESS_THAN") }, { prefix: '<span class="jqx-icon jqx-icon-less-than-equal"></span>', value: "LESS_THAN_OR_EQUAL", label: t.localize("LESS_THAN_OR_EQUAL") }, { prefix: '<span class="jqx-icon jqx-icon-greater-than"></span>', value: "GREATER_THAN", label: t.localize("GREATER_THAN") }, { prefix: '<span class="jqx-icon jqx-icon-greater-than-equal"></span>', value: "GREATER_THAN_OR_EQUAL", label: t.localize("GREATER_THAN_OR_EQUAL") }, { prefix: '<span class="jqx-icon jqx-icon-null"></span>', value: "NULL", label: t.localize("NULL") }, { prefix: '<span class="jqx-icon jqx-icon-not-null"></span>', value: "NOT_NULL", label: t.localize("NOT_NULL") }], t._booleanConditions = [{ prefix: '<span class="jqx-icon jqx-icon-equal"></span>', value: "EQUAL", label: t.localize("EQUAL") }, { prefix: '<span class="jqx-icon jqx-icon-not-equal"></span>', value: "NOT_EQUAL", label: t.localize("NOT_EQUAL") }, { prefix: '<span class="jqx-icon jqx-icon-null"></span>', value: "NULL", label: t.localize("NULL") }, { prefix: '<span class="jqx-icon jqx-icon-not-null"></span>', value: "NOT_NULL", label: t.localize("NOT_NULL") }], e && t._items.forEach(((e, a) => { const n = e.children[1], i = e.children[3]; 0 === a ? n.innerHTML = t.localize("where") : 1 === a ? (n.dataSource = [{ value: "and", label: t.localize("and") }, { value: "or", label: t.localize("or") }], n.value = t.localize(t.operator)) : n.innerHTML = t.localize(t.operator), "string" !== e.dataType || e.options ? "enum" === e.dataType || e.options ? i.dataSource = t._enumConditions : "boolean" === e.dataType ? i.dataSource = t._booleanConditions : i.dataSource = t._numberAndDateConditions : i.dataSource = t._stringConditions, i.value = i.condition ? t.localize(i.condition) : "" })) } _setFocusable(e) { const t = this, a = t.disabled || t.unfocusable ? -1 : 0; if (t.$.addFilterButton.tabIndex = a, t.$.buttonsContainer.firstElementChild.tabIndex = a, t.$.buttonsContainer.children[1].tabIndex = a, e) { const e = Array.from(t.$.itemsContainer.getElementsByClassName("jqx-grid-panel-item-close-button")), n = Array.from(t.$.itemsContainer.querySelectorAll("jqx-date-time-picker, jqx-numeric-text-box, jqx-check-box, jqx-input")); e.forEach((e => e.tabIndex = a)), n.forEach((e => e.unfocusable = t.disabled || t.unfocusable)) } } }), JQX("jqx-column-panel", class extends JQX.BaseElement { static get properties() { return { dataSource: { value: [], type: "array", reflectToAttribute: !1 }, messages: { value: { en: { apply: "Ok", cancel: "Cancel", find: "Find a field", reset: "Reset", noResults: "No results" } }, type: "object", extend: !0 } } } static get listeners() { return { click: "_interactionHandler", keydown: "_interactionHandler", "find.keyup": "_findKeyupHandler", "sortable.dragEnd": "_sortableDragEndHandler" } } static get requires() { return { "JQX.Sortable": "jqx.sortable.js" } } static get styleUrls() { return ["jqx.gridpanel.css"] } template() { return '<div id="container" role="presentation">\n <div class="jqx-column-panel-find-container" role="search">\n <input id="find" readonly="[[readonly]]" role="searchbox" aria-label="Find a field"></input>\n <span id="clearButton" class="clear-button jqx-hidden" role="button" aria-label="Clear"></span>\n </div>\n <jqx-sortable id="sortable" disable-mode="manual" right-to-left="[[rightToLeft]]" animation="[[animation]]" disabled="[[readonly]]" drag-mode="handle" handle-position="right" handle-visibility="visible" theme="[[theme]]"></jqx-sortable>\n <div id="footer" class="jqx-grid-panel-container-footer" role="presentation">\n <span id="reset" class="jqx-grid-panel-reset-button" role="button"></span>\n <div id="buttonsContainer" class="jqx-grid-panel-buttons-container jqx-unselectable" role="presentation">\n <span class="jqx-grid-panel-cancel-button" role="button"></span>\n <span class="jqx-grid-panel-apply-button primary" role="button"></span>\n </div>\n </div>\n </div>' } ready() { super.ready() } render() { const e = this; e.setAttribute("role", "dialog"), e._positionChanged = !1, e._localize(), e._moves = [], e._createSortItems(), super.render() } propertyChangedHandler(e, t, a) { super.propertyChangedHandler(e, t, a); const n = this; switch (e) { case "disabled": case "unfocusable": n._setFocusable(); break; case "dataSource": { const e = n.$.sortable.$.container; for (; e.firstChild;)e.removeChild(e.firstChild); n._createSortItems(), n._positionChanged = !1, n.$.find.value = "", n._findKeyupHandler(), n.$.clearButton.classList.add("jqx-hidden"); break } case "locale": case "messages": n._localize() } } _createSortItems() { const e = this, t = document.createDocumentFragment(); e._HTMLToSourceMap = new Map, e.dataSource.forEach((a => t.appendChild(e._createSortItem(a)))), e.$.sortable.$.container.appendChild(t), e.$.sortable.updateItems(), e._setFocusable() } _createSortItem(e) { const t = document.createElement("div"), a = this.id + "Label" + e.dataField; return this._HTMLToSourceMap.set(t, e), t.className = "jqx-grid-panel-item", t.innerHTML = `<div class="toggle-visibility${!1 !== e.visible ? "" : " hidden"}${e.disableToggle ? " disable-toggle" : ""}" role="button" aria-controls="${a}" aria-label="Toggle visibility"></div>\n<span id="${a}" class="jqx-column-panel-label jqx-unselectable${e.icon ? " icon " + e.icon : ""}">${e.label}</span>`, 1 === e.level ? t.classList.add("indent") : 0 === e.level && t.classList.add("group"), e.disableDrag && t.setAttribute("disable-drag", ""), e.dataField && t.setAttribute("data-field", e.dataField), e.parentDataField && t.setAttribute("parent-data-field", e.parentDataField), !1 !== e.allowHide && !0 !== e.disableToggle || (t.style.pointerEvents = "none", t.setAttribute("disabled", ""), t.style.opacity = .8), t } _interactionHandler(e) { const t = this; if (t.disabled || t.readonly || "keydown" === e.type && -1 === [" ", "Enter"].indexOf(e.key)) return; const a = t.shadowRoot || t.isInShadowDOM ? e.composedPath()[0] : e.target; if (a.classList.contains("toggle-visibility")) { a.classList.toggle("hidden"); const e = a.closest(".jqx-grid-panel-item"); if (e.hasAttribute("data-field")) { const n = e.getAttribute("data-field"); if (e.hasAttribute("parent-data-field") || e.hasAttribute("disabled")) { const a = e.getAttribute("parent-data-field"), n = t.$.sortable.querySelectorAll(".jqx-grid-panel-item"); let i = null; if (n.forEach((e => { e.getAttribute("data-field") === a && (i = e) })), i) { let e = 0, t = 0; n.forEach((n => { n.getAttribute("parent-data-field") === a && (e++, n.firstElementChild.classList.contains("hidden") && t++) })), t === e ? i.firstElementChild.classList.add("hidden") : t < e && i.firstElementChild.classList.remove("hidden") } } else t.$.sortable._items.forEach((e => { if (e.hasAttribute("parent-data-field") && !e.hasAttribute("disabled")) { const t = e.getAttribute("parent-data-field"), i = e.firstElementChild; t === n && (a.classList.contains("hidden") ? i.classList.add("hidden") : i.classList.remove("hidden")) } })) } } else if (a.parentElement === t.$.buttonsContainer) { if (a === t.$.buttonsContainer.firstElementChild) return t.$.fireEvent("cancel"), void (t._moves = []); if (a === t.$.buttonsContainer.children[1]) { const e = []; Array.from(t.$.sortable.$.container.children).forEach((a => { const n = Object.assign({}, t._HTMLToSourceMap.get(a)); n.visible = !a.firstElementChild.classList.contains("hidden"), e.push(n) })), t.$.fireEvent("apply", { value: e, positionChanged: t._positionChanged, moves: t._moves }), t._positionChanged = !1, t._moves = [] } } else if (a === t.$.reset) { const e = []; Array.from(t.$.sortable.$.container.children).forEach((a => { const n = Object.assign({}, t._HTMLToSourceMap.get(a)); n.visible = !0, e.push(n) })), t.$.fireEvent("apply", { value: e, positionChanged: t._positionChanged, moves: t._moves }), t._positionChanged = !1, t._moves = [] } else a.classList.contains("clear-button") && (t.$.find.value = "", t._findKeyupHandler()) } _findKeyupHandler() { const e = this; if (e.disabled || e.readonly) return; const t = e.$.find, a = t.value, n = [...e.$.sortable.$.container.children]; if (void 0 === e._disabledSortable && (e._disabledSortable = e.$.sortable.disabled), "" === a) return t.parentElement.classList.remove("no-results"), e.$.clearButton.classList.add("jqx-hidden"), n.forEach((e => e.classList.remove("jqx-hidden"))), e.$.sortable.disabled = e._disabledSortable || e.readonly, void delete e._disabledSortable; let i = !0; e.$.clearButton.classList.remove("jqx-hidden"), n.forEach((t => { -1 === e._HTMLToSourceMap.get(t).label.toLowerCase().indexOf(a.toLowerCase()) ? t.classList.add("jqx-hidden") : (t.classList.remove("jqx-hidden"), i = !1) })), e.$.sortable.disabled = i, i ? t.parentElement.classList.add("no-results") : t.parentElement.classList.remove("no-results") } _sortableDragEndHandler(e) { const t = e.detail; this._positionChanged = !0, this._moves.push({ oldIndex: t.oldIndex, newIndex: t.newIndex }) } _localize() { const e = this; e.$.find.placeholder = e.localize("find"), e.$.reset.innerHTML = e.localize("reset"), e.$.buttonsContainer.firstElementChild.innerHTML = e.localize("cancel"), e.$.buttonsContainer.children[1].innerHTML = e.localize("apply"), e.$.container.firstElementChild.setAttribute("no-results", e.localize("noResults")) } _setFocusable() { const e = this, t = e.disabled || e.unfocusable ? -1 : 0, a = Array.from(e.$.sortable.getElementsByClassName("toggle-visibility")); e.$.find.tabIndex = t, e.$.clearButton.tabIndex = t, e.$.buttonsContainer.firstElementChild.tabIndex = t, e.$.buttonsContainer.children[1].tabIndex = t, a.forEach((e => e.tabIndex = e.classList.contains("disable-toggle") ? -1 : t)) } }), JQX("jqx-formatting-panel", class extends JQX.BaseElement { static get properties() { return { columns: { value: [], type: "array", reflectToAttribute: !1 }, dataSource: { value: [], type: "any", reflectToAttribute: !1 }, items: { value: null, type: "array?", reflectToAttribute: !1 }, dropDownAppendTo: { value: null, type: "any", reflectToAttribute: !1 }, messages: { value: { en: { add: "Add condition", all: "All columns", apply: "Ok", between: "Between", cancel: "Cancel", close: "Close", column: "Column:", condition: "Condition:", equal: "Equal To", fontFamily: "Font family:", fontSize: "Font size:", format: "Format:", greaterThan: "Greater Than", highlight: "Highlight", lessThan: "Less Than", notEqual: "Not Equal To", remove: "Remove condition", secondValue: "Second value:", text: "Text", value: "Value:" } }, type: "object", extend: !0 } } } static get listeners() { return { click: "_interactionHandler", keydown: "_interactionHandler", change: "_changeHandler", "popup.change": "_changeHandler", "popup.click": "_interactionHandler", "popup.keydown": "_interactionHandler", "document.down": "_documentDownHandler" } } template() { return '<div id="container" role="presentation">\n <div id="itemsContainer" class="jqx-formatting-panel-items-container" role="presentation"></div>\n <div id="addNewButton" class="jqx-add-new-button" role="button" aria-label="Add new condition"></div>\n <div id="popup" class="jqx-formatting-panel-popup jqx-hidden jqx-visibility-hidden" role="dialog">\n <div id="popupHeader" class="header" role="presentation">\n <div id="text" class="selected" role="button" aria-label="Text color"></div>\n <div id="highlight" role="button" aria-label="Highlight color"></div>\n </div>\n <div id="colorCode" class="color-code"></div>\n <input id="colorInput" type="color" />\n <div id="colorsContainer" class="colors-container"></div>\n <jqx-button id="apply" class="ok primary" animation="[[animation]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></jqx-button>\n <jqx-button id="cancel" class="cancel" animation="[[animation]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" unfocusable="[[unfocusable]]"></jqx-button>\n </div>\n </div>' } render() { const e = this, t = getComputedStyle(e); e.setAttribute("role", "dialog"), e.$.popup.id = e.id + "Popup", e._basicColors = [[0, 0, 0], [68, 68, 68], [102, 102, 102], [153, 153, 153], [204, 204, 204], [238, 238, 238], [243, 243, 243], [255, 255, 255], [255, 0, 0], [255, 153, 0], [255, 255, 0], [0, 255, 0], [0, 255, 255], [0, 0, 255], [153, 0, 255], [255, 0, 255], [244, 204, 204], [252, 229, 205], [255, 242, 204], [217, 234, 211], [208, 224, 227], [207, 226, 243], [217, 210, 233], [234, 209, 220], [234, 153, 153], [249, 203, 156], [255, 229, 153], [182, 215, 168], [162, 196, 201], [159, 197, 232], [180, 167, 214], [213, 166, 189], [224, 102, 102], [246, 178, 107], [255, 217, 102], [147, 196, 125], [118, 165, 175], [111, 168, 220], [142, 124, 195], [194, 123, 160], [204, 0, 0], [230, 145, 56], [241, 194, 50], [106, 168, 79], [69, 129, 142], [61, 133, 198], [103, 78, 167], [166, 77, 121], [153, 0, 0], [180, 95, 6], [191, 144, 0], [56, 118, 29], [19, 79, 92], [11, 83, 148], [53, 28, 117], [116, 27, 71], [102, 0, 0], [120, 63, 4], [127, 96, 0], [39, 78, 19], [12, 52, 61], [7, 55, 99], [32, 18, 77], [76, 17, 48]], e._defaults = { fontFamily: t.fontFamily, fontSize: t.fontSize, text: e._toHex(t.color), highlight: e._toHex(t.backgroundColor) }, t.fontFamily.indexOf("-apple") >= 0 && (e._defaults.fontFamily = "Segoe UI"), e._localize(), e._setFocusable(), e._populatePopupWithColors(), e._processColumnsAndDataSource(), e._addDefaultItems(), super.render() } attached() { const e = this; super.attached(), e.isCompleted && e._addDefaultItemsOnAttach && e._addDefaultItems() } add(e, t) { const a = this; if (e && e.column && "all" !== e.column && !a.columns.find((t => t.dataField === e.column))) return void a.items.splice(t, 1); const n = document.createElement("div"), i = a._defaults, l = ` animation="${a.animation}"${a.rightToLeft ? " right-to-left" : ""} theme="${a.theme}"${a.unfocusable ? " unfocusable" : ""}`, o = a.disabled || a.unfocusable ? "" : ' tabindex="0"'; e = Object.assign({ column: "all", condition: "lessThan", firstValue: 0, secondValue: 1, fontFamily: i.fontFamily, fontSize: i.fontSize, text: i.text, highlight: i.highlight }, e); const r = `\n<div class="value-label">${a.localize("value")}</div>\n<jqx-input class="columns-input underlined" data-source='${JSON.stringify(a._columnsInputDataSource)}' placeholder="${a.localize("column")}" readonly value="${a._columnsInputDataSource.find((t => t.value === e.column)).label}"${l}></jqx-input>\n<jqx-input class="condition-input underlined" data-source='${a._conditionsDataSource}' placeholder="${a.localize("condition")}" readonly value="${a.localize(e.condition)}"${l}></jqx-input>\n<jqx-input class="first-value underlined" type="number" placeholder="${a.localize("value")}" value="${e.firstValue}"${l}></jqx-input>\n<div class="ampersand">&</div>\n<jqx-input class="second-value underlined" type="number" placeholder="${a.localize("secondValue")}" value="${e.secondValue}"${l}></jqx-input>\n<div class="close-button" title="${a.localize("close")}"${o} role="button" aria-label="Close"></div>\n<div class="format-label">${a.localize("format")}</div>\n<jqx-input class="font-family-input underlined" drop-down-height="auto" placeholder="${a.localize("fontFamily")}" readonly${l}></jqx-input>\n<jqx-input class="font-size-input underlined" data-source='["8px", "9px", "10px", "11px", "12px", "13px", "14px", "15px", "16px"]' drop-down-height="auto" placeholder="${a.localize("fontSize")}" readonly value="${e.fontSize}"${l}></jqx-input>\n<div class="popup-button jqx-unselectable"${o} role="button" aria-haspopup="dialog" aria-label="Toggle pop-up">A</div>\n<div class="preview jqx-unselectable">2.71828</div>`; n.classList.add("jqx-formatting-panel-item"), n.classList.toggle("between", "between" === e.condition), n.innerHTML = r, n.columnsInput = n.querySelector(".columns-input"), n.conditionInput = n.querySelector(".condition-input"), n.firstValue = n.querySelector(".first-value"), n.secondValue = n.querySelector(".second-value"), n.closeButton = n.querySelector(".close-button"), n.fontFamilyInput = n.querySelector(".font-family-input"), n.fontFamilyInput.dataSource = [i.fontFamily, "Arial", "Verdana", "Courier New", "Georgia", "Times New Roman"], n.fontFamilyInput.value = e.fontFamily, n.fontSizeInput = n.querySelector(".font-size-input"), n.popupButton = n.querySelector(".popup-button"), n.fontFamilyInput = n.querySelector(".font-family-input"), n.preview = n.querySelector(".preview"), n.popupButton.style.color = e.text, n.popupButton.style.backgroundColor = e.highlight, n.preview.style.fontFamily = e.fontFamily, n.preview.style.fontSize = e.fontSize, n.preview.style.color = e.text, n.preview.style.backgroundColor = e.highlight, n.data = e, a.$.itemsContainer.appendChild(n), n.columnsInput.$.input.value || (n.columnsInput.$.input.dataValue = "all"), n.conditionInput.$.input.dataValue = e.condition, a._checkScrollBar() } apply() { const e = this, t = new JQX.Utilities.ConditionalFormatter(e.dataSource), a = Array.from(e.$.itemsContainer.children), n = []; let i; if (0 === a.length) return; if (e.ownerElement && "jqx-pivot-table" === e.ownerElement.nodeName.toLowerCase()) { const t = e.ownerElement._dynamicColumns; i = function (e) { return "all" === e ? t.map((e => e.id)) : t.filter((t => t.dataFields[t.dataFields.length - 1].dataField === e)).map((e => e.id)) } } else i = function (t) { return "all" === t ? e._columns.map((e => e.value)) : [t] }; for (let e = 0; e < a.length; e++) { const l = a[e].data, o = i(l.column), r = l.condition; t.color = l.highlight, t.comparator = l.firstValue, t.min = l.firstValue, t.max = l.secondValue; const s = t.format(r, o); for (let e in s) { const t = s[e]; for (let e in t) { const a = t[e]; a.color = l.text, a.fontFamily = l.fontFamily, a.fontSize = l.fontSize } } n.push(s) } if (0 === n.length) return n[0]; const l = {}; for (let e = 0; e < n.length; e++) { const t = n[e]; for (let e in t) { const a = t[e]; l[e] || (l[e] = {}); for (let t in a) l[e][t] = Object.assign({}, l[e][t], a[t]) } } return l } getItems() { return Array.from(this.$.itemsContainer.children).map((e => e.data)) } propertyChangedHandler(e, t, a) { super.propertyChangedHandler(e, t, a); const n = this; switch (e) { case "animation": case "theme": case "rightToLeft": if (Array.from(n.$.itemsContainer.querySelectorAll(".jqx-element")).forEach((t => t[e] = a)), null !== n.dropDownAppendTo && (n.$.apply[e] = a, n.$.cancel[e] = a), "theme" === e) { const e = getComputedStyle(n); n._defaults.text = n._toHex(e.color), n._defaults.highlight = n._toHex(e.backgroundColor) } break; case "columns": case "items": "columns" === e && (n._processColumnsAndDataSource(), n.items = null), n.$.itemsContainer.innerHTML = "", n._addDefaultItems(); break; case "disabled": case "unfocusable": { const t = n.disabled || n.unfocusable, i = Array.from(n.$.itemsContainer.querySelectorAll(".close-button, .popup-button")); "disabled" === e ? n._closePopup() : null !== n.dropDownAppendTo && (n.$.apply.unfocusable = a, n.$.cancel.unfocusable = a), n._setFocusable(), Array.from(n.$.itemsContainer.querySelectorAll(".jqx-element")).forEach((e => e.unfocusable = t)), t ? i.forEach((e => e.removeAttribute("tabindex"))) : i.forEach((e => e.setAttribute("tabindex", 0))); break } case "dataSource": JQX.DataAdapter && a instanceof JQX.DataAdapter && (n.dataSource = a.toArray()); break; case "locale": case "messages": n.items = n.getItems(), n.$.itemsContainer.innerHTML = "", n._localize(), n._columnsInputDataSource = JSON.parse(JSON.stringify(n._columns.concat([{ label: n.localize("all"), value: "all" }]))), n._addDefaultItems() } } _populatePopupWithColors() { const e = this, t = e._basicColors, a = document.createDocumentFragment(); for (let n = 0; n < t.length; n++) { const i = document.createElement("div"), l = t[n], o = `rgb(${l[0]}, ${l[1]}, ${l[2]})`, r = e._toHex(o); i.setAttribute("role", "button"), i.setAttribute("aria-label", "Select color " + r), i.index = n, i.value = r, i.style.backgroundColor = o, a.appendChild(i) } e.$.colorsContainer.appendChild(a) } _processColumnsAndDataSource() { const e = this, t = e.columns, a = e.dataSource, n = []; JQX.DataAdapter && a instanceof JQX.DataAdapter && (e.dataSource = a.toArray()); for (let e = 0; e < t.length; e++) { const a = t[e]; "number" === a.dataType && n.push({ label: a.label, value: a.dataField }) } e._columns = n, e._columnsInputDataSource = JSON.parse(JSON.stringify(n.concat([{ label: e.localize("all"), value: "all" }]))) } _addDefaultItems() { const e = this, t = e.items, a = e.getRootNode(); a === document || document.body.contains(a) ? (t && t.length > 0 ? t.forEach(((t, a) => e.add(t, a))) : (e.add({ condition: "greaterThan", firstValue: 100 }), e.add({ condition: "lessThan", firstValue: 0 })), delete e._addDefaultItemsOnAttach) : e._addDefaultItemsOnAttach = !0 } _changeHandler(e) { const t = this, a = t.isInShadowDOM ? e.composedPath()[0] : e.target, n = a.closest(".jqx-formatting-panel-item"); if (n) if (a !== n.columnsInput) { if (a === n.conditionInput) return n.data.condition = a.$.input.dataValue, void n.classList.toggle("between", "between" === a.$.input.dataValue); if (n.firstValue.contains(a)) n.data.firstValue = parseFloat(a.value); else { if (!n.secondValue.contains(a)) return a === n.fontFamilyInput ? (n.data.fontFamily = a.value, void (n.preview.style.fontFamily = a.value)) : void (a === n.fontSizeInput && (n.data.fontSize = a.value, n.preview.style.fontSize = a.value)); n.data.secondValue = parseFloat(a.value) } } else n.data.column = a.$.input.dataValue; else t.$.popup.contains(a) && t._updateUI(a.value.toUpperCase()) } _checkScrollBar() { this.classList.toggle("scroll", this.$.itemsContainer.offsetHeight < this.$.itemsContainer.scrollHeight) } _interactionHandler(e) { const t = this; if (!t.dropDownAppendTo && e.currentTarget === t.$.popup) return; if ("keydown" === e.type) { if (-1 === [" ", "Enter"].indexOf(e.key)) return void (t.disabled || t.readonly || t._keydownHandler(e)); e.preventDefault() } const a = t.isInShadowDOM ? e.composedPath()[0] : e.target; if (a === t.$.addNewButton) return void t.add(); const n = a.closest(".jqx-formatting-panel-item"); if (n) return void (a === n.closeButton ? (n.remove(), this._checkScrollBar()) : a === n.popupButton && (t._togglePopup(n), t._activePopupButton = a)); const i = t.$.popup; if (i.contains(a)) { if (a.parentElement === t.$.colorsContainer) return void t._updateUI(a.value); if (a.parentElement === t.$.popupHeader) a.classList.add("selected"), a === t.$.text ? (i.selection = "currentText", t.$.highlight.classList.remove("selected")) : (i.selection = "currentHighlight", t.$.text.classList.remove("selected")), t._updateUI(i[i.selection]); else if (a.classList.contains("jqx-button")) { if (t.$.apply.contains(a) || a && a.ownerElement && a.ownerElement.classList.contains("ok")) { const e = i.item; e.data.text = i.currentText, e.data.highlight = i.currentHighlight, e.popupButton.style.color = i.currentText, e.popupButton.style.backgroundColor = i.currentHighlight, e.preview.style.color = i.currentText, e.preview.style.backgroundColor = i.currentHighlight } t._closePopup() } } } _keydownHandler(e) { const t = this, a = e.key; if (-1 === ["ArrowDown", "ArrowLeft", "ArrowRight", "ArrowUp", "End", "Escape", "Home", "PageDown", "PageUp"].indexOf(a)) return; if (e.preventDefault(), "Escape" === a && !t.$.popup.classList.contains("jqx-hidden")) return void t._closePopup(); if (t.getRootNode().activeElement !== t.$.colorsContainer) return; const n = Array.from(this.$.colorsContainer.children), i = this.$.colorsContainer.querySelector(".selected"); let l, o = "ArrowRight", r = "ArrowLeft"; if (t.rightToLeft && (o = "ArrowLeft", r = "ArrowRight"), i) { let e = i.index; switch (a) { case r: e = Math.max(e - 1, e - e % 8); break; case o: e = Math.min(e + 1, e + 8 - e % 8 - 1); break; case "ArrowUp": e = Math.max(e - 8, e % 8); break; case "ArrowDown": e = Math.min(e + 8, 56 + e % 8); break; case "Home": e -= e % 8; break; case "End": e = e + 8 - e % 8 - 1; break; case "PageUp": e %= 8; break; case "PageDown": e = 56 + e % 8 }l = n[e] } else l = n[0]; t._updateUI(l.value, l) } _togglePopup(e) { const t = this, a = t.$.popup; if (e === a.item) return void t._closePopup(); if (a.setAttribute("animation", t.animation), a.setAttribute("theme", t.theme), t.rightToLeft && a.setAttribute("right-to-left", ""), a.classList.contains("jqx-hidden") && a.classList.remove("jqx-hidden"), t.dropDownAppendTo) if ("body" === t.dropDownAppendTo) document.body.appendChild(a); else { const e = document.querySelector(t.dropDownAppendTo); e && e.appendChild(a) } const n = e.popupButton, i = n.getBoundingClientRect(), l = n.offsetLeft, o = n.offsetTop, r = a.offsetWidth, s = a.offsetHeight, d = t.$.itemsContainer.scrollTop, c = t._toHex(e.data.text), u = t._toHex(e.data.highlight); i.top >= s + 5 ? a.style.top = o - (s + d + 5) + "px" : a.style.top = o + i.height - d + 5 + "px", a.style.left = l + i.width / 2 - r / 2 + "px", t.dropDownAppendTo && (a.style.top = i.bottom + 5 + "px", a.style.left = i.left + i.width / 2 - r / 2 + "px"), t.$.text.classList.add("selected"), t.$.highlight.classList.remove("selected"), t.$.text.focus(), a.item = e, a.selection = "currentText", a.currentText = c, a.currentHighlight = u, t._updateUI(c), a.controlledBy && (a.controlledBy.removeAttribute("aria-controls"), a.controlledBy.removeAttribute("aria-expanded")), n.setAttribute("aria-controls", a.id), n.setAttribute("aria-expanded", !0), a.controlledBy = n, a.classList.remove("jqx-visibility-hidden") } _closePopup() { const e = this, t = e.$.popup; "none" !== e.animation ? (t.addEventListener("transitionend", (function e() { t.classList.add("jqx-hidden"), t.removeEventListener("transitionend", e) })), t.classList.add("jqx-visibility-hidden")) : (t.classList.add("jqx-visibility-hidden"), t.classList.add("jqx-hidden")), delete t.item, e._activePopupButton && e._activePopupButton.focus(), t.controlledBy && (t.controlledBy.removeAttribute("aria-controls"), t.controlledBy.removeAttribute("aria-expanded")) } _toHex(e) { if (-1 !== e.indexOf("#")) return e; const t = /rgb\((\d+), (\d+), (\d+)\)/g.exec(e); return t ? "#" + (parseFloat(t[1]).toString(16).padStart(2, "0") + parseFloat(t[2]).toString(16).padStart(2, "0") + parseFloat(t[3]).toString(16).padStart(2, "0")).toUpperCase() : "#FFFFFF" } _updateUI(e, t) { const a = this; a.$.colorInput.value = e, a.$.colorCode.innerHTML = e, a._selectColor(e, t) } _selectColor(e, t) { const a = this.$.popup, n = Array.from(this.$.colorsContainer.children); n.forEach((e => e.classList.remove("selected"))), (t = t || n.find((t => t.value === e))) && t.classList.add("selected"), a[a.selection] = e } _localize() { const e = this; e._conditionsDataSource = JSON.stringify([{ label: e.localize("lessThan"), value: "lessThan" }, { label: e.localize("greaterThan"), value: "greaterThan" }, { label: e.localize("equal"), value: "equal" }, { label: e.localize("notEqual"), value: "notEqual" }, { label: e.localize("between"), value: "between" }]), e.$.text.innerHTML = e.localize("text"), e.$.highlight.innerHTML = e.localize("highlight"), e.$.apply.innerHTML = e.localize("apply"), e.$.cancel.innerHTML = e.localize("cancel"), e.$.addNewButton.title = e.localize("add") } _setFocusable() { const e = this, t = !e.disabled && !e.unfocusable, a = [e.$.addNewButton, e.$.text, e.$.highlight, e.$.colorsContainer]; t ? (a.forEach((e => e.setAttribute("tabindex", 0))), e.$.colorInput.removeAttribute("tabindex")) : (a.forEach((e => e.removeAttribute("tabindex"))), e.$.colorInput.setAttribute("tabindex", -1)) } _documentDownHandler(e) { const t = this, a = t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target, n = t.$.popup; n.classList.contains("jqx-hidden") || n.contains(a) || a.classList.contains("popup-button") || (delete t._activePopupButton, t._closePopup()) } }), JQX("jqx-data-view", class extends JQX.BaseElement { static get properties() { return { addNewButton: { value: !1, type: "boolean" }, allowDrag: { value: !1, type: "boolean" }, collapsible: { value: !1, type: "boolean" }, columns: { value: [], type: "object", reflectToAttribute: !1 }, dataSource: { value: null, type: "object?", reflectToAttribute: !1 }, dataSourceSettings: { value: { autoGenerateColumns: { value: !1, type: "boolean" }, sanitizeHTML: { value: "blackList", allowedValues: ["all", "blackList", "none"], type: "string" }, root: { value: "", type: "string" }, record: { value: "", type: "string" }, keyDataField: { value: "", type: "string" }, parentDataField: { value: "", type: "string" }, childrenDataField: { value: "", type: "string" }, groupBy: { value: [], type: "array" }, dataFields: { value: [], type: "array" }, mapChar: { value: ".", type: "string" }, id: { value: "", type: "string" }, virtualDataSource: { value: null, type: "any" }, virtualDataSourceOnExpand: { value: null, type: "any" } }, type: "object" }, editable: { value: !1, type: "boolean" }, headerPosition: { value: "none", allowedValues: ["none", "top", "bottom"], type: "string" }, messages: { value: { en: { addFilter: "+ Add filter", and: "And", apply: "Ok", booleanFirst: "☐", booleanLast: "☑", cancel: "Cancel", CONTAINS: "contains", CONTAINS_CASE_SENSITIVE: "contains (case sensitive)", dateFirst: "1", dateLast: "9", DOES_NOT_CONTAIN: "does not contain", DOES_NOT_CONTAIN_CASE_SENSITIVE: "does not contain (case sensitive)", EMPTY: "empty", ENDS_WITH: "ends with", ENDS_WITH_CASE_SENSITIVE: "ends with (case sensitive)", EQUAL: "equal", EQUAL_CASE_SENSITIVE: "equal (case sensitive)", filter: "Filter", customize: "Customize Columns", filteredByMultiple: "{{n}} filters", filteredByOne: "1 filter", filterValuePlaceholder: "Value", find: "Find a field", findInView: "Find in view", firstBy: "Sort by", found: "{{nth}} of {{n}}", from: "from", GREATER_THAN: "greater than", GREATER_THAN_OR_EQUAL: "greater than or equal", LESS_THAN: "less than", LESS_THAN_OR_EQUAL: "less than or equal", noFilters: "No filters applied", noResults: "No results", noSorting: "No sorting applied", NOT_EMPTY: "not empty", NOT_EQUAL: "not equal", NOT_NULL: "not null", NULL: "null", numberFirst: "1", numberLast: "9", ok: "OK", or: "Or", pickAnother: "Pick another field to sort by", sort: "Sort", group: "Group", fontFamily: "Font family:", fontSize: "Font size:", format: "Format:", formatColumn: "Format Column", formating: "Conditional Formating", sortedByMultiple: "Sorted by {{n}} fields", sortedByOne: "Sorted by 1 field", STARTS_WITH: "starts with", STARTS_WITH_CASE_SENSITIVE: "starts with (case sensitive)", stringFirst: "A", stringLast: "Z", thenBy: "then by", where: "Where", collapseAll: "Collapse all", expandAll: "Expand all", noGrouping: "No grouping", groupedByMultiple: "{{n}} groups", groupedByOne: "1 group", firstByGroup: "Group by", pickAnotherGroupBy: "Pick another field to group by", add: "Add condition", all: "All columns", between: "Between", close: "Close", column: "Column:", condition: "Condition:", equal: "Equal To", greaterThan: "Greater Than", highlight: "Highlight", lessThan: "Less Than", notEqual: "Not Equal To", remove: "Remove condition", secondValue: "Second value:", text: "Text", value: "Value:", reset: "Reset" } } } } } static get listeners() { return { "header.apply": "_applyHandler", "header.cancel": "closePanel", "headerDropDown.transitionend": "_headerDropDownTransitionendHandler", "searchInput.keyup": "_searchInputKeyupHandler", resize: "_resizeHandler", "document.move": "_documentMoveHandler", "document.up": "_documentUpHandler" } } render() { const e = this; e.$.headerDropDown.id || (e.$.headerDropDown.id = e.id + "HeaderDropDown"), e.setAttribute("role", "group"), e._isMobile = JQX.Utilities.Core.isMobile, super.render() } addFilter(e, t = "and") { const a = this; if (!Array.isArray(e) || e.length > 0 && !Array.isArray(e[0])) return; let n; a.closePanel(), arguments[2] ? n = { filters: arguments[2], operator: t } : (n = { filters: [], operator: t }, e.forEach((e => { e[1].filters.forEach((t => { n.filters.push([e[0], t.condition, t.value]) })) }))), JSON.stringify(n) !== JSON.stringify(a._appliedFiltering) && (n.filterGroups = e, a._appliedFiltering = n, a._applyFilter(e, t), a.$.fireEvent("filter"), a._refreshFilterButton()) } _refreshFilterButton() { const e = this, t = e._appliedFiltering.filters ? e._appliedFiltering.filters.length : 0; if (0 === t) return e.$.filterButton.firstElementChild.innerHTML = e.localize("filter"), void e.$.filterButton.classList.remove("filtered"); e.$.filterButton.firstElementChild.innerHTML = 1 === t ? e.localize("filteredByOne") : e.localize("filteredByMultiple", { n: t }), e.$.filterButton.classList.add("filtered") } addSort(e, t) { const a = this, n = a.dataSource, i = JSON.stringify(a._appliedSorting); let l; function o(e, i) { if (a.columns.find((t => t.dataField === e))) { let a = Array.isArray(t) ? t[i] : "string" == typeof t ? t : "ascending"; l.dataFields.push(e), l.dataTypes.push(n.dataFields.find((t => t.name === e)).dataType), a = a && -1 !== a.indexOf("desc") ? "descending" : "ascending", l.orderBy.push(a) } } if (0 !== arguments.length && n && 0 !== n.length) { if (a.closePanel(), 1 === arguments.length && "object" == typeof e) l = e; else if (l = { dataFields: [], dataTypes: [], orderBy: [] }, Array.isArray(e)) e.forEach(o); else { if ("string" != typeof e) return; o(e, 0) } a.closePanel(), a._appliedSorting = l, i !== JSON.stringify(a._appliedSorting) && (a._applySort(), a.$.fireEvent("sort"), a._refreshSortButton()) } } _refreshSortButton() { const e = this, t = e._appliedSorting.dataFields.length; return 0 === t || e.grid && !1 === e.grid.sorting.maintainSort ? (e.$.sortButton.firstElementChild.innerHTML = e.localize("sort"), void e.$.sortButton.classList.remove("sorted")) : (e.$.sortButton.firstElementChild.innerHTML = 1 === t ? e.localize("sortedByOne") : e.localize("sortedByMultiple", { n: t }), void e.$.sortButton.classList.add("sorted")) } closePanel() { const e = this.$.headerDropDown; e.classList.remove("open"), setTimeout((() => { e.classList.add("jqx-visibility-hidden") }), 150), this._closeSearchPanel(), e.controlledBy && (e.controlledBy.removeAttribute("aria-controls"), e.controlledBy.setAttribute("aria-expanded", !1), delete e.controlledBy) } _closeSearchPanel() { const e = this; e._searchInfo && delete e._searchInfo } _closeDialog() { const e = this; e._editInfo && e._editInfo.window.close() } openFormatPanel() { } openFilterPanel(e, t) { const a = this, n = a.dataSource; if (!n || 0 === n.length && !n.virtualDataSource || a.disabled || "none" === a.headerPosition) return; let i; a._editInfo && a._editInfo.window.close(), a.$.headerDropDown.classList.add("filter-panel"), a.$.headerDropDown.classList.remove("customize-panel", "sort-panel", "search-panel", "format-panel"), a.$.filter.classList.remove("jqx-hidden"), a.$.customize.classList.add("jqx-hidden"), a.$.sort.classList.add("jqx-hidden"), a.$.format && a.$.format.classList.add("jqx-hidden"), a.$.group && a.$.group.classList.add("jqx-hidden"), a.$.search.classList.add("jqx-hidden"), a._closeSearchPanel(), a._filterPartCreated ? (i = a.$.filter.firstElementChild, i.set("dataSource", e), i.set("locale", a.locale), i.messages = a._innerElementMessages.multiColumnFilterPanel, i.operator = a._appliedFiltering.operator, i.editorPlaceholder = a.localize("filterValuePlaceholder"), i.set("operator", a._appliedFiltering.operator), i.set("value", a._appliedFiltering.filters), i._applyValue(), i.rightToLeft = a.rightToLeft) : (i = document.createElement("jqx-multi-column-filter-panel"), i.rightToLeft = a.rightToLeft, i.animation = a.animation, i.dataSource = e, i.locale = a.locale, i.messages = a._innerElementMessages.multiColumnFilterPanel, i.operator = a._appliedFiltering.operator, i.editorPlaceholder = a.localize("filterValuePlaceholder"), i.theme = a.theme, i.value = a._appliedFiltering.filters, i.editorCallback = t, a.$.filter.appendChild(i), a._filterPartCreated = !0), a._openHeaderDropDown(a.$.filterButton) } openSortPanel(e) { const t = this, a = t.dataSource; if (!a || 0 === a.length && !a.virtualDataSource || t.disabled || "none" === t.headerPosition) return; let n; t._closeDialog(), t.$.headerDropDown.classList.add("sort-panel"), t.$.headerDropDown.classList.remove("customize-panel", "filter-panel", "format-panel", "search-panel"), t.$.sort.classList.remove("jqx-hidden"), t.$.customize.classList.add("jqx-hidden"), t.$.filter.classList.add("jqx-hidden"), t.$.format && t.$.format.classList.add("jqx-hidden"), t.$.group && t.$.group.classList.add("jqx-hidden"), t.$.search.classList.add("jqx-hidden"), t._closeSearchPanel(), t._sortPartCreated ? (n = t.$.sort.firstElementChild, n.rightToLeft = t.rightToLeft, n.dataSource = e, n.locale = t.locale, n.messages = t._innerElementMessages.sortPanel, n.set("dataSource", e), n.propertyChangedHandler("dataSource", void 0, e)) : (n = document.createElement("jqx-sort-panel"), n.rightToLeft = t.rightToLeft, n.animation = t.animation, n.dataSource = e, n.locale = t.locale, n.messages = t._innerElementMessages.sortPanel, n.theme = t.theme, t.$.sort.appendChild(n), t._sortPartCreated = !0), t._openHeaderDropDown(t.$.sortButton) } removeFilter() { this.addFilter([]) } removeSort() { this.addSort({ dataFields: [], dataTypes: [], orderBy: [] }) } _clearFilterAndSortUI() { const e = this; e._appliedFiltering = { filterGroups: [], filters: [], operator: "and" }, e._appliedSorting = { dataFields: [], dataTypes: [], orderBy: [] }, e._appliedGrouping = { dataFields: [] }, e.$.filterButton.classList.remove("filtered"), e.$.sortButton.classList.remove("sorted"), e.$.filterButton.firstElementChild.innerHTML = e.localize("filter"), e.$.sortButton.firstElementChild.innerHTML = e.localize("sort") } _getInnerElementMessages() { const e = this, t = e.locale, a = { columnPanel: {}, groupPanel: {}, multiColumnFilterPanel: {}, sortPanel: {}, formattingPanel: {}, dateTimePicker: {} }; a.formattingPanel[t] = { add: e.localize("add"), all: e.localize("all"), apply: e.localize("apply"), between: e.localize("between"), cancel: e.localize("cancel"), close: e.localize("close"), column: e.localize("column"), condition: e.localize("condition"), equal: e.localize("equal"), fontFamily: e.localize("fontFamily"), fontSize: e.localize("fontSize"), format: e.localize("format"), greaterThan: e.localize("greaterThan"), highlight: e.localize("highlight"), lessThan: e.localize("lessThan"), notEqual: e.localize("notEqual"), remove: e.localize("remove"), secondValue: e.localize("secondValue"), text: e.localize("text"), value: e.localize("value") }, a.columnPanel[t] = { apply: e.localize("apply"), cancel: e.localize("cancel"), reset: e.localize("reset"), find: e.localize("find"), noResults: e.localize("noResults") }, a.groupPanel[t] = { apply: e.localize("apply"), cancel: e.localize("cancel"), collapseAll: e.localize("collapseAll"), expandAll: e.localize("expandAll"), firstBy: e.localize("firstByGroup"), noGrouping: e.localize("noGrouping"), pickAnother: e.localize("pickAnotherGroupBy"), stringFirst: e.localize("stringFirst"), stringLast: e.localize("stringLast"), thenBy: e.localize("thenBy"), from: e.localize("from"), booleanFirst: e.localize("booleanFirst"), booleanLast: e.localize("booleanLast"), dateFirst: e.localize("dateFirst"), dateLast: e.localize("dateLast"), numberFirst: e.localize("numberFirst"), numberLast: e.localize("numberLast") }, a.multiColumnFilterPanel[t] = { addFilter: e.localize("addFilter"), and: e.localize("and"), apply: e.localize("apply"), cancel: e.localize("cancel"), CONTAINS: e.localize("CONTAINS"), CONTAINS_CASE_SENSITIVE: e.localize("CONTAINS_CASE_SENSITIVE"), DOES_NOT_CONTAIN: e.localize("DOES_NOT_CONTAIN"), DOES_NOT_CONTAIN_CASE_SENSITIVE: e.localize("DOES_NOT_CONTAIN_CASE_SENSITIVE"), EMPTY: e.localize("EMPTY"), ENDS_WITH: e.localize("ENDS_WITH"), ENDS_WITH_CASE_SENSITIVE: e.localize("ENDS_WITH_CASE_SENSITIVE"), EQUAL: e.localize("EQUAL"), EQUAL_CASE_SENSITIVE: e.localize("EQUAL_CASE_SENSITIVE"), GREATER_THAN: e.localize("GREATER_THAN"), GREATER_THAN_OR_EQUAL: e.localize("GREATER_THAN_OR_EQUAL"), LESS_THAN: e.localize("LESS_THAN"), LESS_THAN_OR_EQUAL: e.localize("LESS_THAN_OR_EQUAL"), noFilters: e.localize("noFilters"), NOT_EMPTY: e.localize("NOT_EMPTY"), NOT_EQUAL: e.localize("NOT_EQUAL"), NOT_NULL: e.localize("NOT_NULL"), NULL: e.localize("NULL"), or: e.localize("or"), STARTS_WITH: e.localize("STARTS_WITH"), STARTS_WITH_CASE_SENSITIVE: e.localize("STARTS_WITH_CASE_SENSITIVE"), where: e.localize("where") }, a.sortPanel[t] = { apply: e.localize("apply"), applyOnce: e.localize("applyOnce"), booleanFirst: e.localize("booleanFirst"), booleanLast: e.localize("booleanLast"), cancel: e.localize("cancel"), dateFirst: e.localize("dateFirst"), dateLast: e.localize("dateLast"), firstBy: e.localize("firstBy"), from: e.localize("from"), numberFirst: e.localize("numberFirst"), numberLast: e.localize("numberLast"), noSorting: e.localize("noSorting"), pickAnother: e.localize("pickAnother"), maintainSort: e.localize("maintainSort"), stringFirst: e.localize("stringFirst"), stringLast: e.localize("stringLast"), thenBy: e.localize("thenBy") }, a.dateTimePicker[t] = { now: e.localize("now"), dateTabLabel: e.localize("dateTabLabel"), timeTabLabel: e.localize("timeTabLabel") }, e._innerElementMessages = a } _handleHeaderPosition(e) { const t = this, a = t.headerPosition, n = t.$.header; "none" !== a ? (n.classList.remove("jqx-hidden"), "top" === a && n.nextElementSibling !== e ? t.$.container.insertBefore(n, e) : "bottom" === a && n.previousElementSibling !== e && t.$.container.insertBefore(n, t.$.loadingIndicatorContainer)) : n.classList.add("jqx-hidden") } _headerClickHandler(e) { const t = this, a = t.$.headerDropDown; function n(e, n) { a.classList.contains("jqx-visibility-hidden") || e.classList.contains("jqx-hidden") ? t[n]() : t.closePanel() } if (t.$.customizeButton.contains(e)) n(t.$.customize, "openCustomizePanel"); else if (t.$.filterButton.contains(e)) n(t.$.filter, "openFilterPanel"); else if (t.$.sortButton.contains(e)) n(t.$.sort, "openSortPanel"); else if (t.$.formatButton && t.$.formatButton.contains(e)) n(t.$.format, "openFormatPanel"); else if (e === t.$.searchButton) n(t.$.search, "_openSearchPanel"); else if (t.$.groupButton && t.$.groupButton.contains(e)) n(t.$.group, "openGroupPanel"); else if (e === t.$.searchClose) t.$.searchInput.value = "", t.$.searchInput.focus(); else if (e === t.$.searchPrev || e === t.$.searchNext) { const a = t._searchInfo, n = a.foundIdsArray, i = e === t.$.searchNext, l = n.length; let o; if (void 0 === a.highlighted) o = i ? 0 : l - 1; else { if (1 === n.length) return; { const e = n.indexOf(a.highlighted); o = i ? (e + 1) % l : e - 1 >= 0 ? e - 1 : l - 1 } } a.highlighted = n[o], t.grid ? (t.grid.highlighted = a.highlighted, t.grid.ensureVisible(a.highlighted), t.grid._recycle(!1)) : t.ensureVisible && t.ensureVisible(a.highlighted), t.$.searchLabel.innerHTML = t.localize("found", { nth: o + 1, n: n.length }) } } _headerDropDownTransitionendHandler(e) { const t = this, a = t.$.headerDropDown; t._openTimer = setTimeout((() => { e && ("visibility" !== e.propertyName || a.classList.contains("jqx-visibility-hidden")) || (a.classList.contains("search-panel") ? t.$.searchInput.focus() : !1 === t.unfocusable && (!t._isMobile && a.classList.contains("customize-panel") ? a.querySelector("jqx-column-panel").$.find.focus() : a.classList.contains("filter-panel") ? a.querySelector("jqx-multi-column-filter-panel").$.addFilterButton.focus() : a.classList.contains("sort-panel") && a.querySelector("jqx-sort-panel").$.inputNotSorted.focus())) }), 100) } _localizeHeader() { const e = this; e.$.customizeButton.firstElementChild.innerHTML = e.localize("customize"), e.$.groupButton && (e.$.groupButton.firstElementChild.innerHTML = e.localize("group")), 0 === e._appliedFiltering.filters.length ? e.$.filterButton.firstElementChild.innerHTML = e.localize("filter") : 1 === e._appliedFiltering.filters.length ? e.$.filterButton.firstElementChild.innerHTML = e.localize("filteredByOne") : e.$.filterButton.firstElementChild.innerHTML = e.localize("filteredByMultiple", { n: e._appliedFiltering.filters.length }), 0 === e._appliedSorting.dataFields.length ? e.$.sortButton.firstElementChild.innerHTML = e.localize("sort") : 1 === e._appliedSorting.dataFields.length ? e.$.sortButton.firstElementChild.innerHTML = e.localize("sortedByOne") : e.$.sortButton.firstElementChild.innerHTML = e.localize("sortedByMultiple", { n: e._appliedSorting.dataFields.length }), e.$.formatButton && (e.$.formatButton.firstElementChild.innerHTML = e.localize("formating")), e.$.searchInput.placeholder = e.localize("findInView") } _openHeaderDropDown(e) { const t = this, a = t.$.headerDropDown; "top" === t.headerPosition ? (a.style.bottom = null, a.style.top = "100%") : (a.style.top = null, a.style.bottom = "100%"), e !== t.$.searchButton || e === t.$.searchButton && t.rightToLeft ? a.style.left = e.offsetLeft - (t.rightToLeft ? a.offsetWidth - e.offsetWidth : 0) + "px" : a.style.left = (t.rightToLeft ? e.offsetLeft : e.offsetLeft + Math.max(25, e.offsetWidth) - a.offsetWidth) + "px", a.classList.remove("jqx-visibility-hidden"), a.classList.add("open"), a.controlledBy && (a.controlledBy.removeAttribute("aria-controls"), a.controlledBy.setAttribute("aria-expanded", !1)), a.controlledBy = e, e.setAttribute("aria-controls", a.id), e.setAttribute("aria-expanded", !0), t._headerDropDownTransitionendHandler() } _searchInputKeyupHandler(e) { const t = this; function a() { t._searchInfo && t.$.searchInput.value !== t._searchInfo.query && t._search(t.$.searchInput.value) } return clearTimeout(t._searchInputTimeout), "Escape" === e.key ? (t.$.searchInput.value = "", a(), void t.closePanel()) : "Enter" === e.key && t._searchInfo.foundIdsArray && t._searchInfo.foundIdsArray.length > 1 ? (a(), void t._headerClickHandler(t.$.searchNext, t.$.cardContainer || t.$.body)) : void (t._searchInputTimeout = setTimeout(a, 500)) } });
|
|
110
|
+
|
|
111
|
+
/***/
|
|
112
|
+
}),
|
|
113
|
+
|
|
114
|
+
/***/ 8588:
|
|
115
|
+
/***/ (() => {
|
|
116
|
+
|
|
117
|
+
JQX("jqx-input", class extends JQX.BaseElement { static get properties() { return { autoCompleteDelay: { value: 100, type: "number" }, dataSource: { type: "any", value: [], reflectToAttribute: !1 }, dropDownClassList: { value: [], type: "array", reflectToAttribute: !1 }, dropDownDataSource: { type: "any", reflectToAttribute: !1, value: [] }, dropDownHeight: { type: "any", value: 200 }, dropDownOpenMode: { allowedValues: ["default", "manual"], value: "default", type: "string" }, dropDownAppendTo: { value: null, type: "any" }, dropDownWidth: { type: "any", value: null }, dropDownButtonPosition: { allowedValues: ["none", "left", "right"], value: "none", type: "string" }, dropDownOpenPosition: { allowedValues: ["bottom", "top", "auto"], value: "bottom", type: "string" }, dropDownPlaceholder: { type: "string", value: "" }, hint: { type: "string", value: "" }, inputPurpose: { type: "string", value: "off" }, items: { type: "number", value: 8 }, minLength: { type: "number", value: 1 }, maxLength: { type: "number", value: 99999999 }, name: { value: "", type: "string" }, prefix: { value: "", type: "string", reflectToAttribute: !1 }, suffix: { value: "", type: "string", reflectToAttribute: !1 }, onAffixClick: { value: null, type: "any", reflectToAttribute: !1 }, opened: { value: !1, type: "boolean" }, query: { type: "string", value: "" }, queryMode: { allowedValues: ["contains", "containsIgnoreCase", "doesNotContain", "doesNotContainIgnoreCase", "equals", "equalsIgnoreCase", "startsWith", "startsWithIgnoreCase", "endsWith", "endsWithIgnoreCase"], type: "string", value: "containsIgnoreCase" }, placeholder: { value: "", type: "string" }, readonly: { type: "boolean", value: !1 }, sorted: { value: !1, type: "boolean" }, sortDirection: { value: "asc", type: "string" }, selectedIndex: { type: "number", value: -1 }, selectedValue: { type: "any", value: "" }, selectedValues: { value: [], type: "array" }, type: { type: "string" }, value: { type: "string", value: "" }, innerHTML: { type: "string", reflectToAttribute: !1 } } } static get styleUrls() { return ["jqx.textbox.css"] } template() { return '<div id="inputContainer" role="presentation"><div id="optionsContainer" inner-h-t-m-l=\'{{innerHTML}}\' class="jqx-hidden"></div><span class="jqx-input-prefix" id="prefix" inner-h-t-m-l=\'{{prefix}}\'></span><input maxlength=\'[[maxLength]]\' class="jqx-input" id=\'input\' readonly=\'[[readonly]]\' placeholder=\'[[placeholder]]\' type=\'[[type]]\' name=\'[[name]]\' value=\'{{value::keyup}}\' disabled=\'[[disabled]]\' aria-label="[[placeholder]]" /><span class="jqx-hidden jqx-hint" id="span">[[hint]]</span><span id="suffix" class="jqx-input-suffix" inner-h-t-m-l=\'{{suffix}}\'></span><div id="dropDownButton" tabindex=-1 class="jqx-drop-down-button" role="button" aria-label="Toggle popup"><div id="arrow" class="arrow" aria-hidden="true"></div></div></div>' } static get listeners() { return { "input.focus": "_focusHandler", "input.blur": "_blurHandler", "input.keydown": "_keyDownHandler", "input.keyup": "_keyUpHandler", "input.keypress": "_keyPressHandler", "input.paste": "_pasteHandler", "prefix.click": "_prefixClick", "suffix.click": "_suffixClick", "dropDownButton.down": "_dropDownButtonDownHandler", "inputContainer.down": "_downHandler", "document.up": "_documentUpHandler" } } _prefixClick(e) { const t = this; if (t.onAffixClick) if ("string" == typeof t.onAffixClick) { const o = t.onAffixClick.replace("()", ""); window[o] && window[o].apply(t, e) } else t.onAffixClick(e) } _suffixClick(e) { const t = this; if ("string" == typeof t.onAffixClick) { const o = t.onAffixClick.replace("()", ""); window[o] && window[o].apply(t, e) } else t.onAffixClick(e) } get selectedIndexes() { return this.isCompleted ? [this.selectedIndex] : [] } set selectedIndexes(e) { if (!this.isCompleted) return; const t = this; if (e && void 0 !== e[0]) { if (this.selectedIndex = e[0], null === this.dataSource) return; const o = this.dataSource[this.selectedIndex]; if (!o) return; const a = this.context; this.context = this, this.$.input.dataValue = this.selectedValue = "string" == typeof o ? o : o.value, this.setAttribute("data-value", this.$.input.dataValue); let l = t.dataSource; "string" == typeof l && (l = t.$.deserialize(l, "array")); for (let e = 0; e < l.length; e++) { let o = l[e]; "string" != typeof o && "number" != typeof o && (o.value === t.$.input.dataValue ? o.selected = !0 : o.selected = !1) } this.context = a } else { const e = this.context; this.context = this, this.$.input.dataValue = this.selectedValue = "", this.setAttribute("data-value", this.$.input.dataValue), this.selectedIndex = -1; let o = t.dataSource; if ("string" == typeof o && (o = t.$.deserialize(o, "array")), o && Array.isArray(o)) for (let e = 0; e < o.length; e++) { let a = o[e]; "string" != typeof a && (a.value === t.$.input.dataValue ? a.selected = !0 : a.selected = !1) } this.context = e } } focus() { this.$.input.focus() } select() { const e = this; e.readonly ? e.$.input.focus() : e.$.input.select() } _documentUpHandler(e) { const t = this, o = t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; o !== t && o !== t.$.dropDownButton && o !== t.$.input && o !== t.$.arrow ? t.$.scrollView.contains(o.shadowParent || o) ? t._isPointerDown && (t._isPointerDown = !1, t.opened && (t._preventLookup = !0), t.$.input.focus()) : (t.opened && (t._preventLookup = !0), "manual" === t.dropDownOpenMode || t._isPointerDown || t.close(), t._isPointerDown = !1) : t._isPointerDown = !1 } _focusHandler() { const e = this; e.setAttribute("focus", ""), e.readonly || 0 !== e.minLength || 0 !== e.$.input.value.length || e._preventLookup ? (e.$.fireEvent("focus"), delete e._preventLookup) : e._lookup() } _blurHandler() { const e = this; e.opened || e.removeAttribute("focus"), e.opened || e.$.fireEvent("blur"), e._refreshSelectedIndex(), delete e._preventLookup } _pasteHandler(e) { const t = this, o = t.$.input, a = o.value, l = o.selectionStart, r = o.selectionEnd; if (!e.clipboardData && !window.clipboardData) return; const n = (e.clipboardData || window.clipboardData).getData("text"); let i = a.slice(0, l) + n, s = i.length; i += a.slice(r), t.setAttribute("data-value", i), o.setSelectionRange(s, s), t._refreshSelectedIndex() } _refreshSelectedIndex() { const e = this; let t = e.dataSource; if (t) { let o = -1, a = null; if (e.dataSource instanceof Promise) return; if ("function" == typeof e.dataSource) return; "string" == typeof t && (t = e.$.deserialize(t, "array")); for (let l = 0; l < t.length; l++) { let r = t[l]; if ("number" != typeof r && "boolean" != typeof r || (r = "" + r), "string" == typeof r) { if (r === e.value) { o = l, a = e.value; break } } else r && (delete r.selected, r.label === e.value && (o = l, a = r.value, r.selected = !0)) } e.set("selectedIndex", o, !1), e.set("selectedValue", a, !1), -1 === e.selectedIndex && (e.$.input.dataValue = null) } } selectItem(e) { const t = this; let o = t.dataSource; if ("string" == typeof o && (o = t.$.deserialize(o, "array")), o) for (let a = 0; a < o.length; a++) { const l = o[a]; if (t.set("selectedIndex", -1), t.set("value", ""), t.$.input.dataValue = null, "string" == typeof l) { if (l === e) return t.set("selectedIndex", a, !1), t.set("value", t.$.input.dataValue = e), void t.setAttribute("data-value", t.$.input.dataValue) } else if (l.value === e) return t.set("selectedIndex", a, !1), t.set("value", l.label), t.$.input.dataValue = e, void t.setAttribute("data-value", t.$.input.dataValue) } else t.set("value", t.$.input.dataValue = e), t.setAttribute("data-value", t.$.input.dataValue), t.set("selectedIndex", -1, !1) } getItem(e) { const t = this; if (t.dataSource) for (let o = 0; o < t.dataSource.length; o++) { const a = t.dataSource[o]; if (a.value === e) return a } return null } getPrevItem() { const e = this, t = e.getSelectedItem(); if (e.dataSource && t) for (let o = 0; o < e.dataSource.length; o++)if (e.dataSource[o].value === t.value) return e.dataSource[o - 1]; return null } getNextItem() { const e = this, t = e.getSelectedItem(); if (e.dataSource && t) for (let o = 0; o < e.dataSource.length; o++)if (e.dataSource[o].value === t.value) return e.dataSource[o + 1]; return null } getSelectedItem() { const e = this; return e.dataSource && 0 === e.dataSource.length ? { label: e.value, value: e.$.input.dataValue ? e.$.input.dataValue : e.value } : { label: e.value, value: void 0 !== e.$.input.dataValue ? e.$.input.dataValue : e.value } } _refreshMenu() { const e = this; e.$.menu.classList.remove("scroll"), e.$.scrollView.computedVerticalScrollBarVisibility && e.$.menu.classList.add("scroll") } _fromHTMLEntities(e) { const t = this, o = t._textArea ? t._textArea : document.createElement("textarea"); return o.innerHTML = e, t._textArea = o, o.value } _performSelect() { const e = this, t = e.$.menu.querySelector(".active"); let o = "", a = ""; t && (o = t.getAttribute("data-label"), o = e._fromHTMLEntities(o), a = t.dataValue); let l = e.value, r = e.$.input.dataValue; e.set("value", o), e.$.input.dataValue = a, e.setAttribute("data-value", a), t && e.set("selectedIndex", t.index), e.set("selectedValues", [e.$.input.dataValue]), e.set("selectedValue", e.$.input.dataValue); let n = e.dataSource; if ("string" == typeof n && (n = e.$.deserialize(n, "array")), n && Array.isArray(n)) for (let t = 0; t < n.length; t++) { let o = n[t]; "string" != typeof o && "number" != typeof o && (o.value === e.$.input.dataValue ? o.selected = !0 : o.selected = !1) } e.close(), o === l && a === r || (e.$.fireEvent("change", { value: a, label: o, oldValue: r, oldLabel: l }), e._updateTargetValue()) } _open() { const e = this; if (e.opened) return; const t = window.scrollX, o = window.scrollY; let a = e.getBoundingClientRect(), l = 0, r = 0; if (e.timer && clearTimeout(e.timer), e.getRootNode() && e.getRootNode().host) e.getRootNode().host.shadowRoot.appendChild(e.$.scrollView); else if (e.dropDownAppendTo) { if ("body" === e.dropDownAppendTo || e.dropDownAppendTo === document.body) document.body.appendChild(e.$.scrollView); else if (e.dropDownAppendTo instanceof HTMLElement) e.dropDownAppendTo.appendChild(e.$.scrollView); else if ("string" == typeof dropDownAppendTo) { let t = document.getElementById(e.dropDownAppendTo); t instanceof HTMLElement ? t.appendChild(e.$.scrollView) : document.body.appendChild(e.$.scrollView) } } else document.body.appendChild(e.$.scrollView); if (e.setAttribute("aria-owns", e.$.scrollView.id), e.readonly || e.$.input.setAttribute("aria-controls", e.$.scrollView.id), e.$.scrollView.enableShadowDOM && !e._importedStyle && (e.$.scrollView.importStyle(e._getStyleUrl("jqx.textbox.css")), e._importedStyle = !0), "static" !== getComputedStyle(document.body).position) { const e = document.body.getBoundingClientRect(); l = e.left, r = e.top } if (e.$.scrollView.style.setProperty("--jqx-input-drop-down-menu-width", ""), e.$.scrollView.style.left = -3 + a.left + t - l + "px", e.$.scrollView.classList.remove("open"), e.$.scrollView.removeAttribute("top"), "bottom" === e.dropDownOpenPosition) e.$.scrollView.style.top = a.bottom + o - r + 1 + "px"; else if ("top" === e.dropDownOpenPosition) e.$.scrollView.style.top = a.top - e.$.scrollView.offsetHeight + o - r - 2 + "px", e.$.scrollView.setAttribute("top", ""); else if ("auto" === e.dropDownOpenPosition) { e.$.scrollView.style.top = a.bottom + o - r + 1 + "px"; const t = a.top - e.$.scrollView.offsetHeight + o - r - 2; window.innerHeight < parseInt(e.$.scrollView.style.top) + e.$.scrollView.offsetHeight - o ? t >= 0 && (e.$.scrollView.style.top = t + "px", e.$.scrollView.setAttribute("top", "")) : e.$.scrollView.style.top = a.bottom + o - r + 1 + "px" } if (e.dropDownAppendTo && "body" !== e.dropDownAppendTo) { e.$.scrollView.style.position = "absolute", e.$.scrollView.style.width = "auto", e.$.scrollView.style.height = "auto"; const t = e.$.scrollView.parentNode.getBoundingClientRect(); e.$.scrollView.style.top = a.bottom - t.top + "px", "top" === e.dropDownOpenPosition && (e.$.scrollView.style.top = a.top - t.top - e.$.scrollView.offsetHeight + "px"), e.$.scrollView.style.left = -3 + a.left - t.left + "px", e.dropDownHeight && (e.$.scrollView.style.height = e.dropDownHeight), e.dropDownWidth && (e.$.scrollView.style.width = e.dropDownWidth) } e.opening = !0, e._positionTimer && clearInterval(e._positionTimer), e.dropDownAppendTo || (e._positionTimer = setInterval((() => { const t = e.getBoundingClientRect(); if (e.opening) e.opening = !1, a = t; else if (Math.abs(parseInt(t.top) - parseInt(a.top)) >= 10 || Math.abs(parseInt(t.left) - parseInt(a.left)) >= 10) { const o = window.scrollX, a = window.scrollY; return e.$.scrollView.style.left = -3 + t.left + o - l + "px", void ("bottom" === e.dropDownOpenPosition ? e.$.scrollView.style.top = t.bottom + a - r + 1 + "px" : "top" === e.dropDownOpenPosition ? e.$.scrollView.style.top = t.top - e.$.scrollView.offsetHeight + a - r + 1 + "px" : "auto" === e.dropDownOpenPosition && (e.$.scrollView.removeAttribute("top"), e.$.scrollView.style.top = t.bottom + a - r + 1 + "px", window.innerHeight < parseInt(e.$.scrollView.style.top) + e.$.scrollView.offsetHeight - a ? (e.$.scrollView.style.top = t.top - e.$.scrollView.offsetHeight + a - r + 1 + "px", e.$.scrollView.setAttribute("top", "")) : e.$.scrollView.style.top = t.bottom + a - r + 1 + "px")) } }), 50)), e.$.scrollView.onpointerdown = function (t) { e._isPointerDown = !0, t.stopPropagation(), t.preventDefault() }, requestAnimationFrame((function () { const t = e.dropDownWidth; if (e.$.scrollView.refresh && e.$.scrollView.refresh(), e._refreshMenu(), e.$.scrollView.setAttribute("open", ""), e.setAttribute("open", ""), e.$.dropDownButton.setAttribute("open", ""), e.$.input.setAttribute("open", ""), t && "string" == typeof t && -1 !== t.indexOf("%")) { const o = parseFloat(t) / 100; e.$.scrollView.style.setProperty("--jqx-input-drop-down-menu-width", e.offsetWidth * o + "px") } else if ("auto" !== t && t) e.$.scrollView.style.setProperty("--jqx-input-drop-down-menu-width", parseFloat(t) + "px"); else if ("auto" === t) { if (e.$.scrollView.style.setProperty("--jqx-input-drop-down-menu-width", ""), e.$.scrollView.$.scrollViewerContainer.classList.contains("vscroll")) { const t = e.$.scrollView.offsetWidth + parseFloat(getComputedStyle(e.$.scrollView).getPropertyValue("--jqx-scroll-bar-size")); e.$.scrollView.style.setProperty("--jqx-input-drop-down-menu-width", t + "px") } } else { e.$.menu.style.width = "auto"; let t = e.$.menu.offsetWidth; const o = e.$.menu.querySelectorAll("li"); for (let t = 0; t < o.length; t++)e._maxDropDownWidth = Math.max((o[t].firstElementChild || o[t]).offsetWidth, e._maxDropDownWidth); e.$.scrollView.computedVerticalScrollBarVisibility && (t += e.$.scrollView.$ && e.$.scrollView.$.verticalScrollBar ? e.$.scrollView.$.verticalScrollBar.offsetWidth : 30), e.$.scrollView.style.setProperty("--jqx-input-drop-down-menu-width", Math.max(t, e.offsetWidth - 8) + "px"), e.$.menu.style.width = "" } (e.shadowRoot || e.isInShadowDOM) && e.$.scrollView._scrollView && JQX.ScrollBar && requestAnimationFrame((() => { e.$.scrollView._scrollView && e.$.scrollView._scrollView.vScrollBar.refresh() })) })), e.$.scrollView.refresh && e.$.scrollView.refresh(), e._refreshMenu(), e.set("opened", !0), e.setAttribute("aria-expanded", !0), e.$.fireEvent("open") } close() { const e = this; return !!e.opened && (e.timer && clearTimeout(e.timer), e.timer = setTimeout((function () { e.$.scrollView.parentNode && !e.opened && (e.$.scrollView.remove(), e.removeAttribute("aria-owns"), e.readonly || e.$.input.removeAttribute("aria-controls")) }), 1e3), e._positionTimer && clearInterval(e._positionTimer), e.$.scrollView.removeAttribute("open"), e.$.dropDownButton.removeAttribute("open"), e.$.input.removeAttribute("open"), e.removeAttribute("open"), e.set("opened", !1), e.setAttribute("aria-expanded", !1), e.$.input.focus(), e.$.fireEvent("close"), !0) } refresh() { const e = this; e.$.scrollView.refresh && e.$.scrollView.refresh(), e._getDataSourceFromOption(), e.close() } _lookup(e) { const t = this; t.query = t.$.input.value; const o = t.context; if (t.context = t, t.selectedIndex = -1, t.selectedValue = null, t.context = o, t.$.input.readonly && (t._incrementalSearchQuery || (t._incrementalSearchQuery = ""), t._incrementalSearchQuery += e.key, t._incrementalSearchTimer && clearTimeout(t._incrementalSearchTimer), t.query = t._incrementalSearchQuery, t._incrementalSearchTimer = setTimeout((function () { t._incrementalSearchQuery = "" }), 700)), t.query.length < t.minLength) return void t.close(); const a = function (e) { clearTimeout(t._autoCompleteTimeout), t._autoCompleteTimeout = setTimeout((() => { const o = t.context; t.context = t, t._process(e), t.context = o }), t.autoCompleteDelay) }; "function" == typeof t.dataSource ? t.dataSource(t.query, a) : a(t.dataSource) } _downHandler(e) { const t = this; t.readonly && t._dropDownButtonDownHandler(e) } _dropDownButtonDownHandler(e) { const t = this; return "manual" !== t.dropDownOpenMode && (t._toggle(), t.focus()), e.preventDefault(), e.stopPropagation(), e.originalEvent.preventDefault(), e.originalEvent.stopPropagation(), t._isPointerDown = !0, !1 } _toggle() { const e = this; e.opened ? e.close() : e.open() } open() { const e = this; function t(t) { e._process(t); const o = e.$.menu.querySelector(".active"); if (o) { const t = e.$.input.dataValue; for (let a = 0; a < e.$.menu.children.length; a++) { const l = e.$.menu.children[a], r = l.getAttribute("data-label"), n = l.dataValue; if (void 0 !== t && n === t || void 0 === t && r === e.$.input.value) { o.classList.remove("active"), l.classList.add("active"), e._setActiveDescendant(l), e.$.input.dataValue = n, e.setAttribute("data-value", n); break } } } e.ensureVisible(), e.$.input.focus(), setTimeout((function () { e.$.input.focus() }), 25) } e.dropDownDataSource && (Array.isArray(e.dropDownDataSource) && e.dropDownDataSource.length > 0 || "function" == typeof e.dropDownDataSource) ? (e.query = "", "function" == typeof e.dropDownDataSource ? e.dropDownDataSource(e.query, t) : t(e.dropDownDataSource)) : (e.query = "", "function" == typeof e.dataSource ? e.dataSource(e.query, t) : t(e.dataSource)) } _process(e) { const t = this; "string" == typeof e && (e = t.$.deserialize(e, "array")), e = t.readonly ? e.filter((function () { return !0 })) : e.filter((function (e) { return "" === e || (t.matcher ? t.matcher(e) : t._matcher(e)) })), e = t._sorter(e), t.sorted && (e.sort(((e, t) => void 0 !== e.label ? e.label.localeCompare(t.label) : e.localeCompare(t))), "desc" === t.sortDirection && e.reverse()), !e.length && t.opened && t.close(), 0 === e.length && !0 !== t.allowItemsAdd && "" === t.dropDownPlaceholder || (t.query.length > 0 ? t._render(e.slice(0, t.items)) : t._render(e), t._open(), t.$.scrollView.refresh && t.$.scrollView.refresh(), t._refreshMenu(), t.ensureVisible()) } _matcher(e) { const t = this.query; switch (null === e && (e = "null"), e = "" + (e = e.label || e), this.queryMode) { case "startsWith": return e.startsWith(t); case "startsWithIgnoreCase": return e.toLowerCase().startsWith(t.toLowerCase()); case "doesNotContain": return e.indexOf(t) < 0; case "doesNotContainIgnoreCase": return e.toLowerCase().indexOf(t.toLowerCase()) < 0; case "contains": return e.indexOf(t) > -1; default: case "containsIgnoreCase": return ~e.toLowerCase().indexOf(t.toLowerCase()); case "equals": return 0 === e.localeCompare(t); case "equalsIgnoreCase": return 0 === e.toLowerCase().localeCompare(t.toLowerCase()); case "endsWith": return e.endsWith(t); case "endsWithIgnoreCase": return e.toLowerCase().endsWith(t.toLowerCase()) } } _sorter(e) { const t = this; let o, a = [], l = [], r = []; if (e && "" === e[0]) return e; for (; o = e.shift();) { let e = o.label || o; e = "" + e, e.toLowerCase().indexOf(t.query.toLowerCase()) ? ~e.indexOf(t.query) ? l.push(o) : r.push(o) : a.push(o) } return a.concat(l, r) } _highlighter(e) { const t = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); return this.query ? e.replace(new RegExp("(" + t + ")", "ig"), (function (e, t) { return "<strong>" + t + "</strong>" })) : e } _render(e) { const t = this; let o = 0, a = -1, l = null; const r = e.map((function (e) { let r = e, n = e; "object" == typeof e && (r = e.label, n = void 0 !== e.value ? e.value : r), r = "" + r, r = r.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, """); const i = document.createElement("li"), s = document.createElement("a"); if (s.href = "javascript:void(0)", i.id = t.id + "Item" + Math.floor(65536 * (1 + Math.random())).toString(16).substring(1), i.setAttribute("data-label", r), i.index = o++, i.dataValue = n, "string" == typeof n ? i.setAttribute("value", n) : i.setAttribute("value", JSON.stringify(n)), i.setAttribute("role", "option"), i.setAttribute("aria-label", r), void 0 !== e.menuLabel ? (r = e.menuLabel, s.innerHTML = r) : s.innerHTML = t.highlighter ? t.highlighter(r) : t._highlighter(r), s.setAttribute("aria-hidden", !0), e.disabled && i.classList.add("jqx-disabled"), e.icon && (s.classList.add("icon"), s.classList.add(e.icon)), e.prefix) { const t = document.createElement("span"); t.innerHTML = e.prefix, s.classList.add("has-prefix"), s.innerHTML = t.innerHTML + s.innerHTML } if (e.suffix) { const t = document.createElement("span"); t.innerHTML = e.suffix, s.classList.add("has-suffix"), s.innerHTML = s.innerHTML + t.innerHTML } if (e.dataset) for (let t in e.dataset) i.setAttribute("data-" + t, e.dataset[t]); if (e.className) { const t = e.className.split(" "); for (let e = 0; e < t.length; e++)i.classList.add(t[e].trim()) } return void 0 !== t.selectedValue && void 0 !== e.value && "" !== t.selectedValue && t.selectedValue === e.value && (e.selected = !0, l = e, a = i.index, i.classList.add("active")), i.appendChild(s), i })); function n() { const e = t.$.menu.getElementsByClassName("active"); e[0] && e[0].classList.remove("active"), this.classList.add("active"), t._setActiveDescendant(this) } -1 === a && r.length > 0 && (r[0].classList.add("active"), t._setActiveDescendant(r[0])), l && (t.$.input.value = l.label, t.$.input.dataValue = l.value, t.setAttribute("data-value", t.$.input.dataValue)), t.$.menu.innerHTML = "", 0 === r.length && t.dropDownPlaceholder && (t.$.menu.innerHTML = '<div class="jqx-flex jqx-truncate jqx-quiet" style="padding:10px; align-items: center;">' + t.dropDownPlaceholder + "</div>"); for (let e = 0; e < r.length; e++) { const o = r[e]; t.$.menu.appendChild(o), o.onmouseenter = n, o.onmouseleave = function () { this.classList.remove("active"), t._setActiveDescendant(null) }, o.onclick = n } } ensureVisible() { const e = this, t = e.$.menu.querySelector(".active"); t && (t.offsetTop + t.offsetHeight >= e.$.scrollView.scrollTop + e.$.scrollView.offsetHeight && (e.$.scrollView.scrollTop = t.offsetTop + t.offsetHeight), (t.offsetTop <= e.$.scrollView.scrollTop || t.offsetTop >= e.$.scrollView.scrollTop + e.$.scrollView.offsetHeight) && (e.$.scrollView.scrollTop = t.offsetTop), 0 === [...e.$.menu.children].indexOf(t) ? e.$.scrollView.scrollTop = 0 : [...e.$.menu.children].indexOf(t) === e.$.menu.children.length - 1 && (e.$.scrollView.scrollTop = e.$.scrollView.scrollHeight)) } _next() { const e = this, t = e.$.menu.querySelector(".active"); if (!t) { const t = e.$.menu.firstElementChild; return t.classList.add("active"), void e._setActiveDescendant(t) } t.classList.remove("active"); let o = t.nextElementSibling; o || (o = e.$.menu.firstElementChild), o.classList.add("active"), e._setActiveDescendant(o), e.ensureVisible() } _prev() { const e = this, t = e.$.menu.querySelector(".active"); if (!t) { const t = e.$.menu.firstElementChild; return t.classList.add("active"), void e._setActiveDescendant(t) } t.classList.remove("active"); let o = t.previousElementSibling; o || (o = e.$.menu.lastElementChild), o.classList.add("active"), e._setActiveDescendant(o), e.ensureVisible() } _move(e) { const t = this; if (t.readonly && !t.opened) { if ("ArrowUp" === e.key) { const o = t.getPrevItem(); o && t.selectItem(o.value), e.preventDefault() } if ("ArrowDown" === e.key) { const o = t.getNextItem(); o && t.selectItem(o.value), e.preventDefault() } } if (t.opened) { switch (e.keyCode) { case 9: case 13: case 27: e.preventDefault(); break; case 38: e.preventDefault(), t._prev(); break; case 40: e.preventDefault(), t._next() }e.stopPropagation() } } _keyDownHandler(e) { const t = this; if (t._suppressKeyPressRepeat = ![40, 38, 9, 13, 27, 16, 17, 18].includes(e.keyCode), t._oldValue = t.$.input.value, !(e.shiftKey || e.altKey || e.ctrlKey)) return t.opened && "Escape" === e.key ? (t.close(), e.stopPropagation(), void e.preventDefault()) : void t._move(e) } _keyPressHandler(e) { this._suppressKeyPressRepeat || e.shiftKey || e.altKey || e.ctrlKey || this._move(e) } _keyUpHandler(e) { const t = this; if (!(e.shiftKey || "F2" === e.key || "a" === e.key && e.ctrlKey)) switch (e.keyCode) { case 40: case 38: case 16: case 17: case 18: 40 === e.keyCode && e.altKey && t.open(), 38 === e.keyCode && e.altKey && t.close(); break; case 9: case 13: if (!t.opened) return; t._performSelect(), e.stopPropagation(), e.preventDefault(); break; case 27: if (!t.opened) return; t.close(), e.stopPropagation(), e.preventDefault(); break; default: if (t._lookup(e), !t.opened || e.ctrlKey || e.shiftKey || (e.stopPropagation(), e.preventDefault()), t.$.fireEvent("changing", { value: t.$.input.value, oldValue: t._oldValue }), t.dataSource && t.dataSource.length) for (let e = 0; e < t.dataSource.length; e++) { const o = t.dataSource[e]; if ("string" == typeof o) { if (o === t.$.input.value) { t.$.input.dataValue = t.$.input.value, t.setAttribute("data-value", t.$.input.dataValue); break } } else if (void 0 !== o.label && o.label === t.$.input.value) { t.$.input.dataValue = o.value, t.setAttribute("data-value", o.value); break } } else t.$.input.dataValue = t.$.input.value, t.setAttribute("data-value", t.$.input.dataValue); t._updateTargetValue() } } propertyChangedHandler(e, t, o) { super.propertyChangedHandler(e, t, o); const a = this; if ("innerHTML" === e && (a._getDataSourceFromOption(), a._setSelection(!1)), "selectedValue" === e) { let e = -1; if (a.dataSource && Array.isArray(a.dataSource) && a.dataSource.forEach(((t, a) => { "string" == typeof t ? t === o && (e = a) : t && t.value === o && (e = a) })), e >= 0) { const t = a.context; a.context = a, a.selectedIndex = e, a.context = t } a._setSelection() } if ("selectedIndex" === e) { let e = a.dataSource; if (a.selectedValue = null, e && Array.isArray(e)) for (let t = 0; t < e.length; t++) { let o = e[t]; "string" != typeof o && "number" != typeof o && (o.selected = !1) } a._setSelection() } else if ("dataSource" === e) { if (a.dataSource && Array.isArray(a.dataSource)) { let e = -1; if (a.dataSource.forEach(((t, o) => { t.selected && (e = o) })), e >= 0) { const t = a.context; a.context = a, a.selectedIndex = e, a.context = t } } a._setSelection(!1) } else if ("dropDownClassList" === e) { const e = a.$.scrollView; for (let o = 0, a = t.length; o < a; o += 1)e.classList.remove(t[o]); for (let t = 0, a = o.length; t < a; t += 1)e.classList.add(o[t]) } else if ("dropDownHeight" === e) "auto" !== a.dropDownHeight ? a.$.scrollView.style.setProperty("--jqx-input-drop-down-menu-height", a.dropDownHeight + "px") : a.$.scrollView.style.setProperty("--jqx-input-drop-down-menu-height", "auto"); else if ("opened" === e) a.opened = t, o ? a.open() : a.close(); else if ("placeholder" === e) { if (a.readonly) { const e = a.getAttribute("aria-label"); if (e && e !== t) return; o ? a.setAttribute("aria-label", o) : a.removeAttribute("aria-label") } } else if ("selectedValues" === e) if (null === o) a.$.input.value = "", a.$.input.dataValue = o, a.setAttribute("data-value", o), a._refreshSelectedIndex(); else { const e = o.join(","), t = a.value; if (a.$.input.dataValue = e, e && -1 === e.indexOf(",")) { let e = -1, t = o[0]; if (a.dataSource && Array.isArray(a.dataSource) && a.dataSource.forEach(((a, l) => { "string" == typeof a ? a !== o && a !== t || (e = l) : a && a.value === t && (e = l) })), e >= 0) { const t = a.context; a.context = a, a.selectedIndex = e, a.context = t } } a._setSelection(), a.propertyChangedHandler("value", t, a.value) } else "value" === e ? (a.displayMember !== a.valueMember && "string" != typeof o ? (a.set("value", o[a.displayMember]), a.$.input.dataValue = o[a.valueMember], a.setAttribute("data-value", a.$.input.dataValue)) : (a.$.input.value = a.$.input.dataValue = o, a.setAttribute("data-value", o)), a._refreshSelectedIndex()) : "readonly" === e ? (a._setAriaRelations(), a._setInputPurpose()) : "theme" === e || "rightToLeft" === e ? a.$.scrollView[e] = o : "inputPurpose" === e ? a._setInputPurpose() : "inverted" === e ? o ? a.$.scrollView.setAttribute("inverted", "") : a.$.scrollView.removeAttribute("inverted") : "disabled" !== e && "unfocusable" !== e || a._setFocusable() } _updateTargetValue() { const e = this; if (e.dataset.target) { const t = document.querySelector(e.dataset.target); if (t) { const o = e.dataset.property, a = e.value; o && void 0 !== t[o] && (t[o] = a) } } } detached() { super.detached(), this.close(), this.removeAttribute("focus") } _getDataSourceFromOption() { const e = this; if (e.innerHTML.indexOf("<option") >= 0) { e.$.optionsContainer.innerHTML = e.innerHTML.trim(); const t = e.querySelectorAll("option"); let o = []; for (let e = 0; e < t.length; e++) { const a = t[e], l = a.hasAttribute("selected") || a.hasAttribute("is-selected") && "false" !== a.getAttribute("is-selected"); let r = ("" + a.textContent).trim(); const n = ("" + a.innerHTML).trim(), i = a.hasAttribute("value") ? a.getAttribute("value") : r, s = a.hasAttribute("disabled"), u = a.hasAttribute("label") ? a.getAttribute("label") : null; u && (r = u), o.push({ label: r, menuLabel: n, value: i, disabled: s, selected: l, className: a.className, dataset: a.dataset }), a.classList.add("jqx-hidden") } e.dataSource = o } } render() { const e = this, t = e.dropDownClassList; if (e._getDataSourceFromOption(), e.selectedValues && e.selectedValues.length) { const t = e.selectedValues.join(","); e.value = t } e._createElement && e._createElement(); const o = e.$.scrollView; for (let e = 0, a = t.length; e < a; e += 1)o.classList.add(t[e]); e.opened && (e.opened = !1, e.open()); const a = e.$.menu; a && (a.setAttribute("role", "presentation"), o.appendChild(a)), "auto" !== e.dropDownHeight ? o.style.setProperty("--jqx-input-drop-down-menu-height", e.dropDownHeight + "px") : o.style.setProperty("--jqx-input-drop-down-menu-height", "auto"), o.classList.add("jqx-input-drop-down-menu"); for (let t = 0; t < e.classList.length; t++) { const a = e.classList[t]; "jqx-element" !== a && "jqx-input" !== a && o.classList.add(a + "-drop-down-menu") } o.id = e.id + "_" + e.tagName.toLowerCase() + "_menu_" + Math.floor(65536 * (1 + Math.random())).toString(16).substring(1), o.ownerElement = e; let l = e.dataSource; if ("string" == typeof l && (l = e.$.deserialize(l, "array")), l && l.length && Array.isArray(l)) { let t = -1; if (l.forEach(((e, o) => { e.selected && (t = o) })), t >= 0) { e.selectedIndex = t; const o = l[t]; e.selectedValue = "string" == typeof o ? l[t] : l[t].value } } e._setAriaRelations(), e._setInputPurpose(), e._setSelection(), e.isInitialized = !0, e.hasAttribute("tabindex") && (e.readonly || (e.$.input.setAttribute("tabindex", e.getAttribute("tabindex")), e.removeAttribute("tabindex"))), super.render() } _setSelection(e) { const t = this; let o = t.dataSource; if ("string" == typeof o && (o = t.$.deserialize(o, "array")), t.selectedIndex >= 0 && o && o.length > 0) { let a = o[t.selectedIndex]; if ("number" != typeof a && "boolean" != typeof a || (a = "" + a), "string" == typeof a) { let o = t.$.input.dataValue, l = t.value; t.set("value", a), t.$.input.dataValue = a, t.$.input.setAttribute("data-value", a), t.selectedValues = [t.$.input.dataValue], t.isInitialized && !1 !== e && (t.$.fireEvent("change", { value: t.value, label: t.label, oldValue: o, oldLabel: l }), t._updateTargetValue()) } else { let o = t.$.input.dataValue, l = t.value; a && (void 0 !== a.value ? (t.set("value", void 0 !== a.value ? a.value + "" : ""), t.$.input.dataValue = a.value, t.$.input.setAttribute("data-value", a.value), t.selectedValues = [t.$.input.dataValue]) : a.label && (t.selectedValues = [a.value]), a.label && t.set("value", a.label)), t.isInitialized && !1 !== e && (t.$.fireEvent("change", { value: t.$.input.dataValue, label: a.value, oldValue: o, oldLabel: l }), t._updateTargetValue()) } } } _createElement() { const e = this, t = document.createElement("ul"), o = document.createElement("jqx-scroll-viewer"); o.rightToLeft = e.rightToLeft, o.theme = e.theme, o.horizontalScrollBarVisibility = "hidden", e.inverted ? o.setAttribute("inverted", "") : o.removeAttribute("inverted"), e.$.scrollView = o, e.$.menu = t, e._setFocusable(); const a = e.$.input; e.$.menu.onpointerdown = function (t) { const o = t.target.closest("li"); t.stopPropagation(), t.preventDefault(), setTimeout((() => { e._performSelect(), o && o.parentNode && e.$.fireEvent("itemClick", { index: [...o.parentNode.children].indexOf(o), item: o, label: o.getAttribute("aria-label"), value: o.dataValue }), a.focus() }), 50) }, e.$.menu.onpointerup = function (e) { e.stopPropagation(), e.preventDefault() } } _setAriaRelations() { const e = this, t = e.getAttribute("aria-label"); e.readonly ? (e.setAttribute("role", "button"), !t && e.placeholder && e.setAttribute("aria-label", e.placeholder), e.removeAttribute("aria-readonly"), e.$.input.setAttribute("aria-hidden", !0), e.$.input.removeAttribute("aria-activedescendant"), e.$.input.removeAttribute("aria-controls"), e.$.dropDownButton.setAttribute("aria-hidden", !0)) : (e.setAttribute("role", "combobox"), t && t === e.placeholder && e.removeAttribute("aria-label"), e.$.input.setAttribute("role", "searchbox"), e.$.input.removeAttribute("aria-hidden", !0), e.$.dropDownButton.removeAttribute("aria-hidden")), e.setAttribute("aria-expanded", e.opened), e.setAttribute("aria-haspopup", "listbox"), e.setAttribute("aria-owns", e.$.scrollView.id), e.$.scrollView.setAttribute("role", "listbox") } _setActiveDescendant(e) { const t = this; t.readonly || (e ? t.setAttribute("aria-activedescendant", e.id) : t.removeAttribute("aria-activedescendant")) } _setInputPurpose() { const e = this; e.readonly ? e.$.input.removeAttribute("autocomplete") : e.$.input.setAttribute("autocomplete", e.inputPurpose) } _setFocusable() { const e = this; e.disabled || e.unfocusable ? e.$.input.setAttribute("tabindex", -1) : e.$.input.removeAttribute("tabindex") } });
|
|
118
|
+
|
|
119
|
+
/***/
|
|
120
|
+
}),
|
|
121
|
+
|
|
122
|
+
/***/ 5707:
|
|
123
|
+
/***/ (() => {
|
|
124
|
+
|
|
125
|
+
JQX("jqx-list-item", class extends JQX.ContentElement { static get properties() { return { alternationIndex: { value: -1, type: "int" }, color: { value: "", type: "string" }, displayMode: { allowedValues: ["plain", "checkBox", "radioButton"], value: "plain", type: "string" }, grouped: { value: !1, type: "boolean" }, selected: { value: !1, type: "boolean" }, value: { value: "", type: "string" }, label: { value: "", type: "string" }, details: { value: "", type: "string" }, group: { value: "", type: "string" }, hidden: { value: !1, type: "boolean" }, readonly: { value: !1, type: "boolean" } } } get hasStyleObserver() { return !1 } get enableShadowDOM() { return !1 } get _focused() { const e = this; return void 0 === e.__focused && (e.__focused = !1), e.__focused } set _focused(e) { const t = this; t.__focused = e, e ? (t.setAttribute("focus", ""), t.ownerListBox && t.ownerListBox.ownerElement && JQX.ComboBox && t.ownerListBox.ownerElement instanceof JQX.ComboBox && t.ownerListBox.ownerElement.$.input.setAttribute("aria-activedescendant", t.id)) : t.removeAttribute("focus") } template() { return '<div id="container">\n <span id=\'itemInput\' class=\'jqx-input jqx-hidden\'></span>\n <span class="jqx-overlay" id="overlay"></span>\n <div id="itemContainer" class="jqx-content jqx-list-item-container"><span class="jqx-content-label" inner-h-t-m-l=\'[[innerHTML]]\' role="presentation"><content></content></span><span inner-h-t-m-l=\'[[details]]\' id="details" class="jqx-content-details"></span></div>\n </div>' } appendChild(e) { const t = this; if (!t.isCompleted || e.classList && e.classList.contains("jqx-ripple")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } window.jqxBlazor ? t.$.itemContainer.appendChild(e) : (t.$.itemContainer.innerHTML = "", e instanceof HTMLElement && t.$.itemContainer.appendChild(e)) } insertBefore(e, t) { const i = this; if (!i.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.insertBefore.apply(i, e.concat(Array.prototype.slice.call(arguments))) } t.parentNode.insertBefore(e, t) } removeChild(e) { const t = this; if (!t.isCompleted || e.classList.contains("jqx-ripple")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.removeChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e instanceof HTMLElement && t.$.itemContainer.removeChild(e) } attached() { super.attached(), this.ownerListBox = this.getListBox() } static get listeners() { return { mouseenter: "_itemOnMouseEnter", mouseleave: "_itemOnMouseLeave" } } ready() { super.ready(); const e = this; if (e.setAttribute("role", "option"), "" !== e.label) { let t = e.label; t && "string" == typeof t && (t = t.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, """)), e.innerHTML = t } else "" !== e.innerHTML && (e.label = e.innerHTML); e._setDisplayMode(e.displayMode), e._setItemColor(), e.$.container.noRipple = !0; const t = e.closest("jqx-list-box"); if (t && t.isRendered) { if (cancelAnimationFrame(JQX.ListBox.processTimer), t._inLazyInit || t._isUpdating) return; JQX.ListBox.processTimer = requestAnimationFrame((() => { t._lazyInitItems() })) } } propertyChangedHandler(e, t, i) { const r = this; if (super.propertyChangedHandler(e, t, i), "hidden" === e) i ? r.$.addClass("jqx-hidden") : r.$.removeClass("jqx-hidden"); else if ("color" === e) r._setItemColor(); else if ("displayMode" === e) r._setDisplayMode(i); else if ("label" === e || "value" === e) { const t = r.context; r.context = document, "label" === e && (r.innerHTML = i); const o = r.getListBox(); o && (o._applyTemplate(r), o.onItemUpdated(r)), r.context = t } else if ("details" === e) { const e = r.context; r.context = document, r.$.details.innerHTML = i; const t = r.getListBox(); t && t.onItemUpdated(r), r.context = e } else if ("innerHTML" === e) { const e = r.getListBox(); e && e.onItemUpdated(r) } else if ("selected" === e) if (i) r.setAttribute("aria-selected", !0); else { const e = r.getListBox(); r.readonly || r.disabled || !e || -1 === ["oneOrManyExtended", "zeroOrMany", "oneOrMany", "checkBox"].indexOf(e.selectionMode) ? r.removeAttribute("aria-selected") : r.setAttribute("aria-selected", !1) } } getListBox() { const e = this; if (!JQX.ListBox) return e.getRootNode().host; let t = e.parentNode; for (; t instanceof JQX.ListBox == 0 && null !== t;)t = t.parentNode; return !t && JQX.EnableShadowDOM ? e.getRootNode().host : t } _itemOnMouseEnter() { const e = this; !e.disabled && e.ownerListBox && (JQX.ListBox.DragDrop.Dragging && e.ownerListBox.allowDrop && (JQX.ListBox.DragDrop.DropDetails = { item: e, position: "bottom" }), e.ownerListBox.$.verticalScrollBar.thumbCapture || e.ownerListBox.$.horizontalScrollBar.thumbCapture || e.setAttribute("hover", "")) } _itemOnMouseMove(e) { const t = this; if (t.ownerListBox && JQX.ListBox.DragDrop.Dragging && t.ownerListBox.allowDrop && !JQX.Utilities.Core.isMobile) { const i = [].slice.call(t.ownerListBox.getElementsByClassName("jqx-list-item-bottom-line-feedback")); for (let e = 0; e < i.length; e++)i[e].$.removeClass("jqx-list-item-line-feedback"), i[e].$.removeClass("jqx-list-item-bottom-line-feedback"); if (JQX.ListBox.DragDrop.DropDetails = { item: t, position: "top" }, !t.ownerListBox._areCSSVarsSupported) { if (t.ownerListBox._indexOf(t) === t.ownerListBox._items.length - 1 || t.parentNode.lastElementChild === t) { const i = t.getBoundingClientRect(); e.pageY - window.pageYOffset > i.top + i.height / 2 - 1 && (JQX.ListBox.DragDrop.DropDetails = { item: t, position: "bottom" }) } return } if (t.$.removeClass("jqx-list-item-line-feedback"), t.$.removeClass("jqx-list-item-bottom-line-feedback"), t.ownerListBox.sorted && t.ownerListBox.autoSort) return; const r = t.ownerListBox._items.filter((e => !e.hidden)); if (r.indexOf(t) === r.length - 1 || t.parentNode.lastElementChild === t) { const i = t.getBoundingClientRect(); e.pageY - window.pageYOffset > i.top + i.height / 2 - 1 ? (t.$.addClass("jqx-list-item-bottom-line-feedback"), JQX.ListBox.DragDrop.DropDetails = { item: t, position: "bottom" }) : arguments[1] || t.$.addClass("jqx-list-item-line-feedback") } else arguments[1] || t.$.addClass("jqx-list-item-line-feedback") } } _itemOnMouseLeave() { const e = this; e.ownerListBox && (JQX.ListBox.DragDrop.Dragging && (e.$.removeClass("jqx-list-item-line-feedback"), e.$.removeClass("jqx-list-item-bottom-line-feedback")), e.removeAttribute("hover")) } _setDisplayMode(e) { const t = this, i = t.getListBox(); if (i) { const r = "checkBox" === i.selectionMode || "radioButton" === i.selectionMode ? i.selectionMode : "plain"; t.displayMode = e = r } "plain" !== e ? t.$itemInput.removeClass("jqx-hidden") : t.$itemInput.addClass("jqx-hidden") } _setItemColor() { const e = this, t = e.querySelector(".jqx-content-label"), i = /(^#[0-9A-F]{3}$)|(^#[0-9A-F]{6}$)|(^#[0-9A-F]{8}$)/i.test(e.color) ? e.color : ""; t.style.backgroundColor = i, t.style.color = e._getContrastColor(i) } _getContrastColor(e) { if (!e) return ""; let t = (i = e.slice(1, 3), r = e.slice(3, 5), o = e.slice(5, 7), [parseInt(i, 16), parseInt(r, 16), parseInt(o, 16)]); var i, r, o; return parseFloat(((.299 * t[0] + .61 * t[1] + .114 * t[2]) / 255).toFixed(2)) > .65 ? "#000000" : "#FFFFFF" } }), JQX("jqx-list-items-group", class extends JQX.ContentElement { static get properties() { return { label: { value: "", type: "string" } } } get enableShadowDOM() { return !1 } template() { return '<div id="container" role="presentation">\n <span id="itemsLabel" class="jqx-list-items-group-label">[[label]]</span>\n <div id="listItemsGroupContainer" inner-h-t-m-l=\'[[innerHTML]]\' class="jqx-list-items-group-container" role="presentation">\n <content></content>\n </div>\n </div>' } appendChild(e) { const t = this; if (!t.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e instanceof HTMLElement && t.$.listItemsGroupContainer.appendChild(e) } removeChild(e) { const t = this; if (!t.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.removeChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e instanceof HTMLElement && t.$.listItemsGroupContainer.removeChild(e) } getListBox() { let e = this.parentNode; for (; e instanceof JQX.ListBox == 0 && null !== e;)e = e.parentNode; return e } attached() { const e = this; super.attached(), e.ownerListBox || (e.ownerListBox = e.getListBox()), e.setAttribute("role", "group"), e.$.itemsLabel.id || (e.$.itemsLabel.id = e.id + "Label"), e.setAttribute("aria-labelledby", e.$.itemsLabel.id) } }), JQX("jqx-list-box", class extends JQX.ScrollViewer { static get properties() { return { allowDrag: { value: !1, type: "boolean" }, allowDrop: { value: !1, type: "boolean" }, alternationStart: { value: 0, type: "int" }, alternationEnd: { value: 0, type: "int" }, alternationCount: { value: 0, type: "int" }, autoSort: { value: !0, type: "boolean" }, dataSource: { value: null, type: "any?", reflectToAttribute: !1 }, dragFeedbackFormatFunction: { value: null, type: "function?" }, dragOffset: { value: [10, 10], type: "array" }, displayLoadingIndicator: { value: !1, type: "boolean" }, displayMember: { value: "", type: "string" }, shadowDomMode: { allowedValues: ["light", "shadow"], value: "shadow", type: "string" }, dropAction: { value: "move", type: "string", allowedValues: ["copy", "move", "none"] }, editable: { value: !1, type: "boolean" }, filterable: { value: !1, type: "boolean" }, filterCallback: { value: null, type: "function?" }, filterMode: { value: "containsIgnoreCase", allowedValues: ["contains", "containsIgnoreCase", "doesNotContain", "doesNotContainIgnoreCase", "equals", "equalsIgnoreCase", "startsWith", "startsWithIgnoreCase", "endsWith", "endsWithIgnoreCase", "custom"], type: "string" }, filterInputPlaceholder: { value: "", type: "string" }, grouped: { value: !1, type: "boolean" }, groupMember: { value: "", type: "string" }, itemTemplate: { value: null, type: "any" }, itemHeight: { value: null, type: "number?" }, incrementalSearchDelay: { value: 700, type: "number?" }, incrementalSearchMode: { value: "startsWithIgnoreCase", allowedValues: ["contains", "containsIgnoreCase", "doesNotContain", "doesNotContainIgnoreCase", "equals", "equalsIgnoreCase", "startsWith", "startsWithIgnoreCase", "endsWith", "endsWithIgnoreCase"], type: "string" }, itemMeasureMode: { value: "auto", allowedValues: ["auto", "precise"], type: "string" }, loadingIndicatorPlaceholder: { value: "Loading...", type: "string" }, loadingIndicatorPosition: { value: "center", allowedValues: ["bottom", "center", "top"], type: "string" }, messages: { extend: !0, value: { en: { overridingProperties: '{{elementType}}: Overriding properties {{property1}} and {{property2}} applied. The "{{property1}}" property is used by default.', invalidIndex: '{{elementType}}: "{{method}}" method accepts an index of type number or an Array of numbers.', indexOutOfBound: '{{elementType}}: Out of bound index/indexes in "{{method}}" method.', invalidItem: '{{elementType}}: "{{method}}" method accepts an object or an array of objects as it\'s second parameter.', invalidSettings: '{{elementType}}: "{{method}}" method accepts a string or an object as it\'s second parameter.' } }, type: "object" }, name: { value: "", type: "string" }, placeholder: { value: "No Items", type: "string" }, selectedIndexes: { value: [], type: "array" }, selectedValues: { value: [], type: "array" }, selectionMode: { value: "oneOrManyExtended", allowedValues: ["none", "oneOrManyExtended", "zeroOrMany", "oneOrMany", "zeroOrOne", "zeroAndOne", "one", "checkBox", "radioButton"], type: "string" }, selectionChangeAction: { value: "release", allowedValues: ["press", "release"], type: "string" }, sorted: { value: !1, type: "boolean" }, sortDirection: { value: "asc", type: "string" }, topVisibleIndex: { value: -1, type: "int" }, type: { value: "list", type: "string", defaultReflectToAttribute: !0, readonly: !0 }, valueMember: { value: "", type: "string" }, virtualized: { value: !1, type: "boolean" } } } static get requires() { return { "JQX.ScrollBar": "jqx.scrollbar.js" } } static get styleUrls() { return ["jqx.listbox.css", "jqx.dropdown.css", "jqx.scrollbar.css"] } static get listeners() { return { focus: "_focusHandler", blur: "_blurHandler", "container.wheel": "_mouseWheelHandler", "editInput.change": "_editInputEventHandler", "editInput.blur": "_editInputEventHandler", "editInput.keydown": "_editInputEventHandler", "horizontalScrollBar.change": "_horizontalScrollbarHandler", "itemsInnerContainer.down": "_downHandler", "itemsInnerContainer.dblclick": "_dblclickEventHandler", "itemsInnerContainer.move": "_itemsContainerMoveHandler", "itemsContainer.mouseleave": "_mouseLeaveHandler", "itemsInnerContainer.touchmove": "_touchmoveHandler", "itemsInnerContainer.touchstart": "_touchstartHandler", "document.move": "_moveHandler", keydown: "_keyDownHandler", keyup: "_keyUpHandler", resize: "_resizeHandler", selectstart: "_selectStartHandler", styleChanged: "_styleChangedHandler", swipeleft: "_swipeLeftHandler", swiperight: "_swipeRightHandler", touchmove: "_overriddenHandler", touchstart: "_overriddenHandler", "verticalScrollBar.change": "_verticalScrollbarHandler" } } template() { return '<div id="container" class="jqx-container" role="presentation">\n <div class="jqx-list-box-filter-input-container jqx-hidden" id="filterInputContainer" role="presentation"><input id="filterInput" disabled="[[disabled]]" placeholder=\'[[filterInputPlaceholder]]\' role="searchbox" aria-label="[[filterInputPlaceholder]]"></div>\n <div id="itemsContainer" class="jqx-list-items-container" role="presentation">\n <div id="placeholder" class="jqx-placeholder" role="presentation" aria-hidden="true">[[placeholder]]</div>\n <div id="itemsInnerContainer" inner-h-t-m-l=\'[[innerHTML]]\' class="jqx-list-items-inner-container" role="presentation">\n <content></content>\n </div>\n <input type="text" id="editInput" class= "jqx-hidden"/>\n </div>\n <jqx-scroll-bar wait theme="[[theme]]" right-to-left="[[rightToLeft]]" id="verticalScrollBar" disabled="[[disabled]]" orientation="vertical"></jqx-scroll-bar>\n <jqx-scroll-bar wait theme="[[theme]]" right-to-left="[[rightToLeft]]" id="horizontalScrollBar" disabled="[[disabled]]"></jqx-scroll-bar>\n <div id="loadingIndicatorContainer" class="jqx-loader-container" role="presentation">\n <span id="loadingIndicator" class="jqx-loader" role="img" aria-label="[[loadingIndicatorPlaceholder]]"></span>\n <span id="loadingIndicatorPlaceHolder" class="jqx-loader-label jqx-hidden">[[loadingIndicatorPlaceholder]]</span>\n </div>\n <input id="hiddenInput" type="hidden" name="[[name]]">\n </div>' } get value() { const e = this; return e.isRendered && e._selectedItems.length > 0 ? e._selectedItems.map((e => ({ label: e.label, value: e.value }))) : null } set value(e) { const t = this; if (Array.isArray(e)) { const i = t.context; t.context = t, t._isUpdating++, t.selectedValues = [], t.clearSelection(); for (let i = 0; i < e.length; i++) { const r = e[i], o = t.getItem(r); o && ("oneOrManyExtended" === t.selectionMode ? t._select(o) : t.select(o)) } return t.context = i, void t._isUpdating-- } const i = t.getItem(e); i && t.select(i) } get _selectedItems() { const e = this, t = []; if (e.isRendered) for (let i = 0; i < e._items.length; i++) { const r = e._items[i]; r.selected && t.push(r) } return t } _mouseLeaveHandler() { const e = [].slice.call(this.getElementsByClassName("jqx-list-item-bottom-line-feedback")); for (let t = 0; t < e.length; t++)e[t].$.removeClass("jqx-list-item-line-feedback"), e[t].$.removeClass("jqx-list-item-bottom-line-feedback") } _downHandler(e) { const t = this; if (t.disabled || t.displayLoadingIndicator || t.readonly) return; let i = e.originalEvent.target, r = null; if (!(i instanceof JQX.ListItem) || i.disabled || i.hidden || i instanceof JQX.ListItemsGroup) for (; i.parentElement;) { if (i instanceof JQX.ListItem && !i.disabled && !i.hidden && !(i instanceof JQX.ListItemsGroup)) { r = i.dataItem; break } i = i.parentElement } else r = i.dataItem; JQX.ListBox.DragDrop.StartTime = new Date, JQX.ListBox.DragDrop.StartPosition = { left: e.pageX, top: e.pageY }, r && (e.stopPropagation(), t.hasRippleAnimation && (r.readonly || r.disabled || JQX.Utilities.Animation.Ripple.animate(i.$.overlay, e.pageX, e.pageY)), JQX.Utilities.Core.isMobile || "press" !== t.selectionChangeAction || (t._focus(r), t.select(r)), !JQX.ListBox.DragDrop.Feedback && t.allowDrag && (JQX.ListBox.DragDrop.DraggedFrom = t, JQX.ListBox.DragDrop.Feedback = document.createElement("span"), t.rightToLeft ? JQX.ListBox.DragDrop.Feedback.setAttribute("right-to-left", !0) : JQX.ListBox.DragDrop.Feedback.removeAttribute("right-to-left"), t.dragFeedbackFormatFunction ? JQX.ListBox.DragDrop.Feedback.innerHTML = t.dragFeedbackFormatFunction(r) : JQX.ListBox.DragDrop.Feedback.appendChild(r.offsetHeight ? r.cloneNode(!0) : t._createItem(r)), JQX.ListBox.DragDrop.Item = r, JQX.Utilities.Extend(JQX.ListBox.DragDrop.Feedback).addClass("jqx-popup jqx-list-item jqx-list-item-feedback"))) } _dblclickEventHandler(e) { const t = this; if (!t.editable) return; const i = e.target.closest("jqx-list-item"); i instanceof JQX.ListItem && !i.disabled && !i.readonly ? (t.$.editInput.dir = t.rightToLeft ? "rtl" : "ltr", t.$.editInput.style.width = t.$.itemsInnerContainer.offsetWidth + "px", t.$.editInput.owner = i, t.$.editInput.value = i.label, t.$.editInput.style.height = i.offsetHeight + "px", t.$.editInput.style.top = i.offsetTop + t.$.itemsInnerContainer.offsetTop + "px", t.$.editInput.setAttribute("aria-label", "Edit item " + i.label), t.$editInput.hasClass("jqx-hidden") && t.$editInput.removeClass("jqx-hidden"), t.$.editInput.focus({ preventScroll: !0 })) : t.$editInput.addClass("jqx-hidden") } _editInputEventHandler(e) { const t = this; if ("blur" === e.type || "keydown" === e.type && "Escape" === e.key) return t.$editInput.hasClass("jqx-hidden") || t.$editInput.addClass("jqx-hidden"), void t.focus(); if ("keydown" === e.type || t.$editInput.hasClass("jqx-hidden")) return; const i = e.target; if (e.stopPropagation(), i.owner.label !== i.value && (i.owner.label = i.value, t.itemTemplate && t._applyTemplate(i.owner), t.dataSource)) { const e = i.owner.dataIndex, r = t.dataSource[e]; r && (t.displayMember ? r[t.displayMember] = i.value : r.label = i.value) } t.$editInput.addClass("jqx-hidden"), t.$.fireEvent("itemLabelChange", { selected: i.owner.selected, disabled: i.owner.disabled, index: t._indexOf(i.owner), label: i.owner.label, value: i.owner.value }) } _pointerUpHandler(e) { const t = this; let i = e.originalEvent, r = i.target; (t.shadowRoot || t.isInShadowDOM) && (r = i.originalEvent ? i.originalEvent.composedPath()[0] : i.composedPath()[0]); const o = e => { const i = e.ownerListBox; i.disabled || i !== t || i.displayLoadingIndicator || "none" === i.selectionMode || e.grouped || e.readonly || (i._focus(e), i.select(e), JQX.ListBox.DragDrop.StartPosition = null, t.$.fireEvent("itemClick", { selected: r.selected, disabled: r.disabled, index: t._indexOf(r), label: r.label, value: r.value })) }; if (!(i.target instanceof JQX.ListItem) || i.target.disabled || i.target instanceof JQX.ListItemsGroup) { for (; r && r.parentElement;) { if (r instanceof JQX.ListItem && !r.disabled && !(r instanceof JQX.ListItemsGroup)) return void o(r.dataItem); r = r.parentElement } if (this.shadowRoot && "shadow" === this.shadowDomMode) { const e = i.composedPath(); for (let t = 0; t < e.length; t++) { const i = e[t]; i instanceof JQX.ListItem && !i.disabled && o(i.dataItem) } } } else o(r.dataItem) } _upHandler(e) { const t = this; if (super._upHandler(), !t.disabled && !t.readonly && JQX.ListBox.DragDrop.StartPosition) { if (JQX.Utilities.Core.isMobile && !JQX.ListBox.DragDrop.Dragging) { const i = Math.abs(e.pageX - JQX.ListBox.DragDrop.StartPosition.left), r = Math.abs(e.pageY - JQX.ListBox.DragDrop.StartPosition.top); let o = i >= 0 && i <= 3 && r >= 0 && r <= 3; if (JQX.Utilities.Core.isMobile && new Date - JQX.ListBox.DragDrop.StartTime >= 300 && (o = !1, JQX.ListBox.DragDrop.StartTime = null), o) { const i = e.originalEvent.target.closest("jqx-list-box"); i ? i._pointerUpHandler(e) : t._pointerUpHandler(e), JQX.ListBox.DragDrop.StartPosition = null } else { let t = e.originalEvent.target; if (!(e.target instanceof JQX.ListItem) || t.readonly || e.target.disabled || e.target instanceof JQX.ListItemsGroup) for (; t.parentElement;) { if (t instanceof JQX.ListItem && !t.readonly && !t.disabled && !(t instanceof JQX.ListItemsGroup)) { e.stopPropagation(); break } t = t.parentElement } else e.stopPropagation() } } else if (!JQX.Utilities.Core.isMobile && !JQX.ListBox.DragDrop.Dragging && "release" === t.selectionChangeAction) { const i = (t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target).closest("jqx-list-box"); i && (i.upTimer && clearTimeout(i.upTimer), t.isInShadowDOM ? i ? i._pointerUpHandler(e) : t._pointerUpHandler(e) : i.upTimer = setTimeout((() => { i ? i._pointerUpHandler(e) : t._pointerUpHandler(e) }))) } if (JQX.ListBox.DragDrop.Feedback) { let i; if (JQX.ListBox.DragDrop.Feedback.parentNode && JQX.ListBox.DragDrop.Feedback.parentNode.removeChild(JQX.ListBox.DragDrop.Feedback), JQX.ListBox.DragDrop.Feedback = null, JQX.Utilities.Core.isMobile && JQX.ListBox.DragDrop.Dragging) for (let t = 0; t < JQX.ListBox.DragDrop.ListBoxes.length; t++) { const r = JQX.ListBox.DragDrop.ListBoxes[t], o = r.getBoundingClientRect(); if (r.allowDrop && !r.closest(".jqx-visibility-hidden") && o.left <= e.clientX && e.clientX <= o.left + o.width && o.top <= e.clientY && e.clientY <= o.top + o.height) { i = r; const t = r._items.filter((e => !e.hidden)); for (let i = 0; i < t.length; i++) { const s = t[i], n = s.getBoundingClientRect(); if ((t.indexOf(s) === t.length - 1 || s.parentNode.lastElementChild === s) && e.clientY >= o.top + s.offsetTop - r.scrollTop + n.height / 2 && e.clientY <= o.top - r.scrollTop + s.offsetTop + n.height) { JQX.ListBox.DragDrop.DropDetails = { item: s, position: "bottom" }; break } if (e.clientY >= o.top + s.offsetTop - r.scrollTop && e.clientY <= o.top + s.offsetTop + n.height - r.scrollTop) { JQX.ListBox.DragDrop.DropDetails = { item: s, position: "top" }; break } } } } if (JQX.ListBox.DragDrop.Dragging) { if (JQX.ListBox.DragDrop.DropDetails) { let r = JQX.ListBox.DragDrop.DropDetails.item, o = JQX.ListBox.DragDrop.Item; const s = o.ownerListBox; let n = e.originalEvent.target; if (t.isInShadowDOM && (n = e.originalEvent ? e.originalEvent.composedPath()[0] : e.composedPath()[0]), i = !i && n.closest ? n.closest("jqx-list-box") : i, document.body.classList.remove("jqx-dragging"), r.$.removeClass("jqx-list-item-line-feedback"), r.$.removeClass("jqx-list-item-bottom-line-feedback"), i && r.ownerListBox !== i && i.items.length > 0 && (r = i.items[i.items.length - 1]), JQX.ListBox.DragDrop.Item === r || i !== r.ownerListBox && !JQX.Utilities.Core.isMobile) i && 0 === i._items.length && "none" !== i.dropAction && ("move" === i.dropAction ? JQX.ListBox.DragDrop.Item.ownerListBox.removeChild(JQX.ListBox.DragDrop.Item) : "copy" === i.dropAction && (o = o.cloneNode(!0)), i.appendChild(o)); else if ("none" !== o.ownerListBox.dropAction) { r.ownerListBox !== o.ownerListBox && "move" === o.ownerListBox.dropAction && JQX.ListBox.DragDrop.Item.ownerListBox.removeChild(JQX.ListBox.DragDrop.Item), "copy" === o.ownerListBox.dropAction && (o = o.cloneNode(!0)), JQX.ListBox.DragDrop.Item.group = r.group; const e = r.ownerListBox; "checkBox" !== e.selectionMode && "radioButton" !== e.selectionMode && e.clearSelection(), "top" === JQX.ListBox.DragDrop.DropDetails.position ? e.insertBefore(o, r) : r.parentNode.lastElementChild === r ? e.appendChild(o) : e.appendChild(o, r), e.ensureVisible(o), "checkBox" === e.selectionMode || "radioButton" === e.selectionMode ? (e._focus(o), e._refreshSelection()) : (e.clearSelection(), e.select(o)) } o.selected && i !== s && s._refreshSelection(); const l = JQX.ListBox.DragDrop.Item, a = l.ownerListBox; l.displayMode = "checkBox" === a.selectionMode || "radioButton" === a.selectionMode ? a.selectionMode : "plain", a.$.fireEvent("dragEnd", { item: l, target: r, data: JQX.ListBox.DragDrop, previousContainer: s, container: i, originalEvent: e }), a._focus(l) } else { const t = JQX.ListBox.DragDrop.Item, i = t.ownerListBox; t.displayMode = "checkBox" === i.selectionMode || "radioButton" === i.selectionMode ? i.selectionMode : "plain", document.body.classList.remove("jqx-dragging"), i.$.fireEvent("dragEnd", { item: t, target: null, data: JQX.ListBox.DragDrop, previousContainer: i, container: i, originalEvent: e }), i._focus(t) } e.preventDefault() } delete JQX.ListBox.DragDrop.DraggedFrom, JQX.ListBox.DragDrop.Dragging = !1, JQX.ListBox.DragDrop.Item = null, JQX.ListBox.DragDrop.DropDetails = null } for (let e = 0; e < JQX.ListBox.DragDrop.ListBoxes.length; e++) { const t = JQX.ListBox.DragDrop.ListBoxes[e]; t._dragInterval && clearInterval(t._dragInterval) } } } _itemsContainerMoveHandler(e) { const t = this; if (JQX.ListBox.DragDrop.Dragging) return t._applyItemFeedback(e), t._moveHandler(e), e.originalEvent.preventDefault(), e.originalEvent.stopPropagation(), !1 } _touchmoveHandler(e) { if (JQX.ListBox.DragDrop.Dragging && e.cancelable) return e.preventDefault(), void e.stopPropagation(); super._touchmoveHandler(e) } _applyItemFeedback(e) { const t = this, i = e.originalEvent.target, r = i.closest ? i.closest("jqx-list-item") : i; JQX.Utilities.Core.isMobile ? JQX.ListBox.DragDrop.DropDetails = { item: JQX.ListBox.DragDrop.Item, position: "bottom" } : 0 !== t.items.length && (r ? r._itemOnMouseMove(e) : t.items[t.items.length - 1]._itemOnMouseMove(e, !0)) } _moveHandler(e) { const t = this; if (!JQX.ListBox.DragDrop.Feedback || JQX.ListBox.DragDrop.DraggedFrom !== t) return; const i = t.dragOffset; if (JQX.ListBox.DragDrop.Dragging) { JQX.ListBox.DragDrop.Feedback.style.left = i[0] + e.pageX + "px", JQX.ListBox.DragDrop.Feedback.style.top = i[1] + e.pageY + "px", t.$.fireEvent("dragging", { item: JQX.ListBox.DragDrop.Item, data: JQX.ListBox.DragDrop, originalEvent: e.originalEvent }); for (let t = 0; t < JQX.ListBox.DragDrop.ListBoxes.length; t++) { const i = JQX.ListBox.DragDrop.ListBoxes[t]; i._dragInterval && clearInterval(i._dragInterval), i._dragInterval = setInterval((function () { const t = i.getBoundingClientRect(); t.left <= e.clientX && t.left + t.width >= e.clientX && (e.clientY >= t.top && e.clientY <= t.top + 20 ? i.scrollTop -= 2 : e.clientY >= t.top + t.height - 20 && e.clientY <= t.top + t.height && (i.scrollTop += 2)) }), 1) } return e.preventDefault(), e.stopPropagation(), e.originalEvent.preventDefault(), e.originalEvent.stopPropagation(), !1 } { const r = Math.abs(e.pageX - JQX.ListBox.DragDrop.StartPosition.left), o = Math.abs(e.pageY - JQX.ListBox.DragDrop.StartPosition.top), s = new Date - JQX.ListBox.DragDrop.StartTime; let n = r >= 5 && r <= 15 || o >= 5 && o <= 15; if (JQX.Utilities.Core.isMobile && (s < 300 || s > 1e3) && (n = !1), n) { JQX.ListBox.DragDrop.Dragging = !0, JQX.ListBox.DragDrop.Feedback.style.left = i[0] + e.pageX + "px", JQX.ListBox.DragDrop.Feedback.style.top = i[1] + e.pageY + "px", t.getShadowRootOrBody().appendChild(JQX.ListBox.DragDrop.Feedback), e.preventDefault(), e.stopPropagation(), e.originalEvent.preventDefault(), e.originalEvent.stopPropagation(); const r = JQX.ListBox.DragDrop.Item, o = r.ownerListBox; o.$.fireEvent("dragStart", { item: r, data: JQX.ListBox.DragDrop, container: o, previousContainer: o, originalEvent: e.originalEvent }), document.body.classList.add("jqx-dragging") } } } _focusHandler() { this._focused = !0, this.setAttribute("focus", "") } _blurHandler() { this._focused = !1, this.removeAttribute("focus") } appendChild(e) { const t = this; if (!t.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } t.isVirtualized ? (t._items.indexOf(e) > -1 && t._items.splice(t._items.indexOf(e), 1), t._items.push(e)) : (e.dataItem = e, t.shadowRoot && "light" === t.shadowDomMode ? t.appendChild(e) : t.$.itemsInnerContainer.appendChild(e), t._items.indexOf(e) > -1 && t._items.splice(t._items.indexOf(e), 1), t._items.push(e)), t._refreshItems(), t._refreshSelection() } insertBefore(e, t) { const i = this; if (!i.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.insertBefore.apply(i, e.concat(Array.prototype.slice.call(arguments))) } i.isVirtualized ? (i._items.indexOf(e) > -1 && i._items.splice(i._items.indexOf(e), 1), i._items.splice(i._indexOf(t), 0, e)) : (e.dataItem = e, t.parentNode.insertBefore(e, t), i._items.indexOf(e) > -1 && i._items.splice(i._items.indexOf(e), 1), i._items.splice(i._indexOf(t), 0, e)), i._refreshItems(), i._refreshSelection() } removeChild(e) { const t = this; if (!t.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.removeChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } if (t.isVirtualized) t._items.splice(t._indexOf(e), 1); else if (e.parentNode) { const i = t.selectedIndexes.slice(0), r = t.selectedValues.slice(0), o = i.indexOf(e.dataIndex); e.parentNode.removeChild(e), o > -1 && (i.splice(o, 1), r.splice(o, 1), t.selectedIndexes = i, t.selectedValues = r) } t._refreshItems() } propertyChangedHandler(e, t, i) { if ("dataSource" === e && (!i || i && Array.isArray(i) && 0 === i.length)) return void this.clearItems(); super.propertyChangedHandler(e, t, i); const r = this; switch (e) { case "innerHTML": r.clearSelection(), r._dataBind(), r.innerHTML = r.content = JQX.Utilities.Core.html(r.$.content); break; case "dataSource": case "valueMember": case "groupMember": case "displayMember": r.clearSelection(), r._dataBind(), r._applyDefaultSelection(); break; case "disabled": case "unfocusable": r._setFocusable(); break; case "displayLoadingIndicator": r._setLoadingIndicatorVisibility(); break; case "filterable": r._refreshFilter(), r._refreshLayout(); break; case "grouped": if (i ? r._group() : r._ungroup(), "radioButton" === r.selectionMode) { if (r.selectedValues.length > 0) { const e = r.selectedValues; r.clearSelection(), r.select(e[0]) } } else r._refreshSelection(); r._refreshLayout(); break; case "itemTemplate": { if (null === i || "" === i) return r._items.map((e => e.innerHTML = e.label)), delete r._bindingDetails, void r._refreshLayout(); const e = r.querySelectorAll("jqx-list-item"), t = function () { r._handleItemTemplate(i) && (r._items.map((e => r._applyTemplate(e))), r._refreshLayout()), r.ownerElement && r.ownerElement._setDropDownSize && r.ownerElement._setDropDownSize(), r.$.fireEvent("bindingComplete") }; 0 === e.length ? t() : r._ensureItemsReady(e, t); break } case "selectedIndexes": case "selectedValues": { let o = r.selectedIndexes.slice(0), s = r.selectedValues.slice(0); if (!r._items || 0 === r._items.length) return r.selectedIndexes = [], r.selectedValues = [], void (r.$.hiddenInput.value = r.selectedValues.toString()); if (r._propertyChanging = !0, "selectedIndexes" === e) { o = t.slice(0), r.clearSelection(); for (let e = 0; e < i.length; e++) { const t = i[e], o = r._items[t]; o && ("oneOrManyExtended" === r.selectionMode || "oneOrMany" === r.selectionMode ? (r.selectedIndexes.length > 0 && 0 === e && r.clearSelection(), r._select(o)) : r.select(o)) } } else { s = t.slice(0), r.selectedValues = [], r.clearSelection(); for (let e = 0; e < i.length; e++) { const t = i[e], o = r.getItem(t); o && ("oneOrManyExtended" === r.selectionMode ? r._select(o) : r.select(o)) } } if (r.selectedIndexes.length > 0 && r._focus(r._items[r.selectedIndexes[0]]), r._propertyChanging = !1, JSON.stringify(s) !== JSON.stringify(r.selectedValues.slice(0))) { let e = [], t = []; for (let e = 0; e < o.length; e++)r.selectedIndexes.indexOf(o[e]) < 0 && t.push(r._items[o[e]]); for (let t = 0; t < r.selectedIndexes.length; t++)o.indexOf(r.selectedIndexes[t]) < 0 && e.push(r._items[r.selectedIndexes[t]]); let i = { addedItems: e, removedItems: t }; if (r.selectedIndexes.length > 0) { const e = r._items[r.selectedIndexes[r.selectedIndexes.length - 1]]; void 0 !== e && (i.selected = e.selected, i.disabled = e.disabled, i.index = r._indexOf(e), i.label = e.label, i.value = e.value) } else i.selected = !1, i.disabled = !1, i.index = -1, i.label = "", i.value = ""; r.$.fireEvent("change", i), r._updateTargetValue() } break } case "selectionMode": { const e = "checkBox" === r.selectionMode || "radioButton" === r.selectionMode ? r.selectionMode : "plain", o = r.selectedIndexes.slice(0), s = r.selectedValues.slice(0); r._propertyChanging = !0; const n = r.selectedValues; r.setAttribute("aria-multiselectable", -1 !== ["oneOrManyExtended", "zeroOrMany", "oneOrMany", "checkBox", "radioButton"].indexOf(i)), r.selectedValues = [], r.clearSelection(); for (let e = 0; e < n.length; e++) { const t = n[e], i = r.getItem(t); i && ("oneOrManyExtended" === r.selectionMode ? r._select(i) : r.select(i)) } if (r._items.forEach((t => t.displayMode = e)), r._recycle(), r._propertyChanging = !1, JSON.stringify(s) !== JSON.stringify(r.selectedValues.slice(0))) { let e = [], t = []; for (let e = 0; e < o.length; e++)r.selectedIndexes.indexOf(o[e]) < 0 && t.push(r._items[o[e]]); for (let t = 0; t < r.selectedIndexes.length; t++)o.indexOf(r.selectedIndexes[t]) < 0 && e.push(r._items[r.selectedIndexes[t]]); let i = { addedItems: e, removedItems: t }; if (o.length > 0) { const e = r._items[o[o.length - 1]]; e && (i.selected = e.selected, i.disabled = e.disabled, i.index = r._indexOf(e), i.label = e.label, i.value = e.value) } r.$.fireEvent("change", i), r._updateTargetValue() } r._applyAriaSelected(), "checkBox" !== i && "radioButton" !== i && "checkBox" !== t && "radioButton" !== t || r._refreshLayout(); break } case "topVisibleIndex": r._setTopVisibleIndex(i); break; case "autoSort": r._canSort = i; break; case "alternationStart": case "alternationEnd": case "alternationCount": r._refreshItems(), r._refreshLayout(); break; case "sortDirection": case "sorted": { r._canSort = !0, i ? r._sort() : r._unsort(); const e = r.selectedValues; r.selectedValues = [], r._refreshSelection(); for (let t = 0; t < e.length; t++) { const i = e[t], o = r.getItem(i); o && ("oneOrManyExtended" === r.selectionMode ? r._select(o) : r.select(o)) } r._refreshLayout(), r._canSort = r.autoSort; break } } } _refreshSelection() { const e = this; if (!e._items || 0 === e._items.length) return; const t = e.selectedValues; e.selectedIndexes = [], e.selectedValues = []; for (let i = 0; i < e._items.length; i++) { const r = e._items[i]; r.selected = !1, t.indexOf(r.value) > -1 && e.select(r) } e._recycle() } clearSelection() { const e = this; if (!e._items || 0 === e._items.length) return; let t = []; for (let i = 0; i < e._items.length; i++)e._items[i].selected && t.push(e._items[i]); e._items.map((e => e.selected = !1)), e.selectedValues.slice(0); const i = e.selectedIndexes.slice(0); if (e.selectedIndexes = [], e.selectedValues = [], e.$.hiddenInput.value = e.selectedValues.toString(), e._recycle(), e.context !== e) { let r = { addedItems: [], removedItems: t }; if (i.length > 0) { const t = e._items[i[i.length - 1]]; t && (r.selected = t.selected, r.disabled = t.disabled, r.index = e._indexOf(t), r.label = t.label, r.value = t.value) } e.$.fireEvent("change", r), e._updateTargetValue() } } ensureVisible(e) { const t = this; if (e) return !("string" == typeof e && !(e = t.getItem(e)) || (t.isVirtualized || t.$.itemsContainer.scrollTop === t.scrollTop || (t.scrollTop = t.$.itemsContainer.scrollTop), e.top + e.height >= t.scrollTop + t.offsetHeight && (t.scrollTop = t.scrollTop + e.height, t.isVirtualized || (t.$.itemsContainer.scrollTop = t.scrollTop)), (e.top <= t.scrollTop || e.top >= t.scrollTop + t.$.itemsContainer.offsetHeight) && (t.scrollTop = e.top, t.isVirtualized || (t.$.itemsContainer.scrollTop = t.scrollTop)), 0 === t._indexOf(e) || 1 === t._indexOf(e) && t._items.length > 1 && t._items[0].grouped ? (t.scrollTop = 0, t.isVirtualized || (t.$.itemsContainer.scrollTop = t.scrollTop)) : t._indexOf(e) === t._items.length - 1 && (t.scrollTop = t.scrollHeight, t.isVirtualized || (t.$.itemsContainer.scrollTop = t.scrollTop)), 0)) } get items() { const e = this; if (!window.__karma__ && !window.karma && e instanceof Element && e.isRendered && e.hasAttribute && e.hasAttribute("jqx-blazor")) { let t = []; for (let i = 0; i < e._items.length; i++) { const r = e._items[i]; t.push({ label: r.label, value: r.value }) } return t } return e._filteredItems ? e._filteredItems : e._items } getItems() { const e = this, t = e._filteredItems ? e._filteredItems : e._items; let i = []; if (t && t.length > 0) for (let e = 0; e < t.length; e++) { const r = t[e]; i.push({ label: r.label, value: r.value }) } return i } ready() { super.ready(); const e = this; if (e.shadowRoot && "light" === e.shadowDomMode) { const t = document.createDocumentFragment();[].slice.call(e.$.itemsInnerContainer.children).map((e => t.appendChild(e))), e.appendChild(t), e.$.itemsInnerContainer.appendChild(document.createElement("slot")) } e._areCSSVarsSupported = JQX.Utilities.Core.CSSVariablesSupport(), e.isUpdating = 0, e._scrollView && (e._scrollView = new JQX.Utilities.Scroll(e, e.$.horizontalScrollBar, e.$.verticalScrollBar), e._scrollView.hScrollBar.$.addClass("jqx-hidden"), e._scrollView.vScrollBar.$.addClass("jqx-hidden")); const t = e._scrollView.vScrollBar, i = e._scrollView.hScrollBar; t.hasStyleObserver = !1, i.hasStyleObserver = !1, t.hasResizeObserver = !1, i.hasResizeObserver = !1, t.wait = !1, i.wait = !1, e._setFocusable() } render() { const e = this; e.setAttribute("role", "listbox"), e.setAttribute("aria-orientation", "vertical"), e.$.verticalScrollBar.setAttribute("aria-controls", e.id), e.$.horizontalScrollBar.setAttribute("aria-controls", e.id), e._keysPressed = {}, e._incrementalSearchQuery = "", e._incrementalSearchItems = [], e._canSort = !0, e._previousEntry = "", e._setLoadingIndicatorVisibility(), e._refreshFilter(), e._initializeInnerHTML(), e._dataBind(), e._applyDefaultSelection(), e.enableShadowDOM && HTMLElement.prototype.appendChild.apply(e, [e.$.hiddenInput]), e.setAttribute("aria-multiselectable", -1 !== ["oneOrManyExtended", "zeroOrMany", "oneOrMany", "checkBox", "radioButton"].indexOf(e.selectionMode)), super.render() } _lazyInitItems() { const e = this; if (e._inLazyInit) return cancelAnimationFrame(JQX.ListBox.processTimer), void delete JQX.ListBox.processTimer; e._inLazyInit = !0, e.dataSource || (e.clearSelection(), e._dataBind(), e._applyDefaultSelection()), cancelAnimationFrame(JQX.ListBox.processTimer), delete JQX.ListBox.processTimer, e._inLazyInit = !1 } _applyDefaultSelection() { const e = this; !e._focusedItem && e._items && e._items.length > 0 && 0 === e.selectedIndexes.length && ("one" !== e.selectionMode && "oneOrMany" !== e.selectionMode && "oneOrManyExtended" !== e.selectionMode || e.select(e._items[0])) } attached() { const e = this; super.attached(), JQX.ListBox.DragDrop || (JQX.ListBox.DragDrop = { ListBoxes: [] }), JQX.ListBox.DragDrop.ListBoxes.push(e), e._scrollView || (e._scrollView = new JQX.Utilities.Scroll(e, e.$.horizontalScrollBar, e.$.verticalScrollBar)), e.selectedIndexes.length > 0 && e._items && e.ensureVisible(e._items[e.selectedIndexes[0]]) } detached() { const e = this; if (super.detached(), e._scrollView && (e._scrollView.unlisten(), delete e._scrollView), JQX.ListBox.DragDrop && JQX.ListBox.DragDrop.ListBoxes) { const t = JQX.ListBox.DragDrop.ListBoxes.indexOf(e); JQX.ListBox.DragDrop.ListBoxes.splice(t, 1) } } _createItem(e, t, i) { const r = this, o = "checkBox" === r.selectionMode || "radioButton" === r.selectionMode ? r.selectionMode : "plain", s = i ? {} : document.createElement("jqx-list-item"); s.ownerListBox = r, "number" == typeof e && (e = "" + e); const n = function (t, i) { return void 0 !== e[t] ? "" + e[t] : e[i] }; let l = "string" == typeof e ? e : n(r.displayMember, "label"), a = "string" == typeof e ? e : n(r.valueMember, "value"), d = n(r.groupMember, "group"); return void 0 === l && (l = void 0 !== t ? "" + t : ""), s.label = s.innerHTML = "" + l, void 0 === a && (a = void 0 !== t ? "" + t : l), e.color && (s.color = e.color), s.value = "" + a, s.displayMode = o, s.selected = !!e.selected && e.selected, s.disabled = !!e.disabled && e.disabled, s.dataItem = s, void 0 !== t && (s.dataIndex = t), r._alternateItem(s), e.title && (s.title = e.title), d && (s.group = "" + d), s } _alternateItem(e) { const t = this, i = t.alternationStart, r = t.alternationEnd > 0 ? t.alternationEnd : 1 / 0; t.alternationCount <= 0 || (void 0 === t._alternationIndexCounter && (t._alternationIndexCounter = 0), e.dataIndex >= i && e.dataIndex <= r && (e.alternationIndex = t._alternationIndexCounter++, t._alternationIndexCounter === t.alternationCount && (t._alternationIndexCounter = 0))) } _beginUpdate() { this.isUpdating++ } _isUpdating() { return this.isUpdating > 0 } _endUpdate() { this.isUpdating-- } get _scrollHeight() { const e = this; if (0 === e._items.length || e._items.filter((e => !e.hidden)).length < 1) return 0; let t = 0; if (e.isVirtualized) { if (e.__scrollHeight) return e.__scrollHeight; if (0 === e._items.length) return 0; e.isUpdating++; const i = e._createItem(e.dataSource[0]); e.$.itemsInnerContainer.appendChild(i); for (let r = 0; r < e._items.length; r++) { const o = e._items[r]; o.hidden ? (o.height = 0, o.top = t) : (e.itemHeight ? (e.itemHeight < 32 && (e.itemHeight = 32), o.height = e.itemHeight) : (i.$ && i.$.itemContainer ? i.$.itemContainer.firstElementChild.innerHTML = o.label : i.label = o.label, o.height = i.offsetHeight), o.top = t, t += o.height) } e.$.itemsInnerContainer.removeChild(i), e.__scrollHeight = t - e.$.itemsInnerContainer.offsetHeight, e.filterable && (e.__scrollHeight += e.$.filterInput.offsetHeight), t = e.__scrollHeight, e.isUpdating-- } else { for (let i = 0; i < e._items.length; i++) { const r = e._items[i]; r.hidden ? (r.height = 0, r.top = t) : (e.itemHeight ? "auto" !== e.itemHeight && (r.height = e.itemHeight, r.style.height = r.height + "px") : r.height = r.offsetHeight, r.top = r.offsetTop, t += r.height) } t = e.$.itemsInnerContainer.scrollHeight - e.$.itemsInnerContainer.offsetHeight, e.filterable && t > 0 && (t += e.$.filterInput.offsetHeight), e.__scrollHeight = t } return t } _initializeRecyclingItems() { const e = this; if (!e.dataSource || e.dataSource && 0 === e.dataSource.length || !e.isVirtualized) return; let t = 0, i = e.offsetHeight || 400; e.$.itemsInnerContainer.innerHTML = "", e._recyclingItems = []; const r = function () { for (let r = 0; r < e.dataSource.length; r++) { const o = e.dataSource[r], s = e._createItem(o); if (e.itemHeight && "auto" !== e.itemHeight && (s.style.height = e.itemHeight + "px"), e.$.itemsInnerContainer.appendChild(s), t += s.offsetHeight, s.dataItem = e._items[r], e._recyclingItems.push(s), t > 1.5 * i) break } }; r(); let o = 0; for (; t < 1.5 * i && ++o < 5;)r() } _dataBind() { const e = this; if (e._scrollView || (e._scrollView = new JQX.Utilities.Scroll(e, e.$.horizontalScrollBar, e.$.verticalScrollBar)), "function" == typeof e.dataSource && (e._items = [], delete e._filteredItems, !e.filterable)) { const t = e.dataSource("", (t => { e.clearItems(), e.insert(0, t) })); t && Array.isArray(t) && (e.clearItems(), e.insert(0, t)) } if ("string" == typeof e.dataSource && (e.dataSource = JSON.parse(e.dataSource)), null !== e.dataSource && Array.isArray(e.dataSource)) { e.isUpdating++; const t = t => { e._items = [], e._groups = [], delete e._filteredItems; const i = e.dataSource; for (let r = 0; r < i.length; r++) { const o = i[r], s = e._createItem(o, r, !t); e._items[r] = s, t && t.appendChild(s) } }; if (e.isVirtualized) t(), e._initializeRecyclingItems(); else { const i = document.createDocumentFragment(); e.$.itemsInnerContainer.innerHTML = "", t(i), e.$.itemsInnerContainer.appendChild(i) } e.isUpdating-- } const t = e.shadowRoot ? e.shadowRoot.querySelectorAll("jqx-list-item") : e.querySelectorAll("jqx-list-item"), i = function () { e.isUpdating++, e.dataSource || (e._initializeHtmlListItems(), e._initializeHtmlListGroups()), e.grouped && e._group(), e.sorted && e._sort(), e._refreshLayout(), e._initializeSelection(), e.isInitialized = !0, e._canSort = e.autoSort, e.isUpdating--, e.itemTemplate && e._handleItemTemplate(e.itemTemplate) && (e._items.map((t => e._applyTemplate(t))), e._refreshLayout()), e.__onCompleted && (e._onCompleted = e.__onCompleted, e.__onCompleted = null, e._onCompleted()), e.topVisibleIndex > -1 && e._setTopVisibleIndex(e.topVisibleIndex), e.$.fireEvent("bindingComplete"), e._updateTopVisibleIndex(), 0 === e._items.length && e.clearItems(), e._applyAriaSelected() }; 0 === t.length ? i() : (e._onCompleted && (e.__onCompleted = e._onCompleted, e._onCompleted = null), e._ensureItemsReady(t, i)) } _ensureItemsReady(e, t) { const i = this, r = function () { const i = function (t) { for (let i = 0; i < e.length; i++)e[i].context = "node" === t ? e[i] : document }; i("node"), t(), i() }; if (0 === e.length) r(); else { i._nodesReadyListeners = 0; for (let t = 0; t < e.length; t++) { const o = e[t], s = function () { i._nodesReadyListeners--, 0 === i._nodesReadyListeners && (r(), delete i._nodesReadyListeners) }.bind(i); o.isCompleted || (i._nodesReadyListeners++, o._onCompleted = s) } 0 === i._nodesReadyListeners && r() } } _initializeInnerHTML() { const e = this; e.$.itemsInnerContainer.innerHTML.indexOf("<option") >= 0 ? e.$.itemsInnerContainer.innerHTML = e.$.itemsInnerContainer.innerHTML.replace(/<optgroup/gi, "<jqx-list-items-group").replace(/<\/optgroup/gi, "</jqx-list-items-group").replace(/<option/gi, "<jqx-list-item").replace(/<\/option/gi, "</jqx-list-item") : e.$.itemsInnerContainer.innerHTML.indexOf("<ul") >= 0 && (e.$.itemsInnerContainer.innerHTML = e.$.itemsInnerContainer.innerHTML.replace(/<ul/gi, "<jqx-list-items-group").replace(/<\/ul/gi, "</jqx-list-items-group").replace(/<li/gi, "<jqx-list-item").replace(/<\/li/gi, "</jqx-list-item")) } _initializeHtmlListItems() { const e = this, t = e.shadowRoot && "shadow" === e.shadowDomMode ? e.shadowRoot.querySelectorAll("jqx-list-item") : e.querySelectorAll("jqx-list-item"), i = "checkBox" === e.selectionMode || "radioButton" === e.selectionMode ? e.selectionMode : "plain", r = function (e, t, i) { return void 0 !== e[t] ? "" + e[t] : e[i] }; e._items = []; let o = 0; for (let s = 0; s < t.length; s++) { const n = t[s]; n.dataIndex = s, n.label = n.innerHTML, n.dataItem = n, n.top || (n.top = o), n.height || (n.height = n.offsetHeight), o += n.height, n.value || (n.value = "" + s); const l = r(n, e.displayMember, "label"), a = r(n, e.valueMember, "value"), d = r(n, e.groupMember, "group"); n.label !== l && (n.label = l), n.value !== a && (n.value = a), n.group !== d && (n.group = d); const c = n.context; n.context = document, n.displayMode = i, n.context = c, e._alternateItem(n), n.selected && (e.selectedIndexes.push(s), e.selectedValues.push(n.value)), e._items.push(n) } e.itemTemplate && e._handleItemTemplate(e.itemTemplate) && e._items.map((t => e._applyTemplate(t))) } _group() { const e = this; e.isUpdating++; let t = [], i = []; e._canSort && e._unsort(); for (let i = 0; i < e._items.length; i++) { const r = e._items[i]; let o = r.group ? r.group.trim() : r.innerHTML.charAt(0) || r.label.charAt(0); o += " ", t[o] ? t[o].items.push(r) : t[t.length++] = t[o] = { items: [r], label: o } } if (e.isVirtualized) { e._groups = []; for (let e = 0; e < t.length; e++) { const r = t[e]; r.dataIndex = e, r.grouped = !0, r.hidden = !1, r.displayMode = "plain", i.push(r); for (let o = 0; o < t[e].items.length; o++) { const e = r.items[o]; e.group = r, i.push(e) } } e._groups = t, e._items = i } else { for (; e.$.itemsInnerContainer.firstChild;)e.$.itemsInnerContainer.removeChild(e.$.itemsInnerContainer.firstChild); const r = document.createDocumentFragment(); e._groups = []; for (let o = 0; o < t.length; o++) { const s = t[o], n = document.createElement("jqx-list-items-group"); n.label = s.label, n.dataIndex = o; for (let e = 0; e < t[o].items.length; e++) { const t = s.items[e]; i.push(t), t.group = s.label, n.appendChild(t) } e._groups.push(n), r.appendChild(n) } e._items = i, /Trident|Edge/.test(navigator.userAgent) ? setTimeout((function () { e.$.itemsInnerContainer.appendChild(r) }), 50) : e.$.itemsInnerContainer.appendChild(r) } e.sorted && e._sort(), e.isUpdating-- } _ungroup() { const e = this; e.isUpdating++, e._groups = [], e._canSort && e._unsort(); let t = []; if (e.isVirtualized) for (let i = 0; i < e._items.length; i++) { const r = e._items[i]; r.grouped || t.push(r) } else { const i = document.createDocumentFragment(); for (let r = 0; r < e._items.length; r++) { const o = e._items[r]; i.appendChild(o), t.push(o) } t.length > 0 && (e.$.itemsInnerContainer.innerHTML = "", e.$.itemsInnerContainer.appendChild(i)) } e._items = t, e.sorted && e._sort(), e.isUpdating-- } _initializeHtmlListGroups() { const e = this, t = e.$.itemsInnerContainer.querySelectorAll("jqx-list-items-group"); e._groups = []; for (let i = 0; i < t.length; i++) { const r = t[i]; r.dataIndex = i, e._groups.push(r) } } _initializeSelection() { const e = this, t = e.selectedIndexes.slice(0), i = e.selectedValues.slice(0); e.clearSelection(), "oneOrManyExtended" === e.selectionMode && (e._keysPressed.Control = !0); for (let r = 0; r < e._items.length; r++) { const o = e._items[r]; (t.indexOf(r) >= 0 || i.indexOf(o.value || o.label) >= 0) && (e._focusedItem && (e._focusedItem._focused = !1), e._focusedItem = null, e.select(o)) } "oneOrManyExtended" === e.selectionMode && (e._keysPressed.Control = !1) } onItemUpdated() { const e = this; e.isInitialized && !e._isUpdating() && (e.isUpdating++, e._refreshLayout(), e.isUpdating--) } _refreshItems() { const e = this; if (e.isInitialized && !e._isUpdating()) { if (e.isUpdating++, e.grouped ? e._ungroup() : e.sorted && e._canSort && e._unsort(), !e.isVirtualized) { e._items = []; const t = e.shadowRoot ? e.shadowRoot.querySelectorAll("jqx-list-item") : e.querySelectorAll("jqx-list-item"); for (let i = 0; i < t.length; i++)t[i].dataIndex = i, e._alternateItem(t[i]), e._items.push(t[i]) } e.grouped ? e._group() : e.sorted && e._sort(), e._refreshLayout(), e.isUpdating-- } } _applyIncrementalSearch(e) { const t = this; null === t.incrementalSearchDelay || isNaN(t.incrementalSearchDelay) || ["Shift", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Control", "Home", "End", "PageUp", "PageDown"].indexOf(e) > -1 || (0 !== t._incrementalSearchQuery.indexOf(e) && (t._incrementalSearchQuery += e), t._incrementalSearchTimer && clearTimeout(t._incrementalSearchTimer), t._incrementalSearch(), t._incrementalSearchTimer = setTimeout((function () { t._incrementalSearchQuery = "" }), t.incrementalSearchDelay)) } select(e) { const t = this; if (("string" != typeof e || (e = t.getItem(e))) && ("number" != typeof e || (e = t.getItem(e))) && !(e.grouped || e.readonly || !t._items.length || e instanceof HTMLElement && !t.contains(e))) { if ("none" === t.selectionMode) return t.selectedIndexes = [], void (t.selectedValues = []); switch (!t._focusedItem !== e && "none" !== t.selectionMode && (t._focusedItem && (t._focusedItem._focused = !1), t._focusedItem = e, e._focused = !0), t.selectionMode) { case "one": case "zeroAndOne": return (1 !== t.selectedIndexes.length || t.selectedIndexes[0] !== t._indexOf(e)) && (t._previouslySelectedIndexes = t.selectedIndexes, t.selectedIndexes.length >= 1 && t.clearSelection(), t._select(e), delete t._previouslySelectedIndexes, !0); case "zeroOrOne": return 1 === t.selectedIndexes.length && t.selectedIndexes[0] === t._indexOf(e) ? (t.unselect(e), !0) : (t._previouslySelectedIndexes = t.selectedIndexes, t.selectedIndexes.length >= 1 && t.clearSelection(), t._select(e), delete t._previouslySelectedIndexes, !0); case "radioButton": if (t._previouslySelectedIndexes = t.selectedIndexes, t.$.itemsInnerContainer.querySelectorAll("jqx-list-items-group").length > 0) { const i = e.parentNode; if (!e.selected) { for (let e in i.children) { const r = i.children[e]; r.selected && t.unselect(r) } t._select(e) } return delete t._previouslySelectedIndexes, !0 } if (t.isVirtualized && t._groups.length > 0) { const i = e.group; if (!e.selected) { for (let e in i.items) { const r = i.items[e]; r.selected && t.unselect(r) } t._select(e) } return delete t._previouslySelectedIndexes, !0 } return e.selected || (t.selectedIndexes.length >= 1 && t.clearSelection(), t._select(e)), delete t._previouslySelectedIndexes, !0; case "oneOrMany": return e.selected ? t.selectedIndexes.length > 1 && t.unselect(e) : t._select(e), !0; case "zeroOrMany": case "checkBox": return e.selected ? t.unselect(e) : t._select(e), !0; case "oneOrManyExtended": { const i = t.selectedValues; if (t._keysPressed.Control) return t.selectedIndexes.length > 1 && e.selected ? (t.unselect(e), t._focus(t._items[t.selectedIndexes[0]])) : t._select(e), !0; if (t._keysPressed.Shift) { const r = t._items[t.selectedIndexes[0]]; let o; t.clearSelection(); const s = i.indexOf(r.value) >= 0 || r.selected; if (t._select(r, s), t._indexOf(r) > t._indexOf(e)) for (o = t._indexOf(r) - 1; o >= t._indexOf(e);) { const e = t._items[o], r = i.indexOf(e.value) >= 0 || e.selected; t._select(e, r), o-- } else for (o = t._indexOf(r) + 1; o <= t._indexOf(e);) { const e = t._items[o], r = i.indexOf(e.value) >= 0 || e.selected; t._select(e, r), o++ } const n = []; for (let e = 0; e < i.length; e++)n.push(t.getItem(i[e])); if (n.length > 0 && !t._propertyChanging) { let r = []; for (let e = 0; e < t.selectedValues.length; e++) { const o = t.selectedValues[e]; i.indexOf(o) < 0 && r.push(t.getItem(o)) } t.$.fireEvent("change", { addedItems: r, removedItems: n, selected: e.selected, disabled: e.disabled, index: t._indexOf(e), label: e.label, value: e.value }), t._updateTargetValue() } return !0 } for (let r = 0; r < i.length; r++) { const o = i[r], s = t.getItem(o); e !== s && t.unselect(s) } return t.clearSelection(), t._select(e, i.indexOf(e.value) >= 0), !0 } }return !1 } } _applyTemplate(e, t) { const i = this; if (null === i.itemTemplate) return; if ("function" == typeof i.itemTemplate) return void i.itemTemplate(e, { label: e.label, value: e.value, index: i._items.indexOf(e) }); if (!i._bindingDetails || 0 === i._bindingDetails.length) return; const r = i._bindingDetails.length; let o, s, n = document.importNode(i._template.content, !0); for (let t = 0; t < r; t++) { o = n.childNodes[i._bindingDetails[t].childNodeIndex], s = i._bindingDetails[t].bindingString.length; for (let r = 0; r < s; r++) { const s = i._bindingDetails[t].bindingString[r], n = s.indexOf("label") >= 0 ? e.label : e.value; o.innerHTML = o.innerHTML.replace(s, n) } } e.innerHTML = ""; for (let t = 0; t < n.childNodes.length; t++)n.childNodes[t].outerHTML && (e.innerHTML += n.childNodes[t].outerHTML); !1 !== t && (i._scrollHeightTimer && (clearInterval(i._scrollHeightTimer), i._scrollHeightCounter = 0), i._scrollHeightTimer = setInterval((function () { i._lastScrollHeight === i.$.itemsInnerContainer.scrollHeight && 10 !== i._scrollHeightCounter || (i._refreshLayout(), clearInterval(i._scrollHeightTimer)), i._lastScrollHeight = i.$.itemsInnerContainer.scrollHeight, i._scrollHeightCounter++ }), 50)) } _filterItems(e, t, i) { const r = this, o = r.$.filterInput.value; let s, n; const l = function () { if (0 === n.length) return r._filteredItems = [], void (t && t()); s = r._queryItems(o, r.filterMode); for (let e = 0; e < n.length; e++)n[e].hidden = !0, n[e].$ && n[e].$.addClass("jqx-hidden"); for (let e = 0; e < s.length; e++) { const t = s[e]; t.hidden = !1, n[e].$ && t.$.removeClass("jqx-hidden") } if (r.grouped && r.isVirtualized) for (let e = 0; e < r._groups.length; e++) { const t = r._groups[e], i = t.items; let o = !0; for (let e = 0; e < i.length; e++)i[e].hidden || (o = !1); o && (t.hidden = !0) } if (r.grouped && !r.isVirtualized) for (let e = 0; e < r._groups.length; e++) { const t = r._groups[e], i = [].concat(...t.querySelectorAll("jqx-list-item")); let o = !0; for (let e = 0; e < i.length; e++)i[e].$.hasClass("jqx-hidden") || (o = !1); o ? t.$.addClass("jqx-hidden") : t.$.removeClass("jqx-hidden") } if (r._filteredItems = s, r._refreshLayout(), t && t(), e) return; const i = r._propertyChanging; r._propertyChanging = !0, r._refreshSelection(), r._propertyChanging = i }; if ("function" == typeof r.dataSource) if (o || i) { const e = function (e) { (o || i) && r.isAttached && (r._updateListBoxAfterQuery = function () { s = n = r._items, l() }, r.clearItems(), r.insert(0, e)) }, t = r.dataSource(o, e); if (t) { if (!o && !i) return; r._updateListBoxAfterQuery = function () { s = n = r._items, l() }, r.clearItems(), r.insert(0, t) } } else r.clearItems(), s = n = r._items, l(), r.$.fireEvent("bindingComplete"); else { if (n = r._items, 0 === n.length) return; l() } } _getNextItem(e) { const t = this._items, i = this._items.length; let r = Math.max(e + 1, 0); for (; r < i;) { const e = t[r]; if (!(e.disabled || e.hidden || e.grouped || e.readonly)) return e; r++ } return t[e] } _getPreviousItem(e) { const t = this._items; let i = Math.max(e - 1, 0); for (; i > -1;) { const e = t[i]; if (!(e.disabled || e.hidden || e.grouped || e.readonly)) return e; i-- } return t[e] } get _scrollWidth() { const e = this, t = e._items; return e.__scrollWidth || (e.__scrollWidth = (() => { const e = this, i = e.virtualized, r = e.itemMeasureMode; let o = 0, s = ""; function n(t) { const i = e._createItem({ label: t }); i.style.position = "absolute", e.$.itemsContainer.appendChild(i), i.label = t, i.style.width = "auto", i.isCompleted && (i.$.itemContainer.style.width = "auto"); const r = getComputedStyle(i), o = parseInt(r.paddingLeft) + parseInt(r.paddingRight), s = i.$.itemContainer || i, n = s.offsetWidth + s.offsetLeft + o; return i.parentNode.removeChild(i), n } for (let e = 0; e < t.length; e++) { const l = t[e]; if (!l.hidden) if ("auto" === r) { const e = i ? l.label : l.textContent.trim(); e.length > s.length && (s = e) } else o = Math.max(o, n(l.label)) } return "auto" === r ? n(s) : o })()), e.__scrollWidth } update(e, t) { const i = this, r = i._items[e]; if (r) { if ("string" == typeof t) r.label = t, void 0 === r.value && (r.value = t); else for (let e in t) "selected" === e && r[e] !== t[e] ? i.select(r) : r[e] = t[e], "group" === e && i._refreshItems(); (i.sorted || i.grouped || i.isVirtualized) && (i._refreshItems(), i._refreshSelection()) } else i.error(i.localize("indexOutOfBound", { elementType: i.nodeName.toLowerCase(), method: "update" })) } insert(e, t) { const i = this; let r = []; if ((!e || e < 0) && (e = 0), Array.isArray(t)) { i.isUpdating++; for (let o = 0; o < t.length; o++) { const s = t[o], n = i._createItem(s); r.push(n), e >= i._items.length || 0 === i._items.length ? i.appendChild(n) : i.insertBefore(n, i._items[e]) } i.isUpdating-- } else { const o = i._createItem(t); r.push(o), e >= i._items.length || 0 === i._items.length ? i.appendChild(o) : i.insertBefore(o, i._items[e]) } r.length > 0 ? (r.map((e => i._applyTemplate(e))), i._ensureItemsReady(r, (function () { i._refreshItems(), 0 !== i._items.length && (i._updateListBoxAfterQuery && (i._updateListBoxAfterQuery(), delete i._updateListBoxAfterQuery), i._refreshSelection(), i.$.fireEvent("bindingComplete")) }))) : i._updateListBoxAfterQuery && (i._updateListBoxAfterQuery(), delete i._updateListBoxAfterQuery) } removeAt(e) { const t = this, i = t._items[e]; i ? (i.selected && t.unselect(i), t.isVirtualized ? t._items.splice(e, 1) : i.parentNode.removeChild(i), t._refreshItems(), t._refreshSelection(), 0 === t.selectedIndexes.length && t._items.length > 0 && ("oneOrMany" !== t.selectionMode && "one" !== t.selectionMode && "oneOrManyExtended" !== t.selectionMode || t.select(t._items[0]))) : t.error(t.localize("indexOutOfBound", { elementType: t.nodeName.toLowerCase(), method: "remove" })) } _queryItems(e, t) { const i = this, r = [], o = function (r, o) { if (r.grouped) return r; switch (t) { case "startsWith": if (0 === r.label.indexOf(o)) return r; break; case "startsWithIgnoreCase": if (0 === r.label.toLowerCase().indexOf(o.toLowerCase())) return r; break; case "doesNotContain": if (r.label.indexOf(o) < 0) return r; break; case "doesNotContainIgnoreCase": if (r.label.toLowerCase().indexOf(o.toLowerCase()) < 0) return r; break; case "contains": if (r.label.indexOf(o) > -1) return r; break; case "containsIgnoreCase": if (r.label.toLowerCase().indexOf(o.toLowerCase()) > -1) return r; break; case "equals": if (0 === r.label.localeCompare(o)) return r; break; case "equalsIgnoreCase": if (0 === r.label.toLowerCase().localeCompare(o.toLowerCase())) return r; break; case "endsWith": if (r.label.endsWith(o)) return r; break; case "endsWithIgnoreCase": if (r.label.toLowerCase().endsWith(o.toLowerCase())) return r; break; case "custom": if (i.filterCallback(r, e)) return r }return null }; if (0 === e.length) return i._items; for (let t = 0; t < i._items.length; t++) { const s = o(i._items[t], e); s && r.push(s) } return r } _select(e, t) { const i = this, r = i.selectedIndexes.indexOf(i._indexOf(e)), o = i.selectedIndexes.slice(0), s = i.selectedValues.slice(0); if (e.selected = !0, -1 !== r) return i._recycle(), !1; if (o.push(i._indexOf(e)), s.push(e.value || e.label), i.selectedIndexes = o, i.selectedValues = s, i._recycle(), i.$.hiddenInput.value = s.toString(), !i.isCompleted || t || !i.isInitialized || i._propertyChanging) return; let n = []; if (i._previouslySelectedIndexes) { for (let e = 0; e < i._previouslySelectedIndexes.length; e++)i.selectedIndexes.indexOf(i._previouslySelectedIndexes[e]) < 0 && n.push(i._items[i._previouslySelectedIndexes[e]]); delete i._previouslySelectedIndexes } return i.$.fireEvent("change", { addedItems: [e], removedItems: n, selected: e.selected, disabled: e.disabled, index: i._indexOf(e), label: e.label, value: e.value }), i._updateTargetValue(), !0 } _updateTargetValue() { const e = this; if (e.dataset.target) { const t = document.querySelector(e.dataset.target); if (t) { const i = e.dataset.property, r = e.value; i && void 0 !== t[i] && (t[i] = r) } } } _setTopVisibleIndex(e) { const t = this; if ("number" == typeof e && (t.topVisibleIndex = Math.max(0, e), e = t._items[t.topVisibleIndex]), !e) return !1; e.top !== t.scrollTop && (t.scrollTop = e.top, t.isVirtualized || (t.$.itemsContainer.scrollTop = t.scrollTop), t.scrollHeight === t.scrollTop && t._updateTopVisibleIndex()) } _updateTopVisibleIndex() { const e = this, t = e.scrollTop + e._scrollView.verticalScrollBar.offsetHeight - e.offsetHeight; let i; if (e.scrollTop < e.scrollHeight / 2) { for (let r = 0; r < e._items.length; r++)if (e._items[r].top >= t) { i = e._items[r]; break } } else for (let r = e._items.length - 1; r >= 0 && !(e._items[r].top < t); r--)i = e._items[r]; if (i) { const t = e.context; e.context = e, e.topVisibleIndex = i.dataIndex, e.context = t } } unselect(e) { const t = this; if (!e) return; if ("string" == typeof e && !(e = t.getItem(e))) return; if ("none" === t.selectionMode) return void t.clearSelection(); const i = t.selectedIndexes.indexOf(t._indexOf(e)), r = t.selectedIndexes.slice(0), o = t.selectedValues.slice(0); return e.selected = !1, i >= 0 && (r.splice(i, 1), o.splice(i, 1), t.selectedIndexes = r, t.selectedValues = o, t.$.hiddenInput.value = o.toString(), t.isCompleted && !t._propertyChanging ? (t.$.fireEvent("change", { addedItems: [], removedItems: [e], selected: e.selected, disabled: e.disabled, index: t._indexOf(e), label: e.label, value: e.value }), t._updateTargetValue(), t._recycle(), !0) : void 0) } _handleItemTemplate(e) { if (null === e || !e) return; if ("function" == typeof e) return e; const t = this; if (!("content" in document.createElement("template"))) return t.error(t.localize("htmlTemplateNotSuported", { elementType: t.nodeName.toLowerCase() })), void (t.itemTemplate = null); if (null === (e = document.getElementById(e)) || !("content" in e)) return t.error(t.localize("invalidTemplate", { elementType: t.nodeName.toLowerCase(), property: "itemTemplate" })), void (t.itemTemplate = null); const i = e.content, r = i.childNodes.length, o = /{{\w+}}/g; let s, n; t._bindingDetails = [], t._template = e; for (let e = 0; e < r; e++) { for (n = []; s = o.exec(i.childNodes[e].innerHTML);)n.push(s[0]); n.length > 0 && t._bindingDetails.push({ childNodeIndex: e, bindingString: n }) } return !0 } _handleKeyStrokes(e) { const t = this, i = "radioButton" === t.selectionMode || "checkBox" === t.selectionMode || "zeroOrMany" === t.selectionMode || "oneOrMany" === t.selectionMode || "zeroOrOne" === t.selectionMode; let r = t._items; if (t.filterable && t.$.filterInput.value.length > 0 && (r = t._filteredItems), !t.disabled && !t.readonly && r.length) { switch (e) { case "ArrowLeft": case "ArrowUp": t._handleArrowKeys(!0); break; case "ArrowRight": case "ArrowDown": t._handleArrowKeys(!1); break; case " ": { if (t.selectedIndexes.length < 1 && !t._focusedItem) return; const e = t._focusedItem ? t._focusedItem : t._items[t.selectedIndexes[t.selectedIndexes.length - 1]], i = e => { e.selected && "radioButton" !== t.selectionMode ? t.unselect(e) : t.select(e) }; if ("oneOrMany" === t.selectionMode) return void (e.selected && t.selectedIndexes.length > 1 ? i(e) : e.selected || i(e)); i(e); break } case "Home": if (0 === r.length) return; i || (t._keysPressed.Shift || t.clearSelection(), t.select(r[0])), t._focus(r[0]), t.scrollTop = 0; break; case "End": if (0 === r.length) return; i || (t._keysPressed.Shift || t.clearSelection(), t.select(r[r.length - 1])), t._focus(r[r.length - 1]), t.scrollTop = t.scrollHeight; break; case "PageUp": t._pageUpKeyHandler(r); break; case "PageDown": t._pageDownKeyHandler(r) }t._recycle() } } _horizontalScrollbarHandler(e) { const t = this; e && e.stopPropagation && e.stopPropagation(), t.isVirtualized ? t._recycle() : t.$.itemsContainer.scrollLeft = t._getScrollLeft(e.detail.value) } _getScrollLeft(e, t) { const i = this; if (!i.rightToLeft) return e; if (JQX.Utilities.Core.Browser.Chrome) { if (!t) { const e = 2 * (parseInt(getComputedStyle(i.$.itemsInnerContainer).getPropertyValue("--jqx-list-item-horizontal-offset")) || 0); t = i._scrollWidth - i.$.itemsContainer.offsetWidth - e } e = t - e } else e *= -1; return e } _unsort() { const e = this; e.isUpdating++; const t = function (e, t) { let i = e.dataIndex, r = t.dataIndex; return i < r ? -1 : i > r ? 1 : 0 }; if (e.isVirtualized) if (e._groups.length > 0) { e._groups.sort(t); let i = []; for (let r = 0; r < e._groups.length; r++) { const o = e._groups[r], s = [].concat(...o.items); s.sort(t), i.push(o), i = i.concat(s) } e._items = i } else e._items.sort(t); else { if (e._groups.length > 0) { e._groups.sort(t); let i = []; for (let r = 0; r < e._groups.length; r++) { const o = e._groups[r], s = [].concat(...o.querySelectorAll("jqx-list-item")); s.sort(t), i = i.concat(s) } e._items = i } else e._items.sort(t); e._applySortOrder() } e.isUpdating-- } _applySortOrder() { const e = function (e) { for (let t = 0; t < e.length; t++) { const i = e[t], r = i.parentNode; r && r.appendChild(i) } }; e(this._items), e(this._groups) } _sort() { const e = this; if (!e._canSort) return; e.isUpdating++; const t = function (t, i) { let r = t.label, o = i.label; if ("asc" === e.sortDirection) { if (r < o) return -1; if (r > o) return 1 } else { if (r < o) return 1; if (r > o) return -1 } return 0 }; if (e._groups.sort(t), e.isVirtualized) if (e._groups.length > 0) { let i = []; for (let r = 0; r < e._groups.length; r++) { const o = e._groups[r], s = [].concat(...o.items); i.push(o), s.sort(t), i = i.concat(s) } e._items = i } else e._items.sort(t); else { if (e._groups.length > 0) { let i = []; for (let r = 0; r < e._groups.length; r++) { const o = e._groups[r], s = [].concat(...o.querySelectorAll("jqx-list-item")); s.sort(t), i = i.concat(s) } e._items = i } else e._items.sort(t); e._applySortOrder() } e.isUpdating-- } getItem(e) { const t = this; for (let i = 0; i < t._items.length; i++)if (t._items[i].value === e) return t._items[i]; return null } _focus(e) { const t = this; !e || "none" === t.selectionMode || t.disabled || t.readonly || (t._focusedItem && (t._focusedItem._focused = !1), t._focusedItem = e, t._focusedItem._focused = !0) } _keyDownHandler(e) { const t = this, i = (t.shadowRoot || t.getRootNode()).activeElement || document.activeElement; let r = e.key; if (e.metaKey && (r = "Control"), !t.disabled && !t.readonly && (!t.filterable || t.$.filterInput !== i) && t._focused && 0 !== t._items.length && !t.disabled && !t.displayLoadingIndicator) { if (t.editable) { if ("F2" === r) return void t._dblclickEventHandler({ target: t._focusedItem }); if (t.$.editInput === i) return } if ("none" !== t.selectionMode) { switch (e.stopPropagation(), r) { case "Down": case "Right": case "Left": case "Up": r = "Arrow" + r }if (t.filterable) switch (r) { case "ArrowLeft": case "ArrowRight": return; case "ArrowUp": case "ArrowDown": e.preventDefault() }if (t._applyIncrementalSearch(r), !(["Shift", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Control", " ", "Home", "End", "PageUp", "PageDown"].indexOf(r) < 0)) if (e.preventDefault(), !t._focusedItem && t._items.length > 0) "one" === t.selectionMode || "oneOrMany" === t.selectionMode || "oneOrManyExtended" === t.selectionMode ? t.select(t._items[0]) : t._focus(t._items[0]); else switch (t.selectionMode) { case "one": case "zeroAndOne": if ("Shift" === r || "Control" === r || " " === r) return; t._handleKeyStrokes(r); break; case "oneOrMany": case "zeroOrOne": case "zeroOrMany": case "radioButton": case "checkBox": if ("Shift" === r || "Control" === r) return; t._handleKeyStrokes(r); break; case "oneOrManyExtended": if (" " === r) return; t._keysPressed[r] = "keydown" === e.type, t._handleKeyStrokes(r) } } } } _keyUpHandler(e) { const t = this, i = (t.shadowRoot || t.getRootNode()).activeElement || document.activeElement; if (!t.editable || t.$.editInput !== i) { if (t.filterable && t.$.filterInput === i) return t._filterTimer && clearTimeout(t._filterTimer), void (t._filterTimer = setTimeout((function () { const e = t.context; t.context = t, t._filterItems(), t.scrollTop = t.$.itemsContainer.scrollTop = 0, t.scrollLeft = t.$.itemsContainer.scrollLeft = t._getScrollLeft(0), t.context = e }), 300)); if (t._focused) { if (t._focusedItem && t._focusedItem.hidden && t._filteredItems.length > 0) { let e = t._filteredItems[0]; e.grouped && t._filteredItems.length > 1 && (e = t._filteredItems[1]), t._focus(e), t._recycle() } e.stopPropagation(), e.preventDefault(), t.disabled || ("Escape" === e.key && JQX.ListBox.DragDrop.Dragging && t._cancelDrag(), ["Shift", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Control", " ", "PageUp", "PageDown"].indexOf(e.key) < 0 || (t._keysPressed[e.key] = !1)) } } } _cancelDrag() { if (!JQX.ListBox.DragDrop.Dragging) return; JQX.ListBox.DragDrop.Feedback.parentNode && JQX.ListBox.DragDrop.Feedback.parentNode.removeChild(JQX.ListBox.DragDrop.Feedback); const e = JQX.ListBox.DragDrop.Item, t = e.ownerListBox; if (t.$.fireEvent("dragCancel", { item: e, data: JQX.ListBox.DragDrop, container: t, previousContainer: t }), JQX.ListBox.DragDrop.Feedback = null, JQX.ListBox.DragDrop.DropDetails) { let e = JQX.ListBox.DragDrop.DropDetails.item; e && (e.$.removeClass("jqx-list-item-line-feedback"), e.$.removeClass("jqx-list-item-bottom-line-feedback")) } document.body.classList.remove("jqx-dragging"), delete JQX.ListBox.DragDrop.DraggedFrom, JQX.ListBox.DragDrop.Dragging = !1, JQX.ListBox.DragDrop.Item = null, JQX.ListBox.DragDrop.DropDetails = null } _mouseWheelHandler(e) { const t = this; if ((t.computedHorizontalScrollBarVisibility || t.computedVerticalScrollBarVisibility) && !t.disabled && t.computedVerticalScrollBarVisibility) { const i = t.scrollTop; if (0 === i && e.deltaY < 0 || i === t.scrollHeight && e.deltaY > 0) return; e.stopPropagation(), e.preventDefault(), t.scrollTo(i + t._getScrollCoefficient(e, t.offsetHeight)) } } _pageDownKeyHandler(e) { const t = this; if (0 === e.length) return; let i, r = t._items[t.selectedIndexes[t.selectedIndexes.length - 1]]; if ("checkBox" !== t.selectionMode && "radioButton" !== t.selectionMode && "zeroOrMany" !== t.selectionMode && "oneOrMany" !== t.selectionMode && "zeroOrOne" !== t.selectionMode || t._focusedItem && (r = t._focusedItem), !r) return; const o = t._indexOf(r); let s = r.top + t.$.itemsContainer.offsetHeight - r.height; for (let t = o; t < e.length; t++)if (e[t].top >= s) { i = e[t]; break } i || (i = e[e.length - 1]), "checkBox" === t.selectionMode || "radioButton" === t.selectionMode || "zeroOrMany" === t.selectionMode || "oneOrMany" === t.selectionMode || "zeroOrOne" === t.selectionMode ? t._focus(i) : i.selected || (t._keysPressed.Shift || t.clearSelection(), t.select(i), t._focus(i)), (i.height + i.top > t.$.itemsContainer.scrollTop + t.$.itemsContainer.offsetHeight || i.top < t.$.itemsContainer.scrollTop) && (t.scrollTop = i.top - t.$.itemsContainer.offsetHeight + i.height) } _pageUpKeyHandler(e) { const t = this; if (0 === e.length) return; let i = t._items[t.selectedIndexes[t.selectedIndexes.length - 1]]; if ("checkBox" !== t.selectionMode && "radioButton" !== t.selectionMode && "zeroOrMany" !== t.selectionMode && "oneOrMany" !== t.selectionMode && "zeroOrOne" !== t.selectionMode || t._focusedItem && (i = t._focusedItem), !i) return; const r = i.top - t.$.itemsContainer.offsetHeight; let o; for (let s = t._indexOf(i); s > 0; s--)if (e[s].top <= r) { o = e[s]; break } o || (o = e[0]), "checkBox" === t.selectionMode || "radioButton" === t.selectionMode || "zeroOrMany" === t.selectionMode || "oneOrMany" === t.selectionMode || "zeroOrOne" === t.selectionMode ? t._focus(o) : o.selected || (t._keysPressed.Shift || t.clearSelection(), t.select(o), t._focus(o)), t.scrollTop = o.top, 0 === t._indexOf(o) && (t.scrollTop = 0) } clearItems() { const e = this; e.clearSelection(), e.$.itemsInnerContainer.innerHTML = "", e._items = [], delete e._focusedItem, e.$placeholder.removeClass("jqx-hidden"), e.refresh() } _resizeHandler(e) { this.refresh(e) } refresh(e) { const t = this; if (!e && !t._isUpdatingScrollBars && t.isInitialized) return t._isUpdatingScrollBars = !0, t._initializeRecyclingItems(), t._refreshLayout(), void (t._isUpdatingScrollBars = !1); e && e.target === t && !t._isUpdatingScrollBars && (t._isUpdatingScrollBars = !0, t._initializeRecyclingItems(), t._refreshLayout(), t._isUpdatingScrollBars = !1) } _indexOf(e) { const t = this; if (!e) return -1; let i = t._items.indexOf(e); return -1 === i && (i = t._items.indexOf(t.getItem(e.value))), i } _incrementalSearch() { const e = this, t = "radioButton" !== e.selectionMode && "checkBox" !== e.selectionMode && "zeroOrMany" !== e.selectionMode && "oneOrMany" !== e.selectionMode && "zeroOrOne" !== e.selectionMode; let i, r = 0; switch (e.incrementalSearchMode) { case "containsIgnoreCase": case "equalsIgnoreCase": case "startsWithIgnoreCase": case "endsWithIgnoreCase": i = e._incrementalSearchQuery.toLowerCase(); break; default: i = e._incrementalSearchQuery }const o = function (i) { i.grouped || i.readonly || (t ? (e.selectedIndexes.length > 0 && e.clearSelection(), e._focus(i), e.select(i)) : e._focus(i), (i.height + i.top > e.$.itemsContainer.scrollTop + e.$.itemsContainer.offsetHeight || i.top < e.scrollTop) && (e.scrollTop = i.top), 0 === e._indexOf(i) && (e.scrollTop = 0), e._indexOf(i) === e._items.length - 1 && (e.scrollTop = e.scrollHeight)) }; 0 !== e._previousEntry.localeCompare(i) && (e._incrementalSearchItems = e._queryItems(e._incrementalSearchQuery, e.incrementalSearchMode), delete e._itemPosition), e._previousEntry = i; const s = e._incrementalSearchItems.length; if (0 !== s) if (1 !== s) for (void 0 !== e._itemPosition ? e._itemPosition < s - 1 ? r = e._itemPosition : (r = 0, t ? (e._incrementalSearchItems[e._itemPosition].selected = !1, e.selectedIndexes = [], e.selectedValues = []) : e._incrementalSearchItems[e._itemPosition]._focused = !1) : t && e.clearSelection(); r < s; r++)if (e._incrementalSearchItems[r].selected && t) e._incrementalSearchItems[r].selected = !1, e.selectedIndexes = [], e.selectedValues = []; else { if (t || !e._incrementalSearchItems[r]._focused) return o(e._incrementalSearchItems[r]), void (e._itemPosition = r); e._incrementalSearchItems[r]._focused = !1 } else o(e._incrementalSearchItems[0]) } _selectStartHandler(e) { const t = this, i = (t.shadowRoot || t.getRootNode()).activeElement; t.$.filterInput !== i && t.$.editInput !== i && e.preventDefault() } _handleArrowKeys(e) { const t = this, i = "radioButton" !== t.selectionMode && "checkBox" !== t.selectionMode && "zeroOrMany" !== t.selectionMode && "oneOrMany" !== t.selectionMode && "zeroOrOne" !== t.selectionMode; if (t.disabled || t.readonly) return; let r; if (t._focusedItem && !t._keysPressed.Shift) r = t._indexOf(t._focusedItem), t._focusedItem._focused = !1; else { if (0 === t.selectedIndexes.length) return; r = t.selectedIndexes[t.selectedIndexes.length - 1] } const o = e ? t._getPreviousItem(r) : t._getNextItem(r); t._focus(o), i && (t._keysPressed.Shift ? t.select(o) : t._items[r] !== o && (t.clearSelection(), t.select(o))), t.ensureVisible(o) } _refreshFilter() { const e = this; if (e.filterable) return e.$.filterInput.disabled = !(!e.disabled && !e.displayLoadingIndicator), e.$filterInputContainer.removeClass("jqx-hidden"), void e.$itemsContainer.addClass("filter"); e.$.filterInput.disabled = !0, e.$filterInputContainer.addClass("jqx-hidden"), e.$itemsContainer.removeClass("filter") } _setFocusable() { const e = this; e.disabled || e.unfocusable ? e.removeAttribute("tabindex") : e.tabIndex = e.tabIndex > 0 ? e.tabIndex : 0 } _setLoadingIndicatorVisibility() { const e = this; e.displayLoadingIndicator ? e.$loadingIndicatorContainer.hasClass("jqx-visibility-hidden") ? e.$loadingIndicatorContainer.removeClass("jqx-visibility-hidden") : e.$loadingIndicatorContainer.removeClass("jqx-hidden") : e._areCSSVarsSupported ? e.$loadingIndicatorContainer.addClass("jqx-hidden") : e.$loadingIndicatorContainer.addClass("jqx-visibility-hidden") } _refreshLayout() { const e = this, t = e._filteredItems || e._items; if (e.__scrollHeight = null, e.__scrollWidth = null, e._height = null, e._scrollView || (e._scrollView = new JQX.Utilities.Scroll(e, e.$.horizontalScrollBar, e.$.verticalScrollBar)), e.$itemsContainer.removeClass("hscroll"), e.$itemsContainer.removeClass("vscroll"), !t || null === t || 0 === t.length) return e.scrollWidth = 0, e.scrollHeight = 0, e.$filterInputContainer.removeClass("vscroll"), e.$placeholder.removeClass("jqx-hidden"), e.isVirtualized && e._recycle(), void (e.$.itemsInnerContainer.style.width = ""); e.$placeholder.addClass("jqx-hidden"); const i = 2 * (parseInt(getComputedStyle(e.$.itemsContainer).getPropertyValue("--jqx-list-item-horizontal-offset")) || 0); let r = e._scrollWidth - e.$.itemsContainer.offsetWidth - i, o = e._scrollHeight; if (e._refreshHorizontalScrollBarVisibility(r), e._refreshVerticalScrollBarVisibility(o), e.$.itemsInnerContainer.style.width = "", "hidden" === e.horizontalScrollBarVisibility ? e.$.itemsInnerContainer.style.width = e.$.itemsContainer.offsetWidth - i : e.$.itemsInnerContainer.style.width = Math.max(e.$.itemsContainer.offsetWidth - i, -i + e.__scrollWidth) + "px", e.computedVerticalScrollBarVisibility) return r = e._scrollWidth - e.$.itemsContainer.offsetWidth - i, e._refreshHorizontalScrollBarVisibility(r), "hidden" !== e.horizontalScrollBarVisibility && (e.$.itemsInnerContainer.style.width = "", e.$.itemsInnerContainer.style.width = Math.max(e.$.itemsContainer.offsetWidth - i, -i + e.__scrollWidth) + "px"), e.computedHorizontalScrollBarVisibility && (("visible" !== e.horizontalScrollBarVisibility || 0 !== e.scrollWidth || "visible" === e.horizontalScrollBarVisibility) && (e.__scrollHeight += e._scrollView.hScrollBar.offsetHeight), e.scrollHeight = e.__scrollHeight, e._scrollView.hScrollBar.$.hasClass("bottom-corner") && e._scrollView.hScrollBar.refresh()), void (e.isVirtualized && e._recycle()); r = e._scrollWidth - e.$.itemsContainer.offsetWidth - i, e._refreshHorizontalScrollBarVisibility(r), e.computedHorizontalScrollBarVisibility && (e.scrollHeight = e._scrollHeight, e._refreshVerticalScrollBarVisibility(e.scrollHeight), e.computedVerticalScrollBarVisibility && (r = e._scrollWidth - e.$.itemsContainer.offsetWidth - e._scrollView.vScrollBar.offsetWidth, e._refreshHorizontalScrollBarVisibility(r)), e._scrollView.vScrollBar.$.hasClass("bottom-corner") && e._scrollView.vScrollBar.refresh(), e._scrollView.hScrollBar.$.hasClass("bottom-corner") && e._scrollView.hScrollBar.refresh()), e.isVirtualized && e._recycle(); const s = /Trident|Edge/.test(navigator.userAgent); !e.isRefreshing && s && setTimeout((function () { e.isRefreshing = !0, e._refreshLayout(), e.isRefreshing = !1 }), 50) } _styleChangedHandler() { this._refreshLayout() } _swipeLeftHandler() { } _swipeRightHandler() { } _refreshHorizontalScrollBarVisibility(e) { const t = this; t.scrollWidth = e, t.computedHorizontalScrollBarVisibility ? (t.scrollLeft = t._getScrollLeft(t.$.itemsContainer.scrollLeft, e), t.$itemsContainer.addClass("hscroll")) : t.$itemsContainer.removeClass("hscroll") } _refreshVerticalScrollBarVisibility(e) { const t = this; t.scrollHeight = e, t.computedVerticalScrollBarVisibility ? (t.$itemsContainer.addClass("vscroll"), t.$filterInputContainer.addClass("vscroll")) : (t.$itemsContainer.removeClass("vscroll"), t.$filterInputContainer.removeClass("vscroll")) } _validateTemplate(e, t) { if (null === t || !t) return; const i = this; return "content" in document.createElement("template") ? null !== (t = document.getElementById(t)) && "content" in t ? t : (i.error(i.localize("invalidTemplate", { elementType: i.nodeName.toLowerCase(), property: e })), void (i[e] = null)) : (i.error(i.localize("htmlTemplateNotSuported", { elementType: i.nodeName.toLowerCase() })), void (i[e] = null)) } _getItemIndexByPosition(e) { const t = this, i = (i => { let r = 0, o = i.length - 1; if (e <= 0) return 0; if (i[i.length - 1].top <= e) return i.length - 1; for (; ;) { const s = Math.floor((r + o) / 2), n = i[s]; if (t._isItemInPosition(n, e)) return s; n.top < e ? r = s + 1 : n.top > e && (o = s - 1) } })(t.$.filterInput.value.length > 0 ? t._filteredItems : t._items); return i } _isItemInPosition(e, t) { const i = e.top, r = e.top + e.height; return i <= t && r > t } get isVirtualized() { const e = this; return e.virtualized && e.dataSource && e.dataSource.length > 0 } _recycle() { const e = this; if (!e._recyclingItems) return; let t = e._height; e._height || (t = e._height = e.$.itemsContainer.offsetHeight); let i = 0; const r = e.scrollTop, o = e._getItemIndexByPosition(r), s = e.filterable && e.$.filterInput.value.length > 0 ? e._filteredItems : e._items, n = s[o]; let l = n ? n.top : 0; if (e.$.itemsInnerContainer.style.left = -e.scrollLeft + "px", e.$.itemsInnerContainer.style.top = -r + l + "px", e.isUpdating++, o >= 0) { const n = s.length; for (let a = o; a < n; a++) { const o = s[a]; if (0 !== o.height) { if (!(l + o.height >= r && l <= r + t)) break; { const t = e._recyclingItems[i++]; if (!t) break; t.setAttribute("aria-setsize", n), t.setAttribute("aria-posinset", a), t.context = document, t.dataItem = o, t.label = o.label, t.value = o.value, t.selected = o.selected, t._focused = o._focused, t.hidden = o.hidden, t.grouped = o.grouped, t.readonly = o.readonly, t.style.height = o.height + "px", e._alternateItem(t), o.title ? t.title = o.title : t.title = "", o.grouped ? t.displayMode = "plain" : t.displayMode = o.displayMode, e.scrollWidth > 0 && (t.style.width = e.$.itemsInnerContainer.offsetWidth + e.scrollWidth + "px"), e.itemTemplate && e._handleItemTemplate(e.itemTemplate) && e._applyTemplate(t, !1) } l += o.height } } } if (i < e._recyclingItems.length) for (let t = i; t < e._recyclingItems.length; t++) { const t = e._recyclingItems[i++], r = t.context; t.context = document, t.hidden = !0, t.context = r } e.isUpdating-- } _verticalScrollbarHandler(e) { const t = this, i = e.detail.value; e && e.stopPropagation && e.stopPropagation(), t.isVirtualized ? t._recycle() : t.$.itemsContainer.scrollTop = i, t._updateTopVisibleIndex(), e.context.max !== e.context.value ? e.context.min === e.context.value && t.$.fireEvent("scrollTopReached") : t.$.fireEvent("scrollBottomReached") } _applyAriaSelected() { const e = this, t = e.isVirtualized ? e._recyclingItems : e._items, i = e.selectionMode; for (let e = 0; e < t.length; e++) { const r = t[e]; r.selected ? r.setAttribute("aria-selected", !0) : r.readonly || r.disabled || -1 === ["oneOrManyExtended", "zeroOrMany", "oneOrMany", "checkBox"].indexOf(i) ? r.removeAttribute("aria-selected") : r.setAttribute("aria-selected", !1) } } });
|
|
126
|
+
|
|
127
|
+
/***/
|
|
128
|
+
}),
|
|
129
|
+
|
|
130
|
+
/***/ 8687:
|
|
131
|
+
/***/ (() => {
|
|
132
|
+
|
|
133
|
+
(() => { let t; try { BigInt, t = !0 } catch (i) { t = !1 } JQX.Utilities.Assign("BigNumber", class { constructor(t, i, e) { var r, n = this; if (JQX.Utilities.BigNumber.bigIntSupport) { if (t instanceof JQX.Utilities.BigNumber) { if (!Array.isArray(t._d)) return new JQX.Utilities.BigNumber(t._d); t = (t._s ? "-" : "") + (t._d.slice(0, t._f).join("") || "0") + (t._f != t._d.length ? "." + t._d.slice(t._f).join("") : "") } try { null === t ? n._d = BigInt(0) : "string" == typeof t && -1 !== t.toLowerCase().indexOf("e") ? n._d = BigInt(parseFloat(t)) : n._d = BigInt(t) } catch (i) { try { const i = t.toString().split("."); let e = BigInt(i[0]), r = parseInt(i[1].charAt(0)); if (e >= 0 && r >= 5) e += BigInt(1); else if (e < 0) if (r > 5) e -= BigInt(1); else if (5 === r) { let t = 1, r = i[1].charAt(t), n = !1; for (; "" !== r;)if (t++, r = i[1].charAt(t), "0" !== r) { n = !0; break } n && (e -= BigInt(1)) } n._d = e } catch (t) { n._d = BigInt(0) } } return n._f = n._d.toString().replace("-", "").length, void (n._s = n._d < 0) } if (t instanceof JQX.Utilities.BigNumber) { if ("bigint" == typeof t._d) return new JQX.Utilities.BigNumber(t._d.toString()); for (r in { precision: 0, roundType: 0, _s: 0, _f: 0 }) n[r] = t[r]; return n._d = t._d.slice(), void (t._s && 1 === t._d.length && 0 === t._d[0] && (n._s = !1)) } if (void 0 !== t && ("-0" === t && (t = "0"), new RegExp(/e/i).test(t))) { var s = t.toString().toLowerCase(), a = s.indexOf("e"), l = new JQX.Utilities.BigNumber(s.slice(0, a)), _ = s.slice(a + 2), u = s.slice(a + 1, a + 2), o = new JQX.Utilities.BigNumber(10).pow(u + _); t = l.multiply(o).toString() } for (n.precision = isNaN(i = Math.abs(i)) ? JQX.Utilities.BigNumber.defaultPrecision : i, n.roundType = isNaN(e = Math.abs(e)) ? JQX.Utilities.BigNumber.defaultRoundType : e, n._s = "-" == (t += "").charAt(0), n._f = ((t = t.replace(/[^\d.]/g, "").split(".", 2))[0] = t[0].replace(/^0+/, "") || "0").length, r = (t = n._d = (t.join("") || "0").split("")).length; r; t[--r] = +t[r]); n.round() } static get defaultPrecision() { return 40 } static get defaultRoundType() { return 4 } static get bigIntSupport() { return t && !0 !== JQX.Utilities.BigNumber.ignoreBigIntNativeSupport } add(t) { if (JQX.Utilities.BigNumber.bigIntSupport) return new JQX.Utilities.BigNumber(this._d + new JQX.Utilities.BigNumber(t)._d); let i = this.normalizeOperand(this); if (t = i.normalizeOperand(t), i.isZero() && i._s && (i._s = !1), 0 === t || t.constructor === JQX.Utilities.BigNumber && 1 === t._d.length && 0 === t._d[0]) return new JQX.Utilities.BigNumber(i); if (i._s != (t = new JQX.Utilities.BigNumber(t))._s) return t._s ^= 1, i.subtract(t); var e, r, n = new JQX.Utilities.BigNumber(i), s = n._d, a = t._d, l = n._f, _ = t._f; for (t = Math.max(l, _), l != _ && ((_ = l - _) > 0 ? n._zeroes(a, _, 1) : n._zeroes(s, -_, 1)), e = (l = s.length) == (_ = a.length) ? s.length : ((_ = l - _) > 0 ? n._zeroes(a, _) : n._zeroes(s, -_)).length, r = 0; e; r = (s[--e] = s[e] + a[e] + r) / 10 >>> 0, s[e] %= 10); return r && ++t && s.unshift(r), n._f = t, n.round() } subtract(t) { if (JQX.Utilities.BigNumber.bigIntSupport) return new JQX.Utilities.BigNumber(this._d - new JQX.Utilities.BigNumber(t)._d); let i = this.normalizeOperand(this); if (t = i.normalizeOperand(t), i.isZero() && i._s && (i._s = !1), 0 === t || t.constructor === JQX.Utilities.BigNumber && 1 === t._d.length && 0 === t._d[0]) return new JQX.Utilities.BigNumber(i); if (i._s != (t = new JQX.Utilities.BigNumber(t))._s) return t._s ^= 1, i.add(t); var e, r, n = new JQX.Utilities.BigNumber(i), s = n.abs().compare(t.abs()) + 1, a = s ? n : t, l = s ? t : n, _ = a._f, u = l._f, o = _; for (a = a._d, l = l._d, _ != u && ((u = _ - u) > 0 ? n._zeroes(l, u, 1) : n._zeroes(a, -u, 1)), e = (_ = a.length) == (u = l.length) ? a.length : ((u = _ - u) > 0 ? n._zeroes(l, u) : n._zeroes(a, -u)).length; e;) { if (a[--e] < l[e]) { for (r = e; r && !a[--r]; a[r] = 9); --a[r], a[e] += 10 } l[e] = a[e] - l[e] } return s || (n._s ^= 1), n._f = o, n._d = l, n.round() } multiply(t) { if (JQX.Utilities.BigNumber.bigIntSupport) return new JQX.Utilities.BigNumber(this._d * new JQX.Utilities.BigNumber(t)._d); let i = this.normalizeOperand(this); t = i.normalizeOperand(t); var e, r, n, s = new JQX.Utilities.BigNumber(i), a = s._d.length >= (t = new JQX.Utilities.BigNumber(t))._d.length, l = (a ? s : t)._d, _ = (a ? t : s)._d, u = l.length, o = _.length, g = new JQX.Utilities.BigNumber; for (e = o; e; a && n.unshift(a), g.set(g.add(new JQX.Utilities.BigNumber(n.join("")))))for (n = new Array(o - --e).join("0").split(""), a = 0, r = u; r; a += l[--r] * _[e], n.unshift(a % 10), a = a / 10 >>> 0); return s._s = s._s != t._s, s._f = ((a = u + o - s._f - t._f) >= (r = (s._d = g._d).length) ? i._zeroes(s._d, a - r + 1, 1).length : r) - a, s.round() } divide(t) { if (JQX.Utilities.BigNumber.bigIntSupport) return new JQX.Utilities.BigNumber(this._d / new JQX.Utilities.BigNumber(t)._d); let i = this.normalizeOperand(this); if (t = i.normalizeOperand(t), "0" == (t = new JQX.Utilities.BigNumber(t))) throw new Error("Division by 0"); if ("0" == i) return new JQX.Utilities.BigNumber; var e, r, n, s = new JQX.Utilities.BigNumber(i), a = s._d, l = t._d, _ = a.length - s._f, u = l.length - t._f, o = new JQX.Utilities.BigNumber, g = 0, m = 1, d = 0, h = 0; for (o._s = s._s != t._s, o.precision = Math.max(s.precision, t.precision), o._f = +o._d.pop(), _ != u && s._zeroes(_ > u ? l : a, Math.abs(_ - u)), t._f = l.length, (l = t)._s = !1, l = l.round(), t = new JQX.Utilities.BigNumber; "0" == a[0]; a.shift()); t: do { for (n = d = 0, "0" == t && (t._d = [], t._f = 0); g < a.length && -1 == t.compare(l); ++g) { if (n = g + 1 == a.length, (!m && ++d > 1 || (h = n && "0" == t && "0" == a[g])) && (o._f == o._d.length && ++o._f, o._d.push(0)), "0" == a[g] && "0" == t || (t._d.push(a[g]), ++t._f), h) break t; if (n && -1 == t.compare(l) && (o._f == o._d.length && ++o._f, 1) || (n = 0)) for (; o._d.push(0), t._d.push(0), ++t._f, -1 == t.compare(l);); } if (m = 0, -1 == t.compare(l) && !(n = 0)) for (; n ? o._d.push(0) : n = 1, t._d.push(0), ++t._f, -1 == t.compare(l);); var f; for (r = new JQX.Utilities.BigNumber, e = 0; t.compare(f = r.add(l)) + 1 && ++e; r.set(f)); t.set(t.subtract(r)), !n && o._f == o._d.length && ++o._f, o._d.push(e) } while ((g < a.length || "0" != t) && o._d.length - o._f <= o.precision); return o.round() } mod(t) { if (JQX.Utilities.BigNumber.bigIntSupport) return new JQX.Utilities.BigNumber(this._d % new JQX.Utilities.BigNumber(t)._d); let i = this.normalizeOperand(this); t = i.normalizeOperand(t); var e = i.subtract(i.divide(t).intPart().multiply(t)); return e.isZero() && e._s && (e._s = !e._s), e } pow(t) { if (JQX.Utilities.BigNumber.bigIntSupport) { let i = BigInt(1); for (let e = BigInt(0); e < new JQX.Utilities.BigNumber(t)._d; e += BigInt(1))i *= this._d; return new JQX.Utilities.BigNumber(i) } let i = this.normalizeOperand(this); t = i.normalizeOperand(t); var e, r = new JQX.Utilities.BigNumber(i); if (0 == (t = new JQX.Utilities.BigNumber(t).intPart())) return r.set(1); for (e = Math.abs(t); --e; r.set(r.multiply(i))); return t < 0 ? r.set(new JQX.Utilities.BigNumber(1).divide(r)) : r } set(t) { return t = new JQX.Utilities.BigNumber(t), this._d = t._d, this._f = t._f, this._s = t._s, this } compare(t) { if (JQX.Utilities.BigNumber.bigIntSupport) { const i = new JQX.Utilities.BigNumber(t)._d; return this._d === i ? 0 : this._d > i ? 1 : -1 } let i = this.normalizeOperand(this); t = i.normalizeOperand(t); var e, r, n, s = i, a = i._f, l = new JQX.Utilities.BigNumber(t), _ = l._f, u = [-1, 1]; if (s.isZero() && l.isZero()) return 0; if (s._s != l._s) return s._s ? -1 : 1; if (a != _) return u[a > _ ^ s._s]; for (a = (n = s._d).length, _ = (l = l._d).length, e = -1, r = Math.min(a, _); ++e < r;)if (n[e] != l[e]) return u[n[e] > l[e] ^ s._s]; return a != _ ? u[a > _ ^ s._s] : 0 } negate() { if (JQX.Utilities.BigNumber.bigIntSupport) return new JQX.Utilities.BigNumber(this._d * BigInt(-1)); let t = this.normalizeOperand(this); var i = new JQX.Utilities.BigNumber(t); return i._s ^= 1, i } abs() { if (JQX.Utilities.BigNumber.bigIntSupport) return new JQX.Utilities.BigNumber(this._d < 0 ? this._d * BigInt(-1) : this._d); let t = this.normalizeOperand(this); var i = new JQX.Utilities.BigNumber(t); return i._s = 0, i } intPart() { if (JQX.Utilities.BigNumber.bigIntSupport) return new JQX.Utilities.BigNumber(this._d); let t = this.normalizeOperand(this); return new JQX.Utilities.BigNumber((t._s ? "-" : "") + (t._d.slice(0, t._f).join("") || "0")) } valueOf(t, i) { return this.normalizeOperand(this).toString(t, i) } toString(t, i, e) { function r(t) { var i, e, r = new JQX.Utilities.BigNumber(2), s = []; e = void 0 === t ? n : t; do { i = e.mod(r), s.push(i.toString()), e = e.subtract(i).divide(r).intPart() } while (1 === e.compare(new JQX.Utilities.BigNumber(0))); return s.reverse().join("") } let n, s, a; if (JQX.Utilities.BigNumber.bigIntSupport ? (n = this, s = Array.isArray(n._d) ? (n._s ? "-" : "") + (n._d.slice(0, n._f).join("") || "0") + (n._f != n._d.length ? "." + n._d.slice(n._f).join("") : "") : this._d.toString()) : (n = this.normalizeOperand(this), s = (n._s ? "-" : "") + (n._d.slice(0, n._f).join("") || "0") + (n._f != n._d.length ? "." + n._d.slice(n._f).join("") : "")), void 0 === t || 10 === t) return s; if (n.compare(0) > -1) switch (t) { case 2: a = r(), e && (a = a.padStart(i, "0")); break; case 8: a = function (t) { for (var i = ""; t.length % 3 != 0;)t = "0" + t; for (var e = t.length / 3; e >= 1; e--) { var r = t[3 * e - 3] + "" + t[3 * e - 2] + t[3 * e - 1]; i = parseInt(r, 2).toString(8) + "" + i } return i }(r()); break; case 16: a = function (t) { for (var i = ""; t.length % 4 != 0;)t = "0" + t; for (var e = t.length / 4; e >= 1; e--) { var r = t[4 * e - 4] + "" + t[4 * e - 3] + t[4 * e - 2] + t[4 * e - 1]; i = parseInt(r, 2).toString(16) + "" + i } return i }(r()).toUpperCase(), e && (a = a.padStart(i / 4, "0")) } else a = function (t, i, e) { var r = ""; for (String.prototype.repeat && (t = "0".repeat(e - t.length) + t); t.length < e;)t = "0" + t; for (var n = !0, s = "", a = (r = (r = (r = (r = t.replace(/0/g, "a")).replace(/1/g, "b")).replace(/a/g, "1")).replace(/b/g, "0")).length - 1; a >= 0; a--) { var l; "0" === r.charAt(a) ? !0 === n ? (l = "1", n = !1) : l = "0" : l = !0 === n ? "0" : "1", s = l + "" + s } switch (i) { case 2: return s; case 8: var _, u; switch (e) { case 8: _ = 3, u = "0"; break; case 16: _ = 6, u = "00"; break; case 32: _ = 11, u = "0"; break; case 64: _ = 22, u = "00" }s = u + s; for (var o = "", g = _; g >= 1; g--) { var m = s[3 * g - 3] + "" + s[3 * g - 2] + s[3 * g - 1]; o = parseInt(m, 2).toString(8) + "" + o } return o; case 16: var d; switch (e) { case 8: d = 2; break; case 16: d = 4; break; case 32: d = 8; break; case 64: d = 16 }for (var h = "", f = d; f >= 1; f--) { var p = s[4 * f - 4] + "" + s[4 * f - 3] + s[4 * f - 2] + s[4 * f - 1]; h = parseInt(p, 2).toString(16) + "" + h } return h.toUpperCase() } }(r(n.negate()), t, i); return a } _zeroes(t, i, e) { var r = ["push", "unshift"][e || 0]; for (++i; --i; t[r](0)); return t } round() { if ("_rounding" in this) return this; var t, i, e, r, n = JQX.Utilities.BigNumber, s = this.roundType, a = this._d; for (this._rounding = !0; this._f > 1 && !a[0]; --this._f, a.shift()); for (t = this._f, e = a[i = this.precision + t]; a.length > t && !a[a.length - 1]; a.pop()); return r = (this._s ? "-" : "") + (i - t ? "0." + this._zeroes([], i - t - 1).join("") : "") + 1, a.length > i && (e && s != n.DOWN && (s == n.UP || (s == n.CEIL ? !this._s : s == n.FLOOR ? this._s : s == n.HALF_UP ? e >= 5 : s == n.HALF_DOWN ? e > 5 : s == n.HALF_EVEN && (e >= 5 && 1 & a[i - 1]))) && this.add(r), a.splice(i, a.length - i)), delete this._rounding, this } isZero() { return 1 === this._d.length && 0 === this._d[0] } normalizeOperand(t) { return t instanceof JQX.Utilities.BigNumber && "bigint" == typeof t._d ? new JQX.Utilities.BigNumber(t._d.toString()) : t } }) })();
|
|
134
|
+
|
|
135
|
+
/***/
|
|
136
|
+
}),
|
|
137
|
+
|
|
138
|
+
/***/ 2754:
|
|
139
|
+
/***/ (() => {
|
|
140
|
+
|
|
141
|
+
JQX.Utilities.Assign("NumericProcessor", class { constructor(t, e) { switch (t[e]) { case "integer": return new JQX.Utilities.IntegerNumericProcessor(t, e); case "floatingPoint": return new JQX.Utilities.DecimalNumericProcessor(t, e); case "complex": return new JQX.Utilities.ComplexNumericProcessor(t, e) } } }), JQX.Utilities.Assign("BaseNumericProcessor", class { constructor(t, e) { const i = this; i.context = t, i._longestLabelSize = 0, i.numericFormatProperty = e, i.regexScientificNotation = new RegExp(/^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)(Y|Z|E|P|T|G|M|k|m|u|n|p|f|a|z|y){1}$/), i.regexNoLeadingZero = new RegExp(/^(-)?[.]\d+$/), i.regexLeadingZero = new RegExp(/^[+\-]?(0+)[1-9]+|^[+\-]?(0{2,})[.]|^(0{2,})$/), i.prefixesToPowers = { Y: 24, Z: 21, E: 18, P: 15, T: 12, G: 9, M: 6, k: 3, m: -3, u: -6, n: -9, p: -12, f: -15, a: -18, z: -21, y: -24 }, window.NIComplex ? i.complexConstructor = window.NIComplex : i.complexConstructor = JQX.Utilities.Complex } prepareForValidation(t, e, i) { const r = this.context, a = t || void 0 !== e; if (i = (i = i.toString()).replace(/\s/g, ""), i = r._discardDecimalSeparator(i), this.regexLeadingZero.test(i)) { const t = this.regexLeadingZero.exec(i); i = t[1] ? i.replace(t[1], "") : t[2] ? i.replace(t[2], "0") : i.replace(t[3], "0") } this.regexNoLeadingZero.test(i) ? i = "-" === i.charAt(0) ? "-0" + i.slice(1) : "0" + i : ("integer" === r[this.numericFormatProperty] && (10 === r._radixNumber || a) || "floatingPoint" === r[this.numericFormatProperty]) && this.regexScientificNotation.test(i) && (i = this.scientificToDecimal(i)); let n, l = !1; if ("complex" === r[this.numericFormatProperty] && !1 === r._regexSpecial.nonNumericValue.test(i)) try { if (r._regexSpecial.exaValue.test(i)) { const t = i.indexOf("E"), e = parseFloat(i.slice(0, t)) * Math.pow(10, 18), r = parseFloat(i.slice(t + 1, -1)); n = new this.complexConstructor(e, r) } else n = new this.complexConstructor(i); l = !0 } catch (t) { l = !1 } if (!1 !== l || !(!a && !1 === r._regex[r._radixNumber].test(i) || a && !1 === r._regex[10].test(i))) return { value: i, enteredComplexNumber: n }; r._handleNonNumericValue(t, e, i) } isENotation(t) { return new RegExp(/e/i).test(t.toString()) } scientificToDecimal(t) { const e = this.regexScientificNotation.exec(t), i = e[1], r = e[2]; return parseFloat(i) * Math.pow(10, this.prefixesToPowers[r]) } _createMeasureLabel() { const t = this.context, e = document.createElement("div"); return e.className = "jqx-label", e.style.position = "absolute", e.style.visibility = "hidden", "far" !== t.scalePosition ? t._measureLabelScale = t.$.scaleNear : t._measureLabelScale = t.$.scaleFar, t._measureLabelScale.appendChild(e), e } _addMajorTickAndLabel(t, e, i, r, a) { const n = this.context, l = n._settings.leftOrTop, o = this.valueToPx(r); let s = "", c = ""; if (parseInt(o) > parseInt(n._measurements.trackLength)) return { tick: s, label: c }; if (n.logarithmicScale && (t = n._formatLabel(Math.pow(10, r))), "jqx-tank" === n.nodeName.toLowerCase() || n._intervalHasChanged) { let e = n._tickIntervalHandler.labelsSize; if (a) { n._labelDummy.innerHTML = t; let a = this.valueToPx(r), l = this.valueToPx(n._drawMax), o = this.valueToPx(n._drawMin), s = n._labelDummy[n._settings.size], c = "vertical" === n.orientation ? n._labelDummy.offsetWidth : n._labelDummy.offsetHeight, m = (s + e.minLabelSize) / 2, u = (s + e.maxLabelSize) / 2; i = n._normalLayout ? a + u < l && a - m > o : a - u > l && a + m < o, c > this._longestLabelSize && (this._longestLabelSize = c) } else this._longestLabelSize = Math.max(e.minLabelOtherSize, e.maxLabelOtherSize, this._longestLabelSize) } return n._tickValues.push(r), s = '<div style="' + l + ": " + o + 'px;" class="jqx-tick"></div>', !1 !== i && (void 0 === e && (n._labelDummy.innerHTML = t, e = n._labelDummy[n._settings.size]), c += '<div class="jqx-label' + (a ? " jqx-label-middle" : "") + '" style="' + l + ": " + (o - e / 2) + 'px;">' + t + "</div>"), { tick: s, label: c } } getWordLength(t) { switch (this.context._unsigned = "u" === t.charAt(0), t) { case "int8": case "uint8": return 8; case "int16": case "uint16": return 16; case "int32": case "uint32": return 32; case "int64": case "uint64": return 64 } } getAngleByValue(t, e, i) { const r = this.context; !1 !== e && r.logarithmicScale && (t = Math.log10(t)); const a = (t - r._drawMin) * r._angleRangeCoefficient; let n; return n = void 0 === r.inverted || !r.inverted && !r.rightToLeft || r.rightToLeft && r.inverted ? r.endAngle - a : r.startAngle + a, i ? n : n * Math.PI / 180 + Math.PI / 2 } getValueByAngle(t, e) { const i = this.context; let r, a, n; for (void 0 === i.inverted || !i.inverted && !i.rightToLeft || i.rightToLeft && i.inverted ? (r = i.endAngle, a = t) : (r = t, a = i._normalizedStartAngle); r < a;)r += 360; if (n = (r - a) / i._angleDifference * i._range + parseFloat(i._drawMin), i.logarithmicScale) { if (i.customInterval) return parseFloat(Math.pow(10, this.getCoercedValue(n, !0)).toFixed(12)); n = Math.pow(10, n) } return e && !i.coerce ? Math.round(n) : (n = this.createDescriptor(n, void 0, !0, !0), this.getCoercedValue(n, !1)) } updateGaugeValue(t) { const e = this.context, i = e.value; e.value = t, e._drawValue = e.logarithmicScale ? Math.log10(t).toString() : t, e._number = this.createDescriptor(e.value), e.$.digitalDisplay.value = t, e.$.fireEvent("change", { value: t, oldValue: i }), e._setAriaValue("valuenow"), delete e._valueBeforeCoercion } validateColorRange(t) { const e = this.context; return Math.min(Math.max(t, e.min), e.max) } getActualValue(t) { return this.context.logarithmicScale ? Math.pow(10, t) : t } drawGaugeLogarithmicScaleMinorTicks(t, e, i) { const r = this.context; let a; e instanceof JQX.Utilities.BigNumber && (e = parseFloat(e.toString())); for (let e in t) if (a = e, e >= 0 && e % 1 == 0) break; for (let t = parseFloat(a); t < r._drawMax; t += e)for (let a = 2; a <= 9; a++) { const n = a * Math.pow(10, t + e - 1); n < r.max && i(n) } for (let t = parseFloat(a); t > r._drawMin; t -= e)for (let e = 2; e <= 9; e++) { const a = e * Math.pow(10, t - 1); a > r.min && i(a) } } _getAngleDifference(t, e) { const i = Math.abs(e - t) % 360; return i > 180 ? 360 - i : i } addCustomTicks() { const t = this, e = t.context, i = !e.logarithmicScale; let r = "", a = ""; function n(n) { const l = e.customTicks[n], o = i ? t.createDescriptor(l) : Math.log10(l), s = n > 0 && n < e.customTicks.length - 1, c = t._addMajorTickAndLabel(e._formatLabel(l), void 0, !0, o, s); r += c.tick, a += c.label } if (t._longestLabelSize = 0, e._tickValues = [], e._labelDummy = t._createMeasureLabel(), e._normalLayout) for (let t = 0; t < e.customTicks.length; t++)n(t); else for (let t = e.customTicks.length - 1; t >= 0; t--)n(t); "jqx-tank" === e.nodeName.toLowerCase() && e._updateScaleWidth(t._longestLabelSize), e._appendTicksAndLabelsToScales(r, a) } addGaugeCustomTicks() { const t = this, e = t.context, i = e._distance, r = e._measurements.radius - i.majorTickDistance; let a, n; function l(i) { const r = e.customTicks[i], l = t.createDescriptor(r), o = t.getAngleByValue(l, !0), s = i > 0 && i < e.customTicks.length - 1; a(o), n(o, r, s) } a = "none" !== e.ticksVisibility && !1 !== e._plotTicks ? function (t) { e._drawTick(t, r, "major") } : function () { }, n = "none" !== e.labelsVisibility && !1 !== e._plotLabels ? function (t, r, a) { e._drawLabel(t, r, i.labelDistance, a) } : function () { }; for (let t = e.customTicks.length - 1; t >= 0; t--)l(t) } }), JQX.Utilities.Assign("IntegerNumericProcessor", class extends JQX.Utilities.BaseNumericProcessor { constructor(t, e) { super(t, e); const i = this; i.context = t, i.defaultMins = { int8: "-128", uint8: "0", int16: "-32768", uint16: "0", int32: "-2147483648", uint32: "0", int64: "-9223372036854775808", uint64: "0" }, i.defaultMaxs = { int8: "127", uint8: "255", int16: "32767", uint16: "65535", int32: "2147483647", uint32: "4294967295", int64: "9223372036854775807", uint64: "18446744073709551615" } } createDescriptor(t, e, i, r, a) { const n = this.context; let l; if (t.constructor !== JQX.Utilities.BigNumber) { let i = !a && n._radixNumber ? n._radixNumber : 10; 10 === i && e && t.constructor !== JQX.Utilities.BigNumber && this.isENotation(t) && (t = JQX.Utilities.BigNumber.bigIntSupport ? new JQX.Utilities.BigNumber(Math.round(t)) : new JQX.Utilities.NumberRenderer(t).largeExponentialToDecimal()), l = n._toBigNumberDecimal ? n._toBigNumberDecimal(t.toString(i, n._wordLengthNumber), i) : new JQX.Utilities.BigNumber(t) } else l = new JQX.Utilities.BigNumber(t); return i && (n._unsigned && -1 === l.compare(0) && (l = l.set(0)), r && (l = this.validate(l, n._minObject, n._maxObject)), l = this.round(l)), l } round(t) { const e = this.context; if (t instanceof window.JQX.Utilities.BigNumber && "bigint" == typeof t._d) return t; if (t instanceof window.JQX.Utilities.BigNumber == 0 || !e._wordLengthNumber || e._wordLengthNumber < 64) return new JQX.Utilities.BigNumber(Math.round(t.toString())); const i = t.mod(1); return 1 === i._d.length && 0 === i._d[0] || ((t = t.intPart())._s ? (i._d[1] > 5 || 5 === i._d[1] && i._d[2]) && (t = t.add(-1)) : i._d[1] > 4 && (t = t.add(1))), t } validate(t, e, i) { let r; return r = -1 === t.compare(e) ? e : 1 === t.compare(i) ? i : t, r } validateMinMax(t, e) { const i = this.context; let r = this.defaultMins[i.wordLength], a = new JQX.Utilities.BigNumber(r), n = this.defaultMaxs[i.wordLength], l = new JQX.Utilities.BigNumber(n), o = "date" !== i.mode; if (void 0 === i._numberRenderer && (i._numberRenderer = new JQX.Utilities.NumberRenderer), t && o) { null !== i.min && (i.min = i.min.toString().replace(/\s/g, ""), this.regexScientificNotation.test(i.min) && (i.min = this.scientificToDecimal(i.min))); let t = this.round(new JQX.Utilities.BigNumber(i.min)); null === i.min || i._minIsNull && i._initialized || !(t.compare(a) >= 0) ? (i._minIsNull = !0, i.min = r, i._minObject = a) : i._minObject = t } if (e && o) { null !== i.max && (i.max = i.max.toString().replace(/\s/g, ""), this.regexScientificNotation.test(i.max) && (i.max = this.scientificToDecimal(i.max))); let t = this.round(new JQX.Utilities.BigNumber(i.max)); null === i.max || i._maxIsNull && i._initialized || !(t.compare(l) <= 0) ? (i._maxIsNull = !0, i.max = n, i._maxObject = l) : i._maxObject = t } o || (i._minObject = new JQX.Utilities.BigNumber(i.min), i._maxObject = new JQX.Utilities.BigNumber(i.max)), this.compare(i._minObject, i._maxObject) || (i._minObject = a, i._maxObject = l, i._drawMin = i.logarithmicScale ? 0 : r, i._drawMax = i.logarithmicScale ? 10 : n, i.min = r, i.max = n), o || (i._minDate = JQX.Utilities.DateTime.fromFullTimeStamp(i.min), i._maxDate = JQX.Utilities.DateTime.fromFullTimeStamp(i.max)) } valueToPx(t) { const e = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0; const i = this.context, r = new JQX.Utilities.BigNumber(i._measurements.trackLength).divide(new JQX.Utilities.BigNumber(i._range)); let a; if (i._normalLayout) { const e = i._drawMin instanceof JQX.Utilities.BigNumber ? i._drawMin : new JQX.Utilities.BigNumber(i._drawMin); t = new JQX.Utilities.BigNumber(t), a = parseFloat(r.multiply(t.subtract(e)).toString()) } else { const e = i._drawMax instanceof JQX.Utilities.BigNumber ? i._drawMax : new JQX.Utilities.BigNumber(i._drawMax); a = parseFloat(this.round(e.subtract(t).multiply(r)).toString()) } return JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = e, a } pxToValue(t) { const e = this.context, i = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; let r; if (JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0, r = e._normalLayout ? e._valuePerPx.multiply(t - e._trackStart) : e._valuePerPx.multiply(e._trackEnd - t), r = this.round(r).toString(), JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = i, e.logarithmicScale) { let t = parseFloat(r) + parseFloat(e._drawMin); return new JQX.Utilities.BigNumber(Math.round(Math.pow(10, t))) } return this.createDescriptor(e._minObject.add(r), !1, !0, !0) } compare(t, e, i) { if ((null === t || null === e) && t !== e) return !0; t.constructor !== JQX.Utilities.BigNumber && (t = new JQX.Utilities.BigNumber(t)); const r = t.compare(e); return !0 !== i ? 0 !== r : r } incrementDecrement(t, e, i) { const r = this.context; let a; if (t.constructor !== JQX.Utilities.BigNumber && (t = new JQX.Utilities.BigNumber(t)), "add" === e) { if (a = t.add(i), void 0 !== r._drawMax) return a.compare(r._drawMax) > 0 ? new JQX.Utilities.BigNumber(r._drawMax) : a } else if (a = t.subtract(i), void 0 !== r._drawMin) return a.compare(r._drawMin) < 0 ? new JQX.Utilities.BigNumber(r._drawMin) : a; return a } render(t, e) { const i = this.context; if (!i.scientificNotation && !0 === e) return new JQX.Utilities.NumberRenderer(new JQX.Utilities.BigNumber(t)).bigNumberToExponent(i.significantDigits); let r = t; return i.scientificNotation && !0 === e ? r = new JQX.Utilities.NumberRenderer(r).toScientific(i.significantDigits, i.precisionDigits) : "string" != typeof t && (r = t.toString(i._radixNumber, i._wordLengthNumber, i.leadingZeros)), r } addTicksAndLabels() { const t = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0; const e = this.context, i = e._measurements.trackLength, r = e._normalLayout, a = e._majorTicksInterval, n = this.round(new JQX.Utilities.BigNumber(e._range).divide(a)), l = i / n, o = new JQX.Utilities.BigNumber(e._drawMin), s = new JQX.Utilities.BigNumber(e._drawMax); let c, m, u, g, d, p, h, b, f, _ = "", S = ""; e._tickValues = [], this._longestLabelSize = 0, r ? (c = o, m = a.add(c.subtract(c.mod(a))), u = m.subtract(c), d = e._formatLabel(o), p = e._tickIntervalHandler.labelsSize.minLabelSize, g = s, h = e._formatLabel(s), b = e._tickIntervalHandler.labelsSize.maxLabelSize) : (c = s, m = c.subtract(c.mod(a)), u = c.subtract(m), d = e._formatLabel(s), p = e._tickIntervalHandler.labelsSize.maxLabelSize, g = o, h = e._formatLabel(o), b = e._tickIntervalHandler.labelsSize.minLabelSize), e._labelDummy = this._createMeasureLabel(), f = this._addMajorTickAndLabel(d, p, !0, c), _ += f.tick, S += f.label; const x = u.divide(a).multiply(l); if (0 !== m.compare(e.max) && x.compare(i) < 0) { const t = e._formatLabel(m.toString()), i = x.compare(p) > 0; f = this._addMajorTickAndLabel(t, void 0, i, m, !0), _ += f.tick, S += f.label } f = this.addMiddleMajorTicks(n, l, x, u, r, a), _ += f.tick, S += f.label, f = this._addMajorTickAndLabel(h, b, !0, g), _ += f.tick, S += f.label, "date" !== e.mode && (_ += this.addMinorTicks(r)), e._measureLabelScale.removeChild(e._labelDummy), delete e._labelDummy, delete e._measureLabelScale, "jqx-tank" === e.nodeName.toLowerCase() && e._updateScaleWidth(this._longestLabelSize), e._appendTicksAndLabelsToScales(_, S), JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = t } addMiddleMajorTicks(t, e, i, r, a, n) { const l = this.context; let o, s = "", c = ""; for (let m = 1; m < t; m++) { let u, g = i.add(m * e); if (a ? u = n.multiply(m).add(r.add(new JQX.Utilities.BigNumber(l._drawMin))) : (u = new JQX.Utilities.BigNumber(l._drawMax).subtract(r).subtract(n.multiply(m)), m === t - 1 && 0 === u.compare(0) && (l._numberRenderer.numericValue = l._tickIntervalHandler.nearestPowerOfTen, o = l._numberRenderer.bigNumberToExponent(1))), 0 !== u.compare(l._drawMax)) { let i = l._formatLabel(u.toString()), r = !0; l._labelDummy.innerHTML = o || i; let a = l._labelDummy[l._settings.size]; g.add(a).compare(t * e) >= 0 && (r = !1); const n = this._addMajorTickAndLabel(i, void 0, r, u, !0); s += n.tick, c += n.label } } return { tick: s, label: c } } addMinorTicks(t) { function e(t) { -1 === r.indexOf(t) && t % n == 0 && (m += '<div style="' + l + ": " + i._numericProcessor.valueToPx(t) + 'px;" class="jqx-tick jqx-tick-minor"></div>') } const i = this.context, r = i._tickValues, a = i._tickIntervalHandler.nearestPowerOfTen, n = i._minorTicksInterval, l = i._settings.leftOrTop; let o, s, c, m = ""; if (t ? (o = r[0], s = r[1], c = r[r.length - 1]) : (o = r[r.length - 1], s = r[r.length - 2], c = r[0]), i.logarithmicScale) !function () { let t = i._measurements.trackLength / r.length, e = .1; t < 20 ? e = 1 : t >= 20 && t < 40 ? e = s - o > 1 ? 1 : .5 : t >= 40 && t < 80 && (e = .2); let a = Math.floor(i._drawMax), n = i._drawMax - a, c = i._drawMax - i._drawMin > r.length; for (let t = i._drawMax; t > 0; t -= 1) { let r = n > 0 ? Math.pow(10, t - n + 1) : Math.pow(10, t), a = r * e; for (let t = r; t > 0; t -= a)if (t < i.max && t > i.min) { let e = new JQX.Utilities.BigNumber(Math.log10(t)); (e % 1 == 0 && c || !c) && (m += '<div style="' + l + ": " + i._numericProcessor.valueToPx(e) + 'px;" class="jqx-tick jqx-tick-minor"></div>') } } }(); else { for (let t = s; o.compare(t) < 0; t = t.subtract(a))e(t); for (let t = s.add(a); c.compare(t) > 0; t = t.add(a))e(t) } return m } validateCustomTicks() { const t = this.context, e = "date" !== t.mode; let i = []; for (let r = 0; r < t.customTicks.length; r++) { let a = t.customTicks[r]; e ? a = this.createDescriptor(a, !1, !0) : void 0 === a._d && (a = JQX.Utilities.DateTime.validateDate(a).getTimeStamp()), a.compare(t._minObject) >= 0 && a.compare(t._maxObject) <= 0 && i.push(a) } if (i.sort((function (t, e) { return t.compare(e) })), e) { for (let t = 0; t < i.length; t++)i[t] = i[t].toString(); i = i.filter((function (t, e, i) { return !e || t !== i[e - 1] })) } t.customTicks = i.slice(0) } addGaugeTicksAndLabels() { const t = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0; const e = this.context, i = this, r = Math.max(e._tickIntervalHandler.labelsSize.minLabelSize, e._tickIntervalHandler.labelsSize.maxLabelSize), a = e._majorTicksInterval, n = e._minorTicksInterval, l = {}, o = e._distance, s = e._measurements.radius, c = s - o.majorTickDistance, m = s - o.minorTickDistance, u = new JQX.Utilities.BigNumber(e._drawMin), g = new JQX.Utilities.BigNumber(e._drawMax); let d, p, h, b, f, _; "none" !== e.ticksVisibility && !1 !== e._plotTicks ? (d = function (t) { e._drawTick(t, c, "major") }, p = function (t) { e._drawTick(i.getAngleByValue(t, !0), m, "minor") }) : (d = function () { }, p = function () { }), h = "none" !== e.labelsVisibility && !1 !== e._plotLabels ? function (t, i, r) { e._drawLabel(t, i, o.labelDistance, r) } : function () { }, void 0 === e.inverted || !e.inverted && !e.rightToLeft || e.rightToLeft && e.inverted ? (f = e.endAngle, _ = e.startAngle) : (f = e.startAngle, _ = e.endAngle), b = i.getAngleByValue(u, !1), d(b), l[e._drawMin.toString()] = !0, h(b, e.min, !1); let S, x, v = u.subtract(u.mod(a)); -1 !== u.compare(0) && (v = v.add(a)); for (let t = new JQX.Utilities.BigNumber(v); -1 !== t.compare(u); t = t.subtract(n))S = t; for (b = i.getAngleByValue(v, !1), d(b), l[v.toString()] = !0, 2 * Math.PI * e._measurements.innerRadius * (this._getAngleDifference(f, i.getAngleByValue(v, !1, !0)) / 360) > r && h(b, this.getActualValue(v), -1 === v.compare(g)), x = v.add(a); -1 === x.compare(g.subtract(a)); x = x.add(a))b = i.getAngleByValue(x, !1), d(b), l[x.toString()] = !0, h(b, this.getActualValue(x), !0); if (void 0 === l[x.toString()] && 1 !== x.compare(g) && (b = i.getAngleByValue(x, !1), d(b), l[x.toString()] = !0, 2 * Math.PI * e._measurements.innerRadius * (this._getAngleDifference(_, i.getAngleByValue(x, !1, !0)) / 360) >= r && h(b, this.getActualValue(x), !0), e._normalizedStartAngle !== e.endAngle && (b = i.getAngleByValue(g, !1), d(b), 2 * Math.PI * e._measurements.innerRadius * (this._getAngleDifference(_, f) / 360) >= r && h(b, e.max, !1))), "date" !== e.mode) { if (e.logarithmicScale) this.drawGaugeLogarithmicScaleMinorTicks(l, a, p); else for (let t = S; -1 === t.compare(g); t = t.add(n))l[t.toString()] || p(t); JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = t } else JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = t } updateToolTipAndValue(t, e, i) { const r = this.context, a = r.logarithmicScale; r._updateTooltipValue(t.toString()), a && (t = parseFloat(Math.pow(10, parseFloat(t)).toFixed(11))); const n = (t = t instanceof JQX.Utilities.BigNumber ? t : new JQX.Utilities.BigNumber(t)).toString(); r._number = t, r._drawValue = a ? Math.log10(n) : t, 0 !== t.compare(e) && i && ("numeric" === r.mode ? (r.value = n, t = n) : (e = r._valueDate, r._valueDate = JQX.Utilities.DateTime.fromFullTimeStamp(n), r.value = t, t = r._valueDate), r._programmaticValueIsSet || r.$.fireEvent("change", { value: t, oldValue: e }), r.$.hiddenInput && (r.$.hiddenInput.value = t), r._setAriaValue("valuenow")) } validateInterval(t) { const e = this.context, i = e._maxObject.subtract(e._minObject); e._validInterval = new JQX.Utilities.BigNumber(t), e._validInterval = this.round(e._validInterval), e._validInterval.compare(0) <= 0 && (e._validInterval = new JQX.Utilities.BigNumber(1)), 1 === e._validInterval.compare(i) && (e._validInterval = i), e.interval = e._validInterval.toString() } getCoercedValue(t, e, i) { const r = this.context; if (!r.coerce) return t; const a = !r.logarithmicScale; let n, l; if (t = t instanceof JQX.Utilities.BigNumber ? t : new JQX.Utilities.BigNumber(t), r.customInterval) { const e = r.customTicks; if (0 === e.length) return t; let l, o; if (a || i) { n = r._minObject, l = n.subtract(t).abs(), o = n; for (let i = 0; i < e.length; i++) { const r = this.createDescriptor(e[i]), a = r.subtract(t).abs(); -1 === a.compare(l) && (l = a, o = r) } } else { n = r._drawMin, l = Math.abs(n - parseFloat(t.toString())), o = n; for (let i = 0; i < e.length; i++) { const r = Math.log10(e[i]), a = Math.abs(r - t); a < l && (l = a, o = r) } o = new JQX.Utilities.BigNumber(o) } return o } let o = r._validInterval; if ("date" === r.mode) { if ("addYears" === r._dateIncrementMethod) return this.coerceYear(t); if ("addMonths" === r._dateIncrementMethod) return this.coerceMonth(t); o = new JQX.Utilities.BigNumber(r._dateIntervalNumber).multiply(o) } !1 !== e ? (n = new JQX.Utilities.BigNumber(r._drawMin), l = new JQX.Utilities.BigNumber(r._drawMax)) : (n = new JQX.Utilities.BigNumber(r.min), l = new JQX.Utilities.BigNumber(r.max)); let s = t.subtract(n), c = s.mod(o); if (0 === c.compare(0)) return t; let m = s.subtract(c), u = m.add(o); if (s.subtract(m).abs().compare(s.subtract(u).abs()) < 0) return m.add(n); { const t = u.add(n); return t.compare(l) <= 0 ? t : m.add(n) } } coerceMonth(t) { const e = this.context, i = parseFloat(e._validInterval), r = JQX.Utilities.DateTime.fromFullTimeStamp(t), a = r.year(), n = r.month(), l = r.day(), o = e._minDate.year(), s = e._minDate.month(), c = 12 * (e._maxDate.year() - o - 1) + 12 - s + e._maxDate.month(); let m = 12 * (a - 1 - o) + (12 - s) + n; 1 === i && (-1 !== [1, 3, 5, 7, 8, 10, 12].indexOf(n) ? (l > 16 || 16 === l && r.hour() > 11) && m++ : 2 === n ? r.isLeapYear(a) ? (l > 15 || 15 === l && r.hour() > 11) && m++ : l > 14 && m++ : l > 15 && m++), m = this.getCoercedTimePart(0, c, m, i); let u = e._minDate.addMonths(m, !0); return 1 === u.compare(e._maxDate) && (u = e._minDate.addMonths(m - i, !0)), e._drawValue = new JQX.Utilities.BigNumber(u.getTimeStamp()), e._drawValue } coerceYear(t) { const e = this.context, i = parseFloat(e._validInterval), r = JQX.Utilities.DateTime.fromFullTimeStamp(t), a = e._maxDate.year(), n = JQX.Utilities.DateTime.getConstructorParameters(e._minDate); let l = r.year(); r.month() > 6 && l++; let o = this.getCoercedTimePart(e._minDate.year(), a, l, i); o > a && (o -= i), n[0] = o, n.unshift(null); const s = new (Function.prototype.bind.apply(JQX.Utilities.DateTime, n)); return e._drawValue = new JQX.Utilities.BigNumber(s.getTimeStamp()), e._drawValue } getCoercedTimePart(t, e, i, r) { let a = i - t, n = a % r; if (0 === n) return i; let l = parseFloat((a - n).toFixed(12)), o = l + r; if (e - t <= r) return i >= t + (e - t) / 2 ? e : t; if (Math.abs(a - l) < Math.abs(a - o)) return l + t; { const i = o + t; return i > e ? l + t : i } } updateValue(t) { const e = this.context; t = t instanceof JQX.Utilities.BigNumber ? t : new JQX.Utilities.BigNumber(t); const i = this.validate(t, e._minObject, e._maxObject); let r, a, n = e.value; e._number = i, e._drawValue = e.logarithmicScale ? Math.log10(i) : i, "numeric" === e.mode ? (r = t.toString(), e.value = r, a = this.compare(t, n)) : (n = JQX.Utilities.DateTime.fromFullTimeStamp(n), e._valueDate = JQX.Utilities.DateTime.fromFullTimeStamp(t), e.value = t, r = t = e._valueDate, a = 0 !== t.compare(n)), e._programmaticValueIsSet || !a && !e._scaleTypeChangedFlag || e.$.fireEvent("change", { value: r, oldValue: n }), e.$.hiddenInput && (e.$.hiddenInput.value = t), e._setAriaValue("valuenow"), e._moveThumbBasedOnValue(e._drawValue) } getValuePerPx(t, e) { const i = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0; const r = new JQX.Utilities.BigNumber(t).divide(e); return JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = i, r } restrictValue(t) { t[1].constructor === JQX.Utilities.BigNumber ? -1 === t[1].compare(t[0]) && t[1].set(t[0]) : t[1] < t[0] && (t[1] = t[0]) } getAngleByValue(t, e, i) { const r = this.context, a = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; if (JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0, r._wordLengthNumber < 64) return JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = a, super.getAngleByValue(parseFloat(t.toString()), e, i); t instanceof JQX.Utilities.BigNumber == 0 && (t = new JQX.Utilities.BigNumber(t)), !1 !== e && r.logarithmicScale && (t = new JQX.Utilities.BigNumber(Math.log10(t.toString()))); const n = t.subtract(r._drawMin).multiply(r._angleRangeCoefficient); let l; return l = void 0 === r.inverted || !r.inverted && !r.rightToLeft || r.rightToLeft && r.inverted ? n.multiply(-1).add(r.endAngle) : n.add(r.startAngle), l = parseFloat(l.toString()), JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = a, i ? l : l * Math.PI / 180 + Math.PI / 2 } getValueByAngle(t) { const e = this.context; if (e._wordLengthNumber < 64) return super.getValueByAngle(t, !0); const i = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; let r, a, n, l; for (JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0, void 0 === e.inverted || !e.inverted && !e.rightToLeft || e.rightToLeft && e.inverted ? (r = e.endAngle, a = t) : (r = t, a = e._normalizedStartAngle); r < a;)r += 360; return n = new JQX.Utilities.BigNumber((r - a) / e._angleDifference).multiply(e._range).add(e._drawMin), e.logarithmicScale && (n = new JQX.Utilities.BigNumber(Math.pow(10, n.toString()))), l = e.coerce ? this.getCoercedValue(n, !1) : this.round(n), JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = i, new JQX.Utilities.BigNumber(l) } updateGaugeValue(t) { if (t instanceof JQX.Utilities.BigNumber == 0) return super.updateGaugeValue(t); const e = this.context, i = e._getEventValue(); "numeric" === e.mode ? (e.value = t.toString(), e.$.digitalDisplay.value = e.value) : (e._valueDate = JQX.Utilities.DateTime.fromFullTimeStamp(t), e.value = t), e._drawValue = e.logarithmicScale ? Math.log10(e.value).toString() : e.value, e._number = t, e.$.fireEvent("change", { value: e._getEventValue(), oldValue: i }), e._setAriaValue("valuenow") } validateColorRange(t) { const e = this.context; if (e._wordLengthNumber < 64) return super.validateColorRange(t); t = "numeric" === e.mode ? new JQX.Utilities.BigNumber(t) : (t = JQX.Utilities.DateTime.validateDate(t)).getTimeStamp(); const i = new JQX.Utilities.BigNumber(e.min), r = new JQX.Utilities.BigNumber(e.max); return -1 === t.compare(i) && (t = i), 1 === t.compare(r) && (t = r), t } lockRotation(t, e) { const i = this.context; if (e instanceof JQX.Utilities.BigNumber == 0 && (e = new JQX.Utilities.BigNumber(e)), t && -1 === e.compare(i._number)) { if (i._lockCW = !0, -1 === e.compare(i._maxObject)) return new JQX.Utilities.BigNumber(i._maxObject) } else if (!t && 1 === e.compare(i._number) && (i._lockCCW = !0, 1 === e.compare(i._minObject))) return new JQX.Utilities.BigNumber(i._minObject) } getAngleRangeCoefficient() { const t = this.context, e = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0, t._angleRangeCoefficient = new JQX.Utilities.BigNumber(t._angleDifference).divide(t._range), JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = e } }), JQX.Utilities.Assign("DecimalNumericProcessor", class extends JQX.Utilities.BaseNumericProcessor { constructor(t, e) { super(t, e), this.context = t } getPreciseModulo(t, e, i) { const r = t >= 0 ? 1 : -1; if (t = Math.abs(t), e = Math.abs(e), void 0 === i) { const i = t.toExponential(), a = e.toExponential(), n = parseInt(i.slice(i.indexOf("e") + 1), 10), l = parseInt(a.slice(a.indexOf("e") + 1), 10), o = n < 0 ? Math.abs(n) : 0, s = l < 0 ? Math.abs(l) : 0, c = Math.max(o, s); if (this.roundCoefficient = c, t < e) return r * t; if (t === e) return 0; if ((t < -1 || t > 1) && (e < -1 || e > 1 || 1 === e)) { if (t % 1 == 0 && e % 1 == 0) return r * (t % e); { const i = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0; const a = r * parseFloat(new JQX.Utilities.BigNumber(t).mod(e).toString()); return JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = i, a } } const m = Math.pow(10, c); return r * (t * m % (e * m) / m) } return r * (Math.round(t * i) % Math.round(e * i)) } createDescriptor(t, e, i, r) { let a = parseFloat(t); return r && (a = this.validate(a, this.context._minObject, this.context._maxObject)), a } round(t) { return Math.round(t) } validate(t, e, i) { let r; return r = t < e ? e : t > i ? i : t, r } validateMinMax(t, e) { const i = this.context, r = void 0 !== i._regexSpecial && i._regexSpecial.inf.test(i.min), a = void 0 !== i._regexSpecial && i._regexSpecial.inf.test(i.max); t && (null === i.min || r ? (i.min = -1 / 0, i._minObject = -1 / 0) : (i.min = i.min.toString().replace(/\s/g, ""), this.regexScientificNotation.test(i.min) && (i.min = this.scientificToDecimal(i.min)), i._minObject = i._discardDecimalSeparator(i.min))), e && (null === i.max || a ? (i.max = 1 / 0, i._maxObject = 1 / 0) : (i.max = i.max.toString().replace(/\s/g, ""), this.regexScientificNotation.test(i.max) && (i.max = this.scientificToDecimal(i.max)), i._maxObject = i._discardDecimalSeparator(i.max))), this.compare(i._minObject, i._maxObject) || (i._maxObject = parseFloat(i._maxObject) + 1, i.max = i._maxObject) } valueToPx(t) { const e = this.context, i = e._measurements.trackLength / e._range; let r; return r = e._normalLayout ? i * (t - e._drawMin) : i * (e._drawMax - t), Math.round(r) } pxToValue(t) { const e = this.context; let i; if (i = e._normalLayout ? (t - e._trackStart) * e._valuePerPx : (e._trackEnd - t) * e._valuePerPx, e.logarithmicScale) { const t = i + parseFloat(e._drawMin); return Math.pow(10, t) } return this.validate(i + e._minObject, e._minObject, e._maxObject) } compare(t, e, i) { return t = parseFloat(t), e = parseFloat(e), !0 !== i ? t !== e : t < e ? -1 : t > e ? 1 : 0 } incrementDecrement(t, e, i) { const r = this.context; let a; if ("add" === e) { if (a = parseFloat(t) + parseFloat(i), void 0 !== r._drawMax) return a > parseFloat(r._drawMax) ? r._drawMax : a } else if (a = parseFloat(t) - parseFloat(i), void 0 !== r._drawMin) return a < parseFloat(r._drawMin) ? r._drawMin : a; return a } render(t) { const e = this.context; if (void 0 !== e._regexSpecial && e._regexSpecial.nonNumericValue.test(t)) return t; { const i = new JQX.Utilities.NumberRenderer(t); return e.scientificNotation ? i.toScientific(e.significantDigits, e.precisionDigits) : i.toDigits(e.significantDigits, e.precisionDigits) } } addTicksAndLabels() { const t = this.context, e = t._measurements.trackLength, i = t._normalLayout, r = t._majorTicksInterval, a = Math.round(t._range / parseFloat(r.toString())), n = e / a, l = parseFloat(t._drawMin), o = parseFloat(t._drawMax); let s, c, m, u, g, d, p, h, b, f = "", _ = ""; t._tickValues = [], this._longestLabelSize = 0, i ? (s = l, c = t.logarithmicScale && l < 0 && -1 !== l ? parseFloat(s - this.getPreciseModulo(s, r)) : parseFloat(s - this.getPreciseModulo(s, r) + parseFloat(r)), m = c - s, g = t._formatLabel(l), d = t._tickIntervalHandler.labelsSize.minLabelSize, u = o, p = t._formatLabel(o), h = t._tickIntervalHandler.labelsSize.maxLabelSize) : (s = o, c = parseFloat(s - this.getPreciseModulo(s, r)), m = s - c, g = t._formatLabel(o), d = t._tickIntervalHandler.labelsSize.maxLabelSize, u = l, p = t._formatLabel(l), h = t._tickIntervalHandler.labelsSize.minLabelSize), t._labelDummy = this._createMeasureLabel(), b = this._addMajorTickAndLabel(g, d, !0, s), f += b.tick, _ += b.label; const S = m / r * n; if (c.toString() !== t._drawMax.toString() && S < e) { const e = t._formatLabel(c.toString()), i = d < S; b = this._addMajorTickAndLabel(e, void 0, i, c, !0), f += b.tick, _ += b.label } b = this.addMiddleMajorTicks(a, n, S, m, i, r), f += b.tick, _ += b.label, b = this._addMajorTickAndLabel(p, h, !0, u), f += b.tick, _ += b.label, f += this.addMinorTicks(i), t._measureLabelScale.removeChild(t._labelDummy), delete t._labelDummy, delete t._measureLabelScale, "jqx-tank" === t.nodeName.toLowerCase() && t._updateScaleWidth(this._longestLabelSize), t._appendTicksAndLabelsToScales(f, _) } addMiddleMajorTicks(t, e, i, r, a, n) { const l = this.context; let o = "", s = ""; for (let c = 1; c < t; c++) { let m, u = c * e + i; if (m = a ? parseFloat(l._drawMin) + n * c + r : parseFloat(l._drawMax) - n * c - r, m.toString() !== l._drawMax.toString()) { let i = l._formatLabel(m.toString()), r = !0; l._labelDummy.innerHTML = i, u + l._labelDummy[l._settings.size] >= t * e && (r = !1); const a = this._addMajorTickAndLabel(i, void 0, r, m, !0); o += a.tick, s += a.label } } return { tick: o, label: s } } addMinorTicks(t) { function e(t) { return parseFloat(t.toFixed(o)) } function i(t) { -1 === a.indexOf(t) && 0 === r._numericProcessor.getPreciseModulo(t, l, s) && (d += '<div style="' + c + ": " + r._numericProcessor.valueToPx(t) + 'px;" class="jqx-tick jqx-tick-minor"></div>') } const r = this.context, a = r._tickValues, n = r._tickIntervalHandler.nearestPowerOfTen, l = r._minorTicksInterval, o = Math.log10(n) < 0 ? Math.round(Math.abs(Math.log10(n))) : 0, s = Math.pow(10, o), c = r._settings.leftOrTop; let m, u, g, d = ""; if (t ? (m = a[0], u = a[1], g = a[a.length - 1]) : (m = a[a.length - 1], u = a[a.length - 2], g = a[0]), r.logarithmicScale) !function () { let t = r._measurements.trackLength / a.length, e = .1; t < 20 ? e = 1 : t >= 20 && t < 40 ? e = u - m > 1 ? 1 : .5 : t >= 40 && t < 80 && (e = .2); let i = Math.floor(r._drawMax), n = r._drawMax - i, l = r._drawMax - r._drawMin > a.length; for (let t = r._drawMax; t > r._drawMin - 1; t -= 1) { let i = n > 0 ? Math.pow(10, t - n + 1) : Math.pow(10, t), a = i * e; for (let t = i; t > 0; t -= a)if (t < r.max && t > r.min) { let e = new JQX.Utilities.BigNumber(Math.log10(t)); (e % 1 == 0 && l || !l) && (d += '<div style="' + c + ": " + r._numericProcessor.valueToPx(e) + 'px;" class="jqx-tick jqx-tick-minor"></div>') } } }(); else { for (let t = u; t > m; t = e(t - n))i(t); for (let t = e(u + n); t < g; t = e(t + n))i(t) } return d } validateCustomTicks() { const t = this.context; let e = []; for (let i = 0; i < t.customTicks.length; i++) { const r = t.customTicks[i], a = this.createDescriptor(r); a >= t._minObject && a <= t._maxObject && e.push(a.toString()) } e.sort((function (t, e) { return t - e })), e = e.filter((function (t, e, i) { return !e || t !== i[e - 1] })), t.customTicks = e.slice(0) } addGaugeTicksAndLabels() { const t = this.context, e = this, i = Math.max(t._tickIntervalHandler.labelsSize.minLabelSize, t._tickIntervalHandler.labelsSize.maxLabelSize), r = t._majorTicksInterval, a = t._minorTicksInterval, n = {}, l = t._distance, o = t._measurements.radius, s = o - l.majorTickDistance, c = o - l.minorTickDistance; let m, u, g, d, p, h; "none" !== t.ticksVisibility && !1 !== t._plotTicks ? (m = function (e) { t._drawTick(e, s, "major") }, u = function (i) { t._drawTick(e.getAngleByValue(i, !0), c, "minor") }) : (m = function () { }, u = function () { }), g = "none" !== t.labelsVisibility && !1 !== t._plotLabels ? function (e, i, r) { t._drawLabel(e, i, l.labelDistance, r) } : function () { }, void 0 === t.inverted || !t.inverted && !t.rightToLeft || t.rightToLeft && t.inverted ? (p = t.endAngle, h = t.startAngle) : (p = t.startAngle, h = t.endAngle), d = e.getAngleByValue(t._drawMin, !1), m(d), n[t._drawMin] = !0, g(d, t.min, !1); let b, f, _ = t._drawMin - e.getPreciseModulo(t._drawMin, r); t._drawMin >= 0 && (_ += r); for (let e = _; e >= t._drawMin; e -= a)b = e; for (d = e.getAngleByValue(_, !1), m(d), n[_] = !0, 2 * Math.PI * t._measurements.innerRadius * (this._getAngleDifference(p, e.getAngleByValue(_, !1, !0)) / 360) > i && g(d, this.getActualValue(_), _ < t._drawMax), f = _ + r; f < t._drawMax - r; f += r)d = e.getAngleByValue(f, !1), m(d), n[f] = !0, g(d, this.getActualValue(f), !0); if (void 0 === n[f] && f <= t._drawMax && (d = e.getAngleByValue(f, !1), m(d), n[f] = !0, 2 * Math.PI * t._measurements.innerRadius * (this._getAngleDifference(h, e.getAngleByValue(f, !1, !0)) / 360) >= i && g(d, this.getActualValue(f), !0), t._normalizedStartAngle !== t.endAngle && (d = e.getAngleByValue(t._drawMax, !1), m(d), n[t._drawMax] = !0, 2 * Math.PI * t._measurements.innerRadius * (this._getAngleDifference(h, p) / 360) >= i && g(d, t.max, !1))), t.logarithmicScale) this.drawGaugeLogarithmicScaleMinorTicks(n, r, u); else for (let e = b; e < t._drawMax; e += a)n[e] || u(e) } updateToolTipAndValue(t, e, i) { const r = this.context, a = r.logarithmicScale; r._updateTooltipValue(t), a && (t = parseFloat(Math.pow(10, parseFloat(t)).toFixed(11))); const n = t.toString(); r._number = t, r._drawValue = a ? Math.log10(n) : t, n !== e && i && (r.value = r._discardDecimalSeparator(n), r._programmaticValueIsSet || r.$.fireEvent("change", { value: r.value, oldValue: e }), r.$.hiddenInput && (r.$.hiddenInput.value = r.value), r._setAriaValue("valuenow")) } validateInterval(t) { const e = this.context, i = e._maxObject - e._minObject; t <= 0 && (t = 1), e._validInterval = Math.min(parseFloat(t), i), e.interval = e._validInterval } getCoercedValue(t, e, i) { const r = this.context; if (!r.coerce) return t; let a, n, l = !r.logarithmicScale; if (r.customInterval) { const n = r.customTicks; if (0 === n.length) return t; l = l || i, a = !1 !== e ? parseFloat(r._drawMin) : r._minObject; let o = Math.abs(a - t), s = a; for (let e = 0; e < n.length; e++) { const i = this.createDescriptor(n[e]), r = l ? i : Math.log10(i), a = Math.abs(r - t); a < o && (o = a, s = r) } return s } !1 !== e ? (a = parseFloat(r._drawMin), n = parseFloat(r._drawMax)) : (a = parseFloat(r.min), n = parseFloat(r.max)); let o = t - a, s = this.getPreciseModulo(o, parseFloat(r.interval)), c = this.roundCoefficient; if (0 === s) return t; 0 === this.roundCoefficient && (c = 12); let m = parseFloat((o - s).toFixed(c)), u = m + parseFloat(r.interval); if (r.max - r.min <= parseFloat(r.interval) && l) return t >= a + (n - a) / 2 ? n : a; if (Math.abs(o - m) < Math.abs(o - u)) return m + a; { const t = u + a; return t > n ? m + a : t } } updateValue(t) { const e = this.context, i = this.validate(t, e._minObject, e._maxObject), r = e.value; t.toString() !== r.toString() || e._scaleTypeChangedFlag ? (e.value = t.toString(), e._number = i, e._programmaticValueIsSet || e.$.fireEvent("change", { value: e.value, oldValue: r })) : e.value = "string" == typeof t ? t : t.toString(), e._drawValue = e.logarithmicScale ? Math.log10(i).toString() : i.toString(), e._moveThumbBasedOnValue(e._drawValue), e.$.hiddenInput && (e.$.hiddenInput.value = e.value), e._setAriaValue("valuenow") } getValuePerPx(t, e) { return parseFloat(t) / e } restrictValue(t) { t[1] < t[0] && (t[1] = t[0]) } lockRotation(t, e) { const i = this.context; if (t && e < i._number) { if (i._lockCW = !0, e < i._maxObject) return i._maxObject } else if (!t && e > i._number && (i._lockCCW = !0, e > i._minObject)) return i._minObject } getAngleRangeCoefficient() { const t = this.context; t._angleRangeCoefficient = t._angleDifference / t._range } }), JQX.Utilities.Assign("ComplexNumericProcessor", class extends JQX.Utilities.BaseNumericProcessor { constructor(t, e) { super(t, e), this.context = t } createDescriptor(t, e, i, r, a, n) { let l; return l = n || (t.constructor === this.complexConstructor ? new this.complexConstructor(t.realPart, t.imaginaryPart) : new this.complexConstructor(t)), r && (l = this.validate(l, this.context._minObject, this.context._maxObject)), l } validate(t, e, i) { let r = t; return e !== -1 / 0 ? -1 === this.compareComplexNumbers(t, e) && (r = new this.complexConstructor(e.realPart, e.imaginaryPart)) : i !== 1 / 0 && 1 === this.compareComplexNumbers(t, i) && (r = new this.complexConstructor(i.realPart, i.imaginaryPart)), r } compare(t, e, i) { return !0 !== i ? 0 !== this.compareComplexNumbers(t, e) : this.compareComplexNumbers(t, e) } validateMinMax(t, e) { const i = this.context; t && (null === i.min || i._regexSpecial.inf.test(i.min) ? (i.min = -1 / 0, i._minObject = -1 / 0) : i._minObject = new this.complexConstructor(i.min)), e && (null === i.max || i._regexSpecial.inf.test(i.max) ? (i.max = 1 / 0, i._maxObject = 1 / 0) : i._maxObject = new this.complexConstructor(i.max)) } incrementDecrement(t, e) { let i = new this.complexConstructor(t.realPart, t.imaginaryPart), r = this.context._spinButtonsStepObject; return "add" === e ? (i.realPart += r.realPart, i.imaginaryPart += r.imaginaryPart) : (i.realPart -= r.realPart, i.imaginaryPart -= r.imaginaryPart), i } render(t) { let e = t; if (!1 === this.context._regexSpecial.nonNumericValue.test(t)) { let t, i = e.realPart, r = e.imaginaryPart, a = this.context.significantDigits, n = this.context.precisionDigits; r >= 0 ? t = "+" : (t = "-", r = Math.abs(r)); const l = new JQX.Utilities.NumberRenderer(i), o = new JQX.Utilities.NumberRenderer(r); this.context.scientificNotation ? (i = l.toScientific(a, n), r = o.toScientific(a, n)) : (i = l.toDigits(a, n), r = o.toDigits(a, n)), e = `${i} ${t} ${r}i` } return e } compareComplexNumbers(t, e) { if (t instanceof this.complexConstructor == 0 || e instanceof this.complexConstructor == 0) return -1; const i = t.realPart, r = e.realPart; if (i < r) return -1; if (i > r) return 1; { const i = t.imaginaryPart, r = e.imaginaryPart; return i < r ? -1 : i > r ? 1 : 0 } } }), JQX.Utilities.Assign("NumberRenderer", class { constructor(t) { const e = this; e.numericValue = t, e.powersToPrefixes = { 24: "Y", 21: "Z", 18: "E", 15: "P", 12: "T", 9: "G", 6: "M", 3: "k", 0: "", "-3": "m", "-6": "u", "-9": "n", "-12": "p", "-15": "f", "-18": "a", "-21": "z", "-24": "y" }, e.localizationObject = { currencysymbol: "$", currencysymbolposition: "before", decimalseparator: ".", thousandsseparator: ",", defaultPrecision: 2 } } isENotation(t) { return new RegExp(/e/i).test(t) } largeExponentialToDecimal(t) { let e; void 0 === t && (t = this.numericValue, e = !0); let i = t.toString().toLowerCase(), r = i.indexOf("e"), a = new JQX.Utilities.BigNumber(i.slice(0, r)), n = i.slice(r + 1, r + 2); "+" !== n && "-" !== n && (i = i.slice(0, r) + "e+" + i.slice(r + 1), n = "+"); let l = i.slice(r + 2), o = new JQX.Utilities.BigNumber(10).pow(n + (e ? Math.min(20, l) : l)); return a.multiply(o).toString() } bigNumberToExponent(t, e) { let i = this.numericValue; i.constructor !== JQX.Utilities.BigNumber && (i = new JQX.Utilities.BigNumber(i)); const r = i._f; let a = i.toString(); if (r <= 10) return e ? parseFloat(a).toExponential(null !== t ? t - 1 : void 0) : new JQX.Utilities.NumberRenderer(parseFloat(a)).toDigits(t); if (t >= r && !e) return a; { let n; !1 === i._s ? n = "" : (n = "-", a = a.slice(1)), parseFloat(a.slice(t, t + 1)) >= 5 && (a = new JQX.Utilities.BigNumber(a.slice(0, t)).add(1).toString()); let l = a.slice(1, t); if (e) t--, l.length > 0 && t > l.length ? l += "0".repeat(t - l.length) : 0 === l.length && (l = "0".repeat(t)); else for (; l.length > 0 && "0" === l.charAt(l.length - 1);)l = l.slice(0, l.length - 1); const o = l.length > 0 ? "." : "", s = r - 1; return n + a.slice(0, 1) + o + l + "E+" + s } } toScientific() { const t = this; let e; if (e = t.numericValue._d ? t.bigNumberToExponent(null !== arguments[0] ? arguments[0] : arguments[1] + 1, !0).toLowerCase() : t.numericValue <= -1 || t.numericValue >= 1 ? Number(t.toDigits(arguments[0], arguments[1])).toExponential() : Number(t.numericValue).toExponential(), isNaN(e)) return e; const i = e.indexOf("e"); let r = parseInt(e.slice(i + 1), 10), a = parseFloat(e.slice(0, i)), n = new JQX.Utilities.NumberRenderer(a); if (r < 0) { let e = n.toDigits(arguments[0], arguments[1]); if (e = parseFloat(e).toExponential(), "0" === e.charAt(e.length - 1)) { let e = 0; for (; r % 3 != 0;)r--, e++; if (e) { const t = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0, a = parseFloat(new JQX.Utilities.BigNumber(a).multiply(Math.pow(10, e)).toString()), JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = t } n.numericValue = a, a = n.toDigits(arguments[0], arguments[1]), n.numericValue = a / 1e3; const i = n.toDigits(arguments[0], arguments[1]); return i >= 1 && (a = i, r += 3), a + t.powersToPrefixes[r.toString()] } } let l = 0; if (l = Math.abs(r) > 24 ? r - r / Math.abs(r) * 24 : r % 3, l > 0) for (let t = 0; t < l; t++)a *= 10; else if (l < 0) { const t = JQX.Utilities.BigNumber.ignoreBigIntNativeSupport; JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = !0, a = parseFloat(new JQX.Utilities.BigNumber(a).multiply(Math.pow(10, l)).toString()), JQX.Utilities.BigNumber.ignoreBigIntNativeSupport = t } if (r > 0) { const t = a >= 0 ? 0 : 1, r = e.slice(t, i).length - l - 2; r >= 0 && (a = a.toFixed(r)) } let o = Number(a).toExponential(); o = parseFloat(o.charAt(o.length - 1)), n.numericValue = a, a = n.toDigits(arguments[0], arguments[1]); let s = Number(a).toExponential(), c = 0; s = parseFloat(s.charAt(s.length - 1)), s !== o && s % 3 == 0 && (a = parseFloat(a) / Math.pow(10, s), n.numericValue = a, a = n.toDigits(arguments[0], arguments[1]), c = s); const m = r - l + c; return a + t.powersToPrefixes[m.toString()] } bigNumberToScientific() { const t = this, e = t.numericValue._f - 1, i = parseInt(e, 10) % 3, r = parseInt(e, 10) - i; let a, n, l = t.numericValue.toString(); if ("-" === l.charAt(0) ? (a = "-", l = l.slice(1)) : a = "", null !== arguments[0]) for (n = l.slice(0, arguments[0]), parseFloat(l.slice(arguments[0], arguments[0] + 1)) >= 5 && (n = new JQX.Utilities.BigNumber(n).add(1).toString()); n.length > 1 + i && "0" === n.charAt(n.length - 1);)n = n.slice(0, n.length - 1); else null !== arguments[1] && (n = l.slice(0, arguments[1] + 1), parseFloat(l.slice(arguments[1] + 1, arguments[1] + 2)) >= 5 && (n = new JQX.Utilities.BigNumber(n).add(1).toString()), arguments[1] + i > n.length - 1 && (n += "0".repeat(arguments[1] + i - n.length + 1))); return n.length > 1 + i && (n = n.slice(0, 1 + i) + "." + n.slice(1 + i)), a + n + t.powersToPrefixes[r.toString()] } toDigits(t, e) { const i = this; let r; return r = null !== t ? i.applySignificantDigits(t) : null !== e ? i.applyPrecisionDigits(e) : i.applySignificantDigits(8), r } applySignificantDigits(t) { const e = this; function i(t) { for (; "0" === t.charAt(t.length - 1);)t = t.slice(0, -1); return "." === t.charAt(t.length - 1) && (t = t.slice(0, -1)), t } t = Math.max(1, Math.min(t, 21)); let r = parseFloat(e.numericValue).toPrecision(t).toUpperCase(); if (-1 !== r.indexOf(".")) if (e.isENotation(r)) { const t = r.indexOf("."), e = r.indexOf("E"); let a = r.slice(t, e); a = i(a), r = r.slice(0, t) + a + r.slice(e) } else r = i(r); return r } applyPrecisionDigits(t) { const e = this; t = Math.max(0, Math.min(t, 20)); let i = parseFloat(e.numericValue).toFixed(t); return e.isENotation(i) && (i = e.largeExponentialToDecimal(i) + "." + "0".repeat(t)), i } getLogarithm(t) { const e = this.numericValue; let i; if (void 0 === t && (t = 10), 10 === t) try { i = Math.log10(e) } catch (t) { i = Math.log(e) / Math.log(10) } else i = Math.log(e) / Math.log(t); return i } applySeparators(t, e) { const i = this, r = (t = t.toString()).indexOf("."); if (-1 !== r) { const a = t.slice(0, r), n = t.slice(r + 1); return i.applyThousandsSeparator(a, e) + i.localizationObject.decimalseparator + n } return i.applyThousandsSeparator(t, e) } applyThousandsSeparator(t, e) { if (e) return t; let i = ""; "-" === (t = t.toString()).charAt(0) && (i = "-", t = t.slice(1)); let r = t.split("").reverse(); for (let t = 2; t < r.length - 1; t += 3)r[t] = this.localizationObject.thousandsseparator + r[t]; return r.reverse(), r = r.join(""), i + r } formatNumber(t, e, i) { const r = this; if (void 0 === arguments[3] && delete r._ignoreMinus, delete r._wordLengthNumber, !/^([a-zA-Z]\d*)$/g.test(e)) try { return r.applyCustomFormat(t, e) } catch (e) { return t.toString() } const a = e.slice(0, 1); let n = e.slice(1); if ("" !== n && (isNaN(parseFloat(n)) || parseFloat(n) < 0 || parseFloat(n) > 99 ? n = "" : parseFloat(n) % 1 != 0 && (n = Math.round(n))), t._d) r.inputFormat = "integer"; else { if (t.imaginaryPart) return r.formatComplexNumber(t, e, a, n); r.inputFormat = "floatingPoint" } let l, o = new JQX.Utilities.NumericProcessor(r, "inputFormat"), s = o.createDescriptor(t); switch (r._wordLengthNumber = o.getWordLength(i || "int32"), "integer" === r.inputFormat && (s = o.round(s)), r.numericValue = s, a) { case "C": case "c": return "" === n && (n = r.localizationObject.defaultPrecision), n = parseFloat(n), l = "floatingPoint" === r.inputFormat ? r.applyPrecisionDigits(n) : s.toString() + (n > 0 ? "." + "0".repeat(n) : ""), l = r.applySeparators(l), "before" === r.localizationObject.currencysymbolposition ? "-" === l.charAt(0) ? "-" + r.localizationObject.currencysymbol + l.slice(1) : r.localizationObject.currencysymbol + l : l + " " + r.localizationObject.currencysymbol; case "D": case "d": { if (l = s, "floatingPoint" === r.inputFormat && (l = Math.round(s)), l = l.toString(), "" === n) return l; let t = ""; "-" === l.charAt(0) && (t = "-", l = l.slice(1)); const e = n - l.length; return e > 0 && (l = "0".repeat(e) + l), t + l } case "E": case "e": case "U": case "u": { "" === n && (n = 6), l = "floatingPoint" === r.inputFormat ? s.toExponential(n) : r.bigNumberToExponent(parseFloat(n) + 1, !0).toLowerCase(); const t = l.indexOf("e"), e = l.slice(t + 2).length; return e < 3 && (l = l.slice(0, t + 2) + "0".repeat(3 - e) + l.slice(t + 2)), "u" === a.toLowerCase() ? r.exponentialToSuperscript(r.applySeparators(l, !0)) : ("E" === a && (l = l.toUpperCase()), r.applySeparators(l, !0)) } case "F": case "f": case "N": case "n": return "" === n && (n = r.localizationObject.defaultPrecision), n = parseFloat(n), l = "floatingPoint" === r.inputFormat ? r.applyPrecisionDigits(n) : s.toString() + (n > 0 ? "." + "0".repeat(n) : ""), r.applySeparators(l, "f" === a.toLowerCase()); case "G": case "g": { if ("" === n || "0" === n) if ("floatingPoint" === r.inputFormat) n = 15; else switch (i) { case "int8": case "uint8": n = 3; break; case "int16": case "uint16": n = 5; break; case "int64": n = 19; break; case "uint64": n = 20; break; default: n = 10 }n = parseFloat(n); let e = r.formatNumber(t, "E" + n, i), l = e.indexOf("E"); const o = parseInt(e.slice(l + 1), 10); if (o > -5 && o < n) return "floatingPoint" === r.inputFormat ? r.applySeparators(r.applySignificantDigits(n), !0) : s.toString(); if (o > -100 && o < 100 && (e = e.slice(0, l + 2) + e.slice(l + 3)), -1 !== e.indexOf(r.localizationObject.decimalseparator)) { for (; "0" === e.charAt(l - 1);)e = e.slice(0, l - 1) + e.slice(l), l = e.indexOf("E"); e.charAt(l - 1) === r.localizationObject.decimalseparator && (e = e.slice(0, l - 1) + e.slice(l)) } return "g" === a && (e = e.toLowerCase()), e } case "P": case "p": return "" === n && (n = r.localizationObject.defaultPrecision), n = parseFloat(n), "floatingPoint" === r.inputFormat ? (r.numericValue = 100 * s, l = r.applyPrecisionDigits(n)) : l = s.multiply(100).toString() + (n > 0 ? "." + "0".repeat(n) : ""), r.applySeparators(l) + " %"; case "B": case "b": case "O": case "o": case "X": case "x": { let e; switch ("integer" !== r.inputFormat && (r.inputFormat = "integer", o = new JQX.Utilities.NumericProcessor(r, "inputFormat"), s = o.round(o.createDescriptor(t))), a) { case "B": case "b": e = 2; break; case "O": case "o": e = 8; break; default: e = 16 }if (l = s.toString(e, r._wordLengthNumber), "" !== n) { const t = parseFloat(n) - l.length; t > 0 && (l = "0".repeat(t) + l) } return "x" === a && (l = l.toLowerCase()), l } case "S": case "s": return "" === n && (n = r.localizationObject.defaultPrecision), n = parseFloat(n), r.toScientific(null, n).replace(".", r.localizationObject.decimalseparator); default: return t.toString() } } formatComplexNumber(t, e, i) { const r = this; switch (i) { case "E": case "e": case "U": case "u": case "F": case "f": case "G": case "g": case "N": case "n": case "S": case "s": return t.imaginaryPart >= 0 ? r.formatNumber(t.realPart, e) + " + " + r.formatNumber(t.imaginaryPart, e) + "i" : r.formatNumber(t.realPart, e) + " - " + r.formatNumber(Math.abs(t.imaginaryPart), e) + "i"; default: return t.toString() } } toString(t, e, i) { return e ? this.formatNumber(t, e, i) : t.toString() } applyCustomFormat(t, e) { const i = this, r = (e = (e = e.replace(/_.|\[\w*\]|\*/g, "")).replace(/\?/g, "#")).split(";"); if ("string" == typeof t && isNaN(t)) return r[r.length - 1].replace(/"/g, "").replace(/@/g, t.toString()); if (t._d) i.inputFormat = "integer"; else { if (t.imaginaryPart) return t.toString(); t = parseFloat(t), i.inputFormat = "floatingPoint" } let a = new JQX.Utilities.NumericProcessor(i, "inputFormat"), n = a.createDescriptor(t); "integer" === i.inputFormat && (n = a.round(n)), i.numericProcessor = a; const l = i.getRelevantFormatSection(r, n); if (void 0 === l) return t.toString(); if (-1 !== l.indexOf("@")) return r[r.length - 1].replace(/"/g, "").replace(/@/g, t.toString()); const o = -1 !== l.replace(/".*"/g, "").indexOf("%"), s = i.getTextParts(l); if (-1 !== s.main.toLowerCase().indexOf("e")) return i.applyCustomExponentialFormat(n, s, a); if (-1 !== s.main.indexOf("/")) return i.applyCustomFractionalFormat(n, s, a); if (o && ("integer" === i.inputFormat ? n = n.multiply(100) : n *= 100), "" === s.main) { if (!o) return s.suffix; let t = n.toString(); return i._ignoreMinus && "-" === t.charAt(0) && (t = t.slice(1)), t + s.suffix } let c = s.main.replace(/[^0#,. \/]/g, ""), m = c.indexOf("."); for (-1 !== m && (c = c.substring(0, m + 1) + c.substring(m + 1).replace(/\./g, ""), "." === c.charAt(c.length - 1) && (c = c.slice(0, c.length - 1)), 0 === m && (c = "#" + c)); "," === c.charAt(c.length - 1);)c = c.slice(0, c.length - 1), "floatingPoint" === i.inputFormat ? n /= 1e3 : n = n.multiply(.001); "integer" === i.inputFormat && (n = a.round(n)); const u = -1 !== c.indexOf(","); c = c.replace(/,/g, ""); const g = c.split("."), d = g[0]; let p = g[1], h = ""; if (1 === g.length) return "floatingPoint" === i.inputFormat && (n = a.round(n)), h = n.toString(), i.setTextParts(i.formatWholeNumber(h, d, u), s); h = n.toString(); let b = h.split("."), f = i.formatWholeNumber(b[0], d, u), _ = b[1] || ""; if (p.length <= _.length && (h = parseFloat(n.toFixed(p.length)).toString(), b = h.split("."), f = i.formatWholeNumber(b[0], d, u), _ = b[1] || "", _)) return i.setTextParts(f + i.localizationObject.decimalseparator + _.slice(0, p.length), s); p = p.slice(_.length - p.length); let S = p.lastIndexOf("0"); return -1 === S ? "" === _ ? i.setTextParts(f, s) : i.setTextParts(f + i.localizationObject.decimalseparator + _, s) : i.setTextParts(f + i.localizationObject.decimalseparator + _ + "0".repeat(S + 1), s) } getRelevantFormatSection(t, e) { const i = this, r = i.numericProcessor.compare(e, 0, !0); if (1 === r) return t[0]; let a, n; return t.length >= 3 ? (i._ignoreMinus = !0, a = 1, n = 2) : 2 === t.length ? (i._ignoreMinus = !0, n = 0, a = 1) : 1 === t.length && (n = 0, a = 0), 0 === r ? t[n] : -1 === r ? t[a] : void 0 } getTextParts(t) { const e = t.replace(/"[^"]*"/g, ""), i = t.match(/"[^"]*"/g), r = e.search(/0|#|\./g), a = Math.max(e.lastIndexOf("0"), e.lastIndexOf("#"), e.lastIndexOf("."), e.lastIndexOf(",")), n = e.slice(r, a + 1); if ("" === n) return { prefix: "", main: "", suffix: t.replace(/"/g, "") }; let l = t.indexOf(n), o = l + n.length; if (i) for (let e = 0; e < i.length; e++) { const r = t.indexOf(i[e]); l >= r && o <= r + i[e].length && (l = t.indexOf(n, r + i[e].length), o = l + n.length) } return { prefix: t.slice(0, l).replace(/"/g, ""), main: n, suffix: t.slice(o).replace(/"/g, "") } } applyCustomExponentialFormat(t, e, i) { const r = this; let a, n = e.main; const l = -1 !== n.indexOf(","); n = n.replace(/[^0#.eE+-]/g, ""); const o = n.toLowerCase().indexOf("e"); n = n.substring(0, o + 1) + n.substring(o + 1).replace(/[eE\.]/g, ""); const s = n.charAt(o), c = n.indexOf("."); -1 !== c && (n = n.substring(0, c + 1) + n.substring(c + 1).replace(/\./g, "")), "." === n.charAt(n.length - 1) && (n = n.slice(0, n.length - 1)); const m = n.split(s); let u = m[0]; const g = u.split("."), d = g[0], p = g[1], h = m[1]; let b = t.toString().split(".")[0].replace(/-/, ""), f = 0; if ("0" === b && i.compare(t, 0)) { let e = d.length - 1; for (; 0 === parseInt(t);)f++, t *= 10; b = t.toString().split(".")[0].replace(/-/, ""), f += e, t *= Math.pow(10, e) } if (l && (u = u.slice(0, 1) + "," + u.slice(1)), b.length <= d.length) a = r.formatNumber(t, u, void 0, !0) + s + r.formatExponent(0 - f, h); else { const e = b.length - d.length; let n = "floatingPoint" === r.inputFormat ? t / Math.pow(10, e) : t.divide(Math.pow(10, e)); p || (a = r.applyThousandsSeparator(i.round(n).toString(), !l) + s + r.formatExponent(e - f, h)); let o = n.toString().split(".")[1] || ""; o.length === p.length ? a = r.applySeparators(n, !l) + s + r.formatExponent(e - f, h) : o.length < p.length ? a = r.formatNumber(n, u, void 0, !0) + s + r.formatExponent(e - f, h) : (n = "floatingPoint" === r.inputFormat ? n.toFixed(p.length) : n = i.round(t.divide(Math.pow(10, e - p.length))).divide(Math.pow(10, p.length)), a = r.formatNumber(parseFloat(n), u, void 0, !0) + s + r.formatExponent(e - f, h)) } return r.setTextParts(a, e) } formatExponent(t, e) { let i; return -1 !== ["+", "-"].indexOf(e.charAt(0)) && (i = e.charAt(0), (t > 0 && "-" === i || t < 0 && "+" === i) && (i = void 0)), t < 0 && (t = Math.abs(t), i = "-"), e = e.replace(/[+-]/g, ""), (i || "") + (t = this.formatNumber(t, e, void 0, !0)) } formatWholeNumber(t, e, i) { const r = this; let a = ""; if ("-" === t.charAt(0) && (r._ignoreMinus || (a = "-"), t = t.slice(1)), "0" === t) { if (e === "#".repeat(e.length)) return a; t = "" } if (e.length <= t.length) return a + r.applyThousandsSeparator(t, !i); for (let i = (e = e.slice(0, e.length - t.length)).length - 1; i >= 0; i--)"0" === e.charAt(i) && (t = "0" + t); return a + r.applyThousandsSeparator(t, !i) } setTextParts(t, e) { return e.prefix + t + e.suffix } applyCustomFractionalFormat(t, e, i) { const r = this, a = /^([0#,]+[ ]+)?([0#,]+\/[0#,]+)$/; let n, l = e.main.trim(); if (!a.test(l)) return t.toString(); const o = a.exec(l); if (o[2] = o[2].replace(/,/g, ""), "integer" === r.inputFormat) { const i = o[2].split("/"); return void 0 === o[1] ? n = r.formatNumber(t, i[0], void 0, !0) + "/" + r.formatNumber(1, i[1], void 0, !0) : (n = r.formatNumber(t, o[1].trim(), void 0, !0), -1 !== o[2].indexOf("0") && (n += " " + r.formatNumber(0, i[0], void 0, !0) + "/" + r.formatNumber(1, i[1], void 0, !0))), r.setTextParts(n, e) } if (void 0 === o[1]) n = (t < 0 ? "-" : "") + r.formatAsFraction(Math.abs(t), o[2]); else { const e = o[1].trim(), a = o[2]; n = r.formatNumber(parseInt(t, 10), e, void 0, !0) + " " + r.formatAsFraction(i.getPreciseModulo(Math.abs(t), 1), a) } return r.setTextParts(n.trim(), e) } formatAsFraction(t, e) { const i = this, r = e.split("/"); if (0 === t) return -1 === e.indexOf("0") ? "" : i.formatNumber(0, r[0], void 0, !0) + "/" + i.formatNumber(1, r[1], void 0, !0); if (t % 1 == 0) return i.formatNumber(t, r[0], void 0, !0) + "/" + i.formatNumber(1, r[1], void 0, !0); const a = []; i.approximateFractions(t, a); const n = r[1].length >= 2 ? 2 : 1; let l = [], o = []; a.forEach((function (e, i) { const r = e.denominator.toString().length, a = Math.abs(t - e.numerator / e.denominator); if (void 0 === l[r]) return o[r] = i, void (l[r] = a); a < l[r] && (o[r] = i, l[r] = a) })); let s = o[n] ? a[o[n]] : a[o[1]]; return i.formatNumber(s.numerator, r[0], void 0, !0) + "/" + i.formatNumber(s.denominator, r[1], void 0, !0) } approximateFractions(t, e) { const i = [0, 1], r = [1, 0], a = this.getMaxNumerator(t); let n, l = t, o = NaN; for (let s = 2; s < 1e3; s++) { const c = Math.floor(l); if (i[s] = c * i[s - 1] + i[s - 2], Math.abs(i[s]) > a) return; if (r[s] = c * r[s - 1] + r[s - 2], n = i[s] / r[s], n === o) return; if (e.push({ numerator: i[s], denominator: r[s] }), n === t) return; o = n, l = 1 / (l - c) } } getMaxNumerator(t) { let e = null, i = t.toString().indexOf("E"); -1 === i && (i = t.toString().indexOf("e")), e = -1 === i ? t.toString() : t.toString().substring(0, i); let r = null; const a = e.toString().indexOf("."); -1 === a ? r = e : 0 === a ? r = e.substring(1, e.length) : a < e.length && (r = e.substring(0, a) + e.substring(a + 1, e.length)); let n = r; const l = n.toString().length, o = t; let s = o.toString().length; 0 === o && (s = 0); const c = l - s; for (let t = c; t > 0 && n % 2 == 0; t--)n /= 2; for (let t = c; t > 0 && n % 5 == 0; t--)n /= 5; return n } exponentialToSuperscript(t) { const e = t.indexOf("e"), i = t.slice(e + 1).replace(/0{1,2}/, ""); let r = t.slice(0, e + 1); return r = r.replace("e", "×10"), r += this.toSuperscript(i), r = r.replace("+", ""), r } toSuperscript(t, e) { const i = "-0123456789", r = "⁻⁰¹²³⁴⁵⁶⁷⁸⁹"; let a = ""; for (let n = 0; n < t.length; n++)if (!0 === e) { const e = r.indexOf(t.charAt(n)); a += -1 !== e ? i[e] : t[n] } else { const e = i.indexOf(t.charAt(n)); a += -1 !== e ? r[e] : t[n] } return a } });
|
|
142
|
+
|
|
143
|
+
/***/
|
|
144
|
+
}),
|
|
145
|
+
|
|
146
|
+
/***/ 9362:
|
|
147
|
+
/***/ (() => {
|
|
148
|
+
|
|
149
|
+
JQX("jqx-pager", class extends JQX.BaseElement { static get properties() { return { autoEllipsis: { value: "none", type: "string", allowedValues: ["none", "before", "after", "both"] }, messages: { value: { en: { firstButton: "First", lastButton: "Last", previousButton: "Previous", nextButton: "Next", navigateToLabel: "Go to:", pageSizeLabel: "Show:", navigateToInputPlaceholder: "", ellipsis: "...", summaryString: "of", summaryPrefix: "of", summarySuffix: "" } }, type: "object", extend: !0 }, navigationButtonsPosition: { value: "both", allowedValues: ["near", "far", "both"], type: "string" }, navigationInputPosition: { value: "far", allowedValues: ["near", "far"], type: "string" }, pageIndex: { value: 0, type: "number" }, pageIndexSelectors: { value: 0, type: "any" }, pagesCount: { value: 100, type: "number?" }, pageSize: { value: 10, type: "number" }, pageSizeSelectorPosition: { value: "far", allowedValues: ["near", "far"], type: "string" }, pageSizeSelectorDataSource: { value: [10, 25, 50], type: "array" }, showPrevNextNavigationButtons: { value: !1, type: "boolean" }, showFirstLastNavigationButtons: { value: !1, type: "boolean" }, showNavigationButtonLabels: { value: !1, type: "boolean" }, showNavigationInput: { value: !1, type: "boolean" }, showSummary: { value: !1, type: "boolean" }, showPageSizeSelector: { value: !1, type: "boolean" }, showPageIndexSelectors: { value: !1, type: "boolean" }, summaryPosition: { value: "far", allowedValues: ["near", "far"], type: "string" }, totalRecords: { value: null, type: "int?" } } } static get listeners() { return { click: "_navigationButtonsClickHandler", "nextEllipsisButton.click": "_nextEllipsisButtonClickHandler", "previousEllipsisButton.click": "_previousEllipsisButtonClickHandler", down: "_navigationButtonsDownHandler", "navigateToInput.change": "_navigateToInputChangeHandler", "nextButton.pointerenter": "_updateInBoundsFlag", "nextButton.pointerleave": "_updateInBoundsFlag", "pageIndexSelectorsContainer.click": "_pageIndexSelectorsContainerClickHandler", "pageSizeSelector.change": "_pageSizeSelectorChangeHandler", "previousButton.pointerenter": "_updateInBoundsFlag", "previousButton.pointerleave": "_updateInBoundsFlag", keydown: "_keyDownHandler", resize: "_resizeHandler", "document.up": "_stopRepeat" } } static get requires() { return { "JQX.DropDownList": "jqx.dropdownlist.js" } } static get styleUrls() { return ["jqx.dropdown.css", "jqx.dropdownlist.css", "jqx.pager.css"] } template() { return '<div id="container" role="presentation">\n <div id="nearButtonsContainer" class="jqx-pager-near-buttons-container" role="presentation">\n <div id="firstButton" class="jqx-first-button jqx-pager-button jqx-unselectable" role="button" aria-label="First"></div>\n <div id="previousButton" class="jqx-previous-page-button jqx-pager-button jqx-unselectable" role="button" aria-label="Previous"></div>\n </div>\n <div id="middleButtonsContainer" class="jqx-pager-middle-buttons-container" role="presentation">\n <span id="previousEllipsisButton" class="jqx-previous-ellipsis-button jqx-pager-page-index-selector" role="button" aria-label="Previous group of pages"></span>\n <div id="pageIndexSelectorsContainer" tabindex="0" class="jqx-pager-page-index-selectors-container" role="list"></div>\n <span id="nextEllipsisButton" class="jqx-next-ellipsis-button jqx-pager-page-index-selector" role="button" aria-label="Next group of pages"</span>\n </div>\n <div id="farButtonsContainer" class="jqx-pager-far-buttons-container" role="presentation">\n <div id="nextButton" class="jqx-next-page-button jqx-pager-button jqx-unselectable" role="button" aria-label="Next"></div>\n <div id="lastButton" class="jqx-last-button jqx-pager-button jqx-unselectable" role="button" aria-label="Last"></div>\n </div>\n <div id="pagerInputAndLabelContainer" class="jqx-pager-input-and-label-container" role="presentation">\n <span id="navigateToLabel" class="jqx-pager-label"></span>\n <input type="text" id="navigateToInput" class="jqx-pager-input jqx-input" />\n </div>\n <div id="pagerSizeSelectorAndLabelContainer" class="jqx-pager-size-selector-and-label-container">\n <span id="pageSizeLabel" class="jqx-pager-label"></span>\n <jqx-input id="pageSizeSelector" class="jqx-page-size-selector"\n animation="[[animation]]"\n data-source="[[pageSizeSelectorDataSource]]"\n right-to-left="[[rightToLeft]]"\n drop-down-height="auto"\n drop-down-width="auto"\n drop-down-button-position="right"\n readonly\n selected-index="0"\n disabled="[[disabled]]"\n unfocusable="[[unfocusable]]">\n </jqx-input>\n </div>\n <span id="pagerSummaryContainer" class="jqx-pager-summary-container jqx-pager-label"></span>\n </div>' } ready() { super.ready() } render() { const e = this; e.$.navigateToLabel.id || (e.$.navigateToLabel.id = e.id + "NavigateToLabel"), e.$.pageSizeLabel.id || (e.$.pageSizeLabel.id = e.id + "PageSizeLabel"), e.$.pagerSummaryContainer.id || (e.$.pagerSummaryContainer.id = e.id + "SummaryContainer"), e.setAttribute("role", "navigation"), e.setAttribute("aria-labelledby", e.$.pagerSummaryContainer.id), e.$.navigateToInput.setAttribute("aria-labelledby", e.$.navigateToLabel.id), e.$.pageSizeSelector.setAttribute("aria-labelledby", e.$.pageSizeLabel.id), e.$.pageSizeSelector.dropDownWidth = e.$.pageSizeSelector.offsetWidth, e._render(), super.render() } refresh() { this._render() } propertyChangedHandler(e, t, a) { super.propertyChangedHandler(e, t, a); const n = this; switch (e) { case "navigationButtonsPosition": return void n._renderButtons(); case "navigationInputPosition": case "pageSizeSelectorPosition": case "summaryPosition": case "totalRecords": return void n._renderSettings() }n._render() } next() { this.navigateTo(this.pageIndex + 1) } prev() { this.navigateTo(this.pageIndex - 1) } beginUpdate() { this._updating = !0 } endUpdate() { this._updating = !1, this._render() } _render() { const e = this; if (!e._updating && (e.$.navigateToInput.value = (1 + e.pageIndex).toString(), e._renderButtons(), e._renderPageIndexSelectors(), e._renderSettings(), e._renderVisibility(), e._localize(), e.$.pageSizeSelector && e.showPageSizeSelector)) { const t = e.pageSizeSelectorDataSource.indexOf(e.pageSize); if (t >= 0) { const a = e.$.pageSizeSelector.context; e.$.pageSizeSelector.context = e.$.pageSizeSelector, e.$.pageSizeSelector.selectedIndex = t, e.$.pageSizeSelector._setSelection(!1), e.$.pageSizeSelector.content = a } } } _resizeHandler() { this._renderVisibility() } _renderVisibility() { const e = this, t = e.offsetWidth - 20; e._pageIndexSelectorsVisibleCount = e._pageIndexSelectorsCount, e.showSummary ? e.$pagerSummaryContainer.removeClass("jqx-hidden") : e.$pagerSummaryContainer.addClass("jqx-hidden"), e.showPageIndexSelectors ? e.$middleButtonsContainer.removeClass("jqx-hidden") : e.$middleButtonsContainer.addClass("jqx-hidden"), e.showNavigationInput ? (e.$navigateToLabel.removeClass("jqx-hidden"), e.$navigateToInput.removeClass("jqx-hidden")) : (e.$navigateToLabel.addClass("jqx-hidden"), e.$navigateToInput.addClass("jqx-hidden")), e.showPageSizeSelector ? (e.$pageSizeLabel.removeClass("jqx-hidden"), e.$pageSizeSelector.removeClass("jqx-hidden")) : (e.$pageSizeLabel.addClass("jqx-hidden"), e.$pageSizeSelector.addClass("jqx-hidden")), e.showFirstLastNavigationButtons ? (e.$firstButton.removeClass("jqx-hidden"), e.$lastButton.removeClass("jqx-hidden")) : (e.$firstButton.addClass("jqx-hidden"), e.$lastButton.addClass("jqx-hidden")), e.showPrevNextNavigationButtons ? (e.$previousButton.removeClass("jqx-hidden"), e.$nextButton.removeClass("jqx-hidden")) : (e.$previousButton.addClass("jqx-hidden"), e.$nextButton.addClass("jqx-hidden")), e.$previousEllipsisButton.addClass("jqx-hidden"), e.$nextEllipsisButton.addClass("jqx-hidden"), "after" !== e.autoEllipsis && "none" !== e.autoEllipsis && e.pageIndex >= e._pageIndexSelectorsCount && e.$previousEllipsisButton.removeClass("jqx-hidden"), "before" !== e.autoEllipsis && "none" !== e.autoEllipsis && e.pageIndex < e.pagesCount - e._pageIndexSelectorsCount && e.$nextEllipsisButton.removeClass("jqx-hidden"); for (let t = 0; t < e._pageIndexSelectorsCount && e.$.pageIndexSelectorsContainer.children[t]; t++)e.$.pageIndexSelectorsContainer.children[t].classList.remove("jqx-hidden"); const a = e.$.pagerSummaryContainer.offsetWidth ? Math.max(100, e.$.pagerSummaryContainer.offsetWidth) : 0; let n = e.$.nearButtonsContainer.offsetWidth + e.$.middleButtonsContainer.offsetWidth + e.$.farButtonsContainer.offsetWidth + a + e.$.pagerInputAndLabelContainer.offsetWidth + e.$.pagerSizeSelectorAndLabelContainer.offsetWidth; if (n > 0 && n > t && (n -= e.$.pagerSummaryContainer.offsetWidth, e.$pagerSummaryContainer.addClass("jqx-hidden"), n > t && (n -= e.$.navigateToLabel.offsetWidth, n -= e.$.navigateToInput.offsetWidth, e.$navigateToLabel.addClass("jqx-hidden"), e.$navigateToInput.addClass("jqx-hidden"), n > t))) { if (n -= e.$.pageSizeLabel.offsetWidth, n -= e.$.pageSizeSelector.offsetWidth, e.$pageSizeLabel.addClass("jqx-hidden"), e.$pageSizeSelector.addClass("jqx-hidden"), n > t) { e.$previousEllipsisButton.addClass("jqx-hidden"), e.$nextEllipsisButton.addClass("jqx-hidden"), n -= e.$.previousEllipsisButton.offsetWidth, n -= e.$.nextEllipsisButton.offsetWidth; for (let a = e._pageIndexSelectorsCount - 1; a >= 0; a--) { const s = e.$.pageIndexSelectorsContainer.children[a]; if (n < t || !s) break; e._pageIndexSelectorsVisibleCount--, n -= s.offsetWidth, s.hasAttribute("selected") || s.classList.add("jqx-hidden") } } n > t && e.showFirstLastNavigationButtons && (e.$firstButton.addClass("jqx-hidden"), e.$lastButton.addClass("jqx-hidden")) } } _renderSettings() { const e = this, t = e.totalRecords; let a = e.pageIndex * e.pageSize, n = (e.pageIndex + 1) * e.pageSize, s = e.pagesCount * e.pageSize; null !== t && (n === s && (n = t), s = t, 0 === t && (a = -1, n = 0)), e.$pagerSummaryContainer.removeClass("near"), e.$pagerSizeSelectorAndLabelContainer.removeClass("near"), e.$pagerInputAndLabelContainer.removeClass("near"), "near" === e.summaryPosition && e.$pagerSummaryContainer.addClass("near"), "near" === e.pageSizeSelectorPosition && e.$pagerSizeSelectorAndLabelContainer.addClass("near"), "near" === e.navigationInputPosition && e.$pagerInputAndLabelContainer.addClass("near"), e.$.pagerSummaryContainer.innerHTML = '<span class="jqx-summary-start" role="presentation">' + (1 + a) + '</span> <span class="jqx-summary-hyphen" role="presentation">-</span> <span class="jqx-summary-end" role="presentation">' + n + '</span><span class="jqx-summary-prefix" role="presentation">' + e.localize("summaryPrefix") + '</span> <span class="jqx-summary-total-end" role="presentation">' + s + '</span> <span class="jqx-summary-suffix" role="presentation">' + e.localize("summarySuffix") + "</span>" } get _pageIndexSelectorsCount() { const e = this; let t = parseInt(e.pageIndexSelectors); return Array.isArray(e.pageIndexSelectors) && (t = e.pageIndexSelectors.length), t } _renderPageIndexSelectors() { const e = this; if (e.pageIndex < 0 || e.pageIndex >= e.pagesCount) return void (e.$.pageIndexSelectorsContainer.innerHTML = ""); e.$.pageIndexSelectorsContainer.innerHTML = ""; let t = !1; Array.isArray(e.pageIndexSelectors) && (t = !0); let a = Math.floor(e.pageIndex / e._pageIndexSelectorsCount) * e._pageIndexSelectorsCount, n = Math.min(e.pagesCount, a + e._pageIndexSelectorsCount), s = 0; for (let r = a; r < n; r++) { const a = document.createElement("span"); let n = r + 1; if (a.className = "jqx-pager-page-index-selector", t) { const t = e.pageIndexSelectors[s++]; t && (t.label ? n = e.pageIndexSelectors[r].label : "string" == typeof t && (n = t), t.value && a.setAttribute("value", e.pageIndexSelectors[r].value)) } a.index = r, a.innerHTML = n, a.setAttribute("role", "listitem"), e.$.pageIndexSelectorsContainer.appendChild(a), r === e.pageIndex && (a.classList.add("jqx-selected"), a.setAttribute("selected", ""), a.setAttribute("aria-current", "page")) } } _lastButtonClickHandler() { this.last() } last() { this.navigateTo(this.pagesCount - 1) } _firstButtonClickHandler() { this.first() } first() { this.navigateTo(0) } _renderButtons() { const e = this; switch (0 === e.pageIndex ? (e.$.firstButton.setAttribute("disabled", ""), e.$.previousButton.setAttribute("disabled", "")) : (e.$.firstButton.removeAttribute("disabled"), e.$.previousButton.removeAttribute("disabled")), e.pageIndex === e.pagesCount - 1 ? (e.$.nextButton.setAttribute("disabled", ""), e.$.lastButton.setAttribute("disabled", "")) : (e.$.nextButton.removeAttribute("disabled"), e.$.lastButton.removeAttribute("disabled")), e.pagesCount <= 0 && (e.$.firstButton.setAttribute("disabled", ""), e.$.previousButton.setAttribute("disabled", ""), e.$.nextButton.setAttribute("disabled", ""), e.$.lastButton.setAttribute("disabled", "")), e.$nearButtonsContainer.removeClass("far"), e.$farButtonsContainer.removeClass("far"), e.$nearButtonsContainer.removeClass("near"), e.$farButtonsContainer.removeClass("near"), e.navigationButtonsPosition) { case "near": e.$nearButtonsContainer.addClass("near"), e.$farButtonsContainer.addClass("near"); break; case "far": e.$nearButtonsContainer.addClass("far"), e.$farButtonsContainer.addClass("far"); break; case "both": e.$nearButtonsContainer.addClass("near"), e.$farButtonsContainer.addClass("far") } } _navigateToInputChangeHandler() { const e = this; let t = parseInt(e.$.navigateToInput.value) - 1; isNaN(t) && (e.$.navigateToInput.value = "1", t = parseInt(e.$.navigateToInput.value - 1)), e.navigateTo(t) } _pageIndexSelectorsContainerClickHandler(e) { const t = this.enableShadowDOM ? e.composedPath()[0].closest(".jqx-pager-page-index-selector") : e.target.closest(".jqx-pager-page-index-selector"); t && !t.classList.contains("jqx-selected") && this.navigateTo(t.index) } _pageSizeSelectorChangeHandler(e) { const t = this; !t.showPageSizeSelector || t.disabled || t._updating || (t.pageSize = parseInt(e.detail.value), t.$.fireEvent("pageSizeChanged", { value: parseInt(e.detail.value) })) } _keyDownHandler(e) { const t = this; if (!t.disabled && (t.enableShadowDOM && t.shadowRoot.activeElement || document.activeElement) !== t.$.navigateToInput && null === t.$.pageSizeSelector.getAttribute("focus")) switch (e.key) { case "End": t.last(), e.preventDefault(); break; case "Home": t.first(), e.preventDefault(); break; case "PageDown": case "ArrowDown": case "ArrowLeft": t.prev(), e.preventDefault(); break; case "PageUp": case "ArrowUp": case "ArrowRight": t.next(), e.preventDefault() } } _nextButtonClickHandler() { this.next() } _previousButtonClickHandler() { this.prev() } navigateTo(e) { const t = this, a = t.pageIndex; t.disabled || t.pageIndex === e || e < 0 || e >= t.pagesCount || (t.pageIndex = e, t._render(), t.$.fireEvent("change", { oldIndex: a, index: e })) } _localize() { const e = this, t = ["firstButton", "lastButton", "previousButton", "nextButton"]; for (let a = 0; a < t.length; a++) { const n = e.$[t[a]]; !e.showNavigationButtonLabels && a < 2 ? (n.innerHTML = "", 0 === a ? n.classList.add("jqx-arrow-left-first") : n.classList.add("jqx-arrow-right-last")) : !e.showNavigationButtonLabels && a >= 2 ? (n.innerHTML = "", 2 === a ? n.classList.add("jqx-arrow-left") : n.classList.add("jqx-arrow-right")) : (n.classList.remove("jqx-arrow-left"), n.classList.remove("jqx-arrow-right"), n.classList.remove("jqx-arrow-left-first"), n.classList.remove("jqx-arrow-right-last"), n.innerHTML = e.localize(t[a])) } e.$.pageSizeLabel.innerHTML = e.localize("pageSizeLabel"), e.$.navigateToLabel.innerHTML = e.localize("navigateToLabel"), e.$.previousEllipsisButton.innerHTML = e.localize("ellipsis"), e.$.nextEllipsisButton.innerHTML = e.localize("ellipsis"), e.$.navigateToInput.placeholder = e.localize("navigateToInputPlaceholder") } _nextEllipsisButtonClickHandler() { const e = this; e.navigateTo(e._pageIndexSelectorsCount + e.pageIndex) } _previousEllipsisButtonClickHandler() { const e = this; e.navigateTo(-e._pageIndexSelectorsCount + e.pageIndex) } _navigationButtonsClickHandler(e) { const t = this; if (!t.disabled) switch (t.enableShadowDOM ? e.composedPath()[0].closest(".jqx-pager-button") : e.target.closest(".jqx-pager-button")) { case t.$.firstButton: t._firstButtonClickHandler(e); break; case t.$.lastButton: t._lastButtonClickHandler(e); break; case t.$.previousButton: t._previousButtonClickHandler(e); break; case t.$.nextButton: t._nextButtonClickHandler(e) } } _navigationButtonsDownHandler(e) { const t = this, a = t.enableShadowDOM ? e.originalEvent.composedPath()[0].closest(".jqx-pager-button") || e.originalEvent.composedPath()[0].closest(".jqx-pager-page-index-selector") : e.originalEvent.target.closest(".jqx-pager-button") || e.originalEvent.target.closest(".jqx-pager-page-index-selector"); !t.disabled && a && (t.hasRippleAnimation && JQX.Utilities.Animation.Ripple.animate(a, e.pageX, e.pageY), a !== t.$.previousButton && a !== t.$.nextButton || t._startRepeat(e, a)) } _updateInBoundsFlag(e) { const t = this, a = t.enableShadowDOM ? e.composedPath()[0] : e.target; a._isPointerInBounds = !0, -1 !== e.type.indexOf("leave") && (a._isPointerInBounds = !1), 1 !== ("buttons" in e ? e.buttons : e.which) && t._stopRepeat() } _startRepeat(e, t) { const a = this; a._initialTimer || (a._initialTimer = setTimeout((function () { a._repeatTimer = setInterval((() => { t._isPointerInBounds && (t === a.$.previousButton ? a._previousButtonClickHandler(e) : a._nextButtonClickHandler(e)) }), 50) }), 150)) } _stopRepeat() { const e = this; e._repeatTimer && (clearInterval(e._repeatTimer), e._repeatTimer = null), e._initialTimer && (clearTimeout(e._initialTimer), e._initialTimer = null) } });
|
|
150
|
+
|
|
151
|
+
/***/
|
|
152
|
+
}),
|
|
153
|
+
|
|
154
|
+
/***/ 9135:
|
|
155
|
+
/***/ (() => {
|
|
156
|
+
|
|
157
|
+
JQX("jqx-scroll-bar", class extends JQX.BaseElement { static get properties() { return { clickRepeatDelay: { type: "integer", value: 50 }, largeStep: { type: "integer", value: 100 }, min: { type: "integer", value: 0 }, max: { type: "integer", value: 1e3 }, mechanicalAction: { value: "switchWhileDragging", allowedValues: ["switchUntilReleased", "switchWhenReleased", "switchWhileDragging"], type: "string" }, orientation: { type: "string", value: "horizontal", allowedValues: ["horizontal", "vertical"] }, step: { type: "integer", value: 10 }, showButtons: { type: "boolean", value: !0, defaultReflectToAttribute: !0 }, value: { type: "integer", value: 0 } } } static get styleUrls() { return ["jqx.scrollbar.css"] } template() { return '<div id="container" class="jqx-container" role="presentation">\n <div id="nearButton" class="jqx-scroll-button jqx-arrow-left" role="presentation" aria-hidden="true"></div>\n <div id="track" class="jqx-track" role="presentation">\n <div id="thumb" class="jqx-thumb" role="presentation"></div>\n </div>\n <div id="farButton" class="jqx-scroll-button jqx-arrow-right" role="presentation" aria-hidden="true"></div>\n </div>' } static get listeners() { return { "nearButton.click": "_nearButtonClickHandler", "nearButton.down": "_startRepeat", "nearButton.up": "_stopRepeat", "nearButton.pointerenter": "_updateInBoundsFlag", "nearButton.pointerleave": "_updateInBoundsFlag", "farButton.click": "_farButtonClickHandler", "farButton.down": "_startRepeat", "farButton.up": "_stopRepeat", "farButton.pointerenter": "_updateInBoundsFlag", "farButton.pointerleave": "_updateInBoundsFlag", "track.down": "_trackDownHandler", "track.click": "_trackClickHandler", "track.move": "_trackMoveHandler", "thumb.down": "_dragStartHandler", "document.move": "_dragHandler", "document.up": "_dragEndHandler", up: "_dragEndHandler", "document.selectstart": "_selectStartHandler", resize: "_resizeHandler" } } _updateInBoundsFlag(t) { const e = this, a = t.target; a._isPointerInBounds = !0, -1 !== t.type.indexOf("leave") && (a._isPointerInBounds = !1), 1 !== ("buttons" in t ? t.buttons : t.which) && e._stopRepeat(t) } _startRepeat(t) { const e = this; if (e.disabled) return; const a = t.target; a._initialTimer || (a._initialTimer = setTimeout((function () { a._repeatTimer = setInterval((() => { if (a._isPointerInBounds) { const e = "buttons" in t ? t.buttons : t.which; a.$.fireEvent("click", { buttons: e, clientX: t.clientX, clientY: t.clientY, pageX: t.pageX, pageY: t.pageY, screenX: t.screenX, screenY: t.screenY }) } }), e.clickRepeatDelay) }), 3 * e.clickRepeatDelay)) } _stopRepeat(t) { if (this.disabled) return; const e = t.target; e._repeatTimer && (clearInterval(e._repeatTimer), e._repeatTimer = null), e._initialTimer && (clearTimeout(e._initialTimer), e._initialTimer = null) } _calculateThumbSize(t) { const e = this, a = e.max - e.min, r = "horizontal" === e.orientation ? e.$.track.offsetWidth > 10 : e.$.track.offsetHeight > 10; let n = 0; return a >= 1 && r ? (n = t / (a + t) * t, e.$.thumb.className.indexOf("jqx-hidden") >= 0 && e.$thumb.removeClass("jqx-hidden")) : e.$thumb.addClass("jqx-hidden"), Math.max(10, Math.min(n, t)) } _dragStartHandler(t) { const e = this; e.disabled || (e.thumbCapture = !0, e.dragStartX = t.clientX, e.dragStartY = t.clientY, e.dragStartValue = e.value, t.stopPropagation(), t.preventDefault()) } _dragHandler(t) { const e = this; if (!0 !== e.thumbCapture) return; e._isThumbDragged = !0; const a = (e.max - e.min) / (e.scrollBarSize - e.thumbSize), r = "horizontal" === e.orientation ? (t.clientX - e.dragStartX) * a : (t.clientY - e.dragStartY) * a; let n = r; e.rightToLeft && "horizontal" === e.orientation && (n = -r), e._updateValue(e.dragStartValue + n), t.stopPropagation(), t.preventDefault(), t.originalEvent && (t.originalEvent.stopPropagation(), t.originalEvent.preventDefault()) } _dragEndHandler(t) { const e = this; e._trackDownTimer && (clearInterval(e._trackDownTimer), e._trackDownTimer = null), e.thumbCapture && (e.thumbCapture = !1, e._isThumbDragged = !1, "switchWhenReleased" === e.mechanicalAction ? e._updateValue(e.dragStartValue, e.value) : "switchUntilReleased" === this.mechanicalAction && e._updateValue(e.dragStartValue), t.preventDefault(), t.stopPropagation(), t.originalEvent.preventDefault(), t.originalEvent.stopPropagation()) } _farButtonClickHandler() { const t = this; if (t.disabled) return; const e = t.value; t._updateValue(t.value + ("horizontal" === t.orientation && t.rightToLeft ? -1 : 1) * t.step), "switchUntilReleased" === t.mechanicalAction && t._updateValue(e) } _nearButtonClickHandler() { const t = this; if (t.disabled) return; const e = t.value; t._updateValue(t.value - ("horizontal" === t.orientation && t.rightToLeft ? -1 : 1) * t.step), "switchUntilReleased" === t.mechanicalAction && t._updateValue(e) } propertyChangedHandler(t, e, a) { super.propertyChangedHandler(t, e, a); const r = this; switch (t) { case "min": case "max": case "orientation": case "showButtons": r._layout(), "min" === t ? r.setAttribute("aria-valuemin", a) : "max" === t ? r.setAttribute("aria-valuemax", a) : "orientation" === t && r.setAttribute("aria-orientation", a); break; case "value": r._updateValue(e, a); break; default: r._layout() } } render() { const t = this; t.setAttribute("role", "scrollbar"), t.setAttribute("aria-orientation", t.orientation), t.setAttribute("aria-valuemin", t.min), t.setAttribute("aria-valuemax", t.max), t.setAttribute("aria-valuenow", t.value), t._layout(), super.render() } _resizeHandler() { this._layout() } refresh() { this._layout() } beginUpdate() { this._isUpdating = !0 } endUpdate() { this._isUpdating = !1, this.refreshValue() } refreshValue() { const t = this; t._layout(), t._updateValue(t.value) } _layout() { const t = this; t._isUpdating || (t.scrollBarSize = "horizontal" === t.orientation ? t.$.track.offsetWidth : t.$.track.offsetHeight, t.thumbSize = t._calculateThumbSize(t.scrollBarSize), "horizontal" === t.orientation && t.$.thumb.style.width !== t.thumbSize + "px" ? t.$.thumb.style.width = t.thumbSize + "px" : "vertical" === t.orientation && t.$.thumb.style.height !== t.thumbSize + "px" && (t.$.thumb.style.height = t.thumbSize + "px"), "horizontal" === t.orientation ? (t.$.nearButton.classList.contains("jqx-arrow-up") && t.$.nearButton.classList.remove("jqx-arrow-up"), t.$.farButton.classList.contains("jqx-arrow-down") && t.$.farButton.classList.remove("jqx-arrow-down"), t.$.nearButton.classList.contains("jqx-arrow-left") || t.$.nearButton.classList.add("jqx-arrow-left"), t.$.farButton.classList.contains("jqx-arrow-right") || t.$.farButton.classList.add("jqx-arrow-right")) : (t.$.nearButton.classList.contains("jqx-arrow-left") && t.$.nearButton.classList.remove("jqx-arrow-left"), t.$.farButton.classList.contains("jqx-arrow-right") && t.$.farButton.classList.remove("jqx-arrow-right"), t.$.nearButton.classList.contains("jqx-arrow-up") || t.$.nearButton.classList.add("jqx-arrow-up"), t.$.farButton.classList.contains("jqx-arrow-down") || t.$.farButton.classList.add("jqx-arrow-down")), t._updateThumbPosition(), (t.value > t.max || t.value < t.min) && t._updateValue(t.value, t.value > t.max ? t.max : t.min)) } _selectStartHandler(t) { this.thumbCapture && t.preventDefault() } _trackDownHandler(t) { const e = this; t.target === e.$.track && (e._trackDownTimer && clearInterval(e._trackDownTimer), e.thumbCapture || (e._trackDownTimer = setInterval((function () { e._trackClickHandler(t) }), e.clickRepeatDelay), t.stopPropagation(), t.preventDefault())) } _trackClickHandler(t) { const e = this; if (e.disabled) return; if (e._isThumbDragged) return clearInterval(e._trackDownTimer), void (e._trackDownTimer = null); const a = e.$.thumb.getBoundingClientRect(), r = t.pageX - window.pageXOffset, n = t.pageY - window.pageYOffset, i = (e.rightToLeft ? -1 : 1) * e.value; "horizontal" === e.orientation ? r > (e._isThumbDragged ? e.dragStartX : a.right) ? e._updateValue(e.value + (e.rightToLeft ? -1 : 1) * e.largeStep) : r < (e._isThumbDragged ? e.dragStartX : a.left) && e._updateValue(e.value - (e.rightToLeft ? -1 : 1) * e.largeStep) : n > (e._isThumbDragged ? e.dragStartY : a.bottom) ? e._updateValue(e.value + e.largeStep) : n < (e._isThumbDragged ? e.dragStartY : a.top) && e._updateValue(e.value - e.largeStep), "switchUntilReleased" === e.mechanicalAction && e._updateValue(i) } _trackMoveHandler(t) { "touchmove" === t.originalEvent.type && t.originalEvent.preventDefault() } _updateValue(t, e) { const a = this; if (!a._isUpdating && (1 === arguments.length && (e = t, t = a.value), (void 0 === e || isNaN(e)) && (e = a.min), e > a.max && (e = a.max), e < a.min && (e = a.min), a.value = e, t !== e)) { if (a.setAttribute("aria-valuenow", e), a._updateThumbPosition(), a.thumbCapture && "switchWhenReleased" === a.mechanicalAction) return; if (a.onChange) return void a.onChange({ value: a.value, oldValue: t, min: a.min, max: a.max, context: a }); a.$.fireEvent("change", { value: a.value, oldValue: t, min: a.min, max: a.max }) } } _updateThumbPosition() { const t = this, e = "horizontal" === t.orientation ? t.$.track.offsetWidth : t.$.track.offsetHeight, a = t._calculateThumbSize(e), r = e - a; let n = (e - a) / (t.max - t.min) * (t.value - t.min); t.rightToLeft && "horizontal" === t.orientation && (n = (e - a) / (t.max - t.min) * (t.max - t.value - t.min)), n = Math.min(r, Math.max(0, n)), "vertical" === t.orientation && t.$.thumb.style.top !== n + "px" ? t.$.thumb.style.top = n + "px" : "horizontal" === t.orientation && t.$.thumb.style.left !== n + "px" && (t.$.thumb.style.left = n + "px") } });
|
|
158
|
+
|
|
159
|
+
/***/
|
|
160
|
+
}),
|
|
161
|
+
|
|
162
|
+
/***/ 1066:
|
|
163
|
+
/***/ (() => {
|
|
164
|
+
|
|
165
|
+
JQX("jqx-splitter-item", class extends JQX.ContentElement { static get properties() { return { collapsed: { value: !1, type: "boolean" }, collapsible: { value: !1, type: "boolean" }, locked: { value: !1, type: "boolean" }, max: { value: "", type: "any", validator: "_propertyValidator" }, min: { value: "", type: "any", validator: "_propertyValidator" }, size: { value: "", type: "any", validator: "_propertyValidator" } } } get enableShadowDOM() { return !1 } template() { return '<div id="container" role="presentation">\n <div class="jqx-content" id="content" inner-h-t-m-l="[[innerHTML]]" role="presentation">\n <content></content>\n </div>\n </div>' } static get listeners() { return { mouseenter: "_mouseEventsHandler", mouseleave: "_mouseEventsHandler", styleChanged: "_styleChangedEventHandler" } } propertyChangedHandler(e, t, i) { const s = this; switch (e) { case "collapsed": s._ignorePropertyValue = !0, i ? s.collapse() : s.expand(); break; case "collapsible": s._updateNearSplitterBars(); break; case "size": case "min": case "max": s._setSize(e, i); break; default: super.propertyChangedHandler(e, t, i) } } attached() { super.attached(); const e = this; e._sizeLimits || (e._sizeLimits = {}); const t = getComputedStyle(e); e.min || (e._sizeLimits.minWidth = parseFloat(t.getPropertyValue("min-width")) || 0, e._sizeLimits.minHeight = parseFloat(t.getPropertyValue("min-height")) || 0), e.max || (e._sizeLimits.maxWidth = parseFloat(t.getPropertyValue("max-width")) || 0, e._sizeLimits.maxHeight = parseFloat(t.getPropertyValue("max-height")) || 0) } detached() { super.detached(), this.$.removeClass("animate") } appendChild(e) { const t = this; if (e) { if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } t.$.content.appendChild(e) } else t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "appendChild", node: "node" })) } collapse(e) { const t = this; if (t.collapsible) { if (t._ignorePropertyValue || !t.collapsed) { const i = t.closest("jqx-splitter") || (t.getRootNode() && t.getRootNode().host ? t.getRootNode().host.closest("jqx-splitter") : void 0); if (!i) return; const s = i._items.indexOf(t); s === i._items.length - 1 ? e = !0 : 0 === s && (e = !1); const n = e ? -1 : 1; let a, r = s + n, o = i._items[r]; for (; o && o.collapsed;)r += n, o = i._items[r]; if (!o) return void (t.collapsed = !1); delete t._ignorePropertyValue, t._sizeBeforeCollapse || (t._sizeBeforeCollapse = t[i._measurements.size]), o._sizeBeforeCollapse || (o._sizeBeforeCollapse = o[i._measurements.size]), t.previousElementSibling instanceof JQX.SplitterBar ? a = t.previousElementSibling : t.nextElementSibling instanceof JQX.SplitterBar && (a = t.nextElementSibling); const l = o[i._measurements.size] + t[i._measurements.size], m = a ? a[i._measurements.size] : t._sizeLimits[i._measurements.minDimension]; if (l && l - m < m) return void (t.collapsed = !1); if (i.hasAnimation && !i._isInitializing && (t.style[i._measurements.dimension] || (t.style[i._measurements.dimension] = t[i._measurements.size] + "px"), t.$.addClass("animate"), o.$.addClass("animate"), t.addEventListener("transitionend", t._transitionEndHandler, { once: !0 }), t.addEventListener("transitioncancel", t._transitionEndHandler, { once: !0 }), o.addEventListener("transitionend", t._transitionEndHandler, { once: !0 }), o.addEventListener("transitioncancel", t._transitionEndHandler, { once: !0 })), !t._paddings) { const e = getComputedStyle(t); t._paddings = (parseFloat(e.getPropertyValue("padding-" + i._measurements.position)) || 0) + (parseFloat(e.getPropertyValue("padding-" + i._measurements.position2)) || 0) } void 0 !== o._sizeBeforeCollapse && (o._sizeBeforeCollapse = o._sizeBeforeCollapse + t._sizeBeforeCollapse), o._sizeLimits && o._sizeLimits[i._measurements.maxDimension] && l > o._sizeLimits[i._measurements.maxDimension] && (o._sizeLimits.ignoreUpdate = !0, o._sizeBeforeCollapse ? o.style[i._measurements.maxDimension] = o._sizeBeforeCollapse + "px" : o.style[i._measurements.maxDimension] = ""), o.set("size", ""), o._sizeBeforeCollapse && (o.style[i._measurements.dimension] = o._sizeBeforeCollapse + "px"), t.style[i._measurements.dimension] = t.style[i._measurements.minDimension] = "0", t.style.padding = "0", t._neighbourItem = o, t.collapsed = !0, i.$.fireEvent("collapse", { itemIndex: i._items.indexOf(t) }), e ? (t.previousElementSibling.itemCollapsed = !0, t.previousElementSibling.showFarButton = !(t.previousElementSibling.showNearButton = !1)) : (t.nextElementSibling.itemCollapsed = !0, t.nextElementSibling.showNearButton = !(t.nextElementSibling.showFarButton = !1)) } } else t.collapsed = !1 } expand() { const e = this; if (e._ignorePropertyValue || e.collapsed) { const t = e.closest("jqx-splitter") || (e.getRootNode() && e.getRootNode().host ? e.getRootNode().host.closest("jqx-splitter") : void 0); if (!t) return void (e.collapsed = !0); if (!e._neighbourItem) return void (e.collapsed = !0); if (delete e._ignorePropertyValue, !e._neighbourItem._ignorePropertyValue && e._neighbourItem.collapsed) { let i = t._items.indexOf(e._neighbourItem); const s = t._items.indexOf(e) > t._items.indexOf(e._neighbourItem) ? -1 : 1; for (e._neighbourItem = t._items[i]; e._neighbourItem && e._neighbourItem.collapsed;)i += s, e._neighbourItem = t._items[i] } if (!e._neighbourItem) return void (e.collapsed = !0); e.min && e._setSize("min", e.min, !0); const i = e._neighbourItem._sizeBeforeCollapse, s = e._sizeLimits[t._measurements.minDimension], n = e._neighbourItem._sizeLimits[t._measurements.minDimension]; if (i && i - s < n) return void (e.collapsed = !0); if (!e._neighbourItem._paddings) { const i = getComputedStyle(e._neighbourItem); e._neighbourItem._paddings = (parseFloat(i.getPropertyValue("padding-" + t._measurements.position)) || 0) + (parseFloat(i.getPropertyValue("padding-" + t._measurements.position2)) || 0) } if (!e._paddings) { const i = getComputedStyle(e); e._paddings = (parseFloat(i.getPropertyValue("padding-" + t._measurements.position)) || 0) + (parseFloat(i.getPropertyValue("padding-" + t._measurements.position2)) || 0) } if ((e.size + "").indexOf("%") > -1 && (!e._sizeBeforeCollapse || 0 === e._sizeBeforeCollapse) && e._neighbourItem._sizeBeforeCollapse) { let i = 0; t._items.map((e => i += e.collapsed ? 0 : e.style[t._measurements.dimension] && e.style[t._measurements.dimension].indexOf("%") < -1 && e._sizeBeforeCollapse ? e._sizeBeforeCollapse : e.getBoundingClientRect()[t._measurements.dimension])), e._sizeBeforeCollapse = i * parseFloat(e.size) / 100 } const a = Math.min(Math.max(s, e._sizeBeforeCollapse), i - e._neighbourItem._paddings - e._paddings - n); if (a < 0) return void (e.collapsed = !0); e.min && (e.style[t._measurements.minDimension] = 0), e.hasAnimation && !t._isInitializing && (e.$.addClass("animate"), e._neighbourItem.$.addClass("animate"), e.addEventListener("transitionend", e._transitionEndHandler, { once: !0 }), e.addEventListener("transitioncancel", e._transitionEndHandler, { once: !0 }), e._neighbourItem.addEventListener("transitionend", e._transitionEndHandler, { once: !0 }), e._neighbourItem.addEventListener("transitioncancel", e._transitionEndHandler, { once: !0 })), e.style.padding = "", e.min && (e.style[t._measurements.minDimension] = e._sizeLimits[t._measurements.minDimension] + "px"), e.style[t._measurements.dimension] = (e._sizeBeforeCollapse = a) + "px", e._neighbourItem.style[t._measurements.dimension] = (e._neighbourItem._sizeBeforeCollapse = Math.max(e._neighbourItem._sizeLimits[t._measurements.minDimension], i - a)) + "px", e._neighbourItem._sizeLimits[t._measurements.maxDimension] && (e._neighbourItem.style[t._measurements.maxDimension] = e._neighbourItem._sizeLimits[t._measurements.maxDimension] + "px"), e.collapsed = !1, t.$.fireEvent("expand", { itemIndex: t._items.indexOf(e) }), t._items.indexOf(e) > t._items.indexOf(e._neighbourItem) ? (e.previousElementSibling.itemCollapsed = !1, e.previousElementSibling.showNearButton = e._neighbourItem.collapsible) : (e.nextElementSibling.itemCollapsed = !1, e.nextElementSibling.showFarButton = e._neighbourItem.collapsible); const r = t._items[t._items.indexOf(e) - 1], o = t._items[t._items.indexOf(e) + 1]; if (r) { const t = r.nextElementSibling; t && t instanceof JQX.SplitterBar && (r.collapsed ? t.showNearButton = e.collapsible : (t.itemCollapsed = !1, t.showNearButton = r.collapsible, t.showFarButton = e.collapsible)) } if (o) { const t = o.previousElementSibling; t && t instanceof JQX.SplitterBar && (o.collapsed ? t.showFarButton = o.collapsed : (t.itemCollapsed = !1, t.showNearButton = e.collapsible, t.showFarButton = o.collapsible)) } delete e._neighbourItem } } insertBefore(e, t) { const i = this; if (e) { if (!i.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.insertBefore.apply(i, e.concat(Array.prototype.slice.call(arguments))) } i.$.content.insertBefore(e, t || null) } else i.error(i.localize("invalidNode", { elementType: i.nodeName.toLowerCase(), method: "insertBefore", node: "node" })) } lock() { this.locked = !0 } unlock() { this.locked = !1 } ready() { super.ready() } render() { const e = this, t = e.closest("jqx-splitter"), i = t && t.isCompleted; e.setAttribute("role", "region"), e._sizeLimits = {}; let s = "string" == typeof e.min && e.min.indexOf("%") > -1; const n = isNaN(parseFloat(e.min)) ? 0 : parseFloat(e.min), a = isNaN(parseFloat(e.max)) ? 0 : parseFloat(e.max); if (e._sizeLimits.minWidth = e._sizeLimits.minHeight = s && i ? n * t[t._measurements.size] / 100 : n, s = "string" == typeof e.max && e.max.indexOf("%") > -1, e._sizeLimits.maxWidth = e._sizeLimits.maxHeight = s && i ? a * t[t._measurements.size] / 100 : a, e.size) { s = "string" == typeof e.size && e.size.indexOf("%") > -1; const n = "auto" === e.size ? e.size : isNaN(parseFloat(e.size)) ? 0 : parseFloat(e.size) + (s ? "%" : "px"); i ? e.style[t._measurements.dimension] = n : e.style.width = e.style.height = n } e.min && e._setSize("min", e.min), e.max && e._setSize("max", e.max), e._updateNearSplitterBars(), e.checkLicense(), super.render() } removeChild(e) { const t = this; if (e) { if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } t.$.content.removeChild(e) } else t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "removeChild", node: "node" })) } _expand() { const e = this; if (e._neighbourItem && e._neighbourItem.parentElement) return void e.expand(); const t = e.closest("jqx-splitter"); t && (delete e._neighbourItem, e.collapsed = !1, t.$.fireEvent("expand", { itemIndex: t._items.indexOf(e) }), e.style[t._measurements.minDimension] = e.min ? e._sizeLimits[t._measurements.minDimension] + "px" : "", e.style[t._measurements.dimension] = e._sizeBeforeCollapse + "px", t._items.length < 2 || e.previousElementSibling instanceof JQX.SplitterBar && (e.previousElementSibling.itemCollapsed = !1, e.previousElementSibling.showNearButton = t._items[t._items.indexOf(e) - 1].collapsible)) } _mouseEventsHandler(e) { const t = this.closest("jqx-splitter") || this.getRootNode().host; (t && !t.disabled || JQX.Utilities.Core.isMobile) && ("mouseenter" === e.type ? this.setAttribute("hover", "") : this.removeAttribute("hover")) } _propertyValidator(e, t) { return "number" != typeof t && "string" != typeof t ? e : t } _setSize(e, t, i) { const s = this; if (s.isCompleted && s.locked) return; const n = s.closest("jqx-splitter"); if (!n) return; if (!n.isCompleted) return void n.whenReady((() => s._setSize(e, t))); const a = "string" == typeof t && t.indexOf("%") > -1, r = function () { const e = n.bars; let t = 0; for (let i = 0; i < e.length; i++)t += e[i][n._measurements.size]; return n.$.container[n._measurements.size] - t }(), o = e => 100 * e / r; switch (t = isNaN(parseFloat(t)) ? "" : parseFloat(t), s._sizeLimits || (s._sizeLimits = {}), e) { case "size": { const e = s[n._measurements.size]; "auto" !== arguments[1] && arguments[1] ? a ? (s.style[n._measurements.dimension] = t + "%", s._sizeBeforeCollapse = t * r / 100) : s.style[n._measurements.dimension] = (s._sizeBeforeCollapse = t || 0) + "px" : (s.style[n._measurements.dimension] = arguments[1], s._sizeBeforeCollapse = s[n._measurements.size]), s._validateSize(); const i = e - s._sizeBeforeCollapse; if (s._originalSize && (s._originalSize = a ? t + "%" : s._sizeBeforeCollapse), n.hasAttribute("orientation-change")) break; const o = n._items[n._items.length - 1]; if (s === o) { let e = n._items.find((e => e !== s && !e.collapsed && !e.locked && !e.size)); if (!e) for (let t = Math.max(0, n._items.length - 2); t >= 0; t--)if (!n._items[t].collapsed && !n._items[t].locked && n._items[t] !== s) { e = n._items[t]; break } e && (e.style[n._measurements.dimension] = (e._sizeBeforeCollapse = Math.max(0, e[n._measurements.size] + i)) + "px") } break } case "min": if (t = a ? t * r / 100 : t, s._sizeLimits.minWidth = s._sizeLimits.minHeight = t, s.style[n._measurements.minDimension] = s.collapsed || !t ? "" : a ? o(t) + "%" : t + "px", s.style["min" + n._measurements.restricredDimension] = "", s._validateSize(), t || n._noNeighbourValidation || n._validateNeighbourSizeLimits(s), s.size) return void s._setSize("size", s.size, i); break; case "max": if (s._sizeLimits.maxWidth = s._sizeLimits.maxHeight = a ? t * r / 100 : t, s.style[n._measurements.maxDimension] = t ? a ? o(t) + "%" : t + "px" : "", s.style["max" + n._measurements.restricredDimension] = "", s._validateSize(), t || n._noNeighbourValidation || n._validateNeighbourSizeLimits(s), s.size) return void s._setSize("size", s.size, i) }i || n._noItemSizeValidation || n._validateItemSize(!0) } _validateSize() { const e = this, t = e.closest("jqx-splitter"); if (e.collapsed && !t) return; const i = t._measurements, s = e._sizeBeforeCollapse ? e._sizeBeforeCollapse : e.getBoundingClientRect()[i.dimension]; function n(t) { const n = t + "Dimension", a = e.style[i[n]], r = e._sizeLimits[i[n]]; var o; ("min" === t && s < r || "max" === t && s > r) && (e.style[i.dimension] = "string" == typeof (o = a) && o.indexOf("%") > -1 ? a : r + "px", e._sizeBeforeCollapse = r) } e.min && n("min"), e.max && n("max") } _styleChangedEventHandler(e) { const t = this; if (t.locked) return; if (t._sizeLimits.ignoreUpdate) return void delete t._sizeLimits.ignoreUpdate; if (t.collapsed) return; const i = t.closest("jqx-splitter"); let s; e.detail.styleProperties["min-width"] ? (s = e.detail.styleProperties["min-width"][i && "horizontal" === i.orientation ? "oldValue" : "value"], t._sizeLimits.minWidth = (parseFloat(s) || 0) * (s && s.indexOf("%") > -1 ? i[i._measurements.size] / 100 : 1)) : e.detail.styleProperties["max-width"] ? (s = e.detail.styleProperties["max-width"][i && "horizontal" === i.orientation ? "oldValue" : "value"], t._sizeLimits.maxWidth = (parseFloat(s) || 0) * (s && s.indexOf("%") > -1 ? i[i._measurements.size] / 100 : 1)) : e.detail.styleProperties["min-height"] ? (s = e.detail.styleProperties["min-height"][i && "horizontal" === i.orientation ? "value" : "oldValue"], t._sizeLimits.minHeight = (parseFloat(s) || 0) * (s && s.indexOf("%") > -1 ? i[i._measurements.size] / 100 : 1)) : e.detail.styleProperties["max-height"] && (s = e.detail.styleProperties["max-height"][i && "horizontal" === i.orientation ? "value" : "oldValue"], t._sizeLimits.maxHeight = (parseFloat(s) || 0) * (s && s.indexOf("%") > -1 ? i[i._measurements.size] / 100 : 1)) } _transitionEndHandler() { const e = this; (e.isCompleted || !e.$.hasClass("animate")) && (e.$.removeClass("animate"), e._neighbourItem && e._neighbourItem.$.hasClass("animate") && e._neighbourItem.$.removeClass("animate"), (e.size + "").indexOf("%") > -1 || e._neighbourItem && (e._neighbourItem.size + "").indexOf("%") > -1) && ((e.shadowRoot && e.getRootNode() ? e.getRootNode().host : null) || e.closest("jqx-splitter"))._validateItemSize() } _updateNearSplitterBars() { const e = this; e.previousElementSibling instanceof JQX.SplitterBar && (e.previousElementSibling.showFarButton = e.collapsible), e.nextElementSibling instanceof JQX.SplitterBar && (e.nextElementSibling.showNearButton = e.collapsible) } }), JQX("jqx-splitter-bar", class extends JQX.BaseElement { static get properties() { return { showNearButton: { value: !1, type: "boolean" }, showFarButton: { value: !1, type: "boolean" }, itemCollapsed: { value: !1, type: "boolean" }, locked: { value: !1, type: "boolean" } } } get enableShadowDOM() { return !1 } template() { return '<div id="container" role="presentation">\n <div class="jqx-splitter-far-collapse-button" id="farCollapseButton" role="button" aria-label="Collapse next">\n <span id="arrowNear" class="jqx-arrow" aria-hidden="true"></span>\n </div>\n <div class="jqx-splitter-resize-button" id="resizeButton" aria-hidden="true">\n <span></span>\n </div>\n <div class="jqx-splitter-near-collapse-button" id="nearCollapseButton" role="button" aria-label="Collapse previous">\n <span id="arrowFar" class="jqx-arrow" aria-hidden="true"></span>\n </div>\n </div>' } static get listeners() { return { mouseenter: "_mouseEventsHandler", mouseleave: "_mouseEventsHandler", mouseover: "_mouseEventsHandler", mouseout: "_mouseEventsHandler", focus: "_focusEventHandler", blur: "_focusEventHandler" } } propertyChangedHandler(e, t, i) { "unfocusable" === e ? this._setFocusable() : super.propertyChangedHandler(e, t, i) } ready() { super.ready(); const e = this; e.setAttribute("role", "separator"), e.setAttribute("aria-label", "Resize"), e._setFocusable() } hide() { const e = this, t = e.closest("jqx-splitter"); if (e.$.addClass("jqx-hidden"), t) { const i = t.items; if (t.hasAnimation) { let t; for (let s = 0; s < i.length; s++)i[s].$.hasClass("animate") && (t = !0, i[s].addEventListener("transitionend", (function () { e.closest("jqx-splitter")._autoFitItems() }), { once: !0 })); if (t) return } t._autoFitItems() } } show() { const e = this, t = e.closest("jqx-splitter"); if (e.$.removeClass("jqx-hidden"), t) { const i = t.items; if (t.hasAnimation) { let t; for (let s = 0; s < i.length; s++)i[s].$.hasClass("animate") && (t = !0, i[s].addEventListener("transitionend", (function () { e.closest("jqx-splitter")._validateItemSize() }), { once: !0 })); if (t) return } t._validateItemSize() } } lock() { const e = this; e.locked = e.unfocusable = !0, e.showNearButton || e.showFarButton || e._setFocusable() } unlock() { const e = this; e.locked = e.unfocusable = !1, e._setFocusable() } _focusEventHandler(e) { "focus" === e.type ? this.setAttribute("focus", "") : this.removeAttribute("focus") } _setFocusable() { const e = this; e.disabled || e.unfocusable ? e.removeAttribute("tabindex") : e.tabIndex = e.tabIndex > 0 ? e.tabIndex : 0 } _handleHoveredState(e, t) { const i = this; switch (t) { case "mouseenter": if (!e._getTargetItem(i, "previousElementSibling") || !("adjacent" === e.resizeMode ? e._getTargetItem(i, "nextElementSibling") : e._getTargetItem(i, "previousElementSibling", !0))) return; i.setAttribute("hover", ""); break; case "mouseleave": i.removeAttribute("hover") } } _mouseEventsHandler(e) { const t = this, i = t.closest("jqx-splitter") || t.getRootNode().host; i && i.disabled || JQX.Utilities.Core.isMobile || ("mouseenter" !== e.type && "mouseleave" !== e.type ? e.target.closest(".jqx-splitter-far-collapse-button") !== t.$.farCollapseButton ? e.target.closest(".jqx-splitter-near-collapse-button") !== t.$.nearCollapseButton ? e.target.closest(".jqx-splitter-resize-button") === t.$.resizeButton && ("mouseover" === e.type ? t.$.resizeButton.setAttribute("hover", "") : t.$.resizeButton.removeAttribute("hover")) : "mouseover" === e.type ? t.$.nearCollapseButton.setAttribute("hover", "") : t.$.nearCollapseButton.removeAttribute("hover") : "mouseover" === e.type ? t.$.farCollapseButton.setAttribute("hover", "") : t.$.farCollapseButton.removeAttribute("hover") : t._handleHoveredState(i, e.type)) } }), JQX("jqx-splitter", class extends JQX.ContentElement { static get properties() { return { autoFitMode: { allowedValues: ["end", "proportional", "overflow"], value: "proportional", type: "string" }, dataSource: { value: null, type: "object?", reflectToAttribute: !1 }, orientation: { allowedValues: ["horizontal", "vertical"], value: "vertical", type: "string" }, keepProportionsOnResize: { value: !1, type: "boolean" }, resizeMode: { allowedValues: ["none", "adjacent", "end", "proportional"], value: "adjacent", type: "string" }, resizeStep: { value: 5, type: "number" }, liveResize: { value: !1, type: "boolean" }, messages: { extend: !0, value: { en: { invalidIndex: '{{elementType}}: "{{method}}" method accepts an index of type number.', indexOutOfBound: '{{elementType}}: Out of bound index/indexes in "{{method}}" method.', invalidNode: '{{elementType}}: "{{method}}" method accepts an object or an array of objects as it\'s second parameter.', invalidSettings: '{{elementType}}: "{{method}}" method accepts a string or an object as it\'s second parameter.', invalidType: '{{elementType}}: "{{propertyName}}" must be of type string or number.' } }, type: "object" } } } static get listeners() { return { focus: "_focusHandler", blur: "_focusHandler", down: "_downHandler", move: "_moveHandler", "document.dragstart": "_dragStartHandler", "document.move": "_documentMoveHandler", "document.up": "_documentUpHandler", keydown: "_keyDownHandler", resize: "_resizeEventHandler" } } get enableShadowDOM() { const e = this, t = JQX.EnableShadowDOM; return e._isInShadowDOM ? !e._isInShadowDOM : e.isCompleted ? null !== e.shadowRoot : t } static get styleUrls() { return ["jqx.button.css", "jqx.splitter.css"] } template() { return '<div id="container" role="presentation">\n <content></content>\n </div>' } propertyChangedHandler(e, t, i) { const s = this; switch (e) { case "autoFitMode": s._validateItemSize(); break; case "dataSource": s._createLayout(); break; case "resizeMode": delete s._dragDetails; break; case "orientation": s.bars.forEach((e => e.setAttribute("aria-orientation", i))), s._setMeasurements(), s.setAttribute("orientation-change", ""); for (let e = 0; e < s._items.length; e++) { const t = s._items[e]; t.collapsed ? (t.style[s._measurements.dimension] = "", t.style[s._measurements.restricredDimension.toLowerCase()] = "100%") : (t.size ? (t.style[s._measurements.dimension] = "", t._setSize("size", t.size, !0)) : t.style[s._measurements.dimension] = t["offset" + s._measurements.restricredDimension] + "px", t.style[s._measurements.restricredDimension.toLowerCase()] = "100%", t._setSize("min", t.min, !0), t._setSize("max", t.max, !0)) } s._validateItemSize(), s.removeAttribute("orientation-change"); break; case "unfocusable": s._setFocusable(); break; default: super.propertyChangedHandler(e, t, i) } } appendChild(e) { const t = this; if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e && e instanceof JQX.SplitterItem ? t.insertBefore(e, null) : t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "appendChild", node: "node" })) } attached() { super.attached(); const e = this; e.isRendered && e._validateItemSize() } collapse(e, t) { const i = this; if ("number" == typeof e && (e = i._items[e]), !e) return; const s = i.closest("jqx-splitter") || (i.getRootNode() && i.getRootNode().host ? i.getRootNode().host.closest("jqx-splitter") : void 0); e instanceof JQX.SplitterItem && s === i || "number" == typeof e && i._items[e] ? e.collapse(t) : i.error(i.localize("invalidIndex", { elementType: i.nodeName.toLowerCase(), method: "collapse" })) } expand(e) { const t = this; if ("number" == typeof e && (e = t._items[e]), !e) return; const i = t.closest("jqx-splitter") || (t.getRootNode() && t.getRootNode().host ? t.getRootNode().host.closest("jqx-splitter") : void 0); e instanceof JQX.SplitterItem && i === t || "number" == typeof e && t._items[e] ? e.expand() : t.error(t.localize("invalidIndex", { elementType: t.nodeName.toLowerCase(), method: "expand" })) } hideBar(e) { const t = this; "number" == typeof e && (e = t.bars[e]), e instanceof JQX.SplitterBar ? e instanceof JQX.SplitterBar && (t.enableShadowDOM ? e.getRootNode().host : e.closest("jqx-splitter")) === t && e.hide() : t.error(t.localize("indexOutOfBound", { elementType: t.nodeName.toLowerCase(), method: "hideBar" })) } get items() { if (!this.isReady) return []; const e = this.$.container.children; let t = []; for (let i = 0; i < e.length; i++)(e[i] instanceof JQX.SplitterItem || "jqx-splitter-item" === e[i].tagName.toLowerCase()) && t.push(e[i]); return t } insert(e, t) { const i = this; if ("string" == typeof t && (t = { content: t }), !t || "object" != typeof t) return void i.error(i.localize("invalidSettings", { elementType: i.nodeName.toLowerCase(), method: "insert" })); if ("number" != typeof e) return void i.error(i.localize("invalidIndex", { elementType: i.nodeName.toLowerCase(), method: "insert" })); const s = t instanceof JQX.SplitterItem ? t : i._createItem(t); if (i.contains(s)) { if (i._items.indexOf(s) === e) return; i.removeChild(s) } e >= i._items.length || 0 === i._items.length ? i.appendChild(s) : i.insertBefore(s, i._items[e]) } insertBefore(e, t) { const i = this; function s() { const s = function () { let t = e.previousElementSibling; for (; t;) { if (t instanceof JQX.SplitterItem) return t; t = t.previousElementSibling } }(), a = i._items[0]; if ("overflow" !== i.autoFitMode && 1 === i._items.length) { const e = a.locked; a.locked = !1, a._setSize("size", a.size || "", !0), a.locked = e } i._resizeHostItemOnInsert(s, e, n), i._items && i._items.splice(t ? i._items.indexOf(t) : i._items.length, 0, e), s && (s.max && s._setSize("max", s.max, !0), s.min && s._setSize("min", s.min, !0)), i._validateItemSize() } if (!i.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.insertBefore.apply(i, e.concat(Array.prototype.slice.call(arguments))) } if (!(e && e instanceof JQX.SplitterItem)) return void i.error(i.localize("invalidNode", { elementType: i.nodeName.toLowerCase(), method: "insertBefore", node: "newNode/referenceNode" })); if (t && !(t instanceof JQX.SplitterItem)) return void i.error(i.localize("invalidNode", { elementType: i.nodeName.toLowerCase(), method: "insertBefore", node: "newNode/referenceNode" })); if (e.style[i._measurements.restricredDimension.toLowerCase()] = "100%", e.size) { const t = "string" == typeof e.size && e.size.indexOf("%") > -1 ? "%" : "px"; e.style[i._measurements.dimension] = "auto" === e.size ? e.size : isNaN(parseFloat(e.size)) ? "" : parseFloat(e.size) + t, "overflow" !== i.autoFitMode && 1 === i._items.length && (i._items[0].size = "") } else e.style[i._measurements.dimension] = ""; if (e._sizeBeforeCollapse) if (e.size) { const t = "string" == typeof e.size && e.size.indexOf("%") > -1 ? "%" : "px"; e.style[i._measurements.dimension] = "auto" === e.size ? e.size : isNaN(parseFloat(e.size)) ? 0 : parseFloat(e.size) + t, e._sizeBeforeCollapse = e[i._measurements.size] } else delete e._sizeBeforeCollapse; e.style["max" + i._measurements.restricredDimension] = "none", e.style[i._measurements.maxDimension] = e._sizeLimits && e.max ? e._sizeLimits[i._measurements.maxDimension] + "px" : "", e.collapsed ? (e.style.minWidth = e.style.minHeight = "", e.style[i._measurements.minDimension] = e.style[i._measurements.dimension] = "0") : e.style[i._measurements.minDimension] = e._sizeLimits && e.min ? e._sizeLimits[i._measurements.minDimension] + "px" : ""; for (let e = 0; e < i._items.length; e++)i._items[e]._sizeBeforeCollapse || (i._items[e]._sizeBeforeCollapse = i._items[e][i._measurements.size]); let n; i.$.container.insertBefore(e, t || null); const a = i.bars; e.previousElementSibling instanceof JQX.SplitterItem ? (n = i._createBar(e, e.previousElementSibling), i.$.container.insertBefore(n, e)) : e.nextElementSibling instanceof JQX.SplitterItem && (n = i._createBar(e, e.nextElementSibling), i.$.container.insertBefore(n, e.nextElementSibling)), n && a.length > 0 && (n.style[i._measurements.restricredDimension.toLowerCase()] = a[0].style[i._measurements.restricredDimension.toLowerCase()]), e.isCompleted ? s() : (e.__onCompleted = e._onCompleted, e._onCompleted = function () { e.__onCompleted && (e.__onCompleted(), delete e.__onCompleted), s() }) } lockItem(e) { const t = this; e instanceof JQX.SplitterItem ? e.lock() : "number" == typeof e && t._items[e] ? (e = t._items[e]) && e.lock() : t.error(t.localize("invalidIndex", { elementType: t.nodeName.toLowerCase(), method: "lockItem" })) } lockBar(e) { const t = this; e instanceof JQX.SplitterBar ? e.lock() : "number" == typeof e ? (e = t.bars[e]) && e.lock() : t.error(t.localize("invalidIndex", { elementType: t.nodeName.toLowerCase(), method: "lockBar" })) } get hasStyleObserver() { return "resize" } ready() { super.ready() } render() { const e = this; e.setAttribute("role", "group"), e._isInitializing = !0, e._createLayout(), delete e._isInitializing, e._setFocusable(), super.render() } refresh() { this._resizeEventHandler() } removeAt(e) { const t = this; e instanceof JQX.SplitterItem && e.closest("jqx-splitter") === t ? t.removeChild(e) : "number" == typeof e ? e > t._items.length || e < 0 ? t.error(t.localize("indexOutOfBound", { elementType: t.nodeName.toLowerCase(), method: "remove" })) : t.removeChild(t._items[e]) : t.error(t.localize("invalidIndex", { elementType: t.nodeName.toLowerCase(), method: "remove" })) } removeAll() { this._items = [], this.$.container.innerHTML = "" } removeChild(e) { const t = this; function i(e, i, s) { let n = e, a = t._items[n]; for (; a && a.collapsed;)a = t._items[n += s]; return a } if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.removeChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } if (!(e && e instanceof JQX.SplitterItem)) return void t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "removeChild", node: "node" })); if (!t._items) return; let s = t._items.indexOf(e); e.collapsed ? t.$.container.removeChild(t._items.indexOf(e._neighbourItem) > s ? e.nextElementSibling : e.previousElementSibling) : e.previousElementSibling instanceof JQX.SplitterBar ? t.$.container.removeChild(e.previousElementSibling) : e.nextElementSibling instanceof JQX.SplitterBar && t.$.container.removeChild(e.nextElementSibling), t._items.splice(s, 1), s = Math.max(0, s - 1); let n = 0; const a = t._items.filter((e => !e.collapsed && !e.locked)), r = e._sizeBeforeCollapse || e[t._measurements.size]; if (a.map((e => n += (e.style[t._measurements.dimension] ? e._sizeBeforeCollapse : 0) || e[t._measurements.size])), t.$.content.removeChild(e), 1 === t._items.length && t._items[0].collapsed || t._items.length > 0 && t._items.map((e => e.collapsed)).indexOf(!1) < 0) { const e = t._items[t._items.length - 1]; let i = e.context; e.context = e, e._expand(), e.context = i } for (let n = 0; n < t._items.length; n++)if (t._items[n].collapsed && t._items[n]._neighbourItem === e) { let e, a; t._items[n]._neighbourItem = i(s, t._items[n], 1), t._items[n]._neighbourItem ? (e = t._items[n].nextElementSibling, e && (a = e.context, e.context = e, e.itemCollapsed = !0, e.showNearButton = !(e.showFarButton = !1), e.context = a)) : (t._items[n]._neighbourItem = i(s, t._items[n], -1), e = t._items[n].previousElementSibling, e && (a = e.context, e.context = e, e.itemCollapsed = !0, e.showFarButton = !(e.showNearButton = !1), e.context = a)) } if ("proportional" === t.autoFitMode) { let e, i, s; for (let o = 0; o < a.length; o++)e = a[o]._sizeBeforeCollapse || a[o][t._measurements.size], i = e + r * (e / n), s = a[o]._sizeLimits[t._measurements.minDimension] || 0, a[o].style[t._measurements.dimension] = (a[o]._sizeBeforeCollapse = Math.max(0, i)) + "px", s > e && (a[o][t._measurements.minDimension] = i + "px") } t._autoFitItems() } showBar(e) { const t = this; e instanceof JQX.SplitterBar ? e.show() : "number" == typeof e ? (e = t.bars[e]) instanceof JQX.SplitterBar ? e.show() : t.error(t.localize("indexOutOfBound", { elementType: t.nodeName.toLowerCase(), method: "showBar" })) : t.error(t.localize("invalidIndex", { elementType: t.nodeName.toLowerCase(), method: "showBar" })) } get bars() { if (!this.isReady) return []; const e = this.$.container.children; let t = []; for (let i = 0; i < e.length; i++)(e[i] instanceof JQX.SplitterBar || "jqx-splitter-bar" === e[i].tagName.toLowerCase()) && t.push(e[i]); return t } unlockItem(e) { const t = this; e instanceof JQX.SplitterItem ? e.unlock() : "number" == typeof e && t._items[e] ? (e = t._items[e]) && e.unlock() : t.error(t.localize("invalidIndex", { elementType: t.nodeName.toLowerCase(), method: "unlockItem" })) } unlockBar(e) { const t = this; e instanceof JQX.SplitterBar ? e.unlock() : "number" == typeof e ? (e = t.bars[e]) && e.unlock() : t.error(t.localize("invalidIndex", { elementType: t.nodeName.toLowerCase(), method: "unlockBar" })) } update(e, t) { const i = this; if ("number" != typeof e || (e = i._items[e])) { if (e instanceof JQX.SplitterItem && t && (i.enableShadowDOM ? e.getRootNode().host : i.closest("jqx-splitter")) === i) for (let i in t) void 0 !== e[i] && (e[i] = t[i]) } else i.error(i.localize("invalidIndex", { elementType: i.nodeName.toLowerCase(), method: "update" })) } _autoFitItems() { const e = this, t = e._items.length; if (0 === t || "overflow" === e.autoFitMode) return; let i, s = [], n = [], a = []; for (let r = t - 1; r >= 0; r--)e._items[r].collapsed ? n.push(e._items[r]) : e._items[r].locked ? s.push(e._items[r]) : i ? e._items[r].size || a.push(e._items[r]) : i = e._items[r]; i && i.size && a.length > 0 && (i = a.filter((t => !t.max && !t._sizeLimits[e._measurements.maxDimension]))[0] || i), n.length === t && (i = n[0], i.expand(), i.unlock()), e._autoFitLastItem(i, n, s) } _autoFitLastItem(e, t, i) { const s = this, n = s._items.length; let a; if (1 === n && s._items[0].locked && (a = s._items[0], a.locked = !1), i.length === n && i[0].unlock(), e || (e = i[0]).unlock(), 1 === s._items.length) e._setSize("size", "100%", !0), delete e._originalSize; else { const t = "offset" + ("width" === s._measurements.dimension ? "Width" : "Height"); let i = 0, n = 0; s._items.map((e => i += e.collapsed ? 0 : e.style[s._measurements.dimension] && e.style[s._measurements.dimension].indexOf("%") < -1 && e._sizeBeforeCollapse ? e._sizeBeforeCollapse : e[t])), s.bars.map((e => n += e[s._measurements.size])); const a = i + n, r = s.$.container[t]; if (a !== r) { let i; i = e.style[s._measurements.dimension].indexOf("%") < -1 && e._sizeBeforeCollapse ? e._sizeBeforeCollapse : e[t]; let n = Math.abs(r - a), o = a < r ? 1 : -1; const l = Math.max(0, i + o * n); e.style[s._measurements.dimension] = (e._sizeBeforeCollapse = l) + "px", delete e._originalSize, s._validateItemLimits(e, l) } } a && (a.locked = !0) } _validateItemLimits(e, t) { const i = this, s = i.$.container.getBoundingClientRect()[i._measurements.dimension]; let n, a, r; r = e._min || e.min, r && (n = "string" == typeof r && r.indexOf("%") > -1, a = n ? parseFloat(r) * s / 100 : parseFloat(r), a > t ? (e.style[i._measurements.minDimension] = n ? 100 * t / s + "%" : t + "px", e._sizeLimits[i._measurements.minDimension] = t, e._min = r, e.set("min", e.style[i._measurements.minDimension])) : a < t && (e.style[i._measurements.minDimension] = n ? 100 * a / s + "%" : a + "px", e._sizeLimits[i._measurements.minDimension] = a, e.set("min", r), delete e._min)), r = e._max || e.max, r && (n = "string" == typeof r && r.indexOf("%") > -1, a = n ? parseFloat(r) * s / 100 : parseFloat(r), a < t ? (e.style[i._measurements.maxDimension] = n ? 100 * t / s + "%" : t + "px", e._sizeLimits[i._measurements.maxDimension] = t, e._max = r, e.set("max", e.style[i._measurements.maxDimension])) : a > t && (e.style[i._measurements.maxDimension] = n ? 100 * a / s + "%" : a + "px", e._sizeLimits[i._measurements.maxDimension] = a, e.set("max", r), delete e._max)) } _autoFitItemsProportionally(e, t) { const i = this, s = i._items.filter((e => !e.collapsed && !e.locked)); let n, a, r, o = e[i._measurements.size], l = 0; if (s.map((e => l += e._sizeBeforeCollapse || e[i._measurements.size])), t && (l -= t[i._measurements.size]), e.size && !e.isCompleted && (e._setSize("size", o), o = e._sizeBeforeCollapse), o = Math.min(i.$.container[i._measurements.size] / 2, e[i._measurements.size]), "string" == typeof e.size && e.size.indexOf("%") > -1) { const t = i.$.container.getBoundingClientRect()[i._measurements.dimension]; e._sizeBeforeCollapse = o, e.style[i._measurements.dimension] = 100 * o / t + "%" } else e.style[i._measurements.dimension] = (e._sizeBeforeCollapse = o) + "px"; for (let e = 0; e < s.length; e++)n = s[e]._sizeBeforeCollapse || s[e][i._measurements.size], a = n / l * (l - o), r = s[e]._sizeLimits[i._measurements.minDimension] || 0, s[e].style[i._measurements.dimension] = (s[e]._sizeBeforeCollapse = Math.max(r, a)) + "px", delete s[e]._originalSize } _createLayout() { const e = this; if (e._items = [], "string" == typeof e.dataSource && (e.dataSource = JSON.parse(e.dataSource)), null !== e.dataSource && Array.isArray(e.dataSource)) { e.$.container.innerHTML = ""; let t, i = document.createDocumentFragment(); for (let s = 0; s < e.dataSource.length; s++)t = e._createItem(e.dataSource[s]), i.appendChild(t); e._handleSplitterBars(i) } else e._handleSplitterBars(e.$.container) } _createBar(e, t) { const i = this, s = document.createElement("jqx-splitter-bar"); return e.collapsed ? (s.itemCollapsed = !0, i._items.indexOf(e) === i._items.length - 1 ? s.showNearButton = !0 : s.showFarButton = !0) : (e.collapsible && (s.showNearButton = !0), t && t instanceof JQX.SplitterItem && t.collapsible && (t === e.nextElementSibling ? s.showFarButton = !0 : s.showNearButton = !0)), s.setAttribute("aria-controls", e.id + (t ? " " + t.id : "")), s.setAttribute("aria-orientation", i.orientation), s } _createItem(e) { const t = document.createElement("jqx-splitter-item"); return e.id && (t.id = e.id), t.innerHTML = e.content || "", t.collapsible = e.collapsible || !1, t.collapsed = e.collapsed || !1, t.locked = e.locked || !1, e.max && (t.max = e.max), e.min && (t.min = e.min), e.size && (t.size = e.size), t } _completeResizing(e) { const t = this; if (t._dragDetails) { if (t._splitBarDummy && t._splitBarDummy.parentElement) { if (!e) if (t._dragDetails.firstItem.style[t._measurements.dimension] = (t._dragDetails.firstItem._sizeBeforeCollapse = t._dragDetails.firstItem.currentSize + t._dragDetails.firstItem._paddings) + "px", delete t._dragDetails.firstItem._originalSize, "proportional" !== t.resizeMode) t._dragDetails.secondItem.style[t._measurements.dimension] = (t._dragDetails.secondItem._sizeBeforeCollapse = t._dragDetails.splitAreaSize - t._dragDetails.firstItem.currentSize + t._dragDetails.secondItem._paddings) + "px", delete t._dragDetails.secondItem._originalSize; else { const e = t._dragDetails.itemProportions.length; if (e > 1) for (let i = 0; i < e; i++)t._dragDetails.itemProportions[i].item.style[t._measurements.dimension] = (t._dragDetails.itemProportions[i].item._sizeBeforeCollapse = t._dragDetails.itemProportions[i].currentSize + t._dragDetails.itemProportions[i].item._paddings) + "px", delete t._dragDetails.itemProportions[i]._originalSize; else t._dragDetails.secondItem[0].style[t._measurements.dimension] = (t._dragDetails.secondItem[0]._sizeBeforeCollapse = Math.floor(t._dragDetails.splitAreaSize - t._dragDetails.firstItem.currentSize + t._dragDetails.firstItem._paddings)) + "px", delete t._dragDetails.secondItem[0]._originalSize } t._validateBarsSize(), t.$.fireEvent("resizeEnd", { firstItem: { index: t._items.indexOf(t._dragDetails.firstItem), oldSize: t._dragDetails.firstItem.originalSize, newSize: t._dragDetails.firstItem[t._measurements.size] }, secondItem: Array.isArray(t._dragDetails.secondItem) ? { index: t._dragDetails.secondItem.map((e => t._items.indexOf(e))), oldSize: t._dragDetails.secondItem.map((e => e.originalSize)), newSize: t._dragDetails.secondItem.map((e => e[t._measurements.size])) } : { index: t._items.indexOf(t._dragDetails.secondItem), oldSize: t._dragDetails.secondItem.originalSize, newSize: t._dragDetails.secondItem[t._measurements.size] } }), t._splitBarDummy.classList.remove("limit-reached"), t._splitBarDummy.parentElement.removeChild(t._splitBarDummy) } t.removeAttribute("dragged"), delete t._dragDetails, delete t._keyboardResizing } } _dragStartHandler(e) { this._dragDetails && e.preventDefault() } _downHandler(e) { const t = this; if (e.stopPropagation(), t.disabled) return; if (t._keyboardResizing) return void t._completeResizing(); const i = t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; let s = i.closest("jqx-splitter"); s || (s = i.getRootNode() && i.getRootNode().host ? i.getRootNode().host.closest("jqx-splitter") : void 0); const n = i && i.closest ? i.closest("jqx-splitter-bar") : null; if (n && s === t) { if (i.closest(".jqx-splitter-near-collapse-button") === n.$.nearCollapseButton) return void (t._collapseButtonPressed = { splitBar: n, item: n.previousElementSibling, target: n.$.nearCollapseButton, farCollapse: !1 }); if (i.closest(".jqx-splitter-far-collapse-button") === n.$.farCollapseButton) return void (t._collapseButtonPressed = { splitBar: n, item: n.nextElementSibling, target: n.$.farCollapseButton, farCollapse: !0 }); n.itemCollapsed || n.locked || "none" === t.resizeMode || t._setDragDetails(n, e) } } _moveHandler() { this.hasAttribute("dragged") && JQX.Utilities.Core.isMobile && event.originalEvent.preventDefault() } _documentMoveHandler(e) { const t = this; t._keyboardResizing || t.disabled || t._resize(e) } _documentUpHandler(e) { const t = this; if (t.removeAttribute("dragging-not-allowed"), t.removeAttribute("show-locked-items"), t.disabled) return delete t._dragDetails, void delete t._collapseButtonPressed; const i = t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; return t._completeResizing(), t._collapseButtonPressed && i.closest("." + t._collapseButtonPressed.target.classList[0]) === t._collapseButtonPressed.target ? (t._collapseButtonPressed.item.collapsed ? t.expand(t._collapseButtonPressed.item) : t.collapse(t._collapseButtonPressed.item, t._collapseButtonPressed.farCollapse), void delete t._collapseButtonPressed) : void 0 } _ensureItemsReady(e, t) { const i = this, s = function () { const i = function (t) { for (let i = 0; i < e.length; i++)e[i].context = "node" === t ? e[i] : document }; i("node"), t(), i() }; if (0 === e.length) s(); else { i._nodesReadyListeners = 0; for (let t = 0; t < e.length; t++) { const n = e[t], a = function () { i._nodesReadyListeners--, 0 === i._nodesReadyListeners && (s(), delete i._nodesReadyListeners) }.bind(i); n.isCompleted || (i._nodesReadyListeners++, n._onCompleted = a) } 0 === i._nodesReadyListeners && s() } } _focusHandler(e) { "focus" === e.type ? this.setAttribute("focus", "") : this.removeAttribute("focus") } _getTargetItem(e, t, i) { const s = this; let n = i ? s._items[s._items.length - 1] : e[t]; for (; n;) { if (n instanceof JQX.SplitterItem && !n.collapsed) { if (!n.locked) return n; s._dragDetails && !s._dragDetails.firstItem && (s._dragDetails.lockedItemsSize += n[s._measurements.size] + (n.previousElementSibling instanceof JQX.SplitterBar ? n.previousElementSibling[s._measurements.size] : 0)) } n = n[t] } } _handleSplitterBars(e) { const t = this; if (t._items.length < 1 && (t._items = e.parentElement ? t.items : Array.from(e.children)), t._measurements || t._setMeasurements(), t._items.length < 2) { const i = t.bars; for (let t = 0; t < i.length; t++)e.removeChild(i[t]) } let i; t._noItemSizeValidation = !0, e.parentElement || e === t.$.container || (t.$.container.appendChild(e), e = t.$.container), t._noItemSizeValidation = !1; for (let s = 0; s < t._items.length; s++) { if (i = t._items[s], 0 === s) for (; e.firstElementChild && e.firstElementChild !== i;)e.removeChild(e.firstElementChild); i.style[t._measurements.restricredDimension.toLowerCase()] = "100%", i.style["max" + t._measurements.restricredDimension] = "none", i.size || (i.style[t._measurements.dimension] = i._sizeBeforeCollapse ? i._sizeBeforeCollapse + "px" : ""); const n = i.min, a = i.max; if ("string" == typeof n && n.indexOf("%") > -1 && i._setSize("min", n), "string" == typeof a && a.indexOf("%") > -1 && i._setSize("max", a), i.style[t._measurements.maxDimension] = i.max ? i._sizeLimits[t._measurements.maxDimension] + "px" : "", i.nextElementSibling) { let e = i.nextElementSibling; if (e instanceof JQX.SplitterItem || "jqx-splitter-item" === e.tagName.toLowerCase()) i.parentNode.insertBefore(t._createBar(i, i.nextElementSibling), i.nextElementSibling); else for ((e instanceof JQX.SplitterBar || "jqx-splitter-bar" === e.tagName.toLowerCase()) && (e = e.nextElementSibling); e && (!(e instanceof JQX.SplitterItem) || "jqx-splitter-item" !== e.tagName.toLowerCase());)e.parentNode.removeChild(e), e = e.nextElementSibling } if (i.collapsed) { const e = i.collapsible; i.style.minWidth = i.style.minHeight = "", i.style[t._measurements.minDimension] = "0", i._ignorePropertyValue = !0, i.collapsible = !0, i.collapse(), i.collapsible = e } else i.style[t._measurements.minDimension] = i._sizeLimits && i.min ? i._sizeLimits[t._measurements.minDimension] + "px" : "" } if (i) for (; e.lastElementChild !== i;)e.removeChild(e.lastElementChild); t._ensureItemsReady(t._items, t._validateItemSize.bind(t)) } _keyDownHandler(e) { const t = this; if (t.disabled) return; let i = t.enableShadowDOM ? t.shadowRoot.activeElement : document.activeElement; if ("w" === e.key && e.altKey) { e.preventDefault(); const s = t.enableShadowDOM ? t.shadowRoot.querySelector("jqx-splitter-bar") : t.querySelector("jqx-splitter-bar"); return i !== s && t._completeResizing(!0), void s.focus() } if (!e.ctrlKey && t._splitBarDummy && t._splitBarDummy.parentElement) i = t._splitBarDummy; else if (!(i instanceof JQX.SplitterBar)) return; if ((t.enableShadowDOM ? i.getRootNode().host : i.closest("jqx-splitter")) === t) switch (e.key) { case "ArrowLeft": case "ArrowRight": case "ArrowUp": case "ArrowDown": { if (("ArrowUp" === e.key || "ArrowDown" === e.key) && "vertical" === t.orientation) return; if (("ArrowLeft" === e.key || "ArrowRight" === e.key) && "horizontal" === t.orientation) return; e.preventDefault(); const s = "ArrowLeft" === e.key || "ArrowUp" === e.key ? -1 : 1; if (e.ctrlKey) { let e, n; return t._completeResizing(!0), s < 0 ? (n = i.previousElementSibling, e = i.nextElementSibling) : (e = i.previousElementSibling, n = i.nextElementSibling), void (e.collapsed ? e.expand() : n.collapse(s > 0)) } if (i.locked) return; if ("none" === t.resizeMode) return; let n; t._keyboardResizing = !0, t._dragDetails ? n = t._dragDetails.position + s * t.resizeStep : (t._setDragDetails(i), n = i[t._measurements.offset] + s * t.resizeStep), t._resize({ pageX: n, pageY: n }); break } case "Enter": t._completeResizing(); break; case "Escape": case "Tab": t._completeResizing(!0) } } _mouseEventsHandler(e) { "mouseenter" !== e.type || JQX.Utilities.Core.isMobile ? this.removeAttribute("hover") : this.setAttribute("hover", "") } _recalcItemSize(e, t, i) { const s = this; let n, a; if (i || (i = t), e > 0) for (let r = 0; r < t; r++)a = s._dragDetails.itemProportions[r].item._sizeLimits[s._measurements.minDimension], s._dragDetails.itemProportions[r].currentSize > a && (n = s._dragDetails.itemProportions[r].currentSize - a < e / i ? s._dragDetails.itemProportions[r].currentSize - a : e / i, e -= n, s._dragDetails.itemProportions[r].currentSize = Math.max(a, s._dragDetails.itemProportions[r].currentSize - n), delete s._dragDetails.itemProportions[r]._originalSize), i = Math.max(1, i - 1); else { const a = s._dragDetails.splitAreaSize - s._dragDetails.firstItem.currentSize - (t > 1 ? s._dragDetails.secondItemTotalMinSize - s._dragDetails.itemProportions[0].item._sizeLimits[s._measurements.minDimension] : 0); let r; for (let o = 0; o < t; o++)r = s._dragDetails.itemProportions[o].item._sizeLimits[s._measurements.maxDimension] ? Math.min(s._dragDetails.itemProportions[o].item._sizeLimits[s._measurements.maxDimension], a) : a, s._dragDetails.itemProportions[o].currentSize < r && (n = s._dragDetails.itemProportions[o].currentSize - e / i > r ? -1 * (r - s._dragDetails.itemProportions[o].currentSize) : e / i, e -= n, s._dragDetails.itemProportions[o].currentSize = Math.min(r, s._dragDetails.itemProportions[o].currentSize - n), delete s._dragDetails.itemProportions[o]._originalSize), i = Math.max(1, i - 1) } Math.abs(e) > .1 && s._recalcItemSize(e, t, i) } _resize(e) { const t = this; if (!t._dragDetails) return; let i, s = e[t._measurements.pagePosition] - t._dragDetails.position; const n = Math.sign(s), a = t._dragDetails.firstItem._sizeLimits[t._measurements.minDimension], r = t._dragDetails.firstItem._sizeLimits[t._measurements.maxDimension]; let o, l; if (t.hasAttribute("dragged") || t.$.fireEvent("resizeStart", { firstItem: { index: t._items.indexOf(t._dragDetails.firstItem), size: t._dragDetails.firstItem[t._measurements.size] }, secondItem: Array.isArray(t._dragDetails.secondItem) ? { index: t._dragDetails.secondItem.map((e => t._items.indexOf(e))), size: t._dragDetails.secondItem.map((e => e[t._measurements.size])) } : { index: t._items.indexOf(t._dragDetails.secondItem), size: t._dragDetails.secondItem[t._measurements.size] } }), t.setAttribute("dragged", ""), Math.abs(s) < t.resizeStep) return; let m = Math.max(t.resizeStep, Math.floor(Math.abs(s) / t.resizeStep) * t.resizeStep); const d = s - n * m; switch (t.resizeMode) { case "adjacent": case "end": for (n > 0 ? (o = t._dragDetails.splitAreaSize - t._dragDetails.firstItem.currentSize, l = () => o - t._dragDetails.secondItemTotalMinSize >= m || r && t._dragDetails.firstItem.currentSize + t.resizeStep <= r, i = () => r && t._dragDetails.firstItem.currentSize === r || o - t.resizeStep <= t._dragDetails.secondItemTotalMinSize) : (o = t._dragDetails.firstItem.currentSize, l = () => o - a >= m || t._dragDetails.secondItemTotalMaxSize && t._dragDetails.splitAreaSize - t._dragDetails.firstItem.currentSize + t.resizeStep <= t._dragDetails.secondItemTotalMaxSize, i = () => t._dragDetails.secondItemTotalMaxSize && t._dragDetails.splitAreaSize - t._dragDetails.firstItem.currentSize === t._dragDetails.secondItemTotalMaxSize || o - t.resizeStep <= a), s = 0; m > 0;)l() && (s += n * t.resizeStep), m -= t.resizeStep; t._resizeItem(e, s, d); break; case "proportional": { const s = t._dragDetails.splitAreaSize - t._dragDetails.firstItem.currentSize; let _, p; for (n > 0 ? (o = Math.abs(s - t._dragDetails.secondItemTotalMinSize), l = () => o >= m || r && t._dragDetails.firstItem.currentSize + t.resizeStep <= r, i = () => r && t._dragDetails.firstItem.currentSize === r || t._dragDetails.splitAreaSize - t._dragDetails.firstItem.currentSize - t.resizeStep < t._dragDetails.secondItemTotalMinSize) : (o = t._dragDetails.firstItem.currentSize, l = () => o - a >= m && (!t._dragDetails.secondItemTotalMaxSize || t._dragDetails.splitAreaSize - t._dragDetails.firstItem.currentSize + t.resizeStep <= t._dragDetails.secondItemTotalMaxSize), i = () => t._dragDetails.secondItemTotalMaxSize && t._dragDetails.splitAreaSize + t.resizeStep - t._dragDetails.firstItem.currentSize >= t._dragDetails.secondItemTotalMaxSize || t._dragDetails.firstItem.currentSize - t.resizeStep < a); m > 0;)l() && (p = !0, _ = Math.min(r ? Math.min(r, t._dragDetails.splitAreaSize - t._dragDetails.secondItemTotalMinSize) : t._dragDetails.splitAreaSize - t._dragDetails.secondItemTotalMinSize, Math.max(a, t._dragDetails.firstItem.currentSize + n * t.resizeStep)), t._dragDetails.firstItem.currentSize = t._dragDetails.firstItem._sizeBeforeCollapse = Math.floor(_)), m -= t.resizeStep; if (!p) break; const u = t._dragDetails.splitAreaSize - t._dragDetails.firstItem.currentSize, c = t._dragDetails.itemProportions.length; if (t._recalcItemSize(s - u, c), t.liveResize) if (t._dragDetails.firstItem.style[t._measurements.dimension] = t._dragDetails.firstItem.currentSize + t._dragDetails.firstItem._paddings + "px", c > 1) for (let e = 0; e < c; e++)t._dragDetails.itemProportions[e].item.style[t._measurements.dimension] = t._dragDetails.itemProportions[e].item._sizeBeforeCollapse = t._dragDetails.itemProportions[e].currentSize + t._dragDetails.itemProportions[e].item._paddings + "px"; else t._dragDetails.secondItem[0].style[t._measurements.dimension] = (t._dragDetails.secondItem[0]._sizeBeforeCollapse = Math.floor(u + t._dragDetails.itemProportions[0].item._paddings)) + "px"; else t._splitBarDummy.style[t._measurements.position] = t._dragDetails.firstItem[t._measurements.offset] + t._dragDetails.firstItem.currentSize + t._dragDetails.lockedItemsSize + t._dragDetails.firstItem._paddings + "px"; const g = t._dragDetails.firstItem.getBoundingClientRect()["vertical" === t.orientation ? "left" : "top"] + t._dragDetails.splitBarOffset, f = r && t._dragDetails.splitAreaSize - r > t._dragDetails.secondItemTotalMinSize ? r : t._dragDetails.splitAreaSize - t._dragDetails.secondItemTotalMinSize; t._dragDetails.position = Math.max(g + (t._dragDetails.secondItemTotalMaxSize ? Math.max(t._dragDetails.splitAreaSize - t._dragDetails.secondItemTotalMaxSize, a) : a) + t._dragDetails.lockedItemsSize + t._dragDetails.firstItem._paddings, Math.min(g + f + t._dragDetails.lockedItemsSize + t._dragDetails.firstItem._paddings, e[t._measurements.pagePosition] - d)); break } }t.liveResize || (i() ? t._splitBarDummy.classList.add("limit-reached") : t._splitBarDummy.classList.remove("limit-reached")), t._validateBarsSize() } _resizeEventHandler(e) { const t = this; if (t._items) { if (e && (t.enableShadowDOM ? e.composedPath()[0] : e.target) !== t) return; t._resizeEventFired = !0, t._validateItemSize(), t._resizeEventFired = !1 } } _resizeHostItemOnInsert(e, t, i) { const s = this; if ("proportional" === s.autoFitMode) return void s._autoFitItemsProportionally(t, i); if (!e || e.locked || "overflow" === s.autoFitMode) return; t.size && (e = function () { let e = t.previousElementSibling; for (; e;) { if (e instanceof JQX.SplitterItem && !e.size) return e; e = e.previousElementSibling } }() || e); const n = e[s._measurements.size] - t[s._measurements.size] - i[s._measurements.size], a = Math.max(e._sizeLimits[s._measurements.minDimension], n); e.style[s._measurements.maxDimension] = e.max ? isNaN(parseFloat(e.max)) ? "" : parseFloat(e.max) + typeof e.max == "string" && e.max.indexOf("%") > -1 ? "%" : "px" : ""; const r = e.style[s._measurements.maxDimension] ? parseFloat(e.style[s._measurements.maxDimension]) : 0; t.size ? e.style[s._measurements.dimension] = (e._sizeBeforeCollapse = r ? Math.min(r, a) : a) + "px" : (e.style[s._measurements.dimension] = e.size ? "auto" === e.size ? e.size : isNaN(parseFloat(e.size)) ? 0 : parseFloat(e.size) + ("string" == typeof e.size && e.size.indexOf("%") > -1 ? "%" : "px") : "", e._sizeBeforeCollapse = e[s._measurements.size]) } _resizeItem(e, t, i) { const s = this; let n = Math.max(s._dragDetails.firstItem._sizeLimits[s._measurements.minDimension] || 0, Math.min(s._dragDetails.splitAreaSize - s._dragDetails.secondItem._sizeLimits[s._measurements.minDimension], s._dragDetails.firstItem._sizeLimits[s._measurements.maxDimension] ? Math.min(s._dragDetails.firstItem._sizeLimits[s._measurements.maxDimension], s._dragDetails.firstItem.currentSize + t) : s._dragDetails.firstItem.currentSize + t)), a = s._dragDetails.firstItem._sizeLimits[s._measurements.minDimension] || 0; s._dragDetails.secondItem._sizeLimits[s._measurements.maxDimension] && s._dragDetails.splitAreaSize - n > s._dragDetails.secondItem._sizeLimits[s._measurements.maxDimension] && (a = n = s._dragDetails.splitAreaSize - (s._dragDetails.secondItem._sizeLimits[s._measurements.maxDimension] || 0)), s._dragDetails.firstItem.currentSize = n, s.liveResize ? (s._dragDetails.firstItem.style[s._measurements.dimension] = (s._dragDetails.firstItem._sizeBeforeCollapse = n + s._dragDetails.firstItem._paddings) + "px", s._dragDetails.secondItem.style[s._measurements.dimension] = (s._dragDetails.secondItem._sizeBeforeCollapse = s._dragDetails.splitAreaSize - n + s._dragDetails.firstItem._paddings) + "px", delete s._dragDetails.firstItem._originalSize, delete s._dragDetails._originalSize) : s._splitBarDummy.style[s._measurements.position] = s._dragDetails.firstItem[s._measurements.offset] + n + s._dragDetails.lockedItemsSize + s._dragDetails.firstItem._paddings + "px"; const r = s._dragDetails.firstItem.getBoundingClientRect()["vertical" === s.orientation ? "left" : "top"] + s._dragDetails.splitBarOffset; s._dragDetails.position = Math.max(r + a + s._dragDetails.firstItem._paddings, Math.min(r + s._dragDetails.splitAreaSize - (s._dragDetails.secondItem._sizeLimits[s._measurements.minDimension] || 0) + s._dragDetails.lockedItemsSize + s._dragDetails.firstItem._paddings, e[s._measurements.pagePosition] - i)), s._dragDetails.firstItem._sizeLimits[s._measurements.maxDimension] && (s._dragDetails.position = Math.min(r + s._dragDetails.firstItem._sizeLimits[s._measurements.maxDimension], s._dragDetails.position)) } _setFocusable() { const e = this; e.disabled || e.unfocusable ? e.removeAttribute("tabindex") : e.tabIndex = e.tabIndex > 0 ? e.tabIndex : 0 } _setDragDetails(e, t) { const i = this; if (i._dragDetails = {}, i._measurements || i._setMeasurements(), i._dragDetails.scrollAmount = e.parentElement[i._measurements.scroll], i._dragDetails.lockedItemsSize = 0, i.setAttribute("show-locked-items", ""), !(i._dragDetails.firstItem = i._getTargetItem(e, "previousElementSibling"))) return delete i._dragDetails, void i.setAttribute("dragging-not-allowed", ""); i._dragDetails.firstItem.set("size", ""), i._dragDetails.firstItem.currentSize = i._dragDetails.firstItem[i._measurements.size], i._dragDetails.firstItem.originalSize = i._dragDetails.firstItem.currentSize; let s, n = getComputedStyle(i._dragDetails.firstItem); if (i._dragDetails.firstItem._paddings = (parseFloat(n.getPropertyValue("padding-" + i._measurements.position)) || 0) + (parseFloat(n.getPropertyValue("padding-" + i._measurements.position2)) || 0), i._dragDetails.firstItem.currentSize -= i._dragDetails.firstItem._paddings, i._dragDetails.splitAreaSize = 0, i._dragDetails.secondItemTotalMaxSize = 0, i._dragDetails.secondItemTotalMinSize = 0, "proportional" === i.resizeMode) { if (i._setProportionalDetails()) return } else if (i._setAdjacentOrEndDetails(e)) return; t && "object" == typeof t ? s = e.getBoundingClientRect()[i._measurements.position] : (t = { pageX: e[i._measurements.offset], pageY: e[i._measurements.offset] }, s = e[i._measurements.offset]), i._dragDetails.position = t[i._measurements.pagePosition], i._dragDetails.splitBarOffset = i._dragDetails.position - s, i.liveResize || (i._splitBarDummy || (i._splitBarDummy = document.createElement("div"), i._splitBarDummy.classList.add("jqx-splitter-bar-feedback"), i._splitBarDummy.setAttribute(i.orientation, "")), i._splitBarDummy.style.width = e.offsetWidth + "px", i._splitBarDummy.style.height = e.offsetHeight + "px", i._splitBarDummy.style.top = e.offsetTop + "px", i._splitBarDummy.style.left = e.offsetLeft + "px", i._splitBarDummy.setAttribute(i.orientation, ""), e.parentElement.appendChild(i._splitBarDummy)) } _setAdjacentOrEndDetails(e) { const t = this; if (!(t._dragDetails.secondItem = "adjacent" === t.resizeMode ? t._getTargetItem(e, "nextElementSibling") : t._getTargetItem(e, "previousElementSibling", !0))) return delete t._dragDetails, t.setAttribute("dragging-not-allowed", ""), !0; t._dragDetails.secondItem.set("size", ""), t._dragDetails.secondItem.currentSize = t._dragDetails.secondItem[t._measurements.size], t._dragDetails.secondItem.originalSize = t._dragDetails.secondItem.currentSize; const i = getComputedStyle(t._dragDetails.secondItem); t._dragDetails.secondItem._paddings = (parseFloat(i.getPropertyValue("padding-" + t._measurements.position)) || 0) + (parseFloat(i.getPropertyValue("padding-" + t._measurements.position2)) || 0), t._dragDetails.secondItem.currentSize -= t._dragDetails.secondItem._paddings, t._dragDetails.splitAreaSize = t._dragDetails.firstItem.currentSize + t._dragDetails.secondItem.currentSize, t._dragDetails.secondItemTotalMaxSize = t._dragDetails.secondItem._sizeLimits[t._measurements.maxDimension], t._dragDetails.secondItemTotalMinSize = t._dragDetails.secondItem._sizeLimits[t._measurements.minDimension] } _setMeasurements() { const e = this; e._measurements = {}, "horizontal" === e.orientation ? (e._measurements.dimension = "height", e._measurements.minDimension = "minHeight", e._measurements.maxDimension = "maxHeight", e._measurements.restricredDimension = "Width", e._measurements.size = "offsetHeight", e._measurements.offset = "offsetTop", e._measurements.position = "top", e._measurements.position2 = "bottom", e._measurements.pagePosition = "pageY", e._measurements.scroll = "scrollTop") : (e._measurements.dimension = "width", e._measurements.minDimension = "minWidth", e._measurements.maxDimension = "maxWidth", e._measurements.restricredDimension = "Height", e._measurements.size = "offsetWidth", e._measurements.offset = "offsetLeft", e._measurements.position = "left", e._measurements.position2 = "right", e._measurements.pagePosition = "pageX", e._measurements.scroll = "scrollLeft"), e._measurements.overflow = getComputedStyle(e).getPropertyValue("overflow") } _setProportionalDetails() { const e = this; if (e._dragDetails.secondItem = e._items.slice(e._items.indexOf(e._dragDetails.firstItem) + 1).filter((e => !e.collapsed && !e.locked)), 0 === e._dragDetails.secondItem.length) return delete e._dragDetails, !0; let t; e._dragDetails.splitAreaSize += e._dragDetails.firstItem.currentSize, e._dragDetails.itemProportions = []; for (let i = 0; i < e._dragDetails.secondItem.length; i++) { e._dragDetails.secondItem[i].set("size", ""), e._dragDetails.secondItem[i].currentSize = e._dragDetails.secondItem[i][e._measurements.size], e._dragDetails.secondItem[i].originalSize = e._dragDetails.secondItem[i].currentSize; const s = getComputedStyle(e._dragDetails.secondItem[i]); e._dragDetails.secondItem[i]._paddings = (parseFloat(s.getPropertyValue("padding-" + e._measurements.position)) || 0) + (parseFloat(s.getPropertyValue("padding-" + e._measurements.position2)) || 0), e._dragDetails.secondItem[i].currentSize -= e._dragDetails.secondItem[i]._paddings, e._dragDetails.splitAreaSize += e._dragDetails.secondItem[i].currentSize, e._dragDetails.itemProportions.push({ item: e._dragDetails.secondItem[i], currentSize: e._dragDetails.secondItem[i].currentSize }), e._dragDetails.secondItem[i]._sizeLimits[e._measurements.maxDimension] || (t = !0), e._dragDetails.secondItemTotalMinSize += e._dragDetails.secondItem[i]._sizeLimits[e._measurements.minDimension], e._dragDetails.secondItemTotalMaxSize += e._dragDetails.secondItem[i]._sizeLimits[e._measurements.maxDimension] } t && (e._dragDetails.secondItemTotalMaxSize = 0) } _validateBarsSize() { const e = this; if ("100%" !== (getComputedStyle(e).getPropertyValue("--jqx-splitter-bar-fit-size") + "").trim()) return void e.bars.forEach((t => t.style[e._measurements.restricredDimension.toLowerCase()] = null)); if (!e._dragDetails && "vertical" === e.orientation && e.resizeTrigger) { const t = e.offsetHeight; if (e.resizeTrigger.style.display = "none", e.offsetHeight === t) return e.resizeTrigger.style.display = null, void e.bars.forEach((t => t.style[e._measurements.restricredDimension.toLowerCase()] = null)); e.resizeTrigger.style.display = null } let t = e._items[0]; const i = "offset" + e._measurements.restricredDimension, s = e.bars; if (0 !== s.length) { for (let s = 0; s < e._items.length; s++)e._items[s][i] > t[i] && (t = e._items[s]); t && t[i] !== s[0][i] && s.forEach((s => s.style[e._measurements.restricredDimension.toLowerCase()] = t[i] + "px")) } } _validateItemSize(e) { const t = this; if ("overflow" === t.autoFitMode) return void t._validateBarsSize(); const i = t._items, s = t._measurements.dimension, n = "offset" + ("width" === s ? "Width" : "Height"), a = t.$.container[n], r = e => "string" == typeof e && e.indexOf("%") > -1; let o = 0; for (let e = 0; e < i.length; e++) { const l = i[e]; if (l.min && r(l.min) && (l._sizeLimits[t._measurements.minDimension] = parseFloat(l.min) * a / 100), l.max && r(l.max) && (l._sizeLimits[t._measurements.maxDimension] = parseFloat(l.max) * a / 100), !l.collapsed) { const e = l.style[s]; o += e && e.indexOf("%") < -1 && l._sizeBeforeCollapse ? l._sizeBeforeCollapse : l[n] } } if (t.keepProportionsOnResize && t._resizeEventFired) t._keepItemProportionsOnResize(); else { if ("horizontal" === t.orientation && t.resizeTrigger) { const e = t.offsetHeight; if (t.resizeTrigger.style.display = "none", t.offsetHeight !== e) return void (t.resizeTrigger.style.display = null); t.resizeTrigger.style.display = null } let i = o + t.bars.reduce(((e, i) => e + i[t._measurements.size]), 0) - a; i > 0 ? t._validateItemsSizeOverflowing(i, e) : i < 0 && t._validateItemsSizeUnderflowing(i, e) } if (t._autoFitItems(), t._validateBarsSize(), t._splitterSize = a, t.enableShadowDOM) { const e = t.getRootNode().host; e && e.enableShadowDOM && e.isCompleted && e._validateItemSize && e._validateItemSize() } } _validateNeighbourSizeLimits(e) { const t = this; function i(e) { e && (e.min && e._setSize("min", e.min, !0), e.max && e._setSize("max", e.max, !0)) } if (!t._items || !t._items.length) return; t._noNeighbourValidation = !0; const s = t._items.indexOf(e); i(t._items[s - 1]), i(t._items[s + 1]), delete t._noNeighbourValidation } _keepItemProportionsOnResize() { const e = this; let t = 0, i = []; for (let s = 0; s < e._items.length; s++)e._items[s].collapsed || (i.push(e._items[s]), t += e._items[s]._sizeBeforeCollapse || e._items[s][e._measurements.size]); if (e._splitterSize && (t = e._splitterSize), 1 === e._items.length) return; const s = e.$.container.getBoundingClientRect()[e._measurements.dimension]; for (let n = 0; n < i.length; n++) { const a = i[n], r = a.style[e._measurements.dimension], o = a.style[e._measurements.minDimension]; if (r.indexOf("%") > -1 || o.indexOf("%") > -1) { e._validateItemLimits(a, a[e._measurements.size] / t * s); continue } const l = a._sizeBeforeCollapse || a[e._measurements.size], m = l / t * s; if (l !== m) { if (a.style[e._measurements.dimension] = m + "px", s !== e.$.container.getBoundingClientRect()[e._measurements.dimension]) return void (a.style[e._measurements.dimension] = l + "px"); a.style[e._measurements.dimension] = (a._sizeBeforeCollapse = m) + "px", e._validateItemLimits(a, m) } } } _validateItemsSizeOverflowing(e, t) { const i = this, s = i._items.length; let n, a, r, o, l = 0, m = [], d = "offset" + ("width" === i._measurements.dimension ? "Width" : "Height"), _ = i.$.container; for (let e = 0; e < i._items.length; e++) { const t = i._items[e]; r = t.style[i._measurements.dimension], r || (r = window.getComputedStyle(i).getPropertyValue("--jqx-splitter-item-size") || ""), a = r.indexOf("%") > -1 ? r : t[i._measurements.size], r || t.size || 0 === t.size || delete t._originalSize; const s = "auto" === a && t.size && isNaN(parseFloat(t.size)) || "auto" === t.size; t._originalSize = t._originalSize && !s ? t._originalSize : a, m.push(t.locked) } m.indexOf(!1) < 0 && (o = i._items[i._items.length - 1], o.locked = !1); for (let t = s - 1; t >= 0; t--) { const s = i._items[t]; s.collapsed || s.locked || 0 === e || ((s._originalSize + "").indexOf("%") > -1 ? (n = s.style[i._measurements.dimension] || s[i._measurements.size], "string" == typeof n && n.indexOf("%") > -1 && (n = parseFloat(n) / 100 * _[d]), s.style[i._measurements.dimension] = s._originalSize, s._sizeBeforeCollapse = _[d] * parseFloat(s._originalSize) / 100, e -= parseFloat(n) - s._sizeBeforeCollapse) : (n = s[d], l = n - e, s.style[i._measurements.dimension] = (s._sizeBeforeCollapse = Math.max(s._sizeLimits ? s._sizeLimits[i._measurements.minDimension] : 0, l)) + "px", e -= n - s._sizeBeforeCollapse)) } if (e > 0) for (let a = s - 1; a >= 0; a--) { const s = i._items[a]; if (s.collapsed || s.locked) continue; n = s[d], l = n - e; let r = s._sizeLimits[i._measurements.minDimension] || s.min; r && (r = (r + "").indexOf("%") > -1 ? parseFloat(r) / 100 * s.parentElement[i._measurements.size] : parseFloat(r), r > l && (s._sizeLimits.ignoreUpdate = !t, s.style[i._measurements.minDimension] = Math.max(0, l) + "px")), 0 === e && s._originalSize && (s._originalSize + "").indexOf("%") > -1 || (s._sizeLimits.ignoreUpdate = !t, s.style[i._measurements.dimension] = (s._sizeBeforeCollapse = Math.max(0, l)) + "px", e -= n - s._sizeBeforeCollapse) } o && (o.locked = !0) } _validateItemsSizeUnderflowing(e, t) { const i = this, s = i._items.length; let n, a, r = 0; e = Math.abs(e), i._items.length > 0 && i._items.map((e => e.locked)).indexOf(!1) < 0 && (a = i._items[i._items.length - 1], a.locked = !1); for (let a = 0; a < s; a++) { const s = i._items[a]; if (!(s.collapsed || s[i._measurements.size] >= (s._sizeLimits ? s._sizeLimits[i._measurements.minDimension] : 0)) && (n = s[i._measurements.size], r = s[i._measurements.size] + e, s[i._measurements.size] < s._sizeLimits[i._measurements.minDimension] && (s._sizeLimits.ignoreUpdate = !t, s.style[i._measurements.minDimension] = (s._sizeBeforeCollapse = Math.max(0, Math.min(s._sizeLimits[i._measurements.minDimension], r))) + "px"), (e -= (s._sizeBeforeCollapse || s[i._measurements.size]) - n) <= 0)) break } const o = i.$.container["offset" + ("width" === i._measurements.dimension ? "Width" : "Height")]; if (e > 0) for (let t = 0; t < s; t++) { const s = i._items[t]; let n; if (!s.collapsed && !s.locked && void 0 !== s._originalSize) { if ((s._originalSize + "").indexOf("%") > -1) { const t = parseFloat(s._originalSize) * o / 100; r = Math.min(t, s[i._measurements.size] + e), n = r - s[i._measurements.size], s[i._measurements.minDimension] < s._sizeLimits[i._measurements.minDimension] && (s.style[i._measurements.minDimension] = Math.min(s._sizeLimits[i._measurements.minDimension], r) + "px"), s.style[i._measurements.dimension] = t === r ? s._originalSize : r + "px", s._sizeBeforeCollapse = Math.max(0, r), e -= n } else s[i._measurements.size] >= s._originalSize ? (e += s[i._measurements.size] - s._originalSize, s.style[i._measurements.dimension] = (s._sizeBeforeCollapse = s._originalSize) + "px") : (r = Math.min(s._originalSize, s[i._measurements.size] + e), n = r - s[i._measurements.size], s[i._measurements.minDimension] < s._sizeLimits[i._measurements.minDimension] && (s.style[i._measurements.minDimension] = Math.min(s._sizeLimits[i._measurements.minDimension], r) + "px"), s.style[i._measurements.dimension] = (s._sizeBeforeCollapse = Math.max(0, Math.min(r, s._originalSize))) + "px", e -= n); if (e <= 0) break } } a && (a.locked = !0) } });
|
|
166
|
+
|
|
167
|
+
/***/
|
|
168
|
+
}),
|
|
169
|
+
|
|
170
|
+
/***/ 5523:
|
|
171
|
+
/***/ (() => {
|
|
172
|
+
|
|
173
|
+
JQX("jqx-table", class extends JQX.ContentElement { static get properties() { return { autoLoadState: { value: !1, type: "boolean" }, autoSaveState: { value: !1, type: "boolean" }, columnGroups: { value: null, type: "array?" }, columnMinWidth: { value: "50px", type: "any" }, columnReorder: { value: !1, type: "boolean" }, columnResize: { value: !1, type: "boolean" }, columnResizeFeedback: { value: !1, type: "boolean" }, columnResizeNormalize: { value: !1, type: "boolean" }, columns: { value: [], type: "any?", reflectToAttribute: !1 }, columnSizeMode: { value: "default", allowedValues: ["auto", "default"], type: "string" }, conditionalFormatting: { value: null, type: "array?", reflectToAttribute: !1 }, conditionalFormattingButton: { value: !1, type: "boolean" }, deferredScrollDelay: { value: 1, type: "number" }, dataRowId: { value: null, type: "string?" }, dataSource: { value: null, type: "any?", reflectToAttribute: !1 }, dataSourceSettings: { value: { autoGenerateColumns: { value: !1, type: "boolean" }, sanitizeHTML: { value: "blackList", allowedValues: ["all", "blackList", "none"], type: "string" }, sanitizeHTMLRender: { value: "text", allowedValues: ["text", "html"], type: "string" }, root: { value: "", type: "string" }, record: { value: "", type: "string" }, keyDataField: { value: "", type: "string" }, parentDataField: { value: "", type: "string" }, childrenDataField: { value: "", type: "string" }, groupBy: { value: [], type: "array" }, dataFields: { value: [], type: "array" }, mapChar: { value: ".", type: "string" }, id: { value: "", type: "string" }, virtualDataSource: { value: null, type: "any" }, virtualDataSourceOnExpand: { value: null, type: "any" } }, type: "object" }, dataTransform: { value: null, type: "function?", reflectToAttribute: !1 }, editing: { value: !1, type: "boolean" }, editMode: { value: "cell", allowedValues: ["cell", "row"], type: "string" }, expandHierarchy: { value: !1, type: "boolean" }, filtering: { value: !1, type: "boolean" }, columnMenu: { value: !1, type: "boolean" }, filterRow: { value: !1, type: "boolean" }, filterTemplate: { value: null, type: "string?" }, filterOperator: { value: "and", type: "string?" }, footerRow: { value: null, type: "string?" }, formulas: { value: !1, type: "boolean" }, freezeFooter: { value: !1, type: "boolean" }, freezeHeader: { value: !1, type: "boolean" }, grouping: { value: !1, type: "boolean" }, groupFormatFunction: { value: null, type: "any" }, headerRow: { value: null, type: "any" }, hideSelectionColumn: { value: !1, type: "boolean" }, keyboardNavigation: { value: !1, type: "boolean" }, loadColumnStateBehavior: { value: "implementationOnly", allowedValues: ["stateOnly", "implementationOnly", "intersection"], type: "string" }, messages: { value: { en: { add: "Add condition", all: "All columns", apply: "Apply", between: "Between", cancel: "Cancel", clearFilter: "Clear filter", close: "Close", column: "Column:", condition: "Condition:", conditionalFormatting: "Conditional Formatting", CONTAINS: "contains", CONTAINS_CASE_SENSITIVE: "contains (case sensitive)", DOES_NOT_CONTAIN: "does not contain", DOES_NOT_CONTAIN_CASE_SENSITIVE: "does not contain (case sensitive)", EMPTY: "empty", ENDS_WITH: "ends with", ENDS_WITH_CASE_SENSITIVE: "ends with (case sensitive)", EQUAL: "equal", equal: "Equal To", EQUAL_CASE_SENSITIVE: "equal (case sensitive)", filterCondition: "Filter condition", filterPlaceholder: "Filter", firstButton: "First", fontFamily: "Font family:", fontSize: "Font size:", format: "Format:", formatColumn: "Format Column", GREATER_THAN: "greater than", GREATER_THAN_OR_EQUAL: "greater than or equal", greaterThan: "Greater Than", highlight: "Highlight", invalidValue: "Invalid value", itemsPerPage: "Items per page:", lastButton: "Last", LESS_THAN: "less than", LESS_THAN_OR_EQUAL: "less than or equal", lessThan: "Less Than", nextButton: "Next", NOT_EMPTY: "not empty", NOT_EQUAL: "not equal", NOT_NULL: "not null", notEqual: "Not Equal To", NULL: "null", ok: "OK", previousButton: "Previous", remove: "Remove condition", secondValue: "Second value:", STARTS_WITH: "starts with", STARTS_WITH_CASE_SENSITIVE: "starts with (case sensitive)", summaryPrefix: "of", text: "Text", value: "Value:", with: "with", columnMenuItemSortAsc: "Sort Ascending", columnMenuItemSortDesc: "Sort Descending", columnMenuItemReset: "Reset", columnMenuItemRemoveSort: "Remove Sort", columnMenuItemFilter: "Show rows where:", columnMenuItemRemoveFilter: "Remove Filter", columnMenuItemColumns: "Columns", grouping: "Group field name is not found in the dataFields collection!" } }, type: "object", extend: !0 }, onCellRender: { value: null, type: "function?", reflectToAttribute: !1 }, onColumnRender: { value: null, type: "function?", reflectToAttribute: !1 }, onUpdateComplete: { value: null, type: "function?", reflectToAttribute: !1 }, onInit: { value: null, type: "function?", reflectToAttribute: !1 }, onLoad: { value: null, type: "function?", reflectToAttribute: !1 }, pageSize: { value: 10, allowedValues: [10, 25, 50], type: "int" }, pageIndex: { value: 0, type: "int" }, paging: { value: !1, type: "boolean" }, rowDetailTemplate: { value: null, type: "string?" }, selected: { value: [], type: "array", reflectToAttribute: !1 }, selection: { value: !1, type: "boolean" }, selectionMode: { value: "many", type: "string", allowedValues: ["one", "many", "extended"] }, selectionByHierarchy: { value: !0, type: "boolean" }, sort: { value: null, type: "function?", reflectToAttribute: !1 }, sortMode: { value: "none", type: "string", allowedValues: ["none", "one", "many"] }, stateSettings: { value: ["columns", "expanded", "filtered", "grouped", "selected", "sorted"], type: "array" }, tooltip: { value: !1, type: "boolean" }, virtualization: { value: !1, type: "boolean" } } } static get listeners() { return { resize: "_resizeHandler", "conditionalFormattingButton.click": "_conditionalFormattingButtonClickHandler", "filterInput.keyup": "_filterInputKeyupHandler", "pager.change": "_pagerChangeHandler", "pager.pageSizeChanged": "_pagerPageSizeChanged", "tableContainer.change": "_tableContainerChangeHandler", "tableContainer.click": "_tableContainerClickHandler", "tableContainer.down": "_tableContainerDownHandler", "tableContainer.focus": "_tableContainerFocusHandler", "tableContainer.pointerover": "_tableContainerPointeroverHandler", "document.down": "_documentDownHandler", "document.keydown": "_tableContainerKeydownHandler", "document.keyup": "_tableContainerKeyupHandler", "document.move": "_documentMoveHandler", "document.up": "_documentUpHandler" } } template() { return JQX.Templates[this.nodeName] && delete JQX.Templates[this.nodeName], this.virtualization ? '<div id="container" class="jqx-container" role="presentation">\n <div id="header" class="jqx-table-header" role="toolbar">\n <jqx-input id="filterInput" class="underlined" animation="[[animation]]" locale="[[locale]]" right-to-left="[[rightToLeft]]" theme="[[theme]]"></jqx-input>\n <div id="filterTemplateContainer" class="jqx-table-filter-template-container jqx-hidden"></div>\n <jqx-button id="conditionalFormattingButton" class="jqx-table-toolbar-button conditional-formatting" animation="[[animation]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" aria-label="Conditional Formatting"></jqx-button>\n </div>\n <jqx-scroll-viewer style="opacity: 0.99" id="virtualizationContainer" class="jqx-table-virtualization-container" right-to-left="[[rightToLeft]]" theme="[[theme]]">\n <table id="tableContainer" inner-h-t-m-l=\'[[innerHTML]]\' class="jqx-table-container">\n <content></content>\n </table>\n </jqx-scroll-viewer>\n <jqx-pager id="pager" animation="[[animation]]" locale="[[locale]]" page-index="[[pageIndex]]" page-size="[[pageSize]]" pages-count="null" show-first-last-navigation-buttons show-page-size-selector show-prev-next-navigation-buttons show-summary right-to-left="[[rightToLeft]]" theme="[[theme]]"></jqx-pager>\n <div id="loadingIndicatorContainer" class="jqx-loader-container jqx-hidden" aria-label="Loading">\n <span id="loadingIndicator" class="jqx-loader" role="presentation"></span>\n </div>\n </div>' : '<div id="container" class="jqx-container" role="presentation">\n <div id="header" class="jqx-table-header" role="toolbar">\n <jqx-input id="filterInput" class="underlined" animation="[[animation]]" locale="[[locale]]" right-to-left="[[rightToLeft]]" theme="[[theme]]"></jqx-input>\n <div id="filterTemplateContainer" class="jqx-table-filter-template-container jqx-hidden"></div>\n <jqx-button id="conditionalFormattingButton" class="jqx-table-toolbar-button conditional-formatting" animation="[[animation]]" right-to-left="[[rightToLeft]]" theme="[[theme]]" aria-label="Conditional Formatting"></jqx-button>\n </div>\n <table id="tableContainer" inner-h-t-m-l=\'[[innerHTML]]\' class="jqx-table-container">\n <content></content>\n </table>\n <jqx-pager id="pager" animation="[[animation]]" locale="[[locale]]" page-index="[[pageIndex]]" page-size="[[pageSize]]" pages-count="null" show-first-last-navigation-buttons show-page-size-selector show-prev-next-navigation-buttons show-summary right-to-left="[[rightToLeft]]" theme="[[theme]]"></jqx-pager>\n <div id="loadingIndicatorContainer" class="jqx-loader-container jqx-hidden" aria-label="Loading">\n <span id="loadingIndicator" class="jqx-loader" role="presentation"></span>\n </div>\n </div>' } resetState(e) { const t = this; switch (e) { case "expanded": t._expandedIds = [], t._expandedIdsAlt = [], t._state.expanded = []; break; case "selected": t._selectedIds = [], t._disabledSelection = [], t._selectableGroupRecords = [], t.set("selected", []), t._state.selected = []; break; default: t._dblclickObject = { numberOfClicks: 0 }, t._expandedIds = [], t._expandedIdsAlt = [], t._selectedIds = [], t._disabledSelection = [], t._selectableGroupRecords = [], t._state = { expanded: [], selected: [], sorted: [] }, t.set("selected", []) } } render() { this._render(), super.render() } _render() { const e = this, t = getComputedStyle(e); if (e.setAttribute("role", "presentation"), e.$.tableContainer.id = e.id + "TableContainer", e._cachedWidth = e.offsetWidth, e._cachedHeight = e.offsetHeight, e._defaults = { fontFamily: t.fontFamily, fontSize: t.fontSize, text: e._toHex(t.color), highlight: e._toHex(t.backgroundColor) }, e._isMobile = JQX.Utilities.Core.isMobile, e._autoScrollCoefficient = JQX.Utilities.Core.Browser.Firefox ? 8 : JQX.Utilities.Core.Browser.Edge ? 16 : 4, e._dblclickObject = { numberOfClicks: 0 }, e._expandedIds = [], e._expandedIdsAlt = [], e._selectedIds = [], e._collapsedIds = [], e._disabledSelection = [], e._selectableGroupRecords = [], e._state = { expanded: [], selected: [], sorted: [] }, e._rowHeight = parseFloat(t.getPropertyValue("--jqx-table-row-height")), e._rowDetailHeight = parseFloat(t.getPropertyValue("--jqx-table-row-detail-height")), e._animation = e.animation, e._setFocusable(), e.selection && e.$.tableContainer.setAttribute("aria-multiselectable", !0), e.virtualization) { const t = e.$.virtualizationContainer, a = e; t && (t._mouseWheelHandler = function (e) { const l = t; if (!l.disabled && (l.computedHorizontalScrollBarVisibility || l.computedVerticalScrollBarVisibility)) { if (e.shiftKey && l.computedHorizontalScrollBarVisibility) { const t = l.scrollLeft; if (0 === t && e.deltaX < 0 || t === l.scrollHeight && e.deltaX > 0) return; return e.stopPropagation(), e.preventDefault(), void (l.scrollWidth > 0 && l.scrollTo(void 0, l.scrollLeft + l._getScrollCoefficient(e, l.offsetWidth))) } if (l.computedVerticalScrollBarVisibility) { const t = l.scrollTop; if (0 === t && e.deltaY < 0 || t === l.scrollHeight && e.deltaY > 0) return; if (e.stopPropagation(), e.preventDefault(), l.scrollHeight > 0) { let t = 3 * a._rowHeight; e.deltaY <= 0 && (t = -3 * a._rowHeight), Math.abs(e.deltaY) >= 100 ? l.scrollTop += t : l.scrollTop += e.deltaY } } } }, t._verticalScrollbarHandler = function (t) { 0 === e.deferredScrollDelay ? e._onVerticalChange(t) : (e._verticalScrollTimer && (clearTimeout(e._verticalScrollTimer), delete e._verticalScrollTimer), e._verticalScrollTimer = setTimeout((() => { e._onVerticalChange(t), delete e._verticalScrollTimer }), e.deferredScrollDelay)) }), t.hasStyleObserver = !1, t.$.verticalScrollBar.hasStyleObserver = !1, t.$.horizontalScrollBar.hasStyleObserver = !1, e.freezeHeader = !0, e.freezeFooter = !0 } e.isRendered ? e.innerHTML && e.innerHTML.trim().length > 1 ? e._initDataSourceFromHTML() : e._fullRefresh() : (e._createElement(), setTimeout((() => { const t = e.querySelectorAll("tr[row-id]"); if (t.length > 0) { let a = !1; for (let l = 0; l < t.length; l++) { const i = t[l]; e._rowHeight < i.offsetHeight && (e._rowHeight = i.offsetHeight, a = !0) } a && (e.style.setProperty("--jqx-table-row-height", e._rowHeight + "px"), e._refreshDataRows()) } e.onLoad && e.onLoad() }), 500), e.columnMenu && (e._initialState = e.getState()), super.render()) } _initDataSourceFromHTML() { const e = this, t = e.context; e.context = e, e.hasAttribute("jqx-blazor") && (e.$.tableContainer.innerHTML = ""); const a = e.columns; e.dataSource = null, e.rows = null, e.columns = null; const l = e.querySelectorAll("th"); let i = [], n = [], r = []; for (let e = 0; e < l.length; e++) { const t = l[e].innerHTML.trim(); let a = { label: t, dataField: t, dataType: "string" }; i.push(a), n.push(t) } if (0 === l.length && a && a.length > 0) for (let e = 0; e < a.length; e++) { const t = a[e]; let l = { label: t.label, dataField: t.dataField, dataType: t.dataType }; t.width && (l.width = t.width), t.allowResize && (l.allowResize = t.allowResize), t.allowFilter && (l.allowFilter = t.allowFilter), t.allowSort && (l.allowSort = t.allowSort), t.allowHide && (l.allowHide = t.allowHide), t.allowMenu && (l.allowMenu = t.allowMenu), t.freeze && (l.freeze = t.freeze), t.responsivePriority && (l.responsivePriority = t.responsivePriority), t.columnGroup && (l.columnGroup = t.columnGroup), i.push(l), n.push({ name: t.dataField, dataType: t.dataType }) } const o = e.querySelectorAll("tr"); for (let e = 0; e < o.length; e++) { const t = {}, a = o[e].querySelectorAll("td"); if (a.length > 0) { for (let e = 0; e < i.length; e++)t[i[e].dataField] = a[e].innerHTML.trim(); r.push(t) } } const s = new JQX.DataAdapter({ dataSource: r, expandHierarchy: e.expandHierarchy, dataFields: n, id: e.dataRowId }); e.$.tableContainer.innerHTML = "", e.columns = i, e.context = t, e.dataSource = s } attached() { const e = this; super.attached(), e.isCompleted && e._dialog && (e._addDialogHandlers(), e.getShadowRootOrBody().appendChild(e._dialog)), e.isRendered && e.isCompleted && e.endUpdate() } detached() { const e = this; if (super.detached(), e._focusedCell && !e.$.tableContainer.contains(e._focusedCell) && delete e._focusedCell, !e._dialog) return; e._detachCachedTemplates(); const t = e._dialog; t.removeEventListener("change", e._dialogEventHandler), t.removeEventListener("clear", e._dialogEventHandler), t.removeEventListener("click", e._dialogEventHandler), t.removeEventListener("close", e._dialogEventHandler), t.removeEventListener("filter", e._dialogEventHandler), t.remove() } addFilter(e, t) { const a = this, l = a.columnByDataField[e]; "string" == typeof t ? t = a.dataSource._createFilter(l.dataType, [t]) : Array.isArray(t) && (t = a.dataSource._createFilter(l.dataType, t)), l && !1 !== l.allowFilter && t instanceof JQX.Utilities.FilterGroup != 0 && (e = l.dataField, a._clearSortByRow && a._clearSortByRow(!0), a._designerFiltersApplied && a._clearDesignerFilters(), a._filterInfo.appliedFilters || (a._filterInfo.appliedFilters = {}), a._filterInfo.appliedFilters[e] = t, a._refreshFilters("add"), l.headerCellElement && l.headerCellElement.setAttribute("filter", ""), a.$.filterInput && t && !a.filterRow && !a.columnMenu && (a.$.filterInput.value = t.filters[t.filters.length - 1].value, a._filterInfo.query = a.$.filterInput.value), a._originalDynamicColumnsOrder && (a._originalDynamicColumnsOrder = a._dynamicColumns.map((e => e.id)))) } addGroup(e) { const t = this; if (!t.grouping) return; const a = t.columnByDataField[e]; if (!a || !1 === a.allowGroup) return; const l = t.dataSource, i = l.groupBy; e = a.dataField, -1 === i.indexOf(e) && (i.push(e), l.refreshHierarchy(), t._getSelectableGroupRecords(), t._fullRefresh(), t._updateState("grouped"), t._doNotFireEvent || t.$.fireEvent("group", { action: "add", dataField: e })) } beginEdit(e, t) { const a = this; if (!a.editing) return; const l = a.columnByDataField[t]; if (t = l ? l.dataField : void 0, "cell" === a.editMode && !t || l && !1 === l.allowEdit) return; const i = a.rowById[e]; if (!i) return; const n = i.data.$.id; a._editing && a.endEdit(), a._beginEdit({ rowId: n, rowObject: i, dataField: t }) } cancelEdit() { const e = this, t = e._editing; if (t) { for (let a = 0; a < t.cells.length; a++) { const l = t.cells[a]; l.editor.contains(e.getRootNode().activeElement) && e._focusCell(l.element), l.editor.remove(), e._setCellContent(l.element, e._formatCellValue(t.row, e.columnByDataField[l.dataField], l.element)), l.element.classList.remove("editing") } delete e._editing } } clearFilters(e = null) { const t = this, a = t._filterInfo; (a.inputFilters || a.rowFilters || a.appliedFilters) && (t._clearFilterInput(), t._clearRowFilters(e), delete t._filterInfo.appliedFilters, t.dataSource.virtualDataSource || t.dataSource.clearFilter(), t._fullRefresh("filter"), t._updateState("filtered"), t._doNotFireEvent || t.$.fireEvent("filter", { action: "remove" })) } clearGrouping() { const e = this, t = e.dataSource; 0 !== t.groupBy.length && (t.groupBy = [], t.refreshHierarchy(), e._getSelectableGroupRecords(), e._fullRefresh(), e._updateState("grouped"), e.$.fireEvent("group", { action: "remove" })) } clearSelection() { this._clearSelection(!0) } collapseAllRows() { const e = this; e._isExpandCollapseForbidden() || (function t(a) { for (let l = 0; l < a.length; l++) { const i = a[l]; if (!i.leaf && (i.children && t(i.children), i.expanded)) { if (e.virtualization) { const t = i.$.id, a = e.rowById ? e.rowById[t] : e.rows.dataItemById[t]; (a.data || a).expanded = !1, e._collapsedIds[t] = !0; continue } e.collapseRow(i.$.id) } } }(e["jqx-table" === e.nodeName.toLowerCase() ? "dataSource" : "rows"].boundHierarchy), e.virtualization && (e._expandedIds = [], e._expandedIdsAlt = [], e.dataSource.refreshHierarchy(), e._refreshDataRows(), e._updateState("expanded"))) } collapseGroup(e) { const t = this; if (!t.grouping || 0 === t.dataSource.groupBy.length) return; const a = t._getGroupByIndex(e); if (!a || !a.expanded) return; const l = t.$.tableContainer.querySelector(`tr[row-id="${a.$.id}"]:not([unused])`); if (!l) { a.expanded = !1; let e = a.$.id; return null == e ? void t.refresh() : e.replace ? (e = e.replace("Item", "").replace(/_/gi, "."), void t.$.fireEvent("group", { action: "collapse", path: e, dataField: a.groupDataField, label: a.label })) : (t.refresh(), void t.$.fireEvent("group", { action: "collapse", path: e, dataField: a.groupDataField, label: a.label })) } if (t._isCollapsed(a)) return l.setAttribute("aria-expanded", !1), l.classList.remove("expanded"), void (a.expanded = !1); t._hierarchyArrowClickHandler(l) } collapseRow(e) { const t = this; if (t._isExpandCollapseForbidden()) return; const a = t.rowById ? t.rowById[e] : t.rows.dataItemById[e], l = a.data || a; if (!a || l.leaf || !l.expanded) return; const i = t.$.tableContainer.querySelector(`tr[row-id="${e}"]:not([unused])`); return i ? t._isCollapsed(l) ? (i.setAttribute("aria-expanded", !1), i.classList.remove("expanded"), l.expanded = !1, t._expandedIds = t._expandedIds.filter((e => e !== l.$.id)), t._updateState("expanded"), void t.$.fireEvent("collapse", { record: l })) : void t._hierarchyArrowClickHandler(i) : (l.expanded = !1, t._expandedIds = t._expandedIds.filter((e => e !== l.$.id)), void t._updateState("expanded")) } collapseRowDetails(e) { const t = this; if (!t.rowDetailTemplate) return; const a = t.rowById ? t.rowById[e] : t.rows.dataItemById[e], l = a.data || a; if (!a || !l) return; const i = t.$.tableContainer.querySelector(`tr[row-id="${e}"]:not([unused])`); if (!i) return; const n = i.nextElementSibling; n && n.classList.contains("jqx-table-row-detail") && !n.classList.contains("collapsed") && t._toggleRowDetail(i, l.$.id) } collapseAllRowDetails() { const e = this; if (!e.rowDetailTemplate || !e.dataSource) return; let t = e.dataSource.boundSource; t || (t = e.$.tableContainer.querySelectorAll("tr[row-id]:not([unused])")); for (let a = 0; a < t.length; a++)e.collapseRowDetails(t[a].$.id) } expandAllRowDetails() { const e = this; if (!e.rowDetailTemplate || !e.dataSource) return; let t = e.dataSource.boundSource; t || (t = e.$.tableContainer.querySelectorAll("tr[row-id]:not([unused])")); for (let a = 0; a < t.length; a++)e.expandRowDetails(t[a].$.id) } updateRow(e, t, a) { const l = this, i = l.rowById ? l.rowById[e] : l.rows.dataItemById[e]; if (!i) return; const n = l._selectedIds.slice(0); l._editing = !0, l.__updatedRows = !0; let r = []; l.dataSource && l.dataSource.groupBy && l.dataSource.groupBy.toArray && (r = l.dataSource.groupBy.toArray().slice(0)); const o = l.dataSource.boundSource.canNotify; l.dataSource.boundSource.canNotify = !1; const s = e => { if (i.data[e] = t[e], l.dataSource.id && i && i.data && i.data.$ && (i.data.$.id = t[l.dataSource.id]), i && i.data.$ && void 0 !== i.data.$.index) { const a = i.data.$.index, n = l.dataSource.dataSource, o = () => { const a = t[e]; if (null == a) { const t = l.columnByDataField[e]; return t ? "number" === t.dataType ? 0 : "boolean" !== t.dataType && ("date" === t.dataType ? new Date : "") : "" } return a }; if (n && n[a] && (n[a][e] = o()), l.dataSource[a]) { if (r.length > 0 && !l._dirtyHierarchy && l.dataSource[a][e] !== o() && r.indexOf(e) >= 0) { const e = l._getExpandedGroups(l.dataSource.boundHierarchy); l._dirtyHierarchy = e } l.dataSource[a][e] = o() } } }; for (let e = 0; e < l.columns.length; e++) { const a = l.columns[e]; void 0 !== t[a.dataField] && s(a.dataField) } if (a) { const e = l.dataSource.dataFields; if (e) for (let t = 0; t < e.length; t++)e[t].map ? s(e[t].map) : s(e[t].name) } l._editing = !1, l.dataSource.boundSource.canNotify = o, l.__updating || (l.dataSource.refreshHierarchy(), l._fullRefresh(void 0, n, "update")) } addRow(e) { const t = this; let a = []; const l = t.dataSource.boundSource.canNotify; if (t.dataSource.boundSource.canNotify = !1, t._editing = !0, t.__updatedRows = !0, t.dataSource && t.dataSource.groupBy && t.dataSource.groupBy.toArray && (a = t.dataSource.groupBy.toArray().slice(0), a.length > 0 && t.dataSource.beginUpdate()), a.length > 0) t.dataSource ? t.dataSource.add(e, !0) : t._addNewRow(e, 0); else if (t.dataSource) if (t.dataSource.boundHierarchy && t.$.tableContainer && "treegrid" === t.$.tableContainer.getAttribute("role")) { const a = e[t.dataSource.parentDataField]; t.dataSource.add(e, a) } else t.dataSource.add(e, !0); else t._addNewRow(e, 0); t.dataSource.boundSource.canNotify = l, t._editing = !1, t._updateSelectAllState(), a.length > 0 || t.dataSource.boundHierarchy && t.$.tableContainer && "treegrid" === t.$.tableContainer.getAttribute("role") ? (t._dataSourceUpdatingTimer && clearTimeout(t._dataSourceUpdatingTimer), t._dataSourceUpdatingTimer = setTimeout((() => { t._doNotFireEvent = !0; const e = t._getExpandedGroups(t.dataSource.boundHierarchy); a.forEach((e => t.addGroup(e))), t.dataSource.endUpdate(), t._restoreExpandedGroups(e), t._fullRefresh("update"), t._doNotFireEvent = !1 }), 50)) : (t._dataSourceUpdatingTimer && clearTimeout(t._dataSourceUpdatingTimer), t._dataSourceUpdatingTimer = setTimeout((() => { t._doNotFireEvent = !0, t._fullRefresh("update"), t._doNotFireEvent = !1 }))) } removeRow(e) { const t = this, a = t.rowById ? t.rowById[e] : t.rows.dataItemById[e]; if (!a) { if (t.dataSource && t.dataSource.dataItemById) { const a = t.dataSource.dataItemById[e]; if (a) { const l = void 0 !== a.$ ? a.$.index : 0; t.dataSource.removeAt(l), t._selectedIds.indexOf(e) >= 0 && (t._selectedIds.splice(t._selectedIds.indexOf(e), 1), t._updateSelectAllState(), t._updateState("selected"), t.$.fireEvent("change", { type: "remove" })), t.virtualization && t.__updating || t._fullRefresh("update") } } return } const l = a.data || a, i = void 0 !== l.$ ? l.$.index : 0, n = t.dataSource.boundSource.canNotify; t.dataSource.boundSource.canNotify = !1, t._editing = !0, t.__updatedRows = !0; let r = []; t.dataSource && t.dataSource.groupBy && t.dataSource.groupBy.toArray && (r = t.dataSource.groupBy.toArray().slice(0), r.length > 0 && t.dataSource.beginUpdate()), t._doNotFireEvent = !0, t._sortColumns && t._sortColumns.length ? t.dataSource.remove(l) : t.dataSource.removeAt(i), t._selectedIds.indexOf(e) >= 0 && (t._selectedIds.splice(t._selectedIds.indexOf(e), 1), t._updateSelectAllState(), t._updateState("selected"), t.$.fireEvent("change", { type: "remove" })), t._doNotFireEvent = !1, t.dataSource.boundSource.canNotify = n, t._editing = !1, r.length > 0 && (t._dataSourceUpdatingTimer && clearTimeout(t._dataSourceUpdatingTimer), t._dataSourceUpdatingTimer = setTimeout((() => { const e = t._getExpandedGroups(t.dataSource.boundHierarchy); r.forEach((e => t.addGroup(e))), t.dataSource.endUpdate(), t._restoreExpandedGroups(e), t._fullRefresh("update") }), 50)), t.virtualization && t.__updating || t._fullRefresh("update") } expandRowDetails(e) { const t = this; if (!t.rowDetailTemplate) return; const a = t.rowById ? t.rowById[e] : t.rows.dataItemById[e]; if (!a) return; const l = a.data || a; if (!a || !l) return; const i = t.$.tableContainer.querySelector(`tr[row-id="${e}"]:not([unused])`); if (!i) return; const n = i.nextElementSibling; !n && !t.virtualization || n && n.classList.contains("jqx-table-row-detail") && !n.classList.contains("collapsed") || t._toggleRowDetail(i, l.$.id) } endEdit() { const e = this, t = e._editing; if (!t) return; const a = t.row, l = a.data, i = []; let n = !0; for (let a = 0; a < t.cells.length; a++) { const l = t.cells[a], r = e.columnByDataField[l.dataField], o = l.element, s = l.editor; let d; if (r.editor && r.editor.template ? r.editor.getValue && (d = r.editor.getValue(s)) : (d = s.value, s instanceof HTMLInputElement && ("number" === s.type ? d = parseFloat(d) : "date" === s.type && (d = new Date(d), isNaN(d.getTime()) && (d = null)))), r.validation) { const t = r.validation(d), a = void 0 !== t && !0 !== t; if (a) { let a; a = "object" == typeof t && t.message ? t.message : e.localize("invalidValue"), o.setAttribute("validation-message", a) } else o.removeAttribute("validation-message"); o.classList.toggle("invalid", a), n = n && !a } i.push({ column: r, newValue: d }) } if (n) { if (e.dataSource.virtualDataSource) { const a = Object.assign({}, l); for (let e = 0; e < t.cells.length; e++) { const l = t.cells[e], n = i[e], r = n.column; a[l.dataField] = n.newValue, r.transform && (a[r.dataField] = r.transform(n.newValue)) } for (const t of e._columns) a[t.dataField] instanceof Date && (a[t.dataField] = a[t.dataField].toISOString().slice(0, 10)); e._editing.row.data = a, e._requestVirtualDataSource("update", (function (t) { return t ? r(!1, a) : (e._editing.row.data = l, e.cancelEdit()), t })) } else r(!0, l); delete e._editing } function r(l, n) { for (let r = 0; r < t.cells.length; r++) { const o = t.cells[r], s = i[r], d = s.column, c = o.editor; c.contains(e.getRootNode().activeElement) && e._focusCell(o.element), c.remove(), l && (n[o.dataField] = s.newValue, d.transform && (n[d.dataField] = d.transform(s.newValue))), e._setCellContent(o.element, e._formatCellValue(a, d, o.element)), o.element.classList.remove("editing"), e.$.fireEvent("cellEndEdit", { id: n.$.id, row: n, value: n[o.dataField], dataField: o.dataField }) } e._updateCellsWithFormulas(), "row" === e.editMode && e.$.fireEvent("rowEndEdit", { id: n.$.id, row: n }) } } expandAllRows() { const e = this; if (e._isExpandCollapseForbidden()) return; e.beginUpdate(); const t = e["jqx-table" === e.nodeName.toLowerCase() ? "dataSource" : "rows"].boundHierarchy; if (e._collapsedIds = [], t) for (let a = 0; a < t.length; a++) { const l = t[a], i = t => { if (!t.leaf && (t.expanded = !0, e._expandedIds.push(t.$.id), e._expandedIdsAlt[t.$.id] = !0, t.children)) for (let e = 0; e < t.children.length; e++) { const a = t.children[e]; i(a) } }; i(l) } e.endUpdate() } isGroupExpanded(e) { const t = this, a = t.dataSource; if (!t.grouping || 0 === a.groupBy.length) return; const l = t._getGroupByIndex(e); return !!l && l.expanded } expandGroup(e) { const t = this, a = t.dataSource; if (!t.grouping || 0 === a.groupBy.length) return; const l = t._getGroupByIndex(e); if (!l) return; const i = t._doNotFireEvent, n = t.animation, r = t.$.tableContainer.querySelector(`tr[row-id="${l.$.id}"]:not([unused])`); let o = !1; if (i && (t.animation = "none"), r) { if (t._isCollapsed(l)) if (i) o = !0; else { let e = l.parent; e && !e.expanded && t.expandGroup(l.parent.$.id.replace("Item", "").replace(/_/g, ".")) } l.expanded || (o || i ? (l.expanded = !0, r.setAttribute("aria-expanded", !0), r.classList.add("expanded")) : t._hierarchyArrowClickHandler(r, i)), i && (l.expanded = !0, r.setAttribute("aria-expanded", !0), r.classList.add("expanded"), requestAnimationFrame((() => t.animation = n))) } else if (l.expanded = !0, !l.expanded && !i) { let e = l.$.id; e = e.replace("Item", "").replace(/_/gi, "."), t.$.fireEvent("group", { action: "expand", path: e, dataField: l.groupDataField, label: l.label }) } } expandAllRootGroups() { const e = this; if (!e.grouping) return; e.beginUpdate(); const t = e.dataSource.boundHierarchy; if (t) for (let e = 0; e < t.length; e++)t[e].expanded = !0; e.endUpdate() } expandAllGroups() { const e = this; if (!e.grouping) return; e.beginUpdate(); const t = e.dataSource.boundHierarchy; if (t) for (let e = 0; e < t.length; e++) { const a = t[e], l = e => { if (e.expanded = !0, e.children) for (let t = 0; t < e.children.length; t++) { const a = e.children[t]; l(a) } }; l(a) } e.endUpdate() } collapseAllGroups() { const e = this; if (!e.grouping) return; e.beginUpdate(); const t = e.dataSource.boundHierarchy; if (t) for (let e = 0; e < t.length; e++)t[e].expanded = !1; e.endUpdate() } expandRow(e) { const t = this; if (t._isExpandCollapseForbidden()) return; const a = t.rowById ? t.rowById[e] : t.rows.dataItemById[e], l = a.data || a; if (!a || l.leaf) return; const i = t.$.tableContainer.querySelector(`tr[row-id="${e}"]:not([unused])`); if (!i) return l.expanded = !0, -1 === t._expandedIds.indexOf(l.$.id) && t._expandedIds.push(l.$.id), t._expandedIdsAlt[l.$.id] = !0, t._updateState("expanded"), void t.$.fireEvent("expand", { id: l.$.id, record: l }); if (t._isCollapsed(l)) { let e = l.parent; e && !e.expanded && t.expandRow(e.$.id) } l.expanded || t._hierarchyArrowClickHandler(i) } exportData(e, t, a, l) { const i = this, n = i._columns.filter((e => e.visible)), r = i.columnGroups, o = i.dataSource, s = getComputedStyle(i), d = s.borderRightColor, c = new JQX.Utilities.DataExporter(void 0, o.groupBy.toArray()), u = {}; let f, m = Array.from(i.$.tableContainer.firstElementChild.querySelectorAll("th")); if (o.virtualDataSource) { f = []; for (let e = 0; e < i.rows.length; e++)f.push(i.rows[e].data) } else o.boundHierarchy && !i.grouping ? (c.hierarchical = !0, f = function e(t) { const l = []; return t.forEach((t => { a && !1 === t.$.filtered || (l.push(t), t.leaf || (t._expanded = t.expanded, t.children && (t.children = e(t.children), 0 === t.children.length && (t._expanded = void 0, t.children = void 0, t.leaf = !0)))) })), l }(JSON.parse(JSON.stringify(o.boundHierarchy, ((e, t) => { if ("parent" !== e) return t }))))) : (f = Array.from(o.toArray()), a && (f = f.filter((e => !1 !== e.$.filtered)))); c.style = { border: "1px solid " + d, borderCollapse: "collapse", backgroundColor: s.backgroundColor, color: s.color, fontFamily: "Helvetica", header: { border: "1px solid " + d, fontWeight: "bold" }, columns: { border: "1px solid " + d } }, m = m.filter((e => !1 === e.classList.contains("jqx-table-select-all"))); for (let e = 0; e < n.length; e++) { const t = n[e], a = {}, l = {}; let i = m[e].offsetWidth + "px"; u[t.dataField] = t.label, "date" === t.dataType && (l.format = "d"), a.width = i, c.style.header[t.dataField] = a, c.style.columns[t.dataField] = l } return r ? c.header = { columns: n, columngroups: r } : f.unshift(u), c.exportData(f, e, t, l) } getRowIndexById(e) { const t = this.rowById[e]; return this.dataSource && t && t.data && t.data.$ ? t.data.$.index : -1 } getSelection() { const e = this; return 0 === e._selectableGroupRecords.length ? e._selectedIds.filter((e => !("" + e).startsWith("Item"))) : e._selectedIds.filter((t => -1 === e._selectableGroupRecords.indexOf(t) && !("" + t).startsWith("Item"))) } getState() { return JSON.parse(this._stringifyState()) } getValue(e, t) { const a = this, l = a.columnByDataField[t]; if (!l) return; let i = a.rowById[e]; return i ? i.data[l.dataField] : (i = a.dataSource.dataItemById[e], i ? i[l.dataField] : void 0) } loadState(e) { const t = this; if (!e && !(e = window.localStorage.getItem("jqxTable" + t.id))) return; const a = t.stateSettings; let l = !1; if (t._loadingState = !0, "string" == typeof e && (e = JSON.parse(e)), -1 !== a.indexOf("columns")) { const a = t.loadColumnStateBehavior, i = t._columns, n = [], r = e.columns; for (let e = 0; e < r.length; e++) { let t = Object.assign({}, r[e]); const l = i.find((e => e.dataField === t.dataField)); if (!l) { "implementationOnly" !== a && n.push(t); continue } const o = l.label, s = ["editor", "formatFunction", "templateElement", "templateElementSettings", "transform", "validation"]; "stateOnly" !== a && s.push("label"); for (let e in l) -1 === s.indexOf(e) && delete l[e]; t = Object.assign(l, t), "stateOnly" !== a && o && (t.label = o), n.push(t) } if ("stateOnly" !== a) for (let e = 0; e < i.length; e++) { const t = i[e]; n.find((e => e.dataField === t.dataField)) || n.push(t) } t.columns = n, t._initColumns(!0), l = !0, t._formattingPanel && (t._formattingPanel.columns = t._columns) } if (t.grouping) { const a = t.dataSource, i = t.dataSource.groupBy; e.grouped = e.grouped || [], JSON.stringify(i._array) !== JSON.stringify(e.grouped) && (t.dataSource.groupBy = e.grouped, a.refreshHierarchy(), l = !0) } else t.hasAttribute("hierarchy") && -1 !== a.indexOf("expanded") && JSON.stringify(t._expandedIds.slice(0).sort()) !== JSON.stringify(e.expanded.slice(0).sort()) && (t.collapseAllRows(), t._expandedIds = e.expanded, l = !0); -1 !== a.indexOf("selected") && e.selected.slice && JSON.stringify(t._selectedIds.slice(0).sort()) !== JSON.stringify(e.selected.slice(0).sort()) && (t._selectedIds = e.selected, l = !0), l && (t._initRows(), t.refresh()); e: if (-1 !== a.indexOf("filtered")) { const a = t.filtering, l = e.filtered; if (t.clearFilters(), !l) break e; if (a && t.filterRow && l.rowFilters) { const a = t.$.tableContainer.querySelector(".jqx-table-filter-row"), l = Number(t.selection), i = e.filtered.filterRowValues; for (let e = 0; e < t._columns.length; e++) { const n = i[e]; if (!n) continue; const r = t._columns[e].dataType, o = a.children[e + l].firstElementChild, s = t._filterInfo["string" === r ? "stringConditions" : "numberAndDateConditions"].find((e => e.value === n.condition)); if (-1 === ["EMPTY", "NOT_EMPTY", "NULL", "NOT_NULL"].indexOf(s.value)) if ("date" === r) { const e = new Date(n.value), t = (e.getMonth() + 1).toString(), a = e.getDate().toString(); o.children[0].value = `${e.getFullYear()}-${"0".repeat(2 - t.length)}${t}-${"0".repeat(2 - a.length)}${a}` } else o.children[0].value = n.value; o.children[1].value = s.label, o.children[1].$.input.dataValue = s.value } t._applyRowFilters() } else if (a && l.inputFilters) t.$.filterInput.value = l.query, t._filterByAll(l.query); else if (l.appliedFilters) { t._filterInfo.appliedFilters || (t._filterInfo.appliedFilters = {}); for (let e in l.appliedFilters) { const a = l.appliedFilters[e], i = new window.JQX.Utilities.FilterGroup; a.filters.forEach(((e, t) => { const l = i.createFilter(e.type.replace("Filter", ""), e.value, e.condition); i.addFilter(a.logicalOperators[t], l) })), t._filterInfo.appliedFilters[e] = i } t._refreshFilters("add") } } -1 !== a.indexOf("sorted") && (t.clearSort(), e.sorted.forEach && e.sorted.forEach((e => { t.sortBy(e.dataField, e.direction) }))), a.forEach((e => t._updateState(e, !1))), t.autoSaveState && window.localStorage.setItem("jqxTable" + t.id, t._stringifyState()), delete t._loadingState } navigateTo(e) { const t = this; if (isNaN(e) || null === e) return; const a = t.pageIndex; t.pageIndex = Math.max(Math.min(Math.round(e), t.$.pager.pagesCount - 1), 0), t.paging && t.pageIndex !== a && (t._fullRefresh("pageIndexChange"), t.$.fireEvent("page", { action: "pageIndexChange" })) } removeFilter(e) { const t = this, a = t.columnByDataField[e]; a && t.filterRow && t.clearFilters(e), t._filterInfo.appliedFilters && a && (e = a.dataField, t._clearSortByRow && t._clearSortByRow(!0), t._designerFiltersApplied && t._clearDesignerFilters(e), delete t._filterInfo.appliedFilters[e], t._refreshFilters("remove"), t._originalDynamicColumnsOrder && (t._originalDynamicColumnsOrder = t._dynamicColumns.map((e => e.id)))) } removeGroup(e) { const t = this, a = t.columnByDataField[e]; if (!t.grouping || !a) return; e = a.dataField; const l = t.dataSource, i = l.groupBy, n = i.indexOf(e); -1 !== n && (i.splice(n, 1), l.refreshHierarchy(), t._getSelectableGroupRecords(), t._fullRefresh(), t._updateState("grouped"), t.$.fireEvent("group", { action: "remove", dataField: e })) } saveState() { const e = this._stringifyState(); return window.localStorage.setItem("jqxTable" + this.id, e), JSON.parse(e) } enableSelect(e) { const t = this; t.selection && t._disabledSelection.indexOf(e) >= 0 && (t._disabledSelection.splice(t._disabledSelection.indexOf(e), 1), t._fullRefresh("update")) } disableSelect(e) { const t = this; t.selection && (t._disabledSelection.push(e), t._fullRefresh("update")) } select(e) { const t = this; t.selection && (Array.isArray(e) ? t._changeSelectionOfMultiple(e, "select") : t._selectSingle(e) && (t._updateSelectAllState(), t._updateState("selected"), t.$.fireEvent("change", { type: t._interaction ? "interaction" : "programmatic" }))) } setValue(e, t, a) { const l = this, i = l.columnByDataField[t]; if (!i) return; let n, r = l.rowById[e]; if (r) n = r.data; else { if (r = l.dataSource.dataItemById[e], !r) return; n = r } t = i.dataField, l.dataSource._updating = !0, i.transform ? (n[i.originalDataField] = a, n[t] = i.transform(a)) : n[t] = a; const o = l.$.tableContainer.querySelector(`tr[row-id="${e}"]:not([unused]) td[data-field="${t}"]`); if (o && (l._setCellContent(o, l._formatCellValue(r, i, o), o.classList.contains("tree-cell")), i.templateElement && i.templateElementSettings)) { const e = o.classList.contains("tree-cell"), t = o, a = e ? t.children[0].children[1] : t, r = n.$.id; l._cachedTemplates && l._cachedTemplates[i.dataField + "_" + r] && (0 === l._cachedTemplates[i.dataField + "_" + r].innerHTML.length ? delete l._cachedTemplates[i.dataField + "_" + r] : (a.innerHTML = "", a.appendChild(l._cachedTemplates[i.dataField + "_" + r]))), i.templateElementSettings(n[i.dataField], r, a.firstElementChild), l._cachedTemplates || (l._cachedTemplates = []), l._cachedTemplates[i.dataField + "_" + r] || (l._cachedTemplates[i.dataField + "_" + r] = a.firstElementChild) } l._updateCellsWithFormulas(), delete l.dataSource._updating } unselect(e) { const t = this; t.selection && (Array.isArray(e) ? t._changeSelectionOfMultiple(e, "unselect") : t._unselectSingle(e) && (t._updateSelectAllState(), t._updateState("selected"), t.$.fireEvent("change", { type: t._interaction && -1 === t._disabledSelection.indexOf(e) ? "interaction" : "programmatic" }))) } set scrollTop(e) { const t = this; t.isRendered && (e = parseInt(e), isNaN(e) || ((t.virtualization ? t.$.virtualizationContainer : t.$.container).scrollTop = e)) } get scrollTop() { const e = this; return e.isRendered ? (e.virtualization ? e.$.virtualizationContainer : e.$.container).scrollTop : 0 } set scrollLeft(e) { const t = this; t.isRendered && (e = parseInt(e), isNaN(e) || ((t.virtualization ? t.$.virtualizationContainer : t.$.container).scrollLeft = e)) } get scrollLeft() { const e = this; return e.isRendered ? (e.virtualization ? e.$.virtualizationContainer : e.$.container).scrollLeft : 0 } clearContent() { const e = this; for (; e.$.tableContainer.firstChild;)e.$.tableContainer.removeChild(e.$.tableContainer.firstChild) } applyContent() { const e = this; if (void 0 === e.content) return void (e.content = e.$.tableContainer); if ("" === e.content || null === e.content) return void e.clearContent(); if (e.content instanceof HTMLElement) return e.clearContent(), void e.$.content.appendChild(e.content); const t = document.createDocumentFragment(); let a = document.createElement("div"); t.appendChild(a), e.content instanceof HTMLElement ? a.appendChild(e.content) : a.innerHTML = e.content; let l = Array.from(a.childNodes); a.parentNode.removeChild(a); for (let e = 0; e < l.length; e++)t.appendChild(l[e]); e.clearContent(), e.$.tableContainer.appendChild(t) } propertyChangedHandler(e, t, a) { const l = this; if (super.propertyChangedHandler(e, t, a), "innerHTML" !== e) switch (e) { case "animation": case "theme": if ("theme" === e) { const e = getComputedStyle(l); l._defaults.text = l._toHex(e.color), l._defaults.highlight = l._toHex(e.backgroundColor) } if (l.filterRow) { const t = l.$.tableContainer.querySelector(".jqx-table-filter-row"); Array.from(t.querySelectorAll("jqx-input, jqx-button")).forEach((t => t[e] = a)) } i(e, a); break; case "autoSaveState": a && window.localStorage.setItem("jqxTable" + l.id, l._stringifyState()); break; case "columnGroups": a && (l.columnResize && (l.columnResize = !1), "auto" === l.columnSizeMode && (l.removeAttribute("resize-max-reached"), l.columnSizeMode = "default")), l.refresh(); break; case "columnMinWidth": if (isNaN(parseFloat(a))) return void (l.columnMinWidth = t); l._handleAutoSizeMode(), l._handleFrozenColumnPositions(), l._refreshHorizontalScrollbar(); break; case "columnResize": a && l.columnGroups && (l.columnResize = !1); break; case "columnResizeNormalize": l._columns && l._columns.length > 0 && "" === l._columns[l._columns.length - 1].dataField && (l._columns.pop(), l.columns.pop()), l._initColumns(!0), l.refresh(); break; case "columns": { l._conditionalFormatting && delete l._conditionalFormatting; const e = l._sortColumns, t = l._filterInfo; if (l._clearFilterInput(), l._clearRowFilters(), delete l._filterInfo.appliedFilters, l._sortColumns = [], l._initColumns(!0), l.refresh(), l._formattingPanel && (l._formattingPanel.columns = l._columns), l.dataSource.dataFields) { let a = l.dataSource.dataFields || []; const i = l.columns; let n = !1; if (i.forEach((e => { if (e.dataType) { const t = a.find((t => t.name === e.dataField)); t ? t.dataType = e.dataType : e.map ? a.find((t => e.map.indexOf(t.name) >= 0 ? t : null)) && (l.dataSource.dataFields.push({ name: e.dataField, map: e.map, dataType: e.dataType }), n = !0) : (l.dataSource.dataFields.push({ name: e.dataField, dataType: e.dataType }), n = !0) } })), n && l.dataSource.dataBind) { let a = [], i = []; if (l.dataSource && l.dataSource.groupBy && l.dataSource.groupBy.toArray && (a = l.dataSource.groupBy.toArray().slice(0)), a.length > 0 && (i = l._getExpandedGroups(l.dataSource.boundHierarchy)), l.dataSource.bindingCompleted = !1, l.dataSource.dataBind(), l._doNotFireEvent = !0, a.length > 0 && (a.forEach((e => l.addGroup(e))), l.dataSource.boundHierarchy && l.dataSource.refreshHierarchy(), l._restoreExpandedGroups(i)), t.inputFilters ? l._filterByAll(t.query) : t.rowFilters ? l._applyRowFilters() : t.appliedFilters && l._refreshFilters(), e && (l._sortColumns = [], e.forEach((e => { l.columnByDataField[e.dataField].sortOrder = null, l.sortBy(e.dataField, e.direction) }))), l._selectedIds.length > 0) { const e = JSON.stringify(l._selectedIds.slice(0).sort()), t = l.dataSource; l._selectedIds = l._selectedIds.filter((e => void 0 !== t.dataItemById[e] || -1 !== l._selectableGroupRecords.indexOf(e))), e !== JSON.stringify(l._selectedIds.slice(0).sort()) && (l._updateSelectAllState(), l._updateState("selected"), l.$.fireEvent("change", { type: "remove" })) } l.virtualization && setTimeout((() => { const e = l.columns && l.columns.length > 0 ? l.columns[0].dataField : ""; if (e) { const t = l.querySelector('td[data-field="' + e + '"]'); t && l._rowHeight < t.offsetHeight && (l._rowHeight = t.offsetHeight, l.style.setProperty("--jqx-table-row-height", l._rowHeight + "px"), l._refreshDataRows()) } }), 300), delete l._doNotFireEvent } else t.inputFilters ? l._filterByAll(t.query) : t.rowFilters ? l._applyRowFilters() : t.appliedFilters && l._refreshFilters(), e && (l._sortColumns = [], e.forEach((e => { l.columnByDataField[e.dataField].sortOrder = null, l.sortBy(e.dataField, e.direction) }))) } break } case "columnSizeMode": if ("auto" === a) { if (l.columnGroups) return void (l.columnSizeMode = "default"); l._handleAutoSizeMode() } else l.removeAttribute("resize-max-reached"), l._columns.forEach((e => { e.visible && (e._isResponsive ? e.headerCellElement.style.width = e.width || e._manualPercentageWidth ? l._getColumnWidth(e.width || e._manualPercentageWidth, !0, e) : null : e.headerCellElement.style.width = e.width || e._manualWidth ? l._getColumnWidth(e.width || e._manualWidth, !0, e) : null) })); l._handleFrozenColumnPositions(), l._refreshHorizontalScrollbar(); break; case "conditionalFormatting": l._applyInitialConditionalFormatting(l.dataSource), l._refreshDataRows(); break; case "conditionalFormattingButton": l.$.header.classList.toggle("jqx-hidden", (!l.filtering || l.filterRow) && !a), !a && l._dialog && l._dialog.close(); break; case "dataSource": case "dataSourceSettings": { const i = l._sortColumns, n = l._filterInfo; if ("dataSource" === e && null === a && (l.dataSource = []), "dataSource" === e && t && a && l.virtualization && !document.hidden && t instanceof JQX.DataAdapter && t.length === a.length && t.length > 0 && a.length > 0 && !l.dataSourceSettings.parentDataField && !t.parentDataField) { if (l.dataSource = t, l._cachedDataSource === a) return; l.beginUpdate(); for (let e = 0; e < a.length; e++) { const t = a[e], i = l.dataSource[e].$.id; l.updateRow(i, t, !0) } return i ? l.endUpdate(!0, !0) : l.endUpdate(void 0, !0), void (l._cachedDataSource = a) } const r = l.$.virtualizationContainer ? l.$.virtualizationContainer.scrollTop : 0, o = void 0 !== l.$.virtualizationContainer && l.$.virtualizationContainer.$ ? l.$.virtualizationContainer.$.verticalScrollBar : null; o && o.beginUpdate(); let s = []; if (t && t.groupBy && t.groupBy.toArray && (s = t.groupBy.toArray().slice(0)), l._dataBind(!0), l._doNotFireEvent = !0, s.length > 0) { const e = l._getExpandedGroups(t.boundHierarchy); if (l.__updating = !0, l.dataSource._groupBy && (l.dataSource._groupBy.canNotify = !1), l._selectedIds.length > 0) { const e = JSON.stringify(l._selectedIds.slice(0).sort()), t = l.dataSource; l._selectedIds = l._selectedIds.filter((e => void 0 !== t.dataItemById[e] || -1 !== l._selectableGroupRecords.indexOf(e))), s.forEach((e => l.addGroup(e))), e !== JSON.stringify(l._selectedIds.slice(0).sort()) && (l._updateSelectAllState(), l._updateState("selected"), l.$.fireEvent("change", { type: "remove" })) } else s.forEach((e => l.addGroup(e))); l.dataSource.boundHierarchy && l.dataSource.refreshHierarchy(), l.dataSource._groupBy && (l.dataSource._groupBy.canNotify = !0), l.__updating = !1, l._restoreExpandedGroups(e), l._fullRefresh("update") } else if (l.dataSource.boundHierarchy && l.dataSource.boundHierarchy.length && t && t.toArray) { const e = t.toArray(); for (let t = 0; t < e.length; t++) { const a = e[t]; a.expanded && (l._expandedIdsAlt[a.$.id] = !0, l._expandedIds.push(a.$.id)) } if (l.expandHierarchy) { if (l.dataSource && l.dataSource.toArray) { const e = l.dataSource.toArray(); for (let t = 0; t < e.length; t++) { const a = e[t]; a.expanded && (l._expandedIdsAlt[a.$.id] = !0, l._expandedIds.push(a.$.id)) } } l._expandedIds = l._expandedIds.filter((e => !l._collapsedIds || !l._collapsedIds[e])), Object.keys(l._collapsedIds).forEach((e => { delete l._expandedIdsAlt[e] })) } const a = (e, t, l) => { const i = this; for (let n = t; n < l; n++) { const t = e[n]; if (!t) break; t.leaf || (i._expandedIdsAlt[t.$.id] ? t.expanded = !0 : (t.expanded, t.expanded = !1), t.children.length && !1 !== t.$.filtered && a(t.children, 0, t.children.length)) } }; a(l.dataSource.boundHierarchy, 0, l.dataSource.boundHierarchy.length), l._fullRefresh("update") } if (n.inputFilters ? l._filterByAll(n.query) : n.rowFilters ? l._applyRowFilters() : n.appliedFilters && l._refreshFilters(), i && (l._sortColumns = [], i.forEach((e => { l.columnByDataField[e.dataField].sortOrder = null, l.sortBy(e.dataField, e.direction) }))), l._selectedIds.length > 0) { const e = JSON.stringify(l._selectedIds.slice(0).sort()), t = l.dataSource; l._selectedIds = l._selectedIds.filter((e => void 0 !== t.dataItemById[e] || -1 !== l._selectableGroupRecords.indexOf(e))), e !== JSON.stringify(l._selectedIds.slice(0).sort()) && (l._updateSelectAllState(), l._updateState("selected"), l.$.fireEvent("change", { type: "remove" })) } l.virtualization && (setTimeout((() => { const e = l.columns && l.columns.length > 0 ? l.columns[0].dataField : ""; if (e) { const t = l.querySelector('td[data-field="' + e + '"]'); t && l._rowHeight < t.offsetHeight && (l._rowHeight = t.offsetHeight, l.style.setProperty("--jqx-table-row-height", l._rowHeight + "px"), l._refreshDataRows()) } }), 300), l.$.virtualizationContainer.scrollTop = r, o && (o.endUpdate(), l._onVerticalChange({ detail: { value: o.value } }, !0))), delete l._doNotFireEvent; break } case "disabled": case "unfocusable": case "keyboardNavigation": l._setFocusable(), i("unfocusable", l.disabled || l.unfocusable || !l.keyboardNavigation), "disabled" === e && l._dialog && l._dialog.close(); break; case "hideSelectionColumn": l.refresh(); break; case "columnMenu": l.$.header.classList.toggle("jqx-hidden", (!l.filtering || l.filterRow || l.columnMenu) && !l.conditionalFormattingButton), l.columnMenu && (l._initialState = l.getState()), l.refresh(); break; case "editing": a ? l.$.tableContainer.removeAttribute("aria-readonly") : l.$.tableContainer.setAttribute("aria-readonly", !0); break; case "filtering": l.columnMenu || l.$.header.classList.toggle("jqx-hidden", (!a || l.filterRow) && !l.conditionalFormattingButton), a && l.filterRow ? l._createFilterRow() : !1 === a && (l.filterRow && l.$.tableContainer.querySelector(".jqx-table-filter-row").remove(), (l._filterInfo.query || l._filterInfo.rowFilters || l._filterInfo.appliedFilters) && l.clearFilters()), l.virtualization && l.refresh(); break; case "filterRow": if (l.$.header.classList.toggle("jqx-hidden", (!l.filtering || a) && !l.conditionalFormattingButton), !l.filtering) return; a ? l._createFilterRow() : (l.$.tableContainer.querySelector(".jqx-table-filter-row").remove(), l._filterInfo.rowFilters && l.clearFilters()); break; case "filterTemplate": l._applyFilterTemplate(); break; case "footerRow": { const e = l.$.tableContainer.querySelector("tfoot"); e && e.remove(), a && l._createFooterRow(); break } case "formulas": a ? l._formulaParser = new JQX.FormulaParser(l) : delete l._formulaParser, l._updateCellsWithFormulas(!0); break; case "freezeHeader": case "freezeFooter": l.virtualization && (l[e] = !0); break; case "grouping": a || l.clearGrouping(); break; case "headerRow": { const e = Array.from(l.$.tableContainer.firstElementChild.children); for (let t = 1; t < e.length; t++)e[t].remove(); a && l._createCustomHeaderRow(); break } case "locale": case "messages": { const e = l._dialog; if (l._localize(), l.filterRow) { const e = l.$.tableContainer.querySelector(".jqx-table-filter-row"), t = Array.from(e.querySelectorAll("jqx-input.string-filter")), a = Array.from(e.querySelectorAll("jqx-input.num-date-filter")), i = Array.from(e.querySelectorAll("jqx-button")); t.concat(a).forEach((e => e.title = l.localize("filterCondition"))), t.forEach((e => { e.dataSource = l._filterInfo.stringConditions, void 0 === e.$.input.dataValue ? e.value = l.localize("CONTAINS") : e.value = l._filterInfo.stringConditions.find((t => t.value === e.$.input.dataValue)).label })), a.forEach((e => { e.dataSource = l._filterInfo.numberAndDateConditions, void 0 === e.$.input.dataValue ? e.value = l.localize("EQUAL") : e.value = l._filterInfo.numberAndDateConditions.find((t => t.value === e.$.input.dataValue)).label })), i.forEach((e => e.title = l.localize("clearFilter"))) } e && (e.$.footer.firstElementChild.innerHTML = l.localize("ok"), e.$.footer.children[1].innerHTML = l.localize("cancel"), e.classList.contains("conditional-formatting") ? e.label = l.localize("conditionalFormatting") : e.classList.contains("drill-down") && (e.label = l.localize("details"))), l._formattingPanel && (l._formattingPanel.messages = l.messages, l._formattingPanel.locale = l.locale), Array.from(l.$.tableContainer.querySelectorAll(".group-label-value>.placeholder")).forEach((e => { e.textContent = l.localize("EMPTY") })); break } case "pageIndex": l.pageIndex = Math.max(Math.min(Math.round(a), l.$.pager.pagesCount - 1), 0), l.paging && l.pageIndex !== t && (l._fullRefresh("pageIndexChange"), l.$.fireEvent("page", { action: "pageIndexChange" })); break; case "pageSize": l.paging && (l._fullRefresh("pageSizeChange"), l.$.fireEvent("page", { action: "pageSizeChange" })); break; case "paging": if (!1 === a) { if (l.dataSource.virtualDataSource) return void (l.paging = !0); if (1 === l.$.pager.pagesCount) return } l._fullRefresh(); break; case "rowDetailTemplate": l._fullRefresh(); break; case "rightToLeft": Array.from(l.$.tableContainer.querySelectorAll(".freeze-near, .freeze-far")).forEach((e => { e.style.left = null, e.style.right = null, e.style.zIndex = null })), l._handleFrozenColumnPositions(), i("rightToLeft", a); break; case "selected": { const e = l._selectedIds.slice(0); l._clearSelection(), l._changeSelectionOfMultiple(a, "select", "programmatic", e); break } case "selection": if (l.filterRow) { const e = l.$.tableContainer.querySelector(".jqx-table-filter-row"); a ? e.insertBefore(document.createElement("td"), e.firstElementChild) : e.firstElementChild.remove() } l.refresh(), a ? (l.$.tableContainer.setAttribute("aria-multiselectable", !0), l._updateSelectAllState()) : l.$.tableContainer.removeAttribute("aria-multiselectable"); break; case "selectionMode": { l.$.tableContainer.classList.remove("jqx-unselectable"); const e = l.querySelector(".jqx-table-select-all"); e && ("one" === l.selectionMode ? e.classList.add("jqx-visibility-hidden") : e.classList.remove("jqx-visibility-hidden")); break } case "sortMode": "none" === a && l.clearSort(); break; case "tooltip": if (!a) { const e = l.$.tableContainer.querySelector(".tooltip"); e && (e.classList.remove("tooltip"), e.removeAttribute("title")) } break; case "virtualization": l.virtualization = t } else l._initDataSourceFromHTML(); function i(e, t) { const a = []; l._dialog && a.push(l._dialog, l._dialog.$.footer.firstElementChild, l._dialog.$.footer.children[1]), l._formattingPanel && a.push(l._formattingPanel), a.forEach((a => a[e] = t)) } } _createElement() { const e = this; if (e._expandedRowDetailIds = [], e._editors = {}, isNaN(parseFloat(e.columnMinWidth)) && (e.columnMinWidth = "50px"), e.columnGroups && (e.columnResize = !1, e.columnSizeMode = "default"), e.formulas && (e._formulaParser = new JQX.FormulaParser(e)), e._setupPagingAndFiltering(), e._localize(), e._selectedIds = e.selected.slice(0), "one" === e.selectionMode) { e._selectedIds = e._selectedIds.slice(0, 1); const t = e.querySelector(".jqx-table-select-all"); t && t.classList.add("jqx-visibility-hidden") } e._dataBind(), e.editing || e.$.tableContainer.setAttribute("aria-readonly", !0), e.autoLoadState && e.loadState(), e.autoSaveState && window.localStorage.setItem("jqxTable" + e.id, e._stringifyState()) } _initColumns(e) { const t = this, a = t.columns; if (!t.isRendered && t.dataSource.length > 0 && (!a || Array.isArray(a) && 0 === a.length) && (t.columns = t.dataSource.dataFields.map((e => ({ label: e.name, dataField: e.name, dataType: e.dataType })))), t._filterInfo.stringDataFields = [], t._columns = [], t.columnByDataField = {}, t.columns.canNotify = !1, t.columns instanceof JQX.ObservableArray) { const e = []; for (let a = 0; a < t.columns.length; a++) { let l = t.columns[a], i = {}; for (let e in l) i[e] = l[e]; e.push(i) } t.columns = e } for (let a = 0; a < t.columns.length; a++) { let l = t.columns[a]; if ("string" == typeof l && t.dataSource.dataFields) { const e = t.dataSource.dataFields.find((e => { if (e.name === l) return e })); l = { label: l, dataField: l, dataType: e && e.dataType || "string" } } void 0 === l.label && void 0 === l.dataField || (void 0 === l.label && (l.label = l.dataField), void 0 === l.dataField && (l.dataField = l.label), l.dataType || (l.dataType = "string"), "string" !== l.dataType && "number" !== l.dataType || !1 === l.allowFilter || !l.dataField || t._filterInfo.stringDataFields.push(l.dataField), l.visible = void 0 === l.visible || !!l.visible, l.allowResize = void 0 === l.allowResize || !!l.allowResize, t._transformColumnDataField(l, e), l.thHierarchy = [], t._columns.push(l), t.columnByDataField[l.dataField] = l) } if ("default" === t.columnSizeMode && t.selection) { let e = !0; for (let a = 0; a < t._columns.length; a++) { const l = t._columns[a]; if (!l.width) { e = !1, l._isResponsive = !0, l._isFillRemainingWidth = !0; break } } (!t.columnResizeNormalize && e || t.columnResizeNormalize && e) && t._columns.push({ dataField: "", label: "", visible: !0, allowResize: !1, allowFilter: !1, allowSort: !1 }) } else if ("default" === t.columnSizeMode && !t.selection && t.columnResizeNormalize) { let e = !0; for (let a = 0; a < t._columns.length; a++) { const l = t._columns[a]; if (!l.width) { e = !1, l._isResponsive = !0, l._isFillRemainingWidth = !0; break } } e && t._columns.push({ dataField: "", label: "", visible: !0, allowResize: !1, allowFilter: !1, allowSort: !1 }) } t.columns = new JQX.ObservableArray(t._columns), t._updateState("columns"), t.columns.notify((function (e) { if (!t.columns.canNotify) return; if ("length" === e.action || "update" === e.action && -1 !== ["allowGroup", "allowSort", "sortOrder"].indexOf(e.propertyName)) return void t._updateState("columns"); const a = e.target; if ("update" === e.action) { const l = a.dataField; if ("allowEdit" === e.propertyName) return Array.from(t.$.tableContainer.querySelectorAll(`td[data-field="${l}"]`)).forEach((t => { t.classList.toggle("no-edit", !1 === e.newValue), !1 === e.newValue ? t.setAttribute("aria-readonly", !0) : t.removeAttribute("aria-readonly") })), void t._updateState("columns"); if ("allowFilter" === e.propertyName) return "string" !== a.dataType && "number" !== a.dataType || !l || (!1 === e.newValue ? t._filterInfo.stringDataFields = t._filterInfo.stringDataFields.filter((e => e !== l)) : !1 === e.oldValue && t._filterInfo.stringDataFields.push(l)), t.filterRow && t.$.tableContainer.querySelector(`.jqx-table-filter-row td[filter-for="${l}"]`).classList.toggle("no-filter", !1 === e.newValue), "jqx-pivot-table" === t.nodeName.toLowerCase() && t._columnNotify(e), void t._updateState("columns"); if ("transform" === e.propertyName) a.sortOrder && t.sortBy(a.dataField, null), t._transformColumnDataField(a, !0); else { if (-1 !== ["allowPivot", "allowRowGroup", "pivot", "rowGroup", "summary"].indexOf(e.propertyName) && "jqx-pivot-table" === t.nodeName.toLowerCase()) return t._columnNotify(e), void t._updateState("columns"); if ("visible" === e.propertyName) { const e = t._expandedRowDetailIds, a = t.$.tableContainer; let l; return t.filterRow && (l = a.querySelector(".jqx-table-filter-row"), l && l.remove()), e && e.length && !t._columns.some((e => e.visible)) && e.forEach((e => t._toggleRowDetail(a.querySelector(`[row-id="${e}"]`), e))), t.$.tableContainer.setAttribute("aria-colcount", t._columns.filter((e => e.visible)).length + +t.selection), t.refresh(), void t._updateState("columns") } } } "add" === e.action && (t.columns[t.columns.length - 1].visible = !0), t._columns = t.columns._array, t.columnByDataField = [], t._columns.forEach((e => { t.columnByDataField[e.dataField] = e, e.originalDataField && (t.columnByDataField[e.originalDataField] = e) })), t.refresh(!0), t._updateState("columns") })), t.$.tableContainer.setAttribute("aria-colcount", t._columns.filter((e => e.visible)).length + +t.selection) } _transformColumnDataField(e, t) { const a = this; if ("function" == typeof e.transform) { if (!a.isRendered || t) { const l = a.dataSource, i = a.columns.canNotify; i && (a.columns.canNotify = !1), t && e.originalDataField && (delete a.columnByDataField[e.dataField], e.dataField = e.originalDataField); const n = e.dataField, r = n + "Transformed"; a.columnByDataField[n] = e, e.originalDataField = n, e.dataField = r, l.canNotify = !1; for (let t = 0; t < l.length; t++) { const a = l[t]; a[r] = e.transform(a[n]) } i && (a.columns.canNotify = !0), l.canNotify = !0 } } else e.transform && (e.transform = void 0) } _initRows() { const e = this, t = e.dataSource, a = e.context; if (e.context = e, e.rows = [], e.rowById = [], t.virtualDataSource) return e._initRowsVirtualDataSource(), void (e.context = a); if (t.boundHierarchy) return e.$.tableContainer.setAttribute("role", "treegrid"), e.setAttribute("hierarchy", ""), e._initHierarchicalRows(), void (e.context = a); e.$.tableContainer.setAttribute("role", "grid"); let l = 0, i = t.length, n = !1; if (e.removeAttribute("hierarchy"), e.paging) { const a = e.pageSize; if (e._filterInfo.query || e._filterInfo.rowFilters || e._filterInfo.appliedFilters) { let e = 0; for (let a = 0; a < i; a++)!1 !== t[a].$.filtered && e++; i = e, n = !0 } const r = Math.max(Math.ceil(i / a), 1); e.$.pager.pagesCount = r, e.$.pager.totalRecords = i, e.pageIndex = Math.max(Math.min(e.pageIndex, r - 1), 0), l = e.pageIndex * a, i = l + a } if (n) { let a = -1; for (let n = 0; n < t.length; n++) { const r = t[n]; if (r && !1 !== r.$.filtered) { if (a++, a < l) continue; if (a >= i) break; e._addNewRow(r, n) } } } else for (let a = l; a < i; a++) { const l = t[a]; l && !1 !== l.$.filtered && e._addNewRow(l, a) } e._observeRows(), e.context = a } _initRowsVirtualDataSource() { const e = this, t = e.dataSource; if (t.boundHierarchy) e.$.tableContainer.setAttribute("role", "treegrid"), e.setAttribute("hierarchy", ""), e._processHierarchy(t.boundHierarchy, 0, t.boundHierarchy.length); else for (let a = 0; a < t._dataSource.length; a++) { const l = t[a]; l && !1 !== l.$.filtered && e._addNewRow(l, a) } if (e.paging) { const a = t.length, l = e.pageSize, i = Math.max(Math.ceil(a / l), 1), n = e.$.pager.pagesCount; if (e.$.pager.pagesCount = i, e.$.pager.totalRecords = a, e.pageIndex = Math.max(Math.min(e.pageIndex, i - 1), 0), null !== n && n !== i) return void e._fullRefresh() } e._observeRows() } _initHierarchicalRows() { const e = this, t = e.dataSource.boundHierarchy; let a = 0, l = t.length, i = !1; if (e.paging) { const n = e.pageSize; if (e._filterInfo.query || e._filterInfo.rowFilters || e._filterInfo.appliedFilters) { let e = 0; for (let a = 0; a < l; a++)!1 !== t[a].$.filtered && e++; l = e, i = !0 } const r = Math.max(Math.ceil(l / n), 1); e.$.pager.pagesCount = r, e.$.pager.totalRecords = l, e.pageIndex = Math.max(Math.min(e.pageIndex, r - 1), 0), a = e.pageIndex * n, l = a + n } if (i) { let i = -1; for (let n = 0; n < t.length; n++) { const r = t[n]; if (r && !1 !== r.$.filtered) { if (i++, i < a) continue; if (i >= l) break; e._processHierarchy(t, n, n + 1) } } } else e._processHierarchy(t, a, l); e._observeRows() } _processHierarchy(e, t, a) { const l = this; for (let i = t; i < a; i++) { const t = e[i]; if (!t) break; t.leaf ? t && !1 !== t.$.filtered && l._addNewRow(t, i) : (l._expandedIdsAlt[t.$.id] ? t.expanded = !0 : void 0 === t.expanded && (t.expanded = !1), !1 !== t.$.filtered && l._addNewRow(t, i), t.children.length && !1 !== t.$.filtered && l._processHierarchy(t.children, 0, t.children.length)) } } _observeRows() { const e = this; e.rows = new JQX.ObservableArray(e.rows), e.rows.notify((function (t) { if (!e.rows.canNotify || t.path || !e.dataSource) return; e.rows.canNotify = !1; const a = t.action, l = e._selectedIds.slice(0); switch (e.dataSource.canNotify = !1, a) { case "add": { const a = {}; e.dataSource.dataFields.forEach((e => a[e.name] = "")); const l = Object.assign(a, e.rows[t.index]); e.dataSource.add(e.rows[t.index]), e._editing = { row: { data: l } }; break } case "update": e.dataSource.update(t.index, e.rows[t.index]), e._editing = { row: { data: e.rows[t.index] } }; break; case "remove": { const a = t.removed[0].data, l = a.$.id, i = e._selectedIds.indexOf(l); e.dataSource.removeAt(a.$.index), delete e.rowById[l], -1 !== i && e._selectedIds.splice(i, 1), e._editing = { row: t.removed[0] }, e._updateSelectAllState(); break } }e._fullRefresh(a, l, a), delete e._editing, e.dataSource.canNotify = !0, e.rows.canNotify = !0 })) } beginUpdate() { const e = this; if ("jqx-table" !== e.nodeName.toLowerCase()) return; e.__updating = !0, e.__updatedRows = !1; const t = window.__karma__ || window.karma; document.hidden && !t || (e._dirtyHierarchy = !1, e.__updatingOldSelectedIds = e._selectedIds.slice(0), e.__updatingSortColumns = e._sortColumns, e.dataSource && e.dataSource.clearSort && e.dataSource.clearSort()) } endUpdate(e, t) { const a = this; if ("jqx-table" !== a.nodeName.toLowerCase()) return; a.__updating = !1; const l = window.__karma__ || window.karma; if (document.hidden && !l) return; if (!1 === e) return; l && (t = !0); const i = () => { const t = a.__updatingOldSelectedIds ? a.__updatingOldSelectedIds : a._selectedIds.slice(0); a.__updatingOldSelectedIds && delete a.__updatingOldSelectedIds, a._dirtyHierarchy && a.dataSource.refreshHierarchy(); const l = a._sortColumns, i = a._filterInfo, n = a.dataSource.groupBy._array.slice(0), r = void 0 !== a.$.virtualizationContainer && a.$.virtualizationContainer.$ ? a.$.virtualizationContainer.$.verticalScrollBar : null; if (r && r.beginUpdate(), a._doNotFireEvent = !0, a._fullRefresh("update", t, "update"), n.length > 0) { let e = a._getExpandedGroups(a.dataSource.boundHierarchy); a._dirtyHierarchy && (e = a._dirtyHierarchy), n.forEach((e => a.addGroup(e))), a._restoreExpandedGroups(e) } i.inputFilters ? a._filterByAll(i.query) : i.rowFilters ? a._applyRowFilters() : i.appliedFilters && a._refreshFilters(), l && (a.__updatingSortColumns && JSON.stringify(a.__updatingSortColumns) !== JSON.stringify(l) || 0 === n.length || !0 === e || !1 === a.__updatedRows) && (a._sortColumns = [], l.forEach((e => { a.columnByDataField[e.dataField].sortOrder = null, a.sortBy(e.dataField, e.direction) }))), r && (r.endUpdate(), a._onVerticalChange({ detail: { value: r.value } }, !0), a._dirtyHierarchy && (a._rowsInDOM.length < a.rows.length && 0 === a.$.virtualizationContainer.$.verticalScrollBar.max && a._refreshDataRows(), a._dirtyHierarchy = !1)), a.onUpdateComplete && a.onUpdateComplete(a.rows), delete a._doNotFireEvent }; if (a._verticalScrollTimer) return a._scheduleUpdate && clearInterval(a._scheduleUpdate), void (a._scheduleUpdate = setInterval((function () { a._verticalScrollTimer || (i(), clearInterval(a._scheduleUpdate), delete a._scheduleUpdate) }), 100)); t ? i() : requestAnimationFrame((() => { i() })) } _addNewRow(e, t) { const a = this, l = e.$.id, i = new JQX.Observable({ data: e, boundIndex: t }); -1 !== a._disabledSelection.indexOf(l) && (i.allowSelect = !1), i.canNotify = !0, i.notify((function (t) { if (a._editing || a._hierarchyChange) return; const i = a.selection; if ("allowSelect" === t.propertyName) { const n = a._disabledSelection.indexOf(l); if (a._hierarchyChange = !0, t.newValue || -1 !== n) t.newValue && -1 !== n && function e(t) { const l = t.$.id, n = a.$.tableContainer.querySelector(`[row-id="${l}"]:not([unused])`), r = a.rowById[l]; if (t.parent && -1 !== a._disabledSelection.indexOf(t.parent.$.id)) r.allowSelect = !1; else if (a._disabledSelection.splice(a._disabledSelection.indexOf(l), 1), n && (n.classList.remove("disable-select"), i && (n.setAttribute("aria-selected", !1), n.firstElementChild.firstElementChild.removeAttribute("aria-disabled"))), r && (r.allowSelect = !0), t.children) for (let a = 0; a < t.children.length; a++)e(t.children[a]) }(e); else { const t = []; !function e(t, l) { const n = t.$.id, r = a.$.tableContainer.querySelector(`[row-id="${n}"]:not([unused])`), o = a.rowById[n]; if (l.push(n), r && (r.removeAttribute("aria-selected"), r.classList.add("disable-select"), i && r.firstElementChild.firstElementChild.setAttribute("aria-disabled", !0)), o && (o.allowSelect = !1), t.children) for (let a = 0; a < t.children.length; a++)e(t.children[a], l) }(e, t), a._disabledSelection = a._disabledSelection.concat(t), a.unselect(t) } delete a._hierarchyChange } })), a.rowById[l] = i, a.rows.push(i) } refresh() { const e = this; if (e.__updating) return; const t = e._columns.filter((e => e.visible)), a = e.$.tableContainer, l = a.querySelector(".jqx-table-filter-row"), i = a.querySelector("tfoot"), n = document.createElement("tbody"), r = e._getFractionOfMax(), o = e.virtualization ? e.$.virtualizationContainer : e.$.tableContainer.parentElement, s = { top: o.scrollTop, left: o.scrollLeft }; for (e.columns.canNotify = !1; a.childNodes.length > 0;)a.childNodes[0].remove(); e._createTableHeader(), e.isRendered || !e.onInit || e._loadingState || e.onInit(), e._createCustomHeaderRow(), e._createFooterRow(i), e._createDataRows(n), e._createFilterRow(l); const d = a.querySelectorAll("th[data-field]"); for (let a = 0; a < t.length; a++) { const l = t[a]; l.headerCellElement = d[a], l.headerCellElement && (l.headerCellElement.onclick = function () { const t = this.dataField; e.$.fireEvent("columnClick", { dataField: t }), e.closeColumnMenu(), "none" === e.sortMode || !1 === l.allowSort || e._preventClickSort || (e._addSortIconContainer(this), e._sortOnClick = !0, this.headerCellElement.sortIconContainerElement.classList.contains("asc") ? e.sortBy(t, "desc") : this.headerCellElement.sortIconContainerElement.classList.contains("desc") ? e.sortBy(t, null) : e.sortBy(t, "asc"), e._sortOnClick = !1) }.bind(l)) } if (e._sortColumns && e._sortColumns.length > 0) for (let t = 0; t < e._sortColumns.length; t++) { const a = e._sortColumns[t], l = e.columnByDataField[a.dataField]; e._addSortIconContainer(l, a.direction, t + 1) } e._handleAutoSizeMode(), e._handleFrozenColumnPositions(), e._refreshHorizontalScrollbar(), e.isRendered && (e.selection && e._updateSelectAllState(), e._setFractionOfMax(r)), [o.scrollTop, o.scrollLeft] = [s.top, s.left], e.columns.canNotify = !0 } _createTableHeader() { const e = this, t = e.selection, a = document.createElement("thead"), l = e._columns.filter((e => e.visible)), i = e._getColumnHeaderStructure(), n = window.innerWidth, r = {}; for (let o = 0; o < i; o++) { const s = document.createElement("tr"), d = document.createDocumentFragment(); t && (s.innerHTML = o < i - 1 ? '<th class="empty"></th>' : '<th class="jqx-table-select-all freeze-near" scope="col" aria-colindex="1"><div role="checkbox" aria-checked="false" aria-label="Toggle selection of all rows"></div></th>', e.virtualization && s.querySelector("th").classList.add("sticky")), o < i - 1 && s.classList.add("column-groups-header"); for (let a = 0; a < l.length; a++) { const s = l[a]; if (0 === o && (s.width && isNaN(parseFloat(s.width)) && delete s.width, s.responsivePriority && ("number" != typeof s.responsivePriority && (s.responsivePriority = 1), s.responsivePriority = Math.max(Math.min(Math.round(s.responsivePriority), 5), 1), i > 1 && (r[a] = e._isColumnHidden(s.responsivePriority, n)))), o < i - 1) { if (r[a]) continue; const t = l[a], i = t.headerStructure[o]; if (a > 0) { let r = a - 1, s = l[r]; for (; s && e._isColumnHidden(s.responsivePriority, n);)r--, s = l[r]; if (s && i === s.headerStructure[o] && e._areColumnsWithSameFreezeSettings(t, s)) continue } const s = document.createElement("th"); if (s.includes = [t], a < l.length - 1) { let r = 1, d = a + 1, c = l[d]; for (; c;) { if (!e._isColumnHidden(c.responsivePriority, n)) { if (i !== c.headerStructure[o] || !e._areColumnsWithSameFreezeSettings(t, c)) break; r++, s.includes.push(c) } d++, c = l[d] } s.colSpan = r } 0 !== o && t.headerStructure[o - 1] === i || (s.textContent = i), s.includes.forEach((e => e.thHierarchy[o] = s)), s.classList.add("column-header"), t.freeze && s.classList.add("freeze-" + ("far" === t.freeze ? "far" : "near")), e.virtualization && s.classList.add("sticky"), d.appendChild(s) } else e._setupColumnHeaderCell(t, d, a, s) } s.appendChild(d), a.appendChild(s), e._tableHeader = a } if (e.$.tableContainer.appendChild(a), "default" === e.columnSizeMode) { for (let t = 0; t < e.columns.length; t++) { const l = e.columns[t]; if (!l.width) { const t = a.querySelector('[data-field="' + l.dataField + '"]'); t && t.offsetWidth < 5 && (t.style.width = parseInt(l.minWidth || e.columnMinWidth) + "px") } } if (t) { const t = e.columns.filter((e => e.visible)); if (1 === t.length) { const e = t[0], l = a.querySelector('[data-field="' + e.dataField + '"]'); l && (l.style.width = "") } } } } _getColumnHeaderStructure() { const e = this._columns, t = this.columnGroups; if (!t) return 1; let a = 1; for (const l of e) { let e = l.columnGroup; if (l.headerStructure = [], e && (e = t.find((t => t.name === e)), e)) for (l.headerStructure.push(e.label || e.name); e.parentGroup && (e = t.find((t => t.name === e.parentGroup)), e);)l.headerStructure.unshift(e.label || e.name); l.headerStructure.push(l.label), a = Math.max(a, l.headerStructure.length) } for (const t of e) { const e = t.headerStructure, l = e[0]; for (; e.length < a;)e.unshift(l) } return a } _isColumnHidden(e, t) { return !(!e || 1 === e || t > 1280) && (t <= 640 && 2 === e || t <= 800 && 3 === e || t <= 1024 && 4 === e || t <= 1280 && 5 === e) } _areColumnsWithSameFreezeSettings(e, t) { return !e.freeze && !t.freeze || e.freeze === t.freeze || !0 === e.freeze && "near" === t.freeze || "near" === e.freeze && !0 === t.freeze } getColumnProperty(e, t) { const a = this, l = a.columnByDataField[e]; return l ? "width" === t ? l.width ? a._getColumnWidth(l.width, !0, l) : l._isResponsive && l._manualPercentageWidth ? a._getColumnWidth(l._manualPercentageWidth + "%", !0, l) : a._getColumnWidth(l._manualWidth, !0, l) : l[t] : null } setColumnProperty(e, t, a) { const l = this; if (!l.columnByDataField[e]) return null; l.columns.forEach(((i, n) => { i.dataField === e && (l.columns[n][t] = a) })) } _getTableRemainingWidth() { const e = this; let t = e.offsetWidth; if (e.selection) { const a = e.$.tableContainer.querySelector(".jqx-table-select-all"); a && (t = e.offsetWidth - a.offsetWidth), "" === e.columns[e.columns.length - 1].dataField && (t -= parseInt(e.columnMinWidth)) } e.virtualization && e.$.virtualizationContainer && e.$.virtualizationContainer.computedVerticalScrollBarVisibility && (t -= 20); let a = 0; for (let t = 0; t < e.columns.length; t++) { const l = e.columns[t]; l.visible && l.width && !("" + l.width).endsWith("%") && (a += e._getColumnWidth(l.width)) } return t -= a, t } _getColumnWidth(e, t, a) { const l = this, i = parseFloat(e); if ((e = (e + "").trim()).endsWith("%")) { let e = l.offsetWidth; if (l.selection) { const t = l.$.tableContainer.querySelector(".jqx-table-select-all"); t && (e = l.offsetWidth - t.offsetWidth), "" === l.columns[l.columns.length - 1].dataField && (e -= parseInt(l.columnMinWidth)) } l.virtualization && l.$.virtualizationContainer && l.$.virtualizationContainer.computedVerticalScrollBarVisibility && (e -= 20); let n = 0; for (let e = 0; e < l.columns.length; e++) { const t = l.columns[e]; t.visible && t.width && !("" + t.width).endsWith("%") && (n += l._getColumnWidth(t.width)) } e -= n; const r = a && a.minWidth || l._getNumericMinWidth(), o = t ? i + "%" : e * (i / 100); return r > o ? r : o } return isNaN(i) ? "auto" : t ? i + "px" : i } _setupColumnHeaderCell(e, t, a, l) { const i = this, n = document.createElement("th"); if (n.setAttribute("aria-colindex", a + 1 + +e), l.width) { let e = l.width; "number" == typeof e && l.minWidth && (e = Math.max(e, l.minWidth)), n.style.width = i._getColumnWidth(e, !0, l) } else l._manualWidth && (l._isResponsive ? n.style.width = l._manualPercentageWidth + "%" : n.style.width = l._manualWidth + "px"); 1 !== i._columns.length && l.allowResize || n.setAttribute("locked", ""), l.freeze && n.classList.add("freeze-" + ("far" === l.freeze ? "far" : "near")), l.responsivePriority && n.classList.add("priority-" + l.responsivePriority), i.virtualization && n.classList.add("sticky"), n.setAttribute("data-field", l.dataField); let r = l.label; if ((/<.+?>/.test(r) || /<./.test(r)) && r.replace && ("all" === i.dataSourceSettings.sanitizeHTML ? r = r.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, """) : "blackList" === i.dataSourceSettings.sanitizeHTML && (r = window.JQX.Utilities.Core.sanitizeHTML(r))), n.innerHTML = `<div class="wrapper" role="presentation"><div class="label">${r}</div></div>`, i.columnMenu) { const e = document.createElement("div"); e.classList.add("column-menu"), e.setAttribute("aria-hidden", !0), n.firstElementChild.appendChild(e), e.onclick = e => { i.activeColumnMenu && i.activeColumnMenu.dataField === l.dataField ? i.closeColumnMenu() : i.openColumnMenu(l.dataField), e.preventDefault(), e.stopPropagation() } } i.onColumnRender && i.onColumnRender(l.dataField, n), t.appendChild(n) } _refreshDataRows() { const e = this, t = window.scrollY, a = window.scrollX, l = e.$.tableContainer.children[1], i = Array.from(l.querySelectorAll("tr:not(.jqx-table-filter-row)")); if (e._clearCachedTemplates(), e.filterRow || e.footerRow || e.headerRow) for (let e = 0; e < i.length; e++)i[e].remove(); else l.innerHTML = ""; e._createDataRows(l), e._handleAutoSizeMode(), e._handleFrozenColumnPositions(), e._refreshHorizontalScrollbar(), (a || t) && window.scroll(a, t) } _createDataRows(e) { const t = this; if (t.virtualization) return void t._createVirtualDataRows(e); const a = t.rowDetailTemplate, l = t.selection, i = document.createDocumentFragment(), n = t.hasAttribute("hierarchy"); for (let e = 0; e < t.rows.length; e++) { const r = t.rows[e], o = r.data; o.groupDataField ? t._createGroupHeader(o, i) : t._createDataRow(r, i, { hierarchical: n, rowDetailTemplate: a, selection: l, virtualization: !1 }) } if (i.appendChild(t._createLastRow()), e.appendChild(i), t._updateState("expanded"), e.parentElement || t.$.tableContainer.insertBefore(e, t.$.tableContainer.querySelector("tfoot")), t.getRootNode().activeElement === t.$.tableContainer && t._tableContainerFocusHandler(), t._templateTags.length) { const e = t.querySelectorAll("tr"); for (let a = 0; a < t._templateTags.length; a++) { const l = t._templateTags[a], i = l.index, n = l.dataField, r = l.td; if (e[i]) { const t = e[i].querySelector('[data-field="' + n + '"]'), a = [...t.querySelectorAll("jqx-button"), ...t.querySelectorAll("button"), ...t.querySelectorAll("a"), ...t.querySelectorAll("span")], l = [...r.querySelectorAll("jqx-button"), ...r.querySelectorAll("button"), ...r.querySelectorAll("a"), ...r.querySelectorAll("span")]; for (let e = 0; e < a.length; e++)"button" === a[e].nodeName.toLowerCase() && a[e].classList.contains("jqx-button") || (a[e].onclick = () => { l[e].click() }) } } } } _createDataRow(e, t, a) { const l = this, i = l._columns.filter((e => e.visible)), n = e.data, r = n.$.id, o = document.createElement("tr"), s = { row: o, detail: null }; let d = 0; o.setAttribute("aria-rowindex", n.$.index + 1), l._processAndRenderSelection(n, o, a.hierarchical), a.selection && d++; for (let t = 0; t < i.length; t++) { const s = document.createElement("td"), c = i[t]; s.setAttribute("data-field", c.dataField), s.setAttribute("aria-colindex", t + 1 + +a.selection); let u, f = l._formatCellValue(e, c, s); if (c.freeze && s.classList.add("freeze-" + ("far" === c.freeze ? "far" : "near")), c.responsivePriority && s.classList.add("priority-" + c.responsivePriority), !1 === c.allowEdit && (s.classList.add("no-edit"), s.setAttribute("aria-readonly", !0)), 0 === t && a.hierarchical) { const e = l._areChildrenFiltered(n); n.leaf || (s.classList.add("tree-cell"), u = e), n.level && (s.classList.add("outline-level-" + Math.min(n.level, 10)), !n.leaf && e || s.classList.add("tree-leaf")) } if (a.virtualization && c.templateElement) { const e = c.templateElement + ""; u && l._setCellContent(s, f, u); const t = u ? s.children[0].children[1] : s; e.indexOf("{{value}}") >= 0 ? t.innerHTML = e.replace(/{{value}}/gi, '<div class="jqx-table-cell-template">' + n[c.dataField] + "</div>") : t.innerHTML = e, c.templateElementSettings && (l._cachedTemplates && l._cachedTemplates[c.dataField + "_" + r] && (0 === l._cachedTemplates[c.dataField + "_" + r].innerHTML.length ? delete l._cachedTemplates[c.dataField + "_" + r] : (t.innerHTML = "", t.appendChild(l._cachedTemplates[c.dataField + "_" + r]))), c.templateElementSettings(n[c.dataField], r, t.firstElementChild), l._cachedTemplates || (l._cachedTemplates = []), l._cachedTemplates[c.dataField + "_" + r] || (l._cachedTemplates[c.dataField + "_" + r] = t.firstElementChild)) } else "" === c.dataField && void 0 === f && (f = ""), l._setCellContent(s, f, u); l.onCellRender && l.onCellRender(n, c.dataField, n[c.dataField], s), l._applyConditionalFormattingToCell(s, c.dataField, n.$.index), o.appendChild(s), d++ } if (o.data = n, o.setAttribute("row-id", r), -1 !== l._disabledSelection.indexOf(r) && (o.removeAttribute("aria-selected"), o.classList.add("disable-select"), a.selection && o.firstElementChild.firstElementChild.setAttribute("aria-disabled", !0)), n.expanded ? (-1 === l._expandedIds.indexOf(r) && l._expandedIds.push(r), l._expandedIdsAlt[r] = !0, o.setAttribute("aria-expanded", !0), o.classList.add("expanded")) : !1 === n.expanded && o.setAttribute("aria-expanded", !1), n.level && l._isCollapsed(n) && (o.setAttribute("aria-hidden", !0), o.classList.add("collapsed", "jqx-hidden")), t.appendChild(o), a.rowDetailTemplate) { const i = document.createElement("tr"); if (-1 === l._expandedRowDetailIds.indexOf(r)) { if (a.virtualization) return s; i.setAttribute("aria-hidden", !0), i.classList.add("collapsed") } else s.detail = i; i.data = Object.assign(n, { detail: !0 }), i.classList.add("jqx-table-row-detail"), i.innerHTML = `<td colspan="${d}"><div class="jqx-table-detail-container">${l._applyRowDetailTemplate(e)}</div></td>`, t.appendChild(i) } return s } _processAndRenderSelection(e, t, a, l) { const i = this, n = e.$.id, r = i._getChildCheckState(e).state; if (a && i.selectionByHierarchy) { const e = i._selectedIds.indexOf(n); !0 === r && -1 === e ? i._selectedIds.push(n) : r || -1 === e || i._selectedIds.splice(e, 1) } if (!i.selection) return; let o, s; l ? (o = t.firstElementChild, s = o.firstElementChild) : (o = document.createElement("td"), s = document.createElement("div")), s.className = "selection-checkbox", s.setAttribute("role", "checkbox"), s.setAttribute("aria-checked", !!r || null === r && "mixed"), s.setAttribute("aria-label", "Toggle row selection"), o.className = "jqx-table-select-row freeze-near" + (r ? " selected" : null === r ? " indeterminate" : ""), o.setAttribute("aria-colindex", 1), l || (o.appendChild(s), t.appendChild(o)), t.setAttribute("aria-selected", !0 === r) } _applyConditionalFormattingToCell(e, t, a) { const l = this; if (l._conditionalFormatting && l._conditionalFormatting[t]) { const i = l._conditionalFormatting[t][a]; i && (e.style.backgroundColor = i.background, e.style.color = i.color, e.style.fontFamily = i.fontFamily, e.style.fontSize = i.fontSize) } } _createLastRow() { const e = document.createElement("tr"); e.setAttribute("aria-hidden", !0), e.classList.add("last-visible"); try { new ResizeObserver((t => { try { e.classList.toggle("sized", t[0].contentRect.height > 0 && null !== e.previousSibling) } catch (e) { } })).observe(e) } catch (e) { } return e } _createGroupHeader(e, t, a) { const l = this; l.columnByDataField[e.groupDataField] || console.error(l.localize("grouping")); const i = l.columnByDataField[e.groupDataField] ? l.columnByDataField[e.groupDataField].label : `${l.localize("EMPTY")}`, n = a || document.createElement("tr"), r = document.createElement("td"), o = document.createElement("div"), s = document.createElement("div"), d = document.createElement("div"); let c = e.label; if ((/<.+?>/.test(c) || /<./.test(c)) && c.replace && ("all" === l.dataSourceSettings.sanitizeHTML ? c = c.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, """) : "blackList" === l.dataSourceSettings.sanitizeHTML && (c = window.JQX.Utilities.Core.sanitizeHTML(c))), "" !== c && c || (c = `<em class="placeholder">${l.localize("EMPTY")}</em>`), n.removeAttribute("aria-rowindex"), n.data = e, s.classList.add("hierarchy-arrow", "jqx-arrow", "jqx-arrow-down"), s.setAttribute("role", "button"), s.setAttribute("aria-label", "Toggle row"), d.classList.add("group-label"), d.innerHTML = `<span class="group-label-name">${i}: </span>\n <span class="group-label-value">${c}</span>\n <span class="group-label-count">(${l._getLeafCount(e)})</span>`, r.colSpan = l._columns.filter((e => e.visible)).length, r.classList.add("group-header"), e.level && (r.classList.add("outline-level-" + Math.min(e.level, 10)), l._isCollapsed(e) && (n.setAttribute("aria-hidden", !0), n.classList.add("collapsed", "jqx-hidden"))), n.setAttribute("row-id", e.$.id), n.setAttribute("role", "group"), n.setAttribute("aria-level", e.level), o.appendChild(s), o.appendChild(d), r.appendChild(o), l._processAndRenderSelection(e, n, !0), n.appendChild(r), n.setAttribute("aria-expanded", e.expanded), n.classList.toggle("expanded", e.expanded), e && e.$ && !1 === e.$.filtered && n.classList.add("jqx-hidden"), l.groupFormatFunction) { const t = { value: c, row: e.$.id, column: e.groupDataField, data: e, template: null }; l.groupFormatFunction(t), c !== t.value && (d.innerHTML = `<span class="group-label-name">${i}: </span>\n <span class="group-label-value">${t.value}</span>\n <span class="group-label-count">(${l._getLeafCount(e)})</span>`), t.template instanceof HTMLElement && (d.innerHTML = "", d.appendChild(t.template)); const a = t.template; let n = ""; if (a && a.startsWith("#")) { const e = document.querySelector(a); let t = c; if (e && e instanceof HTMLTemplateElement) { const a = e.content.cloneNode(!0), l = document.createElement("div"); l.appendChild(a), t = t.toString(), t = t.replace(/'/gi, "\\'"), t = t.replace(/"/gi, '\\"'), n = l.innerHTML.replace(/{{value}}/gi, t), n.indexOf("{{value=") >= 0 && (t ? (n = n.substring(0, n.indexOf("{{value=")) + t + n.substring(n.indexOf("}")), n = n.replace(/}/gi, ""), n = n.replace(/{/gi, "")) : (n = n.replace(/{{value=/gi, ""), n = n.replace(/}}/gi, ""))), d.innerHTML = n } } else a && "string" == typeof a && (n = a.replace(/{{value}}/gi, c), d.innerHTML = n) } const u = l.selection ? 1 : 0; for (let e = 0; e < l.columns.length; e++) { const t = document.createElement("td"), a = l.columns[e]; a.visible && (t.setAttribute("data-field", a.dataField), t.setAttribute("aria-colindex", e + 1 + u), t.classList.add("jqx-hidden"), n.appendChild(t)) } return a || t.appendChild(n), n } _getLeafCount(e) { let t = 0; return function e(a) { for (const l of a) l.leaf ? t++ : l.children && l.children.length > 0 && e(l.children) }(e.children), t } _isCollapsed(e) { let t = e.parent; for (; t;) { if (!t.expanded) return !0; t = t.parent } return !1 } _areChildrenFiltered(e) { if (!e.leaf) { if (0 === e.children.length && this.dataSource.virtualDataSource) return !0; for (let t = 0; t < e.children.length; t++)if (!1 !== e.children[t].$.filtered) return !0; return !1 } } _applyRowDetailTemplate(e) { const t = this, a = t.dataSource.dataFields; let l = t.rowDetailTemplate; for (let i = 0; i < a.length; i++) { const n = a[i].name, r = new RegExp(`{{${n}}}`, "g"); let o = t.columnByDataField[n] || { dataField: n }; if (r.test(l)) { let a = t._formatCellValue(e, o, document.createElement("td")); "string" != typeof a && (a = e.data[o.dataField]), l = l.replace(r, a) } } return l } _handleFrozenColumnPositions() { const e = this, t = e.rightToLeft, a = e._columns.filter((e => e.visible)); let l = [], i = [], n = 0; function r(t, l, i, r, o) { const s = a[l - n], d = [s.headerCellElement]; for (const e of s.thHierarchy) e.includes[0].dataField === s.dataField && d.push(e); Array.from(e.$.tableContainer.querySelectorAll(`td:nth-child(${l + 1})`)).concat(d).forEach((e => { e.style[t] = i + "px", o && (e.style.zIndex = 2 + r) })) } e.selection && (t ? i.push(0) : l.push(0), n = 1); for (let e = 0 + n; e < a.length + n; e++) { const r = a[e - n]; r.freeze && (!t && "far" === r.freeze || t && "far" !== r.freeze ? i.push(e) : l.push(e)) } if (l.length < 2 && i.length < 2) return; const o = []; e.selection && o.push(40); for (const e of a) { let t = e.width; t || (t = e.headerCellElement.offsetWidth), e.minWidth && (t = Math.max(e.minWidth, t)), o.push(t) } if (t) { for (let e = 0; e < l.length - 1; e++) { const t = l[e]; let a = 0; for (let e = t + 1; e < o.length; e++)-1 !== l.indexOf(e) && (a += o[e]); r("left", t, a, e, !0) } for (let e = 1; e < i.length; e++) { const t = i[e]; let a = 0; for (let e = 0; e < t; e++)-1 !== i.indexOf(e) && (a += o[e]); r("right", t, a, e, !1) } } else { for (let e = 1; e < l.length; e++) { const t = l[e]; let a = 0; for (let e = 0; e < t; e++)-1 !== l.indexOf(e) && (a += o[e]); r("left", t, a, e, !1) } for (let e = 0; e < i.length - 1; e++) { const t = i[e]; let a = 0; for (let e = t + 1; e < o.length; e++)-1 !== i.indexOf(e) && (a += o[e]); r("right", t, a, e, !0) } } } _formatCellValue(e, t, a, l) { const i = this; let n = e && e.data ? e.data.$.id : e; if (void 0 === l && (l = e.data[t.dataField]), "string" == typeof l && (l.indexOf(">") >= 0 || l.indexOf("<") >= 0) && l.replace && ("all" === i.dataSourceSettings.sanitizeHTML ? l = l.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, """) : "blackList" === i.dataSourceSettings.sanitizeHTML && (l = window.JQX.Utilities.Core.sanitizeHTML(l))), i._cellsWithFormulas) { const e = t.dataField + ":" + n; if ("string" == typeof l && /=.+/.test(l)) { const t = i._formulaParser; i._cellsWithFormulas[e] = !0, t && (l = t.parse(l.slice(1))) } else delete i._cellsWithFormulas[e] } if (t.formatFunction) { const i = { value: l, row: n, column: t.dataField, data: e.data, cell: a, template: null }; if (t.formatFunction(i), l = i.value, i.template instanceof HTMLElement) return i.template; if (null === i.template || "string" != typeof i.template) return l; const r = i.template; let o = ""; if (r.startsWith("#")) { const e = document.querySelector(r); if (e && e instanceof HTMLTemplateElement) { const t = e.content.cloneNode(!0), a = document.createElement("div"); return a.appendChild(t), l = (l = (l = l.toString()).replace(/'/gi, "\\'")).replace(/"/gi, '\\"'), o = a.innerHTML.replace(/{{value}}/gi, l), o.indexOf("{{value=") >= 0 && (l ? (o = o.substring(0, o.indexOf("{{value=")) + l + o.substring(o.indexOf("}")), o = o.replace(/}/gi, ""), o = o.replace(/{/gi, "")) : (o = o.replace(/{{value=/gi, ""), o = o.replace(/}}/gi, ""))), o } } return o = '<div class="jqx-table-cell-template">' + r.replace(/{{value}}/gi, l) + "</div>", o } return "date" === t.dataType && l instanceof Date ? l.toLocaleDateString() : l } _setCellContent(e, t, a) { if (t instanceof HTMLElement == 1) { for (; e.childNodes.length > 0;)e.childNodes[0].remove(); if (a) { const a = document.createElement("div"); a.innerHTML = '<div class="hierarchy-arrow jqx-arrow jqx-arrow-down" role="button" aria-label="Toggle row"></div><div></div>', a.children[1].appendChild(t), e.appendChild(a) } else e.appendChild(t) } else if (a) e.innerHTML = t = `<div>\n <div class="hierarchy-arrow jqx-arrow jqx-arrow-down" role="button" aria-label="Toggle row"></div>\n <div>${t}</div>\n </div>`, e._content = t; else if ("string" == typeof t && t.indexOf(">") >= 0) if (/<.+?>/.test(t) || /&\S+;/.test(t)) { if (e._content === t) return; e.innerHTML = t, e._content = t } else e.textContent !== t && (e.textContent = t); else "html" === this.dataSourceSettings.sanitizeHTMLRender ? e.innerHTML !== t && ("string" == typeof t && t.indexOf(" ") >= 0 && (t = t.replaceAll(" ", " ")), void 0 === t && (t = ""), e.innerHTML = t) : e.textContent !== t && (e.textContent = t) } _dataBind(e) { const t = this; if (t._cellsWithFormulas = {}, t._templateTags = [], t.dataSource) { if (t.dataSource instanceof JQX.DataAdapter == 0) { const e = t.dataSource; if (Array.isArray(e)) { const a = t.columns; let l; if (e.length > 0) { const t = e[0]; l = []; for (let e in t) { const a = t[e]; "number" == typeof a ? l.push({ name: e, dataType: "number" }) : "boolean" == typeof a ? l.push({ name: e, dataType: "boolean" }) : a instanceof Date ? l.push({ name: e, dataType: "date" }) : a instanceof Object ? l.push({ name: e, dataType: "any" }) : l.push({ name: e, dataType: "string" }) } } a && a.length > 0 && (l = l || [], a.forEach((e => { if (e.dataType) { const t = l.find((t => t.name === e.dataField)); t ? t.dataType = e.dataType : e.map ? l.find((t => e.map.indexOf(t.name) >= 0 ? t : null)) && l.push({ name: e.dataField, map: e.map, dataType: e.dataType }) : l.push({ name: e.dataField, dataType: e.dataType }) } }))), t.dataSourceSettings.dataFields && t.dataSourceSettings.dataFields.length > 0 ? t.dataSource = new JQX.DataAdapter({ dataSource: t.dataSource, dataSourceType: t.dataSourceSettings.dataSourceType, dataFields: t.dataSourceSettings.dataFields, keyDataField: t.dataSourceSettings.keyDataField, parentDataField: t.dataSourceSettings.parentDataField, childrenDataField: t.dataSourceSettings.childrenDataField, groupBy: t.dataSourceSettings.groupBy, mapChar: t.dataSourceSettings.mapChar, root: t.dataSourceSettings.root, record: t.dataSourceSettings.record, autoGenerateColumns: t.autoGenerateColumns, id: t.dataSourceSettings.id || t.dataRowId, expandHierarchy: t.expandHierarchy, virtualDataSource: t.dataSourceSettings.virtualDataSource, virtualDataSourceOnExpand: t.dataSourceSettings.virtualDataSourceOnExpand }) : t.dataSource = new JQX.DataAdapter({ dataSource: t.dataSource, dataFields: l, id: t.dataRowId || t.dataSourceSettings.id, dataSourceType: t.dataSourceSettings.dataSourceType, keyDataField: t.dataSourceSettings.keyDataField, parentDataField: t.dataSourceSettings.parentDataField, childrenDataField: t.dataSourceSettings.childrenDataField, groupBy: t.dataSourceSettings.groupBy, mapChar: t.dataSourceSettings.mapChar, root: t.dataSourceSettings.root, record: t.dataSourceSettings.record, autoGenerateColumns: t.autoGenerateColumns, expandHierarchy: t.expandHierarchy, virtualDataSource: t.dataSourceSettings.virtualDataSource, virtualDataSourceOnExpand: t.dataSourceSettings.virtualDataSourceOnExpand }) } else t.dataSource = new JQX.DataAdapter({ dataSource: [], id: t.dataRowId, expandHierarchy: t.expandHierarchy }) } } else { if (t.dataFields = [], !t.columns || Array.isArray(t.columns) && 0 === t.columns.length) { t.columns = []; const e = t.querySelectorAll("th"); for (let a = 0; a < e.length; a++) { const l = e[a].innerHTML.trim(); let i = { label: l, dataField: l, dataType: "string" }; t.columns.push(i), t.dataFields.push(l) } } else for (let e = 0; e < t.columns.length; e++) { const a = t.columns[e]; "string" == typeof a ? t.dataFields.push(a) : "object" == typeof a && t.dataFields.push(a.dataField + (a.dataType ? ": " + a.dataType : "")) } let e = []; if (!t.rows) { const a = t.querySelectorAll("tr"); for (let l = 0; l < a.length; l++) { const i = {}, n = a[l].querySelectorAll("td"); if (n.length > 0) { for (let e = 0; e < t.columns.length; e++) { const a = t.columns[e]; i[a.dataField] = n[e].innerHTML.trim(), i[a.dataField].indexOf("<") >= 0 && t._templateTags.push({ index: l, dataField: a.dataField, td: n[e] }) } e.push(i) } } t.dataSource = new JQX.DataAdapter({ dataSource: e, expandHierarchy: t.expandHierarchy, dataFields: t.dataFields, id: t.dataRowId }) } const a = t.$.container.querySelectorAll("table"); a.length > 1 && a[a.length - 1].parentNode.removeChild(a[a.length - 1]) } t.dataSource.expandHierarchy = t.expandHierarchy, t._transformDataSource(), t._applyInitialConditionalFormatting(t.dataSource), t._initColumns(e), t._initRows(), t.dataSource.notify((function (e) { if (t.dataSource._updating) return void delete t.dataSource._updating; if (t._editing) return; const a = e.data, l = t._selectedIds.slice(0); let i = e.action; switch (t.rows.canNotify = !1, e.action) { case "add": if (a.length) for (let e = 0; e < a.length; e++)t._addNewRow(a[e], t.dataSource.length - a.length + e); else t._addNewRow(a, t.dataSource.length - 1); break; case "update": if (a.length) for (let l = 0; l < a.length; l++) { const i = e.index[l]; t.rows[i].data = a[l] } break; case "insert": t._addNewRow(a, e.index); for (let e = 0; e < t.rows.length; e++)t.rows[e].dataIndex = e; break; case "remove": case "removeLast": i = "remove", function (e) { const a = e.$.id, l = t._selectedIds.indexOf(a); delete t.rowById[a], t.rows.splice(e.$.index, 1), -1 !== l && t._selectedIds.splice(l, 1) }(a); break; case "bindingComplete": if (t.filtering && t.filterRow) { const e = t._filterInfo; e.inputFilters ? t._filterByAll(e.query) : e.rowFilters ? t._applyRowFilters() : e.appliedFilters && t._refreshFilters() } }t.rows.canNotify = !0, this.refreshHierarchy(), t._fullRefresh(void 0, l, i) })), t.refresh(), t.dataSource.virtualDataSource && (t.paging = !0, t._requestVirtualDataSource("dataBind")), t.$.tableContainer.setAttribute("aria-rowcount", t.dataSource.length) } _requestVirtualDataSource(e, t, a = null) { const l = this, i = l.pageSize, n = Math.max(l.pageIndex * i, 0), r = n + i, o = [], s = [], d = {}; let c = null; if (l.dataSource._updating = !0, l._sortColumns && (l._sortColumns.forEach(((e, t) => o[e.dataField] = { sortOrder: e.direction, sortIndex: t })), o.length = l._sortColumns.length), l._filterInfo.appliedFilters) { for (let e in l._filterInfo.appliedFilters) s[e] = l._filterInfo.appliedFilters[e]; s.length = Object.keys(l._filterInfo.appliedFilters).length, c = "and" } else { const e = l._filterInfo.inputFilters || l._filterInfo.rowFilters; e && (e.forEach((e => s[e[0]] = e[1])), s.length = e.length), c = l._filterInfo.inputFilters ? "or" : "and" } l._editing && (d.row = l._editing.row.data), l.$.loadingIndicatorContainer.classList.remove("jqx-hidden"), l.setAttribute("loading", ""), l.dataSource.onVirtualDataSourceRequested((function (i) { let n = !0; -1 !== ["add", "update", "remove"].indexOf(e) && t && (n = t(i.result)), l.$.loadingIndicatorContainer.classList.add("jqx-hidden"), l.removeAttribute("loading"), n && (a && (a.expanded = !0), l._initRows(), l._refreshDataRows()) }), { first: n, last: r, sorting: o, filtering: s, filterOperator: c, grouping: [], edit: d, row: a, action: e }) } sortBy(e, t) { const a = this, l = a.columnByDataField[e]; if (l) { if (!1 === l.allowSort) return; e = l.dataField } if (a._sortBy({ column: l, columnDataField: e, sortOrder: t, dataFields: a.dataSource.dataFields, columnByDataField: "columnByDataField" }), null === e) { const e = !0 === a._sortOnClick ? "interaction" : "programmatic"; a.$.fireEvent("sort", { columns: [], sortDataFields: [], sortOrders: [], sortDataTypes: [], type: e }) } } _sortBy(e) { const t = this, a = e.column, l = e.columnDataField, i = e.sortOrder, n = e.dataFields, r = e.columnByDataField, o = [], s = [], d = [], c = function (e) { t._addSortIconContainer(e), e.headerCellElement && (e.headerCellElement.removeAttribute("aria-sort"), e.headerCellElement.sortIconContainerElement.classList.remove("desc"), e.headerCellElement.sortIconContainerElement.classList.remove("asc")), e.sortOrder = null }, u = function () { if (t._sortColumns && t._sortColumns.length > 0) for (let e = 0; e < t._sortColumns.length; e++) { const a = t._sortColumns[e], l = t[r][a.dataField]; c(l) } t._sortColumns = [] }; if (null == a) return void (t._sortColumns && t._sortColumns.length > 0 && (u(), t._sortCallback(o, s, d), t._updateState("sorted"))); if ("none" === t.sortMode || !t.dataSource) return; if (i && a.sortOrder === i) return; let f = i || "asc"; null === i && (f = null), c(a), t._sortColumns || (t._sortColumns = []); let m = "string"; for (let e = 0; e < n.length; e++) { const t = n[e]; if (t.name === l) { m = t.dataType, "any" === m && (m = "number"); break } } let h = !0; for (let e = 0; e < t._sortColumns.length; e++) { const n = t._sortColumns[e]; if (n.dataField === l) if (h = !1, null === f && (n.direction = "desc"), "asc" === n.direction) n.direction = "desc", f = "desc"; else if ("desc" === n.direction) { t._sortColumns.splice(e, 1), c(a), f = i; break } } h && ("one" === t.sortMode && u(), t._sortColumns.push({ dataField: l, direction: f, dataType: m })), t._addSortIconContainer(a), null !== f ? (a.headerCellElement && (a.headerCellElement.sortIconContainerElement.classList.remove("asc"), a.headerCellElement.sortIconContainerElement.classList.remove("desc")), a.sortOrder = f, a.headerCellElement && ("desc" === f ? (a.headerCellElement.sortIconContainerElement.classList.add("desc"), a.headerCellElement.setAttribute("aria-sort", "descending")) : (a.headerCellElement.sortIconContainerElement.classList.add("asc"), a.headerCellElement.setAttribute("aria-sort", "ascending")))) : a.headerCellElement && (a.headerCellElement.sortIconContainerElement.classList.remove("asc"), a.headerCellElement.sortIconContainerElement.classList.remove("desc"), a.headerCellElement.removeAttribute("aria-sort")); for (let e = 0; e < t._sortColumns.length; e++) { const a = t._sortColumns[e], l = t[r][a.dataField]; o.push(a.dataField), s.push(a.direction), d.push(a.dataType), l.headerCellElement && l.headerCellElement.sortIconContainerElement.setAttribute("order", e + 1) } if (t._sortCallback(o, s, d), t._updateState("sorted"), !t._doNotFireEvent) { const e = !0 === t._sortOnClick ? "interaction" : "programmatic"; t.$.fireEvent("sort", { columns: t._sortColumns, sortDataFields: o, sortOrders: s, sortDataTypes: d, type: e }) } } _addSortIconContainer(e, t, a) { const l = e.headerCellElement; if (l && !l.sortIconContainerElement) { const e = document.createElement("div"); e.classList.add("sort-by"), e.setAttribute("aria-hidden", !0), t && e.classList.add(t), l.firstElementChild.appendChild(e), l.sortIconContainerElement = e, "asc" === t ? l.setAttribute("aria-sort", "ascending") : "desc" === t ? l.setAttribute("aria-sort", "descending") : l.removeAttribute("aria-sort"), void 0 !== a && e.setAttribute("order", a) } } _sortCallback(e, t, a) { const l = this, i = l.dataSource; if (!i.virtualDataSource) { let n = null; for (let e = 0; e < l.columns.length; e++) { const t = l.columns[e]; t.sort && (n || (n = {}), n[t.dataField] = t.sort) } i._sort(l.dataSource.boundSource, e, t, a, l.sort, n); let r = [], o = []; if (i.groupBy && i.groupBy.toArray && (r = i.groupBy.toArray().slice(0)), r.length > 0 && (o = l._getExpandedGroups(i.boundHierarchy)), i.refreshHierarchy(), r.length > 0) { const e = l._doNotFireEvent; l._doNotFireEvent = !0, l._restoreExpandedGroups(o), l._doNotFireEvent = e } } l._fullRefresh("sort") } clearSort() { this.sortBy(null) } _fullRefresh(e, t, a, l) { const i = this; if (i.__updating) return; if (i.dataSource.virtualDataSource) return void i._requestVirtualDataSource(e, l); const n = i._getFractionOfMax(); t || (t = i._selectedIds.slice(0)), t = JSON.stringify(t.sort()), i._initRows(), i._refreshDataRows(), i._setFractionOfMax(n), "filter" === e && (i._updateSelectAllState(), a || (a = "filter")), t !== JSON.stringify(i._selectedIds.slice(0).sort()) && ("filter" !== e && i._updateSelectAllState(), i._updateState("selected"), i.$.fireEvent("change", { type: a })), "string" == typeof e && -1 !== e.indexOf("page") && i._fixFrozenHeaderFirefox() } _pagerChangeHandler(e) { const t = this; (t.isInShadowDOM ? e.composedPath()[0] : e.target) === t.$.pager && (t.pageIndex = e.detail.index, t._fullRefresh("pageIndexChange"), t.$.fireEvent("page", { action: "pageIndexChange" })) } _pagerPageSizeChanged(e) { const t = this; t.pageSize = e.detail.value, t._fullRefresh("pageSizeChange"), t.$.fireEvent("page", { action: "pageSizeChange" }) } _filterInputKeyupHandler() { const e = this; clearTimeout(e._filterInputTimeout), e._filterInputTimeout = setTimeout((function () { if (e._filterInfo && e.$.filterInput.value !== e._filterInfo.query) { const t = e.context; e.context = e, e._filterByAll(e.$.filterInput.value), e.context = t } }), 500) } _filterByAll(e) { const t = this; if (t._filterInfo.query = e, "" === e) return void t.clearFilters(); const a = []; t._clearRowFilters(), delete t._filterInfo.appliedFilters, t._filterInfo.stringDataFields.forEach((t => { const l = new JQX.Utilities.FilterGroup, i = l.createFilter("string", e, "CONTAINS"); l.addFilter("or", i), a.push([t, l]) })), t.dataSource.virtualDataSource || t.dataSource._filter(a, "or"), t._filterInfo.inputFilters = a, t._fullRefresh("filter"), t._updateState("filtered"), t._doNotFireEvent || t.$.fireEvent("filter", { action: "add", filters: a }) } _setupPagingAndFiltering() { const e = this; e.$.pager.$.pageSizeSelector.classList.add("underlined"), e.$.pager.$.pageSizeSelector.dropDownAppendTo = "body", e._filterInfo = { query: "" }, e._applyFilterTemplate(), e.$.header.classList.toggle("jqx-hidden", (!e.filtering || e.filterRow || e.columnMenu) && !e.conditionalFormattingButton) } _applyFilterTemplate() { const e = this, t = e.filterTemplate; if (e.$.filterTemplateContainer.innerHTML = "", !t) return e.$.filterInput.classList.remove("jqx-hidden"), e.$.filterTemplateContainer.classList.add("jqx-hidden"), void (e.filterTemplate = null); const a = document.getElementById(t); if (a && a instanceof HTMLTemplateElement) { const t = document.importNode(a.content, !0); e.$.filterInput.classList.add("jqx-hidden"), e.$.filterTemplateContainer.classList.remove("jqx-hidden"), e.$.filterTemplateContainer.appendChild(t) } else e.filterTemplate = null, e.$.filterInput.classList.remove("jqx-hidden"), e.$.filterTemplateContainer.classList.add("jqx-hidden") } _refreshFilters(e) { const t = this, a = []; for (let e in t._filterInfo.appliedFilters) { let l = t._filterInfo.appliedFilters[e]; a.push([e, l]) } 0 !== a.length ? (t._clearFilterInput(), t._clearRowFilters(), t.dataSource.virtualDataSource || t.dataSource._filter(a, t.filterOperator), t._fullRefresh("filter"), t._updateState("filtered"), e && !t._doNotFireEvent && t.$.fireEvent("filter", { action: e, filters: a })) : t.clearFilters() } _localize() { const e = this, t = e.$.pager; t.messages[e.locale] || (t.messages[e.locale] = {}), t.messages[e.locale].pageSizeLabel = e.localize("itemsPerPage"), t.messages[e.locale].summaryPrefix = e.localize("summaryPrefix"), t.messages[e.locale].summarySuffix = "", t.$.firstButton.setAttribute("tooltip", e.localize("firstButton")), t.$.previousButton.setAttribute("tooltip", e.localize("previousButton")), t.$.nextButton.setAttribute("tooltip", e.localize("nextButton")), t.$.lastButton.setAttribute("tooltip", e.localize("lastButton")), e.$.filterInput.placeholder = e.localize("filterPlaceholder"), e.$.conditionalFormattingButton.setAttribute("tooltip", e.localize("conditionalFormatting")), e._filterInfo.stringConditions = [{ value: "EMPTY", label: e.localize("EMPTY") }, { value: "NOT_EMPTY", label: e.localize("NOT_EMPTY") }, { value: "CONTAINS", label: e.localize("CONTAINS") }, { value: "CONTAINS_CASE_SENSITIVE", label: e.localize("CONTAINS_CASE_SENSITIVE") }, { value: "DOES_NOT_CONTAIN", label: e.localize("DOES_NOT_CONTAIN") }, { value: "DOES_NOT_CONTAIN_CASE_SENSITIVE", label: e.localize("DOES_NOT_CONTAIN_CASE_SENSITIVE") }, { value: "STARTS_WITH", label: e.localize("STARTS_WITH") }, { value: "STARTS_WITH_CASE_SENSITIVE", label: e.localize("STARTS_WITH_CASE_SENSITIVE") }, { value: "ENDS_WITH", label: e.localize("ENDS_WITH") }, { value: "ENDS_WITH_CASE_SENSITIVE", label: e.localize("ENDS_WITH_CASE_SENSITIVE") }, { value: "EQUAL", label: e.localize("EQUAL") }, { value: "EQUAL_CASE_SENSITIVE", label: e.localize("EQUAL_CASE_SENSITIVE") }, { value: "NULL", label: e.localize("NULL") }, { value: "NOT_NULL", label: e.localize("NOT_NULL") }], e._filterInfo.numberAndDateConditions = [{ value: "EQUAL", label: e.localize("EQUAL") }, { value: "NOT_EQUAL", label: e.localize("NOT_EQUAL") }, { value: "LESS_THAN", label: e.localize("LESS_THAN") }, { value: "LESS_THAN_OR_EQUAL", label: e.localize("LESS_THAN_OR_EQUAL") }, { value: "GREATER_THAN", label: e.localize("GREATER_THAN") }, { value: "GREATER_THAN_OR_EQUAL", label: e.localize("GREATER_THAN_OR_EQUAL") }, { value: "NULL", label: e.localize("NULL") }, { value: "NOT_NULL", label: e.localize("NOT_NULL") }] } _createFilterRow(e) { const t = this; if (!t.filtering || !t.filterRow) return; if (e) return void t.$.tableContainer.children[1].insertBefore(e, t.$.tableContainer.children[1].firstElementChild); const a = document.createElement("tr"), l = t._columns.filter((e => e.visible)); let i = ""; a.className = "jqx-table-filter-row", t.selection && (i += '<td style="left: 0px; z-index: 99; position: sticky; background: var(--jqx-background);"></td>'); for (let e = 0; e < l.length; e++) { const a = l[e]; i += t._createFilterRowInput(a) } a.innerHTML = i, t.$.tableContainer.children[1].insertBefore(a, t.$.tableContainer.children[1].firstElementChild) } _createFilterRowInput(e) { const t = this, a = ` animation="${t.animation}" `, l = t.rightToLeft ? " right-to-left" : "", i = []; let n, r, o, s; return "string" === e.dataType ? (n = t._filterInfo.stringConditions, r = "string", o = "string-filter", s = t.localize("CONTAINS")) : (n = t._filterInfo.numberAndDateConditions, r = e.dataType, o = "num-date-filter", s = t.localize("EQUAL")), e.freeze && i.push("freeze-" + ("far" === e.freeze ? "far" : "near")), e.responsivePriority && i.push("priority-" + e.responsivePriority), !1 === e.allowFilter && i.push("no-filter"), `<td${i.length ? ' class="' + i.join(" ") + '"' : ""} filter-for="${e.dataField}">\n <div>\n <input type="${r}" class="filter-value" aria-label="Filter value" />\n <jqx-input class="${o}${a}data-source='${JSON.stringify(n)}' drop-down-button-position="right" drop-down-width="auto" readonly${l} value="${s}" title="${t.localize("filterCondition")}" aria-label="Filter condition"></jqx-input>\n <jqx-button class="jqx-hidden" title="${t.localize("clearFilter")}"${a}${l} aria-label="Clear filter"></jqx-button>\n </div>\n </td>` } _tableContainerChangeHandler(e) { const t = this, a = t.isInShadowDOM ? e.composedPath()[0] : e.target; a.classList.contains("filter-value") && ("date" === a.type || a instanceof JQX.Input && ("" !== a.previousElementSibling.value || -1 !== ["EMPTY", "NOT_EMPTY", "NULL", "NOT_NULL"].indexOf(e.detail.value))) && t._applyRowFilters(), (a.classList.contains("string-filter") || a.classList.contains("num-date-filter")) && a instanceof JQX.Input && ("" !== a.previousElementSibling.value || -1 !== ["EMPTY", "NOT_EMPTY", "NULL", "NOT_NULL"].indexOf(e.detail.value)) && t._applyRowFilters() } _tableContainerClickHandler(e) { const t = this; if (t._editing) return; const a = t.isInShadowDOM ? e.composedPath()[0] : e.target; if (!t.$.tableContainer.contains(a)) return; const l = a.closest("tbody tr[row-id], tfoot tr.grand-total"); if (l) { t.closeColumnMenu(); const i = a.closest("td"); if (a.classList.contains("hierarchy-arrow")) { const e = t.animation; return t.virtualization && (t._animation = "none"), t._hierarchyArrowClickHandler(l, i), void (t.virtualization && (t._animation = e)) } const n = l.getAttribute("row-id"); let r; n && (r = t.rowById ? t.rowById[n].data : t.rows.dataItemById[n]); const o = r ? r.$.id : void 0, s = i ? i.getAttribute("data-field") : void 0; if (!r && l.classList.contains("grand-total") && (r = l.data), void 0 !== s) { const a = {}; for (let e = 0; e < t.columns.length; e++) { const l = t.columns[e]; a[l.dataField] = r[l.dataField] } t.$.fireEvent("cellClick", { id: n, row: a, dataField: s, value: r[s], originalEvent: e }) } if (t._toggleSelection(l, r, e, a), t.editing || t.drillDown) { if (!s || i.classList.contains("no-edit")) return; clearTimeout(t._dblclickObject.timeout), t._dblclickObject.numberOfClicks++, 2 === t._dblclickObject.numberOfClicks ? (t._dblclickObject.numberOfClicks = 0, t._beginEdit({ rowElement: l, cell: i, dataField: s })) : t._dblclickObject.timeout = setTimeout((function () { t._dblclickObject.numberOfClicks = 0 }), 300) } return void (t.rowDetailTemplate && t._toggleRowDetail(l, o)) } const i = a.closest(".jqx-table-select-all"); if (i) { if ("one" === t.selectionMode) return; return void t._selectAllCheckboxClickHandler(i) } const n = a.closest(".jqx-table-filter-row jqx-button") || a.closest(".jqx-table-column-menu jqx-button"); if (n) { const e = n.parentElement.firstElementChild, a = n.parentElement.children[1]; return e.value = "", -1 !== ["EMPTY", "NOT_EMPTY", "NULL", "NOT_NULL"].indexOf(a.$.input.dataValue) && (a.value = t.localize("text" === e.type ? "CONTAINS" : "EQUAL"), delete a.$.input.dataValue), void t._applyRowFilters() } } _toggleSelection(e, t, a, l) { const i = this; if (!i.selection || "cell" === i.selectionMode || e.classList.contains("disable-select") || e.classList.contains("grand-total")) return; function n() { i._selectedIds = [], Array.from(i.$.tableContainer.querySelectorAll(".jqx-table-select-row.selected")).forEach((e => { e.parentElement.classList.contains("disable-select") || e.parentElement.setAttribute("aria-selected", !1), e.classList.remove("selected", "indeterminate"), e.firstElementChild.setAttribute("aria-checked", !1) })) } const r = t.$.id; let o = -1 !== i._selectedIds.indexOf(r); if (i._interaction = !0, "one" === i.selectionMode) { if (o) return; n(), i.select(r) } if ("many" === i.selectionMode) if (o) i.unselect(r); else { if (i._disabledSelection.length > 0 && t.children && t.children.length > 0) { let e = 0, a = 0, l = []; if (t.children.forEach((t => { const n = t.$.id; -1 === i._selectedIds.indexOf(n) ? e++ : l.push(n), -1 !== i._disabledSelection.indexOf(n) && a++ })), e === a) return i.unselect(l), void delete i._interaction } i.select(r), i._selectionStart = { data: t, element: e } } else { if (i._selectionStart && a.shiftKey) { let t, a, l; if (i.virtualization ? (t = i.rows, a = t.findIndex((e => e.data.$.id === r)), l = t.findIndex((e => e.data.$.id === i._selectionStart.data.$.id))) : (t = Array.from(i.$.tableContainer.querySelectorAll("tr[row-id]:not([unused])")), a = t.indexOf(e), l = t.indexOf(i._selectionStart.element)), a !== l) { const e = JSON.stringify(i._selectedIds.slice(0).sort()), r = Math.min(a, l), o = Math.max(a, l); n(); const s = []; for (let e = r; e <= o; e++) { const a = t[e]; s.push(a.data.$.id) } return i._changeSelectionOfMultiple(s, "select", "interaction", e), getSelection().removeAllRanges(), void delete i._interaction } if (1 === i._selectedIds.length) return void delete i._interaction } const s = !!l && (l.classList.contains("selection-checkbox") || l.classList.contains("jqx-table-select-row")); let d = !1; if (1 === i._selectedIds.length) d = !0; else if (i.hasAttribute("hierarchy") && i.selectionByHierarchy) { const e = []; !function e(t, a) { const l = t.$.id; -1 !== i._selectedIds.indexOf(l) && a.push(l), t.children && t.children.forEach((t => e(t, a))) }(t, e), i._selectedIds.length === e.length && (d = !0), t && t.leaf && (d = !0), o = i._getChildCheckState(t).maxSelected } else i.hasAttribute("hierarchy") && !i.selectionByHierarchy && (d = !0); if (o && (s || d || a.ctrlKey || a.metaKey)) return delete i._selectionStart, i.unselect(r), void delete i._interaction; s || a.ctrlKey || a.metaKey || n(), i.select(r), i._selectionStart = { data: t, element: e } } delete i._interaction } _selectAllCheckboxClickHandler(e, t) { const a = this; if (void 0 === t) { const l = a._filterInfo; if (l.inputFilters || l.rowFilters || l.appliedFilters) return void a._selectAllCheckboxClickHandlerFiltering(e); if (t = a.dataSource, a.hasAttribute("hierarchy") && a._disabledSelection.length > 0) { const e = t.boundHierarchy, l = a._getChildCheckState({ children: e }).maxSelected; return void a._changeSelectionOfMultiple(e.map((e => e.$.id)), l ? "unselect" : "select", "interaction") } } const l = t.length, i = a._selectedIds.length === l - a._disabledSelection.length + a._selectableGroupRecords.length, n = a._selectedIds.slice(0); if (a._selectedIds = [], i) a._updateCSSOnUnselectAll(e); else { let i, n = 0; for (let e = 0; e < l; e++) { const l = t[e].$.id; -1 === a._disabledSelection.indexOf(l) && (a._selectedIds.push(l), n++) } n === l ? i = !0 : 0 === n && (i = !1), a._updateCSSOnSelectAll(e, i), a._selectableGroupRecords.length > 0 && (a._selectedIds = a._selectedIds.concat(a._selectableGroupRecords)) } n.length !== a._selectedIds.length && (a._updateState("selected"), a.$.fireEvent("change", { type: "interaction" })) } _selectAllCheckboxClickHandlerFiltering(e) { const t = this, a = t.dataSource, l = t._selectedIds.slice(0), i = [], n = []; let r = 0; for (let e = 0; e < a.length; e++) { const o = a[e]; if (!1 === o.$.filtered) continue; const s = o.$.id; r++, -1 !== l.indexOf(s) && i.push(s), -1 === t._disabledSelection.indexOf(s) && n.push(s) } const o = i.length === n.length; if (t._selectedIds = t._selectedIds.filter((e => -1 === n.indexOf(e))), o) t._updateCSSOnUnselectAll(e); else { let a; t._selectedIds = t._selectedIds.concat(n), n.length === r ? a = !0 : 0 === n.length && (a = !1), t._updateCSSOnSelectAll(e, a) } l.length !== t._selectedIds.length && (t._updateState("selected"), t.$.fireEvent("change", { type: "interaction" })) } _updateCSSOnUnselectAll(e) { e.classList.remove("indeterminate", "selected"), e.firstElementChild.setAttribute("aria-checked", !1), Array.from(this.$.tableContainer.querySelectorAll(".jqx-table-select-row")).forEach((e => { e.parentElement.classList.contains("disable-select") || e.parentElement.setAttribute("aria-selected", !1), e.classList.remove("selected", "indeterminate"), e.firstElementChild.setAttribute("aria-checked", !1) })) } _updateCSSOnSelectAll(e, t) { t ? (e.classList.remove("indeterminate"), e.classList.add("selected"), e.firstElementChild.setAttribute("aria-checked", !0)) : !1 === t ? (e.classList.remove("indeterminate", "selected"), e.firstElementChild.setAttribute("aria-checked", !1)) : (e.classList.remove("selected"), e.classList.add("indeterminate"), e.firstElementChild.setAttribute("aria-checked", "mixed")), Array.from(this.$.tableContainer.querySelectorAll(".jqx-table-select-row")).forEach((e => { e.parentElement.classList.contains("disable-select") || (e.parentElement.setAttribute("aria-selected", !0), e.classList.remove("indeterminate"), e.classList.add("selected"), e.firstElementChild.setAttribute("aria-checked", !0)) })) } _beginEdit(e) { const t = this, a = t.editMode, l = e.dataField; let i = e.rowId, n = e.rowElement, r = e.rowObject, o = e.cell, s = [], d = []; if (t.editing) { n || (n = t.$.tableContainer.querySelector(`tr[row-id="${i}"]:not([unused])`)), r || (i = n.getAttribute("row-id"), r = t.rowById[i], i = r.data.$.id), "row" === a ? (s = n.querySelectorAll("td[data-field]"), d = t._columns.filter((e => e.visible)).map((e => e.dataField)), o || (o = l ? n.querySelector(`td[data-field="${l}"`) : s[0])) : (o || (o = n.querySelector(`td[data-field="${l}"`)), s = [o], d = [l]), t._editing = { row: r, cells: [] }; for (let e = 0; e < d.length; e++) { const a = s[e]; let l = d[e]; const n = t.columnByDataField[l]; if (!1 === n.allowEdit) continue; n.transform && (l = n.originalDataField); const c = r.data[l], u = t._initEditor(n, i, l, c); let f = u instanceof HTMLInputElement && "date" === u.type; if (n.editor && n.editor.template) n.editor.onRender && n.editor.onRender(i, l, u, c); else if (f) if (c instanceof Date && !isNaN(c.getTime())) { const e = (c.getMonth() + 1).toString(), t = c.getDate().toString(); u.value = `${c.getFullYear()}-${"0".repeat(2 - e.length)}${e}-${"0".repeat(2 - t.length)}${t}` } else u.value = ""; else u.value = void 0 === c ? "" : c; a.classList.add("editing"), a.innerHTML = "", a.appendChild(u), a === o && u.focus && (u.focus(), n.editor && n.editor.template || f || !u.select || u.select()), t._editing.cells.push({ dataField: l, editor: u, element: a }), t.$.fireEvent("cellBeginEdit", { id: r.data.$.id, row: r.data, value: r.data[l], dataField: l }) } "row" === a && t.$.fireEvent("rowBeginEdit", { id: r.data.$.id, row: r.data }) } } _initEditor(e, t, a, l) { let i = this._editors[a]; if (i) return i; if (e.editor && e.editor.template) { const n = document.createElement("div"); return n.innerHTML = e.editor.template, i = n.firstElementChild, i.className = "jqx-table-editor", e.editor.onInit && e.editor.onInit(t, a, i, l), i } return i = document.createElement("input"), i.className = "jqx-table-editor standard", "number" === e.dataType ? i.type = "number" : "date" === e.dataType ? i.type = "date" : i.type = "text", this._editors[a] = i, i } _toggleRowDetail(e, t) { const a = this; if (a.virtualization) return void a._toggleRowDetailVirtualization(e, t); const l = e.nextElementSibling; l.classList.toggle("collapsed"), l.classList.contains("collapsed") ? (l.setAttribute("aria-hidden", !0), a._expandedRowDetailIds = a._expandedRowDetailIds.filter((e => e !== t))) : (l.removeAttribute("aria-hidden"), a._expandedRowDetailIds.push(t)) } _toggleRowDetailVirtualization(e, t) { const a = this; let l = e.nextElementSibling; function i() { let e = a.$.virtualizationContainer.$.verticalScrollBar, t = a.$.virtualizationContainer.$.verticalScrollBar.value; a._ignoreVerticalChange = !0, a._refreshDataRows(), t = Math.min(e.max, t), e.value = t, delete a._ignoreVerticalChange, a._onVerticalChange({ detail: { value: t } }, !0) } if (l && l.classList.contains("jqx-table-row-detail") && !l.classList.contains("collapsed")) return l.setAttribute("aria-hidden", !0), a._expandedRowDetailIds = a._expandedRowDetailIds.filter((e => e !== t)), l.classList.add("collapsed"), l.remove(), void i(); const n = e.data; l = document.createElement("tr"), l.classList.add("collapsed"), a._createRowDetailOnDemand(l, { data: n }, n), e.parentElement.insertBefore(l, e.nextElementSibling), a._expandedRowDetailIds.push(t), l.classList.remove("collapsed"), i() } _setFocusable() { const e = this, t = "jqx-table" === e.nodeName.toLowerCase(); if (!e.keyboardNavigation || e.disabled || e.unfocusable || e.hasAttribute("modal")) return e.$.tableContainer.removeAttribute("tabindex"), t && (e.$.filterInput.unfocusable = !0, e.$.pager.unfocusable = !0), void (e.$.conditionalFormattingButton.unfocusable = !0); const a = e.$.tableContainer.getAttribute("tabindex"); (null === a || a < 0) && e.$.tableContainer.setAttribute("tabindex", 0), t && (e.$.filterInput.unfocusable = !1, e.$.pager.unfocusable = !1), e.$.conditionalFormattingButton.unfocusable = !1 } _tableContainerFocusHandler() { const e = this; e._focusedCell && e.$.tableContainer.contains(e._focusedCell) || e._focusCell(e.$.tableContainer.children[1].querySelector("tr:not([unused]) td[data-field], tr:not([unused]) td.group-header")) } _tableContainerDownHandler(e) { const t = this.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; this._focusCell(t.closest("td[data-field], td.group-header")), e.stopPropagation() } _focusCell(e, t) { const a = this; if (!e || !e.hasAttribute("data-field") && !e.classList.contains("group-header") || e.parentElement.classList.contains("grand-total")) return !1; if (a._focusedCell) { if (a._focusedCell === e) return !1; a._focusedCell.removeAttribute("focus") } if (a._focusedCell = e, e.setAttribute("focus", ""), !t) return; const l = a.$.tableContainer.parentElement, i = a.$.header.offsetHeight, n = a.freezeHeader ? a.$.tableContainer.firstElementChild.offsetHeight : 0, r = l.scrollTop; let o = e.offsetTop - i - n; if (o < r) l.scrollTop = o; else { const t = a.footerRow && a.freezeFooter ? a.$.tableContainer.lastElementChild.offsetHeight : 0, s = a.$.pager.offsetHeight, d = l.clientHeight - (i + n + t + s); o += e.offsetHeight, o > r + d && (l.scrollTop = o - d) } if (e.classList.contains("freeze-near") || e.classList.contains("freeze-far")) return; const s = l.scrollLeft, d = a.$.tableContainer.querySelector("tr[row-id]:not([unused])"); let c, u = 0; if (Array.from(d.children).forEach((e => { e.classList.contains("freeze-near") && (u += e.offsetWidth) })), a.rightToLeft) { let t = e.previousElementSibling; for (c = 0; t;)t.classList.contains("freeze-near") || (c -= t.offsetWidth), t = t.previousElementSibling; if (c > s) l.scrollLeft = c; else { const t = l.clientWidth; c -= e.offsetWidth, c < s - t && (l.scrollLeft = c + t - u) } } else if (c = e.offsetLeft - u, c < s) l.scrollLeft = c; else { const t = l.clientWidth; c += e.offsetWidth + u, c > s + t && (l.scrollLeft = c - t) } } focus() { const e = this; !e.keyboardNavigation || e.disabled || e.unfocusable || e.hasAttribute("modal") || e.$.tableContainer.focus() } blur() { this.$.tableContainer.blur() } _tableContainerKeydownHandler(e) { const t = this, a = t.isInShadowDOM ? e.composedPath()[0] : e.target, l = e.key; if ("Shift" === l) return void ("extended" === t.selectionMode && t.$.tableContainer.classList.add("jqx-unselectable")); if (!t.contains(a)) return; if (a && "INPUT" === a.nodeName && !t._editing) return; const i = t._focusedCell; if (!i) return; const n = t.virtualization, r = i.classList.contains("group-header"); if (r && -1 !== ["ArrowRight", "ArrowLeft", "Home", "End", "Escape", "F2"].indexOf(l)) return void e.preventDefault(); if (t._editing) { switch (l) { case "Enter": t.endEdit(); break; case "Escape": t.cancelEdit(); break; default: return }return t.$.tableContainer.focus(), void e.preventDefault() } const o = i.parentElement; if (n && o) { const e = t.$.virtualizationContainer.$.verticalScrollBar, a = e.value, i = o.data.$.id; if ("ArrowUp" === l && 0 === a && i === t._rowsVirtual[0].data.$.id || "ArrowDown" === l && a === e.max && i === t._rowsVirtual[t._rowsVirtual.length - 1].data.$.id) return } let s = "ArrowRight", d = "ArrowLeft"; switch (t.rightToLeft && (s = "ArrowLeft", d = "ArrowRight"), l) { case s: case d: { const a = l === s ? "nextElementSibling" : "previousElementSibling"; let r = i[a]; for (; r && r.classList.contains("jqx-hidden");)r = r[a]; t._focusCell(r, !n, e), t._scrollToVirtualization(l === s ? "nextArrow" : "prevArrow", r); break } case "ArrowUp": case "ArrowDown": { const a = "ArrowUp" === l ? "previousElementSibling" : "nextElementSibling"; let s = o[a]; for (; s && (s.classList.contains("jqx-table-row-detail") || s.classList.contains("collapsed"));)s = s[a]; s && (r ? t._focusCell(s.querySelector("td[data-field], .group-header"), !n, e) : t._focusCell(s.querySelector(`td[data-field="${i.getAttribute("data-field")}"], .group-header`), !n, e), t._scrollToVirtualization(l, s)); break } case "Home": t._focusCell(o.querySelector("td[data-field]"), !n, e), t._scrollToVirtualization(l); break; case "End": { const a = o.querySelectorAll("td[data-field]"); let i = a.length - 1, r = a[i]; for (; r.classList.contains("jqx-hidden");)i--, r = a[i]; t._focusCell(r, !n, e), t._scrollToVirtualization(l); break } case "PageDown": t._pageDownHandler(i, e); break; case "PageUp": t._pageUpHandler(i, e); break; case "Enter": { const a = o.data; t.dataSource.boundHierarchy && t._areChildrenFiltered(a) ? t._hierarchyArrowClickHandler(o, i, e) : t.rowDetailTemplate && t._toggleRowDetail(o, a.$.id); break } case " ": t._toggleSelection(o, o.data, e); break; case "F2": t.beginEdit(o.data.$.id, i.getAttribute("data-field")); break; default: return }if (e.preventDefault(), t.onKeyboardScroll) { const e = n ? t.$.virtualizationContainer : t.$.container; t.onKeyboardScroll(l, e.scrollTop, e.scrollLeft) } } _pageDownHandler(e, t) { const a = this, l = a.paging; if (!l && e.parentElement === e.parentElement.parentElement.lastElementChild) return; const i = a.virtualization, n = a.$.tableContainer, r = n.parentElement, o = i ? a.$.virtualizationContainer : r; let s = e.getAttribute("data-field"); function d() { const e = n.querySelectorAll("tr[row-id]:not([unused])"); let t = i ? 0 : a.$.header.offsetHeight + a.$.pager.offsetHeight; a.footerRow && a.freezeFooter && (t += n.lastElementChild.offsetHeight); for (let a = e.length - 1; a >= 0; a--) { const l = e[a]; if (!l.classList.contains("collapsed") && l.offsetTop + l.offsetHeight <= (i ? -r.offsetTop : r.scrollTop) + o.clientHeight - t) return l.querySelector(`td[data-field${s}], .group-header`) } } s = s ? `="${s}"` : ""; let c = d(); if (c) if (e === c) { const u = (a.freezeHeader ? n.firstElementChild.offsetHeight : 0) + a._rowHeight; let f; if (i ? (f = o.$.verticalScrollBar.value, o.$.verticalScrollBar.value += o.clientHeight - u) : r.scrollTop += r.clientHeight - u, c = d(), l && (i && f === o.$.verticalScrollBar.value || !i && e === c)) { const e = a.pageIndex; a.navigateTo(a.pageIndex + 1), a.pageIndex !== e && (i && (o.$.verticalScrollBar.value = 0), a._focusCell(n.querySelector(`tr[row-id]:not([unused]) td[data-field${s}], tr[row-id]:not([unused]) .group-header`), !i, t)) } else a._focusCell(c, void 0, t) } else a._focusCell(c, void 0, t) } _pageUpHandler(e, t) { const a = this, l = a.virtualization, i = a.$.tableContainer, n = i.parentElement, r = l ? a.$.virtualizationContainer : n; let o = e.getAttribute("data-field"); function s() { const e = i.querySelectorAll("tr[row-id]:not([unused])"); let t = 0; a.freezeHeader && (t = i.firstElementChild.offsetHeight); for (let a = 0; a < e.length; a++) { const i = e[a]; if (!i.classList.contains("collapsed") && i.offsetTop >= (l ? -n.offsetTop : n.scrollTop) + t) return i.querySelector(`td[data-field${o}], .group-header`) } } o = o ? `="${o}"` : ""; let d = s(); if (d) if (e === d) { const c = (a.freezeHeader ? i.firstElementChild.offsetHeight : 0) + a._rowHeight; let u; if (l ? (u = r.$.verticalScrollBar.value, r.$.verticalScrollBar.value -= r.clientHeight - c) : n.scrollTop -= n.clientHeight - c, d = s(), a.paging && (l && u === r.$.verticalScrollBar.value || !l && e === d)) { const e = a.pageIndex; if (a.navigateTo(a.pageIndex - 1), a.pageIndex !== e) { l && (r.$.verticalScrollBar.value = r.$.verticalScrollBar.max); const e = i.querySelectorAll(`tr[row-id]:not([aria-hidden="true"]) td[data-field${o}], tr[row-id]:not([aria-hidden="true"]) .group-header`); a._focusCell(e[e.length - 1], !l, t) } } else a._focusCell(d, void 0, t) } else a._focusCell(d, void 0, t) } _tableContainerKeyupHandler(e) { const t = this, a = t.isInShadowDOM ? e.composedPath()[0] : e.target; if ("Shift" === e.key && "extended" === t.selectionMode && t.$.tableContainer.classList.remove("jqx-unselectable"), t.contains(a)) return a.classList.contains("filter-value") && "date" !== a.type ? (clearTimeout(t._filterRowTimeout), void (t._filterRowTimeout = setTimeout((function () { const e = t.context; t.context = t, t._applyRowFilters(), t.context = e }), 500))) : void 0 } _tableContainerPointeroverHandler(e) { const t = this; if (!t.tooltip) return; const a = (t.isInShadowDOM ? e.composedPath()[0] : e.target).closest("tbody td[data-field], thead th[data-field]"); if (!a) return; const l = t.$.tableContainer.querySelector(".tooltip"), i = t.columnByDataField[a.getAttribute("data-field")], n = t.virtualization; if (l && (l.classList.remove("tooltip"), l.removeAttribute("title")), "th" !== a.tagName.toLowerCase()) (a.classList.contains("tree-cell") && a.firstElementChild && a.firstElementChild.children[1].scrollWidth > a.firstElementChild.children[1].offsetWidth || a.scrollWidth > a.offsetWidth) && (a.classList.add("tooltip"), a.title = n && i && i.templateElement ? "" : a.innerText); else { const e = a.querySelector(".label"); e && e.scrollWidth > e.offsetWidth && (a.classList.add("tooltip"), a.title = n && i && i.templateElement ? "" : e.innerText) } } _documentDownHandler(e) { const t = this, a = t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; function l() { "default" !== t.columnSizeMode && (t._preventClickSort = !0, clearTimeout(t._dblclickObject.timeout), t._dblclickObject.numberOfClicks++, 2 === t._dblclickObject.numberOfClicks ? (t._dblclickObject.numberOfClicks = 0, t._autoResizeColumnOnDblclick()) : t._dblclickObject.timeout = setTimeout((function () { t._dblclickObject.numberOfClicks = 0 }), 300)) } if (delete t._preventClickSort, t._editing && !a.closest(".jqx-table-editor")) { const e = a.closest(".jqx-drop-down") || a.closest(".jqx-input-drop-down-menu"); if (!e) return void t.endEdit(); const l = e.ownerElement; if (!l) return void t.endEdit(); if (t.$.container.contains(l) && l.classList.contains("jqx-table-editor")) return; return void t.endEdit() } const i = t.columnReorder, n = t.columnResize; if (i && !t.columnTotals || n) { const r = a.closest("th[data-field]:not(.jqx-pivot-table-total-header)"); if (r && t.$.tableContainer.contains(r)) { if (t.$.tableContainer.classList.add("jqx-unselectable"), n && t._columns.length > 1 && !t.hasAttribute("resize-max-reached")) { const a = t.rightToLeft, i = r.getBoundingClientRect(); let n = null; if (!a && e.clientX <= i.left + 5 || a && e.clientX >= i.right - 5) { const i = r.previousElementSibling; if (i && i.hasAttribute("data-field")) { if (i.hasAttribute("locked")) return; for (let e = 0; e < t.columns.length; e++) { const a = t.columns[e]; if (a.headerCellElement === i) { n = a; break } } const r = i.getBoundingClientRect(), o = n && n.minWidth || t._getNumericMinWidth(); return t._resizeDetails = { FeedbackShown: !1, Item: i, ItemStart: r[a ? "right" : "left"] + window.scrollX, Min: o, StartPosition: { left: e.pageX, top: e.pageY }, StartTime: new Date }, t._resizeDetails.Max = t._getCurrentResizeMax(), void l() } } if (!a && e.clientX >= i.right - 5 || a && e.clientX <= i.left + 5) { if (r.hasAttribute("locked")) return; for (let e = 0; e < t.columns.length; e++) { const a = t.columns[e]; if (a.headerCellElement === r) { n = a; break } } const o = n && n.minWidth || t._getNumericMinWidth(); return t._resizeDetails = { FeedbackShown: !1, Item: r, ItemStart: i[a ? "right" : "left"] + window.scrollX, Min: o, StartPosition: { left: e.pageX, top: e.pageY }, StartTime: new Date }, t._resizeDetails.Max = t._getCurrentResizeMax(), void l() } } i && (t._dragDetails = { FeedbackShown: !1, Item: r, StartPosition: { left: e.pageX, top: e.pageY }, StartTime: new Date }) } } } _documentMoveHandler(e) { const t = this, a = t._dragDetails; if (!a) return void (t._resizeDetails && t._handleResizeOnMove(e)); if (!a.FeedbackShown) { const l = (new Date).getTime() - a.StartTime.getTime() > 500, i = Math.abs(a.StartPosition.left - e.pageX) > 5 || Math.abs(a.StartPosition.top - e.pageY) > 5; if (!i || !(!t._isMobile || t._isMobile && l)) return void (t._isMobile && i && !l && (delete t._dragDetails, t.$.tableContainer.classList.remove("jqx-unselectable"))); t._hideBodyOverflow(), a.Feedback = t._addDragFeedback(), a.FeedbackShown = !0, a.Item.classList.add("dragged"), t.classList.add("jqx-unselectable") } const l = t.$.tableContainer.parentElement; a.Feedback.style.left = e.pageX + 10 + "px", a.Feedback.style.top = e.pageY + 10 + "px", a.HoveredItem && (a.HoveredItem.classList.remove("drop-column", "left", "right"), delete a.HoveredItem), l.offsetWidth < l.scrollWidth && (clearInterval(t._dragInterval), t._dragInterval = setInterval((function () { const a = l.getBoundingClientRect(); a.left <= e.clientX && a.left + a.width >= e.clientX ? e.clientX >= a.left && e.clientX <= a.left + 25 ? l.scrollLeft -= t._autoScrollCoefficient : e.clientX >= a.left + a.width - 25 && e.clientX <= a.left + a.width ? l.scrollLeft += t._autoScrollCoefficient : clearInterval(t._dragInterval) : clearInterval(t._dragInterval) }), 10)); const i = t._getClosestThToHover(e); i && (i.classList.add("drop-column"), a.HoveredItem = i) } _hideBodyOverflow() { const e = (document.scrollingElement || document.documentElement).scrollHeight > document.documentElement.clientHeight, t = (document.scrollingElement || document.documentElement).scrollWidth > document.documentElement.clientWidth; this._originalBodyOverflow = { overflowX: document.body.style.overflowX, overflowY: document.body.style.overflowY, overflow: document.body.style.overflow }, document.body.classList.add("jqx-dragging"), document.body.style.overflow = document.body.style.overflowX = document.body.style.overflowY = "", e && !t ? document.body.style.overflowX = "hidden" : t && !e ? document.body.style.overflowY = "hidden" : t || e || (document.body.style.overflow = "hidden") } _addDragFeedback() { const e = this, t = e._dragDetails.Item, a = document.createElement("div"); return a.className = "jqx-table-feedback", a.setAttribute("parent-table-id", e.id), a.innerHTML = e.columnByDataField[t.getAttribute("data-field")].label, e.theme && a.setAttribute("theme", e.theme), document.body.appendChild(a), a } _getClosestThToHover(e) { const t = e.clientX, a = Array.from(this.$.tableContainer.querySelectorAll("th[data-field]:not(.jqx-pivot-table-total-header)")); let l, i, n; for (let e = 0; e < a.length; e++) { const r = a[e]; if (!r || this._dragDetails.Item === r) continue; const o = r.getBoundingClientRect(), s = Math.abs(t - o.left), d = Math.abs(t - o.right), c = Math.min(s, d); if (!(void 0 === i || c < i)) break; l = r, i = c, n = s < d ? "left" : "right" } return l && l.classList.add(n), l } _handleResizeOnMove(e) { const t = this, a = t._resizeDetails; if (!a.FeedbackShown) { const l = (new Date).getTime() - a.StartTime.getTime() > 500, i = Math.abs(a.StartPosition.left - e.pageX) >= 1 || Math.abs(a.StartPosition.top - e.pageY) >= 1; if (!i || !(!t._isMobile || t._isMobile && l)) return void (t._isMobile && i && !l && (delete t._resizeDetails, t.$.tableContainer.classList.remove("jqx-unselectable", "resizing"), document.body.style.cursor = null)); a.Feedback = t._addResizeFeedbacks(), a.FeedbackShown = !0, t.classList.add("jqx-unselectable", "resizing"), document.body.style.cursor = "col-resize" } const l = a.Feedback, i = a.ItemStart; let n; t.rightToLeft ? (n = Math.min(a.Max, Math.max(a.Min, Math.round(i - e.pageX))), l.style.left = i - n + "px") : (n = Math.min(a.Max, Math.max(a.Min, Math.round(e.pageX - i))), l.style.left = i + n + "px"), l.classList.toggle("min", n === a.Min), l.classList.toggle("max", n === a.Max), t.columnResizeFeedback && (l.innerHTML = n + "px"), a.Width = n } _addResizeFeedbacks() { const e = this, t = e._resizeDetails, a = e.$.container.getBoundingClientRect(), l = a.top + window.scrollY + "px", i = a.height + "px", n = document.createElement("div"), r = document.createElement("div"); return r.className = "jqx-table-resize-feedback static", r.setAttribute("parent-table-id", e.id), r.style.top = l, r.style.left = t.ItemStart + "px", r.style.height = i, e._resizeDetails.StaticFeedback = r, n.className = "jqx-table-resize-feedback", n.setAttribute("parent-table-id", e.id), n.style.top = l, n.style.height = i, e.theme && (r.setAttribute("theme", e.theme), n.setAttribute("theme", e.theme)), document.body.appendChild(n), document.body.appendChild(r), n } _resolveResize(e) { const t = this, a = t._resizeDetails; if (delete t._resizeDetails, t.$.tableContainer.classList.remove("jqx-unselectable", "resizing"), e) { if (!a.FeedbackShown) return; a.StaticFeedback.remove(), a.Feedback.remove() } const l = t._columns.find((e => e.headerCellElement === a.Item)); t.classList.remove("jqx-unselectable", "resizing"), document.body.style.cursor = null; let i = a.Width; i < parseInt(t.columnMinWidth) && (i = parseInt(t.columnMinWidth)); const n = t._getTableRemainingWidth(); if (l) { const e = l._isResponsive || !!(l.width && l.width.toString().indexOf("%") >= 0); if (delete l.width, l.minWidth && i < l.minWidth && (i = l.minWidth), l._manualWidth = i, l._manualPercentageWidth = parseFloat(i / n * 100), l._isResponsive = e, a.Item.style.width = l._isResponsive ? parseFloat(i / n * 100) + "%" : i + "px", l._isFillRemainingWidth) { let e = !0; for (let a = 0; a < t._columns.length; a++) { const l = t._columns[a]; if (!l.width && !l._manualWidth) { e = !1; break } } !t.columnResizeNormalize && e && (t.columns.push({ dataField: "", label: "", visible: !0, allowResize: !1, allowFilter: !1, allowSort: !1 }), t._initColumns(!0), t.refresh()) } } else a.Item.style.width = i + "px"; t._handleAutoSizeMode(l), t._handleFrozenColumnPositions(), t._refreshHorizontalScrollbar(); const r = parseFloat(i / n * 100); l && t.$.fireEvent("columnResize", { dataField: l.dataField, headerCellElement: a.Item, widthInPercentages: r, width: i }) } openColumnMenu(e) { const t = this, a = t.columnByDataField[e]; if (!a) return; const l = a.headerCellElement; if (!l) return; if (a && !1 === a.allowMenu) return; const i = l.querySelector(".column-menu"); if (!i) return; const n = () => { const e = c.getBoundingClientRect(), a = t.activeColumnMenu; t._columnsSettingsMenu.style.top = e.top + window.scrollY + "px", t._columnsSettingsMenu.style.left = e.right + window.scrollX + "px", e.right - i.offsetWidth + window.scrollX + a.offsetWidth > t.getBoundingClientRect().right && (t._columnsSettingsMenu.style.left = 10 + e.right - a.offsetWidth - t._columnsSettingsMenu.offsetWidth + window.scrollX + "px") }, r = () => { const e = a.headerCellElement; e.hasAttribute("column-menu-button") || e.setAttribute("column-menu-button", ""); const l = e.querySelector(".column-menu"), i = l.getBoundingClientRect(); o.style.top = i.bottom + 10 + window.scrollY + "px", o.style.left = i.right - l.offsetWidth + window.scrollX + "px", i.right - l.offsetWidth + window.scrollX + o.offsetWidth > t.getBoundingClientRect().right && (o.style.left = i.right - o.offsetWidth + window.scrollX + "px"); const n = o.querySelector("input"); n && n.focus() }; a.columnMenu && a.columnMenu.remove(), t.closeColumnMenu(); const o = document.createElement("div"); o.classList.add("jqx-table-column-menu", "wrapper"), o.owner = l, o.dataField = e; const s = document.createElement("div"); s.innerHTML = `<span class='menu-icon sort-asc'></span><span class="label">${t.localize("columnMenuItemSortAsc")}</span>`, s.classList.add("jqx-table-menu-item"); const d = document.createElement("div"); d.innerHTML = `<span class='menu-icon sort-desc'></span><span class="label">${t.localize("columnMenuItemSortDesc")}</span>`, d.classList.add("jqx-table-menu-item"); const c = document.createElement("div"); c.innerHTML = `<span class='menu-icon columns'></span><span class="label">${t.localize("columnMenuItemColumns")}</span>`, c.classList.add("jqx-table-menu-item", "columns-item"); const u = document.createElement("div"); u.innerHTML = `<span class='menu-icon filter-by'></span><span class="label">${t.localize("columnMenuItemFilter")}</span>`, u.classList.add("jqx-table-menu-item", "filter-item"); const f = document.createElement("div"); f.innerHTML = `<span class='menu-icon filter-by-remove'></span><span class="label">${t.localize("columnMenuItemRemoveFilter")}</span>`, f.classList.add("jqx-table-menu-item", "remove-filter-item", "jqx-hidden"); const m = document.createElement("div"); m.innerHTML = `<span class='menu-icon sort-remove'></span><span class="label">${t.localize("columnMenuItemRemoveSort")}</span>`, m.classList.add("jqx-table-menu-item", "remove-sort-item", "jqx-hidden"); const h = document.createElement("div"); h.innerHTML = `<span class='menu-icon reset'></span><span class="label">${t.localize("columnMenuItemReset")}</span>`, h.classList.add("jqx-table-menu-item", "reset-item"), c.onmouseleave = e => { const a = t._columnsSettingsMenu.getBoundingClientRect(); e.pageX >= a.left - 20 && e.pageX <= a.right + 20 && e.pageY >= a.top - 20 && e.pageY <= a.bottom + 20 || t._columnsSettingsMenu && t._columnsSettingsMenu.remove() }, c.onmouseenter = () => { t._columnsSettingsMenu = (() => { t._columnsSettingsMenu && t._columnsSettingsMenu.remove(); const a = document.createElement("div"); a.classList.add("jqx-table-column-menu", "wrapper", "jqx-table-columns-menu"); let l = 0, i = null; for (let o = 0; o < t.columns.length; o++) { const s = document.createElement("div"); s.innerHTML = `<span class='column-item menu-icon'></span><span class="label">${t.columns[o].label}</span>`, s.classList.add("jqx-table-menu-item"), s.column = t.columns[o], e !== s.column.dataField && !1 !== s.column.allowHide && (s.column.visible ? (l++, i = s) : s.firstElementChild.classList.add("off"), s.onpointerdown = e => { s.column.visible = !s.column.visible, s.column.visible ? s.firstElementChild.classList.remove("off") : s.firstElementChild.classList.add("off"), r(), n(), e.stopPropagation(), e.preventDefault() }, a.appendChild(s)) } return 1 === l && i && i.classList.add("jqx-disabled"), document.body.appendChild(a), a })(), n() }; const p = t._createFilterRowInput(a); if (t.filtering && !1 !== a.allowFilter) if (t.filterRow) o.insertBefore(f, o.firstElementChild); else { o.innerHTML = p, o.insertBefore(u, o.firstElementChild); const e = o.querySelector(".filter-value"); e.onkeyup = a => { "Enter" === a.key && t.closeColumnMenu(), "Escape" === a.key && (e.value = "") }, e.nextElementSibling.onchange = () => { t._applyRowFilters() } } o.insertBefore(h, o.firstElementChild), o.insertBefore(c, o.firstElementChild), o.insertBefore(m, o.firstElementChild), !1 !== a.allowSort && "none" !== t.sortMode && (o.insertBefore(d, o.firstElementChild), o.insertBefore(s, o.firstElementChild), a.headerCellElement.hasAttribute("aria-sort") && (m.classList.remove("jqx-hidden"), "ascending" === a.headerCellElement.getAttribute("aria-sort") ? s.classList.add("jqx-disabled") : d.classList.add("jqx-disabled")), m.onclick = () => { t.sortBy(a.dataField, null), t.closeColumnMenu() }, s.onclick = () => { t.sortBy(a.dataField, "asc"), t.closeColumnMenu() }, d.onclick = () => { t.sortBy(a.dataField, "desc"), t.closeColumnMenu() }), h.onclick = () => { if (t._initialState) { if (t.loadState(t._initialState), t._filterInfo.filterRowValues && delete t._filterInfo.filterRowValues, t.clearFilters(), t.filterRow) { const e = t.$.tableContainer.querySelector(".jqx-table-filter-row"); e && e.remove() } t._initRows(), t.refresh() } t.closeColumnMenu() }; const g = t.columns.findIndex((e => e.dataField === a.dataField)); t.appendChild(o); const _ = o.lastElementChild.children[2]; _ && (_.onclick = () => { const e = _.parentElement.firstElementChild, a = _.parentElement.children[1]; e.value = "", -1 !== ["EMPTY", "NOT_EMPTY", "NULL", "NOT_NULL"].indexOf(a.$.input.dataValue) && (a.value = t.localize("text" === e.type ? "CONTAINS" : "EQUAL"), delete a.$.input.dataValue), t._applyRowFilters() }); const b = t._filterInfo && t._filterInfo.filterRowValues ? t._filterInfo.filterRowValues[g] : null; if (b && !t.filterRow) { const e = o.lastElementChild, l = a.dataType, i = t._filterInfo["string" === l ? "stringConditions" : "numberAndDateConditions"].find((e => e.value === b.condition)); if (-1 === ["EMPTY", "NOT_EMPTY", "NULL", "NOT_NULL"].indexOf(i.value)) if ("date" === l) { const t = new Date(b.value), a = (t.getMonth() + 1).toString(), l = t.getDate().toString(); e.children[0].value = `${t.getFullYear()}-${"0".repeat(2 - a.length)}${a}-${"0".repeat(2 - l.length)}${l}` } else e.children[0].value = b.value; e.children[1].value = i.label, e.children[1].$.input.dataValue = i.value, e.children[2].classList.remove("jqx-hidden") } a.headerCellElement.hasAttribute("filter") && f.classList.remove("jqx-hidden"), f.onclick = () => { t.removeFilter(a.dataField), t.closeColumnMenu() }, r(), a.columnMenu = t.activeColumnMenu = o, t.$.fireEvent("openColumnMenu", { dataField: e }) } closeColumnMenu() { const e = this; e.activeColumnMenu && (e.activeColumnMenu.owner.hasAttribute("column-menu-button") && e.activeColumnMenu.owner.removeAttribute("column-menu-button"), e._columnsSettingsMenu && e._columnsSettingsMenu.remove(), e.$.fireEvent("closeColumnMenu", { dataField: e.activeColumnMenu.dataField }), e.activeColumnMenu.remove(), delete e.activeColumnMenu) } _documentUpHandler(e) { const t = this, a = t._dragDetails; if (t.activeColumnMenu) { const a = e.originalEvent ? e.originalEvent : e; if (a) { let e = !1, l = a.target; for (; l;)if (l = l.parentNode, l === t) { e = !0; break } (t.activeColumnMenu.contains(a.target) || t._columnsSettingsMenu && t._columnsSettingsMenu.contains(a.target)) && (e = !0); const i = t.activeColumnMenu.querySelector("jqx-input"); i && i.$.scrollView.contains(a.target) && (e = !0), e || t.closeColumnMenu() } } if (t._selectDrag) return t.$.main.classList.remove("prevent-scroll"), void delete t._selectDrag; if (!a) return t._resizeDetails && t._resolveResize(!0), void t.$.tableContainer.classList.remove("jqx-unselectable"); if (delete t._dragDetails, t.$.tableContainer.classList.remove("jqx-unselectable"), !a.FeedbackShown) return; const l = a.HoveredItem; document.body.classList.remove("jqx-dragging"), document.body.style.overflow = t._originalBodyOverflow.overflow, document.body.style.eoverflowX = t._originalBodyOverflow.overflowX, document.body.style.overflowY = t._originalBodyOverflow.overflowY, delete t._originalBodyOverflow, t.classList.remove("jqx-unselectable"), a.Item.classList.remove("dragged"), document.body.removeChild(a.Feedback), clearInterval(t._dragInterval), delete t._dragInterval, l && t._applyColumnReorder(a, l), t._preventClickSort = !0, requestAnimationFrame((() => delete t._preventClickSort)) } _applyColumnReorder(e, t) { const a = this, l = a.rightToLeft, i = a._columns, n = e.Item.getAttribute("data-field"), r = i.find((e => e.dataField === n)), o = t.getAttribute("data-field"), s = t.classList.contains("right"), d = a._columns.filter((e => e.dataField !== n)), c = d.findIndex((e => e.dataField === o)); t.classList.remove("drop-column", "left", "right"), s && !l || !s && l ? d.splice(c + 1, 0, r) : d.splice(c, 0, r), i.map((e => e.dataField)).join(",") !== d.map((e => e.dataField)).join(",") && (a.columns = d, a._initColumns(), a.refresh()) } _applyRowFilters() { const e = this; if (!e.filtering || !e.filterRow && !e.columnMenu) return; const t = e.filterRow ? e.$.tableContainer.querySelector(".jqx-table-filter-row") : null, a = Number(e.selection), l = e._columns.filter((e => e.visible)), i = [], n = []; for (let r = 0; r < l.length; r++) { const o = l[r].dataField, s = l[r].dataType; if (l[r].headerCellElement && l[r].headerCellElement.hasAttribute("filter") && l[r].headerCellElement.removeAttribute("filter"), !e.filterRow && !l[r].columnMenu) { n.push(null); continue } const d = e.filterRow ? t.children[r + a].firstElementChild : l[r].columnMenu.lastElementChild, c = d.children[2]; let u = d.firstElementChild.value, f = d.children[1].value; "string" === s ? f = e._filterInfo.stringConditions.find((e => e.label === f)).value : (f = e._filterInfo.numberAndDateConditions.find((e => e.label === f)).value, "" !== u && ("number" === s ? (u = parseFloat(u), isNaN(u) && (d.firstElementChild.value = "", u = "")) : "date" === s && (u = new Date(u), u.setHours(0, 0, 0)))); const m = -1 !== ["EMPTY", "NOT_EMPTY", "NULL", "NOT_NULL"].indexOf(f); if ("" !== u || m) { const e = new JQX.Utilities.FilterGroup, t = e.createFilter(s, u, f); e.addFilter("or", t), i.push([o, e]), c.classList.remove("jqx-hidden"), n.push({ condition: f, value: u }), l[r].headerCellElement && l[r].headerCellElement.setAttribute("filter", "") } else c.classList.add("jqx-hidden"), n.push(null), l[r].headerCellElement && l[r].headerCellElement.hasAttribute("filter") && l[r].headerCellElement.removeAttribute("filter"); m ? d.firstElementChild.setAttribute("disabled", !0) : d.firstElementChild.removeAttribute("disabled") } i.length > 0 ? (e.dataSource.virtualDataSource || e.dataSource._filter(i, e.filterOperator), e._filterInfo.rowFilters = i, e._filterInfo.filterRowValues = n, delete e._filterInfo.appliedFilters, e._fullRefresh("filter"), e._updateState("filtered"), e._doNotFireEvent || e.$.fireEvent("filter", { action: "add", filters: i })) : e._filterInfo.rowFilters ? (e._filterInfo.filterRowValues && delete e._filterInfo.filterRowValues, e.clearFilters()) : e._filterInfo.filterRowValues && delete e._filterInfo.filterRowValues } _clearFilterInput() { const e = this; e._filterInfo.query = "", delete e._filterInfo.inputFilters, e.$.filterInput.value = "" } _clearRowFilters(e) { const t = this; if (!t._filterInfo.rowFilters) return; const a = t.$.tableContainer.querySelector(".jqx-table-filter-row"), l = t.selection ? 1 : 0; let i = t._columns.filter((e => e.visible)); if (e && (i = t._columns.filter((t => t.dataField === e))), a) for (let e = 0; e < i.length; e++) { const t = a.children[e + l] ? a.children[e + l].firstElementChild : null; t && (t.firstElementChild.value = "", t.children[2].classList.add("jqx-hidden")), i[e].headerCellElement && i[e].headerCellElement.hasAttribute("filter") && i[e].headerCellElement.removeAttribute("filter") } delete t._filterInfo.rowFilters } _createFooterRow(e) { const t = this, a = t.footerRow; if (!a) return; if (e) return void t.$.tableContainer.appendChild(e); const l = document.getElementById(a); if (l && l instanceof HTMLTemplateElement) { const e = document.createElement("tfoot"), a = document.importNode(l.content, !0); e.appendChild(a), t.$.tableContainer.appendChild(e) } else t.footerRow = null } _createCustomHeaderRow() { const e = this, t = e.$.tableContainer.firstElementChild; let a = e.headerRow; if (a) { if ("function" == typeof a) a.call(e, t); else if ("string" == typeof a) { const e = document.getElementById(a); if (!e) return void (t.innerHTML = `<tr><th>${a}</th></tr>`); a = e } a instanceof HTMLTemplateElement ? t.appendChild(document.importNode(a.content, !0)) : a.nodeName ? t.appendChild(a) : e.headerRow = null } } _updateSelectAllState(e) { const t = this; if (!t.selection || "cell" === t.selectionMode) return; const a = t.$.tableContainer.querySelector(".jqx-table-select-all"); let l; if (void 0 === e) { const a = t.dataSource, i = t._filterInfo; if (i.inputFilters || i.rowFilters || i.appliedFilters) { const i = t._selectedIds; e = 0, l = 0; for (let t = 0; t < a.length; t++) { const n = a[t]; if (!1 === n.$.filtered) continue; const r = n.$.id; e++, -1 !== i.indexOf(r) && l++ } } else e = t.dataSource.length } void 0 === l && (l = t._selectedIds.length), 0 === l || 0 === e ? (a.classList.remove("selected", "indeterminate"), a.firstElementChild.setAttribute("aria-checked", !1)) : l === e + t._selectableGroupRecords.length ? (a.classList.remove("indeterminate"), a.classList.add("selected"), a.firstElementChild.setAttribute("aria-checked", !0)) : (a.classList.remove("selected"), a.classList.add("indeterminate"), a.firstElementChild.setAttribute("aria-checked", "mixed")) } _resizeHandler() { const e = this; clearTimeout(e._resizeTimeout); const t = () => { if (JQX.Utilities.Core.Browser.Firefox && e.virtualization) { const t = e.$.virtualizationContainer.$.verticalScrollBar.value; e._onVerticalChange({ detail: { value: t } }, !0) } }; t(), "default" === e.columnSizeMode && e._handleAutoSizeMode(), e._resizeTimeout = setTimeout((function () { if (e.columnGroups && e._columns.some((e => e.responsivePriority && e.responsivePriority > 1))) return void e.refresh(); const a = e.offsetWidth, l = e.offsetHeight; if (e.virtualization && e._cachedHeight !== l) { const i = e._getFractionOfMax(); return e._refreshDataRows(), e._setFractionOfMax(i), e._cachedWidth = a, e._cachedHeight = l, void t() } e._handleAutoSizeMode(), e._handleFrozenColumnPositions(), e._refreshHorizontalScrollbar(), e._cachedWidth = a, e._cachedHeight = l, t() }), 75) } _hierarchyArrowClickHandler(e, t) { const a = this, l = !a.grouping, i = e.data; if (a.animation = a._animation, a.expandHierarchy && (a._collapsedIds || (a._collapsedIds = []), !0 === i.expanded ? a._collapsedIds[i.$.id] = !0 : delete a._collapsedIds[i.$.id], a.dataSource && a.expandHierarchy && (a.dataSource._collapsedIds = a._collapsedIds)), l && a.dataSource.virtualDataSource && !i.expanded && i.children && 0 === i.children.length) return a._requestVirtualDataSource("expand", void 0, i), void a.$.fireEvent("expand", { id: i.$.id, record: i }); if (a.virtualization) return void a._hierarchyArrowClickHandlerVirtualization(e, t); const n = a.$.tableContainer, r = i.$.id; function o(e) { e.forEach((e => { a._expandSingleChildRow(n.querySelector(`tr[row-id="${e.$.id}"]:not([unused])`)), e.children && e.expanded && requestAnimationFrame((() => o(e.children))) })) } if (i.expanded ? function e(t) { t.forEach((t => { a._collapseSingleChildRow(n.querySelector(`tr[row-id="${t.$.id}"]:not([unused])`)), t.children && e(t.children) })) }(i.children) : requestAnimationFrame((() => o(i.children))), i.expanded = !i.expanded, e.setAttribute("aria-expanded", i.expanded), e.classList.toggle("expanded", i.expanded), l) i.expanded ? (-1 === a._expandedIds.indexOf(r) && a._expandedIds.push(r), a._expandedIdsAlt[r] = !0, a.$.fireEvent("expand", { id: i.$.id, record: i })) : (a._expandedIds = a._expandedIds.filter((e => e !== r)), delete a._expandedIdsAlt[r], a.$.fireEvent("collapse", { id: i.$.id, record: i })), a._updateState("expanded"); else if (!0 !== t) { let e = "" + i.$.id; e = e.replace("Item", "").replace(/_/gi, "."), i.expanded ? a.$.fireEvent("group", { action: "expand", path: e, dataField: i.groupDataField, label: i.label }) : a.$.fireEvent("group", { action: "collapse", path: e, dataField: i.groupDataField, label: i.label }) } } _expandSingleChildRow(e, t = []) { e && (t.push(!1), "none" !== this.animation ? (e.classList.remove("jqx-hidden"), requestAnimationFrame((() => { e.classList.add("no-height"), e.ontransitionend = function () { e.classList.remove("no-height"), e.ontransitionend = null, t.pop() }, e.removeAttribute("aria-hidden"), e.classList.remove("collapsed") }))) : (e.removeAttribute("aria-hidden"), e.classList.remove("collapsed", "jqx-hidden"), t.pop())) } _collapseSingleChildRow(e, t = []) { e && (t.push(!1), "none" !== this.animation ? e.ontransitionend = function () { e.classList.add("jqx-hidden"), e.ontransitionend = null, t.pop() } : (e.classList.add("jqx-hidden"), t.pop()), e.setAttribute("aria-hidden", !0), e.classList.add("collapsed")) } _getGroupByIndex(e) { "number" == typeof e && (e = e.toString()); const t = this.dataSource.boundHierarchy, a = e.split("."); let l = t[a[0]]; if (l) { for (let e = 1; e < a.length; e++)if (l = l.children[a[e]], !l || l.leaf) return; return l } } getGroupChildren(e) { "number" == typeof e && (e = e.toString()); const t = this.dataSource.boundHierarchy, a = e.split("."); let l = t[a[0]]; if (!l) return []; for (let e = 1; e < a.length; e++)if (l = l.children[a[e]], !l || l.leaf) return []; return l.children } _createDialog() { const e = this, t = document.createElement("jqx-window"), a = document.createElement("template"), l = ` animation=${e.animation} theme="${e.theme}"${e.rightToLeft ? " right-to-left" : ""}${!e.keyboardNavigation || e.unfocusable ? " unfocusable" : ""}`; a.innerHTML = `<jqx-button class="ok primary"${l}>${e.localize("ok")}</jqx-button>\n<jqx-button class="cancel"${l}>${e.localize("cancel")}</jqx-button>`, t.animation = e.animation, t.footerTemplate = a, t.headerButtons = ["close"], t.rightToLeft = e.rightToLeft, t.theme = e.theme, t.unfocusable = !e.keyboardNavigation || e.unfocusable, t.className = "jqx-table-window", t.ownerElement = e, e._dialog = t, e._addDialogHandlers(), e.getShadowRootOrBody().appendChild(t), e.setAttribute("aria-owns", t.id) } _addDialogHandlers() { const e = this, t = e._dialog; t.addEventListener("close", e._dialogEventHandler), t.addEventListener("click", e._dialogEventHandler) } _dialogEventHandler(e) { const t = this, a = t.ownerElement, l = t.isInShadowDOM ? e.composedPath()[0] : e.target, i = e.type, n = a.context; if (a.context = a, "close" === i) { if (l !== t) return void (a.context = n); const e = t.classList.contains("conditional-formatting"), i = t.classList.contains("fields"); t.ok ? (e && a._applyConditionalFormatting(), delete t.ok) : e && JSON.stringify(a._formattingPanel.items) !== JSON.stringify(a._formattingPanel.getItems()) && (a._formattingPanel.$.itemsContainer.innerHTML = "", a._formattingPanel._addDefaultItems()), t.content.innerHTML = "", t.classList.remove("conditional-formatting", "drill-down", "fields"), !a.keyboardNavigation || a.disabled || a.unfocusable || (a.$.tableContainer.setAttribute("tabindex", 0), "jqx-table" === a.nodeName.toLowerCase() && (a.$.filterInput.unfocusable = !1, a.$.pager.unfocusable = !1), a.$.conditionalFormattingButton.unfocusable = !1), a.removeAttribute("modal"), e ? a.$.conditionalFormattingButton.focus() : i && a.$.fieldsButton ? a.$.fieldsButton.focus() : a.$.tableContainer.focus() } else "click" === i && t.$.footer.contains(l) && (l.closest(".ok") ? (t.ok = !0, t.close()) : l.closest(".cancel") && t.close()); a.context = n } _openDialog(e, t, a) { const l = this; l._dialog || l._createDialog(); const i = l._dialog; i.label = e, i.classList.add(a), i.appendChild(t), l.$.tableContainer.removeAttribute("tabindex"), "jqx-table" === l.nodeName.toLowerCase() && (l.$.filterInput.unfocusable = !0, l.$.pager.unfocusable = !0), "drill-down" !== a ? i.setAttribute("aria-controls", l.$.tableContainer.id) : i.removeAttribute("aria-controls"), l.$.conditionalFormattingButton.unfocusable = !0, l.setAttribute("modal", ""), i.open() } _conditionalFormattingButtonClickHandler(e, t, a) { const l = this; let i; l._formattingPanel ? i = l._formattingPanel : (i = document.createElement("jqx-formatting-panel"), i.animation = l.animation, i.columns = t || l._columns, i.dataSource = a || l.dataSource, i.locale = l.locale, i.messages = l.messages, i.rightToLeft = l.rightToLeft, i.theme = l.theme, i.unfocusable = !l.keyboardNavigation || l.unfocusable, i.ownerElement = l, l._formattingPanel = i), l.conditionalFormatting && (i.items = l.conditionalFormatting.slice(0)), l._openDialog(l.localize("conditionalFormatting"), i, "conditional-formatting") } _transformDataSource() { const e = this; if (!e.isRendered && e.dataTransform) { const t = e.dataSource; for (let a = 0; a < t.length; a++)e.dataTransform(t[a]) } } _applyInitialConditionalFormatting(e) { const t = this, a = t.conditionalFormatting; if (!a || 0 === a.length) return void (t._conditionalFormatting = null); const l = t._defaults, i = new JQX.Utilities.ConditionalFormatter(e), n = []; let r; if ("jqx-pivot-table" === t.nodeName.toLowerCase()) { const e = t._dynamicColumns; r = function (t) { return "all" === t ? e.map((e => e.id)) : e.filter((e => e.dataFields[e.dataFields.length - 1].dataField === t)).map((e => e.id)) } } else r = function (e) { return "all" === e ? t._columns.map((e => e.value)) : [e] }; for (let e = 0; e < a.length; e++) { a[e] = Object.assign({ column: "all", condition: "lessThan", firstValue: 0, secondValue: 1, fontFamily: l.fontFamily, fontSize: l.fontSize, text: l.text, highlight: l.highlight }, a[e]); const t = a[e], o = r(t.column), s = t.condition; i.color = t.highlight, i.comparator = t.firstValue, i.min = t.firstValue, i.max = t.secondValue; const d = i.format(s, o); for (let e in d) { const a = d[e]; for (let e in a) { const l = a[e]; l.color = t.text, l.fontFamily = t.fontFamily, l.fontSize = t.fontSize } } n.push(d) } if (t._formattingPanel && (t._formattingPanel.items = a.slice(0)), 0 === n.length) return n[0]; const o = {}; for (let e = 0; e < n.length; e++) { const t = n[e]; for (let e in t) { const a = t[e]; o[e] || (o[e] = {}); for (let t in a) o[e][t] = Object.assign({}, o[e][t], a[t]) } } t._conditionalFormatting = o } _toHex(e) { if (-1 !== e.indexOf("#")) return e; const t = /rgb\((\d+), (\d+), (\d+)\)/g.exec(e); return t ? "#" + (parseFloat(t[1]).toString(16).padStart(2, "0") + parseFloat(t[2]).toString(16).padStart(2, "0") + parseFloat(t[3]).toString(16).padStart(2, "0")).toUpperCase() : "#FFFFFF" } _applyConditionalFormatting() { const e = this, t = e._conditionalFormatting; e._conditionalFormatting = e._formattingPanel.apply(), e.conditionalFormatting = e._formattingPanel.getItems(), e._conditionalFormatting !== t && e._refreshDataRows() } _updateState(e, t) { const a = this; let l; if ("selected" === e && (l = a.getSelection(), a.selected = l), -1 === a.stateSettings.indexOf(e)) return; const i = a._state; switch (e) { case "columns": i.columns = a._columns; break; case "expanded": i.expanded = a._expandedIds; break; case "filtered": i.filtered = a._filterInfo; break; case "grouped": i.grouped = a.dataSource.groupBy._array.slice(0); break; case "selected": i.selected = l; break; case "sorted": i.sorted = a._sortColumns || [] }a.autoSaveState && a.isRendered && !1 !== t && window.localStorage.setItem("jqxTable" + a.id, a._stringifyState()) } _stringifyState() { const e = this, t = JSON.parse(JSON.stringify(e._state)); return ["columns", "expanded", "filtered", "grouped", "selected", "sorted"].forEach((a => { -1 === e.stateSettings.indexOf(a) && delete t[a] })), JSON.stringify(t, (function (e, t) { if (!("function" == typeof t || t instanceof HTMLElement || "sortOrder" === e || "thHierarchy" === e)) return t })) } _handleAutoSizeMode() { const e = this; if ("default" === e.columnSizeMode) { const t = e._columns.filter((e => e.visible)), a = [], l = t => { const a = t.headerCellElement; if (!a) return; const l = parseInt(t.minWidth || e.columnMinWidth); a.offsetWidth < l ? a.style.width = l + "px" : (a.style.width = "", a.offsetWidth < l && (a.style.width = l + "px")) }; t.forEach((t => { if (t.width || t._manualWidth || (l(t), a.push(t)), t.width && "string" == typeof t.width && t.width.endsWith("%")) { const a = e._getColumnWidth(t.width, !1, t); !1 === t.autoWidth ? t.headerCellElement.style.width = t.width : (t.headerCellElement.setAttribute("responsive-width", t.width), t.headerCellElement.style.width = a + "px") } else if (t._manualPercentageWidth) if (t._isResponsive) { const a = e._getColumnWidth(t._manualPercentageWidth + "%", !1, t); !1 === t.autoWidth ? t.headerCellElement.style.width = t.width : (t.headerCellElement.setAttribute("responsive-width", t._manualPercentageWidth + "%"), t.headerCellElement.style.width = a + "px") } else t.headerCellElement.style.width = t._manualWidth + "px" })); for (let e = 0; e < a.length; e++)l(a[e]); if (e.columnResizeNormalize && "" === e._columns[e._columns.length - 1].dataField) { const t = e._columns[e._columns.length - 1].headerCellElement.offsetWidth; if (t) { let a = []; e._columns.forEach((e => { e.width && e.width.indexOf && e.width.indexOf("%") >= 0 && a.push(e) })); let l = t / a.length; a.forEach((e => { e.width && e.width.indexOf && e.width.indexOf("%") >= 0 && (e.headerCellElement.style.width = parseInt(e.headerCellElement.style.width) + l + "px") })) } } return } const t = e._columns.filter((e => e.visible)), a = e._getNumericMinWidth(); let l, i; t.forEach((e => { e.width || e._manualWidth || (l || (l = e), i = e, e.headerCellElement.style.width = null) })); const n = e.$.tableContainer.offsetWidth - (e.selection ? e.$.tableContainer.querySelector(".jqx-table-select-all").offsetWidth : 0); let r = new Map, o = 0, s = 0, d = 0; e.removeAttribute("resize-max-reached"), e.setAttribute("auto-size", ""), l && (l.headerCellElement.style.width = "100%"); for (let i = 0; i < t.length; i++) { const n = t[i]; if (n === l) { d++; continue } const c = n.headerCellElement; let u, f; n.width ? (u = f = e._getColumnWidth(n.width, !1, n), n.minWidth && u < f && (u = n.minWidth, f = n.minWidth)) : n._manualWidth ? (u = n._manualWidth, f = n.minWidth || a, u < f && (u = f)) : (u = Math.max(c.offsetWidth, a), f = n.minWidth || a, d++), o += u, s += f, n._isResponsive && (u = e._getColumnWidth(n._manualPercentageWidth + "%", !1, n), u < f && (u = f)), r.set(n, { width: u, minWidth: f }) } function c() { l.headerCellElement.style.width = null; const e = Math.max(l.headerCellElement.offsetWidth, a), t = l.minWidth || a; r.set(l, { width: e, minWidth: t }), o += Math.max(e, t), s += t } if (l) if (l !== i) i.headerCellElement.style.width = "100%", c(), i.headerCellElement.style.width = null; else if (t.length > 1) { const e = t.find((e => e !== l)); e.headerCellElement.style.width = "100%", c(), e._isResponsive ? e.headerCellElement.style.width = r.get(e).width + "%" : e.headerCellElement.style.width = r.get(e).width + "px" } else c(); if (n <= s || 0 === d) t.forEach((t => { if (t._isResponsive) { if (t.headerCellElement.style.width = (t._manualPercentageWidth ? t._manualPercentageWidth + "%" : r.get(t).minWidth) + "px", t._manualPercentageWidth) { const a = e._getColumnWidth(t._manualPercentageWidth + "%", !1, t), l = t.minWidth || e.columnMinWidth; a === l && (t.headerCellElement.style.width = l + "px") } } else t.headerCellElement.style.width = (t._manualWidth ? t._manualWidth : r.get(t).minWidth) + "px" })), n <= s && e.setAttribute("resize-max-reached", ""); else if (n > s) if (n < o) { const a = []; let l, i = o - n, s = d; for (; i > 0 && s > 0;)l = Math.ceil(i / s), t.forEach((e => { if (e.width || e._manualWidth || -1 !== a.indexOf(e)) return; const t = r.get(e); let n = Math.max(t.width - l, t.minWidth); const o = t.width - n; i -= o, n === t.minWidth && (s--, a.push(e)), t.width = n })); t.forEach((t => { if (t._isResponsive) { if (t.headerCellElement.style.width = r.get(t).width + "%", t._manualPercentageWidth) { const a = e._getColumnWidth(t._manualPercentageWidth + "%", !1, t), l = t.minWidth || e.columnMinWidth; a === l && (t.headerCellElement.style.width = l + "px") } } else t.headerCellElement.style.width = r.get(t).width + "px" })) } else n === o ? t.forEach((e => { e._isResponsive ? e.headerCellElement.style.width = r.get(e).width + "%" : e.headerCellElement.style.width = r.get(e).width + "px" })) : t.forEach((e => { const t = r.get(e).width; e.headerCellElement.style.width = e === l ? n - o + t + "px" : t + "px" })); e.removeAttribute("auto-size") } _getNumericMinWidth() { const e = this, t = e.columnMinWidth; return "string" == typeof t && -1 !== t.indexOf("%") ? e.offsetWidth * (parseFloat(t) / 100) : parseFloat(t) } _getCurrentResizeMax() { const e = this; if ("default" === e.columnSizeMode) return 1 / 0; const t = e._resizeDetails, a = e._columns, l = a.find((e => e.headerCellElement === t.Item)), i = a.indexOf(l); let n, r = a.length - 1; for (let e = a.length - 1; e >= 0; e--)if (a[e].visible) { r = e; break } if (i === r) return t.Item.offsetWidth; for (let t = i + 1; t < a.length; t++) { const l = a[t]; t === r && l.headerCellElement && (n = l.headerCellElement.getBoundingClientRect()[e.rightToLeft ? "left" : "right"] + window.scrollX) } return n } _autoResizeColumnOnDblclick() { const e = this, t = e._resizeDetails, a = t.Item, l = e._columns.find((e => e.headerCellElement !== a)).headerCellElement, i = l.style.width; e.setAttribute("auto-size", ""), a.style.width = null, l.style.width = "100%"; let n = a.offsetWidth; l.style.width = i, e.removeAttribute("auto-size", ""), n = Math.min(t.Max, Math.max(t.Min, n)), t.Width = n, e._resolveResize() } _isExpandCollapseForbidden() { const e = this; return (!e.hasAttribute("hierarchy") || e.grouping) && "jqx-pivot-table" !== e.nodeName.toLowerCase() } _selectSingle(e) { const t = this, a = t.rowById ? t.rowById[e] || t.dataSource.dataItemById[e] : t.rows.dataItemById[e]; if (!a) return; const l = a.data ? a.data.$.id : a.$.id; if (-1 !== t._selectedIds.indexOf(l) || -1 !== t._disabledSelection.indexOf(l)) return; const i = t.$.tableContainer.querySelector(`tr[row-id="${l}"]:not([unused])`); if ("one" === t.selectionMode && (t._clearSelection(), t._selectedIds = []), t._selectedIds.push(l), i) { const e = i.firstElementChild; e.classList.remove("indeterminate"), e.classList.add("selected"), e.firstElementChild.setAttribute("aria-checked", !0), i.setAttribute("aria-selected", !0) } return t._handleHierarchicalSelection(a, !0), !0 } _unselectSingle(e) { const t = this, a = t.rowById ? t.rowById[e] || t.dataSource.dataItemById[e] : t.rows.dataItemById[e]; if (!a) return; const l = a.data ? a.data.$.id : a.$.id, i = t._selectedIds.indexOf(l), n = t.$.tableContainer.querySelector(`tr[row-id="${l}"]:not([unused])`); if (-1 !== i && t._selectedIds.splice(i, 1), n) { const e = n.firstElementChild; e.classList.remove("selected", "indeterminate"), e.firstElementChild.setAttribute("aria-checked", !1), n.setAttribute("aria-selected", !1) } return t._handleHierarchicalSelection(a, !1), !0 } _changeSelectionOfMultiple(e, t, a = "programmatic", l) { const i = this; l || (l = JSON.stringify(i._selectedIds.slice(0).sort())); for (let a = 0; a < e.length; a++)i[`_${t}Single`](e[a]); l !== JSON.stringify(i._selectedIds.slice(0).sort()) && (i._updateSelectAllState(), i._updateState("selected"), i.$.fireEvent("change", { type: a })) } _handleHierarchicalSelection(e, t) { const a = this; if (!a.hasAttribute("hierarchy")) return; if (!1 === a.selectionByHierarchy) return; const l = e.data; let i = l; for (l && l.children && function e(t, l) { const i = t.children; let n = 0; for (let t = 0; t < i.length; t++) { const r = i[t]; if (!1 === r.$.filtered) continue; let o = a._setThreeStateCheckbox(r, l); r.children && r.children.length > 0 && (o = e(r, l)), l && !1 === o && n++ } if (l && n > 0) return a._setThreeStateCheckbox(t, n !== i.length && null) }(l, t); i && i.parent;) { const e = i.parent, t = a._getChildCheckState(e).state; a._setThreeStateCheckbox(e, t), i = e } } _getChildCheckState(e) { const t = this, a = t._selectedIds, l = t._disabledSelection, i = e.children; if (!i || 0 === i.length || !t.selectionByHierarchy) { const t = e.$.id, i = -1 !== a.indexOf(t); return { state: i, maxSelected: !!i || -1 !== l.indexOf(t) } } let n = !0, r = 0, o = 0, s = 0; for (let e = 0; e < i.length; e++) { const a = i[e]; if (!1 === a.$.filtered) continue; const l = t._getChildCheckState(a); r++, l.state ? o++ : null === l.state ? s++ : !1 === l.maxSelected && (n = !1) } return 0 !== o && o === r ? { state: !0, maxSelected: !0 } : 0 === o && 0 === s ? { state: !1, maxSelected: n } : { state: null, maxSelected: n } } _setThreeStateCheckbox(e, t) { const a = this, l = e.$.id, i = a._selectedIds, n = i.indexOf(l); t && (-1 !== a._disabledSelection.indexOf(l) ? t = !1 : -1 === n && i.push(l)), t || -1 === n || i.splice(n, 1); const r = a.$.tableContainer.querySelector(`tr[row-id="${l}"]:not([unused])`); if (!r) return t; const o = r.firstElementChild, s = o.firstElementChild; return t ? (o.classList.remove("indeterminate"), o.classList.add("selected"), s.setAttribute("aria-checked", !0), r.setAttribute("aria-selected", !0)) : !1 === t ? (o.classList.remove("selected", "indeterminate"), s.setAttribute("aria-checked", !1), r.setAttribute("aria-selected", !1)) : (o.classList.remove("selected"), o.classList.add("indeterminate"), s.setAttribute("aria-checked", "mixed"), r.setAttribute("aria-selected", !1)), t } _getSelectableGroupRecords() { const e = this, t = e.dataSource, a = t.boundHierarchy; e._selectableGroupRecords = [], a ? (function t(a) { a.forEach((a => { a.groupDataField && (e._selectableGroupRecords.push(a.$.id), t(a.children)) })) }(a), e._selectedIds = e._selectedIds.filter((a => void 0 !== t.dataItemById[a] || -1 !== e._selectableGroupRecords.indexOf(a)))) : e._selectedIds = e._selectedIds.filter((e => void 0 !== t.dataItemById[e])) } _clearSelection(e) { const t = this; if (0 === t._selectedIds.length) return; const a = t.$.tableContainer.querySelector(".jqx-table-select-all"); Array.from(t.$.tableContainer.querySelectorAll(".jqx-table-select-row")).forEach((e => { e.parentElement.classList.contains("disable-select") || e.parentElement.setAttribute("aria-selected", !1), e.classList.remove("selected", "indeterminate"), e.firstElementChild.setAttribute("aria-checked", !1) })), a && (a.classList.remove("indeterminate", "selected"), a.firstElementChild.setAttribute("aria-checked", !1)), t._selectedIds = [], e && (t._updateState("selected"), t.$.fireEvent("change", { type: "programmatic" })) } _updateCellsWithFormulas(e) { const t = this, a = t.formulas, l = t._cellsWithFormulas; if (a || e) for (let e in l) { const a = /(.+):(.+)/.exec(e), l = t.columnByDataField[a[1]], i = t.rowById[a[2]]; if (!l || !i) continue; const n = t.$.tableContainer.querySelector(`tr[row-id="${i.data.$.id}"]:not([unused]) td[data-field="${l.dataField}"]`); n && t._setCellContent(n, t._formatCellValue(i, l, n), n.classList.contains("tree-cell")) } } _createVirtualDataRows(e) { const t = this, a = t.rowDetailTemplate, l = t.selection, i = t.hasAttribute("hierarchy"), n = document.createDocumentFragment(), r = t.$.virtualizationContainer, o = t.$.tableContainer, s = t._rowHeight; t.isRendered && (r.scrollWidth = 0, r.scrollHeight = 0, r.$.scrollViewerContainer.classList.remove("hscroll", "vscroll")); const d = r.$.scrollViewerContainer.offsetHeight - o.firstElementChild.offsetHeight - (t.filtering && t.filterRow ? s : 0) - (t.footerRow ? o.lastElementChild.offsetHeight : 0), c = d < 5, u = t._getVirtualRecords(i, c), f = u.length; let m = i ? 2 * d : d + 3 * s, h = s * f, p = 0; t._rowsVirtual = u, t._rowsInDOM = []; for (let e = 0; e < f; e++) { const r = u[e], o = r.data; if (!r.detail) { if (o.groupDataField) t._rowsInDOM.push(t._createGroupHeader(o, n)); else { const e = t._createDataRow(r, n, { hierarchical: i, rowDetailTemplate: a, selection: l, virtualization: !0 }); t._rowsInDOM.push(e.row), e.detail && (t._rowsInDOM.push(e.detail), p += t._rowDetailHeight, m += t._rowDetailHeight) } if (p += s, !c && p > m) break } } e.appendChild(n), t._updateState("expanded"), e.parentElement || t.$.tableContainer.insertBefore(e, t.$.tableContainer.querySelector("tfoot")), r.refresh(), a && (h += t._expandedRowDetailIds.length * (t._rowDetailHeight - s)); let g = Math.max(0, h - d); g > 0 && r.computedHorizontalScrollBarVisibility && (g += r.$.horizontalScrollBar.offsetHeight), r.$.scrollViewerContentContainer.style.top = 0, r.$.verticalScrollBar.max = g, t._scrollHeight = h, t._start = { view: 0, data: 0 }, !c && t._rowsInDOM.length > 0 && r.$.scrollViewerContentContainer.offsetHeight < r.$.scrollViewerContainer.offsetHeight && t._rowsInDOM[t._rowsInDOM.length - 1].classList.add("last-row"), t._fixFrozenHeaderFirefox(), t._focusEquivalentCell() } _getVirtualRecords(e, t) { const a = this, l = e && !t ? a.rows.filter((e => 0 === e.data.level || !a._isCollapsed(e.data))) : a.rows; if (e || !a.rowDetailTemplate) return l; const i = []; return l.forEach((e => { i.push(e), -1 !== a._expandedRowDetailIds.indexOf(e.data.$.id) && i.push({ detail: !0, data: e.data }) })), i } _onVerticalChange(e, t) { const a = this; if (a._ignoreVerticalChange) return; const l = a.rows, i = a._rowHeight, n = a.$.virtualizationContainer; let r, o, s = e.detail.value; if (JQX.Utilities.Core.Browser.Firefox && a.virtualization && (n.$.scrollViewerContentContainer.style.top = null), a.setAttribute("ignore-detail-animation", ""), a._rowsInDOM.length === l.length || 0 === n.$.verticalScrollBar.max) { const e = Math.floor(s / i); return a._start = { view: e, data: e }, n.$.scrollViewerContentContainer.style.top = -s + "px", requestAnimationFrame((() => a.removeAttribute("ignore-detail-animation"))), void a._fixFrozenHeaderFirefox() } if (a._expandedRowDetailIds.length > 0) { let e, t = 0; r = 1; for (let l = 0; l < a._rowsVirtual.length; l++) { const i = t; if (a._rowsVirtual[l].detail ? t += a._rowDetailHeight : t += a._rowHeight, void 0 === o && s <= t) { o = l, e = s - i; break } } n.computedVerticalScrollBarVisibility ? s = e + a._rowHeight : r = 0 } else { for (s = s % (2 * i) + i, s < i && (s += i); s + n.$.scrollViewerContainer.offsetHeight > a.$.tableContainer.offsetHeight;)s -= i; r = Math.floor(s / i), o = Math.floor(e.detail.value / i), r < 0 && (o -= r, r = 0) } n.$.scrollViewerContentContainer.style.top = -s + "px", a._updateVisibleRows(r, o, t || a._expandedRowDetailIds.length > 0), a._fixFrozenHeaderFirefox(), requestAnimationFrame((() => a.removeAttribute("ignore-detail-animation"))) } _fixFrozenHeaderFirefox() { const e = this; e.virtualization && e.$.virtualizationContainer && e.$.virtualizationContainer.$.scrollViewerContentContainer && (e._tableHeader.style.top = -parseFloat(e.$.virtualizationContainer.$.scrollViewerContentContainer.style.top) + "px"), JQX.Utilities.Core.Browser.Firefox && e.virtualization } _focusEquivalentCell(e) { const t = this, a = t._focusedCell; if (!e && !a) return; let l; if (!e) { if (!a.parentElement) return; e = { rowId: a.parentElement.data.$.id, dataField: a.getAttribute("data-field") } } l = e.dataField ? t.$.tableContainer.querySelector(`tr[row-id="${e.rowId}"]:not([unused]) td[data-field="${e.dataField}"]`) : t.$.tableContainer.querySelector(`tr[row-id="${e.rowId}"]:not([unused]) td.group-header`), t._focusCell(l) } _detachCachedTemplates() { const e = this; e._cachedTemplates && (delete e._cachedTemplates, e._tableCachedTemplates && (e._tableCachedTemplates.remove(), delete e._tableCachedTemplates)) } _clearCachedTemplates() { const e = this; if (e._cachedTemplates && Object.keys(e._cachedTemplates).length > 0) { e._tableCachedTemplates || (e._tableCachedTemplates = document.createElement("div"), e._tableCachedTemplates.style.display = "none", document.body.appendChild(e._tableCachedTemplates)); const t = document.createDocumentFragment(); for (let a in e._cachedTemplates) t.appendChild(e._cachedTemplates[a]); e._tableCachedTemplates.appendChild(t) } } _updateVisibleRows(e, t, a) { const l = this, i = t - e, n = l._rowsVirtual.length, r = { hierarchical: l.hasAttribute("hierarchy"), selection: l.selection }; let o; if (a = a && (r.hierarchical || !!l.rowDetailTemplate), r.hierarchical && !l.grouping && (a = !0), l._sortColumns && l._sortColumns.length > 0 && (a = !0), l._focusedCell) { const e = l._focusedCell.parentElement; e && (o = { rowId: e.data.$.id, dataField: l._focusedCell.getAttribute("data-field") }) } for (let t = 0; t < e; t++) { const e = l._rowsInDOM[t]; let n = i + t; n >= 0 && (a || e.data.$.index !== n || e.data.detail) && l._updateVisibleRow(e, n, r), e.setAttribute("unused", ""), e.setAttribute("aria-hidden", !0), e.classList.remove("jqx-table-row-detail") } for (let t = e; t < l._rowsInDOM.length; t++) { const e = l._rowsInDOM[t], o = i + t; o < n ? (e.removeAttribute("unused"), e.removeAttribute("aria-hidden"), (a || e.data.$.index !== o || e.data.parent) && l._updateVisibleRow(e, o, r)) : e.setAttribute("aria-hidden", !0) } l._start = { view: e, data: t }, l._focusEquivalentCell(o) } _updateVisibleRow(e, t, a) { const l = this, i = l._columns.filter((e => e.visible)); if (!i.length) return; const n = l._rowsVirtual[t], r = n.data, o = r.$.id, s = Number(a.selection), d = !r.groupDataField && !e.firstElementChild.classList.contains("group-header") && !n.detail && !e.classList.contains("jqx-table-row-detail") && e.childElementCount > 1; if (e.className = "", d) { const t = e.attributes; for (; t.length > 0;)e.removeAttribute(t[0].name) } else e.innerHTML = ""; if (r.groupDataField) l._createGroupHeader(r, void 0, e); else if (n.detail) l._createRowDetailOnDemand(e, n, r); else { e.setAttribute("aria-rowindex", r.$.index + 1), l._processAndRenderSelection(r, e, a.hierarchical, d); for (let t = 0; t < i.length; t++) { const c = i[t]; let u = d ? e.children[t + s] : document.createElement("td"), f = !1; if (u && (l.grouping && !r.groupDataField || l.dataSource && l.dataSource.groupBy && l.dataSource.groupBy.length > 0) && u.removeAttribute("colspan"), !u) { if (!d) continue; u = document.createElement("td"), f = !0, e.appendChild(u) } d && (u.className = ""), u.setAttribute("data-field", c.dataField), u.setAttribute("aria-colindex", t + 1 + s); let m, h = l._formatCellValue(n, c, u); if (f && l._setCellContent(u, h, m), c.freeze && u.classList.add("freeze-" + ("far" === c.freeze ? "far" : "near")), c.responsivePriority && u.classList.add("priority-" + c.responsivePriority), !1 === c.allowEdit ? (u.classList.add("no-edit"), u.setAttribute("aria-readonly", !0)) : u.removeAttribute("aria-readonly"), 0 === t && a.hierarchical) { const e = l._areChildrenFiltered(r); r.leaf || (u.classList.add("tree-cell"), m = e), r.level && (u.classList.add("outline-level-" + Math.min(r.level, 10)), !r.leaf && e || u.classList.add("tree-leaf")) } if (c.templateElement) { if (f && l.grouping) { const e = c.templateElement + "", t = u; e.indexOf("{{value}}") >= 0 ? t.innerHTML = e.replace(/{{value}}/gi, '<div class="jqx-table-cell-template">' + r[c.dataField] + "</div>") : t.innerHTML = e } else if (a.hierarchical && l.grouping && r.leaf) { const e = c.templateElement + "", t = u; if ((!t.firstElementChild || !(t.firstElementChild.hasAttribute("ng-version") || t.innerHTML.indexOf("ng-version") >= 0)) && t.firstElementChild && !t.firstElementChild.classList.contains(".jqx-table-cell-template")) { const a = t.innerHTML; e.substring(e.lastIndexOf("</")) !== a.substring(a.lastIndexOf("</")) && (e.indexOf("{{value}}") >= 0 ? t.innerHTML = e.replace(/{{value}}/gi, '<div class="jqx-table-cell-template">' + r[c.dataField] + "</div>") : t.innerHTML = e) } } if (m && !u.querySelector(".hierarchy-arrow")) { l._setCellContent(u, h, m); const e = u.children[0].children[1], t = c.templateElement + ""; t.indexOf("{{value}}") >= 0 ? e.innerHTML = t.replace(/{{value}}/gi, '<div class="jqx-table-cell-template">' + r[c.dataField] + "</div>") : e.innerHTML = t } else if (a.hierarchical && !l.grouping && r.leaf) { const e = u; if (!e.firstElementChild || !(e.firstElementChild.hasAttribute("ng-version") || e.innerHTML.indexOf("ng-version") >= 0)) { l._setCellContent(u, h, !1); const t = c.templateElement + ""; t.indexOf("{{value}}") >= 0 ? e.innerHTML = t.replace(/{{value}}/gi, '<div class="jqx-table-cell-template">' + r[c.dataField] + "</div>") : e.innerHTML = t } } if (!d) { const e = c.templateElement + "", t = m ? u.children[0].children[1] : u; e.indexOf("{{value}}") >= 0 ? t.innerHTML = e.replace(/{{value}}/gi, '<div class="jqx-table-cell-template">' + r[c.dataField] + "</div>") : t.innerHTML = e } let e = m ? u.children[0].children[1].firstElementChild : u.firstElementChild; if (!e && a.hierarchical) { l._setCellContent(u, h, !1); const t = u, a = c.templateElement + ""; a.indexOf("{{value}}") >= 0 ? t.innerHTML = a.replace(/{{value}}/gi, '<div class="jqx-table-cell-template">' + r[c.dataField] + "</div>") : t.innerHTML = a, e = m ? u.children[0].children[1].firstElementChild : u.firstElementChild } c.templateElementSettings ? c.templateElementSettings(r[c.dataField], o, e) : c.templateElement.indexOf("{{value}}") >= 0 && (u.querySelector(".jqx-table-cell-template").textContent = r[c.dataField]) } else c.formatFunction, l._setCellContent(u, h, m); l.onCellRender && l.onCellRender(r, c.dataField, r[c.dataField], u), l._applyConditionalFormattingToCell(u, c.dataField, r.$.index), d || e.appendChild(u) } e.data = r, e.setAttribute("row-id", o), -1 !== l._disabledSelection.indexOf(o) && (e.removeAttribute("aria-selected"), e.classList.add("disable-select"), a.selection && e.firstElementChild.firstElementChild.setAttribute("aria-disabled", !0)), r.expanded ? (-1 === l._expandedIds.indexOf(o) && l._expandedIds.push(o), l._expandedIdsAlt[o] = !0, e.setAttribute("aria-expanded", !0), e.classList.add("expanded")) : !1 === r.expanded && e.setAttribute("aria-expanded", !1), r.level && l._isCollapsed(r) && (e.setAttribute("aria-hidden", !0), e.classList.add("collapsed", "jqx-hidden")) } } _createRowDetailOnDemand(e, t, a) { const l = this, i = Number(l.selection) + l._columns.filter((e => e.visible)).length; e.data = Object.assign(a, { detail: !0 }), e.classList.add("jqx-table-row-detail"), e.removeAttribute("aria-rowindex"), e.removeAttribute("row-id"), e.innerHTML = `<td colspan="${i}"><div class="jqx-table-detail-container">${l._applyRowDetailTemplate(t)}</div></td>` } _hierarchyArrowClickHandlerVirtualization(e, t) { const a = this, l = !a.grouping, i = a.$.tableContainer, n = { nextRow: e.nextElementSibling, tbody: i.children[1] }, r = e.data, o = [], s = [], d = Math.ceil((a.$.virtualizationContainer.$.scrollViewerContainer.offsetHeight - i.firstElementChild.offsetHeight) / a._rowHeight); function c() { 0 === o.length ? function () { if (a._ignoreVerticalChange = !0, r.expanded = !r.expanded, l) r.expanded ? (-1 === a._expandedIds.indexOf(r.$.id) && a._expandedIds.push(r.$.id), a._expandedIdsAlt[r.$.id] = !0, a.$.fireEvent("expand", { id: r.$.id, record: r })) : (a._expandedIds = a._expandedIds.filter((e => e !== r.$.id)), delete a._expandedIdsAlt[r.$.id], a.$.fireEvent("collapse", { id: r.$.id, record: r })), a._updateState("expanded"); else if (!0 !== t) { const e = t => { for (let a = 0; a < t.length; a++) { const l = t[a]; if (l.$.id === r.$.id) return l; if (l.children) { let t = e(l.children); if (t) return t } } return null }, t = e(a.dataSource.boundHierarchy); t && (t.expanded = r.expanded); let l = "" + r.$.id; l = l.replace("Item", "").replace(/_/gi, "."), r.expanded ? a.$.fireEvent("group", { action: "expand", path: l, dataField: r.groupDataField, label: r.label }) : a.$.fireEvent("group", { action: "collapse", path: l, dataField: r.groupDataField, label: r.label }) } for (const e of s) e.remove(); let e = a.$.virtualizationContainer.$.verticalScrollBar, i = a.$.virtualizationContainer.$.verticalScrollBar.value; a._refreshDataRows(), i = Math.min(e.max, i), e.value = i, delete a._ignoreVerticalChange, a._onVerticalChange({ detail: { value: i } }, !0) }() : requestAnimationFrame((() => c())) } function u(e) { for (const t of e) { if (s.length >= d) break; !1 !== t.$.filtered && (s.push(a._expandSingleChildRowVirtualization(t, n, o)), t.children && t.expanded && u(t.children)) } } r.expanded ? function e(t) { t.forEach((t => { a._collapseSingleChildRow(i.querySelector(`tr[row-id="${t.$.id}"]:not([unused])`), o), t.children && e(t.children) })) }(r.children) : requestAnimationFrame((() => u(r.children))), e.setAttribute("aria-expanded", !r.expanded), e.classList.toggle("expanded", !r.expanded), requestAnimationFrame((() => c())) } _expandSingleChildRowVirtualization(e, t, a) { const l = this, i = l.rowById[e.$.id], n = document.createDocumentFragment(); let r; if (i) { if (r = i.data.groupDataField ? l._createGroupHeader(i.data, n) : l._createDataRow(i, n, { virtualization: !0, hierarchical: !0, selection: l.selection }).row, -1 === [...t.tbody.children].indexOf(t.nextRow)) { let a = !1; e.children && 0 === e.children.length && (a = !0), e.children || (a = !0), l._rowsInDOM && l._rowsInDOM.length === l.rows.length && (a = !0), a || t.tbody.appendChild(n) } else t.tbody.insertBefore(n, t.nextRow); return l._expandSingleChildRow(r, a), r } } _getFractionOfMax() { const e = this; return e.isRendered && e.virtualization ? { vertical: function () { const t = e.$.virtualizationContainer.$.verticalScrollBar, a = t.max; return 0 === a ? 0 : t.value / a }(), horizontal: function () { const t = e.$.virtualizationContainer.$.horizontalScrollBar, a = t.max; return 0 === a ? 0 : t.value / a }() } : null } _setFractionOfMax(e) { if (!this.virtualization || null === e) return; const t = this.$.virtualizationContainer, a = t.$.verticalScrollBar, l = t.$.horizontalScrollBar; a.value = a.max * e.vertical, l.value = l.max * e.horizontal } _refreshHorizontalScrollbar() { const e = this.$.virtualizationContainer; if (!e) return; const t = e.$.scrollViewerContainer, a = e.$.horizontalScrollBar, l = e.$.verticalScrollBar, i = e.$.scrollViewerContentContainer.offsetWidth - t.offsetWidth; let n, r; i > 0 && !t.classList.contains("hscroll") ? (t.classList.add("hscroll"), n = "add") : i <= 0 && t.classList.contains("hscroll") && (r = a.offsetHeight, t.classList.remove("hscroll"), n = "subtract"), e.scrollWidth !== i && (e.scrollWidth = i), e.computedVerticalScrollBarVisibility && ("add" === n ? (r = a.offsetHeight, l.max += r) : "subtract" === n && (l.max -= r)) } _scrollToVirtualization(e, t) { const a = this; if (!a.virtualization) return; const l = a.$.virtualizationContainer, i = l.$.scrollViewerContentContainer, n = l.$.verticalScrollBar, r = l.$.horizontalScrollBar, o = a.$.tableContainer, s = i.offsetLeft, d = i.offsetTop, c = n.value; let u, f; switch (t && (u = t.offsetLeft, f = t.offsetTop), e) { case "nextArrow": { if (!t || !l.computedHorizontalScrollBarVisibility) return; const e = s + u + t.offsetWidth - l.offsetWidth; e > 0 && (r.value += e + n.offsetWidth); break } case "prevArrow": if (!t || !l.computedHorizontalScrollBarVisibility || u >= -s) return; r.value = u - s - r.value; break; case "ArrowUp": { const e = o.firstElementChild.offsetHeight - d - f; if (e <= 0) return; let t; if (a._focusedCell) { const e = a._focusedCell.parentElement; e && (t = { rowId: e.data.$.id, dataField: a._focusedCell.getAttribute("data-field") }) } const l = Math.max(0, c - e); l !== c && (n.value = l, a._focusEquivalentCell(t)); break } case "ArrowDown": { const e = d + f + t.offsetHeight - l.offsetHeight; if (e <= 0) return; const a = Math.min(n.max, c + e); a !== c && (n.value = a); break } case "Home": case "End": if (!l.computedHorizontalScrollBarVisibility) return; r.value = "Home" === e ? 0 : r.max } } _getExpandedGroups(e) { const t = this, a = []; return e ? (function e(l) { l.forEach((l => { l.expanded && a.push({ groupDataField: l.groupDataField, label: l.label, ancestorSignature: t._getGroupAncestorSignature(l) }), l.children && l.children.length > 0 && !1 === l.children[0].leaf && e(l.children) })) }(e), a) : [] } _getGroupAncestorSignature(e) { const t = []; let a = e.parent; for (; a;)t.push({ groupDataField: a.groupDataField, label: a.label }), a = a.parent; return JSON.stringify(t) } _restoreExpandedGroups(e) { if (0 === e.length) return; const t = this, a = t.dataSource, l = []; !function a(i) { i && i.forEach(((i, n) => { if (e.some((e => e.groupDataField === i.groupDataField && e.label === i.label && e.ancestorSignature === t._getGroupAncestorSignature(i)))) { let e = i.$.id; "string" == typeof e && (e = e.replace("Item", "").replace(/_/g, ".")), 0 === i.level ? l.push(n) : l.push(e) } i.children && i.children.length > 0 && !1 === i.children[0].leaf && a(i.children) })) }(a.boundHierarchy); const i = t._doNotFireEvent; t._doNotFireEvent = !0, l.forEach((e => t.expandGroup(e))), t._doNotFireEvent = i } });
|
|
174
|
+
|
|
175
|
+
/***/
|
|
176
|
+
}),
|
|
177
|
+
|
|
178
|
+
/***/ 9532:
|
|
179
|
+
/***/ (() => {
|
|
180
|
+
|
|
181
|
+
JQX("jqx-tab-item", class extends JQX.ContentElement { static get properties() { return { closeButtonHidden: { value: !1, type: "boolean" }, draggable: { value: !0, type: "boolean", reflectToAttribute: !1 }, index: { value: null, type: "number?" }, selected: { value: !1, type: "boolean" }, label: { value: "", type: "string" }, labelSize: { value: null, type: "number?" } } } get enableShadowDOM() { return !1 } render() { this.setAttribute("role", "tabpanel"), this.firstElementChild.setAttribute("role", "presentation"), super.render() } attached() { const e = this; super.attached(), e.isCompleted && (e.$.removeClass("right"), e.$.removeClass("left"), e.$.removeClass("top"), e.$.removeClass("bottom"), e.$.removeClass("animate")) } propertyChangedHandler(e, t, o) { super.propertyChangedHandler(e, t, o); const n = this; if (n._preventPropertyChangedHandler) delete n._preventPropertyChangedHandler; else switch (e) { case "closeButtonHidden": n.$.fireEvent("closeButtonVisibilityChange", { hidden: o }); break; case "disabled": { const e = n.tabLabelContainer; e && (o ? e.setAttribute("disabled", "") : e.removeAttribute("disabled")); break } case "index": n.$.fireEvent("indexChange", { newIndex: o, oldIndex: t, tabItem: n }); break; case "label": { const e = n.closest("jqx-tabs"); e ? e._updateTabLabel(n, o) : n.setAttribute("aria-label", o); break } case "selected": n.tabLabelContainer && n.tabLabelContainer.setAttribute("aria-selected", o); break; case "labelSize": n.$.fireEvent("labelSizeChange", { size: o }) } } appendChild(e) { const t = this; if (!t.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } t.firstElementChild.appendChild(e) } insertBefore(e, t) { const o = this; if (!o.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.insertBefore.apply(o, e.concat(Array.prototype.slice.call(arguments))) } o.firstElementChild.insertBefore(e, t) } _setIndex(e) { const t = this, o = t.context; t.context = t, t.index = e, t.context = o } }), JQX("jqx-tab-items-group", class extends JQX.ContentElement { static get properties() { return { label: { value: "", type: "string" }, labelSize: { value: null, type: "number?" } } } get enableShadowDOM() { return !1 } template() { return "" } propertyChangedHandler(e, t, o) { super.propertyChangedHandler(e, t, o); const n = this; if (n._preventPropertyChangedHandler) delete n._preventPropertyChangedHandler; else switch (e) { case "label": { const e = n.closest("jqx-tabs"); if (!e) return; const a = e._groups.indexOf(t); if (a < 0) break; const r = Array.from(e.$.tabStrip.querySelectorAll(".jqx-tab-group-container")).find((e => e.group === t)); Array.from(n.querySelectorAll("jqx-tab-item")).forEach((e => e.group = o)), r.querySelector(".jqx-tab-label-text-container").innerHTML = o, r.setAttribute("aria-label", o), r.group = o, e._groups[a] = o; break } case "labelSize": this.$.fireEvent("labelSizeChange", { size: o }) } } }), JQX("jqx-tabs", class extends JQX.BaseElement { static get properties() { return { addNewTab: { value: !1, type: "boolean" }, addNewTabAutoCreate: { value: !0, type: "boolean" }, allowToggle: { value: !1, type: "boolean" }, closeButtonMode: { value: "default", allowedValues: ["default", "selected"], type: "string" }, closeButtons: { value: !1, type: "boolean" }, collapsed: { value: !1, type: "boolean" }, collapsible: { value: !1, type: "boolean" }, dataSource: { value: null, type: "array?", reflectToAttribute: !1 }, enableMouseWheelAction: { value: !1, type: "boolean" }, messages: { value: { en: { ambiguousIndexes: "jqx-tabs: Initially set jqx-tab-item indexes are ambiguous and are ignored in favour of the HTML structure.", detailsObjectRequired: 'jqx-tabs: The method "insert" requires a details Object to be passed as a second argument.', invalidIndex: 'jqx-tabs: "{{method}}" method accepts an index of type number.', referenceNodeNotChild: "jqx-tabs: Passed {{argument}} is not part of this jqx-tabs element.", tabItemRequired: 'jqx-tabs: The method "{{method}}" requires a "jqx-tab-item" element to be passed as an argument.' } }, type: "object", extend: !0 }, name: { value: "", type: "string" }, overflow: { value: "auto", allowedValues: ["auto", "hidden", "scroll"], type: "string" }, reorder: { value: !1, type: "boolean" }, resize: { value: !1, type: "boolean" }, scrollButtonsPosition: { value: "both", allowedValues: ["near", "far", "both"], type: "string" }, scrollMode: { value: "paging", allowedValues: ["paging", "continuous"], type: "string" }, selectedIndex: { value: null, type: "number?" }, selectionMode: { value: "click", allowedValues: ["click", "dblclick", "mouseenter", "none"], type: "string" }, tabLayout: { value: "scroll", allowedValues: ["scroll", "dropDown", "wrap", "shrink"], type: "string", defaultReflectToAttribute: !0 }, tabPosition: { value: "top", allowedValues: ["top", "bottom", "left", "right", "hidden"], type: "string" }, tabTextOrientation: { value: "horizontal", allowedValues: ["horizontal", "vertical"], type: "string" } } } static get listeners() { return { closeButtonVisibilityChange: "_closeButtonVisibilityChangeHandler", indexChange: "_indexChangeHandler", keydown: "_keydownHandler", labelSizeChange: "_labelSizeChangeHandler", resize: "_applyTabOverflow", styleChanged: "_applyTabOverflow", "container.dblclick": "_containerHandler", "container.down": "_containerHandler", "container.mouseout": "_containerHandler", "container.mouseover": "_containerHandler", "scrollButtonFar.click": "_scrollButtonClickHandler", "scrollButtonNear.click": "_scrollButtonClickHandler", "tabContentSection.transitionend": "_tabContentSectionTransitionendHandler", "tabsHeaderItems.wheel": "_tabsHeaderItemsWheelHandler", "tabStrip.mouseleave": "_tabStripMouseleaveHandler", "tabStrip.move": "_tabStripMoveHandler", "tabStrip.touchmove": "_tabStripTouchmoveHandler", "tabStrip.touchstart": "_tabStripTouchstartHandler", "document.move": "_documentMoveHandler", "document.selectstart": "_selectStartHandler", "document.up": "_documentUpHandler" } } static get requires() { return { "JQX.RepeatButton": "jqx.button.js" } } static get styleUrls() { return ["jqx.tabs.css"] } template() { return '<div id="container">\n <div id="tabsHeaderSection" class="jqx-header jqx-tabs-header-section">\n <div id="tabsHeaderItems" class="jqx-tabs-header-items">\n <jqx-repeat-button id="scrollButtonNear" class="jqx-tabs-scroll-button jqx-nav-button jqx-spin-button jqx-hidden" animation="[[animation]]" unfocusable>\n <div id="arrowNear" class="jqx-arrow" aria-hidden="true"></div>\n </jqx-repeat-button>\n <div id="tabStrip" class="jqx-tab-strip"></div>\n <jqx-repeat-button id="scrollButtonFar" class="jqx-tabs-scroll-button jqx-nav-button jqx-spin-button jqx-hidden" animation="[[animation]]" unfocusable>\n <div id="arrowFar" class="jqx-arrow" aria-hidden="true"></div>\n </jqx-repeat-button>\n <div id="dropDownButton" class="jqx-drop-down-button" role="button" aria-expanded="false" aria-label="Open tab selection popup">\n <div id="dropDownButtonArrow" class="jqx-drop-down-button-arrow jqx-unselectable" aria-hidden="true"></div>\n </div>\n <span id="tabSelectionBar" class="jqx-tabs-selection-bar" role="presentation"></span>\n <div id="resizeToken" class="jqx-tabs-resize-token jqx-hidden" role="presentation"></div>\n </div>\n <div id="tabHeaderControls" class="jqx-tabs-header-controls"></div>\n </div>\n <div id="tabContentSection" class="jqx-tabs-content-section">\n <content></content>\n </div>\n <div id="dropDownButtonDropDown" class="jqx-drop-down-button-drop-down jqx-hidden"></div>\n <input id="hiddenInput" type="hidden" name="[[name]]">\n </div>' } attached() { const e = this; super.attached(), e.isCompleted && e.isRendered && e._applyTabOverflow() } ready() { super.ready(), this._flexWritingModeNoFullSupport = !0 } render() { this._createElement(), super.render() } appendChild(e) { const t = this; if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e instanceof JQX.TabItem || t.error(t.localize("tabItemRequired", { method: "appendChild" })), t.isRendered ? t.insert(t._tabs.length, { node: e }) : t.whenRendered((() => t.insert(t._tabs.length, { node: e }))) } collapse() { const e = this; e.collapsible && !e.collapsed && (e.collapsed = !0) } ensureVisible(e) { const t = this; if (null === e || "wrap" === t.tabLayout || "shrink" === t.tabLayout || "hidden" === t.tabPosition) return; t._validateIndex(e, "ensureVisible"), e = Math.max(0, Math.min(e, t._tabs.length - 1)); const o = t._tabs[e].group, n = t.$.tabStrip, a = n.getBoundingClientRect(), r = (null === o ? t._tabLabelContainers[e] : t._groupLabels[t._groups.indexOf(o)]).getBoundingClientRect(); "top" === t.tabPosition || "bottom" === t.tabPosition ? (a.left > r.left ? n.scrollLeft += Math.round(r.left - a.left) : n.scrollLeft += Math.round(r.right - a.right), t.addNewTab && e === t._tabs.length - 1 && (n.scrollLeft = n.scrollWidth - n.offsetWidth)) : "left" !== t.tabPosition && "right" !== t.tabPosition || !(a.top > r.top || a.bottom < r.bottom) ? (n.scrollLeft = t._getScrollLeft(0), t.$.tabStrip.scrollTop = 0) : n.scrollTop += Math.round(r.bottom - n.offsetHeight - a.top), t._updateScrollButtonVisibility(), t.resize && t._getTabCoordinates() } expand() { const e = this; e.collapsible && e.collapsed && (e.collapsed = !1) } getOffsetFromEdgeOfElement(e) { const t = this; t._validateIndex(e, "getOffsetFromEdgeOfElement"), e = Math.max(0, Math.min(e, t._tabs.length - 1)); const o = t._tabs[e], n = t.tabPosition; return "hidden" !== n ? Math.abs(o.getBoundingClientRect()[n] - t.getBoundingClientRect()[n]) : o.getBoundingClientRect().top - t.getBoundingClientRect().top } getTabs() { const e = this, t = e._tabs; return t ? t.slice(0) : Array.from(e.shadowRoot ? e.shadowRoot.querySelectorAll("jqx-tab-item") : e.getElementsByTagName("jqx-tab-item")) } insert(e, t) { const o = this; let n, a; if (o._validateIndex(e, "insert"), (void 0 === t || void 0 === t.label && void 0 === t.content && void 0 === t.node) && o.error(o.localize("detailsObjectRequired")), void 0 === t.node) n = t.group, a = document.createElement("jqx-tab-item"), a.label = void 0 !== t.label ? t.label : "", a.labelSize = void 0 !== t.labelSize ? t.labelSize : null, a.content = t.content; else if (a = t.node, void 0 !== a.index && null !== a.index) { const e = a.context; a.context = a, a.index = null, a.context = e } a.$.addClass("jqx-visibility-hidden"), a.group = null; const r = o._addTabLabelContainer(a), s = r.tabLabelContainer, i = r.dropDownLabelContainer; s.tab = a, a.tabLabelContainer = s; const l = { index: e, tab: a, tabLabelContainer: s, dropDownLabelContainer: i }; if (o._setAriaRelations(a, s, i), 0 === o._groups.length && void 0 === n) o._insertNoGrouping(l); else if (null != n) { l.group = n; const e = o.$.tabContentSection.querySelector('jqx-tab-items-group[label="' + n + '"]'); null !== e ? (l.jqxTabItemsGroup = e, o._insertIntoExistingGroup(l)) : o._insertIntoNewGroup(l) } else o._insertNearAGroup(l); o._getReorderItems(), null === o.selectedIndex && !o.allowToggle && o._tabs.length && o._select(0, !0), null !== a.group && null !== a.labelSize && "shrink" !== o.tabLayout && s.style.removeProperty([o._orientationSettings.dimension]), o._applyTabOverflow() } insertBefore(e, t) { const o = this; if (!o.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.insertBefore.apply(o, e.concat(Array.prototype.slice.call(arguments))) } let n; e instanceof JQX.TabItem && (null == t || t instanceof JQX.TabItem) || o.error(o.localize("tabItemRequired", { method: "insertBefore" })), o.contains(e) && (e.selected && (n = !0), o.removeAt(e.index)), null != t ? (o.contains(t) || o.error(o.localize("referenceNodeNotChild", { argument: "referenceNode" })), o.insert(t.index, { node: e })) : o.insert(o._tabs.length, { node: e }), n && o._select(e.index, !1) } refreshTabHeader() { const e = this; "scroll" === e.tabLayout && e._checkOverflowScroll(), e._positionTabSelectionBar(e._tabLabelContainers ? e._tabLabelContainers[e.selectedIndex] : void 0, !0) } removeAt(e) { const t = this, o = t._tabs.length; if (0 === o) return; t._validateIndex(e, "remove"), e = Math.max(0, Math.min(e, o - 1)); const n = t._tabs[e], a = t._tabLabelContainers[e]; if (a._lazyRemove ? a.classList.add("jqx-hidden") : a.parentElement.removeChild(a), n.parentElement.removeChild(n), null !== n.group) { const e = t.$.tabContentSection.querySelector('jqx-tab-items-group[label="' + n.group + '"]'); if (0 === e.childElementCount) { const o = t._groups.indexOf(n.group); t.$.tabStrip.removeChild(t._groupLabels[o]), t._groups.splice(o, 1), t.$.container.removeChild(t._groupLabels[0].dropDown), t._groupLabels.splice(o, 1), t.$.tabContentSection.removeChild(e) } } o > 1 ? e < t.selectedIndex ? t.selectedIndex-- : e === t.selectedIndex && (e === o - 1 ? t._select(e - 1, !1) : (t._select(e + 1, !1), t.selectedIndex--)) : (t.selectedIndex = null, t.$.tabContentSection.innerHTML = ""), t._tabLabelContainers.splice(e, 1), t.$.dropDownButtonDropDown.removeChild(t.$.dropDownButtonDropDown.children[e]), t._tabs.splice(e, 1), t._focusedItem === n && (t._focusedItem = t._tabs[t._focusedItem.index]), t._updateTabIndexes(), t._getReorderItems(), t._applyTabOverflow(), t.ensureVisible(t.selectedIndex), t.$.hiddenInput.value = t.selectedIndex } removeChild(e) { const t = this; if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.removeChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e instanceof JQX.TabItem || t.error(t.localize("tabItemRequired", { method: "removeChild" })), t.contains(e) || t.error(t.localize("referenceNodeNotChild", { argument: "node" })), t.removeAt(e.index) } select(e) { const t = this; 0 !== t._tabs.length && (t._validateIndex(e, "select"), e = Math.max(0, Math.min(e, t._tabs.length - 1)), t.ensureVisible(e), t._select(e, !0)) } _setFocusable() { const e = this; e.disabled || e.unfocusable ? e.removeAttribute("tabindex") : (null === e.getAttribute("tabindex") || e.getAttribute("tabindex") < 0) && e.setAttribute("tabindex", 0) } getTabContent(e) { const t = this._getTabProperty(e, "content"); return t && t.innerHTML ? t.innerHTML : t } getTabLabel(e) { return this._getTabProperty(e, "label") } _getTabProperty(e, t) { if (0 === this._tabs.length) return null; const o = this._tabs[e]; return o ? o[t] : null } setTabLabel(e, t) { const o = this; if (0 === o._tabs.length) return; o._validateIndex(e, "update"), e = Math.max(0, Math.min(e, o._tabs.length - 1)); const n = o._tabs[e]; void 0 !== t && n.label !== t && o._updateTabLabel(n, t) } update(e, t, o) { const n = this; if (0 === n._tabs.length) return; n._validateIndex(e, "update"), e = Math.max(0, Math.min(e, n._tabs.length - 1)); const a = n._tabs[e]; void 0 !== t && a.label !== t && n._updateTabLabel(a, t), void 0 !== o && (a.content = o) } _createElement() { const e = this; e.$.dropDownButton.id || (e.$.dropDownButton.id = e.id + "DropDownButton"), e.$.dropDownButtonDropDown.id || (e.$.dropDownButtonDropDown.id = e.id + "DropDown"), e.setAttribute("role", "tablist"), e.$.dropDownButton.setAttribute("role", "button"), e.$.dropDownButton.setAttribute("aria-haspopup", !0), e.$.dropDownButton.setAttribute("aria-owns", e.$.dropDownButtonDropDown.id), e.$.dropDownButtonDropDown.setAttribute("role", "menu"), e.disabled && (e.$.scrollButtonNear.disabled = !0, e.$.scrollButtonFar.disabled = !0), e.rightToLeft && (e.$.tabsHeaderItems.removeChild(e.$.dropDownButton), "top" === e.tabPosition || "bottom" === e.tabPosition ? e.$.tabsHeaderItems.insertBefore(e.$.dropDownButton, e.$.scrollButtonNear) : e.$.tabsHeaderItems.insertBefore(e.$.dropDownButton, e.$.tabSelectionBar)), e._handlePosition(e.tabPosition), e._handleScrollButtonsPosition(e.scrollButtonsPosition, "both"), null !== e.dataSource && e._processDataSource(), e._setFocusable(), e.collapsed && !e.collapsible && (e.collapsed = !1), e.collapsible && e.allowToggle && (e.allowToggle = !1), e._processHTML(), null === e.selectedIndex && e.$.tabContentSection.setAttribute("show-placeholder", ""), setTimeout((() => e.refreshTabHeader()), 300), e.$.hiddenInput.value = e.selectedIndex, e.enableShadowDOM && HTMLElement.prototype.appendChild.apply(e, [e.$.hiddenInput]) } propertyChangedHandler(e, t, o) { super.propertyChangedHandler(e, t, o); const n = this; switch (e) { case "addNewTab": o ? n._insertAddNewTab() : (n.$.tabStrip.removeChild(n._addNewTab), delete n._addNewTab), n._applyTabOverflow(); break; case "allowToggle": o && n.collapsible ? (n.collapsed && n._toggleCollapsedState(), n.collapsible = !1) : o || null !== n.selectedIndex || (n.ensureVisible(n.selectedIndex = 0), n._select(n.selectedIndex, !0, null)); break; case "closeButtonMode": if ("selected" === o) { for (let e = 0; e < n._tabs.length; e++)n._disableCloseButton(e); n._enableCloseButton(n.selectedIndex) } else { n._disableCloseButton(n.selectedIndex); const e = n._tabLabelContainers; for (let t = 0; t < e.length; t++) { const o = e[t]; o.closeButtonEnabled = !0 !== n._tabs[t].closeButtonHidden, n._showCloseButton(o) } } n._applyTabOverflow(); break; case "closeButtons": { const e = n._tabLabelContainers, t = o ? n._showCloseButton : n._hideCloseButton; for (let o = 0; o < e.length; o++)t(e[o]); n._applyTabOverflow(); break } case "collapsed": if (!n.collapsible && o) return void (n.collapsed = !1); break; case "collapsible": !o && n.collapsed && (n.collapsed = !1), n.allowToggle = !1, void 0 === n.selectedIndex && n.select(n._focusedItem.index); break; case "dataSource": n.selectedIndex = null; for (let e = 0; e < n._groupLabels.length; e++)n.$.container.removeChild(n._groupLabels[e].dropDown); n.$.tabStrip.innerHTML = "", n._processDataSource(), n._processHTML(); break; case "disabled": n._setFocusable(), n.$.scrollButtonNear.disabled = o, n.$.scrollButtonFar.disabled = o, o || n._updateScrollButtonVisibility(), n._closeDropDownButtonDropDown(); break; case "messages": case "scrollMode": case "selectionMode": case "readonly": case "reorder": break; case "overflow": if ("scroll" !== n.tabLayout) return; n.$.tabStrip.scrollLeft = n._getScrollLeft(0), n.$.tabStrip.scrollTop = 0, "hidden" === o ? (n.$tabsHeaderSection.removeClass("scroll-buttons-shown"), n.$scrollButtonNear.addClass("jqx-hidden"), n.$scrollButtonFar.addClass("jqx-hidden")) : n._checkOverflowScroll(), n._getTabCoordinates(); break; case "tabPosition": n.$.tabSelectionBar.style.transition = "none", n._tabPositionChanging = !0, n._closeGroupDropDown(), n._handlePosition(o, t), "shrink" !== n.tabLayout && n._applyLabelSizes("tabPosition"), n.rightToLeft && (n.$.tabsHeaderItems.removeChild(n.$.dropDownButton), "top" === n.tabPosition || "bottom" === n.tabPosition ? n.$.tabsHeaderItems.insertBefore(n.$.dropDownButton, n.$.scrollButtonNear) : n.$.tabsHeaderItems.insertBefore(n.$.dropDownButton, n.$.tabSelectionBar)), n._applyTabOverflow(), delete n._tabPositionChanging, requestAnimationFrame((function () { n.$.tabSelectionBar.style.transition = null })); break; case "resize": o && n._getTabCoordinates(); break; case "rightToLeft": n._positionTabSelectionBar(n._tabLabelContainers[n.selectedIndex], !0), n.$.tabsHeaderItems.removeChild(n.$.dropDownButton), !o || "top" !== n.tabPosition && "bottom" !== n.tabPosition ? n.$.tabsHeaderItems.insertBefore(n.$.dropDownButton, n.$.tabSelectionBar) : n.$.tabsHeaderItems.insertBefore(n.$.dropDownButton, n.$.scrollButtonNear), n.ensureVisible(n.selectedIndex); break; case "scrollButtonsPosition": n._handleScrollButtonsPosition(o, t); break; case "selectedIndex": { if (isNaN(o) && (n.selectedIndex = o = t), !n.allowToggle && null === o) return void (n.selectedIndex = t); let e = o; null !== o && (e = Math.max(0, Math.min(o, n._tabs.length - 1)), n.ensureVisible(e)), n._select(e, !0, t); break } case "tabLayout": "scroll" === t && (n.$tabsHeaderSection.removeClass("scroll-buttons-shown"), n.$scrollButtonNear.addClass("jqx-hidden"), n.$scrollButtonFar.addClass("jqx-hidden")), "shrink" === o ? n._applyLabelSizes("shrink", !0) : "shrink" === t && n._applyLabelSizes("shrink", !1), n._applyTabOverflow(), "scroll" === o && n.disabled && (n.$.scrollButtonNear.disabled = !0, n.$.scrollButtonFar.disabled = !0), n.ensureVisible(n.selectedIndex); break; case "tabTextOrientation": n._applyTabOverflow(), n.ensureVisible(n.selectedIndex); break; case "unfocusable": n._setFocusable() } } _addGroupContainer(e, t) { const o = this, n = document.createElement("div"), a = document.createElement("div"), r = document.createElement("div"), s = document.createElement("div"), i = document.createElement("div"); return n.className = "jqx-tab-group-container jqx-unselectable", n.$ = JQX.Utilities.Extend(n), n.setAttribute("role", "group"), n.setAttribute("aria-expanded", !1), n.setAttribute("aria-haspopup", !0), n.setAttribute("aria-label", e), a.className = "jqx-tab-label-text-wrapper", a.setAttribute("role", "presentation"), a.setAttribute("aria-hidden", !0), null !== t && "shrink" !== o.tabLayout && (n.style[o._orientationSettings.dimension] = parseInt(t, 10) + "px"), r.className = "jqx-tab-label-text-container", r.innerHTML = e, s.className = "jqx-tab-group-arrow", i.className = "jqx-tab-group-drop-down jqx-hidden", i.$ = JQX.Utilities.Extend(i), i.id = o.id + "GroupDropDown" + e, i.setAttribute("role", "tablist"), i.setAttribute("aria-orientation", "vertical"), n.setAttribute("aria-owns", i.id), a.appendChild(r), a.appendChild(s), n.appendChild(a), o.$.container.appendChild(i), n.group = e, n.dropDown = i, i.groupContainer = n, { label: n, dropDown: i } } _addGroupElements(e) { const t = this, o = e.groups, n = e.groupLabels, a = e.group, r = o.indexOf(a), s = e.tabLabelContainer; let i; if (-1 !== r) i = n[r], i.dropDown.appendChild(s); else { o.push(a); const r = t._addGroupContainer(a, e.jqxTabItemsGroup.labelSize), l = r.dropDown; i = r.label, l.appendChild(s), l.groupContainer = r.label, e.documentFragment.appendChild(i), n.push(i) } t.selectedIndex === e.i && (t._selectedGroup = i, i.$.addClass("jqx-tab-group-selected")) } _addNewTabHandler(e, t, o) { const n = this; n._swiping || (o ? (e.removeAttribute("hover"), n.addNewTabAutoCreate && (n.insert(n._tabs.length, { label: "New Tab", content: "" }), n._select(n._tabs.length - 1, !0)), n.$.fireEvent("addNewTabClick")) : n._reordering || n._swiping || ("mouseover" === t ? e.setAttribute("hover", "") : "mouseout" === t && e.removeAttribute("hover"))) } _addTabLabelContainer(e, t) { const o = this, n = document.createElement("div"), a = document.createElement("div"), r = document.createElement("div"), s = document.createElement("div"); let i; return e && (e.disabled ? n.setAttribute("disabled", "") : n.removeAttribute("disabled")), n.className = "jqx-tab-label-container jqx-unselectable", a.className = "jqx-tab-label-text-wrapper", r.className = "jqx-tab-label-text-container", r.setAttribute("role", "presentation"), s.className = "jqx-tab-close-button", s.setAttribute("role", "button"), s.setAttribute("aria-label", "Close"), void 0 === t ? (o.closeButtons ? "default" === o.closeButtonMode && e.closeButtonHidden || "selected" === o.closeButtonMode && !e.selected ? (s.classList.add("jqx-hidden"), n.closeButtonEnabled = !1) : (r.classList.add("jqx-close-button-enabled"), n.closeButtonEnabled = !0) : (s.classList.add("jqx-hidden"), n.closeButtonEnabled = !0), i = document.createElement("div"), i.className = "jqx-tab-label-container jqx-unselectable", e && null === e.group && null !== e.labelSize && "shrink" !== o.tabLayout && (n.style[o._orientationSettings.dimension] = parseInt(e.labelSize, 10) + "px")) : (s.classList.add("jqx-hidden"), n.closeButtonEnabled = !1), o._setLabel(e ? e.label : "+", r, i), r.$ = JQX.Utilities.Extend(r), s.$ = JQX.Utilities.Extend(s), a.appendChild(r), a.appendChild(s), n.appendChild(a), n.$ = JQX.Utilities.Extend(n), { tabLabelContainer: n, dropDownLabelContainer: i } } _animateSelection(e, t, o) { const n = this; let a = "right", r = "left"; if (n.rightToLeft && (a = "left", a = "right"), n._animatedTab = e, n._animatedOldTab = t, n._animatedTab && n._animatedOldTab) { "left" !== n.tabPosition && "right" !== n.tabPosition || (a = "top", r = "bottom"); for (let e = 0; e < n._tabs.length; e++)n._tabs[e].$.removeClass(a), n._tabs[e].$.removeClass(r), n._tabs[e].$.removeClass("animate"); if (e === t) return e.$.hasClass("jqx-visibility-hidden") ? e.$.removeClass("jqx-visibility-hidden") : e.$.addClass("jqx-visibility-hidden"), void (n._animatedOldTab.classToRemove = a); o ? (e.$.addClass(a), e.$.removeClass("jqx-visibility-hidden"), t.$.addClass("jqx-visibility-hidden"), requestAnimationFrame((() => { t.$.addClass("animate"), e.$.addClass("animate"), requestAnimationFrame((() => { t.$.addClass(r), e.$.removeClass(a) })) })), n._animatedOldTab.classToRemove = r) : (e.$.addClass(r), e.$.removeClass("jqx-visibility-hidden"), t.$.addClass("jqx-visibility-hidden"), requestAnimationFrame((() => { t.$.addClass("animate"), e.$.addClass("animate"), requestAnimationFrame((() => { t.$.addClass(a), e.$.removeClass(r) })) })), n._animatedOldTab.classToRemove = a) } } _applyConditionalTabOverflow() { const e = this, t = "left" === e.tabPosition || "right" === e.tabPosition, o = e.$.tabStrip; if ("scroll" !== e.tabLayout) { if (e._flexWritingModeNoFullSupport && "shrink" === e.tabLayout && t && o.scrollHeight > o.offsetHeight) { const t = o.children, n = 100 / t.length + "%"; o.$.addClass("shrink-tabs-vertical"); for (let e = 0; e < t.length; e++)t[e].style.height = n, t[e].firstElementChild.firstElementChild.classList.add("jqx-tab-label-text-container-full-height"); e._inlineStyleTabStripChildren = !0 } } else e._checkOverflowScroll() } _applyLabelSizes(e, t) { const o = this, n = o._orientationSettings.dimension, a = "width" === n ? "height" : "width"; for (let r = 0; r < o._reorderItems.length; r++) { const s = o._reorderItems[r], i = o._getCorrespondingCustomElement(s); null !== i.labelSize && ("tabPosition" === e && s.style.removeProperty(a), t ? s.style.removeProperty(n) : s.style[n] = parseInt(i.labelSize, 10) + "px") } } refresh() { this._applyTabOverflow() } _applyTabOverflow() { const e = this; if (!e._tabs) return; if (e._removeInlineStyle(), 0 === e._tabs.length) return void e._toggleNavigationElementsVisibility(); const t = e.tabLayout, o = e.tabPosition, n = "left" === o || "right" === o, a = e.$.tabStrip; switch (e._closeDropDownButtonDropDown(), t) { case "scroll": case "dropDown": e._flexWritingModeNoFullSupport && "vertical" === e.tabTextOrientation && n && e._fixTabStripNotChrome(a); break; case "wrap": if ("vertical" === e.tabTextOrientation) if (e._flexWritingModeNoFullSupport) if (n) e._fixTabStripNotChrome(a); else { const t = a.children; let o = t[0].offsetHeight; for (let e = 1; e < t.length; e++)o = Math.max(o, t[e].offsetHeight); for (let e = 1; e < t.length; e++)t[e].style.height = o + "px"; e._inlineStyleTabStripChildren = !0 } else n || a.scrollHeight > a.offsetHeight && (a.style.height = a.scrollHeight + "px", e._inlineStyleTabStrip = !0); else n && a.scrollWidth > a.offsetWidth && (a.style.width = a.scrollWidth + "px", "right" === o && (a.style.flexWrap = "wrap-reverse"), e._inlineStyleTabStrip = !0); break; case "shrink": if (n) { if (e._flexWritingModeNoFullSupport && "vertical" === e.tabTextOrientation) { const t = a.children, o = window.getComputedStyle(t[0].firstElementChild), n = parseInt(o.paddingLeft, 10) + parseInt(o.paddingRight, 10); let r = 0; for (let e = 0; e < t.length; e++)r = Math.max(r, t[e].firstElementChild.firstElementChild.offsetWidth); a.style.width = n + r + "px", e._inlineStyleTabStrip = !0; break } } else a.scrollWidth > a.offsetWidth && a.$.addClass("shrink-tabs") }e._applyConditionalTabOverflow(), e._getTabCoordinates(), e._fixTabStripFlex(t), e._toggleNavigationElementsVisibility(), e._positionTabSelectionBar(e._tabLabelContainers[e.selectedIndex], !0) } _checkOverflowScroll() { const e = this, t = e.$tabsHeaderSection, o = e.$.tabStrip, n = e.overflow; if ("hidden" === n) return; let a, r, s; if ("left" !== e.tabPosition && "right" !== e.tabPosition) { const t = Math.abs(e._getScrollLeft()); a = Math.round(o.scrollWidth) > Math.round(o.offsetWidth), e.rightToLeft ? (s = Math.round(t) > 0, r = Math.round(o.offsetWidth + t) < Math.round(o.scrollWidth)) : (r = Math.round(t) > 0, s = Math.round(o.offsetWidth + t) < Math.round(o.scrollWidth)) } else a = Math.round(o.scrollHeight) > Math.round(o.offsetHeight), r = Math.round(o.scrollTop) > 0, s = Math.round(o.offsetHeight + o.scrollTop) < Math.round(o.scrollHeight); "scroll" === n && (t.addClass("scroll-buttons-shown"), e.$scrollButtonNear.removeClass("jqx-hidden"), e.$scrollButtonFar.removeClass("jqx-hidden")), a ? "auto" === n ? (t.hasClass("scroll-buttons-shown") || t.addClass("scroll-buttons-shown"), r ? e.$scrollButtonNear.removeClass("jqx-hidden") : e.$scrollButtonNear.addClass("jqx-hidden"), s ? e.$scrollButtonFar.removeClass("jqx-hidden") : e.$scrollButtonFar.addClass("jqx-hidden"), !1 === (r && s) ? t.addClass("one-button-shown") : t.removeClass("one-button-shown"), e.disabled || (e.$.scrollButtonNear.disabled = !1, e.$.scrollButtonFar.disabled = !1)) : (t.removeClass("one-button-shown"), e.disabled ? (e.$.scrollButtonNear.disabled = !0, e.$.scrollButtonFar.disabled = !0) : (e.$.scrollButtonNear.disabled = !r, e.$.scrollButtonFar.disabled = !s)) : !a && "auto" === n && t.hasClass("scroll-buttons-shown") ? (t.removeClass("scroll-buttons-shown"), t.removeClass("one-button-shown"), e.$scrollButtonNear.addClass("jqx-hidden"), e.$scrollButtonFar.addClass("jqx-hidden")) : a || "scroll" !== n || (e.$.scrollButtonNear.disabled = !0, e.$.scrollButtonFar.disabled = !0) } _closeButtonVisibilityChangeHandler(e) { const t = this, o = (JQX.EnableShadowDOM ? e.composedPath()[0] : e.target).index; "selected" !== t.closeButtonMode ? e.detail.hidden ? t._disableCloseButton(o) : t._enableCloseButton(o) : t._tabLabelContainers[o].closeButtonEnabled = e.detail.hidden } _closeDropDownButtonDropDown() { const e = this; e._dropDownButtonDropDownOpened && (e.$.dropDownButton.setAttribute("aria-expanded", !1), e.$dropDownButtonDropDown.addClass("jqx-hidden"), e._dropDownButtonDropDownOpened = !1) } _closeGroupDropDown() { const e = this; if (!e._openDropDown) return; const t = e._openDropDown.groupContainer; e._openDropDown.rippleInProgress ? setTimeout((function () { e._openDropDown && (t.setAttribute("aria-expanded", !1), e._openDropDown.$.addClass("jqx-hidden"), delete e._openDropDown.rippleInProgress, e._openDropDown = void 0) }), 450) : (t.setAttribute("aria-expanded", !1), e._openDropDown.$.addClass("jqx-hidden"), e._openDropDown = void 0) } _containerHandler(e) { const t = this, o = e.type; if (t.disabled || t.readonly || t._resizing && "mouseout" !== o || ("down" === o || "up" === o) && 1 !== e.which && !JQX.Utilities.Core.isMobile) return; const n = t.shadowRoot || t.isInShadowDOM ? (e.originalEvent || e).composedPath()[0] : (e.originalEvent || e).target; t.$.tabContentSection.contains(n) || (t.$.dropDownButton.contains(n) ? t._dropDownButtonHandler(n, e) : t.$.dropDownButtonDropDown.contains(n) ? t._dropDownButtonHandler(n, e, !0) : t._tabStripHandler(n, e)) } _disableCloseButton(e) { const t = this, o = t._tabLabelContainers[e]; o.closeButtonEnabled = !1, t.closeButtons && t._hideCloseButton(o) } _documentMoveHandler(e) { const t = this, o = t._orientationSettings; if (t._reordering) { t._reorderStartThrown || (t._fireDragEvent(e, "dragStart"), t._reorderStartThrown = !0); const n = e[o.coordinate], a = "wrap" !== t.tabLayout ? function (e) { return n >= e[o.from] && n <= e[o.to] } : function (t) { return e.pageX >= t.fromX && e.pageX <= t.toX && e.pageY >= t.fromY && e.pageY <= t.toY }; let r = !1; for (let e = 0; e < t._tabCoordinates.length; e++)if (a(t._tabCoordinates[e])) { r = e; break } !0 !== t._preventReorder && !1 !== r && r !== t._draggedIndex && (t._reorderTabs(t._draggedIndex, r), t._closeGroupDropDown(), t._draggedIndex = r, t._getReorderItems(), t._getTabCoordinates()); const s = t._tabCoordinates[t._draggedIndex]; "wrap" !== t.tabLayout && (n < s[o.from] || n > s[o.to]) || "wrap" === t.tabLayout && (null !== e.originalEvent.target.closest(".jqx-tab-label-container") || null !== e.originalEvent.target.closest(".jqx-tab-group-container")) && !(e.pageX >= s.fromX && e.pageX <= s.toX && e.pageY >= s.fromY && e.pageY <= s.toY) ? t._preventReorder = !0 : t._preventReorder = !1 } else t._resizing && (t.$.resizeToken.style[o.edge] = e[o.coordinate] - t._tabsHeaderSectionCoordinate + "px", t.$resizeToken.removeClass("jqx-hidden")) } _documentUpHandler(e) { const t = this; if (!e.originalEvent) return; let o = t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; t.$.container.contains(o) && t._containerHandler(e), t._touchmoveInside ? t._endSwiping(e, Date.now()) : (delete t._dragStartDetails, delete t._swiping), delete t._touchCoords, delete t._touchmoveInside, !t._openDropDown || t._openDropDown.rippleInProgress || o !== document && o.closest(".jqx-tab-group-container") === t._openDropDown.groupContainer || "pointercancel" === e.originalEvent.type || t._closeGroupDropDown(), t.$.dropDownButton.contains(o) || "pointercancel" === e.originalEvent.type || t._closeDropDownButtonDropDown(), t._endReordering(e, o), t._resize(e), void 0 !== t._tabToResize && (t._tabToResize = void 0), delete t._downTarget } _dropDownButtonHandler(e, t, o) { const n = this, a = t.type; if (o) { if (e.classList.contains("jqx-tab-label-container")) switch (a) { case "down": n._downTarget = e; break; case "mouseout": e.removeAttribute("hover"); break; case "mouseover": e.setAttribute("hover", ""); break; case "up": e === n._downTarget && t.originalEvent && "pointercancel" !== t.originalEvent.type && (n.select(Array.from(n.$.dropDownButtonDropDown.children).indexOf(e)), n._closeDropDownButtonDropDown()) } } else if ("down" === a) n._downTarget = n.$.dropDownButton; else if ("up" === a && n._downTarget === n.$.dropDownButton) if (n._dropDownButtonDropDownOpened) n._closeDropDownButtonDropDown(); else { const e = n.tabPosition; let t, o; switch (n.$.dropDownButton.setAttribute("aria-expanded", !0), e) { case "top": t = n.$.dropDownButton.offsetLeft, o = n.$.tabsHeaderSection.offsetTop + n.$.dropDownButton.offsetHeight; break; case "bottom": t = n.$.dropDownButton.offsetLeft, o = n.$.tabsHeaderSection.offsetTop; break; case "left": t = n.$.dropDownButton.offsetWidth, o = n.$.dropDownButton.offsetTop; break; case "right": t = n.$.tabsHeaderSection.offsetLeft, o = n.$.dropDownButton.offsetTop }n.$.dropDownButtonDropDown.style.left = t + "px", n.$.dropDownButtonDropDown.style.top = o + "px", n.$dropDownButtonDropDown.removeClass("jqx-hidden"), n._dropDownButtonDropDownOpened = !0 } } _enableCloseButton(e) { const t = this, o = t._tabLabelContainers[e]; o.closeButtonEnabled = !0, t.closeButtons && t._showCloseButton(o) } _endReordering(e, t) { const o = this; o._reordering && (o._draggedHoveredTab && (o._draggedHoveredTab.contains(t) || o._draggedHoveredTab.removeAttribute("hover"), delete o._draggedHoveredTab), o._reorderedIndex = void 0, o._reordering = !1, o._reorderStartThrown = !1, o.removeAttribute("dragged"), e && o._fireDragEvent(e, "dragEnd")) } _endSwiping(e, t) { const o = this; if (!o._dragStartDetails) return; const n = o._orientationSettings, a = o.$.tabStrip, r = Math.abs(o._dragStartDetails.startTime - t), s = 200 / r, i = (o._dragStartDetails[n.startCoordinate] - e[n.coordinate]) * s; let l = Math.abs(i); const d = function () { if (o.rightToLeft && "scrollLeft" === n.scrollDirection) { const e = Math.abs(o._getScrollLeft()); if (i < 0 && e === a[n.scrollSize] - a[n.size] || i > 0 && 0 === e) return !1 } else if (i > 0 && a[n.scrollDirection] === a[n.scrollSize] - a[n.size] || i < 0 && 0 === a[n.scrollDirection]) return !1; return !0 }; let c = .03 * Math.abs(i) * s; const b = function () { if (c > 5) { const e = (l - c) / Math.abs(i); e < .1 ? c /= 1.25 : e < .15 ? c /= 1.2 : e < .2 ? c /= 1.15 : e < .25 ? c /= 1.1 : e < .3 && (c /= 1.05) } c = Math.round(c); const e = a[n.scrollDirection]; o.rightToLeft && "scrollLeft" === n.scrollDirection ? JQX.Utilities.Core.Browser.Chrome ? a[n.scrollDirection] = i > 0 ? Math.max(e + c, 0) : Math.min(e - c, a[n.scrollSize] - a[n.size]) : a[n.scrollDirection] = i > 0 ? Math.min(e + c, a[n.scrollSize] - a[n.size]) : Math.min(e - c, 0) : a[n.scrollDirection] = i > 0 ? Math.min(e + c, a[n.scrollSize] - a[n.size]) : Math.max(e - c, 0), l -= c, o._updateScrollButtonVisibility(!0); const t = d(); l > 0 && t ? o._scrollingAnimationFrame = window.requestAnimationFrame(b) : o._wheelInProgress = !1 }; o._scrollingAnimationFrame && cancelAnimationFrame(o._scrollingAnimationFrame), r < 500 && d() ? o._scrollingAnimationFrame = window.requestAnimationFrame(b) : o._wheelInProgress = !1, delete o._dragStartDetails, o._swiping && delete o._swiping } _fireDragEvent(e, t) { const o = this, n = o.$.tabStrip.children[o._draggedIndex], a = n.tab; let r, s, i; a ? (r = a.selected, s = a.index, i = a.label) : i = n.group, o.$.fireEvent(t, { position: { left: e.pageX, top: e.pageY }, left: e.pageX, top: e.pageY, target: n, selected: r, index: s, label: i }) } _fixTabStripNotChrome(e) { const t = this; function o() { const o = [].slice.call(e.children).filter((e => !e._lazyRemove)); let n = o[0].getBoundingClientRect(), a = n.left, r = a + o[0].offsetWidth; for (let e = 1; e < o.length; e++)n = o[e].getBoundingClientRect(), a = Math.min(a, n.left), r = Math.max(r, n.left + o[e].offsetWidth); e.style.width = r - a + "px", t._inlineStyleTabStrip = !0 } 0 !== t._tabs.length && (o(), JQX.Utilities.Core.Browser.Safari && setTimeout((function () { e.parentElement.classList.add("jqx-hidden"), setTimeout((function () { e.parentElement.classList.remove("jqx-hidden"), o() }), 10) }), 10), t.$.fireEvent("tabStripResize")) } _fixTabStripFlex(e) { const t = this; t._flexWritingModeNoFullSupport || "vertical" !== t.tabTextOrientation || "left" !== t.tabPosition && "right" !== t.tabPosition || setTimeout((function () { t.$tabsHeaderSection.addClass("jqx-hidden"), setTimeout((function () { t.$tabsHeaderSection.removeClass("jqx-hidden"), t._getTabCoordinates(), "scroll" === e && t._checkOverflowScroll() }), 10) }), 10) } _getCorrespondingCustomElement(e) { return e.$.hasClass("jqx-tab-label-container") ? e.tab : this.$.tabContentSection.querySelector('jqx-tab-items-group[label="' + e.group + '"]') } _getReorderItems() { const e = this; let t; 0 === e._groups.length ? t = e._tabLabelContainers : (t = Array.from(e.$.tabStrip.children), e.addNewTab && t.pop()), e._reorderItems = t } _getTabCoordinates() { const e = this; if (!e.reorder && !e.resize || "hidden" === e.tabPosition) return; const t = [], o = window.scrollX || window.pageXOffset, n = window.scrollY || window.pageYOffset; for (let a = 0; a < e._reorderItems.length; a++) { const r = e._reorderItems[a], s = r.getBoundingClientRect(), i = window.getComputedStyle(r), l = parseFloat(i.marginLeft), d = parseFloat(i.marginRight), c = parseFloat(i.marginTop), b = parseFloat(i.marginBottom); t.push({ fromX: s.left - l + o, toX: s.right + d + o, fromY: s.top - c + n, toY: s.bottom + b + n }) } e._tabCoordinates = t } _getTabs() { const e = this; let t = e.shadowRoot ? e.shadowRoot.querySelectorAll("jqx-tab-item") : e.getElementsByTagName("jqx-tab-item"); if (e.querySelector("jqx-tabs")) { t = e.shadowRoot ? e.shadowRoot.querySelectorAll("jqx-tab-item") : e.getElementsByTagName("jqx-tab-item"); let o = []; const n = e.querySelector(".jqx-tabs-content-section"); if (n) { for (let e = 0; e < t.length; e++)t[e].parentNode === n && o.push(t[e]); t = o } } null !== e.selectedIndex && (0 === t.length ? e.selectedIndex = null : e.selectedIndex = Math.max(0, Math.min(e.selectedIndex, t.length - 1))), e._tabs = Array.from(t), e.$.hiddenInput.value = e.selectedIndex } _groupContainerHandler(e, t) { const o = this, n = e.dropDown; if ("down" === t) return o._downTarget = e, void (o.reorder && o._reorderItems.length > 1 && (o._getTabCoordinates(), o._reordering = !0, o.setAttribute("dragged", ""), o._draggedIndex = Array.from(o.$.tabStrip.children).indexOf(e))); o._reordering || o._swiping || (n === o._openDropDown || "mouseover" !== t || e.classList.contains("jqx-tab-group-selected") ? "mouseout" === t && e.removeAttribute("hover") : e.setAttribute("hover", "")), "up" !== t || o._downTarget !== e || void 0 !== o._reorderedIndex || o._swiping || (n === o._openDropDown ? (o._closeGroupDropDown(), e.classList.contains("jqx-tab-group-selected") || e.setAttribute("hover", "")) : o._openGroupDropDown(e)) } _handlePosition(e, t) { const o = this; if (-1 === [void 0, "top", "left", "hidden"].indexOf(t) || "bottom" !== e && "right" !== e ? "bottom" !== t && "right" !== t || -1 === ["top", "left", "hidden"].indexOf(e) || o.$.container.insertBefore(o.$.tabsHeaderSection, o.$.tabContentSection) : o.$.container.insertBefore(o.$.tabContentSection, o.$.tabsHeaderSection), "hidden" === e) return o._orientationSettings = { coordinate: "pageY", dimension: "height", edge: "top", from: "fromY", size: "offsetHeight", to: "toY", scrollDirection: "scrollTop", scrollSize: "scrollHeight", startCoordinate: "startY", wheelOffset: 35 }, o.removeAttribute("horizontal"), o.removeAttribute("vertical"), void o.setAttribute("aria-orientation", "horizontal"); "top" === e || "bottom" === e ? (o._orientationSettings = { coordinate: "pageX", dimension: "width", edge: "left", from: "fromX", size: "offsetWidth", to: "toX", scrollDirection: "scrollLeft", scrollSize: "scrollWidth", startCoordinate: "startX", wheelOffset: 70 }, o.removeAttribute("vertical"), o.setAttribute("horizontal", ""), o.$arrowNear.removeClass("jqx-arrow-up"), o.$arrowNear.addClass("jqx-arrow-left"), o.$arrowFar.removeClass("jqx-arrow-down"), o.$arrowFar.addClass("jqx-arrow-right"), o.setAttribute("aria-orientation", "horizontal"), o.$.scrollButtonNear.setAttribute("aria-label", "Scroll left"), o.$.scrollButtonFar.setAttribute("aria-label", "Scroll right")) : (o._orientationSettings = { coordinate: "pageY", dimension: "height", edge: "top", from: "fromY", size: "offsetHeight", to: "toY", scrollDirection: "scrollTop", scrollSize: "scrollHeight", startCoordinate: "startY", wheelOffset: 35 }, o.removeAttribute("horizontal"), o.setAttribute("vertical", ""), o.$arrowNear.removeClass("jqx-arrow-left"), o.$arrowNear.addClass("jqx-arrow-up"), o.$arrowFar.removeClass("jqx-arrow-right"), o.$arrowFar.addClass("jqx-arrow-down"), o.setAttribute("aria-orientation", "vertical"), o.$.scrollButtonNear.setAttribute("aria-label", "Scroll up"), o.$.scrollButtonFar.setAttribute("aria-label", "Scroll down")) } _handleScrollButtonsPosition(e, t) { const o = this, n = o.$.tabsHeaderItems; e !== t && ("both" === e ? "near" === t ? n.insertBefore(o.$.scrollButtonFar, o.$.dropDownButton) : n.insertBefore(o.$.scrollButtonNear, o.$.tabStrip) : "near" === e ? ("far" === t && n.insertBefore(o.$.scrollButtonNear, o.$.tabStrip), n.insertBefore(o.$.scrollButtonFar, o.$.tabStrip)) : ("near" === t && n.insertBefore(o.$.scrollButtonFar, o.$.dropDownButton), n.insertBefore(o.$.scrollButtonNear, o.$.scrollButtonFar))) } _hideCloseButton(e) { e.firstElementChild.children[0].$.removeClass("jqx-close-button-enabled"), e.firstElementChild.children[1].$.addClass("jqx-hidden") } _indexChangeHandler(e) { const t = this, o = e.detail.oldIndex, n = Math.max(0, Math.min(e.detail.newIndex, t._tabs.length - 1)); if (o !== n) { if (0 === t._groups.length) t._reorderTabs(o, n); else { const a = e.detail.tabItem; a._setIndex(o), t.removeAt(o), t.insert(n, { node: a }), t.selectedIndex === o && t._select(n, !1) } t._reorderedIndex = void 0 } } _insertAddNewTab() { const e = this, t = e._addTabLabelContainer(void 0, !0).tabLabelContainer; t.$.addClass("jqx-add-new-tab"), e.$.tabStrip.appendChild(t), e._addNewTab = t } _insertIntoExistingGroup(e) { const t = this, o = e.jqxTabItemsGroup, n = e.tab, a = e.tabLabelContainer, r = e.group, s = t._groupLabels[t._groups.indexOf(r)].dropDown; let i = e.index; i = Math.max(0, Math.min(i, o.childElementCount)), s.insertBefore(a, s.children[i]); const l = o.children[i]; let d; d = l ? l.index : o.children[i - 1].index + 1, o.insertBefore(n, l), t._tabLabelContainers.splice(d, 0, a), t.$.dropDownButtonDropDown.insertBefore(e.dropDownLabelContainer, t.$.dropDownButtonDropDown.children[d] || null), t._tabs.splice(d, 0, n), i = d, n.group = r, t._updateIndexes(i) } _insertIntoNewGroup(e) { const t = this, o = e.tab, n = e.tabLabelContainer, a = e.group, r = t._addGroupContainer(a), s = r.label; r.dropDown.appendChild(n), t._groups.push(a); let i = Math.max(0, Math.min(e.index, t.$.tabStrip.childElementCount)), l = i; t._addNewTab && l === t.$.tabStrip.childElementCount && l--, t.$.tabStrip.insertBefore(s, t.$.tabStrip.children[l] || null), t._groupLabels.push(s); const d = document.createElement("jqx-tab-items-group"); d.appendChild(o), t.$.tabContentSection.insertBefore(d, t.$.tabContentSection.children[i]), d.label = a; const c = d.previousElementSibling; let b = 0; c && (c instanceof JQX.TabItem ? b = c.index + 1 : c && (b = c.lastElementChild.index + 1)), t._tabLabelContainers.splice(b, 0, n), t.$.dropDownButtonDropDown.insertBefore(e.dropDownLabelContainer, t.$.dropDownButtonDropDown.children[b] || null), t._tabs.splice(b, 0, o), i = b, o.group = a, t._updateIndexes(i) } _insertNearAGroup(e) { const t = this, o = e.tab, n = e.tabLabelContainer; let a = e.index; a = Math.max(0, Math.min(a, t._tabs.length)); const r = t._tabs[a - 1], s = t._tabs[a], i = s ? s.group : void 0; r && null !== r.group && s && null !== i ? (s.tabLabelContainer.parentElement.insertBefore(n, s.tabLabelContainer), s.parentElement.insertBefore(o, s), o.group = i) : s ? null !== i ? (t.$.tabStrip.insertBefore(n, t._groupLabels[t._groups.indexOf(i)]), t.$.tabContentSection.insertBefore(o, t.$.tabContentSection.querySelector('jqx-tab-items-group[label="' + i + '"]'))) : (t.$.tabStrip.insertBefore(n, s.tabLabelContainer), t.$.tabContentSection.insertBefore(o, s)) : (t.$.tabStrip.insertBefore(n, t._addNewTab || null), t.$.tabContentSection.appendChild(o)), t._tabLabelContainers.splice(a, 0, n), t.$.dropDownButtonDropDown.insertBefore(e.dropDownLabelContainer, t.$.dropDownButtonDropDown.children[a] || null), t._tabs.splice(a, 0, o), t._updateIndexes(a) } _insertNoGrouping(e) { const t = this, o = Math.max(0, Math.min(e.index, t._tabs.length)), n = e.tab, a = e.tabLabelContainer; t.$.tabStrip.insertBefore(a, t._tabLabelContainers[o] || t._addNewTab || null), t.$.tabContentSection.insertBefore(n, t._tabs[o] || null), t._tabLabelContainers.splice(o, 0, a), t.$.dropDownButtonDropDown.insertBefore(e.dropDownLabelContainer, t.$.dropDownButtonDropDown.children[o] || null), t._tabs.splice(o, 0, n), t._updateIndexes(o) } _keydownHandler(e) { const t = this, o = e.key; if ((t.isInShadowDOM ? t.getRootNode().activeElement : document.activeElement) !== t || -1 === ["ArrowLeft", "ArrowDown", "ArrowRight", "ArrowUp", "End", "Home", "Enter", " ", "Escape"].indexOf(o) || t.disabled || t.readonly || "none" === t.selectionMode || !t.allowToggle && null === t.selectedIndex || t._reordering || t._swiping) return; e.preventDefault(); const n = t._tabs.length - 1; let a, r, s, i, l = 0; switch (t.rightToLeft ? (s = "ArrowRight", i = "ArrowLeft") : (s = "ArrowLeft", i = "ArrowRight"), o) { case s: case "ArrowUp": if (t.collapsible && e.ctrlKey) return void (o === s ? "right" === t.tabPosition ? t.expand() : "left" === t.tabPosition && t.collapse() : "ArrowUp" === o && ("bottom" === t.tabPosition ? t.expand() : "top" === t.tabPosition && t.collapse())); if (l = -1, 0 === t.selectedIndex) { r = !0; break } a = t.selectedIndex + l; break; case i: case "ArrowDown": if (t.collapsible && e.ctrlKey) return void (o === i ? "right" === t.tabPosition ? t.collapse() : "left" === t.tabPosition && t.expand() : "ArrowDown" === o && ("bottom" === t.tabPosition ? t.collapse() : "top" === t.tabPosition && t.expand())); if (l = 1, t.selectedIndex === n) { r = !0; break } a = t.selectedIndex + l; break; case "End": if (t.selectedIndex === n) { r = !0; break } a = n; break; case "Home": if (0 === t.selectedIndex) { r = !0; break } a = 0; break; case "Enter": case " ": if (!t.allowToggle) return; if (t._focusedItem) { t.select(t._focusedItem.index); const e = t._focusedItem.tabLabelContainer.closest(".jqx-tab-group-drop-down"); e && t._openGroupDropDown(e.groupContainer) } return; case "Escape": return void (t._openDropDown && t._closeGroupDropDown()) }if (t.allowToggle && t._tabs.length > 0) { t._focusedItem ? t._focusedItem.tabLabelContainer.removeAttribute("focus") : t._focusedItem = t._focusedItem || t._tabs[t.selectedIndex] || t._tabs[0], t._focusedItem = t._tabs[Math.min(Math.max(0, t._focusedItem.index + l), n)], t._focusedItem.tabLabelContainer.setAttribute("focus", ""), t.ensureVisible(t._focusedItem.index); const e = t._focusedItem.tabLabelContainer.closest(".jqx-tab-group-drop-down"); e && e.groupContainer ? (t._openDropDown && t._openDropDown !== e.dropDown && t._closeGroupDropDown(), t._openGroupDropDown(e.groupContainer)) : t._openDropDown && t._closeGroupDropDown() } else r || t.select(a) } _labelContainerHandler(e, t, o) { const n = this, a = "up" === o && n._downTarget === e; if ("down" === o && (n._downTarget = e, "click" === n.selectionMode && e !== n._addNewTab)) if (JQX.Utilities.Core.isMobile && null === e.tab.group) { const o = n.$.tabStrip[n._orientationSettings.scrollDirection]; setTimeout((function () { o === n.$.tabStrip[n._orientationSettings.scrollDirection] && n._ripple(t, e) && n._openDropDown && n._openDropDown.contains(e) && (n._openDropDown.rippleInProgress = !0) }), 100) } else n._ripple(t, e) && n._openDropDown && n._openDropDown.contains(e) && (n._openDropDown.rippleInProgress = !0); if (e === n._addNewTab) return void n._addNewTabHandler(e, o, a); const r = e.tab.index, s = !(n._reordering && void 0 !== n._reorderedIndex); a && r === n.selectedIndex && (n._closeGroupDropDown(), s && null === e.tab.group && n._toggleCollapsedState()), !n._swiping && (s && "click" === n.selectionMode && a || !n._reordering && (n.selectionMode === o || "mouseenter" === n.selectionMode && "mouseover" === o)) && n._select(r, !0), n._reordering || n._swiping || "click" !== n.selectionMode && "dblclick" !== n.selectionMode || ("mouseover" !== o || e.hasAttribute("selected") ? "mouseout" === o && e.removeAttribute("hover") : e.setAttribute("hover", "")), n.reorder && "down" === o && null === e.tab.group && n._reorderItems.length > 1 && (n._getTabCoordinates(), n._reordering = !0, n.setAttribute("dragged", ""), e.hasAttribute("hover") && (n._draggedHoveredTab = e), 0 === n._groups.length ? n._draggedIndex = e.tab.index : n._draggedIndex = Array.from(n.$.tabStrip.children).indexOf(e)) } _labelSizeChangeHandler(e) { const t = this, o = e.detail.size; let n; "shrink" !== t.tabLayout && (n = e.target instanceof JQX.TabItem ? e.target.tabLabelContainer : t._groupLabels[t._groups.indexOf(e.target.label)], null !== o ? n.style[t._orientationSettings.dimension] = parseInt(o, 10) + "px" : n.style.removeProperty(t._orientationSettings.dimension), t._applyTabOverflow()) } _openGroupDropDown(e) { const t = this; e && (t._openDropDown && t._openDropDown.$.addClass("jqx-hidden"), e.dropDown.$.removeClass("jqx-hidden"), t._positionGroupDropDown(e), t._openDropDown = e.dropDown, e.removeAttribute("hover"), e.setAttribute("aria-expanded", !0)) } _orderTabs() { const e = this, t = [], o = []; let n = !0, a = !1; if (0 === e.getElementsByTagName("jqx-tab-items-group").length) for (let r = 0; r < e._tabs.length; r++) { const s = e._tabs[r], i = s.index; if (n && null !== i && (n = !1), -1 !== t.indexOf(i || 0) && (a = !0, null !== i)) break; t.push(i || 0), o.push({ tab: s, index: i }) } if (!a) { const e = t.slice(0).sort((function (e, t) { return e - t })); JSON.stringify(t) === JSON.stringify(e) && (n = !0) } if (n || a) { n || e.warn(e.localize("ambiguousIndexes")); for (let t = 0; t < e._tabs.length; t++)e._tabs[t]._setIndex(t) } else { o.sort((function (e, t) { return e.index - t.index })); for (let t = 0; t < o.length; t++) { const n = o[t].tab; n._setIndex(t), e.$.tabContentSection.removeChild(n) } for (let t = 0; t < o.length; t++) { const n = o[t].tab; e.$.tabContentSection.appendChild(n), e._tabs[t] = n } } } _populateTabStrip() { const e = this, t = document.createDocumentFragment(), o = [], n = [], a = []; let r = null; for (let s = 0; s < e._tabs.length; s++) { const i = e._tabs[s], l = i.parentElement, d = l instanceof JQX.TabItemsGroup ? l.label : null; i.group = d; const c = e._addTabLabelContainer(i), b = c.tabLabelContainer, p = c.dropDownLabelContainer; e.selectedIndex === s && (b.$.addClass("jqx-tab-selected"), b.setAttribute("selected", ""), r = b), i.tabLabelContainer = b, b.tab = i, o.push(b), e._setAriaRelations(i, b, p), null === d ? t.appendChild(b) : e._addGroupElements({ documentFragment: t, groups: n, groupLabels: a, i: s, group: d, tabLabelContainer: b, jqxTabItemsGroup: l }), e.$.dropDownButtonDropDown.appendChild(p) } e.$.tabStrip.appendChild(t), e._tabLabelContainers = o, e._groups = n, e._groupLabels = a, e._positionTabSelectionBar(r, !0) } _setAriaRelations(e, t, o) { const n = this.id; e.id || (e.id = n + "TabItem" + e.index), t.id || (t.id = n + "TabLabelContainer" + e.index), t.setAttribute("role", "tab"), t.setAttribute("aria-controls", e.id), t.setAttribute("aria-label", e.label), t.setAttribute("aria-selected", e.selected), e.setAttribute("aria-label", e.label), o.setAttribute("role", "menuitem"), o.setAttribute("aria-controls", e.id) } _positionTabSelectionBar(e, t) { const o = this; if (!e) return; const n = o.tabPosition; let a, r, s, i; if (t && (o.$.tabSelectionBar.style.transition = "none"), e.tab.group && (e = o._groupLabels[o._groups.indexOf(e.tab.group)]), "top" === n || "bottom" === n) { if ("wrap" === o.tabLayout ? (r = e.offsetTop, "top" === n && (r += e.offsetHeight - o.$.tabSelectionBar.offsetHeight), r += "px") : r = null, i = null, o.rightToLeft && "horizontal" === o.tabTextOrientation) if (JQX.Utilities.Core.Browser.Chrome) { const t = o.$.tabStrip; a = -(t.scrollLeft - (t.scrollWidth - t.offsetWidth)) + e.offsetLeft + "px" } else a = -o.$.tabStrip.scrollLeft + e.offsetLeft + "px"; else a = -o.$.tabStrip.scrollLeft + e.offsetLeft + "px"; s = e.offsetWidth + "px" } else "left" !== n && "right" !== n || ("wrap" === o.tabLayout ? (a = e.offsetLeft, "left" === n && (a += e.offsetWidth - o.$.tabSelectionBar.offsetWidth), a += "px") : a = null, s = null, r = -o.$.tabStrip.scrollTop + e.offsetTop + "px", i = e.offsetHeight + "px"); function l() { o.$.tabSelectionBar.style.top = r, o.$.tabSelectionBar.style.height = i, o.$.tabSelectionBar.style.left = a, o.$.tabSelectionBar.style.width = s } JQX.Utilities.Core.isMobile && o.hasAnimation && !t ? requestAnimationFrame((function () { requestAnimationFrame(l) })) : l(), t && !o._tabPositionChanging && requestAnimationFrame((() => o.$.tabSelectionBar.style.transition = null)) } _positionGroupDropDown(e) { const t = this, o = t.tabPosition, n = e.dropDown, a = window.getComputedStyle(t.$.tabsHeaderSection), r = parseFloat(a[t.rightToLeft ? "paddingRight" : "paddingLeft"]), s = parseFloat(a.paddingTop); if ("top" === o || "bottom" === o) { const a = !1; if (t.rightToLeft ? n.style.left = e.offsetLeft - t._getScrollLeft() - r - n.offsetWidth + e.offsetWidth + "px" : n.style.left = e.offsetLeft - t.$.tabStrip.scrollLeft + r + "px", "top" === o) a || (n.style.top = e.offsetTop + e.offsetHeight + s + "px"); else { let o = e.getBoundingClientRect().top - t.$.container.getBoundingClientRect().top + s; a && (o += t.$.tabStrip.offsetHeight), n.style.top = o + "px" } } else n.style.top = e.offsetTop - t.$.tabStrip.scrollTop + s + "px", n.style.left = "left" === o ? e.offsetLeft + e.offsetWidth + r + "px" : e.getBoundingClientRect().left - t.$.container.getBoundingClientRect().left + r + "px" } _processDataSource() { const e = this, t = e.dataSource; function o(e, t) { let n; if (Array.isArray(e.items) && e.items.length > 0) { n = document.createElement("jqx-tab-items-group"); for (let t = 0; t < e.items.length; t++)e.items[t].items || o(e.items[t], n) } else n = document.createElement("jqx-tab-item"), !0 === e.closeButtonHidden && (n.closeButtonHidden = !0), void 0 !== e.content && (n.innerHTML = e.content), void 0 !== e.index && (n.index = e.index), !0 === e.selected && (n.selected = e.selected); void 0 !== e.label && (n.label = e.label), void 0 !== e.labelSize && (n.labelSize = e.labelSize), t.appendChild(n) } if (e.$.tabContentSection.innerHTML = "", null !== t) for (let n = 0; n < t.length; n++)o(t[n], e.$.tabContentSection) } _processHTML() { const e = this; e._getTabs(), e._orderTabs(), e._validateInitialSelection(), e._populateTabStrip(), e.addNewTab && e._insertAddNewTab(), e._getReorderItems(), e._applyTabOverflow(), e.ensureVisible(e.selectedIndex), e.$.hiddenInput.value = e.selectedIndex } _removeInlineStyle() { const e = this, t = e.$.tabStrip; if (e._inlineStyleTabStripChildren) { const o = t.children; for (let e = 0; e < o.length; e++)o[e].removeAttribute("style"), o[e].firstElementChild.firstElementChild.classList.remove("jqx-tab-label-text-container-full-height"); delete e._inlineStyleTabStripChildren } e._inlineStyleTabStrip && (t.removeAttribute("style"), delete e._inlineStyleTabStrip), t.$.removeClass("shrink-tabs"), t.$.removeClass("shrink-tabs-vertical") } _reorderTabs(e, t) { function o(e, t, o) { const n = e[t]; e.splice(t, 1), e.splice(o, 0, n) } const n = this, a = n.$.tabStrip[n._orientationSettings.scrollDirection]; if (0 === n._groups.length) { const a = n._tabs, r = n._tabLabelContainers, s = e > t ? t : t + 1; let i; n.selectedIndex === e ? n.selectedIndex = t : n.selectedIndex <= t && n.selectedIndex > e ? n.selectedIndex-- : n.selectedIndex >= t && n.selectedIndex < e && n.selectedIndex++, i = r[s] ? r[s] : n.addNewTab ? n._addNewTab : null, n.$.tabStrip.insertBefore(r[e], i), n.$.dropDownButtonDropDown.insertBefore(n.$.dropDownButtonDropDown.children[e], n.$.dropDownButtonDropDown.children[s] || null), n.$.tabContentSection.insertBefore(a[e], a[s] || null), o(a, e, t), o(r, e, t), n._updateTabIndexes() } else n._reorderTabsGrouping(e, t); n.$.tabStrip[n._orientationSettings.scrollDirection] = a, n.$.fireEvent("reorder", { index: t, oldIndex: e, newIndex: t, originalIndex: e }), n._reorderedIndex = t, n._positionTabSelectionBar(n._tabLabelContainers[n.selectedIndex], !0), n.$.hiddenInput.value = n.selectedIndex } _reorderTabsGrouping(e, t) { const o = this, n = o.$.tabStrip.children, a = o.$.tabContentSection.children, r = e > t ? t : t + 1, s = o._tabs[o.selectedIndex]; o.$.tabStrip.insertBefore(n[e], n[r] || null), o.$.tabContentSection.insertBefore(a[e], a[r] || null), o._groupLabels = Array.from(o.$.tabStrip.getElementsByClassName("jqx-tab-group-container")), o._groups = []; for (let e = 0; e < o._groupLabels.length; e++)o._groups.push(o._groupLabels[e].group); o._tabs = Array.from(o.$.tabContentSection.getElementsByTagName("jqx-tab-item")); const i = document.createDocumentFragment(); let l = []; for (let e = 0; e < o._tabs.length; e++)i.appendChild(o.$.dropDownButtonDropDown.children[o._tabs[e].index].cloneNode(!0)); o.$.dropDownButtonDropDown.innerHTML = "", o.$.dropDownButtonDropDown.appendChild(i); for (let e = 0; e < o.$.tabStrip.childElementCount; e++) { const t = o.$.tabStrip.children[e]; t.$.hasClass("jqx-tab-label-container") && t !== o._addNewTab ? l.push(t) : t.$.hasClass("jqx-tab-group-container") && (l = l.concat(Array.from(t.dropDown.children))) } o._tabLabelContainers = l, o._updateTabIndexes(), s && (o.selectedIndex = s.index) } _resize(e) { const t = this; if (!t._resizing) return; const o = t._orientationSettings, n = e[o.coordinate] - t._resizeFrom, a = t._getCorrespondingCustomElement(t._tabToResize); let r; r = null === a.labelSize ? t._tabToResize[o.size] : a.labelSize; const s = Math.max(10, r + n); s !== r && (a._preventPropertyChangedHandler = !0, a.labelSize = s, t._tabToResize.style[o.dimension] = parseInt(s, 10) + "px"), t.$resizeToken.addClass("jqx-hidden"), t._applyTabOverflow(), t._resizing = !1, t.removeAttribute("resizing") } _ripple(e, t) { if (this.hasRippleAnimation) { const o = document.createElement("div"); return o.className = "ripple-agent", t.firstElementChild.appendChild(o), setTimeout((function () { t.firstElementChild.removeChild(o) }), 1e3), JQX.Utilities.Animation.Ripple.animate(o, e.pageX, e.pageY), !0 } } _scrollButtonClickHandler(e) { const t = this, o = t.$.tabStrip; let n = e.target.closest("jqx-repeat-button") === t.$.scrollButtonNear ? -1 : 1; if ("paging" === t.scrollMode) { const a = t._orientationSettings, r = {}; return t._dragStartDetails = { startX: 0, startY: 0, pageX: 0, pageY: 0, startTime: Date.now(), target: e.target }, t._wheelInProgress = !0, r[a.coordinate] = -n * (o[a.size] / 1.1428571428571428), void t._endSwiping(r, t._dragStartDetails.startTime + 175) } t.hasAttribute("horizontal") ? o.scrollLeft += 10 * n : o.scrollTop += 10 * n, t._updateScrollButtonVisibility(!0) } _getScrollLeft(e) { const t = this, o = t.$.tabStrip; return void 0 === e ? t.rightToLeft && JQX.Utilities.Core.Browser.Chrome ? o.scrollLeft - (o.scrollWidth - o.offsetWidth) : o.scrollLeft : (!t.rightToLeft || "top" !== t.tabPosition && "bottom" !== t.tabPosition || (JQX.Utilities.Core.Browser.Chrome ? e = o.scrollWidth - o.offsetWidth - e : e *= -1), e) } _select(e, t, o) { const n = this, a = n.hasAnimation; void 0 === o && (o = n.selectedIndex); const r = n._tabs[e]; if (!r || r.disabled || e === o && (!n.allowToggle || n.allowToggle && "mouseenter" === n.selectionMode)) n.$.hiddenInput.value = n.selectedIndex; else { if (n._focusedItem && n._focusedItem.tabLabelContainer.removeAttribute("focus"), null !== o) { const t = n._tabs[o]; a ? n._animateSelection(r, t, e > o) : t.$.addClass("jqx-visibility-hidden"), t.selected = !1, n._tabLabelContainers[o].$.removeClass("jqx-tab-selected"), n._tabLabelContainers[o].removeAttribute("selected"), n.closeButtons && "selected" === n.closeButtonMode && n._disableCloseButton(o) } null !== e && (n._tabLabelContainers[e].removeAttribute("hover"), n.closeButtons && "selected" === n.closeButtonMode && n._enableCloseButton(e)), !n.allowToggle || null !== e && (void 0 !== arguments[2] ? o : n.selectedIndex) !== e ? (r.selected = !0, n.$.tabContentSection.removeAttribute("show-placeholder"), null !== o && a || r.$.removeClass("jqx-visibility-hidden"), n.selectedIndex = e, n._focusedItem = n._tabs[e], n._focusedItem.tabLabelContainer.$.addClass("jqx-tab-selected"), n._focusedItem.tabLabelContainer.setAttribute("selected", ""), n._positionTabSelectionBar(n._focusedItem.tabLabelContainer, null === o)) : (n.selectedIndex = null, n.$.tabContentSection.setAttribute("show-placeholder", ""), n.allowToggle && (n._focusedItem = n._tabs[null === e ? o : e], n._focusedItem && n._focusedItem.tabLabelContainer.setAttribute("focus", ""))), t && (n.$.hiddenInput.value = n.selectedIndex, n.$.fireEvent("change", { index: n.selectedIndex, oldIndex: o })), n._closeGroupDropDown(), r && null !== r.group ? (n._selectedGroup && n._selectedGroup.$.removeClass("jqx-tab-group-selected"), null !== n.selectedIndex && (n._selectedGroup = n._groupLabels[n._groups.indexOf(r.group)], n._selectedGroup.$.addClass("jqx-tab-group-selected"))) : n._selectedGroup && (n._selectedGroup.$.removeClass("jqx-tab-group-selected"), delete n._selectedGroup), n.$.hiddenInput.value = n.selectedIndex } } _selectStartHandler(e) { (this._reordering || this._resizing) && e.preventDefault() } _setLabel(e, t, o) { const n = e ? document.getElementById(e) : null; if (null !== n && "template" === n.tagName.toLowerCase()) { const e = document.importNode(n.content, !0); if (t.appendChild(e), o) { const e = document.importNode(n.content, !0); o.appendChild(e) } } else "" === e && (e = " "), t.innerHTML = e, o && (o.innerHTML = e) } _showCloseButton(e) { e.closeButtonEnabled && (e.firstElementChild.children[0].$.addClass("jqx-close-button-enabled"), e.firstElementChild.children[1].$.removeClass("jqx-hidden")) } _tabContentSectionTransitionendHandler(e) { const t = this, o = e.target; o instanceof JQX.TabItem && (o === t._animatedOldTab ? (o.$.addClass("jqx-hidden"), o.$.removeClass("animate"), o.$.removeClass(t._animatedOldTab.classToRemove), o.$.removeClass("jqx-hidden"), delete t._animatedOldTab) : o === t._animatedTab && (o.$.removeClass("animate"), delete t._animatedTab), o.classList.remove("left"), o.classList.remove("right"), o.classList.remove("top"), o.classList.remove("bottom")) } _tabsHeaderItemsWheelHandler(e) { const t = this; if (!t.enableMouseWheelAction || t.disabled) return; const o = t.$.tabStrip, n = t._orientationSettings, a = o[n.size], r = o[n.scrollSize], s = o[n.scrollDirection], i = e.deltaY; if (a === r || 0 === s && i < 0 || s + a === r && i > 0) return; if (e.preventDefault(), t._wheelInProgress) return; t._dragStartDetails = { startX: e.pageX, startY: e.pageY, pageX: e.pageX, pageY: e.pageY, startTime: Date.now(), target: e.target }, t._wheelInProgress = !0; const l = {}; l[n.coordinate] = e[n.coordinate] + (e.deltaY > 0 ? -1 : 1) * n.wheelOffset, t._endSwiping(l, t._dragStartDetails.startTime + 100) } _tabStripHandler(e, t) { const o = this, n = t.type; if ("down" === n && void 0 !== o._tabToResize) return o._resizing = !0, void (o._tabsHeaderSectionCoordinate = o.$.tabsHeaderSection.getBoundingClientRect()[o._orientationSettings.edge]); "down" === n && JQX.Utilities.Core.isMobile && (o._dragStartDetails = { startX: t.pageX, startY: t.pageY, pageX: t.pageX, pageY: t.pageY, startTime: Date.now(), originalTime: Date.now(), target: t.originalEvent.target }); const a = e.closest("jqx-repeat-button"); if ("up" === n && a) return o.focus(), void (o.resize && o._getTabCoordinates()); if (e.classList.contains("jqx-tab-close-button")) if ("up" === n) { if (e === o._downTarget) { const t = e.parentElement.parentElement.tab.index; return void (o.$.fireEvent("closing", { index: t }).defaultPrevented || (o.removeAt(t), o.$.fireEvent("close", { index: t }))) } } else { if ("down" === n) return void (o._downTarget = e); o._reordering || o._swiping || ("mouseover" === n ? e.setAttribute("hover", "") : "mouseout" === n && e.removeAttribute("hover")) } const r = e.closest(".jqx-tab-label-container"); if (null !== r) return void (t.originalEvent && "pointercancel" === t.originalEvent.type ? r.tab.group && delete r.parentElement.rippleInProgress : o._labelContainerHandler(r, t, n)); const s = e.closest(".jqx-tab-group-container"); null !== s && o._groupContainerHandler(s, n) } _tabStripMouseleaveHandler() { const e = this; e.resize && !e._resizing && e.hasAttribute("resizing") && e.removeAttribute("resizing") } _tabStripMoveHandler(e) { const t = this; if (t._dragStartDetails && !t._dragStartDetails.checked && (Date.now() - t._dragStartDetails.originalTime < 500 ? (t._endReordering(void 0, void 0), t._dragStartDetails.checked = !0) : delete t._dragStartDetails), t._dragStartDetails && (Math.abs(t._dragStartDetails.pageX - e.pageX) >= 5 || Math.abs(t._dragStartDetails.pageY - e.pageY) >= 5)) { const o = t._orientationSettings, n = t._dragStartDetails[o.coordinate] - e[o.coordinate], a = t.$.tabStrip[o.scrollDirection]; return t.$.tabStrip[o.scrollDirection] += n, a !== t.$.tabStrip[o.scrollDirection] && t._updateScrollButtonVisibility(), t._dragStartDetails = { startX: t._dragStartDetails.startX, startY: t._dragStartDetails.startY, pageX: e.pageX, pageY: e.pageY, startTime: t._dragStartDetails.startTime, originalTime: t._dragStartDetails.originalTime, target: e.originalEvent.target, checked: t._dragStartDetails.checked }, void (t._swiping = !0) } if (!t.resize || t._resizing || t._reordering || "shrink" === t.tabLayout) return; const o = t._orientationSettings, n = e[o.coordinate], a = t._tabCoordinates; let r; for (let e = 0; e < a.length; e++) { const s = a[e][o.to]; if (n >= s - 4 && n <= s + 4) { r = t._reorderItems[e], t._resizeFrom = n; break } } void 0 !== r ? (t._tabToResize = r, t.setAttribute("resizing", "")) : (t._tabToResize = void 0, t.removeAttribute("resizing")) } _tabStripTouchmoveHandler(e) { const t = this; if (t._touchmoveInside && e.cancelable) return e.preventDefault(), void e.stopPropagation(); const o = t.$.tabStrip, n = t._orientationSettings, a = o[n.size], r = o[n.scrollSize], s = t._touchCoords; if (a === r || !s) return; const i = e.touches[0], l = o[n.scrollDirection], d = i[n.coordinate], c = parseFloat(d.toFixed(5)), b = s["pageY" === n.coordinate ? 1 : 0], p = parseFloat(b.toFixed(5)); t._touchCoords = [i.pageX, i.pageY], 0 === l && c >= p || l + a === r && c <= p || (d !== b && (t._touchmoveInside = !0), e.cancelable && (e.preventDefault(), e.stopPropagation())) } _tabStripTouchstartHandler(e) { const t = e.touches[0]; this._touchCoords = [t.pageX, t.pageY] } _toggleCollapsedState() { const e = this; e.collapsible && (e.collapsed ? e.expand() : e.collapse()) } _toggleNavigationElementsVisibility() { const e = this, t = e._tabs.length; let o; if (0 === t) o = "addClass"; else { if (1 !== t) return; o = "removeClass" } "scroll" === e.tabLayout && "scroll" === e.overflow ? (e.$scrollButtonNear[o]("jqx-hidden"), e.$scrollButtonFar[o]("jqx-hidden")) : "dropDown" === e.tabLayout && e.$dropDownButton[o]("jqx-hidden") } _updateIndexes(e) { const t = this; null !== t.selectedIndex && e <= t.selectedIndex && t.selectedIndex++, t._updateTabIndexes() } _updateScrollButtonVisibility(e) { const t = this; if ("scroll" !== t.tabLayout || "hidden" === t.overflow) return void t._positionTabSelectionBar(t._tabLabelContainers[t.selectedIndex], e); const o = t.$tabsHeaderSection, n = t.$.tabStrip, a = t._orientationSettings; let r = !0, s = !0; if (t.rightToLeft && "scrollLeft" === a.scrollDirection) { const e = Math.abs(t._getScrollLeft()); 0 === Math.round(e) && (s = !1), Math.round(n[a.size] + e) >= Math.round(n[a.scrollSize]) - 1 && (r = !1) } else 0 === Math.round(n[a.scrollDirection]) && (r = !1), Math.round(n[a.size] + n[a.scrollDirection]) >= Math.round(n[a.scrollSize]) - 1 && (s = !1); if ("auto" === t.overflow) { if (r && s) return t.$scrollButtonNear.removeClass("jqx-hidden"), t.$scrollButtonFar.removeClass("jqx-hidden"), o.removeClass("one-button-shown"), void (t._tabLabelContainers[t.selectedIndex] && t._positionTabSelectionBar(t._tabLabelContainers[t.selectedIndex], e)); r ? t.$scrollButtonNear.removeClass("jqx-hidden") : t.$scrollButtonNear.addClass("jqx-hidden"), s ? t.$scrollButtonFar.removeClass("jqx-hidden") : t.$scrollButtonFar.addClass("jqx-hidden"), o.addClass("one-button-shown"), t._getTabCoordinates() } else "scroll" !== t.overflow || t.disabled || (t.$.scrollButtonNear.disabled = !r, t.$.scrollButtonFar.disabled = !s); t._tabLabelContainers[t.selectedIndex] && t._positionTabSelectionBar(t._tabLabelContainers[t.selectedIndex], e) } _updateTabIndexes() { const e = this; if (e._tabs.length > 0) for (let t = 0; t < e._tabs.length; t++)e._tabs[t]._setIndex(t); else e.selectedIndex = null; e.$.hiddenInput.value = e.selectedIndex } _updateTabLabel(e, t) { const o = this, n = e.index, a = o._tabLabelContainers[n].firstElementChild.children[0], r = o.$.dropDownButtonDropDown.children[n]; e.set("label", t), a.innerHTML = "", r.innerHTML = "", o._setLabel(t, a, r), o._applyTabOverflow(), e.setAttribute("aria-label", t), e.tabLabelContainer && e.tabLabelContainer.setAttribute("aria-label", t) } _validateIndex(e, t) { if (isNaN(parseInt(e, 10)) || "object" == typeof e) { const e = this; e.error(e.localize("invalidIndex", { method: t })) } } _validateInitialSelection() { const e = this; let t = e.selectedIndex; for (let o = 0; o < e._tabs.length; o++) { const n = e._tabs[o]; t === o ? (n.selected = !0, n.$.removeClass("jqx-visibility-hidden")) : n.selected ? null === t ? (t = o, n.$.removeClass("jqx-visibility-hidden")) : (n.selected = !1, n.$.addClass("jqx-visibility-hidden")) : n.$.addClass("jqx-visibility-hidden") } e._tabs.length > 0 && null === t && !e.allowToggle && (t = 0, e._tabs[0].selected = !0, e._tabs[0].$.removeClass("jqx-visibility-hidden")), e.selectedIndex = t, null !== e.selectedIndex && (e._focusedItem = e._tabs[e.selectedIndex]) } });
|
|
182
|
+
|
|
183
|
+
/***/
|
|
184
|
+
}),
|
|
185
|
+
|
|
186
|
+
/***/ 1419:
|
|
187
|
+
/***/ (() => {
|
|
188
|
+
|
|
189
|
+
JQX("jqx-time-picker", class extends JQX.BaseElement { static get properties() { return { autoSwitchToMinutes: { value: !1, type: "boolean" }, footer: { value: !1, type: "boolean" }, footerTemplate: { value: null, type: "any?" }, format: { value: "12-hour", allowedValues: ["12-hour", "24-hour"], type: "string" }, minuteInterval: { value: 1, type: "number" }, name: { value: "", type: "string" }, selection: { value: "hour", allowedValues: ["hour", "minute"], type: "string" }, value: { value: new Date, type: "any", reflectToAttribute: !1 }, view: { value: "portrait", allowedValues: ["landscape", "portrait"], type: "string" } } } static get listeners() { return { keydown: "_keydownHandler", resize: "_resizeHandler", "header.click": "_headerClickHandler", "picker.down": "_pickerDownHandler", "picker.move": "_pickerMoveHandler", "document.move": "_documentMoveHandler", "document.up": "_documentUpHandler" } } static get requires() { return { "JQX.Utilities.NumericProcessor": "jqx.numeric.js", "JQX.Utilities.BigNumber": "jqx.math.js", "JQX.Utilities.Draw": "jqx.draw.js" } } static get styleUrls() { return ["jqx.timepicker.css"] } template() { return '<div id="container" role="presentation">\n <div id="header" class="jqx-header jqx-unselectable" role="heading" aria-level="1">\n <div id="hourMinuteContainer" class="jqx-hour-minute-container">\n <div id="hourContainer" class="jqx-hour-container" role="button"></div>\n <div role="presentation">:</div>\n <div id="minuteContainer" class="jqx-minute-container" role="button"></div>\n </div>\n <div id="ampmContainer" class="jqx-am-pm-container" role="presentation">\n <div id="amContainer" class="jqx-am-container" role="button">AM</div>\n <div id="pmContainer" class="jqx-pm-container" role="button">PM</div>\n </div>\n </div>\n <div id="main" class="jqx-main-container">\n <div id="svgContainer" class="jqx-svg-container">\n <div id="picker" class="jqx-svg-picker" role="slider"></div>\n </div>\n <div id="footer" class="jqx-footer"></div>\n </div>\n <input id="hiddenInput" type="hidden" name="[[name]]">\n </div>' } ready() { super.ready() } render() { this._createElement(), super.render() } setHours(e) { const t = this; (e = 24 === e ? 0 : Math.max(0, Math.min(e, 23))) < 12 ? t._selectAmPm("am") : t._selectAmPm("pm"), "12-hour" === t.format && (0 === e ? e = 12 : e > 12 && (e -= 12)), t._updateHours(e, arguments[1]), "hour" === t.selection && (t._inInnerCircle = "24-hour" === t.format && (0 === e || e > 12), t._drawArrow(!0, e, arguments[2]), t.hasAnimation || (t._inInnerCircle = !1)) } setMinutes(e) { const t = this; e = 60 === e ? 0 : Math.max(0, Math.min(e, 59)), t._updateMinutes(e), "minute" === t.selection && t._drawArrow(!0, e, arguments[1]) } propertyChangedHandler(e, t, a) { super.propertyChangedHandler(e, t, a); const r = this; switch (e) { case "disabled": case "unfocusable": r._setFocusable(); break; case "footer": case "view": r._resizeHandler(); break; case "footerTemplate": r._validateFooterTemplate(); break; case "format": { let e = r.value.getHours(); "12-hour" === a ? (r.$ampmContainer.removeClass("jqx-hidden"), r.value.getHours() < 12 ? r._selectAmPm("am") : r._selectAmPm("pm"), 0 === e ? e = 12 : e > 12 && (e -= 12)) : r.$ampmContainer.addClass("jqx-hidden"), r.$.hourContainer.innerHTML = e, "hour" === r.selection && (r.$.picker.setAttribute("aria-valuenow", e), r._draw.clear(), r._renderSVG()); break } case "minuteInterval": { const e = Math.max(1, Math.min(a, 60)); e !== a && (r.minuteInterval = e), "minute" === r.selection && (r.interval = e); break } case "selection": "hour" === a ? r._changeToHourSelection() : r._changeToMinuteSelection(); break; case "value": { r._oldValue = t, r._validateValue(); const e = r.value.getHours() === t.getHours(), a = r.value.getMinutes() === t.getMinutes(); e && a || (a ? r.setHours(r.value.getHours()) : (e || r.setHours(r.value.getHours(), !0), r.setMinutes(r.value.getMinutes()))), delete r._oldValue; break } } } _applyInitialSettings() { const e = this, t = e.value; let a, r; a = t.getHours(), r = t.getMinutes(), "12-hour" === e.format ? a < 12 ? (e._ampm = "am", e.$amContainer.addClass("jqx-selected"), 0 === a && (a = 12)) : (e._ampm = "pm", e.$pmContainer.addClass("jqx-selected"), a > 12 && (a -= 12)) : e.$ampmContainer.addClass("jqx-hidden"), r = r.toString(), 1 === r.length && (r = "0" + r), e.$.hourContainer.innerHTML = a, e.$.minuteContainer.innerHTML = r, "hour" === e.selection ? (e.$hourContainer.addClass("jqx-selected"), e.$.picker.setAttribute("aria-valuenow", a)) : (e.$minuteContainer.addClass("jqx-selected"), e.$.picker.setAttribute("aria-valuenow", r)) } _changeSelection(e, t) { const a = this, r = e.pageX, n = e.pageY, i = a._getCenterCoordinates(), s = Math.sqrt(Math.pow(i.x - r, 2) + Math.pow(i.y - n, 2)); if (a._measurements.center = i, "down" === e.type) { if (s > a._measurements.radius) return void e.stopPropagation(); a._dragging = !0 } "24-hour" === a.format && "hour" === a.selection && s < a._measurements.radius - 50 ? a._inInnerCircle = !0 : a._inInnerCircle = !1; let o = -1 * Math.atan2(n - i.y, r - i.x) * 180 / Math.PI; o < 0 && (o += 360), a._angle = o; let l = a._numericProcessor.getValueByAngle(a._angle); "hour" === a.selection ? ("24-hour" === a.format && a._inInnerCircle ? 0 !== l && 12 !== l ? l += 12 : l = 0 : 0 === l && (l = 12), a._updateHours(l)) : (60 === l && (l = 0), a._updateMinutes(l)), void 0 !== a._oldTimePart && (cancelAnimationFrame(a._animationFrameId), delete a._animationFrameId, a._drawArrow(!0, l, t)) } _changeToHourSelection() { const e = this, t = e._centralCircle.parentElement || e._centralCircle.parentNode; let a = e.value.getHours(); cancelAnimationFrame(e._animationFrameId), delete e._animationFrameId, e.interval = 1, e.$hourContainer.addClass("jqx-selected"), e.$minuteContainer.removeClass("jqx-selected"), t.removeChild(e._centralCircle), t.removeChild(e._arrow), t.removeChild(e._head), e._getMeasurements(), e._numericProcessor.getAngleRangeCoefficient(), e._draw.clear(), t.appendChild(e._centralCircle), t.appendChild(e._arrow), t.appendChild(e._head), e._renderHours(), "24-hour" === e.format && (0 === a || a > 12) ? e._inInnerCircle = !0 : "12-hour" === e.format && (a %= 12, 0 === a && (a = 12)), e._drawArrow(!0, void 0, !0), e._inInnerCircle = !1, e.$.picker.firstElementChild.setAttribute("aria-hidden", !0), e.$.picker.setAttribute("aria-valuenow", a) } _changeToMinuteSelection() { const e = this, t = e._centralCircle.parentElement || e._centralCircle.parentNode; e._inInnerCircle = !1, cancelAnimationFrame(e._animationFrameId), delete e._animationFrameId, e.interval = e.minuteInterval, e.$hourContainer.removeClass("jqx-selected"), e.$minuteContainer.addClass("jqx-selected"), t.removeChild(e._centralCircle), t.removeChild(e._arrow), t.removeChild(e._head), e._getMeasurements(), e._numericProcessor.getAngleRangeCoefficient(), e._draw.clear(), t.appendChild(e._centralCircle), t.appendChild(e._arrow), t.appendChild(e._head), e._renderMinutes(), e._drawArrow(!0, void 0, !0), e.$.picker.firstElementChild.setAttribute("aria-hidden", !0), e.$.picker.setAttribute("aria-valuenow", e.value.getMinutes()) } _computeArrowBodyPoints(e, t, a, r) { const n = Math.sin(t), i = Math.cos(t), s = e - a * i + r * n, o = e + a * n + r * i, l = e + a * i + r * n, d = e - a * n + r * i, u = "M " + (e + a * i) + "," + (e - a * n) + " L " + (e - a * i) + "," + (e + a * n) + " L " + s + "," + o + " " + l + "," + d; return this._headCenter = { x: (s + l) / 2, y: (o + d) / 2 }, u } _createElement() { const e = this; e.setAttribute("role", "dialog"), e.coerce = !0, e.min = 0, e._drawMin = "0", e.startAngle = -270, e.endAngle = 90, e._angleDifference = e.endAngle - e.startAngle, e.ticksVisibility = "none", e._tickIntervalHandler = {}, e._tickIntervalHandler.labelsSize = {}, e._distance = { majorTickDistance: 0, minorTickDistance: 0, labelDistance: 10 }, e._measurements = {}, e._validateInitialPropertyValues(), e._applyInitialSettings(), e._numericProcessor = new JQX.Utilities.DecimalNumericProcessor(e), e._draw = new JQX.Utilities.Draw(e.$.picker), e._isVisible() ? (e._setPickerSize(), e._getMeasurements(), e._numericProcessor.getAngleRangeCoefficient(), e._renderSVG(), e._setFocusable(), e.$.hiddenInput.value = e.value, e.enableShadowDOM && e.appendChild(e.$.hiddenInput)) : e._renderingSuspended = !0 } _documentMoveHandler(e) { const t = this; t._dragging && t._changeSelection(e, !0) } _documentUpHandler() { const e = this; e._dragging ? (e._inInnerCircle = !1, e._dragging = !1, e.autoSwitchToMinutes && "hour" === e.selection && (e.hasAnimation ? function t() { e._animationFrameId ? requestAnimationFrame(t) : (e.$picker.addClass("animate"), setTimeout((function () { e.selection = "minute", e._changeToMinuteSelection() }), 250), setTimeout((function () { e.$picker.removeClass("animate") }), 550)) }() : (e.selection = "minute", e._changeToMinuteSelection()))) : e.hasAttribute("focus") && (e.$.fireEvent("blur"), e.removeAttribute("focus")) } _drawArrow(e, t, a) { const r = this, n = "hour" === r.selection, i = "12-hour" === r.format; let s, o, l = r._oldTimePart; if (delete r._oldTimePart, void 0 === t && (n ? (t = r.value.getHours(), i && t > 12 && (t -= 12)) : t = r.value.getMinutes()), void 0 === l || a || !r.hasAnimation) return void r._drawArrowSVG(e, t); if (n && !i) return void r._animate24HourView(l, t); n ? (s = .2, o = 12, t %= o, l %= o) : (s = 1, o = 60); let d = t - l, u = l - t; d < 0 && (d += o), u < 0 && (u += o), u < d && (s *= -1), function a() { l += s, l = parseFloat((l % o).toFixed(1)), l < 0 && (l += o), r._drawArrowSVG(e, l), e = !0, l !== t % o ? r._animationFrameId = requestAnimationFrame(a) : delete r._animationFrameId }() } _animate24HourView(e, t) { const a = this; let r = .2; a._inInnerCircle = !1; const n = 0 === e || e > 12, i = 0 === t || t > 12; if (n !== i) { if (e = n ? Math.abs(e - 12) : (e + 12) % 24, a._inInnerCircle = i, a._drawArrowSVG(!0, e), e === t) return } else a._inInnerCircle = i; let s = e, o = t; a._inInnerCircle && (0 === o && s < 18 ? o = 12 : 0 === s && o < 18 && (s = 12)); let l = o - s, d = s - o; l < 0 && (l += 12), d < 0 && (d += 12), d < l && (r *= -1), function n(i) { a._inInnerCircle = i, i ? ((e = parseFloat((e + r).toFixed(1))) < 0 ? e += 24 : e < 1 && (e += 12), 12 !== e && 24 !== e || (e = 0)) : (12 !== (e += r) && (e = parseFloat((e % 12).toFixed(1))), e <= 0 && (e += 12)), a._drawArrowSVG(!0, e), e !== t ? a._animationFrameId = requestAnimationFrame((function () { n(i) })) : (delete a._animationFrameId, a._inInnerCircle = !1) }(a._inInnerCircle) } _drawArrowSVG(e, t) { const a = this, r = a._measurements, n = a._numericProcessor.getAngleByValue(t); let i; i = a._inInnerCircle ? a._computeArrowBodyPoints(r.radius, n, 1, r.innerRadius - a._largestLabelSize / 2 - 45) : a._computeArrowBodyPoints(r.radius, n, 1, r.innerRadius - a._largestLabelSize / 2), e ? (a._arrow.setAttribute("d", i), a._head.setAttribute("cx", a._headCenter.x), a._head.setAttribute("cy", a._headCenter.y), a._head.setAttribute("r", a._largestLabelSize), a._headRect = a._head.getBoundingClientRect(), t % 1 == 0 && a._highlightLabel(t)) : (a._arrow = a._draw.path(i, { class: "jqx-needle" }), a._head = a._draw.circle(a._headCenter.x, a._headCenter.y, a._largestLabelSize, { class: "jqx-needle-central-circle" }), a._headRect = a._head.getBoundingClientRect()) } _drawLabel(e, t, a) { const r = this, n = r._measurements, i = n.radius, s = { class: "jqx-label jqx-unselectable", "font-size": n.fontSize, "font-family": n.fontFamily, "font-weight": n.fontWeight, "font-style": n.fontStyle }; "hour" === r.selection ? r._plotInnerCircle ? t > 0 ? t += 12 : t = "00" : 0 === t && (t = 12) : 1 === t.toString().length && (t = "0" + t); const o = r._draw.measureText(t, 0, s), l = i - a - r._largestLabelSize / 2, d = i + l * Math.sin(e), u = i + l * Math.cos(e); r._draw.text(t, Math.round(d) - o.width / 2, Math.round(u) - o.height / 2, o.width, o.height, 0, s).setAttribute("value", parseFloat(t)) } _getCenterCoordinates() { const e = this.$.picker.getBoundingClientRect(), t = this._measurements.radius, a = document.body.scrollLeft || document.documentElement.scrollLeft, r = document.body.scrollTop || document.documentElement.scrollTop; return { x: e.left + a + t, y: e.top + r + t } } _getMeasurements() { const e = this, t = e._measurements, a = document.createElement("div"); let r, n, i, s, o, l; a.className = "jqx-label", a.style.position = "absolute", a.style.visibility = "hidden", e.$.svgContainer.appendChild(a), "hour" === e.selection ? (r = "1", n = "23", e.max = 12, e._drawMax = "12", e._range = 12) : (r = "00", n = "55", e.max = 60, e._drawMax = "60", e._range = 60), a.innerHTML = r, i = a.offsetWidth, o = a.offsetHeight, a.innerHTML = n, s = a.offsetWidth, l = a.offsetHeight, e._largestLabelSize = Math.max(i, o, s, l), e._tickIntervalHandler.labelsSize.minLabelSize = o, e._tickIntervalHandler.labelsSize.maxLabelSize = l; const d = window.getComputedStyle(a); t.fontSize = d.fontSize, t.fontFamily = d.fontFamily, t.fontWeight = d.fontWeight, t.fontStyle = d.fontStyle, e.$.svgContainer.removeChild(a) } _headerClickHandler(e) { const t = this; if (!t.disabled && !t.readonly) switch (e.target) { case t.$.hourContainer: "hour" !== t.selection && (t.selection = "hour", t._changeToHourSelection()); break; case t.$.minuteContainer: "minute" !== t.selection && (t.selection = "minute", t._changeToMinuteSelection()); break; case t.$.amContainer: if (!t.$amContainer.hasClass("jqx-selected")) { t._selectAmPm("am"); const e = new Date(t.value.getTime()); t.value.setHours(t.value.getHours() - 12), t.$.hiddenInput.value = t.value, t.$.fireEvent("change", { value: t.value, oldValue: e }) } break; case t.$.pmContainer: if (!t.$pmContainer.hasClass("jqx-selected")) { t._selectAmPm("pm"); const e = new Date(t.value.getTime()); t.value.setHours(t.value.getHours() + 12), t.$.hiddenInput.value = t.value, t.$.fireEvent("change", { value: t.value, oldValue: e }) } } } _highlightLabel(e) { const t = this; if (t._highlightedLabel) { if (parseFloat(t._highlightedLabel.getAttribute("value")) === e) return; t._highlightedLabel.classList.remove("jqx-selected"), t._highlightedLabel = void 0 } let a; "hour" === t.selection ? (void 0 === e && (e = t.value.getHours()), "12-hour" === t.format && (0 === e ? e = 12 : e > 12 && (e -= 12)), a = e) : (void 0 === e && (e = t.value.getMinutes()), a = 5 * Math.round(e / 5), 60 === a && (a = 0)); const r = t.$.picker.querySelector('.jqx-label[value="' + a + '"]'); r && (a === e || t._overlapsLabel(r)) && (t._highlightedLabel = r, r.classList.add("jqx-selected")) } _isVisible() { const e = this; return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) } _keydownHandler(e) { const t = this; if (t._dragging) return; const a = (t.shadowRoot || t.getRootNode()).activeElement, r = e.key; if (!t.$.header.contains(a) || "Enter" !== r && " " !== r) { if (a === t.$.picker && !e.altKey) { let a; if ("ArrowRight" === r || "ArrowUp" === r ? a = 1 : "ArrowLeft" !== r && "ArrowDown" !== r || (a = -1), a) if (e.preventDefault(), "hour" === t.selection) { let e = t.value.getHours(); 0 === e && -1 === a ? e = 23 : 23 === e && 1 === a ? e = 0 : e += a, "12-hour" === t.format && (e >= 12 && t.$amContainer.hasClass("jqx-selected") ? e -= 12 : e < 12 && t.$pmContainer.hasClass("jqx-selected") && (e += 12)), t.setHours(e, void 0, !0) } else { let e = t.value.getMinutes(); a *= t.minuteInterval, e + a >= 60 ? e = 0 : e < -1 * a ? e = 60 % a == 0 ? 60 + a : 60 - 60 % a : e += a, t.setMinutes(e, !0) } } } else e.preventDefault(), t._headerClickHandler({ target: a }) } _overlapsLabel(e) { const t = this, a = e.getBoundingClientRect(); let r = t._headRect; return 0 === r.height && (r = t._headRect = t._head.getBoundingClientRect()), !(a.right - 10 < r.left || a.left + 10 > r.right || a.bottom - 10 < r.top || a.top + 10 > r.bottom) } _parseDateString(e, t) { const a = e.indexOf("Date("), r = e.indexOf(")"); let n = e; if (-1 !== a && -1 !== r) { if (n = e.slice(a + 5, r), n = n.replace(/'/g, "").replace(/"/g, "").replace(/^\s+|\s+$|\s+(?=\s)/g, ""), "" === n.trim()) return new Date; if (new RegExp(/(^(\d+)(\s*,\s*\d+)+$)/g).test(n)) return n = n.replace(/\s/g, ""), n = n.split(","), n.map((function (e, t) { n[t] = parseInt(e) })), n.unshift(null), n = new (Function.prototype.bind.apply(Date, n)), n } if ("" === n.trim()) return t; if (!isNaN(n)) return new Date(parseInt(n, 10)); try { n = new Date(n) } catch (e) { n = t } return isNaN(n.getTime()) ? t : n } _pickerDownHandler(e) { const t = this; t.disabled || t.readonly || !JQX.Utilities.Core.isMobile && 1 !== e.which || (t._changeSelection(e), t.$.fireEvent("focus"), t.setAttribute("focus", "")) } _pickerMoveHandler(e) { "touchmove" === e.originalEvent.type && e.originalEvent.preventDefault() } _renderHours() { const e = this; e._highlightedLabel = void 0, e._majorTicksInterval = 1, e._numericProcessor.addGaugeTicksAndLabels(), "24-hour" === e.format ? (e._plotInnerCircle = !0, e._distance.labelDistance = 55, e._numericProcessor.addGaugeTicksAndLabels(), e._plotInnerCircle = !1, e._distance.labelDistance = 10, e.$.picker.setAttribute("aria-valuemin", 0), e.$.picker.setAttribute("aria-valuemax", 23)) : (e.$.picker.setAttribute("aria-valuemin", 1), e.$.picker.setAttribute("aria-valuemax", 12)) } _renderMinutes() { const e = this; e._highlightedLabel = void 0, e._majorTicksInterval = 5, e._numericProcessor.addGaugeTicksAndLabels(), e.$.picker.setAttribute("aria-valuemin", 0), e.$.picker.setAttribute("aria-valuemax", 59) } _renderSVG() { const e = this; if (e._isVisible() && !e._renderingSuspended) { if (e._centralCircle = e._draw.circle(e._measurements.radius, e._measurements.radius, 4, { class: "jqx-needle-central-circle" }), "hour" === e.selection && "24-hour" === e.format && (0 === e.value.getHours() || e.value.getHours() > 12) && (e._inInnerCircle = !0), e._drawArrow(!1), e._inInnerCircle = !1, "hour" === e.selection) { e.interval = 1, e._renderHours(); let t = e.value.getHours(); "12-hour" === e.format && t > 12 && (t -= 12), e._highlightLabel(t) } else e.interval = e.minuteInterval, e._renderMinutes(), e._highlightLabel(e.value.getMinutes()); e.$.picker.firstElementChild.setAttribute("aria-hidden", !0) } else e._renderingSuspended = !0 } refresh() { const e = this; let t = !1; e.isRendered && (e._isVisible() ? (e._renderingSuspended = !1, t = !0, e._getMeasurements(), e._numericProcessor.getAngleRangeCoefficient(), e._setPickerSize(), e._sizeChanged || t ? (e._draw.clear(), e._renderSVG(), e._sizeChanged = !1) : (e._headRect = e._head.getBoundingClientRect(), e._highlightLabel())) : e._renderingSuspended = !0) } _resizeHandler() { this.refresh() } _selectAmPm(e) { const t = this; "am" === e ? (t._ampm = "am", t.$pmContainer.removeClass("jqx-selected"), t.$amContainer.addClass("jqx-selected")) : (t._ampm = "pm", t.$amContainer.removeClass("jqx-selected"), t.$pmContainer.addClass("jqx-selected")) } _setFocusable() { const e = this; if (e.disabled || e.unfocusable) return e.$.hourContainer.removeAttribute("tabindex"), e.$.minuteContainer.removeAttribute("tabindex"), e.$.amContainer.removeAttribute("tabindex"), e.$.pmContainer.removeAttribute("tabindex"), void e.$.picker.removeAttribute("tabindex"); const t = e.tabIndex > 0 ? e.tabIndex : 0; e.$.hourContainer.tabIndex = t, e.$.minuteContainer.tabIndex = t, e.$.amContainer.tabIndex = t, e.$.pmContainer.tabIndex = t, e.$.picker.tabIndex = t } _setPickerSize() { const e = this, t = e.$.svgContainer.offsetWidth, a = e.$.svgContainer.offsetHeight; let r = .9 * Math.min(t, a); void 0 !== e._pickerSize && e._pickerSize !== r ? e._sizeChanged = !0 : e._sizeChanged = !1, e._pickerSize = r, e._measurements.radius = r / 2, e._measurements.innerRadius = e._measurements.radius - 10, r += "px", e.$.picker.style.width = r, e.$.picker.style.height = r } _updateHours(e, t) { const a = this; let r = e; "12-hour" === a.format ? "am" === a._ampm ? 12 === r && (r = 0) : r < 12 && (r += 12) : r = e; const n = void 0 !== a._oldValue ? a._oldValue : new Date(a.value.getTime()), i = n.getHours(); r !== i ? (a._oldTimePart = i, void 0 === a._oldValue && a.value.setHours(r), a.$.hourContainer.innerHTML = e, !0 !== t && (a.$.hiddenInput.value = a.value, a.$.fireEvent("change", { value: a.value, oldValue: n })), "hour" === a.selection && a.$.picker.setAttribute("aria-valuenow", e)) : delete a._oldTimePart } _updateMinutes(e) { const t = this, a = void 0 !== t._oldValue ? t._oldValue : new Date(t.value.getTime()), r = a.getMinutes(); e !== r ? (t._oldTimePart = r, void 0 === t._oldValue && t.value.setMinutes(e), "minute" === t.selection && t.$.picker.setAttribute("aria-valuenow", e), 1 === (e = e.toString()).length && (e = "0" + e), t.$.minuteContainer.innerHTML = e, t.$.hiddenInput.value = t.value, t.$.fireEvent("change", { value: t.value, oldValue: a })) : delete t._oldTimePart } _validateFooterTemplate() { const e = this, t = e.footerTemplate; if (null === t) return void (e.$.footer.innerHTML = ""); let a; if (t instanceof HTMLTemplateElement ? a = t : "string" == typeof t && (a = document.getElementById(t), a instanceof HTMLTemplateElement || (a = void 0)), void 0 === a) return e.footerTemplate = null, void (e.$.footer.innerHTML = ""); const r = document.importNode(a.content, !0); if (e.enableShadowDOM) return e.$.footer.innerHTML = "<slot></slot>", void e.appendChild(r); e.$.footer.appendChild(r) } _validateInitialPropertyValues() { const e = this; e._validateFooterTemplate(), e.minuteInterval = Math.max(1, Math.min(e.minuteInterval, 60)), e._validateValue() } _validateValue() { const e = this, t = e.value, a = void 0 !== e._oldValue ? this._oldValue : new Date; if (!(t instanceof Date)) if ("string" == typeof t) { if (/^\d{1,2}:\d{1,2}$/.test(t)) { const r = t.split(":"); return void (e.value = new Date(a.getFullYear(), a.getMonth(), a.getDate(), parseFloat(r[0]), parseFloat(r[1]))) } e.value = e._parseDateString(t, a) } else e.value = a } });
|
|
190
|
+
|
|
191
|
+
/***/
|
|
192
|
+
}),
|
|
193
|
+
|
|
194
|
+
/***/ 6693:
|
|
195
|
+
/***/ (() => {
|
|
196
|
+
|
|
197
|
+
JQX("jqx-tooltip", class extends JQX.ContentElement { static get properties() { return { arrow: { value: !1, type: "boolean" }, arrowDirection: { allowedValues: ["bottom", "top", "left", "right"], value: "bottom", type: "string" }, align: { allowedValues: ["left", "center", "right"], value: "center", type: "string" }, delay: { value: 0, type: "number" }, messages: { extend: !0, value: { en: { invalidSelector: '{{elementType}}: "{{property}}" must be a String, an HTMLElement or null.', htmlTemplateNotSuported: "{{elementType}}: Browser doesn't support HTMLTemplate elements.", invalidTemplate: '{{elementType}}: "{{property}}" property accepts a string that must match the id of an HTMLTemplate element from the DOM.', invalidNode: '{{elementType}}: Invalid parameter "{{node}}" when calling {{method}}.' } }, type: "object" }, iframeRect: { value: null, type: "object?" }, offset: { value: [], type: "array" }, openMode: { allowedValues: ["click", "focus", "hover", "manual"], value: "hover", type: "string" }, position: { allowedValues: ["bottom", "top", "left", "right", "absolute", "auto"], value: "top", type: "string" }, selector: { value: null, type: "any?" }, tooltipTemplate: { value: null, type: "any" }, value: { value: "", type: "string", reflectToAttribute: !1 }, visible: { value: !1, type: "boolean" } } } static get styleUrls() { return ["jqx.tooltip.css"] } template() { return '<div id="container" role="presentation">\n <div id="content" class="jqx-tooltip-content" inner-h-t-m-l="[[innerHTML]]" role="presentation">\n <content></content>\n </div>\n </div>' } propertyChangedHandler(e, t, n) { super.propertyChangedHandler(e, t, n); const o = this; let l; switch (e) { case "align": o._applyPosition(n); break; case "openMode": o.close(), o._handleEventListeners(t), o._handleResize(); break; case "selector": o._oldOwnerElement = o._ownerElement, o._handleSelector(n, t), o._handleEventListeners(); break; case "tooltipTemplate": o._handleTemplate(t); break; case "value": o.tooltipTemplate ? o._handleTemplate() : o.$.content.innerHTML = o.value; break; case "visible": l = n ? "open" : "close", o.$.fireEvent(l, { owner: o._ownerElement }, o.isInShadowDOM ? { composed: !0, bubbles: !0, cancelable: !0 } : void 0); break; case "position": return void o._applyPosition(t) }o._applyPosition() } ready() { super.ready() } render() { const e = this; super.render(), e.getAttribute("role") || e.setAttribute("role", "tooltip"), e._isParentPositionStatic = "static" === window.getComputedStyle(e.parentElement || document.querySelector("body")).position, e._handleSelector(e.selector), e.visible && e._applyPosition(), e._handleEventListeners(), e._handleResize(), e.value = e.$.content.innerHTML = e.value ? e.value : e.innerHTML, e._handleTemplate() } appendChild(e) { const t = this; if (!t.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e ? (t.$.content.appendChild(e), t._applyPosition()) : t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "appendChild", node: "node" })) } close() { const e = this; if (e._isOpening && clearTimeout(e._isOpening), !e.visible) return; const t = e.isInShadowDOM ? { composed: !0, bubbles: !0, cancelable: !0 } : void 0; e.$.fireEvent("closing", { owner: e._ownerElement }, t).defaultPrevented || (e.$.fireEvent("close", { owner: e._ownerElement }, t), e.visible = !1) } clear() { const e = this.$.content; if (e) for (; e.childNodes.length;)e.removeChild(e.firstChild) } insertBefore(e, t) { const n = this; if (!n.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.insertBefore.apply(n, e.concat(Array.prototype.slice.call(arguments))) } e && t ? (n.$.content.insertBefore(e, t), n._applyPosition()) : n.error(n.localize("invalidNode", { elementType: n.nodeName.toLowerCase(), method: "insertBefore", node: "newNode/referenceNode" })) } open() { const e = this; e.disabled || e.readonly || e.visible || (clearTimeout(e._isOpening), e._isOpening = setTimeout((function () { const t = e.isInShadowDOM ? { composed: !0, bubbles: !0, cancelable: !0 } : void 0; if (e.$.fireEvent("opening", { owner: e._ownerElement }, t).defaultPrevented) return void clearTimeout(e._isOpening); e._applyPosition(), e.$.fireEvent("open", { owner: e._ownerElement }, t); const n = e.context; e.context = e, e.visible = !0, e.context = n }), e.delay)) } removeChild(e) { const t = this; if (!t.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.insertBefore.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e ? (t.$.content.removeChild(e), t._applyPosition()) : t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "removeChild", node: "node" })) } reposition() { const e = this; e.isRendered && e._applyPosition() } toggle() { const e = this; e.visible ? e.close() : e.open() } _getDomElementPosition(e) { let t = [], n = e.parentElement; for (; n && "BODY" !== n.nodeName;)t.push(n), n = !this.enableShadowDOM || n.parentElement ? n.parentElement : n.getRootNode().host; return t } _getElementAndOwnerRelation(e) { const t = this._getDomElementPosition(e || this), n = t.length; let o = null; for (let e = 0; e < n; e++)if ("static" !== window.getComputedStyle(t[e]).getPropertyValue("position")) { o = t[e]; break } return o } _applyPosition(e) { const t = this; if (!t._ownerElement) return; if (!t.parentElement) return; t._isParentPositionStatic = "static" === window.getComputedStyle(t.parentElement).position; const n = t._ownerElement.getBoundingClientRect(), o = t.parentElement ? t.parentElement.getBoundingClientRect() : { top: 0, left: 0 }; let l, i; t.parentElement && "BODY" === t.parentElement.nodeName.toUpperCase() ? (l = n.top + window.scrollY, i = n.left + window.scrollX) : (l = n.top - o.top, i = n.left - o.left); const r = t.position, s = t.iframeRect; let a, p = { top: n.top, left: n.left, right: n.right, width: n.width, height: n.height, nonStaticParent: t._getElementAndOwnerRelation() }; switch (s && (p.top += s.top, p.left += s.left, p.right += s.right), r) { case "auto": case "bottom": case "top": case "left": case "right": { t.style.left = ""; const e = t["_position" + r.charAt(0).toUpperCase() + r.slice(1)](i, l, p); l = e.top, i = e.left, a = e.translate; break } case "absolute": e ? (t.style.top = t.style.left = "", l = i = 0) : (l = parseFloat(t.style.top), i = parseFloat(t.style.left)) }const d = t.getAttribute("arrow-direction"); a ? t.$.container.style.setProperty("--jqx-tooltip-arrow-translate", a + "px") : t.$.container.style.removeProperty("--jqx-tooltip-arrow-translate"), void 0 === l || isNaN(l) || (l += ("auto" === r && "top" === d ? -1 : 1) * parseInt(t.offset[1]) || 0, t.style.top = l + "px"), void 0 === i || isNaN(i) || (i += ("auto" === r && "left" === d ? -1 : 1) * parseInt(t.offset[0]) || 0, t.style.left = i + "px") } _positionAuto(e, t, n) { const o = this; let l, i, r = o.parentElement; for (; r;) { if ("hidden" === getComputedStyle(r).getPropertyValue("overflow")) { l = r; break } r = r.parentElement } if (l) i = l.getBoundingClientRect(); else { const e = document.scrollingElement; let t, n; document.scrollingElement ? (t = e.offsetWidth, n = e.offsetHeight) : (t = window.innerWidth, n = window.innerHeight), l = document.body, i = { width: t, height: n, left: 0, top: 0, right: t, bottom: n } } const s = parseFloat(window.getComputedStyle(o).getPropertyValue("--jqx-tooltip-arrow-width")) || 0; let a = o._positionTop(e, t, n), p = n.nonStaticParent, d = o.offsetWidth / 2 - s, c = 0, f = 0, m = a.left, h = i.right - (m + f + o.offsetWidth), u = Math.min(0, h); if (m <= 0 && h > 0 && (m = Math.min(e, m + h)), u <= 0 && (u = Math.sign(u) * (Math.abs(u) + i.right - (e + n.width))), p) { const e = p.getBoundingClientRect(); c = e.top, f = e.left } return a.top + c >= i.top ? (m <= 0 && (m = e), t = a.top, { left: e = Math.max(i.left - f, m + u), top: t, translate: Math.max(-d, Math.min(d, a.left - e)) }) : (a = o._positionBottom(e, t, n), a.top + o.offsetHeight + c <= i.bottom ? (m = a.left, m <= 0 && (m = e), t = a.top, { left: e = Math.max(i.left - f, m + u), top: t, translate: Math.max(-d, Math.min(d, a.left - e)) }) : (a = o._positionLeft(e, t, n), t = a.top, d = o.offsetHeight / 2 - s, t = Math.max(i.top - c, a.top + Math.min(0, i.bottom - (a.top + c + o.offsetHeight))), a.left + f >= i.left ? e = a.left : (a = o._positionRight(e, t, n), e = a.left + o.offsetWidth + f <= i.right ? a.left : i.right - o.offsetWidth), { left: e, top: t, translate: Math.max(-d, Math.min(d, a.top - t)) })) } _getRelativeParentOffset(e) { const t = this, n = t._ownerElement; let o = t._getElementAndOwnerRelation(n), l = 0, i = 0; if (!e) return { left: i, top: l }; for (; e && o && e !== o;)l += o.offsetTop, i += o.offsetLeft, o = t._getElementAndOwnerRelation(o); return { left: i, top: l } } _positionTop(e, t, n) { const o = this, l = o._getRelativeParentOffset(n.nonStaticParent); if (o.set("arrowDirection", "bottom"), null === n.nonStaticParent) return t = n.top + window.scrollY - o.offsetHeight, { left: (e = o._getAlignmentOffset(n.left, o.offsetWidth, n.width) + window.scrollX) + l.left, top: t + l.top }; if (o._isParentPositionStatic) { if (t = o._ownerElement.offsetTop - o.offsetHeight, e = o._getAlignmentOffset(o._ownerElement.offsetLeft, o.offsetWidth, n.width), o._ownerElement instanceof SVGElement) { const n = o._ownerElement.getBoundingClientRect(), l = o._ownerElement.parentNode.getBoundingClientRect(); t = n.top - l.top - o.offsetHeight / 2, e = o._getAlignmentOffset(n.left, o.offsetWidth, l.left) } return { left: e + l.left, top: t + l.top } } if (o._ownerElement instanceof SVGElement && o._ownerElement.parentElement) { const n = o._ownerElement.getBoundingClientRect(), i = o._ownerElement.parentNode.getBoundingClientRect(); return t = n.top - i.top - o.offsetHeight, { left: (e = o._getAlignmentOffset(n.left - i.left, o.offsetWidth, n.width)) + l.left, top: t + l.top } } return t -= o.offsetHeight, { left: (e = o._getAlignmentOffset(e, o.offsetWidth, n.width)) + l.left, top: t + l.top } } _positionBottom(e, t, n) { const o = this, l = o._getRelativeParentOffset(n.nonStaticParent); return o.set("arrowDirection", "top"), null === n.nonStaticParent ? (t = n.top + window.scrollY + n.height, { left: (e = o._getAlignmentOffset(n.left, o.offsetWidth, n.width) + window.scrollX) + l.left, top: t + l.top }) : o._isParentPositionStatic ? (t = o._ownerElement.offsetTop + n.height, { left: (e = o._getAlignmentOffset(o._ownerElement.offsetLeft, o.offsetWidth, n.width)) + l.left, top: t + l.top }) : (t += n.height, { left: (e = o._getAlignmentOffset(e, o.offsetWidth, n.width)) + l.left, top: t + l.top }) } _getAlignmentOffset(e, t, n) { switch (this.align) { case "left": return e; case "right": return e - t + n; default: return e - t / 2 + n / 2 } } _positionLeft(e, t, n) { const o = this, l = o._getRelativeParentOffset(n.nonStaticParent); return o.set("arrowDirection", "right"), null === n.nonStaticParent ? (t = n.top + window.scrollY + n.height / 2 - o.$.content.offsetHeight / 2, { left: (e = n.left + window.scrollX - o.offsetWidth) + l.left, top: t + l.top }) : o._isParentPositionStatic ? (t = o._ownerElement.offsetTop + n.height / 2 - o.$.content.offsetHeight / 2, { left: (e = o._ownerElement.offsetLeft - o.offsetWidth) + l.left, top: t + l.top }) : (t = t + n.height / 2 - o.$.content.offsetHeight / 2, { left: (e -= o.offsetWidth) + l.left, top: t + l.top }) } _positionRight(e, t, n) { const o = this, l = o._getRelativeParentOffset(n.nonStaticParent); return o.set("arrowDirection", "left"), null === n.nonStaticParent ? (t = n.top + window.scrollY + n.height / 2 - o.$.content.offsetHeight / 2, { left: (e = n.left + window.scrollX + n.width) + l.left, top: t + l.top }) : o._isParentPositionStatic ? (t = o._ownerElement.offsetTop + n.height / 2 - o.$.content.offsetHeight / 2, { left: (e = o._ownerElement.offsetLeft + n.width) + l.left, top: t + l.top }) : (t = t + n.height / 2 - o.$.content.offsetHeight / 2, { left: (e += n.width) + l.left, top: t + l.top }) } _eventsHandler(e) { const t = this; t.disabled || t.readonly || ("click" !== e.type ? "mouseenter" === e.type || "focus" === e.type ? this.open() : this.close() : t.visible ? this.close() : this.open()) } _handleEventListeners(e) { const t = this; if (t._oldOwnerElement && "manual" !== t.openMode) { let e = t._oldOwnerElement.getAttribute("aria-describedby"); e && "tooltip" === t.getAttribute("role") && (e === t.id ? t._oldOwnerElement.removeAttribute("aria-describedby") : (e = e.replace(" " + t.id, ""), e = e.replace(t.id + " ", ""), t._oldOwnerElement.setAttribute("aria-describedby", e))), t._oldOwnerElement.$.unlisten("mouseenter.tooltip"), t._oldOwnerElement.$.unlisten("mouseleave.tooltip"), t._oldOwnerElement.$.unlisten("focus.tooltip"), t._oldOwnerElement.$.unlisten("blur.tooltip"), t._oldOwnerElement.$.unlisten("click.tooltip"), t._oldOwnerElement = null } if (t._ownerElement) { if (e) switch (e) { case "hover": t._ownerElement.$.unlisten("mouseenter.tooltip"), t._ownerElement.$.unlisten("mouseleave.tooltip"); break; case "focus": t._ownerElement.$.unlisten("focus.tooltip"), t._ownerElement.$.unlisten("blur.tooltip"); break; case "click": t._ownerElement.$.unlisten("click.tooltip") }if ("manual" !== t.openMode) switch (t._ownerElement instanceof JQX.BaseElement || (t._ownerElement.$ = JQX.Utilities.Extend(t._ownerElement)), t.openMode) { case "hover": t._ownerElement.$.listen("mouseenter.tooltip", t._eventsHandler.bind(t)), t._ownerElement.$.listen("mouseleave.tooltip", t._eventsHandler.bind(t)); break; case "focus": t._ownerElement.$.listen("focus.tooltip", t._eventsHandler.bind(t)), t._ownerElement.$.listen("blur.tooltip", t._eventsHandler.bind(t)); break; case "click": t._ownerElement.$.listen("click.tooltip", t._eventsHandler.bind(t)) } } } _handleResize() { const e = this; function t() { e._applyPosition() } "click" === e.openMode ? window.addEventListener("resize", t) : window.removeEventListener("resize", t) } _handleSelector(e, t) { const n = this; if (t && t.removeAttribute && t.removeAttribute("aria-describedby"), "string" == typeof e) n._ownerElement = e.length > 0 ? document.getElementById(e) : void 0; else if (e && e.nodeType === Node.ELEMENT_NODE) n._ownerElement = e; else { if (null === e) return void (n._ownerElement = void 0); n.error(n.localize("invalidSelector", { elementType: n.nodeName.toLowerCase(), property: "selector" })) } if (!n._ownerElement || "tooltip" !== n.getAttribute("role")) return; if (!n.value) return; const o = n._ownerElement ? n._ownerElement.getAttribute("aria-describedby") : null; o ? o.indexOf(n.id) < 0 && n._ownerElement.setAttribute("aria-describedby", o + " " + n.id) : n._ownerElement.setAttribute("aria-describedby", n.id) } _handleTemplate(e) { const t = this; let n = t.tooltipTemplate; if (e && (t.$.content.innerHTML = t.value ? t.value : ""), null === n || !n) return; if ("function" == typeof t.tooltipTemplate) return void t.tooltipTemplate(t.$.content, { value: t.value }); if (!("content" in document.createElement("template"))) return void t.error(t.localize("htmlTemplateNotSuported", { elementType: t.nodeName.toLowerCase() })); if (n = document.getElementById(n), null === n || !("content" in n)) return void t.error(t.localize("invalidTemplate", { elementType: t.nodeName.toLowerCase(), property: "template" })); const o = n.content, l = o.childNodes.length, i = /{{\w+}}/g; let r, s = []; for (let e = 0; e < l; e++)for (r = i.exec(o.childNodes[e].innerHTML); r;)s.push({ childNodeIndex: e, bindingString: r[0] }), r = i.exec(o.childNodes[e].innerHTML); const a = s.length; let p, d, c = document.importNode(n.content, !0); for (let e = 0; e < a; e++) { p = c.childNodes[s[e].childNodeIndex], d = s.length; for (let n = 0; n < d; n++)p.innerHTML = p.innerHTML.replace(s[e].bindingString, t.value) } t.$.content.innerHTML = ""; for (let e = 0; e < c.childNodes.length; e++)c.childNodes[e].outerHTML && (t.$.content.innerHTML += c.childNodes[e].outerHTML) } }), function () { const e = () => { const e = document.querySelectorAll('[data-toggle="tooltip"'); if (e.length > 0) for (let t = 0; t < e.length; t++) { if (!e[t].hasAttribute("data-title")) continue; const n = document.createElement("jqx-tooltip"); n.selector = e[t], n.innerHTML = e[t].getAttribute("data-title"), document.body.appendChild(n), e[t].hasAttribute("data-placement") && (n.position = e[t].getAttribute("data-placement")) } }; "complete" === document.readyState ? e() : (window.removeEventListener("load", e), window.addEventListener("load", e)) }();
|
|
198
|
+
|
|
199
|
+
/***/
|
|
200
|
+
}),
|
|
201
|
+
|
|
202
|
+
/***/ 8466:
|
|
203
|
+
/***/ (() => {
|
|
204
|
+
|
|
205
|
+
JQX("jqx-window", class extends JQX.ContentElement { static get properties() { return { collapsed: { value: !1, type: "boolean" }, closeOnMaskClick: { value: !1, type: "boolean" }, disableEscape: { value: !1, type: "boolean" }, disableSnap: { value: !1, type: "boolean" }, footerPosition: { value: "bottom", allowedValues: ["bottom", "none"], type: "string" }, footerTemplate: { value: null, type: "any" }, headerButtons: { value: ["close", "maximize", "minimize"], type: "array" }, headerPosition: { value: "top", allowedValues: ["top", "bottom", "left", "right", "none"], type: "string" }, headerTemplate: { value: null, type: "any" }, disableKeyboard: { value: !1, type: "boolean" }, label: { value: "", type: "string" }, liveResize: { value: !1, type: "boolean" }, maximized: { value: !1, type: "boolean" }, modal: { value: !1, type: "boolean" }, minimized: { value: !1, type: "boolean" }, opened: { value: !1, type: "boolean" }, pinned: { value: !1, type: "boolean" }, resizeIndicator: { value: !1, type: "boolean" }, resizeMode: { allowedValues: ["none", "horizontal", "vertical", "both", "top", "bottom", "left", "right"], value: "none", type: "string" }, windowParent: { value: null, type: "any" } } } static get listeners() { return { "document.dragstart": "_dragStartHandler", "document.focusin": "_documentFocusInEventHandler", "document.move": "_documentMoveHandler", "document.up": "_documentUpHandler", "document.wheel": "_mouseWheelHandler", "document.selectstart": "_documentSelectStartHandler", down: "_downHandler", focus: "_focusHandler", blur: "_focusHandler", move: "_moveHandler", keydown: "_keyDownHandler", keyup: "_keyUpHandler" } } get hasStyleObserver() { return !1 } static get styleUrls() { return ["jqx.button.css", "jqx.window.css"] } template() { return '<div role="presentation">\n <div class="jqx-content-container" id="container">\n <div id="headerSection" class="jqx-header-section" role="heading" aria-level="1">\n <div id="header" class="jqx-header" role="presentation">[[label]]</div>\n <div id="buttonsContainer" class="jqx-buttons-container" role="presentation">\n <button id="pinButton" class="jqx-button jqx-element jqx-pin-button" aria-label="Pin"></button>\n <button id="collapseButton" class="jqx-button jqx-element jqx-collapse-button" aria-label="Collapse"></button>\n <button id="minimizeButton" class="jqx-button jqx-element jqx-minimize-button"aria-label="Minimize"></button>\n <button id="maximizeButton" class="jqx-button jqx-element jqx-maximize-button" aria-label="Maximize"></button>\n <button id="closeButton" class="jqx-button jqx-element jqx-close-button" aria-label="Close"></button>\n </div>\n </div>\n <div class="jqx-content" inner-h-t-m-l="[[innerHTML]]"><content></content></div>\n <div id="footer" class="jqx-footer"></div>\n </div>\n </div>' } propertyChangedHandler(e, t, a) { const i = this; switch (e) { case "collapsed": a ? i.collapse(!0) : i.expand(!0); break; case "disabled": case "unfocusable": i._setFocusable(); break; case "headerTemplate": case "footerTemplate": i._applyLayoutTemplate(i.$[e.split(/[T]/)[0]], a); break; case "headerButtons": i._setHeaderButtons(); break; case "headerPosition": { const e = i.minimized; i._preventEventFiring = !0, i.restore(), delete i._preventEventFiring, e && i.minimize(); break } case "label": i.$.header.innerHTML = i.label; break; case "maximized": a ? i.maximize(!0) : i.restore(e); break; case "modal": i._setModal(), i.setAttribute("aria-modal", a); break; case "minimized": a ? i.minimize(!0) : i.restore(e); break; case "opened": a ? i.open(!0) : i.close(!0); break; case "resizeMode": i.$.container.classList.remove("jqx-window-resizing-bottom-right", "jqx-window-resizing-top-right", "jqx-window-resizing-top-left", "jqx-window-resizing-bottom-left", "jqx-window-resizing-top", "jqx-window-resizing-bottom", "jqx-window-resizing-left", "jqx-window-resizing-right"); break; case "windowParent": i._setElementParent(a); break; default: super.propertyChangedHandler(e, t, a) } } ready() { super.ready(), this._windowParent = { initialParent: this.parentElement } } render() { const e = this, t = e.animation; e.$.header.id || (e.$.header.id = e.id + "Header"), e.$.content.id || (e.$.content.id = e.id + "Content"), e.opened || (e.animation = "none"), e._windowParent = { initialParent: e.parentElement }, e.$.addClass("jqx-window"), e._createElement(), e._setElementParent(e.windowParent), e._setHeaderButtons(), e.headerTemplate && e._applyLayoutTemplate(e.$.header, e.headerTemplate), e.footerTemplate && e._applyLayoutTemplate(e.$.footer, e.footerTemplate), e.opened ? e.open() : e.close(), e.maximized && e.maximize(!0), e.minimized && e.minimize(!0), e.collapsed && e.collapse(!0), e.pinned ? e.pin() : e.unpin(), e._setFocusable(), e.animation = t, e.setAttribute("aria-modal", e.modal), e.setAttribute("aria-labelledby", e.$.header.id), e._setupDismissTargets(), super.render() } refresh() { const e = this; e.headerTemplate && e._applyLayoutTemplate(e.$.header, e.headerTemplate), e.footerTemplate && e._applyLayoutTemplate(e.$.footer, e.footerTemplate), e.opened ? e.open() : e.close(), e.maximized && e.maximize(!0), e.minimized && e.minimize(!0), e.collapsed && e.collapse(!0), e.pinned ? e.pin() : e.unpin() } static get requires() { return { "JQX.Button": "jqx.button.js" } } _setFocusable() { const e = this; if (e.disabled || e.unfocusable) e.removeAttribute("tabindex"); else { let t = e.tabIndex > 0 ? e.tabIndex : 0; e.setAttribute("tabindex", t) } } appendChild(e) { const t = this; if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e ? t.$.content.appendChild(e) : t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "appendChild", node: "node" })) } updateLabel(e) { this.label = e } updateContent(e) { this.content = e } move(e, t) { const a = this, i = e => "number" == typeof e ? e + "px" : "string" == typeof e ? e : void 0; void 0 !== e && (a.style.left = i(e)), void 0 !== t && (a.style.top = i(t)) } collapse(e) { const t = this; !e && t.collapsed || (t.collapsed = !0, t.$.fireEvent("collapse"), "left" === t.headerPosition || "right" === t.headerPosition ? t.style.width = "" : t.style.height = "") } close(e) { const t = this; if (e || !t.$.hasClass("jqx-visibility-hidden")) { if (t.isCompleted) { if (t.$.fireEvent("closing").defaultPrevented) return; t.$.addClass("jqx-visibility-hidden"), t.opened = !1, t.isRendered && t.$.fireEvent("close") } else t.$.addClass("jqx-visibility-hidden"), t.opened = !1; t._setModal(), t.removeAttribute("ontop") } } attached() { super.attached(); const e = this; e.isRendered, e._windowParent.parent && e._windowParent.parent !== e.getShadowRootOrBody() && e._windowParent.parent.querySelectorAll("jqx-window, jqx-dialog-window, jqx-progress-window, jqx-wait-window, jqx-alert-window, jqx-prompt-window, jqx-multiline-prompt-window") && "static" === window.getComputedStyle(e._windowParent.parent).getPropertyValue("position") && (e._windowParent.parent.style.position = "relative"), e.opened && e._modal && e.parentElement.insertBefore(e._modal, e) } bringToFront() { const e = this; if (!e.parentElement) return; const t = e.parentElement.closest(".jqx-window"); if (t) return void t.bringToFront(); const a = document.body.getElementsByClassName("jqx-window"); let i = []; for (let e = 0; e < a.length; e++) { const t = a[e]; t.removeAttribute("ontop"), t.opened && i.push(t) } 1 === i.length && i[0] === e || e.setAttribute("ontop", "") } clear() { const e = this; e.isCompleted && "JQX-WINDOW" === e.nodeName && (e.innerHTML = e.$.content.innerHTML = "") } detached() { super.detached(); const e = this; e._windowParent.parent && !e._windowParent.parent.querySelectorAll("jqx-window, jqx-dialog-window, jqx-progress-window, jqx-wait-window, jqx-alert-window, jqx-prompt-window, jqx-multiline-prompt-window") && (e._windowParent.parent.style.position = ""), e._modal && e._modal.parentElement && e._modal.parentElement.removeChild(e._modal), e._resizeDummy && e._resizeDummy.parentElement && e._handleWindowResizeDummy(), e._refreshMinimizedWindowsPosition() } expand(e) { const t = this; (e || t.collapsed) && (t.collapsed = !1, t.$.fireEvent("expand"), t.maximized ? "left" === t.headerPosition || "right" === t.headerPosition ? t.style.width = Math.max(t._windowParent.scrollElement.scrollWidth, t._windowParent.element.clientWidth) - t._windowParent.borderWidth + "px" : t.style.height = Math.max(t._windowParent.scrollElement.scrollHeight, t._windowParent.element.clientHeight) - t._windowParent.borderWidth + "px" : "left" === t.headerPosition || "right" === t.headerPosition ? t.style.width = t.className.indexOf("jqx-window-snapped-") < 0 && t._dragDetails ? t._dragDetails.width + "px" : "" : t.style.height = t.className.indexOf("jqx-window-snapped-") < 0 && t._dragDetails ? t._dragDetails.height + "px" : "") } maximize(e) { const t = this; if (!e && t.maximized) return; t.minimized && t._restoreFromMinimization(e), t._setDragDetails("minimize"), "none" !== t.resizeMode && t.$.container.classList.remove("jqx-window-resizing-bottom-right", "jqx-window-resizing-top-right", "jqx-window-resizing-top-left", "jqx-window-resizing-bottom-left", "jqx-window-resizing-top", "jqx-window-resizing-bottom", "jqx-window-resizing-left", "jqx-window-resizing-right"), t._snapDummy && t.$.hasClass("jqx-window-snapped-" + t._snapDummy._position) && t.classList.remove("jqx-window-snapped-" + t._snapDummy._position), t.maximized = !0, t.$.fireEvent("maximize"), t.style.left = t.style.top = 0, t.style.maxWidth = t.style.maxHeight = "none"; const a = t._windowParent.scrollElement.scrollHeight, i = t._windowParent.scrollElement.scrollWidth, n = t._windowParent.element.clientHeight, o = t._windowParent.element.clientWidth, s = Math.max(a, n), r = Math.max(i, o); "top" === t.headerPosition || "bottom" === t.headerPosition ? (t.style.width = i > o ? r - t._windowParent.borderWidth + "px" : "100%", t.collapsed || (t.style.height = a > n ? s - t._windowParent.borderWidth + "px" : "100%")) : (t.collapsed || (t.style.width = i > o ? r - t._windowParent.borderWidth + "px" : "100%"), t.style.height = a > n ? s - t._windowParent.borderWidth + "px" : "100%"), "100%" !== t.style.height && t.addEventListener("transitionend", (function e() { if (!t.maximized || !t.hasAnimation) return; const a = t._windowParent.scrollElement.scrollHeight, i = t._windowParent.element.clientHeight, n = Math.max(a, i); ("top" === t.headerPosition || "bottom" === t.headerPosition) && t.collapsed || (t.style.height = a > i ? n - t._windowParent.borderWidth + "px" : "100%"), t.removeEventListener("transitionend", e) })) } minimize(e) { const t = this; if (!e && t.minimized) return; t.maximized && (t._preventEventFiring = !0, t.restore(), delete t._preventEventFiring), t._setDragDetails(), t.minimized = !0, t.$.fireEvent("minimize"), t._snapDummy && t.$.hasClass("jqx-window-snapped-" + t._snapDummy._position) && (t.$.removeClass("jqx-window-snapped-" + t._snapDummy._position), t.style.right = t.style.top = t.style.left = ""); const a = t._getAllMinimizedWindows(t._windowParent.element); if (a.length > 0) { const e = a[a.length - 1]; t.style.left = (e.offsetLeft + e.offsetWidth + t._dragDetails.minWidth + 10 > t._windowParent.element.clientWidth ? e.offsetLeft : e.offsetLeft + e.offsetWidth + 5) + "px", t.style.top = e.offsetTop + "px" } else t.style.left = "5px", t.style.top = t._windowParent.element.clientHeight + t._windowParent.scrollElement.scrollTop - t.$.headerSection.offsetHeight - 5 + "px"; t.style.width = "", t.style.height = t.$.headerSection.offsetHeight + "px" } _createElement() { this.setAttribute("role", "dialog") } removeChild(e) { const t = this; if (!t.isCompleted) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.removeChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e ? t.$.content.removeChild(e) : t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "removeChild", node: "node" })) } restore(e) { const t = this; if ("maximized" === e || t.maximized ? (t.maximized = !1, t.style.width = t.style.height = t.style.top = t.style.left = "") : ("minimized" === e || t.minimized) && t._restoreFromMinimization(e), t._preventEventFiring || t.$.fireEvent("restore"), t.style.maxWidth = t.style.maxHeight = "", t._dragDetails) { if (t.style.left = Math.max(0, Math.min(t._dragDetails.windowX, t._windowParent.element.clientWidth - t._dragDetails.width)) + "px", t.style.top = Math.max(0, Math.min(t._dragDetails.windowY, t._windowParent.scrollElement.scrollHeight - t._dragDetails.height)) + "px", t.collapsed) return void ("top" === t.headerPosition || "bottom" === t.headerPosition ? t.style.width = t._dragDetails.width + "px" : t.style.height = t._dragDetails.height + "px"); t._dragDetails.resized && (t.style.width = t._dragDetails.width + "px", t.style.height = t._dragDetails.height + "px") } } toggle() { const e = this; e.opened ? e.close() : e.open() } openModal() { this.modal = !0, this.open() } open(e) { const t = this; if (e || t.$.hasClass("jqx-visibility-hidden")) { if (t.isCompleted) { if (t.$.fireEvent("opening").defaultPrevented) return; t.$.removeClass("jqx-visibility-hidden"), t.opened = !0, t.$.fireEvent("open") } else t.$.removeClass("jqx-visibility-hidden"), t.opened = !0; t.bringToFront(), t._setModal(), t._handleActiveState(), t.hasAnimation ? t.addEventListener("transitionend", a) : a() } function a(e) { if (!t.hasAnimation || e && e.target === t) { if (t.removeEventListener("transitionend", a), t._onOpenCallback) return void t._onOpenCallback(); t.focus() } } } _setupDismissTargets() { const e = this; if (e.querySelector('[data-dismiss="modal"]')) { const t = e.querySelectorAll('[data-dismiss="modal"]'), a = () => { e.close() }; for (let e = 0; e < t.length; e++)t[e].removeEventListener("click", a, null), t[e].addEventListener("click", a) } } pin() { this.pinned = !0 } unpin() { this.pinned = !1 } _applyLayoutTemplate(e, t) { const a = this; if (!t) return e.innerHTML = "", void (e === a.$.header && a.label && (e.innerHTML = a.label)); "content" in document.createElement("template") ? (t instanceof HTMLTemplateElement || (t = document.getElementById(t)), null !== t && "content" in t ? (e.innerHTML = "", e.appendChild(document.importNode(t.content, !0))) : a.error(a.localize("invalidTemplate", { elementType: a.nodeName.toLowerCase(), property: e === a.$.footer ? "footerTemplate" : "headerTemplate" }))) : a.error(a.localize("htmlTemplateNotSuported", { elementType: a.nodeName.toLowerCase() })) } _cancelDragging(e) { const t = this; if (t._dragDetails && t._dragDetails.started && "drag" === t._dragDetails.type) { if (!e) { const a = t.getBoundingClientRect(); e = { pageX: a.left, pageY: a.top } } t.$.fireEvent("dragEnd", { left: e.pageX, top: e.pageY }), t.removeAttribute("dragged"), t._dragDetails.started = !1, delete t._mouseManipulation } } _documentFocusInEventHandler(e) { const t = this; t._changingFocus && (t.contains(e.target) || t.contains(e.composedPath()[0]) || t.focus(), delete t._changingFocus) } _downHandler(e) { const t = this; let a = JQX.Utilities.Core.isMobile ? document.elementFromPoint(e.pageX - window.pageXOffset, e.pageY - window.pageYOffset) : e.originalEvent.target; if ((t.shadowRoot || t.isInShadowDOM) && (a = e.originalEvent.composedPath()[0]), e.stopPropagation(), t.disabled || !JQX.Utilities.Core.isMobile && 1 !== e.which) return; if (t._tabsWindow && (t._tabsWindow._isAutoHideWindowClicked = !0), t.hasAttribute("ontop") || t.bringToFront(), a.closest && a.closest(".jqx-buttons-container") === t.$.buttonsContainer) { if (t._buttonPressed = a.closest(".jqx-button"), t._buttonPressed) return } else if (a.getRootNode() && a.getRootNode().host && (t._buttonPressed = a.getRootNode().host, t._buttonPressed.closest(".jqx-buttons-container") === t.$.buttonsContainer)) return; t._isWindowContentClicked = a.closest(".jqx-content"); let i = t.closest("jqx-docking-layout"); if (t.isInShadowDOM && !i) { let e = t.getRootNode().host; for (; e && (i = e.closest("jqx-docking-layout"), !i) && e.getRootNode();)e = e.getRootNode().host } if (!(t instanceof JQX.TabsWindow && i && i.disabled)) { if (t._handleActiveState(), !(t instanceof JQX.TabsWindow && i)) return a.closest(".jqx-header-section") === t.$.headerSection && (void 0 === t._dblClickDetails && (t._dblClickDetails = { clicks: 0 }), clearTimeout(t._dblClickDetails.timeOut), t._dblClickDetails.clicks++, t._dblClickDetails.timeOut = setTimeout((function () { t._dblClickDetails && (t._dblClickDetails.clicks = 0) }), 300), 2 === t._dblClickDetails.clicks) ? (t._headerDblCickHandler(e), void (t._dblClickDetails.clicks = 0)) : void (t.maximized || (JQX.Utilities.Core.isMobile && t._moveHandler(e), !t.pinned && !t.minimized && t.$.container.className.indexOf("jqx-window-resizing") < 0 && (a = a.closest(".jqx-header-section"), a && a === t.$.headerSection && (t._mouseManipulation = !0, t._setDragDetails("drag", e))), "none" !== t.resizeMode && t.$.container.className.indexOf("jqx-window-resizing") > -1 && (t._mouseManipulation = !0, t._setDragDetails("resize", e)))); t.$.hasClass("jqx-docking-layout-auto-hide-window") && (JQX.Utilities.Core.isMobile && t._moveHandler(e), "none" !== t.resizeMode && t.$.container.className.indexOf("jqx-window-resizing") > -1 && (t._mouseManipulation = !0, t._setDragDetails("resize", e))) } } _documentMoveHandler(e) { const t = this; !t._dragDetails || !t._dragDetails.started || t.minimized || !t._mouseManipulation || Math.abs(e.pageX - t._dragDetails.x) <= 5 && Math.abs(e.pageY - t._dragDetails.y) <= 5 || (t.hasAttribute("dragged") || t.hasAttribute("resized") || t.$.fireEvent(t._dragDetails.type + "Start", { left: e.pageX, top: e.pageY, width: t.offsetWidth, height: t.offsetHeight }), e.stopPropagation(), "drag" !== t._dragDetails.type || t.pinned ? (t._dragDetails.resized = !0, t._resize(t._dragDetails.side, e), t._dragDetails.x = Math.max(t._windowParent.offsetLeft + t._dragDetails.left, Math.min(t._windowParent.offsetLeft + t._dragDetails.left + (t._dragDetails.side.toLowerCase().indexOf("left") > -1 ? 0 : t._dragDetails.newWidth), e.pageX)), t._dragDetails.y = Math.max(t._windowParent.offsetTop + t._dragDetails.top, Math.min(t._windowParent.offsetTop + t._dragDetails.top + (t._dragDetails.side.toLowerCase().indexOf("top") > -1 ? 0 : t._dragDetails.newHeight), e.pageY))) : (t.setAttribute("dragged", ""), t._snapDummy && t.$.hasClass("jqx-window-snapped-" + t._snapDummy._position) && (t.$.removeClass("jqx-window-snapped-" + t._snapDummy._position), t.style.right = t.style.top = t.style.left = "", t.collapsed || (t.style.height = t._dragDetails.height + "px", t.style.width = t._dragDetails.width + "px")), t._drag(e, "both"), t._dragDetails.x = Math.max(t._windowParent.offsetLeft + t._dragDetails.offsetX - t._windowParent.scrollElement.scrollLeft, Math.min(t._windowParent.offsetLeft + t._windowParent.element.offsetWidth - (t._windowParent.element.offsetWidth - t.offsetLeft) + t._dragDetails.offsetX, e.pageX)), t._dragDetails.y = Math.max(t._windowParent.offsetTop + t._dragDetails.offsetY - t._windowParent.scrollElement.scrollTop, Math.min(t._windowParent.offsetTop + t._windowParent.element.offsetHeight - (t._windowParent.element.offsetHeight - t.offsetTop) + t._dragDetails.offsetY, e.pageY)), e.pageX >= t._windowParent.offsetLeft + t._windowParent.scrollElement.scrollWidth - 1 ? t._handleSnapping("right") : e.pageY <= t._windowParent.offsetTop ? t._handleSnapping("top") : e.pageX <= t._windowParent.offsetLeft ? t._handleSnapping("left") : t._handleSnapping())) } _documentUpHandler(e) { const t = this, a = t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; if (t.disabled) return t.removeAttribute("active"), delete t._buttonPressed, void delete t._isWindowContentClicked; if (t._dragDetails && t._dragDetails.started && (t.hasAttribute("resized") && (t.$.fireEvent(t._dragDetails.type + "End", { left: e.pageX, top: e.pageY, width: t._dragDetails.newWidth, height: t._dragDetails.newHeight }), t.removeAttribute("resized"), t._handleWindowResizeDummy(), t.$.container.classList.remove("jqx-window-resizing-bottom-right", "jqx-window-resizing-top-right", "jqx-window-resizing-top-left", "jqx-window-resizing-bottom-left", "jqx-window-resizing-top", "jqx-window-resizing-bottom", "jqx-window-resizing-left", "jqx-window-resizing-right")), setTimeout((function () { t.$.removeClass("no-transition") }), 20), t.hasAttribute("dragged") && (t.$.fireEvent(t._dragDetails.type + "End", { left: e.pageX, top: e.pageY }), t.removeAttribute("dragged")), t._dragDetails.started = !1, delete t._mouseManipulation), t._snapDummy && !t._snapDummy.classList.contains("jqx-visibility-hidden")) { switch (t._snapDummy._position) { case "left": case "top": t.style.left = t.style.top = "0", t.style.right = "auto"; break; case "right": t.style.left = "auto", t.style.top = t.style.right = "0" }t.style.width = "top" === t._snapDummy._position ? "100%" : "50%", t.style.height = "100%", t.$.addClass("jqx-window-snapped-" + t._snapDummy._position), t._handleSnapping() } t._modal && a === t._modal && !t._isWindowContentClicked && (t.closeOnMaskClick ? t.close() : t.focus()), t._isWindowButton(a) && t.focus(), delete t._isWindowContentClicked, delete t._buttonPressed; const i = t.shadowRoot && t._windowParent.element && t._windowParent.element.getRootNode() ? t._windowParent.element.getRootNode().activeElement : document.activeElement; if (!t.hasAttribute("active") || i === t) return; if (!a.closest) return; let n = a.closest(".jqx-window"); for (; n && n !== t;)n = n.parentElement, n && (n = n.closest(".jqx-window")); t.opened && n !== t && t.removeAttribute("active") } _documentSelectStartHandler(e) { this._dragDetails && this._dragDetails.started && e.preventDefault() } _drag(e, t) { const a = this; if (!e || a.pinned || a.maximized) return; let i, n; a._dragDetails && a._dragDetails.started || a._setDragDetails("drag", e), a.$.addClass("no-transition"), "object" == typeof e ? (i = e.pageX - a._dragDetails.x, n = e.pageY - a._dragDetails.y) : i = n = e; const o = Math.max(a._windowParent.element.clientHeight, a._windowParent.scrollElement.scrollHeight), s = Math.max(a._windowParent.element.clientWidth, a._windowParent.scrollElement.scrollWidth); switch (t) { case "horizontal": a._dragDetails.windowX = Math.max(0, Math.min(a._dragDetails.windowX + i, s - a.offsetWidth)), a.style.left = a._dragDetails.windowX + "px"; break; case "vertical": a._dragDetails.windowY = Math.max(0, Math.min(a._dragDetails.windowY + n, o - a.offsetHeight)), a.style.top = a._dragDetails.windowY + "px"; break; case "both": a._dragDetails.windowX = Math.max(0, Math.min(a._dragDetails.windowX + i, s - a.offsetWidth)), a._dragDetails.windowY = Math.max(0, Math.min(a._dragDetails.windowY + n, o - a.offsetHeight)), a.style.left = a._dragDetails.windowX + "px", a.style.top = a._dragDetails.windowY + "px" }a._dragDetails.top = a.offsetTop, a._dragDetails.left = a.offsetLeft } _dragStartHandler(e) { this._dragDetails && this._dragDetails.started && e.preventDefault() } _focusHandler(e) { const t = this; "focus" === e.type ? (t.setAttribute("focus", ""), t.bringToFront()) : t._buttonPressed || (t.removeAttribute("focus"), t._dragDetails && t._dragDetails.started && t._handleWindowResizeDummy()) } _getAllMinimizedWindows(e) { const t = this; let a = []; e || (e = t._windowParent.element); const i = e.querySelectorAll("jqx-window"); for (let e = 0; e < i.length; e++)i[e] !== t && i[e].hasAttribute("minimized") && a.push(i[e]); return a.sort((function (e, t) { let a = e.getBoundingClientRect(), i = t.getBoundingClientRect(); return a.right - i.right })), a } _handleSnapping(e) { const t = this; e ? t.disableSnap || t.collapsed || (t._snapDummy || (t._snapDummy = document.createElement("div"), t._snapDummy.addEventListener("transitionend", (function () { t._snapDummy.classList.contains("jqx-visibility-hidden") && t._snapDummy.parentElement && t._snapDummy.parentElement.removeChild(t._snapDummy) }))), t._snapDummy.className = "jqx-window-snap-" + e + "-feedback", t._snapDummy._position = e, t._snapDummy.parentElement || t._windowParent.element.appendChild(t._snapDummy)) : t._snapDummy && t._snapDummy.parentElement && t._snapDummy.classList.add("jqx-visibility-hidden") } _headerDblCickHandler(e) { const t = this, a = t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; a !== t.$.headerSection && a !== t.$.header || t.$.maximizeButton && 0 === t.$.maximizeButton.offsetHeight || (t.maximized ? t.restore() : t.maximize()) } _isWindowButton(e) { const t = this; for (; e && (e.closest && e.closest(".jqx-buttons-container")) !== t.$.buttonsContainer;)e = e.getRootNode().host; if (!e) return; const a = /jqx-(\w+[-]*\w*)-button/gi; if ((e = e.closest(".jqx-button")) && e === t._buttonPressed) switch (e) { case t.$.closeButton: return t.close(), !0; case t.$.collapseButton: return t.collapsed ? t.expand() : t.collapse(), !0; case t.$.maximizeButton: return t.maximized ? t.restore() : t.maximize(), !0; case t.$.minimizeButton: return t.minimized ? t.restore() : t.minimize(), !0; case t.$.pinButton: return t.pinned ? t.unpin() : t.pin(), !0; default: if (!a.test(e.className)) return; return t.$.fireEvent(JQX.Utilities.Core.toCamelCase(e.className.match(a).toString().replace("jqx-", "").replace("-button", "")), { button: e }), !0 } } _keyDownHandler(e) { const t = this; if (delete t._changingFocus, t.disabled || (t.hasAttribute("dragged") || t.hasAttribute("resized")) && t._mouseManipulation) return; const a = "ArrowDown" === e.key || "ArrowRight" === e.key ? 10 : -10, i = t.enableShadowDOM && t._windowParent.element.getRootNode() ? t._windowParent.element.getRootNode().activeElement : document.activeElement; if (!t.disableKeyboard) switch (e.key) { case "ArrowUp": case "ArrowDown": case "ArrowLeft": case "ArrowRight": { if (t.minimized || i !== t) return; let n = e.key.indexOf("Right") > -1 || e.key.indexOf("Left") > -1; e.preventDefault(); const o = (t.isInShadowDOM ? t.getRootNode().host : t).closest("jqx-docking-layout"); if (!n && e.altKey && !(t instanceof JQX.TabsWindow && o)) return void ("ArrowUp" === e.key ? t.maximize() : t.restore()); if (t.maximized) return; if (t.$.addClass("no-transition"), e.ctrlKey && "none" !== t.resizeMode && !t.collapsed) return n = -1 === ["horizontal", "vertical", "both"].indexOf(t.resizeMode) ? t.resizeMode : n ? "right" : "bottom", t.hasAttribute("dragged") && t._cancelDragging(e), t.hasAttribute("resized") || t.$.fireEvent("resizeStart", { position: { x: e.pageX, y: e.pageY } }), void t._resize(n, a); t.pinned || (t.hasAttribute("dragged") || (t.setAttribute("dragged", ""), t.$.fireEvent("dragStart", { left: e.pageX, top: e.pageY })), t._drag(a, n ? "horizontal" : "vertical")), t.$.removeClass("no-transition"); break } case "Escape": t.disableEscape || t.headerButtons.indexOf("close") > -1 && t.close(); break; case "p": e.altKey && t.headerButtons.indexOf("pin") > -1 && (t.pinned ? t.unpin() : t.pin()); break; case "c": e.altKey && t.headerButtons.indexOf("collapse") > -1 && (t.collapsed ? t.expand() : t.collapse()); break; case "m": e.altKey && t.headerButtons.indexOf("minimize") > -1 && (t.minimized ? t.restore() : t.minimize()); break; case "Tab": t.opened && t.modal && (t._changingFocus = !0); break; case "Enter": case " ": { let a; if (t.shadowRoot || t.isInShadowDOM ? (a = e.composedPath()[0], t._buttonPressed = a.getRootNode().host) : (a = e.target.closest && e.target.closest(".jqx-button"), t._buttonPressed = a), !a) return; t._isWindowButton(a), delete t._buttonPressed; break } } } _keyUpHandler(e) { const t = this; if (e.key && !t.disableKeyboard) { if ("Control" === e.key && t._dragDetails && t.hasAttribute("resized") && !t._mouseManipulation) { if (!t._dragDetails.started) return; "drag" !== t._dragDetails.type && (t.removeAttribute("resized"), t.$.fireEvent("resizeEnd", { left: e.pageX, top: e.pageY, width: t._dragDetails.newWidth, height: t._dragDetails.newHeight }), t._handleWindowResizeDummy()), t._dragDetails.started = !1 } e.key.indexOf("Arrow") > -1 && t.hasAttribute("dragged") && !t._mouseManipulation && t._cancelDragging(e) } } _mouseWheelHandler(e) { const t = this; !t.disabled && t._dragDetails && t._dragDetails.started && (e.deltaY < 0 && t._windowParent.scrollElement.scrollTop + e.deltaY <= 0 ? t.style.top = Math.max(0, t._dragDetails.windowY) + "px" : e.deltaY > 0 && (t._dragDetails.windowY + t.offsetHeight + e.deltaY >= t._windowParent.scrollElement.scrollHeight || t._windowParent.scrollElement.scrollTop + t._windowParent.element.clientHeight === t._windowParent.scrollElement.scrollHeight) || ("drag" === t._dragDetails.type ? (t._dragDetails.windowY += e.deltaY, t.style.top = t._dragDetails.windowY + "px") : (t._dragDetails.height += e.deltaY, t.style.height = t._dragDetails.height + "px"))) } _moveHandler(e) { const t = this; if (!(t.disabled || t.collapsed || t.maximized || t.minimized || (JQX.Utilities.Core.isMobile && navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform) && t.hasAttribute("dragged") && e.originalEvent.preventDefault(), t._mouseManipulation || (t.$.container.className.indexOf("jqx-window-resizing") > -1 && t.$.container.classList.remove("jqx-window-resizing-bottom-right", "jqx-window-resizing-top-right", "jqx-window-resizing-top-left", "jqx-window-resizing-bottom-left", "jqx-window-resizing-top", "jqx-window-resizing-bottom", "jqx-window-resizing-left", "jqx-window-resizing-right"), "none" === t.resizeMode)))) { const a = t.getBoundingClientRect(), i = e.clientY < a.top + 10, n = e.clientY > a.bottom - 10, o = e.clientX > a.right - 10, s = e.clientX < a.left + 10; switch (t.resizeMode) { case "none": break; case "both": if (t.resizeIndicator) return void (n && o && t.$.container.classList.add("jqx-window-resizing-bottom-right")); if (s || o) return i ? void t.$.container.classList.add("jqx-window-resizing-top-" + (s ? "left" : "right")) : n ? void t.$.container.classList.add("jqx-window-resizing-bottom-" + (s ? "left" : "right")) : void t.$.container.classList.add("jqx-window-resizing-" + (s ? "left" : "right")); if (i || n) { if (o) return void t.$.container.classList.add("jqx-window-resizing-" + (i ? "top-right" : "bottom-right")); if (s) return void t.$.container.classList.add("jqx-window-resizing-" + (i ? "top-left" : "bottom-left")); t.$.container.classList.add("jqx-window-resizing-" + (i ? "top" : "bottom")) } break; case "horizontal": if (t.resizeIndicator) return void (n && o && t.$.container.classList.add("jqx-window-resizing-right")); if (s) return void t.$.container.classList.add("jqx-window-resizing-left"); o && t.$.container.classList.add("jqx-window-resizing-right"); break; case "vertical": if (t.resizeIndicator) return void (n && o && t.$.container.classList.add("jqx-window-resizing-bottom")); if (i) return void t.$.container.classList.add("jqx-window-resizing-top"); n && t.$.container.classList.add("jqx-window-resizing-bottom"); break; case "top": if (i) { if (t.resizeIndicator && !s) return; t.$.container.classList.add("jqx-window-resizing-top") } break; case "bottom": if (n) { if (t.resizeIndicator && !o) return; t.$.container.classList.add("jqx-window-resizing-bottom") } break; case "left": if (s) { if (t.resizeIndicator && !i) return; t.$.container.classList.add("jqx-window-resizing-left") } break; case "right": if (o) { if (t.resizeIndicator && !n) return; t.$.container.classList.add("jqx-window-resizing-right") } } } } _handleActiveState() { const e = this, t = document.querySelectorAll(".jqx-window"); for (let a = 0; a < t.length; a++)t[a].contains(e) || e.contains(t[a]) || (t[a].removeAttribute("active"), t[a].removeAttribute("focus")); e.setAttribute("active", "") } _handleWindowResizeDummy() { const e = this; if (e._resizeDummy || (e._resizeDummy = document.createElement("div"), e._resizeDummy.classList.add("jqx-window-resize-feedback")), !e.hasAttribute("resized")) return e._resizeDummy && e._resizeDummy.remove(), void (!e.liveResize && "resize" === e._dragDetails.type && e._dragDetails.started && (e.style.top = e._dragDetails.top + "px", e.style.left = e._dragDetails.left + "px", e.style.width = e._dragDetails.newWidth + "px", e.style.height = e._dragDetails.newHeight + "px")); e._resizeDummy.parentElement || e._resizeDummy.getRootNode().host || (e._resizeDummy.style.width = e.offsetWidth + "px", e._resizeDummy.style.height = e.offsetHeight + "px", e._resizeDummy.style.top = e.offsetTop + "px", e._resizeDummy.style.left = e.offsetLeft + "px", e._windowParent.element.appendChild(e._resizeDummy)) } _resize(e, t) { const a = this; let i; if ((!a._dragDetails || a._dragDetails && "drag" === a._dragDetails.type) && a._setDragDetails("resize"), !a._dragDetails) return; a._dragDetails.started = !0, a.hasAttribute("resized") || (a.setAttribute("resized", ""), a.hasAnimation && a.$.addClass("no-transition")), a.liveResize || a._handleWindowResizeDummy(); const n = a._snapDummy && a.$.hasClass("jqx-window-snapped-" + a._snapDummy._position) ? "snapWindowWidth" : "width"; switch (e) { case "left": i = "object" == typeof t ? t.pageX - a._dragDetails.x : t, i = i > 0 ? Math.min(i, a._dragDetails[n] - a._dragDetails.minWidth) : -1 * Math.min(a._dragDetails.maxWidth ? a._dragDetails.maxWidth - a._dragDetails[n] : a._dragDetails.left, Math.abs(i)), a._dragDetails[n] = Math.min(a._dragDetails[n] + a._dragDetails.left - a._windowParent.scrollElement.scrollLeft, a._dragDetails[n] - i), a._dragDetails.windowX = Math.max(a._windowParent.scrollElement.scrollLeft, a._dragDetails.windowX + i), "object" != typeof t && (a._dragDetails[n] = Math.max(a._dragDetails[n], a._dragDetails.minWidth)), a._dragDetails[n] >= a._dragDetails.minWidth && (a._dragDetails.left = a._dragDetails.windowX, a._dragDetails.newWidth = a._dragDetails[n]); break; case "right": { const e = a._windowParent.element.clientWidth !== a._windowParent.element.offsetWidth ? a._windowParent.borderWidth : 0, n = a._snapDummy && a.$.hasClass("jqx-window-snapped-" + a._snapDummy._position) ? "snapWindowWidth" : "width"; i = "object" == typeof t ? t.pageX - a._dragDetails.x : t, i > 0 && a._dragDetails.maxWidth && (i = Math.min(a._dragDetails.maxWidth - a._dragDetails[n], i)), a._dragDetails[n] = Math.min(a._windowParent.element.clientWidth + a._windowParent.scrollElement.scrollLeft - a._dragDetails.left - e, Math.max(0, a._dragDetails[n] + i)), "object" != typeof t && (a._dragDetails[n] = Math.max(a._dragDetails[n], a._dragDetails.minWidth)), a._dragDetails.left = a.offsetLeft, a._dragDetails.newWidth = Math.max(a._dragDetails.minWidth, a._dragDetails[n]); break } case "top": a._snapDummy && a.$.hasClass("jqx-window-snapped-" + a._snapDummy._position) && (a._dragDetails.height = a._dragDetails.snapWindowHeight), i = "object" == typeof t ? t.pageY - a._dragDetails.y : t, i = i > 0 ? Math.min(i, a._dragDetails.height - a._dragDetails.minHeight) : -1 * Math.min(a._dragDetails.maxHeight ? a._dragDetails.maxHeight - a._dragDetails.height : a._dragDetails.top, Math.abs(i)), a._dragDetails.snapWindowHeight = a._dragDetails.height = Math.min(a._dragDetails.height + a._dragDetails.top - a._windowParent.scrollElement.scrollTop, a._dragDetails.height - i), a._dragDetails.windowY = Math.max(a._windowParent.scrollElement.scrollTop, a._dragDetails.windowY + i), "object" != typeof t && (a._dragDetails.snapWindowHeight = a._dragDetails.height = Math.max(a._dragDetails.height, a._dragDetails.minHeight)), a._dragDetails.height >= a._dragDetails.minHeight && (a._dragDetails.top = a._dragDetails.windowY, a._dragDetails.newHeight = a._dragDetails.height), a._dragDetails.newWidth = Math.max(a._dragDetails[n], a._dragDetails.newWidth); break; case "bottom": a._snapDummy && a.$.hasClass("jqx-window-snapped-" + a._snapDummy._position) && (a._dragDetails.height = a._dragDetails.snapWindowHeight), i = "object" == typeof t ? t.pageY - a._dragDetails.y : t, i > 0 && a._dragDetails.maxHeight && (i = Math.min(a._dragDetails.maxHeight - a._dragDetails.height, i)), a._dragDetails.snapWindowHeight = a._dragDetails.height = Math.min(a._windowParent.element.clientHeight + a._windowParent.scrollElement.scrollTop - a._dragDetails.top - a._windowParent.borderWidth, Math.max(0, a._dragDetails.height + i)), "object" != typeof t && (a._dragDetails.snapWindowHeight = a._dragDetails.height = Math.max(a._dragDetails.height, a._dragDetails.minHeight)), a._dragDetails.newHeight = Math.max(a._dragDetails.minHeight, a._dragDetails.height), a._dragDetails.newWidth = Math.max(a._dragDetails[n], a._dragDetails.newWidth); break; case "bottomLeftCorner": a._resize("bottom", t), a._resize("left", t); break; case "bottomRightCorner": a._resize("bottom", t), a._resize("right", t); break; case "topLeftCorner": a._resize("top", t), a._resize("left", t); break; case "topRightCorner": a._resize("top", t), a._resize("right", t) }const o = a.liveResize ? a : a._resizeDummy; a._dragDetails.newHeight = Math.max(a._dragDetails.snapWindowHeight, a._dragDetails.newHeight), o.style.top = a._dragDetails.top + "px", o.style.left = a._dragDetails.left + "px", o.style.width = a._dragDetails.newWidth + "px", o.style.height = a._dragDetails.newHeight + "px" } _restoreFromMinimization() { const e = this; e.minimized = !1, e.style.width = e.style.height = e.style.top = e.style.left = "", e._refreshMinimizedWindowsPosition() } _refreshMinimizedWindowsPosition() { const e = this, t = e._getAllMinimizedWindows(); if (0 === t.length) return; let a; t[0].style.left = "5px"; for (let i = 1; i < t.length; i++)parseFloat(t[i - 1].style.left) + t[i - 1].offsetWidth + t[i].offsetWidth + 10 < e._windowParent.element.clientWidth ? (t[i].style.left = parseFloat(t[i - 1].style.left) + t[i - 1].offsetWidth + 5 + "px", t[i].style.top = t[i - 1].offsetTop + "px", a = t[i]) : (t[i].style.left = parseFloat(a.style.left) + "px", t[i].style.top = a.offsetTop + "px") } _setHeaderButtons() { const e = this, t = e.headerButtons, a = e.$.buttonsContainer.children, i = function (t) { const a = e.$.buttonsContainer.getElementsByClassName("jqx-" + (t + "").split(/(?=[A-Z])/).join("-").toLowerCase() + "-button")[0]; return a && a.classList.remove("jqx-hidden"), a }; for (let e = 0; e < a.length; e++)a[e].classList.add("jqx-hidden"); if (t.length > 0) for (let a = 0; a < t.length; a++) { let n = i(t[a]); if (!n) { const e = (t[a] + "").split(/(?=[A-Z])/); n = document.createElement("button"), n.setAttribute("aria-label", e.map((e => e.slice(0, 1).toUpperCase() + e.slice(1))).join(" ")), n.classList.add("jqx-" + e.join("-").toLowerCase() + "-button", "jqx-button", "jqx-element") } e.$.buttonsContainer.insertBefore(n, e.$.buttonsContainer.firstElementChild) } } _setDragDetails(e, t) { const a = this; if (a._dragDetails || (a._dragDetails = {}), void 0 === a._dragDetails.minWidth || void 0 === a._dragDetails.minHeight || void 0 === a._dragDetails.maxWidth || void 0 === a._dragDetails.maxHeight) { const e = getComputedStyle(a); a._dragDetails.minWidth = parseFloat(e.getPropertyValue("min-width")) || 0, a._dragDetails.minHeight = parseFloat(e.getPropertyValue("min-height")) || 0, a._dragDetails.maxWidth = parseFloat(e.getPropertyValue("max-width")) || 0, a._dragDetails.maxHeight = parseFloat(e.getPropertyValue("max-height")) || 0 } a._dragDetails.windowX = a.offsetLeft, a._dragDetails.windowY = a.offsetTop; const i = a.getBoundingClientRect(); if (a._snapDummy && a.$.hasClass("jqx-window-snapped-" + a._snapDummy._position)) "right" === a.headerPosition && a.collapsed && (a._dragDetails.offsetX = i.left + a.offsetWidth - t.clientX); else { const n = a.parentElement === document.body ? document.documentElement.getBoundingClientRect() : a.parentElement ? a.parentElement.getBoundingClientRect() : document.documentElement.getBoundingClientRect(), o = window.scrollX || window.pageXOffset, s = window.scrollY || window.pageYOffset; a._windowParent.offsetLeft = n.left + o, a._windowParent.offsetTop = n.top + s, t && "object" == typeof t && (a._dragDetails.offsetX = t.clientX - i.left, a._dragDetails.offsetY = t.clientY - i.top), a.collapsed || (a.hasAnimation && "minimize" === e ? (a._dragDetails.width = a._dragDetails.width ? a._dragDetails.width : a.offsetWidth, a._dragDetails.height = a._dragDetails.height ? a._dragDetails.height : a.offsetHeight) : (a._dragDetails.width = a.offsetWidth, a._dragDetails.height = a.offsetHeight), (a.style.width || a.style.height) && (a._dragDetails.resized = !0)) } if ("minimize" !== e && e && (a._dragDetails.type = e, a._dragDetails.started = !0, a._dragDetails.snapWindowWidth = a.offsetWidth, a._dragDetails.snapWindowHeight = a.offsetHeight, t && "object" == typeof t ? (a._dragDetails.x = t.pageX, a._dragDetails.y = t.pageY) : (a._dragDetails.x = a.offsetLeft, a._dragDetails.y = a.offsetTop), "resize" === e)) { if ("none" === a.resizeMode) return void delete a._dragDetails; a._dragDetails.top = a.offsetTop, a._dragDetails.left = a.offsetLeft, a._dragDetails.newWidth = a._dragDetails.width, a._dragDetails.newHeight = a._dragDetails.height, a.$container.hasClass("jqx-window-resizing-right") ? a._dragDetails.side = "right" : a.$container.hasClass("jqx-window-resizing-left") ? a._dragDetails.side = "left" : a.$container.hasClass("jqx-window-resizing-top") ? a._dragDetails.side = "top" : a.$container.hasClass("jqx-window-resizing-bottom") ? a._dragDetails.side = "bottom" : a.$container.hasClass("jqx-window-resizing-top-left") ? a._dragDetails.side = "topLeftCorner" : a.$container.hasClass("jqx-window-resizing-bottom-left") ? a._dragDetails.side = "bottomLeftCorner" : a.$container.hasClass("jqx-window-resizing-top-right") ? a._dragDetails.side = "topRightCorner" : a.$container.hasClass("jqx-window-resizing-bottom-right") && (a._dragDetails.side = "bottomRightCorner") } } _setElementParent(e) { const t = this; if (t._windowParent.element = void 0, t._windowParent.parent && !t._windowParent.parent.querySelectorAll("jqx-window, jqx-dialog-window, jqx-progress-window, jqx-wait-window, jqx-alert-window, jqx-prompt-window, jqx-multiline-prompt-window") && (t._windowParent.parent.style.position = ""), e instanceof HTMLElement) t._windowParent.element = e; else if ("string" == typeof e) if ("body" === e) { const e = t.getRootNode(); t._windowParent.element = e && e.host ? t.getShadowRootOrBody() : document.body } else t._windowParent.element = document.getElementById(e); if (t._windowParent.element || (t._windowParent.initialParent ? t._windowParent.element = t._windowParent.initialParent.parentElement ? t._windowParent.initialParent : t.getShadowRootOrBody() : t._windowParent.element = t.getShadowRootOrBody()), t.parentElement !== t._windowParent.element && t._windowParent.element.appendChild(t), t._windowParent.element === document.body) t._windowParent.element = document.documentElement, t._windowParent.scrollElement = document.scrollingElement, t._windowParent.parent = document.body, t._windowParent.borderWidth = 0; else { if (t.parentElement instanceof JQX.Window && !t.parentElement.isCompleted) return void t.parentElement.whenRendered((function () { t.parentElement.appendChild(t), t._setElementParent(t.windowParent) })); if (t._windowParent.element instanceof JQX.Window && (t._windowParent.element = t._windowParent.element.$.content), t.parentElement) { const e = getComputedStyle(t.parentElement), a = e.getPropertyValue("position"); t._windowParent.borderWidth = 2 * parseInt(e.getPropertyValue("border-width") || 0), t._windowParent.parent = t.parentElement, t._windowParent.scrollElement = t._windowParent.element, "static" === a && (t.parentElement.style.position = "relative") } else t._windowParent.scrollElement = t._windowParent.element } t._setModal(), t.style.left && t.offsetLeft > t._windowParent.scrollElement.scrollWidth && (t.style.left = t._windowParent.scrollElement.scrollWidth - t.offsetWidth + "px"), t.style.top && t.offsetTop > t._windowParent.scrollElement.scrollHeight && (t.style.top = t._windowParent.scrollElement.scrollHeight - t.offsetHeight + "px") } _setModal() { const e = this; if (e._windowParent && (delete e._changingFocus, e._windowParent.element)) if (e.modal) if (e._modal || (e._modal = document.createElement("div"), e._modal.classList.add("jqx-modal")), e._windowParent.parent !== document.body ? e._modal.setAttribute("nested-modal", "") : e._modal.removeAttribute("nested-modal"), e._modal._window = e, e.opened && !e._modal.parentElement) { const t = parseInt(getComputedStyle(e).getPropertyValue("z-index")); isNaN(t) || (e._modal.style.zIndex = t - 1), e.parentElement.insertBefore(e._modal, e) } else e._modal.parentElement && e._modal.parentElement.removeChild(e._modal); else e._modal && e._modal.parentElement && (e._modal.parentElement.removeChild(e._modal), delete e._modal) } }), JQX("jqx-dialog-window", class extends JQX.Window { static get properties() { return { cancelLabel: { value: "Cancel", type: "string" }, confirmLabel: { value: "Ok", type: "string" }, disableSnap: { value: !0, readOnly: !0, type: "boolean" }, headerButtons: { value: ["close"], type: "array" }, modal: { value: !0, readOnly: !0, type: "boolean", defaultReflectToAttribute: !0 } } } static get listeners() { return { "footer.click": "_footerClickHandler" } } template() { return '<div role="presentation">\n <div class="jqx-content-container" id="container">\n <div id="headerSection" class="jqx-header-section" role="heading" aria-level="1">\n <div id="header" class="jqx-header">[[label]]</div>\n <div id="buttonsContainer" class="jqx-buttons-container">\n <button id="pinButton" class="jqx-pin-button" aria-label="Pin"></button>\n <button id="collapseButton" class="jqx-button jqx-element jqx-collapse-button" aria-label="Collapse"></button>\n <button id="minimizeButton" class="jqx-button jqx-element jqx-minimize-button" aria-label="Minimize"></button>\n <button id="maximizeButton" class="jqx-button jqx-element jqx-maximize-button" aria-label="Maximize"></button>\n <button id="closeButton" class="jqx-button jqx-element jqx-close-button" aria-label="Close"></button>\n </div>\n </div>\n <div class="jqx-content">\n <content></content>\n </div>\n <div id="footer" class="jqx-footer">\n <button id="confirmButton" class="jqx-button jqx-element jqx-confirm-button">[[confirmLabel]]</button>\n <button id="cancelButton" class="jqx-button jqx-element jqx-cancel-button">[[cancelLabel]]</button>\n </div>\n </div>\n </div>' } _createElement() { const e = this; e.setAttribute("role", "alertdialog"), e.setAttribute("aria-describedby", e.$.content.id) } _footerClickHandler(e) { const t = this, a = e.target; a.closest(".jqx-confirm-button") ? t.$.fireEvent("confirm") : a.closest(".jqx-cancel-button") && t.$.fireEvent("cancel") } _keyDownHandler(e) { const t = this; if (delete t._changingFocus, t.disabled || (t.hasAttribute("dragged") || t.hasAttribute("resized")) && t._mouseManipulation) return; if (t.disableKeyboard) return; e.stopPropagation(); const a = "ArrowDown" === e.key || "ArrowRight" === e.key ? 10 : -10, i = t.enableShadowDOM && t._windowParent.element.getRootNode() ? t._windowParent.element.getRootNode().activeElement : document.activeElement; switch (e.key) { case "ArrowUp": case "ArrowDown": case "ArrowLeft": case "ArrowRight": { if (t.minimized || i !== t) return; const n = e.key.indexOf("Right") > -1 || e.key.indexOf("Left") > -1; if (e.preventDefault(), !n && e.altKey) return void ("ArrowUp" === e.key ? t.maximize() : t.restore()); if (t.$.addClass("no-transition"), t.maximized) return; if (e.ctrlKey && "none" !== t.resizeMode) return t.hasAttribute("dragged") && t._cancelDragging(e), t.hasAttribute("resized") || t.$.fireEvent("resizeStart", { position: { x: e.pageX, y: e.pageY } }), void t._resize(n ? "right" : "bottom", a); t.pinned || (t.hasAttribute("dragged") || (t.setAttribute("dragged", ""), t.$.fireEvent("dragStart", { left: e.pageX, top: e.pageY })), t._drag(a, n ? "horizontal" : "vertical")), t.$.removeClass("no-transition"); break } case "Escape": t.disableEscape || t.headerButtons.indexOf("close") > -1 && t.close(); break; case "Tab": t.opened && t.modal && (t._changingFocus = !0); break; case "Enter": case " ": { let a; if (t.shadowRoot || t.isInShadowDOM ? (a = e.composedPath()[0], t._buttonPressed = a.getRootNode().host) : (a = e.target.closest && e.target.closest(".jqx-button"), t._buttonPressed = a), !a) return; t._isWindowButton(a), delete t._buttonPressed; break } } } }), JQX("jqx-alert-window", class extends JQX.DialogWindow { static get properties() { return { headerButtons: { value: [], type: "array" } } } _createElement() { const e = this; e.setAttribute("role", "alertdialog"), e.setAttribute("aria-describedby", e.$.content.id) } }), JQX("jqx-prompt-window", class extends JQX.DialogWindow { static get properties() { return { autoComplete: { allowedValues: ["none", "manual", "auto", "inline"], type: "string", value: "manual" }, confirmLabel: { value: "Ok", type: "string" }, cancelLabel: { value: "Cancel", type: "string" }, disableSnap: { value: !0, readOnly: !0, type: "boolean" }, displayMode: { value: "default", allowedValues: ["default", "escaped"], type: "string" }, headerButtons: { value: ["close"], type: "array" }, form: { value: "", type: "string" }, hint: { value: null, type: "any?" }, maxLength: { value: null, type: "number?" }, minLength: { value: 2, type: "number" }, messages: { extend: !0, value: { en: { missingReference: "{{elementType}}: Missing reference to {{files}}." } }, type: "object" }, modal: { value: !0, readOnly: !0, type: "boolean", defaultReflectToAttribute: !0 }, name: { value: "", type: "string" }, placeholder: { value: "", type: "string" }, promptLabel: { value: "", type: "string?" }, required: { value: !1, type: "boolean" }, requiredMessage: { value: "", type: "string" }, selectAllOnFocus: { value: !1, type: "boolean" }, value: { value: "", type: "string" } } } template() { return '<div role="presentation">\n <div class="jqx-content-container" id="container">\n <div id="headerSection" class="jqx-header-section" role="heading" aria-level="1">\n <div id="header" class="jqx-header">[[label]]</div>\n <div id="buttonsContainer" class="jqx-buttons-container">\n <button id="closeButton" class="jqx-button jqx-element jqx-close-button" aria-label="Close"></button>\n </div>\n </div>\n <div class="jqx-content">\n <content></content>\n <jqx-text-box id="textBox"\n animation="[[animation]]"\n auto-complete="[[autoComplete]]"\n max-length="[[maxLength]]"\n value="{{value}}"\n form="[[form]]"\n label="[[promptLabel]]"\n hint="[[hint]]"\n display-mode="[[displayMode]]"\n max-length="[[maxLength]]"\n placeholder="[[placeholder]]"\n required="[[required]]"\n required-message="[[requiredMessage]]"\n select-all-on-focus="[[selectAllOnFocus]]"\n theme="[[theme]]"\n right-to-left="[[rightToLeft]]">\n </jqx-text-box>\n </div>\n <div id="footer" class="jqx-footer">\n <button id="confirmButton" class="jqx-button jqx-element jqx-confirm-button flat">[[confirmLabel]]</button>\n <button id="cancelButton" class="jqx-button jqx-element jqx-cancel-button flat">[[cancelLabel]]</button>\n </div>\n </div>\n </div>' } static get listeners() { return { "footer.click": "_footerClickHandler" } } static get requires() { return { "JQX.TextBox": "jqx.textbox.js" } } _footerClickHandler(e) { const t = this, a = e.target; a.closest(".jqx-confirm-button") ? t.$.fireEvent("confirm", { value: t.$.textBox.value }) : a.closest(".jqx-cancel-button") && t.$.fireEvent("cancel", { value: t.$.textBox.value }) } _keyDownHandler(e) { const t = this; function a() { t._dragDetails && (t._dragDetails.started = !1), t.$.removeClass("no-transition") } if (delete t._changingFocus, t.disabled || t._dragDetails && t._dragDetails.started) return; if (t.disableKeyboard) return; e.stopPropagation(); const i = "ArrowDown" === e.key || "ArrowRight" === e.key ? 10 : -10, n = t.enableShadowDOM && t._windowParent.element.getRootNode() ? t._windowParent.element.getRootNode().activeElement : document.activeElement; switch (t.$.removeClass("no-transition"), e.key) { case "ArrowUp": case "ArrowDown": if (n !== t) return; if (e.preventDefault(), e.altKey) return "ArrowUp" === e.key ? t.maximize() : t.restore(), void a(); if (t.$.addClass("no-transition"), e.ctrlKey) return t._resize("bottom", i), void a(); t._drag(i, "vertical"); break; case "ArrowLeft": case "ArrowRight": if (n !== t) return; if (e.preventDefault(), t.$.addClass("no-transition"), e.ctrlKey) return t._resize("right", i), void a(); t._drag(i, "horizontal"), t.$.removeClass("no-transition"); break; case "Escape": t.disableEscape || t.headerButtons.indexOf("close") > -1 && t.close(); break; case "Tab": t.opened && t.modal && (t._changingFocus = !0); break; case "Enter": case " ": { let a; if (t.shadowRoot || t.isInShadowDOM ? (a = e.composedPath()[0], t._buttonPressed = a.getRootNode().host) : (a = e.target.closest && e.target.closest(".jqx-button"), t._buttonPressed = a), !a) return; t._isWindowButton(a), delete t._buttonPressed; break } }a() } }), JQX("jqx-multiline-prompt-window", class extends JQX.PromptWindow { static get properties() { return { autoCapitalize: { value: "none", allowedValues: ["none", "words", "characters"], type: "string" }, autoExpand: { value: !1, type: "boolean" }, headerButtons: { value: ["close"], type: "array" }, horizontalScrollBarVisibility: { type: "string", value: "auto", allowedValues: ["auto", "disabled", "hidden", "visible"] }, modal: { value: !0, readOnly: !0, type: "boolean", defaultReflectToAttribute: !0 }, selectionDirection: { value: "none", allowedValues: ["forward", "backward", "none"], type: "string" }, selectionEnd: { value: 0, reflectToAttribute: !1, type: "number" }, selectionStart: { value: 0, reflectToAttribute: !1, type: "number" }, spellCheck: { value: !1, type: "boolean" }, verticalScrollBarVisibility: { type: "string", value: "auto", allowedValues: ["auto", "disabled", "hidden", "visible"] }, wrap: { value: "soft", allowedValues: ["hard", "soft", "off"], type: "string" } } } template() { return '<div role="presentation">\n <div class="jqx-content-container" id="container">\n <div id="headerSection" class="jqx-header-section" role="heading" aria-level="1">\n <div id="header" class="jqx-header">[[label]]</div>\n <div id="buttonsContainer" class="jqx-buttons-container">\n <button id="closeButton" class="jqx-button jqx-element jqx-close-button" aria-label="Close"></button>\n </div>\n </div>\n <div class="jqx-content">\n <content></content>\n <jqx-multiline-text-box id="textBox"\n animation="[[animation]]"\n horizontal-scroll-bar-visibility= "[[horizontalScrollBarVisibility]]"\n vertical-scroll-bar-visibility= "[[verticalScrollBarVisibility]]"\n auto-capitalize="[[autoCapitalize]]"\n auto-expand = "[[autoExpand]]"\n selection-direction= "[[selectionDirection]]"\n selection-end= "[[selectionEnd]]"\n selection-start="[[selectionStart]]"\n spell-check= "[[spellCheck]]"\n wrap="[[wrap]]"\n max-length="[[maxLength]]"\n value="{{value}}"\n form="[[form]]"\n label="[[promptLabel]]"\n hint="[[hint]]"\n display-mode="[[displayMode]]"\n max-length="[[maxLength]]"\n placeholder="[[placeholder]]"\n required="[[required]]"\n required-message="[[requiredMessage]]"\n select-all-on-focus="[[selectAllOnFocus]]"\n theme="[[theme]]"\n right-to-left="[[rightToLeft]]">\n </jqx-multiline-text-box>\n </div>\n <div id="footer" class="jqx-footer">\n <button id="confirmButton" class="jqx-button jqx-element jqx-confirm-button flat">[[confirmLabel]]</button>\n <button id="cancelButton" class="jqx-button jqx-element jqx-cancel-button flat">[[cancelLabel]]</button>\n </div>\n </div>\n </div>' } static get listeners() { return { "footer.click": "_footerClickHandler" } } static get requires() { return { "JQX.MultilineTextBox": "jqx.multilinetextbox.js" } } _footerClickHandler(e) { const t = this, a = e.target; a.closest(".jqx-confirm-button") ? t.$.fireEvent("confirm", { value: t.$.textBox.value }) : a.closest(".jqx-cancel-button") && t.$.fireEvent("cancel", { value: t.$.textBox.value }) } }), JQX("jqx-progress-window", class extends JQX.Window { static get properties() { return { completeLabel: { value: "Continue", type: "string" }, disableSnap: { value: !0, readOnly: !0, type: "boolean" }, headerButtons: { value: ["close"], type: "array" }, indeterminate: { value: !1, type: "boolean" }, inverted: { value: !1, type: "boolean" }, formatFunction: { value: null, type: "function" }, max: { value: 100, type: "number" }, modal: { value: !0, readOnly: !0, type: "boolean", defaultReflectToAttribute: !0 }, min: { value: 0, type: "number" }, showProgressValue: { value: !1, type: "boolean" }, value: { value: 0, type: "number?" } } } template() { return '<div role="presentation">\n <div class="jqx-content-container" id="container">\n <div id="headerSection" class="jqx-header-section" role="heading" aria-level="1">\n <div id="header" class="jqx-header">[[label]]</div>\n <div id="buttonsContainer" class="jqx-buttons-container">\n <button id="closeButton" class="jqx-button jqx-element jqx-close-button" aria-label="Close"></button>\n </div>\n </div>\n <div class="jqx-content" inner-h-t-m-l="[[innerHTML]]">\n <content></content>\n </div>\n <div id="footer" class="jqx-footer">\n <jqx-progress-bar id="progressBar"\n animation="[[animation]]"\n min="[[min]]"\n max="[[max]]"\n indeterminate="[[inditerminate]]"\n inverted="[[inverted]]"\n format-function="[[formatFunction]]"\n show-progress-value="[[showProgressValue]]"\n theme="[[theme]]"\n right-to-left="[[rightToLeft]]"\n value="{{value}}">\n </jqx-progress-bar>\n <button id="completeButton" class="jqx-button jqx-element jqx-complete-button jqx-visibility-hidden">[[completeLabel]]</button>\n </div>\n </div>\n </div>' } static get requires() { return { "JQX.ProgressBar": "jqx.progressbar.js" } } propertyChangedHandler(e, t, a) { "value" === e ? this._handleCompletion() : super.propertyChangedHandler(e, t, a) } _createElement() { this.setAttribute("role", "dialog"), this._handleCompletion() } _handleCompletion() { const e = this; e.$.completeButton && (e.value >= e.max ? (e.$completeButton.removeClass("jqx-visibility-hidden"), e.$progressBar.addClass("jqx-visibility-hidden")) : (e.$completeButton.addClass("jqx-visibility-hidden"), e.$progressBar.removeClass("jqx-visibility-hidden"))) } _keyDownHandler(e) { const t = this; function a() { t._dragDetails && (t._dragDetails.started = !1), t.$.removeClass("no-transition") } if (delete t._changingFocus, t.disabled || t._dragDetails && t._dragDetails.started) return; if (t.disableKeyboard) return; e.stopPropagation(); const i = "ArrowDown" === e.key || "ArrowRight" === e.key ? 10 : -10, n = t.enableShadowDOM && t._windowParent.element.getRootNode() ? t._windowParent.element.getRootNode().activeElement : document.activeElement; switch (t.$.removeClass("no-transition"), e.key) { case "ArrowUp": case "ArrowDown": if (n !== t) return; if (e.preventDefault(), e.altKey) return "ArrowUp" === e.key ? t.maximize() : t.restore(), void a(); if (t.$.addClass("no-transition"), e.ctrlKey) return t._resize("bottom", i), void a(); t._drag(i, "vertical"), t.$.removeClass("no-transition"); break; case "ArrowLeft": case "ArrowRight": if (n !== t) return; if (e.preventDefault(), t.$.addClass("no-transition"), e.ctrlKey) return t._resize("right", i), void a(); t._drag(i, "horizontal"), t.$.removeClass("no-transition"); break; case "Escape": t.disableEscape || t.headerButtons.indexOf("close") > -1 && t.close(); break; case "Tab": t.opened && t.modal && (t._changingFocus = !0); break; case "Enter": case " ": { let a; if (t.shadowRoot || t.isInShadowDOM ? (a = e.composedPath()[0], t._buttonPressed = a.getRootNode().host) : (a = e.target.closest && e.target.closest(".jqx-button"), t._buttonPressed = a), !a) return; t._isWindowButton(a), delete t._buttonPressed; break } }a() } }), JQX("jqx-tabs-window", class extends JQX.Window { static get properties() { return { disableSnap: { value: !0, readOnly: !0, type: "boolean" }, dropPosition: { value: ["all"], type: "array" }, addNewTab: { value: !1, type: "boolean" }, allowToggle: { value: !1, type: "boolean" }, autoHide: { value: !1, type: "boolean" }, autoHideWindow: { value: null, type: "any" }, dataSource: { value: null, type: "array?", reflectToAttribute: !1 }, tabCloseButtonMode: { value: "default", allowedValues: ["default", "selected"], type: "string" }, tabCloseButtons: { value: !1, type: "boolean" }, draggable: { value: !0, type: "boolean", reflectToAttribute: !1 }, messages: { value: { en: { ambiguousIndexes: "jqx-tabs: Initially set jqx-tab-item indexes are ambiguous and are ignored in favour of the HTML structure.", detailsObjectRequired: 'jqx-tabs: The method "insert" requires a details Object to be passed as a second argument.', invalidIndex: 'jqx-tabs: "{{method}}" method accepts an index of type number.', referenceNodeNotChild: "jqx-tabs: Passed {{argument}} is not part of this jqx-tabs element.", tabItemRequired: 'jqx-tabs: The method "{{method}}" requires a "jqx-tab-item" element to be passed as an argument.' } }, type: "object", extend: !0 }, tabOverflow: { value: "auto", allowedValues: ["auto", "hidden", "scroll"], type: "string" }, tabReorder: { value: !1, type: "boolean" }, tabResize: { value: !1, type: "boolean" }, tabScrollButtonsPosition: { value: "both", allowedValues: ["near", "far", "both"], type: "string" }, selectedIndex: { value: null, type: "number?" }, selectionMode: { value: "click", allowedValues: ["click", "dblclick", "mouseenter", "none"], type: "string" }, collapsed: { value: !1, type: "boolean" }, collapsible: { value: !1, type: "boolean" }, locked: { value: !1, type: "boolean" }, max: { value: "", type: "any" }, min: { value: "", type: "any" }, size: { value: "", type: "any" }, tabLayout: { value: "scroll", allowedValues: ["scroll", "dropdown", "wrap", "shrink"], type: "string", defaultReflectToAttribute: !0 }, tabPosition: { value: "top", allowedValues: ["top", "bottom", "left", "right", "hidden"], type: "string" }, tabTextOrientation: { value: "horizontal", allowedValues: ["horizontal", "vertical"], type: "string" }, layout: { value: null, type: "any" } } } static get listeners() { return { "tabsElement.blur": "_tabsFocusHandler", "tabsElement.change": "_tabsChangeHandler", "tabsElement.focus": "_tabsFocusHandler", "autoHideWindow.close": "_autoHideWindowCloseHandler", "autoHideWindow.open": "_autoHideWindowOpenHandler" } } template() { return '<div role="presentation">\n <div class="jqx-content-container" id="container">\n <div id="headerSection" class="jqx-header-section" role="heading" aria-level="1">\n <div id="header" class="jqx-header">[[label]]</div>\n <div id="buttonsContainer" class="jqx-buttons-container">\n <button id="minimizeButton" class="jqx-button jqx-element jqx-minimize-button" aria-label="Minimize"></button>\n <button id="maximizeButton" class="jqx-button jqx-element jqx-maximize-button" aria-label="Maximize"></button>\n <button id="closeButton" class="jqx-button jqx-element jqx-close-button" aria-label="Close"></button>\n </div>\n </div>\n <div id="contentSection" class="jqx-content">\n <jqx-tabs id="tabsElement"\n animation="[[animation]]"\n add-new-tab="[[addNewTab]]"\n allow-toggle="[[allowToggle]]"\n close-button-mode="[[tabCloseButtonMode]]"\n close-buttons="[[tabCloseButtons]]"\n disabled="[[disabled]]"\n overflow="[[tabOverflow]]"\n reorder="[[tabReorder]]"\n resize="[[tabResize]]"\n scroll-buttons-position="[[tabScrollButtonsPosition]]"\n selected-index="{{selectedIndex}}"\n selection-mode="[[selectionMode]]"\n tab-layout="[[tabLayout]]"\n tab-position="[[tabPosition]]"\n tab-text-orientation="[[tabTextOrientation]]"\n theme="[[theme]]"\n right-to-left="[[rightToLeft]]">\n <content></content>\n </jqx-tabs>\n </div>\n <div id="footer" class="jqx-footer jqx-hidden"></div>\n </div>\n </div>' } static get requires() { return { "JQX.Tabs": "jqx.tabs.js" } } appendChild(e) { const t = this; if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.appendChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e ? (e instanceof JQX.TabItem || t.error(t.localize("tabItemRequired", { method: "removeChild" })), t.$.tabsElement.appendChild(e)) : t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "appendChild", node: "node" })) } insert(e, t) { this.$.tabsElement.insert(e, t); const a = this.$.tabsElement._tabs[e]; a && (a.draggable = void 0 === t.draggable || t.draggable, a.floatable = void 0 === t.floatable || t.floatable) } insertBefore(e, t) { this.$.tabsElement.insertBefore(e, t) } removeAt(e) { this.$.tabsElement.removeAt(e) } removeChild(e) { const t = this; if (!t.isCompleted || e instanceof HTMLElement && e.classList.contains("jqx-resize-trigger-container")) { const e = Array.prototype.slice.call(arguments, 2); return HTMLElement.prototype.removeChild.apply(t, e.concat(Array.prototype.slice.call(arguments))) } e ? (e instanceof JQX.TabItem || t.error(t.localize("tabItemRequired", { method: "removeChild" })), (t.shadowRoot || t).contains(e) || t.error(t.localize("referenceNodeNotChild", { argument: "node" })), t.$.tabsElement.removeChild(e)) : t.error(t.localize("invalidNode", { elementType: t.nodeName.toLowerCase(), method: "removeChild", node: "node" })) } refreshTabHeader() { const e = this; e.$.tabsElement && e.$.tabsElement.isCompleted && e.$.tabsElement.refreshTabHeader() } refreshTabs() { const e = this; e.$.tabsElement && e.$.tabsElement.isCompleted && e.$.tabsElement._applyTabOverflow() } select(e) { this.$.tabsElement.select(e) } update(e, t, a) { this.$.tabsElement.update(e, t, a) } get items() { return this.isCompleted && this.$.tabsElement ? this.$.tabsElement._tabs : null } get itemLabels() { return this.$ ? this.$.tabsElement._tabLabelContainers : null } get siblings() { const e = this; let t = []; if (!e.isCompleted) return t; const a = e.closest("jqx-splitter"); if (!a || !a.closest("jqx-docking-layout")) return t; const i = a._items; if (!i || !i.length) return t; for (let n = 0; n < i.length; n++) { const o = i[n]; o !== e.closest("jqx-splitter-item") && o.querySelector("jqx-tabs-window").closest("jqx-splitter") === a && t.push(o.querySelector("jqx-tabs-window")) } return t } propertyChangedHandler(e, t, a) { const i = this; switch ("collapsed" !== e && super.propertyChangedHandler(e, t, a), e) { case "theme": "" !== t && (i.$.closeButton.classList.remove(t), i.$.collapseButton.classList.remove(t), i.$.maximizeButton.classList.remove(t), i.$.pinButton.classList.remove(t)), i._applyTheme(a); break; case "autoHideWindow": i._handleAutoHideWindow(); break; case "autoHide": a || (null !== i.$.tabsElement.selectedIndex && (i.$.tabsElement._tabs[i.$.tabsElement.selectedIndex]._autoHideWindowSize = void 0), i._autoHideWindow && i._autoHideWindow.close()); break; case "dataSource": i.$.tabsElement.dataSource = a; break; case "layout": i._handleLayoutProperty(); break; case "collapsible": case "collapsed": case "locked": case "max": case "min": case "size": { const n = i.getRootNode(), o = (n && n.host ? n.host : i).closest("jqx-docking-layout"), s = i.closest("jqx-splitter-item"); if (!o) return void ("collapsed" === e && super.propertyChangedHandler(e, t, a)); s && (s[e] = a); break } } } _applyTheme(e) { if ("" !== e) { const t = this.$.buttonsContainer.children; for (let a = 0; a < t.length; a++)t[a].classList.add(e) } } _autoHideWindowCloseHandler() { const e = this; e.allowToggle && null !== e.$.tabsElement.selectedIndex && e.$.tabsElement.select(e.$.tabsElement.selectedIndex), e._autoHideWindow && e._moveContent(e._autoHideWindow.items[0], e._autoHideWindow._tab) } _autoHideWindowOpenHandler() { const e = this; e.$.tabsElement.selectedIndex && e._handleAutoHide(e.$.tabsElement.selectedIndex) } _createElement() { const e = this; e.setAttribute("role", "dialog"), e.$.tabsElement.$.tabHeaderControls && !e.$.tabsElement.$.tabHeaderControls.innerHTML && e.$.tabsElement.$tabHeaderControls.addClass("jqx-hidden"), e.$.tabsElement.dataSource = e.dataSource, e._applyTheme(e.theme), e._handleAutoHideWindow(), e.autoHide && e._handleAutoHide(e.$.tabsElement.selectedIndex), e.allowToggle || e.selectedIndex || null === e.$.tabsElement.selectedIndex || (e.selectedIndex = e.$.tabsElement.selectedIndex, e.$.tabsElement.setAttribute("selected-index", e.selectedIndex)), e._handleLayoutProperty(); const t = (e.isInShadowDOM ? e.getRootNode().host : e || e).closest("jqx-docking-layout"), a = e.closest("jqx-splitter-item"); t && a && (a.collapsible = e.collapsible, a.collapsed = e.collapsed, a.min = e.min, a.max = e.max, a.size = e.size, a.locked = e.locked) } attached() { super.attached(); const e = this; e.classList.add("jqx-window"), e.shadowRoot && e.$.root.classList.add("jqx-window") } _handleLayoutProperty() { const e = this; let t = e.closest("jqx-docking-layout"); if (JQX.DockingLayout) { if (!e.ownerLayout && e.getRootNode()) { let a = e.getRootNode().host; for (; a;) { if (!a.closest) return; if (a.closest("jqx-docking-layout")) { t = a.closest("jqx-docking-layout"); break } a = a.getRootNode() ? a.getRootNode().host : void 0 } } t ? e.layout = t : e.layout instanceof JQX.DockingLayout || "string" == typeof e.layout && (e.layout = document.getElementById(e.layout)) } } _headerDblCickHandler(e) { const t = this, a = t.shadowRoot || t.isInShadowDOM ? e.originalEvent.composedPath()[0] : e.originalEvent.target; e.ctrlKey || a !== t.$.headerSection && a !== t.$.header || t.$.maximizeButton && 0 === t.$.maximizeButton.offsetHeight || (t.maximized ? t.restore() : t.maximize()) } _documentUpHandler(e) { const t = this; let a = e.originalEvent.target.closest ? e.originalEvent.target.closest(".jqx-window") : e.originalEvent.target, i = a === t || a === t._autoHideWindow || t._isAutoHideWindowClicked, n = t.closest("jqx-docking-layout"); (t.shadowRoot || t.isInShadowDOM) && (a = e.originalEvent.composedPath()[0], i = a.getRootNode() === t.shadowRoot || a.closest(".jqx-window") === t || a.closest(".jqx-window") === t._autoHideWindow || t._isAutoHideWindowClicked), n = ((t.isInShadowDOM ? t.getRootNode().host : t) || t).closest("jqx-docking-layout"), n && n.disabled ? delete t._isWindowContentClicked : (super._documentUpHandler(e), delete t._isAutoHideWindowClicked, t.autoHide && t._autoHideWindow && (i && t._autoHideWindow.opened || (t.selectedIndex = null, t._autoHideWindow.parentElement && t._autoHideWindow.parentElement.closest(".jqx-window") === t && t._autoHideWindow.close()))) } _handleAutoHide(e) { const t = this; if (!t.autoHide || null === e) return; if (t._autoHideWindow || t._handleAutoHideWindow(!0), !t._autoHideWindow) return; t._autoHideWindow._tabsWindow && t._autoHideWindow._tabsWindow !== t && (t._autoHideWindow._tabsWindow.selectedIndex = null); const a = t.$.tabsElement._tabs[e]; t._autoHideWindow._tab !== a && t._moveContent(t._autoHideWindow.items[0], t._autoHideWindow._tab), t._autoHideWindow.label = a.label, t._autoHideWindow.draggable = a.draggable, t._autoHideWindow.floatable = a.floatable, t._autoHideWindow._tab = a, t._autoHideWindow.headerButtons = t.headerButtons, t._moveContent(t._autoHideWindow._tab, t._autoHideWindow.items[0]), t._autoHideWindow.bringToFront(), t._setAutoHideWindowSize(e), t._autoHideWindow.open(), t._autoHideWindow._tabsWindow = t, t._autoHideWindow.controlledBy && t._autoHideWindow.controlledBy.removeAttribute("aria-controls"), t._autoHideWindow.controlledBy = t.$.tabsElement._tabLabelContainers[e], t._autoHideWindow.controlledBy.setAttribute("aria-controls", t._autoHideWindow.id) } _moveHandler(e) { const t = this, a = t.closest("jqx-docking-layout"); a && a.items.indexOf(t) > -1 || (JQX.Utilities.Core.isMobile && navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform) && t.layout instanceof JQX.DockingLayout && t.layout.hasAttribute("dragged") && e.originalEvent.preventDefault(), super._moveHandler(e)) } _setAutoHideWindowSize(e) { const t = this; if (!t._autoHideWindow) return; t._autoHideWindow.$.addClass("no-transition"), t._autoHideWindow.style.maxWidth = t._autoHideWindow.style.maxHeight = ""; const a = t.$.tabsElement._tabs[e], i = (t._autoHideWindow.isInShadowDOM ? t._autoHideWindow.getRootNode().host : t._autoHideWindow).closest("jqx-docking-layout") || t._autoHideWindow.parentElement; let n, o; if (a) { if ("top" === t.tabPosition || "bottom" === t.tabPosition) { t._autoHideWindow.resizeMode = "top" === t.tabPosition ? "bottom" : "top", t._autoHideWindow.style.width = t.$.tabsElement.offsetWidth + "px", n = i.getBoundingClientRect(), o = t.$.tabsElement.getBoundingClientRect(); let e = a._autoHideWindowSize && parseFloat(a._autoHideWindowSize) || ""; JQX.DockingLayout && i instanceof JQX.DockingLayout && (e && (e = Math.min(i.$.itemsContainer.offsetHeight, e) + "px"), t._autoHideWindow.style.maxHeight = i.$.itemsContainer.offsetHeight + "px"), t._autoHideWindow.style.height = e, t._autoHideWindow.style.left = o.left - n.left + "px", t._autoHideWindow && ("top" === t.tabPosition ? t._autoHideWindow.style.top = o.top + -n.top + o.height + "px" : t._autoHideWindow.style.top = o.top - n.top - t._autoHideWindow.offsetHeight + "px") } else { t._autoHideWindow.resizeMode = "left" === t.tabPosition ? "right" : "left", t._autoHideWindow.style.height = t.$.tabsElement.offsetHeight + "px"; let e = a._autoHideWindowSize && parseFloat(a._autoHideWindowSize) || ""; i instanceof JQX.DockingLayout && (e && (e = Math.min(i.$.itemsContainer.offsetWidth, e) + "px"), t._autoHideWindow.style.maxWidth = i.$.itemsContainer.offsetWidth + "px"), t._autoHideWindow.style.width = e, n = i.getBoundingClientRect(), o = t.$.tabsElement.getBoundingClientRect(), t._autoHideWindow.style.top = o.top - n.top + "px", "left" === t.tabPosition ? t._autoHideWindow.style.left = o.left - n.left + t.$.tabsElement.offsetWidth + "px" : t._autoHideWindow.style.left = o.left - n.left - t._autoHideWindow.offsetWidth + "px" } t._autoHideWindow._dragDetails && (t._autoHideWindow._dragDetails.maxWidth = void 0), t._autoHideWindow._setDragDetails("resize"), t._autoHideWindow._dragDetails.started = !1, t._autoHideWindow.$.removeClass("no-transition") } } _handleAutoHideWindow(e) { const t = this; if (t.autoHideWindow) { if (t._autoHideWindow && t._autoHideWindow.parentElement.removeChild(t._autoHideWindow), "string" == typeof t.autoHideWindow) return void (t._autoHideWindow = document.getElementById(t.autoHideWindow)); if (t.autoHideWindow instanceof JQX.Window) return void (t._autoHideWindow = t.autoHideWindow) } if (!e || t._autoHideWindow || 2 === t.$.contentSection.children.length && t.$.contentSection.children[1] instanceof JQX.Window) return; const a = document.createElement("jqx-window"); a.$ = JQX.Utilities.Extend(a), a.disableSnap = a.pinned = !0, a.headerButtons = ["close"], t.$.contentSection.appendChild(a), t._autoHideWindow = a } _moveContent(e, t) { if (!e || !t) return; const a = [].slice.call(e.$.content.childNodes); for (let e = 0; e < a.length; e++)t.appendChild(a[e]) } _tabsChangeHandler(e) { const t = this; if (e.target === t.$.tabsElement && t.autoHide) { if (t._autoHideWindow || t._handleAutoHideWindow(!0), null !== e.detail.oldIndex && t._autoHideWindow.opened && (t.$.tabsElement._tabs[e.detail.oldIndex]._autoHideWindowSize = t._autoHideWindow.style["right" === t.$.tabsElement.tabPosition || "left" === t.$.tabsElement.tabPosition ? "width" : "height"]), !t.autoHide || null === e.detail.index || void 0 === e.detail.index) return t._autoHideWindow.setAttribute("active", ""), void t._autoHideWindow.close(); t._handleAutoHide(e.detail.index) } } _tabsFocusHandler(e) { const t = this; "focus" === e.type ? (t.bringToFront(), t.setAttribute("focus", "")) : t.removeAttribute("focus") } }), JQX("jqx-wait-window", class extends JQX.ProgressWindow { static get properties() { return { headerButtons: { value: [], type: "array" }, disableSnap: { value: !0, readOnly: !0, type: "boolean" }, modal: { value: !0, readOnly: !0, type: "boolean", defaultReflectToAttribute: !0 }, pinned: { value: !0, type: "boolean", readOnly: !0 } } } template() { return '<div role="presentation">\n <div class="jqx-content-container" id="container">\n <div id="headerSection" class="jqx-header-section" role="heading" aria-level="1">\n <div id="header" class="jqx-header">[[label]]</div>\n <div id="buttonsContainer" class="jqx-buttons-container">\n <button id="closeButton" class="jqx-button jqx-element jqx-close-button" aria-label="Close"></button>\n </div>\n </div>\n <div class="jqx-content">\n <content></content>\n <jqx-progress-bar id="progressBar" animation="[[animation]]" indeterminate theme="[[theme]]" right-to-left="[[rightToLeft]]"></jqx-progress-bar>\n </div>\n <div id="footer" class="jqx-footer"></div>\n </div>\n </div>' } _keyDownHandler(e) { const t = this; function a() { t._dragDetails && (t._dragDetails.started = !1), t.$.removeClass("no-transition") } if (delete t._changingFocus, t.disabled || t._dragDetails && t._dragDetails.started) return; const i = t.shadowRoot || t._windowParent.element.getRootNode() ? t._windowParent.element.getRootNode().activeElement : document.activeElement; e.stopPropagation(); const n = "ArrowDown" === e.key || "ArrowRight" === e.key ? 10 : -10; switch (t.$.removeClass("no-transition"), e.key) { case "ArrowUp": case "ArrowDown": if (i !== t) return; if (e.preventDefault(), e.altKey) return "ArrowUp" === e.key ? t.maximize() : t.restore(), void a(); if (t.$.addClass("no-transition"), e.ctrlKey) return t._resize("bottom", n), void a(); t._drag(n, "vertical"); break; case "ArrowLeft": case "ArrowRight": if (i !== t) return; if (e.preventDefault(), t.$.addClass("no-transition"), e.ctrlKey) return t._resize("right", n), void a(); t._drag(n, "horizontal"); break; case "Tab": t.opened && t.modal && (t._changingFocus = !0); break; case "Enter": case " ": { let a; if (t.shadowRoot || t.isInShadowDOM ? (a = e.composedPath()[0], t._buttonPressed = a.getRootNode().host) : (a = e.target.closest && e.target.closest(".jqx-button"), t._buttonPressed = a), !a) return; t._isWindowButton(a), delete t._buttonPressed; break } }a() } });
|
|
206
|
+
|
|
207
|
+
/***/
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
/******/
|
|
211
|
+
});
|
|
212
|
+
/************************************************************************/
|
|
213
|
+
/******/ // The module cache
|
|
214
|
+
/******/ var __webpack_module_cache__ = {};
|
|
215
|
+
/******/
|
|
216
|
+
/******/ // The require function
|
|
217
|
+
/******/ function __webpack_require__(moduleId) {
|
|
218
|
+
/******/ // Check if module is in cache
|
|
219
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
220
|
+
/******/ if (cachedModule !== undefined) {
|
|
221
|
+
/******/ return cachedModule.exports;
|
|
222
|
+
/******/
|
|
223
|
+
}
|
|
224
|
+
/******/ // Create a new module (and put it into the cache)
|
|
225
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
226
|
+
/******/ // no module.id needed
|
|
227
|
+
/******/ // no module.loaded needed
|
|
228
|
+
/******/ exports: {}
|
|
229
|
+
/******/
|
|
230
|
+
};
|
|
231
|
+
/******/
|
|
232
|
+
/******/ // Execute the module function
|
|
233
|
+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
234
|
+
/******/
|
|
235
|
+
/******/ // Return the exports of the module
|
|
236
|
+
/******/ return module.exports;
|
|
237
|
+
/******/
|
|
238
|
+
}
|
|
239
|
+
/******/
|
|
240
|
+
/************************************************************************/
|
|
241
|
+
/******/ /* webpack/runtime/compat get default export */
|
|
242
|
+
/******/ (() => {
|
|
243
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
244
|
+
/******/ __webpack_require__.n = (module) => {
|
|
245
|
+
/******/ var getter = module && module.__esModule ?
|
|
246
|
+
/******/ () => (module['default']) :
|
|
247
|
+
/******/ () => (module);
|
|
248
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
|
249
|
+
/******/ return getter;
|
|
250
|
+
/******/
|
|
251
|
+
};
|
|
252
|
+
/******/
|
|
253
|
+
})();
|
|
254
|
+
/******/
|
|
255
|
+
/******/ /* webpack/runtime/define property getters */
|
|
256
|
+
/******/ (() => {
|
|
257
|
+
/******/ // define getter functions for harmony exports
|
|
258
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
259
|
+
/******/ for (var key in definition) {
|
|
260
|
+
/******/ if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
261
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
262
|
+
/******/
|
|
263
|
+
}
|
|
264
|
+
/******/
|
|
265
|
+
}
|
|
266
|
+
/******/
|
|
267
|
+
};
|
|
268
|
+
/******/
|
|
269
|
+
})();
|
|
270
|
+
/******/
|
|
271
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
272
|
+
/******/ (() => {
|
|
273
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
274
|
+
/******/
|
|
275
|
+
})();
|
|
276
|
+
/******/
|
|
277
|
+
/************************************************************************/
|
|
278
|
+
var __webpack_exports__ = {};
|
|
279
|
+
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
|
|
280
|
+
(() => {
|
|
281
|
+
"use strict";
|
|
282
|
+
/* unused harmony export jqxGanttChart */
|
|
283
|
+
/* harmony import */ var _jqx_element_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6321);
|
|
284
|
+
/* harmony import */ var _jqx_element_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_jqx_element_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
285
|
+
/* harmony import */ var _jqx_button_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2612);
|
|
286
|
+
/* harmony import */ var _jqx_button_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jqx_button_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
287
|
+
/* harmony import */ var _jqx_scrollbar_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9135);
|
|
288
|
+
/* harmony import */ var _jqx_scrollbar_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_jqx_scrollbar_js__WEBPACK_IMPORTED_MODULE_2__);
|
|
289
|
+
/* harmony import */ var _jqx_date_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2052);
|
|
290
|
+
/* harmony import */ var _jqx_date_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_jqx_date_js__WEBPACK_IMPORTED_MODULE_3__);
|
|
291
|
+
/* harmony import */ var _jqx_listbox_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5707);
|
|
292
|
+
/* harmony import */ var _jqx_listbox_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_jqx_listbox_js__WEBPACK_IMPORTED_MODULE_4__);
|
|
293
|
+
/* harmony import */ var _jqx_dropdownlist_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7650);
|
|
294
|
+
/* harmony import */ var _jqx_dropdownlist_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_jqx_dropdownlist_js__WEBPACK_IMPORTED_MODULE_5__);
|
|
295
|
+
/* harmony import */ var _jqx_draw_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(9613);
|
|
296
|
+
/* harmony import */ var _jqx_draw_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_jqx_draw_js__WEBPACK_IMPORTED_MODULE_6__);
|
|
297
|
+
/* harmony import */ var _jqx_numeric_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2754);
|
|
298
|
+
/* harmony import */ var _jqx_numeric_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_jqx_numeric_js__WEBPACK_IMPORTED_MODULE_7__);
|
|
299
|
+
/* harmony import */ var _jqx_math_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(8687);
|
|
300
|
+
/* harmony import */ var _jqx_math_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_jqx_math_js__WEBPACK_IMPORTED_MODULE_8__);
|
|
301
|
+
/* harmony import */ var _jqx_tooltip_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(6693);
|
|
302
|
+
/* harmony import */ var _jqx_tooltip_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_jqx_tooltip_js__WEBPACK_IMPORTED_MODULE_9__);
|
|
303
|
+
/* harmony import */ var _jqx_timepicker_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(1419);
|
|
304
|
+
/* harmony import */ var _jqx_timepicker_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_jqx_timepicker_js__WEBPACK_IMPORTED_MODULE_10__);
|
|
305
|
+
/* harmony import */ var _jqx_calendar_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(5810);
|
|
306
|
+
/* harmony import */ var _jqx_calendar_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_jqx_calendar_js__WEBPACK_IMPORTED_MODULE_11__);
|
|
307
|
+
/* harmony import */ var _jqx_datetimepicker_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(7054);
|
|
308
|
+
/* harmony import */ var _jqx_datetimepicker_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_jqx_datetimepicker_js__WEBPACK_IMPORTED_MODULE_12__);
|
|
309
|
+
/* harmony import */ var _jqx_data_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(6057);
|
|
310
|
+
/* harmony import */ var _jqx_data_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_jqx_data_js__WEBPACK_IMPORTED_MODULE_13__);
|
|
311
|
+
/* harmony import */ var _jqx_input_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(8588);
|
|
312
|
+
/* harmony import */ var _jqx_input_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_jqx_input_js__WEBPACK_IMPORTED_MODULE_14__);
|
|
313
|
+
/* harmony import */ var _jqx_filter_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(6170);
|
|
314
|
+
/* harmony import */ var _jqx_filter_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_jqx_filter_js__WEBPACK_IMPORTED_MODULE_15__);
|
|
315
|
+
/* harmony import */ var _jqx_format_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(2515);
|
|
316
|
+
/* harmony import */ var _jqx_format_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_jqx_format_js__WEBPACK_IMPORTED_MODULE_16__);
|
|
317
|
+
/* harmony import */ var _jqx_gridpanel_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(3176);
|
|
318
|
+
/* harmony import */ var _jqx_gridpanel_js__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_jqx_gridpanel_js__WEBPACK_IMPORTED_MODULE_17__);
|
|
319
|
+
/* harmony import */ var _jqx_pager_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(9362);
|
|
320
|
+
/* harmony import */ var _jqx_pager_js__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_jqx_pager_js__WEBPACK_IMPORTED_MODULE_18__);
|
|
321
|
+
/* harmony import */ var _jqx_table_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(5523);
|
|
322
|
+
/* harmony import */ var _jqx_table_js__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_jqx_table_js__WEBPACK_IMPORTED_MODULE_19__);
|
|
323
|
+
/* harmony import */ var _jqx_export_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(6802);
|
|
324
|
+
/* harmony import */ var _jqx_export_js__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(_jqx_export_js__WEBPACK_IMPORTED_MODULE_20__);
|
|
325
|
+
/* harmony import */ var _jqx_splitter_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(1066);
|
|
326
|
+
/* harmony import */ var _jqx_splitter_js__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_jqx_splitter_js__WEBPACK_IMPORTED_MODULE_21__);
|
|
327
|
+
/* harmony import */ var _jqx_window_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(8466);
|
|
328
|
+
/* harmony import */ var _jqx_window_js__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(_jqx_window_js__WEBPACK_IMPORTED_MODULE_22__);
|
|
329
|
+
/* harmony import */ var _jqx_tabs_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(9532);
|
|
330
|
+
/* harmony import */ var _jqx_tabs_js__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(_jqx_tabs_js__WEBPACK_IMPORTED_MODULE_23__);
|
|
331
|
+
/* harmony import */ var _jqx_ganttchart_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(859);
|
|
332
|
+
/* harmony import */ var _jqx_ganttchart_js__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_jqx_ganttchart_js__WEBPACK_IMPORTED_MODULE_24__);
|
|
333
|
+
|
|
334
|
+
/* JQX UI v17.0.4 (2023-10-23)
|
|
335
|
+
Copyright (c) 2011-2023 jQWidgets.
|
|
336
|
+
License: https://htmlelements.com/license/ */ //
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
class jqxGanttChart extends JQX.Component {
|
|
365
|
+
get name() {
|
|
366
|
+
return 'jqxGanttChart';
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
delete window.jqxDropDownList;
|
|
371
|
+
delete window.jqxGrid;
|
|
372
|
+
delete window.jqxButton;
|
|
373
|
+
delete window.jqxScrollBar;
|
|
374
|
+
delete window.jqxTooltip;
|
|
375
|
+
delete window.jqxListBox;
|
|
376
|
+
delete window.jqxComboBox;
|
|
377
|
+
delete window.jqxWindow;
|
|
378
|
+
})();
|
|
379
|
+
|
|
380
|
+
/******/
|
|
381
|
+
})()
|
|
382
|
+
;
|