@base-framework/base 3.9.7 → 3.9.9

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.
Files changed (43) hide show
  1. package/dist/base.js +1 -1
  2. package/dist/chunks/chunk-3X6POBEJ.js +2 -0
  3. package/dist/chunks/chunk-4T7YWUSM.js +2 -0
  4. package/dist/chunks/chunk-7RJQZEA3.js +2 -0
  5. package/dist/chunks/chunk-DYPO4XWL.js +2 -0
  6. package/dist/chunks/chunk-E3C6NOMV.js +2 -0
  7. package/dist/chunks/chunk-FRCLWWKS.js +2 -0
  8. package/dist/chunks/chunk-G5VVBURO.js +2 -0
  9. package/dist/chunks/chunk-GV7CJS33.js +2 -0
  10. package/dist/chunks/chunk-HT53RXU3.js +2 -0
  11. package/dist/chunks/chunk-IHAOOHJB.js +2 -0
  12. package/dist/chunks/chunk-IHTCTRTS.js +2 -0
  13. package/dist/chunks/chunk-ILT4B3VY.js +2 -0
  14. package/dist/chunks/chunk-J4K3HIHH.js +2 -0
  15. package/dist/chunks/chunk-KJTST4FO.js +2 -0
  16. package/dist/chunks/chunk-LX7KL4UO.js +2 -0
  17. package/dist/chunks/chunk-MXSQXT7V.js +2 -0
  18. package/dist/chunks/chunk-NU5QKZAD.js +2 -0
  19. package/dist/chunks/chunk-QZANICYR.js +2 -0
  20. package/dist/chunks/chunk-RUWEOCXU.js +2 -0
  21. package/dist/chunks/chunk-SHTKCUQM.js +2 -0
  22. package/dist/chunks/chunk-UE5UCB2S.js +2 -0
  23. package/dist/chunks/chunk-UOSGJOHK.js +2 -0
  24. package/dist/chunks/chunk-VH3TSUK5.js +2 -0
  25. package/dist/chunks/chunk-XHKEEED5.js +2 -0
  26. package/dist/modules/ajax.js +1 -1
  27. package/dist/modules/component.js +1 -1
  28. package/dist/modules/data.js +1 -1
  29. package/dist/modules/html.js +1 -1
  30. package/dist/modules/router.js +1 -1
  31. package/dist/modules/state.js +1 -1
  32. package/dist/types/modules/animations/animation.d.ts +7 -0
  33. package/dist/types/modules/component/shorthand-methods.d.ts +1 -0
  34. package/dist/types/modules/component/state-helper.d.ts +22 -6
  35. package/dist/types/modules/data/types/basic-data.d.ts +31 -15
  36. package/dist/types/modules/data/types/deep-data/data-utils.d.ts +1 -15
  37. package/dist/types/modules/data/types/deep-data/deep-data.d.ts +10 -1
  38. package/dist/types/modules/data-binder/data-pub-sub.d.ts +38 -0
  39. package/dist/types/modules/router/utils.d.ts +11 -0
  40. package/dist/types/modules/state/state-tracker.d.ts +48 -6
  41. package/dist/types/shared/lru-cache.d.ts +95 -0
  42. package/dist/types/shared/objects.d.ts +2 -1
  43. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ import{b as k}from"./chunk-7RJQZEA3.js";import{a as pt,b as mt,c as gt,d as yt,e as C,f as y,g as A}from"./chunk-LX7KL4UO.js";import{a as L,b as ut}from"./chunk-ILT4B3VY.js";import{a as dt,c as I,d as ft,f as M}from"./chunk-E3C6NOMV.js";import{b as f,c as p}from"./chunk-R5DHGQZV.js";var q={items:new Map,add(s,t){return this.items.set(s,t),this},get(s){return this.items.get(s)??null}};f.addType("components",s=>{if(!s)return;let t=s.component;!t||!t.isUnit||(t.persistToken&&t.parent&&t.parent.removePersistedChild(t.persistToken),t.rendered===!0&&(t.prepareDestroy(),t.cleanUpAfterDestroy()))});var me=0,W=class{constructor(t,e,r){this.isUnit=!0,this.data=null,this.persist=null,this.nest=null,this.state=null,this.panel=null,this.parent=null,this.unitType=null,this._classId,this.id="",this.cached=[],this.init();let n,i;if(t==null)n={},i=[];else{let o=typeof t;o==="string"||o==="number"?(n={},i=[{tag:"text",textContent:t}]):Array.isArray(t)?(n={},i=t):(n=t||{},i=typeof e=="string"?[{tag:"text",textContent:e}]:e)}this.setupProps(n),this.children=i||[],this.persistedChildren={},this.persistedCount=0,this.onCreated(),this.rendered=!1,this.container=null}init(){this.id="cp-"+me++,this.unitType=this._classId||this.constructor.name.toLowerCase()}declareProps(){}addPersistedChild(t){let e=t.key,r=t.cache,n;r!=null&&e!=null?n="pk:"+r+":"+e:r!=null?n="pk:"+r:e!=null?n="pk:"+e:n="pc"+this.persistedCount++;let i=this.persistedChildren[n];return i&&t.unitType===i.unitType&&t.resumeScope(i),t.persistToken=n,this.persistedChildren[n]=t,n}removePersistedChild(t){this.rendered&&(!t||!this.persistedChildren[t]||delete this.persistedChildren[t])}setupProps(t){if(this.declareProps(),!(!t||typeof t!="object"))for(let e in t)Object.prototype.hasOwnProperty.call(t,e)&&(this[e]=t[e],e==="data"&&(this._externalData=!0))}getChildScope(){return this}getParentContext(){return this.parent?this.parent.getContext():null}setupContext(){if(this._contextResumed)return;let t=this.getParentContext(),e=this.setContext(t);if(e){this.context=e;return}this.context=t,this.setupAddingContext()}setupAddingContext(){let t=this.context,e=this.addContext(t);if(!e)return;let r=e[0];r&&(this.addingContext=!0,this.contextBranchName=r,this.addContextBranch(r,e[1]))}addContextBranch(t,e){this.context??={},this.context[t]=e}setContext(t){return null}addContext(t){return null}removeContext(){this.addingContext&&this.removeContextBranch(this.contextBranchName)}removeContextBranch(t){t&&delete this.context[t]}getContext(){return this.context}onCreated(){}render(){return{}}_cacheRoot(t){return t&&(t.id||(t.id=this.getId()),t.cache="panel",t)}_createLayout(){return this.render()}prepareLayout(){let t=this._createLayout();return this._cacheRoot(t)}afterBuild(){f.add(this.panel,"components",{component:this}),this.rendered=!0,this.afterLayout()}afterLayout(){this.afterSetup()}if(t,e){return t?e||t:null}map(t,e){let r=[];if(!t||t.length<1)return r;for(let n=0,i=t.length;n<i;n++){let o=e(t[n],n);r.push(o)}return r}removeAll(t){return M.removeAll(t)}getId(t){let e=this.id;return typeof t=="string"&&(e+="-"+t),e}cacheEle(t,e){e&&(this[e]=t,this.cached.push(e))}initialize(){this.setupContext(),this.beforeSetup()}beforeSetup(){}afterSetup(){}setup(t){this.setContainer(t),this.initialize()}setContainer(t){this.container=t}_remove(){this.prepareDestroy();let t=this.panel;t&&M.removeElement(t),this.cleanUpAfterDestroy()}cleanUpAfterDestroy(){this.panel=null,this.container=null;let t=this.cached;for(let e=0,r=t.length;e<r;e++)this[t[e]]=null;this.cached=[],this.persist!==!0&&(this.persistedChildren={},this.persistToken=null)}prepareDestroy(){this.persistedCount=0,this.rendered=!1;try{this.beforeDestroy()}catch(t){console.error("Error in beforeDestroy:",t)}this.removeContext(),this.data&&this.persist!==!0&&typeof this.data.unlink=="function"&&this.data.unlink()}beforeDestroy(){}destroy(){this._remove()}};var E=class{static resume(t,e){if(t._externalData){this._resumeExternal(t,e);return}this._resumeOwned(t,e)}static refresh(t){let e=t.setData();e&&t.data&&t.data.set(e.stage),this.refreshContext(t)}static refreshContext(t){let e=t.context;if(!e||!e.data)return;let r=t.getParentContext();if(!r||!r.data)return;let n=r.data.stage,i=e.data.stage,o=null;for(let a in n){if(!Object.prototype.hasOwnProperty.call(n,a))continue;let l=n[a];l!==i[a]&&(o===null&&(o={}),o[a]=l)}o!==null&&(typeof e.data._silentSet=="function"?e.data._silentSet(o):e.data.set(o))}static _resumeExternal(t,e){let r=t.setData();if(!r){t.data=e;return}if(e&&e.stage){let n=e._retainState||r._retainState,i=!n&&(e._refreshState||r._refreshState),o=this._buildExternalUpdates(e.stage,r.stage,n,i);L.isEmpty(o)||r._silentSet(o)}typeof r.flushPending=="function"&&r.flushPending(),t.data=r}static _buildExternalUpdates(t,e,r,n){let i={};for(let o in t){if(!Object.prototype.hasOwnProperty.call(t,o))continue;if(n){Object.prototype.hasOwnProperty.call(e,o)||(i[o]=t[o]);continue}let a=t[o];!r&&a==null||a!==e[o]&&(i[o]=a)}return i}static _resumeOwned(t,e){if(!t.data){t.data=e;return}if(e&&e._retainState){t.data=e;return}if(e&&e.stage){let r=e._refreshState||t.data._refreshState,n=this._buildOwnedUpdates(e.stage,t.data.stage,r);L.isEmpty(n)||t.data._silentSet(n)}t.data&&typeof t.data.flushPending=="function"&&t.data.flushPending()}static _buildOwnedUpdates(t,e,r){let n={};for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;if(r){Object.prototype.hasOwnProperty.call(e,i)||(n[i]=t[i]);continue}let o=t[i];o!=null&&o!==e[i]&&(n[i]=o)}return n}};var N=class{constructor(){this.events=[]}addEvents(t){let e=t.length;if(!(e<1))for(let r=0;r<e;r++){let n=t[r];this.on(n[0],n[1],n[2],n[3])}}on(t,e,r,n){p.on(t,e,r,n),this.events.push({event:t,obj:e,callBack:r,capture:n})}off(t,e,r,n){p.off(t,e,r,n);let i,o=this.events;for(let a=0,l=o.length;a<l;a++)if(i=o[a],i.event===t&&i.obj===e&&i.callBack===r&&i.capture===n){o.splice(a,1);break}}set(){let t=this.events;for(let e=0,r=t.length;e<r;e++){let n=t[e];p.on(n.event,n.obj,n.callBack,n.capture)}}unset(){let t=this.events;for(let e=0,r=t.length;e<r;e++){let n=t[e];p.off(n.event,n.obj,n.callBack,n.capture)}}reset(){this.unset(),this.events=[]}};var F=class{constructor(t,e){this.remoteStates=[],this.callBackStates=[];let r=this.convertStates(e);this.addStatesToTarget(t,r)}addStates(t,e){let r=this.convertStates(e);this.addStatesToTarget(t,r)}createState(t,e,r,n){return{action:t,state:e,callBack:r,targetId:n,token:null,callBackToken:null}}convertStates(t){let e=[];for(let r in t){if(!Object.prototype.hasOwnProperty.call(t,r))continue;if(r==="remotes"){this.setupRemoteStates(t[r],e);continue}let n=null,i=null,o=t[r];o&&typeof o=="object"&&(i=o.callBack,n=o.id||o.targetId,o=o.state),e.push(this.createState(r,o,i,n))}return e}setupRemoteStates(t,e){for(let r=0,n=t.length;r<n;r++){let i=t[r];if(i)for(let o in i){if(!Object.prototype.hasOwnProperty.call(i,o)||o==="id")continue;let a=null,l=i[o],c=l!==null?l:void 0;c&&typeof c=="object"&&(a=c.callBack,c=c.state),e.push(this.createState(o,c,a,i.id))}}}removeRemoteStates(t){let e=this.remoteStates;e&&this.removeActions(t,e)}removeLocalStates(t){let e=this.callBackStates;if(e)for(let r=0,n=e.length;r<n;r++){let i=e[r];i.callBackToken&&(t.off(i.action,i.callBackToken),i.callBackToken=null)}}removeActions(t,e){if(!(e.length<1))for(let r=0,n=e.length;r<n;r++){let i=e[r];i.token&&this.unbindRemoteState(t,i.token),i.targetId&&k.remove(i.targetId,i.action,i.token)}}restore(t){k.restore(t.id,t);let e=this.callBackStates;if(e)for(let n=0,i=e.length;n<i;n++){let o=e[n];o.callBackToken=t.on(o.action,o.callBack)}let r=this.remoteStates;if(r)for(let n=0,i=r.length;n<i;n++){let o=r[n];o.token=this.bindRemoteState(t,o.action,o.targetId)}}bindRemoteState(t,e,r){let n=k.getTarget(r);return t.link(n,e)}unbindRemoteState(t,e){t.unlink(e)}addStatesToTarget(t,e){let r=this.remoteStates;for(let n=0,i=e.length;n<i;n++){let o=e[n],a=this.addAction(t,o);o.targetId&&(o.token=a,r.push(o))}}addAction(t,e){let r,n=e.action,i=e.targetId;i&&(r=this.bindRemoteState(t,n,i)),typeof e.state<"u"&&t.addAction(n,e.state);let o=e.callBack;return typeof o=="function"&&(e.callBackToken=t.on(n,o),this.callBackStates.push(e)),r||null}};var x=class extends W{constructor(t,e,r){super(t,e,r),this.isComponent=!0,this.stateResumed=!1,this.stateTargetId=null,this._externalData=this._externalData??!1,this._setupData()}setData(){return null}_setupData(){if(this.data)return;let t=this.setData();t&&(this.data=t)}resumeScope(t){if(this._resumeData(t.data),this.state=t.state,this.stateHelper=t.stateHelper,this.persistedChildren=t.persistedChildren,t.context){let e=t.context.data;e&&e._refreshState===!0&&e._retainState!==!0||(this.context=t.context,this._contextResumed=!0)}this.id=t.id,this._refreshContextData()}_resumeData(t){E.resume(this,t)}_refreshData(){E.refresh(this)}_refreshContextData(){E.refreshContext(this)}initialize(){this.setupContext(),this.addStates(),this.beforeSetup()}afterLayout(){this.addEvents(),this.afterSetup()}setupStateTarget(t){let e=t||this.stateTargetId||this.id;this.state=k.attach(String(e))}setupStates(){return{}}addStates(){let t=this.state;if(t){this.stateResumed=!0,this.stateHelper?.restore(t);return}let e=this.setupStates();L.isEmpty(e)||this.setStateHelper(e)}setStateHelper(t={}){this.state||(this.setupStateTarget(),this.stateHelper=new F(this.state??{},t))}addState(t){!this.stateHelper||this.stateResumed===!0||this.stateHelper.addStates(this.state,t)}removeStates(){let t=this.state;if(!t)return;let e=this.stateHelper;e&&(e.removeRemoteStates(t),e.removeLocalStates(t)),k.detach(String(t.id)),this.stateResumed=!1}onFlush(t){let e=this.data??this?.context?.data??null;e&&e.onFlush(t)}setEventHelper(){this.events||(this.events=new N)}setupEvents(){return[]}addEvents(){let t=this.setupEvents();t.length<1||(this.setEventHelper(),this.events&&this.events.addEvents(t))}removeEvents(){let t=this.events;t&&t.reset()}prepareDestroy(){this.persistedCount=0,this.rendered=!1;try{this.beforeDestroy()}catch(t){console.error("Error in beforeDestroy:",t)}this.removeEvents(),this.removeStates(),this.removeContext(),this.data&&this.persist!==!0&&this.data.unlink()}};var xt={created:"onCreated",setStates:"setupStates",state:"setupStates",events:"setupEvents",before:"beforeSetup",render:"render",after:"afterSetup",destroy:"beforeDestroy"},St=(s,t)=>typeof s!="function"&&t==="setupStates"?()=>s:s;var rt=(s,t)=>{if(!s)return t;let e=Object.keys(s);for(let r=0,n=e.length;r<n;r++){let i=e[r],o=s[i],a=xt[i]||i;t[a]=St(o,a)}return t},ge=s=>rt(s,{}),ye=0,vt=(s,t)=>{class e extends s{}return Object.assign(e.prototype,t),e.prototype._classId="jot"+ye++,e},B=(s,t=x)=>{s||(s={});let e,r=typeof s;return r==="object"&&s.render?(e=ge(s),vt(t,e)):(e={render:r==="function"?s:()=>s},vt(t,e))};var st=(s,t)=>({attr:s,directive:t});var S=(s,t)=>({key:s,value:t});var wt=(s,t,e,r)=>({tag:s,attr:t,directives:e,children:r});var Ct=null,xe=()=>Ct||(Ct=q.get("watch")),v=class{static getTag(t){return t.tag||"div"}static setupChildren(t){t.nest&&(t.children=t.nest,delete t.nest)}static setElementContent(t,e,r,n){return t==="text"?(n.push({tag:"text",textContent:e}),!0):t==="html"||t==="innerHTML"?(r.push(S("innerHTML",e)),!0):!1}static setTextAsWatcher(t,e,r){t.push(st(S(e,A.getWatcherSettings(r,ft(e))),xe()))}static setButtonType(t,e,r){if(t==="button"){let n=e.type||"button";r.push(S("type",n))}}static parse(t,e){let r=[],n=[],i=t.tag||"div";i==="button"&&r.push(S("type",t.type||"button"));let o=[],a,l;for(let c in t){if(!Object.prototype.hasOwnProperty.call(t,c)||c==="tag"||(a=t[c],a==null))continue;if(c==="children"||c==="nest"){if(Array.isArray(a))for(let d=0;d<a.length;d++)o.push(a[d]);else o.push(a);continue}if((l=q.get(c))!==null){n.push(st(S(c,a),l));continue}let h=typeof a;if(h==="object"){if(A.isWatching(a)){this.setTextAsWatcher(n,c,a);continue}o.push(a);continue}if(h==="function"){let d=a,m=function(g){d.call(this,g,e)};m.originalCallback=d,r.push(S(c,m));continue}if(h==="string"&&a.includes("[[")){this.setTextAsWatcher(n,c,a);continue}if(c==="text"){o.push({tag:"text",textContent:a});continue}if(c==="html"||c==="innerHTML"){r.push(S("innerHTML",a));continue}r.push(S(c,a))}return wt(i,r,n,o)}};var D=class{build(t,e,r){}setupComponent(t,e,r){let n=r?.getChildScope();t.parent=n,n&&n.persist===!0&&t.persist!==!1&&(t.persist=!0,t.parent.addPersistedChild(t)),t.cache&&n&&(n[t.cache]=t),t.setup(e)}buildComponent(t){let e=t.prepareLayout(),r=this.build(e,t.container,t);return t.afterBuild(),t.component&&typeof t.onCreated=="function"&&t.onCreated(t),r}createComponent(t,e,r){return this.setupComponent(t,e,r),this.buildComponent(t),t}setDirectives(t,e,r){}removeNode(t){}removeAll(t){}};var Se=s=>{for(let e in s)if(e!=="tag"&&e!=="textContent")return!1;let t=s.textContent;return typeof t=="string"?t.indexOf("[[")===-1:typeof t!="object"},Q=class extends D{build(t,e,r){let n=y.createDocFragment();if(Array.isArray(t))for(let i=0,o=t.length;i<o;i++)this.buildElement(t[i],n,r);else this.buildElement(t,n,r);return e&&typeof e=="object"&&e.appendChild(n),n}buildElement(t,e,r){if(t){if(t.isUnit===!0){this.createComponent(t,e,r);return}this.createElement(t,e,r)}}createElement(t,e,r){if(t.tag==="text"&&Se(t)){let c=t.textContent;y.createText(c??"",e);return}let n=r?.getChildScope();if(t.data||t.state){this.createTempComponent(t,e,n);return}let i=v.parse(t,n),o=this.createNode(i,e,n);this.cache(o,t.cache,r);let a=i.children;for(let c=0,h=a.length;c<h;c++){let d=a[c];d!==null&&this.buildElement(d,o,r)}let l=i.directives;l.length&&this.setDirectives(o,l,n)}createTempComponent(t,e,r){let n={cache:t.cache,key:t.key,persist:t.persist,_externalData:!0,setData:()=>t.data,...rt(t.methods||{},{}),render(){return{...t,data:null,state:null,methods:null,key:null,persist:null}}};t.state&&(n.setupStateTarget=function(o){this.state=t.state});let i=new x(n);this.createComponent(i,e,r)}setDirectives(t,e,r){for(let n=0,i=e.length;n<i;n++)this.handleDirective(t,e[n],r)}handleDirective(t,e,r){e.directive(t,e.attr.value,r)}cache(t,e,r){r&&e&&r.cacheEle(t,e)}createNode(t,e,r){let n=t.tag;if(n==="text"){let i=t.attr[0],o=i?i.value:"";return y.createText(o,e)}else if(n==="comment"){let i=t.attr[0],o=i?i.value:"";return y.createComment(o,e)}return y.create(n,t.attr,e,r)}removeNode(t){y.removeElement(t)}removeAll(t){y.removeAll(t)}};var ve=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source"]),we=/[&<>"]/,nt=s=>{let t=typeof s=="string"?s:String(s);return we.test(t)?t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):t},O=class{static create(t,e=[],r=""){let n="",i="";for(let o=0,a=e.length;o<a;o++){let l=e[o],c=l.key,h=l.value;if(c==="text"||c==="textContent"){n+=nt(h);continue}if(c==="html"||c==="innerHTML"){n+=h;continue}if(typeof h=="function")continue;let d=c+'="'+nt(h)+'"';i?i+=" "+d:i=d}return ve.has(t)?"<"+t+" "+i+" />":"<"+t+" "+i+">"+n+r+"</"+t+">"}static createText(t){return nt(t)}static createComment(t){return"<!-- "+t+" -->"}};var z=class extends D{build(t,e,r){if(Array.isArray(t)){let n="";for(let i=0,o=t.length;i<o;i++)n+=this.buildElement(t[i],r);return n}return this.buildElement(t,r)}createComponent(t,e,r){return this.setupComponent(t,e,r),this.buildComponent(t)}buildElement(t,e){return t?t.isUnit===!0?this.createComponent(t,{},e):this.createElement(t,e):""}createElement(t,e){let r=v.parse(t,e),n=r.children,i="";for(let o=0,a=n.length;o<a;o++){let l=n[o];l!==null&&(i+=this.buildElement(l,e))}return this.createNode(r,i)}createNode(t,e){let r=t.tag;if(r==="text"){let n=t.attr[0],i=n?n.value:"";return O.createText(i)}else if(r==="comment"){let n=t.attr[0],i=n?n.value:"";return O.createComment(i)}return O.create(r,t.attr,e)}removeAll(t){}};var j=class{static browserIsSupported(){return typeof window<"u"&&typeof document=="object"}static setup(){return this.browserIsSupported()?new Q:new z}};var T=j.setup(),Ce=s=>typeof s=="object"&&s.isUnit===!0,ke=s=>{let t=B(s);return t?new t:null},u=class{static render(t,e,r){return!t||(Ce(t)||(t=ke(t)),!t)?null:T.createComponent(t,e,r)}static build(t,e,r){return T.build(t,e,r)}static rebuild(t,e,r){return T.removeAll(e),this.build(t,e,r)}static setDirectives(t,e,r){T.setDirectives(t,e,r)}static createNode(t,e,r){return T.createNode(t,e,r)}static removeNode(t){T.removeNode(t)}static removeAll(t){T.removeAll(t)}};ut.augment({buildLayout(s,t,e){u.build(s,t,e)}});var it=[],Te=s=>it.indexOf(s)!==-1,be=s=>({tag:"script",src:s.src,async:!1,load(t){it.push(s.src);let e=s.load;e&&e()}}),Pe=s=>({tag:"link",rel:"stylesheet",type:"text/css",href:s.src,load(t){it.push(s.src);let e=s.load;e&&e()}}),$=class{constructor(t){this.percent=0,this.loaded=0,this.total=0,this.callBack=t||null}add(t){this.total++;let e,r=this.update.bind(this);t.indexOf(".css")!==-1?e=Pe({load:r,src:t}):e=be({load:r,src:t}),u.build(e,document.head)}addFiles(t){t&&t.forEach(e=>{Te(e)||this.add(e)})}update(){if(this.updateProgress()<100)return;let e=this.callBack;e&&e()}updateProgress(){return++this.loaded,this.percent=Math.floor(this.loaded/this.total*100)}};var Re=s=>s?typeof s?.prototype?.constructor=="function":!1,b=class{static process(t,e){let r=t.default;return r?e.callback?e.callback(r):(Re(r)?r=new r:r=r(),r.isUnit===!0&&(r.route=e.route,e.persist&&(r.persist=!0)),r):null}static render(t,e,r){let n=u.build(t,null,r),i=n.firstChild||t?.panel;return e.after(n),i}};var Y=class{static load(t,e,r){return t.then(n=>(e&&e(n),n)).catch(n=>{console.error("Error loading module:",n),r&&r(n)})}};var Ie=s=>({tag:"comment",textContent:"import placeholder",onCreated:s.onCreated}),P=new pt(100),Ae=s=>{if(P.has(s)){let r=P.get(s);return r&&typeof r.then!="function"?Promise.resolve(r):r}let t=typeof s,e;if(t==="string")e=import(s);else if(t==="function")e=s();else return s;return e.then(r=>{P.set(s,r)}).catch(()=>{P.delete(s)}),P.set(s,e),e},Ee=s=>{if(!P.has(s))return null;let t=P.get(s);return t&&typeof t.then=="function"?null:t||null},kt=B({declareProps(){this.loaded=!1,this.errorRoot=null,this.generation=0},render(){return Ie({onCreated:s=>{if(this.src){if(this.layout){this.layoutRoot=b.render(this.layout,this.panel,this.parent);return}if(this.depends){new $(()=>{this.loadAndRender(s)}).addFiles(this.depends);return}this.loadAndRender(s)}}})},loadAndRender(s){let t=this.generation,e=Ee(this.src);if(e){this.renderModule(s,e);return}Y.load(Ae(this.src),r=>{t===this.generation&&this.renderModule(s,r)},r=>{t===this.generation&&(this.loaded=!1,this.renderError(s,r))})},renderError(s,t){let e=()=>this.retry(s),r=this.fallback,n=typeof r=="function"?r(t,e):r||{class:"base-import-error",children:[{tag:"span",text:"Failed to load content."},{tag:"button",type:"button",text:"Retry",click:e}]};n&&(this.errorRoot=b.render(n,s,this.parent))},retry(s){this.removeErrorLayout(),this.loadAndRender(s)},removeErrorLayout(){this.errorRoot&&(u.removeNode(this.errorRoot),this.errorRoot=null)},renderModule(s,t){this.loaded=!0;let e=this.layout||b.process(t,{callback:this.callback,route:this.route,persist:this.persist});this.layout=e,this.layoutRoot=b.render(e,s,this.parent)},shouldUpdate(s){return this.updateLayout===!0?!0:this.updateLayout=s&&s.isUnit&&typeof s.update=="function"},updateModuleLayout(s){let t=this.layout;this.shouldUpdate(t)&&t&&t.update(s)},update(s){this.loaded===!0&&this.updateModuleLayout(s)},destroy(){this.generation++,this.removeErrorLayout(),this.layoutRoot&&(u.removeNode(this.layoutRoot),this.persist!==!0&&(this.layoutRoot=null,this.layout=null,this.loaded=!1,this.updateLayout=!1))}});var Tt=s=>{let t=typeof s;return(t==="string"||t==="function"||s instanceof Promise)&&(s={src:s}),new kt(s)};var Be=0,_=class{constructor(t){this.router=t,this.locationId="base-app-router-"+Be++,this.callBack=this.check.bind(this)}setup(){return this.addEvent(),this}check(t){}getScrollPosition(){return{x:window.scrollX,y:window.scrollY}}scrollTo(t){window.scrollTo(t.x,t.y)}addEvent(){return this}};var Pt=typeof navigator<"u"&&/iPad|iPhone|iPod/.test(navigator.userAgent||"")&&!window.MSStream,bt=()=>{Pt&&requestAnimationFrame(()=>requestAnimationFrame(()=>{let s=window.scrollX,t=window.scrollY;window.scrollTo(0,t+1),document.documentElement.offsetHeight,window.scrollTo(s,t)}))},J=class extends _{addEvent(){return p.on("popstate",window,this.callBack),Pt&&(this.pageShowCallBack=this.onPageShow.bind(this),p.on("pageshow",window,this.pageShowCallBack)),this}removeEvent(){return p.off("popstate",window,this.callBack),this.pageShowCallBack&&p.off("pageshow",window,this.pageShowCallBack),this}onPageShow(t){t.persisted&&bt()}check(t){let e=t.state;if(!e||e.location!==this.locationId)return!1;t.preventDefault(),t.stopPropagation(),this.router.checkActiveRoutes(e.uri);let r=e.scrollPosition;r&&this.scrollTo(r),bt()}createState(t,e={}){let r=this.getScrollPosition();return e=e===null?{}:e,{location:this.locationId,...e,scrollPosition:r,uri:t}}addState(t,e,r=!1){let n=window.history,i=n.state;if(i&&i.uri===t)return this;!r&&i&&i.location===this.locationId&&(i.scrollPosition=this.getScrollPosition(),n.replaceState(i,"",window.location.href));let o=this.createState(t,e);return r||(o.scrollPosition={x:0,y:0}),n[r===!1?"pushState":"replaceState"](o,null,t),this}};var K={removeSlashes(s){return typeof s!="string"?"":(s[0]==="/"&&(s=s.substring(1)),s[s.length-1]==="/"&&(s=s.substring(0,s.length-1)),s)},getHashUri(s){if(typeof s!="string")return"";let t=s.indexOf("#");return t===-1?"":s.substring(t+1)}};var V=class extends _{addEvent(){return p.on("hashchange",window,this.callBack),this}removeEvent(){return p.off("hashchange",window,this.callBack),this}check(t){this.router.checkActiveRoutes(K.getHashUri(t.newURL))}addState(t,e,r){return window.location.hash=t,this}};var X=class{static browserIsSupported(){return typeof window=="object"&&"history"in window&&"pushState"in window.history}static setup(t){return this.browserIsSupported()?new J(t).setup():new V(t).setup()}};var ot=class extends x{getChildScope(){return this.parent}},Rt=s=>B(s,ot);var Z=class{constructor(t,e){this.route=t,this.template=e.component,this.component=null,this.hasTemplate=!1,this.setup=!1,this.container=e.container,this.persist=e.persist,this.parent=e.parent}focus(t){this.setup===!1&&(this.route&&typeof this.route.flushPending=="function"&&this.route.flushPending(),this.create()),this.update(t)}setupTemplate(){let e=typeof this.template;e==="function"?this.initializeComponent():e==="object"&&this.initializeTemplateObject(),this.hasTemplate=!0}initializeComponent(){this.template=this.template(),this.initializeTemplateObject()}transferSettings(t){this.persist=this.persist&&t.persist!==!1,Object.assign(t,{route:this.route,persist:this.persist}),this.component=t}initializeTemplateObject(){let t=this.template;if(!t)return;t.isUnit||(this.template=new(Rt(t)));let e=this.template;this.transferSettings(e)}create(){if(this.setupTemplate(),!this.hasTemplate)return;this.setup=!0;let t=this.component;u.render(t,this.container,this.parent)}remove(){if(this.setup!==!0)return;this.setup=!1;let t=this.component;t&&(typeof t.destroy=="function"&&t.destroy(),this.component=null)}update(t){let e=this.component;e&&typeof e.update=="function"&&e.update(t)}};var It=s=>{if(!s.length)return null;let t={};for(let e=0,r=s.length;e<r;e++)t[s[e]]=null;return t},At=s=>{let t=[];if(!s)return t;let e=/[*?]/g;s=s.replace(e,"");let r=/:(.[^./?&($]+)\?*/g,n=s.match(r);if(n===null)return t;for(let i=0,o=n.length;i<o;i++){let a=n[i];a&&t.push(a.replace(":",""))}return t};var De=/(\/):[^/(]*?\?/g,Oe=/\//g,_e=/(\?\/+\*?)/g,Ue=/(:[^/?&($]+)/g,He=/(\*)/g,Le=s=>s.replace(De,t=>t.replace(Oe,"(?:$|/)")),Me=s=>(s=s.replace(_e,"?/*"),s.replace(Ue,t=>t.indexOf(".")<0?"([^/|?]+)":"([^/|?]+.*)")),qe=s=>s.replace(He,".*"),Ge=(s,t)=>s+=t[t.length-1]==="*"?"":"$",Et=s=>{if(!s)return"";let t=s;return t=Le(t),t=Me(t),t=qe(t),t=Ge(t,s),t};var We=0,Bt=(s,t="")=>{let e=s||"",r=typeof t=="string"&&t?t:e,n=null,i=[],o=r.match(/#\{([^}]+)\}/);o&&o[1]&&(n=o[1].trim(),r=r.replace(o[0],""),e=e.replace(o[0],""));let a=r.indexOf("?");if(a>-1){let h=r.substring(a+1);if(h.indexOf("=")>-1){let d=h.split("&");for(let g=0,R=d.length;g<R;g++){let H=d[g];if(!H)continue;let[fe,pe=""]=H.split("="),ht=(fe||"").trim();ht&&i.push({key:ht,value:(pe||"").trim()})}r=r.substring(0,a);let m=e.indexOf("?");m>-1&&(e=e.substring(0,m))}}let l=n!==null||i.length>0;return l&&!r&&(e="*"),{uriPath:e,requiredHash:n,requiredQuery:i,hasConditions:l}},Ne=s=>{if(!s)return"";let t=s.indexOf("?"),e=s.indexOf("#"),r=s.length;return t>-1&&(r=t),e>-1&&e<r&&(r=e),s.substring(0,r)},Fe=s=>{if(!s)return"";let t=s.indexOf("#");return t===-1?"":s.substring(t+1)},Qe=s=>{if(!s)return"";let t=s.indexOf("?");if(t===-1)return"";let e=s.indexOf("#",t);return e===-1?s.substring(t+1):s.substring(t+1,e)},tt=class extends gt{constructor(t,e){let r=t.baseUri,i=Bt(r,t.rawUri).uriPath,o=At(i),a=It(o),l=super(a);return this.uri=r,this.matchUri=i,this.paramKeys=o,this.titleCallBack=e,this.setupRoute(t),this.set("active",!1),l}setup(){this.stage={},this.routeId=null,this.uri=null,this.rawUri=null,this.matchUri="",this.uriQuery=/$^/,this.controller=null,this.paramKeys=[],this.requiredHash=null,this.requiredQuery=[],this.hasConditions=!1,this.titleCallBack=()=>{},this.path=null,this.referralPath=null,this.params=null,this.callBack=null,this.title=null,this.preventScroll=!1,this.scrollTo=null}setupRoute(t){this.routeId=t.id||"bs-rte-"+We++,this.rawUri=t.rawUri||null,this.path=null,this.referralPath=null;let e=Bt(this.uri,this.rawUri||"");this.matchUri=e.uriPath,this.requiredHash=e.requiredHash,this.requiredQuery=e.requiredQuery,this.hasConditions=e.hasConditions;let r=Et(this.matchUri);this.uriQuery=new RegExp("^"+r),this.params=null,this.setupComponentHelper(t),this.callBack=t.callBack,this.title=t.title,this.preventScroll=t.preventScroll||!1,this.scrollTo=t.scrollTo||null}setTitle(t){this.title=t,this.titleCallBack(this,t)}deactivate(){this.set("active",!1);let t=this.controller;t&&t.remove()}getLayout(t){if(t.component)return t.component;let e=t.import;return e?Tt(e):null}setupComponentHelper(t){let e=this.getLayout(t);if(!e)return;let{container:r,persist:n,parent:i}=t,o={component:e,container:r,persist:n,parent:i},a=mt(this);this.controller=new Z(a,o)}resumeRoute(t){let e=this.controller;e&&(e.container=t)}setPath(t,e){this.path=t,this.referralPath=e}select(){this.set("active",!0);let t=this.stage,e=this.callBack;typeof e=="function"&&e(t);let r=this.controller;r&&r.focus(t);let n=this.path;if(!n)return;let i=n.split("#")[1];i&&this.scrollToId(i)}scrollToId(t){if(!t)return;let e=document.getElementById(t);e&&e.scrollIntoView(!0)}match(t){let e=!1,r=Ne(t),n=this.uriQuery||/$^/,i=r.match(n);return i===null?(this.resetParams(),e):Array.isArray(i)?this.matchConditions(t)?(this.setParams(i,1),e=i,e):(this.resetParams(),!1):e}matchConditions(t){if(!this.hasConditions)return!0;if(this.requiredHash!==null&&Fe(t)!==this.requiredHash)return!1;let e=this.requiredQuery||[];if(e.length>0){let r=Qe(t);if(!r)return!1;let n=new URLSearchParams(r);for(let i=0,o=e.length;i<o;i++){let a=e[i];if(!n.has(a.key)||n.get(a.key)!==a.value)return!1}}return!0}resetParams(){this.stage={}}setParams(t,e=0){if(!Array.isArray(t))return;let r=this.paramKeys;if(!r)return;let n={};for(let i=0,o=r.length;i<o;i++){let a=r[i];typeof a<"u"&&(n[a]=t[i+e])}this.set(n)}getParams(){return this.stage}};var ze=s=>{let t=/\w\S*/;return s.replace(t,e=>e.charAt(0).toUpperCase()+e.substring(1).toLowerCase())},je=s=>s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),$e=(s,t)=>{if(s.indexOf(":")===-1)return s;let e=t.stage;for(let r in e)if(Object.prototype.hasOwnProperty.call(e,r)){let n=new RegExp(":"+je(r),"gi");s=s.replace(n,()=>e[r])}return s},Ye=(s,t)=>t&&(typeof t=="function"&&(t=t(s.stage)),t=$e(t,s),ze(t)),Je=(s,t)=>(t!==""&&(s+=" - "+t),s),Dt=(s,t,e)=>t&&(t=Ye(s,t),Je(t,e));var Ke=()=>typeof window<"u"?window.location:{},at=class{constructor(){this.version="1.0.2",this.baseURI="/",this.title="",this.lastPath=null,this.path=null,this.lastMatchedRoute=null,this.lastScrollGroup=null,this.currentGroupId=null,this.scrollWaitToken=0,this.history=null,this.callBackLink=null,this.location=Ke(),this.routes=[],this.switches=new Map,this.switchCount=0,this.data=new yt({path:""})}setupHistory(){this.history=X.setup(this)}createRoute(t){let e=t.uri||"*";return t.rawUri=e,t.baseUri=this.createURI(e),new tt(t,this.updateTitle.bind(this))}add(t){if(typeof t!="object"){let r=arguments;t={uri:r[0],component:r[1],callBack:r[2],title:r[3],id:r[4],container:r[5]}}let e=this.createRoute(t);return this.addRoute(e),e}addRoute(t){this.routes.push(t),this.checkRoute(t,this.getPath())}resume(t,e){t.resumeRoute(e),this.addRoute(t)}getBasePath(){if(!this.basePath){let t=this.baseURI||"";t[t.length-1]!=="/"&&(t+="/"),this.basePath=t}return this.basePath}createURI(t){let e=this.getBasePath(),r=K.removeSlashes(t);return r=r.replace(/^(?:\.\/)+/,""),r==="."&&(r=""),e+r}getRoute(t){let e=this.routes,r=e.length;if(r>0)for(let n=0;n<r;n++){let i=e[n];if(i.uri===t)return i}return null}getRouteById(t){let e=this.routes,r=e.length;if(r>0)for(let n=0;n<r;n++){let i=e[n];if(i.routeId===t)return i}return!1}removeRoute(t){let e=this.routes,r=e.indexOf(t);r>-1&&e.splice(r,1),this.lastMatchedRoute===t&&(this.lastMatchedRoute=null),t&&typeof t.deactivate=="function"&&t.deactivate()}addSwitch(t){let e=this.switchCount++,r=this.getSwitchGroup(e);for(let n=0,i=t.length;n<i;n++){let o=t[n];if(!o)continue;let a=this.createRoute(o);r.push(a)}return this.checkGroupForRegistration(e,r),e}resumeSwitch(t,e){let r=this.switchCount++,n=this.getSwitchGroup(r);for(let i=0,o=t.length;i<o;i++){let l=t[i].component.route;l.resumeRoute(e),n.push(l)}return this.checkGroupForRegistration(r,n),r}checkGroupForRegistration(t,e){let r=this.scrollIntent,n=this.currentGroupId;this.scrollIntent=null,this.currentGroupId=t,this.checkGroup(e,this.getPath()),this.currentGroupId=n;let i=this.scrollIntent;i&&i.type==="target"&&i.groupId!==null&&i.groupId!==void 0&&(this.lastScrollGroup=i.groupId),this.scrollIntent=r}getSwitchGroup(t){let e=this.switches.get(t);if(e)return e;let r=[];return this.switches.set(t,r),r}removeSwitch(t){this.switches.delete(t)}remove(t){t=this.createURI(t);let e=this.getRoute(t);return e&&this.removeRoute(e),this}setup(t,e){this.baseURI=t||"/",this.updateBaseTag(this.baseURI),this.title=typeof e<"u"?e:"",this.setupHistory(),this.data.path=this.getPath(),this.callBackLink=this.checkLink.bind(this),p.on("click",document,this.callBackLink);let r=this.getEndPoint();return this.navigate(r,null,!0),this}updateBaseTag(t){let e=document.getElementsByTagName("base");e.length&&(e[0].href=t)}getParentLink(t){return t.closest("a")}checkLink(t){if(t.ctrlKey===!0)return!0;let e=t.target.closest("a");if(!e||e.target==="_blank"||e.dataset.cancelRoute)return!0;let r=e.getAttribute("href");if(r!==null){let n=this.baseURI,i=n!=="/"?r.replace(n,""):r,o=e.dataset.replace==="true";return this.navigate(i,null,o),t.preventDefault(),t.stopPropagation(),!1}}reset(){let t=this.routes;for(let e=0,r=t.length;e<r;e++){let n=t[e];n&&typeof n.deactivate=="function"&&n.deactivate()}return this.routes=[],this.switches=new Map,this.switchCount=0,this.lastMatchedRoute=null,this}activate(){return this.checkActiveRoutes(),this}navigate(t,e,r){return t=this.createURI(t),this.history.addState(t,e,r),this.updatePath(),this.activate(),this}updatePath(){let t=this.getPath();this.data.path=t}updateTitle(t){if(!t||!t.title)return this;let e=t.title;return document.title=Dt(t,e,this.title),this}checkActiveRoutes(t){if(this.lastPath=this.path,t=t||this.getPath(),this.path=t,this.updatePath(),this.scrollIntent=null,this.scrollWaitToken++,this.lastMatchedRoute&&this.check(this.lastMatchedRoute,t))this.select(this.lastMatchedRoute);else{let e=this.routes,r=e.length;for(let n=0;n<r;n++){let i=e[n];typeof i>"u"||this.checkRoute(i,t)}}this.checkSwitches(t),this.applyScrollIntent()}checkSwitches(t){let e=this.switches;for(let[r,n]of e.entries())this.currentGroupId=r,this.checkGroup(n,t);this.currentGroupId=null}checkGroup(t,e){let r=t.length;if(!r)return;let n=null;for(let a=0;a<r;a++)if(t[a].get("active")){n=t[a];break}let i=!1;n&&(i=n.match(e)!==!1);let o;for(let a=0;a<r;a++){let l=t[a];if(typeof l>"u")continue;(l===n?i:l.match(e))!==!1&&o===void 0&&l.controller&&(o=l)}if(!o){n&&n!==t[0]&&n.deactivate(),this.select(t[0],!0);return}this.select(o),n&&n!==o&&n.deactivate();for(let a=0;a<r;a++){let l=t[a];l&&l!==o&&l!==n&&l.deactivate()}}checkRoute(t,e){let r=this.check(t,e);return r!==!1?(this.select(t),this.lastMatchedRoute=t):t.deactivate(),r}check(t,e){return t?(e=e||this.getPath(),t.match(e)!==!1):!1}select(t,e){t&&(t.setPath(this.path,this.lastPath),t.select(),this.updateTitle(t),e!==!0&&(t.scrollTo?this.scrollIntent={type:"target",selector:t.scrollTo,groupId:this.currentGroupId}:t.preventScroll!==!0&&!this.scrollIntent&&(this.scrollIntent={type:"top"})))}applyScrollIntent(){let t=this.scrollIntent;if(this.scrollIntent=null,!t)return;if(t.type==="top"){this.lastScrollGroup=null,this.checkToScroll(),this.reassertScrollTop();return}if(t.type!=="target")return;let e=t.groupId!==null&&t.groupId!==void 0,r=e&&this.lastScrollGroup===t.groupId;r||(typeof window<"u"&&window.scrollTo(0,0),this.reassertScrollTop()),this.lastScrollGroup=e?t.groupId:null,r&&this.scrollToTarget(t.selector)}reassertScrollTop(){if(typeof window>"u"||typeof requestAnimationFrame>"u")return;let t=++this.scrollWaitToken;requestAnimationFrame(()=>{t===this.scrollWaitToken&&(window.scrollY>0||window.pageYOffset>0)&&window.scrollTo(0,0)})}scrollToTarget(t){if(typeof t!="string"||typeof document>"u")return;let e=a=>{let l=window.getComputedStyle(a),c=l.position==="sticky",h;if(c){let g=a.style.position;a.style.position="static",h=a.getBoundingClientRect().top+window.scrollY,a.style.position=g}else h=a.getBoundingClientRect().top+window.scrollY;let d=c&&parseFloat(l.top)||0,m=h-d;window.scrollY>m&&window.scrollTo(0,m)};if(typeof requestAnimationFrame>"u"){let a=document.querySelector(t);a&&e(a);return}let r=++this.scrollWaitToken,n=30,i=0,o=()=>{if(r!==this.scrollWaitToken)return;let a=document.querySelector(t);if(a){e(a);return}++i<n&&requestAnimationFrame(o)};requestAnimationFrame(o)}checkToScroll(){this.shouldScrollToTop()&&window.scrollTo(0,0)}cleanPath(t){return t?t.split("?")[0].split("#")[0]:"/"}shouldScrollToTop(){let t=this.cleanPath(this.getPath()),r=this.cleanPath(this.lastPath).split("/"),n=t.split("/");if(r.length!==n.length)return!0;let i=r[r.length-1],o=n[n.length-1];return i!==o}getEndPoint(){return this.getPath().replace(this.baseURI,"")||"/"}destroy(){typeof this.callBackLink=="function"&&p.off("click",document,this.callBackLink);let t=this.history;t&&typeof t.removeEvent=="function"&&t.removeEvent()}getPath(){let t=this.location,e=this.path=t.pathname;return this.history.type==="hash"?t.hash.replace("#",""):e+t.search+t.hash}},w=new at;var Ot=(s,t)=>({attr:s,value:t}),Ve=(s,t)=>{if(!t.startsWith(s))return!1;let e=t[s.length];return e===void 0||e==="/"||e==="#"||e==="."||e==="?"},ct=class extends x{beforeSetup(){this.selectedClass=this.activeClass||"active"}render(){let t=this.href,e=this.text,r=this.setupWatchers(t,e);return{tag:"a",class:this.class||this.className||null,onState:["selected",{[this.selectedClass]:!0}],href:this.getString(t),text:this.getString(e),nest:this.nest||this.children,dataStateSet:this.dataSet,"data-replace":this.replace?"true":null,watch:r}}getLinkPath(){return this?.panel?.pathname||null}getString(t){let e=typeof t;return e!=="object"&&e!=="undefined"?t:null}setupWatchers(t,e){let r=this.exact===!0,n=w.data,i=[];t&&typeof t=="object"&&i.push(Ot("href",t)),e&&typeof e=="object"&&i.push(Ot("text",e));let o=null,a="",l="";return i.push({value:["[[path]]",n],callBack:(c,h)=>{if(typeof h.pathname>"u")return;let d=h.getAttribute("href");if(d!==o){o=d;let g=h.pathname+h.search+h.hash;a=g,l=h.hash||h.search?g:h.pathname}let m=r?c===a:Ve(l,c);this.update(m)}}),i}setupStates(){return{selected:!1}}update(t){this.state&&(this.state.selected=t)}};var _t=(s,t,e=null)=>{if(!s)return;let r=null,n=!1,i=()=>{n||(n=!0,r&&(clearTimeout(r),r=null),p.off("animationend",s,o),s&&s.classList.remove(t),e&&e())},o=a=>{a.target===s&&i()};p.on("animationend",s,o),requestAnimationFrame(()=>{if(!s){i();return}s.classList.add(t);try{let a=window.getComputedStyle(s),l=parseFloat(a.animationDuration)*1e3||1e3,c=parseFloat(a.animationDelay)*1e3||0;r=setTimeout(i,l+c+100)}catch{r=setTimeout(i,1e3)}})},Ut=(s,t,e)=>{_t(s,t)},Ht=(s,t,e)=>{let r=()=>{s&&s.remove&&s.remove()};Xe(s,()=>_t(s,t,r),e)};f.addType("manual-destroy",s=>{if(!s)return!1;s.callBack(s.ele,s.parent)});var Xe=(s,t,e)=>{f.add(s,"manual-destroy",{ele:s,callBack:t,parent:e})};var G=(s,t,e,r)=>{if(Array.isArray(e[0])){e.forEach(n=>{n&&G(s,t,n,r)});return}Ze(s,t,e,r)},Ze=(s,t,e,r)=>{let n,i;if(e.length<3?[n,i]=e:[t,n,i]=e,!t||!n)return;if(typeof t.on!="function"){console.warn('Watcher directive: Data source does not have an "on" method. Make sure your component has data, state, or context.data initialized before using watchers like onSet, watch, or [[prop]] syntax.',s,t);return}let o=tr(s,n,i,r);I.watch(s,t,n,o)},tr=(s,t,e,r)=>typeof e=="object"?n=>{sr(s,e,n)}:n=>{rr(s,e,t,n,r)},Lt=new WeakSet,er=(s,t,e)=>{!s||!s.isUnit&&!s.isComponent||Lt.has(e)||Lt.add(e)},rr=(s,t,e,r,n)=>{let i=t(r,s,n);switch(typeof i){case"object":if(i===null)break;er(i,e,s),u.rebuild(i,s,n);break;case"string":let o=dt(s);if(o!=="textContent"){s.setAttribute(o,i);break}M.addHtml(s,i);break}},sr=(s,t,e)=>{let r=Object.keys(t);for(let n=0,i=r.length;n<i;n++){let o=r[n];o&&(t[o]===e?s.classList.add(o):s.classList.remove(o))}};var U=(s,t,e)=>{let r=C(e);G(s,r,t,e)};var Mt=(s,t,e)=>{t&&s.setAttribute("role",t)},nr=s=>(t,e)=>{let r=t?"true":"false";e.setAttribute(s,r)},qt=(s,t,e)=>{if(!t)return;let r=t.role;r&&(s.setAttribute("role",r),t.role=null);let n=Object.keys(t);for(let i=0,o=n.length;i<o;i++){let a=n[i],l=t[a];if(l===null)continue;let c="aria-"+a;if(Array.isArray(l)){let h=l.slice();h.push(nr(c)),U(s,h,e)}else s.setAttribute(c,l)}};var Gt=(s,t,e)=>{if(!t)return;let r=v.parse(t,e);y.addAttributes(s,r.attr,e),u.setDirectives(s,r.directives,e)};f.addType("context",s=>{if(!s)return!1;s.parent.removeContextBranch(s.branch)});var lt=s=>s?s.getContext():null,Wt=(s,t,e)=>{if(typeof t!="function")return;let r=lt(e),n=t(r);Gt(s,n,e)},Nt=(s,t,e)=>{if(typeof t!="function")return;let r=lt(e);t(r)},Ft=(s,t,e)=>{if(typeof t!="function"||!e)return;let r=lt(e),n=t(r);if(!n)return;let i=n[0];i&&(e.addContextBranch(i,n[1]),ir(s,i,e))},ir=(s,t,e)=>{f.add(s,"context",{branch:t,parent:e})};var Qt=(s,t,e)=>{};var zt=(s,t,e)=>{if(!e)return;let r=e._layout?e._layout:e.render();console.log("Debug: ","ele: ",s),console.log("Data: ",t),console.log("Layout: ",r),console.log("parent: ",e)};var jt=(s,t,e)=>{},$t=(s,t,e)=>{if(!t||!e)return;let r=t(e,s);r&&u.build(r,s,e)},Yt=(s,t,e)=>{if(!t||!e)return;let r=e.getId(t);s.id=r},Jt=(s,t,e)=>{if(!t||!e)return;let r=t(e.data,s);r&&u.build(r,s,e)},Kt=(s,t,e)=>{if(!t||!e)return;let r=t(e.state,s);r&&u.build(r,s,e)},Vt=(s,t,e)=>{if(!t||!e)return;let r=e.state,n=t(r);if(!e.state){e.setStateHelper(n);return}e.addState(n)},Xt=(s,t,e)=>{if(!(!t||!e)){if(e.events||e.setEventHelper(),t[2]){let r=t[2];t[2]=n=>{r(n,e)}}e.events.on(t[0],t[1],t[2],t[3])}};var Zt=(s,t,e)=>{let r,n,i;if(typeof t=="string"){if(r=C(e),!r)return;n=t}else if(Array.isArray(t))if(typeof t[0]!="object"){let o=C(e);if(!o)return;r=o,n=t[0],i=t[1]}else[r,n,i]=t;I.bind(s,r,n,i)};var et=(s,t,e)=>{G(s,e.state,t,e)};var te=s=>(t,e)=>{let[r,n,i="active"]=s,o=t===n?i:"";e.dataset[r]=o},ee=(s,t,e)=>{if(!t)return;let r=t.length-1,n=t[r],i=t.slice(0,r);i.push(te(n)),U(s,i,e)},re=(s,t,e)=>{if(!t)return;let r=t.length-1,n=t[r],i=t.slice(0,r);i.push(te(n)),et(s,i,e)};var se=s=>{for(let t=0,e=s.length;t<e;t++){let r=s[t];r&&r.remove()}s.length=0};f.addType("forScopes",s=>{if(!s)return!1;se(s.scopes)});var ne=(s,t,e)=>{let r,n,i,o;if(typeof t[0]=="string"||t.length<3){let h=C(e);if(!h)return;r=h,[n,i,o]=t}else[r,n,i,o]=t;let a=o!==!1,l=n+"[",c=a?{scopes:[]}:null;c&&f.add(s,"forScopes",c),I.watch(s,r,n,h=>{if(u.removeAll(s),c&&se(c.scopes),!h||h.length<1)return;let d=[];for(let m=0,g=h.length;m<g;m++){let R=a?r.scope(l+m+"]"):null;R&&c&&c.scopes.push(R);let H=i(h[m],m,R,d);H!==null&&d.push(H)}return u.build(d,s,e)})};var ie=(s,t,e)=>{let r=t[0];if(!r||r.length<1)return;let n=t[1],i=[];for(let o=0,a=r.length;o<a;o++){let l=r[o];if(!l)continue;let c=n(l,o);c!==null&&i.push(c)}u.build(i,s,e)};var oe=(s,t,e)=>{t(s,e)};f.addType("destroyed",s=>{if(!s)return!1;s.callBack(s.ele,s.parent)});var ae=(s,t,e)=>{or(s,t,e)},or=(s,t,e)=>{f.add(s,"destroyed",{ele:s,callBack:t,parent:e})};var ce=(s,t,e)=>{if(t)if(Array.isArray(t)&&typeof t[0]!="string")for(let r=0,n=t.length;r<n;r++)A.setup(s,t[r],e);else A.setup(s,t,e)};f.addType("routes",s=>{if(!s)return!1;let t=s.route;t&&w.removeRoute(t)});var he=(s,t,e)=>{if(t)if(Array.isArray(t))for(let r=0,n=t.length;r<n;r++){let i=t[r];i&&le(s,i,e)}else le(s,t,e)},le=(s,t,e)=>{t.container=s,t.parent=e;let r=w.add(t);ar(s,r)},ar=(s,t)=>{f.add(s,"routes",{route:t})};var ue=(s,t,e)=>{};f.addType("switch",s=>{if(!s)return!1;let t=s.id;w.removeSwitch(t)});var de=(s,t,e)=>{let r=t[0];for(let i=0,o=t.length;i<o;i++){let a=t[i];a&&(a.container=s,a.parent=e)}let n=w.addSwitch(t);cr(s,n)},cr=(s,t)=>{f.add(s,"switch",{id:t})};q.add("cache",jt).add("onCreated",oe).add("onDestroyed",ae).add("bind",Zt).add("data",Qt).add("state",ue).add("onSet",U).add("onState",et).add("animateIn",Ut).add("animateOut",Ht).add("watch",ce).add("useParent",$t).add("useData",Jt).add("useState",Kt).add("getId",Yt).add("addState",Vt).add("addEvent",Xt).add("map",ie).add("for",ne).add("useContext",Nt).add("addContext",Ft).add("context",Wt).add("role",Mt).add("aria",qt).add("route",he).add("debug",zt).add("dataSet",ee).add("dataStateSet",re).add("switch",de);export{q as a,W as b,x as c,xt as d,St as e,B as f,u as g,Tt as h,ct as i,at as j,w as k};
2
+ //# sourceMappingURL=chunk-VH3TSUK5.js.map
@@ -0,0 +1,2 @@
1
+ import{i as g}from"./chunk-3X6POBEJ.js";var i=class extends g{setup(){this.stage={}}addAction(t,e){return typeof e<"u"&&this.set(t,e),this}getState(t){return this.get(t)}removeAction(t,e){if(e)return this.off(t,e),this;let s=this.stage;return typeof s[t]<"u"&&delete s[t],this}};var n=class extends i{constructor(t){super(),this.id=t}setup(){this.stage={},this.id=""}};var h=class{static targets=new Map;static ownerCounts=new Map;static restore(t,e){this.targets.set(t,e),this.addOwner(t)}static getTarget(t){return this.targets.has(t)||this.targets.set(t,new n(t)),this.targets.get(t)}static attach(t){let e=this.getTarget(t);return this.addOwner(t),e}static addOwner(t){this.ownerCounts.set(t,(this.ownerCounts.get(t)||0)+1)}static detach(t){let e=this.ownerCounts.get(t);if(e===void 0)return;if(e>1){this.ownerCounts.set(t,e-1);return}this.ownerCounts.delete(t);let s=this.targets.get(t);s&&(s.remove(),this.targets.delete(t))}static getActionState(t,e){return this.getTarget(t).get(e)}static add(t,e,s){let r=this.getTarget(t);return e&&r.addAction(e,s),r}static addAction(t,e,s){return this.add(t,e,s)}static removeAction(t,e,s){if(s){this.off(t,e,s);return}let r=this.getTarget(t);r&&e&&r.removeAction(e)}static on(t,e,s){let r=this.getTarget(t);return e?r.on(e,s):null}static off(t,e,s){this.remove(t,e,s)}static remove(t,e,s){let r=this.targets,o=r.get(t);if(o){if(e){o.off(e,s);return}this.targets.delete(t),this.ownerCounts.delete(t)}}static set(t,e,s){this.getTarget(t).set(e,s)}};export{i as a,h as b};
2
+ //# sourceMappingURL=chunk-XHKEEED5.js.map
@@ -1,2 +1,2 @@
1
- import{c as e,d as r}from"../chunks/chunk-PDIOOIMW.js";import"../chunks/chunk-R5DHGQZV.js";export{r as Ajax,e as XhrRequest};
1
+ import{c as e,d as r}from"../chunks/chunk-ILT4B3VY.js";import"../chunks/chunk-R5DHGQZV.js";export{r as Ajax,e as XhrRequest};
2
2
  //# sourceMappingURL=ajax.js.map
@@ -1,2 +1,2 @@
1
- import{a as h,b as A,c as i,d as c,e as a,f as P,g as C}from"../chunks/chunk-L4273GAO.js";import"../chunks/chunk-IAPRMNTT.js";import{f as s}from"../chunks/chunk-WGCUX2GL.js";import"../chunks/chunk-PDIOOIMW.js";import"../chunks/chunk-NMWVJDVT.js";import"../chunks/chunk-R5DHGQZV.js";var D=r=>typeof r!="string"?r:f(r),f=r=>[{tag:"text",textContent:r}],m=()=>({props:{},children:[]}),d=r=>({props:{},children:f(r)}),l=r=>({props:{},children:r}),u=r=>({props:r[0]||{},children:D(r[1])});var O=r=>({props:{watch:r},children:[]}),S=r=>{if(r.length===0)return m();let t=r[0],e=typeof t;if(e==="string"||e==="number")return d(t);if(Array.isArray(t))return s.isWatching(t)?O(t):l(t);let o=r[1]??r[0]??[];return o&&Array.isArray(o)&&s.isWatching(o)&&(r[0]=Array.isArray(r[0])?{}:r[0],r[0].watch=o,r[1]=[]),u(r)},b=r=>(...t)=>{let{props:e,children:o}=S(t);return r(e,o)};var H=(r,t)=>{let e=Object.keys(r);for(let o=0,n=e.length;o<n;o++){let p=e[o],x=r[p],y=c[p]||p;t.prototype[y]=x}return t},T=0,W=r=>{let t=class extends r{};return t.prototype._classId="pod"+T++,t},j=(r,t=i)=>{if(!r)return null;let e=W(t),o={},n=r(o);return H(o,e),e.prototype.render=n,e};export{b as Atom,P as Builder,i as Component,h as Directives,C as Import,a as Jot,j as Pod,A as Unit};
1
+ import{a,b as A,c as i,d as f,e as d,f as P,g as C,h as S}from"../chunks/chunk-RUWEOCXU.js";import"../chunks/chunk-QZANICYR.js";import{g as s}from"../chunks/chunk-4T7YWUSM.js";import"../chunks/chunk-ILT4B3VY.js";import"../chunks/chunk-E3C6NOMV.js";import"../chunks/chunk-R5DHGQZV.js";var D=r=>typeof r!="string"?r:m(r),m=r=>[{tag:"text",textContent:r}],l=()=>({props:{},children:[]}),h=r=>({props:{},children:m(r)}),u=r=>({props:{},children:r}),x=r=>({props:r[0]||{},children:D(r[1])});var O=r=>({props:{watch:r},children:[]}),b=r=>{if(r.length===0)return l();let t=r[0],e=typeof t;if(e==="string"||e==="number")return h(t);if(Array.isArray(t))return s.isWatching(t)?O(t):u(t);let o=r[1]??r[0]??[];return o&&Array.isArray(o)&&s.isWatching(o)&&(r[0]=Array.isArray(r[0])?{}:r[0],r[0].watch=o,r[1]=[]),x(r)},H=r=>(...t)=>{let{props:e,children:o}=b(t);return r(e,o)};var T=(r,t)=>{let e=Object.keys(r);for(let o=0,n=e.length;o<n;o++){let p=e[o],y=r[p],c=f[p]||p;t.prototype[c]=d(y,c)}return t},W=0,j=r=>{let t=class extends r{};return t.prototype._classId="pod"+W++,t},I=(r,t=i)=>{if(!r)return null;let e=j(t),o={},n=r(o);return T(o,e),e.prototype.render=n,e};export{H as Atom,C as Builder,i as Component,a as Directives,S as Import,P as Jot,I as Pod,A as Unit};
2
2
  //# sourceMappingURL=component.js.map
@@ -1,2 +1,2 @@
1
- import{c as a,g as e,h as o}from"../chunks/chunk-WGCUX2GL.js";import"../chunks/chunk-PDIOOIMW.js";import"../chunks/chunk-NMWVJDVT.js";import"../chunks/chunk-R5DHGQZV.js";export{a as Data,e as Model,o as SimpleData};
1
+ import{d as a,h as e,i as o}from"../chunks/chunk-4T7YWUSM.js";import"../chunks/chunk-ILT4B3VY.js";import"../chunks/chunk-E3C6NOMV.js";import"../chunks/chunk-R5DHGQZV.js";export{a as Data,e as Model,o as SimpleData};
2
2
  //# sourceMappingURL=data.js.map
@@ -1,2 +1,2 @@
1
- import{f as m}from"../chunks/chunk-NMWVJDVT.js";import"../chunks/chunk-R5DHGQZV.js";export{m as Html};
1
+ import{f as m}from"../chunks/chunk-E3C6NOMV.js";import"../chunks/chunk-R5DHGQZV.js";export{m as Html};
2
2
  //# sourceMappingURL=html.js.map
@@ -1,2 +1,2 @@
1
- import{h as r,i as o,j as t}from"../chunks/chunk-L4273GAO.js";import"../chunks/chunk-IAPRMNTT.js";import"../chunks/chunk-WGCUX2GL.js";import"../chunks/chunk-PDIOOIMW.js";import"../chunks/chunk-NMWVJDVT.js";import"../chunks/chunk-R5DHGQZV.js";export{r as NavLink,o as Router,t as router};
1
+ import{i as r,j as o,k as t}from"../chunks/chunk-RUWEOCXU.js";import"../chunks/chunk-QZANICYR.js";import"../chunks/chunk-4T7YWUSM.js";import"../chunks/chunk-ILT4B3VY.js";import"../chunks/chunk-E3C6NOMV.js";import"../chunks/chunk-R5DHGQZV.js";export{r as NavLink,o as Router,t as router};
2
2
  //# sourceMappingURL=router.js.map
@@ -1,2 +1,2 @@
1
- import{a as r,b as t}from"../chunks/chunk-IAPRMNTT.js";import"../chunks/chunk-WGCUX2GL.js";import"../chunks/chunk-PDIOOIMW.js";import"../chunks/chunk-NMWVJDVT.js";import"../chunks/chunk-R5DHGQZV.js";export{r as State,t as Store};
1
+ import{a as r,b as t}from"../chunks/chunk-QZANICYR.js";import"../chunks/chunk-4T7YWUSM.js";import"../chunks/chunk-ILT4B3VY.js";import"../chunks/chunk-E3C6NOMV.js";import"../chunks/chunk-R5DHGQZV.js";export{r as State,t as Store};
2
2
  //# sourceMappingURL=state.js.map
@@ -29,6 +29,13 @@ export class Animation {
29
29
  * @returns {void}
30
30
  */
31
31
  addMovement(property: any): void;
32
+ /**
33
+ * Step every movement of the animation.
34
+ *
35
+ * @param {number} delta - The eased progress of the animation (0-1).
36
+ * @returns {void}
37
+ */
38
+ step(delta: number): void;
32
39
  /**
33
40
  * Setup the movements for the animation.
34
41
  *
@@ -5,3 +5,4 @@
5
5
  * @type {object} SHORTHAND_METHODS
6
6
  */
7
7
  export const SHORTHAND_METHODS: object;
8
+ export function getShorthandMethod(value: object | Function, alias: string): Function;
@@ -18,6 +18,14 @@ export class StateHelper {
18
18
  * @type {Array<any>} remoteStates
19
19
  */
20
20
  remoteStates: Array<any>;
21
+ /**
22
+ * Actions that registered a callBack on the local target.
23
+ * The subscription token has to be kept or the callBack can
24
+ * never be released.
25
+ *
26
+ * @type {Array<any>} callBackStates
27
+ */
28
+ callBackStates: Array<any>;
21
29
  /**
22
30
  * This will add states to a state.
23
31
  *
@@ -60,6 +68,14 @@ export class StateHelper {
60
68
  * @returns {void}
61
69
  */
62
70
  removeRemoteStates(state: object): void;
71
+ /**
72
+ * This will release the action callBacks registered on the
73
+ * local target.
74
+ *
75
+ * @param {object} state
76
+ * @returns {void}
77
+ */
78
+ removeLocalStates(state: object): void;
63
79
  /**
64
80
  * This will remove the actions.
65
81
  *
@@ -81,17 +97,17 @@ export class StateHelper {
81
97
  * @param {object} target
82
98
  * @param {string} actionEvent
83
99
  * @param {string} remoteTargetId
84
- * @returns {string}
100
+ * @returns {number} The link token.
85
101
  */
86
- bindRemoteState(target: object, actionEvent: string, remoteTargetId: string): string;
102
+ bindRemoteState(target: object, actionEvent: string, remoteTargetId: string): number;
87
103
  /**
88
104
  * This will unbind a remote state.
89
105
  *
90
106
  * @param {object} target
91
- * @param {string} token
107
+ * @param {number} token
92
108
  * @return {void}
93
109
  */
94
- unbindRemoteState(target: object, token: string): void;
110
+ unbindRemoteState(target: object, token: number): void;
95
111
  /**
96
112
  * This will add the states to the target.
97
113
  *
@@ -106,7 +122,7 @@ export class StateHelper {
106
122
  *
107
123
  * @param {object} target
108
124
  * @param {object} action
109
- * @returns {string|null}
125
+ * @returns {number|null}
110
126
  */
111
- addAction(target: object, action: object): string | null;
127
+ addAction(target: object, action: object): number | null;
112
128
  }
@@ -58,11 +58,20 @@ export class BasicData {
58
58
  */
59
59
  _refreshState: boolean;
60
60
  /**
61
- * @type {object} links
62
- * @default {}
61
+ * Link records keyed by subscription token.
62
+ *
63
+ * Tokens are the numbers handed out by the event sub, so both
64
+ * sides of a link pair must key and read this map with a
65
+ * number. A stringified token would delete nothing.
66
+ *
67
+ * @type {Map<number, {data: object, attr: string, pair: number}>} links
63
68
  * @protected
64
69
  */
65
- protected links: object;
70
+ protected links: Map<number, {
71
+ data: object;
72
+ attr: string;
73
+ pair: number;
74
+ }>;
66
75
  /**
67
76
  * @type {string} dataTypeId
68
77
  */
@@ -137,7 +146,8 @@ export class BasicData {
137
146
  */
138
147
  getDataId(): string;
139
148
  /**
140
- * This is a placeholder.
149
+ * This will release every subscription and link the data
150
+ * source holds.
141
151
  *
142
152
  * @returns {void}
143
153
  */
@@ -347,41 +357,47 @@ export class BasicData {
347
357
  * @param {object} data
348
358
  * @param {string|object} attr
349
359
  * @param {string} alias
350
- * @returns {string|array}
360
+ * @returns {number|Array<number>}
351
361
  */
352
- link(data: object, attr: string | object, alias: string, ...args: any[]): string | any[];
362
+ link(data: object, attr: string | object, alias: string, ...args: any[]): number | Array<number>;
353
363
  /**
354
364
  * This will link a remote data source by property.
355
365
  *
356
366
  * @param {object} data
357
367
  * @param {string} attr
358
368
  * @param {string} [alias]
359
- * @returns {string}
369
+ * @returns {number} The subscription token.
360
370
  */
361
- remoteLink(data: object, attr: string, alias?: string): string;
371
+ remoteLink(data: object, attr: string, alias?: string): number;
362
372
  /**
363
- * This will add a link token to the links array.
373
+ * This will add a link token to the links map.
364
374
  *
365
- * @param {string} token
375
+ * The attr name is what makes the link removable: subscriptions
376
+ * are registered per attr message, so a record without one can
377
+ * only be forgotten, not unsubscribed.
378
+ *
379
+ * @param {number} token
366
380
  * @param {object} data
381
+ * @param {string} [attr]
382
+ * @param {number} [pair] The token of the opposite direction.
367
383
  * @returns {void}
368
384
  */
369
- addLink(token: string, data: object): void;
385
+ addLink(token: number, data: object, attr?: string, pair?: number): void;
370
386
  /**
371
387
  * This will remove a link or all links if no token is provided.
372
388
  *
373
- * @param {string|null} [token=null]
389
+ * @param {number|null} [token=null]
374
390
  * @returns {void}
375
391
  */
376
- unlink(token?: string | null): void;
392
+ unlink(token?: number | null): void;
377
393
  /**
378
394
  * This will remove the linked subscription.
379
395
  *
380
- * @param {string} token
396
+ * @param {number} token
381
397
  * @param {boolean} [removeFromLinks=true]
382
398
  * @returns {void}
383
399
  */
384
- removeLink(token: string, removeFromLinks?: boolean): void;
400
+ removeLink(token: number, removeFromLinks?: boolean): void;
385
401
  isData: boolean;
386
402
  }
387
403
  import { DataPubSub } from '../../data-binder/data-pub-sub.js';
@@ -25,18 +25,4 @@ export namespace DataUtils {
25
25
  */
26
26
  function getSegments(str: string): Array<any> | null;
27
27
  }
28
- /**
29
- * Simple LRU Cache implementation for caching parsed path segments.
30
- * Caches up to 1000 most recently used paths (~50KB memory overhead).
31
- *
32
- * @class
33
- */
34
- declare class LRUCache {
35
- constructor(maxSize?: number);
36
- cache: Map<any, any>;
37
- maxSize: number;
38
- get(key: any): any;
39
- set(key: any, value: any): void;
40
- clear(): void;
41
- }
42
- export {};
28
+ import { LRUCache } from '../../../../shared/lru-cache.js';
@@ -125,7 +125,16 @@ export class Data extends BasicData {
125
125
  * @returns {void}
126
126
  */
127
127
  revert(): void;
128
+ /**
129
+ * Deletes go to both channels. Publishing to the event sub
130
+ * alone left every element bound through the data binder
131
+ * rendering a value the data no longer holds.
132
+ *
133
+ * The published value is null rather than the path string the
134
+ * walk used to hand out, to match what BasicData sends for a
135
+ * delete and to keep bound elements from showing the path.
136
+ */
128
137
  _delCommitter: any;
129
- _deleteCb: (path: any, obj: any) => void;
138
+ _deleteCb: (path: any) => void;
130
139
  }
131
140
  import { BasicData } from '../basic-data.js';
@@ -83,6 +83,31 @@ export class DataPubSub {
83
83
  * @protected
84
84
  */
85
85
  protected flushCallbacks: Array<Function>;
86
+ /**
87
+ * The message currently being delivered, used to spot a
88
+ * subscriber that re-publishes its own message.
89
+ *
90
+ * @type {string|null}
91
+ * @protected
92
+ */
93
+ protected deliveringMessage: string | null;
94
+ /**
95
+ * Messages whose own subscribers re-published them during the
96
+ * current flush cycle. Allocated only when it happens.
97
+ *
98
+ * @type {Set<string>|null}
99
+ * @protected
100
+ */
101
+ protected reentrantMessages: Set<string> | null;
102
+ /**
103
+ * When true, publishes are dropped instead of queued. Set
104
+ * while the flush breaker drains the surviving updates so the
105
+ * runaway cascade cannot restart.
106
+ *
107
+ * @type {boolean}
108
+ * @protected
109
+ */
110
+ protected suppressQueue: boolean;
86
111
  /**
87
112
  * This will get a subscriber array.
88
113
  *
@@ -183,6 +208,19 @@ export class DataPubSub {
183
208
  * @returns {void}
184
209
  */
185
210
  flush(): void;
211
+ /**
212
+ * Stop a runaway cascade without discarding the updates that
213
+ * were only queued alongside it.
214
+ *
215
+ * Dropping the whole queue loses the last value of every
216
+ * unrelated message. Only the self-republishing messages are
217
+ * dropped; the rest are delivered once with queueing suppressed,
218
+ * which guarantees the loop cannot restart.
219
+ *
220
+ * @protected
221
+ * @returns {void}
222
+ */
223
+ protected _breakCascade(): void;
186
224
  /**
187
225
  * Resolve all pending flush completion promises and execute callbacks.
188
226
  *
@@ -6,4 +6,15 @@ export namespace Utils {
6
6
  * @returns {string}
7
7
  */
8
8
  function removeSlashes(uri: string): string;
9
+ /**
10
+ * This will get the pathname style uri from a hash url.
11
+ *
12
+ * The hashchange event reports absolute urls, but route patterns
13
+ * are anchored against the uri that `Router.getPath()` produces
14
+ * for hash routing, which is the hash without its '#'.
15
+ *
16
+ * @param {string} url
17
+ * @returns {string}
18
+ */
19
+ function getHashUri(url: string): string;
9
20
  }
@@ -13,6 +13,19 @@ export class StateTracker {
13
13
  * @private
14
14
  */
15
15
  private static targets;
16
+ /**
17
+ * The number of owners that have attached to each target.
18
+ *
19
+ * Targets are keyed by the owning component's unique instance id,
20
+ * so without a release path the map grows by one entry per mount
21
+ * and never shrinks. Counting owners keeps ids that are shared on
22
+ * purpose (a `stateTargetId` override) alive until the last one
23
+ * detaches.
24
+ *
25
+ * @type {Map<string, number>} ownerCounts
26
+ * @private
27
+ */
28
+ private static ownerCounts;
16
29
  /**
17
30
  * This will restore a state target.
18
31
  *
@@ -28,6 +41,35 @@ export class StateTracker {
28
41
  * @returns {StateTarget}
29
42
  */
30
43
  static getTarget(id: string): StateTarget;
44
+ /**
45
+ * This will get the state target and claim ownership of it.
46
+ *
47
+ * Every attach must be paired with a detach or the target is
48
+ * retained for the life of the page.
49
+ *
50
+ * @param {string} id
51
+ * @returns {StateTarget}
52
+ */
53
+ static attach(id: string): StateTarget;
54
+ /**
55
+ * This will record an owner of a target.
56
+ *
57
+ * @protected
58
+ * @param {string} id
59
+ * @returns {void}
60
+ */
61
+ protected static addOwner(id: string): void;
62
+ /**
63
+ * This will release an owner of a state target. The target is
64
+ * reset and dropped once the last owner detaches.
65
+ *
66
+ * Ids that were never attached (targets created on demand by
67
+ * getTarget, e.g. app level states) are left alone.
68
+ *
69
+ * @param {string} id
70
+ * @returns {void}
71
+ */
72
+ static detach(id: string): void;
31
73
  /**
32
74
  * This will get the state of an action.
33
75
  *
@@ -60,10 +102,10 @@ export class StateTracker {
60
102
  *
61
103
  * @param {string} targetId
62
104
  * @param {string} action
63
- * @param {string} [token]
105
+ * @param {number} [token]
64
106
  * @returns {void}
65
107
  */
66
- static removeAction(targetId: string, action: string, token?: string): void;
108
+ static removeAction(targetId: string, action: string, token?: number): void;
67
109
  /**
68
110
  * This will add a new subscriber to the action.
69
111
  *
@@ -78,19 +120,19 @@ export class StateTracker {
78
120
  *
79
121
  * @param {string} targetId
80
122
  * @param {string} action
81
- * @param {string} token
123
+ * @param {number} token
82
124
  * @returns {void}
83
125
  */
84
- static off(targetId: string, action: string, token: string): void;
126
+ static off(targetId: string, action: string, token: number): void;
85
127
  /**
86
128
  * This will remove a target or action or callBack.
87
129
  *
88
130
  * @param {string} targetId
89
131
  * @param {string} [action]
90
- * @param {string} [token]
132
+ * @param {number} [token]
91
133
  * @returns {void}
92
134
  */
93
- static remove(targetId: string, action?: string, token?: string): void;
135
+ static remove(targetId: string, action?: string, token?: number): void;
94
136
  /**
95
137
  * This will set the action state.
96
138
  *
@@ -0,0 +1,95 @@
1
+ /**
2
+ * LRUCache
3
+ *
4
+ * A bounded cache with recency aware eviction, used to keep the module
5
+ * level parse/lookup caches from growing for the life of the page.
6
+ *
7
+ * Recency is tracked with a second chance (CLOCK) flag rather than by
8
+ * re-inserting keys into the Map. A read marks the entry it returns, and
9
+ * eviction walks the oldest entries, clearing the flag of anything read
10
+ * since the last eviction and taking the first entry that was not. That
11
+ * keeps a key that is still in use from being dropped while leaving
12
+ * reads free of Map mutation, which matters because these caches sit on
13
+ * paths that run per publish and per render.
14
+ *
15
+ * Eviction removes a batch rather than a single entry so the Map key
16
+ * iterator is allocated once per batch instead of once per write. Writes
17
+ * that miss are the common case on a page rendering new rows, and the
18
+ * per-write iterator was the dominant cost of the bound.
19
+ *
20
+ * @class
21
+ */
22
+ export class LRUCache {
23
+ /**
24
+ * This will create an LRU cache.
25
+ *
26
+ * @constructor
27
+ * @param {number} [maxSize=1000]
28
+ */
29
+ constructor(maxSize?: number);
30
+ /**
31
+ * @type {Map<*, {value: *, used: boolean}>} cache
32
+ * @protected
33
+ */
34
+ protected cache: Map<any, {
35
+ value: any;
36
+ used: boolean;
37
+ }>;
38
+ /**
39
+ * @type {number} maxSize
40
+ */
41
+ maxSize: number;
42
+ /**
43
+ * The number of entries dropped by one eviction. Caches too
44
+ * small to batch fall back to one, which is also what keeps a
45
+ * cache of two or three entries behaving exactly.
46
+ *
47
+ * @type {number} evictCount
48
+ * @protected
49
+ */
50
+ protected evictCount: number;
51
+ /**
52
+ * This will get a value and mark the key as recently used.
53
+ *
54
+ * @param {*} key
55
+ * @returns {*} The value or undefined when not cached.
56
+ */
57
+ get(key: any): any;
58
+ /**
59
+ * This will check if a key is cached without marking it used.
60
+ *
61
+ * @param {*} key
62
+ * @returns {boolean}
63
+ */
64
+ has(key: any): boolean;
65
+ /**
66
+ * This will add a value, evicting a batch of the least recently
67
+ * used keys when the write goes over capacity.
68
+ *
69
+ * @param {*} key
70
+ * @param {*} value
71
+ * @returns {void}
72
+ */
73
+ set(key: any, value: any): void;
74
+ /**
75
+ * This will drop entries from the oldest end until the cache has
76
+ * room for the next batch of writes.
77
+ *
78
+ * @protected
79
+ * @returns {void}
80
+ */
81
+ protected evict(): void;
82
+ /**
83
+ * This will remove a key.
84
+ *
85
+ * @param {*} key
86
+ * @returns {void}
87
+ */
88
+ delete(key: any): void;
89
+ /**
90
+ * This will empty the cache.
91
+ *
92
+ * @returns {void}
93
+ */
94
+ clear(): void;
95
+ }
@@ -58,7 +58,8 @@ export namespace Objects {
58
58
  * Checks if an object is empty.
59
59
  *
60
60
  * @param {object} obj - The object to check.
61
- * @returns {boolean} True if the object has no own properties.
61
+ * @returns {boolean} True if the object holds no entries. Maps and
62
+ * Sets are measured by size, everything else by own properties.
62
63
  */
63
64
  function isEmpty(obj: object): boolean;
64
65
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base-framework/base",
3
- "version": "3.9.7",
3
+ "version": "3.9.9",
4
4
  "description": "This is a javascript framework.",
5
5
  "main": "./dist/base.js",
6
6
  "module": "./dist/base.js",