wunderbaum 0.14.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,73 +2,73 @@
2
2
  /*!
3
3
  * Wunderbaum - debounce.ts
4
4
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
5
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
6
- */const t="object"==typeof global&&null!==global&&global.Object===Object&&global,i="object"==typeof globalThis&&null!==globalThis&&globalThis.Object==Object&&globalThis,s="object"==typeof self&&null!==self&&self.Object===Object&&self,n=i||t||s||Function("return this")();function r(e){const t=typeof e;return null!=e&&("object"===t||"function"===t)}function o(e,t=0,i={}){let s,o,l,a,d,c,h=0,u=!1,p=!1,f=!0;const g=!t&&0!==t&&"function"==typeof n.requestAnimationFrame;if("function"!=typeof e)throw new TypeError("Expected a function");function v(t){const i=s,n=o;return s=o=void 0,h=t,a=e.apply(n,i),a}function m(e,t){return g?(n.cancelAnimationFrame(d),n.requestAnimationFrame(e)):setTimeout(e,t)}function b(e){const i=e-c;return void 0===c||i>=t||i<0||p&&e-h>=l}function y(){const e=Date.now();if(b(e))return w(e);d=m(y,function(e){const i=e-h,s=t-(e-c);return p?Math.min(s,l-i):s}(e))}function w(e){return d=void 0,f&&s?v(e):(s=o=void 0,a)}function E(...e){const i=Date.now(),n=b(i);if(s=e,o=this,c=i,n){if(void 0===d)return function(e){return h=e,d=m(y,t),u?v(e):a}(c);if(p)return d=m(y,t),v(c)}return void 0===d&&(d=m(y,t)),a}return t=+t||0,r(i)&&(u=!!i.leading,p="maxWait"in i,l=p?Math.max(+i.maxWait||0,t):l,f="trailing"in i?!!i.trailing:f),E.cancel=function(){void 0!==d&&function(e){if(g)return n.cancelAnimationFrame(e);clearTimeout(e)}(d),h=0,s=c=o=d=void 0},E.flush=function(){return void 0===d?a:w(Date.now())},E.pending=function(){return void 0!==d},E}function l(e,t=0,i={}){let s=!0,n=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return r(i)&&(s="leading"in i?!!i.leading:s,n="trailing"in i?!!i.trailing:n),o(e,t,{leading:s,trailing:n,maxWait:t})}
5
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
6
+ */const t="object"==typeof global&&null!==global&&global.Object===Object&&global,i="object"==typeof globalThis&&null!==globalThis&&globalThis.Object==Object&&globalThis,s="object"==typeof self&&null!==self&&self.Object===Object&&self,n=i||t||s||Function("return this")();function r(e){const t=typeof e;return null!=e&&("object"===t||"function"===t)}function o(e,t=0,i={}){let s,o,l,a,d,c,h=0,u=!1,p=!1,f=!0;const g=!t&&0!==t&&"function"==typeof n.requestAnimationFrame;if("function"!=typeof e)throw new TypeError("Expected a function");function v(t){const i=s,n=o;return s=o=void 0,h=t,a=e.apply(n,i),a}function m(e,t){return g?(n.cancelAnimationFrame(d),n.requestAnimationFrame(e)):setTimeout(e,t)}function b(e){const i=e-c;return void 0===c||i>=t||i<0||p&&e-h>=l}function y(){const e=Date.now();if(b(e))return w(e);d=m(y,function(e){const i=e-h,s=t-(e-c);return p?Math.min(s,l-i):s}(e))}function w(e){return d=void 0,f&&s?v(e):(s=o=void 0,a)}function x(...e){const i=Date.now(),n=b(i);if(s=e,o=this,c=i,n){if(void 0===d)return function(e){return h=e,d=m(y,t),u?v(e):a}(c);if(p)return d=m(y,t),v(c)}return void 0===d&&(d=m(y,t)),a}return t=+t||0,r(i)&&(u=!!i.leading,p="maxWait"in i,l=p?Math.max(+i.maxWait||0,t):l,f="trailing"in i?!!i.trailing:f),x.cancel=function(){void 0!==d&&function(e){if(g)return n.cancelAnimationFrame(e);clearTimeout(e)}(d),h=0,s=c=o=d=void 0},x.flush=function(){return void 0===d?a:w(Date.now())},x.pending=function(){return void 0!==d},x}function l(e,t=0,i={}){let s=!0,n=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return r(i)&&(s="leading"in i?!!i.leading:s,n="trailing"in i?!!i.trailing:n),o(e,t,{leading:s,trailing:n,maxWait:t})}
7
7
  /*!
8
8
  * Wunderbaum - util
9
9
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
10
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
11
- */const a={0:"",1:"left",2:"middle",3:"right",4:"back",5:"forward"},d=function(){const e=navigator;return{isMac:/Mac/.test(e.platform)}}().isMac,c=/[&<>"'/]/g,h=/[<>"'/]/g,u={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};class p extends Error{constructor(e){super(e),this.name="ValidationError"}}function f(e,t){if(!e)throw t=t||"Assertion failed.",new Error(t)}function g(e){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",e):e()}function v(e){throw new Error(e)}function m(e){return(""+e).replace(c,function(e){return u[e]})}function b(e){return(""+e).replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}function y(e){return(""+e).replace(h,function(e){return u[e]})}function w(e,t=!1){const i=e.tagName;let s=null;if("SPAN"===i&&e.classList.contains("wb-col")){const i=e,n=i.querySelector("input,select");if(n)return w(n,t);i.innerText=""+s}else if("INPUT"===i){const i=e;switch(i.type){case"button":case"reset":case"submit":case"image":break;case"checkbox":s=i.indeterminate?null:i.checked;break;case"date":case"datetime":case"datetime-local":case"month":case"time":case"week":s=t?i.valueAsDate:i.value;break;case"number":case"range":s=i.valueAsNumber;break;case"radio":{const e=i.name,t=i.parentElement.querySelector(`input[name="${e}"]:checked`);s=t?t.value:void 0}break;default:s=i.value}}else if("SELECT"===i){s=e.value}return s}function E(e,t){const i=C(e).style;t?"none"===i.display&&(i.display=""):""===i.display&&(i.display="none")}function x(e){const t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstElementChild}const _=new Set(["Alt","Control","Meta","Shift"]);function C(e){return e?"string"==typeof e?document.querySelector(e):e:null}function k(e){const t=e.key,i=e.type,s=[];return e.altKey&&s.push("Alt"),e.ctrlKey&&s.push("Control"),e.metaKey&&s.push("Meta"),e.shiftKey&&s.push("Shift"),"click"===i||"dblclick"===i?s.push(a[e.button]+i):"wheel"===i?s.push(i):_.has(t)||s.push(t),s.join("+")}function N(...e){for(let t=1;t<e.length;t++){const i=e[t];if(null!=i)for(const t in i)Object.prototype.hasOwnProperty.call(i,t)&&(e[0][t]=i[t])}return e[0]}function S(e){return Array.isArray(e)}function D(e){return 0===Object.keys(e).length&&e.constructor===Object}function I(e){return"[object Object]"===Object.prototype.toString.call(e)}function M(e,t,i,s){let n,r;e=C(e),s?(n=i,r=s):(n="",r=i),t.split(" ").forEach(t=>{e.addEventListener(t,function(e){if(!n)return r(e);if(e.target){let t=e.target;if(t.matches(n))return r(e);if(t=t.closest(n),t)return r(e)}})})}function L(e,t,i,s){let n,r;const o=s||e,l=e[t],a=(...e)=>l.apply(o,e),d=e=>l.apply(o,e);e[t]=(...e)=>{try{return n=o._super,r=o._superApply,o._super=a,o._superApply=d,i.apply(o,e)}finally{o._super=n,o._superApply=r}}}function T(e,t,i=void 0){let s;e&&t.indexOf(".")>=0&&([s,t]=t.split("."),e=e[s]);const n=e?e[t]:null;return null!=n?n:i}function A(e,t){const i=t.indexOf(e);return t[(i+1)%t.length]}function $(e){if(e instanceof Set)return e;if("string"==typeof e){const t=new Set;for(const i of e.split(" "))t.add(i.trim());return t}if(Array.isArray(e))return new Set(e);throw new Error("Cannot convert to Set<string>: "+e)}function O(...e){for(const t of e){if("number"==typeof t)return t;if("string"==typeof t&&t.endsWith("px"))return parseInt(t,10);f(null==t,`Expected a number or string like '123px': ${t}`)}throw new Error(`Expected a string like '123px': ${e}`)}function P(e){return e}function F(...e){for(const t of e)if(null!=t)return!!t;throw new Error("No default boolean value provided")}function z(e){return"number"==typeof e?!!e:e}function R(e,t){const i=Object.assign({minDelay:16,defaultDelay:200,maxDelay:5e3,delayFactor:2},t),s=Math.max(16,+i.minDelay),n=+i.maxDelay;let r=0,o=null,l=null;const a=(...t)=>{if(r)o=t,r+=1;else{r=1;const d=t;o=null;const c=Date.now();try{e.apply(this,d)}catch(e){console.error(e)}const h=Date.now()-c,u=Math.min(Math.max(s,h*i.delayFactor),n),p=Math.max(s,u-h);l=setTimeout(()=>{l=null,r=0,null!=o&&a.apply(this,o)},p)}};return a.cancel=()=>{l&&(clearTimeout(l),l=null),o=null,r=0},a.pending=()=>!!l,a.flush=()=>{throw new Error("Not implemented")},a}function K(e,t=!0,i=0){let s=i;const n=3&e.length,r=e.length-n,o=3432918353,l=461845907;let a=0;for(;a<r;){let t=255&e.charCodeAt(a)|(255&e.charCodeAt(++a))<<8|(255&e.charCodeAt(++a))<<16|(255&e.charCodeAt(++a))<<24;++a,t=Math.imul(t,o),t=t<<15|t>>>17,t=Math.imul(t,l),s^=t,s=s<<13|s>>>19,s=Math.imul(s,5)+3864292196}let d=0;switch(n){case 3:d^=(255&e.charCodeAt(a+2))<<16;case 2:d^=(255&e.charCodeAt(a+1))<<8;case 1:d^=255&e.charCodeAt(a),d=Math.imul(d,o),d=d<<15|d>>>17,d=Math.imul(d,l),s^=d}return s^=e.length,s^=s>>>16,s=Math.imul(s,2246822507),s^=s>>>13,s=Math.imul(s,3266489909),s^=s>>>16,t?(s>>>0).toString(16).padStart(8,"0"):s>>>0}var U,q,V,H,B,W=Object.freeze({__proto__:null,Deferred:class{constructor(){this.thens=[],this.catches=[],this.status=""}resolve(e){if(this.status)throw new Error("already settled");this.status="resolved",this.resolvedValue=e,this.thens.forEach(t=>t(e)),this.thens=[]}reject(e){if(this.status)throw new Error("already settled");this.status="rejected",this.rejectedError=e,this.catches.forEach(t=>t(e)),this.catches=[]}then(e){"resolved"===status?e(this.resolvedValue):this.thens.unshift(e)}catch(e){"rejected"===this.status?e(this.rejectedError):this.catches.unshift(e)}promise(){return{then:this.then,catch:this.catch}}},MAX_INT:9007199254740991,MOUSE_BUTTONS:a,ValidationError:p,adaptiveThrottle:R,assert:f,debounce:o,documentReady:g,documentReadyPromise:function(){return new Promise(e=>{g(e)})},each:function(e,t){if(null==e)return e;const i=e.length;let s=0;if("number"==typeof i)for(;s<i&&!1!==t.call(e[s],s,e[s]);s++);else for(const i in e)if(!1===t.call(e[s],i,e[i]))break;return e},elemFromHtml:x,elemFromSelector:C,error:v,escapeHtml:m,escapeRegex:b,escapeTooltip:y,eventToString:k,extend:N,extractHtmlText:function(e){return e.indexOf(">")>=0&&v("Not implemented"),e},getOption:T,getValueFromElem:w,intToBool:z,isArray:S,isEmptyObject:D,isFunction:function(e){return"function"==typeof e},isMac:d,isPlainObject:I,murmurHash3:K,noop:function(...e){},onEvent:M,overrideMethod:L,rotate:A,setElemDisplay:E,setTimeoutPromise:function(e,t){return new Promise((i,s)=>{setTimeout(()=>{try{i(e.apply(this))}catch(e){s(e)}},t)})},setValueToElem:function e(t,i){const s=t.tagName;if("SPAN"===s&&t.classList.contains("wb-col")){const s=t,n=s.querySelector("input,select");if(n)return e(n,i);s.innerText=""+i}else if("INPUT"===s){const e=t,s=e.type;switch(s){case"checkbox":e.indeterminate=null===i,e.checked=!!i;break;case"date":case"month":case"time":case"week":case"datetime":case"datetime-local":e.valueAsDate=new Date(i);break;case"number":case"range":null==i?e.value=i:e.valueAsNumber=i;break;case"radio":v(`Not yet implemented: ${s}`);break;case"button":case"reset":case"submit":case"image":break;default:e.value=null!=i?i:""}}else if("SELECT"===s){const e=t;null==i?e.selectedIndex=-1:e.value=i}},sleep:async function(e){return new Promise(t=>setTimeout(t,e))},throttle:l,toBool:F,toPixel:O,toSet:$,toggleCheckbox:function(e,t,i){const s=C(e);if(f("checkbox"===s.type,`Expected a checkbox: ${s.type}`),null!=i||(i=s.classList.contains("wb-tristate")||s.indeterminate),void 0===t){switch(s.indeterminate?null:s.checked){case!0:t=!1;break;case!1:t=!i||null;break;case null:t=!0}}s.indeterminate=null==t,s.checked=!!t},type:function(e){return Object.prototype.toString.call(e).replace(/^\[object (.+)\]$/,"$1").toLowerCase()},unsafeCast:P});
10
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
11
+ */const a={0:"",1:"left",2:"middle",3:"right",4:"back",5:"forward"},d=function(){const e=navigator;return{isMac:/Mac/.test(e.platform)}}().isMac,c=/[&<>"'/]/g,h=/[<>"'/]/g,u={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};class p extends Error{constructor(e){super(e),this.name="ValidationError"}}function f(e,t){if(!e)throw t=t||"Assertion failed.",new Error(t)}function g(e){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",e):e()}function v(e){throw new Error(e)}function m(e){return(""+e).replace(c,function(e){return u[e]})}function b(e){return(""+e).replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}function y(e){return(""+e).replace(h,function(e){return u[e]})}function w(e,t=!1){const i=e.tagName;let s=null;if("SPAN"===i&&e.classList.contains("wb-col")){const i=e,n=i.querySelector("input,select");if(n)return w(n,t);i.innerText=""+s}else if("INPUT"===i){const i=e;switch(i.type){case"button":case"reset":case"submit":case"image":break;case"checkbox":s=i.indeterminate?null:i.checked;break;case"date":case"datetime":case"datetime-local":case"month":case"time":case"week":s=t?i.valueAsDate:i.value;break;case"number":case"range":s=i.valueAsNumber;break;case"radio":{const e=i.name,t=i.parentElement.querySelector(`input[name="${e}"]:checked`);s=t?t.value:void 0}break;default:s=i.value}}else if("SELECT"===i){s=e.value}return s}function x(e,t){const i=C(e).style;t?"none"===i.display&&(i.display=""):""===i.display&&(i.display="none")}function E(e){const t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstElementChild}const _=new Set(["Alt","Control","Meta","Shift"]);function C(e){return e?"string"==typeof e?document.querySelector(e):e:null}function k(e){const t=e.key,i=e.type,s=[];return e.altKey&&s.push("Alt"),e.ctrlKey&&s.push("Control"),e.metaKey&&s.push("Meta"),e.shiftKey&&s.push("Shift"),"click"===i||"dblclick"===i?s.push(a[e.button]+i):"wheel"===i?s.push(i):_.has(t)||s.push(t),s.join("+")}function N(...e){for(let t=1;t<e.length;t++){const i=e[t];if(null!=i)for(const t in i)Object.prototype.hasOwnProperty.call(i,t)&&(e[0][t]=i[t])}return e[0]}function S(e){return Array.isArray(e)}function D(e){return 0===Object.keys(e).length&&e.constructor===Object}function I(e){return"[object Object]"===Object.prototype.toString.call(e)}function M(e,t,i,s){let n,r;e=C(e),s?(n=i,r=s):(n="",r=i),t.split(" ").forEach(t=>{e.addEventListener(t,function(e){if(!n)return r(e);if(e.target){let t=e.target;if(t.matches(n))return r(e);if(t=t.closest(n),t)return r(e)}})})}function L(e,t,i,s){let n,r;const o=s||e,l=e[t],a=(...e)=>l.apply(o,e),d=e=>l.apply(o,e);e[t]=(...e)=>{try{return n=o._super,r=o._superApply,o._super=a,o._superApply=d,i.apply(o,e)}finally{o._super=n,o._superApply=r}}}function T(e,t,i=void 0){let s;e&&t.indexOf(".")>=0&&([s,t]=t.split("."),e=e[s]);const n=e?e[t]:null;return null!=n?n:i}function A(e,t){const i=t.indexOf(e);return t[(i+1)%t.length]}function $(e){if(e instanceof Set)return e;if("string"==typeof e){const t=new Set;for(const i of e.split(" "))t.add(i.trim());return t}if(Array.isArray(e))return new Set(e);throw new Error("Cannot convert to Set<string>: "+e)}function O(...e){for(const t of e){if("number"==typeof t)return t;if("string"==typeof t&&t.endsWith("px"))return parseInt(t,10);f(null==t,`Expected a number or string like '123px': ${t}`)}throw new Error(`Expected a string like '123px': ${e}`)}function P(e){return e}function F(...e){for(const t of e)if(null!=t)return!!t;throw new Error("No default boolean value provided")}function z(e){return"number"==typeof e?!!e:e}function R(e,t){const i=Object.assign({minDelay:16,defaultDelay:200,maxDelay:5e3,delayFactor:2},t),s=Math.max(16,+i.minDelay),n=+i.maxDelay;let r=0,o=null,l=null;const a=(...t)=>{if(r)o=t,r+=1;else{r=1;const d=t;o=null;const c=Date.now();try{e.apply(this,d)}catch(e){console.error(e)}const h=Date.now()-c,u=Math.min(Math.max(s,h*i.delayFactor),n),p=Math.max(s,u-h);l=setTimeout(()=>{l=null,r=0,null!=o&&a.apply(this,o)},p)}};return a.cancel=()=>{l&&(clearTimeout(l),l=null),o=null,r=0},a.pending=()=>!!l,a.flush=()=>{throw new Error("Not implemented")},a}function K(e,t=!0,i=0){let s=i;const n=3&e.length,r=e.length-n,o=3432918353,l=461845907;let a=0;for(;a<r;){let t=255&e.charCodeAt(a)|(255&e.charCodeAt(++a))<<8|(255&e.charCodeAt(++a))<<16|(255&e.charCodeAt(++a))<<24;++a,t=Math.imul(t,o),t=t<<15|t>>>17,t=Math.imul(t,l),s^=t,s=s<<13|s>>>19,s=Math.imul(s,5)+3864292196}let d=0;switch(n){case 3:d^=(255&e.charCodeAt(a+2))<<16;case 2:d^=(255&e.charCodeAt(a+1))<<8;case 1:d^=255&e.charCodeAt(a),d=Math.imul(d,o),d=d<<15|d>>>17,d=Math.imul(d,l),s^=d}return s^=e.length,s^=s>>>16,s=Math.imul(s,2246822507),s^=s>>>13,s=Math.imul(s,3266489909),s^=s>>>16,t?(s>>>0).toString(16).padStart(8,"0"):s>>>0}var U,q,V,H,B,W=Object.freeze({__proto__:null,Deferred:class{constructor(){this.thens=[],this.catches=[],this.status=""}resolve(e){if(this.status)throw new Error("already settled");this.status="resolved",this.resolvedValue=e,this.thens.forEach(t=>t(e)),this.thens=[]}reject(e){if(this.status)throw new Error("already settled");this.status="rejected",this.rejectedError=e,this.catches.forEach(t=>t(e)),this.catches=[]}then(e){"resolved"===status?e(this.resolvedValue):this.thens.unshift(e)}catch(e){"rejected"===this.status?e(this.rejectedError):this.catches.unshift(e)}promise(){return{then:this.then,catch:this.catch}}},MAX_INT:9007199254740991,MOUSE_BUTTONS:a,ValidationError:p,adaptiveThrottle:R,assert:f,debounce:o,documentReady:g,documentReadyPromise:function(){return new Promise(e=>{g(e)})},each:function(e,t){if(null==e)return e;const i=e.length;let s=0;if("number"==typeof i)for(;s<i&&!1!==t.call(e[s],s,e[s]);s++);else for(const i in e)if(!1===t.call(e[s],i,e[i]))break;return e},elemFromHtml:E,elemFromSelector:C,error:v,escapeHtml:m,escapeRegex:b,escapeTooltip:y,eventToString:k,extend:N,extractHtmlText:function(e){return e.indexOf(">")>=0&&v("Not implemented"),e},getOption:T,getValueFromElem:w,intToBool:z,isArray:S,isEmptyObject:D,isFunction:function(e){return"function"==typeof e},isMac:d,isPlainObject:I,murmurHash3:K,noop:function(...e){},onEvent:M,overrideMethod:L,rotate:A,setElemDisplay:x,setTimeoutPromise:function(e,t){return new Promise((i,s)=>{setTimeout(()=>{try{i(e.apply(this))}catch(e){s(e)}},t)})},setValueToElem:function e(t,i){const s=t.tagName;if("SPAN"===s&&t.classList.contains("wb-col")){const s=t,n=s.querySelector("input,select");if(n)return e(n,i);s.innerText=""+i}else if("INPUT"===s){const e=t,s=e.type;switch(s){case"checkbox":e.indeterminate=null===i,e.checked=!!i;break;case"date":case"month":case"time":case"week":case"datetime":case"datetime-local":e.valueAsDate=new Date(i);break;case"number":case"range":null==i?e.value=i:e.valueAsNumber=i;break;case"radio":v(`Not yet implemented: ${s}`);break;case"button":case"reset":case"submit":case"image":break;default:e.value=null!=i?i:""}}else if("SELECT"===s){const e=t;null==i?e.selectedIndex=-1:e.value=i}},sleep:async function(e){return new Promise(t=>setTimeout(t,e))},throttle:l,toBool:F,toPixel:O,toSet:$,toggleCheckbox:function(e,t,i){const s=C(e);if(f("checkbox"===s.type,`Expected a checkbox: ${s.type}`),null!=i||(i=s.classList.contains("wb-tristate")||s.indeterminate),void 0===t){switch(s.indeterminate?null:s.checked){case!0:t=!1;break;case!1:t=!i||null;break;case null:t=!0}}s.indeterminate=null==t,s.checked=!!t},type:function(e){return Object.prototype.toString.call(e).replace(/^\[object (.+)\]$/,"$1").toLowerCase()},unsafeCast:P});
12
12
  /*!
13
13
  * Wunderbaum - types
14
14
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
15
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
15
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
16
16
  */!function(e){e.any="any",e.data="data",e.colStructure="colStructure",e.resize="resize",e.row="row",e.structure="structure",e.status="status",e.scroll="scroll"}(U||(U={})),function(e){e.clearMarkup="clearMarkup",e.header="header",e.redraw="redraw",e.scroll="scroll"}(q||(q={})),function(e){e.ok="ok",e.loading="loading",e.error="error",e.noData="noData",e.paging="paging"}(V||(V={})),function(e){e.unknown="",e.checkbox="checkbox",e.column="column",e.expander="expander",e.icon="icon",e.prefix="prefix",e.title="title"}(H||(H={})),function(e){e.startRow="startRow",e.cell="cell",e.startCell="startCell",e.row="row"}(B||(B={}));
17
17
  /*!
18
18
  * Wunderbaum - wb_extension_base
19
19
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
20
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
20
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
21
21
  */
22
22
  class j{constructor(e,t,i){this.enabled=!0,this.tree=e,this.id=t,this.treeOpts=e.options;const s=e.options;void 0===this.treeOpts[t]?s[t]=this.extensionOpts=N({},i):(this.extensionOpts=N({},i,s[t]),s[t]=this.extensionOpts),this.enabled=this.getPluginOption("enabled",!0)}init(){this.tree.element.classList.add("wb-ext-"+this.id)}getPluginOption(e,t){var i;return null!==(i=this.extensionOpts[e])&&void 0!==i?i:t}setPluginOption(e,t){this.extensionOpts[e]=t}setEnabled(e=!0){return this.setPluginOption("enabled",!!e)}onKeyEvent(e){}onRender(e){}}
23
23
  /*!
24
24
  * Wunderbaum - ext-filter
25
25
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
26
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
26
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
27
27
  */const G="￷",Q="￸",Y=new RegExp(b("￷"),"g"),J=new RegExp(b("￸"),"g");class X extends j{constructor(e){super(e,"filter",{autoApply:!0,autoExpand:!1,matchBranch:!1,connect:null,fuzzy:!1,hideExpanders:!1,highlight:!0,leavesOnly:!1,mode:"dim",noData:!0}),this.queryInput=null,this.prevButton=null,this.nextButton=null,this.modeButton=null,this.matchInfoElem=null,this.lastFilterArgs=null}init(){super.init();this.getPluginOption("connect")&&this._connectControls()}setPluginOption(e,t){if(super.setPluginOption(e,t),"mode"===e)this.tree.filterMode="hide"===t?"hide":"mark"===t?"mark":"dim",this.tree.updateFilter()}_updatedConnectedControls(){var e;const t=null!==this.tree.filterMode,i=this.tree.getActiveNode(),s=t?this.countMatches():0,n=this.treeOpts.strings;let r="?";if(this.matchInfoElem)if(t){let t;0===s?t=n.noMatch:i&&i.match>=1?(r=null!==(e=i.match)&&void 0!==e?e:"?",t=n.matchIndex):t=n.queryResult,t=t.replace("${count}",this.tree.count().toLocaleString()).replace("${match}",""+r).replace("${matches}",s.toLocaleString()),this.matchInfoElem.textContent=t}else this.matchInfoElem.textContent="";this.nextButton instanceof HTMLButtonElement&&(this.nextButton.disabled=!s),this.prevButton instanceof HTMLButtonElement&&(this.prevButton.disabled=!s),this.modeButton&&(this.modeButton.disabled=!t,this.modeButton.classList.toggle("wb-filter-hide","hide"===this.tree.filterMode))}_connectControls(){const e=this.tree,t=this.getPluginOption("connect");if(t){if(this.queryInput=C(t.inputElem),!this.queryInput)throw new Error(`Invalid 'filter.connect' option: ${t.inputElem}.`);this.prevButton=C(t.prevButton),this.nextButton=C(t.nextButton),this.modeButton=C(t.modeButton),this.matchInfoElem=C(t.matchInfoElem),this.prevButton&&M(this.prevButton,"click",()=>{e.findRelatedNode(e.getActiveNode()||e.getFirstChild(),"prevMatch"),this._updatedConnectedControls()}),this.nextButton&&M(this.nextButton,"click",()=>{e.findRelatedNode(e.getActiveNode()||e.getFirstChild(),"nextMatch"),this._updatedConnectedControls()}),this.modeButton&&M(this.modeButton,"click",t=>{this.tree.filterMode&&this.setPluginOption("mode","dim"===e.filterMode?"hide":"dim")}),M(this.queryInput,"input",o(e=>{this.filterNodes(this.queryInput.value.trim(),{})},700)),this._updatedConnectedControls()}}_applyFilterNoUpdate(e,t){return this.tree.runWithDeferredUpdate(()=>this._applyFilterImpl(e,t))}_applyFilterImpl(e,t){var i;let s=0;const n=Date.now(),r=this.tree,o=r.options,l=o.autoCollapse,a=N({},o.filter,t),d="hide"===a.mode,c=!!a.matchBranch,h=!!a.leavesOnly&&!c;let u,p;if("string"==typeof e||e instanceof RegExp){if(""===e)return r.logInfo("Passing an empty string as a filter is handled as clearFilter()."),this.clearFilter(),0;if(a.fuzzy){f("string"==typeof e,"fuzzy filter must be a string");const t=e.split("").map(b).reduce(function(e,t){return e+"([^"+t+"]*)"+t},"");u=new RegExp(t,"i")}else if(e instanceof RegExp)u=e,p=e;else{const t=b(e);u=new RegExp(t,"i"),p=new RegExp(t,"gi")}r.logDebug(`Filtering nodes by '${u}'`),e=e=>{if(!e.title)return!1;const t=e.title,i=u.exec(t);if(i&&a.highlight){let s;s=a.fuzzy?function(e,t,i=!0){const s=[];for(let e=1;e<t.length;e++){const i=t[e].length+(1===e?0:1)+(s[s.length-1]||0);s.push(i)}const n=e.split("");i?s.forEach(function(e){n[e]=G+n[e]+Q}):s.forEach(function(e){n[e]="<mark>"+n[e]+"</mark>"});return n.join("")}
28
28
  /*!
29
29
  * Wunderbaum - ext-keynav
30
30
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
31
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
31
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
32
32
  */(t,i,!0):t.replace(p,function(e){return G+e+Q}),e.titleWithHighlight=m(s).replace(Y,"<mark>").replace(J,"</mark>")}return!!i}}return r.filterMode=null!==(i=a.mode)&&void 0!==i?i:"dim",this.lastFilterArgs=arguments,r.element.classList.toggle("wb-ext-filter-hide",!!d),r.element.classList.toggle("wb-ext-filter-dim","dim"===a.mode),r.element.classList.toggle("wb-ext-filter-hide-expanders",!!a.hideExpanders),r.root.subMatchCount=0,r.visit(e=>{delete e.match,delete e.titleWithHighlight,e.subMatchCount=0}),r.setStatus(V.ok),o.autoCollapse=!1,r.visit(t=>{if(h&&null!=t.children)return;let i=e(t);if("skip"===i)return t.visit(function(e){e.match=void 0},!0),"skip";let n=!1;(c||"branch"===i)&&t.parent.match&&(i=!0,n=!0),i&&(s++,t.match=s,t.visitParents(e=>{e!==t&&(e.subMatchCount+=1),!a.autoExpand||n||e.expanded||(e.setExpanded(!0,{noAnimation:!0,noEvents:!0}),e._filterAutoExpanded=!0)},!0))}),o.autoCollapse=l,0===s&&a.noData&&d&&("string"==typeof a.noData?r.root.setStatus(V.noData,{message:a.noData}):r.root.setStatus(V.noData)),r.logDebug(`Filter '${e}' found ${s} nodes in ${Date.now()-n} ms.`),this._updatedConnectedControls(),s}filterNodes(e,t){return this._applyFilterNoUpdate(e,t)}filterBranches(e,t){return f(void 0===t.matchBranch,"filterBranches() is deprecated."),this.tree.logDeprecate("filterBranches()",{since:"0.9.0",hint:"Use `filterNodes` instead and set `options.matchBranch: true`"}),t.matchBranch=!0,this._applyFilterNoUpdate(e,t)}countMatches(){let e=0;return this.tree.visit(t=>{t.match&&!t.statusNodeType&&e++}),e}updateFilter(){var e;const t=this.tree;t.filterMode&&this.lastFilterArgs&&(null===(e=t.options.filter)||void 0===e?void 0:e.autoApply)?this._applyFilterNoUpdate.apply(this,this.lastFilterArgs):t.logWarn("updateFilter(): no filter active."),this._updatedConnectedControls()}clearFilter(){const e=this.tree;e.enableUpdate(!1),e.setStatus(V.ok),delete e.root.match,delete e.root.subMatchCount,e.visit(e=>{delete e.match,delete e.subMatchCount,delete e.titleWithHighlight,e._filterAutoExpanded&&e.expanded&&e.setExpanded(!1,{noAnimation:!0,noEvents:!0}),delete e._filterAutoExpanded}),e.filterMode=null,this.lastFilterArgs=null,e.element.classList.remove("wb-ext-filter-dim","wb-ext-filter-hide"),this._updatedConnectedControls(),e.enableUpdate(!0)}}class Z extends j{constructor(e){super(e,"keynav",{})}_getEmbeddedInputElem(e){var t;let i=null;if(e&&null!=e.type)i=e;else{const e=null===(t=this.tree.getActiveColElem())||void 0===t?void 0:t.querySelector("input,select");e&&(i=e)}return i}_isCurInputFocused(){var e;return!!(null===(e=this.tree.getActiveColElem())||void 0===e?void 0:e.querySelector("input:focus,select:focus"))}onKeyEvent(e){const t=e.event,i=this.tree,s=e.options,n=!t.ctrlKey||s.autoActivate,r=this._getEmbeddedInputElem(t.target),o=r&&this._isCurInputFocused(),l=s.navigationModeOption;let a,d=k(t),c=e.node,h=!0;if(!i.isEnabled())return!1;if(!1===i._callEvent("keydown",e))return!1;if(!1===i._callMethod("edit._preprocessKeyEvent",e))return!1;if(!c){const e=i.getFocusNode()||i.getActiveNode(),t=i.getFirstChild();if(!e&&t&&"ArrowDown"===d)return t.logInfo("Keydown: activate first node."),void t.setActive();a=e||t,a&&(a.setFocus(),c=i.getFocusNode(),c.logInfo("Keydown: force focus on active node."))}const u=c.isColspan();if(i.isRowNav()){if(o){switch(d){case"Enter":r.blur(),i.setFocus();break;case"Escape":c._render(),i.setFocus()}return}if(s.quicksearch&&1===d.length&&/^\w$/.test(d)&&!r){const e=Date.now();e-i.lastQuicksearchTime>500&&(i.lastQuicksearchTerm=""),i.lastQuicksearchTime=e,i.lastQuicksearchTerm+=d;const s=i.findNextNode(i.lastQuicksearchTerm,i.getActiveNode());return s&&s.setActive(!0,{event:t}),void t.preventDefault()}switch(d){case"Enter":c.isActive()&&(c.isExpanded()?d="Subtract":c.isExpandable(!0)&&(d="Add"));break;case"ArrowLeft":c.expanded&&(d="Subtract");break;case"ArrowRight":if(!c.expanded&&c.isExpandable(!0))d="Add";else if(l===B.startCell||l===B.startRow)return t.preventDefault(),i.setCellNav(),!1}switch(d){case"+":case"Add":c.setExpanded(!0);break;case"-":case"Subtract":c.setExpanded(!1);break;case" ":c.getOption("checkbox")?c.toggleSelected():c.setActive(!0,{event:t});break;case"Enter":c.setActive(!0,{event:t});break;case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"Backspace":case"End":case"Home":case"Control+End":case"Control+Home":case"Meta+ArrowDown":case"Meta+ArrowUp":case"PageDown":case"PageUp":c.navigate(d,{activate:n,event:t});break;default:h=!1}}else{const e=r?r.type||r.tagName:"",s=r&&"checkbox"!==e;if(o){if("Escape"===d)return c.logDebug("Reset focused input on Escape"),r.setCustomValidity(""),c._render(),i.setFocus(),void i.setColumn(i.activeColIdx);if("Enter"!==d)return r&&r.checkValidity&&!r.checkValidity()?(c.logDebug(`Ignored ${d} inside invalid input`),!1):void c.logDebug(`Ignored ${d} inside focused input`)}else if(r&&1===d.length&&s)return r.focus(),r.value="",c.logDebug(`Focus input: ${d}`),!1;switch("Tab"===d?(d="ArrowRight",h=!0):"Shift+Tab"===d&&(d=i.activeColIdx>0?"ArrowLeft":"",h=!0),d){case"+":case"Add":c.setExpanded(!0);break;case"-":case"Subtract":c.setExpanded(!1);break;case" ":0===i.activeColIdx&&c.getOption("checkbox")?(c.toggleSelected(),h=!0):r&&"checkbox"===e&&(r.click(),h=!0);break;case"F2":r&&!o&&s&&(r.focus(),h=!0);break;case"Enter":i.setFocus(),(0===i.activeColIdx||u)&&c.isExpandable()?(c.setExpanded(!c.isExpanded()),h=!0):r&&!o&&s&&(r.focus(),h=!0);break;case"Escape":i.setFocus(),c.log("keynav: focus tree..."),i.isCellNav()&&l!==B.cell&&(c.log("keynav: setCellNav(false)"),i.setCellNav(!1),i.setFocus(),h=!0);break;case"ArrowLeft":i.setFocus(),u&&c.isExpanded()?c.setExpanded(!1):!u&&i.activeColIdx>0?i.setColumn(i.activeColIdx-1):l!==B.cell&&i.setCellNav(!1),h=!0;break;case"ArrowRight":i.setFocus(),u&&!c.isExpanded()?c.setExpanded():!u&&i.activeColIdx<i.columns.length-1&&i.setColumn(i.activeColIdx+1),h=!0;break;case"Home":i.setFocus(),!u&&i.activeColIdx>0&&i.setColumn(0),h=!0;break;case"End":i.setFocus(),!u&&i.activeColIdx<i.columns.length-1&&i.setColumn(i.columns.length-1),h=!0;break;case"ArrowDown":case"ArrowUp":case"Backspace":case"Control+End":case"Control+Home":case"Meta+ArrowDown":case"Meta+ArrowUp":case"PageDown":case"PageUp":c.navigate(d,{activate:n,event:t}),h=!0;break;default:h=!1}}h&&t.preventDefault()}}
33
33
  /*!
34
34
  * Wunderbaum - ext-logger
35
35
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
36
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
36
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
37
37
  */class ee extends j{constructor(e){super(e,"logger",{}),this.ignoreEvents=new Set(["iconBadge","render","discard"]),this.prefix=e+".ext-logger"}init(){const e=this.tree;if(e.getOption("debugLevel")>=4){const t=this.ignoreEvents,i=this.prefix;L(e,"callEvent",function(s,n){if(t.has(s))return e._superApply(arguments);const r=Date.now(),o=e._superApply(arguments);return e.logDebug(`${i}: callEvent('${s}') took ${Date.now()-r} ms.`,arguments[1]),o})}}onKeyEvent(e){this.tree.logDebug(`${this.prefix}: onKeyEvent()`,e)}}
38
38
  /*!
39
39
  * Wunderbaum - ext-dnd
40
40
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
41
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
41
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
42
42
  */const te="application/x-wunderbaum-node";class ie extends j{constructor(e){super(e,"dnd",{autoExpandMS:1500,multiSource:!1,effectAllowed:"all",dropEffectDefault:"move",guessDropEffect:!0,preventForeignNodes:!1,preventLazyParents:!0,preventNonNodes:!1,preventRecursion:!0,preventSameParent:!1,preventVoidMoves:!0,serializeClipboardData:!0,scroll:!0,scrollSensitivity:20,scrollSpeed:5,sourceCopyHook:null,dragStart:null,drag:null,dragEnd:null,dragEnter:null,dragOver:null,dragExpand:null,drop:null,dragLeave:null}),this.srcNode=null,this.lastTargetNode=null,this.lastEnterStamp=0,this.lastAllowedDropRegions=null,this.lastDropEffect=null,this.lastDropRegion=!1,this.currentScrollDir=0,this.applyScrollDirThrottled=l(this._applyScrollDir,50)}init(){super.init();const e=this.tree,t=e.options.dnd;t.dragStart&&M(e.element,"dragstart drag dragend",this.onDragEvent.bind(this)),t.dragEnter&&M(e.element,"dragenter dragover dragleave drop",this.onDropEvent.bind(this))}_leaveNode(){const e=this.lastTargetNode;this.lastEnterStamp=0,e&&(e.setClass("wb-drop-target wb-drop-over wb-drop-after wb-drop-before",!1),this.lastTargetNode=null)}unifyDragover(e){if(!1===e)return!1;if(e instanceof Set)return e.size>0&&e;if(!0===e)return new Set(["over","before","after"]);if("string"==typeof e||S(e))return(e=$(e)).size>0&&e;throw new Error("Unsupported drop region definition: "+e)}_calcDropRegion(e,t){const i=this.tree.options.rowHeightPx,s=e.offsetY;return!!t&&(3===t.size?s<.25*i?"before":s>.75*i?"after":"over":1===t.size&&t.has("over")?"over":s>i/2?"after":"before")}_guessDropEffect(e){var t;const i=this.treeOpts.dnd,s=null!==(t=i.effectAllowed)&&void 0!==t?t:"all",n=["all","copy","copyLink","copyMove"].includes(s),r=["all","link","copyLink","linkMove"].includes(s),o=["all","move","copyMove","linkMove"].includes(s);let l=i.dropEffectDefault;return i.guessDropEffect&&(d?(e.altKey&&n&&(l="copy"),e.metaKey&&o&&(l="move"),e.altKey&&e.metaKey&&r&&(l="link")):(e.ctrlKey&&n&&(l="copy"),e.shiftKey&&o&&(l="move"),e.altKey&&r&&(l="link"))),l}_isVoidDrop(e,t,i){return!(!this.treeOpts.dnd.preventVoidMoves||!t)&&("before"===i&&e===t.getNextSibling()||"after"===i&&e===t.getPrevSibling()||(t===e||t.parent===e))}_applyScrollDir(){if(this.isDragging()&&this.currentScrollDir){const e=this.tree.options.dnd,t=this.tree.element,i=t.scrollTop;this.currentScrollDir<0?t.scrollTop=Math.max(0,i-e.scrollSpeed):this.currentScrollDir>0&&(t.scrollTop=i+e.scrollSpeed)}}_autoScroll(e){const t=this.tree,i=t.options.dnd.scrollSensitivity,s=t.element,n=t.headerElement.clientHeight,r=s.offsetHeight,o=s.scrollTop;return this.currentScrollDir=0,o>0&&e>0&&e<=i+n?this.currentScrollDir=-1:o<s.scrollHeight-r&&e>=r-i&&(this.currentScrollDir=1),this.currentScrollDir&&this.applyScrollDirThrottled(),s.scrollTop-o}isDragging(){return!!this.srcNode}onDragEvent(e){var t;const i=this.treeOpts.dnd,s=ye.getNode(e);if(s){if(["dragstart","dragend"].includes(e.type)&&this.tree.logDebug(`onDragEvent.${e.type} srcNode: ${s}`,e),"dragstart"===e.type){if(e.dataTransfer.effectAllowed=i.effectAllowed,s.isEditingTitle())return s.logDebug("Prevented dragging node in edit mode."),e.preventDefault(),!1;if(!s._callEvent("dnd.dragStart",{event:e}))return e.preventDefault(),!1;const n=s.toDict(!0,e=>{e._orgKey=e.key,delete e.key});n._treeId=s.tree.id,i.serializeClipboardData&&("function"==typeof i.serializeClipboardData?e.dataTransfer.setData(te,i.serializeClipboardData(n,s)):e.dataTransfer.setData(te,JSON.stringify(n))),(null===(t=e.dataTransfer)||void 0===t?void 0:t.types.includes("text/plain"))||e.dataTransfer.setData("text/plain",s.title),this.srcNode=s,setTimeout(()=>{s.setClass("wb-drag-source")},0)}else"drag"===e.type?i.drag&&s._callEvent("dnd.drag",{event:e}):"dragend"===e.type&&(s.setClass("wb-drag-source",!1),this.srcNode=null,this.lastTargetNode&&this._leaveNode(),s._callEvent("dnd.dragEnd",{event:e}));return!0}this.tree.logWarn(`onDragEvent.${e.type}: no node`)}onDropEvent(e){var t;const i=this.srcNode,s=i?i.tree:null,n=ye.getNode(e),r=this.treeOpts.dnd,o=e.dataTransfer,l=this._calcDropRegion(e,this.lastAllowedDropRegions),a=(e,t)=>(e&&this.tree.log(`Prevented drop operation (${t}).`),e);if(!n)return this._leaveNode(),void e.preventDefault();if(["drop"].includes(e.type)&&this.tree.logDebug(`onDropEvent.${e.type} targetNode: ${n}, ea: ${null==o?void 0:o.effectAllowed}, de: ${null==o?void 0:o.dropEffect}, cy: ${e.offsetY}, r: ${l}, srcNode: ${i}`,e),"dragenter"===e.type){if(this.lastAllowedDropRegions=null,this.lastTargetNode&&this.lastTargetNode!==n&&this._leaveNode(),this.lastTargetNode=n,this.lastEnterStamp=Date.now(),a(n.isStatusNode(),"is status node")||a(r.preventForeignNodes&&n.tree!==s,"preventForeignNodes")||a(r.preventLazyParents&&!n.isLoaded(),"preventLazyParents")||a(r.preventNonNodes&&!i,"preventNonNodes")||a(r.preventRecursion&&(null==i?void 0:i.isAncestorOf(n)),"preventRecursion")||a(r.preventSameParent&&i&&n.parent===i.parent,"preventSameParent")||a(r.preventVoidMoves&&n===i,"preventVoidMoves"))return o.dropEffect="none",!0;o.dropEffect=this._guessDropEffect(e)||"none";let t=n._callEvent("dnd.dragEnter",{event:e,sourceNode:i});if(t=this.unifyDragover(t),!t)return o.dropEffect="none",!0;this.lastAllowedDropRegions=t,this.lastDropEffect=o.dropEffect;const l=this._calcDropRegion(e,this.lastAllowedDropRegions);return n.setClass("wb-drop-target"),n.setClass("wb-drop-over","over"===l),n.setClass("wb-drop-before","before"===l),n.setClass("wb-drop-after","after"===l),e.preventDefault(),!1}if("dragover"===e.type){const t=e.clientY-this.tree.element.offsetTop;this._autoScroll(t),o.dropEffect=this._guessDropEffect(e)||"none",n._callEvent("dnd.dragOver",{event:e,sourceNode:i});const s=this._calcDropRegion(e,this.lastAllowedDropRegions);if(this.lastDropRegion=s,this.lastDropEffect=o.dropEffect,r.autoExpandMS>0&&n.isExpandable(!0)&&!n._isLoading&&Date.now()-this.lastEnterStamp>r.autoExpandMS&&!1!==n._callEvent("dnd.dragExpand",{event:e,sourceNode:i})&&n.setExpanded(),!s||this._isVoidDrop(n,i,s))return;return n.setClass("wb-drop-over","over"===s),n.setClass("wb-drop-before","before"===s),n.setClass("wb-drop-after","after"===s),e.preventDefault(),!1}if("dragleave"===e.type)n._callEvent("dnd.dragLeave",{event:e,sourceNode:i});else if("drop"===e.type){e.stopPropagation(),e.preventDefault(),this._leaveNode();const i=this.lastDropRegion;let s=null===(t=e.dataTransfer)||void 0===t?void 0:t.getData(te);s=s?JSON.parse(s):null;const r=this.srcNode,o=this.lastDropEffect;n._callEvent("dnd.drop",{event:e,region:i,suggestedDropMode:"over"===i?"appendChild":i,suggestedDropEffect:o,sourceNode:r,sourceNodeData:s,dataTransfer:e.dataTransfer})}return!1}}
43
43
  /*!
44
44
  * Wunderbaum - drag_observer
45
45
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
46
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
46
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
47
47
  */class se{constructor(e){if(this.start={event:null,x:0,y:0,altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1},this.dragElem=null,this.dragging=!1,this.customData={},this.events=["mousedown","mouseup","mousemove","keydown"],!e.root)throw new Error("Missing `root` option.");this.opts=Object.assign({thresh:5},e),this.root=e.root,this._handler=this.handleEvent.bind(this),this.events.forEach(e=>{this.root.addEventListener(e,this._handler)})}disconnect(){this.events.forEach(e=>{this.root.removeEventListener(e,this._handler)})}getDragElem(){return this.dragElem}isDragging(){return this.dragging}stopDrag(e){if(this.dragging&&this.opts.dragstop&&e){e.type="dragstop";try{this.opts.dragstop(e)}catch(e){console.error("dragstop error",e)}}this.dragElem=null,this.dragging=!1,this.start.event=null,this.customData={}}handleEvent(e){const t=e.type,i=this.opts,s={type:e.type,startEvent:"mousedown"===t?e:this.start.event,event:e,customData:this.customData,dragElem:this.dragElem,dx:e.pageX-this.start.x,dy:e.pageY-this.start.y,apply:void 0};switch(t){case"keydown":this.stopDrag(s);break;case"mousedown":if(this.dragElem){this.stopDrag(s);break}if(i.selector){let t=e.target;if(t.matches(i.selector))this.dragElem=t;else{if(t=t.closest(i.selector),!t)break;this.dragElem=t}}this.start.event=e,this.start.x=e.pageX,this.start.y=e.pageY,this.start.altKey=e.altKey,this.start.ctrlKey=e.ctrlKey,this.start.metaKey=e.metaKey,this.start.shiftKey=e.shiftKey;break;case"mousemove":if(!this.dragElem)break;if(!this.dragging){if(i.thresh){if(s.dx*s.dx+s.dy*s.dy<i.thresh*i.thresh)break}if(s.type="dragstart",!1===i.dragstart(s)){this.stopDrag(s);break}this.dragging=!0}this.dragging&&this.opts.drag&&(s.type="drag",this.opts.drag(s));break;case"mouseup":if(!this.dragging){this.stopDrag(s);break}0===e.button?s.apply=!0:s.apply=!1,this.stopDrag(s)}}}
48
48
  /*!
49
49
  * Wunderbaum - common
50
50
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
51
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
51
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
52
52
  */const ne=/^(?!.*<).*[/.]/,re=/</,oe={bootstrap:{error:"bi bi-exclamation-triangle",loading:"bi bi-chevron-right wb-busy",noData:"bi bi-question-circle",expanderExpanded:"bi bi-chevron-down",expanderCollapsed:"bi bi-chevron-right",expanderLazy:"bi bi-chevron-right wb-helper-lazy-expander",checkChecked:"bi bi-check-square",checkUnchecked:"bi bi-square",checkUnknown:"bi bi-dash-square-dotted",radioChecked:"bi bi-circle-fill",radioUnchecked:"bi bi-circle",radioUnknown:"bi bi-record-circle",folder:"bi bi-folder2",folderOpen:"bi bi-folder2-open",folderLazy:"bi bi-folder-symlink",doc:"bi bi-file-earmark",colSortable:"bi bi-chevron-expand",colSortAsc:"bi bi-arrow-down",colSortDesc:"bi bi-arrow-up",colFilter:"bi bi-filter-circle",colFilterActive:"bi bi-filter-circle-fill wb-helper-invalid",colMenu:"bi bi-three-dots-vertical"},fontawesome6:{error:"fa-solid fa-triangle-exclamation",loading:"fa-solid fa-chevron-right fa-beat",noData:"fa-solid fa-circle-question",expanderExpanded:"fa-solid fa-chevron-down",expanderCollapsed:"fa-solid fa-chevron-right",expanderLazy:"fa-solid fa-chevron-right wb-helper-lazy-expander",checkChecked:"fa-regular fa-square-check",checkUnchecked:"fa-regular fa-square",checkUnknown:"fa-regular fa-square-minus",radioChecked:"fa-solid fa-circle",radioUnchecked:"fa-regular fa-circle",radioUnknown:"fa-regular fa-circle-question",folder:"fa-regular fa-folder-closed",folderOpen:"fa-regular fa-folder-open",folderLazy:"fa-solid fa-folder-plus",doc:"fa-regular fa-file",colSortable:"fa-solid fa-fw fa-sort",colSortAsc:"fa-solid fa-fw fa-sort-up",colSortDesc:"fa-solid fa-fw fa-sort-down",colFilter:"fa-solid fa-fw fa-filter",colFilterActive:"fa-solid fa-fw fa-filter wb-helper-invalid",colMenu:"fa-solid fa-fw fa-ellipsis-v"}},le=new Set(["_format","_keyMap","_positional","_typeList","_valueMap","_version","children","columns","types"]),ae={ArrowDown:"down",ArrowLeft:"left",ArrowRight:"right",ArrowUp:"up",Backspace:"parent",End:"lastCol",Home:"firstCol","Control+End":"last","Control+Home":"first","Meta+ArrowDown":"last","Meta+ArrowUp":"first",PageDown:"pageDown",PageUp:"pageUp"};function de(e){return e instanceof RegExp?function(t){return e.test(t.title)}:(f("string"==typeof e,`Expected a string or RegExp: ${e}`),function(t){return t.title===e})}function ce(e,t){const i=e.title.toLowerCase(),s=t.title.toLowerCase();return i===s?0:i>s?1:-1}function he(e){let{_format:t,_version:i=1,_keyMap:s,_valueMap:n}=e;f(1===i,`Expected file version 1 instead of ${i}`);let r=s,o={};if(r)for(const[e,t]of Object.entries(r))o[t]=e;if(r&&r.t){const e="source._keyMap maps from long to short since v0.7.0. Flip key/value!";console.warn(e),[r,o]=[o,r]}if(null!=e._typeList){const t='source._typeList is deprecated since v0.7.0: use source._valueMap: {"type": [...]} instead.';if(null!=n)throw new Error(t);console.warn(t),n={type:e._typeList},delete e._typeList}"flat"===t&&function(e){var t,i,s;const{_format:n,_keyMap:r={},_positional:o=[],children:l}=e,a=o.length;if("flat"!==n)throw new Error(`Expected source._format: "flat", but got ${n}`);if(a&&o.includes("children"))throw new Error(`source._positional must not include "children": ${o}`);let d=r;if(r.t){const e="source._keyMap maps from long to short since v0.7.0. Flip key/value!";console.warn(e),d={};for(const[e,t]of Object.entries(r))d[t]=e}const c=o.map(e=>{var t;return null!==(t=d[e])&&void 0!==t?t:e}),h=[],u={},p={},f=null!==(t=d.key)&&void 0!==t?t:"key",g=null!==(i=d.children)&&void 0!==i?i:"children";for(const[e,t]of l.entries()){let i;const[n,...r]=t;if(r.length===a)i={};else{if(r.length!==a+1)throw new Error(`unflattenSource: unexpected tuple length: ${t}`);if(i=r.pop(),"object"!=typeof i)throw new Error(`unflattenSource: Expected dict as last tuple element: ${t}`)}t[1]=null,null!=t[2]&&(t[2]=null),r.forEach((e,t)=>{i[c[t]]=e}),r.length=0,p[e]=i;const o=i[f];null!=o&&(u[o]=i);let l=null;if(null===n);else if("number"==typeof n){if(l=p[n],void 0===l)throw new Error(`unflattenSource: Could not find parent node by index: ${n}.`)}else if(l=u[n],void 0===l)throw new Error(`unflattenSource: Could not find parent node by key: ${n}`);l?(null!==(s=l[g])&&void 0!==s||(l[g]=[]),l[g].push(i)):h.push(i)}e.children=h}(e),delete e._format,delete e._version,delete e._keyMap,delete e._valueMap,delete e._positional,(s||n)&&function e(t){for(const i of t)Object.getOwnPropertyNames(i).forEach(e=>{const t=i[e];let r=e;if(s&&null!=o[e]&&(r=o[e],r!==e&&(i[r]=t,delete i[e])),n&&"number"==typeof t&&null!=n[r]){const e=n[r][t];if(null==e)throw new Error(`Expected valueMap[${r}][${t}] entry in [${n[r]}]`);i[r]=e}}),i.children&&e(i.children)}(e.children)}
53
53
  /*!
54
54
  * Wunderbaum - ext-grid
55
55
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
56
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
56
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
57
57
  */class ue extends j{constructor(e){super(e,"grid",{}),this.observer=new se({root:window.document,selector:"span.wb-col-resizer-active",thresh:4,dragstart:t=>{const i=ye.getEventInfo(t.startEvent),s=i.colDef,n=s&&this.tree.element.contains(t.dragElem)&&F(s.resizable,e.options.columnsResizable,!1);if(this.tree.element.classList.toggle("wb-col-resizing",!!n),i.colElem.classList.toggle("wb-col-resizing",!!n),n){t.customData.colDef=s,t.customData.orgCustomWidthPx=s.customWidthPx;const e=Number.parseInt(i.colElem.style.width,10);t.customData.orgWidthPx=e,s.customWidthPx=e,this.tree.update(U.colStructure)}return n},drag:e=>this.handleDrag(e),dragstop:e=>this.handleDrag(e)})}init(){super.init()}handleDrag(e){const t=e.customData,i=t.colDef;if("dragstop"===e.type||"drag"===e.type){if(this.tree.element.classList.remove("wb-col-resizing"),e.apply||"drag"===e.type){const s=O(i.minWidth,4),n=Math.max(s,t.orgWidthPx+e.dx);i.customWidthPx=n}else this.tree.log("Column resize cancelled",e),i.customWidthPx=t.orgCustomWidthPx;this.tree.update(U.colStructure)}}}
58
58
  /*!
59
59
  * Wunderbaum - deferred
60
60
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
61
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
61
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
62
62
  */class pe{constructor(){this._promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}resolve(e){this._resolve(e)}reject(e){this._reject(e)}promise(){return this._promise}then(e){return this._promise.then(e)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}}
63
63
  /*!
64
64
  * Wunderbaum - wunderbaum_node
65
65
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
66
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
67
- */const fe=new Set(["checkbox","classes","expanded","icon","iconTooltip","key","lazy","_partsel","radiogroup","refKey","selected","statusNodeType","title","tooltip","type","unselectable"]),ge=new Set(fe);ge.delete("_partsel"),ge.delete("unselectable");class ve{constructor(e,t,i){var s;this.refKey=void 0,this.children=null,this.classes=null,this.data={},this._isLoading=!1,this._requestId=0,this._errorInfo=null,this._partsel=!1,this._partload=!1,this.subMatchCount=0,this._rowIdx=0,this._rowElem=void 0,f(!t||t.tree===e,`Invalid parent: ${t}`),f(!i.children,"'children' not allowed here"),this.tree=e,this.parent=t,this.key=e._calculateKey(i,t),this.title=""+(null!==(s=i.title)&&void 0!==s?s:"<"+this.key+">"),this.expanded=!!i.expanded,this.lazy=!!i.lazy,null!=i.refKey&&(this.refKey=""+i.refKey),null!=i.type&&(this.type=""+i.type),null!=i.icon&&(this.icon=z(i.icon)),null!=i.tooltip&&(this.tooltip=z(i.tooltip)),null!=i.iconTooltip&&(this.iconTooltip=z(i.iconTooltip)),null!=i.statusNodeType&&(this.statusNodeType=""+i.statusNodeType),null!=i.colspan&&(this.colspan=!!i.colspan),null!=i.checkbox&&z(i.checkbox),null!=i.radiogroup&&(this.radiogroup=!!i.radiogroup),null!=i.selected&&(this.selected=!!i.selected),null!=i.unselectable&&(this.unselectable=!!i.unselectable),i.classes&&this.setClass(i.classes);for(const[e,t]of Object.entries(i))fe.has(e)||(this.data[e]=t);t&&!this.statusNodeType&&e._registerNode(this)}toString(){return`WunderbaumNode@${this.key}<'${this.title}'>`}*[Symbol.iterator](){const e=this.children;if(e)for(let t=0,i=e.length;t<i;t++){const i=e[t];yield i,i.children&&(yield*i)}}_callEvent(e,t){var i;return null===(i=this.tree)||void 0===i?void 0:i._callEvent(e,N({node:this,typeInfo:this.type?this.tree.types[this.type]:{}},t))}addChildren(e,t){const i=this.tree;let{before:s=null,applyMinExpanLevel:n=!0,_level:r}=null!=t?t:{};null!=r||(r=this.getLevel());const o=[];try{i.enableUpdate(!1),I(e)&&(e=[e]);const t=n&&r<i.options.minExpandLevel;for(const s of e){const e=s.children;delete s.children;const n=new ve(i,this,s);null!=e&&(s.children=e),t&&!n.isUnloaded()&&(n.expanded=!0),o.push(n),e&&n.addChildren(e,{_level:r+1})}if(this.children)if(null==s||0===this.children.length)this.children=this.children.concat(o);else{s=this.findDirectChild(s);const e=this.children.indexOf(s);f(e>=0,`options.before must be a direct child of ${this}`),this.children.splice(e,0,...o)}else this.children=o;i.update(U.structure)}finally{i.enableUpdate(!0)}return o[0]}addNode(e,t="appendChild"){switch("over"===t&&(t="appendChild"),t){case"after":return this.parent.addChildren(e,{before:this.getNextSibling()});case"before":return this.parent.addChildren(e,{before:this});case"prependChild":return this.addChildren(e,{before:0});case"appendChild":return this.addChildren(e)}f(!1,`Invalid mode: ${t}`)}applyCommand(e,t){return this.tree.applyCommand(e,this,t)}collapseSiblings(e){for(const t of this.parent.children)t!==this&&t.expanded&&t.setExpanded(!1,e)}setClass(e,t=!0){const i=$(e);if(t)null===this.classes&&(this.classes=new Set),i.forEach(e=>{var i;this.classes.add(e),null===(i=this._rowElem)||void 0===i||i.classList.toggle(e,t)});else{if(null===this.classes)return;i.forEach(e=>{var i;this.classes.delete(e),null===(i=this._rowElem)||void 0===i||i.classList.toggle(e,t)}),0===this.classes.size&&(this.classes=null)}}startEditTitle(){this.tree._callMethod("edit.startEditTitle",this)}async expandAll(e=!0,t){const i=this.tree,{collapseOthers:s,deep:n,depth:r,force:o,keepActiveNodeVisible:l=!0,loadLazy:a,resetLazy:d}=null!=t?t:{},c=this.tree.options.minExpandLevel||null,h=null!=r?r:o?null:c,u={deep:n,force:o,loadLazy:a,resetLazy:d,scrollIntoView:!1};this.logInfo(`expandAll(${e}, depth=${r}, minLevel=${h})`),f(!(e&&null!=n&&!s),"Expanding with `deep` option is not supported (implied by the `depth` option).");const p=i.logTime(`${this}.expandAll(${e}, depth=${r})`);try{i.enableUpdate(!1),await async function t(i,s){var o;const l=[];return null===(o=i.children)||void 0===o||o.forEach(i=>{if(e)if(!i.expanded&&(null==h||s<h)&&(i.children||a&&i.lazy)){const e=i.setExpanded(!0,u);l.push(e),null==r&&e.then(async()=>{await t(i,s+1)})}else l.push(t(i,s+1));else(null==h||s>=h)&&i.setExpanded(!1,u),(null!=h&&s<h||n)&&t(i,s+1)}),new Promise(e=>{Promise.all(l).then(()=>{e(!0)})})}(this,0),s&&(f(e,"Option `collapseOthers` requires flag=true"),f(null!=h,"Option `collapseOthers` requires `depth` or `minExpandLevel`"),this.expandAll(!1,{depth:h}))}finally{i.enableUpdate(!0),i.logTimeEnd(p)}i.activeNode&&l&&i.activeNode.scrollIntoView()}findAll(e){const t="function"==typeof e?e:de(e),i=[];return this.visit(e=>{t(e)&&i.push(e)}),i}findDirectChild(e){const t=this.children;if(!t)return null;if("string"==typeof e){for(let i=0,s=t.length;i<s;i++)if(t[i].key===e)return t[i]}else{if("number"==typeof e)return t[e];if(e.parent===this)return e}return null}findFirst(e){const t="function"==typeof e?e:de(e);let i=null;return this.visit(e=>{if(t(e))return i=e,!1}),i}findRelatedNode(e,t=!1){return this.tree.findRelatedNode(this,e,t)}*format_iter(e,t){function i(e){const t=e.parent.children;return e===t[t.length-1]}null!=t||(t=[" "," | "," ╰─ "," ├─ "]),null!=e||(e=e=>""+e);const s=s=>{const n=[e(s)];n.unshift(t[i(s)?2:3]);let r=s.parent;for(;r&&r!==this;)n.unshift(t[i(r)?0:1]),r=r.parent;return n.join("")};yield e(this);for(const e of this)yield s(e)}format(e,t){const i=[];for(const s of this.format_iter(e,t))i.push(s);return i.join("\n")}getColElem(e){var t;"string"==typeof e&&(e=this.tree.columns.findIndex(t=>t.id===e));const i=null===(t=this._rowElem)||void 0===t?void 0:t.querySelectorAll("span.wb-col");return i?i[e]:null}getCloneList(e=!1){if(!this.refKey)return[];const t=this.tree.findByRefKey(this.refKey);return e?t:[...t].filter(e=>e!==this)}getFirstChild(){return this.children?this.children[0]:null}getLastChild(){return this.children?this.children[this.children.length-1]:null}getLevel(){let e=0,t=this.parent;for(;t;)e++,t=t.parent;return e}getNextSibling(){const e=this.parent.children,t=e.indexOf(this);return e[t+1]||null}getParent(){return this.parent}getParentList(e=!1,t=!1){const i=[];let s=t?this:this.parent;for(;s;)(e||s.parent)&&i.unshift(s),s=s.parent;return i}getPath(e=!0,t="title",i="/"){let s;const n=[],r="function"==typeof t;return this.visitParents(e=>{e.parent&&(s=r?t(e):e[t],n.unshift(s))},e),n.join(i)}getPrevSibling(){const e=this.parent.children,t=e.indexOf(this);return e[t-1]||null}hasChildren(){if(this.lazy){if(null==this.children)return;if(0===this.children.length)return!1;if(1===this.children.length&&this.children[0].isStatusNode())return;return!0}return!(!this.children||!this.children.length)}hasClass(e){return!!this.classes&&this.classes.has(e)}hasFocus(){return this.tree.focusNode===this}isActive(){return this.tree.activeNode===this}isAncestorOf(e){return e&&e.isDescendantOf(this)}isChildOf(e){return e&&this.parent===e}isClone(){return!!this.refKey&&this.tree.findByRefKey(this.refKey).length>1}isColspan(){return!!this.getOption("colspan")}isDescendantOf(e){if(!e||e.tree!==this.tree)return!1;let t=this.parent;for(;t;){if(t===e)return!0;t===t.parent&&v(`Recursive parent link: ${t}`),t=t.parent}return!1}isExpandable(e=!1){return!(e&&this.expanded||!1===this.children)&&(null==this.children?!!this.lazy:0!==this.children.length||!!this.tree.options.emptyChildListExpandable)}isEditingTitle(){return this.tree._callMethod("edit.isEditingTitle",this)}isExpanded(){return!!this.expanded}isFirstSibling(){const e=this.parent;return!e||e.children[0]===this}isLastSibling(){const e=this.parent;return!e||e.children[e.children.length-1]===this}isLazy(){return!!this.lazy}isLoaded(){return!this.lazy||void 0!==this.hasChildren()}isLoading(){return this._isLoading}isPagingNode(){return"paging"===this.statusNodeType}isParentOf(e){return e&&e.parent===this}isPartload(){return!!this._partload}isPartsel(){return!this.selected&&!!this._partsel}isRadio(){return!!this.parent.radiogroup||"radio"===this.getOption("checkbox")}isRendered(){return!!this._rowElem}isRootNode(){return this.tree.root===this}isSelected(){return!!this.selected||!!this._partsel&&void 0}isStatusNode(){return!!this.statusNodeType}isTopLevel(){return this.tree.root===this.parent}isUnloaded(){return void 0===this.hasChildren()}isVisible(){const e="hide"===this.tree.filterMode,t=this.getParentList(!1,!1);if(e&&!this.match&&!this.subMatchCount)return!1;for(let e=0,i=t.length;e<i;e++){if(!t[e].expanded)return!1}return!0}_loadSourceObject(e,t){var i;const s=this.tree;null!=t||(t=this.getLevel());const n=this._callEvent("receive",{response:e});null!=n&&(e=n),S(e)&&(e={children:e}),f(I(e),`Expected an array or plain object: ${e}`);const r=null!==(i=e.format)&&void 0!==i?i:"nested";f("nested"===r||"flat"===r,`Expected source.format = 'nested' or 'flat': ${r}`),he(e),f(e.children,"If `source` is an object, it must have a `children` property"),e.types&&(s.logInfo("Redefine types",e.columns),s.setTypes(e.types,!1),delete e.types),e.columns&&(s.logInfo("Redefine columns",e.columns),s.columns=e.columns,delete e.columns,s.update(U.colStructure)),this.addChildren(e.children);for(const[t,i]of Object.entries(e))le.has(t)||(s.data[t]=i);"hier"===s.options.selectMode&&this.fixSelection3FromEndNodes(),this.resetNativeChildOrder(),this._callEvent("load")}async _fetchWithOptions(e){var t,i;let s,n,r,o,l,a={};"string"==typeof e?(s=e,a.method="GET"):I(e)?(({url:s,params:n,body:r,options:o,...l}=e),f(!l||0===Object.keys(l).length,`Unexpected source properties: ${Object.keys(l)}. Use 'options' instead.`),f("string"==typeof s,"expected source.url as string"),I(o)&&(a=o),I(r)&&(f(!a.body,"options.body should be passed as source.body"),a.body=JSON.stringify(a.body),null!==(t=a.method)&&void 0!==t||(a.method="POST")),I(n)&&(s+="?"+new URLSearchParams(n),null!==(i=a.method)&&void 0!==i||(a.method="GET"))):(s="",v(`Unsupported source format: ${e}`)),this.setStatus(V.loading);const d=await fetch(s,a);return d.ok||v(`GET ${s} returned ${d.status}, ${d}`),await d.json()}async load(e){const t=this.tree,i=Date.now(),s=this.parent,n=Date.now();let r=0,o=0,l=0;this._requestId&&this.logWarn(`Recursive load request #${i} while #${this._requestId} is pending. The previous request will be ignored.`),this._requestId=i;try{if("string"==typeof e?e:e.url){const t=await this._fetchWithOptions(e);if(o=Date.now()-n,this._requestId&&this._requestId>i)return void this.logWarn(`Ignored load response #${i} because #${this._requestId} is pending.`);if(this.logDebug(`Received response for load request #${i}`),null===this.parent&&null!==s)return void this.logWarn("Lazy parent node was removed while loading: discarding response.");this.setStatus(V.ok);const r=Date.now();this._loadSourceObject(t),l=Date.now()-r}else{if("function"==typeof e.then){const i=t.logTime(`Resolve thenable ${e}`);e=await Promise.resolve(e),t.logTimeEnd(i)}this._loadSourceObject(e),l=Date.now()-n}}catch(t){throw this.logError("Error during load()",e,t),this._callEvent("error",{error:t}),this.setStatus(V.error,{message:""+t}),t}finally{this._requestId=0,r=Date.now()-n,t.options.debugLevel>=3&&t.logInfo(`Load source took ${r/1e3} seconds (transfer: ${o/1e3}s, processing: ${l/1e3}s)`)}}async loadLazy(e=!1){const t=this.expanded;if(f(this.lazy,"load() requires a lazy node"),e||this.isUnloaded())if(this.isLoading())this.logWarn("loadLazy() called while already loading: ignored.");else{this.isLoaded()&&this.resetLazy(),this.setStatus(V.loading);try{const e=await this._callEvent("lazyLoad");if(!1===e)return void this.setStatus(V.ok);f(S(e)||e&&e.url,"The lazyLoad event must return a node list, `{url: ...}`, or false."),await this.load(e),this.setStatus(V.ok),t?(this.expanded=!0,this.tree.update(U.structure)):this.update()}catch(e){this.logError("Error during loadLazy()",e),this._callEvent("error",{error:e}),this.setStatus(V.error,{message:""+e})}}}log(...e){this.tree.options.debugLevel>=4&&console.log(this.toString(),...e)}logDebug(...e){this.tree.options.debugLevel>=4&&console.debug(this.toString(),...e)}logError(...e){this.tree.options.debugLevel>=1&&console.error(this.toString(),...e)}logInfo(...e){this.tree.options.debugLevel>=3&&console.info(this.toString(),...e)}logWarn(...e){this.tree.options.debugLevel>=2&&console.warn(this.toString(),...e)}async makeVisible(e){let t;const i=new pe,s=[],n=this.getParentList(!1,!1),r=n.length,o=T(e,"noAnimation",!1),l=T(e,"scrollIntoView",!0);for(t=r-1;t>=0;t--){const e={noAnimation:o};s.push(n[t].setExpanded(!0,e))}return Promise.all(s).then(()=>{l&&this.tree?(this.tree.updatePendingModifications(),this.scrollIntoView().then(()=>{i.resolve()})):i.resolve()}),i.promise()}moveTo(e,t="appendChild",i){let s;"over"===t&&(t="appendChild"),"prependChild"===t&&(e.children&&e.children.length?(t="before",e=e.children[0]):t="appendChild");const n=this.tree,r=this.parent,o="appendChild"===t?e:e.parent;if(this!==e){if(this.parent?o.isDescendantOf(this)&&v("Cannot move a node to its own descendant"):v("Cannot move system root"),o!==r&&r.triggerModifyChild("remove",this),1===this.parent.children.length){if(this.parent===o)return;this.parent.children=this.parent.lazy?[]:null,this.parent.expanded=!1}else s=this.parent.children.indexOf(this),f(s>=0,"invalid source parent"),this.parent.children.splice(s,1);if(this.parent=o,o.hasChildren())switch(t){case"appendChild":o.children.push(this);break;case"before":s=o.children.indexOf(e),f(s>=0,"invalid target parent"),o.children.splice(s,0,this);break;case"after":s=o.children.indexOf(e),f(s>=0,"invalid target parent"),o.children.splice(s+1,0,this);break;default:v(`Invalid mode '${t}'.`)}else o.children=[this];i&&e.visit(i,!0),o===r?o.triggerModifyChild("move",this):o.triggerModifyChild("add",this),n!==e.tree&&(this.logWarn("Cross-tree moveTo is experimental!"),this.visit(t=>{t.tree=e.tree},!0)),setTimeout(()=>{n.update(U.any)},0)}}async navigate(e,t){var i;const s=null!==(i=ae[e])&&void 0!==i?i:e,n=this.findRelatedNode(s);if(!n)return this.logWarn(`Could not find related node '${e}'.`),Promise.resolve(this);try{n.makeVisible({scrollIntoView:!1})}catch(e){}return n.setFocus(),!1===(null==t?void 0:t.activate)?Promise.resolve(this):n.setActive(!0,{event:null==t?void 0:t.event})}remove(){const e=this.tree,t=this.parent.children.indexOf(this);this.triggerModify("remove"),this.parent.children.splice(t,1),this.visit(t=>{t.removeMarkup(),e._unregisterNode(t)},!0),e.update(U.structure)}removeChildren(){var e,t;const i=this.tree;this.children&&((null===(e=i.activeNode)||void 0===e?void 0:e.isDescendantOf(this))&&i.activeNode.setActive(!1),(null===(t=i.focusNode)||void 0===t?void 0:t.isDescendantOf(this))&&i._setFocusNode(null),this.triggerModifyChild("remove",null),this.visit(e=>{i._unregisterNode(e)}),this.lazy?this.children=[]:this.children=null,this.isRootNode()||(this.expanded=!1),this.tree.update(U.structure))}removeMarkup(){this._rowElem&&(delete this._rowElem._wb_node,this._rowElem.remove(),this._rowElem=void 0)}_getRenderInfo(){const e={},t={},i=this.isColspan(),s=this._rowElem?this._rowElem.querySelectorAll("span.wb-col"):null;let n=0;for(const r of this.tree.columns)e[r.id]={id:r.id,idx:n,elem:s?s[n]:null,info:r},i||"*"===r.id||(t[r.id]=e[r.id]),n++;return{allColInfosById:e,renderColInfosById:t}}_createIcon(e,t,i){const s=this.tree._createNodeIcon(this,i,!0);return s&&(t?e.replaceChild(s,t):e.appendChild(s)),s}_render_markup(e){const t=this.tree,i=t.options,s=i.rowHeightPx,n=this.getOption("checkbox"),r=t.columns,o=this.getLevel(),l=t.isRowNav()?null:t.activeColIdx;let a,d=this._rowElem,c=null,h=null;const u=!d;f(u,"Expected unrendered node"),f(!u||e&&e.after,"opts.after expected, unless updating"),f(!this.isRootNode(),"Root node not allowed"),d=document.createElement("div"),d.classList.add("wb-row"),d.style.top=this._rowIdx*s+"px",this._rowElem=d,d._wb_node=this;const p=document.createElement("span");p.classList.add("wb-node","wb-col"),d.appendChild(p);let g=0;n&&(c=document.createElement("i"),c.classList.add("wb-checkbox"),("radio"===n||this.parent.radiogroup)&&c.classList.add("wb-radio"),p.appendChild(c),g+=20);for(let e=o-1;e>0;e--)a=document.createElement("i"),a.classList.add("wb-indent"),p.appendChild(a),g+=20;(!i.minExpandLevel||o>i.minExpandLevel)&&(h=document.createElement("i"),h.classList.add("wb-expander"),p.appendChild(h),g+=20);this._createIcon(p,null,!h)&&(g+=20);const v=document.createElement("span");v.classList.add("wb-title"),p.appendChild(v),p._ofsTitlePx=g,t.options.dnd.dragStart&&(p.draggable=!0);if(!this.isColspan()&&r.length>1){let e=0;for(const t of r){let i;e++,"*"===t.id?i=p:(i=document.createElement("span"),i.classList.add("wb-col"),d.appendChild(i)),e===l&&i.classList.add("wb-active"),t.classes&&i.classList.add(...t.classes.split(" ")),i.style.left=t._ofsPx+"px",i.style.width=t._widthPx+"px",u&&t.html&&"string"==typeof t.html&&(i.innerHTML=t.html)}}switch(e?e.after:"last"){case"first":t.nodeListElement.prepend(d);break;case"last":t.nodeListElement.appendChild(d);break;default:e.after.after(d)}e.isNew=!0,this._render_data(e)}_render_data(e){f(this._rowElem,"No _rowElem");const t=this.tree,i=t.options,s=this._rowElem,n=!!e.isNew,r=!!e.preventScroll,o=t.columns,l=this.isColspan(),a=s.querySelector("span.wb-node"),d=a.querySelector("span.wb-title"),c=t.element.scrollTop;this.titleWithHighlight?d.innerHTML=this.titleWithHighlight:d.textContent=this.title;const h=this.getOption("tooltip",!1);if(h&&(d.title=!0===h?this.title:h),r&&(t.element.scrollTop=c),!i.skeleton)if(l){const e=t.element.clientWidth;d.style.width=e-a._ofsTitlePx-7+"px"}else d.style.width=o[0]._widthPx-a._ofsTitlePx-7+"px";if(e.isDataChange=!0,this._render_status(e),this.statusNodeType)this._callEvent("renderStatusNode",{isNew:n,nodeElem:a,isColspan:l});else if(this.parent){const e=this._getRenderInfo();this._callEvent("render",{isNew:n,nodeElem:a,isColspan:l,allColInfosById:e.allColInfosById,renderColInfosById:e.renderColInfosById})}}_render_status(e){const t=this.tree,i=t.iconMap,s=t.options,n=this.type?t.types[this.type]:null,r=this._rowElem,o=r.querySelector("span.wb-node"),l=o.querySelector("i.wb-expander"),a=o.querySelector("i.wb-checkbox"),d=["wb-row"];if(this.expanded&&d.push("wb-expanded"),this.lazy&&d.push("wb-lazy"),this.selected&&d.push("wb-selected"),this._partsel&&d.push("wb-partsel"),this===t.activeNode&&d.push("wb-active"),this===t.focusNode&&d.push("wb-focus"),this._errorInfo&&d.push("wb-error"),this._isLoading&&d.push("wb-loading"),this.isColspan()&&d.push("wb-colspan"),this.statusNodeType&&d.push("wb-status-"+this.statusNodeType),this.match&&d.push("wb-match"),this.subMatchCount&&d.push("wb-submatch"),s.skeleton&&d.push("wb-skeleton"),r.className=d.join(" "),this.classes&&r.classList.add(...this.classes),n&&n.classes&&r.classList.add(...n.classes),l){let e=null;this._isLoading?e=i.loading:this.isExpandable(!1)?e=this.expanded?i.expanderExpanded:i.expanderCollapsed:this.lazy&&null==this.children&&(e=i.expanderLazy),null==e?(l.className="wb-expander",l.classList.add("wb-indent")):re.test(e)?l.replaceWith(x(e)):ne.test(e)?l.style.backgroundImage=`url('${e}')`:l.className="wb-expander "+e}if(a){let e="wb-checkbox ";this.isRadio()?(e+="wb-radio ",this.selected?e+=i.radioChecked:e+=i.radioUnchecked):this.selected?e+=i.checkChecked:this._partsel?e+=i.checkUnknown:e+=i.checkUnchecked,a.className=e}if(!e.isNew){let e=0;for(const i of r.children)i.classList.toggle("wb-active",e++===t.activeColIdx),i.classList.remove("wb-error","wb-invalid");const i=o.querySelector("i.wb-icon");i&&this._createIcon(o,i,!l)}if(!1!==e.resizeCols&&!this.isColspan()){const e=r.querySelectorAll("span.wb-col");let t=0,i=0;for(const s of this.tree.columns){const n=e[t];n.style.left=`${i}px`,n.style.width=`${s._widthPx}px`,t++,i+=s._widthPx}}}_render(e){const t=Object.assign({change:U.data},e);switch(this._rowElem||(t.change=U.row),t.change){case"status":this._render_status(t);break;case"data":this._render_data(t);break;case"row":this._render_markup(t);break;default:v(`Invalid change type '${t.change}'.`)}}resetLazy(){this.removeChildren(),this.expanded=!1,this.lazy=!0,this.children=null,this.tree.update(U.structure)}toDict(e=!1,t){const i={};if(ge.forEach(e=>{const t=this[e];t instanceof Set?t.size&&(i[e]=Array.prototype.join.call(t.keys()," ")):(t||!1===t||0===t)&&(i[e]=t)}),D(this.data)||(i.data=N({},this.data),D(i.data)&&delete i.data),t){const s=t(i,this);if(!1===s)return!1;"skip"===s&&(e=!1)}if(e&&S(this.children)){i.children=[];for(let e=0,s=this.children.length;e<s;e++){const s=this.children[e];if(!s.isStatusNode()){const e=s.toDict(!0,t);!1!==e&&i.children.push(e)}}}return i}getOption(e,t){const i=this.tree;let s=i.options;e.indexOf(".")>=0&&([s,e]=e.split("."));const n=s[e];if("function"==typeof n){const e=n.call(i,{type:"resolve",tree:i,node:this});if(void 0!==e)return e}if(void 0!==this[e])return this[e];const r=this.type?i.types[this.type]:void 0,o=r?r[e]:void 0;return void 0!==o?o:null!=n?n:t}async scrollIntoView(e){const t=Object.assign({node:this},e);return this.tree.scrollTo(t)}async setActive(e=!0,t){const i=this.tree,s=i.getActiveNode(),n=null==t?void 0:t.retrigger,r=null==t?void 0:t.focusTree,o=null==t?void 0:t.noEvents,l=null==t?void 0:t.event,a=null==t?void 0:t.colIdx,d=null==t?void 0:t.edit;if(f(!d||null!=a,"edit requires colIdx"),!o)if(e){if(s!==this||n){if(!1===(null==s?void 0:s._callEvent("deactivate",{nextNode:this,event:l}))||!1===this._callEvent("beforeActivate",{prevNode:s,event:l}))return;i._setActiveNode(null),null==s||s.update(U.status)}}else(s===this||n)&&this._callEvent("deactivate",{nextNode:null,event:l});return s!==this&&(e&&i._setActiveNode(this),null==s||s.update(U.status),this.update(U.status)),this.makeVisible().then(()=>{e&&((r||d)&&(i.setFocus(),i._setFocusNode(this),i.focusNode.setFocus()),null!=a&&i.isCellNav()&&i.setColumn(a,{edit:d}),o||this._callEvent("activate",{prevNode:s,event:l}))})}async setExpanded(e=!0,t){const{force:i,scrollIntoView:s,immediate:n,resetLazy:r}=null!=t?t:{},o=!(null==t?void 0:t.noEvents);if(!e&&this.isExpanded()&&this.getLevel()<=this.tree.getOption("minExpandLevel")&&!i)return void this.logDebug("Ignored collapse request below minExpandLevel.");if(!e==!this.expanded)return;if(o&&!1===this._callEvent("beforeExpand",{flag:e}))return;e&&this.getOption("autoCollapse")&&this.collapseSiblings(t),e&&this.lazy&&null==this.children?await this.loadLazy():!e&&r&&this.lazy&&this.children&&this.resetLazy(),this.expanded=e;const l={immediate:n};if(this.tree.update(U.structure,l),e&&s){const e=this.getLastChild();e&&(this.tree.updatePendingModifications(),e.scrollIntoView({topNode:this}))}o&&this._callEvent("expand",{flag:e})}setFocus(e=!0){f(!!e,"Blur is not yet implemented");const t=this.tree.focusNode;this.tree._setFocusNode(this),null==t||t.update(),this.update()}setIcon(e){this.icon=e,this.update()}setKey(e,t){throw new Error("Not yet implemented")}update(e=U.data){f(e===U.status||e===U.data,`Invalid change type ${e}`),this.tree.update(e,this)}getSelectedNodes(e=!1){const t=[];return this.visit(i=>{if(i.selected&&(t.push(i),!0===e))return"skip"}),t}getRefKeys(e=!1){const t=new Set;return this.visit(i=>{null==i.refKey||e&&!i.selected||t.add(i.refKey)}),Array.from(t)}toggleSelected(e){let t=this.isSelected();return t=void 0!==t||this.isRadio()?!t:this._anySelectable(),this.setSelected(t,e)}_anySelectable(){let e=!1;return this.visit(t=>{if(!1===t.selected&&!t.unselectable&&!t.hasChildren()&&!t.parent.radiogroup)return e=!0,!1}),e}_changeSelectStatusProps(e){let t=!1;switch(e){case!1:t=this.selected||this._partsel,this.selected=!1,this._partsel=!1;break;case!0:t=!this.selected||!this._partsel,this.selected=!0,this._partsel=!0;break;case void 0:t=this.selected||!this._partsel,this.selected=!1,this._partsel=!!this.hasChildren();break;default:v(`Invalid state: ${e}`)}return t&&this.update(),t}fixSelection3AfterClick(e){const t=!!(null==e?void 0:e.force),i=this.isSelected();this.visit(e=>{if(e.radiogroup)return"skip";!t&&e.getOption("unselectable")||e._changeSelectStatusProps(i)}),this.fixSelection3FromEndNodes()}fixSelection3FromEndNodes(e){const t=!!(null==e?void 0:e.force);f("hier"===this.tree.options.selectMode,"expected selectMode 'hier'");const i=e=>{let s;const n=e.children;if(n&&n.length){let e=!0,t=!1;for(let s=0,r=n.length;s<r;s++){const r=n[s],o=i(r);!1!==o&&(t=!0),!0!==o&&(e=!1)}s=!!e||!!t&&void 0}else s=!!e.selected;return e._partsel&&!e.selected&&e.lazy&&null==e.children&&(s=void 0),!t&&e.getOption("unselectable")||e._changeSelectStatusProps(s),s};i(this),this.visitParents(e=>{let t;const i=e.children;let s=!0,n=!1;for(let e=0,r=i.length;e<r;e++){const r=i[e];t=!!r.selected,(t||r._partsel)&&(n=!0),t||(s=!1)}t=!!s||!!n&&void 0,e._changeSelectStatusProps(t)})}setSelected(e=!0,t){const i=this.tree,s=!(null==t?void 0:t.noEvents),n=this.isSelected(),r=this.parent&&this.parent.radiogroup,o=i.options.selectMode,l=(null==t?void 0:t.force)||!this.getOption("unselectable");return e=!!e,l?(null==t?void 0:t.propagateDown)&&"multi"===o?(i.runWithDeferredUpdate(()=>{this.visit(t=>{t.setSelected(e)})}),n):(e===n||s&&!1===this._callEvent("beforeSelect",{flag:e})||(i.runWithDeferredUpdate(()=>{if(r){if(!e&&!(null==t?void 0:t.force))return n;for(const e of this.parent.children)e.selected=e===this}else this.selected=e,"hier"===o?this.fixSelection3AfterClick():"single"===o&&e&&i.visit(e=>{e!==this&&(e.selected=!1)})}),s&&this._callEvent("select",{flag:e})),n):n}setStatus(e,t){const i=this.tree,s=null==t?void 0:t.message,n=null==t?void 0:t.details;let r=null;const o=e=>{const t=this.children,s=t?t[0]:null;return f(e.statusNodeType,"Not a status node"),f(!s||!s.isStatusNode(),"Child must not be a status node"),r=this.addNode(e,"prependChild"),r.match=-1,i.update(U.structure),r};switch((()=>{const e=this.children;e&&e.length&&e[0].isStatusNode()&&e[0].remove()})(),e){case"ok":this._isLoading=!1,this._errorInfo=null;break;case"loading":this._isLoading=!0,this._errorInfo=null,this.parent?this.update(U.status):o({statusNodeType:e,title:i.options.strings.loading+(s?" ("+s+")":""),checkbox:!1,colspan:!0,tooltip:n});break;case"error":o({statusNodeType:e,title:i.options.strings.loadError+(s?" ("+s+")":""),checkbox:!1,colspan:!0,tooltip:n}),this._isLoading=!1,this._errorInfo={message:s,details:n};break;case"noData":o({statusNodeType:e,title:s||i.options.strings.noData,checkbox:!1,colspan:!0,tooltip:n}),this._isLoading=!1,this._errorInfo=null;break;default:v("invalid node status "+e)}return i.update(U.structure),r}setTitle(e){this.title=e,this.update()}setTooltip(e){this.tooltip=e,this.update()}sortChildren(e=ce,t=!1){return this.tree.logDeprecate("node.sortChildren()",{since:"0.14.0"}),this.sort({cmp:e||void 0,deep:t})}resetNativeChildOrder(e){const{recursive:t=!0,propName:i="_nativeIndex"}=null!=e?e:{};this.children&&this.children.forEach((s,n)=>{s.data[i]=n,t&&s.children&&s.resetNativeChildOrder(e)})}sortByProperty(e){return this.tree.logDeprecate("node.sortByProperty()",{since:"0.14.0"}),this.sort(e)}sort(e){const t=this.tree;let{propName:i,deep:s=!0,key:n,order:r,caseInsensitive:o=!0,cmp:l,updateColInfo:a=!1,nativeOrderPropName:d="_nativeIndex",colId:c}=e;null!=i||(i=c),"*"===i&&(i="title");const h=!0===t.options.sortFoldersFirst?e=>!1!==e.hasChildren()||"folder"===e.type:t.options.sortFoldersFirst;if(a){const t=this.tree._columnsById[e.colId];f(t,`Invalid colId specified: ${e.colId}`),null!=r||(r=A(t.sortOrder,["asc","desc",void 0]));for(const e of this.tree.columns)e.sortOrder=e===t?r:void 0;void 0===r&&(i=d,r="asc"),this.tree.update(U.colStructure)}else null!=i||(i="title"),null!=r||(r="asc");this.logDebug(`sort(), propName=${i}, ${r}`,e),f(i||l||n,"No `propName` or `key` specified"),null==n&&null==l&&(n=e=>{let t;return t=ge.has(i)?e[i]:e.data[i],o&&"string"==typeof t&&(t=t.toLowerCase()),t}),l?(f(!n,"`key` and `cmp` are mutually exclusive"),t.logDeprecate("SortOptions.cmp",{since:"0.14.0",hint:"use the `key` callback instead"})):((e.propName||e.caseInsensitive)&&t.logWarn("sort(): ignoring propName, caseInsensitive"),l=(e,t)=>{if(h){const i=h(e);if(i!==h(t))return i?-1:1}let i=n(e),s=n(t);return null==i?i="string"==typeof s?"":0:"boolean"==typeof i&&(i=i?1:0),null==s?s="string"==typeof i?"":0:"boolean"==typeof s&&(s=s?1:0),"desc"===r?i===s?0:i>s?-1:1:i===s?0:i>s?1:-1}),this.children&&function e(t){if(t&&(t.sort(l),s))for(let i=0,s=t.length;i<s;i++)t[i].children&&e(t[i].children)}(this.children),this.tree.update(U.structure)}resort(e={}){for(const t of this.tree.columns)if(t.sortOrder){e.colId=t.id,e.order=t.sortOrder,this.sort(e);break}}triggerModifyChild(e,t,i){this.logDebug(`modifyChild(${e})`,i,t),this.tree.options.modifyChild&&(t&&t.parent!==this&&v("child "+t+" is not a child of "+this),this._callEvent("modifyChild",N({operation:e,child:t},i)))}triggerModify(e,t){this.parent.triggerModifyChild(e,this,t)}visit(e,t=!1){let i=!0;const s=this.children;if(!0===t&&(i=e(this),!1===i||"skip"===i))return i;if(s)for(let t=0,n=s.length;t<n&&(i=s[t].visit(e,!0),!1!==i);t++);return i}visitParents(e,t=!1){if(t&&!1===e(this))return!1;let i=this.parent;for(;i;){if(!1===e(i))return!1;i=i.parent}return!0}visitSiblings(e,t=!1){const i=this.parent.children;for(let s=0,n=i.length;s<n;s++){const n=i[s];if((t||n!==this)&&!1===e(n))return!1}return!0}isMatched(){return!(this.tree.filterMode&&!this.match)}}ve.sequence=0;
66
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
67
+ */const fe=new Set(["checkbox","classes","expanded","icon","iconTooltip","key","lazy","_partsel","radiogroup","refKey","selected","statusNodeType","title","tooltip","type","unselectable"]),ge=new Set(fe);ge.delete("_partsel"),ge.delete("unselectable");class ve{constructor(e,t,i){var s;this.refKey=void 0,this.children=null,this.classes=null,this.data={},this._isLoading=!1,this._requestId=0,this._errorInfo=null,this._partsel=!1,this._partload=!1,this.subMatchCount=0,this._rowIdx=0,this._rowElem=void 0,f(!t||t.tree===e,`Invalid parent: ${t}`),f(!i.children,"'children' not allowed here"),this.tree=e,this.parent=t,this.key=e._calculateKey(i,t),this.title=""+(null!==(s=i.title)&&void 0!==s?s:"<"+this.key+">"),this.expanded=!!i.expanded,this.lazy=!!i.lazy,null!=i.refKey&&(this.refKey=""+i.refKey),null!=i.type&&(this.type=""+i.type),null!=i.icon&&(this.icon=z(i.icon)),null!=i.tooltip&&(this.tooltip=z(i.tooltip)),null!=i.iconTooltip&&(this.iconTooltip=z(i.iconTooltip)),null!=i.statusNodeType&&(this.statusNodeType=""+i.statusNodeType),null!=i.colspan&&(this.colspan=!!i.colspan),null!=i.checkbox&&(this.checkbox=z(i.checkbox)),null!=i.radiogroup&&(this.radiogroup=!!i.radiogroup),null!=i.selected&&(this.selected=!!i.selected),null!=i.unselectable&&(this.unselectable=!!i.unselectable),i.classes&&this.setClass(i.classes);for(const[e,t]of Object.entries(i))fe.has(e)||(this.data[e]=t);t&&!this.statusNodeType&&e._registerNode(this)}toString(){return`WunderbaumNode@${this.key}<'${this.title}'>`}*[Symbol.iterator](){const e=this.children;if(e)for(let t=0,i=e.length;t<i;t++){const i=e[t];yield i,i.children&&(yield*i)}}_callEvent(e,t){var i;return null===(i=this.tree)||void 0===i?void 0:i._callEvent(e,N({node:this,typeInfo:this.type?this.tree.types[this.type]:{}},t))}addChildren(e,t){const i=this.tree;let{before:s=null,applyMinExpanLevel:n=!0,_level:r}=null!=t?t:{};null!=r||(r=this.getLevel());const o=[];try{i.enableUpdate(!1),I(e)&&(e=[e]);const t=n&&r<i.options.minExpandLevel;for(const s of e){const e=s.children;delete s.children;const n=new ve(i,this,s);null!=e&&(s.children=e),t&&!n.isUnloaded()&&(n.expanded=!0),o.push(n),e&&n.addChildren(e,{_level:r+1})}if(this.children)if(null==s||0===this.children.length)this.children=this.children.concat(o);else{s=this.findDirectChild(s);const e=this.children.indexOf(s);f(e>=0,`options.before must be a direct child of ${this}`),this.children.splice(e,0,...o)}else this.children=o;i.update(U.structure)}finally{i.enableUpdate(!0)}return o[0]}addNode(e,t="appendChild"){switch("over"===t&&(t="appendChild"),t){case"after":return this.parent.addChildren(e,{before:this.getNextSibling()});case"before":return this.parent.addChildren(e,{before:this});case"prependChild":return this.addChildren(e,{before:0});case"appendChild":return this.addChildren(e)}f(!1,`Invalid mode: ${t}`)}applyCommand(e,t){return this.tree.applyCommand(e,this,t)}collapseSiblings(e){for(const t of this.parent.children)t!==this&&t.expanded&&t.setExpanded(!1,e)}setClass(e,t=!0){const i=$(e);if(t)null===this.classes&&(this.classes=new Set),i.forEach(e=>{var i;this.classes.add(e),null===(i=this._rowElem)||void 0===i||i.classList.toggle(e,t)});else{if(null===this.classes)return;i.forEach(e=>{var i;this.classes.delete(e),null===(i=this._rowElem)||void 0===i||i.classList.toggle(e,t)}),0===this.classes.size&&(this.classes=null)}}startEditTitle(){this.tree._callMethod("edit.startEditTitle",this)}async expandAll(e=!0,t){const i=this.tree,{collapseOthers:s,deep:n,depth:r,force:o,keepActiveNodeVisible:l=!0,loadLazy:a,resetLazy:d}=null!=t?t:{},c=this.tree.options.minExpandLevel||null,h=null!=r?r:o?null:c,u={deep:n,force:o,loadLazy:a,resetLazy:d,scrollIntoView:!1};this.logInfo(`expandAll(${e}, depth=${r}, minLevel=${h})`),f(!(e&&null!=n&&!s),"Expanding with `deep` option is not supported (implied by the `depth` option).");const p=i.logTime(`${this}.expandAll(${e}, depth=${r})`);try{i.enableUpdate(!1),await async function t(i,s){var o;const l=[];return null===(o=i.children)||void 0===o||o.forEach(i=>{if(e)if(!i.expanded&&(null==h||s<h)&&(i.children||a&&i.lazy)){const e=i.setExpanded(!0,u);l.push(e),null==r&&e.then(async()=>{await t(i,s+1)})}else l.push(t(i,s+1));else(null==h||s>=h)&&i.setExpanded(!1,u),(null!=h&&s<h||n)&&t(i,s+1)}),new Promise(e=>{Promise.all(l).then(()=>{e(!0)})})}(this,0),s&&(f(e,"Option `collapseOthers` requires flag=true"),f(null!=h,"Option `collapseOthers` requires `depth` or `minExpandLevel`"),this.expandAll(!1,{depth:h}))}finally{i.enableUpdate(!0),i.logTimeEnd(p)}i.activeNode&&l&&i.activeNode.scrollIntoView()}findAll(e){const t="function"==typeof e?e:de(e),i=[];return this.visit(e=>{t(e)&&i.push(e)}),i}findDirectChild(e){const t=this.children;if(!t)return null;if("string"==typeof e){for(let i=0,s=t.length;i<s;i++)if(t[i].key===e)return t[i]}else{if("number"==typeof e)return t[e];if(e.parent===this)return e}return null}findFirst(e){const t="function"==typeof e?e:de(e);let i=null;return this.visit(e=>{if(t(e))return i=e,!1}),i}findRelatedNode(e,t=!1){return this.tree.findRelatedNode(this,e,t)}*format_iter(e,t){function i(e){const t=e.parent.children;return e===t[t.length-1]}null!=t||(t=[" "," | "," ╰─ "," ├─ "]),null!=e||(e=e=>""+e);const s=s=>{const n=[e(s)];n.unshift(t[i(s)?2:3]);let r=s.parent;for(;r&&r!==this;)n.unshift(t[i(r)?0:1]),r=r.parent;return n.join("")};yield e(this);for(const e of this)yield s(e)}format(e,t){const i=[];for(const s of this.format_iter(e,t))i.push(s);return i.join("\n")}getColElem(e){var t;"string"==typeof e&&(e=this.tree.columns.findIndex(t=>t.id===e));const i=null===(t=this._rowElem)||void 0===t?void 0:t.querySelectorAll("span.wb-col");return i?i[e]:null}getCloneList(e=!1){if(!this.refKey)return[];const t=this.tree.findByRefKey(this.refKey);return e?t:[...t].filter(e=>e!==this)}getFirstChild(){return this.children?this.children[0]:null}getLastChild(){return this.children?this.children[this.children.length-1]:null}getLevel(){let e=0,t=this.parent;for(;t;)e++,t=t.parent;return e}getNextSibling(){const e=this.parent.children,t=e.indexOf(this);return e[t+1]||null}getParent(){return this.parent}getParentList(e=!1,t=!1){const i=[];let s=t?this:this.parent;for(;s;)(e||s.parent)&&i.unshift(s),s=s.parent;return i}getPath(e=!0,t="title",i="/"){let s;const n=[],r="function"==typeof t;return this.visitParents(e=>{e.parent&&(s=r?t(e):e[t],n.unshift(s))},e),n.join(i)}getPrevSibling(){const e=this.parent.children,t=e.indexOf(this);return e[t-1]||null}hasChildren(){if(this.lazy){if(null==this.children)return;if(0===this.children.length)return!1;if(1===this.children.length&&this.children[0].isStatusNode())return;return!0}return!(!this.children||!this.children.length)}hasClass(e){return!!this.classes&&this.classes.has(e)}hasFocus(){return this.tree.focusNode===this}isActive(){return this.tree.activeNode===this}isAncestorOf(e){return e&&e.isDescendantOf(this)}isChildOf(e){return e&&this.parent===e}isClone(){return!!this.refKey&&this.tree.findByRefKey(this.refKey).length>1}isColspan(){return!!this.getOption("colspan")}isDescendantOf(e){if(!e||e.tree!==this.tree)return!1;let t=this.parent;for(;t;){if(t===e)return!0;t===t.parent&&v(`Recursive parent link: ${t}`),t=t.parent}return!1}isExpandable(e=!1){return!(e&&this.expanded||!1===this.children)&&(null==this.children?!!this.lazy:0!==this.children.length||!!this.tree.options.emptyChildListExpandable)}isEditingTitle(){return this.tree._callMethod("edit.isEditingTitle",this)}isExpanded(){return!!this.expanded}isFirstSibling(){const e=this.parent;return!e||e.children[0]===this}isLastSibling(){const e=this.parent;return!e||e.children[e.children.length-1]===this}isLazy(){return!!this.lazy}isLoaded(){return!this.lazy||void 0!==this.hasChildren()}isLoading(){return this._isLoading}isPagingNode(){return"paging"===this.statusNodeType}isParentOf(e){return e&&e.parent===this}isPartload(){return!!this._partload}isPartsel(){return!this.selected&&!!this._partsel}isRadio(){return!!this.parent.radiogroup||"radio"===this.getOption("checkbox")}isRendered(){return!!this._rowElem}isRootNode(){return this.tree.root===this}isSelected(){return!!this.selected||!!this._partsel&&void 0}isStatusNode(){return!!this.statusNodeType}isTopLevel(){return this.tree.root===this.parent}isUnloaded(){return void 0===this.hasChildren()}isVisible(){const e="hide"===this.tree.filterMode,t=this.getParentList(!1,!1);if(e&&!this.match&&!this.subMatchCount)return!1;for(let e=0,i=t.length;e<i;e++){if(!t[e].expanded)return!1}return!0}_loadSourceObject(e,t){var i;const s=this.tree;null!=t||(t=this.getLevel());const n=this._callEvent("receive",{response:e});null!=n&&(e=n),S(e)&&(e={children:e}),f(I(e),`Expected an array or plain object: ${e}`);const r=null!==(i=e.format)&&void 0!==i?i:"nested";f("nested"===r||"flat"===r,`Expected source.format = 'nested' or 'flat': ${r}`),he(e),f(e.children,"If `source` is an object, it must have a `children` property"),e.types&&(s.logInfo("Redefine types",e.columns),s.setTypes(e.types,!1),delete e.types),e.columns&&(s.logInfo("Redefine columns",e.columns),s.columns=e.columns,delete e.columns,s.update(U.colStructure)),this.addChildren(e.children);for(const[t,i]of Object.entries(e))le.has(t)||(s.data[t]=i);"hier"===s.options.selectMode&&this.fixSelection3FromEndNodes(),this.resetNativeChildOrder(),this._callEvent("load")}async _fetchWithOptions(e){var t,i;let s,n,r,o,l,a={};"string"==typeof e?(s=e,a.method="GET"):I(e)?(({url:s,params:n,body:r,options:o,...l}=e),f(!l||0===Object.keys(l).length,`Unexpected source properties: ${Object.keys(l)}. Use 'options' instead.`),f("string"==typeof s,"expected source.url as string"),I(o)&&(a=o),I(r)&&(f(!a.body,"options.body should be passed as source.body"),a.body=JSON.stringify(a.body),null!==(t=a.method)&&void 0!==t||(a.method="POST")),I(n)&&(s+="?"+new URLSearchParams(n),null!==(i=a.method)&&void 0!==i||(a.method="GET"))):(s="",v(`Unsupported source format: ${e}`)),this.setStatus(V.loading);const d=await fetch(s,a);return d.ok||v(`GET ${s} returned ${d.status}, ${d}`),await d.json()}async load(e){const t=this.tree,i=Date.now(),s=this.parent,n=Date.now();let r=0,o=0,l=0;this._requestId&&this.logWarn(`Recursive load request #${i} while #${this._requestId} is pending. The previous request will be ignored.`),this._requestId=i;try{if("string"==typeof e?e:e.url){const t=await this._fetchWithOptions(e);if(o=Date.now()-n,this._requestId&&this._requestId>i)return void this.logWarn(`Ignored load response #${i} because #${this._requestId} is pending.`);if(this.logDebug(`Received response for load request #${i}`),null===this.parent&&null!==s)return void this.logWarn("Lazy parent node was removed while loading: discarding response.");this.setStatus(V.ok);const r=Date.now();this._loadSourceObject(t),l=Date.now()-r}else{if("function"==typeof e.then){const i=t.logTime(`Resolve thenable ${e}`);e=await Promise.resolve(e),t.logTimeEnd(i)}this._loadSourceObject(e),l=Date.now()-n}}catch(t){throw this.logError("Error during load()",e,t),this._callEvent("error",{error:t}),this.setStatus(V.error,{message:""+t}),t}finally{this._requestId=0,r=Date.now()-n,t.options.debugLevel>=3&&t.logInfo(`Load source took ${r/1e3} seconds (transfer: ${o/1e3}s, processing: ${l/1e3}s)`)}}async loadLazy(e=!1){const t=this.expanded;if(f(this.lazy,"load() requires a lazy node"),e||this.isUnloaded())if(this.isLoading())this.logWarn("loadLazy() called while already loading: ignored.");else{this.isLoaded()&&this.resetLazy(),this.setStatus(V.loading);try{const e=await this._callEvent("lazyLoad");if(!1===e)return void this.setStatus(V.ok);f(S(e)||e&&e.url,"The lazyLoad event must return a node list, `{url: ...}`, or false."),await this.load(e),this.setStatus(V.ok),t?(this.expanded=!0,this.tree.update(U.structure)):this.update()}catch(e){this.logError("Error during loadLazy()",e),this._callEvent("error",{error:e}),this.setStatus(V.error,{message:""+e})}}}log(...e){this.tree.options.debugLevel>=4&&console.log(this.toString(),...e)}logDebug(...e){this.tree.options.debugLevel>=4&&console.debug(this.toString(),...e)}logError(...e){this.tree.options.debugLevel>=1&&console.error(this.toString(),...e)}logInfo(...e){this.tree.options.debugLevel>=3&&console.info(this.toString(),...e)}logWarn(...e){this.tree.options.debugLevel>=2&&console.warn(this.toString(),...e)}async makeVisible(e){let t;const i=new pe,s=[],n=this.getParentList(!1,!1),r=n.length,o=T(e,"noAnimation",!1),l=T(e,"scrollIntoView",!0);for(t=r-1;t>=0;t--){const e={noAnimation:o};s.push(n[t].setExpanded(!0,e))}return Promise.all(s).then(()=>{l&&this.tree?(this.tree.updatePendingModifications(),this.scrollIntoView().then(()=>{i.resolve()})):i.resolve()}),i.promise()}moveTo(e,t="appendChild",i){let s;"over"===t&&(t="appendChild"),"prependChild"===t&&(e.children&&e.children.length?(t="before",e=e.children[0]):t="appendChild");const n=this.tree,r=this.parent,o="appendChild"===t?e:e.parent;if(this!==e){if(this.parent?o.isDescendantOf(this)&&v("Cannot move a node to its own descendant"):v("Cannot move system root"),o!==r&&r.triggerModifyChild("remove",this),1===this.parent.children.length){if(this.parent===o)return;this.parent.children=this.parent.lazy?[]:null,this.parent.expanded=!1}else s=this.parent.children.indexOf(this),f(s>=0,"invalid source parent"),this.parent.children.splice(s,1);if(this.parent=o,o.hasChildren())switch(t){case"appendChild":o.children.push(this);break;case"before":s=o.children.indexOf(e),f(s>=0,"invalid target parent"),o.children.splice(s,0,this);break;case"after":s=o.children.indexOf(e),f(s>=0,"invalid target parent"),o.children.splice(s+1,0,this);break;default:v(`Invalid mode '${t}'.`)}else o.children=[this];i&&e.visit(i,!0),o===r?o.triggerModifyChild("move",this):o.triggerModifyChild("add",this),n!==e.tree&&(this.logWarn("Cross-tree moveTo is experimental!"),this.visit(t=>{t.tree=e.tree},!0)),setTimeout(()=>{n.update(U.any)},0)}}async navigate(e,t){var i;const s=null!==(i=ae[e])&&void 0!==i?i:e,n=this.findRelatedNode(s);if(!n)return this.logWarn(`Could not find related node '${e}'.`),Promise.resolve(this);try{n.makeVisible({scrollIntoView:!1})}catch(e){}return n.setFocus(),!1===(null==t?void 0:t.activate)?Promise.resolve(this):n.setActive(!0,{event:null==t?void 0:t.event})}remove(){const e=this.tree,t=this.parent.children.indexOf(this);this.triggerModify("remove"),this.parent.children.splice(t,1),this.visit(t=>{t.removeMarkup(),e._unregisterNode(t)},!0),e.update(U.structure)}removeChildren(){var e,t;const i=this.tree;this.children&&((null===(e=i.activeNode)||void 0===e?void 0:e.isDescendantOf(this))&&i.activeNode.setActive(!1),(null===(t=i.focusNode)||void 0===t?void 0:t.isDescendantOf(this))&&i._setFocusNode(null),this.triggerModifyChild("remove",null),this.visit(e=>{i._unregisterNode(e)}),this.lazy?this.children=[]:this.children=null,this.isRootNode()||(this.expanded=!1),this.tree.update(U.structure))}removeMarkup(){this._rowElem&&(delete this._rowElem._wb_node,this._rowElem.remove(),this._rowElem=void 0)}_getRenderInfo(){const e={},t={},i=this.isColspan(),s=this._rowElem?this._rowElem.querySelectorAll("span.wb-col"):null;let n=0;for(const r of this.tree.columns)e[r.id]={id:r.id,idx:n,elem:s?s[n]:null,info:r},i||"*"===r.id||(t[r.id]=e[r.id]),n++;return{allColInfosById:e,renderColInfosById:t}}_createIcon(e,t,i){const s=this.tree._createNodeIcon(this,i,!0);return s&&(t?e.replaceChild(s,t):e.appendChild(s)),s}_render_markup(e){const t=this.tree,i=t.options,s=i.rowHeightPx,n=this.getOption("checkbox"),r=t.columns,o=this.getLevel(),l=t.isRowNav()?null:t.activeColIdx;let a,d=this._rowElem,c=null,h=null;const u=!d;f(u,"Expected unrendered node"),f(!u||e&&e.after,"opts.after expected, unless updating"),f(!this.isRootNode(),"Root node not allowed"),d=document.createElement("div"),d.classList.add("wb-row"),d.style.top=this._rowIdx*s+"px",this._rowElem=d,d._wb_node=this;const p=document.createElement("span");p.classList.add("wb-node","wb-col"),d.appendChild(p);let g=0;n&&(c=document.createElement("i"),c.classList.add("wb-checkbox"),("radio"===n||this.parent.radiogroup)&&c.classList.add("wb-radio"),p.appendChild(c),g+=20);for(let e=o-1;e>0;e--)a=document.createElement("i"),a.classList.add("wb-indent"),p.appendChild(a),g+=20;(!i.minExpandLevel||o>i.minExpandLevel)&&(h=document.createElement("i"),h.classList.add("wb-expander"),p.appendChild(h),g+=20);this._createIcon(p,null,!h)&&(g+=20);const v=document.createElement("span");v.classList.add("wb-title"),p.appendChild(v),p._ofsTitlePx=g,t.options.dnd.dragStart&&(p.draggable=!0);if(!this.isColspan()&&r.length>1){let e=0;for(const t of r){let i;e++,"*"===t.id?i=p:(i=document.createElement("span"),i.classList.add("wb-col"),d.appendChild(i)),e===l&&i.classList.add("wb-active"),t.classes&&i.classList.add(...t.classes.split(" ")),i.style.left=t._ofsPx+"px",i.style.width=t._widthPx+"px",u&&t.html&&"string"==typeof t.html&&(i.innerHTML=t.html)}}switch(e?e.after:"last"){case"first":t.nodeListElement.prepend(d);break;case"last":t.nodeListElement.appendChild(d);break;default:e.after.after(d)}e.isNew=!0,this._render_data(e)}_render_data(e){f(this._rowElem,"No _rowElem");const t=this.tree,i=t.options,s=this._rowElem,n=!!e.isNew,r=!!e.preventScroll,o=t.columns,l=this.isColspan(),a=s.querySelector("span.wb-node"),d=a.querySelector("span.wb-title"),c=t.element.scrollTop;this.titleWithHighlight?d.innerHTML=this.titleWithHighlight:d.textContent=this.title;const h=this.getOption("tooltip",!1);if(h&&(d.title=!0===h?this.title:h),r&&(t.element.scrollTop=c),!i.skeleton)if(l){const e=t.element.clientWidth;d.style.width=e-a._ofsTitlePx-7+"px"}else d.style.width=o[0]._widthPx-a._ofsTitlePx-7+"px";if(e.isDataChange=!0,this._render_status(e),this.statusNodeType)this._callEvent("renderStatusNode",{isNew:n,nodeElem:a,isColspan:l});else if(this.parent){const e=this._getRenderInfo();this._callEvent("render",{isNew:n,nodeElem:a,isColspan:l,allColInfosById:e.allColInfosById,renderColInfosById:e.renderColInfosById})}}_render_status(e){const t=this.tree,i=t.iconMap,s=t.options,n=this.type?t.types[this.type]:null,r=this._rowElem,o=r.querySelector("span.wb-node"),l=o.querySelector("i.wb-expander"),a=o.querySelector("i.wb-checkbox"),d=["wb-row"];if(this.expanded&&d.push("wb-expanded"),this.lazy&&d.push("wb-lazy"),this.selected&&d.push("wb-selected"),this._partsel&&d.push("wb-partsel"),this===t.activeNode&&d.push("wb-active"),this===t.focusNode&&d.push("wb-focus"),this._errorInfo&&d.push("wb-error"),this._isLoading&&d.push("wb-loading"),this.isColspan()&&d.push("wb-colspan"),this.statusNodeType&&d.push("wb-status-"+this.statusNodeType),this.match&&d.push("wb-match"),this.subMatchCount&&d.push("wb-submatch"),s.skeleton&&d.push("wb-skeleton"),r.className=d.join(" "),this.classes&&r.classList.add(...this.classes),n&&n.classes&&r.classList.add(...n.classes),l){let e=null;this._isLoading?e=i.loading:this.isExpandable(!1)?e=this.expanded?i.expanderExpanded:i.expanderCollapsed:this.lazy&&null==this.children&&(e=i.expanderLazy),null==e?(l.className="wb-expander",l.classList.add("wb-indent")):re.test(e)?l.replaceWith(E(e)):ne.test(e)?l.style.backgroundImage=`url('${e}')`:l.className="wb-expander "+e}if(a){let e="wb-checkbox ";this.isRadio()?(e+="wb-radio ",this.selected?e+=i.radioChecked:e+=i.radioUnchecked):this.selected?e+=i.checkChecked:this._partsel?e+=i.checkUnknown:e+=i.checkUnchecked,a.className=e}if(!e.isNew){let e=0;for(const i of r.children)i.classList.toggle("wb-active",e++===t.activeColIdx),i.classList.remove("wb-error","wb-invalid");const i=o.querySelector("i.wb-icon");i&&this._createIcon(o,i,!l)}if(!1!==e.resizeCols&&!this.isColspan()){const e=r.querySelectorAll("span.wb-col");let t=0,i=0;for(const s of this.tree.columns){const n=e[t];n.style.left=`${i}px`,n.style.width=`${s._widthPx}px`,t++,i+=s._widthPx}}}_render(e){const t=Object.assign({change:U.data},e);switch(this._rowElem||(t.change=U.row),t.change){case"status":this._render_status(t);break;case"data":this._render_data(t);break;case"row":this._render_markup(t);break;default:v(`Invalid change type '${t.change}'.`)}}resetLazy(){this.removeChildren(),this.expanded=!1,this.lazy=!0,this.children=null,this.tree.update(U.structure)}toDict(e=!1,t){const i={};if(ge.forEach(e=>{const t=this[e];t instanceof Set?t.size&&(i[e]=Array.prototype.join.call(t.keys()," ")):(t||!1===t||0===t)&&(i[e]=t)}),D(this.data)||(i.data=N({},this.data),D(i.data)&&delete i.data),t){const s=t(i,this);if(!1===s)return!1;"skip"===s&&(e=!1)}if(e&&S(this.children)){i.children=[];for(let e=0,s=this.children.length;e<s;e++){const s=this.children[e];if(!s.isStatusNode()){const e=s.toDict(!0,t);!1!==e&&i.children.push(e)}}}return i}getOption(e,t){const i=this.tree;let s=i.options;e.indexOf(".")>=0&&([s,e]=e.split("."));const n=s[e];if("function"==typeof n){const e=n.call(i,{type:"resolve",tree:i,node:this});if(void 0!==e)return e}if(void 0!==this[e])return this[e];const r=this.type?i.types[this.type]:void 0,o=r?r[e]:void 0;return void 0!==o?o:null!=n?n:t}async scrollIntoView(e){const t=Object.assign({node:this},e);return this.tree.scrollTo(t)}async setActive(e=!0,t){const i=this.tree,s=i.getActiveNode(),n=null==t?void 0:t.retrigger,r=null==t?void 0:t.focusTree,o=null==t?void 0:t.noEvents,l=null==t?void 0:t.event,a=null==t?void 0:t.colIdx,d=null==t?void 0:t.edit;if(f(!d||null!=a,"edit requires colIdx"),!o)if(e){if(s!==this||n){if(!1===(null==s?void 0:s._callEvent("deactivate",{nextNode:this,event:l}))||!1===this._callEvent("beforeActivate",{prevNode:s,event:l}))return;i._setActiveNode(null),null==s||s.update(U.status)}}else(s===this||n)&&this._callEvent("deactivate",{nextNode:null,event:l});return s!==this&&(e&&i._setActiveNode(this),null==s||s.update(U.status),this.update(U.status)),this.makeVisible().then(()=>{e&&((r||d)&&(i.setFocus(),i._setFocusNode(this),i.focusNode.setFocus()),null!=a&&i.isCellNav()&&i.setColumn(a,{edit:d}),o||this._callEvent("activate",{prevNode:s,event:l}))})}async setExpanded(e=!0,t){const{force:i,scrollIntoView:s,immediate:n,resetLazy:r}=null!=t?t:{},o=!(null==t?void 0:t.noEvents);if(!e&&this.isExpanded()&&this.getLevel()<=this.tree.getOption("minExpandLevel")&&!i)return void this.logDebug("Ignored collapse request below minExpandLevel.");if(!e==!this.expanded)return;if(o&&!1===this._callEvent("beforeExpand",{flag:e}))return;e&&this.getOption("autoCollapse")&&this.collapseSiblings(t),e&&this.lazy&&null==this.children?await this.loadLazy():!e&&r&&this.lazy&&this.children&&this.resetLazy(),this.expanded=e;const l={immediate:n};if(this.tree.update(U.structure,l),e&&s){const e=this.getLastChild();e&&(this.tree.updatePendingModifications(),e.scrollIntoView({topNode:this}))}o&&this._callEvent("expand",{flag:e})}setFocus(e=!0){f(!!e,"Blur is not yet implemented");const t=this.tree.focusNode;this.tree._setFocusNode(this),null==t||t.update(),this.update()}setIcon(e){this.icon=e,this.update()}setKey(e,t){throw new Error("Not yet implemented")}update(e=U.data){f(e===U.status||e===U.data,`Invalid change type ${e}`),this.tree.update(e,this)}getSelectedNodes(e=!1){const t=[];return this.visit(i=>{if(i.selected&&(t.push(i),!0===e))return"skip"}),t}getRefKeys(e=!1){const t=new Set;return this.visit(i=>{null==i.refKey||e&&!i.selected||t.add(i.refKey)}),Array.from(t)}toggleSelected(e){let t=this.isSelected();return t=void 0!==t||this.isRadio()?!t:this._anySelectable(),this.setSelected(t,e)}_anySelectable(){let e=!1;return this.visit(t=>{if(!1===t.selected&&!t.unselectable&&!t.hasChildren()&&!t.parent.radiogroup)return e=!0,!1}),e}_changeSelectStatusProps(e){let t=!1;switch(e){case!1:t=this.selected||this._partsel,this.selected=!1,this._partsel=!1;break;case!0:t=!this.selected||!this._partsel,this.selected=!0,this._partsel=!0;break;case void 0:t=this.selected||!this._partsel,this.selected=!1,this._partsel=!!this.hasChildren();break;default:v(`Invalid state: ${e}`)}return t&&this.update(),t}fixSelection3AfterClick(e){const t=!!(null==e?void 0:e.force),i=this.isSelected();this.visit(e=>{if(e.radiogroup)return"skip";!t&&e.getOption("unselectable")||e._changeSelectStatusProps(i)}),this.fixSelection3FromEndNodes()}fixSelection3FromEndNodes(e){const t=!!(null==e?void 0:e.force);f("hier"===this.tree.options.selectMode,"expected selectMode 'hier'");const i=e=>{let s;const n=e.children;if(n&&n.length){let e=!0,t=!1;for(let s=0,r=n.length;s<r;s++){const r=n[s],o=i(r);!1!==o&&(t=!0),!0!==o&&(e=!1)}s=!!e||!!t&&void 0}else s=!!e.selected;return e._partsel&&!e.selected&&e.lazy&&null==e.children&&(s=void 0),!t&&e.getOption("unselectable")||e._changeSelectStatusProps(s),s};i(this),this.visitParents(e=>{let t;const i=e.children;let s=!0,n=!1;for(let e=0,r=i.length;e<r;e++){const r=i[e];t=!!r.selected,(t||r._partsel)&&(n=!0),t||(s=!1)}t=!!s||!!n&&void 0,e._changeSelectStatusProps(t)})}setSelected(e=!0,t){const i=this.tree,s=!(null==t?void 0:t.noEvents),n=this.isSelected(),r=this.parent&&this.parent.radiogroup,o=i.options.selectMode,l=(null==t?void 0:t.force)||!this.getOption("unselectable");return e=!!e,l?(null==t?void 0:t.propagateDown)&&"multi"===o?(i.runWithDeferredUpdate(()=>{this.visit(t=>{t.setSelected(e)})}),n):(e===n||s&&!1===this._callEvent("beforeSelect",{flag:e})||(i.runWithDeferredUpdate(()=>{if(r){if(!e&&!(null==t?void 0:t.force))return n;for(const e of this.parent.children)e.selected=e===this}else this.selected=e,"hier"===o?this.fixSelection3AfterClick():"single"===o&&e&&i.visit(e=>{e!==this&&(e.selected=!1)})}),s&&this._callEvent("select",{flag:e})),n):n}setStatus(e,t){const i=this.tree,s=null==t?void 0:t.message,n=null==t?void 0:t.details;let r=null;const o=e=>{const t=this.children,s=t?t[0]:null;return f(e.statusNodeType,"Not a status node"),f(!s||!s.isStatusNode(),"Child must not be a status node"),r=this.addNode(e,"prependChild"),r.match=-1,i.update(U.structure),r};switch((()=>{const e=this.children;e&&e.length&&e[0].isStatusNode()&&e[0].remove()})(),e){case"ok":this._isLoading=!1,this._errorInfo=null;break;case"loading":this._isLoading=!0,this._errorInfo=null,this.parent?this.update(U.status):o({statusNodeType:e,title:i.options.strings.loading+(s?" ("+s+")":""),checkbox:!1,colspan:!0,tooltip:n});break;case"error":o({statusNodeType:e,title:i.options.strings.loadError+(s?" ("+s+")":""),checkbox:!1,colspan:!0,tooltip:n}),this._isLoading=!1,this._errorInfo={message:s,details:n};break;case"noData":o({statusNodeType:e,title:s||i.options.strings.noData,checkbox:!1,colspan:!0,tooltip:n}),this._isLoading=!1,this._errorInfo=null;break;default:v("invalid node status "+e)}return i.update(U.structure),r}setTitle(e){this.title=e,this.update()}setTooltip(e){this.tooltip=e,this.update()}sortChildren(e=ce,t=!1){return this.tree.logDeprecate("node.sortChildren()",{since:"0.14.0"}),this.sort({cmp:e||void 0,deep:t})}resetNativeChildOrder(e){const{recursive:t=!0,propName:i="_nativeIndex"}=null!=e?e:{};this.children&&this.children.forEach((s,n)=>{s.data[i]=n,t&&s.children&&s.resetNativeChildOrder(e)})}sortByProperty(e){return this.tree.logDeprecate("node.sortByProperty()",{since:"0.14.0"}),this.sort(e)}sort(e){const t=this.tree;let{propName:i,deep:s=!0,key:n,order:r,caseInsensitive:o=!0,cmp:l,updateColInfo:a=!1,nativeOrderPropName:d="_nativeIndex",colId:c}=e;null!=i||(i=c),"*"===i&&(i="title");const h=!0===t.options.sortFoldersFirst?e=>!1!==e.hasChildren()||"folder"===e.type:t.options.sortFoldersFirst;if(a){const t=this.tree._columnsById[e.colId];f(t,`Invalid colId specified: ${e.colId}`),null!=r||(r=A(t.sortOrder,["asc","desc",void 0]));for(const e of this.tree.columns)e.sortOrder=e===t?r:void 0;void 0===r&&(i=d,r="asc"),this.tree.update(U.colStructure)}else null!=i||(i="title"),null!=r||(r="asc");this.logDebug(`sort(), propName=${i}, ${r}`,e),f(i||l||n,"No `propName` or `key` specified"),null==n&&null==l&&(n=e=>{let t;return t=ge.has(i)?e[i]:e.data[i],o&&"string"==typeof t&&(t=t.toLowerCase()),t}),l?(f(!n,"`key` and `cmp` are mutually exclusive"),t.logDeprecate("SortOptions.cmp",{since:"0.14.0",hint:"use the `key` callback instead"})):((e.propName||e.caseInsensitive)&&t.logWarn("sort(): ignoring propName, caseInsensitive"),l=(e,t)=>{if(h){const i=h(e);if(i!==h(t))return i?-1:1}let i=n(e),s=n(t);return null==i?i="string"==typeof s?"":0:"boolean"==typeof i&&(i=i?1:0),null==s?s="string"==typeof i?"":0:"boolean"==typeof s&&(s=s?1:0),"desc"===r?i===s?0:i>s?-1:1:i===s?0:i>s?1:-1}),this.children&&function e(t){if(t&&(t.sort(l),s))for(let i=0,s=t.length;i<s;i++)t[i].children&&e(t[i].children)}(this.children),this.tree.update(U.structure)}resort(e={}){for(const t of this.tree.columns)if(t.sortOrder){e.colId=t.id,e.order=t.sortOrder,this.sort(e);break}}triggerModifyChild(e,t,i){this.logDebug(`modifyChild(${e})`,i,t),this.tree.options.modifyChild&&(t&&t.parent!==this&&v("child "+t+" is not a child of "+this),this._callEvent("modifyChild",N({operation:e,child:t},i)))}triggerModify(e,t){this.parent.triggerModifyChild(e,this,t)}visit(e,t=!1){let i=!0;const s=this.children;if(!0===t&&(i=e(this),!1===i||"skip"===i))return i;if(s)for(let t=0,n=s.length;t<n&&(i=s[t].visit(e,!0),!1!==i);t++);return i}visitParents(e,t=!1){if(t&&!1===e(this))return!1;let i=this.parent;for(;i;){if(!1===e(i))return!1;i=i.parent}return!0}visitSiblings(e,t=!1){const i=this.parent.children;for(let s=0,n=i.length;s<n;s++){const n=i[s];if((t||n!==this)&&!1===e(n))return!1}return!0}isMatched(){return!(this.tree.filterMode&&!this.match)}}ve.sequence=0;
68
68
  /*!
69
69
  * Wunderbaum - ext-edit
70
70
  * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
71
- * v0.14.0, Fri, 20 Mar 2026 16:58:31 GMT (https://github.com/mar10/wunderbaum)
71
+ * v0.14.1, Sun, 22 Mar 2026 05:52:05 GMT (https://github.com/mar10/wunderbaum)
72
72
  */
73
73
  class me extends j{constructor(e){super(e,"edit",{debounce:100,minlength:1,maxlength:null,trigger:[],trim:!0,select:!0,slowClickDelay:1e3,validity:!0,beforeEdit:null,edit:null,apply:null}),this.curEditNode=null,this.relatedNode=null,this.debouncedOnChange=o(this._onChange.bind(this),this.getPluginOption("debounce"))}async _applyChange(e,t,i,s,n){return t.log(`_applyChange(${e})`,n),i.classList.add("wb-busy"),i.classList.remove("wb-error","wb-invalid"),s.setCustomValidity(""),new Promise((i,s)=>{const r=t._callEvent(e,n);Promise.resolve(r).then(e=>{i(e)}).catch(e=>{s(e)})}).then(e=>{if(!s.checkValidity())throw t.logWarn("inputElem.checkValidity() failed: throwing...."),new p(s.validationMessage);return e}).catch(n=>{if(!(n instanceof p))throw t.logError(`Error in ${e} event handler (throw e.util.ValidationError instead if this was intended)`,n),i.classList.add("wb-error"),n;t.logWarn("catched ",n),i.classList.add("wb-invalid"),s.setCustomValidity&&!s.validationMessage&&s.setCustomValidity(n.message),s.validationMessage&&s.reportValidity()}).finally(()=>{i.classList.remove("wb-busy")})}_onChange(e){const t=ye.getEventInfo(e),i=t.node,s=t.colElem;i&&0!==t.colIdx?this._applyChange("change",i,s,e.target,{info:t,event:e,inputElem:e.target,inputValue:ye.util.getValueFromElem(e.target),inputValid:e.target.checkValidity()}):this.tree.log("Ignored change event for removed element or node title")}init(){super.init(),M(this.tree.element,"change",".contenteditable,input,textarea,select",e=>this._onChange(e))}_preprocessKeyEvent(e){const t=e.event,i=k(t),s=this.tree,n=this.getPluginOption("trigger");if(this.isEditingTitle()){switch(i){case"Enter":return this._stopEditTitle(!0,{event:t}),!1;case"Escape":return this._stopEditTitle(!1,{event:t}),!1}return!1}if(s.isRowNav()||0===s.activeColIdx){switch(i){case"Enter":if(n.indexOf("macEnter")>=0&&d)return this.startEditTitle(),!1;break;case"F2":if(n.indexOf("F2")>=0)return this.startEditTitle(),!1}return!0}return!0}isEditingTitle(e){return e?this.curEditNode===e:!!this.curEditNode}startEditTitle(e){e=null!=e?e:this.tree.getActiveNode();const t=this.getPluginOption("validity"),i=this.getPluginOption("select");if(!e)return;if(e.isStatusNode())return void e.logWarn("Cannot edit status node.");this.tree.logDebug(`startEditTitle(node=${e})`);let s=e._callEvent("edit.beforeEdit");if(!1===s)return void e.logDebug("beforeEdit canceled operation.");if(!0===s||!s){const t=m(e.title);let i=this.getPluginOption("maxlength");const n=i?` maxlength="${i}"`:"";i=this.getPluginOption("minlength");s=`<input type=text class="wb-input-edit" tabindex=-1 value="${t}" autocorrect="off"${i>0?" required":""}${i?` minlength="${i}"`:""}${n} >`}const n=e.getColElem(0).querySelector(".wb-title");n.innerHTML=s;const r=n.firstElementChild;t&&r.addEventListener("keydown",t=>{r.setCustomValidity(""),r.reportValidity()||e.logWarn(`Invalid input: '${r.value}'`)}),r.focus(),i&&r.select(),this.curEditNode=e,e._callEvent("edit.edit",{inputElem:r})}stopEditTitle(e){return this._stopEditTitle(e,{})}_stopEditTitle(e,t){var i;null!=t||(t={});const s=document.activeElement;let n=s?w(s):null;const r=this.curEditNode,o=!!t.forceClose,l=this.getPluginOption("validity");if(n&&this.getPluginOption("trim")&&(n=n.trim()),r)if(r.logDebug(`stopEditTitle(${e})`,t,s,n),e&&null!==n&&n!==r.title){const e=s.validationMessage;if(e)throw new Error(`Input validation failed for "${n}": ${e}.`);const t=r.getColElem(0);this._applyChange("edit.apply",r,t,s,{oldValue:r.title,newValue:n,inputElem:s,inputValid:s.checkValidity()}).then(e=>{var t;const i=s.validationMessage;if(l&&i&&!1!==e)throw new Error(`Edit apply validation failed for "${n}": ${i}.`);(o||!1!==e)&&(null==r||r.setTitle(n),null===(t=this.curEditNode)||void 0===t||t._render({preventScroll:!0}),this.curEditNode=null,this.relatedNode=null,this.tree.setFocus())})}else null===(i=this.curEditNode)||void 0===i||i._render({preventScroll:!0}),this.curEditNode=null,this.relatedNode=null,this.tree.setFocus()}createNode(e="after",t,i){const s=this.tree;if(f(t=null!=t?t:s.getActiveNode(),"No node was passed, or no node is currently active."),e=e||"prependChild",null==i?i={title:""}:"string"==typeof i?i={title:i}:f(I(i),`Expected a plain object: ${i}`),("prependChild"===e||"appendChild"===e)&&(null==t?void 0:t.isExpandable(!0)))return void t.setExpanded().then(()=>{this.createNode(e,t,i)});const n=t.addNode(i,e);n.setClass("wb-edit-new"),this.relatedNode=t,n.match=-1,n.makeVisible({noAnimation:!0}).then(()=>{this.startEditTitle(n)})}}
74
74
  /*!
@@ -80,7 +80,7 @@ class me extends j{constructor(e){super(e,"edit",{debounce:100,minlength:1,maxle
80
80
  * https://github.com/mar10/wunderbaum
81
81
  *
82
82
  * Released under the MIT license.
83
- * @version v0.14.0
84
- * @date Fri, 20 Mar 2026 16:58:31 GMT
85
- */class be extends ve{constructor(e){super(e,null,{key:"__root__",title:e.id})}toString(){return`WbSystemRoot@${this.key}<'${this.tree.id}'>`}}class ye{get activeNode(){var e;return(null===(e=this._activeNode)||void 0===e?void 0:e.tree)?this._activeNode:null}get focusNode(){var e;return(null===(e=this._focusNode)||void 0===e?void 0:e.tree)?this._focusNode:null}constructor(e){this.enabled=!0,this.data={},this.extensionList=[],this.extensions={},this.keyMap=new Map,this.refKeyMap=new Map,this.treeRowCount=0,this._disableUpdateCount=0,this._disableUpdateIgnoreCount=0,this._activeNode=null,this._focusNode=null,this._initialSource=null,this.types={},this.columns=[],this._columnsById={},this.pendingChangeTypes=new Set,this._util=W,this.breadcrumb=null,this.filterMode=null,this.activeColIdx=0,this._cellNavMode=!1,this.lastQuicksearchTime=0,this.lastQuicksearchTerm="",this.lastClickTime=0;const t=Object.assign({id:void 0,source:[],element:null,debugLevel:3,header:null,rowHeightPx:22,iconMap:"bootstrap",columns:[],types:{},enabled:!0,fixedCol:!1,showSpinner:!1,checkbox:!1,minExpandLevel:0,emptyChildListExpandable:!1,skeleton:!1,autoCollapse:!1,adjustHeight:!0,connectTopBreadcrumb:null,columnsFilterable:!1,columnsMenu:!1,columnsResizable:!1,columnsSortable:!1,selectMode:"multi",scrollIntoViewOnExpandClick:!0,dnd:null,edit:null,filter:null,navigationModeOption:null,quicksearch:!0,strings:{loadError:"Error",loading:"Loading...",noData:"No data",breadcrumbDelimiter:" » ",queryResult:"Found ${matches} of ${count}",noMatch:"No results",matchIndex:"${match} of ${matches}"}},e),i=t;this.options=i;const s=new pe;this.ready=s.promise();let n=!1;if(this.ready.then(()=>{n=!0;try{this._callEvent("init")}catch(e){this.logError("Exception inside `init(e)` event:",e)}}).catch(e=>{if(n)throw e;this._callEvent("init",{error:e})}),this.id=t.id||"wb_"+ ++ye.sequence,delete t.id,this.root=new be(this),this._registerExtension(new Z(this)),this._registerExtension(new me(this)),this._registerExtension(new X(this)),this._registerExtension(new ie(this)),this._registerExtension(new ue(this)),this._registerExtension(new ee(this)),this._updateViewportThrottled=R(this._updateViewportImmediately.bind(this),{}),this.columns=t.columns||[],delete t.columns,!this.columns||!this.columns.length){const e="string"==typeof i.header?i.header:this.id;this.columns=[{id:"*",title:e,width:"*"}]}t.types&&this.setTypes(t.types,!0),delete t.types,this.element=C(t.element),f(!!this.element,`Invalid 'element' option: ${t.element}`),delete t.element,this.element.classList.add("wunderbaum"),this.element.getAttribute("tabindex")||(this.element.tabIndex=0),22!==i.rowHeightPx&&(this.element.style.setProperty("--wb-row-outer-height",i.rowHeightPx+"px"),this.element.style.setProperty("--wb-row-inner-height",i.rowHeightPx-2+"px")),this.element._wb_tree=this,this.headerElement=this.element.querySelector("div.wb-header");const r=null==i.header?this.columns.length>1:!!i.header;if(this.headerElement){f(!this.columns,"`opts.columns` must not be set if table markup already contains a header"),this.columns=[];const e=this.headerElement.querySelector("div.wb-row");for(const t of e.querySelectorAll("div"))this.columns.push({id:t.dataset.id||`col_${this.columns.length}`,title:""+t.textContent,width:"*"})}else{const e="<span class='wb-col'></span>".repeat(this.columns.length);if(this.element.innerHTML=`\n <div class='wb-header'>\n <div class='wb-row'>\n ${e}\n </div>\n </div>`,!r){this.element.querySelector("div.wb-header").style.display="none"}}this.element.innerHTML+='\n <div class="wb-list-container">\n <div class="wb-node-list"></div>\n </div>',this.listContainerElement=this.element.querySelector("div.wb-list-container"),this.nodeListElement=this.listContainerElement.querySelector("div.wb-node-list"),this.headerElement=this.element.querySelector("div.wb-header"),this.element.classList.toggle("wb-grid",this.columns.length>1),this.options.connectTopBreadcrumb&&(this.breadcrumb=C(this.options.connectTopBreadcrumb),f(!this.breadcrumb||null!=this.breadcrumb.innerHTML,`Invalid 'connectTopBreadcrumb' option: ${this.breadcrumb}.`),this.breadcrumb.addEventListener("click",e=>{const t=e.target;if(t&&t.matches("a.wb-breadcrumb")){const i=this.keyMap.get(t.dataset.key);null==i||i.setActive(),e.preventDefault()}})),this._initExtensions(),["enabled","fixedCol"].forEach(e=>{null!=i[e]&&this.setOption(e,i[e])}),t.source?(i.showSpinner&&(this.nodeListElement.innerHTML=`<progress class='spinner'>${i.strings.loading}</progress>`),this.load(t.source).then(()=>{null==i.navigationModeOption?this.isGrid()?this.setNavigationOption(B.cell):this.setNavigationOption(B.row):this.setNavigationOption(i.navigationModeOption),this.update(U.structure,{immediate:!0}),s.resolve()}).catch(e=>{s.reject(e)}).finally(()=>{var e;null===(e=this.element.querySelector("progress.spinner"))||void 0===e||e.remove(),this.element.classList.remove("wb-initializing")})):s.resolve(),this.update(U.any),this._registerEventHandlers(),this.resizeObserver=new ResizeObserver(e=>{this.update(U.resize)}),this.resizeObserver.observe(this.element)}_registerEventHandlers(){this.element.addEventListener("scroll",e=>{this.update(U.scroll)}),M(this.element,"click",".wb-button,.wb-col-icon",e=>{var t,i;const s=ye.getEventInfo(e),n=null===(i=null===(t=e.target)||void 0===t?void 0:t.dataset)||void 0===i?void 0:i.command;this._callEvent("buttonClick",{event:e,info:s,command:n})}),M(this.nodeListElement,"click","div.wb-row",e=>{const t=ye.getEventInfo(e),i=t.node,s=e;if(!1===this._callEvent("click",{event:e,node:i,info:t}))return this.lastClickTime=Date.now(),!1;if(i){if(s.ctrlKey)return void i.toggleSelected();const n=this.getOption("edit.trigger"),r=this.getOption("edit.slowClickDelay");n.indexOf("clickActive")>=0&&"title"===t.region&&i.isActive()&&(!r||Date.now()-this.lastClickTime<r)&&i.startEditTitle(),t.region===H.expander?i.setExpanded(!i.isExpanded(),{scrollIntoView:!1!==this.options.scrollIntoViewOnExpandClick}):t.region===H.checkbox?i.toggleSelected():t.colIdx>=0?i.setActive(!0,{colIdx:t.colIdx,event:e}):i.setActive(!0,{event:e})}this.lastClickTime=Date.now()}),M(this.nodeListElement,"dblclick","div.wb-row",e=>{const t=ye.getEventInfo(e),i=t.node;if(!1===this._callEvent("dblclick",{event:e,node:i,info:t}))return!1;i&&0===t.colIdx&&i.isExpandable()&&t.region!==H.expander&&(this._callMethod("edit._stopEditTitle"),i.setExpanded(!i.isExpanded()))}),M(this.element,"keydown",e=>{const t=ye.getEventInfo(e),i=k(e),s=t.node||this.getFocusNode();this._callHook("onKeyEvent",{event:e,node:s,info:t,eventName:i})}),M(this.element,"focusin focusout",e=>{const t="focusin"===e.type,i=ye.getNode(e);this._callEvent("focus",{flag:t,event:e}),t&&this.isRowNav()&&!this.isEditingTitle()&&(this.options.navigationModeOption===B.row?null==i||i.setActive():this.setCellNav()),t||this._callMethod("edit._stopEditTitle",!0,{event:e,forceClose:!0})})}static getTree(e){if(e instanceof ye)return e;if(e instanceof ve)return e.tree;if(void 0===e&&(e=0),"number"==typeof e)e=document.querySelectorAll(".wunderbaum")[e];else if("string"==typeof e){for(const t of document.querySelectorAll(".wunderbaum")){const i=t._wb_tree;if(i&&i.id===e)return i}if(!(e=document.querySelector(e)))return null}else e.target&&(e=e.target);return f(e instanceof Element,`Invalid el type: ${e}`),e.matches(".wunderbaum")||(e=e.closest(".wunderbaum")),e&&e._wb_tree?e._wb_tree:null}get iconMap(){const e=this.options.iconMap;return"string"==typeof e?oe[e]:e}static getNode(e){if(!e)return null;if(e instanceof ve)return e;for(void 0!==e.target&&(e=e.target);e;){if(e._wb_node)return e._wb_node;e=e.parentElement}return null}*[Symbol.iterator](){yield*this.root}_registerExtension(e){this.extensionList.push(e),this.extensions[e.id]=e}_initExtensions(){for(const e of this.extensionList)e.init()}_calculateKey(e,t){if(e.key)return e.key;if(!this.options.autoKeys)return""+ ++ve.sequence;const i=(t?t.key:"")+(e.refKey||e.title),s=K(i,!0);let n="id_"+s+K(s+i,!0);const r=this.keyMap.get(n);return r&&(n+="."+ ++ye.sequence,this.logWarn(`Node with existing key: '${r}', using ${n}.`,e)),n}_registerNode(e){const t=e.key;f(null!=t,`Missing key: '${e}'.`),f(!this.keyMap.has(t),`Duplicate key: '${t}': ${e}.`),this.keyMap.set(t,e);const i=e.refKey;if(null!=i){const t=this.refKeyMap.get(i);t?t.add(e):this.refKeyMap.set(i,new Set([e]))}}_unregisterNode(e){const t=e.refKey;if(null!=t){const i=this.refKeyMap.get(t);i&&i.delete(e)&&!i.size&&this.refKeyMap.delete(t)}this.keyMap.delete(e.key),e.tree=null,e.parent=null,e.removeMarkup()}_callHook(e,t={}){let i;const s=N({},{tree:this,options:this.options,result:void 0},t);for(const t of this.extensionList){if(i=t[e].call(t,s),!1===i)break;void 0!==s.result&&(i=s.result)}return i}_callMethod(e,...t){const[i,s]=e.split("."),n=s?this.extensions[i]:this,r=n[s];if(r)return r.apply(n,t);this.logError(`Calling undefined method '${e}()'.`)}_callEvent(e,t){const[i,s]=e.split("."),n=this.options,r=s?n[i][s]:n[i];if(r)return r.call(this,N({type:e,tree:this,util:this._util},t))}_getNodeByRowIdx(e){let t=null;return this.visitRows(i=>{if(i._rowIdx===e)return t=i,!1}),t}getTopmostVpNode(e=!0){const t=this.options.rowHeightPx,i=this.element.scrollTop;let s;return s=e?Math.ceil((i-1)/t):Math.floor(i/t),this._getNodeByRowIdx(s)}getLowestVpNode(e=!0){const t=this.options.rowHeightPx,i=this.element,s=this.headerElement.clientHeight,n=i.scrollTop,r=i.clientHeight-s;let o;return o=e?Math.floor((n+r)/t)-1:Math.ceil((n+r)/t)-1,o=Math.min(o,this.count(!0)-1),this._getNodeByRowIdx(o)}_getPrevNodeInView(e,t=1){return this.visitRows(i=>{if(e=i,t--<=0)return!1},{reverse:!0,start:e||this.getActiveNode()}),e}_getNextNodeInView(e,t){let i=(null==t?void 0:t.ofs)||1;const s=!!(null==t?void 0:t.reverse);return this.visitRows(s=>(e=s,(!(null==t?void 0:t.cb)||!t.cb(s))&&(!(i--<=0)&&void 0)),{reverse:s,start:e||this.getActiveNode()}),e}addChildren(e,t){return this.root.addChildren(e,t)}applyCommand(e,t,i){let s,n;switch(t instanceof ve?s=t:(s=this.getActiveNode(),f(void 0===i,`Unexpected options: ${i}`),i=t),e){case"moveUp":n=s.getPrevSibling(),n&&(s.moveTo(n,"before"),s.setActive());break;case"moveDown":n=s.getNextSibling(),n&&(s.moveTo(n,"after"),s.setActive());break;case"indent":n=s.getPrevSibling(),n&&(s.moveTo(n,"appendChild"),n.setExpanded(),s.setActive());break;case"outdent":s.isTopLevel()||(s.moveTo(s.getParent(),"after"),s.setActive());break;case"remove":n=s.getPrevSibling()||s.getParent(),s.remove(),n&&n.setActive();break;case"addChild":this._callMethod("edit.createNode","prependChild");break;case"addSibling":this._callMethod("edit.createNode","after");break;case"rename":s.startEditTitle();break;case"down":case"first":case"last":case"left":case"nextMatch":case"pageDown":case"pageUp":case"parent":case"prevMatch":case"right":case"up":return s.navigate(e);default:v(`Unhandled command: '${e}'`)}}clear(){this.root.removeChildren(),this.root.children=null,this.keyMap.clear(),this.refKeyMap.clear(),this.treeRowCount=0,this._activeNode=null,this._focusNode=null,this.update(U.structure)}destroy(){this.logInfo("destroy()..."),this.clear(),this.resizeObserver.disconnect(),this.element.innerHTML="",this.element.outerHTML=this.element.outerHTML}getOption(e,t){let i,s=this.options;e.indexOf(".")>=0&&([i,e]=e.split("."),s=s[i]);let n=s[e];return"function"==typeof n&&(n=n({type:"resolve",tree:this})),null!=n?n:t}setOption(e,t){if(e.indexOf(".")>=0){const i=e.split(".");return void this.extensions[i[0]].setPluginOption(i[1],t)}switch(this.options[e]=t,e){case"checkbox":this.update(U.any);break;case"enabled":this.setEnabled(!!t);break;case"fixedCol":this.element.classList.toggle("wb-fixed-col",!!t)}}hasFocus(){return this.element.contains(document.activeElement)}hasHeader(){const e=this.options.header;return this.isGrid()?!1!==e:!!e}runWithDeferredUpdate(e){try{this.enableUpdate(!1);const t=e();return f(!(t instanceof Promise),`Promise return not allowed (see 'runWithDeferredUpdateAsync()'): ${t}`),t}finally{this.enableUpdate(!0)}}async runWithDeferredUpdateAsync(e){try{return this.enableUpdate(!1),await e()}finally{this.enableUpdate(!0)}}async expandAll(e=!0,t){await this.root.expandAll(e,t)}selectAll(e=!0){return this.root.setSelected(e,{propagateDown:!0})}toggleSelect(){this.selectAll(this.root._anySelectable())}getSelectedNodes(e=!1){return this.root.getSelectedNodes(e)}getRefKeys(e=!1){return this.root.getRefKeys(e)}_selectRange(e){this.logDebug("_selectRange",e),v("Not yet implemented.")}count(e=!1){return e?this.treeRowCount:this.keyMap.size}countUnique(){return this.refKeyMap.size}_check(){let e=0;this.visit(t=>{e++}),this.keyMap.size!==e&&this.logWarn(`_check failed: ${this.keyMap.size} !== ${e}`)}findAll(e){return this.root.findAll(e)}findByRefKey(e){const t=this.refKeyMap.get(e);return t?Array.from(t):[]}findFirst(e){return this.root.findFirst(e)}findKey(e){return this.keyMap.get(e)||null}findNextNode(e,t,i=!1){let s=null;const n=this.getFirstChild(),r=i?this.findRelatedNode(n,"last"):null,o="string"==typeof e?function(e){e=b(e);const t=new RegExp("^"+e,"i");return function(e){return t.test(e.title)}}(e):e;function l(e){if(o(e)&&(s=e),s||e===t)return!1}return t=t||(i?r:n),this.visitRows(l,{start:t,includeSelf:!1,reverse:i}),s||t===n||this.visitRows(l,{start:i?r:n,includeSelf:!0,reverse:i}),s}findRelatedNode(e,t,i=!1){const s=this.options.rowHeightPx;let n=null;const r=Math.floor(this.listContainerElement.clientHeight/s);switch(t){case"parent":case"left":e.parent&&e.parent.parent&&(n=e.parent);break;case"first":this.visit(e=>{if(e.isVisible())return n=e,!1});break;case"last":this.visit(e=>{e.isVisible()&&(n=e)});break;case"right":e.children&&e.children.length&&(n=e.children[0]);break;case"up":n=this._getNextNodeInView(e,{reverse:!0});break;case"down":n=this._getNextNodeInView(e);break;case"pageDown":{const t=this.getLowestVpNode();n=e._rowIdx<t._rowIdx?t:this._getNextNodeInView(e,{reverse:!1,ofs:r})}break;case"pageUp":if(0===e._rowIdx)n=e;else{const t=this.getTopmostVpNode();n=e._rowIdx>t._rowIdx?t:this._getNextNodeInView(e,{reverse:!0,ofs:r})}break;case"prevMatch":case"nextMatch":if(!this.isFilterActive){this.logWarn(`${t}: Filter is not active.`);break}n=this.findNextNode(e=>e.isMatched(),e,"prevMatch"===t),null==n||n.setActive();break;default:this.logWarn("Unknown relation '"+t+"'.")}return n}*format_iter(e,t){yield*this.root.format_iter(e,t)}format(e,t){return this.root.format(e,t)}get parent(){return null}get children(){return this.root.children||[]}getActiveColElem(){return this.activeNode&&this.activeColIdx>=0?this.activeNode.getColElem(this.activeColIdx):null}getActiveNode(){return this.activeNode}getFirstChild(){return this.root.getFirstChild()}getLastChild(){return this.root.getLastChild()}getFocusNode(){return this.focusNode}static getEventInfo(e){const t=e.target,i=t.classList,s=t.closest("span.wb-col"),n=ye.getNode(t),r=n?n.tree:ye.getTree(e),o={event:e,canonicalName:k(e),tree:r,node:n,region:H.unknown,colDef:void 0,colIdx:-1,colId:void 0,colElem:s};if(i.contains("wb-title"))o.region=H.title;else if(i.contains("wb-expander"))o.region=n.isExpandable()?H.expander:H.prefix;else if(i.contains("wb-checkbox"))o.region=H.checkbox;else if(i.contains("wb-icon"))o.region=H.icon;else if(i.contains("wb-node"))o.region=H.title;else if(s){o.region=H.column;const e=Array.prototype.indexOf.call(s.parentNode.children,s);o.colIdx=e}else{if(!i.contains("wb-row"))return"mousemove"===e.type||e instanceof KeyboardEvent||null==r||r.logWarn("getEventInfo(): not found",e,o),o;o.region=H.title}return-1===o.colIdx&&(o.colIdx=0),o.colDef=null==r?void 0:r.columns[o.colIdx],null!=o.colDef&&(o.colId=o.colDef.id),o}toString(){return`Wunderbaum<'${this.id}'>`}isEditing(){return!!this.nodeListElement.querySelector("input:focus,select:focus")}isEditingTitle(){return this._callMethod("edit.isEditingTitle")}isLoading(){let e=!1;return this.root.visit(t=>{if(t._isLoading||t._requestId)return e=!0,!1},!0),e}log(...e){this.options.debugLevel>=4&&console.log(this.toString(),...e)}logDebug(...e){this.options.debugLevel>=4&&console.debug(this.toString(),...e)}logError(...e){this.options.debugLevel>=1&&console.error(this.toString(),...e)}logInfo(...e){this.options.debugLevel>=3&&console.info(this.toString(),...e)}logTime(e){return this.options.debugLevel>=4&&console.time(this+": "+e),e}logTimeEnd(e){this.options.debugLevel>=4&&console.timeEnd(this+": "+e)}logWarn(...e){this.options.debugLevel>=2&&console.warn(this.toString(),...e)}logDeprecate(e,t){if(this.options.debugLevel>=2){let i=`${this}: ${e} is deprecated`;(null==t?void 0:t.since)&&(i+=` since ${t.since}`),(null==t?void 0:t.hint)&&(i+=` (${t.since})`),console.warn(i+".")}}resetColumns(){this.columns.forEach(e=>{delete e.customWidthPx}),this.update(U.colStructure)}scrollTo(e){let t,i;e instanceof ve?t=e:(i=e,t=i.node),f(t&&null!=t._rowIdx,`Invalid node: ${t}`);const s=this.options.rowHeightPx,n=this.element,r=this.headerElement.clientHeight,o=n.scrollTop,l=n.clientHeight,a=t._rowIdx*s+r,d=r,c=a-o,h=c+s,u=null==i?void 0:i.topNode;let p=null;c>=d?h<=l||(p=a+s-l+2):p=a-d-2,null!=p&&(this.log(`scrollTo(${a}): ${o} => ${p}`),n.scrollTop=p,u&&this.scrollTo(u))}scrollToHorz(){const e=this.columns[0]._widthPx,t=this.element.clientWidth,i=this.element.scrollLeft,s=this.getActiveColElem(),n=Number.parseInt(null==s?void 0:s.style.left,10),r=n+Number.parseInt(null==s?void 0:s.style.width,10);let o=i;n-i<e?o=n-e:r-i>t&&(o=r-t),o=Math.max(0,o),this.log(`scrollToHorz(${this.activeColIdx}): ${n}..${r}, fixedOfs=${e}, vpWidth=${t}, curLeft=${i} -> ${o}`),this.element.scrollLeft=o}setColumn(e,t){var i,s,n;const r=null==t?void 0:t.edit,o=!1!==(null==t?void 0:t.scrollIntoView);if(f(this.isCellNav(),"Expected cellNav mode"),"string"==typeof e){const t=e;f((e=this.columns.findIndex(t=>t.id===e))>=0,`Invalid colId: ${t}`)}if(f(0<=e&&e<this.columns.length,`Invalid colIdx: ${e}`),this.activeColIdx=e,this.hasHeader())for(const t of this.headerElement.children){let i=0;for(const s of t.children)s.classList.toggle("wb-active",i++===e)}null===(i=this.activeNode)||void 0===i||i.update(U.status);for(const t of this.nodeListElement.children){let i=0;for(const s of t.children)s.classList.toggle("wb-active",i++===e)}(o||r)&&this.scrollToHorz(),r&&this.activeNode&&(0===e?this.activeNode.startEditTitle():null===(n=null===(s=this.getActiveColElem())||void 0===s?void 0:s.querySelector("input,select"))||void 0===n||n.focus())}_setActiveNode(e){this._activeNode=e}setActiveNode(e,t=!0,i){var s;null===(s=this.findKey(e))||void 0===s||s.setActive(t,i)}setFocus(e=!0){e?this.element.focus():this.element.blur()}_setFocusNode(e){this._focusNode=e}getState(e={}){var t,i;const{activeKey:s=!0,expandedKeys:n=!1,selectedKeys:r=!1}=e,o=new Set;if(n)for(const e of this)e.isExpanded()&&e.hasChildren()&&o.add(e.key);s&&this.activeNode&&this.activeNode.visitParents(e=>{e.parent&&o.add(e.key)},!1);return{expandedKeys:o.size?Array.from(o):void 0,activeKey:null!==(i=null===(t=this.activeNode)||void 0===t?void 0:t.key)&&void 0!==i?i:null,activeColIdx:this.activeColIdx,selectedKeys:r?this.getSelectedNodes().flatMap(e=>e.key):void 0}}async setState(e,t={}){const{expandLazy:i=!0}=t;return this.runWithDeferredUpdateAsync(async()=>{var t,s;if(e.expandedKeys&&e.expandedKeys.length)if(i)await this._loadLazyNodes(e.expandedKeys,{expand:!0,noEvents:!0});else for(const i of e.expandedKeys)null===(t=this.findKey(i))||void 0===t||t.setExpanded(!0);if(e.activeKey&&this.setActiveNode(e.activeKey),e.selectedKeys){this.selectAll(!1);for(const t of e.selectedKeys)null===(s=this.findKey(t))||void 0===s||s.setSelected(!0)}this.isCellNav()&&null!=e.activeColIdx&&this.setColumn(e.activeColIdx)})}update(e,t,i){t instanceof ve||(i=t,t=void 0);const s=!!T(i,"immediate"),n=q,r=this.pendingChangeTypes;if(this._disableUpdateCount)this._disableUpdateIgnoreCount++;else{switch(e){case U.any:case U.colStructure:r.add(n.header),r.add(n.clearMarkup),r.add(n.redraw),r.add(n.scroll);break;case U.resize:r.add(n.header),r.add(n.redraw);break;case U.structure:r.add(n.redraw);break;case U.scroll:r.add(n.scroll);break;case U.row:case U.data:case U.status:f(t,`Option '${e}' requires a node.`),t._rowElem&&t._render({change:e});break;default:v(`Invalid change type '${e}'.`)}if(e===U.colStructure){const e=this.isGrid();this.element.classList.toggle("wb-grid",e),!e&&this.isCellNav()&&this.setCellNav(!1)}r.size>0&&(s?this._updateViewportImmediately():this._updateViewportThrottled())}}setEnabled(e=!0){const t=this.enabled;return this.enabled=!!e,this.element.classList.toggle("wb-disabled",!e),t}isEnabled(){return this.enabled}isGrid(){return this.columns&&this.columns.length>1}isCellNav(){return!!this._cellNavMode}isRowNav(){return!this._cellNavMode}setCellNav(e=!0){var t;const i=this._cellNavMode;this._cellNavMode=!!e,e&&!i&&this.setColumn(0),this.element.classList.toggle("wb-cell-mode",e),null===(t=this.activeNode)||void 0===t||t.update(U.status)}setNavigationOption(e,t=!1){if(this.isGrid()||e===B.row)switch(this.options.navigationModeOption=e,e){case B.cell:this.setCellNav(!0);break;case B.row:this.setCellNav(!1);break;case B.startCell:t&&this.setCellNav(!0);break;case B.startRow:t&&this.setCellNav(!1);break;default:v(`Invalid mode '${e}'.`)}else this.logWarn("Plain trees only support row navigation mode.")}setStatus(e,t){return this.root.setStatus(e,t)}setTypes(e,t=!0){f(I(e),`Expected plain objext: ${e}`),t?this.types=e:N(this.types,e);for(const e of Object.values(this.types))e.classes&&(e.classes=$(e.classes))}sortChildren(e=ce,t=!1){return this.logDeprecate("sortChildren()",{since:"0.14.0"}),this.sort({cmp:e||void 0,deep:t,propName:"title"})}sortByProperty(e){this.logDeprecate("sortByProperty()",{since:"0.14.0"}),this.root.sortByProperty(e)}sort(e){this.root.sort(e)}toDictArray(e){var t;return null!==(t=this.root.toDict(!0,e).children)&&void 0!==t?t:[]}_updateColumnWidths(){const e=this.element.clientWidth,t=this.columns,i=t[0];let s=0,n=0,r=0,o=!1;if("*"!==i.id)throw new Error(`First column must have id '*': got '${i.id}'.`);this._columnsById={};for(const e of t){this._columnsById[e.id]=e;const t=e.customWidthPx?`${e.customWidthPx}px`:e.width;if("*"===e.id&&e!==i)throw new Error(`Column id '*' must be defined only once: '${e.title}'.`);if(t&&"*"!==t)if("number"==typeof t)e._weight=t,n+=t;else if("string"==typeof t&&t.endsWith("px")){e._weight=0;const i=parseFloat(t.slice(0,-2));e._widthPx!=i&&(o=!0,e._widthPx=i),r+=i}else v(`Invalid column width: ${t} (expected string ending with 'px' or number, e.g. "<num>px" or <int>).`);else e._weight=1,n+=1}const l=Math.max(0,e-r);let a=0;for(const e of t){let t;if(e._weight){const i=e.minWidth;t="number"==typeof i?i:"string"==typeof i&&i.endsWith("px")?parseFloat(i.slice(0,-2)):4;const s=Math.max(t,l*e._weight/n);e._widthPx!=s&&(o=!0,e._widthPx=s)}e._ofsPx=a,a+=e._widthPx}t[t.length-1]._widthPx-=1,s=a-1;const d=`${s}px`;return this.headerElement.style.width=d,this.listContainerElement.style.width=d,o}_renderHeaderMarkup(){f(this.headerElement,"Expected a headerElement");const e=this.hasHeader();if(E(this.headerElement,e),!e)return;const t=this.iconMap,i=this.columns.length,s=this.headerElement.querySelector(".wb-row");f(s,"Expected a row in header element"),s.innerHTML="<span class='wb-col'></span>".repeat(i);for(let e=0;e<i;e++){const n=this.columns[e],r=s.children[e];r.style.left=n._ofsPx+"px",r.style.width=n._widthPx+"px","string"==typeof n.headerClasses?n.headerClasses&&r.classList.add(...n.headerClasses.split(" ")):n.classes&&r.classList.add(...n.classes.split(" "));let o="";n.tooltip&&(o=y(n.tooltip),o=` title="${o}"`);let l="";if(F(n.menu,this.options.columnsMenu,!1)){l+=`<i data-command=menu class="wb-col-icon ${"wb-col-icon-menu "+t.colMenu}"></i>`}if(F(n.sortable,this.options.columnsSortable,!1)){let e="wb-col-icon-sort "+t.colSortable;n.sortOrder&&(e+=`wb-col-sort-${n.sortOrder}`,e+="asc"===n.sortOrder?t.colSortAsc:t.colSortDesc);l+=`<i data-command=sort class="wb-col-icon ${e}"></i>`}if(F(n.filterable,this.options.columnsFilterable,!1)){r.classList.toggle("wb-col-filter",!!n.filterActive);let e="wb-col-icon-filter "+t.colFilter;n.filterActive&&(e+=t.colFilterActive);l+=`<i data-command=filter class="wb-col-icon ${e}"></i>`}e<i-1&&(F(n.resizable,this.options.columnsResizable,!1)?l+='<span class="wb-col-resizer wb-col-resizer-active"></span>':l+='<span class="wb-col-resizer"></span>');const a=m(n.title||n.id);r.innerHTML=`<span class="wb-col-title"${o}>${a}</span>${l}`,this.isCellNav()&&r.classList.toggle("wb-active",e===this.activeColIdx)}}updatePendingModifications(){this.pendingChangeTypes.size>0&&this._updateViewportImmediately()}_createNodeIcon(e,t,i){const s=this.iconMap;let n,r=e.getOption("icon");if(e._errorInfo?r=s.error:e._isLoading&&t&&(r=s.loading),!1===r)return null;"string"==typeof r||(r=e.statusNodeType?s[e.statusNodeType]:e.expanded?s.folderOpen:e.children?s.folder:e.lazy?s.folderLazy:s.doc),r?re.test(r)?n=x(r):ne.test(r)?n=x(`<i class="wb-icon" style="background-image: url('${r}');">`):(n=document.createElement("i"),n.className="wb-icon "+r):(n=document.createElement("i"),n.className="wb-icon");const o=i&&e._callEvent("iconBadge",{iconSpan:n});let l=null;if(null!=o&&!1!==o){let e="",t="";I(o)?(l=""+o.badge,e=o.badgeClass?" "+o.badgeClass:"",t=o.badgeTooltip?` title="${o.badgeTooltip}"`:""):l="number"==typeof o?""+o:o,"string"==typeof l&&(l=x(`<span class="wb-badge${e}"${t}>${m(l)}</span>`)),l&&n.append(l)}return n}_updateTopBreadcrumb(){const e=this.breadcrumb,t=this.getTopmostVpNode(!0),i=null==t?void 0:t.getParentList(!1,!1);if(null==i?void 0:i.length){e.innerHTML="";for(const i of t.getParentList(!1,!1)){const t=this._createNodeIcon(i,!1,!1);t&&e.append(t," ");const s=document.createElement("a");s.textContent=i.title,s.href="#",s.classList.add("wb-breadcrumb"),s.dataset.key=i.key,e.append(s,this.options.strings.breadcrumbDelimiter)}}else e.innerHTML="&nbsp;"}_updateViewportImmediately(){if(this._disableUpdateCount)return this.log(`_updateViewportImmediately() IGNORED (disable level: ${this._disableUpdateCount}).`),void this._disableUpdateIgnoreCount++;this._updateViewportThrottled.pending()&&this._updateViewportThrottled.cancel();const e=q,t=new Set(this.pendingChangeTypes);this.pendingChangeTypes.clear();if(t.has(e.scroll)&&1===t.size)this._updateRows({newNodesOnly:!0});else{if(this.log("_updateViewportImmediately():",t),!1!==this.options.adjustHeight){let e=this.listContainerElement.clientHeight;const t=this.headerElement.clientHeight,i=this.element.clientHeight-t-1;Math.abs(e-i)>1&&(this.listContainerElement.style.height=i+"px",e=i)}t.has(e.clearMarkup)&&this.visit(e=>{e.removeMarkup()}),t.has(e.header)&&(this._updateColumnWidths(),this._renderHeaderMarkup()),this._updateRows()}this.breadcrumb&&this._updateTopBreadcrumb(),this._callEvent("update")}_updateRows(e){const t=!!(e=Object.assign({newNodesOnly:!1},e)).newNodesOnly,i=this.options.rowHeightPx,s=this.element.clientHeight,n=this.element.scrollTop;let r=Math.max(0,n/i-5);r=Math.floor(r),r%2&&r--;let o=Math.max(0,(n+s)/i+5);o=Math.ceil(o);const l=new Set;this.nodeListElement.childNodes.forEach(e=>{e._wb_node&&l.add(e._wb_node)});let a=0,d=0,c=!1,h="first";this.visitRows(function(e){const s=e._rowElem;e._rowIdx!==a&&(e._rowIdx=a,c=!0),a<r||a>o?s&&(h=s):s&&t?(l.delete(e),s.style.top=a*i+"px",h=s):(l.delete(e),s&&(s.style.top=a*i+"px"),e._render({top:d,after:h}),h=e._rowElem),a++,d+=i}),this.treeRowCount=a;for(const e of l)e._callEvent("discard"),e.removeMarkup();return this.nodeListElement.style.height=`${d}px`,c}visit(e){return this.root.visit(e,!1)}visitRows(e,t){if(!this.root.hasChildren())return!1;if(t&&t.reverse)return delete t.reverse,this._visitRowsUp(e,t);let i,s,n,r,o,l,a=0,d=!1===(t=t||{}).includeSelf,c=t.start||this.root.children[0];const h=!!t.includeHidden,u=!h&&"hide"===this.filterMode;for(n=c.parent;n;){for(o=n.children,s=o.indexOf(c)+a,f(s>=0,`Could not find ${c} in parent's children: ${n}`),i=s;i<o.length;i++){if(c=o[i],c===l)return!1;if(!u||c.statusNodeType||c.match||c.subMatchCount){if(!d&&!1===e(c))return!1;if(d=!1,c.children&&c.children.length&&(h||c.expanded)&&(r=c.visit(t=>t!==l&&(!u||t.match||t.subMatchCount?!1!==e(t)&&(h||!t.children||t.expanded?void 0:"skip"):"skip"),!1),!1===r))return!1}}c=n,n=n.parent,a=1,!n&&t.wrap&&(this.logDebug("visitRows(): wrap around"),f(t.start,"`wrap` option requires `start`"),l=t.start,t.wrap=!1,n=this.root,a=0)}return!0}_visitRowsUp(e,t){let i,s,n,r=t.start||this.root.children[0];const o=!!t.includeHidden;if(!1!==t.includeSelf&&!1===e(r))return!1;for(;;){if(n=r.parent,i=n.children,i[0]===r){if(r=n,!r.parent)break;i=n.children}else for(s=i.indexOf(r),r=i[s-1];(o||r.expanded)&&r.children&&r.children.length;)i=r.children,n=r,r=i[i.length-1];if((o||r.isVisible())&&!1===e(r))return!1}return!0}async load(e){return this.clear(),this._initialSource=e,this.root.load(e)}async reload(e={}){const{source:t=this._initialSource,reactivate:i=!0}=e;if(!t)return void this.logWarn("No previous ajax source to reload.");if(!i)return this.load(t);const s=this.getState();return await this.load(t),this.setState(s)}async _loadLazyNodes(e,t={}){const{expand:i=!0}=t,s=new Set(e);for(;s.size>0;){const e=[],t=new Set(s);for(const n of t){const t=this.findKey(n);t&&(s.delete(n),i?e.push(t.setExpanded(!0)):t.isUnloaded()&&e.push(t.loadLazy()),t._rowElem&&t._render())}if(0===e.length){this.logWarn(`Could not expand ${s.size} nodes:`,s);break}await Promise.allSettled(e)}}enableUpdate(e){e?(f(this._disableUpdateCount>0,"enableUpdate(true) was called too often"),this._disableUpdateCount--,0===this._disableUpdateCount&&(this.logDebug(`enableUpdate(): active again. Re-painting to catch up with ${this._disableUpdateIgnoreCount} ignored update requests...`),this._disableUpdateIgnoreCount=0,this.update(U.any,{immediate:!0}))):this._disableUpdateCount++}filterNodes(e,t){return this.extensions.filter.filterNodes(e,t)}countMatches(){return this.extensions.filter.countMatches()}filterBranches(e,t){return this.extensions.filter.filterBranches(e,t)}clearFilter(){return this.extensions.filter.clearFilter()}isFilterActive(){return!!this.filterMode}updateFilter(){return this.extensions.filter.updateFilter()}}ye.sequence=0,ye.version="v0.14.0",ye.util=W,ye.iconMaps=oe,e.Wunderbaum=ye});
83
+ * @version v0.14.1
84
+ * @date Sun, 22 Mar 2026 05:52:05 GMT
85
+ */class be extends ve{constructor(e){super(e,null,{key:"__root__",title:e.id})}toString(){return`WbSystemRoot@${this.key}<'${this.tree.id}'>`}}class ye{get activeNode(){var e;return(null===(e=this._activeNode)||void 0===e?void 0:e.tree)?this._activeNode:null}get focusNode(){var e;return(null===(e=this._focusNode)||void 0===e?void 0:e.tree)?this._focusNode:null}constructor(e){this.enabled=!0,this.data={},this.extensionList=[],this.extensions={},this.keyMap=new Map,this.refKeyMap=new Map,this.treeRowCount=0,this._disableUpdateCount=0,this._disableUpdateIgnoreCount=0,this._activeNode=null,this._focusNode=null,this._initialSource=null,this.types={},this.columns=[],this._columnsById={},this.pendingChangeTypes=new Set,this._util=W,this.breadcrumb=null,this.filterMode=null,this.activeColIdx=0,this._cellNavMode=!1,this.lastQuicksearchTime=0,this.lastQuicksearchTerm="",this.lastClickTime=0;const t=Object.assign({id:void 0,source:[],element:null,debugLevel:3,header:null,rowHeightPx:22,iconMap:"bootstrap",columns:[],types:{},enabled:!0,fixedCol:!1,showSpinner:!1,checkbox:!1,minExpandLevel:0,emptyChildListExpandable:!1,skeleton:!1,autoCollapse:!1,adjustHeight:!0,connectTopBreadcrumb:null,columnsFilterable:!1,columnsMenu:!1,columnsResizable:!1,columnsSortable:!1,selectMode:"multi",scrollIntoViewOnExpandClick:!0,dnd:null,edit:null,filter:null,navigationModeOption:null,quicksearch:!0,strings:{loadError:"Error",loading:"Loading...",noData:"No data",breadcrumbDelimiter:" » ",queryResult:"Found ${matches} of ${count}",noMatch:"No results",matchIndex:"${match} of ${matches}"}},e),i=t;this.options=i;const s=new pe;this.ready=s.promise();let n=!1;if(this.ready.then(()=>{n=!0;try{this._callEvent("init")}catch(e){this.logError("Exception inside `init(e)` event:",e)}}).catch(e=>{if(n)throw e;this._callEvent("init",{error:e})}),this.id=t.id||"wb_"+ ++ye.sequence,delete t.id,this.root=new be(this),this._registerExtension(new Z(this)),this._registerExtension(new me(this)),this._registerExtension(new X(this)),this._registerExtension(new ie(this)),this._registerExtension(new ue(this)),this._registerExtension(new ee(this)),this._updateViewportThrottled=R(this._updateViewportImmediately.bind(this),{}),this.columns=t.columns||[],delete t.columns,!this.columns||!this.columns.length){const e="string"==typeof i.header?i.header:this.id;this.columns=[{id:"*",title:e,width:"*"}]}t.types&&this.setTypes(t.types,!0),delete t.types,this.element=C(t.element),f(!!this.element,`Invalid 'element' option: ${t.element}`),delete t.element,this.element.classList.add("wunderbaum"),this.element.getAttribute("tabindex")||(this.element.tabIndex=0),22!==i.rowHeightPx&&(this.element.style.setProperty("--wb-row-outer-height",i.rowHeightPx+"px"),this.element.style.setProperty("--wb-row-inner-height",i.rowHeightPx-2+"px")),this.element._wb_tree=this,this.headerElement=this.element.querySelector("div.wb-header");const r=null==i.header?this.columns.length>1:!!i.header;if(this.headerElement){f(!this.columns,"`opts.columns` must not be set if table markup already contains a header"),this.columns=[];const e=this.headerElement.querySelector("div.wb-row");for(const t of e.querySelectorAll("div"))this.columns.push({id:t.dataset.id||`col_${this.columns.length}`,title:""+t.textContent,width:"*"})}else{const e="<span class='wb-col'></span>".repeat(this.columns.length);if(this.element.innerHTML=`\n <div class='wb-header'>\n <div class='wb-row'>\n ${e}\n </div>\n </div>`,!r){this.element.querySelector("div.wb-header").style.display="none"}}this.element.innerHTML+='\n <div class="wb-list-container">\n <div class="wb-node-list"></div>\n </div>',this.listContainerElement=this.element.querySelector("div.wb-list-container"),this.nodeListElement=this.listContainerElement.querySelector("div.wb-node-list"),this.headerElement=this.element.querySelector("div.wb-header"),this.element.classList.toggle("wb-grid",this.columns.length>1),this.options.connectTopBreadcrumb&&(this.breadcrumb=C(this.options.connectTopBreadcrumb),f(!this.breadcrumb||null!=this.breadcrumb.innerHTML,`Invalid 'connectTopBreadcrumb' option: ${this.breadcrumb}.`),this.breadcrumb.addEventListener("click",e=>{const t=e.target;if(t&&t.matches("a.wb-breadcrumb")){const i=this.keyMap.get(t.dataset.key);null==i||i.setActive(),e.preventDefault()}})),this._initExtensions(),["enabled","fixedCol"].forEach(e=>{null!=i[e]&&this.setOption(e,i[e])}),t.source?(i.showSpinner&&(this.nodeListElement.innerHTML=`<progress class='spinner'>${i.strings.loading}</progress>`),this.load(t.source).then(()=>{null==i.navigationModeOption?this.isGrid()?this.setNavigationOption(B.cell):this.setNavigationOption(B.row):this.setNavigationOption(i.navigationModeOption),this.update(U.structure,{immediate:!0}),s.resolve()}).catch(e=>{s.reject(e)}).finally(()=>{var e;null===(e=this.element.querySelector("progress.spinner"))||void 0===e||e.remove(),this.element.classList.remove("wb-initializing")})):s.resolve(),this.update(U.any),this._registerEventHandlers(),this.resizeObserver=new ResizeObserver(e=>{this.update(U.resize)}),this.resizeObserver.observe(this.element)}_registerEventHandlers(){this.element.addEventListener("scroll",e=>{this.update(U.scroll)}),M(this.element,"click",".wb-button,.wb-col-icon",e=>{var t,i;const s=ye.getEventInfo(e),n=null===(i=null===(t=e.target)||void 0===t?void 0:t.dataset)||void 0===i?void 0:i.command;this._callEvent("buttonClick",{event:e,info:s,command:n})}),M(this.nodeListElement,"click","div.wb-row",e=>{const t=ye.getEventInfo(e),i=t.node,s=e;if(!1===this._callEvent("click",{event:e,node:i,info:t}))return this.lastClickTime=Date.now(),!1;if(i){if(s.ctrlKey)return void i.toggleSelected();const n=this.getOption("edit.trigger"),r=this.getOption("edit.slowClickDelay");n.indexOf("clickActive")>=0&&"title"===t.region&&i.isActive()&&(!r||Date.now()-this.lastClickTime<r)&&i.startEditTitle(),t.region===H.expander?i.setExpanded(!i.isExpanded(),{scrollIntoView:!1!==this.options.scrollIntoViewOnExpandClick}):t.region===H.checkbox?i.toggleSelected():t.colIdx>=0?i.setActive(!0,{colIdx:t.colIdx,event:e}):i.setActive(!0,{event:e})}this.lastClickTime=Date.now()}),M(this.nodeListElement,"dblclick","div.wb-row",e=>{const t=ye.getEventInfo(e),i=t.node;if(!1===this._callEvent("dblclick",{event:e,node:i,info:t}))return!1;i&&0===t.colIdx&&i.isExpandable()&&t.region!==H.expander&&(this._callMethod("edit._stopEditTitle"),i.setExpanded(!i.isExpanded()))}),M(this.element,"keydown",e=>{const t=ye.getEventInfo(e),i=k(e),s=t.node||this.getFocusNode();this._callHook("onKeyEvent",{event:e,node:s,info:t,eventName:i})}),M(this.element,"focusin focusout",e=>{const t="focusin"===e.type,i=ye.getNode(e);this._callEvent("focus",{flag:t,event:e}),t&&this.isRowNav()&&!this.isEditingTitle()&&(this.options.navigationModeOption===B.row?null==i||i.setActive():this.setCellNav()),t||this._callMethod("edit._stopEditTitle",!0,{event:e,forceClose:!0})})}static getTree(e){if(e instanceof ye)return e;if(e instanceof ve)return e.tree;if(void 0===e&&(e=0),"number"==typeof e)e=document.querySelectorAll(".wunderbaum")[e];else if("string"==typeof e){for(const t of document.querySelectorAll(".wunderbaum")){const i=t._wb_tree;if(i&&i.id===e)return i}if(!(e=document.querySelector(e)))return null}else e.target&&(e=e.target);return f(e instanceof Element,`Invalid el type: ${e}`),e.matches(".wunderbaum")||(e=e.closest(".wunderbaum")),e&&e._wb_tree?e._wb_tree:null}get iconMap(){const e=this.options.iconMap;return"string"==typeof e?oe[e]:e}static getNode(e){if(!e)return null;if(e instanceof ve)return e;for(void 0!==e.target&&(e=e.target);e;){if(e._wb_node)return e._wb_node;e=e.parentElement}return null}*[Symbol.iterator](){yield*this.root}_registerExtension(e){this.extensionList.push(e),this.extensions[e.id]=e}_initExtensions(){for(const e of this.extensionList)e.init()}_calculateKey(e,t){if(e.key)return e.key;if(!this.options.autoKeys)return""+ ++ve.sequence;const i=(t?t.key:"")+(e.refKey||e.title),s=K(i,!0);let n="id_"+s+K(s+i,!0);const r=this.keyMap.get(n);return r&&(n+="."+ ++ye.sequence,this.logWarn(`Node with existing key: '${r}', using ${n}.`,e)),n}_registerNode(e){const t=e.key;f(null!=t,`Missing key: '${e}'.`),f(!this.keyMap.has(t),`Duplicate key: '${t}': ${e}.`),this.keyMap.set(t,e);const i=e.refKey;if(null!=i){const t=this.refKeyMap.get(i);t?t.add(e):this.refKeyMap.set(i,new Set([e]))}}_unregisterNode(e){const t=e.refKey;if(null!=t){const i=this.refKeyMap.get(t);i&&i.delete(e)&&!i.size&&this.refKeyMap.delete(t)}this.keyMap.delete(e.key),e.tree=null,e.parent=null,e.removeMarkup()}_callHook(e,t={}){let i;const s=N({},{tree:this,options:this.options,result:void 0},t);for(const t of this.extensionList){if(i=t[e].call(t,s),!1===i)break;void 0!==s.result&&(i=s.result)}return i}_callMethod(e,...t){const[i,s]=e.split("."),n=s?this.extensions[i]:this,r=n[s];if(r)return r.apply(n,t);this.logError(`Calling undefined method '${e}()'.`)}_callEvent(e,t){const[i,s]=e.split("."),n=this.options,r=s?n[i][s]:n[i];if(r)return r.call(this,N({type:e,tree:this,util:this._util},t))}_getNodeByRowIdx(e){let t=null;return this.visitRows(i=>{if(i._rowIdx===e)return t=i,!1}),t}getTopmostVpNode(e=!0){const t=this.options.rowHeightPx,i=this.element.scrollTop;let s;return s=e?Math.ceil((i-1)/t):Math.floor(i/t),this._getNodeByRowIdx(s)}getLowestVpNode(e=!0){const t=this.options.rowHeightPx,i=this.element,s=this.headerElement.clientHeight,n=i.scrollTop,r=i.clientHeight-s;let o;return o=e?Math.floor((n+r)/t)-1:Math.ceil((n+r)/t)-1,o=Math.min(o,this.count(!0)-1),this._getNodeByRowIdx(o)}_getPrevNodeInView(e,t=1){return this.visitRows(i=>{if(e=i,t--<=0)return!1},{reverse:!0,start:e||this.getActiveNode()}),e}_getNextNodeInView(e,t){let i=(null==t?void 0:t.ofs)||1;const s=!!(null==t?void 0:t.reverse);return this.visitRows(s=>(e=s,(!(null==t?void 0:t.cb)||!t.cb(s))&&(!(i--<=0)&&void 0)),{reverse:s,start:e||this.getActiveNode()}),e}addChildren(e,t){return this.root.addChildren(e,t)}applyCommand(e,t,i){let s,n;switch(t instanceof ve?s=t:(s=this.getActiveNode(),f(void 0===i,`Unexpected options: ${i}`),i=t),e){case"moveUp":n=s.getPrevSibling(),n&&(s.moveTo(n,"before"),s.setActive());break;case"moveDown":n=s.getNextSibling(),n&&(s.moveTo(n,"after"),s.setActive());break;case"indent":n=s.getPrevSibling(),n&&(s.moveTo(n,"appendChild"),n.setExpanded(),s.setActive());break;case"outdent":s.isTopLevel()||(s.moveTo(s.getParent(),"after"),s.setActive());break;case"remove":n=s.getPrevSibling()||s.getParent(),s.remove(),n&&n.setActive();break;case"addChild":this._callMethod("edit.createNode","prependChild");break;case"addSibling":this._callMethod("edit.createNode","after");break;case"rename":s.startEditTitle();break;case"down":case"first":case"last":case"left":case"nextMatch":case"pageDown":case"pageUp":case"parent":case"prevMatch":case"right":case"up":return s.navigate(e);default:v(`Unhandled command: '${e}'`)}}clear(){this.root.removeChildren(),this.root.children=null,this.keyMap.clear(),this.refKeyMap.clear(),this.treeRowCount=0,this._activeNode=null,this._focusNode=null,this.update(U.structure)}destroy(){this.logInfo("destroy()..."),this.clear(),this.resizeObserver.disconnect(),this.element.innerHTML="",this.element.outerHTML=this.element.outerHTML}getOption(e,t){let i,s=this.options;e.indexOf(".")>=0&&([i,e]=e.split("."),s=s[i]);let n=s[e];return"function"==typeof n&&(n=n({type:"resolve",tree:this})),null!=n?n:t}setOption(e,t){if(e.indexOf(".")>=0){const i=e.split(".");return void this.extensions[i[0]].setPluginOption(i[1],t)}switch(this.options[e]=t,e){case"checkbox":this.update(U.any);break;case"enabled":this.setEnabled(!!t);break;case"fixedCol":this.element.classList.toggle("wb-fixed-col",!!t)}}hasFocus(){return this.element.contains(document.activeElement)}hasHeader(){const e=this.options.header;return this.isGrid()?!1!==e:!!e}runWithDeferredUpdate(e){try{this.enableUpdate(!1);const t=e();return f(!(t instanceof Promise),`Promise return not allowed (see 'runWithDeferredUpdateAsync()'): ${t}`),t}finally{this.enableUpdate(!0)}}async runWithDeferredUpdateAsync(e){try{return this.enableUpdate(!1),await e()}finally{this.enableUpdate(!0)}}async expandAll(e=!0,t){await this.root.expandAll(e,t)}selectAll(e=!0){return this.root.setSelected(e,{propagateDown:!0})}toggleSelect(){this.selectAll(this.root._anySelectable())}getSelectedNodes(e=!1){return this.root.getSelectedNodes(e)}getRefKeys(e=!1){return this.root.getRefKeys(e)}_selectRange(e){this.logDebug("_selectRange",e),v("Not yet implemented.")}count(e=!1){return e?this.treeRowCount:this.keyMap.size}countUnique(){return this.refKeyMap.size}_check(){let e=0;this.visit(t=>{e++}),this.keyMap.size!==e&&this.logWarn(`_check failed: ${this.keyMap.size} !== ${e}`)}findAll(e){return this.root.findAll(e)}findByRefKey(e){const t=this.refKeyMap.get(e);return t?Array.from(t):[]}findFirst(e){return this.root.findFirst(e)}findKey(e){return this.keyMap.get(e)||null}findNextNode(e,t,i=!1){let s=null;const n=this.getFirstChild(),r=i?this.findRelatedNode(n,"last"):null,o="string"==typeof e?function(e){e=b(e);const t=new RegExp("^"+e,"i");return function(e){return t.test(e.title)}}(e):e;function l(e){if(o(e)&&(s=e),s||e===t)return!1}return t=t||(i?r:n),this.visitRows(l,{start:t,includeSelf:!1,reverse:i}),s||t===n||this.visitRows(l,{start:i?r:n,includeSelf:!0,reverse:i}),s}findRelatedNode(e,t,i=!1){const s=this.options.rowHeightPx;let n=null;const r=Math.floor(this.listContainerElement.clientHeight/s);switch(t){case"parent":case"left":e.parent&&e.parent.parent&&(n=e.parent);break;case"first":this.visit(e=>{if(e.isVisible())return n=e,!1});break;case"last":this.visit(e=>{e.isVisible()&&(n=e)});break;case"right":e.children&&e.children.length&&(n=e.children[0]);break;case"up":n=this._getNextNodeInView(e,{reverse:!0});break;case"down":n=this._getNextNodeInView(e);break;case"pageDown":{const t=this.getLowestVpNode();n=e._rowIdx<t._rowIdx?t:this._getNextNodeInView(e,{reverse:!1,ofs:r})}break;case"pageUp":if(0===e._rowIdx)n=e;else{const t=this.getTopmostVpNode();n=e._rowIdx>t._rowIdx?t:this._getNextNodeInView(e,{reverse:!0,ofs:r})}break;case"prevMatch":case"nextMatch":if(!this.isFilterActive){this.logWarn(`${t}: Filter is not active.`);break}n=this.findNextNode(e=>e.isMatched(),e,"prevMatch"===t),null==n||n.setActive();break;default:this.logWarn("Unknown relation '"+t+"'.")}return n}*format_iter(e,t){yield*this.root.format_iter(e,t)}format(e,t){return this.root.format(e,t)}get parent(){return null}get children(){return this.root.children||[]}getActiveColElem(){return this.activeNode&&this.activeColIdx>=0?this.activeNode.getColElem(this.activeColIdx):null}getActiveNode(){return this.activeNode}getFirstChild(){return this.root.getFirstChild()}getLastChild(){return this.root.getLastChild()}getFocusNode(){return this.focusNode}static getEventInfo(e){const t=e.target,i=t.classList,s=t.closest("span.wb-col"),n=ye.getNode(t),r=n?n.tree:ye.getTree(e),o={event:e,canonicalName:k(e),tree:r,node:n,region:H.unknown,colDef:void 0,colIdx:-1,colId:void 0,colElem:s};if(i.contains("wb-title"))o.region=H.title;else if(i.contains("wb-expander"))o.region=n.isExpandable()?H.expander:H.prefix;else if(i.contains("wb-checkbox"))o.region=H.checkbox;else if(i.contains("wb-icon"))o.region=H.icon;else if(i.contains("wb-node"))o.region=H.title;else if(s){o.region=H.column;const e=Array.prototype.indexOf.call(s.parentNode.children,s);o.colIdx=e}else{if(!i.contains("wb-row"))return"mousemove"===e.type||e instanceof KeyboardEvent||null==r||r.logWarn("getEventInfo(): not found",e,o),o;o.region=H.title}return-1===o.colIdx&&(o.colIdx=0),o.colDef=null==r?void 0:r.columns[o.colIdx],null!=o.colDef&&(o.colId=o.colDef.id),o}toString(){return`Wunderbaum<'${this.id}'>`}isEditing(){return!!this.nodeListElement.querySelector("input:focus,select:focus")}isEditingTitle(){return this._callMethod("edit.isEditingTitle")}isLoading(){let e=!1;return this.root.visit(t=>{if(t._isLoading||t._requestId)return e=!0,!1},!0),e}log(...e){this.options.debugLevel>=4&&console.log(this.toString(),...e)}logDebug(...e){this.options.debugLevel>=4&&console.debug(this.toString(),...e)}logError(...e){this.options.debugLevel>=1&&console.error(this.toString(),...e)}logInfo(...e){this.options.debugLevel>=3&&console.info(this.toString(),...e)}logTime(e){return this.options.debugLevel>=4&&console.time(this+": "+e),e}logTimeEnd(e){this.options.debugLevel>=4&&console.timeEnd(this+": "+e)}logWarn(...e){this.options.debugLevel>=2&&console.warn(this.toString(),...e)}logDeprecate(e,t){if(this.options.debugLevel>=2){let i=`${this}: ${e} is deprecated`;(null==t?void 0:t.since)&&(i+=` since ${t.since}`),(null==t?void 0:t.hint)&&(i+=` (${t.since})`),console.warn(i+".")}}resetColumns(){this.columns.forEach(e=>{delete e.customWidthPx}),this.update(U.colStructure)}scrollTo(e){let t,i;e instanceof ve?t=e:(i=e,t=i.node),f(t&&null!=t._rowIdx,`Invalid node: ${t}`);const s=this.options.rowHeightPx,n=this.element,r=this.headerElement.clientHeight,o=n.scrollTop,l=n.clientHeight,a=t._rowIdx*s+r,d=r,c=a-o,h=c+s,u=null==i?void 0:i.topNode;let p=null;c>=d?h<=l||(p=a+s-l+2):p=a-d-2,null!=p&&(this.log(`scrollTo(${a}): ${o} => ${p}`),n.scrollTop=p,u&&this.scrollTo(u))}scrollToHorz(){const e=this.columns[0]._widthPx,t=this.element.clientWidth,i=this.element.scrollLeft,s=this.getActiveColElem(),n=Number.parseInt(null==s?void 0:s.style.left,10),r=n+Number.parseInt(null==s?void 0:s.style.width,10);let o=i;n-i<e?o=n-e:r-i>t&&(o=r-t),o=Math.max(0,o),this.log(`scrollToHorz(${this.activeColIdx}): ${n}..${r}, fixedOfs=${e}, vpWidth=${t}, curLeft=${i} -> ${o}`),this.element.scrollLeft=o}setColumn(e,t){var i,s,n;const r=null==t?void 0:t.edit,o=!1!==(null==t?void 0:t.scrollIntoView);if(f(this.isCellNav(),"Expected cellNav mode"),"string"==typeof e){const t=e;f((e=this.columns.findIndex(t=>t.id===e))>=0,`Invalid colId: ${t}`)}if(f(0<=e&&e<this.columns.length,`Invalid colIdx: ${e}`),this.activeColIdx=e,this.hasHeader())for(const t of this.headerElement.children){let i=0;for(const s of t.children)s.classList.toggle("wb-active",i++===e)}null===(i=this.activeNode)||void 0===i||i.update(U.status);for(const t of this.nodeListElement.children){let i=0;for(const s of t.children)s.classList.toggle("wb-active",i++===e)}(o||r)&&this.scrollToHorz(),r&&this.activeNode&&(0===e?this.activeNode.startEditTitle():null===(n=null===(s=this.getActiveColElem())||void 0===s?void 0:s.querySelector("input,select"))||void 0===n||n.focus())}_setActiveNode(e){this._activeNode=e}setActiveNode(e,t=!0,i){var s;null===(s=this.findKey(e))||void 0===s||s.setActive(t,i)}setFocus(e=!0){e?this.element.focus():this.element.blur()}_setFocusNode(e){this._focusNode=e}getState(e={}){var t,i;const{activeKey:s=!0,expandedKeys:n=!1,selectedKeys:r=!1}=e,o=new Set;if(n)for(const e of this)e.isExpanded()&&e.hasChildren()&&o.add(e.key);s&&this.activeNode&&this.activeNode.visitParents(e=>{e.parent&&o.add(e.key)},!1);return{expandedKeys:o.size?Array.from(o):void 0,activeKey:null!==(i=null===(t=this.activeNode)||void 0===t?void 0:t.key)&&void 0!==i?i:null,activeColIdx:this.activeColIdx,selectedKeys:r?this.getSelectedNodes().flatMap(e=>e.key):void 0}}async setState(e,t={}){const{expandLazy:i=!0}=t;return this.runWithDeferredUpdateAsync(async()=>{var t,s;if(e.expandedKeys&&e.expandedKeys.length)if(i)await this._loadLazyNodes(e.expandedKeys,{expand:!0,noEvents:!0});else for(const i of e.expandedKeys)null===(t=this.findKey(i))||void 0===t||t.setExpanded(!0);if(e.activeKey&&this.setActiveNode(e.activeKey),e.selectedKeys){this.selectAll(!1);for(const t of e.selectedKeys)null===(s=this.findKey(t))||void 0===s||s.setSelected(!0)}this.isCellNav()&&null!=e.activeColIdx&&this.setColumn(e.activeColIdx)})}update(e,t,i){t instanceof ve||(i=t,t=void 0);const s=!!T(i,"immediate"),n=q,r=this.pendingChangeTypes;if(this._disableUpdateCount)this._disableUpdateIgnoreCount++;else{switch(e){case U.any:case U.colStructure:r.add(n.header),r.add(n.clearMarkup),r.add(n.redraw),r.add(n.scroll);break;case U.resize:r.add(n.header),r.add(n.redraw);break;case U.structure:r.add(n.redraw);break;case U.scroll:r.add(n.scroll);break;case U.row:case U.data:case U.status:f(t,`Option '${e}' requires a node.`),t._rowElem&&t._render({change:e});break;default:v(`Invalid change type '${e}'.`)}if(e===U.colStructure){const e=this.isGrid();this.element.classList.toggle("wb-grid",e),!e&&this.isCellNav()&&this.setCellNav(!1)}r.size>0&&(s?this._updateViewportImmediately():this._updateViewportThrottled())}}setEnabled(e=!0){const t=this.enabled;return this.enabled=!!e,this.element.classList.toggle("wb-disabled",!e),t}isEnabled(){return this.enabled}isGrid(){return this.columns&&this.columns.length>1}isCellNav(){return!!this._cellNavMode}isRowNav(){return!this._cellNavMode}setCellNav(e=!0){var t;const i=this._cellNavMode;this._cellNavMode=!!e,e&&!i&&this.setColumn(0),this.element.classList.toggle("wb-cell-mode",e),null===(t=this.activeNode)||void 0===t||t.update(U.status)}setNavigationOption(e,t=!1){if(this.isGrid()||e===B.row)switch(this.options.navigationModeOption=e,e){case B.cell:this.setCellNav(!0);break;case B.row:this.setCellNav(!1);break;case B.startCell:t&&this.setCellNav(!0);break;case B.startRow:t&&this.setCellNav(!1);break;default:v(`Invalid mode '${e}'.`)}else this.logWarn("Plain trees only support row navigation mode.")}setStatus(e,t){return this.root.setStatus(e,t)}setTypes(e,t=!0){f(I(e),`Expected plain objext: ${e}`),t?this.types=e:N(this.types,e);for(const e of Object.values(this.types))e.classes&&(e.classes=$(e.classes))}sortChildren(e=ce,t=!1){return this.logDeprecate("sortChildren()",{since:"0.14.0"}),this.sort({cmp:e||void 0,deep:t,propName:"title"})}sortByProperty(e){this.logDeprecate("sortByProperty()",{since:"0.14.0"}),this.root.sortByProperty(e)}sort(e){this.root.sort(e)}toDictArray(e){var t;return null!==(t=this.root.toDict(!0,e).children)&&void 0!==t?t:[]}_updateColumnWidths(){const e=this.element.clientWidth,t=this.columns,i=t[0];let s=0,n=0,r=0,o=!1;if("*"!==i.id)throw new Error(`First column must have id '*': got '${i.id}'.`);this._columnsById={};for(const e of t){this._columnsById[e.id]=e;const t=e.customWidthPx?`${e.customWidthPx}px`:e.width;if("*"===e.id&&e!==i)throw new Error(`Column id '*' must be defined only once: '${e.title}'.`);if(t&&"*"!==t)if("number"==typeof t)e._weight=t,n+=t;else if("string"==typeof t&&t.endsWith("px")){e._weight=0;const i=parseFloat(t.slice(0,-2));e._widthPx!=i&&(o=!0,e._widthPx=i),r+=i}else v(`Invalid column width: ${t} (expected string ending with 'px' or number, e.g. "<num>px" or <int>).`);else e._weight=1,n+=1}const l=Math.max(0,e-r);let a=0;for(const e of t){let t;if(e._weight){const i=e.minWidth;t="number"==typeof i?i:"string"==typeof i&&i.endsWith("px")?parseFloat(i.slice(0,-2)):4;const s=Math.max(t,l*e._weight/n);e._widthPx!=s&&(o=!0,e._widthPx=s)}e._ofsPx=a,a+=e._widthPx}t[t.length-1]._widthPx-=1,s=a-1;const d=`${s}px`;return this.headerElement.style.width=d,this.listContainerElement.style.width=d,o}_renderHeaderMarkup(){f(this.headerElement,"Expected a headerElement");const e=this.hasHeader();if(x(this.headerElement,e),!e)return;const t=this.iconMap,i=this.columns.length,s=this.headerElement.querySelector(".wb-row");f(s,"Expected a row in header element"),s.innerHTML="<span class='wb-col'></span>".repeat(i);for(let e=0;e<i;e++){const n=this.columns[e],r=s.children[e];r.style.left=n._ofsPx+"px",r.style.width=n._widthPx+"px","string"==typeof n.headerClasses?n.headerClasses&&r.classList.add(...n.headerClasses.split(" ")):n.classes&&r.classList.add(...n.classes.split(" "));let o="";n.tooltip&&(o=y(n.tooltip),o=` title="${o}"`);let l="";if(F(n.menu,this.options.columnsMenu,!1)){l+=`<i data-command=menu class="wb-col-icon ${"wb-col-icon-menu "+t.colMenu}"></i>`}if(F(n.sortable,this.options.columnsSortable,!1)){let e="wb-col-icon-sort "+t.colSortable;n.sortOrder&&(e+=`wb-col-sort-${n.sortOrder}`,e+="asc"===n.sortOrder?t.colSortAsc:t.colSortDesc);l+=`<i data-command=sort class="wb-col-icon ${e}"></i>`}if(F(n.filterable,this.options.columnsFilterable,!1)){r.classList.toggle("wb-col-filter",!!n.filterActive);let e="wb-col-icon-filter "+t.colFilter;n.filterActive&&(e+=t.colFilterActive);l+=`<i data-command=filter class="wb-col-icon ${e}"></i>`}e<i-1&&(F(n.resizable,this.options.columnsResizable,!1)?l+='<span class="wb-col-resizer wb-col-resizer-active"></span>':l+='<span class="wb-col-resizer"></span>');const a=m(n.title||n.id);r.innerHTML=`<span class="wb-col-title"${o}>${a}</span>${l}`,this.isCellNav()&&r.classList.toggle("wb-active",e===this.activeColIdx)}}updatePendingModifications(){this.pendingChangeTypes.size>0&&this._updateViewportImmediately()}_createNodeIcon(e,t,i){const s=this.iconMap;let n,r=e.getOption("icon");if(e._errorInfo?r=s.error:e._isLoading&&t&&(r=s.loading),!1===r)return null;"string"==typeof r||(r=e.statusNodeType?s[e.statusNodeType]:e.expanded?s.folderOpen:e.children?s.folder:e.lazy?s.folderLazy:s.doc),r?re.test(r)?n=E(r):ne.test(r)?n=E(`<i class="wb-icon" style="background-image: url('${r}');">`):(n=document.createElement("i"),n.className="wb-icon "+r):(n=document.createElement("i"),n.className="wb-icon");const o=i&&e._callEvent("iconBadge",{iconSpan:n});let l=null;if(null!=o&&!1!==o){let e="",t="";I(o)?(l=""+o.badge,e=o.badgeClass?" "+o.badgeClass:"",t=o.badgeTooltip?` title="${o.badgeTooltip}"`:""):l="number"==typeof o?""+o:o,"string"==typeof l&&(l=E(`<span class="wb-badge${e}"${t}>${m(l)}</span>`)),l&&n.append(l)}return n}_updateTopBreadcrumb(){const e=this.breadcrumb,t=this.getTopmostVpNode(!0),i=null==t?void 0:t.getParentList(!1,!1);if(null==i?void 0:i.length){e.innerHTML="";for(const i of t.getParentList(!1,!1)){const t=this._createNodeIcon(i,!1,!1);t&&e.append(t," ");const s=document.createElement("a");s.textContent=i.title,s.href="#",s.classList.add("wb-breadcrumb"),s.dataset.key=i.key,e.append(s,this.options.strings.breadcrumbDelimiter)}}else e.innerHTML="&nbsp;"}_updateViewportImmediately(){if(this._disableUpdateCount)return this.log(`_updateViewportImmediately() IGNORED (disable level: ${this._disableUpdateCount}).`),void this._disableUpdateIgnoreCount++;this._updateViewportThrottled.pending()&&this._updateViewportThrottled.cancel();const e=q,t=new Set(this.pendingChangeTypes);this.pendingChangeTypes.clear();if(t.has(e.scroll)&&1===t.size)this._updateRows({newNodesOnly:!0});else{if(this.log("_updateViewportImmediately():",t),!1!==this.options.adjustHeight){let e=this.listContainerElement.clientHeight;const t=this.headerElement.clientHeight,i=this.element.clientHeight-t-1;Math.abs(e-i)>1&&(this.listContainerElement.style.height=i+"px",e=i)}t.has(e.clearMarkup)&&this.visit(e=>{e.removeMarkup()}),t.has(e.header)&&(this._updateColumnWidths(),this._renderHeaderMarkup()),this._updateRows()}this.breadcrumb&&this._updateTopBreadcrumb(),this._callEvent("update")}_updateRows(e){const t=!!(e=Object.assign({newNodesOnly:!1},e)).newNodesOnly,i=this.options.rowHeightPx,s=this.element.clientHeight,n=this.element.scrollTop;let r=Math.max(0,n/i-5);r=Math.floor(r),r%2&&r--;let o=Math.max(0,(n+s)/i+5);o=Math.ceil(o);const l=new Set;this.nodeListElement.childNodes.forEach(e=>{e._wb_node&&l.add(e._wb_node)});let a=0,d=0,c=!1,h="first";this.visitRows(function(e){const s=e._rowElem;e._rowIdx!==a&&(e._rowIdx=a,c=!0),a<r||a>o?s&&(h=s):s&&t?(l.delete(e),s.style.top=a*i+"px",h=s):(l.delete(e),s&&(s.style.top=a*i+"px"),e._render({top:d,after:h}),h=e._rowElem),a++,d+=i}),this.treeRowCount=a;for(const e of l)e._callEvent("discard"),e.removeMarkup();return this.nodeListElement.style.height=`${d}px`,c}visit(e){return this.root.visit(e,!1)}visitRows(e,t){if(!this.root.hasChildren())return!1;if(t&&t.reverse)return delete t.reverse,this._visitRowsUp(e,t);let i,s,n,r,o,l,a=0,d=!1===(t=t||{}).includeSelf,c=t.start||this.root.children[0];const h=!!t.includeHidden,u=!h&&"hide"===this.filterMode;for(n=c.parent;n;){for(o=n.children,s=o.indexOf(c)+a,f(s>=0,`Could not find ${c} in parent's children: ${n}`),i=s;i<o.length;i++){if(c=o[i],c===l)return!1;if(!u||c.statusNodeType||c.match||c.subMatchCount){if(!d&&!1===e(c))return!1;if(d=!1,c.children&&c.children.length&&(h||c.expanded)&&(r=c.visit(t=>t!==l&&(!u||t.match||t.subMatchCount?!1!==e(t)&&(h||!t.children||t.expanded?void 0:"skip"):"skip"),!1),!1===r))return!1}}c=n,n=n.parent,a=1,!n&&t.wrap&&(this.logDebug("visitRows(): wrap around"),f(t.start,"`wrap` option requires `start`"),l=t.start,t.wrap=!1,n=this.root,a=0)}return!0}_visitRowsUp(e,t){let i,s,n,r=t.start||this.root.children[0];const o=!!t.includeHidden;if(!1!==t.includeSelf&&!1===e(r))return!1;for(;;){if(n=r.parent,i=n.children,i[0]===r){if(r=n,!r.parent)break;i=n.children}else for(s=i.indexOf(r),r=i[s-1];(o||r.expanded)&&r.children&&r.children.length;)i=r.children,n=r,r=i[i.length-1];if((o||r.isVisible())&&!1===e(r))return!1}return!0}async load(e){return this.clear(),this._initialSource=e,this.root.load(e)}async reload(e={}){const{source:t=this._initialSource,reactivate:i=!0}=e;if(!t)return void this.logWarn("No previous ajax source to reload.");if(!i)return this.load(t);const s=this.getState();return await this.load(t),this.setState(s)}async _loadLazyNodes(e,t={}){const{expand:i=!0}=t,s=new Set(e);for(;s.size>0;){const e=[],t=new Set(s);for(const n of t){const t=this.findKey(n);t&&(s.delete(n),i?e.push(t.setExpanded(!0)):t.isUnloaded()&&e.push(t.loadLazy()),t._rowElem&&t._render())}if(0===e.length){this.logWarn(`Could not expand ${s.size} nodes:`,s);break}await Promise.allSettled(e)}}enableUpdate(e){e?(f(this._disableUpdateCount>0,"enableUpdate(true) was called too often"),this._disableUpdateCount--,0===this._disableUpdateCount&&(this.logDebug(`enableUpdate(): active again. Re-painting to catch up with ${this._disableUpdateIgnoreCount} ignored update requests...`),this._disableUpdateIgnoreCount=0,this.update(U.any,{immediate:!0}))):this._disableUpdateCount++}filterNodes(e,t){return this.extensions.filter.filterNodes(e,t)}countMatches(){return this.extensions.filter.countMatches()}filterBranches(e,t){return this.extensions.filter.filterBranches(e,t)}clearFilter(){return this.extensions.filter.clearFilter()}isFilterActive(){return!!this.filterMode}updateFilter(){return this.extensions.filter.updateFilter()}}ye.sequence=0,ye.version="v0.14.1",ye.util=W,ye.iconMaps=oe,e.Wunderbaum=ye});
86
86
  //# sourceMappingURL=wunderbaum.umd.min.js.map