closures 0.7.10 → 0.7.11

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/dist/closures.cjs CHANGED
@@ -105,8 +105,11 @@ let setDomAttribute = (el, attr, value, isSVG) => {
105
105
  let mountAttributes = (el, props, env) => {
106
106
  for (let key in props) {
107
107
  if (key === 'key' || key === 'children' || key === ON_CREATE_KEY || key in env.directives) continue;
108
- else if (key.startsWith('on'))
109
- el[key.toLowerCase()] = ev => { props[key](ev); !env.manualRedraw && env.rerender(); };
108
+ else if (key.startsWith('on') && isFn(props[key]))
109
+ el[key.toLowerCase()] = ev => {
110
+ props[key](ev);
111
+ !env.manualRedraw && env.rerender();
112
+ };
110
113
  else setDomAttribute(el, key, props[key], env.isSVG);
111
114
  }
112
115
  };
@@ -158,6 +161,19 @@ let unmountDirectives = (el, props, env) => {
158
161
  env.directives[key].unmount(el, props[key]);
159
162
  };
160
163
 
164
+ let setClosure = (vnode, childVnode) => {
165
+ let id = generateClosureId(),
166
+ fnMap = CLOSURE_TO_FN.get(vnode._t) || new Map(),
167
+ onRemove = ON_REMOVES.pop() || noop;
168
+
169
+ fnMap.set(id, childVnode); // save renderFn
170
+ CLOSURE_TO_FN.set(vnode._t, fnMap); // closure -> Map(id -> renderFn)
171
+
172
+ let closure = vnode._t;
173
+ vnode._t = childVnode;
174
+ return [id, closure, onRemove];
175
+ };
176
+
161
177
  let mount = (vnode, env, closureId, closure, onRemove = noop) => {
162
178
  let baseRef = { closureId, closure, onRemove };
163
179
 
@@ -213,15 +229,7 @@ let mount = (vnode, env, closureId, closure, onRemove = noop) => {
213
229
 
214
230
  if (isFn(childVnode)) {
215
231
  // closure component
216
- let id = generateClosureId(),
217
- fnMap = CLOSURE_TO_FN.get(vnode._t) || new Map(),
218
- onRemove = ON_REMOVES.pop() || noop;
219
-
220
- fnMap.set(id, childVnode); // save renderFn
221
- CLOSURE_TO_FN.set(vnode._t, fnMap); // closure -> Map(id -> renderFn)
222
-
223
- let closure = vnode._t;
224
- vnode._t = childVnode;
232
+ let [id, closure, onRemove] = setClosure(vnode, childVnode);
225
233
  return mount(vnode, env, id, closure, onRemove);
226
234
  }
227
235
 
@@ -419,17 +427,30 @@ let patch = (parentDomNode, newVnode, oldVnode, ref, env = { ...DEFAULT_ENV }) =
419
427
  fn,
420
428
  fns = CLOSURE_TO_FN.get(closure);
421
429
 
422
- if (fns && closureId && (fn = fns.get(closureId)))
430
+ // if the newVnode is the same closure component, get the reference to the render function
431
+ // treat the remainder of this clause as if it's a regular render function
432
+ if (newVnode._t === oldVnode._t && fns && closureId && (fn = fns.get(closureId)))
423
433
  x = fn;
424
434
 
425
- let childVnode = x(newVnode.props),
426
- childRef = patch(
427
- parentDomNode,
428
- childVnode,
429
- ref.childState,
430
- ref.childRef,
431
- env
432
- );
435
+ let childVnode = x(newVnode.props);
436
+
437
+ // if the newVnode is a *new* closure component
438
+ if (isFn(childVnode)) {
439
+ // we are patching with a new closure component which should be mounted
440
+ // newVnode._t is mutated by setClosure, and set to childVnode (the closure component's render fn)
441
+ let [_id, _closure] = setClosure(newVnode, childVnode);
442
+ ref.closure = _closure;
443
+ ref.closureId = _id;
444
+ return patch(parentDomNode, newVnode, oldVnode, ref, env);
445
+ }
446
+
447
+ let childRef = patch(
448
+ parentDomNode,
449
+ childVnode,
450
+ ref.childState,
451
+ ref.childRef,
452
+ env
453
+ );
433
454
 
434
455
  // we need to return a new ref in order for parent patches to properly replace changing DOM nodes
435
456
  if (childRef !== ref.childRef)
package/dist/closures.js CHANGED
@@ -105,8 +105,11 @@ let setDomAttribute = (el, attr, value, isSVG) => {
105
105
  let mountAttributes = (el, props, env) => {
106
106
  for (let key in props) {
107
107
  if (key === 'key' || key === 'children' || key === ON_CREATE_KEY || key in env.directives) continue;
108
- else if (key.startsWith('on'))
109
- el[key.toLowerCase()] = ev => { props[key](ev); !env.manualRedraw && env.rerender(); };
108
+ else if (key.startsWith('on') && isFn(props[key]))
109
+ el[key.toLowerCase()] = ev => {
110
+ props[key](ev);
111
+ !env.manualRedraw && env.rerender();
112
+ };
110
113
  else setDomAttribute(el, key, props[key], env.isSVG);
111
114
  }
112
115
  };
@@ -158,6 +161,19 @@ let unmountDirectives = (el, props, env) => {
158
161
  env.directives[key].unmount(el, props[key]);
159
162
  };
160
163
 
164
+ let setClosure = (vnode, childVnode) => {
165
+ let id = generateClosureId(),
166
+ fnMap = CLOSURE_TO_FN.get(vnode._t) || new Map(),
167
+ onRemove = ON_REMOVES.pop() || noop;
168
+
169
+ fnMap.set(id, childVnode); // save renderFn
170
+ CLOSURE_TO_FN.set(vnode._t, fnMap); // closure -> Map(id -> renderFn)
171
+
172
+ let closure = vnode._t;
173
+ vnode._t = childVnode;
174
+ return [id, closure, onRemove];
175
+ };
176
+
161
177
  let mount = (vnode, env, closureId, closure, onRemove = noop) => {
162
178
  let baseRef = { closureId, closure, onRemove };
163
179
 
@@ -213,15 +229,7 @@ let mount = (vnode, env, closureId, closure, onRemove = noop) => {
213
229
 
214
230
  if (isFn(childVnode)) {
215
231
  // closure component
216
- let id = generateClosureId(),
217
- fnMap = CLOSURE_TO_FN.get(vnode._t) || new Map(),
218
- onRemove = ON_REMOVES.pop() || noop;
219
-
220
- fnMap.set(id, childVnode); // save renderFn
221
- CLOSURE_TO_FN.set(vnode._t, fnMap); // closure -> Map(id -> renderFn)
222
-
223
- let closure = vnode._t;
224
- vnode._t = childVnode;
232
+ let [id, closure, onRemove] = setClosure(vnode, childVnode);
225
233
  return mount(vnode, env, id, closure, onRemove);
226
234
  }
227
235
 
@@ -419,17 +427,30 @@ let patch = (parentDomNode, newVnode, oldVnode, ref, env = { ...DEFAULT_ENV }) =
419
427
  fn,
420
428
  fns = CLOSURE_TO_FN.get(closure);
421
429
 
422
- if (fns && closureId && (fn = fns.get(closureId)))
430
+ // if the newVnode is the same closure component, get the reference to the render function
431
+ // treat the remainder of this clause as if it's a regular render function
432
+ if (newVnode._t === oldVnode._t && fns && closureId && (fn = fns.get(closureId)))
423
433
  x = fn;
424
434
 
425
- let childVnode = x(newVnode.props),
426
- childRef = patch(
427
- parentDomNode,
428
- childVnode,
429
- ref.childState,
430
- ref.childRef,
431
- env
432
- );
435
+ let childVnode = x(newVnode.props);
436
+
437
+ // if the newVnode is a *new* closure component
438
+ if (isFn(childVnode)) {
439
+ // we are patching with a new closure component which should be mounted
440
+ // newVnode._t is mutated by setClosure, and set to childVnode (the closure component's render fn)
441
+ let [_id, _closure] = setClosure(newVnode, childVnode);
442
+ ref.closure = _closure;
443
+ ref.closureId = _id;
444
+ return patch(parentDomNode, newVnode, oldVnode, ref, env);
445
+ }
446
+
447
+ let childRef = patch(
448
+ parentDomNode,
449
+ childVnode,
450
+ ref.childState,
451
+ ref.childRef,
452
+ env
453
+ );
433
454
 
434
455
  // we need to return a new ref in order for parent patches to properly replace changing DOM nodes
435
456
  if (childRef !== ref.childRef)
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.closures={})}(this,(function(e){let t=void 0,r=e=>{},n=e=>({mount(t,r=""){t[e]=r},patch(t,r="",n){r!==n&&(t[e]=r)},unmount(r){r[e]=t}}),i={isSVG:!1,redraw:r,directives:{selected:n("selected"),checked:n("checked"),value:n("value"),innerHTML:n("innerHTML")}},o=[],l=[],d=new WeakMap,c=1,s={},f="http://www.w3.org/1999/xlink",h={show:f,actuate:f,href:f},u=e=>null!=e,a=e=>e&&u(e.key),p=(e,r)=>(u(e)?e.key:t)===(u(r)?r.key:t),y=e=>"function"==typeof e,v=e=>"string"==typeof e,w=e=>null!==e&&"object"==typeof e,m=e=>Array.isArray(e),g=e=>JSON.stringify(e),k=e=>!u(e)||!1===e||m(e)&&0===e.length||e&&"="===e._t,R=e=>m(e)&&e.length>0,_=e=>v(e)||"number"==typeof e,S=e=>e&&1===e.vtype,N=e=>e&&2===e.vtype,E=e=>{let t=e.type;if(1===t)return e.node;if(8===t)return E(e.childRef);if(4===t)return E(e.children[0]);throw Error("Unknown ref type "+g(e))},x=e=>{let t=e.type;if(1===t)return e.node.nextSibling;if(8===t)return x(e.childRef);if(4===t)return x(e.children[e.children.length-1]);throw Error("Unknown ref type "+g(e))},V=(e,t,r)=>{let n=t.type;if(1===n)e.insertBefore(t.node,r);else if(8===n)V(e,t.childRef,r);else{if(4!==n)throw Error("Unknown ref type "+g(t));for(let n=0;n<t.children.length;n++)V(e,t.children[n],r)}},b=(e,t)=>{let r=t.type;if(1===r)e.removeChild(t.node);else if(8===r)b(e,t.childRef);else{if(4!==r)throw Error("Unknown ref type "+g(t));for(let r=0;r<t.children.length;r++)b(e,t.children[r])}},A=(e,t,r,n)=>{u(r)||(r=""),!0===r?e.setAttribute(t,""):!1===r?e.removeAttribute(t):n&&h[t]?e.setAttributeNS(h[t],t,r):e.setAttribute(t,r)},G=(e,n,i,o,s=r)=>{let f={closureId:i,closure:o,onRemove:s};if(k(e))return{...f,type:1,node:document.createTextNode("")};if(_(e))return{...f,type:1,node:document.createTextNode(e)};if(S(e)){let r,{_t:i,props:o}=e;"svg"!==i||n.isSVG||(n={...n,isSVG:!0}),r=n.isSVG?document.createElementNS("http://www.w3.org/2000/svg",i):document.createElement(i),y(o.oncreate)&&o.oncreate(r),((e,t,r)=>{for(let n in t)"key"===n||"children"===n||"oncreate"===n||n in r.directives||(n.startsWith("on")?e[n.toLowerCase()]=e=>{t[n](e),!r.manualRedraw&&r.rerender()}:A(e,n,t[n],r.isSVG))})(r,o,n);let l=o.children===t?o.children:G(o.children,n);return l!==t&&V(r,l),((e,t,r)=>{for(let n in t)n in r.directives&&r.directives[n].mount(e,t[n])})(r,o,n),{...f,type:1,node:r,children:l}}if(R(e)){let t=0,r=[];for(;t<e.length;t++)r.push(G(e[t],n));return{...f,type:4,children:r}}if(N(e)){let t=e._t(e.props);if(y(t)){let i=c++,o=d.get(e._t)||new Map,s=l.pop()||r;o.set(i,t),d.set(e._t,o);let f=e._t;return e._t=t,G(e,n,i,f,s)}return{...f,type:8,childRef:G(t,n),childState:t}}if(e instanceof Node)return{...f,type:1,node:e};if(e===t)throw Error("mount: vnode is undefined");throw Error("mount: Invalid vnode")},C=(e,r,n)=>{if(S(e))((e,t,r)=>{for(let n in t)n in r.directives&&r.directives[n].unmount(e,t[n])})(r.node,e.props,n),e.props.children!==t&&C(e.props.children,r.children,n);else if(R(e))for(let t=0;t<e.length;t++)C(e[t],r.children[t],n);else if(N(e)){let e=r.closure,t=r.closureId,i=r.onRemove,o=d.get(e);o&&t&&o.get(t)&&(o.delete(t),!o.size&&d.delete(e),i()),C(r.childState,r.childRef,n)}},I=(e,t,r,n,i)=>{let o=L(e,t,r,n,i);return o!==n&&(((e,t,r)=>{V(e,t,E(r)),b(e,r)})(e,o,n),C(r,n,i)),o},L=(e,r,n,o,l={...i})=>{if(r&&"="===r._t)return o;let c,s;if(w(o)&&(c=o.closure,s=o.closureId),N(r)&&N(n)&&(r._t===n._t||c&&s)){let t,n=r._t,i=d.get(c);i&&s&&(t=i.get(s))&&(n=t);let f=n(r.props),h=L(e,f,o.childState,o.childRef,l);return h!==o.childRef?{type:8,childRef:h,childState:f}:(o.childState=f,o)}if(n===r||k(r)&&k(n))return o;if(_(r)&&_(n))return o.node.nodeValue=r,o;if(S(r)&&S(n)&&r._t===n._t){"svg"!==r._t||l.isSVG||(l={...l,isSVG:!0}),((e,r,n,i)=>{let o;for(o in r){if("key"===o||"children"===o||"oncreate"===o||o in i.directives)continue;let t=n[o],l=r[o];t!==l&&(o.startsWith("on")?e[o.toLowerCase()]=e=>{l(e),!i.manualRedraw&&i.rerender()}:A(e,o,l,i.isSVG))}for(o in n)"key"===o||"children"===o||o in r||o in i.directives||(o.startsWith("on")?e[o.toLowerCase()]=t:e.removeAttribute(o))})(o.node,r.props,n.props,l);let e=n.props.children,i=r.props.children;return e===t?i!==t&&(o.children=G(i,l),V(o.node,o.children)):i===t?(o.node.textContent="",C(e,o.children,l),o.children=t):o.children=I(o.node,i,e,o.children,l),((e,t,r,n)=>{let i;for(i in t)i in n.directives&&n.directives[i].patch(e,t[i],r[i]);for(i in r)i in n.directives&&!(i in t)&&n.directives[i].unmount(e,r[i])})(o.node,r.props,n.props,l),o}return R(r)&&R(n)?(((e,r,n,i,o)=>{let l,d,c,s,f,h=x(i),u=Array(r.length),y=i.children,v=0,w=0,m=r.length-1,g=n.length-1;for(;v<=m&&w<=g;){if(y[w]===t){w++;continue}if(y[g]===t){g--;continue}if(l=n[w],d=r[v],p(d,l)){c=y[w],s=u[v]=I(e,d,l,c,o),v++,w++;continue}if(l=n[g],d=r[m],p(d,l)){c=y[g],s=u[m]=I(e,d,l,c,o),m--,g--;continue}if(!f){f={};for(let e=w;e<=g;e++)l=n[e],a(l)&&(f[l.key]=e)}d=r[v];let i=a(d)?f[d.key]:t;i!==t?(l=n[i],c=y[i],s=u[v]=L(e,d,l,c,o),V(e,s,E(y[w])),s!==c&&(b(e,c),C(l,c,o)),y[i]=t):(s=u[v]=G(d,o),V(e,s,E(y[w]))),v++}let k=m<r.length-1?E(u[m+1]):h;for(;v<=m;){let t=G(r[v],o);u[v]=t,V(e,t,k),v++}for(;w<=g;)c=y[w],c!==t&&(b(e,c),C(n[w],c,o)),w++;i.children=u})(e,r,n,o,l),o):r instanceof Node&&n instanceof Node?(o.node=r,o):G(r,l)};function M(e,...r){let n,i=r[0];if(!i||!w(i)||m(i)||i._t||i.props?i=s:r.shift(),i=r.length>1?{...i,children:r}:1===r.length?{...i,children:r[0]}:i,v(e)){if(i.className&&!i.class&&(i.class=i.className,delete i.className),w(i.class)){let e,t="";for(e in i.class)i.class[e]&&(t&&(t+=" "),t+=e);i.class=t}if(~(n=e.indexOf("."))){let t=e.slice(n+1).replace(/\./g," ")+(i.class?" "+i.class:"");t&&(i.class=t),e=e.slice(0,n)}}if(i.key!=i.key)throw new Error("Invalid NaN key");let o=v(e)?1:y(e)?2:t;if(o===t)throw new Error("Invalid VNode type");return{vtype:o,_t:e,key:i.key,props:i}}M.retain=e=>M("=");const T=M;e.Fragment=e=>e.children,e.app=function(e,r,n={}){let l,d={...i,manualRedraw:n.manualRedraw},c=r.$_REF;if(d.directives={...d.directives,...n.directives||{}},c!==t)throw Error("App already mounted on this node");return l=G(e,d),c=r.$_REF={ref:l,vnode:e},r.textContent="",V(r,l,t),o.push(d.rerender=(t=e)=>{c.ref=I(r,t,c.vnode,c.ref,d),c.vnode=t})&&d.rerender},e.h=M,e.m=T,e.onRemove=e=>l.push(e),e.redraw=e=>{for(let e=0;e<o.length;e++)o[e]()}}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.closures={})}(this,(function(e){let t=void 0,r=e=>{},n=e=>({mount(t,r=""){t[e]=r},patch(t,r="",n){r!==n&&(t[e]=r)},unmount(r){r[e]=t}}),i={isSVG:!1,redraw:r,directives:{selected:n("selected"),checked:n("checked"),value:n("value"),innerHTML:n("innerHTML")}},o=[],l=[],d=new WeakMap,c=1,s={},f="http://www.w3.org/1999/xlink",h={show:f,actuate:f,href:f},u=e=>null!=e,a=e=>e&&u(e.key),p=(e,r)=>(u(e)?e.key:t)===(u(r)?r.key:t),y=e=>"function"==typeof e,v=e=>"string"==typeof e,w=e=>null!==e&&"object"==typeof e,m=e=>Array.isArray(e),g=e=>JSON.stringify(e),k=e=>!u(e)||!1===e||m(e)&&0===e.length||e&&"="===e._t,_=e=>m(e)&&e.length>0,R=e=>v(e)||"number"==typeof e,S=e=>e&&1===e.vtype,N=e=>e&&2===e.vtype,E=e=>{let t=e.type;if(1===t)return e.node;if(8===t)return E(e.childRef);if(4===t)return E(e.children[0]);throw Error("Unknown ref type "+g(e))},x=e=>{let t=e.type;if(1===t)return e.node.nextSibling;if(8===t)return x(e.childRef);if(4===t)return x(e.children[e.children.length-1]);throw Error("Unknown ref type "+g(e))},V=(e,t,r)=>{let n=t.type;if(1===n)e.insertBefore(t.node,r);else if(8===n)V(e,t.childRef,r);else{if(4!==n)throw Error("Unknown ref type "+g(t));for(let n=0;n<t.children.length;n++)V(e,t.children[n],r)}},b=(e,t)=>{let r=t.type;if(1===r)e.removeChild(t.node);else if(8===r)b(e,t.childRef);else{if(4!==r)throw Error("Unknown ref type "+g(t));for(let r=0;r<t.children.length;r++)b(e,t.children[r])}},A=(e,t,r,n)=>{u(r)||(r=""),!0===r?e.setAttribute(t,""):!1===r?e.removeAttribute(t):n&&h[t]?e.setAttributeNS(h[t],t,r):e.setAttribute(t,r)},G=(e,t)=>{let n=c++,i=d.get(e._t)||new Map,o=l.pop()||r;i.set(n,t),d.set(e._t,i);let s=e._t;return e._t=t,[n,s,o]},I=(e,n,i,o,l=r)=>{let d={closureId:i,closure:o,onRemove:l};if(k(e))return{...d,type:1,node:document.createTextNode("")};if(R(e))return{...d,type:1,node:document.createTextNode(e)};if(S(e)){let r,{_t:i,props:o}=e;"svg"!==i||n.isSVG||(n={...n,isSVG:!0}),r=n.isSVG?document.createElementNS("http://www.w3.org/2000/svg",i):document.createElement(i),y(o.oncreate)&&o.oncreate(r),((e,t,r)=>{for(let n in t)"key"===n||"children"===n||"oncreate"===n||n in r.directives||(n.startsWith("on")&&y(t[n])?e[n.toLowerCase()]=e=>{t[n](e),!r.manualRedraw&&r.rerender()}:A(e,n,t[n],r.isSVG))})(r,o,n);let l=o.children===t?o.children:I(o.children,n);return l!==t&&V(r,l),((e,t,r)=>{for(let n in t)n in r.directives&&r.directives[n].mount(e,t[n])})(r,o,n),{...d,type:1,node:r,children:l}}if(_(e)){let t=0,r=[];for(;t<e.length;t++)r.push(I(e[t],n));return{...d,type:4,children:r}}if(N(e)){let t=e._t(e.props);if(y(t)){let[r,i,o]=G(e,t);return I(e,n,r,i,o)}return{...d,type:8,childRef:I(t,n),childState:t}}if(e instanceof Node)return{...d,type:1,node:e};if(e===t)throw Error("mount: vnode is undefined");throw Error("mount: Invalid vnode")},C=(e,r,n)=>{if(S(e))((e,t,r)=>{for(let n in t)n in r.directives&&r.directives[n].unmount(e,t[n])})(r.node,e.props,n),e.props.children!==t&&C(e.props.children,r.children,n);else if(_(e))for(let t=0;t<e.length;t++)C(e[t],r.children[t],n);else if(N(e)){let e=r.closure,t=r.closureId,i=r.onRemove,o=d.get(e);o&&t&&o.get(t)&&(o.delete(t),!o.size&&d.delete(e),i()),C(r.childState,r.childRef,n)}},L=(e,t,r,n,i)=>{let o=M(e,t,r,n,i);return o!==n&&(((e,t,r)=>{V(e,t,E(r)),b(e,r)})(e,o,n),C(r,n,i)),o},M=(e,r,n,o,l={...i})=>{if(r&&"="===r._t)return o;let c,s;if(w(o)&&(c=o.closure,s=o.closureId),N(r)&&N(n)&&(r._t===n._t||c&&s)){let t,i=r._t,f=d.get(c);r._t===n._t&&f&&s&&(t=f.get(s))&&(i=t);let h=i(r.props);if(y(h)){let[t,i]=G(r,h);return o.closure=i,o.closureId=t,M(e,r,n,o,l)}let u=M(e,h,o.childState,o.childRef,l);return u!==o.childRef?{type:8,childRef:u,childState:h}:(o.childState=h,o)}if(n===r||k(r)&&k(n))return o;if(R(r)&&R(n))return o.node.nodeValue=r,o;if(S(r)&&S(n)&&r._t===n._t){"svg"!==r._t||l.isSVG||(l={...l,isSVG:!0}),((e,r,n,i)=>{let o;for(o in r){if("key"===o||"children"===o||"oncreate"===o||o in i.directives)continue;let t=n[o],l=r[o];t!==l&&(o.startsWith("on")?e[o.toLowerCase()]=e=>{l(e),!i.manualRedraw&&i.rerender()}:A(e,o,l,i.isSVG))}for(o in n)"key"===o||"children"===o||o in r||o in i.directives||(o.startsWith("on")?e[o.toLowerCase()]=t:e.removeAttribute(o))})(o.node,r.props,n.props,l);let e=n.props.children,i=r.props.children;return e===t?i!==t&&(o.children=I(i,l),V(o.node,o.children)):i===t?(o.node.textContent="",C(e,o.children,l),o.children=t):o.children=L(o.node,i,e,o.children,l),((e,t,r,n)=>{let i;for(i in t)i in n.directives&&n.directives[i].patch(e,t[i],r[i]);for(i in r)i in n.directives&&!(i in t)&&n.directives[i].unmount(e,r[i])})(o.node,r.props,n.props,l),o}return _(r)&&_(n)?(((e,r,n,i,o)=>{let l,d,c,s,f,h=x(i),u=Array(r.length),y=i.children,v=0,w=0,m=r.length-1,g=n.length-1;for(;v<=m&&w<=g;){if(y[w]===t){w++;continue}if(y[g]===t){g--;continue}if(l=n[w],d=r[v],p(d,l)){c=y[w],s=u[v]=L(e,d,l,c,o),v++,w++;continue}if(l=n[g],d=r[m],p(d,l)){c=y[g],s=u[m]=L(e,d,l,c,o),m--,g--;continue}if(!f){f={};for(let e=w;e<=g;e++)l=n[e],a(l)&&(f[l.key]=e)}d=r[v];let i=a(d)?f[d.key]:t;i!==t?(l=n[i],c=y[i],s=u[v]=M(e,d,l,c,o),V(e,s,E(y[w])),s!==c&&(b(e,c),C(l,c,o)),y[i]=t):(s=u[v]=I(d,o),V(e,s,E(y[w]))),v++}let k=m<r.length-1?E(u[m+1]):h;for(;v<=m;){let t=I(r[v],o);u[v]=t,V(e,t,k),v++}for(;w<=g;)c=y[w],c!==t&&(b(e,c),C(n[w],c,o)),w++;i.children=u})(e,r,n,o,l),o):r instanceof Node&&n instanceof Node?(o.node=r,o):I(r,l)};function T(e,...r){let n,i=r[0];if(!i||!w(i)||m(i)||i._t||i.props?i=s:r.shift(),i=r.length>1?{...i,children:r}:1===r.length?{...i,children:r[0]}:i,v(e)){if(i.className&&!i.class&&(i.class=i.className,delete i.className),w(i.class)){let e,t="";for(e in i.class)i.class[e]&&(t&&(t+=" "),t+=e);i.class=t}if(~(n=e.indexOf("."))){let t=e.slice(n+1).replace(/\./g," ")+(i.class?" "+i.class:"");t&&(i.class=t),e=e.slice(0,n)}}if(i.key!=i.key)throw new Error("Invalid NaN key");let o=v(e)?1:y(e)?2:t;if(o===t)throw new Error("Invalid VNode type");return{vtype:o,_t:e,key:i.key,props:i}}T.retain=e=>T("=");const U=T;e.Fragment=e=>e.children,e.app=function(e,r,n={}){let l,d={...i,manualRedraw:n.manualRedraw},c=r.$_REF;if(d.directives={...d.directives,...n.directives||{}},c!==t)throw Error("App already mounted on this node");return l=I(e,d),c=r.$_REF={ref:l,vnode:e},r.textContent="",V(r,l,t),o.push(d.rerender=(t=e)=>{c.ref=L(r,t,c.vnode,c.ref,d),c.vnode=t})&&d.rerender},e.h=T,e.m=U,e.onRemove=e=>l.push(e),e.redraw=e=>{for(let e=0;e<o.length;e++)o[e]()}}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "closures",
3
- "version": "0.7.10",
3
+ "version": "0.7.11",
4
4
  "description": "Minimalist virtual dom library",
5
5
  "type": "module",
6
6
  "main": "dist/closures.cjs",