native-document 1.0.39 → 1.0.41

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.
@@ -1 +1 @@
1
- var NativeDocumentDevTools=function(){"use strict";let e={};e={log(){},warn(){},error(){},disable(){}};var t=e;const n=function(){let e=0;const n=new Map;return{register(t){const r=++e;return n.set(r,new WeakRef(t)),r},unregister(e){n.delete(e)},getObservableById:e=>n.get(e)?.deref(),cleanup(){for(const[e,t]of n){const e=t.deref();e&&e.cleanup()}n.clear()},cleanObservables(e){if(n.size<e)return;let r=0;for(const[e,t]of n)t.deref()||(n.delete(e),r++);r>0&&t.log("Memory Auto Clean",`🧹 Cleaned ${r} orphaned observables`)}}}();class r extends Error{constructor(e,t={}){super(e),this.name="NativeDocumentError",this.context=t,this.timestamp=(new Date).toISOString()}}function o(e,t){this.observable=e,this.checker=t,this.unSubscriptions=[]}o.prototype.__$isObservableChecker=!0,o.prototype.subscribe=function(e){const t=this.observable.subscribe(t=>{e&&e(this.checker(t))});return this.unSubscriptions.push(t),t},o.prototype.check=function(e){return this.observable.check(()=>e(this.val()))},o.prototype.val=function(){return this.checker&&this.checker(this.observable.val())},o.prototype.set=function(e){return this.observable.set(e)},o.prototype.trigger=function(){return this.observable.trigger()},o.prototype.cleanup=function(){return this.observable.cleanup()};const i=function(){const e=new Map,n=new Map;return{list:()=>n,add(t,r){if(!t||"object"!=typeof t)throw new Error(`Plugin ${r} must be an object`);if(!(r=r||t.name)||"string"!=typeof r)throw new Error("Please, provide a valid plugin name");if(!e.has(r)){t.$name=r,e.set(r,t),"function"==typeof t?.init&&t.init();for(const e in t)if(/^on[A-Z]/.test(e)){const r=e.replace(/^on/,"");n.has(r)||n.set(r,new Set),n.get(r).add(t)}}},remove(t){if(!e.has(t))return;const r=e.get(t);"function"==typeof r.cleanup&&r.cleanup();for(const[e,t]of n.entries())t.has(r)&&t.delete(r),0===t.size&&n.delete(e);e.delete(t)},emit(e,...r){if(!n.has(e))return;const o=n.get(e);for(const n of o){const o=n["on"+e];if("function"==typeof o)try{o.call(n,...r)}catch(r){t.error("Plugin Manager",`Error in plugin ${n.$name} for event ${e}`,r)}}}}}();function s(e){this.$previousValue=null,this.$currentValue=e,this.$isCleanedUp=!1,this.$listeners=null,this.$watchers=null,this.$memoryId=null,i.emit("CreateObservable",this)}Object.defineProperty(s.prototype,"$value",{get(){return this.$currentValue},set(e){this.set(e)},configurable:!0}),s.prototype.__$isObservable=!0;const l={},a=function(){};s.prototype.triggerFirstListener=function(e){this.$listeners[0](this.$currentValue,this.$previousValue,e||{})},s.prototype.triggerListeners=function(e){const t=this.$listeners,n=this.$previousValue,r=this.$currentValue;e=e||l;for(let o=0,i=t.length;o<i;o++)t[o](r,n,e)};const u=function(e,t){"function"!=typeof e?e.set?e.set(t):e.forEach(e=>{e.set?e.set(t):e(t)}):e(t)};s.prototype.triggerWatchers=function(){if(!this.$watchers)return;const e=this.$watchers,t=this.$previousValue,n=this.$currentValue;if(e.has(n)){const t=e.get(n);u(t,!0)}if(e.has(t)){const n=e.get(t);u(n,!1)}},s.prototype.triggerAll=function(e){this.triggerListeners(e),this.triggerWatchers()},s.prototype.triggerWatchersAndFirstListener=function(e){this.triggerListeners(e),this.triggerWatchers()},s.prototype.assocTrigger=function(){this.$watchers?.size&&this.$listeners?.length?this.trigger=1===this.$listeners.length?this.triggerWatchersAndFirstListener:this.triggerAll:this.$listeners?.length?this.trigger=1===this.$listeners.length?this.triggerFirstListener:this.triggerListeners:this.$watchers?.size?this.trigger=this.triggerWatchers:this.trigger=a},s.prototype.trigger=a,s.prototype.set=function(e){const t="function"==typeof e?e(this.$currentValue):e;this.$currentValue!==t&&(this.$previousValue=this.$currentValue,this.$currentValue=t,i.emit("ObservableBeforeChange",this),this.trigger(),this.$previousValue=null,i.emit("ObservableAfterChange",this))},s.prototype.val=function(){return this.$currentValue},s.prototype.disconnectAll=function(){if(this.$listeners?.splice(0),this.$previousValue=null,this.$currentValue=null,this.$watchers)for(const[e,t]of this.$watchers)C.isArray(t)&&t.splice(0);this.$watchers?.clear(),this.$listeners=null,this.$watchers=null,this.trigger=a},s.prototype.cleanup=function(){n.unregister(this.$memoryId),this.disconnectAll(),this.$isCleanedUp=!0,delete this.$value},s.prototype.subscribe=function(e,n=null){if(this.$listeners=this.$listeners??[],this.$isCleanedUp)return t.warn("Observable subscription","⚠️ Attempted to subscribe to a cleaned up observable."),()=>{};if("function"!=typeof e)throw new r("Callback must be a function");return this.$listeners.push(e),this.assocTrigger(),i.emit("ObservableSubscribe",this,n),()=>{this.unsubscribe(e),this.assocTrigger(),i.emit("ObservableUnsubscribe",this)}},s.prototype.on=function(e,t){this.$watchers=this.$watchers??new Map;let n=this.$watchers.get(e);if(n){if(!C.isArray(n))return n=[n],void this.$watchers.set(e,n);n.push(t)}else this.$watchers.set(e,t);return this.assocTrigger(),()=>{const r=n.indexOf(t);n?.splice(r,1),1===n.size?this.$watchers.set(e,n[0]):0===n.size&&(this.$watchers?.delete(e),n=null),this.assocTrigger()}},s.prototype.unsubscribe=function(e){const t=this.$listeners.indexOf(e);t>-1&&this.$listeners.splice(t,1),this.assocTrigger()},s.prototype.check=function(e){return new o(this,e)},s.prototype.get=s.prototype.check,s.prototype.when=function(e){return{$target:e,$observer:this}},s.prototype.toString=function(){return this.$memoryId||n.register(this),"{{#ObItem::("+this.$memoryId+")}}"};const c={mounted:new WeakMap,mountedSupposedSize:0,unmounted:new WeakMap,unmountedSupposedSize:0,observer:null,checkMutation:function(e){for(const t of e){if(c.mountedSupposedSize>0)for(const e of t.addedNodes){const t=c.mounted.get(e);t&&(t.inDom=!0,t.mounted&&t.mounted(e))}if(c.unmountedSupposedSize>0)for(const e of t.removedNodes){const t=c.unmounted.get(e);t&&(t.inDom=!1,t.unmounted&&!0===t.unmounted(e)&&(t.disconnect(),e.nd?.remove()))}}},watch:function(e,t=!1){let n={inDom:t,mounted:null,unmounted:null,disconnect:()=>{c.mounted.delete(e),c.unmounted.delete(e),c.mountedSupposedSize--,c.unmountedSupposedSize--,n=null}};return{disconnect:n.disconnect,mounted:t=>{n.mounted=t,c.mounted.set(e,n),c.mountedSupposedSize++},unmounted:t=>{n.unmounted=t,c.unmounted.set(e,n),c.unmountedSupposedSize++}}}};c.observer=new MutationObserver(c.checkMutation),c.observer.observe(document.body,{childList:!0,subtree:!0});const d=["Click","DblClick","MouseDown","MouseEnter","MouseLeave","MouseMove","MouseOut","MouseOver","MouseUp","Wheel","KeyDown","KeyPress","KeyUp","Blur","Change","Focus","Input","Invalid","Reset","Search","Select","Submit","Drag","DragEnd","DragEnter","DragLeave","DragOver","DragStart","Drop","AfterPrint","BeforePrint","BeforeUnload","Error","HashChange","Load","Offline","Online","PageHide","PageShow","Resize","Scroll","Unload","Abort","CanPlay","CanPlayThrough","DurationChange","Emptied","Ended","LoadedData","LoadedMetadata","LoadStart","Pause","Play","Playing","Progress","RateChange","Seeked","Seeking","Stalled","Suspend","TimeUpdate","VolumeChange","Waiting","TouchCancel","TouchEnd","TouchMove","TouchStart","AnimationEnd","AnimationIteration","AnimationStart","TransitionEnd","Copy","Cut","Paste","FocusIn","FocusOut","ContextMenu"];function p(e){this.$element=e,this.$observer=null,i.emit("NDElementCreated",e,this)}p.prototype.__$isNDElement=!0,p.prototype.valueOf=function(){return this.$element},p.prototype.ref=function(e,t){return e[t]=this.$element,this},p.prototype.unmountChildren=function(){let e=this.$element;for(let t=0,n=e.children.length;t<n;t++){let n=e.children[t];n.$ndProx||n.nd?.remove(),n=null}return e=null,this},p.prototype.remove=function(){let e=this.$element;return e.nd.unmountChildren(),e.$ndProx=null,delete e.nd?.on?.prevent,delete e.nd?.on,delete e.nd,e=null,this},p.prototype.lifecycle=function(e){return this.$observer=this.$observer||c.watch(this.$element),e.mounted&&this.$observer.mounted(e.mounted),e.unmounted&&this.$observer.unmounted(e.unmounted),this},p.prototype.mounted=function(e){return this.lifecycle({mounted:e})},p.prototype.unmounted=function(e){return this.lifecycle({unmounted:e})},p.prototype.htmlElement=function(){return this.$element},p.prototype.node=p.prototype.htmlElement,p.prototype.shadow=function(e,t=null){const n=this.$element,r=Array.from(n.childNodes),o=n.attachShadow({mode:e});if(t){const e=document.createElement("style");e.textContent=t,o.appendChild(e)}return n.append=o.append.bind(o),n.appendChild=o.appendChild.bind(o),o.append(...r),this},p.prototype.openShadow=function(e=null){return this.shadow("open",e)},p.prototype.closedShadow=function(e=null){return this.shadow("closed",e)},p.prototype.attach=function(e){return e.$hydrate(this.$element),this.$element};const h={},f=function(e,t,n){if(!e)return;if(!h[t]){const r=new WeakMap;return h[t]=r,void r.set(e,n)}const r=h[t];if(!r.has(e))return void r.set(e,n);const o=r.get(e);C.isArray(o)?o.push(n):r.set(e,[store[t],n])},b=function(e,t,n){return e.addEventListener(t,t=>{t.preventDefault(),n&&n.call(e,t)}),this},g=function(e,t,n){return e.addEventListener(t,t=>{t.stopPropagation(),n&&n.call(e,t)}),this},m=function(e,t,n){return e.addEventListener(t,t=>{t.stopPropagation(),t.preventDefault(),n&&n.call(e,t)}),this},v=function(e,t,n){return n?(e.addEventListener(t,n),this):(function(e,t){e.addEventListener(t,n=>{const r=h[t];if(!r)return;let o=n.target;for(;o&&o!==e;){const e=r.get(o);if(e){if(C.isFunction(e))e.call(o,n);else for(let t=0;t<e.length;t++)e[t].call(o,n);return}o=o.parentElement}})}(e,t),this)};for(const e of d){const t=e.toLowerCase();p.prototype["on"+e]=function(e){return this.$element.addEventListener(t,e),this},p.prototype["onPrevent"+e]=function(e){return b(this.$element,t,e),this},p.prototype["onStop"+e]=function(e){return g(this.$element,t,e),this},p.prototype["onPreventStop"+e]=function(e){return m(this.$element,t,e),this},p.prototype["when"+e]=function(e){return f(this.$element,t,e),this},p.prototype["capture"+e]=function(e){return v(this.$element,t,e),this}}const y=1,$=3,w=11,C={isObservable:e=>e?.__$isObservable||e instanceof s||e instanceof o,isProxy:e=>e?.__isProxy__,isObservableChecker:e=>e?.__$isObservableChecker||e instanceof o,isArray:e=>Array.isArray(e),isString:e=>"string"==typeof e,isNumber:e=>"number"==typeof e,isBoolean:e=>"boolean"==typeof e,isFunction:e=>"function"==typeof e,isAsyncFunction:e=>"function"==typeof e&&"AsyncFunction"===e.constructor.name,isObject:e=>"object"==typeof e,isJson:e=>"object"==typeof e&&null!==e&&!Array.isArray(e)&&"Object"===e.constructor.name,isElement:e=>e&&(e.nodeType===y||e.nodeType===$||e.nodeType===w),isFragment:e=>e?.nodeType===w,isStringOrObservable(e){return this.isString(e)||this.isObservable(e)},isValidChild(e){return null===e||this.isElement(e)||this.isObservable(e)||this.isNDElement(e)||["string","number","boolean"].includes(typeof e)},isNDElement:e=>e?.__$isNDElement||e instanceof p,isValidChildren(e){Array.isArray(e)||(e=[e]);return 0===e.filter(e=>!this.isValidChild(e)).length},validateChildren(e){Array.isArray(e)||(e=[e]);const t=e.filter(e=>!this.isValidChild(e));if(t.length>0)throw new r(`Invalid children detected: ${t.map(e=>typeof e).join(", ")}`);return e},containsObservables:e=>!!e&&(C.isObject(e)&&Object.values(e).some(e=>C.isObservable(e))),containsObservableReference:e=>!(!e||"string"!=typeof e)&&/\{\{#ObItem::\([0-9]+\)\}\}/.test(e),validateAttributes(e){},validateEventCallback(e){if("function"!=typeof e)throw new r("Event callback must be a function")}},O=["checked","selected","disabled","readonly","required","autofocus","multiple","autocomplete","hidden","contenteditable","spellcheck","translate","draggable","async","defer","autoplay","controls","loop","muted","download","reversed","open","default","formnovalidate","novalidate","scoped","itemscope","allowfullscreen","allowpaymentrequest","playsinline"];function S(e){return new s(e)}function A(e,t,n){e.classes.toggle(t,n)}function x(e,t,n){e.style[t]=n}function E(e,t,n){C.isBoolean(n)?e[t]=n:e[t]=n===e.value}function N(e,t,n,r){C.isBoolean(n)?r.set(e[t]):r.set(e.value)}function k(e,t){for(let n in t){const r=t[n];C.isObservable(r)?(e.classes.toggle(n,r.val()),r.subscribe(A.bind(null,e,n))):r.$observer?(e.classes.toggle(n,r.$observer.val()===r.$target),r.$observer.on(r.$target,A.bind(null,e,n))):r.$hydrate?r.$hydrate(e,n):e.classes.toggle(n,r)}t=null}function P(e,t){for(let n in t){const r=t[n];C.isObservable(r)?(e.style[n]=r.val(),r.subscribe(x.bind(null,e,n))):e.style[n]=r}}function D(e,t,n){const r=C.isObservable(n)?n.val():n;C.isBoolean(r)?e[t]=r:e[t]=r===e.value,C.isObservable(n)&&(["checked"].includes(t)&&e.addEventListener("input",N.bind(null,e,t,r)),n.subscribe(E.bind(null,e,t)))}function T(e,t,n){const r=n=>{"value"!==t?e.setAttribute(t,n):e.value=n};r(n.val()),n.subscribe(r),"value"===t&&e.addEventListener("input",()=>n.set(e.value))}S.getById=function(e){const t=n.getObservableById(parseInt(e));if(!t)throw new r("Observable.getById : No observable found with id "+e);return t},S.cleanup=function(e){e.cleanup()},S.autoCleanup=function(e=!1,t={}){if(!e)return;const{interval:r=6e4,threshold:o=100}=t;window.addEventListener("beforeunload",()=>{n.cleanup()}),setInterval(()=>n.cleanObservables(o),r)};const L=new Map;let j=null;const M={createTextNode:()=>(j||(j=document.createTextNode("")),j.cloneNode()),createObservableNode(e,t){const n=M.createTextNode();return t.subscribe(e=>n.nodeValue=e),n.nodeValue=t.val(),e&&e.appendChild(n),n},createHydratableNode(e,t){const n=M.createTextNode();return t.$hydrate(n),n},createStaticTextNode(e,t){let n=M.createTextNode();return n.nodeValue=t,e&&e.appendChild(n),n},createElement(e){if(e){if(L.has(e))return L.get(e).cloneNode();const t=document.createElement(e);return L.set(e,t),t.cloneNode()}return new B("Fragment")},processChildren(e,t){if(null!==e){if(i.emit("BeforeProcessChildren",t),Array.isArray(e))for(let n=0,r=e.length;n<r;n++){let r=this.getChild(e[n]);null!==r&&t.appendChild(r)}else{let n=this.getChild(e);n&&t.appendChild(n)}i.emit("AfterProcessChildren",t)}},getChild(e){if(null===e)return null;if(C.isString(e)&&(e=e.resolveObservableTemplate?e.resolveObservableTemplate():e,C.isString(e)))return M.createStaticTextNode(null,e);if(C.isElement(e))return e;if(C.isObservable(e))return M.createObservableNode(null,e);if(C.isNDElement(e))return e.$element??e.$build?.()??null;if(C.isArray(e)){const t=document.createDocumentFragment();for(let n=0,r=e.length;n<r;n++)t.appendChild(this.getChild(e[n]));return t}return C.isFunction(e)?(i.emit("BeforeProcessComponent",e),this.getChild(e())):e?.$hydrate?M.createHydratableNode(null,e):M.createStaticTextNode(null,e)},processAttributes(e,t){C.isFragment(e)||t&&function(e,t){if(!C.isObject(t))throw new r("Attributes must be an object");for(let n in t){const r=n.toLowerCase();let o=t[r];if(C.isString(o)){if(o=o.resolveObservableTemplate?o.resolveObservableTemplate():o,C.isString(o)){e.setAttribute(r,o);continue}const t=o.filter(e=>C.isObservable(e));o=S.computed(()=>o.map(e=>C.isObservable(e)?e.val():e).join(" ")||" ",t)}"class"===r&&C.isObject(o)?k(e,o):"style"===r&&C.isObject(o)?P(e,o):O.includes(r)?D(e,r,o):C.isObservable(o)?T(e,r,o):o.$hydrate?o.$hydrate(e,r):e.setAttribute(r,o)}}(e,t)},setup:(e,t,n)=>(i.emit("Setup",e,t,n),e)};function B(e,n=!1){const r=document.createDocumentFragment(),o=document.createComment("Anchor Start : "+e),i=document.createComment("/ Anchor End "+e);r.appendChild(o),r.appendChild(i),r.nativeInsertBefore=r.insertBefore,r.nativeAppendChild=r.appendChild;const s=e=>n||e.firstChild===o&&e.lastChild===i;return r.appendElement=function(e,t=null){const n=o.parentNode,s=t||i;n!==r?n?.insertBefore(e,s):n.nativeInsertBefore(e,s)},r.appendChild=function(e,n=null){const r=i.parentNode;r?function(e,t,n){const r=C.isElement(t)?t:M.getChild(t);e!==r?s(e)&&n===i?e.append(r,n):e.insertBefore(r,n):e.nativeInsertBefore(r,n)}(r,e,n=n??i):t.error("Anchor","Anchor : parent not found",e)},r.removeChildren=function(){const e=i.parentNode;if(e===r)return;if(s(e))return void e.replaceChildren(o,i);let t,n=o.nextSibling;const l=document.createDocumentFragment();for(;n&&n!==i;)t=n.nextSibling,l.append(n),n=t;l.replaceChildren()},r.remove=function(){const e=i.parentNode;if(e===r)return;if(s(e))return void e.replaceChildren(o,i);let t,n=o.nextSibling;for(;n&&n!==i;)t=n.nextSibling,r.nativeAppendChild(n),n=t},r.removeWithAnchors=function(){r.removeChildren(),o.remove(),i.remove()},r.replaceContent=function(e){const t=i.parentNode;t&&(s(t)?t.replaceChildren(o,e,i):(r.removeChildren(),t.insertBefore(e,i)))},r.insertBefore=function(e,t=null){r.appendChild(e,t)},r.clear=function(){r.remove()},r.endElement=function(){return i},r.startElement=function(){return o},r.getByIndex=function(e){let t=o;for(let n=0;n<=e;n++){if(!t.nextSibling)return null;t=t.nextSibling}return t!==o?t:null},r}Object.defineProperty(HTMLElement.prototype,"nd",{configurable:!0,get(){return new p(this)}});const I={getClasses(){return this.$element.className?.split(" ").filter(Boolean)},add(e){const t=this.getClasses();t.indexOf(e)>=0||(t.push(e),this.$element.className=t.join(" "))},remove(e){const t=this.getClasses(),n=t.indexOf(e);n<0||(t.splice(n,1),this.$element.className=t.join(" "))},toggle(e,t=void 0){const n=this.getClasses(),r=n.indexOf(e);if(r>=0){if(!0===t)return;n.splice(r,1)}else{if(!1===t)return;n.push(e)}this.$element.className=n.join(" ")},contains(e){return this.getClasses().indexOf(e)>=0}};Object.defineProperty(HTMLElement.prototype,"classes",{configurable:!0,get(){return{$element:this,...I}}});function V(e,t,n,r=null){let{props:o,children:i=null}=function(e,t=null){if(!C.isJson(e)||e?.$hydrate){const n=t;t=e,e=n}return{props:e,children:t}}(n,r),s=M.createElement(e),l=t&&"function"==typeof t?t(s):s;return o&&M.processAttributes(l,o),i&&M.processChildren(i,l),M.setup(l,o,t)}function F(e,t){return V.bind(null,e.toLowerCase(),t)}const _=F("div");F("span"),F("label"),F("p"),F("strong"),F("h1"),F("h2"),F("h3"),F("h4"),F("h5"),F("h6"),F("br"),F("a"),F("pre"),F("code"),F("blockquote"),F("hr"),F("em"),F("small"),F("mark"),F("del"),F("ins"),F("sub"),F("sup"),F("abbr"),F("cite"),F("q"),F("dl"),F("dt"),F("dd"),F("form",function(e){return e.submit=function(t){return"function"==typeof t?(e.onSubmit(e=>{e.preventDefault(),t(e)}),e):(this.setAttribute("action",t),e)},e.multipartFormData=function(){return this.setAttribute("enctype","multipart/form-data"),e},e.post=function(t){return this.setAttribute("method","post"),this.setAttribute("action",t),e},e.get=function(e){this.setAttribute("method","get"),this.setAttribute("action",e)},e}),F("input"),F("textarea"),F("select"),F("fieldset"),F("option"),F("legend"),F("datalist"),F("output"),F("progress"),F("meter");const z=F("button");F("main"),F("section"),F("article"),F("aside"),F("nav"),F("figure"),F("figcaption"),F("header"),F("footer"),F("img"),F("details"),F("summary"),F("dialog"),F("menu"),F("ol"),F("ul"),F("li"),F("audio"),F("video"),F("source"),F("track"),F("canvas"),F("svg"),F("time"),F("data"),F("address"),F("kbd"),F("samp"),F("var"),F("wbr"),F("caption"),F("table"),F("thead"),F("tfoot"),F("tbody"),F("tr"),F("th"),F("td"),F(""),Function.prototype.args=function(...e){return this},Function.prototype.cached=function(...e){let t=null,n=function(){return t};return()=>(t||(t=this.apply(this,e),t.cloneNode?n=function(){return t.cloneNode(!0)}:t.$element&&(n=function(){return new p(t.$element.cloneNode(!0))})),n())},Function.prototype.errorBoundary=function(e){return(...t)=>{try{return this.apply(this,t)}catch(t){return e(t)}}},String.prototype.use=function(e){const t=this;return S.computed(()=>t.replace(/\$\{(.*?)}/g,(t,n)=>{const r=e[n];return C.isObservable(r)?r.val():r}),Object.values(e))},String.prototype.resolveObservableTemplate=function(){return C.containsObservableReference(this)?this.split(/(\{\{#ObItem::\([0-9]+\)\}\})/g).filter(Boolean).map(e=>{if(!C.containsObservableReference(e))return e;const[t,n]=e.match(/\{\{#ObItem::\(([0-9]+)\)\}\}/);return S.getById(n)}):this.valueOf()};const W=["push","pop","shift","unshift","reverse","sort","splice"];S.array=function(e){if(!Array.isArray(e))throw new r("Observable.array : target must be an array");const t=S(e);i.emit("CreateObservableArray",t),W.forEach(e=>{t[e]=function(...n){const r=t.val()[e](...n);return t.trigger({action:e,args:n,result:r}),r}}),t.clear=function(){return t.val().length=0,t.trigger({action:"clear"}),!0},t.merge=function(e){t.$value.push(...e),t.trigger({action:"merge",args:e})},t.populateAndRender=function(e,n){t.trigger({action:"populate",args:[t.val(),e,n]})},t.remove=function(e){const n=t.val().splice(e,1);return 0===n.length?[]:(t.trigger({action:"remove",args:[e],result:n[0]}),n)},t.swap=function(e,n){const r=t.val(),o=r.length;if(o<e||o<n)return!1;if(n<e){const t=e;e=n,n=t}const i=r[e],s=r[n];return r[e]=s,r[n]=i,t.trigger({action:"swap",args:[e,n],result:[i,s]}),!0},t.length=function(){return t.val().length};return["map","filter","reduce","some","every","find","findIndex","concat","includes","indexOf"].forEach(e=>{t[e]=(...n)=>t.val()[e](...n)}),t},S.batch=function(e){const t=S(0),n=function(){if(C.isAsyncFunction(e))return e(...arguments).then(()=>{t.trigger()}).catch(e=>{throw e});e(...arguments),t.trigger()};return n.$observer=t,n},S.init=function(e){const t={};for(const n in e){const r=e[n];C.isJson(r)?t[n]=S.init(r):C.isArray(r)?t[n]=S.array(r):t[n]=S(r)}const n=function(){},r=function(e){S.update(o,e)},o=new Proxy(t,{get:(e,o)=>"__isProxy__"===o||("$value"===o?function(){const e={};for(const n in t){const r=t[n];C.isObservable(r)?e[n]=r.val():C.isProxy(r)?e[n]=r.$value:e[n]=r}return e}():"$clone"===o?n:"$observables"===o?Object.values(e):"$updateWith"===o?r:void 0!==e[o]?e[o]:void 0),set:(e,t,n)=>void 0===e[t]||(C.isObservable(n)?e[t].set(n.val()):e[t].set(n),!0)});return o},S.arrayOfObject=function(e){return e.map(e=>S.object(e))},S.value=function(e){if(C.isObservable(e))return e.val();if(C.isProxy(e))return e.$value;if(C.isArray(e)){const t=[];for(let n=0,r=e.length;n<r;n++){const r=e[n];t.push(S.value(r))}return t}return e},S.update=function(e,t){C.isProxy(t)&&(t=t.$value);for(const n in t){const r=e[n],o=t[n];if(C.isObservable(r)){if(C.isArray(o)){r.set([...o]);continue}r.set(o)}else C.isProxy(r)?S.update(r,o):e[n]=o}},S.object=S.init,S.json=S.init,S.computed=function(e,t=[]){const n=new s(e()),o=()=>n.set(e());if(i.emit("CreateObservableComputed",n,t),C.isFunction(t)){if(!C.isObservable(t.$observer))throw new r("Observable.computed : dependencies must be valid batch function");return t.$observer.subscribe(o),n}return t.forEach(e=>{C.isProxy(e)?e.$observables.forEach(e=>{e.subscribe(o)}):e.subscribe(o)}),n};const U={createdObservable:S(0)},R={name:"DevTools",onCreateObservable(e){U.createdObservable.set(e=>++e),console.log("Création Capturé",e)}};function H(){let e=!1;const t=_({class:"devtools-app-panel-widget",style:"left: 50%; top: 95%"},[_({class:"widget-label"},U.createdObservable),z({class:"widget-button"},"Full").nd.onClick(()=>{alert("Move to full-screen")})]);return t.nd.onStopMouseDown(()=>e=!0).onMouseUp(t=>e=!1),document.addEventListener("mousemove",n=>{e&&(t.style="left: "+n.clientX+"px; top: "+n.clientY+"px")}),t}return{config(){console.log("devtool init configuratzion")},init(){const e=_(_({class:"devtools-app-panel-wrapper pin-to-right"},[H,_({class:"devtools-app-panel"}),_("Gogo Panel")])).nd.closedShadow("\n .devtools-app-panel-wrapper {\n position: fixed;\n width: 0px;\n background: red;\n animate: .25s linear;\n }\n .devtools-app-panel-wrapper.pin-to-right {\n right: 0;\n top: 0;\n bottom: 0;\n }\n .devtools-app-panel-widget {\n position: fixed;\n background: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(5px);\n padding: 2px;\n width: 150px;\n height: 30px;\n border-radius: 5px;\n border: 1px solid black;\n z-index: 10000009;\n color: white;\n cursor: pointer;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: space-between;\n align-items: stretch;\n align-content: center;\n }\n .widget-button {\n width: 30px;\n padding: 2px;\n background: rgba(0, 0, 0, 0.8);\n border: 1px solid black;\n display: flex;\n justify-content: center;\n align-items: center;\n align-content: center;\n color: white;\n border-radius: 5px;\n cursor: pointer;\n font-size: .9rem;\n }\n .widget-label {\n font-weight: bold;\n font-size: 1.5rem;\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n ");document.body.parentNode.appendChild(e.$element)},plugin:R}}();
1
+ var NativeDocumentDevTools=function(){"use strict";let e={};e={log(){},warn(){},error(){},disable(){}};var t=e;const n=function(){let e=0;const n=new Map;return{register(t){const r=++e;return n.set(r,new WeakRef(t)),r},unregister(e){n.delete(e)},getObservableById:e=>n.get(e)?.deref(),cleanup(){for(const[e,t]of n){const e=t.deref();e&&e.cleanup()}n.clear()},cleanObservables(e){if(n.size<e)return;let r=0;for(const[e,t]of n)t.deref()||(n.delete(e),r++);r>0&&t.log("Memory Auto Clean",`🧹 Cleaned ${r} orphaned observables`)}}}();class r extends Error{constructor(e,t={}){super(e),this.name="NativeDocumentError",this.context=t,this.timestamp=(new Date).toISOString()}}function o(e,t){this.observable=e,this.checker=t,this.unSubscriptions=[]}o.prototype.__$isObservableChecker=!0,o.prototype.subscribe=function(e){const t=this.observable.subscribe(t=>{e&&e(this.checker(t))});return this.unSubscriptions.push(t),t},o.prototype.check=function(e){return this.observable.check(()=>e(this.val()))},o.prototype.val=function(){return this.checker&&this.checker(this.observable.val())},o.prototype.set=function(e){return this.observable.set(e)},o.prototype.trigger=function(){return this.observable.trigger()},o.prototype.cleanup=function(){return this.observable.cleanup()};const i=function(){const e=new Map,n=new Map;return{list:()=>n,add(t,r){if(!t||"object"!=typeof t)throw new Error(`Plugin ${r} must be an object`);if(!(r=r||t.name)||"string"!=typeof r)throw new Error("Please, provide a valid plugin name");if(!e.has(r)){t.$name=r,e.set(r,t),"function"==typeof t?.init&&t.init();for(const e in t)if(/^on[A-Z]/.test(e)){const r=e.replace(/^on/,"");n.has(r)||n.set(r,new Set),n.get(r).add(t)}}},remove(t){if(!e.has(t))return;const r=e.get(t);"function"==typeof r.cleanup&&r.cleanup();for(const[e,t]of n.entries())t.has(r)&&t.delete(r),0===t.size&&n.delete(e);e.delete(t)},emit(e,...r){if(!n.has(e))return;const o=n.get(e);for(const n of o){const o=n["on"+e];if("function"==typeof o)try{o.call(n,...r)}catch(r){t.error("Plugin Manager",`Error in plugin ${n.$name} for event ${e}`,r)}}}}}();function s(e){this.$previousValue=null,this.$currentValue=e,this.$isCleanedUp=!1,this.$listeners=null,this.$watchers=null,this.$memoryId=null,i.emit("CreateObservable",this)}Object.defineProperty(s.prototype,"$value",{get(){return this.$currentValue},set(e){this.set(e)},configurable:!0}),s.prototype.__$isObservable=!0;const l={},a=function(){};s.prototype.triggerFirstListener=function(e){this.$listeners[0](this.$currentValue,this.$previousValue,e||{})},s.prototype.triggerListeners=function(e){const t=this.$listeners,n=this.$previousValue,r=this.$currentValue;e=e||l;for(let o=0,i=t.length;o<i;o++)t[o](r,n,e)};const u=function(e,t){"function"!=typeof e?e.set?e.set(t):e.forEach(e=>{e.set?e.set(t):e(t)}):e(t)};s.prototype.triggerWatchers=function(){if(!this.$watchers)return;const e=this.$watchers,t=this.$previousValue,n=this.$currentValue;if(e.has(n)){const t=e.get(n);u(t,!0)}if(e.has(t)){const n=e.get(t);u(n,!1)}},s.prototype.triggerAll=function(e){this.triggerListeners(e),this.triggerWatchers()},s.prototype.triggerWatchersAndFirstListener=function(e){this.triggerListeners(e),this.triggerWatchers()},s.prototype.assocTrigger=function(){this.$watchers?.size&&this.$listeners?.length?this.trigger=1===this.$listeners.length?this.triggerWatchersAndFirstListener:this.triggerAll:this.$listeners?.length?this.trigger=1===this.$listeners.length?this.triggerFirstListener:this.triggerListeners:this.$watchers?.size?this.trigger=this.triggerWatchers:this.trigger=a},s.prototype.trigger=a,s.prototype.set=function(e){const t="function"==typeof e?e(this.$currentValue):e;this.$currentValue!==t&&(this.$previousValue=this.$currentValue,this.$currentValue=t,i.emit("ObservableBeforeChange",this),this.trigger(),this.$previousValue=null,i.emit("ObservableAfterChange",this))},s.prototype.val=function(){return this.$currentValue},s.prototype.disconnectAll=function(){if(this.$listeners?.splice(0),this.$previousValue=null,this.$currentValue=null,this.$watchers)for(const[e,t]of this.$watchers)C.isArray(t)&&t.splice(0);this.$watchers?.clear(),this.$listeners=null,this.$watchers=null,this.trigger=a},s.prototype.cleanup=function(){n.unregister(this.$memoryId),this.disconnectAll(),this.$isCleanedUp=!0,delete this.$value},s.prototype.subscribe=function(e,n=null){if(this.$listeners=this.$listeners??[],this.$isCleanedUp)return t.warn("Observable subscription","⚠️ Attempted to subscribe to a cleaned up observable."),()=>{};if("function"!=typeof e)throw new r("Callback must be a function");return this.$listeners.push(e),this.assocTrigger(),i.emit("ObservableSubscribe",this,n),()=>{this.unsubscribe(e),this.assocTrigger(),i.emit("ObservableUnsubscribe",this)}},s.prototype.on=function(e,t){this.$watchers=this.$watchers??new Map;let n=this.$watchers.get(e);if(n){if(!C.isArray(n))return n=[n],void this.$watchers.set(e,n);n.push(t)}else this.$watchers.set(e,t);return this.assocTrigger(),()=>{const r=n.indexOf(t);n?.splice(r,1),1===n.size?this.$watchers.set(e,n[0]):0===n.size&&(this.$watchers?.delete(e),n=null),this.assocTrigger()}},s.prototype.unsubscribe=function(e){const t=this.$listeners.indexOf(e);t>-1&&this.$listeners.splice(t,1),this.assocTrigger()},s.prototype.check=function(e){return new o(this,e)},s.prototype.get=s.prototype.check,s.prototype.when=function(e){return{$target:e,$observer:this}},s.prototype.toString=function(){return this.$memoryId||n.register(this),"{{#ObItem::("+this.$memoryId+")}}"},s.prototype.equals=function(e){return C.isObservable(e)?this.$currentValue===e.$currentValue:this.$currentValue===e},s.prototype.toggle=function(){this.set(!this.$currentValue)};const c={mounted:new WeakMap,mountedSupposedSize:0,unmounted:new WeakMap,unmountedSupposedSize:0,observer:null,checkMutation:function(e){for(const t of e){if(c.mountedSupposedSize>0)for(const e of t.addedNodes){const t=c.mounted.get(e);t&&(t.inDom=!0,t.mounted&&t.mounted(e))}if(c.unmountedSupposedSize>0)for(const e of t.removedNodes){const t=c.unmounted.get(e);t&&(t.inDom=!1,t.unmounted&&!0===t.unmounted(e)&&(t.disconnect(),e.nd?.remove()))}}},watch:function(e,t=!1){let n={inDom:t,mounted:null,unmounted:null,disconnect:()=>{c.mounted.delete(e),c.unmounted.delete(e),c.mountedSupposedSize--,c.unmountedSupposedSize--,n=null}};return{disconnect:n.disconnect,mounted:t=>{n.mounted=t,c.mounted.set(e,n),c.mountedSupposedSize++},unmounted:t=>{n.unmounted=t,c.unmounted.set(e,n),c.unmountedSupposedSize++}}}};c.observer=new MutationObserver(c.checkMutation),c.observer.observe(document.body,{childList:!0,subtree:!0});const d=["Click","DblClick","MouseDown","MouseEnter","MouseLeave","MouseMove","MouseOut","MouseOver","MouseUp","Wheel","KeyDown","KeyPress","KeyUp","Blur","Change","Focus","Input","Invalid","Reset","Search","Select","Submit","Drag","DragEnd","DragEnter","DragLeave","DragOver","DragStart","Drop","AfterPrint","BeforePrint","BeforeUnload","Error","HashChange","Load","Offline","Online","PageHide","PageShow","Resize","Scroll","Unload","Abort","CanPlay","CanPlayThrough","DurationChange","Emptied","Ended","LoadedData","LoadedMetadata","LoadStart","Pause","Play","Playing","Progress","RateChange","Seeked","Seeking","Stalled","Suspend","TimeUpdate","VolumeChange","Waiting","TouchCancel","TouchEnd","TouchMove","TouchStart","AnimationEnd","AnimationIteration","AnimationStart","TransitionEnd","Copy","Cut","Paste","FocusIn","FocusOut","ContextMenu"];function p(e){this.$element=e,this.$observer=null,i.emit("NDElementCreated",e,this)}p.prototype.__$isNDElement=!0,p.prototype.valueOf=function(){return this.$element},p.prototype.ref=function(e,t){return e[t]=this.$element,this},p.prototype.unmountChildren=function(){let e=this.$element;for(let t=0,n=e.children.length;t<n;t++){let n=e.children[t];n.$ndProx||n.nd?.remove(),n=null}return e=null,this},p.prototype.remove=function(){let e=this.$element;return e.nd.unmountChildren(),e.$ndProx=null,delete e.nd?.on?.prevent,delete e.nd?.on,delete e.nd,e=null,this},p.prototype.lifecycle=function(e){return this.$observer=this.$observer||c.watch(this.$element),e.mounted&&this.$observer.mounted(e.mounted),e.unmounted&&this.$observer.unmounted(e.unmounted),this},p.prototype.mounted=function(e){return this.lifecycle({mounted:e})},p.prototype.unmounted=function(e){return this.lifecycle({unmounted:e})},p.prototype.htmlElement=function(){return this.$element},p.prototype.node=p.prototype.htmlElement,p.prototype.shadow=function(e,t=null){const n=this.$element,r=Array.from(n.childNodes),o=n.attachShadow({mode:e});if(t){const e=document.createElement("style");e.textContent=t,o.appendChild(e)}return n.append=o.append.bind(o),n.appendChild=o.appendChild.bind(o),o.append(...r),this},p.prototype.openShadow=function(e=null){return this.shadow("open",e)},p.prototype.closedShadow=function(e=null){return this.shadow("closed",e)},p.prototype.attach=function(e){return e.$hydrate(this.$element),this.$element};const h={},f=function(e,t,n){if(!e)return;if(!h[t]){const r=new WeakMap;return h[t]=r,void r.set(e,n)}const r=h[t];if(!r.has(e))return void r.set(e,n);const o=r.get(e);C.isArray(o)?o.push(n):r.set(e,[store[t],n])},b=function(e,t,n){return e.addEventListener(t,t=>{t.preventDefault(),n&&n.call(e,t)}),this},g=function(e,t,n){return e.addEventListener(t,t=>{t.stopPropagation(),n&&n.call(e,t)}),this},m=function(e,t,n){return e.addEventListener(t,t=>{t.stopPropagation(),t.preventDefault(),n&&n.call(e,t)}),this},v=function(e,t,n){return n?(e.addEventListener(t,n),this):(function(e,t){e.addEventListener(t,n=>{const r=h[t];if(!r)return;let o=n.target;for(;o&&o!==e;){const e=r.get(o);if(e){if(C.isFunction(e))e.call(o,n);else for(let t=0;t<e.length;t++)e[t].call(o,n);return}o=o.parentElement}})}(e,t),this)};for(const e of d){const t=e.toLowerCase();p.prototype["on"+e]=function(e){return this.$element.addEventListener(t,e),this},p.prototype["onPrevent"+e]=function(e){return b(this.$element,t,e),this},p.prototype["onStop"+e]=function(e){return g(this.$element,t,e),this},p.prototype["onPreventStop"+e]=function(e){return m(this.$element,t,e),this},p.prototype["when"+e]=function(e){return f(this.$element,t,e),this},p.prototype["capture"+e]=function(e){return v(this.$element,t,e),this}}const y=1,$=3,w=8,O=11,C={isObservable:e=>e?.__$isObservable||e instanceof s||e instanceof o,isProxy:e=>e?.__isProxy__,isAnchor:e=>e?.__Anchor__,isObservableChecker:e=>e?.__$isObservableChecker||e instanceof o,isArray:e=>Array.isArray(e),isString:e=>"string"==typeof e,isNumber:e=>"number"==typeof e,isBoolean:e=>"boolean"==typeof e,isFunction:e=>"function"==typeof e,isAsyncFunction:e=>"function"==typeof e&&"AsyncFunction"===e.constructor.name,isObject:e=>"object"==typeof e,isJson:e=>"object"==typeof e&&null!==e&&!Array.isArray(e)&&"Object"===e.constructor.name,isElement:e=>e&&(e.nodeType===y||e.nodeType===$||e.nodeType===O||e.nodeType===w),isFragment:e=>e?.nodeType===O,isStringOrObservable(e){return this.isString(e)||this.isObservable(e)},isValidChild(e){return null===e||this.isElement(e)||this.isObservable(e)||this.isNDElement(e)||["string","number","boolean"].includes(typeof e)},isNDElement:e=>e?.__$isNDElement||e instanceof p,isValidChildren(e){Array.isArray(e)||(e=[e]);return 0===e.filter(e=>!this.isValidChild(e)).length},validateChildren(e){Array.isArray(e)||(e=[e]);const t=e.filter(e=>!this.isValidChild(e));if(t.length>0)throw new r(`Invalid children detected: ${t.map(e=>typeof e).join(", ")}`);return e},containsObservables:e=>!!e&&(C.isObject(e)&&Object.values(e).some(e=>C.isObservable(e))),containsObservableReference:e=>!(!e||"string"!=typeof e)&&/\{\{#ObItem::\([0-9]+\)\}\}/.test(e),validateAttributes(e){},validateEventCallback(e){if("function"!=typeof e)throw new r("Event callback must be a function")}},A=["checked","selected","disabled","readonly","required","autofocus","multiple","autocomplete","hidden","contenteditable","spellcheck","translate","draggable","async","defer","autoplay","controls","loop","muted","download","reversed","open","default","formnovalidate","novalidate","scoped","itemscope","allowfullscreen","allowpaymentrequest","playsinline"];function S(e){return new s(e)}function x(e,t,n){e.classes.toggle(t,n)}function E(e,t,n){e.style[t]=n}function N(e,t,n){C.isBoolean(n)?e[t]=n:e[t]=n===e.value}function k(e,t,n,r){C.isBoolean(n)?r.set(e[t]):r.set(e.value)}function P(e,t){for(let n in t){const r=t[n];C.isObservable(r)?(e.classes.toggle(n,r.val()),r.subscribe(x.bind(null,e,n))):r.$observer?(e.classes.toggle(n,r.$observer.val()===r.$target),r.$observer.on(r.$target,x.bind(null,e,n))):r.$hydrate?r.$hydrate(e,n):e.classes.toggle(n,r)}t=null}function T(e,t){for(let n in t){const r=t[n];C.isObservable(r)?(e.style[n]=r.val(),r.subscribe(E.bind(null,e,n))):e.style[n]=r}}function D(e,t,n){const r=C.isObservable(n)?n.val():n;C.isBoolean(r)?e[t]=r:e[t]=r===e.value,C.isObservable(n)&&(["checked"].includes(t)&&e.addEventListener("input",k.bind(null,e,t,r)),n.subscribe(N.bind(null,e,t)))}function L(e,t,n){const r=n=>{"value"!==t?e.setAttribute(t,n):e.value=n};r(n.val()),n.subscribe(r),"value"===t&&e.addEventListener("input",()=>n.set(e.value))}S.getById=function(e){const t=n.getObservableById(parseInt(e));if(!t)throw new r("Observable.getById : No observable found with id "+e);return t},S.cleanup=function(e){e.cleanup()},S.autoCleanup=function(e=!1,t={}){if(!e)return;const{interval:r=6e4,threshold:o=100}=t;window.addEventListener("beforeunload",()=>{n.cleanup()}),setInterval(()=>n.cleanObservables(o),r)};const V=new Map;let j=null;const M={createTextNode:()=>(j||(j=document.createTextNode("")),j.cloneNode()),createObservableNode(e,t){const n=M.createTextNode();return t.subscribe(e=>n.nodeValue=e),n.nodeValue=t.val(),e&&e.appendChild(n),n},createHydratableNode(e,t){const n=M.createTextNode();return t.$hydrate(n),n},createStaticTextNode(e,t){let n=M.createTextNode();return n.nodeValue=t,e&&e.appendChild(n),n},createElement(e){if(e){if(V.has(e))return V.get(e).cloneNode();const t=document.createElement(e);return V.set(e,t),t.cloneNode()}return new _("Fragment")},processChildren(e,t){if(null!==e){if(i.emit("BeforeProcessChildren",t),Array.isArray(e))for(let n=0,r=e.length;n<r;n++){let r=this.getChild(e[n]);null!==r&&t.appendChild(r)}else{let n=this.getChild(e);n&&t.appendChild(n)}i.emit("AfterProcessChildren",t)}},getChild(e){if(null===e)return null;if(C.isString(e)&&(e=e.resolveObservableTemplate?e.resolveObservableTemplate():e,C.isString(e)))return M.createStaticTextNode(null,e);if(C.isElement(e))return e;if(C.isObservable(e))return M.createObservableNode(null,e);if(C.isNDElement(e))return e.$element??e.$build?.()??null;if(C.isArray(e)){const t=document.createDocumentFragment();for(let n=0,r=e.length;n<r;n++)t.appendChild(this.getChild(e[n]));return t}return C.isFunction(e)?(i.emit("BeforeProcessComponent",e),this.getChild(e())):e?.$hydrate?M.createHydratableNode(null,e):M.createStaticTextNode(null,e)},processAttributes(e,t){C.isFragment(e)||t&&function(e,t){if(!C.isObject(t))throw new r("Attributes must be an object");for(let n in t){const r=n.toLowerCase();let o=t[r];if(null!=o){if(C.isString(o)){if(o=o.resolveObservableTemplate?o.resolveObservableTemplate():o,C.isString(o)){e.setAttribute(r,o);continue}const t=o.filter(e=>C.isObservable(e));o=S.computed(()=>o.map(e=>C.isObservable(e)?e.val():e).join(" ")||" ",t)}"class"===r&&C.isObject(o)?P(e,o):"style"===r&&C.isObject(o)?T(e,o):A.includes(r)?D(e,r,o):C.isObservable(o)?L(e,r,o):o.$hydrate?o.$hydrate(e,r):e.setAttribute(r,o)}}}(e,t)},setup:(e,t,n)=>(i.emit("Setup",e,t,n),e)};function _(e,n=!1){const r=document.createDocumentFragment();r.__Anchor__=!0;const o=document.createComment("Anchor Start : "+e),i=document.createComment("/ Anchor End "+e);r.appendChild(o),r.appendChild(i),r.nativeInsertBefore=r.insertBefore,r.nativeAppendChild=r.appendChild;const s=e=>n||e.firstChild===o&&e.lastChild===i;return r.appendElement=function(e,t=null){const n=o.parentNode,s=t||i;n!==r?n?.insertBefore(e,s):n.nativeInsertBefore(e,s)},r.appendChild=function(e,n=null){const o=i.parentNode;o?function(e,t,n){const o=C.isElement(t)?t:M.getChild(t);e!==r?s(e)&&n===i?e.append(o,n):e.insertBefore(o,n):e.nativeInsertBefore(o,n)}(o,e,n=n??i):t.error("Anchor","Anchor : parent not found",e)},r.append=function(...e){return r.appendChild(e)},r.removeChildren=function(){const e=i.parentNode;if(e===r)return;if(s(e))return void e.replaceChildren(o,i);let t,n=o.nextSibling;const l=document.createDocumentFragment();for(;n&&n!==i;)t=n.nextSibling,l.append(n),n=t;l.replaceChildren()},r.remove=function(){if(i.parentNode===r)return;let e,t=o.nextSibling;for(;t&&t!==i;)e=t.nextSibling,r.nativeAppendChild(t),t=e},r.removeWithAnchors=function(){r.removeChildren(),o.remove(),i.remove()},r.replaceContent=function(e){const t=i.parentNode;t&&(s(t)?t.replaceChildren(o,e,i):(r.removeChildren(),t.insertBefore(e,i)))},r.insertBefore=function(e,t=null){r.appendChild(e,t)},r.endElement=function(){return i},r.startElement=function(){return o},r.restore=function(){r.appendChild(r)},r.clear=r.remove,r.detach=r.remove,r.getByIndex=function(e){let t=o;for(let n=0;n<=e;n++){if(!t.nextSibling)return null;t=t.nextSibling}return t!==o?t:null},r}Object.defineProperty(HTMLElement.prototype,"nd",{configurable:!0,get(){return new p(this)}});const B={getClasses(){return this.$element.className?.split(" ").filter(Boolean)},add(e){const t=this.getClasses();t.indexOf(e)>=0||(t.push(e),this.$element.className=t.join(" "))},remove(e){const t=this.getClasses(),n=t.indexOf(e);n<0||(t.splice(n,1),this.$element.className=t.join(" "))},toggle(e,t=void 0){const n=this.getClasses(),r=n.indexOf(e);if(r>=0){if(!0===t)return;n.splice(r,1)}else{if(!1===t)return;n.push(e)}this.$element.className=n.join(" ")},contains(e){return this.getClasses().indexOf(e)>=0}};Object.defineProperty(HTMLElement.prototype,"classes",{configurable:!0,get(){return{$element:this,...B}}});function I(e,t,n,r=null){let{props:o,children:i=null}=function(e,t=null){if(!C.isJson(e)||e?.$hydrate){const n=t;t=e,e=n}return{props:e,children:t}}(n,r),s=M.createElement(e),l=t&&"function"==typeof t?t(s):s;return o&&M.processAttributes(l,o),i&&M.processChildren(i,l),M.setup(l,o,t)}function F(e,t){return I.bind(null,e.toLowerCase(),t)}const z=F("div");F("span"),F("label"),F("p"),F("strong"),F("h1"),F("h2"),F("h3"),F("h4"),F("h5"),F("h6"),F("br"),F("a"),F("pre"),F("code"),F("blockquote"),F("hr"),F("em"),F("small"),F("mark"),F("del"),F("ins"),F("sub"),F("sup"),F("abbr"),F("cite"),F("q"),F("dl"),F("dt"),F("dd"),F("form",function(e){return e.submit=function(t){return"function"==typeof t?(e.onSubmit(e=>{e.preventDefault(),t(e)}),e):(this.setAttribute("action",t),e)},e.multipartFormData=function(){return this.setAttribute("enctype","multipart/form-data"),e},e.post=function(t){return this.setAttribute("method","post"),this.setAttribute("action",t),e},e.get=function(e){this.setAttribute("method","get"),this.setAttribute("action",e)},e}),F("input"),F("textarea"),F("select"),F("fieldset"),F("option"),F("legend"),F("datalist"),F("output"),F("progress"),F("meter");const W=F("button");F("main"),F("section"),F("article"),F("aside"),F("nav"),F("figure"),F("figcaption"),F("header"),F("footer"),F("img"),F("details"),F("summary"),F("dialog"),F("menu"),F("ol"),F("ul"),F("li"),F("audio"),F("video"),F("source"),F("track"),F("canvas"),F("svg"),F("time"),F("data"),F("address"),F("kbd"),F("samp"),F("var"),F("wbr"),F("caption"),F("table"),F("thead"),F("tfoot"),F("tbody"),F("tr"),F("th"),F("td"),F(""),Function.prototype.args=function(...e){return this},Function.prototype.cached=function(...e){let t=null,n=function(){return t};return()=>(t||(t=this.apply(this,e),t.cloneNode?n=function(){return t.cloneNode(!0)}:t.$element&&(n=function(){return new p(t.$element.cloneNode(!0))})),n())},Function.prototype.errorBoundary=function(e){return(...t)=>{try{return this.apply(this,t)}catch(t){return e(t)}}},String.prototype.use=function(e){const t=this;return S.computed(()=>t.replace(/\$\{(.*?)}/g,(t,n)=>{const r=e[n];return C.isObservable(r)?r.val():r}),Object.values(e))},String.prototype.resolveObservableTemplate=function(){return C.containsObservableReference(this)?this.split(/(\{\{#ObItem::\([0-9]+\)\}\})/g).filter(Boolean).map(e=>{if(!C.containsObservableReference(e))return e;const[t,n]=e.match(/\{\{#ObItem::\(([0-9]+)\)\}\}/);return S.getById(n)}):this.valueOf()};const U=["push","pop","shift","unshift","reverse","sort","splice"];S.array=function(e){if(!Array.isArray(e))throw new r("Observable.array : target must be an array");const t=S(e);i.emit("CreateObservableArray",t),U.forEach(e=>{t[e]=function(...n){const r=t.val()[e](...n);return t.trigger({action:e,args:n,result:r}),r}}),t.clear=function(){return t.val().length=0,t.trigger({action:"clear"}),!0},t.merge=function(e){t.$value.push(...e),t.trigger({action:"merge",args:e})},t.populateAndRender=function(e,n){t.trigger({action:"populate",args:[t.val(),e,n]})},t.removeItem=function(e){const n=t.val().indexOf(e);return t.remove(n)},t.remove=function(e){const n=t.val().splice(e,1);return 0===n.length?[]:(t.trigger({action:"remove",args:[e],result:n[0]}),n)},t.swap=function(e,n){const r=t.val(),o=r.length;if(o<e||o<n)return!1;if(n<e){const t=e;e=n,n=t}const i=r[e],s=r[n];return r[e]=s,r[n]=i,t.trigger({action:"swap",args:[e,n],result:[i,s]}),!0},t.length=function(){return t.val().length},t.count=e=>{let n=0;return t.val().forEach((t,r)=>{e(t,r)&&n++}),n},t.isEmpty=function(){return 0===t.val().length};return["map","filter","reduce","some","every","find","findIndex","concat","includes","indexOf"].forEach(e=>{t[e]=(...n)=>t.val()[e](...n)}),t},S.batch=function(e){const t=S(0),n=function(){if(C.isAsyncFunction(e))return e(...arguments).then(()=>{t.trigger()}).catch(e=>{throw e});e(...arguments),t.trigger()};return n.$observer=t,n},S.init=function(e){const t={};for(const n in e){const r=e[n];Array.isArray(r)?t[n]=S.array(r):t[n]=S(r)}const n=function(){const e={};for(const n in t){const r=t[n];C.isObservable(r)?e[n]=r.val():C.isProxy(r)?e[n]=r.$value:e[n]=r}return e},r=function(){return S.init(n())},o=function(e){S.update(i,e)},i=new Proxy(t,{get:(e,t)=>"__isProxy__"===t||("$value"===t?n():"$clone"===t?r:"$observables"===t?Object.values(e):"$updateWith"===t?o:void 0!==e[t]?e[t]:void 0),set:(e,t,n)=>void 0===e[t]||(C.isObservable(n)?e[t].set(n.val()):e[t].set(n),!0)});return i},S.arrayOfObject=function(e){return e.map(e=>S.object(e))},S.value=function(e){if(C.isObservable(e))return e.val();if(C.isProxy(e))return e.$value;if(C.isArray(e)){const t=[];for(let n=0,r=e.length;n<r;n++){const r=e[n];t.push(S.value(r))}return t}return e},S.update=function(e,t){C.isProxy(t)&&(t=t.$value);for(const n in t){const r=e[n],o=t[n];if(C.isObservable(r)){if(C.isArray(o)){r.set([...o]);continue}r.set(o)}else C.isProxy(r)?S.update(r,o):e[n]=o}},S.object=S.init,S.json=S.init,S.computed=function(e,t=[]){const n=new s(e()),o=()=>n.set(e());if(i.emit("CreateObservableComputed",n,t),C.isFunction(t)){if(!C.isObservable(t.$observer))throw new r("Observable.computed : dependencies must be valid batch function");return t.$observer.subscribe(o),n}return t.forEach(e=>{C.isProxy(e)?e.$observables.forEach(e=>{e.subscribe(o)}):e.subscribe(o)}),n};const R={createdObservable:S(0)},H={name:"DevTools",onCreateObservable(e){R.createdObservable.set(e=>++e),console.log("Création Capturé",e)}};function q(){let e=!1;const t=z({class:"devtools-app-panel-widget",style:"left: 50%; top: 95%"},[z({class:"widget-label"},R.createdObservable),W({class:"widget-button"},"Full").nd.onClick(()=>{alert("Move to full-screen")})]);return t.nd.onStopMouseDown(()=>e=!0).onMouseUp(t=>e=!1),document.addEventListener("mousemove",n=>{e&&(t.style="left: "+n.clientX+"px; top: "+n.clientY+"px")}),t}return{config(){console.log("devtool init configuratzion")},init(){const e=z(z({class:"devtools-app-panel-wrapper pin-to-right"},[q,z({class:"devtools-app-panel"}),z("Gogo Panel")])).nd.closedShadow("\n .devtools-app-panel-wrapper {\n position: fixed;\n width: 0px;\n background: red;\n animate: .25s linear;\n }\n .devtools-app-panel-wrapper.pin-to-right {\n right: 0;\n top: 0;\n bottom: 0;\n }\n .devtools-app-panel-widget {\n position: fixed;\n background: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(5px);\n padding: 2px;\n width: 150px;\n height: 30px;\n border-radius: 5px;\n border: 1px solid black;\n z-index: 10000009;\n color: white;\n cursor: pointer;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: space-between;\n align-items: stretch;\n align-content: center;\n }\n .widget-button {\n width: 30px;\n padding: 2px;\n background: rgba(0, 0, 0, 0.8);\n border: 1px solid black;\n display: flex;\n justify-content: center;\n align-items: center;\n align-content: center;\n color: white;\n border-radius: 5px;\n cursor: pointer;\n font-size: .9rem;\n }\n .widget-label {\n font-weight: bold;\n font-size: 1.5rem;\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n ");document.body.parentNode.appendChild(e.$element)},plugin:H}}();
@@ -1 +1 @@
1
- var NativeDocument=function(t){"use strict";let n={};n={log(){},warn(){},error(){},disable(){}};var r=n;const o=function(){let e=0;const t=new Map;return{register(n){const r=++e;return t.set(r,new WeakRef(n)),r},unregister(e){t.delete(e)},getObservableById:e=>t.get(e)?.deref(),cleanup(){for(const[e,n]of t){const e=n.deref();e&&e.cleanup()}t.clear()},cleanObservables(e){if(t.size<e)return;let n=0;for(const[e,r]of t)r.deref()||(t.delete(e),n++);n>0&&r.log("Memory Auto Clean",`🧹 Cleaned ${n} orphaned observables`)}}}();class s extends Error{constructor(e,t={}){super(e),this.name="NativeDocumentError",this.context=t,this.timestamp=(new Date).toISOString()}}function i(e,t){this.observable=e,this.checker=t,this.unSubscriptions=[]}i.prototype.__$isObservableChecker=!0,i.prototype.subscribe=function(e){const t=this.observable.subscribe(t=>{e&&e(this.checker(t))});return this.unSubscriptions.push(t),t},i.prototype.check=function(e){return this.observable.check(()=>e(this.val()))},i.prototype.val=function(){return this.checker&&this.checker(this.observable.val())},i.prototype.set=function(e){return this.observable.set(e)},i.prototype.trigger=function(){return this.observable.trigger()},i.prototype.cleanup=function(){return this.observable.cleanup()};const a=function(){const e=new Map,t=new Map;return{list:()=>t,add(n,r){if(!n||"object"!=typeof n)throw new Error(`Plugin ${r} must be an object`);if(!(r=r||n.name)||"string"!=typeof r)throw new Error("Please, provide a valid plugin name");if(!e.has(r)){n.$name=r,e.set(r,n),"function"==typeof n?.init&&n.init();for(const e in n)if(/^on[A-Z]/.test(e)){const r=e.replace(/^on/,"");t.has(r)||t.set(r,new Set),t.get(r).add(n)}}},remove(n){if(!e.has(n))return;const r=e.get(n);"function"==typeof r.cleanup&&r.cleanup();for(const[e,n]of t.entries())n.has(r)&&n.delete(r),0===n.size&&t.delete(e);e.delete(n)},emit(e,...n){if(!t.has(e))return;const o=t.get(e);for(const t of o){const o=t["on"+e];if("function"==typeof o)try{o.call(t,...n)}catch(n){r.error("Plugin Manager",`Error in plugin ${t.$name} for event ${e}`,n)}}}}}();function u(e){this.$previousValue=null,this.$currentValue=e,this.$isCleanedUp=!1,this.$listeners=null,this.$watchers=null,this.$memoryId=null,a.emit("CreateObservable",this)}Object.defineProperty(u.prototype,"$value",{get(){return this.$currentValue},set(e){this.set(e)},configurable:!0}),u.prototype.__$isObservable=!0;const l={},c=function(){};u.prototype.triggerFirstListener=function(e){this.$listeners[0](this.$currentValue,this.$previousValue,e||{})},u.prototype.triggerListeners=function(e){const t=this.$listeners,n=this.$previousValue,r=this.$currentValue;e=e||l;for(let o=0,s=t.length;o<s;o++)t[o](r,n,e)};const h=function(e,t){"function"!=typeof e?e.set?e.set(t):e.forEach(e=>{e.set?e.set(t):e(t)}):e(t)};u.prototype.triggerWatchers=function(){if(!this.$watchers)return;const e=this.$watchers,t=this.$previousValue,n=this.$currentValue;if(e.has(n)){const t=e.get(n);h(t,!0)}if(e.has(t)){const n=e.get(t);h(n,!1)}},u.prototype.triggerAll=function(e){this.triggerListeners(e),this.triggerWatchers()},u.prototype.triggerWatchersAndFirstListener=function(e){this.triggerListeners(e),this.triggerWatchers()},u.prototype.assocTrigger=function(){this.$watchers?.size&&this.$listeners?.length?this.trigger=1===this.$listeners.length?this.triggerWatchersAndFirstListener:this.triggerAll:this.$listeners?.length?this.trigger=1===this.$listeners.length?this.triggerFirstListener:this.triggerListeners:this.$watchers?.size?this.trigger=this.triggerWatchers:this.trigger=c},u.prototype.trigger=c,u.prototype.set=function(e){const t="function"==typeof e?e(this.$currentValue):e;this.$currentValue!==t&&(this.$previousValue=this.$currentValue,this.$currentValue=t,a.emit("ObservableBeforeChange",this),this.trigger(),this.$previousValue=null,a.emit("ObservableAfterChange",this))},u.prototype.val=function(){return this.$currentValue},u.prototype.disconnectAll=function(){if(this.$listeners?.splice(0),this.$previousValue=null,this.$currentValue=null,this.$watchers)for(const[e,t]of this.$watchers)A.isArray(t)&&t.splice(0);this.$watchers?.clear(),this.$listeners=null,this.$watchers=null,this.trigger=c},u.prototype.cleanup=function(){o.unregister(this.$memoryId),this.disconnectAll(),this.$isCleanedUp=!0,delete this.$value},u.prototype.subscribe=function(e,t=null){if(this.$listeners=this.$listeners??[],this.$isCleanedUp)return r.warn("Observable subscription","⚠️ Attempted to subscribe to a cleaned up observable."),()=>{};if("function"!=typeof e)throw new s("Callback must be a function");return this.$listeners.push(e),this.assocTrigger(),a.emit("ObservableSubscribe",this,t),()=>{this.unsubscribe(e),this.assocTrigger(),a.emit("ObservableUnsubscribe",this)}},u.prototype.on=function(e,t){this.$watchers=this.$watchers??new Map;let n=this.$watchers.get(e);if(n){if(!A.isArray(n))return n=[n],void this.$watchers.set(e,n);n.push(t)}else this.$watchers.set(e,t);return this.assocTrigger(),()=>{const r=n.indexOf(t);n?.splice(r,1),1===n.size?this.$watchers.set(e,n[0]):0===n.size&&(this.$watchers?.delete(e),n=null),this.assocTrigger()}},u.prototype.unsubscribe=function(e){const t=this.$listeners.indexOf(e);t>-1&&this.$listeners.splice(t,1),this.assocTrigger()},u.prototype.check=function(e){return new i(this,e)},u.prototype.get=u.prototype.check,u.prototype.when=function(e){return{$target:e,$observer:this}},u.prototype.toString=function(){return this.$memoryId||o.register(this),"{{#ObItem::("+this.$memoryId+")}}"};const d=(e,t,n)=>{if(A.isFunction(n))return n(e,t);if(A.isObservable(e)){const r=e.val();return r&&n?r[n]:t}return A.isObject(e)?e[n]?.val?.()??e[n]??t:e},p=function(e,t){return e.replace(new RegExp(`^[${t}]+|[${t}]+$`,"g"),"")},f={mounted:new WeakMap,mountedSupposedSize:0,unmounted:new WeakMap,unmountedSupposedSize:0,observer:null,checkMutation:function(e){for(const t of e){if(f.mountedSupposedSize>0)for(const e of t.addedNodes){const t=f.mounted.get(e);t&&(t.inDom=!0,t.mounted&&t.mounted(e))}if(f.unmountedSupposedSize>0)for(const e of t.removedNodes){const t=f.unmounted.get(e);t&&(t.inDom=!1,t.unmounted&&!0===t.unmounted(e)&&(t.disconnect(),e.nd?.remove()))}}},watch:function(e,t=!1){let n={inDom:t,mounted:null,unmounted:null,disconnect:()=>{f.mounted.delete(e),f.unmounted.delete(e),f.mountedSupposedSize--,f.unmountedSupposedSize--,n=null}};return{disconnect:n.disconnect,mounted:t=>{n.mounted=t,f.mounted.set(e,n),f.mountedSupposedSize++},unmounted:t=>{n.unmounted=t,f.unmounted.set(e,n),f.unmountedSupposedSize++}}}};f.observer=new MutationObserver(f.checkMutation),f.observer.observe(document.body,{childList:!0,subtree:!0});const m=["Click","DblClick","MouseDown","MouseEnter","MouseLeave","MouseMove","MouseOut","MouseOver","MouseUp","Wheel","KeyDown","KeyPress","KeyUp","Blur","Change","Focus","Input","Invalid","Reset","Search","Select","Submit","Drag","DragEnd","DragEnter","DragLeave","DragOver","DragStart","Drop","AfterPrint","BeforePrint","BeforeUnload","Error","HashChange","Load","Offline","Online","PageHide","PageShow","Resize","Scroll","Unload","Abort","CanPlay","CanPlayThrough","DurationChange","Emptied","Ended","LoadedData","LoadedMetadata","LoadStart","Pause","Play","Playing","Progress","RateChange","Seeked","Seeking","Stalled","Suspend","TimeUpdate","VolumeChange","Waiting","TouchCancel","TouchEnd","TouchMove","TouchStart","AnimationEnd","AnimationIteration","AnimationStart","TransitionEnd","Copy","Cut","Paste","FocusIn","FocusOut","ContextMenu"];function b(e){this.$element=e,this.$observer=null,a.emit("NDElementCreated",e,this)}b.prototype.__$isNDElement=!0,b.prototype.valueOf=function(){return this.$element},b.prototype.ref=function(e,t){return e[t]=this.$element,this},b.prototype.unmountChildren=function(){let e=this.$element;for(let t=0,n=e.children.length;t<n;t++){let n=e.children[t];n.$ndProx||n.nd?.remove(),n=null}return e=null,this},b.prototype.remove=function(){let e=this.$element;return e.nd.unmountChildren(),e.$ndProx=null,delete e.nd?.on?.prevent,delete e.nd?.on,delete e.nd,e=null,this},b.prototype.lifecycle=function(e){return this.$observer=this.$observer||f.watch(this.$element),e.mounted&&this.$observer.mounted(e.mounted),e.unmounted&&this.$observer.unmounted(e.unmounted),this},b.prototype.mounted=function(e){return this.lifecycle({mounted:e})},b.prototype.unmounted=function(e){return this.lifecycle({unmounted:e})},b.prototype.htmlElement=function(){return this.$element},b.prototype.node=b.prototype.htmlElement,b.prototype.shadow=function(e,t=null){const n=this.$element,r=Array.from(n.childNodes),o=n.attachShadow({mode:e});if(t){const e=document.createElement("style");e.textContent=t,o.appendChild(e)}return n.append=o.append.bind(o),n.appendChild=o.appendChild.bind(o),o.append(...r),this},b.prototype.openShadow=function(e=null){return this.shadow("open",e)},b.prototype.closedShadow=function(e=null){return this.shadow("closed",e)},b.prototype.attach=function(e){return e.$hydrate(this.$element),this.$element};const g={},v=function(e,t,n){if(!e)return;if(!g[t]){const r=new WeakMap;return g[t]=r,void r.set(e,n)}const r=g[t];if(!r.has(e))return void r.set(e,n);const o=r.get(e);A.isArray(o)?o.push(n):r.set(e,[store[t],n])},y=function(e,t,n){return e.addEventListener(t,t=>{t.preventDefault(),n&&n.call(e,t)}),this},w=function(e,t,n){return e.addEventListener(t,t=>{t.stopPropagation(),n&&n.call(e,t)}),this},$=function(e,t,n){return e.addEventListener(t,t=>{t.stopPropagation(),t.preventDefault(),n&&n.call(e,t)}),this},C=function(e,t,n){return n?(e.addEventListener(t,n),this):(function(e,t){e.addEventListener(t,n=>{const r=g[t];if(!r)return;let o=n.target;for(;o&&o!==e;){const e=r.get(o);if(e){if(A.isFunction(e))e.call(o,n);else for(let t=0;t<e.length;t++)e[t].call(o,n);return}o=o.parentElement}})}(e,t),this)};for(const e of m){const t=e.toLowerCase();b.prototype["on"+e]=function(e){return this.$element.addEventListener(t,e),this},b.prototype["onPrevent"+e]=function(e){return y(this.$element,t,e),this},b.prototype["onStop"+e]=function(e){return w(this.$element,t,e),this},b.prototype["onPreventStop"+e]=function(e){return $(this.$element,t,e),this},b.prototype["when"+e]=function(e){return v(this.$element,t,e),this},b.prototype["capture"+e]=function(e){return C(this.$element,t,e),this}}const O=1,S=3,E=11,A={isObservable:e=>e?.__$isObservable||e instanceof u||e instanceof i,isProxy:e=>e?.__isProxy__,isObservableChecker:e=>e?.__$isObservableChecker||e instanceof i,isArray:e=>Array.isArray(e),isString:e=>"string"==typeof e,isNumber:e=>"number"==typeof e,isBoolean:e=>"boolean"==typeof e,isFunction:e=>"function"==typeof e,isAsyncFunction:e=>"function"==typeof e&&"AsyncFunction"===e.constructor.name,isObject:e=>"object"==typeof e,isJson:e=>"object"==typeof e&&null!==e&&!Array.isArray(e)&&"Object"===e.constructor.name,isElement:e=>e&&(e.nodeType===O||e.nodeType===S||e.nodeType===E),isFragment:e=>e?.nodeType===E,isStringOrObservable(e){return this.isString(e)||this.isObservable(e)},isValidChild(e){return null===e||this.isElement(e)||this.isObservable(e)||this.isNDElement(e)||["string","number","boolean"].includes(typeof e)},isNDElement:e=>e?.__$isNDElement||e instanceof b,isValidChildren(e){Array.isArray(e)||(e=[e]);return 0===e.filter(e=>!this.isValidChild(e)).length},validateChildren(e){Array.isArray(e)||(e=[e]);const t=e.filter(e=>!this.isValidChild(e));if(t.length>0)throw new s(`Invalid children detected: ${t.map(e=>typeof e).join(", ")}`);return e},containsObservables:e=>!!e&&(A.isObject(e)&&Object.values(e).some(e=>A.isObservable(e))),containsObservableReference:e=>!(!e||"string"!=typeof e)&&/\{\{#ObItem::\([0-9]+\)\}\}/.test(e),validateAttributes(e){},validateEventCallback(e){if("function"!=typeof e)throw new s("Event callback must be a function")}};function I(e,t=!1){const n=document.createDocumentFragment(),o=document.createComment("Anchor Start : "+e),s=document.createComment("/ Anchor End "+e);n.appendChild(o),n.appendChild(s),n.nativeInsertBefore=n.insertBefore,n.nativeAppendChild=n.appendChild;const i=e=>t||e.firstChild===o&&e.lastChild===s;return n.appendElement=function(e,t=null){const r=o.parentNode,i=t||s;r!==n?r?.insertBefore(e,i):r.nativeInsertBefore(e,i)},n.appendChild=function(e,t=null){const n=s.parentNode;n?function(e,t,n){const r=A.isElement(t)?t:q.getChild(t);e!==r?i(e)&&n===s?e.append(r,n):e.insertBefore(r,n):e.nativeInsertBefore(r,n)}(n,e,t=t??s):r.error("Anchor","Anchor : parent not found",e)},n.removeChildren=function(){const e=s.parentNode;if(e===n)return;if(i(e))return void e.replaceChildren(o,s);let t,r=o.nextSibling;const a=document.createDocumentFragment();for(;r&&r!==s;)t=r.nextSibling,a.append(r),r=t;a.replaceChildren()},n.remove=function(){const e=s.parentNode;if(e===n)return;if(i(e))return void e.replaceChildren(o,s);let t,r=o.nextSibling;for(;r&&r!==s;)t=r.nextSibling,n.nativeAppendChild(r),r=t},n.removeWithAnchors=function(){n.removeChildren(),o.remove(),s.remove()},n.replaceContent=function(e){const t=s.parentNode;t&&(i(t)?t.replaceChildren(o,e,s):(n.removeChildren(),t.insertBefore(e,s)))},n.insertBefore=function(e,t=null){n.appendChild(e,t)},n.clear=function(){n.remove()},n.endElement=function(){return s},n.startElement=function(){return o},n.getByIndex=function(e){let t=o;for(let n=0;n<=e;n++){if(!t.nextSibling)return null;t=t.nextSibling}return t!==o?t:null},n}const k=["checked","selected","disabled","readonly","required","autofocus","multiple","autocomplete","hidden","contenteditable","spellcheck","translate","draggable","async","defer","autoplay","controls","loop","muted","download","reversed","open","default","formnovalidate","novalidate","scoped","itemscope","allowfullscreen","allowpaymentrequest","playsinline"];function x(e){return new u(e)}function N(e,t,n){e.classes.toggle(t,n)}function F(e,t,n){e.style[t]=n}function T(e,t,n){A.isBoolean(n)?e[t]=n:e[t]=n===e.value}function D(e,t,n,r){A.isBoolean(n)?r.set(e[t]):r.set(e.value)}function P(e,t){for(let n in t){const r=t[n];A.isObservable(r)?(e.classes.toggle(n,r.val()),r.subscribe(N.bind(null,e,n))):r.$observer?(e.classes.toggle(n,r.$observer.val()===r.$target),r.$observer.on(r.$target,N.bind(null,e,n))):r.$hydrate?r.$hydrate(e,n):e.classes.toggle(n,r)}t=null}function L(e,t){for(let n in t){const r=t[n];A.isObservable(r)?(e.style[n]=r.val(),r.subscribe(F.bind(null,e,n))):e.style[n]=r}}function R(e,t,n){const r=A.isObservable(n)?n.val():n;A.isBoolean(r)?e[t]=r:e[t]=r===e.value,A.isObservable(n)&&(["checked"].includes(t)&&e.addEventListener("input",D.bind(null,e,t,r)),n.subscribe(T.bind(null,e,t)))}function B(e,t,n){const r=n=>{"value"!==t?e.setAttribute(t,n):e.value=n};r(n.val()),n.subscribe(r),"value"===t&&e.addEventListener("input",()=>n.set(e.value))}x.getById=function(e){const t=o.getObservableById(parseInt(e));if(!t)throw new s("Observable.getById : No observable found with id "+e);return t},x.cleanup=function(e){e.cleanup()},x.autoCleanup=function(e=!1,t={}){if(!e)return;const{interval:n=6e4,threshold:r=100}=t;window.addEventListener("beforeunload",()=>{o.cleanup()}),setInterval(()=>o.cleanObservables(r),n)};const M=new Map;let j=null;const q={createTextNode:()=>(j||(j=document.createTextNode("")),j.cloneNode()),createObservableNode(e,t){const n=q.createTextNode();return t.subscribe(e=>n.nodeValue=e),n.nodeValue=t.val(),e&&e.appendChild(n),n},createHydratableNode(e,t){const n=q.createTextNode();return t.$hydrate(n),n},createStaticTextNode(e,t){let n=q.createTextNode();return n.nodeValue=t,e&&e.appendChild(n),n},createElement(e){if(e){if(M.has(e))return M.get(e).cloneNode();const t=document.createElement(e);return M.set(e,t),t.cloneNode()}return new I("Fragment")},processChildren(e,t){if(null!==e){if(a.emit("BeforeProcessChildren",t),Array.isArray(e))for(let n=0,r=e.length;n<r;n++){let r=this.getChild(e[n]);null!==r&&t.appendChild(r)}else{let n=this.getChild(e);n&&t.appendChild(n)}a.emit("AfterProcessChildren",t)}},getChild(e){if(null===e)return null;if(A.isString(e)&&(e=e.resolveObservableTemplate?e.resolveObservableTemplate():e,A.isString(e)))return q.createStaticTextNode(null,e);if(A.isElement(e))return e;if(A.isObservable(e))return q.createObservableNode(null,e);if(A.isNDElement(e))return e.$element??e.$build?.()??null;if(A.isArray(e)){const t=document.createDocumentFragment();for(let n=0,r=e.length;n<r;n++)t.appendChild(this.getChild(e[n]));return t}return A.isFunction(e)?(a.emit("BeforeProcessComponent",e),this.getChild(e())):e?.$hydrate?q.createHydratableNode(null,e):q.createStaticTextNode(null,e)},processAttributes(e,t){A.isFragment(e)||t&&function(e,t){if(!A.isObject(t))throw new s("Attributes must be an object");for(let n in t){const r=n.toLowerCase();let o=t[r];if(A.isString(o)){if(o=o.resolveObservableTemplate?o.resolveObservableTemplate():o,A.isString(o)){e.setAttribute(r,o);continue}const t=o.filter(e=>A.isObservable(e));o=x.computed(()=>o.map(e=>A.isObservable(e)?e.val():e).join(" ")||" ",t)}"class"===r&&A.isObject(o)?P(e,o):"style"===r&&A.isObject(o)?L(e,o):k.includes(r)?R(e,r,o):A.isObservable(o)?B(e,r,o):o.$hydrate?o.$hydrate(e,r):e.setAttribute(r,o)}}(e,t)},setup:(e,t,n)=>(a.emit("Setup",e,t,n),e)};Object.defineProperty(HTMLElement.prototype,"nd",{configurable:!0,get(){return new b(this)}});const V={getClasses(){return this.$element.className?.split(" ").filter(Boolean)},add(e){const t=this.getClasses();t.indexOf(e)>=0||(t.push(e),this.$element.className=t.join(" "))},remove(e){const t=this.getClasses(),n=t.indexOf(e);n<0||(t.splice(n,1),this.$element.className=t.join(" "))},toggle(e,t=void 0){const n=this.getClasses(),r=n.indexOf(e);if(r>=0){if(!0===t)return;n.splice(r,1)}else{if(!1===t)return;n.push(e)}this.$element.className=n.join(" ")},contains(e){return this.getClasses().indexOf(e)>=0}};Object.defineProperty(HTMLElement.prototype,"classes",{configurable:!0,get(){return{$element:this,...V}}});let _=e=>e;t.ArgTypes={},t.ArgTypes={string:()=>!0,number:()=>!0,boolean:()=>!0,observable:()=>!0,element:()=>!0,function:()=>!0,object:()=>!0,objectNotNull:()=>!0,children:()=>!0,attributes:()=>!0,optional:()=>!0,oneOf:()=>!0};const H=function(e,t=null){if(!A.isJson(e)||e?.$hydrate){const n=t;t=e,e=n}return{props:e,children:t}},W=function(e){return A.isObservable(e)?q.createObservableNode(null,e):q.createStaticTextNode(null,e)};function z(e,t,n,r=null){let{props:o,children:s=null}=H(n,r),i=q.createElement(e),a=t&&"function"==typeof t?t(i):i;return o&&q.processAttributes(a,o),s&&q.processChildren(s,a),q.setup(a,o,t)}function U(e,t){return z.bind(null,e.toLowerCase(),t)}const K=new WeakMap;function J(e){let t=null,n=!1;const r=(e,t)=>{const n=K.get(e);if(3===e.nodeType)return n&&n.value?n.value(t):e.cloneNode(!0);const o=e.cloneNode(e.fullCloneNode);if(n&&(((e,t,n)=>{let r=null;if(t.attributes){r=r||{};for(const e in t.attributes)r[e]=t.attributes[e](...n)}if(t.classes){r=r||{},r.class={};for(const e in t.classes)r.class[e]=t.classes[e](...n)}if(t.styles){r=r||{},r.style={};for(const e in t.styles)r.style[e]=t.styles[e](...n)}r&&q.processAttributes(e,r)})(o,n,t),function(e,t,n){if(!t.attach)return null;t.attach(e,...n)}(o,n,t)),e.fullCloneNode)return o;const s=e.childNodes;for(let e=0,n=s.length;e<n;e++){const n=s[e],i=r(n,t);o.appendChild(i)}return o};this.clone=o=>{if(!t&&(t=e(this),!n)){const e=t.cloneNode(!0);return e.fullCloneNode=!0,e}return n?r(t,o):t.cloneNode(!0)};const o=(e,t)=>({$hydrate:(r,o)=>{n=!0,function(e,t,n,r){K.has(n)||K.set(n,{});const o=K.get(n);"value"!==t?"attach"!==t?(o[t]=o[t]||{},o[t][r]=e):o.attach=e:o.value=e}(e,t,r,o)}});this.style=e=>o(e,"styles"),this.class=e=>o(e,"classes"),this.property=e=>this.value(e),this.value=e=>o("function"!=typeof e?function(t){const n=t[0];return W(n[e])}:function(t){return W(e(...t))},"value"),this.attr=e=>o(e,"attributes"),this.attach=e=>o(e,"attach")}Function.prototype.args=function(...e){return this},Function.prototype.cached=function(...e){let t=null,n=function(){return t};return()=>(t||(t=this.apply(this,e),t.cloneNode?n=function(){return t.cloneNode(!0)}:t.$element&&(n=function(){return new b(t.$element.cloneNode(!0))})),n())},Function.prototype.errorBoundary=function(e){return(...t)=>{try{return this.apply(this,t)}catch(t){return e(t)}}},String.prototype.use=function(e){const t=this;return x.computed(()=>t.replace(/\$\{(.*?)}/g,(t,n)=>{const r=e[n];return A.isObservable(r)?r.val():r}),Object.values(e))},String.prototype.resolveObservableTemplate=function(){return A.containsObservableReference(this)?this.split(/(\{\{#ObItem::\([0-9]+\)\}\})/g).filter(Boolean).map(e=>{if(!A.containsObservableReference(e))return e;const[t,n]=e.match(/\{\{#ObItem::\(([0-9]+)\)\}\}/);return x.getById(n)}):this.valueOf()};const Q=["push","pop","shift","unshift","reverse","sort","splice"];x.array=function(e){if(!Array.isArray(e))throw new s("Observable.array : target must be an array");const t=x(e);a.emit("CreateObservableArray",t),Q.forEach(e=>{t[e]=function(...n){const r=t.val()[e](...n);return t.trigger({action:e,args:n,result:r}),r}}),t.clear=function(){return t.val().length=0,t.trigger({action:"clear"}),!0},t.merge=function(e){t.$value.push(...e),t.trigger({action:"merge",args:e})},t.populateAndRender=function(e,n){t.trigger({action:"populate",args:[t.val(),e,n]})},t.remove=function(e){const n=t.val().splice(e,1);return 0===n.length?[]:(t.trigger({action:"remove",args:[e],result:n[0]}),n)},t.swap=function(e,n){const r=t.val(),o=r.length;if(o<e||o<n)return!1;if(n<e){const t=e;e=n,n=t}const s=r[e],i=r[n];return r[e]=i,r[n]=s,t.trigger({action:"swap",args:[e,n],result:[s,i]}),!0},t.length=function(){return t.val().length};return["map","filter","reduce","some","every","find","findIndex","concat","includes","indexOf"].forEach(e=>{t[e]=(...n)=>t.val()[e](...n)}),t},x.batch=function(e){const t=x(0),n=function(){if(A.isAsyncFunction(e))return e(...arguments).then(()=>{t.trigger()}).catch(e=>{throw e});e(...arguments),t.trigger()};return n.$observer=t,n},x.init=function(e){const t={};for(const n in e){const r=e[n];A.isJson(r)?t[n]=x.init(r):A.isArray(r)?t[n]=x.array(r):t[n]=x(r)}const n=function(){},r=function(e){x.update(o,e)},o=new Proxy(t,{get:(e,o)=>"__isProxy__"===o||("$value"===o?function(){const e={};for(const n in t){const r=t[n];A.isObservable(r)?e[n]=r.val():A.isProxy(r)?e[n]=r.$value:e[n]=r}return e}():"$clone"===o?n:"$observables"===o?Object.values(e):"$updateWith"===o?r:void 0!==e[o]?e[o]:void 0),set:(e,t,n)=>void 0===e[t]||(A.isObservable(n)?e[t].set(n.val()):e[t].set(n),!0)});return o},x.arrayOfObject=function(e){return e.map(e=>x.object(e))},x.value=function(e){if(A.isObservable(e))return e.val();if(A.isProxy(e))return e.$value;if(A.isArray(e)){const t=[];for(let n=0,r=e.length;n<r;n++){const r=e[n];t.push(x.value(r))}return t}return e},x.update=function(e,t){A.isProxy(t)&&(t=t.$value);for(const n in t){const r=e[n],o=t[n];if(A.isObservable(r)){if(A.isArray(o)){r.set([...o]);continue}r.set(o)}else A.isProxy(r)?x.update(r,o):e[n]=o}},x.object=x.init,x.json=x.init,x.computed=function(e,t=[]){const n=new u(e()),r=()=>n.set(e());if(a.emit("CreateObservableComputed",n,t),A.isFunction(t)){if(!A.isObservable(t.$observer))throw new s("Observable.computed : dependencies must be valid batch function");return t.$observer.subscribe(r),n}return t.forEach(e=>{A.isProxy(e)?e.$observables.forEach(e=>{e.subscribe(r)}):e.subscribe(r)}),n};const Z=function(){const e=new Map;return{use(t){const{observer:n,subscribers:r}=e.get(t),o=x(n.val()),s=n.subscribe(e=>o.set(e)),i=o.subscribe(e=>n.set(e));return o.destroy=()=>{s(),i(),o.cleanup()},r.add(o),o},follow(e){return this.use(e)},create(t,n){const r=x(n);return e.set(t,{observer:r,subscribers:new Set}),r},get(t){const n=e.get(t);return n?n.observer:null},getWithSubscribers:t=>e.get(t),delete(t){const n=e.get(t);n&&(n.observer.cleanup(),n.subscribers.forEach(e=>e.destroy()),n.observer.clear())}}}();const G=function(e,t,{comment:n=null,shouldKeepInCache:o=!0}={}){if(!A.isObservable(e))return r.warn("ShowIf","ShowIf : condition must be an Observable / "+n,e);const s=new I("Show if : "+(n||""));let i=null;const a=()=>(i&&o||(i=q.getChild(t),A.isFragment(i)&&(i=Array.from(i.children))),i);return e.val()&&s.appendChild(a()),e.subscribe(e=>{e?s.appendChild(a()):s.remove()}),s},X=function(e,t,n=!0){if(!A.isObservable(e))throw new s("Toggle : condition must be an Observable");const r=new I,o=new Map,i=function(e){if(n&&o.has(e))return o.get(e);let r=t[e];return r?(r=q.getChild(r),A.isFragment(r)&&(r=Array.from(r.children)),n&&o.set(e,r),r):null},a=e.val(),u=i(a);return u&&r.appendChild(u),e.subscribe(e=>{const t=i(e);r.remove(),t&&r.appendChild(t)}),r},Y=function(e,t,n){if(!A.isObservable(e))throw new s("Toggle : condition must be an Observable");return X(e,{true:t,false:n})},ee=U("div"),te=U("span"),ne=U("label"),re=U("p"),oe=re,se=U("strong"),ie=U("h1"),ae=U("h2"),ue=U("h3"),le=U("h4"),ce=U("h5"),he=U("h6"),de=U("br"),pe=U("a"),fe=U("pre"),me=U("code"),be=U("blockquote"),ge=U("hr"),ve=U("em"),ye=U("small"),we=U("mark"),$e=U("del"),Ce=U("ins"),Oe=U("sub"),Se=U("sup"),Ee=U("abbr"),Ae=U("cite"),Ie=U("q"),ke=U("dl"),xe=U("dt"),Ne=U("dd"),Fe=U("form",function(e){return e.submit=function(t){return"function"==typeof t?(e.onSubmit(e=>{e.preventDefault(),t(e)}),e):(this.setAttribute("action",t),e)},e.multipartFormData=function(){return this.setAttribute("enctype","multipart/form-data"),e},e.post=function(t){return this.setAttribute("method","post"),this.setAttribute("action",t),e},e.get=function(e){this.setAttribute("method","get"),this.setAttribute("action",e)},e}),Te=U("input"),De=U("textarea"),Pe=De,Le=U("select"),Re=U("fieldset"),Be=U("option"),Me=U("legend"),je=U("datalist"),qe=U("output"),Ve=U("progress"),_e=U("meter"),He=U("button"),We=U("main"),ze=U("section"),Ue=U("article"),Ke=U("aside"),Je=U("nav"),Qe=U("figure"),Ze=U("figcaption"),Ge=U("header"),Xe=U("footer"),Ye=U("img"),et=function(e,t){return Ye({src:e,...t})},tt=U("details"),nt=U("summary"),rt=U("dialog"),ot=U("menu"),st=U("ol"),it=U("ul"),at=U("li"),ut=at,lt=st,ct=it,ht=U("audio"),dt=U("video"),pt=U("source"),ft=U("track"),mt=U("canvas"),bt=U("svg"),gt=U("time"),vt=U("data"),yt=U("address"),wt=U("kbd"),$t=U("samp"),Ct=U("var"),Ot=U("wbr"),St=U("caption"),Et=U("table"),At=U("thead"),It=U("tfoot"),kt=U("tbody"),xt=U("tr"),Nt=xt,Ft=U("th"),Tt=Ft,Dt=Ft,Pt=U("td"),Lt=Pt,Rt=U("");var Bt=Object.freeze({__proto__:null,Abbr:Ee,Address:yt,Anchor:I,Article:Ue,Aside:Ke,AsyncImg:function(e,t,n,r){const o=et(t||e,n),i=new Image;return i.onload=()=>{A.isFunction(r)&&r(null,o),o.src=e},i.onerror=()=>{A.isFunction(r)&&r(new s("Image not found"))},A.isObservable(e)&&e.subscribe(e=>{i.src=e}),i.src=e,o},Audio:ht,BaseImage:Ye,Blockquote:be,Br:de,Button:He,Canvas:mt,Caption:St,Checkbox:e=>Te({type:"checkbox",...e}),Cite:Ae,Code:me,ColorInput:e=>Te({type:"color",...e}),Data:vt,Datalist:je,DateInput:e=>Te({type:"date",...e}),DateTimeInput:e=>Te({type:"datetime-local",...e}),Dd:Ne,Del:$e,Details:tt,Dialog:rt,Div:ee,Dl:ke,Dt:xe,Em:ve,EmailInput:e=>Te({type:"email",...e}),FieldSet:Re,FigCaption:Ze,Figure:Qe,FileInput:e=>Te({type:"file",...e}),Footer:Xe,ForEach:function(e,t,n,{shouldKeepItemsInCache:o=!1}={}){const i=new I("ForEach"),a=i.endElement();i.startElement();let u=new Map,l=null;const c=new Set,h=e=>{if(!o)for(const[t,n]of u.entries()){if(c.has(t))continue;const r=n.child?.deref();e&&r&&e.removeChild(r),n.indexObserver?.cleanup(),n.child=null,n.indexObserver=null,u.delete(n.keyId),l&&l.delete(n.keyId)}},p=(e,o)=>{const i=d(e,o,n);if(u.has(i)){const e=u.get(i);if(e.indexObserver?.set(o),e.isNew=!1,e.child?.deref())return i;u.delete(i)}try{const n=t.length>=2?x(o):null;let r=q.getChild(t(e,n));if(!r||A.isFragment(r))throw new s("ForEachArray child can't be null or undefined!");u.set(i,{keyId:i,isNew:!0,child:new WeakRef(r),indexObserver:n})}catch(e){throw r.error("ForEach",`Error creating element for key ${i}`,e),e}return i},f=()=>{const t=a.parentNode;if(!t)return;const n=A.isObservable(e)?e.val():e;if(c.clear(),Array.isArray(n))for(let e=0,t=n.length;e<t;e++){const t=p(n[e],e);c.add(t)}else for(const e in n){const t=p(n[e],e);c.add(t)}if(0===c.size)return i.removeChildren(),h(),void l?.clear();h(t),l&&0!==l.size?(()=>{let e=document.createDocumentFragment();const t=Array.from(c);Array.from(l);for(const n in t){const r=t[n],o=u.get(r);if(!o)continue;const s=o.child.deref();s&&e.appendChild(s)}i.replaceContent(e)})():(e=>{const t=document.createDocumentFragment();for(const e of c){const n=u.get(e);if(!n)continue;const r=n.child?.deref();r&&t.appendChild(r)}e.insertBefore(t,a)})(t),l?.clear(),l=new Set([...c])};return f(),A.isObservable(e)&&e.subscribe(f),i},ForEachArray:function(e,t,n,r={}){const o=new I("ForEach Array"),i=o.endElement(),a=o.startElement();let u=new Map,l=0;const c=t.length>=2,h=new WeakMap,p=()=>{o.removeChildren(),g(),l=0},f=(e,t)=>h.has(e)?h.get(e):d(e,t,n),m=e=>y(f(e)),b=(e,t=!0)=>{if(e){if(t){const t=e.child;t?.remove(),u.delete(e.keyId)}e.indexObserver?.deref()?.cleanup()}},g=()=>{if(!r.shouldKeepItemsInCache)if(c){for(const[e,t]of u.entries())b(t,!1);u.clear()}else u.clear()},v=(e,n)=>{const r=f(e,n);if(u.has(r)){const e=u.get(r);e.indexObserver?.deref()?.set(n);const t=e.child;if(t)return t;u.delete(r)}const o=c?x(n):null;let i=q.getChild(t(e,o));if(!i||A.isFragment(i))throw new s("ForEachArray child can't be null or undefined!");return u.set(r,{keyId:r,child:i,indexObserver:o?new WeakRef(o):null}),h.set(e,r),i},y=function(e){const t=u.get(e);if(!t)return null;const n=t.child;return n||(b(t,!1),null)},w=function(e,t){const n=u.get(e);if(!n)return null;const r=n.child;if(!r)return null;t?t.appendChild(r):r.remove()},$={toFragment(e,t=0){const n=document.createDocumentFragment();for(let t=0,r=e.length;t<r;t++)n.appendChild(v(e[t],l)),l++;return n},add(e,t=2){const n=$.toFragment(e);setTimeout(()=>{o.appendElement(n)},t)},replace(e){p(),$.add(e)},reOrder(e){let t=null;const n=document.createDocumentFragment();for(const r of e)t=m(r),t&&n.appendChild(t);t=null,o.appendElement(n,i)},removeOne(e,t){((e,t=!0)=>{b(u.get(e),t)})(f(e,t),!0)},clear:p,merge(e){$.add(e)},push(e){let t=0;r.pushDelay&&(t=r.pushDelay(e)??0),$.add(e,t)},populate([e,t,n]){const r=document.createDocumentFragment();for(let o=0;o<t;o++){const t=n(o);e.push(t),r.append(v(t,o)),l++}o.appendChild(r),r.replaceChildren()},unshift(e){o.insertBefore($.toFragment(e),a.nextSibling)},splice(e,t){const[n,r,...s]=e;let a=null;const u=document.createDocumentFragment();if(t.length>0){let e=f(t[0],n);if(1===t.length)w(e,u);else if(t.length>1){const r=y(e);a=r?.previousSibling;for(let e=0;e<t.length;e++){const r=f(t[e],n+e);w(r,u)}}}else a=i;u.replaceChildren(),s&&s.length&&a&&o.insertBefore($.toFragment(s),a.nextSibling)},reverse(e,t){$.reOrder(t)},sort(e,t){$.reOrder(t)},remove(e,t){$.removeOne(t)},pop(e,t){$.removeOne(t)},shift(e,t){$.removeOne(t)},swap(e,t){const n=i.parentNode;let r=m(t[0]),o=m(t[1]);if(!r||!o)return;const s=o.nextSibling;n.insertBefore(o,r),n.insertBefore(r,s),r=null,o=null}},C=(e,t,n)=>{if("clear"!==n.action&&e.length){if(n?.action)$[n.action]&&$[n.action](n.args,n.result);else{if(0===l)return void $.add(e);$.replace(e)}((e,t=0)=>{if(!c)return;let n=t;for(let r=t,o=e?.length;r<o;r++){const t=u.get(f(e[r],r));t&&(t.indexObserver?.deref()?.set(n),n++)}})(e,0)}else{if(0===l)return;p()}};return e.val().length&&C(e.val(),0,{action:null}),A.isObservable(e)&&e.subscribe(C),o},Form:Fe,Fragment:Rt,H1:ie,H2:ae,H3:ue,H4:le,H5:ce,H6:he,Header:Ge,HiddenInput:e=>Te({type:"hidden",...e}),HideIf:function(e,t,n){const r=x(!e.val());return e.subscribe(e=>r.set(!e)),G(r,t,n)},HideIfNot:function(e,t,n){return G(e,t,n)},Hr:ge,Img:et,Input:Te,Ins:Ce,Kbd:wt,Label:ne,LazyImg:function(e,t){return et(e,{...t,loading:"lazy"})},Legend:Me,Li:ut,Link:pe,ListItem:at,Main:We,Mark:we,Match:X,Menu:ot,Meter:_e,MonthInput:e=>Te({type:"month",...e}),NativeDocumentFragment:I,Nav:Je,NumberInput:e=>Te({type:"number",...e}),Ol:lt,Option:Be,OrderedList:st,Output:qe,P:re,Paragraph:oe,PasswordInput:e=>Te({type:"password",...e}),Pre:fe,Progress:Ve,Quote:Ie,Radio:e=>Te({type:"radio",...e}),RangeInput:e=>Te({type:"range",...e}),ReadonlyInput:e=>Te({readonly:!0,...e}),Samp:$t,SearchInput:e=>Te({type:"search",...e}),Section:ze,Select:Le,ShowIf:G,SimpleButton:(e,t)=>He(e,{type:"button",...t}),Small:ye,Source:pt,Span:te,Strong:se,Sub:Oe,SubmitButton:(e,t)=>He(e,{type:"submit",...t}),Summary:nt,Sup:Se,Svg:bt,Switch:Y,TBody:kt,TBodyCell:Lt,TFoot:It,TFootCell:Dt,THead:At,THeadCell:Tt,TRow:Nt,Table:Et,Td:Pt,TelInput:e=>Te({type:"tel",...e}),TextArea:De,TextInput:Pe,Th:Ft,Time:gt,TimeInput:e=>Te({type:"time",...e}),Tr:xt,Track:ft,Ul:ct,UnorderedList:it,UrlInput:e=>Te({type:"url",...e}),Var:Ct,Video:dt,Wbr:Ot,WeekInput:e=>Te({type:"week",...e}),When:function(e){if(!A.isObservable(e))throw new s("When : condition must be an Observable");let t=null,n=null;return{show(e){return t=e,this},otherwise:r=>(n=r,Y(e,t,n))}}});const Mt={};function jt(e,t,n={}){e="/"+p(e,"/");let r=null,o=n.name||null;const s=n.middlewares||[],i=n.shouldRebuild||!1,a=n.with||{},u={},l=[],c=e=>{if(!e)return null;const[t,n]=e.split(":");let r=a[t];return!r&&n&&(r=Mt[n]),r||(r="[^/]+"),r=r.replace("(","(?:"),{name:t,pattern:`(${r})`}},h=()=>{if(r)return r;const t=e.replace(/\{(.*?)}/gi,(e,t)=>{const n=c(t);return n&&n.pattern?(u[n.name]=n.pattern,l.push(n.name),n.pattern):e});return r=new RegExp("^"+t+"$"),r};this.name=()=>o,this.component=()=>t,this.middlewares=()=>s,this.shouldRebuild=()=>i,this.path=()=>e,this.match=function(e){e="/"+p(e,"/");if(!h().exec(e))return!1;const t={};return h().exec(e).forEach((e,n)=>{if(n<1)return;const r=l[n-1];t[r]=e}),t},this.url=function(t){const n=e.replace(/\{(.*?)}/gi,(e,n)=>{const r=c(n);if(t.params&&t.params[r.name])return t.params[r.name];throw new Error(`Missing parameter '${r.name}'`)}),r="object"==typeof t.query?new URLSearchParams(t.query).toString():null;return(t.basePath?t.basePath:"")+(r?`${n}?${r}`:n)}}class qt extends Error{constructor(e,t){super(e),this.context=t}}const Vt=(e,t)=>{const n=[];return e.forEach(e=>{n.push(p(e.suffix,"/"))}),n.push(p(t,"/")),n.join("/")},_t=(e,t)=>{const n=[];return e.forEach(e=>{e.options.middlewares&&n.push(...e.options.middlewares)}),t&&n.push(...t),n},Ht=(e,t)=>{const n=[];return e.forEach(e=>{e.options?.name&&n.push(e.options.name)}),t&&n.push(t),n.join(".")};function Wt(){const e=[];let t=0;const n=n=>{const o=t+n;if(!e[o])return;t=o;const{route:s,params:i,query:a,path:u}=e[o];r(u)},r=e=>{window.location.replace(`${window.location.pathname}${window.location.search}#${e}`)},o=()=>window.location.hash.slice(1);this.push=function(n){const{route:s,params:i,query:a,path:u}=this.resolve(n);u!==o()&&(e.splice(t+1),e.push({route:s,params:i,query:a,path:u}),t++,r(u))},this.replace=function(n){const{route:r,params:s,query:i,path:a}=this.resolve(n);a!==o()&&(e[t]={route:r,params:s,query:i,path:a})},this.forward=function(){return t<e.length-1&&n(1)},this.back=function(){return t>0&&n(-1)},this.init=function(n){window.addEventListener("hashchange",()=>{const{route:e,params:t,query:n,path:r}=this.resolve(o());this.handleRouteChange(e,t,n,r)});const{route:r,params:s,query:i,path:a}=this.resolve(n||o());e.push({route:r,params:s,query:i,path:a}),t=0,this.handleRouteChange(r,s,i,a)}}function zt(){this.push=function(e){try{const{route:t,path:n,params:r,query:o}=this.resolve(e);if(window.history.state&&window.history.state.path===n)return;window.history.pushState({name:t.name(),params:r,path:n},t.name()||n,n),this.handleRouteChange(t,r,o,n)}catch(e){r.error("HistoryRouter","Error in pushState",e)}},this.replace=function(e){const{route:t,path:n,params:o}=this.resolve(e);try{window.history.replaceState({name:t.name(),params:o,path:n},t.name()||n,n),this.handleRouteChange(t,o,{},n)}catch(e){r.error("HistoryRouter","Error in replaceState",e)}},this.forward=function(){window.history.forward()},this.back=function(){window.history.back()},this.init=function(e){window.addEventListener("popstate",e=>{try{if(!e.state||!e.state.path)return;const t=e.state.path,{route:n,params:r,query:o,path:s}=this.resolve(t);if(!n)return;this.handleRouteChange(n,r,o,s)}catch(e){r.error("HistoryRouter","Error in popstate event",e)}});const{route:t,params:n,query:o,path:s}=this.resolve(e||window.location.pathname+window.location.search);this.handleRouteChange(t,n,o,s)}}function Ut(){const e=[];let t=0;const n=n=>{const r=t+n;if(!e[r])return;t=r;const{route:o,params:s,query:i,path:a}=e[r];this.handleRouteChange(o,s,i,a)};this.push=function(n){const{route:r,params:o,query:s,path:i}=this.resolve(n);e[t]&&e[t].path===i||(e.splice(t+1),e.push({route:r,params:o,query:s,path:i}),t++,this.handleRouteChange(r,o,s,i))},this.replace=function(n){const{route:r,params:o,query:s,path:i}=this.resolve(n);e[t]={route:r,params:o,query:s,path:i},this.handleRouteChange(r,o,s,i)},this.forward=function(){return t<e.length-1&&n(1)},this.back=function(){return t>0&&n(-1)},this.init=function(n){const r=n||window.location.pathname+window.location.search,{route:o,params:s,query:i,path:a}=this.resolve(r);e.push({route:o,params:s,query:i,path:a}),t=0,this.handleRouteChange(o,s,i,a)}}const Kt="default";function Jt(e={}){const t=[],n={},o=[],s=[],i={route:null,params:null,query:null,path:null,hash:null};if("hash"===e.mode)Wt.apply(this,[]);else if("history"===e.mode)zt.apply(this,[]);else{if("memory"!==e.mode)throw new qt("Invalid router mode "+e.mode);Ut.apply(this,[])}const a=function(e,t){for(const n of s)try{n(e),t&&t(e)}catch(e){r.warn("Route Listener","Error in listener:",e)}};this.routes=()=>[...t],this.currentState=()=>({...i}),this.add=function(e,r,s){const i=new jt(Vt(o,e),r,{...s,middlewares:_t(o,s?.middlewares||[]),name:s?.name?Ht(o,s.name):null});return t.push(i),i.name()&&(n[i.name()]=i),this},this.group=function(e,t,n){if(!A.isFunction(n))throw new qt("Callback must be a function");return o.push({suffix:e,options:t}),n(),o.pop(),this},this.generateUrl=function(e,t={},r={}){const o=n[e];if(!o)throw new qt(`Route not found for name: ${e}`);return o.url({params:t,query:r})},this.resolve=function(e){if(A.isJson(e)){const t=n[e.name];if(!t)throw new qt(`Route not found for name: ${e.name}`);return{route:t,params:e.params,query:e.query,path:t.url({...e})}}const[r,o]=e.split("?"),s="/"+p(r,"/");let i,a=null;for(const e of t)if(i=e.match(s),i){a=e;break}if(!a)throw new qt(`Route not found for url: ${r}`);const u={};if(o){const e=new URLSearchParams(o).entries();for(const[t,n]of e)u[t]=n}return{route:a,params:i,query:u,path:e}},this.subscribe=function(e){if(!A.isFunction(e))throw new qt("Listener must be a function");return s.push(e),()=>{s.splice(s.indexOf(e),1)}},this.handleRouteChange=function(e,t,n,r){i.route=e,i.params=t,i.query=n,i.path=r;const o=[...e.middlewares(),a];let s=0;const u={...i},l=e=>{if(s++,!(s>=o.length))return o[s](e||u,l)};return o[s](u,l)}}function Qt(e,t){const{to:n,href:r,...o}=e,s=n||r;if(A.isString(s)){const e=Jt.get();return pe({...o,href:s},t).nd.onPreventClick(()=>{e.push(s)})}const i=s.router||Kt,a=Jt.get(i);if(!a)throw new qt('Router not found "'+i+'" for link "'+s.name+'"');const u=a.generateUrl(s.name,s.params,s.query);return pe({...o,href:u},t).nd.onPreventClick(()=>{a.push(u)})}Jt.routers={},Jt.create=function(t,n){if(!A.isFunction(n))throw r.error("Router","Callback must be a function",e),new qt("Callback must be a function");const o=new Jt(t);return Jt.routers[t.name||Kt]=o,n(o),o.init(t.entry),o.mount=function(e){if(A.isString(e)){const t=document.querySelector(e);if(!t)throw new qt(`Container not found for selector: ${e}`);e=t}else if(!A.isElement(e))throw new qt("Container must be a string or an Element");return function(e,t){const n=new Map,r=function(e){t.innerHTML="",t.appendChild(e)},o=function(e){if(!e.route)return;const{route:t,params:o,query:s,path:i}=e;if(n.has(i)){const e=n.get(i);return void r(e)}const a=t.component()({params:o,query:s});n.set(i,a),r(a)};return e.subscribe(o),o(e.currentState()),t}(o,e)},o},Jt.get=function(e){const t=Jt.routers[e||Kt];if(!t)throw new qt(`Router not found for name: ${e}`);return t},Jt.push=function(e,t=null){return Jt.get(t).push(e)},Jt.replace=function(e,t=null){return Jt.get(t).replace(e)},Jt.forward=function(e=null){return Jt.get(e).forward()},Jt.back=function(e=null){return Jt.get(e).back()},Qt.blank=function(e,t){return pe({...e,target:"_blank"},t)};var Zt=Object.freeze({__proto__:null,Link:Qt,RouteParamPatterns:Mt,Router:Jt});return t.ElementCreator=q,t.HtmlElementWrapper=U,t.NDElement=b,t.Observable=x,t.PluginsManager=a,t.Store=Z,t.TemplateCloner=J,t.classPropertyAccumulator=function(e=[]){let t=A.isString(e)?e.split(" ").filter(Boolean):e;const n=A.isArray(t);return{add(e,r=!0){n?t.push(e):t[e]=r},value:()=>n?t.join(" "):{...t}}},t.createTextNode=W,t.cssPropertyAccumulator=function(e={}){let t=A.isString(e)?e.split(";").filter(Boolean):e;const n=A.isArray(t);return{add(e,r){n?t.push(e+" : "+r):t[e]=r},value:()=>n?t.join(";").concat(";"):{...t}}},t.elements=Bt,t.normalizeComponentArgs=H,t.router=Zt,t.useCache=function(e){let t=null;const n=function(n){return t||(t=new J(e)),t.clone(n)};return e.length<2?function(...e){return n(e)}:function(e,t,...r){return n([e,t,...r])}},t.withValidation=_,t}({});
1
+ var NativeDocument=function(t){"use strict";let n={};n={log(){},warn(){},error(){},disable(){}};var r=n;const o=function(){let e=0;const t=new Map;return{register(n){const r=++e;return t.set(r,new WeakRef(n)),r},unregister(e){t.delete(e)},getObservableById:e=>t.get(e)?.deref(),cleanup(){for(const[e,n]of t){const e=n.deref();e&&e.cleanup()}t.clear()},cleanObservables(e){if(t.size<e)return;let n=0;for(const[e,r]of t)r.deref()||(t.delete(e),n++);n>0&&r.log("Memory Auto Clean",`🧹 Cleaned ${n} orphaned observables`)}}}();class s extends Error{constructor(e,t={}){super(e),this.name="NativeDocumentError",this.context=t,this.timestamp=(new Date).toISOString()}}function i(e,t){this.observable=e,this.checker=t,this.unSubscriptions=[]}i.prototype.__$isObservableChecker=!0,i.prototype.subscribe=function(e){const t=this.observable.subscribe(t=>{e&&e(this.checker(t))});return this.unSubscriptions.push(t),t},i.prototype.check=function(e){return this.observable.check(()=>e(this.val()))},i.prototype.val=function(){return this.checker&&this.checker(this.observable.val())},i.prototype.set=function(e){return this.observable.set(e)},i.prototype.trigger=function(){return this.observable.trigger()},i.prototype.cleanup=function(){return this.observable.cleanup()};const a=function(){const e=new Map,t=new Map;return{list:()=>t,add(n,r){if(!n||"object"!=typeof n)throw new Error(`Plugin ${r} must be an object`);if(!(r=r||n.name)||"string"!=typeof r)throw new Error("Please, provide a valid plugin name");if(!e.has(r)){n.$name=r,e.set(r,n),"function"==typeof n?.init&&n.init();for(const e in n)if(/^on[A-Z]/.test(e)){const r=e.replace(/^on/,"");t.has(r)||t.set(r,new Set),t.get(r).add(n)}}},remove(n){if(!e.has(n))return;const r=e.get(n);"function"==typeof r.cleanup&&r.cleanup();for(const[e,n]of t.entries())n.has(r)&&n.delete(r),0===n.size&&t.delete(e);e.delete(n)},emit(e,...n){if(!t.has(e))return;const o=t.get(e);for(const t of o){const o=t["on"+e];if("function"==typeof o)try{o.call(t,...n)}catch(n){r.error("Plugin Manager",`Error in plugin ${t.$name} for event ${e}`,n)}}}}}();function u(e){this.$previousValue=null,this.$currentValue=e,this.$isCleanedUp=!1,this.$listeners=null,this.$watchers=null,this.$memoryId=null,a.emit("CreateObservable",this)}Object.defineProperty(u.prototype,"$value",{get(){return this.$currentValue},set(e){this.set(e)},configurable:!0}),u.prototype.__$isObservable=!0;const l={},c=function(){};u.prototype.triggerFirstListener=function(e){this.$listeners[0](this.$currentValue,this.$previousValue,e||{})},u.prototype.triggerListeners=function(e){const t=this.$listeners,n=this.$previousValue,r=this.$currentValue;e=e||l;for(let o=0,s=t.length;o<s;o++)t[o](r,n,e)};const h=function(e,t){"function"!=typeof e?e.set?e.set(t):e.forEach(e=>{e.set?e.set(t):e(t)}):e(t)};u.prototype.triggerWatchers=function(){if(!this.$watchers)return;const e=this.$watchers,t=this.$previousValue,n=this.$currentValue;if(e.has(n)){const t=e.get(n);h(t,!0)}if(e.has(t)){const n=e.get(t);h(n,!1)}},u.prototype.triggerAll=function(e){this.triggerListeners(e),this.triggerWatchers()},u.prototype.triggerWatchersAndFirstListener=function(e){this.triggerListeners(e),this.triggerWatchers()},u.prototype.assocTrigger=function(){this.$watchers?.size&&this.$listeners?.length?this.trigger=1===this.$listeners.length?this.triggerWatchersAndFirstListener:this.triggerAll:this.$listeners?.length?this.trigger=1===this.$listeners.length?this.triggerFirstListener:this.triggerListeners:this.$watchers?.size?this.trigger=this.triggerWatchers:this.trigger=c},u.prototype.trigger=c,u.prototype.set=function(e){const t="function"==typeof e?e(this.$currentValue):e;this.$currentValue!==t&&(this.$previousValue=this.$currentValue,this.$currentValue=t,a.emit("ObservableBeforeChange",this),this.trigger(),this.$previousValue=null,a.emit("ObservableAfterChange",this))},u.prototype.val=function(){return this.$currentValue},u.prototype.disconnectAll=function(){if(this.$listeners?.splice(0),this.$previousValue=null,this.$currentValue=null,this.$watchers)for(const[e,t]of this.$watchers)I.isArray(t)&&t.splice(0);this.$watchers?.clear(),this.$listeners=null,this.$watchers=null,this.trigger=c},u.prototype.cleanup=function(){o.unregister(this.$memoryId),this.disconnectAll(),this.$isCleanedUp=!0,delete this.$value},u.prototype.subscribe=function(e,t=null){if(this.$listeners=this.$listeners??[],this.$isCleanedUp)return r.warn("Observable subscription","⚠️ Attempted to subscribe to a cleaned up observable."),()=>{};if("function"!=typeof e)throw new s("Callback must be a function");return this.$listeners.push(e),this.assocTrigger(),a.emit("ObservableSubscribe",this,t),()=>{this.unsubscribe(e),this.assocTrigger(),a.emit("ObservableUnsubscribe",this)}},u.prototype.on=function(e,t){this.$watchers=this.$watchers??new Map;let n=this.$watchers.get(e);if(n){if(!I.isArray(n))return n=[n],void this.$watchers.set(e,n);n.push(t)}else this.$watchers.set(e,t);return this.assocTrigger(),()=>{const r=n.indexOf(t);n?.splice(r,1),1===n.size?this.$watchers.set(e,n[0]):0===n.size&&(this.$watchers?.delete(e),n=null),this.assocTrigger()}},u.prototype.unsubscribe=function(e){const t=this.$listeners.indexOf(e);t>-1&&this.$listeners.splice(t,1),this.assocTrigger()},u.prototype.check=function(e){return new i(this,e)},u.prototype.get=u.prototype.check,u.prototype.when=function(e){return{$target:e,$observer:this}},u.prototype.toString=function(){return this.$memoryId||o.register(this),"{{#ObItem::("+this.$memoryId+")}}"},u.prototype.equals=function(e){return I.isObservable(e)?this.$currentValue===e.$currentValue:this.$currentValue===e},u.prototype.toggle=function(){this.set(!this.$currentValue)};const d=(e,t,n)=>{if(I.isFunction(n))return n(e,t);if(I.isObservable(e)){const r=e.val();return r&&n?r[n]:t}return I.isObject(e)?e[n]?.val?.()??e[n]??t:e},p=function(e,t){return e.replace(new RegExp(`^[${t}]+|[${t}]+$`,"g"),"")},f={mounted:new WeakMap,mountedSupposedSize:0,unmounted:new WeakMap,unmountedSupposedSize:0,observer:null,checkMutation:function(e){for(const t of e){if(f.mountedSupposedSize>0)for(const e of t.addedNodes){const t=f.mounted.get(e);t&&(t.inDom=!0,t.mounted&&t.mounted(e))}if(f.unmountedSupposedSize>0)for(const e of t.removedNodes){const t=f.unmounted.get(e);t&&(t.inDom=!1,t.unmounted&&!0===t.unmounted(e)&&(t.disconnect(),e.nd?.remove()))}}},watch:function(e,t=!1){let n={inDom:t,mounted:null,unmounted:null,disconnect:()=>{f.mounted.delete(e),f.unmounted.delete(e),f.mountedSupposedSize--,f.unmountedSupposedSize--,n=null}};return{disconnect:n.disconnect,mounted:t=>{n.mounted=t,f.mounted.set(e,n),f.mountedSupposedSize++},unmounted:t=>{n.unmounted=t,f.unmounted.set(e,n),f.unmountedSupposedSize++}}}};f.observer=new MutationObserver(f.checkMutation),f.observer.observe(document.body,{childList:!0,subtree:!0});const m=["Click","DblClick","MouseDown","MouseEnter","MouseLeave","MouseMove","MouseOut","MouseOver","MouseUp","Wheel","KeyDown","KeyPress","KeyUp","Blur","Change","Focus","Input","Invalid","Reset","Search","Select","Submit","Drag","DragEnd","DragEnter","DragLeave","DragOver","DragStart","Drop","AfterPrint","BeforePrint","BeforeUnload","Error","HashChange","Load","Offline","Online","PageHide","PageShow","Resize","Scroll","Unload","Abort","CanPlay","CanPlayThrough","DurationChange","Emptied","Ended","LoadedData","LoadedMetadata","LoadStart","Pause","Play","Playing","Progress","RateChange","Seeked","Seeking","Stalled","Suspend","TimeUpdate","VolumeChange","Waiting","TouchCancel","TouchEnd","TouchMove","TouchStart","AnimationEnd","AnimationIteration","AnimationStart","TransitionEnd","Copy","Cut","Paste","FocusIn","FocusOut","ContextMenu"];function b(e){this.$element=e,this.$observer=null,a.emit("NDElementCreated",e,this)}b.prototype.__$isNDElement=!0,b.prototype.valueOf=function(){return this.$element},b.prototype.ref=function(e,t){return e[t]=this.$element,this},b.prototype.unmountChildren=function(){let e=this.$element;for(let t=0,n=e.children.length;t<n;t++){let n=e.children[t];n.$ndProx||n.nd?.remove(),n=null}return e=null,this},b.prototype.remove=function(){let e=this.$element;return e.nd.unmountChildren(),e.$ndProx=null,delete e.nd?.on?.prevent,delete e.nd?.on,delete e.nd,e=null,this},b.prototype.lifecycle=function(e){return this.$observer=this.$observer||f.watch(this.$element),e.mounted&&this.$observer.mounted(e.mounted),e.unmounted&&this.$observer.unmounted(e.unmounted),this},b.prototype.mounted=function(e){return this.lifecycle({mounted:e})},b.prototype.unmounted=function(e){return this.lifecycle({unmounted:e})},b.prototype.htmlElement=function(){return this.$element},b.prototype.node=b.prototype.htmlElement,b.prototype.shadow=function(e,t=null){const n=this.$element,r=Array.from(n.childNodes),o=n.attachShadow({mode:e});if(t){const e=document.createElement("style");e.textContent=t,o.appendChild(e)}return n.append=o.append.bind(o),n.appendChild=o.appendChild.bind(o),o.append(...r),this},b.prototype.openShadow=function(e=null){return this.shadow("open",e)},b.prototype.closedShadow=function(e=null){return this.shadow("closed",e)},b.prototype.attach=function(e){return e.$hydrate(this.$element),this.$element};const g={},v=function(e,t,n){if(!e)return;if(!g[t]){const r=new WeakMap;return g[t]=r,void r.set(e,n)}const r=g[t];if(!r.has(e))return void r.set(e,n);const o=r.get(e);I.isArray(o)?o.push(n):r.set(e,[store[t],n])},y=function(e,t,n){return e.addEventListener(t,t=>{t.preventDefault(),n&&n.call(e,t)}),this},w=function(e,t,n){return e.addEventListener(t,t=>{t.stopPropagation(),n&&n.call(e,t)}),this},C=function(e,t,n){return e.addEventListener(t,t=>{t.stopPropagation(),t.preventDefault(),n&&n.call(e,t)}),this},$=function(e,t,n){return n?(e.addEventListener(t,n),this):(function(e,t){e.addEventListener(t,n=>{const r=g[t];if(!r)return;let o=n.target;for(;o&&o!==e;){const e=r.get(o);if(e){if(I.isFunction(e))e.call(o,n);else for(let t=0;t<e.length;t++)e[t].call(o,n);return}o=o.parentElement}})}(e,t),this)};for(const e of m){const t=e.toLowerCase();b.prototype["on"+e]=function(e){return this.$element.addEventListener(t,e),this},b.prototype["onPrevent"+e]=function(e){return y(this.$element,t,e),this},b.prototype["onStop"+e]=function(e){return w(this.$element,t,e),this},b.prototype["onPreventStop"+e]=function(e){return C(this.$element,t,e),this},b.prototype["when"+e]=function(e){return v(this.$element,t,e),this},b.prototype["capture"+e]=function(e){return $(this.$element,t,e),this}}const O=1,S=3,A=8,E=11,I={isObservable:e=>e?.__$isObservable||e instanceof u||e instanceof i,isProxy:e=>e?.__isProxy__,isAnchor:e=>e?.__Anchor__,isObservableChecker:e=>e?.__$isObservableChecker||e instanceof i,isArray:e=>Array.isArray(e),isString:e=>"string"==typeof e,isNumber:e=>"number"==typeof e,isBoolean:e=>"boolean"==typeof e,isFunction:e=>"function"==typeof e,isAsyncFunction:e=>"function"==typeof e&&"AsyncFunction"===e.constructor.name,isObject:e=>"object"==typeof e,isJson:e=>"object"==typeof e&&null!==e&&!Array.isArray(e)&&"Object"===e.constructor.name,isElement:e=>e&&(e.nodeType===O||e.nodeType===S||e.nodeType===E||e.nodeType===A),isFragment:e=>e?.nodeType===E,isStringOrObservable(e){return this.isString(e)||this.isObservable(e)},isValidChild(e){return null===e||this.isElement(e)||this.isObservable(e)||this.isNDElement(e)||["string","number","boolean"].includes(typeof e)},isNDElement:e=>e?.__$isNDElement||e instanceof b,isValidChildren(e){Array.isArray(e)||(e=[e]);return 0===e.filter(e=>!this.isValidChild(e)).length},validateChildren(e){Array.isArray(e)||(e=[e]);const t=e.filter(e=>!this.isValidChild(e));if(t.length>0)throw new s(`Invalid children detected: ${t.map(e=>typeof e).join(", ")}`);return e},containsObservables:e=>!!e&&(I.isObject(e)&&Object.values(e).some(e=>I.isObservable(e))),containsObservableReference:e=>!(!e||"string"!=typeof e)&&/\{\{#ObItem::\([0-9]+\)\}\}/.test(e),validateAttributes(e){},validateEventCallback(e){if("function"!=typeof e)throw new s("Event callback must be a function")}};var x=Object.freeze({__proto__:null,default:I});function k(e,t=!1){const n=document.createDocumentFragment();n.__Anchor__=!0;const o=document.createComment("Anchor Start : "+e),s=document.createComment("/ Anchor End "+e);n.appendChild(o),n.appendChild(s),n.nativeInsertBefore=n.insertBefore,n.nativeAppendChild=n.appendChild;const i=e=>t||e.firstChild===o&&e.lastChild===s;return n.appendElement=function(e,t=null){const r=o.parentNode,i=t||s;r!==n?r?.insertBefore(e,i):r.nativeInsertBefore(e,i)},n.appendChild=function(e,t=null){const o=s.parentNode;o?function(e,t,r){const o=I.isElement(t)?t:V.getChild(t);e!==n?i(e)&&r===s?e.append(o,r):e.insertBefore(o,r):e.nativeInsertBefore(o,r)}(o,e,t=t??s):r.error("Anchor","Anchor : parent not found",e)},n.append=function(...e){return n.appendChild(e)},n.removeChildren=function(){const e=s.parentNode;if(e===n)return;if(i(e))return void e.replaceChildren(o,s);let t,r=o.nextSibling;const a=document.createDocumentFragment();for(;r&&r!==s;)t=r.nextSibling,a.append(r),r=t;a.replaceChildren()},n.remove=function(){if(s.parentNode===n)return;let e,t=o.nextSibling;for(;t&&t!==s;)e=t.nextSibling,n.nativeAppendChild(t),t=e},n.removeWithAnchors=function(){n.removeChildren(),o.remove(),s.remove()},n.replaceContent=function(e){const t=s.parentNode;t&&(i(t)?t.replaceChildren(o,e,s):(n.removeChildren(),t.insertBefore(e,s)))},n.insertBefore=function(e,t=null){n.appendChild(e,t)},n.endElement=function(){return s},n.startElement=function(){return o},n.restore=function(){n.appendChild(n)},n.clear=n.remove,n.detach=n.remove,n.getByIndex=function(e){let t=o;for(let n=0;n<=e;n++){if(!t.nextSibling)return null;t=t.nextSibling}return t!==o?t:null},n}const N=["checked","selected","disabled","readonly","required","autofocus","multiple","autocomplete","hidden","contenteditable","spellcheck","translate","draggable","async","defer","autoplay","controls","loop","muted","download","reversed","open","default","formnovalidate","novalidate","scoped","itemscope","allowfullscreen","allowpaymentrequest","playsinline"];function F(e){return new u(e)}function T(e,t,n){e.classes.toggle(t,n)}function P(e,t,n){e.style[t]=n}function D(e,t,n){I.isBoolean(n)?e[t]=n:e[t]=n===e.value}function L(e,t,n,r){I.isBoolean(n)?r.set(e[t]):r.set(e.value)}function M(e,t){for(let n in t){const r=t[n];I.isObservable(r)?(e.classes.toggle(n,r.val()),r.subscribe(T.bind(null,e,n))):r.$observer?(e.classes.toggle(n,r.$observer.val()===r.$target),r.$observer.on(r.$target,T.bind(null,e,n))):r.$hydrate?r.$hydrate(e,n):e.classes.toggle(n,r)}t=null}function R(e,t){for(let n in t){const r=t[n];I.isObservable(r)?(e.style[n]=r.val(),r.subscribe(P.bind(null,e,n))):e.style[n]=r}}function B(e,t,n){const r=I.isObservable(n)?n.val():n;I.isBoolean(r)?e[t]=r:e[t]=r===e.value,I.isObservable(n)&&(["checked"].includes(t)&&e.addEventListener("input",L.bind(null,e,t,r)),n.subscribe(D.bind(null,e,t)))}function _(e,t,n){const r=n=>{"value"!==t?e.setAttribute(t,n):e.value=n};r(n.val()),n.subscribe(r),"value"===t&&e.addEventListener("input",()=>n.set(e.value))}F.getById=function(e){const t=o.getObservableById(parseInt(e));if(!t)throw new s("Observable.getById : No observable found with id "+e);return t},F.cleanup=function(e){e.cleanup()},F.autoCleanup=function(e=!1,t={}){if(!e)return;const{interval:n=6e4,threshold:r=100}=t;window.addEventListener("beforeunload",()=>{o.cleanup()}),setInterval(()=>o.cleanObservables(r),n)};const j=new Map;let q=null;const V={createTextNode:()=>(q||(q=document.createTextNode("")),q.cloneNode()),createObservableNode(e,t){const n=V.createTextNode();return t.subscribe(e=>n.nodeValue=e),n.nodeValue=t.val(),e&&e.appendChild(n),n},createHydratableNode(e,t){const n=V.createTextNode();return t.$hydrate(n),n},createStaticTextNode(e,t){let n=V.createTextNode();return n.nodeValue=t,e&&e.appendChild(n),n},createElement(e){if(e){if(j.has(e))return j.get(e).cloneNode();const t=document.createElement(e);return j.set(e,t),t.cloneNode()}return new k("Fragment")},processChildren(e,t){if(null!==e){if(a.emit("BeforeProcessChildren",t),Array.isArray(e))for(let n=0,r=e.length;n<r;n++){let r=this.getChild(e[n]);null!==r&&t.appendChild(r)}else{let n=this.getChild(e);n&&t.appendChild(n)}a.emit("AfterProcessChildren",t)}},getChild(e){if(null===e)return null;if(I.isString(e)&&(e=e.resolveObservableTemplate?e.resolveObservableTemplate():e,I.isString(e)))return V.createStaticTextNode(null,e);if(I.isElement(e))return e;if(I.isObservable(e))return V.createObservableNode(null,e);if(I.isNDElement(e))return e.$element??e.$build?.()??null;if(I.isArray(e)){const t=document.createDocumentFragment();for(let n=0,r=e.length;n<r;n++)t.appendChild(this.getChild(e[n]));return t}return I.isFunction(e)?(a.emit("BeforeProcessComponent",e),this.getChild(e())):e?.$hydrate?V.createHydratableNode(null,e):V.createStaticTextNode(null,e)},processAttributes(e,t){I.isFragment(e)||t&&function(e,t){if(I.validateAttributes(t),!I.isObject(t))throw new s("Attributes must be an object");for(let n in t){const r=n.toLowerCase();let o=t[r];if(null!=o){if(I.isString(o)){if(o=o.resolveObservableTemplate?o.resolveObservableTemplate():o,I.isString(o)){e.setAttribute(r,o);continue}const t=o.filter(e=>I.isObservable(e));o=F.computed(()=>o.map(e=>I.isObservable(e)?e.val():e).join(" ")||" ",t)}"class"===r&&I.isObject(o)?M(e,o):"style"===r&&I.isObject(o)?R(e,o):N.includes(r)?B(e,r,o):I.isObservable(o)?_(e,r,o):o.$hydrate?o.$hydrate(e,r):e.setAttribute(r,o)}}}(e,t)},setup:(e,t,n)=>(a.emit("Setup",e,t,n),e)};Object.defineProperty(HTMLElement.prototype,"nd",{configurable:!0,get(){return new b(this)}});const H={getClasses(){return this.$element.className?.split(" ").filter(Boolean)},add(e){const t=this.getClasses();t.indexOf(e)>=0||(t.push(e),this.$element.className=t.join(" "))},remove(e){const t=this.getClasses(),n=t.indexOf(e);n<0||(t.splice(n,1),this.$element.className=t.join(" "))},toggle(e,t=void 0){const n=this.getClasses(),r=n.indexOf(e);if(r>=0){if(!0===t)return;n.splice(r,1)}else{if(!1===t)return;n.push(e)}this.$element.className=n.join(" ")},contains(e){return this.getClasses().indexOf(e)>=0}};Object.defineProperty(HTMLElement.prototype,"classes",{configurable:!0,get(){return{$element:this,...H}}});let W=e=>e;t.ArgTypes={},t.ArgTypes={string:()=>!0,number:()=>!0,boolean:()=>!0,observable:()=>!0,element:()=>!0,function:()=>!0,object:()=>!0,objectNotNull:()=>!0,children:()=>!0,attributes:()=>!0,optional:()=>!0,oneOf:()=>!0};const z=function(e,t=null){if(!I.isJson(e)||e?.$hydrate){const n=t;t=e,e=n}return{props:e,children:t}},U=function(e){return I.isObservable(e)?V.createObservableNode(null,e):V.createStaticTextNode(null,e)};function K(e,t,n,r=null){let{props:o,children:s=null}=z(n,r),i=V.createElement(e),a=t&&"function"==typeof t?t(i):i;return o&&V.processAttributes(a,o),s&&V.processChildren(s,a),V.setup(a,o,t)}function J(e,t){return K.bind(null,e.toLowerCase(),t)}const Q=new WeakMap;function Z(e){let t=null,n=!1;const r=(e,t)=>{const n=Q.get(e);if(3===e.nodeType)return n&&n.value?n.value(t):e.cloneNode(!0);const o=e.cloneNode(e.fullCloneNode);if(n&&(((e,t,n)=>{let r=null;if(t.attributes){r=r||{};for(const e in t.attributes)r[e]=t.attributes[e](...n)}if(t.classes){r=r||{},r.class={};for(const e in t.classes)r.class[e]=t.classes[e](...n)}if(t.styles){r=r||{},r.style={};for(const e in t.styles)r.style[e]=t.styles[e](...n)}r&&V.processAttributes(e,r)})(o,n,t),function(e,t,n){if(!t.attach)return null;t.attach(e,...n)}(o,n,t)),e.fullCloneNode)return o;const s=e.childNodes;for(let e=0,n=s.length;e<n;e++){const n=s[e],i=r(n,t);o.appendChild(i)}return o};this.clone=o=>{if(!t&&(t=e(this),!n)){const e=t.cloneNode(!0);return e.fullCloneNode=!0,e}return n?r(t,o):t.cloneNode(!0)};const o=(e,t)=>({$hydrate:(r,o)=>{n=!0,function(e,t,n,r){Q.has(n)||Q.set(n,{});const o=Q.get(n);"value"!==t?"attach"!==t?(o[t]=o[t]||{},o[t][r]=e):o.attach=e:o.value=e}(e,t,r,o)}});this.style=e=>o(e,"styles"),this.class=e=>o(e,"classes"),this.property=e=>this.value(e),this.value=e=>o("function"!=typeof e?function(t){const n=t[0];return U(n[e])}:function(t){return U(e(...t))},"value"),this.attr=e=>o(e,"attributes"),this.attach=e=>o(e,"attach")}function G(e){let t=null,n=null;this.render=r=>{if(t||(t=e(this)),!n)return t;for(const e in n){(0,n[e])(...r)}return t},this.createSection=(e,t)=>{n=n||{};const r=new k("Component "+e);return n[e]=function(...e){r.removeChildren(),t?r.appendChild(t(...e)):r.append(e)},r}}Function.prototype.args=function(...e){return this},Function.prototype.cached=function(...e){let t=null,n=function(){return t};return()=>(t||(t=this.apply(this,e),t.cloneNode?n=function(){return t.cloneNode(!0)}:t.$element&&(n=function(){return new b(t.$element.cloneNode(!0))})),n())},Function.prototype.errorBoundary=function(e){return(...t)=>{try{return this.apply(this,t)}catch(t){return e(t)}}},String.prototype.use=function(e){const t=this;return F.computed(()=>t.replace(/\$\{(.*?)}/g,(t,n)=>{const r=e[n];return I.isObservable(r)?r.val():r}),Object.values(e))},String.prototype.resolveObservableTemplate=function(){return I.containsObservableReference(this)?this.split(/(\{\{#ObItem::\([0-9]+\)\}\})/g).filter(Boolean).map(e=>{if(!I.containsObservableReference(e))return e;const[t,n]=e.match(/\{\{#ObItem::\(([0-9]+)\)\}\}/);return F.getById(n)}):this.valueOf()};const X=["push","pop","shift","unshift","reverse","sort","splice"];F.array=function(e){if(!Array.isArray(e))throw new s("Observable.array : target must be an array");const t=F(e);a.emit("CreateObservableArray",t),X.forEach(e=>{t[e]=function(...n){const r=t.val()[e](...n);return t.trigger({action:e,args:n,result:r}),r}}),t.clear=function(){return t.val().length=0,t.trigger({action:"clear"}),!0},t.merge=function(e){t.$value.push(...e),t.trigger({action:"merge",args:e})},t.populateAndRender=function(e,n){t.trigger({action:"populate",args:[t.val(),e,n]})},t.removeItem=function(e){const n=t.val().indexOf(e);return t.remove(n)},t.remove=function(e){const n=t.val().splice(e,1);return 0===n.length?[]:(t.trigger({action:"remove",args:[e],result:n[0]}),n)},t.swap=function(e,n){const r=t.val(),o=r.length;if(o<e||o<n)return!1;if(n<e){const t=e;e=n,n=t}const s=r[e],i=r[n];return r[e]=i,r[n]=s,t.trigger({action:"swap",args:[e,n],result:[s,i]}),!0},t.length=function(){return t.val().length},t.count=e=>{let n=0;return t.val().forEach((t,r)=>{e(t,r)&&n++}),n},t.isEmpty=function(){return 0===t.val().length};return["map","filter","reduce","some","every","find","findIndex","concat","includes","indexOf"].forEach(e=>{t[e]=(...n)=>t.val()[e](...n)}),t},F.batch=function(e){const t=F(0),n=function(){if(I.isAsyncFunction(e))return e(...arguments).then(()=>{t.trigger()}).catch(e=>{throw e});e(...arguments),t.trigger()};return n.$observer=t,n},F.init=function(e){const t={};for(const n in e){const r=e[n];Array.isArray(r)?t[n]=F.array(r):t[n]=F(r)}const n=function(){const e={};for(const n in t){const r=t[n];I.isObservable(r)?e[n]=r.val():I.isProxy(r)?e[n]=r.$value:e[n]=r}return e},r=function(){return F.init(n())},o=function(e){F.update(s,e)},s=new Proxy(t,{get:(e,t)=>"__isProxy__"===t||("$value"===t?n():"$clone"===t?r:"$observables"===t?Object.values(e):"$updateWith"===t?o:void 0!==e[t]?e[t]:void 0),set:(e,t,n)=>void 0===e[t]||(I.isObservable(n)?e[t].set(n.val()):e[t].set(n),!0)});return s},F.arrayOfObject=function(e){return e.map(e=>F.object(e))},F.value=function(e){if(I.isObservable(e))return e.val();if(I.isProxy(e))return e.$value;if(I.isArray(e)){const t=[];for(let n=0,r=e.length;n<r;n++){const r=e[n];t.push(F.value(r))}return t}return e},F.update=function(e,t){I.isProxy(t)&&(t=t.$value);for(const n in t){const r=e[n],o=t[n];if(I.isObservable(r)){if(I.isArray(o)){r.set([...o]);continue}r.set(o)}else I.isProxy(r)?F.update(r,o):e[n]=o}},F.object=F.init,F.json=F.init,F.computed=function(e,t=[]){const n=new u(e()),r=()=>n.set(e());if(a.emit("CreateObservableComputed",n,t),I.isFunction(t)){if(!I.isObservable(t.$observer))throw new s("Observable.computed : dependencies must be valid batch function");return t.$observer.subscribe(r),n}return t.forEach(e=>{I.isProxy(e)?e.$observables.forEach(e=>{e.subscribe(r)}):e.subscribe(r)}),n};const Y=function(){const e=new Map;return{use(t){const{observer:n,subscribers:r}=e.get(t),o=F(n.val()),s=n.subscribe(e=>o.set(e)),i=o.subscribe(e=>n.set(e));return o.destroy=()=>{s(),i(),o.cleanup()},r.add(o),o},follow(e){return this.use(e)},create(t,n){const r=F(n);return e.set(t,{observer:r,subscribers:new Set}),r},get(t){const n=e.get(t);return n?n.observer:null},getWithSubscribers:t=>e.get(t),delete(t){const n=e.get(t);n&&(n.observer.cleanup(),n.subscribers.forEach(e=>e.destroy()),n.observer.clear())}}}();const ee=function(e,t,{comment:n=null,shouldKeepInCache:o=!0}={}){if(!I.isObservable(e))return r.warn("ShowIf","ShowIf : condition must be an Observable / "+n,e);const s=new k("Show if : "+(n||""));let i=null;const a=()=>(i&&o||(i=V.getChild(t),I.isFragment(i)&&(i=Array.from(i.childNodes))),i);return e.val()&&s.appendChild(a()),e.subscribe(e=>{e?s.appendChild(a()):s.remove()}),s},te=function(e,t,n=!0){if(!I.isObservable(e))throw new s("Toggle : condition must be an Observable");const r=new k("Match"),o=new Map,i=function(e){if(n&&o.has(e))return o.get(e);let r=t[e];return r?(r=V.getChild(r),I.isFragment(r)&&(r=Array.from(r.children)),n&&o.set(e,r),r):null},a=e.val(),u=i(a);return u&&r.appendChild(u),e.subscribe(e=>{const t=i(e);r.remove(),t&&r.appendChild(t)}),r},ne=function(e,t,n){if(!I.isObservable(e))throw new s("Toggle : condition must be an Observable");return te(e,{true:t,false:n})},re=J("div"),oe=J("span"),se=J("label"),ie=J("p"),ae=ie,ue=J("strong"),le=J("h1"),ce=J("h2"),he=J("h3"),de=J("h4"),pe=J("h5"),fe=J("h6"),me=J("br"),be=J("a"),ge=J("pre"),ve=J("code"),ye=J("blockquote"),we=J("hr"),Ce=J("em"),$e=J("small"),Oe=J("mark"),Se=J("del"),Ae=J("ins"),Ee=J("sub"),Ie=J("sup"),xe=J("abbr"),ke=J("cite"),Ne=J("q"),Fe=J("dl"),Te=J("dt"),Pe=J("dd"),De=J("form",function(e){return e.submit=function(t){return"function"==typeof t?(e.onSubmit(e=>{e.preventDefault(),t(e)}),e):(this.setAttribute("action",t),e)},e.multipartFormData=function(){return this.setAttribute("enctype","multipart/form-data"),e},e.post=function(t){return this.setAttribute("method","post"),this.setAttribute("action",t),e},e.get=function(e){this.setAttribute("method","get"),this.setAttribute("action",e)},e}),Le=J("input"),Me=J("textarea"),Re=Me,Be=J("select"),_e=J("fieldset"),je=J("option"),qe=J("legend"),Ve=J("datalist"),He=J("output"),We=J("progress"),ze=J("meter"),Ue=J("button"),Ke=J("main"),Je=J("section"),Qe=J("article"),Ze=J("aside"),Ge=J("nav"),Xe=J("figure"),Ye=J("figcaption"),et=J("header"),tt=J("footer"),nt=J("img"),rt=function(e,t){return nt({src:e,...t})},ot=J("details"),st=J("summary"),it=J("dialog"),at=J("menu"),ut=J("ol"),lt=J("ul"),ct=J("li"),ht=ct,dt=ut,pt=lt,ft=J("audio"),mt=J("video"),bt=J("source"),gt=J("track"),vt=J("canvas"),yt=J("svg"),wt=J("time"),Ct=J("data"),$t=J("address"),Ot=J("kbd"),St=J("samp"),At=J("var"),Et=J("wbr"),It=J("caption"),xt=J("table"),kt=J("thead"),Nt=J("tfoot"),Ft=J("tbody"),Tt=J("tr"),Pt=Tt,Dt=J("th"),Lt=Dt,Mt=Dt,Rt=J("td"),Bt=Rt,_t=J("");var jt=Object.freeze({__proto__:null,Abbr:xe,Address:$t,Anchor:k,Article:Qe,Aside:Ze,AsyncImg:function(e,t,n,r){const o=rt(t||e,n),i=new Image;return i.onload=()=>{I.isFunction(r)&&r(null,o),o.src=e},i.onerror=()=>{I.isFunction(r)&&r(new s("Image not found"))},I.isObservable(e)&&e.subscribe(e=>{i.src=e}),i.src=e,o},Audio:ft,BaseImage:nt,Blockquote:ye,Br:me,Button:Ue,Canvas:vt,Caption:It,Checkbox:e=>Le({type:"checkbox",...e}),Cite:ke,Code:ve,ColorInput:e=>Le({type:"color",...e}),Data:Ct,Datalist:Ve,DateInput:e=>Le({type:"date",...e}),DateTimeInput:e=>Le({type:"datetime-local",...e}),Dd:Pe,Del:Se,Details:ot,Dialog:it,Div:re,Dl:Fe,Dt:Te,Em:Ce,EmailInput:e=>Le({type:"email",...e}),FieldSet:_e,FigCaption:Ye,Figure:Xe,FileInput:e=>Le({type:"file",...e}),Footer:tt,ForEach:function(e,t,n,{shouldKeepItemsInCache:o=!1}={}){const i=new k("ForEach"),a=i.endElement();i.startElement();let u=new Map,l=null;const c=new Set,h=e=>{if(!o)for(const[t,n]of u.entries()){if(c.has(t))continue;const r=n.child?.deref();e&&r&&e.removeChild(r),n.indexObserver?.cleanup(),n.child=null,n.indexObserver=null,u.delete(n.keyId),l&&l.delete(n.keyId)}},p=(e,o)=>{const i=d(e,o,n);if(u.has(i)){const e=u.get(i);if(e.indexObserver?.set(o),e.isNew=!1,e.child?.deref())return i;u.delete(i)}try{const n=t.length>=2?F(o):null;let r=V.getChild(t(e,n));if(!r||I.isFragment(r))throw new s("ForEachArray child can't be null or undefined!");u.set(i,{keyId:i,isNew:!0,child:new WeakRef(r),indexObserver:n})}catch(e){throw r.error("ForEach",`Error creating element for key ${i}`,e),e}return i},f=()=>{const t=a.parentNode;if(!t)return;const n=I.isObservable(e)?e.val():e;if(c.clear(),Array.isArray(n))for(let e=0,t=n.length;e<t;e++){const t=p(n[e],e);c.add(t)}else for(const e in n){const t=p(n[e],e);c.add(t)}if(0===c.size)return i.removeChildren(),h(),void l?.clear();h(t),l&&0!==l.size?(()=>{let e=document.createDocumentFragment();const t=Array.from(c);Array.from(l);for(const n in t){const r=t[n],o=u.get(r);if(!o)continue;const s=o.child.deref();s&&e.appendChild(s)}i.replaceContent(e)})():(e=>{const t=document.createDocumentFragment();for(const e of c){const n=u.get(e);if(!n)continue;const r=n.child?.deref();r&&t.appendChild(r)}e.insertBefore(t,a)})(t),l?.clear(),l=new Set([...c])};return f(),I.isObservable(e)&&e.subscribe(f),i},ForEachArray:function(e,t,n,r={}){const o=new k("ForEach Array"),i=o.endElement(),a=o.startElement();let u=new Map,l=0;const c=t.length>=2,h=new WeakMap,p=()=>{o.removeChildren(),g(),l=0},f=(e,t)=>h.has(e)?h.get(e):d(e,t,n),m=e=>y(f(e)),b=(e,t=!0)=>{if(e){if(t){const t=e.child;t?.remove(),u.delete(e.keyId)}e.indexObserver?.deref()?.cleanup()}},g=()=>{if(!r.shouldKeepItemsInCache)if(c){for(const[e,t]of u.entries())b(t,!1);u.clear()}else u.clear()},v=(e,n)=>{const r=f(e,n);if(u.has(r)){const e=u.get(r);e.indexObserver?.deref()?.set(n);const t=e.child;if(t)return t;u.delete(r)}const o=c?F(n):null;let i=V.getChild(t(e,o));if(!i||I.isFragment(i))throw new s("ForEachArray child can't be null or undefined!");return u.set(r,{keyId:r,child:i,indexObserver:o?new WeakRef(o):null}),h.set(e,r),i},y=function(e){const t=u.get(e);if(!t)return null;const n=t.child;return n||(b(t,!1),null)},w=function(e,t){const n=u.get(e);if(!n)return null;const r=n.child;if(!r)return null;t?t.appendChild(r):r.remove()},C={toFragment(e,t=0){const n=document.createDocumentFragment();for(let t=0,r=e.length;t<r;t++)n.appendChild(v(e[t],l)),l++;return n},add(e,t=2){const n=C.toFragment(e);setTimeout(()=>{o.appendElement(n)},t)},replace(e){p(),C.add(e)},reOrder(e){let t=null;const n=document.createDocumentFragment();for(const r of e)t=m(r),t&&n.appendChild(t);t=null,o.appendElement(n,i)},removeOne(e,t){((e,t=!0)=>{b(u.get(e),t)})(f(e,t),!0)},clear:p,merge(e){C.add(e)},push(e){let t=0;r.pushDelay&&(t=r.pushDelay(e)??0),C.add(e,t)},populate([e,t,n]){const r=document.createDocumentFragment();for(let o=0;o<t;o++){const t=n(o);e.push(t),r.append(v(t,o)),l++}o.appendChild(r),r.replaceChildren()},unshift(e){o.insertBefore(C.toFragment(e),a.nextSibling)},splice(e,t){const[n,r,...s]=e;let a=null;const u=document.createDocumentFragment();if(t.length>0){let e=f(t[0],n);if(1===t.length)w(e,u);else if(t.length>1){const r=y(e);a=r?.previousSibling;for(let e=0;e<t.length;e++){const r=f(t[e],n+e);w(r,u)}}}else a=i;u.replaceChildren(),s&&s.length&&a&&o.insertBefore(C.toFragment(s),a.nextSibling)},reverse(e,t){C.reOrder(t)},sort(e,t){C.reOrder(t)},remove(e,t){C.removeOne(t)},pop(e,t){C.removeOne(t)},shift(e,t){C.removeOne(t)},swap(e,t){const n=i.parentNode;let r=m(t[0]),o=m(t[1]);if(!r||!o)return;const s=o.nextSibling;n.insertBefore(o,r),n.insertBefore(r,s),r=null,o=null}},$=(e,t,n)=>{if("clear"!==n.action&&e.length){if(n?.action)C[n.action]&&C[n.action](n.args,n.result);else{if(0===l)return void C.add(e);C.replace(e)}((e,t=0)=>{if(!c)return;let n=t;for(let r=t,o=e?.length;r<o;r++){const t=u.get(f(e[r],r));t&&(t.indexObserver?.deref()?.set(n),n++)}})(e,0)}else{if(0===l)return;p()}};return e.val().length&&$(e.val(),0,{action:null}),I.isObservable(e)&&e.subscribe($),o},Form:De,Fragment:_t,H1:le,H2:ce,H3:he,H4:de,H5:pe,H6:fe,Header:et,HiddenInput:e=>Le({type:"hidden",...e}),HideIf:function(e,t,n){const r=F(!e.val());return e.subscribe(e=>r.set(!e)),ee(r,t,n)},HideIfNot:function(e,t,n){return ee(e,t,n)},Hr:we,Img:rt,Input:Le,Ins:Ae,Kbd:Ot,Label:se,LazyImg:function(e,t){return rt(e,{...t,loading:"lazy"})},Legend:qe,Li:ht,Link:be,ListItem:ct,Main:Ke,Mark:Oe,Match:te,Menu:at,Meter:ze,MonthInput:e=>Le({type:"month",...e}),NativeDocumentFragment:k,Nav:Ge,NumberInput:e=>Le({type:"number",...e}),Ol:dt,Option:je,OrderedList:ut,Output:He,P:ie,Paragraph:ae,PasswordInput:e=>Le({type:"password",...e}),Pre:ge,Progress:We,Quote:Ne,Radio:e=>Le({type:"radio",...e}),RangeInput:e=>Le({type:"range",...e}),ReadonlyInput:e=>Le({readonly:!0,...e}),Samp:St,SearchInput:e=>Le({type:"search",...e}),Section:Je,Select:Be,ShowIf:ee,SimpleButton:(e,t)=>Ue(e,{type:"button",...t}),Small:$e,Source:bt,Span:oe,Strong:ue,Sub:Ee,SubmitButton:(e,t)=>Ue(e,{type:"submit",...t}),Summary:st,Sup:Ie,Svg:yt,Switch:ne,TBody:Ft,TBodyCell:Bt,TFoot:Nt,TFootCell:Mt,THead:kt,THeadCell:Lt,TRow:Pt,Table:xt,Td:Rt,TelInput:e=>Le({type:"tel",...e}),TextArea:Me,TextInput:Re,Th:Dt,Time:wt,TimeInput:e=>Le({type:"time",...e}),Tr:Tt,Track:gt,Ul:pt,UnorderedList:lt,UrlInput:e=>Le({type:"url",...e}),Var:At,Video:mt,Wbr:Et,WeekInput:e=>Le({type:"week",...e}),When:function(e){if(!I.isObservable(e))throw new s("When : condition must be an Observable");let t=null,n=null;return{show(e){return t=e,this},otherwise:r=>(n=r,ne(e,t,n))}},createPortal:function(e,{parent:t,name:n="unnamed"}={}){const r=k("Portal "+n);return r.appendChild(V.getChild(e)),(t||document.body).appendChild(r),r}});const qt={};function Vt(e,t,n={}){e="/"+p(e,"/");let r=null,o=n.name||null;const s=n.middlewares||[],i=n.shouldRebuild||!1,a=n.with||{},u=n.layout||null,l={},c=[],h=e=>{if(!e)return null;const[t,n]=e.split(":");let r=a[t];return!r&&n&&(r=qt[n]),r||(r="[^/]+"),r=r.replace("(","(?:"),{name:t,pattern:`(${r})`}},d=()=>{if(r)return r;const t=e.replace(/\{(.*?)}/gi,(e,t)=>{const n=h(t);return n&&n.pattern?(l[n.name]=n.pattern,c.push(n.name),n.pattern):e});return r=new RegExp("^"+t+"$"),r};this.name=()=>o,this.component=()=>t,this.middlewares=()=>s,this.shouldRebuild=()=>i,this.path=()=>e,this.layout=()=>u,this.match=function(e){e="/"+p(e,"/");if(!d().exec(e))return!1;const t={};return d().exec(e).forEach((e,n)=>{if(n<1)return;const r=c[n-1];t[r]=e}),t},this.url=function(t){const n=e.replace(/\{(.*?)}/gi,(e,n)=>{const r=h(n);if(t.params&&t.params[r.name])return t.params[r.name];throw new Error(`Missing parameter '${r.name}'`)}),r="object"==typeof t.query?new URLSearchParams(t.query).toString():null;return(t.basePath?t.basePath:"")+(r?`${n}?${r}`:n)}}class Ht extends Error{constructor(e,t){super(e),this.context=t}}const Wt=(e,t)=>{const n=[];return e.forEach(e=>{n.push(p(e.suffix,"/"))}),n.push(p(t,"/")),n.join("/")},zt=(e,t)=>{const n=[];return e.forEach(e=>{e.options.middlewares&&n.push(...e.options.middlewares)}),t&&n.push(...t),n},Ut=(e,t)=>{const n=[];return e.forEach(e=>{e.options?.name&&n.push(e.options.name)}),t&&n.push(t),n.join(".")},Kt=e=>e[e.length-1]?.options?.layout||null;function Jt(){const e=[];let t=0;const n=n=>{const o=t+n;if(!e[o])return;t=o;const{route:s,params:i,query:a,path:u}=e[o];r(u)},r=e=>{window.location.replace(`${window.location.pathname}${window.location.search}#${e}`)},o=()=>window.location.hash.slice(1);this.push=function(n){const{route:s,params:i,query:a,path:u}=this.resolve(n);u!==o()&&(e.splice(t+1),e.push({route:s,params:i,query:a,path:u}),t++,r(u))},this.replace=function(n){const{route:r,params:s,query:i,path:a}=this.resolve(n);a!==o()&&(e[t]={route:r,params:s,query:i,path:a})},this.forward=function(){return t<e.length-1&&n(1)},this.back=function(){return t>0&&n(-1)},this.init=function(n){window.addEventListener("hashchange",()=>{const{route:e,params:t,query:n,path:r}=this.resolve(o());this.handleRouteChange(e,t,n,r)});const{route:r,params:s,query:i,path:a}=this.resolve(n||o());e.push({route:r,params:s,query:i,path:a}),t=0,this.handleRouteChange(r,s,i,a)}}function Qt(){this.push=function(e){try{const{route:t,path:n,params:r,query:o}=this.resolve(e);if(window.history.state&&window.history.state.path===n)return;window.history.pushState({name:t.name(),params:r,path:n},t.name()||n,n),this.handleRouteChange(t,r,o,n)}catch(e){r.error("HistoryRouter","Error in pushState",e)}},this.replace=function(e){const{route:t,path:n,params:o}=this.resolve(e);try{window.history.replaceState({name:t.name(),params:o,path:n},t.name()||n,n),this.handleRouteChange(t,o,{},n)}catch(e){r.error("HistoryRouter","Error in replaceState",e)}},this.forward=function(){window.history.forward()},this.back=function(){window.history.back()},this.init=function(e){window.addEventListener("popstate",e=>{try{if(!e.state||!e.state.path)return;const t=e.state.path,{route:n,params:r,query:o,path:s}=this.resolve(t);if(!n)return;this.handleRouteChange(n,r,o,s)}catch(e){r.error("HistoryRouter","Error in popstate event",e)}});const{route:t,params:n,query:o,path:s}=this.resolve(e||window.location.pathname+window.location.search);this.handleRouteChange(t,n,o,s)}}function Zt(){const e=[];let t=0;const n=n=>{const r=t+n;if(!e[r])return;t=r;const{route:o,params:s,query:i,path:a}=e[r];this.handleRouteChange(o,s,i,a)};this.push=function(n){const{route:r,params:o,query:s,path:i}=this.resolve(n);e[t]&&e[t].path===i||(e.splice(t+1),e.push({route:r,params:o,query:s,path:i}),t++,this.handleRouteChange(r,o,s,i))},this.replace=function(n){const{route:r,params:o,query:s,path:i}=this.resolve(n);e[t]={route:r,params:o,query:s,path:i},this.handleRouteChange(r,o,s,i)},this.forward=function(){return t<e.length-1&&n(1)},this.back=function(){return t>0&&n(-1)},this.init=function(n){const r=n||window.location.pathname+window.location.search,{route:o,params:s,query:i,path:a}=this.resolve(r);e.push({route:o,params:s,query:i,path:a}),t=0,this.handleRouteChange(o,s,i,a)}}const Gt="default";function Xt(e={}){const t=[],n={},o=[],s=[],i={route:null,params:null,query:null,path:null,hash:null};if("hash"===e.mode)Jt.apply(this,[]);else if("history"===e.mode)Qt.apply(this,[]);else{if("memory"!==e.mode)throw new Ht("Invalid router mode "+e.mode);Zt.apply(this,[])}const a=function(e,t){for(const n of s)try{n(e),t&&t(e)}catch(e){r.warn("Route Listener","Error in listener:",e)}};this.routes=()=>[...t],this.currentState=()=>({...i}),this.add=function(e,r,s){const i=new Vt(Wt(o,e),r,{...s,middlewares:zt(o,s?.middlewares||[]),name:s?.name?Ut(o,s.name):null,layout:s?.layout||Kt(o)});return t.push(i),i.name()&&(n[i.name()]=i),this},this.group=function(e,t,n){if(!I.isFunction(n))throw new Ht("Callback must be a function");return o.push({suffix:e,options:t}),n(),o.pop(),this},this.generateUrl=function(e,t={},r={}){const o=n[e];if(!o)throw new Ht(`Route not found for name: ${e}`);return o.url({params:t,query:r})},this.resolve=function(e){if(I.isJson(e)){const t=n[e.name];if(!t)throw new Ht(`Route not found for name: ${e.name}`);return{route:t,params:e.params,query:e.query,path:t.url({...e})}}const[r,o]=e.split("?"),s="/"+p(r,"/");let i,a=null;for(const e of t)if(i=e.match(s),i){a=e;break}if(!a)throw new Ht(`Route not found for url: ${r}`);const u={};if(o){const e=new URLSearchParams(o).entries();for(const[t,n]of e)u[t]=n}return{route:a,params:i,query:u,path:e}},this.subscribe=function(e){if(!I.isFunction(e))throw new Ht("Listener must be a function");return s.push(e),()=>{s.splice(s.indexOf(e),1)}},this.handleRouteChange=function(e,t,n,r){i.route=e,i.params=t,i.query=n,i.path=r;const o=[...e.middlewares(),a];let s=0;const u={...i},l=e=>{if(s++,!(s>=o.length))return o[s](e||u,l)};return o[s](u,l)}}function Yt(e,t){const{to:n,href:r,...o}=e,s=n||r;if(I.isString(s)){const e=Xt.get();return be({...o,href:s},t).nd.onPreventClick(()=>{e.push(s)})}const i=s.router||Gt,a=Xt.get(i);if(!a)throw new Ht('Router not found "'+i+'" for link "'+s.name+'"');const u=a.generateUrl(s.name,s.params,s.query);return be({...o,href:u},t).nd.onPreventClick(()=>{a.push(u)})}Xt.routers={},Xt.create=function(t,n){if(!I.isFunction(n))throw r.error("Router","Callback must be a function",e),new Ht("Callback must be a function");const o=new Xt(t);return Xt.routers[t.name||Gt]=o,n(o),o.init(t.entry),o.mount=function(e){if(I.isString(e)){const t=document.querySelector(e);if(!t)throw new Ht(`Container not found for selector: ${e}`);e=t}else if(!I.isElement(e))throw new Ht("Container must be a string or an Element");return function(e,t){const n=new Map,r=function(e,n){t.innerHTML="";const r=n.layout();r?t.appendChild(r(e)):t.appendChild(e)},o=function(e){if(!e.route)return;const{route:t,params:o,query:s,path:i}=e;if(n.has(i)){const e=n.get(i);return void r(e,t)}const a=t.component()({params:o,query:s});n.set(i,a),r(a,t)};return e.subscribe(o),o(e.currentState()),t}(o,e)},o},Xt.get=function(e){const t=Xt.routers[e||Gt];if(!t)throw new Ht(`Router not found for name: ${e}`);return t},Xt.push=function(e,t=null){return Xt.get(t).push(e)},Xt.replace=function(e,t=null){return Xt.get(t).replace(e)},Xt.forward=function(e=null){return Xt.get(e).forward()},Xt.back=function(e=null){return Xt.get(e).back()},Yt.blank=function(e,t){return be({...e,target:"_blank"},t)};var en=Object.freeze({__proto__:null,Link:Yt,RouteParamPatterns:qt,Router:Xt});return t.ElementCreator=V,t.HtmlElementWrapper=J,t.NDElement=b,t.Observable=F,t.PluginsManager=a,t.SingletonView=G,t.Store=Y,t.TemplateCloner=Z,t.Validator=x,t.classPropertyAccumulator=function(e=[]){let t=I.isString(e)?e.split(" ").filter(Boolean):e;const n=I.isArray(t);return{add(e,r=!0){n?t.push(e):t[e]=r},value:()=>n?t.join(" "):{...t}}},t.createTextNode=U,t.cssPropertyAccumulator=function(e={}){let t=I.isString(e)?e.split(";").filter(Boolean):e;const n=I.isArray(t);return{add(e,r){n?t.push(e+" : "+r):t[e]=r},value:()=>n?t.join(";").concat(";"):{...t}}},t.elements=jt,t.normalizeComponentArgs=z,t.router=en,t.useCache=function(e){let t=null;const n=function(n){return t||(t=new Z(e)),t.clone(n)};return e.length<2?function(...e){return n(e)}:function(e,t,...r){return n([e,t,...r])}},t.useSingleton=function(e){let t=null;return function(...n){return t||(t=new G(e)),t.render(n)}},t.withValidation=W,t}({});
package/elements.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import Anchor from "./src/elements/anchor";
2
+ export { createPortal } from "./src/elements/anchor";
2
3
  export * from './src/elements/index';
3
4
 
4
5
  export { Anchor, Anchor as NativeDocumentFragment };
package/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './types/property-accumulator';
6
6
  export * from './types/validator';
7
7
  export * from './types/args-types';
8
8
  export * from './types/template-cloner';
9
+ export * from './types/singleton';
9
10
 
10
11
  // Main static exports
11
12
  import { ObservableStatic } from './types/observable';
package/index.js CHANGED
@@ -2,13 +2,14 @@ export { default as HtmlElementWrapper, createTextNode } from './src/wrappers/Ht
2
2
  export { ElementCreator } from './src/wrappers/ElementCreator';
3
3
  export { NDElement } from './src/wrappers/NDElement';
4
4
  export { TemplateCloner, useCache } from './src/wrappers/TemplateCloner';
5
+ export { SingletonView, useSingleton } from './src/wrappers/SingletonView';
5
6
  export { default as PluginsManager } from './src/utils/plugins-manager';
6
7
 
7
8
  import './src/utils/prototypes.js';
8
9
 
9
10
  export * from './src/utils/property-accumulator';
10
11
  export * from './src/utils/args-types';
11
- export * from './src/utils/validator'
12
+ export * as Validator from './src/utils/validator'
12
13
  export * from './src/data/Observable';
13
14
  export * from './src/data/observable-helpers/array';
14
15
  export * from './src/data/observable-helpers/batch';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "native-document",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
4
4
  "main": "index.js",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -239,4 +239,14 @@ ObservableItem.prototype.toString = function() {
239
239
  MemoryManager.register(this);
240
240
  }
241
241
  return '{{#ObItem::(' +this.$memoryId+ ')}}';
242
+ };
243
+ ObservableItem.prototype.equals = function(other) {
244
+ if(Validator.isObservable(other)) {
245
+ return this.$currentValue === other.$currentValue;
246
+ }
247
+ return this.$currentValue === other;
248
+ };
249
+
250
+ ObservableItem.prototype.toggle = function() {
251
+ this.set(!this.$currentValue);
242
252
  };
@@ -40,6 +40,12 @@ Observable.array = function(target) {
40
40
  observer.populateAndRender = function(iteration, callback) {
41
41
  observer.trigger({ action: 'populate', args: [observer.val(), iteration, callback] });
42
42
  };
43
+
44
+ observer.removeItem = function(item) {
45
+ const indexOfItem = observer.val().indexOf(item);
46
+ return observer.remove(indexOfItem);
47
+ };
48
+
43
49
  observer.remove = function(index) {
44
50
  const deleted = observer.val().splice(index, 1);
45
51
  if(deleted.length === 0) {
@@ -71,14 +77,32 @@ Observable.array = function(target) {
71
77
 
72
78
  observer.length = function() {
73
79
  return observer.val().length;
74
- }
80
+ };
81
+
82
+ /**
83
+ *
84
+ * @param {Function} condition
85
+ * @returns {number}
86
+ */
87
+ observer.count = (condition) => {
88
+ let count = 0;
89
+ observer.val().forEach((item, index) => {
90
+ if(condition(item, index)) {
91
+ count++;
92
+ }
93
+ });
94
+ return count;
95
+ };
96
+ observer.isEmpty = function() {
97
+ return observer.val().length === 0;
98
+ };
75
99
 
76
100
  const overrideMethods = ['map', 'filter', 'reduce', 'some', 'every', 'find', 'findIndex', 'concat', 'includes', 'indexOf'];
77
101
  overrideMethods.forEach((method) => {
78
102
  observer[method] = (...args) => {
79
103
  return observer.val()[method](...args);
80
104
  };
81
- })
105
+ });
82
106
 
83
107
  return observer;
84
108
  };
@@ -1,5 +1,6 @@
1
1
  import Validator from "../../utils/validator";
2
2
  import {Observable} from "../Observable";
3
+ import ObservableItem from "../ObservableItem";
3
4
 
4
5
  /**
5
6
  *
@@ -10,11 +11,7 @@ Observable.init = function(initialValue) {
10
11
  const data = {};
11
12
  for(const key in initialValue) {
12
13
  const itemValue = initialValue[key];
13
- if(Validator.isJson(itemValue)) {
14
- data[key] = Observable.init(itemValue);
15
- continue;
16
- }
17
- else if(Validator.isArray(itemValue)) {
14
+ if(Array.isArray(itemValue)) {
18
15
  data[key] = Observable.array(itemValue);
19
16
  continue;
20
17
  }
@@ -36,7 +33,7 @@ Observable.init = function(initialValue) {
36
33
  return result;
37
34
  };
38
35
  const $clone = function() {
39
-
36
+ return Observable.init($val());
40
37
  };
41
38
  const $updateWith = function(values) {
42
39
  Observable.update(proxy, values);
@@ -5,6 +5,7 @@ import {ElementCreator} from "../wrappers/ElementCreator";
5
5
 
6
6
  export default function Anchor(name, isUniqueChild = false) {
7
7
  const element = document.createDocumentFragment();
8
+ element.__Anchor__ = true;
8
9
 
9
10
  const anchorStart = document.createComment('Anchor Start : '+name);
10
11
  const anchorEnd = document.createComment('/ Anchor End '+name);
@@ -18,16 +19,16 @@ export default function Anchor(name, isUniqueChild = false) {
18
19
  const isParentUniqueChild = (parent) => (isUniqueChild || (parent.firstChild === anchorStart && parent.lastChild === anchorEnd))
19
20
 
20
21
  const insertBefore = function(parent, child, target) {
21
- const element = Validator.isElement(child) ? child : ElementCreator.getChild(child);
22
+ const childElement = Validator.isElement(child) ? child : ElementCreator.getChild(child);
22
23
  if(parent === element) {
23
- parent.nativeInsertBefore(element, target);
24
+ parent.nativeInsertBefore(childElement, target);
24
25
  return;
25
26
  }
26
27
  if(isParentUniqueChild(parent) && target === anchorEnd) {
27
- parent.append(element, target);
28
+ parent.append(childElement, target);
28
29
  return;
29
30
  }
30
- parent.insertBefore(element, target);
31
+ parent.insertBefore(childElement, target);
31
32
  };
32
33
 
33
34
  element.appendElement = function(child, before = null) {
@@ -49,6 +50,9 @@ export default function Anchor(name, isUniqueChild = false) {
49
50
  before = before ?? anchorEnd;
50
51
  insertBefore(parent, child, before);
51
52
  };
53
+ element.append = function(...args ) {
54
+ return element.appendChild(args);
55
+ }
52
56
 
53
57
  element.removeChildren = function() {
54
58
  const parent = anchorEnd.parentNode;
@@ -74,10 +78,6 @@ export default function Anchor(name, isUniqueChild = false) {
74
78
  if(parent === element) {
75
79
  return;
76
80
  }
77
- if(isParentUniqueChild(parent)) {
78
- parent.replaceChildren(anchorStart, anchorEnd);
79
- return;
80
- }
81
81
  let itemToRemove = anchorStart.nextSibling, tempItem;
82
82
  while(itemToRemove && itemToRemove !== anchorEnd) {
83
83
  tempItem = itemToRemove.nextSibling;
@@ -109,9 +109,6 @@ export default function Anchor(name, isUniqueChild = false) {
109
109
  element.appendChild(child, anchor);
110
110
  };
111
111
 
112
- element.clear = function() {
113
- element.remove();
114
- };
115
112
 
116
113
  element.endElement = function() {
117
114
  return anchorEnd;
@@ -120,6 +117,11 @@ export default function Anchor(name, isUniqueChild = false) {
120
117
  element.startElement = function() {
121
118
  return anchorStart;
122
119
  };
120
+ element.restore = function() {
121
+ element.appendChild(element);
122
+ };
123
+ element.clear = element.remove;
124
+ element.detach = element.remove;
123
125
 
124
126
  element.getByIndex = function(index) {
125
127
  let currentNode = anchorStart;
@@ -133,4 +135,18 @@ export default function Anchor(name, isUniqueChild = false) {
133
135
  };
134
136
 
135
137
  return element;
136
- };
138
+ };
139
+
140
+ /**
141
+ *
142
+ * @param {HTMLElement|DocumentFragment|Text|String|Array} children
143
+ * @param {{ parent?: HTMLElement, name?: String}} configs
144
+ * @returns {DocumentFragment}
145
+ */
146
+ export function createPortal(children, { parent, name = 'unnamed' } = {}) {
147
+ const anchor = Anchor('Portal '+name);
148
+ anchor.appendChild(ElementCreator.getChild(children));
149
+
150
+ (parent || document.body).appendChild(anchor);
151
+ return anchor;
152
+ }