Reduce Knockout.js footprint by using ECMAScript 2020

This commit is contained in:
the-djmaze 2022-09-13 23:49:18 +02:00
parent 6cc3745c5f
commit 9b8778f823
15 changed files with 1437 additions and 1482 deletions

View file

@ -1288,8 +1288,8 @@ ko.pureComputed = (evaluatorFunctionOrOptions) => {
evaluatorFunctionOrOptions['pure'] = true; evaluatorFunctionOrOptions['pure'] = true;
return ko.computed(evaluatorFunctionOrOptions); return ko.computed(evaluatorFunctionOrOptions);
}; };
(() => {
var hasDomDataExpandoProperty = '__ko__hasDomDataOptionValue__'; const hasDomDataExpandoProperty = '__ko__hasDomDataOptionValue__';
// Normally, SELECT elements and their OPTIONs can only take value of type 'string' (because the values // Normally, SELECT elements and their OPTIONs can only take value of type 'string' (because the values
// are stored on DOM attributes). ko.selectExtensions provides a way for SELECTs/OPTIONs to have values // are stored on DOM attributes). ko.selectExtensions provides a way for SELECTs/OPTIONs to have values
@ -1349,25 +1349,24 @@ ko.pureComputed = (evaluatorFunctionOrOptions) => {
} }
} }
}; };
})();
ko.expressionRewriting = (() => { ko.expressionRewriting = (() => {
var javaScriptReservedWords = ["true", "false", "null", "undefined"]; var javaScriptReservedWords = ["true", "false", "null", "undefined"],
// Matches something that can be assigned to--either an isolated identifier or something ending with a property accessor // Matches something that can be assigned to--either an isolated identifier or something ending with a property accessor
// This is designed to be simple and avoid false negatives, but could produce false positives (e.g., a+b.c). // This is designed to be simple and avoid false negatives, but could produce false positives (e.g., a+b.c).
// This also will not properly handle nested brackets (e.g., obj1[obj2['prop']]; see #911). // This also will not properly handle nested brackets (e.g., obj1[obj2['prop']]; see #911).
var javaScriptAssignmentTarget = /^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i; javaScriptAssignmentTarget = /^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,
function getWriteableValue(expression) { getWriteableValue = expression => {
if (javaScriptReservedWords.includes(expression)) if (javaScriptReservedWords.includes(expression))
return false; return false;
var match = expression.match(javaScriptAssignmentTarget); var match = expression.match(javaScriptAssignmentTarget);
return match === null ? false : match[1] ? ('Object(' + match[1] + ')' + match[2]) : expression; return match === null ? false : match[1] ? ('Object(' + match[1] + ')' + match[2]) : expression;
} },
// The following regular expressions will be used to split an object-literal string into tokens // The following regular expressions will be used to split an object-literal string into tokens
var specials = ',"\'`{}()/:[\\]', // These characters have special meaning to the parser and must not appear in the middle of a token, except as part of a string. specials = ',"\'`{}()/:[\\]', // These characters have special meaning to the parser and must not appear in the middle of a token, except as part of a string.
// Create the actual regular expression by or-ing the following regex strings. The order is important. // Create the actual regular expression by or-ing the following regex strings. The order is important.
bindingToken = RegExp([ bindingToken = RegExp([
// These match strings, either with double quotes, single quotes, or backticks // These match strings, either with double quotes, single quotes, or backticks
@ -1393,9 +1392,9 @@ ko.expressionRewriting = (() => {
// Match end of previous token to determine whether a slash is a division or regex. // Match end of previous token to determine whether a slash is a division or regex.
divisionLookBehind = /[\])"'A-Za-z0-9_$]+$/, divisionLookBehind = /[\])"'A-Za-z0-9_$]+$/,
keywordRegexLookBehind = {'in':1,'return':1,'typeof':1}; keywordRegexLookBehind = {'in':1,'return':1,'typeof':1},
function parseObjectLiteral(objectLiteralString) { parseObjectLiteral = objectLiteralString => {
// Trim leading and trailing spaces from the string // Trim leading and trailing spaces from the string
var str = ko.utils.stringTrim(objectLiteralString); var str = ko.utils.stringTrim(objectLiteralString);
@ -1458,19 +1457,24 @@ ko.expressionRewriting = (() => {
} }
} }
return result; return result;
} },
// Two-way bindings include a write function that allow the handler to update the value even if it's not an observable. // Two-way bindings include a write function that allow the handler to update the value even if it's not an observable.
var twoWayBindings = new Set; twoWayBindings = new Set,
function preProcessBindings(bindingsStringOrKeyValueArray, bindingOptions) { preProcessBindings = (bindingsStringOrKeyValueArray, bindingOptions) => {
bindingOptions = bindingOptions || {};
function processKeyValue(key, val) { var resultStrings = [],
var writableVal; propertyAccessorResultStrings = [],
function callPreprocessHook(obj) { makeValueAccessors = bindingOptions?.['valueAccessors'],
return (obj && obj['preprocess']) ? (val = obj['preprocess'](val, key, processKeyValue)) : true; bindingParams = bindingOptions?.['bindingParams'],
} keyValueArray = typeof bindingsStringOrKeyValueArray === "string" ?
parseObjectLiteral(bindingsStringOrKeyValueArray) : bindingsStringOrKeyValueArray,
processKeyValue = (key, val) => {
var writableVal,
callPreprocessHook = obj =>
obj?.['preprocess'] ? (val = obj['preprocess'](val, key, processKeyValue)) : true;
if (!bindingParams) { if (!bindingParams) {
if (!callPreprocessHook(ko.bindingHandlers[key])) if (!callPreprocessHook(ko.bindingHandlers[key]))
return; return;
@ -1486,14 +1490,7 @@ ko.expressionRewriting = (() => {
val = 'function(){return ' + val + ' }'; val = 'function(){return ' + val + ' }';
} }
resultStrings.push("'" + key + "':" + val); resultStrings.push("'" + key + "':" + val);
} };
var resultStrings = [],
propertyAccessorResultStrings = [],
makeValueAccessors = bindingOptions['valueAccessors'],
bindingParams = bindingOptions['bindingParams'],
keyValueArray = typeof bindingsStringOrKeyValueArray === "string" ?
parseObjectLiteral(bindingsStringOrKeyValueArray) : bindingsStringOrKeyValueArray;
keyValueArray.forEach(keyValue => keyValueArray.forEach(keyValue =>
processKeyValue(keyValue.key || keyValue['unknown'], keyValue.value) processKeyValue(keyValue.key || keyValue['unknown'], keyValue.value)
@ -1503,7 +1500,7 @@ ko.expressionRewriting = (() => {
processKeyValue('_ko_property_writers', "{" + propertyAccessorResultStrings.join(",") + " }"); processKeyValue('_ko_property_writers', "{" + propertyAccessorResultStrings.join(",") + " }");
return resultStrings.join(","); return resultStrings.join(",");
} };
return { return {
bindingRewriteValidators: [], bindingRewriteValidators: [],
@ -1660,7 +1657,7 @@ ko.expressionRewriting = (() => {
} }
}; };
})(); })();
(() => {
const defaultBindingAttributeName = "data-bind", const defaultBindingAttributeName = "data-bind",
bindingCache = new Map, bindingCache = new Map,
@ -1683,8 +1680,8 @@ ko.expressionRewriting = (() => {
return node.getAttribute(defaultBindingAttributeName) != null; return node.getAttribute(defaultBindingAttributeName) != null;
case 8: // Comment node case 8: // Comment node
return ko.virtualElements.hasBindingValue(node); return ko.virtualElements.hasBindingValue(node);
default: return false;
} }
return false;
} }
getBindingAccessors(node, bindingContext) { getBindingAccessors(node, bindingContext) {
@ -1714,17 +1711,17 @@ ko.expressionRewriting = (() => {
} }
}; };
})();
(() => {
// Hide or don't minify context properties, see https://github.com/knockout/knockout/issues/2294 // Hide or don't minify context properties, see https://github.com/knockout/knockout/issues/2294
var contextSubscribable = Symbol('_subscribable'); const contextSubscribable = Symbol('_subscribable'),
var contextAncestorBindingInfo = Symbol('_ancestorBindingInfo'); contextAncestorBindingInfo = Symbol('_ancestorBindingInfo'),
var contextDataDependency = Symbol('_dataDependency'); contextDataDependency = Symbol('_dataDependency'),
inheritParentVm = {},
boundElementDomDataKey = ko.utils.domData.nextKey();
ko.bindingHandlers = {}; ko.bindingHandlers = {};
var inheritParentVm = {};
// The ko.bindingContext constructor is only called directly to create the root context. For child // The ko.bindingContext constructor is only called directly to create the root context. For child
// contexts, use bindingContext.createChildContext or bindingContext.extend. // contexts, use bindingContext.createChildContext or bindingContext.extend.
ko.bindingContext = class { ko.bindingContext = class {
@ -1850,8 +1847,6 @@ ko.expressionRewriting = (() => {
} }
}; };
var boundElementDomDataKey = ko.utils.domData.nextKey();
function asyncContextDispose(node) { function asyncContextDispose(node) {
var bindingInfo = ko.utils.domData.get(node, boundElementDomDataKey), var bindingInfo = ko.utils.domData.get(node, boundElementDomDataKey),
asyncContext = bindingInfo?.asyncContext; asyncContext = bindingInfo?.asyncContext;
@ -2184,7 +2179,6 @@ ko.expressionRewriting = (() => {
ko.exportSymbol('applyBindings', ko.applyBindings); ko.exportSymbol('applyBindings', ko.applyBindings);
ko.exportSymbol('applyBindingAccessorsToNode', ko.applyBindingAccessorsToNode); ko.exportSymbol('applyBindingAccessorsToNode', ko.applyBindingAccessorsToNode);
ko.exportSymbol('dataFor', ko.dataFor); ko.exportSymbol('dataFor', ko.dataFor);
})();
(() => { (() => {
var loadingSubscribablesCache = Object.create(null), // Tracks component loads that are currently in flight var loadingSubscribablesCache = Object.create(null), // Tracks component loads that are currently in flight
loadedDefinitionsCache = new Map(); // Tracks component loads that have already completed loadedDefinitionsCache = new Map(); // Tracks component loads that have already completed
@ -2454,12 +2448,11 @@ function makeEventHandlerShortcut(eventName) {
ko.bindingHandlers['event'] = { ko.bindingHandlers['event'] = {
'init' : (element, valueAccessor, allBindings, viewModel, bindingContext) => { 'init' : (element, valueAccessor, allBindings, viewModel, bindingContext) => {
var eventsToHandle = valueAccessor() || {}; ko.utils.objectForEach(valueAccessor() || {}, eventName => {
ko.utils.objectForEach(eventsToHandle, eventName => {
if (typeof eventName == "string") { if (typeof eventName == "string") {
element.addEventListener(eventName, (...args) => { element.addEventListener(eventName, (...args) => {
var handlerReturnValue; var handlerReturnValue,
var handlerFunction = valueAccessor()[eventName]; handlerFunction = valueAccessor()[eventName];
if (handlerFunction) { if (handlerFunction) {
try { try {
viewModel = bindingContext['$data']; viewModel = bindingContext['$data'];
@ -2479,8 +2472,8 @@ ko.bindingHandlers['event'] = {
// "foreach: someExpression" is equivalent to "template: { foreach: someExpression }" // "foreach: someExpression" is equivalent to "template: { foreach: someExpression }"
// "foreach: { data: someExpression, afterAdd: myfn }" is equivalent to "template: { foreach: someExpression, afterAdd: myfn }" // "foreach: { data: someExpression, afterAdd: myfn }" is equivalent to "template: { foreach: someExpression, afterAdd: myfn }"
ko.bindingHandlers['foreach'] = { ko.bindingHandlers['foreach'] = {
makeTemplateValueAccessor: valueAccessor => { makeTemplateValueAccessor: valueAccessor =>
return () => { () => {
var modelValue = valueAccessor(), var modelValue = valueAccessor(),
// Unwrap without setting a dependency here // Unwrap without setting a dependency here
unwrappedValue = ko.isObservable(modelValue) ? modelValue.peek() : modelValue; unwrappedValue = ko.isObservable(modelValue) ? modelValue.peek() : modelValue;
@ -2498,7 +2491,6 @@ ko.bindingHandlers['foreach'] = {
'as': unwrappedValue['as'], 'as': unwrappedValue['as'],
'beforeRemove': unwrappedValue['beforeRemove'] 'beforeRemove': unwrappedValue['beforeRemove']
}; };
};
}, },
'init': (element, valueAccessor) => 'init': (element, valueAccessor) =>
ko.bindingHandlers['template']['init'](element, ko.bindingHandlers['foreach'].makeTemplateValueAccessor(valueAccessor)) ko.bindingHandlers['template']['init'](element, ko.bindingHandlers['foreach'].makeTemplateValueAccessor(valueAccessor))
@ -2508,8 +2500,8 @@ ko.bindingHandlers['foreach'] = {
}; };
ko.expressionRewriting.bindingRewriteValidators['foreach'] = false; // Can't rewrite control flow bindings ko.expressionRewriting.bindingRewriteValidators['foreach'] = false; // Can't rewrite control flow bindings
ko.virtualElements.allowedBindings['foreach'] = true; ko.virtualElements.allowedBindings['foreach'] = true;
var hasfocusUpdatingProperty = '__ko_hasfocusUpdating'; const hasfocusUpdatingProperty = '__ko_hasfocusUpdating',
var hasfocusLastValue = '__ko_hasfocusLastValue'; hasfocusLastValue = '__ko_hasfocusLastValue';
ko.bindingHandlers['hasfocus'] = { ko.bindingHandlers['hasfocus'] = {
'init': (element, valueAccessor, allBindings) => { 'init': (element, valueAccessor, allBindings) => {
var handleElementFocusChange = isFocused => { var handleElementFocusChange = isFocused => {
@ -2521,8 +2513,7 @@ ko.bindingHandlers['hasfocus'] = {
// Discussion at https://github.com/SteveSanderson/knockout/pull/352 // Discussion at https://github.com/SteveSanderson/knockout/pull/352
element[hasfocusUpdatingProperty] = true; element[hasfocusUpdatingProperty] = true;
isFocused = (element.ownerDocument.activeElement === element); isFocused = (element.ownerDocument.activeElement === element);
var modelValue = valueAccessor(); ko.expressionRewriting.writeValueToProperty(valueAccessor(), allBindings, 'hasfocus', isFocused, true);
ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'hasfocus', isFocused, true);
//cache the latest value, so we can avoid unnecessarily calling focus/blur in the update function //cache the latest value, so we can avoid unnecessarily calling focus/blur in the update function
element[hasfocusLastValue] = isFocused; element[hasfocusLastValue] = isFocused;
@ -2531,13 +2522,10 @@ ko.bindingHandlers['hasfocus'] = {
var handleElementFocusIn = handleElementFocusChange.bind(null, true); var handleElementFocusIn = handleElementFocusChange.bind(null, true);
var handleElementFocusOut = handleElementFocusChange.bind(null, false); var handleElementFocusOut = handleElementFocusChange.bind(null, false);
var registerEventHandler = (event, handler) => element.addEventListener("focus", handleElementFocusIn);
element.addEventListener(event, handler); element.addEventListener("focusin", handleElementFocusIn);
element.addEventListener("blur", handleElementFocusOut);
registerEventHandler("focus", handleElementFocusIn); element.addEventListener("focusout", handleElementFocusOut);
registerEventHandler("focusin", handleElementFocusIn);
registerEventHandler("blur", handleElementFocusOut);
registerEventHandler("focusout", handleElementFocusOut);
// Assume element is not focused (prevents "blur" being called initially) // Assume element is not focused (prevents "blur" being called initially)
element[hasfocusLastValue] = false; element[hasfocusLastValue] = false;
@ -2552,10 +2540,10 @@ ko.bindingHandlers['hasfocus'] = {
}; };
ko.expressionRewriting.twoWayBindings.add('hasfocus'); ko.expressionRewriting.twoWayBindings.add('hasfocus');
ko.bindingHandlers['html'] = { ko.bindingHandlers['html'] = {
'init': () => { 'init': () => (
// Prevent binding on the dynamically-injected HTML (as developers are unlikely to expect that, and it has security implications) // Prevent binding on the dynamically-injected HTML (as developers are unlikely to expect that, and it has security implications)
return { 'controlsDescendantBindings': true }; { 'controlsDescendantBindings': true }
}, ),
'update': (element, valueAccessor) => { 'update': (element, valueAccessor) => {
// setHtml will unwrap the value if needed // setHtml will unwrap the value if needed
ko.utils.emptyDomNode(element); ko.utils.emptyDomNode(element);
@ -2597,13 +2585,12 @@ function makeWithIfBinding(bindingKey, isWith, isNot) {
if (shouldDisplay) { if (shouldDisplay) {
contextOptions['dataDependency'] = ko.dependencyDetection.computed(); contextOptions['dataDependency'] = ko.dependencyDetection.computed();
if (isWith) { childContext = isWith
childContext = bindingContext['createChildContext'](typeof value == "function" ? value : valueAccessor, contextOptions); ? bindingContext['createChildContext'](typeof value == "function" ? value : valueAccessor, contextOptions)
} else if (ko.dependencyDetection.getDependenciesCount()) { : (ko.dependencyDetection.getDependenciesCount()
childContext = bindingContext['extend'](null, contextOptions); ? bindingContext['extend'](null, contextOptions)
} else { : bindingContext
childContext = bindingContext; );
}
} }
// Save a copy of the inner nodes on the initial update, but only if we have dependencies. // Save a copy of the inner nodes on the initial update, but only if we have dependencies.
@ -2612,9 +2599,7 @@ function makeWithIfBinding(bindingKey, isWith, isNot) {
} }
if (shouldDisplay) { if (shouldDisplay) {
if (!isInitial) { isInitial || ko.virtualElements.setDomNodeChildren(element, ko.utils.cloneNodes(savedNodes));
ko.virtualElements.setDomNodeChildren(element, ko.utils.cloneNodes(savedNodes));
}
ko.applyBindingsToDescendants(childContext, element); ko.applyBindingsToDescendants(childContext, element);
} else { } else {
@ -2793,8 +2778,7 @@ ko.bindingHandlers['options'] = {
ko.bindingHandlers['options'].optionValueDomDataKey = ko.utils.domData.nextKey(); ko.bindingHandlers['options'].optionValueDomDataKey = ko.utils.domData.nextKey();
ko.bindingHandlers['style'] = { ko.bindingHandlers['style'] = {
'update': (element, valueAccessor) => { 'update': (element, valueAccessor) => {
var value = ko.utils.unwrapObservable(valueAccessor() || {}); ko.utils.objectForEach(ko.utils.unwrapObservable(valueAccessor() || {}), (styleName, styleValue) => {
ko.utils.objectForEach(value, (styleName, styleValue) => {
styleValue = ko.utils.unwrapObservable(styleValue); styleValue = ko.utils.unwrapObservable(styleValue);
if (styleValue == null || styleValue === false) { if (styleValue == null || styleValue === false) {
@ -2835,11 +2819,11 @@ ko.bindingHandlers['submit'] = {
} }
}; };
ko.bindingHandlers['text'] = { ko.bindingHandlers['text'] = {
'init': () => { 'init': () => (
// Prevent binding on the dynamically-injected text node (as developers are unlikely to expect that, and it has security implications). // Prevent binding on the dynamically-injected text node (as developers are unlikely to expect that, and it has security implications).
// It should also make things faster, as we no longer have to consider whether the text node might be bindable. // It should also make things faster, as we no longer have to consider whether the text node might be bindable.
return { 'controlsDescendantBindings': true }; { 'controlsDescendantBindings': true }
}, ),
'update': (element, valueAccessor) => { 'update': (element, valueAccessor) => {
if (8 === element.nodeType) { if (8 === element.nodeType) {
element.text || element.after(element.text = document.createTextNode('')); element.text || element.after(element.text = document.createTextNode(''));
@ -2920,11 +2904,19 @@ ko.bindingHandlers['value'] = {
return; return;
} }
var eventsToCatch = new Set; var eventsToCatch = new Set,
var requestedEventsToCatch = allBindings.get("valueUpdate"); requestedEventsToCatch = allBindings.get("valueUpdate"),
var elementValueBeforeEvent = null; elementValueBeforeEvent = null,
var registerEventHandler = (event, handler) => updateFromModel,
element.addEventListener(event, handler); registerEventHandler = (event, handler) =>
element.addEventListener(event, handler),
valueUpdateHandler = () => {
elementValueBeforeEvent = null;
var modelValue = valueAccessor();
var elementValue = ko.selectExtensions.readValue(element);
ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'value', elementValue);
};
if (requestedEventsToCatch) { if (requestedEventsToCatch) {
// Allow both individual event names, and arrays of event names // Allow both individual event names, and arrays of event names
@ -2936,13 +2928,6 @@ ko.bindingHandlers['value'] = {
eventsToCatch.delete("change"); // We'll subscribe to "change" events later eventsToCatch.delete("change"); // We'll subscribe to "change" events later
} }
var valueUpdateHandler = () => {
elementValueBeforeEvent = null;
var modelValue = valueAccessor();
var elementValue = ko.selectExtensions.readValue(element);
ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'value', elementValue);
}
eventsToCatch.forEach(eventName => { eventsToCatch.forEach(eventName => {
// The syntax "after<eventname>" means "run the handler asynchronously after the event" // The syntax "after<eventname>" means "run the handler asynchronously after the event"
// This is useful, for example, to catch "keydown" events after the browser has updated the control // This is useful, for example, to catch "keydown" events after the browser has updated the control
@ -2965,8 +2950,6 @@ ko.bindingHandlers['value'] = {
registerEventHandler(eventName, handler); registerEventHandler(eventName, handler);
}); });
var updateFromModel;
if (isInputElement && element.type == "file") { if (isInputElement && element.type == "file") {
// For file input elements, can only write the empty string // For file input elements, can only write the empty string
updateFromModel = () => { updateFromModel = () => {
@ -3515,13 +3498,9 @@ ko.utils.compareArrays = (() => {
var nodesToReplaceArray = mappedNodes.nodeType ? [mappedNodes] : mappedNodes; var nodesToReplaceArray = mappedNodes.nodeType ? [mappedNodes] : mappedNodes;
if (nodesToReplaceArray.length > 0) { if (nodesToReplaceArray.length > 0) {
var insertionPoint = nodesToReplaceArray[0], var insertionPoint = nodesToReplaceArray[0],
parent = insertionPoint.parentNode, parent = insertionPoint.parentNode;
i, j; newMappedNodes.forEach(node => parent.insertBefore(node, insertionPoint));
for (i = 0, j = newMappedNodes.length; i < j; i++) nodesToReplaceArray.forEach(node => ko.removeNode(node));
parent.insertBefore(newMappedNodes[i], insertionPoint);
for (i = 0, j = nodesToReplaceArray.length; i < j; i++) {
ko.removeNode(nodesToReplaceArray[i]);
}
} }
if (callbackAfterAddingNodes) if (callbackAfterAddingNodes)
ko.dependencyDetection.ignore(callbackAfterAddingNodes, null, [valueToMap, newMappedNodes, index]); ko.dependencyDetection.ignore(callbackAfterAddingNodes, null, [valueToMap, newMappedNodes, index]);
@ -3573,9 +3552,7 @@ ko.utils.compareArrays = (() => {
callCallback = (callback, items) => { callCallback = (callback, items) => {
if (callback) { if (callback) {
for (var i = 0, n = items.length; i < n; i++) { items.forEach(item => item?.mappedNodes.forEach(node => callback(node, i, item.arrayEntry)));
items[i] && items[i].mappedNodes.forEach(node => callback(node, i, items[i].arrayEntry));
}
} }
}; };
@ -3674,7 +3651,8 @@ ko.utils.compareArrays = (() => {
while ((i = itemsToMoveFirstIndexes.shift()) != undefined) { while ((i = itemsToMoveFirstIndexes.shift()) != undefined) {
mapData = newMappingResult[i]; mapData = newMappingResult[i];
for (lastNode = undefined; i; ) { for (lastNode = undefined; i; ) {
if ((mappedNodes = newMappingResult[--i].mappedNodes) && mappedNodes.length) { mappedNodes = newMappingResult[--i].mappedNodes;
if (mappedNodes?.length) {
lastNode = mappedNodes[mappedNodes.length - 1]; lastNode = mappedNodes[mappedNodes.length - 1];
break; break;
} }

View file

@ -4,70 +4,70 @@
* License: MIT (http://www.opensource.org/licenses/mit-license.php) * License: MIT (http://www.opensource.org/licenses/mit-license.php)
*/ */
(T=>{function O(a,c){return null===a||U[typeof a]?a===c:!1}function V(a,c){var d;return()=>{d||(d=setTimeout(()=>{d=0;a()},c))}}function W(a,c){var d;return()=>{clearTimeout(d);d=setTimeout(a,c)}}function X(a,c){c?.A?.()}function Y(a,c){var d=this.Zb,f=d[z];f.$||(this.Wa&&this.ya[c]?(d.vb(c,a,this.ya[c]),this.ya[c]=null,--this.Wa):f.B[c]||d.vb(c,a,f.C?{X:a}:d.Rb(a)),a.ka&&a.Vb())}var N=T.document,P={},b="undefined"!==typeof P?P:{};b.v=(a,c)=>{a=a.split(".");for(var d=b,f=0,k=a.length-1;f<k;f++)d= (V=>{function P(a,b){return null===a||da[typeof a]?a===b:!1}function ea(a,b){var d;return()=>{d||(d=setTimeout(()=>{d=0;a()},b))}}function fa(a,b){var d;return()=>{clearTimeout(d);d=setTimeout(a,b)}}function ha(a,b){b?.A?.()}function ia(a,b){var d=this.Zb,f=d[y];f.$||(this.Wa&&this.ya[b]?(d.vb(b,a,this.ya[b]),this.ya[b]=null,--this.Wa):f.B[b]||d.vb(b,a,f.C?{X:a}:d.Rb(a)),a.ka&&a.Vb())}function W(a){a=c.g.i.get(a,K);var b=a?.H;b&&(a.H=null,b.Mb())}function X(a,b){for(var d,f=c.m.firstChild(b);d=f;)f=
d[a[f]];d[a[k]]=c};b.ha=(a,c,d)=>{a[c]=d};b.v("version","3.5.1-sm");b.g={extend:(a,c)=>c?Object.assign(a,c):a,O:(a,c)=>a&&Object.entries(a).forEach(d=>c(d[0],d[1])),$a:a=>[...a.childNodes].forEach(c=>b.removeNode(c)),Lb:a=>{a=[...a];var c=(a[0]?.ownerDocument||N).createElement("div");a.forEach(d=>c.append(b.fa(d)));return c},xa:(a,c)=>Array.prototype.map.call(a,c?d=>b.fa(d.cloneNode(!0)):d=>d.cloneNode(!0)),ta:(a,c)=>{b.g.$a(a);c&&a.append(...c)},Aa:(a,c)=>{if(a.length){for(c=8===c.nodeType&&c.parentNode|| c.m.nextSibling(d),Y(a,d);c.l.notify(b,c.l.G)}function Y(a,b){var d=a;if(1===b.nodeType||c.Ab.mc(b))d=Z(b,null,a).bindingContextForDescendants;d&&!b.matches?.("SCRIPT,TEXTAREA,TEMPLATE")&&X(d,b)}function ja(a){var b=[],d={},f=[];c.g.O(a,function e(k){if(!d[k]){var g=c.h[k];g&&(g.after&&(f.push(k),g.after.forEach(h=>{if(a[h]){if(f.includes(h))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+f.join(", "));e(h)}}),f.length--),b.push({key:k,Ib:g}));d[k]=!0}});
c;a.length&&a[0].parentNode!==c;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==c;)--a.length;if(1<a.length){c=a[0];var d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),c=c.nextSibling;a.push(d)}}return a},Qb:a=>null==a?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,""),Za:a=>a.ownerDocument.documentElement.contains(1!==a.nodeType?a.parentNode:a),Sb:(a,c)=>{if(!a?.nodeType)throw Error("element must be a DOM node when calling triggerEvent");a.dispatchEvent(new Event(c))}, return b}function Z(a,b,d){var f=c.g.i.bb(a,K,{}),l=f.Wb;if(!b){if(l)throw Error("You cannot apply bindings multiple times to the same element.");f.Wb=!0}l||(f.context=d);f.fb||(f.fb={});if(b&&"function"!==typeof b)var k=b;else{var e=c.s(()=>{if(k=b?b(d,a):c.Ab.bc(a,d))d[L]?.(),d[aa]?.();return k},{o:a});k&&e.isActive()||(e=null)}var g=d,h;if(k){var n=e?m=>()=>e()[m]():m=>k[m],p={get:m=>k[m]&&n(m)(),has:m=>m in k};c.l.G in k&&c.l.subscribe(a,c.l.G,()=>{var m=k[c.l.G]();if(m){var r=c.m.childNodes(a);
j:a=>b.T(a)?a():a,jb:(a,c)=>a.textContent=b.g.j(c)||""};b.v("utils",b.g);b.v("unwrap",b.g.j);(()=>{let a=0,c="__ko__"+Date.now(),d=new WeakMap;b.g.i={get:(f,k)=>(d.get(f)||{})[k],set:(f,k,n)=>{d.has(f)?d.get(f)[k]=n:d.set(f,{[k]:n});return n},bb:function(f,k,n){return this.get(f,k)||this.set(f,k,n)},clear:f=>d.delete(f),Z:()=>a++ +c}})();b.g.K=(()=>{var a=b.g.i.Z(),c={1:1,8:1,9:1},d={1:1,9:1};const f=(e,g)=>{var h=b.g.i.get(e,a);g&&!h&&(h=new Set,b.g.i.set(e,a,h));return h},k=e=>{var g=f(e);g&&(new Set(g)).forEach(h=> r.length&&m(r,c.Eb(r[0]))}});c.l.ga in k&&(g=c.l.kb(a,d),c.l.subscribe(a,c.l.ga,()=>{var m=k[c.l.ga]();m&&c.m.firstChild(a)&&m(a)}));ja(k).forEach(m=>{var r=m.Ib.init,q=m.Ib.update,t=m.key;if(8===a.nodeType&&!c.m.ca[t])throw Error("The binding '"+t+"' cannot be used with virtual elements");try{"function"==typeof r&&c.u.S(()=>{var u=r(a,n(t),p,g.$data,g);if(u&&u.controlsDescendantBindings){if(void 0!==h)throw Error("Multiple bindings ("+h+" and "+t+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");
h(e));b.g.i.clear(e);d[e.nodeType]&&n(e.childNodes,!0)},n=(e,g)=>{for(var h=[],t,r=0;r<e.length;r++)if(!g||8===e[r].nodeType)if(k(h[h.length]=t=e[r]),e[r]!==t)for(;r--&&!h.includes(e[r]););};return{na:(e,g)=>{if("function"!=typeof g)throw Error("Callback must be a function");f(e,1).add(g)},ib:(e,g)=>{var h=f(e);h&&(h.delete(g),h.size||b.g.i.set(e,a,null))},fa:e=>{b.u.S(()=>{c[e.nodeType]&&(k(e),d[e.nodeType]&&n(e.getElementsByTagName("*")))});return e},removeNode:e=>{b.fa(e);e.parentNode&&e.parentNode.removeChild(e)}}})(); h=t}}),"function"==typeof q&&c.s(()=>q(a,n(t),p,g.$data,g),{o:a})}catch(u){throw u.message='Unable to process binding "'+t+": "+k[t]+'"\nMessage: '+u.message,u;}})}f=void 0===h;return{shouldBindDescendants:f,bindingContextForDescendants:f&&g}}function Q(a,b){return a&&a instanceof c.ea?a:new c.ea(a,void 0,void 0,b)}var M=V.document,R={},c="undefined"!==typeof R?R:{};c.v=(a,b)=>{a=a.split(".");for(var d=c,f=0,l=a.length-1;f<l;f++)d=d[a[f]];d[a[l]]=b};c.ha=(a,b,d)=>{a[b]=d};c.v("version","3.5.1-sm");
b.fa=b.g.K.fa;b.removeNode=b.g.K.removeNode;b.v("utils.domNodeDisposal",b.g.K);b.v("utils.domNodeDisposal.addDisposeCallback",b.g.K.na);b.ab={debounce:(a,c)=>a.Ia(d=>W(d,c)),rateLimit:(a,c)=>{if("number"==typeof c)var d=c;else{d=c.timeout;var f=c.method}var k="function"==typeof f?f:V;a.Ia(n=>k(n,d,c))},notify:(a,c)=>{a.qa="always"==c?null:O}};var U={undefined:1,"boolean":1,number:1,string:1};b.v("extenders",b.ab);class Z{constructor(a,c,d){this.X=a;this.pb=c;this.Da=d;this.Oa=!1;this.L=this.ia=null; c.g={extend:(a,b)=>b?Object.assign(a,b):a,O:(a,b)=>a&&Object.entries(a).forEach(d=>b(d[0],d[1])),$a:a=>[...a.childNodes].forEach(b=>c.removeNode(b)),Lb:a=>{a=[...a];var b=(a[0]?.ownerDocument||M).createElement("div");a.forEach(d=>b.append(c.fa(d)));return b},xa:(a,b)=>Array.prototype.map.call(a,b?d=>c.fa(d.cloneNode(!0)):d=>d.cloneNode(!0)),ta:(a,b)=>{c.g.$a(a);b&&a.append(...b)},Aa:(a,b)=>{if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&
b.ha(this,"dispose",this.A)}A(){this.Oa||(this.L&&b.g.K.ib(this.ia,this.L),this.Oa=!0,this.Da(),this.X=this.pb=this.Da=this.ia=this.L=null)}o(a){this.ia=a;b.g.K.na(a,this.L=this.A.bind(this))}}b.V=function(){Object.setPrototypeOf(this,H);H.Fa(this)};var H={Fa:a=>{a.W=new Map;a.W.set("change",new Set);a.ub=1},subscribe:function(a,c,d){var f=this;d=d||"change";var k=new Z(f,c?a.bind(c):a,()=>{f.W.get(d).delete(k);f.Pa?.(d)});f.Ra?.(d);f.W.has(d)||f.W.set(d,new Set);f.W.get(d).add(k);return k},D:function(a, a[a.length-1].parentNode!==b;)--a.length;if(1<a.length){b=a[0];var d=a[a.length-1];for(a.length=0;b!==d;)a.push(b),b=b.nextSibling;a.push(d)}}return a},Qb:a=>null==a?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,""),Za:a=>a.ownerDocument.documentElement.contains(1!==a.nodeType?a.parentNode:a),Sb:(a,b)=>{if(!a?.nodeType)throw Error("element must be a DOM node when calling triggerEvent");a.dispatchEvent(new Event(b))},j:a=>c.T(a)?a():a,jb:(a,b)=>a.textContent=c.g.j(b)||""};c.v("utils",
c){c=c||"change";"change"===c&&this.La();if(this.ra(c)){c="change"===c&&this.Tb||new Set(this.W.get(c));try{b.u.zb(),c.forEach(d=>{d.Oa||d.pb(a)})}finally{b.u.end()}}},Ca:function(){return this.ub},ec:function(a){return this.Ca()!==a},La:function(){++this.ub},Ia:function(a){var c=this,d=b.T(c),f,k,n,e,g;c.va||(c.va=c.D,c.D=(t,r)=>{r&&"change"!==r?"beforeChange"===r?c.rb(t):c.va(t,r):c.sb(t)});var h=a(()=>{c.ka=!1;d&&e===c&&(e=c.qb?c.qb():c());var t=k||g&&c.Ha(n,e);g=k=f=!1;t&&c.va(n=e)});c.sb=(t, c.g);c.v("unwrap",c.g.j);(()=>{let a=0,b="__ko__"+Date.now(),d=new WeakMap;c.g.i={get:(f,l)=>(d.get(f)||{})[l],set:(f,l,k)=>{d.has(f)?d.get(f)[l]=k:d.set(f,{[l]:k});return k},bb:function(f,l,k){return this.get(f,l)||this.set(f,l,k)},clear:f=>d.delete(f),Z:()=>a++ +b}})();c.g.K=(()=>{var a=c.g.i.Z(),b={1:1,8:1,9:1},d={1:1,9:1};const f=(e,g)=>{var h=c.g.i.get(e,a);g&&!h&&(h=new Set,c.g.i.set(e,a,h));return h},l=e=>{var g=f(e);g&&(new Set(g)).forEach(h=>h(e));c.g.i.clear(e);d[e.nodeType]&&k(e.childNodes,
r)=>{r&&c.ka||(g=!r);c.Tb=new Set(c.W.get("change"));c.ka=f=!0;e=t;h()};c.rb=t=>{f||(n=t,c.va(t,"beforeChange"))};c.tb=()=>{g=!0};c.Vb=()=>{c.Ha(n,c.P(!0))&&(k=!0)}},ra:function(a){return(this.W.get(a)||[]).size},Ha:function(a,c){return!this.qa||!this.qa(a,c)},toString:()=>"[object Object]",extend:function(a){var c=this;a&&b.g.O(a,(d,f)=>{d=b.ab[d];"function"==typeof d&&(c=d(c,f)||c)});return c}};b.ha(H,"init",H.Fa);b.ha(H,"subscribe",H.subscribe);b.ha(H,"extend",H.extend);Object.setPrototypeOf(H, !0)},k=(e,g)=>{for(var h=[],n,p=0;p<e.length;p++)if(!g||8===e[p].nodeType)if(l(h[h.length]=n=e[p]),e[p]!==n)for(;p--&&!h.includes(e[p]););};return{na:(e,g)=>{if("function"!=typeof g)throw Error("Callback must be a function");f(e,1).add(g)},ib:(e,g)=>{var h=f(e);h&&(h.delete(g),h.size||c.g.i.set(e,a,null))},fa:e=>{c.u.S(()=>{b[e.nodeType]&&(l(e),d[e.nodeType]&&k(e.getElementsByTagName("*")))});return e},removeNode:e=>{c.fa(e);e.parentNode&&e.parentNode.removeChild(e)}}})();c.fa=c.g.K.fa;c.removeNode=
Function.prototype);b.V.fn=H;b.jc=a=>"function"==typeof a?.subscribe&&"function"==typeof a.D;(()=>{var a=[],c,d=0;b.u={zb:f=>{a.push(c);c=f},end:()=>c=a.pop(),Ob:f=>{if(c){if(!b.jc(f))throw Error("Only subscribable things can act as dependencies");c.Xb.call(c.Yb,f,f.Ub||(f.Ub=++d))}},S:(f,k,n)=>{try{return a.push(c),c=void 0,f.apply(k,n||[])}finally{c=a.pop()}},Ba:()=>c?.s.Ba(),eb:()=>c?.eb,s:()=>c?.s}})();const G=Symbol("_latestValue");b.ba=a=>{function c(){if(0<arguments.length)return c.Ha(c[G], c.g.K.removeNode;c.v("utils.domNodeDisposal",c.g.K);c.v("utils.domNodeDisposal.addDisposeCallback",c.g.K.na);c.ab={debounce:(a,b)=>a.Ia(d=>fa(d,b)),rateLimit:(a,b)=>{if("number"==typeof b)var d=b;else{d=b.timeout;var f=b.method}var l="function"==typeof f?f:ea;a.Ia(k=>l(k,d,b))},notify:(a,b)=>{a.qa="always"==b?null:P}};var da={undefined:1,"boolean":1,number:1,string:1};c.v("extenders",c.ab);class ka{constructor(a,b,d){this.X=a;this.pb=b;this.Da=d;this.Oa=!1;this.L=this.ia=null;c.ha(this,"dispose",
arguments[0])&&(c.nb(),c[G]=arguments[0],c.Ma()),this;b.u.Ob(c);return c[G]}c[G]=a;Object.defineProperty(c,"length",{get:()=>null==c[G]?void 0:c[G].length});b.V.fn.Fa(c);Object.setPrototypeOf(c,J);return c};var J={toJSON:function(){let a=this[G];return a?.toJSON?.()||a},qa:O,P:function(){return this[G]},Ma:function(){this.D(this[G],"spectate");this.D(this[G])},nb:function(){this.D(this[G],"beforeChange")}};Object.setPrototypeOf(J,b.V.fn);var K=b.ba.pc="__ko_proto__";J[K]=b.ba;b.T=a=>{if((a="function"== this.A)}A(){this.Oa||(this.L&&c.g.K.ib(this.ia,this.L),this.Oa=!0,this.Da(),this.X=this.pb=this.Da=this.ia=this.L=null)}o(a){this.ia=a;c.g.K.na(a,this.L=this.A.bind(this))}}c.V=function(){Object.setPrototypeOf(this,D);D.Fa(this)};var D={Fa:a=>{a.W=new Map;a.W.set("change",new Set);a.ub=1},subscribe:function(a,b,d){var f=this;d=d||"change";var l=new ka(f,b?a.bind(b):a,()=>{f.W.get(d).delete(l);f.Pa?.(d)});f.Ra?.(d);f.W.has(d)||f.W.set(d,new Set);f.W.get(d).add(l);return l},D:function(a,b){b=b||"change";
typeof a&&a[K])&&a!==J[K]&&a!==b.s.fn[K])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!a};b.kc=a=>"function"==typeof a&&(a[K]===J[K]||a[K]===b.s.fn[K]&&a.fc);b.v("observable",b.ba);b.v("isObservable",b.T);b.v("observable.fn",J);b.ha(J,"valueHasMutated",J.Ma);b.ja=a=>{a=a||[];if("object"!=typeof a||!("length"in a))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");a=b.ba(a); "change"===b&&this.La();if(this.ra(b)){b="change"===b&&this.Tb||new Set(this.W.get(b));try{c.u.zb(),b.forEach(d=>{d.Oa||d.pb(a)})}finally{c.u.end()}}},Ca:function(){return this.ub},ec:function(a){return this.Ca()!==a},La:function(){++this.ub},Ia:function(a){var b=this,d=c.T(b),f,l,k,e,g;b.va||(b.va=b.D,b.D=(n,p)=>{p&&"change"!==p?"beforeChange"===p?b.rb(n):b.va(n,p):b.sb(n)});var h=a(()=>{b.ka=!1;d&&e===b&&(e=b.qb?b.qb():b());var n=l||g&&b.Ha(k,e);g=l=f=!1;n&&b.va(k=e)});b.sb=(n,p)=>{p&&b.ka||(g=
Object.setPrototypeOf(a,b.ja.fn);return a.extend({trackArrayChanges:!0})};b.ja.fn={remove:function(a){for(var c=this.P(),d=!1,f="function"!=typeof a||b.T(a)?e=>e===a:a,k=c.length;k--;){var n=c[k];if(f(n)){if(c[k]!==n)throw Error("Array modified during remove; cannot remove item");d||this.nb();d=!0;c.splice(k,1)}}d&&this.Ma()}};Object.setPrototypeOf(b.ja.fn,b.ba.fn);Object.getOwnPropertyNames(Array.prototype).forEach(a=>{"function"===typeof Array.prototype[a]&&"constructor"!=a&&("copyWithin fill pop push reverse shift sort splice unshift".split(" ").includes(a)? !p);b.Tb=new Set(b.W.get("change"));b.ka=f=!0;e=n;h()};b.rb=n=>{f||(k=n,b.va(n,"beforeChange"))};b.tb=()=>{g=!0};b.Vb=()=>{b.Ha(k,b.P(!0))&&(l=!0)}},ra:function(a){return(this.W.get(a)||[]).size},Ha:function(a,b){return!this.qa||!this.qa(a,b)},toString:()=>"[object Object]",extend:function(a){var b=this;a&&c.g.O(a,(d,f)=>{d=c.ab[d];"function"==typeof d&&(b=d(b,f)||b)});return b}};c.ha(D,"init",D.Fa);c.ha(D,"subscribe",D.subscribe);c.ha(D,"extend",D.extend);Object.setPrototypeOf(D,Function.prototype);
b.ja.fn[a]=function(...c){var d=this.P();this.nb();this.Bb(d,a,c);c=d[a](...c);this.Ma();return c===d?this:c}:b.ja.fn[a]=function(...c){return this()[a](...c)})});b.Jb=a=>b.T(a)&&"function"==typeof a.remove&&"function"==typeof a.push;b.v("observableArray",b.ja);b.v("isObservableArray",b.Jb);b.ab.trackArrayChanges=(a,c)=>{function d(){function p(){if(g){var m=[].concat(a.P()||[]);if(a.ra("arrayChange")){if(!k||1<g)k=b.g.Cb(h,m,a.Ta);var l=k}h=m;k=null;g=0;l?.length&&a.D(l,"arrayChange")}}f?p():(f= c.V.fn=D;c.jc=a=>"function"==typeof a?.subscribe&&"function"==typeof a.D;(()=>{var a=[],b,d=0;c.u={zb:f=>{a.push(b);b=f},end:()=>b=a.pop(),Ob:f=>{if(b){if(!c.jc(f))throw Error("Only subscribable things can act as dependencies");b.Xb.call(b.Yb,f,f.Ub||(f.Ub=++d))}},S:(f,l,k)=>{try{return a.push(b),b=void 0,f.apply(l,k||[])}finally{b=a.pop()}},Ba:()=>b?.s.Ba(),eb:()=>b?.eb,s:()=>b?.s}})();const B=Symbol("_latestValue");c.ba=a=>{function b(){if(0<arguments.length)return b.Ha(b[B],arguments[0])&&(b.nb(),
!0,e=a.subscribe(()=>++g,null,"spectate"),h=[].concat(a.P()||[]),k=null,n=a.subscribe(p))}a.Ta={};"object"==typeof c&&b.g.extend(a.Ta,c);a.Ta.sparse=!0;if(!a.Bb){var f=!1,k=null,n,e,g=0,h,t=a.Ra,r=a.Pa;a.Ra=p=>{t?.call(a,p);"arrayChange"===p&&d()};a.Pa=p=>{r?.call(a,p);"arrayChange"!==p||a.ra("arrayChange")||(n?.A(),e?.A(),e=n=null,f=!1,h=void 0)};a.Bb=(p,m,l)=>{function q(A,w,C){return v[v.length]={status:A,value:w,index:C}}if(f&&!g){var v=[],x=p.length,u=l.length,y=0;switch(m){case "push":y=x;case "unshift":for(p= b[B]=arguments[0],b.Ma()),this;c.u.Ob(b);return b[B]}b[B]=a;Object.defineProperty(b,"length",{get:()=>null==b[B]?void 0:b[B].length});c.V.fn.Fa(b);Object.setPrototypeOf(b,F);return b};var F={toJSON:function(){let a=this[B];return a?.toJSON?.()||a},qa:P,P:function(){return this[B]},Ma:function(){this.D(this[B],"spectate");this.D(this[B])},nb:function(){this.D(this[B],"beforeChange")}};Object.setPrototypeOf(F,c.V.fn);var G=c.ba.pc="__ko_proto__";F[G]=c.ba;c.T=a=>{if((a="function"==typeof a&&a[G])&&
0;p<u;p++)q("added",l[p],y+p);break;case "pop":y=x-1;case "shift":x&&q("deleted",p[y],y);break;case "splice":y=Math.min(Math.max(0,0>l[0]?x+l[0]:l[0]),x);x=1===u?x:Math.min(y+(l[1]||0),x);u=y+u-2;m=Math.max(x,u);for(var B=[],D=[],F=2;y<m;++y,++F)y<x&&D.push(q("deleted",p[y],y)),y<u&&B.push(q("added",l[F],y));b.g.Hb(D,B);break;default:return}k=v}}}};var z=Symbol("_state");b.s=(a,c)=>{function d(){if(0<arguments.length){if("function"!==typeof f)throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters."); a!==F[G]&&a!==c.s.fn[G])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!a};c.kc=a=>"function"==typeof a&&(a[G]===F[G]||a[G]===c.s.fn[G]&&a.fc);c.v("observable",c.ba);c.v("isObservable",c.T);c.v("observable.fn",F);c.ha(F,"valueHasMutated",F.Ma);c.ja=a=>{a=a||[];if("object"!=typeof a||!("length"in a))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");a=c.ba(a);Object.setPrototypeOf(a,
f(...arguments);return this}k.$||b.u.Ob(d);(k.Y||k.C&&d.sa())&&d.U();return k.M}"object"===typeof a?c=a:(c=c||{},a&&(c.read=a));if("function"!=typeof c.read)throw Error("Pass a function that returns the value of the ko.computed");var f=c.write,k={M:void 0,aa:!0,Y:!0,Ga:!1,lb:!1,$:!1,hb:!1,C:!1,Nb:c.read,o:c.disposeWhenNodeIsRemoved||c.o||null,oa:c.disposeWhen||c.oa,Ya:null,B:{},J:0,Gb:null};d[z]=k;d.fc="function"===typeof f;b.V.fn.Fa(d);Object.setPrototypeOf(d,M);c.pure&&(k.hb=!0,k.C=!0,b.g.extend(d, c.ja.fn);return a.extend({trackArrayChanges:!0})};c.ja.fn={remove:function(a){for(var b=this.P(),d=!1,f="function"!=typeof a||c.T(a)?e=>e===a:a,l=b.length;l--;){var k=b[l];if(f(k)){if(b[l]!==k)throw Error("Array modified during remove; cannot remove item");d||this.nb();d=!0;b.splice(l,1)}}d&&this.Ma()}};Object.setPrototypeOf(c.ja.fn,c.ba.fn);Object.getOwnPropertyNames(Array.prototype).forEach(a=>{"function"===typeof Array.prototype[a]&&"constructor"!=a&&("copyWithin fill pop push reverse shift sort splice unshift".split(" ").includes(a)?
aa));k.o&&(k.lb=!0,k.o.nodeType||(k.o=null));k.C||d.U();k.o&&d.isActive()&&b.g.K.na(k.o,k.Ya=()=>{d.A()});return d};var M={qa:O,Ba:function(){return this[z].J},cc:function(){var a=[];b.g.O(this[z].B,(c,d)=>a[d.la]=d.X);return a},cb:function(a){if(!this[z].J)return!1;var c=this.cc();return c.includes(a)||!!c.find(d=>d.cb&&d.cb(a))},vb:function(a,c,d){if(this[z].hb&&c===this)throw Error("A 'pure' computed must not be called recursively");this[z].B[a]=d;d.la=this[z].J++;d.ma=c.Ca()},sa:function(){var a, c.ja.fn[a]=function(...b){var d=this.P();this.nb();this.Bb(d,a,b);b=d[a](...b);this.Ma();return b===d?this:b}:c.ja.fn[a]=function(...b){return this()[a](...b)})});c.Jb=a=>c.T(a)&&"function"==typeof a.remove&&"function"==typeof a.push;c.v("observableArray",c.ja);c.v("isObservableArray",c.Jb);c.ab.trackArrayChanges=(a,b)=>{function d(){function m(){if(g){var r=[].concat(a.P()||[]);if(a.ra("arrayChange")){if(!l||1<g)l=c.g.Cb(h,r,a.Ta);var q=l}h=r;l=null;g=0;q?.length&&a.D(q,"arrayChange")}}f?m():(f=
c=this[z].B;for(a in c)if(Object.prototype.hasOwnProperty.call(c,a)){var d=c[a];if(this.ua&&d.X.ka||d.X.ec(d.ma))return!0}},vc:function(){this[z].Ga||this.ua?.(!1)},isActive:function(){var a=this[z];return a.Y||0<a.J},wc:function(){this.ka?this[z].Y&&(this[z].aa=!0):this.Fb()},Rb:function(a){return a.subscribe(this.Fb,this)},Fb:function(){var a=this,c=a.throttleEvaluation;0<=c?(clearTimeout(this[z].Gb),this[z].Gb=setTimeout(()=>a.U(!0),c)):a.ua?a.ua(!0):a.U(!0)},U:function(a){var c=this[z],d=c.oa, !0,e=a.subscribe(()=>++g,null,"spectate"),h=[].concat(a.P()||[]),l=null,k=a.subscribe(m))}a.Ta={};"object"==typeof b&&c.g.extend(a.Ta,b);a.Ta.sparse=!0;if(!a.Bb){var f=!1,l=null,k,e,g=0,h,n=a.Ra,p=a.Pa;a.Ra=m=>{n?.call(a,m);"arrayChange"===m&&d()};a.Pa=m=>{p?.call(a,m);"arrayChange"!==m||a.ra("arrayChange")||(k?.A(),e?.A(),e=k=null,f=!1,h=void 0)};a.Bb=(m,r,q)=>{function t(A,x,I){return u[u.length]={status:A,value:x,index:I}}if(f&&!g){var u=[],w=m.length,v=q.length,z=0;switch(r){case "push":z=w;case "unshift":for(m=
f=!1;if(!c.Ga&&!c.$){if(c.o&&!b.g.Za(c.o)||d?.()){if(!c.lb){this.A();return}}else c.lb=!1;try{c.Ga=!0,f=this.ac(a)}finally{c.Ga=!1}return f}},ac:function(a){var c=this[z],d=c.hb?void 0:!c.J;var f={Zb:this,ya:c.B,Wa:c.J};b.u.zb({Yb:f,Xb:Y,s:this,eb:d});c.B={};c.J=0;a:{try{var k=c.Nb();break a}finally{b.u.end(),f.Wa&&!c.C&&b.g.O(f.ya,X),c.aa=c.Y=!1}k=void 0}c.J?f=this.Ha(c.M,k):(this.A(),f=!0);f&&(c.C?this.La():this.D(c.M,"beforeChange"),c.M=k,this.D(c.M,"spectate"),!c.C&&a&&this.D(c.M),this.tb&&this.tb()); 0;m<v;m++)t("added",q[m],z+m);break;case "pop":z=w-1;case "shift":w&&t("deleted",m[z],z);break;case "splice":z=Math.min(Math.max(0,0>q[0]?w+q[0]:q[0]),w);w=1===v?w:Math.min(z+(q[1]||0),w);v=z+v-2;r=Math.max(w,v);for(var C=[],H=[],O=2;z<r;++z,++O)z<w&&H.push(t("deleted",m[z],z)),z<v&&C.push(t("added",q[O],z));c.g.Hb(H,C);break;default:return}l=u}}}};var y=Symbol("_state");c.s=(a,b)=>{function d(){if(0<arguments.length){if("function"!==typeof f)throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");
d&&this.D(c.M,"awake");return f},P:function(a){var c=this[z];(c.Y&&(a||!c.J)||c.C&&this.sa())&&this.U();return c.M},Ia:function(a){var c=this;b.V.fn.Ia.call(c,a);c.qb=()=>{c[z].C||(c[z].aa?c.U():c[z].Y=!1);return c[z].M};c.ua=d=>{c.rb(c[z].M);c[z].Y=!0;d&&(c[z].aa=!0);c.sb(c,!d)}},A:function(){var a=this[z];!a.C&&a.B&&b.g.O(a.B,(c,d)=>d.A?.());a.o&&a.Ya&&b.g.K.ib(a.o,a.Ya);a.B=void 0;a.J=0;a.$=!0;a.aa=!1;a.Y=!1;a.C=!1;a.o=void 0;a.oa=void 0;a.Nb=void 0}},aa={Ra:function(a){var c=this,d=c[z];if(!d.$&& f(...arguments);return this}l.$||c.u.Ob(d);(l.Y||l.C&&d.sa())&&d.U();return l.M}"object"===typeof a?b=a:(b=b||{},a&&(b.read=a));if("function"!=typeof b.read)throw Error("Pass a function that returns the value of the ko.computed");var f=b.write,l={M:void 0,aa:!0,Y:!0,Ga:!1,lb:!1,$:!1,hb:!1,C:!1,Nb:b.read,o:b.disposeWhenNodeIsRemoved||b.o||null,oa:b.disposeWhen||b.oa,Ya:null,B:{},J:0,Gb:null};d[y]=l;d.fc="function"===typeof f;c.V.fn.Fa(d);Object.setPrototypeOf(d,J);b.pure&&(l.hb=!0,l.C=!0,c.g.extend(d,
d.C&&"change"==a){d.C=!1;if(d.aa||c.sa())d.B=null,d.J=0,c.U()&&c.La();else{var f=[];b.g.O(d.B,(k,n)=>f[n.la]=k);f.forEach((k,n)=>{var e=d.B[k],g=c.Rb(e.X);g.la=n;g.ma=e.ma;d.B[k]=g});c.sa()&&c.U()&&c.La()}d.$||c.D(d.M,"awake")}},Pa:function(a){var c=this[z];c.$||"change"!=a||this.ra("change")||(b.g.O(c.B,(d,f)=>{f.A&&(c.B[d]={X:f.X,la:f.la,ma:f.ma},f.A())}),c.C=!0,this.D(void 0,"asleep"))},Ca:function(){var a=this[z];a.C&&(a.aa||this.sa())&&this.U();return b.V.fn.Ca.call(this)}};Object.setPrototypeOf(M, la));l.o&&(l.lb=!0,l.o.nodeType||(l.o=null));l.C||d.U();l.o&&d.isActive()&&c.g.K.na(l.o,l.Ya=()=>{d.A()});return d};var J={qa:P,Ba:function(){return this[y].J},cc:function(){var a=[];c.g.O(this[y].B,(b,d)=>a[d.la]=d.X);return a},cb:function(a){if(!this[y].J)return!1;var b=this.cc();return b.includes(a)||!!b.find(d=>d.cb&&d.cb(a))},vb:function(a,b,d){if(this[y].hb&&b===this)throw Error("A 'pure' computed must not be called recursively");this[y].B[a]=d;d.la=this[y].J++;d.ma=b.Ca()},sa:function(){var a,
b.V.fn);var Q=b.ba.pc;M[Q]=b.s;b.v("computed",b.s);b.v("isComputed",a=>"function"==typeof a&&a[Q]===M[Q]);b.v("computed.fn",M);b.ha(M,"dispose",M.A);b.qc=a=>{if("function"===typeof a)return b.s(a,{pure:!0});a={...a,pure:!0};return b.s(a)};(()=>{b.F={R:a=>{switch(a.nodeName){case "OPTION":return!0===a.__ko__hasDomDataOptionValue__?b.g.i.get(a,b.h.options.gb):a.value;case "SELECT":return 0<=a.selectedIndex?b.F.R(a.options[a.selectedIndex]):void 0;default:return a.value}},Na:(a,c,d)=>{switch(a.nodeName){case "OPTION":"string"=== b=this[y].B;for(a in b)if(Object.prototype.hasOwnProperty.call(b,a)){var d=b[a];if(this.ua&&d.X.ka||d.X.ec(d.ma))return!0}},vc:function(){this[y].Ga||this.ua?.(!1)},isActive:function(){var a=this[y];return a.Y||0<a.J},wc:function(){this.ka?this[y].Y&&(this[y].aa=!0):this.Fb()},Rb:function(a){return a.subscribe(this.Fb,this)},Fb:function(){var a=this,b=a.throttleEvaluation;0<=b?(clearTimeout(this[y].Gb),this[y].Gb=setTimeout(()=>a.U(!0),b)):a.ua?a.ua(!0):a.U(!0)},U:function(a){var b=this[y],d=b.oa,
typeof c?(b.g.i.set(a,b.h.options.gb,void 0),delete a.__ko__hasDomDataOptionValue__,a.value=c):(b.g.i.set(a,b.h.options.gb,c),a.__ko__hasDomDataOptionValue__=!0,a.value="number"===typeof c?c:"");break;case "SELECT":for(var f=-1,k=""===c||null==c,n=a.options.length,e;n--;)if(e=b.F.R(a.options[n]),e==c||""===e&&k){f=n;break}if(d||0<=f||k&&1<a.size)a.selectedIndex=f;break;default:a.value=null==c?"":c}}}})();b.I=(()=>{function a(g){g=b.g.Qb(g);123===g.charCodeAt(0)&&(g=g.slice(1,-1));g+="\n,";var h=[], f=!1;if(!b.Ga&&!b.$){if(b.o&&!c.g.Za(b.o)||d?.()){if(!b.lb){this.A();return}}else b.lb=!1;try{b.Ga=!0,f=this.ac(a)}finally{b.Ga=!1}return f}},ac:function(a){var b=this[y],d=b.hb?void 0:!b.J;var f={Zb:this,ya:b.B,Wa:b.J};c.u.zb({Yb:f,Xb:ia,s:this,eb:d});b.B={};b.J=0;a:{try{var l=b.Nb();break a}finally{c.u.end(),f.Wa&&!b.C&&c.g.O(f.ya,ha),b.aa=b.Y=!1}l=void 0}b.J?f=this.Ha(b.M,l):(this.A(),f=!0);f&&(b.C?this.La():this.D(b.M,"beforeChange"),b.M=l,this.D(b.M,"spectate"),!b.C&&a&&this.D(b.M),this.tb&&
t=g.match(f),r=[],p=0;if(1<t.length){for(var m=0,l;l=t[m++];){var q=l.charCodeAt(0);if(44===q){if(0>=p){h.push(v&&r.length?{key:v,value:r.join("")}:{unknown:v||r.join("")});var v=p=0;r=[];continue}}else if(58===q){if(!p&&!v&&1===r.length){v=r.pop();continue}}else if(47===q&&1<l.length&&(47===l.charCodeAt(1)||42===l.charCodeAt(1)))continue;else 47===q&&m&&1<l.length?(q=t[m-1].match(k))&&!n[q[0]]&&(g=g.slice(g.indexOf(l)+1),t=g.match(f),m=-1,l="/"):40===q||123===q||91===q?++p:41===q||125===q||93=== this.tb());d&&this.D(b.M,"awake");return f},P:function(a){var b=this[y];(b.Y&&(a||!b.J)||b.C&&this.sa())&&this.U();return b.M},Ia:function(a){var b=this;c.V.fn.Ia.call(b,a);b.qb=()=>{b[y].C||(b[y].aa?b.U():b[y].Y=!1);return b[y].M};b.ua=d=>{b.rb(b[y].M);b[y].Y=!0;d&&(b[y].aa=!0);b.sb(b,!d)}},A:function(){var a=this[y];!a.C&&a.B&&c.g.O(a.B,(b,d)=>d.A?.());a.o&&a.Ya&&c.g.K.ib(a.o,a.Ya);a.B=void 0;a.J=0;a.$=!0;a.aa=!1;a.Y=!1;a.C=!1;a.o=void 0;a.oa=void 0;a.Nb=void 0}},la={Ra:function(a){var b=this,d=
q?--p:v||r.length||34!==q&&39!==q||(l=l.slice(1,-1));r.push(l)}if(0<p)throw Error("Unbalanced parentheses, braces, or brackets");}return h}var c=["true","false","null","undefined"],d=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,f=RegExp("\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|`(?:\\\\.|[^`])*`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*\n|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,\"'`{}()/:[\\]]*[^\\s,\"'`{}()/:[\\]]|[^\\s]","g"),k=/[\])"'A-Za-z0-9_$]+$/,n={"in":1,"return":1,"typeof":1},e=new Set;return{Sa:[], b[y];if(!d.$&&d.C&&"change"==a){d.C=!1;if(d.aa||b.sa())d.B=null,d.J=0,b.U()&&b.La();else{var f=[];c.g.O(d.B,(l,k)=>f[k.la]=l);f.forEach((l,k)=>{var e=d.B[l],g=b.Rb(e.X);g.la=k;g.ma=e.ma;d.B[l]=g});b.sa()&&b.U()&&b.La()}d.$||b.D(d.M,"awake")}},Pa:function(a){var b=this[y];b.$||"change"!=a||this.ra("change")||(c.g.O(b.B,(d,f)=>{f.A&&(b.B[d]={X:f.X,la:f.la,ma:f.ma},f.A())}),b.C=!0,this.D(void 0,"asleep"))},Ca:function(){var a=this[y];a.C&&(a.aa||this.sa())&&this.U();return c.V.fn.Ca.call(this)}};Object.setPrototypeOf(J,
mb:e,nc:a,oc:function(g,h){function t(q,v){if(!l){var x=b.h[q];if(x&&x.preprocess&&!(v=x.preprocess(v,q,t)))return;if(x=e.has(q)){var u=v;c.includes(u)?u=!1:(x=u.match(d),u=null===x?!1:x[1]?"Object("+x[1]+")"+x[2]:u);x=u}x&&p.push("'"+q+"':function(_z){"+u+"=_z}")}m&&(v="function(){return "+v+" }");r.push("'"+q+"':"+v)}h=h||{};var r=[],p=[],m=h.valueAccessors,l=h.bindingParams;("string"===typeof g?a(g):g).forEach(q=>t(q.key||q.unknown,q.value));p.length&&t("_ko_property_writers","{"+p.join(",")+" }"); c.V.fn);var S=c.ba.pc;J[S]=c.s;c.v("computed",c.s);c.v("isComputed",a=>"function"==typeof a&&a[S]===J[S]);c.v("computed.fn",J);c.ha(J,"dispose",J.A);c.qc=a=>{if("function"===typeof a)return c.s(a,{pure:!0});a={...a,pure:!0};return c.s(a)};c.F={R:a=>{switch(a.nodeName){case "OPTION":return!0===a.__ko__hasDomDataOptionValue__?c.g.i.get(a,c.h.options.gb):a.value;case "SELECT":return 0<=a.selectedIndex?c.F.R(a.options[a.selectedIndex]):void 0;default:return a.value}},Na:(a,b,d)=>{switch(a.nodeName){case "OPTION":"string"===
return r.join(",")},lc:(g,h)=>-1<g.findIndex(t=>t.key==h),ob:(g,h,t,r,p)=>{if(g&&b.T(g))!b.kc(g)||p&&g.P()===r||g(r);else h.get("_ko_property_writers")?.[t]?.(r)}}})();(()=>{function a(e){return 8==e.nodeType&&f.test(e.nodeValue)}function c(e){return 8==e.nodeType&&k.test(e.nodeValue)}function d(e,g){for(var h=e,t=1,r=[];h=h.nextSibling;){if(c(h)&&(b.g.i.set(h,n,!0),!--t))return r;r.push(h);a(h)&&++t}if(!g)throw Error("Cannot find closing comment tag to match: "+e.nodeValue);return null}var f=/^\s*ko(?:\s+([\s\S]+))?\s*$/, typeof b?(c.g.i.set(a,c.h.options.gb,void 0),delete a.__ko__hasDomDataOptionValue__,a.value=b):(c.g.i.set(a,c.h.options.gb,b),a.__ko__hasDomDataOptionValue__=!0,a.value="number"===typeof b?b:"");break;case "SELECT":for(var f=-1,l=""===b||null==b,k=a.options.length,e;k--;)if(e=c.F.R(a.options[k]),e==b||""===e&&l){f=k;break}if(d||0<=f||l&&1<a.size)a.selectedIndex=f;break;default:a.value=null==b?"":b}}};c.I=(()=>{var a=["true","false","null","undefined"],b=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,
k=/^\s*\/ko\s*$/,n="__ko_matchedEndComment__";b.m={ca:{},childNodes:e=>a(e)?d(e):e.childNodes,pa:e=>{a(e)?(e=d(e))&&[...e].forEach(g=>b.removeNode(g)):b.g.$a(e)},ta:(e,g)=>{a(e)?(b.m.pa(e),e.after(...g)):b.g.ta(e,g)},prepend:(e,g)=>{a(e)?e.nextSibling.before(g):e.prepend(g)},ic:(e,g,h)=>{h?h.after(g):b.m.prepend(e,g)},firstChild:e=>{if(a(e))return e=e.nextSibling,!e||c(e)?null:e;let g=e.firstChild;if(g&&c(g))throw Error("Found invalid end comment, as the first child of "+e);return g},nextSibling:e=> d=RegExp("\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|`(?:\\\\.|[^`])*`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*\n|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,\"'`{}()/:[\\]]*[^\\s,\"'`{}()/:[\\]]|[^\\s]","g"),f=/[\])"'A-Za-z0-9_$]+$/,l={"in":1,"return":1,"typeof":1},k=g=>{g=c.g.Qb(g);123===g.charCodeAt(0)&&(g=g.slice(1,-1));g+="\n,";var h=[],n=g.match(d),p=[],m=0;if(1<n.length){for(var r=0,q;q=n[r++];){var t=q.charCodeAt(0);if(44===t){if(0>=m){h.push(u&&p.length?{key:u,value:p.join("")}:{unknown:u||p.join("")});var u=m=
{if(a(e)){var g=d(e,void 0);e=g?(g.length?g[g.length-1]:e).nextSibling:null}if((g=e.nextSibling)&&c(g)){if(c(g)&&!b.g.i.get(g,n))throw Error("Found end comment without a matching opening comment, as child of "+e);return null}return g},dc:a,uc:e=>(e=e.nodeValue.match(f))?e[1]:null}})();(()=>{const a=new Map;b.Ab=new class{mc(c){switch(c.nodeType){case 1:return null!=c.getAttribute("data-bind");case 8:return b.m.dc(c);default:return!1}}bc(c,d){a:{switch(c.nodeType){case 1:var f=c.getAttribute("data-bind"); 0;p=[];continue}}else if(58===t){if(!m&&!u&&1===p.length){u=p.pop();continue}}else if(47===t&&1<q.length&&(47===q.charCodeAt(1)||42===q.charCodeAt(1)))continue;else 47===t&&r&&1<q.length?(t=n[r-1].match(f))&&!l[t[0]]&&(g=g.slice(g.indexOf(q)+1),n=g.match(d),r=-1,q="/"):40===t||123===t||91===t?++m:41===t||125===t||93===t?--m:u||p.length||34!==t&&39!==t||(q=q.slice(1,-1));p.push(q)}if(0<m)throw Error("Unbalanced parentheses, braces, or brackets");}return h},e=new Set;return{Sa:[],mb:e,nc:k,oc:(g,h)=>
break a;case 8:f=b.m.uc(c);break a}f=null}if(f)try{let n={valueAccessors:!0},e=a.get(f);if(!e){var k="with($context){with($data||{}){return{"+b.I.oc(f,n)+"}}}";e=new Function("$context","$element",k);a.set(f,e)}return e(d,c)}catch(n){throw n.message="Unable to parse bindings.\nBindings value: "+f+"\nMessage: "+n.message,n;}return null}}})();(()=>{function a(m){m=b.g.i.get(m,r);var l=m?.H;l&&(m.H=null,l.Mb())}function c(m,l){for(var q,v=b.m.firstChild(l);q=v;)v=b.m.nextSibling(q),d(m,q);b.l.notify(l, {var n=[],p=[],m=h?.valueAccessors,r=h?.bindingParams,q=(t,u)=>{if(!r){var w=c.h[t];if(w?.preprocess&&!(u=w.preprocess(u,t,q)))return;if(w=e.has(t)){var v=u;a.includes(v)?v=!1:(w=v.match(b),v=null===w?!1:w[1]?"Object("+w[1]+")"+w[2]:v);w=v}w&&p.push("'"+t+"':function(_z){"+v+"=_z}")}m&&(u="function(){return "+u+" }");n.push("'"+t+"':"+u)};("string"===typeof g?k(g):g).forEach(t=>q(t.key||t.unknown,t.value));p.length&&q("_ko_property_writers","{"+p.join(",")+" }");return n.join(",")},lc:(g,h)=>-1<g.findIndex(n=>
b.l.G)}function d(m,l){var q=m;if(1===l.nodeType||b.Ab.mc(l))q=k(l,null,m).bindingContextForDescendants;q&&!l.matches?.("SCRIPT,TEXTAREA,TEMPLATE")&&c(q,l)}function f(m){var l=[],q={},v=[];b.g.O(m,function y(u){if(!q[u]){var B=b.h[u];B&&(B.after&&(v.push(u),B.after.forEach(D=>{if(m[D]){if(v.includes(D))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+v.join(", "));y(D)}}),v.length--),l.push({key:u,Ib:B}));q[u]=!0}});return l}function k(m,l,q){var v=b.g.i.bb(m, n.key==h),ob:(g,h,n,p,m)=>{if(g&&c.T(g))!c.kc(g)||m&&g.P()===p||g(p);else h.get("_ko_property_writers")?.[n]?.(p)}}})();(()=>{function a(e){return 8==e.nodeType&&f.test(e.nodeValue)}function b(e){return 8==e.nodeType&&l.test(e.nodeValue)}function d(e,g){for(var h=e,n=1,p=[];h=h.nextSibling;){if(b(h)&&(c.g.i.set(h,k,!0),!--n))return p;p.push(h);a(h)&&++n}if(!g)throw Error("Cannot find closing comment tag to match: "+e.nodeValue);return null}var f=/^\s*ko(?:\s+([\s\S]+))?\s*$/,l=/^\s*\/ko\s*$/,k="__ko_matchedEndComment__";
r,{}),x=v.Wb;if(!l){if(x)throw Error("You cannot apply bindings multiple times to the same element.");v.Wb=!0}x||(v.context=q);v.fb||(v.fb={});if(l&&"function"!==typeof l)var u=l;else{var y=b.s(()=>{if(u=l?l(q,m):b.Ab.bc(m,q))q[e]?.(),q[h]?.();return u},{o:m});u&&y.isActive()||(y=null)}var B=q,D;if(u){var F=y?w=>()=>y()[w]():w=>u[w],A={get:w=>u[w]&&F(w)(),has:w=>w in u};b.l.G in u&&b.l.subscribe(m,b.l.G,()=>{var w=u[b.l.G]();if(w){var C=b.m.childNodes(m);C.length&&w(C,b.Eb(C[0]))}});b.l.ga in u&& c.m={ca:{},childNodes:e=>a(e)?d(e):e.childNodes,pa:e=>{a(e)?(e=d(e))&&[...e].forEach(g=>c.removeNode(g)):c.g.$a(e)},ta:(e,g)=>{a(e)?(c.m.pa(e),e.after(...g)):c.g.ta(e,g)},prepend:(e,g)=>{a(e)?e.nextSibling.before(g):e.prepend(g)},ic:(e,g,h)=>{h?h.after(g):c.m.prepend(e,g)},firstChild:e=>{if(a(e))return e=e.nextSibling,!e||b(e)?null:e;let g=e.firstChild;if(g&&b(g))throw Error("Found invalid end comment, as the first child of "+e);return g},nextSibling:e=>{if(a(e)){var g=d(e,void 0);e=g?(g.length?g[g.length-
(B=b.l.kb(m,q),b.l.subscribe(m,b.l.ga,()=>{var w=u[b.l.ga]();w&&b.m.firstChild(m)&&w(m)}));f(u).forEach(w=>{var C=w.Ib.init,E=w.Ib.update,I=w.key;if(8===m.nodeType&&!b.m.ca[I])throw Error("The binding '"+I+"' cannot be used with virtual elements");try{"function"==typeof C&&b.u.S(()=>{var L=C(m,F(I),A,B.$data,B);if(L&&L.controlsDescendantBindings){if(void 0!==D)throw Error("Multiple bindings ("+D+" and "+I+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element."); 1]:e).nextSibling:null}if((g=e.nextSibling)&&b(g)){if(b(g)&&!c.g.i.get(g,k))throw Error("Found end comment without a matching opening comment, as child of "+e);return null}return g},dc:a,uc:e=>(e=e.nodeValue.match(f))?e[1]:null}})();const ba=new Map;c.Ab=new class{mc(a){switch(a.nodeType){case 1:return null!=a.getAttribute("data-bind");case 8:return c.m.dc(a)}return!1}bc(a,b){a:{switch(a.nodeType){case 1:var d=a.getAttribute("data-bind");break a;case 8:d=c.m.uc(a);break a}d=null}if(d)try{let l={valueAccessors:!0},
D=I}}),"function"==typeof E&&b.s(()=>E(m,F(I),A,B.$data,B),{o:m})}catch(L){throw L.message='Unable to process binding "'+I+": "+u[I]+'"\nMessage: '+L.message,L;}})}v=void 0===D;return{shouldBindDescendants:v,bindingContextForDescendants:v&&B}}function n(m,l){return m&&m instanceof b.ea?m:new b.ea(m,void 0,void 0,l)}var e=Symbol("_subscribable"),g=Symbol("_ancestorBindingInfo"),h=Symbol("_dataDependency");b.h={};var t={};b.ea=class{constructor(m,l,q,v,x){var u=this,y=m===t,B=y?void 0:m,D="function"== k=ba.get(d);if(!k){var f="with($context){with($data||{}){return{"+c.I.oc(d,l)+"}}}";k=new Function("$context","$element",f);ba.set(d,k)}return k(b,a)}catch(l){throw l.message="Unable to parse bindings.\nBindings value: "+d+"\nMessage: "+l.message,l;}return null}};const L=Symbol("_subscribable"),N=Symbol("_ancestorBindingInfo"),aa=Symbol("_dataDependency"),ca={},K=c.g.i.Z();c.h={};c.ea=class{constructor(a,b,d,f,l){var k=this,e=a===ca,g=e?void 0:a,h="function"==typeof g&&!c.T(g),n=l?.dataDependency;
typeof B&&!b.T(B),F=x?.dataDependency;m=()=>{var w=D?B():B,C=b.g.j(w);l?(b.g.extend(u,l),g in l&&(u[g]=l[g])):(u.$parents=[],u.$root=C,u.ko=b);u[e]=A;y?C=u.$data:(u.$rawData=w,u.$data=C);q&&(u[q]=C);v?.(u,l,C);if(l?.[e]&&!b.u.s().cb(l[e]))l[e]();F&&(u[h]=F);return u.$data};if(x?.exportDependencies)m();else{var A=b.qc(m);A.P();A.isActive()?A.qa=null:u[e]=void 0}}createChildContext(m,l,q,v){!v&&l&&"object"==typeof l&&(v=l,l=v.as,q=v.extend);return new b.ea(m,this,l,(x,u)=>{x.$parentContext=u;x.$parent= a=()=>{var m=h?g():g,r=c.g.j(m);b?(c.g.extend(k,b),N in b&&(k[N]=b[N])):(k.$parents=[],k.$root=r,k.ko=c);k[L]=p;e?r=k.$data:(k.$rawData=m,k.$data=r);d&&(k[d]=r);f?.(k,b,r);if(b?.[L]&&!c.u.s().cb(b[L]))b[L]();n&&(k[aa]=n);return k.$data};if(l?.exportDependencies)a();else{var p=c.qc(a);p.P();p.isActive()?p.qa=null:k[L]=void 0}}createChildContext(a,b,d,f){!f&&b&&"object"==typeof b&&(f=b,b=f.as,d=f.extend);return new c.ea(a,this,b,(l,k)=>{l.$parentContext=k;l.$parent=k.$data;l.$parents=(k.$parents||[]).slice(0);
u.$data;x.$parents=(u.$parents||[]).slice(0);x.$parents.unshift(x.$parent);q&&q(x)},v)}extend(m,l){return new b.ea(t,this,null,q=>b.g.extend(q,"function"==typeof m?m(q):m),l)}};var r=b.g.i.Z();class p{constructor(m,l,q){this.L=m;this.ia=l;this.wa=new Set;this.G=!1;l.H||b.g.K.na(m,a);q?.H&&(q.H.wa.add(m),this.Da=q)}Mb(){this.Da?.H?.$b(this.L)}$b(m){this.wa.delete(m);this.wa.size||this.Db?.()}Db(){this.G=!0;this.ia.H&&!this.wa.size&&(this.ia.H=null,b.g.K.ib(this.L,a),b.l.notify(this.L,b.l.ga),this.Mb())}} l.$parents.unshift(l.$parent);d&&d(l)},f)}extend(a,b){return new c.ea(ca,this,null,d=>c.g.extend(d,"function"==typeof a?a(d):a),b)}};class ma{constructor(a,b,d){this.L=a;this.ia=b;this.wa=new Set;this.G=!1;b.H||c.g.K.na(a,W);d?.H&&(d.H.wa.add(a),this.Da=d)}Mb(){this.Da?.H?.$b(this.L)}$b(a){this.wa.delete(a);this.wa.size||this.Db?.()}Db(){this.G=!0;this.ia.H&&!this.wa.size&&(this.ia.H=null,c.g.K.ib(this.L,W),c.l.notify(this.L,c.l.ga),this.Mb())}}c.l={G:"childrenComplete",ga:"descendantsComplete",subscribe:(a,
b.l={G:"childrenComplete",ga:"descendantsComplete",subscribe:(m,l,q,v,x)=>{var u=b.g.i.bb(m,r,{});u.za||(u.za=new b.V);x?.notifyImmediately&&u.fb[l]&&b.u.S(q,v,[m]);return u.za.subscribe(q,v,l)},notify:(m,l)=>{var q=b.g.i.get(m,r);if(q&&(q.fb[l]=!0,q.za?.D(m,l),l==b.l.G))if(q.H)q.H.Db();else if(void 0===q.H&&q.za?.ra(b.l.ga))throw Error("descendantsComplete event not supported for bindings on this node");},kb:(m,l)=>{var q=b.g.i.bb(m,r,{});q.H||(q.H=new p(m,q,l[g]));return l[g]==q?l:l.extend(v=>{v[g]= b,d,f,l)=>{var k=c.g.i.bb(a,K,{});k.za||(k.za=new c.V);l?.notifyImmediately&&k.fb[b]&&c.u.S(d,f,[a]);return k.za.subscribe(d,f,b)},notify:(a,b)=>{var d=c.g.i.get(a,K);if(d&&(d.fb[b]=!0,d.za?.D(a,b),b==c.l.G))if(d.H)d.H.Db();else if(void 0===d.H&&d.za?.ra(c.l.ga))throw Error("descendantsComplete event not supported for bindings on this node");},kb:(a,b)=>{var d=c.g.i.bb(a,K,{});d.H||(d.H=new ma(a,d,b[N]));return b[N]==d?b:b.extend(f=>{f[N]=d})}};c.tc=a=>(a=c.g.i.get(a,K))&&a.context;c.wb=(a,b,d)=>
q})}};b.tc=m=>(m=b.g.i.get(m,r))&&m.context;b.wb=(m,l,q)=>k(m,l,n(q));b.yb=(m,l)=>{1!==l.nodeType&&8!==l.nodeType||c(n(m),l)};b.xb=function(m,l,q){if(2>arguments.length){if(l=N.body,!l)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?");}else if(!l||1!==l.nodeType&&8!==l.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");d(n(m,q),l)};b.Eb=m=>(m=m&&[1,8].includes(m.nodeType)&&b.tc(m))?m.$data: Z(a,b,Q(d));c.yb=(a,b)=>{1!==b.nodeType&&8!==b.nodeType||X(Q(a),b)};c.xb=function(a,b,d){if(2>arguments.length){if(b=M.body,!b)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?");}else if(!b||1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");Y(Q(a,d),b)};c.Eb=a=>(a=a&&[1,8].includes(a.nodeType)&&c.tc(a))?a.$data:void 0;c.v("bindingHandlers",c.h);c.v("applyBindings",
void 0;b.v("bindingHandlers",b.h);b.v("applyBindings",b.xb);b.v("applyBindingAccessorsToNode",b.wb);b.v("dataFor",b.Eb)})();(()=>{var a=Object.create(null),c=new Map;b.Ua={get:(n,e)=>{if(c.has(n))e(c.get(n));else{var g=a[n];g?g.subscribe(e):(g=a[n]=new b.V,g.subscribe(e),k(n,h=>{c.set(n,h);delete a[n];g.D(h)}))}},register:(n,e)=>{if(!e)throw Error("Invalid configuration for "+n);if(d[n])throw Error("Component "+n+" is already registered");d[n]=e}};var d=Object.create(null),f=(n,e)=>{throw Error(`Component '${n}': ${e}`); c.xb);c.v("applyBindingAccessorsToNode",c.wb);c.v("dataFor",c.Eb);(()=>{var a=Object.create(null),b=new Map;c.Ua={get:(k,e)=>{if(b.has(k))e(b.get(k));else{var g=a[k];g?g.subscribe(e):(g=a[k]=new c.V,g.subscribe(e),l(k,h=>{b.set(k,h);delete a[k];g.D(h)}))}},register:(k,e)=>{if(!e)throw Error("Invalid configuration for "+k);if(d[k])throw Error("Component "+k+" is already registered");d[k]=e}};var d=Object.create(null),f=(k,e)=>{throw Error(`Component '${k}': ${e}`);},l=(k,e)=>{var g={},h=d[k]||{},n=
},k=(n,e)=>{var g={},h=d[n]||{},t=h.template;h=h.viewModel;if(t){t.element||f(n,"Unknown template value: "+t);t=t.element;var r=N.getElementById(t);r||f(n,"Cannot find element with ID "+t);r.matches("TEMPLATE")||f(n,"Template Source Element not a <template>");g.template=b.g.xa(r.content.childNodes)}h&&("function"!==typeof h.createViewModel&&f(n,"Unknown viewModel value: "+h),g.createViewModel=h.createViewModel);e(g.template&&g.createViewModel?g:null)};b.v("components",b.Ua);b.v("components.register", h.template;h=h.viewModel;if(n){n.element||f(k,"Unknown template value: "+n);n=n.element;var p=M.getElementById(n);p||f(k,"Cannot find element with ID "+n);p.matches("TEMPLATE")||f(k,"Template Source Element not a <template>");g.template=c.g.xa(p.content.childNodes)}h&&("function"!==typeof h.createViewModel&&f(k,"Unknown viewModel value: "+h),g.createViewModel=h.createViewModel);e(g.template&&g.createViewModel?g:null)};c.v("components",c.Ua);c.v("components.register",c.Ua.register)})();(()=>{var a=
b.Ua.register)})();(()=>{var a=0;b.h.component={init:(c,d,f,k,n)=>{var e,g,h,t=()=>{var p=e&&e.dispose;"function"===typeof p&&p.call(e);h&&h.A();g=e=h=null},r=[...b.m.childNodes(c)];b.m.pa(c);b.g.K.na(c,t);b.s(()=>{var p=b.g.j(d());if("string"!==typeof p){var m=b.g.j(p.params);p=b.g.j(p.name)}if(!p)throw Error("No component name specified");var l=b.l.kb(c,n),q=g=++a;b.Ua.get(p,v=>{if(g===q){t();if(!v)throw Error("Unknown component '"+p+"'");var x=v.template;if(!x)throw Error("Component '"+p+"' has no template"); 0;c.h.component={init:(b,d,f,l,k)=>{var e,g,h,n=()=>{var m=e&&e.dispose;"function"===typeof m&&m.call(e);h&&h.A();g=e=h=null},p=[...c.m.childNodes(b)];c.m.pa(b);c.g.K.na(b,n);c.s(()=>{var m=c.g.j(d());if("string"!==typeof m){var r=c.g.j(m.params);m=c.g.j(m.name)}if(!m)throw Error("No component name specified");var q=c.l.kb(b,k),t=g=++a;c.Ua.get(m,u=>{if(g===t){n();if(!u)throw Error("Unknown component '"+m+"'");var w=u.template;if(!w)throw Error("Component '"+m+"' has no template");c.m.ta(b,c.g.xa(w));
b.m.ta(c,b.g.xa(x));e=v.createViewModel(m,{element:c,templateNodes:r});b.yb(l.createChildContext(e,{extend:u=>{u.$component=e;u.$componentTemplateNodes=r}}),c)}})},{o:c});return{controlsDescendantBindings:!0}}};b.m.ca.component=!0})();b.h.attr={update:(a,c)=>{c=b.g.j(c())||{};b.g.O(c,function(d,f){f=b.g.j(f);var k=d.indexOf(":");k="lookupNamespaceURI"in a&&0<k&&a.lookupNamespaceURI(d.slice(0,k));var n=!1===f||null==f;n?k?a.removeAttributeNS(k,d):a.removeAttribute(d):(f=f.toString(),k?a.setAttributeNS(k, e=u.createViewModel(r,{element:b,templateNodes:p});c.yb(q.createChildContext(e,{extend:v=>{v.$component=e;v.$componentTemplateNodes=p}}),b)}})},{o:b});return{controlsDescendantBindings:!0}}};c.m.ca.component=!0})();c.h.attr={update:(a,b)=>{b=c.g.j(b())||{};c.g.O(b,function(d,f){f=c.g.j(f);var l=d.indexOf(":");l="lookupNamespaceURI"in a&&0<l&&a.lookupNamespaceURI(d.slice(0,l));var k=!1===f||null==f;k?l?a.removeAttributeNS(l,d):a.removeAttribute(d):(f=f.toString(),l?a.setAttributeNS(l,d,f):a.setAttribute(d,
d,f):a.setAttribute(d,f));"name"===d&&(a.name=n?"":f)})}};var R=(a,c,d)=>c&&c.split(/\s+/).forEach(f=>a.classList.toggle(f,d));b.h.css={update:(a,c)=>{c=b.g.j(c());"object"==typeof c?b.g.O(c,(d,f)=>{f=b.g.j(f);R(a,d,!!f)}):(c=b.g.Qb(c),R(a,a.__ko__cssValue,!1),a.__ko__cssValue=c,R(a,c,!0))}};b.h.enable={update:(a,c)=>{(c=b.g.j(c()))&&a.disabled?a.removeAttribute("disabled"):c||a.disabled||(a.disabled=!0)}};b.h.disable={update:(a,c)=>b.h.enable.update(a,()=>!b.g.j(c()))};b.h.event={init:(a,c,d,f,k)=> f));"name"===d&&(a.name=k?"":f)})}};var T=(a,b,d)=>b&&b.split(/\s+/).forEach(f=>a.classList.toggle(f,d));c.h.css={update:(a,b)=>{b=c.g.j(b());"object"==typeof b?c.g.O(b,(d,f)=>{f=c.g.j(f);T(a,d,!!f)}):(b=c.g.Qb(b),T(a,a.__ko__cssValue,!1),a.__ko__cssValue=b,T(a,b,!0))}};c.h.enable={update:(a,b)=>{(b=c.g.j(b()))&&a.disabled?a.removeAttribute("disabled"):b||a.disabled||(a.disabled=!0)}};c.h.disable={update:(a,b)=>c.h.enable.update(a,()=>!c.g.j(b()))};c.h.event={init:(a,b,d,f,l)=>{c.g.O(b()||{},k=>{"string"==
{d=c()||{};b.g.O(d,n=>{"string"==typeof n&&a.addEventListener(n,(...e)=>{var g=c()[n];if(g)try{f=k.$data;var h=g.apply(f,[f,...e])}finally{!0!==h&&e[0].preventDefault()}})})}};b.h.foreach={Kb:a=>()=>{var c=a(),d=b.T(c)?c.P():c;if(!d||"number"==typeof d.length)return{foreach:c};b.g.j(c);return{foreach:d.data,as:d.as,beforeRemove:d.beforeRemove}},init:(a,c)=>b.h.template.init(a,b.h.foreach.Kb(c)),update:(a,c,d,f,k)=>b.h.template.update(a,b.h.foreach.Kb(c),d,f,k)};b.I.Sa.foreach=!1;b.m.ca.foreach=!0; typeof k&&a.addEventListener(k,(...e)=>{var g=b()[k];if(g)try{f=l.$data;var h=g.apply(f,[f,...e])}finally{!0!==h&&e[0].preventDefault()}})})}};c.h.foreach={Kb:a=>()=>{var b=a(),d=c.T(b)?b.P():b;if(!d||"number"==typeof d.length)return{foreach:b};c.g.j(b);return{foreach:d.data,as:d.as,beforeRemove:d.beforeRemove}},init:(a,b)=>c.h.template.init(a,c.h.foreach.Kb(b)),update:(a,b,d,f,l)=>c.h.template.update(a,c.h.foreach.Kb(b),d,f,l)};c.I.Sa.foreach=!1;c.m.ca.foreach=!0;c.h.hasfocus={init:(a,b,d)=>{var f=
b.h.hasfocus={init:(a,c,d)=>{var f=n=>{a.__ko_hasfocusUpdating=!0;n=a.ownerDocument.activeElement===a;var e=c();b.I.ob(e,d,"hasfocus",n,!0);a.__ko_hasfocusLastValue=n;a.__ko_hasfocusUpdating=!1},k=f.bind(null,!0);f=f.bind(null,!1);a.addEventListener("focus",k);a.addEventListener("focusin",k);a.addEventListener("blur",f);a.addEventListener("focusout",f);a.__ko_hasfocusLastValue=!1},update:(a,c)=>{c=!!b.g.j(c());a.__ko_hasfocusUpdating||a.__ko_hasfocusLastValue===c||(c?a.focus():a.blur())}};b.I.mb.add("hasfocus"); k=>{a.__ko_hasfocusUpdating=!0;k=a.ownerDocument.activeElement===a;c.I.ob(b(),d,"hasfocus",k,!0);a.__ko_hasfocusLastValue=k;a.__ko_hasfocusUpdating=!1},l=f.bind(null,!0);f=f.bind(null,!1);a.addEventListener("focus",l);a.addEventListener("focusin",l);a.addEventListener("blur",f);a.addEventListener("focusout",f);a.__ko_hasfocusLastValue=!1},update:(a,b)=>{b=!!c.g.j(b());a.__ko_hasfocusUpdating||a.__ko_hasfocusLastValue===b||(b?a.focus():a.blur())}};c.I.mb.add("hasfocus");c.h.html={init:()=>({controlsDescendantBindings:!0}),
b.h.html={init:()=>({controlsDescendantBindings:!0}),update:(a,c)=>{b.g.$a(a);c=b.g.j(c());if(null!=c){const d=N.createElement("template");d.innerHTML="string"!=typeof c?c.toString():c;a.appendChild(d.content)}}};(()=>{function a(c,d,f){b.h[c]={init:(k,n,e,g,h)=>{var t,r={};d&&(r={as:e.get("as"),exportDependencies:!0});var p=e.has(b.l.ga);b.s(()=>{var m=b.g.j(n()),l=!f!==!m,q=!t;p&&(h=b.l.kb(k,h));if(l){r.dataDependency=b.u.s();var v=d?h.createChildContext("function"==typeof m?m:n,r):b.u.Ba()?h.extend(null, update:(a,b)=>{c.g.$a(a);b=c.g.j(b());if(null!=b){const d=M.createElement("template");d.innerHTML="string"!=typeof b?b.toString():b;a.appendChild(d.content)}}};(()=>{function a(b,d,f){c.h[b]={init:(l,k,e,g,h)=>{var n,p={};d&&(p={as:e.get("as"),exportDependencies:!0});var m=e.has(c.l.ga);c.s(()=>{var r=c.g.j(k()),q=!f!==!r,t=!n;m&&(h=c.l.kb(l,h));if(q){p.dataDependency=c.u.s();var u=d?h.createChildContext("function"==typeof r?r:k,p):c.u.Ba()?h.extend(null,p):h}t&&c.u.Ba()&&(n=c.g.xa(c.m.childNodes(l),
r):h}q&&b.u.Ba()&&(t=b.g.xa(b.m.childNodes(k),!0));l?(q||b.m.ta(k,b.g.xa(t)),b.yb(v,k)):(b.m.pa(k),b.l.notify(k,b.l.G))},{o:k});return{controlsDescendantBindings:!0}}};b.I.Sa[c]=!1;b.m.ca[c]=!0}a("if");a("ifnot",!1,!0);a("with",!0)})();var S={};b.h.options={init:a=>{if(!a.matches("SELECT"))throw Error("options binding applies only to SELECT elements");let c=a.length;for(;c--;)a.remove(c);return{controlsDescendantBindings:!0}},update:(a,c,d)=>{var f=a.multiple,k=0!=a.length&&f?a.scrollTop:null,n=b.g.j(c()), !0));q?(t||c.m.ta(l,c.g.xa(n)),c.yb(u,l)):(c.m.pa(l),c.l.notify(l,c.l.G))},{o:l});return{controlsDescendantBindings:!0}}};c.I.Sa[b]=!1;c.m.ca[b]=!0}a("if");a("ifnot",!1,!0);a("with",!0)})();var U={};c.h.options={init:a=>{if(!a.matches("SELECT"))throw Error("options binding applies only to SELECT elements");let b=a.length;for(;b--;)a.remove(b);return{controlsDescendantBindings:!0}},update:(a,b,d)=>{var f=a.multiple,l=0!=a.length&&f?a.scrollTop:null,k=c.g.j(b()),e=d.get("valueAllowUnset")&&d.has("value"),
e=d.get("valueAllowUnset")&&d.has("value"),g={},h=[];c=()=>Array.from(a.options).filter(l=>l.selected);var t=(l,q,v)=>{var x=typeof q;return"function"==x?q(l):"string"==x?l[q]:v},r=(l,q)=>{m&&e?b.l.notify(a,b.l.G):h.length&&(l=h.includes(b.F.R(q[0])),q[0].selected=l,m&&!l&&b.u.S(b.g.Sb,null,[a,"change"]))};e||(f?h=c().map(b.F.R):0<=a.selectedIndex&&h.push(b.F.R(a.options[a.selectedIndex])));if(n){"undefined"==typeof n.length&&(n=[n]);var p=n.filter(l=>l||null==l);d.has("optionsCaption")&&(n=b.g.j(d.get("optionsCaption")), g={},h=[];b=()=>Array.from(a.options).filter(q=>q.selected);var n=(q,t,u)=>{var w=typeof t;return"function"==w?t(q):"string"==w?q[t]:u},p=(q,t)=>{r&&e?c.l.notify(a,c.l.G):h.length&&(q=h.includes(c.F.R(t[0])),t[0].selected=q,r&&!q&&c.u.S(c.g.Sb,null,[a,"change"]))};e||(f?h=b().map(c.F.R):0<=a.selectedIndex&&h.push(c.F.R(a.options[a.selectedIndex])));if(k){"undefined"==typeof k.length&&(k=[k]);var m=k.filter(q=>q||null==q);d.has("optionsCaption")&&(k=c.g.j(d.get("optionsCaption")),null!==k&&void 0!==
null!==n&&void 0!==n&&p.unshift(S))}var m=!1;g.beforeRemove=l=>a.removeChild(l);n=r;d.has("optionsAfterRender")&&"function"==typeof d.get("optionsAfterRender")&&(n=(l,q)=>{r(l,q);b.u.S(d.get("optionsAfterRender"),null,[q[0],l!==S?l:void 0])});b.g.Pb(a,p,(l,q,v)=>{v.length&&(h=!e&&v[0].selected?[b.F.R(v[0])]:[],m=!0);q=a.ownerDocument.createElement("option");l===S?(b.g.jb(q,d.get("optionsCaption")),b.F.Na(q,void 0)):(v=t(l,d.get("optionsValue"),l),b.F.Na(q,b.g.j(v)),l=t(l,d.get("optionsText"),v),b.g.jb(q, k&&m.unshift(U))}var r=!1;g.beforeRemove=q=>a.removeChild(q);k=p;d.has("optionsAfterRender")&&"function"==typeof d.get("optionsAfterRender")&&(k=(q,t)=>{p(q,t);c.u.S(d.get("optionsAfterRender"),null,[t[0],q!==U?q:void 0])});c.g.Pb(a,m,(q,t,u)=>{u.length&&(h=!e&&u[0].selected?[c.F.R(u[0])]:[],r=!0);t=a.ownerDocument.createElement("option");q===U?(c.g.jb(t,d.get("optionsCaption")),c.F.Na(t,void 0)):(u=n(q,d.get("optionsValue"),q),c.F.Na(t,c.g.j(u)),q=n(q,d.get("optionsText"),u),c.g.jb(t,q));return[t]},
l));return[q]},g,n);e||(p=h.length,(f?p&&c().length<p:p&&0<=a.selectedIndex?b.F.R(a.options[a.selectedIndex])!==h[0]:p||0<=a.selectedIndex)&&b.u.S(b.g.Sb,null,[a,"change"]));(e||b.u.eb())&&b.l.notify(a,b.l.G);k&&20<Math.abs(k-a.scrollTop)&&(a.scrollTop=k)}};b.h.options.gb=b.g.i.Z();b.h.style={update:(a,c)=>{c=b.g.j(c()||{});b.g.O(c,(d,f)=>{f=b.g.j(f);if(null==f||!1===f)f="";if(/^--/.test(d))a.style.setProperty(d,f);else{d=d.replace(/-(\w)/g,(n,e)=>e.toUpperCase());var k=a.style[d];a.style[d]=f;f=== g,k);e||(m=h.length,(f?m&&b().length<m:m&&0<=a.selectedIndex?c.F.R(a.options[a.selectedIndex])!==h[0]:m||0<=a.selectedIndex)&&c.u.S(c.g.Sb,null,[a,"change"]));(e||c.u.eb())&&c.l.notify(a,c.l.G);l&&20<Math.abs(l-a.scrollTop)&&(a.scrollTop=l)}};c.h.options.gb=c.g.i.Z();c.h.style={update:(a,b)=>{c.g.O(c.g.j(b()||{}),(d,f)=>{f=c.g.j(f);if(null==f||!1===f)f="";if(/^--/.test(d))a.style.setProperty(d,f);else{d=d.replace(/-(\w)/g,(k,e)=>e.toUpperCase());var l=a.style[d];a.style[d]=f;f===l||a.style[d]!=l||
k||a.style[d]!=k||isNaN(f)||(a.style[d]=f+"px")}})}};b.h.submit={init:(a,c,d,f,k)=>{if("function"!=typeof c())throw Error("The value for a submit binding must be a function");a.addEventListener("submit",n=>{var e=c();try{var g=e.call(k.$data,a)}finally{!0!==g&&n.preventDefault()}})}};b.h.text={init:()=>({controlsDescendantBindings:!0}),update:(a,c)=>{8===a.nodeType&&(a.text||a.after(a.text=N.createTextNode("")),a=a.text);b.g.jb(a,c())}};b.m.ca.text=!0;b.h.textInput={init:(a,c,d)=>{var f=a.value,k, isNaN(f)||(a.style[d]=f+"px")}})}};c.h.submit={init:(a,b,d,f,l)=>{if("function"!=typeof b())throw Error("The value for a submit binding must be a function");a.addEventListener("submit",k=>{var e=b();try{var g=e.call(l.$data,a)}finally{!0!==g&&k.preventDefault()}})}};c.h.text={init:()=>({controlsDescendantBindings:!0}),update:(a,b)=>{8===a.nodeType&&(a.text||a.after(a.text=M.createTextNode("")),a=a.text);c.g.jb(a,b())}};c.m.ca.text=!0;c.h.textInput={init:(a,b,d)=>{var f=a.value,l,k,e=()=>{clearTimeout(l);
n,e=()=>{clearTimeout(k);n=k=void 0;var h=a.value;f!==h&&(f=h,b.I.ob(c(),d,"textInput",h))},g=()=>{var h=b.g.j(c());null==h&&(h="");void 0!==n&&h===n?setTimeout(g,4):a.value!==h&&(a.value=h,f=a.value)};a.addEventListener("input",e);a.addEventListener("change",e);a.addEventListener("blur",e);b.s(g,{o:a})}};b.I.mb.add("textInput");b.h.textinput={preprocess:(a,c,d)=>d("textInput",a)};b.h.value={init:(a,c,d)=>{var f=a.matches("SELECT"),k=a.matches("INPUT");if(!k||"checkbox"!=a.type&&"radio"!=a.type){var n= k=l=void 0;var h=a.value;f!==h&&(f=h,c.I.ob(b(),d,"textInput",h))},g=()=>{var h=c.g.j(b());null==h&&(h="");void 0!==k&&h===k?setTimeout(g,4):a.value!==h&&(a.value=h,f=a.value)};a.addEventListener("input",e);a.addEventListener("change",e);a.addEventListener("blur",e);c.s(g,{o:a})}};c.I.mb.add("textInput");c.h.textinput={preprocess:(a,b,d)=>d("textInput",a)};c.h.value={init:(a,b,d)=>{var f=a.matches("SELECT"),l=a.matches("INPUT");if(!l||"checkbox"!=a.type&&"radio"!=a.type){var k=new Set,e=d.get("valueUpdate"),
new Set,e=d.get("valueUpdate"),g=null;e&&("string"==typeof e?n.add(e):e.forEach(p=>n.add(p)),n.delete("change"));var h=()=>{g=null;var p=c(),m=b.F.R(a);b.I.ob(p,d,"value",m)};n.forEach(p=>{var m=h;(p||"").startsWith("after")&&(m=()=>{g=b.F.R(a);setTimeout(h,0)},p=p.slice(5));a.addEventListener(p,m)});var t=k&&"file"==a.type?()=>{var p=b.g.j(c());null==p||""===p?a.value="":b.u.S(h)}:()=>{var p=b.g.j(c()),m=b.F.R(a);if(null!==g&&p===g)setTimeout(t,0);else if(p!==m||void 0===m)f?(m=d.get("valueAllowUnset"), g=null,h=()=>{g=null;var m=b(),r=c.F.R(a);c.I.ob(m,d,"value",r)};e&&("string"==typeof e?k.add(e):e.forEach(m=>k.add(m)),k.delete("change"));k.forEach(m=>{var r=h;(m||"").startsWith("after")&&(r=()=>{g=c.F.R(a);setTimeout(h,0)},m=m.slice(5));a.addEventListener(m,r)});var n=l&&"file"==a.type?()=>{var m=c.g.j(b());null==m||""===m?a.value="":c.u.S(h)}:()=>{var m=c.g.j(b()),r=c.F.R(a);if(null!==g&&m===g)setTimeout(n,0);else if(m!==r||void 0===r)f?(r=d.get("valueAllowUnset"),c.F.Na(a,m,r),r||m===c.F.R(a)||
b.F.Na(a,p,m),m||p===b.F.R(a)||b.u.S(h)):b.F.Na(a,p)};if(f){var r;b.l.subscribe(a,b.l.G,()=>{r?d.get("valueAllowUnset")?t():h():(a.addEventListener("change",h),r=b.s(t,{o:a}))},null,{notifyImmediately:!0})}else a.addEventListener("change",h),b.s(t,{o:a})}else b.wb(a,{checkedValue:c})},update:()=>{}};b.I.mb.add("value");b.h.visible={update:(a,c)=>{c=b.g.j(c());var d="none"!=a.style.display;c&&!d?a.style.display="":d&&!c&&(a.style.display="none")}};b.h.hidden={update:(a,c)=>a.hidden=!!b.g.j(c())};(function(a){b.h[a]= c.u.S(h)):c.F.Na(a,m)};if(f){var p;c.l.subscribe(a,c.l.G,()=>{p?d.get("valueAllowUnset")?n():h():(a.addEventListener("change",h),p=c.s(n,{o:a}))},null,{notifyImmediately:!0})}else a.addEventListener("change",h),c.s(n,{o:a})}else c.wb(a,{checkedValue:b})},update:()=>{}};c.I.mb.add("value");c.h.visible={update:(a,b)=>{b=c.g.j(b());var d="none"!=a.style.display;b&&!d?a.style.display="":d&&!b&&(a.style.display="none")}};c.h.hidden={update:(a,b)=>a.hidden=!!c.g.j(b())};(function(a){c.h[a]={init:function(b,
{init:function(c,d,f,k,n){return b.h.event.init.call(this,c,()=>({[a]:d()}),f,k,n)}}})("click");(()=>{let a=b.g.i.Z();class c{constructor(f){this.Xa=f}Ja(...f){let k=this.Xa;if(!f.length)return b.g.i.get(k,a)||(11===this.L?k.content:1===this.L?k:void 0);b.g.i.set(k,a,f[0])}}class d extends c{constructor(f){super(f);f&&(this.L=f.matches("TEMPLATE")&&f.content?f.content.nodeType:1)}}b.Ka={Xa:d,Qa:c}})();(()=>{var a=(e,g,h)=>{var t;for(g=b.m.nextSibling(g);e&&(t=e)!==g;)e=b.m.nextSibling(t),h(t,e)}, d,f,l,k){return c.h.event.init.call(this,b,()=>({[a]:d()}),f,l,k)}}})("click");(()=>{let a=c.g.i.Z();class b{constructor(f){this.Xa=f}Ja(...f){let l=this.Xa;if(!f.length)return c.g.i.get(l,a)||(11===this.L?l.content:1===this.L?l:void 0);c.g.i.set(l,a,f[0])}}class d extends b{constructor(f){super(f);f&&(this.L=f.matches("TEMPLATE")&&f.content?f.content.nodeType:1)}}c.Ka={Xa:d,Qa:b}})();(()=>{var a=(e,g,h)=>{var n;for(g=c.m.nextSibling(g);e&&(n=e)!==g;)e=c.m.nextSibling(n),h(n,e)},b=(e,g)=>{if(e.length){var h=
c=(e,g)=>{if(e.length){var h=e[0],t=h.parentNode;a(h,e[e.length-1],r=>{1!==r.nodeType&&8!==r.nodeType||b.xb(g,r)});b.g.Aa(e,t)}},d=(e,g,h,t)=>{var r=(e&&(e.nodeType?e:0<e.length?e[0]:null)||h||{}).ownerDocument;if("string"==typeof h){r=r||N;r=r.getElementById(h);if(!r)throw Error("Cannot find template with ID "+h);h=new b.Ka.Xa(r)}else if([1,8].includes(h.nodeType))h=new b.Ka.Qa(h);else throw Error("Unknown template type: "+h);h=(h=h.Ja?h.Ja():null)?[...h.cloneNode(!0).childNodes]:null;if("number"!= e[0],n=h.parentNode;a(h,e[e.length-1],p=>{1!==p.nodeType&&8!==p.nodeType||c.xb(g,p)});c.g.Aa(e,n)}},d=(e,g,h,n)=>{var p=(e&&(e.nodeType?e:0<e.length?e[0]:null)||h||{}).ownerDocument;if("string"==typeof h){p=p||M;p=p.getElementById(h);if(!p)throw Error("Cannot find template with ID "+h);h=new c.Ka.Xa(p)}else if([1,8].includes(h.nodeType))h=new c.Ka.Qa(h);else throw Error("Unknown template type: "+h);h=(h=h.Ja?h.Ja():null)?[...h.cloneNode(!0).childNodes]:null;if("number"!=typeof h.length||0<h.length&&
typeof h.length||0<h.length&&"number"!=typeof h[0].nodeType)throw Error("Template engine must return an array of DOM nodes");r=!1;switch(g){case "replaceChildren":b.m.ta(e,h);r=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+g);}r&&(c(h,t),"replaceChildren"==g&&b.l.notify(e,b.l.G));return h},f=(e,g,h)=>b.T(e)?e():"function"===typeof e?e(g,h):e;b.rc=function(e,g,h,t){h=h||{};var r=r||"replaceChildren";if(t){var p=t.nodeType?t:0<t.length?t[0]:null;return b.s(()=>{var m= "number"!=typeof h[0].nodeType)throw Error("Template engine must return an array of DOM nodes");p=!1;switch(g){case "replaceChildren":c.m.ta(e,h);p=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+g);}p&&(b(h,n),"replaceChildren"==g&&c.l.notify(e,c.l.G));return h},f=(e,g,h)=>c.T(e)?e():"function"===typeof e?e(g,h):e;c.rc=function(e,g,h,n){h=h||{};var p=p||"replaceChildren";if(n){var m=n.nodeType?n:0<n.length?n[0]:null;return c.s(()=>{var r=g instanceof c.ea?g:new c.ea(g,
g instanceof b.ea?g:new b.ea(g,null,null,null,{exportDependencies:!0}),l=f(e,m.$data,m);d(t,r,l,m,h)},{oa:()=>!p||!b.g.Za(p),o:p})}console.log("no targetNodeOrNodeArray")};b.sc=(e,g,h,t,r)=>{function p(u,y){b.u.S(b.g.Pb,null,[t,u,q,h,v,y]);b.l.notify(t,b.l.G)}var m,l=h.as,q=(u,y)=>{m=r.createChildContext(u,{as:l,extend:B=>{B.$index=y;l&&(B[l+"Index"]=y)}});u=f(e,u,m);return d(t,"ignoreTargetNode",u,m,h)},v=(u,y)=>{c(y,m);m=null};if(!h.beforeRemove&&b.Jb(g)){p(g.P());var x=g.subscribe(u=>{p(g(),u)}, null,null,null,{exportDependencies:!0}),q=f(e,r.$data,r);d(n,p,q,r,h)},{oa:()=>!m||!c.g.Za(m),o:m})}console.log("no targetNodeOrNodeArray")};c.sc=(e,g,h,n,p)=>{function m(v,z){c.u.S(c.g.Pb,null,[n,v,t,h,u,z]);c.l.notify(n,c.l.G)}var r,q=h.as,t=(v,z)=>{r=p.createChildContext(v,{as:q,extend:C=>{C.$index=z;q&&(C[q+"Index"]=z)}});v=f(e,v,r);return d(n,"ignoreTargetNode",v,r,h)},u=(v,z)=>{b(z,r);r=null};if(!h.beforeRemove&&c.Jb(g)){m(g.P());var w=g.subscribe(v=>{m(g(),v)},null,"arrayChange");w.o(n);return w}return c.s(()=>
null,"arrayChange");x.o(t);return x}return b.s(()=>{var u=b.g.j(g)||[];"undefined"==typeof u.length&&(u=[u]);p(u)},{o:t})};var k=b.g.i.Z(),n=b.g.i.Z();b.h.template={init:(e,g)=>{g=b.g.j(g());if("string"==typeof g||"name"in g)b.m.pa(e);else if("nodes"in g){g=g.nodes||[];if(b.T(g))throw Error('The "nodes" option must be a plain, non-observable array.');let h=g[0]?.parentNode;h&&b.g.i.get(h,n)||(h=b.g.Lb(g),b.g.i.set(h,n,!0));(new b.Ka.Qa(e)).Ja(h)}else if(g=b.m.childNodes(e),g.length)g=b.g.Lb(g),(new b.Ka.Qa(e)).Ja(g); {var v=c.g.j(g)||[];"undefined"==typeof v.length&&(v=[v]);m(v)},{o:n})};var l=c.g.i.Z(),k=c.g.i.Z();c.h.template={init:(e,g)=>{g=c.g.j(g());if("string"==typeof g||"name"in g)c.m.pa(e);else if("nodes"in g){g=g.nodes||[];if(c.T(g))throw Error('The "nodes" option must be a plain, non-observable array.');let h=g[0]?.parentNode;h&&c.g.i.get(h,k)||(h=c.g.Lb(g),c.g.i.set(h,k,!0));(new c.Ka.Qa(e)).Ja(h)}else if(g=c.m.childNodes(e),g.length)g=c.g.Lb(g),(new c.Ka.Qa(e)).Ja(g);else throw Error("Anonymous template defined, but no template content was provided");
else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:(e,g,h,t,r)=>{var p=g();g=b.g.j(p);h=!0;t=null;"string"==typeof g?g={}:(p="name"in g?g.name:e,"if"in g&&(h=b.g.j(g["if"])),h&&"ifnot"in g&&(h=!b.g.j(g.ifnot)),h&&!p&&(h=!1));"foreach"in g?t=b.sc(p,h&&g.foreach||[],g,e,r):h?(h=r,"data"in g&&(h=r.createChildContext(g.data,{as:g.as,exportDependencies:!0})),t=b.rc(p,h,g,e)):b.m.pa(e);r=t;b.g.i.get(e,k)?.A?.();b.g.i.set(e, return{controlsDescendantBindings:!0}},update:(e,g,h,n,p)=>{var m=g();g=c.g.j(m);h=!0;n=null;"string"==typeof g?g={}:(m="name"in g?g.name:e,"if"in g&&(h=c.g.j(g["if"])),h&&"ifnot"in g&&(h=!c.g.j(g.ifnot)),h&&!m&&(h=!1));"foreach"in g?n=c.sc(m,h&&g.foreach||[],g,e,p):h?(h=p,"data"in g&&(h=p.createChildContext(g.data,{as:g.as,exportDependencies:!0})),n=c.rc(m,h,g,e)):c.m.pa(e);p=n;c.g.i.get(e,l)?.A?.();c.g.i.set(e,l,!p||p.isActive&&!p.isActive()?void 0:p)}};c.I.Sa.template=e=>{e=c.I.nc(e);return 1==
k,!r||r.isActive&&!r.isActive()?void 0:r)}};b.I.Sa.template=e=>{e=b.I.nc(e);return 1==e.length&&e[0].unknown||b.I.lc(e,"name")?null:"This template engine does not support anonymous templates nested within its templates"};b.m.ca.template=!0})();b.g.Hb=(a,c,d)=>{var f=0,k,n=c.length;n&&a.every(e=>{k=c.findIndex(g=>e.value===g.value);0<=k&&(e.moved=c[k].index,c[k].moved=e.index,c.splice(k,1),f=k=0,--n);f+=n;return n&&(!d||f<d)})};b.g.Cb=(()=>{var a=(c,d,f,k,n)=>{for(var e=Math.min,g=Math.max,h=[],t= e.length&&e[0].unknown||c.I.lc(e,"name")?null:"This template engine does not support anonymous templates nested within its templates"};c.m.ca.template=!0})();c.g.Hb=(a,b,d)=>{var f=0,l,k=b.length;k&&a.every(e=>{l=b.findIndex(g=>e.value===g.value);0<=l&&(e.moved=b[l].index,b[l].moved=e.index,b.splice(l,1),f=l=0,--k);f+=k;return k&&(!d||f<d)})};c.g.Cb=(()=>{var a=(b,d,f,l,k)=>{for(var e=Math.min,g=Math.max,h=[],n=-1,p=b.length,m,r=d.length,q=r-p||1,t=p+r+1,u,w,v;++n<=p;)for(w=u,h.push(u=[]),v=e(r,n+
-1,r=c.length,p,m=d.length,l=m-r||1,q=r+m+1,v,x,u;++t<=r;)for(x=v,h.push(v=[]),u=e(m,t+l),p=g(0,t-1);p<=u;p++)v[p]=p?t?c[t-1]===d[p-1]?x[p-1]:e(x[p]||q,v[p-1]||q)+1:p+1:t+1;e=[];g=[];l=[];t=r;for(p=m;t||p;)m=h[t][p]-1,p&&m===h[t][p-1]?g.push(e[e.length]={status:f,value:d[--p],index:p}):t&&m===h[t-1][p]?l.push(e[e.length]={status:k,value:c[--t],index:t}):(--p,--t,n.sparse||e.push({status:"retained",value:d[p]}));b.g.Hb(l,g,!n.dontLimitMoves&&10*r);return e.reverse()};return(c,d,f)=>{f="boolean"=== q),m=g(0,n-1);m<=v;m++)u[m]=m?n?b[n-1]===d[m-1]?w[m-1]:e(w[m]||t,u[m-1]||t)+1:m+1:n+1;e=[];g=[];q=[];n=p;for(m=r;n||m;)r=h[n][m]-1,m&&r===h[n][m-1]?g.push(e[e.length]={status:f,value:d[--m],index:m}):n&&r===h[n-1][m]?q.push(e[e.length]={status:l,value:b[--n],index:n}):(--m,--n,k.sparse||e.push({status:"retained",value:d[m]}));c.g.Hb(q,g,!k.dontLimitMoves&&10*p);return e.reverse()};return(b,d,f)=>{f="boolean"===typeof f?{dontLimitMoves:f}:f||{};b=b||[];d=d||[];return b.length<d.length?a(b,d,"added",
typeof f?{dontLimitMoves:f}:f||{};c=c||[];d=d||[];return c.length<d.length?a(c,d,"added","deleted",f):a(d,c,"deleted","added",f)}})();(()=>{function a(f,k,n,e,g){var h=[],t=b.s(()=>{var r=k(n,g,b.g.Aa(h,f))||[];if(0<h.length){var p=h.nodeType?[h]:h;if(0<p.length){var m=p[0],l=m.parentNode,q;var v=0;for(q=r.length;v<q;v++)l.insertBefore(r[v],m);v=0;for(q=p.length;v<q;v++)b.removeNode(p[v])}e&&b.u.S(e,null,[n,r,g])}h.length=0;h.push(...r)},{o:f,oa:()=>!!h.find(b.g.Za)});return{N:h,Va:t.isActive()?t: "deleted",f):a(d,b,"deleted","added",f)}})();(()=>{function a(f,l,k,e,g){var h=[],n=c.s(()=>{var p=l(k,g,c.g.Aa(h,f))||[];if(0<h.length){var m=h.nodeType?[h]:h;if(0<m.length){var r=m[0],q=r.parentNode;p.forEach(t=>q.insertBefore(t,r));m.forEach(t=>c.removeNode(t))}e&&c.u.S(e,null,[k,p,g])}h.length=0;h.push(...p)},{o:f,oa:()=>!!h.find(c.g.Za)});return{N:h,Va:n.isActive()?n:void 0}}var b=c.g.i.Z(),d=c.g.i.Z();c.g.Pb=(f,l,k,e,g,h)=>{l=l||[];"undefined"==typeof l.length&&(l=[l]);e=e||{};var n=c.g.i.get(f,
void 0}}var c=b.g.i.Z(),d=b.g.i.Z();b.g.Pb=(f,k,n,e,g,h)=>{k=k||[];"undefined"==typeof k.length&&(k=[k]);e=e||{};var t=b.g.i.get(f,c),r=[],p=0,m=0,l=[],q=[],v=[],x=0,u=w=>{A={da:w,Ea:b.ba(m++)};r.push(A)},y=w=>{A=t[w];A.Ea(m++);b.g.Aa(A.N,f);r.push(A)};if(t){if(!h||t&&t._countWaitingForRemove)h=b.g.Cb(Array.prototype.map.call(t,E=>E.da),k,{dontLimitMoves:e.dontLimitMoves,sparse:!0});let w,C;for(h.forEach(E=>{w=E.moved;C=E.index;switch(E.status){case "deleted":for(;p<C;)y(p++);void 0===w&&(A=t[p], b),p=[],m=0,r=0,q=[],t=[],u=[],w=0,v=x=>{A={da:x,Ea:c.ba(r++)};p.push(A)},z=x=>{A=n[x];A.Ea(r++);c.g.Aa(A.N,f);p.push(A)};if(n){if(!h||n&&n._countWaitingForRemove)h=c.g.Cb(Array.prototype.map.call(n,E=>E.da),l,{dontLimitMoves:e.dontLimitMoves,sparse:!0});let x,I;for(h.forEach(E=>{x=E.moved;I=E.index;switch(E.status){case "deleted":for(;m<I;)z(m++);void 0===x&&(A=n[m],A.Va&&(A.Va.A(),A.Va=void 0),c.g.Aa(A.N,f).length&&(e.beforeRemove&&(p.push(A),w++,A.da===d?A=null:u[A.Ea.P()]=A),A&&q.push.apply(q,
A.Va&&(A.Va.A(),A.Va=void 0),b.g.Aa(A.N,f).length&&(e.beforeRemove&&(r.push(A),x++,A.da===d?A=null:v[A.Ea.P()]=A),A&&l.push.apply(l,A.N)));p++;break;case "added":for(;m<C;)y(p++);void 0!==w?(q.push(r.length),y(w)):u(E.value)}});m<k.length;)y(p++);r._countWaitingForRemove=x}else k.forEach(u);b.g.i.set(f,c,r);l.forEach(e.beforeRemove?b.fa:b.removeNode);var B,D,F=w=>{b.m.ic(f,w,B);B=w};h=f.ownerDocument.activeElement;if(q.length)for(;void 0!=(k=q.shift());){var A=r[k];for(B=void 0;k;)if((D=r[--k].N)&& A.N)));m++;break;case "added":for(;r<I;)z(m++);void 0!==x?(t.push(p.length),z(x)):v(E.value)}});r<l.length;)z(m++);p._countWaitingForRemove=w}else l.forEach(v);c.g.i.set(f,b,p);q.forEach(e.beforeRemove?c.fa:c.removeNode);var C,H,O=x=>{c.m.ic(f,x,H);H=x};h=f.ownerDocument.activeElement;if(t.length)for(;void 0!=(C=t.shift());){var A=p[C];for(H=void 0;C;)if(l=p[--C].N,l?.length){H=l[l.length-1];break}A.N.forEach(O)}p.forEach(x=>{x.N||c.g.extend(x,a(f,k,x.da,g,x.Ea));x.N.forEach(O);!x.hc&&g&&(g(x.da,
D.length){B=D[D.length-1];break}A.N.forEach(F)}r.forEach(w=>{w.N||b.g.extend(w,a(f,n,w.da,g,w.Ea));w.N.forEach(F);!w.hc&&g&&(g(w.da,w.N,w.Ea),w.hc=!0,B=w.N[w.N.length-1])});f.ownerDocument.activeElement!=h&&h?.focus();((w,C)=>{if(w)for(var E=0,I=C.length;E<I;E++)C[E]&&C[E].N.forEach(L=>w(L,E,C[E].da))})(e.beforeRemove,v);v.forEach(w=>w&&(w.da=d))}})();T.ko=P})(this); x.N,x.Ea),x.hc=!0,H=x.N[x.N.length-1])});f.ownerDocument.activeElement!=h&&h?.focus();((x,I)=>{x&&I.forEach(E=>E?.N.forEach(na=>x(na,C,E.da)))})(e.beforeRemove,u);u.forEach(x=>x&&(x.da=d))}})();V.ko=R})(this);

View file

@ -1,13 +1,15 @@
(() => {
// Hide or don't minify context properties, see https://github.com/knockout/knockout/issues/2294 // Hide or don't minify context properties, see https://github.com/knockout/knockout/issues/2294
var contextSubscribable = Symbol('_subscribable'); const contextSubscribable = Symbol('_subscribable'),
var contextAncestorBindingInfo = Symbol('_ancestorBindingInfo'); contextAncestorBindingInfo = Symbol('_ancestorBindingInfo'),
var contextDataDependency = Symbol('_dataDependency'); contextDataDependency = Symbol('_dataDependency'),
inheritParentVm = {},
boundElementDomDataKey = ko.utils.domData.nextKey();
ko.bindingHandlers = {}; ko.bindingHandlers = {};
var inheritParentVm = {};
// The ko.bindingContext constructor is only called directly to create the root context. For child // The ko.bindingContext constructor is only called directly to create the root context. For child
// contexts, use bindingContext.createChildContext or bindingContext.extend. // contexts, use bindingContext.createChildContext or bindingContext.extend.
ko.bindingContext = class { ko.bindingContext = class {
@ -133,8 +135,6 @@
} }
}; };
var boundElementDomDataKey = ko.utils.domData.nextKey();
function asyncContextDispose(node) { function asyncContextDispose(node) {
var bindingInfo = ko.utils.domData.get(node, boundElementDomDataKey), var bindingInfo = ko.utils.domData.get(node, boundElementDomDataKey),
asyncContext = bindingInfo?.asyncContext; asyncContext = bindingInfo?.asyncContext;
@ -467,4 +467,3 @@
ko.exportSymbol('applyBindings', ko.applyBindings); ko.exportSymbol('applyBindings', ko.applyBindings);
ko.exportSymbol('applyBindingAccessorsToNode', ko.applyBindingAccessorsToNode); ko.exportSymbol('applyBindingAccessorsToNode', ko.applyBindingAccessorsToNode);
ko.exportSymbol('dataFor', ko.dataFor); ko.exportSymbol('dataFor', ko.dataFor);
})();

View file

@ -1,4 +1,4 @@
(() => {
const defaultBindingAttributeName = "data-bind", const defaultBindingAttributeName = "data-bind",
bindingCache = new Map, bindingCache = new Map,
@ -21,8 +21,8 @@
return node.getAttribute(defaultBindingAttributeName) != null; return node.getAttribute(defaultBindingAttributeName) != null;
case 8: // Comment node case 8: // Comment node
return ko.virtualElements.hasBindingValue(node); return ko.virtualElements.hasBindingValue(node);
default: return false;
} }
return false;
} }
getBindingAccessors(node, bindingContext) { getBindingAccessors(node, bindingContext) {
@ -51,5 +51,3 @@
return null; return null;
} }
}; };
})();

View file

@ -12,12 +12,11 @@ function makeEventHandlerShortcut(eventName) {
ko.bindingHandlers['event'] = { ko.bindingHandlers['event'] = {
'init' : (element, valueAccessor, allBindings, viewModel, bindingContext) => { 'init' : (element, valueAccessor, allBindings, viewModel, bindingContext) => {
var eventsToHandle = valueAccessor() || {}; ko.utils.objectForEach(valueAccessor() || {}, eventName => {
ko.utils.objectForEach(eventsToHandle, eventName => {
if (typeof eventName == "string") { if (typeof eventName == "string") {
element.addEventListener(eventName, (...args) => { element.addEventListener(eventName, (...args) => {
var handlerReturnValue; var handlerReturnValue,
var handlerFunction = valueAccessor()[eventName]; handlerFunction = valueAccessor()[eventName];
if (handlerFunction) { if (handlerFunction) {
try { try {
viewModel = bindingContext['$data']; viewModel = bindingContext['$data'];

View file

@ -1,8 +1,8 @@
// "foreach: someExpression" is equivalent to "template: { foreach: someExpression }" // "foreach: someExpression" is equivalent to "template: { foreach: someExpression }"
// "foreach: { data: someExpression, afterAdd: myfn }" is equivalent to "template: { foreach: someExpression, afterAdd: myfn }" // "foreach: { data: someExpression, afterAdd: myfn }" is equivalent to "template: { foreach: someExpression, afterAdd: myfn }"
ko.bindingHandlers['foreach'] = { ko.bindingHandlers['foreach'] = {
makeTemplateValueAccessor: valueAccessor => { makeTemplateValueAccessor: valueAccessor =>
return () => { () => {
var modelValue = valueAccessor(), var modelValue = valueAccessor(),
// Unwrap without setting a dependency here // Unwrap without setting a dependency here
unwrappedValue = ko.isObservable(modelValue) ? modelValue.peek() : modelValue; unwrappedValue = ko.isObservable(modelValue) ? modelValue.peek() : modelValue;
@ -20,7 +20,6 @@ ko.bindingHandlers['foreach'] = {
'as': unwrappedValue['as'], 'as': unwrappedValue['as'],
'beforeRemove': unwrappedValue['beforeRemove'] 'beforeRemove': unwrappedValue['beforeRemove']
}; };
};
}, },
'init': (element, valueAccessor) => 'init': (element, valueAccessor) =>
ko.bindingHandlers['template']['init'](element, ko.bindingHandlers['foreach'].makeTemplateValueAccessor(valueAccessor)) ko.bindingHandlers['template']['init'](element, ko.bindingHandlers['foreach'].makeTemplateValueAccessor(valueAccessor))

View file

@ -1,5 +1,5 @@
var hasfocusUpdatingProperty = '__ko_hasfocusUpdating'; const hasfocusUpdatingProperty = '__ko_hasfocusUpdating',
var hasfocusLastValue = '__ko_hasfocusLastValue'; hasfocusLastValue = '__ko_hasfocusLastValue';
ko.bindingHandlers['hasfocus'] = { ko.bindingHandlers['hasfocus'] = {
'init': (element, valueAccessor, allBindings) => { 'init': (element, valueAccessor, allBindings) => {
var handleElementFocusChange = isFocused => { var handleElementFocusChange = isFocused => {
@ -11,8 +11,7 @@ ko.bindingHandlers['hasfocus'] = {
// Discussion at https://github.com/SteveSanderson/knockout/pull/352 // Discussion at https://github.com/SteveSanderson/knockout/pull/352
element[hasfocusUpdatingProperty] = true; element[hasfocusUpdatingProperty] = true;
isFocused = (element.ownerDocument.activeElement === element); isFocused = (element.ownerDocument.activeElement === element);
var modelValue = valueAccessor(); ko.expressionRewriting.writeValueToProperty(valueAccessor(), allBindings, 'hasfocus', isFocused, true);
ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'hasfocus', isFocused, true);
//cache the latest value, so we can avoid unnecessarily calling focus/blur in the update function //cache the latest value, so we can avoid unnecessarily calling focus/blur in the update function
element[hasfocusLastValue] = isFocused; element[hasfocusLastValue] = isFocused;
@ -21,13 +20,10 @@ ko.bindingHandlers['hasfocus'] = {
var handleElementFocusIn = handleElementFocusChange.bind(null, true); var handleElementFocusIn = handleElementFocusChange.bind(null, true);
var handleElementFocusOut = handleElementFocusChange.bind(null, false); var handleElementFocusOut = handleElementFocusChange.bind(null, false);
var registerEventHandler = (event, handler) => element.addEventListener("focus", handleElementFocusIn);
element.addEventListener(event, handler); element.addEventListener("focusin", handleElementFocusIn);
element.addEventListener("blur", handleElementFocusOut);
registerEventHandler("focus", handleElementFocusIn); element.addEventListener("focusout", handleElementFocusOut);
registerEventHandler("focusin", handleElementFocusIn);
registerEventHandler("blur", handleElementFocusOut);
registerEventHandler("focusout", handleElementFocusOut);
// Assume element is not focused (prevents "blur" being called initially) // Assume element is not focused (prevents "blur" being called initially)
element[hasfocusLastValue] = false; element[hasfocusLastValue] = false;

View file

@ -1,8 +1,8 @@
ko.bindingHandlers['html'] = { ko.bindingHandlers['html'] = {
'init': () => { 'init': () => (
// Prevent binding on the dynamically-injected HTML (as developers are unlikely to expect that, and it has security implications) // Prevent binding on the dynamically-injected HTML (as developers are unlikely to expect that, and it has security implications)
return { 'controlsDescendantBindings': true }; { 'controlsDescendantBindings': true }
}, ),
'update': (element, valueAccessor) => { 'update': (element, valueAccessor) => {
// setHtml will unwrap the value if needed // setHtml will unwrap the value if needed
ko.utils.emptyDomNode(element); ko.utils.emptyDomNode(element);

View file

@ -25,13 +25,12 @@ function makeWithIfBinding(bindingKey, isWith, isNot) {
if (shouldDisplay) { if (shouldDisplay) {
contextOptions['dataDependency'] = ko.dependencyDetection.computed(); contextOptions['dataDependency'] = ko.dependencyDetection.computed();
if (isWith) { childContext = isWith
childContext = bindingContext['createChildContext'](typeof value == "function" ? value : valueAccessor, contextOptions); ? bindingContext['createChildContext'](typeof value == "function" ? value : valueAccessor, contextOptions)
} else if (ko.dependencyDetection.getDependenciesCount()) { : (ko.dependencyDetection.getDependenciesCount()
childContext = bindingContext['extend'](null, contextOptions); ? bindingContext['extend'](null, contextOptions)
} else { : bindingContext
childContext = bindingContext; );
}
} }
// Save a copy of the inner nodes on the initial update, but only if we have dependencies. // Save a copy of the inner nodes on the initial update, but only if we have dependencies.
@ -40,9 +39,7 @@ function makeWithIfBinding(bindingKey, isWith, isNot) {
} }
if (shouldDisplay) { if (shouldDisplay) {
if (!isInitial) { isInitial || ko.virtualElements.setDomNodeChildren(element, ko.utils.cloneNodes(savedNodes));
ko.virtualElements.setDomNodeChildren(element, ko.utils.cloneNodes(savedNodes));
}
ko.applyBindingsToDescendants(childContext, element); ko.applyBindingsToDescendants(childContext, element);
} else { } else {

View file

@ -1,7 +1,6 @@
ko.bindingHandlers['style'] = { ko.bindingHandlers['style'] = {
'update': (element, valueAccessor) => { 'update': (element, valueAccessor) => {
var value = ko.utils.unwrapObservable(valueAccessor() || {}); ko.utils.objectForEach(ko.utils.unwrapObservable(valueAccessor() || {}), (styleName, styleValue) => {
ko.utils.objectForEach(value, (styleName, styleValue) => {
styleValue = ko.utils.unwrapObservable(styleValue); styleValue = ko.utils.unwrapObservable(styleValue);
if (styleValue == null || styleValue === false) { if (styleValue == null || styleValue === false) {

View file

@ -1,9 +1,9 @@
ko.bindingHandlers['text'] = { ko.bindingHandlers['text'] = {
'init': () => { 'init': () => (
// Prevent binding on the dynamically-injected text node (as developers are unlikely to expect that, and it has security implications). // Prevent binding on the dynamically-injected text node (as developers are unlikely to expect that, and it has security implications).
// It should also make things faster, as we no longer have to consider whether the text node might be bindable. // It should also make things faster, as we no longer have to consider whether the text node might be bindable.
return { 'controlsDescendantBindings': true }; { 'controlsDescendantBindings': true }
}, ),
'update': (element, valueAccessor) => { 'update': (element, valueAccessor) => {
if (8 === element.nodeType) { if (8 === element.nodeType) {
element.text || element.after(element.text = document.createTextNode('')); element.text || element.after(element.text = document.createTextNode(''));

View file

@ -9,11 +9,19 @@ ko.bindingHandlers['value'] = {
return; return;
} }
var eventsToCatch = new Set; var eventsToCatch = new Set,
var requestedEventsToCatch = allBindings.get("valueUpdate"); requestedEventsToCatch = allBindings.get("valueUpdate"),
var elementValueBeforeEvent = null; elementValueBeforeEvent = null,
var registerEventHandler = (event, handler) => updateFromModel,
element.addEventListener(event, handler); registerEventHandler = (event, handler) =>
element.addEventListener(event, handler),
valueUpdateHandler = () => {
elementValueBeforeEvent = null;
var modelValue = valueAccessor();
var elementValue = ko.selectExtensions.readValue(element);
ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'value', elementValue);
};
if (requestedEventsToCatch) { if (requestedEventsToCatch) {
// Allow both individual event names, and arrays of event names // Allow both individual event names, and arrays of event names
@ -25,13 +33,6 @@ ko.bindingHandlers['value'] = {
eventsToCatch.delete("change"); // We'll subscribe to "change" events later eventsToCatch.delete("change"); // We'll subscribe to "change" events later
} }
var valueUpdateHandler = () => {
elementValueBeforeEvent = null;
var modelValue = valueAccessor();
var elementValue = ko.selectExtensions.readValue(element);
ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'value', elementValue);
}
eventsToCatch.forEach(eventName => { eventsToCatch.forEach(eventName => {
// The syntax "after<eventname>" means "run the handler asynchronously after the event" // The syntax "after<eventname>" means "run the handler asynchronously after the event"
// This is useful, for example, to catch "keydown" events after the browser has updated the control // This is useful, for example, to catch "keydown" events after the browser has updated the control
@ -54,8 +55,6 @@ ko.bindingHandlers['value'] = {
registerEventHandler(eventName, handler); registerEventHandler(eventName, handler);
}); });
var updateFromModel;
if (isInputElement && element.type == "file") { if (isInputElement && element.type == "file") {
// For file input elements, can only write the empty string // For file input elements, can only write the empty string
updateFromModel = () => { updateFromModel = () => {

View file

@ -20,13 +20,9 @@
var nodesToReplaceArray = mappedNodes.nodeType ? [mappedNodes] : mappedNodes; var nodesToReplaceArray = mappedNodes.nodeType ? [mappedNodes] : mappedNodes;
if (nodesToReplaceArray.length > 0) { if (nodesToReplaceArray.length > 0) {
var insertionPoint = nodesToReplaceArray[0], var insertionPoint = nodesToReplaceArray[0],
parent = insertionPoint.parentNode, parent = insertionPoint.parentNode;
i, j; newMappedNodes.forEach(node => parent.insertBefore(node, insertionPoint));
for (i = 0, j = newMappedNodes.length; i < j; i++) nodesToReplaceArray.forEach(node => ko.removeNode(node));
parent.insertBefore(newMappedNodes[i], insertionPoint);
for (i = 0, j = nodesToReplaceArray.length; i < j; i++) {
ko.removeNode(nodesToReplaceArray[i]);
}
} }
if (callbackAfterAddingNodes) if (callbackAfterAddingNodes)
ko.dependencyDetection.ignore(callbackAfterAddingNodes, null, [valueToMap, newMappedNodes, index]); ko.dependencyDetection.ignore(callbackAfterAddingNodes, null, [valueToMap, newMappedNodes, index]);
@ -78,9 +74,7 @@
callCallback = (callback, items) => { callCallback = (callback, items) => {
if (callback) { if (callback) {
for (var i = 0, n = items.length; i < n; i++) { items.forEach(item => item?.mappedNodes.forEach(node => callback(node, i, item.arrayEntry)));
items[i] && items[i].mappedNodes.forEach(node => callback(node, i, items[i].arrayEntry));
}
} }
}; };

View file

@ -1,21 +1,21 @@
ko.expressionRewriting = (() => { ko.expressionRewriting = (() => {
var javaScriptReservedWords = ["true", "false", "null", "undefined"]; var javaScriptReservedWords = ["true", "false", "null", "undefined"],
// Matches something that can be assigned to--either an isolated identifier or something ending with a property accessor // Matches something that can be assigned to--either an isolated identifier or something ending with a property accessor
// This is designed to be simple and avoid false negatives, but could produce false positives (e.g., a+b.c). // This is designed to be simple and avoid false negatives, but could produce false positives (e.g., a+b.c).
// This also will not properly handle nested brackets (e.g., obj1[obj2['prop']]; see #911). // This also will not properly handle nested brackets (e.g., obj1[obj2['prop']]; see #911).
var javaScriptAssignmentTarget = /^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i; javaScriptAssignmentTarget = /^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,
function getWriteableValue(expression) { getWriteableValue = expression => {
if (javaScriptReservedWords.includes(expression)) if (javaScriptReservedWords.includes(expression))
return false; return false;
var match = expression.match(javaScriptAssignmentTarget); var match = expression.match(javaScriptAssignmentTarget);
return match === null ? false : match[1] ? ('Object(' + match[1] + ')' + match[2]) : expression; return match === null ? false : match[1] ? ('Object(' + match[1] + ')' + match[2]) : expression;
} },
// The following regular expressions will be used to split an object-literal string into tokens // The following regular expressions will be used to split an object-literal string into tokens
var specials = ',"\'`{}()/:[\\]', // These characters have special meaning to the parser and must not appear in the middle of a token, except as part of a string. specials = ',"\'`{}()/:[\\]', // These characters have special meaning to the parser and must not appear in the middle of a token, except as part of a string.
// Create the actual regular expression by or-ing the following regex strings. The order is important. // Create the actual regular expression by or-ing the following regex strings. The order is important.
bindingToken = RegExp([ bindingToken = RegExp([
// These match strings, either with double quotes, single quotes, or backticks // These match strings, either with double quotes, single quotes, or backticks
@ -41,9 +41,9 @@ ko.expressionRewriting = (() => {
// Match end of previous token to determine whether a slash is a division or regex. // Match end of previous token to determine whether a slash is a division or regex.
divisionLookBehind = /[\])"'A-Za-z0-9_$]+$/, divisionLookBehind = /[\])"'A-Za-z0-9_$]+$/,
keywordRegexLookBehind = {'in':1,'return':1,'typeof':1}; keywordRegexLookBehind = {'in':1,'return':1,'typeof':1},
function parseObjectLiteral(objectLiteralString) { parseObjectLiteral = objectLiteralString => {
// Trim leading and trailing spaces from the string // Trim leading and trailing spaces from the string
var str = ko.utils.stringTrim(objectLiteralString); var str = ko.utils.stringTrim(objectLiteralString);
@ -106,19 +106,24 @@ ko.expressionRewriting = (() => {
} }
} }
return result; return result;
} },
// Two-way bindings include a write function that allow the handler to update the value even if it's not an observable. // Two-way bindings include a write function that allow the handler to update the value even if it's not an observable.
var twoWayBindings = new Set; twoWayBindings = new Set,
function preProcessBindings(bindingsStringOrKeyValueArray, bindingOptions) { preProcessBindings = (bindingsStringOrKeyValueArray, bindingOptions) => {
bindingOptions = bindingOptions || {};
function processKeyValue(key, val) { var resultStrings = [],
var writableVal; propertyAccessorResultStrings = [],
function callPreprocessHook(obj) { makeValueAccessors = bindingOptions?.['valueAccessors'],
return (obj && obj['preprocess']) ? (val = obj['preprocess'](val, key, processKeyValue)) : true; bindingParams = bindingOptions?.['bindingParams'],
} keyValueArray = typeof bindingsStringOrKeyValueArray === "string" ?
parseObjectLiteral(bindingsStringOrKeyValueArray) : bindingsStringOrKeyValueArray,
processKeyValue = (key, val) => {
var writableVal,
callPreprocessHook = obj =>
obj?.['preprocess'] ? (val = obj['preprocess'](val, key, processKeyValue)) : true;
if (!bindingParams) { if (!bindingParams) {
if (!callPreprocessHook(ko.bindingHandlers[key])) if (!callPreprocessHook(ko.bindingHandlers[key]))
return; return;
@ -134,14 +139,7 @@ ko.expressionRewriting = (() => {
val = 'function(){return ' + val + ' }'; val = 'function(){return ' + val + ' }';
} }
resultStrings.push("'" + key + "':" + val); resultStrings.push("'" + key + "':" + val);
} };
var resultStrings = [],
propertyAccessorResultStrings = [],
makeValueAccessors = bindingOptions['valueAccessors'],
bindingParams = bindingOptions['bindingParams'],
keyValueArray = typeof bindingsStringOrKeyValueArray === "string" ?
parseObjectLiteral(bindingsStringOrKeyValueArray) : bindingsStringOrKeyValueArray;
keyValueArray.forEach(keyValue => keyValueArray.forEach(keyValue =>
processKeyValue(keyValue.key || keyValue['unknown'], keyValue.value) processKeyValue(keyValue.key || keyValue['unknown'], keyValue.value)
@ -151,7 +149,7 @@ ko.expressionRewriting = (() => {
processKeyValue('_ko_property_writers', "{" + propertyAccessorResultStrings.join(",") + " }"); processKeyValue('_ko_property_writers', "{" + propertyAccessorResultStrings.join(",") + " }");
return resultStrings.join(","); return resultStrings.join(",");
} };
return { return {
bindingRewriteValidators: [], bindingRewriteValidators: [],

View file

@ -1,5 +1,5 @@
(() => {
var hasDomDataExpandoProperty = '__ko__hasDomDataOptionValue__'; const hasDomDataExpandoProperty = '__ko__hasDomDataOptionValue__';
// Normally, SELECT elements and their OPTIONs can only take value of type 'string' (because the values // Normally, SELECT elements and their OPTIONs can only take value of type 'string' (because the values
// are stored on DOM attributes). ko.selectExtensions provides a way for SELECTs/OPTIONs to have values // are stored on DOM attributes). ko.selectExtensions provides a way for SELECTs/OPTIONs to have values
@ -59,4 +59,3 @@
} }
} }
}; };
})();