taggedjs 2.1.1 → 2.3.25
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.
- package/index.js +1 -1
- package/js/Clones.type.d.ts +1 -0
- package/js/Clones.type.js +2 -0
- package/js/Clones.type.js.map +1 -0
- package/js/Props.d.ts +1 -0
- package/js/Props.js +2 -0
- package/js/Props.js.map +1 -0
- package/js/Subject.d.ts +17 -0
- package/js/Subject.js +43 -0
- package/js/Subject.js.map +1 -0
- package/js/Tag.class.d.ts +69 -0
- package/js/Tag.class.js +247 -0
- package/js/Tag.class.js.map +1 -0
- package/js/Tag.utils.d.ts +12 -0
- package/js/Tag.utils.js +31 -0
- package/js/Tag.utils.js.map +1 -0
- package/js/ValueSubject.d.ts +6 -0
- package/js/ValueSubject.js +15 -0
- package/js/ValueSubject.js.map +1 -0
- package/js/bindSubjectCallback.function.d.ts +5 -0
- package/js/bindSubjectCallback.function.js +19 -0
- package/js/bindSubjectCallback.function.js.map +1 -0
- package/js/deepFunctions.d.ts +2 -0
- package/js/deepFunctions.js +76 -0
- package/js/deepFunctions.js.map +1 -0
- package/js/elementDestroyCheck.function.d.ts +3 -0
- package/js/elementDestroyCheck.function.js +17 -0
- package/js/elementDestroyCheck.function.js.map +1 -0
- package/js/elementInitCheck.d.ts +2 -0
- package/js/elementInitCheck.js +18 -0
- package/js/elementInitCheck.js.map +1 -0
- package/js/gateway/gateway.web.component.d.ts +11 -0
- package/js/gateway/gateway.web.component.js +20 -0
- package/js/gateway/gateway.web.component.js.map +1 -0
- package/js/gateway/index.d.ts +3 -0
- package/js/gateway/index.js +3 -0
- package/js/gateway/index.js.map +1 -0
- package/js/gateway/loadTagGateway.function.d.ts +2 -0
- package/js/gateway/loadTagGateway.function.js +18 -0
- package/js/gateway/loadTagGateway.function.js.map +1 -0
- package/js/gateway/tagGateway.function.d.ts +31 -0
- package/js/gateway/tagGateway.function.js +187 -0
- package/js/gateway/tagGateway.function.js.map +1 -0
- package/js/getCallback.d.ts +3 -0
- package/js/getCallback.js +50 -0
- package/js/getCallback.js.map +1 -0
- package/js/getTagSupport.d.ts +21 -0
- package/js/getTagSupport.js +109 -0
- package/js/getTagSupport.js.map +1 -0
- package/js/html.d.ts +2 -0
- package/js/html.js +5 -0
- package/js/html.js.map +1 -0
- package/js/index.d.ts +19 -0
- package/js/index.js +24 -0
- package/js/index.js.map +1 -0
- package/js/inputAttribute.d.ts +1 -0
- package/js/inputAttribute.js +19 -0
- package/js/inputAttribute.js.map +1 -0
- package/js/interpolateAttributes.d.ts +4 -0
- package/js/interpolateAttributes.js +135 -0
- package/js/interpolateAttributes.js.map +1 -0
- package/js/interpolateContentTemplates.d.ts +6 -0
- package/js/interpolateContentTemplates.js +54 -0
- package/js/interpolateContentTemplates.js.map +1 -0
- package/js/interpolateElement.d.ts +9 -0
- package/js/interpolateElement.js +39 -0
- package/js/interpolateElement.js.map +1 -0
- package/js/interpolateTemplate.d.ts +17 -0
- package/js/interpolateTemplate.js +64 -0
- package/js/interpolateTemplate.js.map +1 -0
- package/js/interpolations.d.ts +7 -0
- package/js/interpolations.js +18 -0
- package/js/interpolations.js.map +1 -0
- package/js/isInstance.d.ts +6 -0
- package/js/isInstance.js +10 -0
- package/js/isInstance.js.map +1 -0
- package/js/js/Clones.type.d.ts +1 -0
- package/js/js/Clones.type.js +2 -0
- package/js/js/Clones.type.js.map +1 -0
- package/js/js/Props.d.ts +1 -0
- package/js/js/Props.js +2 -0
- package/js/js/Props.js.map +1 -0
- package/js/js/Subject.d.ts +17 -0
- package/js/js/Subject.js +43 -0
- package/js/js/Subject.js.map +1 -0
- package/js/js/Tag.class.d.ts +67 -0
- package/js/js/Tag.class.js +241 -0
- package/js/js/Tag.class.js.map +1 -0
- package/js/js/Tag.utils.d.ts +12 -0
- package/js/js/Tag.utils.js +31 -0
- package/js/js/Tag.utils.js.map +1 -0
- package/js/js/ValueSubject.d.ts +6 -0
- package/js/js/ValueSubject.js +15 -0
- package/js/js/ValueSubject.js.map +1 -0
- package/js/js/bindSubjectCallback.function.d.ts +5 -0
- package/js/js/bindSubjectCallback.function.js +19 -0
- package/js/js/bindSubjectCallback.function.js.map +1 -0
- package/js/js/deepFunctions.d.ts +2 -0
- package/js/js/deepFunctions.js +76 -0
- package/js/js/deepFunctions.js.map +1 -0
- package/js/js/elementDestroyCheck.function.d.ts +3 -0
- package/js/js/elementDestroyCheck.function.js +17 -0
- package/js/js/elementDestroyCheck.function.js.map +1 -0
- package/js/js/elementInitCheck.d.ts +2 -0
- package/js/js/elementInitCheck.js +18 -0
- package/js/js/elementInitCheck.js.map +1 -0
- package/js/js/getCallback.d.ts +3 -0
- package/js/js/getCallback.js +50 -0
- package/js/js/getCallback.js.map +1 -0
- package/js/js/getTagSupport.d.ts +22 -0
- package/js/js/getTagSupport.js +116 -0
- package/js/js/getTagSupport.js.map +1 -0
- package/js/js/html.d.ts +2 -0
- package/js/js/html.js +5 -0
- package/js/js/html.js.map +1 -0
- package/js/js/index.d.ts +19 -0
- package/js/js/index.js +24 -0
- package/js/js/index.js.map +1 -0
- package/js/js/inputAttribute.d.ts +1 -0
- package/js/js/inputAttribute.js +19 -0
- package/js/js/inputAttribute.js.map +1 -0
- package/js/js/interpolateAttributes.d.ts +4 -0
- package/js/js/interpolateAttributes.js +127 -0
- package/js/js/interpolateAttributes.js.map +1 -0
- package/js/js/interpolateContentTemplates.d.ts +5 -0
- package/js/js/interpolateContentTemplates.js +57 -0
- package/js/js/interpolateContentTemplates.js.map +1 -0
- package/js/js/interpolateElement.d.ts +9 -0
- package/js/js/interpolateElement.js +32 -0
- package/js/js/interpolateElement.js.map +1 -0
- package/js/js/interpolateTemplate.d.ts +17 -0
- package/js/js/interpolateTemplate.js +64 -0
- package/js/js/interpolateTemplate.js.map +1 -0
- package/js/js/interpolations.d.ts +8 -0
- package/js/js/interpolations.js +17 -0
- package/js/js/interpolations.js.map +1 -0
- package/js/js/isInstance.d.ts +6 -0
- package/js/js/isInstance.js +10 -0
- package/js/js/isInstance.js.map +1 -0
- package/js/js/onDestroy.d.ts +2 -0
- package/js/js/onDestroy.js +20 -0
- package/js/js/onDestroy.js.map +1 -0
- package/js/js/onInit.d.ts +2 -0
- package/js/js/onInit.js +19 -0
- package/js/js/onInit.js.map +1 -0
- package/js/js/processSubjectComponent.function.d.ts +8 -0
- package/js/js/processSubjectComponent.function.js +53 -0
- package/js/js/processSubjectComponent.function.js.map +1 -0
- package/js/js/processSubjectValue.function.d.ts +16 -0
- package/js/js/processSubjectValue.function.js +122 -0
- package/js/js/processSubjectValue.function.js.map +1 -0
- package/js/js/processTagArray.d.ts +9 -0
- package/js/js/processTagArray.js +60 -0
- package/js/js/processTagArray.js.map +1 -0
- package/js/js/processTagResult.function.d.ts +10 -0
- package/js/js/processTagResult.function.js +42 -0
- package/js/js/processTagResult.function.js.map +1 -0
- package/js/js/providers.d.ts +17 -0
- package/js/js/providers.js +86 -0
- package/js/js/providers.js.map +1 -0
- package/js/js/redrawTag.function.d.ts +7 -0
- package/js/js/redrawTag.function.js +9 -0
- package/js/js/redrawTag.function.js.map +1 -0
- package/js/js/render.d.ts +1 -0
- package/js/js/render.js +24 -0
- package/js/js/render.js.map +1 -0
- package/js/js/renderAppToElement.d.ts +14 -0
- package/js/js/renderAppToElement.js +57 -0
- package/js/js/renderAppToElement.js.map +1 -0
- package/js/js/setUse.function.d.ts +23 -0
- package/js/js/setUse.function.js +14 -0
- package/js/js/setUse.function.js.map +1 -0
- package/js/js/state.d.ts +24 -0
- package/js/js/state.js +98 -0
- package/js/js/state.js.map +1 -0
- package/js/js/tag.d.ts +8 -0
- package/js/js/tag.js +46 -0
- package/js/js/tag.js.map +1 -0
- package/js/js/tagElement.d.ts +14 -0
- package/js/js/tagElement.js +57 -0
- package/js/js/tagElement.js.map +1 -0
- package/js/js/tagGateway.function.d.ts +5 -0
- package/js/js/tagGateway.function.js +119 -0
- package/js/js/tagGateway.function.js.map +1 -0
- package/js/js/tagRunner.d.ts +6 -0
- package/js/js/tagRunner.js +19 -0
- package/js/js/tagRunner.js.map +1 -0
- package/js/js/templater.utils.d.ts +28 -0
- package/js/js/templater.utils.js +99 -0
- package/js/js/templater.utils.js.map +1 -0
- package/js/js/updateTag.utils.d.ts +6 -0
- package/js/js/updateTag.utils.js +84 -0
- package/js/js/updateTag.utils.js.map +1 -0
- package/js/js/wait.d.ts +1 -0
- package/js/js/wait.js +8 -0
- package/js/js/wait.js.map +1 -0
- package/js/onDestroy.d.ts +2 -0
- package/js/onDestroy.js +20 -0
- package/js/onDestroy.js.map +1 -0
- package/js/onInit.d.ts +2 -0
- package/js/onInit.js +19 -0
- package/js/onInit.js.map +1 -0
- package/js/processSubjectComponent.function.d.ts +8 -0
- package/js/processSubjectComponent.function.js +53 -0
- package/js/processSubjectComponent.function.js.map +1 -0
- package/js/processSubjectValue.function.d.ts +16 -0
- package/js/processSubjectValue.function.js +122 -0
- package/js/processSubjectValue.function.js.map +1 -0
- package/js/processTagArray.d.ts +9 -0
- package/js/processTagArray.js +60 -0
- package/js/processTagArray.js.map +1 -0
- package/js/processTagResult.function.d.ts +10 -0
- package/js/processTagResult.function.js +39 -0
- package/js/processTagResult.function.js.map +1 -0
- package/js/providers.d.ts +17 -0
- package/js/providers.js +86 -0
- package/js/providers.js.map +1 -0
- package/js/redrawTag.function.d.ts +7 -0
- package/js/redrawTag.function.js +8 -0
- package/js/redrawTag.function.js.map +1 -0
- package/js/render.d.ts +1 -0
- package/js/render.js +17 -0
- package/js/render.js.map +1 -0
- package/js/renderAppToElement.d.ts +14 -0
- package/js/renderAppToElement.js +57 -0
- package/js/renderAppToElement.js.map +1 -0
- package/js/setUse.function.d.ts +23 -0
- package/js/setUse.function.js +14 -0
- package/js/setUse.function.js.map +1 -0
- package/js/state.d.ts +24 -0
- package/js/state.js +98 -0
- package/js/state.js.map +1 -0
- package/js/tag.d.ts +7 -0
- package/js/tag.js +46 -0
- package/js/tag.js.map +1 -0
- package/js/tagElement.d.ts +14 -0
- package/js/tagElement.js +57 -0
- package/js/tagElement.js.map +1 -0
- package/js/tagGateway.function.d.ts +14 -0
- package/js/tagGateway.function.js +138 -0
- package/js/tagGateway.function.js.map +1 -0
- package/js/tagRunner.d.ts +6 -0
- package/js/tagRunner.js +19 -0
- package/js/tagRunner.js.map +1 -0
- package/js/templater.utils.d.ts +27 -0
- package/js/templater.utils.js +98 -0
- package/js/templater.utils.js.map +1 -0
- package/js/updateTag.utils.d.ts +6 -0
- package/js/updateTag.utils.js +102 -0
- package/js/updateTag.utils.js.map +1 -0
- package/js/wait.d.ts +1 -0
- package/js/wait.js +8 -0
- package/js/wait.js.map +1 -0
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};function r(t,e=new WeakMap){if(null===t||"object"!=typeof t)return t;if(e.has(t))return e.get(t);if(t instanceof Date)return new Date(t);if(t instanceof RegExp)return new RegExp(t);const n=Array.isArray(t)?[]:Object.create(Object.getPrototypeOf(t));if(e.set(t,n),Array.isArray(t))for(let o=0;o<t.length;o++)n[o]=r(t[o],e);else for(const o in t)t.hasOwnProperty(o)&&(n[o]=r(t[o],e));return n}function n(t,e){if(t===e)return!0;if("object"!=typeof t||"object"!=typeof e||null===t||null===e)return!1;const r=Object.keys(t),o=Object.keys(e);if(r.length!==o.length)return!1;for(const s of r)if(!o.includes(s)||!n(t[s],e[s])){if(t[s]instanceof Function&&e[s]instanceof Function&&t[s].toString()===e[s].toString())continue;return!1}if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(!n(t[r],e[r]))return!1}else if(Array.isArray(t)||Array.isArray(e))return!1;return!0}function o(t){const e={templater:t,renderCount:0,mutatingRender:()=>{throw new Error('Tag function "render()" was called in sync but can only be called async')},render:()=>(++e.renderCount,e.mutatingRender()),hasPropChanges:(t,r,o)=>{const s=e.templater.cloneProps;return!(void 0===t&&t===o||n(r,s))}};return e}t.d(e,{xQ:()=>p,Vp:()=>B,RN:()=>z,dy:()=>$,ey:()=>H,nc:()=>q,a:()=>l,TF:()=>D,Je:()=>W,SB:()=>J,_q:()=>C,Dc:()=>_});const s=[];function a(t,e){s.forEach((r=>r.beforeRender(t,e)))}function i(t){const e={beforeRender:t.beforeRender||(()=>{}),beforeRedraw:t.beforeRedraw||(()=>{}),afterRender:t.afterRender||(()=>{})};s.push(e)}const u={providers:[],currentTag:void 0,ownerTag:void 0};function c(t){return u.providers.find((e=>e.constructMethod===t))}const l={create:t=>{const e=c(t);if(e)return e.clone=r(e.instance),e.instance;const n=t.constructor?new t:t();return u.providers.push({constructMethod:t,instance:n,clone:r(n)}),n},inject:t=>{const e=c(t);if(e)return e.instance;let n={ownerTag:u.ownerTag};for(;n.ownerTag;){const e=n.ownerTag.providers.find((e=>{if(e.constructMethod===t)return!0}));if(e)return e.clone=r(e.instance),u.providers.push(e),e.instance;n=n.ownerTag}const o=`Could not inject provider: ${t}`;throw console.warn(`${o}. Available providers`,u.providers),new Error(o)}};i({beforeRedraw:(t,e)=>{u.currentTag=e,u.ownerTag=e.ownerTag,e.providers.length&&(u.providers.length=0,u.providers.push(...e.providers))},afterRender:(t,e)=>{e.providers=[...u.providers],u.providers.length=0}});class p{subscribers=[];value;subscribe(t){this.subscribers.push(t),p.globalSubs.push(t),++p.globalSubCount;const e=()=>{d(this.subscribers,t),d(p.globalSubs,t),--p.globalSubCount};return e.unsubscribe=e,e}set(t){this.value=t,this.subscribers.forEach((e=>{e.value=t,e(t)}))}next=this.set}function d(t,e){const r=t.indexOf(e);-1!==r&&t.splice(r,1)}p.globalSubCount=0,p.globalSubs=[];class g extends p{value;constructor(t){super(),this.value=t}subscribe(t){const e=super.subscribe(t);return t(this.value),e}}function f(t,e){function r(r,n){const o=e.tagSupport.renderCount,s=t.bind(r)(...n);if(o===e.tagSupport.renderCount)return e.tagSupport.render(),s instanceof Promise&&s.then((()=>{e.tagSupport.render()})),s}return r.tagFunction=t,r}function h(t,e,r){t.redraw=()=>{const n=e.tag,s=n?.tagSupport||o(t);++s.renderCount,e.tagSupport=s;const i=t;s.mutatingRender=s.mutatingRender||e.tagSupport?.mutatingRender||i.tagSupport.mutatingRender;const c=n?.ownerTag||r;a(s,s.oldest),s.oldest?s.oldest.beforeRedraw():u.ownerTag=c;const l=t.wrapper();l.tagSupport=s,s.oldest?s.oldest.afterRender():l.afterRender(),t.newest=l,l.ownerTag=c;const p=s.oldest=s.oldest||l;s.newest=l;const d=p.tagSupport;if(p.tagSupport=d||s,p.tagSupport.templater=t,l.setSupport(s),!n||!n.isLikeTag(l))return e.set(t),l;p.updateByTag(l)}}function v(t,e,r){const n=t.split(".");if("style"===n[0]&&(r.style[n[1]]=e),"class"===n[0])return n.pop(),void(e?n.forEach((t=>r.classList.remove(t))):n.forEach((t=>r.classList.add(t))))}const w=/^\s*{/,y=/}\s*$/;function b(t,e,r){t.getAttributeNames().forEach((n=>{const o=t.getAttribute(n),s=function(t){return t.search(/^(class|style)(\.)/)>=0}(n);if(o&&o.search(w)>=0&&o.search(y)>=0){const a=o.replace("{","").split("").reverse().join("").replace("}","").split("").reverse().join(""),i=e[a];if(i instanceof Function)return void(t[n]=function(...e){i(t,e)});if(i instanceof p){t.removeAttribute(n);const e=e=>{if(e instanceof Function)return t[n]=function(...r){e(t,r)},void(t[n].tagFunction=e);s&&v(n,e,t),e&&t.setAttribute(n,e),void 0===e||!1===e||null===e?t.removeAttribute(n):t.setAttribute(n,e)},o=i.subscribe(e);return void r.cloneSubs.push(o)}t.setAttribute(n,i.value)}else if(s)return v(n,o,t)}))}const m=/(?:<[^>]*>)|({__tagVar[^}]+})/g;function S(t,e,s){if(!t.children||"TEMPLATE"===t.tagName)return;const i={added:0,removed:0},c=new Array(...t.children);function l(t,c,l){l.forEach(((t,e)=>{if(!(e<c)&&"TEMPLATE"===t.tagName&&void 0!==t.getAttribute("interpolate")&&void 0!==t.getAttribute("end"))return t})),function(t,e,s,i){if(!t.hasAttribute("end"))return;const c=t.getAttribute("id");if(c?.substring(0,L.length)!==L)return;const l=e[c];if(l instanceof p){const e=e=>{!function(t,e,s,i,c){if(t instanceof B)return t.tagSupport||(t.tagSupport=o(),t.tagSupport.mutatingRender=i.tagSupport.mutatingRender,t.tagSupport.oldest=t.tagSupport.oldest||t,i.children.push(t),t.ownerTag=i),void F(t,e,s,{counts:c});if(t instanceof Array&&t.every((t=>t instanceof B)))return function(t,e,r,n,o){t.lastArray=t.lastArray||[];let s=0;return t.lastArray=t.lastArray.filter(((r,n)=>{const a=e.length-1<n-s,i=e[n-s],u=i?.arrayValue;return!a&&u===r.tag.arrayValue||(t.lastArray[n].tag.destroy(o.removed,!1),++s,++o.removed,!1)})),void e.forEach(((e,s)=>{if(e.tagSupport=n.tagSupport,e.ownerTag=n,n.children.push(e),void 0===e.arrayValue&&!Object.keys(e).includes("arrayValue")){const t=new Error("Use html`...`.key(item) instead of html`...` to template an Array");throw t.code="add-array-key",t}const a=t.lastArray[s];if(a)return void(a.tag.arrayValue===e.arrayValue&&a.tag.updateValues(e.values));const i=r||r.clone;F(e,t,i,{index:s,counts:o})}))}(e,t,s,i,c);if(k(t))return function(t,e,s,i,c){if(!0!==t.tagged){let e=t.name||t.constructor?.name;throw"Function"===e&&(e=void 0),new Error(`Not a tag component. Wrap your function with tag(). Example tag(props => html\`\`) on component:\n\n${e||t.toString().substring(0,120)}\n\n`)}const l=e.tagSupport||o(t);l.mutatingRender=()=>{const o=l.renderCount;if(e.tag){if(function(t){t.providers.filter((t=>!n(t.instance,t.clone))).forEach((e=>{!function(t,e){V(t,e).forEach((({tag:t,renderCount:e,provider:n})=>{e===t.tagSupport.renderCount&&(n.clone=r(n.instance),t.tagSupport.render())}))}(t.getAppElement(),e),e.clone=r(e.instance)}))}(e.tag),o!==l.renderCount)return l.newest;if(!l.hasPropChanges(t.props,t.newProps,e.tag.tagSupport.templater.props))return l.newest=t.redraw(t.newProps),l.newest}return l.newest=i.tagSupport.render()};const p=t;let d=p.newest;u.ownerTag=i;const g=!d;return a(l,d),g&&(d=p.wrapper(),d.tagSupport=l,d.afterRender(),p.oldest=d,l.oldest=d,t.oldest=d),p.newest=d,d.ownerTag=i,d.ownerTag=i,i.children.push(d),d.setSupport(l),void F(d,e,s,{counts:c})}(t,e,s,i,c);if(e.tag){const r=s.clone||s;r.parentNode.insertBefore(s,r);const n=c.removed,o=e.tag.destroy(n);c.removed=n+o,delete e.tag;const a=P(t,r);return void(s.clone=a)}const l=s.clone||s,p=P(t,l);s.clone=p;const d=i.clones.indexOf(l);d>=0&&!i.clones.includes(p)&&!l.parentNode&&(i.clones.splice(d,1),i.clones.push(p))}(e,l,t,s,i),setTimeout((()=>{i.added=0,i.removed=0}),0)},c=l.subscribe(e);return void s.cloneSubs.push(c)}const d=P(l,t.clone||t);s.clones.push(d),t.clone=d}(t,e,s,i)}c.forEach(((t,r)=>{if(l(t,r,c),t.children){const r=new Array(...t.children);r.forEach(((t,n)=>{(function(t){return"TEMPLATE"===t.tagName&&void 0!==t.getAttribute("interpolate")&&void 0!==t.getAttribute("end")})(t)&&l(t,n,r),S(t,e,s)}))}}))}function T(t,e,r){(function(t){const e=function(t){const e=[];return{string:t.replace(m,((t,r)=>{if(t.startsWith("<"))return t;const n=r.substring(1,r.length-1);return e.push(n),`<template interpolate end id="${n}"></template>`})),keys:e}}(t.innerHTML);return e.string=e.string.replace(O,L),t.innerHTML=e.string,e})(t).keys.length&&S(t,e,r),b(t,e,r),function t(n){new Array(...n).forEach((n=>{b(n,e,r),n.children&&t(n.children)}))}(t.children)}function A(t,e,r){const n=document.createElement("div");n.id="tag-temp-holder",n.innerHTML="<div></div>"+e.string,T(n,t.update(),t);const o=function(t,e){const r=[],n=t.children[0];let o=n.nextSibling;for(t.removeChild(n);o;){const t=o.nextSibling;E(o,e),r.push(o),o=t}return r}(n,r);return t.clones.push(...o),o}function E(t,e){e.parentNode.insertBefore(t,e)}class R{props;newProps;cloneProps;tagged;wrapper;newest;oldest;redraw}function C(t){return(e,n)=>{const o=e instanceof B,s=function(t,e){if("object"!=typeof t)return t;const r={...t};return Object.entries(r).forEach((([t,e])=>{r[t]=e instanceof Function?(...t)=>((t,e)=>{const r=t(...e);return i.newest?.ownerTag?.tagSupport.render(),r})(e,t):e})),r}(o?0:e);let a=s;o&&(n=e,a=x);const i=new R;return i.tagged=!0,i.props=e,i.newProps=s,i.cloneProps=r(s),i.wrapper=()=>t(a,n),i}}const x=new class{};function P(t,e){const r=e.parentNode;void 0!==t&&!1!==t&&null!==t||(t="");const n=document.createTextNode(t);return r.insertBefore(n,e),r.removeChild(e),n}function F(t,e,r,{index:n,counts:o}){const s=t.getTemplate();if(void 0!==n){const a=e.lastArray[n];return a?.tag.isLikeTag(t)?void a.tag.updateByTag(t):(A(t,s,r).forEach((t=>j(t,o))),void e.lastArray.push({tag:t,index:n}))}if(e.tag&&e.tag.isLikeTag(t)){if(e instanceof Function){const t=e(e.tag.tagSupport);return void e.tag.updateByTag(t)}e.tag.updateByTag(t)}else A(t,s,r.clone||r).forEach((t=>j(t,o))),e.tag=t}function k(t){return t instanceof R}function j(t,e){t.getAttribute&&(function(t,e){const r=t.oninit;if(!r)return;const n=r.tagFunction;if(!n)return;const o=n.tagFunction;o&&(o({target:t,stagger:e.added}),++e.added)}(t,e),t.children&&new Array(...t.children).forEach((t=>j(t,e))))}function V(t,e,r=[]){const n=t.providers.find((t=>t.constructMethod===e.constructMethod));return n&&r.push({tag:t,renderCount:t.tagSupport.renderCount,provider:n}),t.children.forEach((t=>V(t,e,r))),r}const L="__tagVar",M="--"+L+"--",N=new RegExp(L,"g"),O=new RegExp(M,"g");class B{strings;values;context={};clones=[];cloneSubs=[];children=[];tagSupport;ownerTag;arrayValue;constructor(t,e){this.strings=t,this.values=e}providers=[];beforeRedraw(){!function(t,e){s.forEach((r=>r.beforeRedraw(t,e)))}(this.tagSupport,this)}afterRender(){!function(t,e){s.forEach((r=>r.afterRender(t,e)))}(this.tagSupport,this)}key(t){return this.arrayValue=t,this}destroy(t=0,e=!1){return this.children.forEach(((t,e)=>t.destroy(0,!0))),this.destroySubscriptions(),e||(t=this.destroyClones(t)),t}destroySubscriptions(){this.cloneSubs.forEach((t=>t.unsubscribe())),this.cloneSubs.length=0}destroyClones(t=0){return this.clones.reverse().forEach(((e,r)=>{let n=Promise.resolve();e.ondestroy&&(n=function(t,e){const r=t.ondestroy;if(!r)return;const n=r.tagFunction;if(!n)return;const o=n.tagFunction;return o?o({target:t,stagger:e}):void 0}(e,t)),n.then((()=>e.parentNode.removeChild(e)))})),this.clones.length=0,t}updateByTag(t){this.updateConfig(t.strings,t.values),this.tagSupport.templater=t.tagSupport.templater}lastTemplateString=void 0;setSupport(t){this.tagSupport=this.tagSupport||t,this.tagSupport.mutatingRender=this.tagSupport.mutatingRender||t.mutatingRender,this.children.forEach((e=>e.setSupport(t)))}updateConfig(t,e){this.strings=t,this.updateValues(e)}getTemplate(){return{string:this.lastTemplateString=this.strings.map(((t,e)=>t.replace(N,M)+(this.values.length>e?`{${L}${e}}`:""))).join(""),strings:this.strings,values:this.values,context:this.context}}isLikeTag(t){return t.lastTemplateString===this.lastTemplateString&&(t.values.length===this.values.length&&!!t.values.every(((t,e)=>{const r=this.values[e];return t instanceof Function&&r instanceof Function?!(t.toString()!==r.toString()):!(t instanceof B&&r instanceof B&&(t.ownerTag=this,this.children.push(t),t.lastTemplateString||t.getTemplate().string,!t.isLikeTag(r)))})))}update(){return this.updateContext(this.context)}updateValues(t){return this.values=t,this.updateContext(this.context)}updateContext(t){return this.strings.map(((e,r)=>{const s=L+r,i=this.values.length>r,u=this.values[r],c=t[s];if(c){const t=c.value?.tag;if(k(u)){const t=u.cloneProps,e=c.tag;if(!c.tag)return h(u,c,this),void u.redraw(t);const r=e.tagSupport,s=u.tagSupport||r||o(u),a=s.templater?.cloneProps,i=s.templater?.props;if(e&&(void 0===i&&i===t||n(a,t)))return;return h(u,c,this),r.templater=u,void(c.value.tag=r.newest=u.redraw(t))}if(t){const e=t.tagSupport,r=u;a(e,t),e.oldest.beforeRedraw();const n=r.wrapper();return n.tagSupport=e,r.newest=n,e.oldest.afterRender(),t.updateByTag(n),void c.set(u)}return u instanceof Function?void c.set(f(u,this)):void c.set(u)}k(u)?h(u,t[s]=new g(u),this):u instanceof Function?t[s]=function(t,e){return new g(f(t,e))}(u,this):i&&(u instanceof B&&(u.ownerTag=this,this.children.push(u)),t[s]=new g(u))})),t}getAppElement(){let t=this;for(;t.ownerTag;)t=t.ownerTag;return t}}function $(t,...e){return new B(t,e)}function _(t){return new Promise((e=>{setTimeout((()=>{e(0)}),t)}))}function D(t,e,r){const n=t(r),s=function(t){const e=o(t);a(e);const r=e.templater.wrapper();return r.tagSupport=e,r.afterRender(),{tag:r,tagSupport:e}}(n),{tag:i,tagSupport:u}=s;let c;u.mutatingRender=()=>{a(u,i),i.beforeRedraw();const t=c=n.wrapper();return t.setSupport(i.tagSupport),i.afterRender(),i.updateByTag(t),c&&c.destroy(0),c};const l=i.updateValues(i.values),p=i.getTemplate();e.innerHTML=p.string,T(e,l,i)}let H;function W(t){H=t}function q(t){H||t()}i({beforeRender:(t,e)=>{W(e)}});const I={array:[],rearray:[]};function J(t,e){const r=I.rearray[I.array.length];if(r){const t=Q(r);return I.array.push(e),t}return I.array.push(e),t}function Q(t){const[e]=t(U),[r]=t(e);if(r!==U)throw new Error('State property not used correctly.\n\nFor "let" state use `let name = state(default, x => [name, name = x])`\n\nFor "const" state use `const name = state(default)`\n\nProblem function:\n'+t+"\n");return e}i({beforeRender:t=>{t.state=t.state||{newest:[]}},beforeRedraw:t=>{const e=t.state;I.rearray.length=0,e?.newest.length&&I.rearray.push(...e.newest)},afterRender:t=>{if(I.rearray.length&&I.rearray.length!==I.array.length)throw new Error(`States lengths mismatched ${I.rearray.length} !== ${I.array.length}`);I.rearray.length=0;const e=t.state;e.newest.length=0,e.newest.push(...I.array),e.oldest=e.oldest||[...I.array],I.array.length=0}});class U{}let z=()=>t=>()=>{throw new Error("The real callback function was called and that should never occur")};function G(t,e){t.forEach(((t,r)=>{const n=Q(t),[o]=e[r](n)}))}i({beforeRender:t=>{t.callbacks=[],z=()=>{const e=r=>{const n=()=>{const n=t.state,o=e.state,s=n.newest;G(s,o);const a=r();G(o,s),t.render(),a instanceof Promise&&a.finally((()=>{G(o,s),t.render()}))},o=t.state;return n.state=o,n};return t.callbacks.push(e),e}},afterRender:t=>{t.callbacks.forEach((e=>{const r=t.state;e.state=[...r.newest]}))}});var K=e.xQ,X=e.Vp,Y=e.RN,Z=e.dy,tt=e.ey,et=e.nc,rt=e.a,nt=e.TF,ot=e.Je,st=e.SB,at=e._q,it=e.Dc;export{K as Subject,X as Tag,Y as getCallback,Z as html,tt as initCurrentTag,et as onInit,rt as providers,nt as renderAppToElement,ot as setCurrentInitTag,st as state,at as tag,it as wait};
|
|
1
|
+
var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{xQ:()=>r,Vp:()=>et,fx:()=>y,RN:()=>jt,er:()=>b,dy:()=>rt,jW:()=>lt,SO:()=>H,IT:()=>z,SW:()=>u,js:()=>dt,ev:()=>xt,nc:()=>Rt,a:()=>wt,_b:()=>S,hs:()=>g,lc:()=>l,SB:()=>vt,_q:()=>ht,bX:()=>ot,pJ:()=>ft});class r{isSubject=!0;subscribers=[];value;subscribe(t){this.subscribers.push(t),o.globalSubs.push(t),o.globalSubCount$.set(o.globalSubCount$.value+1);const e=()=>{e.unsubscribe()};return e.unsubscribe=()=>{n(this.subscribers,t),n(o.globalSubs,t),o.globalSubCount$.set(o.globalSubCount$.value-1),e.unsubscribe=()=>{}},e}set(t){this.value=t,this.subscribers.forEach((e=>{e.value=t,e(t)}))}next=this.set}function n(t,e){const r=t.indexOf(e);-1!==r&&t.splice(r,1)}const o=r;o.globalSubs=[],o.globalSubCount$=new r,o.globalSubCount$.set(0);class s extends r{value;constructor(t){super(),this.value=t}subscribe(t){const e=super.subscribe(t);return t(this.value),e}}function a(t,e=new WeakMap){if(null===t||"object"!=typeof t)return t;if(e.has(t))return e.get(t);if(t instanceof Date)return new Date(t);if(t instanceof RegExp)return new RegExp(t);const r=Array.isArray(t)?[]:Object.create(Object.getPrototypeOf(t));if(e.set(t,r),Array.isArray(t))for(let n=0;n<t.length;n++)r[n]=a(t[n],e);else for(const n in t)t.hasOwnProperty(n)&&(r[n]=a(t[n],e));return r}function i(t,e){if(t===e)return!0;if("object"!=typeof t||"object"!=typeof e||null===t||null===e)return!1;const r=Object.keys(t),n=Object.keys(e);if(r.length!==n.length)return!1;for(const o of r)if(!n.includes(o)||!i(t[o],e[o])){if(t[o]instanceof Function&&e[o]instanceof Function&&t[o].toString()===e[o].toString())continue;return!1}if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(!i(t[r],e[r]))return!1}else if(Array.isArray(t)||Array.isArray(e))return!1;return!0}function u(t){return!0===t?.isTemplater}function c(t){return!0===t?.isTag}function p(t){return!(!0!==t?.isSubject&&!t?.subscribe)}function l(t){const e={beforeRender:t.beforeRender||(()=>{}),beforeRedraw:t.beforeRedraw||(()=>{}),afterRender:t.afterRender||(()=>{}),beforeDestroy:t.beforeDestroy||(()=>{})};l.tagUse.push(e)}function g(t,e){l.tagUse.forEach((r=>r.beforeRender(t,e)))}function d(t,e){l.tagUse.forEach((r=>r.afterRender(t,e)))}function f(t,e){l.tagUse.forEach((r=>r.beforeRedraw(t,e)))}l.tagUse=[],l.memory={};class m{tagged;wrapper;newest;oldest;tagSupport;constructor(t){this.tagSupport=b(this,t)}redraw;isTemplater=!0;forceRenderTemplate(t,e){const r=this.wrapper();return r.setSupport(t),r.afterRender(),this.oldest=r,t.oldest=r,this.oldest=r,this.newest=r,r.ownerTag=e,r}renderWithSupport(t,e,r){++t.memory.renderCount;const n=e?.ownerTag||r;t.oldest?(t.props=t.latestProps,t.clonedProps=t.latestClonedProps,f(t,t.oldest)):(g(t,n),l.memory.providerConfig.ownerTag=n);const o=this,s=o.wrapper();t.latestProps=s.tagSupport.props,t.latestClonedProps=s.tagSupport.clonedProps,s.setSupport(t),d(t,s),o.newest=s,s.ownerTag=n;const a=t.oldest=t.oldest||s;t.newest=s;const i=a.tagSupport;return a.tagSupport=i||t,a.tagSupport.templater=o,e&&e.isLikeTag(s)?(a.updateByTag(s),{remit:!1,retag:s}):{remit:!0,retag:s}}}function h(t,e){const r=function(t,r){if("object"!=typeof t)return t;const n={...t};return Object.entries(n).forEach((([t,r])=>{n[t]=r instanceof Function?(...t)=>function(t,r){const n=t(...r);return e.newest?.ownerTag?.tagSupport.render(),n}(r,t):r})),n}(c(t)?0:t);return r}class y{templater;props;clonedProps;latestProps;latestClonedProps;memory={context:{},state:{newest:[]},providers:[],renderCount:0};constructor(t,e){this.templater=t,this.props=e,this.latestProps=e;const r=h(e,t);this.latestClonedProps=a(r),this.clonedProps=this.latestClonedProps}oldest;newest;hasPropChanges(t,e,r){const n=this.props;return!(void 0===t&&t===r||i(e,n))}mutatingRender(){const t='Tag function "render()" was called in sync but can only be called async';throw console.error(t,{tagSupport:this}),new Error(t)}render(){return++this.memory.renderCount,this.mutatingRender()}renderExistingTag(t,e){const r=this.memory.renderCount;if(function(t){t.tagSupport.memory.providers.filter((t=>!i(t.instance,t.clone))).forEach((e=>{!function(t,e){w(t,e).forEach((({tag:t,renderCount:e,provider:r})=>{e===t.tagSupport.memory.renderCount&&(r.clone=a(r.instance),t.tagSupport.render())}))}(t.getAppElement(),e),e.clone=a(e.instance)}))}(t),r!==this.memory.renderCount)return!0;const n=t.tagSupport.templater,o=e.tagSupport.props,s=n?.tagSupport.props;return function(t,e,r,n,o){const s=t.hasPropChanges(e,n,r);return t.newest=o.redraw(),!s}(this,o,s,e.tagSupport.clonedProps,this.templater)}}function b(t,e){return new y(t,e)}function w(t,e,r=[]){const n=t.tagSupport.memory.providers.find((t=>t.constructMethod===e.constructMethod));return n&&r.push({tag:t,renderCount:t.tagSupport.memory.renderCount,provider:n}),t.children.forEach((t=>w(t,e,r))),r}function S(t,e,r){const n=t?.tagSupport||b(e);return e.renderWithSupport(n,t,r)}function v(t,e){function r(r,n){const o=e.tagSupport.memory.renderCount,s=t.bind(r)(...n);if(o===e.tagSupport.memory.renderCount)return e.tagSupport.render(),s instanceof Promise?s.then((()=>e.tagSupport.render()&&"no-data-ever")):Promise.resolve(s).then((()=>"no-data-ever"))}return r.tagFunction=t,r}function T(t,e,r){t.redraw=n=>{const o=e.tag,{remit:s,retag:a}=S(o,t,r);if(e.tagSupport=a.tagSupport,s){if(e.set(t),n){const t=o.tagSupport.memory.context;Object.values(t).forEach((t=>{t.value?.isTemplater&&t.value.redraw()}))}return a}}}function E(t,e){e.parentNode.insertBefore(t,e)}function C(t,e,r){const n=t.split(".");if("style"===n[0]&&(r.style[n[1]]=e),"class"===n[0])return n.shift(),void(e?n.forEach((t=>r.classList.add(t))):n.forEach((t=>r.classList.remove(t))))}function A(t,e,r){const n=t.getAttributeNames();"TEXTAREA"!==t.nodeName||n.includes("value")||P("textVarValue",t.getAttribute("textVarValue"),t,e,r,((e,r)=>t.value=r));const o=(e,r)=>{t.setAttribute(e,r)};n.forEach((n=>{P(n,t.getAttribute(n),t,e,r,o)}))}function R(t){return t.search(/^(class|style)(\.)/)>=0}function P(t,e,r,n,o,s){if(V(e))return function(t,e,r,n,o,s){return O(t,k(n,e),r,o,s)}(t,e,r,n,o,s);if(V(t)){let e;const a=k(n,t).subscribe((t=>{!function(t,e,r,n,o){if(e&&e!=t&&("string"==typeof e?r.removeAttribute(e):e instanceof Object&&Object.entries(e).forEach((([t])=>r.removeAttribute(t)))),"string"!=typeof t)t instanceof Object&&Object.entries(t).forEach((([t,e])=>O(t,e,r,n,o)));else{if(!t.length)return;O(t,"",r,n,o)}}(t,e,r,o,s),e=t}));return o.cloneSubs.push(a),void r.removeAttribute(t)}return R(t)?C(t,e,r):void 0}const x=/^\s*{__tagvar/,j=/}\s*$/;function V(t){return t&&t.search(x)>=0&&t.search(j)>=0}function k(t,e){return t[e.replace("{","").split("").reverse().join("").replace("}","").split("").reverse().join("")]}function O(t,e,r,n,o){const s=R(t);if(e instanceof Function){const n=function(...t){return e(r,t)};r[t].action=n}if(p(e)){r.removeAttribute(t);const a=e=>function(t,e,r,n,o){if(t instanceof Function)return e[r]=function(...r){return t(e,r)},void(e[r].tagFunction=t);if(n)return void C(r,t,e);if(t)return void o(r,t);void 0===t||!1===t||null===t?e.removeAttribute(r):o(r,t)}(e,r,t,s,o),i=e.subscribe(a);n.cloneSubs.push(i)}else o(t,e)}const B=/(?:<[^>]*?(?:(?:\s+\w+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^>\s]+)))*\s*)\/?>)|({__tagvar[^}]+})/g;function F(t,e,r,{index:n,counts:o,forceElement:s}){if(void 0!==n){const a=e.lastArray[n];if(a?.tag.isLikeTag(t))return a.tag.updateByTag(t),[];const i=r,u=t.buildBeforeElement(i,{counts:o,forceElement:s});return e.lastArray.push({tag:t,index:n}),u}if(e.tag&&!s&&e.tag.isLikeTag(t)){if(e instanceof Function){const t=e(e.tag.tagSupport);return e.tag.updateByTag(t),[]}return e.tag.updateByTag(t),[]}const a=t.buildBeforeElement(r,{counts:o,forceElement:s});return e.tag=t,a}function N(t,e,r,n,o){if(!0!==t.tagged){let e=t.wrapper.original.name||t.wrapper.original.constructor?.name;"Function"===e&&(e=void 0);const r=e||t.wrapper.original.toString().substring(0,120);throw new Error(`Not a tag component. Wrap your function with tag(). Example tag(props => html\`\`) on component:\n\n${r}\n\n`)}const s=t,a=t.tagSupport;a.mutatingRender=()=>e.tag&&a.renderExistingTag(e.tag,s)?e.tag:a.newest=n.tagSupport.render();let i=s.newest;return l.memory.providerConfig.ownerTag=n,(!i||o.forceElement)&&(i||g(a,n),i&&f(a,i),i=s.forceRenderTemplate(a,n)),n.children.push(i),a.latestProps=i.tagSupport.props,a.latestClonedProps=i.tagSupport.clonedProps,a.memory=i.tagSupport.memory,i.setSupport(a),F(i,e,r,o)}function _(t,e,r,n,o){const s=[];t.lastArray=t.lastArray||[];let a=0;t.lastArray=t.lastArray.filter(((r,n)=>{const s=e.length-1<n-a,i=e[n-a],u=i?.arrayValue;return!s&&u===r.tag.arrayValue||(t.lastArray[n].tag.destroy({stagger:o.counts.removed,byParent:!1}),++a,++o.counts.removed,!1)}));const i=r||r.clone;return e.forEach(((e,r)=>{if(e.tagSupport=b({}),e.tagSupport.mutatingRender=()=>(n.tagSupport.render(),e),e.ownerTag=n,n.children.push(e),void 0===e.arrayValue&&!Object.keys(e).includes("arrayValue")){const t=new Error("Use html`...`.key(item) instead of html`...` to template an Array");throw t.code="add-array-key",t}const a=t.lastArray[r];if(a)return a.tag.arrayValue===e.arrayValue&&a.tag.updateValues(e.values),[];const u=F(e,t,i,{index:r,...o});s.push(...u)})),s}var $;function L(t,e,r,n){const o=e.clone||r,s=D(t,o);e.clone=s;const a=[],i=n.clones.indexOf(o);return i>=0&&!n.clones.includes(s)&&!o.parentNode&&(n.clones.splice(i,1),n.clones.push(s),a.push(s)),a}function M(t,e,r,n,o){return t.tagSupport||(t.tagSupport=b({}),t.tagSupport.mutatingRender=n.tagSupport.mutatingRender,t.tagSupport.oldest=t.tagSupport.oldest||t,n.children.push(t),t.ownerTag=n),F(t,e,r,o)}function U(t,e,r,n){const o=e.tag,s=e.clone||r;s.parentNode.insertBefore(r,s),e.clone&&e.clone.parentNode.removeChild(e.clone),delete e.tag;const a=n.counts.removed,i=o.destroy({stagger:a}).then((t=>n.counts.removed=a+t));delete e.tag;const u=D(t,r);return e.clone=u,i}function W(t,e,r,n,o){const s=[];if(!t.hasAttribute("end"))return s;const a=t.getAttribute("id");if(a?.substring(0,Z.length)!==Z)return s;const i=e[a];let p=o.forceElement;const l=i.subscribe((e=>{const{clones:o}=function(t,e,r,n,o){const s=function(t){return u(t)?$.tagComponent:c(t)?$.tag:t instanceof Array&&t.every((t=>c(t)))?$.tagArray:$.value}(t);if(s!==$.value&&e.clone){const t=e.clone,n=t.parentNode;r.removeAttribute("removedAt"),n.insertBefore(r,t),n.removeChild(t),delete e.clone}switch(s){case $.tag:return{clones:M(t,e,r,n,o)};case $.tagArray:return{clones:_(e,t,r,n,o)};case $.tagComponent:return{clones:N(t,e,r,n,o)}}return e.tag?{clones:[],promise:U(t,e,r,o)}:{clones:L(t,e,r,n)}}(e,i,t,r,{counts:n,forceElement:p});p&&(p=!1),o.push(...o),setTimeout((()=>{n.added=0,n.removed=0}),0)}));return r.cloneSubs.push(l),s}function D(t,e){const r=e.parentNode;void 0!==t&&!1!==t&&null!==t||(t="");const n=document.createTextNode(t);return r.insertBefore(n,e),r.removeChild(e),"TEMPLATE"===e.nodeName&&e.setAttribute("removedAt",Date.now().toString()),n}function I(t,e){t.getAttribute&&(e.forceElement||function(t,e){const r=t.oninit;if(!r)return;const n=r.tagFunction;if(!n)return;const o=n.tagFunction;o&&(o({target:t,stagger:e.added}),++e.added)}(t,e.counts),t.children&&new Array(...t.children).forEach((t=>I(t,e))))}!function(t){t.tag="tag",t.tagArray="tag-array",t.tagComponent="tag-component",t.value="value"}($||($={}));const J=new RegExp('\\s*<template interpolate end id="__tagvar(\\d{1,4})"([^>]*)></template>(\\s*)');function X(t,e,r,n,o){if(!o||"TEMPLATE"===t.tagName)return[];const s={added:0,removed:0},a=[],i=new Array(...o);return"TEXTAREA"===t.tagName&&q(t),i.forEach((t=>{const o=W(t,e,r,s,n);"TEXTAREA"===t.tagName&&q(t),a.push(...o),t.children&&new Array(...t.children).forEach((t=>{(function(t){return"TEMPLATE"===t.tagName&&void 0!==t.getAttribute("interpolate")&&void 0!==t.getAttribute("end")})(t)&&W(t,e,r,s,n);const o=X(t,e,r,n,t.children);a.push(...o)}))})),a}function q(t){const e=t.value;if(e.search(J)>=0){const r=e.match(/__tagvar(\d{1,4})/),n="{"+(r?r[0]:"")+"}";t.value="",t.setAttribute("textVarValue",n)}}function H(t,e,r,n,o){const s=[],a=r.interpolation,i=t.children[0].content.children;if(a.keys.length){const r=X(t,e,n,o,i);s.push(...r)}return A(t,e,n),Q(i,e,n),s}function Q(t,e,r){new Array(...t).forEach((t=>{A(t,e,r),t.children&&Q(t.children,e,r)}))}function z(t){const e=function(t){const e=[];return{string:t.replace(B,((t,r)=>{if(t.startsWith("<"))return t;const n=r.substring(1,r.length-1);return e.push(n),`<template interpolate end id="${n}"></template>`})),keys:e}}(t);return e.string=e.string.replace(tt,Z),e}function G(t,e,r){delete e.tag,delete e.tagSupport,delete r.tagSupport,t.destroy()}const Z="__tagvar",K="--"+Z+"--",Y=new RegExp(Z,"g"),tt=new RegExp(K,"g");class et{strings;values;isTag=!0;clones=[];cloneSubs=[];children=[];tagSupport;ownerTag;insertBefore;appElement;arrayValue;constructor(t,e){this.strings=t,this.values=e}beforeRedraw(){f(this.tagSupport,this)}afterRender(){d(this.tagSupport,this)}key(t){return this.arrayValue=t,this}async destroy(t={stagger:0,byParent:!1}){!!this.tagSupport&&function(t,e){l.tagUse.forEach((r=>r.beforeDestroy(t,e)))}(this.tagSupport,this),this.destroySubscriptions();const e=this.children.map((e=>e.destroy({...t,byParent:!0})));return t.byParent||(t.stagger=await this.destroyClones(t)),this.ownerTag&&(this.ownerTag.children=this.ownerTag.children.filter((t=>t!==this))),await Promise.all(e),t.stagger}destroySubscriptions(){this.cloneSubs.forEach((t=>t.unsubscribe())),this.cloneSubs.length=0}async destroyClones({stagger:t}={stagger:0}){const e=this.clones.reverse().map(((e,r)=>{let n=Promise.resolve();return e.ondestroy&&(n=function(t,e){const r=t.ondestroy;if(!r)return;const n=r.tagFunction;if(!n)return;const o=n.tagFunction;return o?o({target:t,stagger:e}):void 0}(e,t)),n.then((()=>{e.parentNode?.removeChild(e);const t=this.ownerTag;t&&(t.clones=t.clones.filter((t=>t!==e)))})),n}));return await Promise.all(e),t}updateByTag(t){this.updateConfig(t.strings,t.values),this.tagSupport.templater=t.tagSupport.templater}lastTemplateString=void 0;setSupport(t){this.tagSupport=t,this.tagSupport.mutatingRender=t.mutatingRender}updateConfig(t,e){this.strings=t,this.updateValues(e)}getTemplate(){const t=z(this.strings.map(((t,e)=>(t.replace(Y,K)+(this.values.length>e?`{${Z}${e}}`:"")).replace(/>\s*/g,">").replace(/\s*</g,"<"))).join(""));return this.lastTemplateString=t.string,{interpolation:t,string:t.string,strings:this.strings,values:this.values,context:this.tagSupport?.memory.context||{}}}isLikeTag(t){const{string:e}=t.getTemplate();if(e!==this.lastTemplateString)return!1;if(t.values.length!==this.values.length)return!1;const r=t.values.every(((t,e)=>{const r=this.values[e];if(t instanceof Function&&r instanceof Function)return!(t.toString()!==r.toString());const n=t;return!c(n)||!c(r)||(n.ownerTag=this,this.children.push(n),n.lastTemplateString||n.getTemplate().string,!!n.isLikeTag(r))}));return!!r}update(){return this.updateContext(this.tagSupport.memory.context)}updateValues(t){return this.values=t,this.updateContext(this.tagSupport.memory.context)}updateContext(t){return this.strings.map(((e,r)=>{const n=Z+r,o=this.values.length>r,i=this.values[r],l=t[n];if(l)return function(t,e,r,n){const o=t.value,s=o?.tag,i=e,c=t;if(u(i))return function(t,e,r,n){const o=e.tagSupport.props;let s=r.tag;if(!s)return T(e,r,t),void e.redraw();const i=s.tagSupport.templater.wrapper,u=e.wrapper;let c=!1;i&&u&&(c=i.original===u.original);const p=s.tagSupport;if(p.latestProps=o,p.latestClonedProps=e.tagSupport.clonedProps,c){const t=n?.tagSupport,e=a(t.props),r=t?.props;if(s&&p.hasPropChanges(r,e,o))return}else G(s,r,n);T(e,r,t),p.templater=e;const l=e.redraw();r.value.tag=p.newest=l,c||(r.tag=l,n.tagSupport=e.tagSupport)}(r,i,c,o);if(c.tag)G(c.tag,c,o);else if(s)return function(t,e,r){const n=e.tagSupport,o=n.oldest;o.beforeRedraw();const s=t.wrapper();n.latestProps=s.tagSupport.props,n.latestClonedProps=s.tagSupport.clonedProps,n.memory=s.tagSupport.memory,s.setSupport(n),t.newest=s,n.newest=s,o.afterRender(),e.updateByTag(s),r.set(t)}(e,s,c);e instanceof Function?c.set(v(e,r)):p(e)?c.set(e.value):c.set(e)}(l,i,this);!function(t,e,r,n,o){u(e)?T(e,r[n]=new s(e),o):e instanceof Function?r[n]=function(t,e){return new s(v(t,e))}(e,o):t&&(c(e)&&(e.ownerTag=o,o.children.push(e)),p(e)?r[n]=e:r[n]=new s(e))}(o,i,t,n,this)})),t}getAppElement(){let t=this;for(;t.ownerTag;)t=t.ownerTag;return t}rebuild(){const t=this.insertBefore;if(!t){const t=new Error("Cannot rebuild. Previous insertBefore element is not defined on tag");throw t.tag=this,t}this.buildBeforeElement(t,{forceElement:!0,counts:{added:0,removed:0}})}buildBeforeElement(t,e={forceElement:!1,counts:{added:0,removed:0}}){this.insertBefore=t;const r=this.update(),n=this.getTemplate(),o=document.createElement("div");o.id="tag-temp-holder",o.innerHTML=`<template tag-wrap="22">${n.string}</template>`;const s=H(o,r,n,this,{forceElement:e.forceElement});this.clones.length=0;const a=function(t,e){const r=[];let n=t.children[0].content.firstChild;for(;n;){const t=n.nextSibling;E(n,e),r.push(n),n=t}return r}(o,t);return this.clones.push(...a),s.length&&(this.clones=this.clones.filter((t=>!s.find((e=>e===t))))),this.clones.forEach((t=>I(t,e))),this.clones}}function rt(t,...e){return new et(t,e)}const nt=[];function ot(t,e,r){const n=nt.findIndex((t=>t.element===e));n>=0&&(nt[n].tag.destroy(),nt.splice(n,1),console.warn("Found and destroyed app element already rendered to element",{element:e}));const o=function(t){const e=t.tagSupport;g(e,void 0);const r=t.wrapper();return r.tagSupport=e,r.afterRender(),{tag:r,tagSupport:e}}(t(r)),{tag:s,tagSupport:a}=o;s.appElement=e,function(t,e){let r;t.mutatingRender=()=>{e.beforeRedraw();const n=t.templater,o=r=n.wrapper();return t.latestProps=o.tagSupport.props,t.latestClonedProps=o.tagSupport.clonedProps,o.setSupport(t),e.afterRender(),e.updateByTag(o),r&&r.destroy({stagger:0}),t.newest=o,r}}(a,s);const i=document.createElement("template");return i.setAttribute("tag-detail","app-template-placeholder"),e.appendChild(i),s.buildBeforeElement(i),e.setUse=t.original.setUse,nt.push({element:e,tag:s}),{tag:s,tags:t.original.tags}}const st={},at={};function it(t){const{id:e,observer:r,tag:n}=t;r.disconnect(),n.destroy(),delete st[e]}function ut(t){const e=t.getAttribute("props");if(!e)return{element:t};try{const r=JSON.parse(e),n=t.getAttribute("events");n&&n.split(",").map((t=>t.trim())).map((t=>{r[t]=e=>o(t,{detail:{[t]:e}})}));const o=function(e,r){const n=new CustomEvent(e,r);t.dispatchEvent(n)};return r.dispatchEvent=o,r}catch(r){throw console.warn("Failed to parse props on element",{element:t,propsString:e}),r}}function ct(t,e,r){const n=e.gateway;if(n)return n.updateTag(),n;const o=ut(e);try{const{tag:n}=ot(r,e,o);return function(t,e,r,n){let o=r;const s=new MutationObserver((t=>{if(function(t){const{element:e}=t;if(!document.body.contains(e))return it(t),!1}(i))for(const e of t)"attributes"===e.type&&a()}));function a(){const t=r.tagSupport.templater,n=t.tagSupport.props,s=ut(e);if(t.tagSupport.props=s,JSON.stringify(n)===JSON.stringify(s))return;t.tagSupport.latestProps=s;const a=S(o,t);i.tag=o=a.retag}dt(n);const i={id:t,tag:r,observer:s,component:n,element:e,updateTag:a};return st[t]=st[t]||[],st[t].push(i),e.gateway=i,s.observe(e,{attributes:!0}),i}(t,e,n,r)}catch(t){throw console.warn("Failed to render component to element",{component:r,element:e,props:o}),t}}class pt extends HTMLElement{gateway;constructor(){super(),setTimeout((()=>this.gateway=function(t){const e=t.id||t.getAttribute("id");if(!e){const r="Cannot check a tag on element with no id attribute";throw console.warn(r,{id:e,element:t}),new Error(r)}const r=at[e];if(!r){const r=`Cannot find a tag registered by id of ${e}`;throw console.warn(r,{id:e,element:t}),new Error(r)}return ct(e,t,r)}(this)),0)}disconnectedCallback(){it(this.gateway)}}function lt(){customElements.define("tag-element",pt)}let gt=!1;function dt(t){if(!gt){try{lt()}catch(t){throw t}gt=!0}const e=function(t){return"__tagTemplate_"+function(t){let e=t.toString().replace(/\s+/g,"_").replace(/[^\w\d]/g,"_");return/^[a-zA-Z]/.test(e)||(e="fn_"+e),e}(t)}(t);return at[e]=t,e}const ft=[];let mt=0;function ht(t){const e=function(e,r){const n=c(e),o=new m(e);let s=h(e,o);function a(){const t=(0,a.original)(o.tagSupport.props,r);return t.setSupport(o.tagSupport),t}return n&&(r=e,s=yt),a.original=t,o.tagged=!0,o.wrapper=a,o};return function(t,e){t.isTag=!0,t.original=e}(e,t),function(t){t.tags=ft,t.setUse=l,t.tagIndex=++mt}(t),ft.push(t),e}const yt=new class{};function bt(t){return l.memory.providerConfig.providers.find((e=>e.constructMethod===t))}l.memory.providerConfig={providers:[],currentTagSupport:void 0,ownerTag:void 0};const wt={create:t=>{const e=bt(t);if(e)return e.clone=a(e.instance),e.instance;const r=t.constructor?new t:t();return l.memory.providerConfig.providers.push({constructMethod:t,instance:r,clone:a(r)}),r},inject:t=>{const e=bt(t);if(e)return e.instance;const r=l.memory.providerConfig;let n={ownerTag:r.ownerTag};for(;n.ownerTag;){const e=n.ownerTag.tagSupport.memory.providers.find((e=>{if(e.constructMethod===t)return!0}));if(e)return e.clone=a(e.instance),r.providers.push(e),e.instance;n=n.ownerTag}const o=`Could not inject provider: ${t.name} ${t}`;throw console.warn(`${o}. Available providers`,r.providers),new Error(o)}};function St(t,e){const r=l.memory.providerConfig;r.currentTagSuport=t,r.ownerTag=e,t.memory.providers.length&&(r.providers.length=0,r.providers.push(...t.memory.providers))}function vt(t,e){const r=l.memory.stateConfig,n=r.rearray[r.array.length];if(n){const t=Tt(n);return r.array.push({callback:e,lastValue:t,defaultValue:n.defaultValue}),t}const o=(t instanceof Function?t:()=>t)();return r.array.push({callback:e,lastValue:o,defaultValue:o}),o}function Tt(t){const e=t.callback;if(!e)return t.defaultValue;const r=e(Et),[n]=r,[o]=e(n);if(o!==Et)throw new Error('State property not used correctly.\n\nFor "let" state use `let name = state(default, x => [name, name = x])`\n\nFor "const" state use `const name = state(default)`\n\nProblem function:\n'+t+"\n");return n}l({beforeRender:(t,e)=>{St(t,e)},beforeRedraw:(t,e)=>{St(t,e.ownerTag)},afterRender:t=>{const e=l.memory.providerConfig;t.memory.providers=[...e.providers],e.providers.length=0}}),l.memory.stateConfig={array:[],rearray:[]},l({beforeRender:t=>Ct(t),beforeRedraw:t=>Ct(t),afterRender:(t,e)=>{const r=t.memory.state,n=l.memory.stateConfig;if(n.rearray.length&&n.rearray.length!==n.array.length){const e=`States lengths mismatched ${n.rearray.length} !== ${n.array.length}`;throw console.error(e,{oldStates:n.array,newStates:n.rearray,component:t.templater?.wrapper.original}),new Error(e)}n.rearray=[],r.newest=[...n.array],n.array=[]}});class Et{}function Ct(t){const e=t.memory.state,r=l.memory.stateConfig;if(r.rearray.length){const n="last array not cleared";throw console.error(n,{config:r,component:t.templater?.wrapper.original,state:e}),n}r.rearray=[],e?.newest.length&&r.rearray.push(...e.newest)}function At(t){l.memory.initCurrentSupport=t}function Rt(t){l.memory.initCurrentSupport?l.memory.initCurrentSupport.memory.init||(l.memory.initCurrentSupport.memory.init=t,t()):console.warn("possible init issue?")}let Pt;function xt(t){Pt.memory||console.error("xxx",Pt),Pt.memory.destroyCallback=t}l({beforeRender:t=>At(t),beforeRedraw:t=>At(t)}),l({beforeRender:t=>Pt=t,beforeRedraw:t=>Pt=t,beforeDestroy:(t,e)=>{const r=t.memory.destroyCallback;r&&r()}});let jt=()=>t=>()=>{throw new Error("The real callback function was called and that should never occur")};function Vt(t,e){t.forEach(((t,r)=>{const n=Tt(t),o=e[r].callback;o&&o(n),e[r].lastValue=n}))}function kt(t){jt=()=>{const e=l.memory.stateConfig.array;return r=>(...n)=>function(t,e,r,...n){const o=t.memory.state.newest;Vt(o,r);const s=e(...n);Vt(r,o),t.render(),s instanceof Promise&&s.finally((()=>{Vt(r,o),t.render()}))}(t,r,e,...n)}}l({beforeRender:t=>kt(t),beforeRedraw:t=>kt(t)});var Ot=e.xQ,Bt=e.Vp,Ft=e.fx,Nt=e.RN,_t=e.er,$t=e.dy,Lt=e.jW,Mt=e.SO,Ut=e.IT,Wt=e.SW,Dt=e.js,It=e.ev,Jt=e.nc,Xt=e.a,qt=e._b,Ht=e.hs,Qt=e.lc,zt=e.SB,Gt=e._q,Zt=e.bX,Kt=e.pJ;export{Ot as Subject,Bt as Tag,Ft as TagSupport,Nt as getCallback,_t as getTagSupport,$t as html,Lt as initWebComponents,Mt as interpolateElement,Ut as interpolateString,Wt as isTagComponent,Dt as loadTagGateway,It as onDestroy,Jt as onInit,Xt as providers,qt as redrawTag,Ht as runBeforeRender,Qt as setUse,zt as state,Gt as tag,Zt as tagElement,Kt as tags};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Clones = (Element | Text | ChildNode)[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Clones.type.js","sourceRoot":"","sources":["../ts/Clones.type.ts"],"names":[],"mappings":""}
|
package/js/Props.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Props = unknown;
|
package/js/Props.js
ADDED
package/js/Props.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Props.js","sourceRoot":"","sources":["../ts/Props.ts"],"names":[],"mappings":""}
|
package/js/Subject.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type Subscription = (() => void) & {
|
|
2
|
+
unsubscribe: () => any;
|
|
3
|
+
};
|
|
4
|
+
type Subscriber = (value?: any) => any;
|
|
5
|
+
export interface SubjectLike {
|
|
6
|
+
subscribe: (callback: (value?: any) => any) => any;
|
|
7
|
+
isSubject?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class Subject<T> implements SubjectLike {
|
|
10
|
+
isSubject: boolean;
|
|
11
|
+
subscribers: Subscriber[];
|
|
12
|
+
value?: any;
|
|
13
|
+
subscribe(callback: Subscriber): Subscription;
|
|
14
|
+
set(value: any): void;
|
|
15
|
+
next: (value: any) => void;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
package/js/Subject.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export class Subject {
|
|
2
|
+
isSubject = true;
|
|
3
|
+
subscribers = [];
|
|
4
|
+
value;
|
|
5
|
+
// unsubcount = 0 // 🔬 testing
|
|
6
|
+
subscribe(callback) {
|
|
7
|
+
this.subscribers.push(callback);
|
|
8
|
+
SubjectClass.globalSubs.push(callback); // 🔬 testing
|
|
9
|
+
SubjectClass.globalSubCount$.set(SubjectClass.globalSubCount$.value + 1);
|
|
10
|
+
const unsubscribe = () => {
|
|
11
|
+
unsubscribe.unsubscribe();
|
|
12
|
+
};
|
|
13
|
+
// Return a function to unsubscribe from the BehaviorSubject
|
|
14
|
+
unsubscribe.unsubscribe = () => {
|
|
15
|
+
removeSubFromArray(this.subscribers, callback);
|
|
16
|
+
removeSubFromArray(SubjectClass.globalSubs, callback); // 🔬 testing
|
|
17
|
+
SubjectClass.globalSubCount$.set(SubjectClass.globalSubCount$.value - 1);
|
|
18
|
+
// any double unsubscribes will be ignored
|
|
19
|
+
unsubscribe.unsubscribe = () => undefined;
|
|
20
|
+
};
|
|
21
|
+
return unsubscribe;
|
|
22
|
+
}
|
|
23
|
+
set(value) {
|
|
24
|
+
this.value = value;
|
|
25
|
+
// Notify all subscribers with the new value
|
|
26
|
+
this.subscribers.forEach((callback) => {
|
|
27
|
+
callback.value = value;
|
|
28
|
+
callback(value);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
next = this.set;
|
|
32
|
+
}
|
|
33
|
+
function removeSubFromArray(subscribers, callback) {
|
|
34
|
+
const index = subscribers.indexOf(callback);
|
|
35
|
+
if (index !== -1) {
|
|
36
|
+
subscribers.splice(index, 1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const SubjectClass = Subject;
|
|
40
|
+
SubjectClass.globalSubs = []; // 🔬 for testing
|
|
41
|
+
SubjectClass.globalSubCount$ = new Subject(); // for ease of debugging
|
|
42
|
+
SubjectClass.globalSubCount$.set(0);
|
|
43
|
+
//# sourceMappingURL=Subject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Subject.js","sourceRoot":"","sources":["../ts/Subject.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,OAAO;IAClB,SAAS,GAAG,IAAI,CAAA;IAChB,WAAW,GAAiB,EAAE,CAAA;IAC9B,KAAK,CAAM;IACX,+BAA+B;IAE/B,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/B,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,aAAa;QACpD,YAAY,CAAC,eAAe,CAAC,GAAG,CAAE,YAAY,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;QAE1E,MAAM,WAAW,GAAiB,GAAG,EAAE;YACrC,WAAW,CAAC,WAAW,EAAE,CAAA;QAC3B,CAAC,CAAA;QAED,4DAA4D;QAC5D,WAAW,CAAC,WAAW,GAAG,GAAG,EAAE;YAC7B,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAC9C,kBAAkB,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA,CAAC,aAAa;YACnE,YAAY,CAAC,eAAe,CAAC,GAAG,CAAE,YAAY,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;YAE1E,0CAA0C;YAC1C,WAAW,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,SAAS,CAAA;QAC3C,CAAC,CAAA;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,GAAG,CAAC,KAAU;QACZ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,4CAA4C;QAC5C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAa,EAAE,EAAE;YACzC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;YACtB,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAA;CAChB;AAED,SAAS,kBAAkB,CACzB,WAAyB,EACzB,QAAoB;IAEpB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,OAGpB,CAAA;AACD,YAAY,CAAC,UAAU,GAAG,EAAE,CAAA,CAAC,iBAAiB;AAC9C,YAAY,CAAC,eAAe,GAAG,IAAI,OAAO,EAAE,CAAA,CAAC,wBAAwB;AACrE,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { TagSupport } from "./getTagSupport.js";
|
|
2
|
+
import { Provider } from "./providers.js";
|
|
3
|
+
import { Subscription } from "./Subject.js";
|
|
4
|
+
import { Counts } from "./interpolateTemplate.js";
|
|
5
|
+
import { State } from "./state.js";
|
|
6
|
+
import { InterpolatedTemplates } from "./interpolations.js";
|
|
7
|
+
export declare const variablePrefix = "__tagvar";
|
|
8
|
+
export declare const escapeVariable: string;
|
|
9
|
+
export declare const escapeSearch: RegExp;
|
|
10
|
+
export type Context = {
|
|
11
|
+
[index: string]: any;
|
|
12
|
+
};
|
|
13
|
+
export type TagMemory = Record<string, any> & {
|
|
14
|
+
context: Context;
|
|
15
|
+
state: State;
|
|
16
|
+
providers: Provider[];
|
|
17
|
+
};
|
|
18
|
+
export interface TagTemplate {
|
|
19
|
+
interpolation: InterpolatedTemplates;
|
|
20
|
+
string: string;
|
|
21
|
+
strings: string[];
|
|
22
|
+
values: unknown[];
|
|
23
|
+
context: Context;
|
|
24
|
+
}
|
|
25
|
+
export declare class Tag {
|
|
26
|
+
strings: string[];
|
|
27
|
+
values: any[];
|
|
28
|
+
isTag: boolean;
|
|
29
|
+
clones: (Element | Text | ChildNode)[];
|
|
30
|
+
cloneSubs: Subscription[];
|
|
31
|
+
children: Tag[];
|
|
32
|
+
tagSupport: TagSupport;
|
|
33
|
+
ownerTag?: Tag;
|
|
34
|
+
insertBefore?: Element;
|
|
35
|
+
appElement?: Element;
|
|
36
|
+
arrayValue?: unknown;
|
|
37
|
+
constructor(strings: string[], values: any[]);
|
|
38
|
+
beforeRedraw(): void;
|
|
39
|
+
afterRender(): void;
|
|
40
|
+
/** Used for array, such as array.map(), calls aka array.map(x => html``.key(x)) */
|
|
41
|
+
key(arrayValue: unknown): this;
|
|
42
|
+
destroy(options?: DestroyOptions): Promise<number>;
|
|
43
|
+
destroySubscriptions(): void;
|
|
44
|
+
destroyClones({ stagger }?: DestroyOptions): Promise<number>;
|
|
45
|
+
updateByTag(tag: Tag): void;
|
|
46
|
+
lastTemplateString: string | undefined;
|
|
47
|
+
/** A method of passing down the same render method */
|
|
48
|
+
setSupport(tagSupport: TagSupport): void;
|
|
49
|
+
updateConfig(strings: string[], values: any[]): void;
|
|
50
|
+
getTemplate(): TagTemplate;
|
|
51
|
+
isLikeTag(tag: Tag): boolean;
|
|
52
|
+
update(): Context;
|
|
53
|
+
updateValues(values: any[]): Context;
|
|
54
|
+
updateContext(context: Context): Context;
|
|
55
|
+
getAppElement(): Tag;
|
|
56
|
+
/** Used during HMR only where static content itself could have been edited */
|
|
57
|
+
rebuild(): void;
|
|
58
|
+
buildBeforeElement(insertBefore: Element, options?: ElementBuildOptions): (ChildNode | Element)[];
|
|
59
|
+
}
|
|
60
|
+
type DestroyOptions = {
|
|
61
|
+
stagger: number;
|
|
62
|
+
byParent?: boolean;
|
|
63
|
+
};
|
|
64
|
+
export type ElementBuildOptions = {
|
|
65
|
+
counts: Counts;
|
|
66
|
+
forceElement?: boolean;
|
|
67
|
+
};
|
|
68
|
+
export declare function processNewValue(hasValue: boolean, value: any, context: Context, variableName: string, tag: Tag): void;
|
|
69
|
+
export {};
|
package/js/Tag.class.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { getSubjectFunction, setValueRedraw } from "./Tag.utils.js";
|
|
2
|
+
import { ValueSubject } from "./ValueSubject.js";
|
|
3
|
+
import { runAfterRender, runBeforeDestroy, runBeforeRedraw } from "./tagRunner.js";
|
|
4
|
+
import { isSubjectInstance, isTagComponent, isTagInstance } from "./isInstance.js";
|
|
5
|
+
import { buildClones } from "./render.js";
|
|
6
|
+
import { interpolateElement, interpolateString } from "./interpolateElement.js";
|
|
7
|
+
import { afterElmBuild } from "./interpolateTemplate.js";
|
|
8
|
+
import { elementDestroyCheck } from "./elementDestroyCheck.function.js";
|
|
9
|
+
import { updateExistingValue } from "./updateTag.utils.js";
|
|
10
|
+
export const variablePrefix = '__tagvar';
|
|
11
|
+
export const escapeVariable = '--' + variablePrefix + '--';
|
|
12
|
+
const prefixSearch = new RegExp(variablePrefix, 'g');
|
|
13
|
+
export const escapeSearch = new RegExp(escapeVariable, 'g');
|
|
14
|
+
export class Tag {
|
|
15
|
+
strings;
|
|
16
|
+
values;
|
|
17
|
+
isTag = true;
|
|
18
|
+
clones = []; // elements on document
|
|
19
|
+
cloneSubs = []; // subscriptions created by clones
|
|
20
|
+
children = []; // tags on me
|
|
21
|
+
tagSupport;
|
|
22
|
+
// only present when a child of a tag
|
|
23
|
+
ownerTag;
|
|
24
|
+
insertBefore;
|
|
25
|
+
appElement; // only seen on this.getAppElement().appElement
|
|
26
|
+
// present only when an array. Populated by this.key()
|
|
27
|
+
arrayValue;
|
|
28
|
+
constructor(strings, values) {
|
|
29
|
+
this.strings = strings;
|
|
30
|
+
this.values = values;
|
|
31
|
+
}
|
|
32
|
+
beforeRedraw() {
|
|
33
|
+
runBeforeRedraw(this.tagSupport, this);
|
|
34
|
+
}
|
|
35
|
+
afterRender() {
|
|
36
|
+
runAfterRender(this.tagSupport, this);
|
|
37
|
+
}
|
|
38
|
+
/** Used for array, such as array.map(), calls aka array.map(x => html``.key(x)) */
|
|
39
|
+
key(arrayValue) {
|
|
40
|
+
this.arrayValue = arrayValue;
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
async destroy(options = {
|
|
44
|
+
stagger: 0,
|
|
45
|
+
byParent: false, // Only destroy clones of direct children
|
|
46
|
+
}) {
|
|
47
|
+
// the isComponent check maybe able to be removed
|
|
48
|
+
const isComponent = this.tagSupport ? true : false;
|
|
49
|
+
if (isComponent) {
|
|
50
|
+
runBeforeDestroy(this.tagSupport, this);
|
|
51
|
+
}
|
|
52
|
+
this.destroySubscriptions();
|
|
53
|
+
const promises = this.children.map((kid) => kid.destroy({ ...options, byParent: true }));
|
|
54
|
+
if (!options.byParent) {
|
|
55
|
+
options.stagger = await this.destroyClones(options);
|
|
56
|
+
}
|
|
57
|
+
if (this.ownerTag) {
|
|
58
|
+
this.ownerTag.children = this.ownerTag.children.filter(child => child !== this);
|
|
59
|
+
}
|
|
60
|
+
await Promise.all(promises);
|
|
61
|
+
return options.stagger;
|
|
62
|
+
}
|
|
63
|
+
destroySubscriptions() {
|
|
64
|
+
this.cloneSubs.forEach(cloneSub => cloneSub.unsubscribe());
|
|
65
|
+
this.cloneSubs.length = 0;
|
|
66
|
+
}
|
|
67
|
+
async destroyClones({ stagger } = {
|
|
68
|
+
stagger: 0,
|
|
69
|
+
}) {
|
|
70
|
+
const promises = this.clones.reverse().map((clone, index) => {
|
|
71
|
+
let promise = Promise.resolve();
|
|
72
|
+
if (clone.ondestroy) {
|
|
73
|
+
promise = elementDestroyCheck(clone, stagger);
|
|
74
|
+
}
|
|
75
|
+
promise.then(() => {
|
|
76
|
+
clone.parentNode?.removeChild(clone);
|
|
77
|
+
const ownerTag = this.ownerTag;
|
|
78
|
+
if (ownerTag) {
|
|
79
|
+
// Sometimes my clones were first registered to my owner, remove them
|
|
80
|
+
ownerTag.clones = ownerTag.clones.filter(compareClone => compareClone !== clone);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
return promise;
|
|
84
|
+
});
|
|
85
|
+
await Promise.all(promises);
|
|
86
|
+
// this.clones.length = 0
|
|
87
|
+
return stagger;
|
|
88
|
+
}
|
|
89
|
+
updateByTag(tag) {
|
|
90
|
+
this.updateConfig(tag.strings, tag.values);
|
|
91
|
+
this.tagSupport.templater = tag.tagSupport.templater;
|
|
92
|
+
}
|
|
93
|
+
lastTemplateString = undefined; // used to compare templates for updates
|
|
94
|
+
/** A method of passing down the same render method */
|
|
95
|
+
setSupport(tagSupport) {
|
|
96
|
+
this.tagSupport = tagSupport;
|
|
97
|
+
this.tagSupport.mutatingRender = tagSupport.mutatingRender;
|
|
98
|
+
}
|
|
99
|
+
updateConfig(strings, values) {
|
|
100
|
+
this.strings = strings;
|
|
101
|
+
this.updateValues(values);
|
|
102
|
+
}
|
|
103
|
+
getTemplate() {
|
|
104
|
+
const string = this.strings.map((string, index) => {
|
|
105
|
+
const safeString = string.replace(prefixSearch, escapeVariable);
|
|
106
|
+
const endString = safeString + (this.values.length > index ? `{${variablePrefix}${index}}` : '');
|
|
107
|
+
// const trimString = index === 0 || index === this.strings.length-1 ? endString.trim() : endString
|
|
108
|
+
const trimString = endString.replace(/>\s*/g, '>').replace(/\s*</g, '<');
|
|
109
|
+
return trimString;
|
|
110
|
+
}).join('');
|
|
111
|
+
const interpolation = interpolateString(string);
|
|
112
|
+
this.lastTemplateString = interpolation.string;
|
|
113
|
+
return {
|
|
114
|
+
interpolation,
|
|
115
|
+
// string,
|
|
116
|
+
string: interpolation.string,
|
|
117
|
+
strings: this.strings,
|
|
118
|
+
values: this.values,
|
|
119
|
+
context: this.tagSupport?.memory.context || {},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
isLikeTag(tag) {
|
|
123
|
+
const { string } = tag.getTemplate();
|
|
124
|
+
if (string !== this.lastTemplateString) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
if (tag.values.length !== this.values.length) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
const allVarsMatch = tag.values.every((value, index) => {
|
|
131
|
+
const compareTo = this.values[index];
|
|
132
|
+
const isFunctions = value instanceof Function && compareTo instanceof Function;
|
|
133
|
+
if (isFunctions) {
|
|
134
|
+
const stringMatch = value.toString() === compareTo.toString();
|
|
135
|
+
if (stringMatch) {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
const tag = value;
|
|
141
|
+
if (isTagInstance(tag) && isTagInstance(compareTo)) {
|
|
142
|
+
tag.ownerTag = this; // let children know I own them
|
|
143
|
+
this.children.push(tag); // record children I created
|
|
144
|
+
tag.lastTemplateString || tag.getTemplate().string; // ensure last template string is generated
|
|
145
|
+
if (tag.isLikeTag(compareTo)) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
return true;
|
|
151
|
+
});
|
|
152
|
+
if (allVarsMatch) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
update() {
|
|
158
|
+
return this.updateContext(this.tagSupport.memory.context);
|
|
159
|
+
}
|
|
160
|
+
updateValues(values) {
|
|
161
|
+
this.values = values;
|
|
162
|
+
return this.updateContext(this.tagSupport.memory.context);
|
|
163
|
+
}
|
|
164
|
+
updateContext(context) {
|
|
165
|
+
this.strings.map((_string, index) => {
|
|
166
|
+
const variableName = variablePrefix + index;
|
|
167
|
+
const hasValue = this.values.length > index;
|
|
168
|
+
const value = this.values[index];
|
|
169
|
+
// is something already there?
|
|
170
|
+
const existing = context[variableName];
|
|
171
|
+
if (existing) {
|
|
172
|
+
return updateExistingValue(existing, value, this, variableName);
|
|
173
|
+
}
|
|
174
|
+
// 🆕 First time values below
|
|
175
|
+
processNewValue(hasValue, value, context, variableName, this);
|
|
176
|
+
});
|
|
177
|
+
return context;
|
|
178
|
+
}
|
|
179
|
+
getAppElement() {
|
|
180
|
+
let tag = this;
|
|
181
|
+
while (tag.ownerTag) {
|
|
182
|
+
tag = tag.ownerTag;
|
|
183
|
+
}
|
|
184
|
+
return tag;
|
|
185
|
+
}
|
|
186
|
+
/** Used during HMR only where static content itself could have been edited */
|
|
187
|
+
rebuild() {
|
|
188
|
+
const insertBefore = this.insertBefore;
|
|
189
|
+
if (!insertBefore) {
|
|
190
|
+
const err = new Error('Cannot rebuild. Previous insertBefore element is not defined on tag');
|
|
191
|
+
err.tag = this;
|
|
192
|
+
throw err;
|
|
193
|
+
}
|
|
194
|
+
this.buildBeforeElement(insertBefore, {
|
|
195
|
+
forceElement: true,
|
|
196
|
+
counts: { added: 0, removed: 0 },
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
buildBeforeElement(insertBefore, options = {
|
|
200
|
+
forceElement: false,
|
|
201
|
+
counts: { added: 0, removed: 0 },
|
|
202
|
+
}) {
|
|
203
|
+
this.insertBefore = insertBefore;
|
|
204
|
+
const context = this.update();
|
|
205
|
+
const template = this.getTemplate();
|
|
206
|
+
// const ownerTag = this.ownerTag
|
|
207
|
+
const temporary = document.createElement('div');
|
|
208
|
+
temporary.id = 'tag-temp-holder';
|
|
209
|
+
// render content with a first child that we can know is our first element
|
|
210
|
+
temporary.innerHTML = `<template tag-wrap="22">${template.string}</template>`;
|
|
211
|
+
// const clonesBefore = this.clones.map(clone => clone)
|
|
212
|
+
const intClones = interpolateElement(temporary, context, template, this, // this.ownerTag || this,
|
|
213
|
+
{ forceElement: options.forceElement });
|
|
214
|
+
this.clones.length = 0;
|
|
215
|
+
const clones = buildClones(temporary, insertBefore);
|
|
216
|
+
this.clones.push(...clones);
|
|
217
|
+
if (intClones.length) {
|
|
218
|
+
this.clones = this.clones.filter(cloneFilter => !intClones.find(clone => clone === cloneFilter));
|
|
219
|
+
}
|
|
220
|
+
this.clones.forEach(clone => afterElmBuild(clone, options));
|
|
221
|
+
return this.clones;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
export function processNewValue(hasValue, value, context, variableName, tag) {
|
|
225
|
+
if (isTagComponent(value)) {
|
|
226
|
+
const existing = context[variableName] = new ValueSubject(value);
|
|
227
|
+
setValueRedraw(value, existing, tag);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
if (value instanceof Function) {
|
|
231
|
+
context[variableName] = getSubjectFunction(value, tag);
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if (!hasValue) {
|
|
235
|
+
return; // more strings than values, stop here
|
|
236
|
+
}
|
|
237
|
+
if (isTagInstance(value)) {
|
|
238
|
+
value.ownerTag = tag;
|
|
239
|
+
tag.children.push(value);
|
|
240
|
+
}
|
|
241
|
+
if (isSubjectInstance(value)) {
|
|
242
|
+
context[variableName] = value;
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
context[variableName] = new ValueSubject(value);
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=Tag.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tag.class.js","sourceRoot":"","sources":["../ts/Tag.class.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TagSupport } from "./getTagSupport.js";
|
|
2
|
+
import { ValueSubject } from "./ValueSubject.js";
|
|
3
|
+
import { Subject } from "./Subject.js";
|
|
4
|
+
import { Tag } from "./Tag.class.js";
|
|
5
|
+
import { TemplaterResult } from "./templater.utils.js";
|
|
6
|
+
export type TagSubject = Subject<TemplaterResult> & {
|
|
7
|
+
tagSupport: TagSupport;
|
|
8
|
+
tag: Tag;
|
|
9
|
+
};
|
|
10
|
+
export declare function getSubjectFunction(value: any, tag: Tag): ValueSubject<unknown>;
|
|
11
|
+
export declare function setValueRedraw(templater: TemplaterResult, // latest tag function to call for rendering
|
|
12
|
+
existing: TagSubject, ownerTag: Tag): void;
|
package/js/Tag.utils.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ValueSubject } from "./ValueSubject.js";
|
|
2
|
+
import { redrawTag } from "./redrawTag.function.js";
|
|
3
|
+
import { bindSubjectCallback } from "./bindSubjectCallback.function.js";
|
|
4
|
+
export function getSubjectFunction(value, tag) {
|
|
5
|
+
return new ValueSubject(bindSubjectCallback(value, tag));
|
|
6
|
+
}
|
|
7
|
+
export function setValueRedraw(templater, // latest tag function to call for rendering
|
|
8
|
+
existing, ownerTag) {
|
|
9
|
+
// redraw does not communicate to parent
|
|
10
|
+
templater.redraw = (force // forces redraw on children
|
|
11
|
+
) => {
|
|
12
|
+
const existingTag = existing.tag;
|
|
13
|
+
const { remit, retag } = redrawTag(existingTag, templater, ownerTag);
|
|
14
|
+
existing.tagSupport = retag.tagSupport;
|
|
15
|
+
if (!remit) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
existing.set(templater);
|
|
19
|
+
if (force) {
|
|
20
|
+
const context = existingTag.tagSupport.memory.context;
|
|
21
|
+
Object.values(context).forEach((item) => {
|
|
22
|
+
if (!item.value?.isTemplater) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
item.value.redraw();
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return retag;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=Tag.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tag.utils.js","sourceRoot":"","sources":["../ts/Tag.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAIvE,MAAM,UAAU,kBAAkB,CAChC,KAAU,EACV,GAAQ;IAER,OAAO,IAAI,YAAY,CAAE,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAE,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAA0B,EAAE,4CAA4C;AACxE,QAAoB,EACpB,QAAa;IAEb,wCAAwC;IACxC,SAAS,CAAC,MAAM,GAAG,CACjB,KAAe,CAAC,4BAA4B;MAC5C,EAAE;QACF,MAAM,WAAW,GAAoB,QAAQ,CAAC,GAAG,CAAA;QACjD,MAAM,EAAC,KAAK,EAAE,KAAK,EAAC,GAAG,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;QAElE,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QAEtC,IAAG,CAAC,KAAK,EAAE,CAAC;YACV,OAAM;QACR,CAAC;QAED,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAEvB,IAAG,KAAK,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAA;YACrD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;gBAC3C,IAAG,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;oBAC5B,OAAM;gBACR,CAAC;gBAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;YACrB,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Subject } from './Subject.js';
|
|
2
|
+
export class ValueSubject extends Subject {
|
|
3
|
+
value;
|
|
4
|
+
constructor(initialValue) {
|
|
5
|
+
super();
|
|
6
|
+
this.value = initialValue;
|
|
7
|
+
}
|
|
8
|
+
subscribe(callback) {
|
|
9
|
+
const unsubscribe = super.subscribe(callback);
|
|
10
|
+
// Call the callback immediately with the current value
|
|
11
|
+
callback(this.value);
|
|
12
|
+
return unsubscribe;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ValueSubject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueSubject.js","sourceRoot":"","sources":["../ts/ValueSubject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,OAAO,YAAgB,SAAQ,OAAU;IAC7C,KAAK,CAAK;IAEV,YAAY,YAAiB;QAC3B,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,KAAK,GAAG,YAAY,CAAA;IAC3B,CAAC;IAED,SAAS,CAAC,QAAa;QACrB,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAE7C,uDAAuD;QACvD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEpB,OAAO,WAAW,CAAA;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function bindSubjectCallback(value, tag) {
|
|
2
|
+
function subjectFunction(element, args) {
|
|
3
|
+
const renderCount = tag.tagSupport.memory.renderCount;
|
|
4
|
+
const method = value.bind(element);
|
|
5
|
+
const callbackResult = method(...args);
|
|
6
|
+
if (renderCount !== tag.tagSupport.memory.renderCount) {
|
|
7
|
+
return; // already rendered
|
|
8
|
+
}
|
|
9
|
+
tag.tagSupport.render();
|
|
10
|
+
if (callbackResult instanceof Promise) {
|
|
11
|
+
return callbackResult.then(() => tag.tagSupport.render() && 'no-data-ever');
|
|
12
|
+
}
|
|
13
|
+
return Promise.resolve(callbackResult).then(() => 'no-data-ever');
|
|
14
|
+
}
|
|
15
|
+
// link back to original. Mostly used for <div oninit ondestroy> animations
|
|
16
|
+
subjectFunction.tagFunction = value;
|
|
17
|
+
return subjectFunction;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=bindSubjectCallback.function.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindSubjectCallback.function.js","sourceRoot":"","sources":["../ts/bindSubjectCallback.function.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CACjC,KAA8B,EAC9B,GAAQ;IAER,SAAS,eAAe,CACtB,OAAgB,EAChB,IAAW;QAEX,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAA;QAErD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;QAEtC,IAAG,WAAW,KAAK,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACrD,OAAM,CAAC,mBAAmB;QAC5B,CAAC;QAED,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAA;QAEvB,IAAG,cAAc,YAAY,OAAO,EAAE,CAAC;YACrC,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,cAAc,CAAC,CAAA;QAC7E,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,CAAA;IACnE,CAAC;IAED,2EAA2E;IAC3E,eAAe,CAAC,WAAW,GAAG,KAAK,CAAA;IAEnC,OAAO,eAAe,CAAA;AACxB,CAAC"}
|