const simpleDirectives={};!function(e){class t{constructor(e,t){this.elements=[],this.pointers=[],this.trackers=[],this.root=t||window,this.register(e||document.body),this.runner()}register(e,t,i){const r=Object.keys(S).map(e=>e.replace("d","d-").toLowerCase());let n,c=!1,a=i||"t"+Math.floor(1e5*Math.random());if(!document.body.contains(e))throw new Error("Attempted to register an element that is not within the DOM.");if(e.hasAttributes()){let i=Array.from(e.attributes).map(({name:t,value:s})=>{const i="sd-rdo"!==t||o.isFirstRdoOfGroup(this,e);return j(t).in(r)&&i?(j(t).in(["sd-if","sd-for"])&&(c=!0),{type:t,value:s.replace(/\s+/g,"")}):null});A(i),i.length&&(n=new s(this,e,i,Object.assign({},t||{})),this.elements.push(n))}this.trackers.hasOwnProperty(a)?this.trackers[a]=this.trackers[a]-1:this.trackers[a]=0,!e.children.length||n&&c?0===this.trackers[a]&&(delete this.trackers[a],this.pointers.sort((e,t)=>{const s={dir:g.bubbleUp(e).constructor.toString().split(" ")[1],el:e.scope.element},i={dir:g.bubbleUp(t).constructor.toString().split(" ")[1],el:t.scope.element};if(s.el===i.el){if(s.dir=g.bubbleUp(e).constructor.toString().split(" ")[1],i.dir=g.bubbleUp(t).constructor.toString().split(" ")[1],"SdIf"===s.dir&&"SdIf"!==i.dir)return-1;if("SdFor"===s.dir&&!j(i.dir).in(["SdIf","SdFor"]))return-1}else{if(s.el.contains(i.el))return-1;if(i.el.contains(s.el))return 1}return 0})):(this.trackers[a]=this.trackers[a]+e.children.length,Array.from(e.children).forEach(e=>this.register(e,t,a)))}runner(){this.pointers.forEach(e=>{e.valid&&e.run()}),setTimeout(()=>this.runner(),100)}unregister(e){this.elements=this.elements.map(t=>t.scope.element===e||e.contains(t.scope.element)?t.unregister():t),A(this.elements)}getSimpleElement(e){let t=[];return this.elements.forEach(s=>{s.scope.element===e&&t.push(s)}),t}}class s{constructor(e,t,s,r){this.directives=[],Object.assign(this,{instance:e,scope:r}),this.scope.element=t,t.setAttribute("sd-registered","true"),s.sort((e,t)=>"sd-if"===e.type&&"sd-if"!==t.type?1:"sd-for"!==e.type||j(t.type).in(["sd-if","sd-for"])?"on"===e.type&&"on"!==t.type?-1:void 0:1),s.forEach(({type:e,value:t})=>{if(j(e).in(["sd-attr","sd-class","sd-on"])&&j(";").in(t)){t.split(";").forEach(t=>this.directives.push(i.getDirective(this,e,t)))}else this.directives.push(i.getDirective(this,e,t))})}unregister(){return this.scope.element.removeAttribute("sd-registered"),this.directives.forEach(e=>{e instanceof a&&e.destroy(),e instanceof n&&setTimeout(()=>{this.scope.element.innerHTML=e.originalHTML})}),this.instance.pointers=this.instance.pointers.map(e=>g.bubbleUp(e).element===this?(e.valid=!1,null):e),A(this.instance.pointers),null}}class i{constructor(e,t){Object.assign(this,{element:e,expression:t,scope:e.scope})}static getDirective(e,t,s){const i="Sd"+t.substring(3,4).toUpperCase()+t.substring(4);return new S[i](e,s)}}class r extends i{constructor(e,t){super(e,t);const[s,i]=k(t);this.attribute=s,this.scope.attributeName=s,this.reference=g.getReference(this,i)}run(e){const t=this.attribute,s=this.scope.element;"value"===t&&"SELECT"===s.tagName?Array.from(s.getElementsByTagName("option")).forEach(t=>{Array.isArray(e)&&j(t.value).in(e)||e==t.value?t.selected=!0:t.selected=!1}):e?(s.setAttribute(t,e),"value"===t&&(s.value=e)):(s.hasAttribute(t)&&s.removeAttribute(t),"value"===t&&(s.value=""))}}class n extends i{constructor(e,t){super(e,t);const[s,i]=k(t);Object.assign(this,{alias:s,originalChildren:this.scope.element.children.length,originalHTML:this.scope.element.innerHTML}),this.scope.itemName=this.alias,this.reference=g.getReference(this,i)}run(e){if(!e)return;const{instance:t,directives:s}=this.element,i=this.scope.element,n=this.scope.element.children,c=document.createElement("div");if(c.innerHTML=this.originalHTML.repeat(e.length),Array.from(n).forEach(e=>{t.unregister(e)}),n.length>c.children.length)Array.from(Array(n.length-c.children.length)).forEach(()=>{i.removeChild(i.lastChild)});else if(n.length{i.appendChild(e)})}Array.from(i.children).forEach((s,i)=>{const r=Math.floor(i/this.originalChildren),n=Object.assign({},this.scope);n[this.alias]=Object.assign({$collection:e,$index:r},e[r]),this.handleSdForUniques(s,"sd"+r),t.register(s,n)}),"SELECT"===i.tagName&&s.some(e=>{if(e instanceof r&&"value"===e.attribute)return setTimeout(()=>e.reference.get(t=>e.run(t))),!0})}handleSdForUniques(e,t){const s=e.getAttribute("sd-for-unique");s&&s.split(",").forEach(s=>{const i=e.getAttribute(s);i?e.setAttribute(s,i+t):e.setAttribute(s,"sdForUnique"+t)}),Array.from(e.children).forEach(e=>this.handleSdForUniques(e,t))}}class c extends i{constructor(e,t){super(e,t),this.reference=g.getReference(this,t)}run(e){const t=this.element.instance,s=this.scope.element;Array.from(s.children).forEach(e=>t.unregister(e)),s.innerHTML=e,Array.from(s.children).forEach(e=>t.register(e,this.scope))}}class o extends i{constructor(e,t){super(e,t),this.reference=g.getReference(this,t)}run(e){const t=this.scope.element.getAttribute("name");Array.from(document.getElementsByName(t)).forEach(t=>{t.value===e?t.checked=!0:t.checked=!1})}static isFirstRdoOfGroup(e,t){return!e.elements.some(({scope:e})=>"INPUT"===e.element.tagName&&"radio"===e.element.getAttribute("type")&&e.element.getAttribute("name")===t.getAttribute("name"))}}class a extends i{constructor(e,t){super(e,t);const[s,i]=k(t);this.events=s.split(","),this.scope.eventNames=this.events,this.actions=i.split(",").map(e=>"$update"===e?this.getUpdater():j("=").in(e)?new u(this,e):new l(this,e)),A(this.actions),this.listener=e=>this.actions.forEach(t=>t.run(e)),this.events.forEach(e=>this.scope.element.addEventListener(e,this.listener))}destroy(){this.events.forEach(e=>this.scope.element.removeEventListener(e,this.listener))}getUpdater(){const e=this.scope.element;return e.hasAttribute("sd-attr")?"INPUT"===e.tagName&&j(e.getAttribute("type")).in(["checkbox","radio"])?new f(this):new p(this):e.hasAttribute("sd-html")&&e.isContentEditable?new m(this):"INPUT"===e.tagName&&"radio"===e.getAttribute("type")&&e.hasAttribute("name")&&(e.hasAttribute("sd-rdo")||Array.from(document.querySelectorAll('input[name="'+e.getAttribute("name")+'"]')).some(e=>e.hasAttribute("sd-rdo")))?new b(this):null}}class h{constructor(e){this.directive=e,this.scope=e.scope}}class l extends h{constructor(e,t){super(e),this.action=t,this.callee=g.getReference(this,t)}doApply(e){const t=this.callee.obj[this.callee.key],s=this.callee.args.map(e=>e.bang?!e.obj[e.key]:e.obj[e.key]);t.apply(Object.assign({event:e},this.scope),s)}run(e){this.callee.obj&&this.callee.obj.hasOwnProperty(this.callee.key)?this.doApply(e):setTimeout(()=>{this.callee.tryRelink(),this.callee.obj&&this.callee.obj.hasOwnProperty(this.callee.key)&&this.doApply(e)})}}class u extends h{constructor(e,t){super(e),this.action=t;const s=t.split("=");this.left=g.getReference(this,s[0]),this.right=g.getReference(this,s[1])}run(){this.right.get(e=>{this.left.obj[this.left.key]=e})}}class d extends h{}class p extends d{constructor(e){super(e),this.directive.element.directives.some(e=>{if(e instanceof r&&"value"===e.attribute&&e.reference instanceof v)return this.updatee=e.reference,!0})}run(){const e=this.scope.element.value;"number"!=typeof this.updatee.obj[this.updatee.key]||isNaN(Number(e))?this.updatee.obj[this.updatee.key]=e:this.updatee.obj[this.updatee.key]=Number(e)}}class f extends d{constructor(e){super(e),this.directive.element.directives.some(e=>{if(e instanceof r&&"checked"===e.attribute&&e.reference instanceof v)return this.updatee=e.reference,!0})}run(){const e=this.scope.element;this.updatee.obj[this.updatee.key]=e.checked}}class m extends d{constructor(e){super(e),this.directive.element.directives.some(e=>{if(e instanceof c&&e.reference instanceof v)return this.updatee=e.reference,!0})}run(){const{innerHTML:e}=this.scope.element;this.updatee.obj[this.updatee.key]=e}}class b extends d{constructor(e){super(e);const t=this.directive.element.instance;setTimeout(()=>{const e=document.querySelectorAll(`input[name="${this.scope.element.getAttribute("name")}"]`);Array.from(e).some(e=>{const s=t.getSimpleElement(e);s.length&&s[0].directives.some(e=>{if(e instanceof o&&e.reference instanceof v)return this.updatee=e.reference,!0})})})}run(){const e=this.scope.element.getAttribute("name");let t;Array.from(document.getElementsByName(e)).some(e=>{if(e.checked)return t=e.value,!0}),this.updatee.obj[this.updatee.key]=t}}class g{constructor(e){this.parent=e,this.scope=e.scope}static bubbleUp(e){let t=e;for(;t instanceof g;)t=t.parent;return t}static getReference(e,t,s){return/[=]/.test(t.substring(1))?new y(e,t,s):new v(e,t,s)}}class y extends g{constructor(e,t,s){super(e);const i=t.match(/([=]{1,3})/)[0],r=t.indexOf(i);this.comparison=t,this.comparator=i,this.left=g.getReference(this,t.substring(0,r),s),this.right=g.getReference(this,t.substring(r+i.length),s)}get(e){this.left.get(t=>{this.right.get(s=>{switch(this.comparator){case"==":e(t==s);break;case"===":e(t===s);break;case"!=":case"!==":e(t!=s);break;case"<":e(t":e(t>s);break;case"<=":e(t<=s);break;case">=":e(t>=s)}})})}}class v extends g{constructor(e,t,s){super(e),this.args=[],this.bang=!1,this.valid=!0,t.startsWith("!")&&(this.bang=!0,t=t.substring(1));const[r,n]=k(t);this.base=r,n&&(this.args=n.split(":").map(e=>g.getReference(this,e,!0)));const{obj:c,key:o}=this.getObjAndKey(this.base,this.scope);if(this.obj=c,this.key=o,!s){const e=g.bubbleUp(this);e instanceof i&&!(e instanceof a)&&(e.element.instance.pointers.push(this),this.run(!0))}}get(e){let t,s=this.obj[this.key];"function"==typeof s&&(this.args.some(e=>!e.obj||!e.obj.hasOwnProperty(e.key))?setTimeout(()=>{t=this.args.map(e=>(e.obj&&e.obj.hasOwnProperty(e.key)||e.tryRelink(),e.bang?!e.obj[e.key]:e.obj[e.key])),s=s.apply(this.scope,t),e(this.bang?!s:s)}):(t=this.args.map(e=>e.bang?!e.obj[e.key]:e.obj[e.key]),s=s.apply(this.scope,t))),e(this.bang?!s:s)}getObjAndKey(e,t){let s={value:e},i="value",r=this.maybeGetObjAndKey(e,t,!1);return r.nah&&(r=this.maybeGetObjAndKey(e,t,!0)),r.nah||(s=r.obj,i=r.key),{obj:s,key:i}}maybeGetObjAndKey(e,t,s){const r={nah:!0},n=j("[").in(e);let c,o=j(".").in(e),a=e;if(t&&!s)c=t;else{let e=g.bubbleUp(this);e=e instanceof i?e.element.instance.root:e.directive.element.instance.root,c=e}if(/[^a-z0-9.[\]$_]/i.test(e))return r;if(!n&&!o)return c.hasOwnProperty(e)?{obj:c,key:e}:r;if(n){for(;/\[[^\[\]]*\]/.test(a);)a=a.replace(/\[([^\[\]]*)\]/g,(e,s)=>{const{obj:i,key:r}=this.getObjAndKey(s,t);return"."+i[r]});o||(o=!0)}if(o){const e=a.split(".");let t;if(c[e[0]]&&c[e[0]].$collection&&"$collection"!==e[1]&&"$index"!==e[1]){const t=c[e[0]].$collection[c[e[0]].$index];c={},c[e[0]]=t}return e.some((s,i)=>{if(i===e.length-1)t=s;else{if("object"!=typeof c||!c.hasOwnProperty(s))return t=!1,!0;c=c[s]}}),"string"==typeof t?{obj:c,key:t}:r}}run(e){this.get(t=>{let s=t,i=!1;if(Array.isArray(s)&&Array.isArray(this.value)?s.length!==this.value.length?i=!0:s.some((e,t)=>{if(e!==this.value[t])return i=!0,!0}):void 0!==s&&s.toString&&"NaN"===s.toString()?this.value&&this.value.toString&&"NaN"===this.value.toString()&&(i=!0):s!==this.value&&(i=!0),Array.isArray(s)&&(s=s.slice(0)),i||e){const e=g.bubbleUp(this);this.value=s;try{e.reference.get(t=>e.run(t))}catch(t){setTimeout(()=>e.reference.get(t=>e.run(t)))}}})}tryRelink(){const{obj:e,key:t}=this.getObjAndKey(this.base,this.scope);this.obj=e,this.key=t}}function A(e){let t;for(;-1!==(t=e.indexOf(null));)e.splice(t,1)}function k(e){const t=e.split(":");return[t.shift(),t.join(":")]}const j=e=>({in:t=>-1!==t.indexOf(e)}),S={SdAttr:r,SdClass:class extends i{constructor(e,t){super(e,t),this.cachedState=2;const[s,i]=k(t);this.classes=s.split(","),this.scope.classNames=this.classes,this.reference=g.getReference(this,i)}run(e){if(2===this.cachedState)this.cachedState=e?1:0;else if(e&&0===this.cachedState)this.cachedState=1;else{if(e||1!==this.cachedState)return;this.cachedState=0}const t=this.scope.element.classList;this.classes.forEach(s=>{e?t.contains(s)||t.add(s):t.contains(s)&&t.remove(s)})}},SdFor:n,SdHtml:c,SdIf:class extends i{constructor(e,t){super(e,t),this.cachedState=2,this.reference=g.getReference(this,t)}run(e){if(2===this.cachedState)this.cachedState=e?1:0;else if(e&&0===this.cachedState)this.cachedState=1;else{if(e||1!==this.cachedState)return;this.cachedState=0}const t=this.element.instance,{style:s,children:i}=this.scope.element;e?(s.display=null,Array.from(i).forEach(e=>t.register(e,Object.assign({},this.scope)))):(s.display="none",Array.from(i).forEach(e=>t.unregister(e)))}},SdRdo:o,SdOn:a};e.register=(e,s)=>new t(e,s),e.memoize=function(e,t){const s={};return function(){const i=Date.now();let r=Array.from(arguments);return r.unshift(this),r=r.map(e=>{switch(typeof e){case"object":return null===e?"null":JSON.stringify(e);case"boolean":case"number":case"function":return e.toString();case"string":return e;default:return typeof e}}).join(""),(!s.hasOwnProperty(r)||i>s[r].expires)&&(s[r]={value:e.apply(this,arguments),expires:i+(t||1e3)}),s[r].value}}}(simpleDirectives);