From f2ffabe37b4767027603b6ffced896f55b4dc747 Mon Sep 17 00:00:00 2001 From: Robert Biggs Date: Fri, 7 Jun 2019 06:50:15 -0700 Subject: [PATCH] Refined VNode comparison for better exists. 1. Created new property on container: previousVNode. This contains a clone of the previous VNode before patching. This means its element properties all have null values, same as a newly provided VNode would. 2. The patchElement function in vdom.js now check the container's previousVNode property to check with the provided VNode from render. If the two objects are identical, it exists. Before this didn't happen because the default vnode property on the container has references to DOM elements from the last patch. --- CHANGELOG.md | 10 ++++++++++ dist/composi-core.js | 2 +- dist/composi-core.js.gz | Bin 2933 -> 2962 bytes dist/composi-core.js.map | 2 +- dist/composi-core.mjs | 2 +- dist/composi-core.mjs.gz | Bin 2882 -> 2911 bytes dist/composi-core.mjs.map | 2 +- package-lock.json | 2 +- package.json | 2 +- src/render.js | 3 +++ src/vdom.js | 2 +- 11 files changed, 20 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1261213..833700f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # composi/core Changelog +## 1.6.1 (June 7, 2019) + +### src/render.js +* Now taking the VNode passed as an argument to the render function and clone it to save on the component container element as the value of property `previousVNode`. + +### src/vdom.js +* Now the `patchElement` function checks the new `previousVNode` property on the parent element to see if the new VNode is identical to the older vision. If they are it exits the patch immediately. Previously, the diff was checking a plain VNode against one which resulted from patching. Problem was, patching made the saved VNode always have DOM values for element, where as a fresh VNode has elements with a value of null. Using `previousVNode` allows the diff to check the resulting new VNode with the previous version before patching adds elements. This allows for quick exiting from the diff if there are no differences. + +The save VNode in the `vnode` property of the continer is still used for patching, since it holds the last DOM render information. + ## 1.6.0 (June 5, 2019) ### src/vdom.js diff --git a/dist/composi-core.js b/dist/composi-core.js index 78679d7..e864fee 100644 --- a/dist/composi-core.js +++ b/dist/composi-core.js @@ -1,2 +1,2 @@ -(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):b(a.composi={})})(this,function(a){"use strict";function b(a,b,c,d,e,f){return e||(e=null),{type:a,props:b,children:c,element:d,key:e,flag:f}}function c(a,c){return c||(c=null),b(a,v,w,c,null,3)}function d(a){for(var b,c=0;c({[d]:c(a[d],b)})))}return(Array.isArray(a[0])?a.unshift([]):a.unshift({}),Array.isArray(a[0]))?a.reduce((d,a)=>Array.prototype.concat(d,c(a))):"object"==typeof a[0]?a.reduce((d,a)=>Object.assign(d,c(a))):void 0}function g(a){return a.currentTarget.events[a.type](a)}function h(a){return null==a?null:a.key}function i(a,b,c){for(var d,e,f={};b<=c;)null!=(d=(e=a[b]).key)&&(f[d]=e),b++;return f}function j(a,b,c,d,e){if("key"!==b)if("style"===b&&"object"==typeof d)for(var h in f(c,d)){var i=null==d||null==d[h]?"":d[h];"-"===h[0]?a[b].setProperty(h,i):a[b][h]=i}else if("o"===b[0]&&"n"===b[1])b=b.slice(2).toLowerCase(),a.events||(a.events={}),a.events[b]=d,null==d?a.removeEventListener(b,g):null==c&&a.addEventListener(b,g);else{"list"!==b&&"form"!==b&&"type"!==b&&"draggable"!==b&&"spellcheck"!==b&&b in a&&!e?a[b]=null==d?"":d:null==d||!1===d?a.removeAttribute(b):"xlink-href"===b||"xlinkHref"===b?(a.setAttributeNS("http://www.w3.org/1999/xlink","href",d),a.setAttribute("href",d)):a.setAttribute(b,d)}}function k(a,b){var c=3===a.flag?document.createTextNode(a.type):(b=b||"svg"===a.type)?document.createElementNS("http://www.w3.org/2000/svg",a.type):document.createElement(a.type);var d=a.props;d.onmount&&x.push(function(){d.onmount(c)});for(var e=0,f=a.children.length;es)for(;u<=v;)b.insertBefore(k(t[u++],e),(j=q[r])&&j.element);else if(u>v)for(;r<=s;)m(b,q[r++]);else{for(var w=i(q,r,s),x={};u<=v;){if(l=h(j=q[r]),p=h(t[u]),x[l]||null!=p&&p===h(q[r+1])){null==l&&m(b,j),r++;continue}null==p||0===c.flag?(null==l&&(o(b,j&&j.element,j,t[u],e),u++),r++):(l===p?(o(b,j.element,j,t[u],e),x[p]=!0,r++):null==(g=w[p])?o(b,j&&j.element,null,t[u],e):(o(b,b.insertBefore(g.element,j&&j.element),g,t[u],e),x[p]=!0),u++)}for(;r<=s;)null==h(j=q[r++])&&m(b,j);for(var y in w)null==x[y]&&m(b,w[y])}}return b&&(d.element=b),d}function p(a,b,c){if("string"==typeof c&&(c=document.querySelector(c)),Array.isArray(b))throw new y;if(o(c,a&&a.element,a,b),b!==a)for(;0a&&a.type,d=(a,b)=>(d,e)=>{var f=c(d),g=z.call(a,f)&&a[f];return g?g(d.data,e):b(e)},e=0,f=function(){var c=a[e];b[c]=a=>({type:c,data:a}),e++};e=f.length&&f.push(d.children),delete d.children);0d;return a.send=b,c(d),()=>{j&&(j=!1,i&&i(d))}},a.union=function(){for(var a=arguments.length,b=Array(a),c=0;cb.map(b=>b&&b(a,c))},a.Fragment=(a,b)=>Array.isArray(a)&&!b?a:b,Object.defineProperty(a,"__esModule",{value:!0})}); +(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):b(a.composi={})})(this,function(a){"use strict";function b(a,b,c,d,e,f){return e||(e=null),{type:a,props:b,children:c,element:d,key:e,flag:f}}function c(a,c){return c||(c=null),b(a,v,w,c,null,3)}function d(a){for(var b,c=0;c({[d]:c(a[d],b)})))}return(Array.isArray(a[0])?a.unshift([]):a.unshift({}),Array.isArray(a[0]))?a.reduce((d,a)=>Array.prototype.concat(d,c(a))):"object"==typeof a[0]?a.reduce((d,a)=>Object.assign(d,c(a))):void 0}function g(a){return a.currentTarget.events[a.type](a)}function h(a){return null==a?null:a.key}function i(a,b,c){for(var d,e,f={};b<=c;)null!=(d=(e=a[b]).key)&&(f[d]=e),b++;return f}function j(a,b,c,d,e){if("key"!==b)if("style"===b&&"object"==typeof d)for(var h in f(c,d)){var i=null==d||null==d[h]?"":d[h];"-"===h[0]?a[b].setProperty(h,i):a[b][h]=i}else if("o"===b[0]&&"n"===b[1])b=b.slice(2).toLowerCase(),a.events||(a.events={}),a.events[b]=d,null==d?a.removeEventListener(b,g):null==c&&a.addEventListener(b,g);else{"list"!==b&&"form"!==b&&"type"!==b&&"draggable"!==b&&"spellcheck"!==b&&b in a&&!e?a[b]=null==d?"":d:null==d||!1===d?a.removeAttribute(b):"xlink-href"===b||"xlinkHref"===b?(a.setAttributeNS("http://www.w3.org/1999/xlink","href",d),a.setAttribute("href",d)):a.setAttribute(b,d)}}function k(a,b){var c=3===a.flag?document.createTextNode(a.type):(b=b||"svg"===a.type)?document.createElementNS("http://www.w3.org/2000/svg",a.type):document.createElement(a.type);var d=a.props;d.onmount&&x.push(function(){d.onmount(c)});for(var e=0,f=a.children.length;es)for(;u<=v;)b.insertBefore(k(t[u++],e),(j=q[r])&&j.element);else if(u>v)for(;r<=s;)m(b,q[r++]);else{for(var w=i(q,r,s),x={};u<=v;){if(l=h(j=q[r]),p=h(t[u]),x[l]||null!=p&&p===h(q[r+1])){null==l&&m(b,j),r++;continue}null==p||0===c.flag?(null==l&&(o(b,j&&j.element,j,t[u],e),u++),r++):(l===p?(o(b,j.element,j,t[u],e),x[p]=!0,r++):null==(g=w[p])?o(b,j&&j.element,null,t[u],e):(o(b,b.insertBefore(g.element,j&&j.element),g,t[u],e),x[p]=!0),u++)}for(;r<=s;)null==h(j=q[r++])&&m(b,j);for(var y in w)null==x[y]&&m(b,w[y])}}return b&&(d.element=b),d}function p(a,b,c){if("string"==typeof c&&(c=document.querySelector(c)),Array.isArray(b))throw new z;if(o(c,a&&a.element,a,b),b!==a)for(;0a&&a.type,d=(a,b)=>(d,e)=>{var f=c(d),g=A.call(a,f)&&a[f];return g?g(d.data,e):b(e)},e=0,f=function(){var c=a[e];b[c]=a=>({type:c,data:a}),e++};ef(a);class z{constructor(){this.message="Cannot insert Fragment tag directly into DOM.",this.toString=function(){return this.message}}}var A=Object.prototype.hasOwnProperty;a.h=function(a,d){d=d||{};for(var e,f=[],g=[],h=arguments.length,i=Array(2=f.length&&f.push(d.children),delete d.children);0d;return a.send=b,c(d),()=>{j&&(j=!1,i&&i(d))}},a.union=function(){for(var a=arguments.length,b=Array(a),c=0;cb.map(b=>b&&b(a,c))},a.Fragment=(a,b)=>Array.isArray(a)&&!b?a:b,Object.defineProperty(a,"__esModule",{value:!0})}); //# sourceMappingURL=composi-core.js.map diff --git a/dist/composi-core.js.gz b/dist/composi-core.js.gz index 15d0de270df96d4fc0d50243186918778ef2f3ca..8df4396a71b4244525638bdc9d7b053c4bf03e58 100644 GIT binary patch delta 2931 zcmV-(3yk#j7Lpf#ABzY800000028fQZFAeW5&nL^f?_)wVhq!A@}(ylR?}QM?M#yE zT+-`wRLvbof)r(nWcVUkC+WZUS%7bneP25LVu8S7vAfuPb{BS{CJX8$&m75pcC>SU zqk`HNqCONVk1X|E%i( zn4z<@+kN&5XU}~{xGdnYN>kIwy^hpKW@mBsbi3vOiw?>tRFR)oqLpjM9Cr$ZV94q@{ z7cki%6_@5}Y2vfoD!0x*=6hAXmz8oD8PMIz!VP4aI%7L<#ke$0!lp*Rmqf+ezPz6%l$to>jFK3TY)6$SffJ ze~`6*S`c#@fNFlR`jd)3JQsT1452}lH)Q~=UGgM^1UWT!lnt3olU~fsjihc+Dmp=X zme-3`k!U<*yrq&=mBg77au}hVg4>chWJD(vkIr!!uI4Zbeh^h>#@N}gbKaGuJh(}v ze?c%?v4wP-tXd~g?JQR$Yxji!eyXew&YCBclY0a|NWhR-e_}M zGowhq-0AcS6rC3d9nqa*aS3KqdrQ^w@0>=Bs+H311x(D98@JR-oDu>Wg;v zde;Y&C12O$&1^Qiqy4<&`TFkeNKc0rj?(Ga3*9{1=1o>lr_XNDRBNYC`Rv#)IsvfE z>!Lx483MCS7XX1SovMe(V}UC)i$Z0gNq0}qK(=Ap%t5S6E0&S z^Ln6ZYXlJt)=n=HJfsO;k;Z=jldA+75g}qz8xdY@1~6A+4CZxy9XONK1S@}<`}jlo zHo)(6N~ote&2gH*5&GU^*l9<#00p}qXs3Yd%@#p-*>f5-MF`*V4Cux{*?xKP(oZNe zoZ0-<1&!%QgoE1o6(W->s$G&d)z6=`XrT^;i%A1Q1e8W1pcO?~prg!;Lp_H7kwz2x zu1)ziD$?4?OKxCuI$douK0tp?j)DWY{TGEBQgCMyn%uJ&W2-Av6hV>3@?%DqXWW5@ z?XNO-W`evEp$`GR;VCcpH)zwjDlg&GmH5{B^6fpZv9Diku(}g1%(?tDgDp_nB8? z<`psDY39}KE#KYVQaM;YR;)k6WB#?ZA$|U%SD5lebk~*382AP>1jqjx70zThp zqfr@KCt0J;X0bS(X1#x#E}VXcLl)YMbb$|awui==7m|av=fV)bLixNbR$?+U#D=#M zi#=x9;>7_PT-%*<&GO3H@o>V}$iU^R^Nfh+k-^Q`tp&;KolSZtKM=0%Tf*n%VPz=x z7$J>z6*mkM_IQs@DI7qf=&D0gwO#f}0pZi{^+`a|t701HU9W%3d~Z=d@EiGIj{GAD z6FU=78sNTeU$maHhvzP@Fu+`1ILsM3g+a`3CV{jI)TEtGm7Y7DYG(w3v_!gGmHB;R zBnQ%JoRpTpa=LRRCih6frbhSb@^BpRWR3dx%VF#1shiZQl(51I(oU#$j>X!|P=z>* zxnZ6urlDQqcIox}j@I zWo3DGtF=ZI+INfg$nwo)@$gCqNacih)c!yY27~JxKzn~j=r11I+z>b@7-R9S?VfoA zTgqj$>f9n;#BgV%QAr`^L)|ksrPC-wnp>p|?)l4LMF%_P!2}5sTj%nuE2cB5E7`kX z)H@$BNF>VrxzD$BIrH(G(&+6Z)I|j)>hqZn-2njkp8V+BXzPg5~q`*x%qgmZ8{2iXrijQofa|o zFY9|$&*ThECdMz$<40z8L|GCzQOk;r--v^@Tt_fd!JZ&@P*!iJQI#OQzo8tqS8UH)xW$X(`gsRhJFkB#L#aI{TB2bu{wF8=Oz?7DU}DWxP63pHj7V`FU=Vt;VT*u z1<|n*>!0)R!X;hPY;oP4C2CJF3?kBxueJci*8JLF4{^hH;nbg${=?ObQ99vXvH`?%21 zGdDF`U2=k!p{vtVC#Eu=BI1gK@#*736v4Hs|F=x-11z;^;?dVnwLS)LQaz_(s7qd5 zroS%BaQFT~0%Y2JWd4cLKk7+t|MH8fKIwnS*!-vqsrh6^|48w^ySw{?WgZ`@Ien-G!Z1lZADXXO83nJKA}$ zQDJQhQ6CDGuPpUa$=@rDC4lu^Tv;UDK)gb>%ji zo1wF?+kN&DXM2Go-7w!4d6kIcnVp$auak-o0z$l|QdU)$2}Ja}1uG!gdB`KK_=+7% zRX1g3snf|(B5Tr=@gvFNNnVtBQF)+UCuvlw%nP|n)mCM-7x8Cx@W3FIv9~&(d+s5) zhdtL2T*H=sE1kRJdz?(){2d!MMI`MiFP)t%Eu1H2e)tIW=-eOkNL6mCvbbLR;mr*T z#CT;9F8QA(LIiGx&o2;sI(6P%Oq@=4|M`69)~c!cn zQ}5{z%<%B`b|kDKVU2z^88?fE+mkq4iYN~ovXc9MwNd5aGi(;tP);(&NmKp~$IAZL zIZQT4#ihAgn)p#}m0RZ@^SvtH%St(n4CroU;f69zov|IbVq6-_&PKwn9M^Tpxa0c? zM5gxEzm$CbBnx&-R?bh_k0BcjCs})W(#J~Ru4P4{x08VzD5ZycBxf452}lH)RN|UGgM^1UWT!lnt3olU~etMp8E{6`i0x z%kM?2NHiWX-cre`O5)6kIE>Iv!EH$$GNKcSC+E0`mL80PA4JueF?KfWobSp~9^9nT zzaW?`*<89!R;`m&?JSlgYxji!4K{#w%kG7G4;SzKD zg}$)fK$jRG86sCB3c$z@9!2Og+A|TbGJr)cf+eHv3=y(|u?74!xVh=>ZZ)vo4EUsf zebdG+n*y5AM^ztEWmDV&WUq}Cu}+jV{0`0!E{q*%A`wQF=yYlai}iAD+aCS;_ARko zYge*y)a*a?JKqds5_tWg;v zde;Y&CEwQLVK$rH(SF|Xe0z6yq_0B@N9lCzM{b^N^CqjO(-*gBsqp%t5S6D?vQ z^LwCaYXlJv)=n=HJfsQVkS2HpldA+75fNfj8xdY@1~6A+4CZ%!9XgZM1S@~^0{o$T z8{&65CDc=#<~U8@2z~D{?6jj=fP!5Qv{S(KX7jMSY>!4w5y5wS1G+I#wqKsV_7lns zXXd@RpfMeZa8NtHLgWa?hX!Q`3C)p!BMPHXhmjdadJG36ktg(BoBC{2g|(BH+`#5^ zy4q$gnYQ2=Cs^2_{-E>+$3OJjSina4~QNo)GjOs;$ zkr6kYPNA(Rn9p*ENkqNp(FZ4DQn0+a;Y}NdZ!xcW=DXi#UX7Vo#C(6JnOC>Be0O_G z^+M`W+5gXfx6UKG1*J9vW+2K!0t|xgmao@?}vh#bjoP4R0qFd(5)=s{=H8wmUt| z^2*xraKhNg0N$(fjELuv!OhvN1Ay0NCH4GE=fR0uu z8c?C=%0E+p6RT z=@JJ6j^%~JoS_vM#QbV9M7uy;*y&X1xznk3Mkq&1q{~$u-*-N8Ag#t(X92LLJ6B?I zk1T77aKA1O#{o~)D1bj7wn3h{Nv%o=D=Z=Hgo@)>tlbP{hQpW}<(Xm{yEQP!u1+Y7 zPaNDt*y>9q6Jviq9m@PO+J{hA?23c{KAu-ehVJliBoX>@cfGLNo)z&k`XCFm^w3?k z*Rbk6V3fom;c>VnYF$5+B~-NkmO)HtE$dosi`uGl3mvKM*qTyVS)Sc$tx;z7?Vvrf zd~;bHywT!Oy&#^nKahjL;Q9v8zY+S2r#3f)4l2S}{MLWA$9x4_%EfBgxkWsW;m*jD zl0q(kx@T@`qfrVpw@NA64;JB)4tC6o2r?kHdh)DGqBF`T*}LGXcRpf}NYwLQz_)Zc z-uTgI^f(gfs(~```AmoI0Dyc?{`7)Bewd=avku2m_p2`;sobrqDj6$bzn58-*OoyI z>jxC`6f1vLEn_Q6N?0+aFvop-|I;Ve=6Z9Tf7Zb|*145v%)Axqx9&QIo^>s&pY~bT zANkTnEoIV%2Pm(J2BKo{`De%0z!qvUpw^%o~z5;%oLKR_(^=v?Uz~ z0CPZ{T3Mqh@Llzn{R$-%*l7r2eFwS~s-vGhZbu@i#dbL)O5Hf27MaY8_N=)jVkHcyqS3_|?5eW|<)k=HB@8=m#=yaAG^i0}g5wM!ypNy|V9Wo?MKN3JLn z5)%Z873kD!0Xw1haJXwTu95vxv0pD0`(%GY$Fsg@Q9Bhb1lh~Vvj2Dt&i1cuYv+ga z{~>`!x;ZyJ!Re%E&KuA91`-Q;GNSUhokmeiciv=T{8BuA9A-yU8=T7XL^4o zLj96b)_=phR|s3P_)KZgoDmUhqQ6iO9V@Z^IS(&W(lt#I*IiYj_Jl@m)dW>oCIuZ( zola&#D@fTGP=vJlOu0Q34pL1tbfXnqLm*fv>(CMz4iy(jNma}O**QHDg7X+{JBX04 zu`m!_+0ng%n>TNrhrS3~S1^S6KzyL0(=QP@MIjT$G*VPv8KA1~jNt<@eKR^1%ILYl_eo@sY{jU_8 zA9a1?O=k2D5dWLIyFXawLHUy`3dGYte*P%h2)(5UbvG4>_04|)dN>us$Qc3v0Di}S AJOBUy diff --git a/dist/composi-core.js.map b/dist/composi-core.js.map index c93cb69..1ca982a 100644 --- a/dist/composi-core.js.map +++ b/dist/composi-core.js.map @@ -1 +1 @@ -{"version":3,"file":"composi-core.js.map","sources":["../src/vnode.js","../node_modules/@composi/merge-objects/src/index.js","../src/vdom.js","../src/union.js","../src/constants.js","../src/h.js","../src/render.js","../src/runtime.js","../src/effects.js","../src/fragment.js"],"sourcesContent":["import {\n EMPTY_OBJECT,\n EMPTY_ARRAY,\n TEXT_NODE,\n RECYCLED_NODE\n} from './constants'\n\n/**\n * @typedef {Object. | {}} Props\n * @property {Children} Props.children\n */\n/**\n * @typedef {VNode[]} Children\n */\n/**\n * @typedef {string | number | Function} Type\n * @typedef {number | string | null} Key\n * @typedef {Object.} VNode\n * @property {Type} VNode.type\n * @property {Props} VNode.props\n * @property {Children} VNode.children\n * @property {Element} VNode.element\n * @property {Key} [VNode.key]\n * @property {number} VNode.flag\n */\n/**\n * Create a virtual node with the provided properties.\n * @param {string | Function} type\n * @param {Props} props\n * @param {Children} children\n * @param {Element} element\n * @param {string | number | null} key\n * @param {number} flag\n * @return {VNode} VNode\n */\nexport function createVNode(type, props, children, element, key, flag) {\n if (!key) key = null\n return {\n type,\n props,\n children,\n element,\n key,\n flag\n }\n}\n\n/**\n * Create a virtual text node.\n * @param {string} text\n * @param {Element} [element]\n * @return {VNode} VNode\n */\nexport function createTextVNode(text, element) {\n if (!element) element = null\n return createVNode(text, EMPTY_OBJECT, EMPTY_ARRAY, element, null, TEXT_NODE)\n}\n\n/**\n * Function to remove whitespace nodes from DOM element.\n * This is to avoid unnecessary inclusion of\n * whitespace nodes in virtual node when hydrating.\n * @param {Element | Node} node\n * @returns {void} undefined\n */\nfunction removeWhiteSpaceNodes(node) {\n for (let n = 0; n < node.childNodes.length; n++) {\n const child = node.childNodes[n]\n if (\n child.nodeType === 8 ||\n (child.nodeType === 3 && !/\\S/.test(child.nodeValue))\n ) {\n node.removeChild(child)\n n--\n } else if (child.nodeType === 1) {\n removeWhiteSpaceNodes(child)\n }\n }\n}\n\n/**\n * Create a virtual node represeting a DOM element and its children.\n * @param {Element} element\n * @return {VNode} VNode\n */\nexport function hydrate(element) {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n }\n // Clean node before using:\n removeWhiteSpaceNodes(element)\n\n return element.nodeType === TEXT_NODE\n ? createTextVNode(element.nodeValue, element)\n : createVNode(\n element.nodeName.toLowerCase(),\n EMPTY_OBJECT,\n EMPTY_ARRAY.map.call(element.childNodes, hydrate),\n element,\n null,\n RECYCLED_NODE\n )\n}\n","/**\n * Combine two objects, merging the second into the first. Any properties already existing in the first will be replaced by those of the second. Any properties in the second not in the first will be added to it.\n * This does a deep clone. Sub arrays will be cloned. If arrays consist of objects, those will be cloned. Functions will also be cloned. This also support Maps and Sets.\n * Passing in just one object will return a deep clone of it.\n *\n * @param {Object.[]} objects One or more objects to use for merging.\n * @return {Object.} Object.\n */\n\nexport function mergeObjects(...objects) {\n const FIRST_ARGUMENT = 0\n // Add empty array or object to arguments to ensure unique clone:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n objects.unshift([])\n } else {\n objects.unshift({})\n }\n\n /**\n * Create a clone of an object or array.\n * @param {*} object The object to clone.\n * @return {Object} Object\n */\n\n function createClone(object, hash = new WeakMap()) {\n // Deal with primitive types:\n if (Object(object) !== object) return object\n // Deal with cyclic references:\n if (hash.has(object)) return hash.get(object)\n const result =\n object instanceof Date\n ? new Date(object)\n : object instanceof RegExp\n ? new RegExp(object.source, object.flags)\n : object.constructor\n ? new object.constructor()\n : Object.create(null)\n hash.set(object, result)\n if (object instanceof Map) {\n Array.from(object, ([key, val]) =>\n result.set(key, createClone(val, hash))\n )\n }\n if (object instanceof Set) {\n Array.from(object, val => result.add(createClone(val, hash)))\n }\n return Object.assign(\n result,\n ...Object.keys(object).map(key => ({\n [key]: createClone(object[key], hash)\n }))\n )\n }\n // Return cloned copy of merged objects:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n return objects.reduce((a, b) => Array.prototype.concat(a, createClone(b)))\n } else if (typeof objects[FIRST_ARGUMENT] === 'object') {\n return objects.reduce((a, b) => Object.assign(a, createClone(b)))\n }\n}\n\nexport const cloneObject = object => mergeObjects(object)\nexport const clone = object => mergeObjects(object)\n","import {\n RECYCLED_NODE,\n TEXT_NODE,\n XLINK_NS,\n SVG_NS,\n LIFECYCLE\n} from './constants'\nimport { mergeObjects } from '@composi/merge-objects'\n\n/**\n * Event proxy for inline events.\n * @param {Event} event\n * @return {any} any\n */\nfunction eventProxy(event) {\n return event.currentTarget['events'][event.type](event)\n}\n\n/**\n * Get the key value of a virtual node.\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} vnode\n * @return {string | number | null}\n */\nfunction getKey(vnode) {\n return vnode == null ? null : vnode.key\n}\n\n/**\n * Create a map of keyed nodes.\n * @typedef {import('./vnode').Children} Children\n * @param {Children} children\n * @param {number} startCount\n * @param {number} end\n * @return {Object.} Object.\n */\nfunction createKeyMap(children, startCount, end) {\n const out = {}\n let key\n let vnode\n\n while (startCount <= end) {\n if ((key = (vnode = children[startCount]).key) != null) {\n out[key] = vnode\n }\n startCount++\n }\n\n return out\n}\n\n/**\n * Update the properties and attributes of a VNode based on new data.\n * @param {Element} element\n * @param {string} prop\n * @param {any} oldValue\n * @param {any} newValue\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction setProp(element, prop, oldValue, newValue, isSVG) {\n if (prop === 'key') {\n return\n } else if (prop === 'style' && typeof newValue === 'object') {\n for (let i in mergeObjects(oldValue, newValue)) {\n const style = newValue == null || newValue[i] == null ? '' : newValue[i]\n if (i[0] === '-') {\n element[prop].setProperty(i, style)\n } else {\n element[prop][i] = style\n }\n }\n } else {\n if (prop[0] === 'o' && prop[1] === 'n') {\n prop = prop.slice(2).toLowerCase()\n\n if (!element['events']) element['events'] = {}\n\n element['events'][prop] = newValue\n\n if (newValue == null) {\n element.removeEventListener(prop, eventProxy)\n } else if (oldValue == null) {\n element.addEventListener(prop, eventProxy)\n }\n } else {\n let nullOrFalse = newValue == null || newValue === false\n\n if (\n prop !== 'list' &&\n prop !== 'form' &&\n prop !== 'type' &&\n prop !== 'draggable' &&\n prop !== 'spellcheck' &&\n prop in element &&\n !isSVG\n ) {\n element[prop] = newValue == null ? '' : newValue\n } else if (nullOrFalse) {\n element.removeAttribute(prop)\n } else {\n if (prop === 'xlink-href' || prop === 'xlinkHref') {\n element.setAttributeNS(XLINK_NS, 'href', newValue)\n element.setAttribute('href', newValue)\n } else {\n element.setAttribute(prop, newValue)\n }\n }\n }\n }\n}\n\n/**\n * Create an element, either node or text, from a VNode.\n * @typedef {Function[]} Lifecycle\n * @param {VNode} vnode\n * @param {boolean} [isSVG]\n * @return {Element} Element\n */\nfunction createElement(vnode, isSVG) {\n let element\n if (vnode.flag === TEXT_NODE) {\n element = document.createTextNode(/** @type {string} */ (vnode.type))\n } else {\n if ((isSVG = isSVG || vnode.type === 'svg')) {\n element = document.createElementNS(\n SVG_NS,\n /** @type {string} */ (vnode.type)\n )\n } else {\n element = document.createElement(/** @type {string} */ (vnode.type))\n }\n }\n\n const props = vnode.props\n if (props['onmount']) {\n LIFECYCLE.push(function() {\n props['onmount'](element)\n })\n }\n let idx = 0\n const length = vnode.children.length\n while (idx < length) {\n element.appendChild(createElement(vnode.children[idx], isSVG))\n idx++\n }\n\n for (let prop in props) {\n setProp(/** @type {Element} */ (element), prop, null, props[prop], isSVG)\n }\n\n return (vnode.element = /** @type {Element} */ (element))\n}\n\n/**\n * Remove children from a node.\n * @param {VNode} vnode\n * @return {Element}\n */\nfunction removeChildren(vnode) {\n let idx = 0\n const length = vnode.children.length\n while (idx < length) {\n removeChildren(vnode.children[idx])\n idx++\n }\n\n return vnode.element\n}\n\n/**\n * Remove an element from the DOM.\n * @param {Element} parent\n * @param {VNode} vnode\n * @return {void} undefined\n */\nfunction removeElement(parent, vnode) {\n const done = function() {\n parent.removeChild(removeChildren(vnode))\n }\n\n const cb = vnode.props && vnode.props['onunmount']\n if (cb != null) {\n cb(vnode.element, done)\n } else {\n done()\n }\n}\n\n/**\n * Update an element based on new prop values.\n * @typedef {import('./vnode').Props} Props\n * @param {Element} element\n * @param {Props} oldProps\n * @param {Props} newProps\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction updateElement(element, oldProps, newProps, isSVG) {\n for (let prop in mergeObjects(oldProps, newProps)) {\n if (\n (prop === 'value' || prop === 'checked' || prop === 'selected'\n ? element[prop]\n : oldProps[prop]) !== newProps[prop]\n ) {\n setProp(element, prop, oldProps[prop], newProps[prop], isSVG)\n }\n }\n\n const cb =\n element['vnode'] && element['vnode'].type === RECYCLED_NODE\n ? newProps['onmount']\n : newProps['onupdate']\n if (cb != null) {\n if (newProps['onmount']) {\n LIFECYCLE.push(function() {\n cb(element)\n })\n } else {\n LIFECYCLE.push(function() {\n cb(element, oldProps, newProps)\n })\n }\n }\n}\n\n/**\n * Patch an element based on differences between its old VNode and its new one.\n * @param {Element} parent\n * @param {Element} element\n * @param {VNode} oldVNode\n * @param {VNode} newVNode\n * @param {boolean} [isSVG]\n * @return {VNode}\n */\nfunction patchElement(parent, element, oldVNode, newVNode, isSVG) {\n if (newVNode === oldVNode) {\n } else if (\n oldVNode != null &&\n oldVNode.flag === TEXT_NODE &&\n newVNode.flag === TEXT_NODE\n ) {\n if (oldVNode.type !== newVNode.type) {\n element.nodeValue = /** @type {any} */ (newVNode.type)\n }\n } else if (oldVNode == null || oldVNode.type !== newVNode.type) {\n const newElement = parent.insertBefore(\n createElement(newVNode, isSVG),\n element\n )\n\n if (oldVNode != null) removeElement(parent, oldVNode)\n\n element = newElement\n } else {\n updateElement(\n element,\n oldVNode.props,\n newVNode.props,\n (isSVG = isSVG || newVNode.type === 'svg')\n )\n\n let savedNode\n let childNode\n\n let lastKey\n let oldVNodeChildren = oldVNode.children\n let oldVNodeChildStart = 0\n let oldVNodeChildEnd = oldVNodeChildren.length - 1\n\n let nextKey\n const newVNodeChildren = newVNode.children\n let newVNodeChildStart = 0\n let newVNodeChildEnd = newVNodeChildren.length - 1\n\n while (\n newVNodeChildStart <= newVNodeChildEnd &&\n oldVNodeChildStart <= oldVNodeChildEnd\n ) {\n lastKey = getKey(oldVNodeChildren[oldVNodeChildStart])\n nextKey = getKey(newVNodeChildren[newVNodeChildStart])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n oldVNodeChildren[oldVNodeChildStart].element,\n oldVNodeChildren[oldVNodeChildStart],\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n\n oldVNodeChildStart++\n newVNodeChildStart++\n }\n\n while (\n newVNodeChildStart <= newVNodeChildEnd &&\n oldVNodeChildStart <= oldVNodeChildEnd\n ) {\n lastKey = getKey(oldVNodeChildren[oldVNodeChildEnd])\n nextKey = getKey(newVNodeChildren[newVNodeChildEnd])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n oldVNodeChildren[oldVNodeChildEnd].element,\n oldVNodeChildren[oldVNodeChildEnd],\n newVNodeChildren[newVNodeChildEnd],\n isSVG\n )\n\n oldVNodeChildEnd--\n newVNodeChildEnd--\n }\n\n if (oldVNodeChildStart > oldVNodeChildEnd) {\n while (newVNodeChildStart <= newVNodeChildEnd) {\n element.insertBefore(\n createElement(newVNodeChildren[newVNodeChildStart++], isSVG),\n (childNode = oldVNodeChildren[oldVNodeChildStart]) &&\n childNode.element\n )\n }\n } else if (newVNodeChildStart > newVNodeChildEnd) {\n while (oldVNodeChildStart <= oldVNodeChildEnd) {\n removeElement(element, oldVNodeChildren[oldVNodeChildStart++])\n }\n } else {\n const lastKeyed = createKeyMap(\n oldVNodeChildren,\n oldVNodeChildStart,\n oldVNodeChildEnd\n )\n const nextKeyed = {}\n\n while (newVNodeChildStart <= newVNodeChildEnd) {\n lastKey = getKey((childNode = oldVNodeChildren[oldVNodeChildStart]))\n nextKey = getKey(newVNodeChildren[newVNodeChildStart])\n\n if (\n nextKeyed[lastKey] ||\n (nextKey != null &&\n nextKey === getKey(oldVNodeChildren[oldVNodeChildStart + 1]))\n ) {\n if (lastKey == null) {\n removeElement(element, childNode)\n }\n oldVNodeChildStart++\n continue\n }\n\n if (nextKey == null || oldVNode.flag === RECYCLED_NODE) {\n if (lastKey == null) {\n patchElement(\n element,\n childNode && childNode.element,\n childNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n newVNodeChildStart++\n }\n oldVNodeChildStart++\n } else {\n if (lastKey === nextKey) {\n patchElement(\n element,\n childNode.element,\n childNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n nextKeyed[nextKey] = true\n oldVNodeChildStart++\n } else {\n if ((savedNode = lastKeyed[nextKey]) != null) {\n patchElement(\n element,\n element.insertBefore(\n savedNode.element,\n childNode && childNode.element\n ),\n savedNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n nextKeyed[nextKey] = true\n } else {\n patchElement(\n element,\n childNode && childNode.element,\n null,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n }\n }\n newVNodeChildStart++\n }\n }\n\n while (oldVNodeChildStart <= oldVNodeChildEnd) {\n if (\n getKey((childNode = oldVNodeChildren[oldVNodeChildStart++])) == null\n ) {\n removeElement(element, childNode)\n }\n }\n\n for (let key in lastKeyed) {\n if (nextKeyed[key] == null) {\n removeElement(element, lastKeyed[key])\n }\n }\n }\n }\n\n if (element) {\n newVNode.element = element\n }\n return newVNode\n}\n\n/**\n * Class to throw error message when attempting to insert Fragement tag directly into DOM.\n * @return {string} message\n */\nexport class FragmentError {\n constructor() {\n this.message = 'Cannot insert Fragment tag directly into DOM.'\n this.toString = function() {\n return this.message\n }\n }\n}\n\n/**\n * Function to either mount an element the first time or patch it in place. This behavior depends on the value of the old VNode. If it is null, a new element will be created, otherwise it compares the new VNode with the old one and patches it.\n * @param {Element | string} container\n * @param {VNode} newVNode\n * @param {VNode} [oldVNode]\n * @return {VNode} VNode\n */\nexport function patch(oldVNode, newVNode, container) {\n if (typeof container === 'string') {\n container = document.querySelector(container)\n }\n\n if (Array.isArray(newVNode)) throw new FragmentError()\n patchElement(container, oldVNode && oldVNode.element, oldVNode, newVNode)\n\n if (newVNode !== oldVNode) {\n while (LIFECYCLE.length > 0) LIFECYCLE.pop()()\n }\n\n return newVNode\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * Create a union of string tags.\n * @param {string[]} types\n */\nfunction createUnion(types) {\n const variants = Object.create(null)\n let checkTag = x => x && x.type\n\n const matcher = (handlers, catchAll) => {\n return (tag, context) => {\n const tagType = checkTag(tag)\n const match = hasOwnProperty.call(handlers, tagType) && handlers[tagType]\n return match ? match(tag.data, context) : catchAll(context)\n }\n }\n\n function match(tag, handlers, catchAll) {\n return matcher(handlers, catchAll)(tag)\n }\n\n let idx = 0\n while (idx < types.length) {\n const type = types[idx]\n variants[type] = data => ({ type, data })\n idx++\n }\n\n return { variants, match }\n}\n\n/**\n * Create a union of types for matching up with functions.\n * @param {...string} types\n */\nexport function union(...types) {\n const { variants, match } = createUnion(types)\n variants.match = match\n return variants\n}\n","/**\n * Used to determine if a vnode should be recycled.\n * @type {number}\n */\nexport const RECYCLED_NODE = 0\n\n/**\n * Used in a vnode to indicate that it is a DOM node.\n * @type {number}\n */\nexport const ELEMENT_NODE = 1\n\n/**\n * Used in a vnode to indicate that it is a text node.\n * @type {number}\n */\nexport const TEXT_NODE = 3\n\n/**\n * Namespace for SVG elements with `xlink:href` attributes.\n * @type {string}\n */\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink'\n\n/**\n * Namespace for SVG elements.\n * @type {string}\n */\nexport const SVG_NS = 'http://www.w3.org/2000/svg'\n\n/**\n * An empty object. Used as placeholder for `props` in VNode.\n * @type {{}} EMPTY_OBJECT\n */\nexport const EMPTY_OBJECT = {}\n\n/**\n * An empty array. Used for access to array methods.\n * @type {any[]} EMPTY_ARRAY\n */\nexport const EMPTY_ARRAY = []\n\n/**\n * An array to store lifecycle hooks.\n * @type {any[]} LIFECYCLE\n */\nexport const LIFECYCLE = []\n","import { createVNode, createTextVNode } from './vnode'\nimport { ELEMENT_NODE } from './constants'\n\n/**\n * Creates a virtual node representing a node or text node to be created.\n * @typedef {import('./vnode').VNode} VNode\n * @param {string | Function} type\n * @param {Object.} [props]\n * @return {VNode}\n */\nexport function h(type, props, ...children) {\n props = props || {}\n let node\n const tempBox = []\n const childNodes = []\n let length = children.length\n const key = props.key\n\n while (length-- > 0) tempBox.push(children[length])\n\n if (props.children) {\n if (tempBox.length <= 0) {\n tempBox.push(props.children)\n }\n delete props.children\n }\n\n while (tempBox.length > 0) {\n if (Array.isArray((node = tempBox.pop()))) {\n let length = node.length\n while (length-- > 0) {\n tempBox.push(node[length])\n }\n } else if (node === false || node === true || node == null) {\n } else {\n childNodes.push(typeof node === 'object' ? node : createTextVNode(node))\n }\n }\n\n if (typeof type === 'function') {\n return type(props, (props.children = childNodes))\n } else {\n return createVNode(type, props, childNodes, null, key, ELEMENT_NODE)\n }\n}\n","import { patch } from './vdom'\nimport { hydrate } from './vnode'\n\n/**\n * Render a functional component. The first argument is the component to render. This can be either a JSX tag or an `h` function. The second argument is the container to render in. An optional third argument is an element in the document loaded from the server. This will be hydrated with the component provided to render. This third argument can be a DOM referece for that element, or a valid string selector for it.\n * @example\n *\n * ```\n * // Render Title tag into section:\n * render(, 'section')\n * // Update the title component 5 seconds later:\n * setTimeout(() => {\n * render(<Title message='Hello Everyone!'/>, 'section')\n * }, 5000)\n * ```\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} VNode\n * @param {Element | string} container\n * @param {Element | string} [hydrateThis]\n * @return {void} undefined\n */\nexport function render(VNode, container, hydrateThis) {\n if (typeof container === 'string') {\n container = document.querySelector(container)\n } else {\n container = container\n }\n if (!container) {\n console.error(\n '@composi/core Error: You need to provide a valid container to render the component in. Check the element or selector you provided and make sure that it exists in the DOM before trying to render.'\n )\n console.error(\n `@composi/core Message: The container you provided was \"${container}\"`\n )\n return\n }\n let oldVNode\n if (hydrateThis) {\n if (typeof hydrateThis === 'string') {\n hydrateThis = document.querySelector(hydrateThis)\n }\n // If user tries to hydrate already rendered component,\n // use its 'vnode' property,\n // otherwise hydrate it.\n oldVNode = (container && container['vnode']) || hydrate(hydrateThis)\n } else {\n oldVNode = container && container['vnode']\n }\n const vnode = patch(oldVNode, VNode, container)\n container['vnode'] = vnode\n}\n","/**\n * The @composi/runtime.\n * @example\n *\n * ```\n * // Create a runtime program\n * const program = {\n * // Define state:\n * init() {\n * return [{count: 0}]\n * },\n * // Define view to render.\n * // Notice event to send message 'incr'.\n * view(state, send) {\n * return render(<div onclick={send('incr')}>The count is: {state.count}</div>, document.body)\n * },\n * // Define action to update state:\n * update(state, msg) {\n * if (msg === 'incr') {\n * return [state.count++]\n * }\n * }\n * }\n * // Run the program:\n * run(program)\n * ```\n * @typedef {any} State - type any.\n * @typedef {Function} Effect - A function to execute.\n * @typedef {Object<string, any>} Program A program to run.\n * @prop {Function} Program.init\n * @prop {Function} Program.update\n * @prop {Function} Program.view\n * @prop {Function} [Program.subscriptions]\n * @prop {Function} [Program.subs] Shortcut for subscriptions.\n * @prop {Function} [Program.done]\n * @param {Program} program A program to run with four methods: `init`, `view`, `update` and `subscriptions`.\n * @return {() => void} Function to terminate runtime.\n */\nexport function run(program) {\n const update = program.update\n const view = program.view\n const subscriptions = program.subscriptions || program.subs\n const done = program.done\n let state, effect\n let isRunning = true\n let isFirstRun = false\n const getState = () => state\n\n /**\n * Send a message.\n * @param {any} message A message of any type.\n * @return {void} undefined\n */\n function send(message) {\n if (isRunning) {\n updateView(update(state, message, send))\n }\n }\n\n /**\n * Expose send as static function on program object.\n * This is to let you send messages to the program\n * from other contexts, such as in a @composi/router action.\n */\n program['send'] = send\n\n /**\n * Handle changes to state and executing effects.\n * @param {any[]} update\n * @return {void} undefined\n */\n function updateView(update) {\n let sub\n let init = program.init()\n if (update) {\n ;[state, effect] = update\n } else if (init && init.length) {\n ;[state, effect] = init\n if (subscriptions && !isFirstRun) {\n sub = subscriptions(getState, send)\n if (typeof sub === 'function') sub(getState, send)\n isFirstRun = true\n }\n } else {\n state = []\n }\n if (effect) {\n effect(state, send)\n }\n view(state, send)\n }\n\n updateView(state)\n\n /**\n * Function to end runtime.\n * @return {void} undefined\n */\n return () => {\n if (isRunning) {\n isRunning = false\n if (done) {\n done(state)\n }\n }\n }\n}\n","/**\n * Function to batch effects together.\n * @param {...Function} effects\n * @return {Function} Function\n */\nexport const batchEffects = (...effects) => (state, send) =>\n effects.map(effect => effect && effect(state, send))\n","/**\n * Returns a group of sibling elements for inclusion in another JSX tag.\n * @typedef {import('./vnode').Props} Props\n * @typedef {import('./vnode').Children} Children\n * @param {Props} props\n * @return {Children} children\n */\n/**\n * A tag to enable returning sibling elements. This is useful for returning list items to render in a list or table cells to render in a table row.\n * @example\n *\n * ```\n * <Fragment>\n * <li>A</li>\n * <li>B</li>\n * <li>C</li>\n * </Fragment>\n ```\n * Or functionally:\n * ```\n * Fragment(null, [\n * h('li', {}, 'A'),\n * h('li', {}, 'B'),\n * h('li', {}, 'C')\n * ])\n ```\n * @param {Object} [props] When using Fragment as a function, props is the first argument. Provide either null or {} as the value for props.\n * @param {Children} [children] The siblings to return with the Fragment. This will be an array of sibling elements.\n * @return {VNode[]} An array of virtual nodes.\n */\nexport const Fragment = (props, children) =>\n Array.isArray(props) && !children ? props : children\n"],"names":["createVNode","type","props","children","element","key","flag","createTextVNode","text","EMPTY_OBJECT","EMPTY_ARRAY","removeWhiteSpaceNodes","node","child","n","childNodes","length","nodeType","test","nodeValue","removeChild","hydrate","document","querySelector","nodeName","toLowerCase","map","call","mergeObjects","objects","createClone","object","hash","WeakMap","Object","has","get","result","Date","RegExp","source","flags","constructor","create","set","assign","keys","Array","isArray","unshift","reduce","a","b","prototype","concat","eventProxy","event","currentTarget","getKey","vnode","createKeyMap","startCount","end","out","setProp","prop","oldValue","newValue","isSVG","i","style","setProperty","slice","removeEventListener","addEventListener","removeAttribute","setAttributeNS","setAttribute","createElement","createTextNode","createElementNS","LIFECYCLE","push","idx","appendChild","removeChildren","removeElement","parent","done","cb","updateElement","oldProps","newProps","patchElement","oldVNode","newVNode","newElement","insertBefore","savedNode","childNode","lastKey","nextKey","oldVNodeChildren","oldVNodeChildStart","oldVNodeChildEnd","newVNodeChildren","newVNodeChildStart","newVNodeChildEnd","lastKeyed","nextKeyed","patch","container","FragmentError","pop","createUnion","types","variants","checkTag","x","matcher","handlers","catchAll","tag","context","tagType","match","hasOwnProperty","data","message","toString","tempBox","VNode","hydrateThis","console","error","program","send","isRunning","updateView","update","state","sub","init","effect","subscriptions","isFirstRun","getState","view","subs","effects"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"composi-core.js.map","sources":["../src/vnode.js","../node_modules/@composi/merge-objects/src/index.js","../src/vdom.js","../src/union.js","../src/constants.js","../src/h.js","../src/render.js","../src/runtime.js","../src/effects.js","../src/fragment.js"],"sourcesContent":["import {\n EMPTY_OBJECT,\n EMPTY_ARRAY,\n TEXT_NODE,\n RECYCLED_NODE\n} from './constants'\n\n/**\n * @typedef {Object.<string, any> | {}} Props\n * @property {Children} Props.children\n */\n/**\n * @typedef {VNode[]} Children\n */\n/**\n * @typedef {string | number | Function} Type\n * @typedef {number | string | null} Key\n * @typedef {Object.<string, any>} VNode\n * @property {Type} VNode.type\n * @property {Props} VNode.props\n * @property {Children} VNode.children\n * @property {Element} VNode.element\n * @property {Key} [VNode.key]\n * @property {number} VNode.flag\n */\n/**\n * Create a virtual node with the provided properties.\n * @param {string | Function} type\n * @param {Props} props\n * @param {Children} children\n * @param {Element} element\n * @param {string | number | null} key\n * @param {number} flag\n * @return {VNode} VNode\n */\nexport function createVNode(type, props, children, element, key, flag) {\n if (!key) key = null\n return {\n type,\n props,\n children,\n element,\n key,\n flag\n }\n}\n\n/**\n * Create a virtual text node.\n * @param {string} text\n * @param {Element} [element]\n * @return {VNode} VNode\n */\nexport function createTextVNode(text, element) {\n if (!element) element = null\n return createVNode(text, EMPTY_OBJECT, EMPTY_ARRAY, element, null, TEXT_NODE)\n}\n\n/**\n * Function to remove whitespace nodes from DOM element.\n * This is to avoid unnecessary inclusion of\n * whitespace nodes in virtual node when hydrating.\n * @param {Element | Node} node\n * @returns {void} undefined\n */\nfunction removeWhiteSpaceNodes(node) {\n for (let n = 0; n < node.childNodes.length; n++) {\n const child = node.childNodes[n]\n if (\n child.nodeType === 8 ||\n (child.nodeType === 3 && !/\\S/.test(child.nodeValue))\n ) {\n node.removeChild(child)\n n--\n } else if (child.nodeType === 1) {\n removeWhiteSpaceNodes(child)\n }\n }\n}\n\n/**\n * Create a virtual node represeting a DOM element and its children.\n * @param {Element} element\n * @return {VNode} VNode\n */\nexport function hydrate(element) {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n }\n // Clean node before using:\n removeWhiteSpaceNodes(element)\n\n return element.nodeType === TEXT_NODE\n ? createTextVNode(element.nodeValue, element)\n : createVNode(\n element.nodeName.toLowerCase(),\n EMPTY_OBJECT,\n EMPTY_ARRAY.map.call(element.childNodes, hydrate),\n element,\n null,\n RECYCLED_NODE\n )\n}\n","/**\n * Combine two objects, merging the second into the first. Any properties already existing in the first will be replaced by those of the second. Any properties in the second not in the first will be added to it.\n * This does a deep clone. Sub arrays will be cloned. If arrays consist of objects, those will be cloned. Functions will also be cloned. This also support Maps and Sets.\n * Passing in just one object will return a deep clone of it.\n *\n * @param {Object.<string, any>[]} objects One or more objects to use for merging.\n * @return {Object.<string, any>} Object.<string, any>\n */\n\nexport function mergeObjects(...objects) {\n const FIRST_ARGUMENT = 0\n // Add empty array or object to arguments to ensure unique clone:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n objects.unshift([])\n } else {\n objects.unshift({})\n }\n\n /**\n * Create a clone of an object or array.\n * @param {*} object The object to clone.\n * @return {Object<string, any>} Object<string, any>\n */\n\n function createClone(object, hash = new WeakMap()) {\n // Deal with primitive types:\n if (Object(object) !== object) return object\n // Deal with cyclic references:\n if (hash.has(object)) return hash.get(object)\n const result =\n object instanceof Date\n ? new Date(object)\n : object instanceof RegExp\n ? new RegExp(object.source, object.flags)\n : object.constructor\n ? new object.constructor()\n : Object.create(null)\n hash.set(object, result)\n if (object instanceof Map) {\n Array.from(object, ([key, val]) =>\n result.set(key, createClone(val, hash))\n )\n }\n if (object instanceof Set) {\n Array.from(object, val => result.add(createClone(val, hash)))\n }\n return Object.assign(\n result,\n ...Object.keys(object).map(key => ({\n [key]: createClone(object[key], hash)\n }))\n )\n }\n // Return cloned copy of merged objects:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n return objects.reduce((a, b) => Array.prototype.concat(a, createClone(b)))\n } else if (typeof objects[FIRST_ARGUMENT] === 'object') {\n return objects.reduce((a, b) => Object.assign(a, createClone(b)))\n }\n}\n\nexport const cloneObject = object => mergeObjects(object)\nexport const clone = object => mergeObjects(object)\n","import {\n RECYCLED_NODE,\n TEXT_NODE,\n XLINK_NS,\n SVG_NS,\n LIFECYCLE\n} from './constants'\nimport { mergeObjects } from '@composi/merge-objects'\n\n/**\n * Event proxy for inline events.\n * @param {Event} event\n * @return {any} any\n */\nfunction eventProxy(event) {\n return event.currentTarget['events'][event.type](event)\n}\n\n/**\n * Get the key value of a virtual node.\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} vnode\n * @return {string | number | null}\n */\nfunction getKey(vnode) {\n return vnode == null ? null : vnode.key\n}\n\n/**\n * Create a map of keyed nodes.\n * @typedef {import('./vnode').Children} Children\n * @param {Children} children\n * @param {number} startCount\n * @param {number} end\n * @return {Object.<string, any>} Object.<string, any>\n */\nfunction createKeyMap(children, startCount, end) {\n const out = {}\n let key\n let vnode\n\n while (startCount <= end) {\n if ((key = (vnode = children[startCount]).key) != null) {\n out[key] = vnode\n }\n startCount++\n }\n\n return out\n}\n\n/**\n * Update the properties and attributes of a VNode based on new data.\n * @param {Element} element\n * @param {string} prop\n * @param {any} oldValue\n * @param {any} newValue\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction setProp(element, prop, oldValue, newValue, isSVG) {\n if (prop === 'key') {\n return\n } else if (prop === 'style' && typeof newValue === 'object') {\n for (let i in mergeObjects(oldValue, newValue)) {\n const style = newValue == null || newValue[i] == null ? '' : newValue[i]\n if (i[0] === '-') {\n element[prop].setProperty(i, style)\n } else {\n element[prop][i] = style\n }\n }\n } else {\n if (prop[0] === 'o' && prop[1] === 'n') {\n prop = prop.slice(2).toLowerCase()\n\n if (!element['events']) element['events'] = {}\n\n element['events'][prop] = newValue\n\n if (newValue == null) {\n element.removeEventListener(prop, eventProxy)\n } else if (oldValue == null) {\n element.addEventListener(prop, eventProxy)\n }\n } else {\n let nullOrFalse = newValue == null || newValue === false\n\n if (\n prop !== 'list' &&\n prop !== 'form' &&\n prop !== 'type' &&\n prop !== 'draggable' &&\n prop !== 'spellcheck' &&\n prop in element &&\n !isSVG\n ) {\n element[prop] = newValue == null ? '' : newValue\n } else if (nullOrFalse) {\n element.removeAttribute(prop)\n } else {\n if (prop === 'xlink-href' || prop === 'xlinkHref') {\n element.setAttributeNS(XLINK_NS, 'href', newValue)\n element.setAttribute('href', newValue)\n } else {\n element.setAttribute(prop, newValue)\n }\n }\n }\n }\n}\n\n/**\n * Create an element, either node or text, from a VNode.\n * @typedef {Function[]} Lifecycle\n * @param {VNode} vnode\n * @param {boolean} [isSVG]\n * @return {Element} Element\n */\nfunction createElement(vnode, isSVG) {\n let element\n if (vnode.flag === TEXT_NODE) {\n element = document.createTextNode(/** @type {string} */ (vnode.type))\n } else {\n if ((isSVG = isSVG || vnode.type === 'svg')) {\n element = document.createElementNS(\n SVG_NS,\n /** @type {string} */ (vnode.type)\n )\n } else {\n element = document.createElement(/** @type {string} */ (vnode.type))\n }\n }\n\n const props = vnode.props\n if (props['onmount']) {\n LIFECYCLE.push(function() {\n props['onmount'](element)\n })\n }\n let idx = 0\n const length = vnode.children.length\n while (idx < length) {\n element.appendChild(createElement(vnode.children[idx], isSVG))\n idx++\n }\n\n for (let prop in props) {\n setProp(/** @type {Element} */ (element), prop, null, props[prop], isSVG)\n }\n\n return (vnode.element = /** @type {Element} */ (element))\n}\n\n/**\n * Remove children from a node.\n * @param {VNode} vnode\n * @return {Element}\n */\nfunction removeChildren(vnode) {\n let idx = 0\n const length = vnode.children.length\n while (idx < length) {\n removeChildren(vnode.children[idx])\n idx++\n }\n\n return vnode.element\n}\n\n/**\n * Remove an element from the DOM.\n * @param {Element} parent\n * @param {VNode} vnode\n * @return {void} undefined\n */\nfunction removeElement(parent, vnode) {\n const done = function() {\n parent.removeChild(removeChildren(vnode))\n }\n\n const cb = vnode.props && vnode.props['onunmount']\n if (cb != null) {\n cb(vnode.element, done)\n } else {\n done()\n }\n}\n\n/**\n * Update an element based on new prop values.\n * @typedef {import('./vnode').Props} Props\n * @param {Element} element\n * @param {Props} oldProps\n * @param {Props} newProps\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction updateElement(element, oldProps, newProps, isSVG) {\n for (let prop in mergeObjects(oldProps, newProps)) {\n if (\n (prop === 'value' || prop === 'checked' || prop === 'selected'\n ? element[prop]\n : oldProps[prop]) !== newProps[prop]\n ) {\n setProp(element, prop, oldProps[prop], newProps[prop], isSVG)\n }\n }\n\n const cb =\n element['vnode'] && element['vnode'].type === RECYCLED_NODE\n ? newProps['onmount']\n : newProps['onupdate']\n if (cb != null) {\n if (newProps['onmount']) {\n LIFECYCLE.push(function() {\n cb(element)\n })\n } else {\n LIFECYCLE.push(function() {\n cb(element, oldProps, newProps)\n })\n }\n }\n}\n\n/**\n * Patch an element based on differences between its old VNode and its new one.\n * @param {Element} parent\n * @param {Element} element\n * @param {VNode} oldVNode\n * @param {VNode} newVNode\n * @param {boolean} [isSVG]\n * @return {VNode}\n */\nfunction patchElement(parent, element, oldVNode, newVNode, isSVG) {\n if (parent['previousVNode'] && newVNode === parent['previousVNode']) {\n } else if (\n oldVNode != null &&\n oldVNode.flag === TEXT_NODE &&\n newVNode.flag === TEXT_NODE\n ) {\n if (oldVNode.type !== newVNode.type) {\n element.nodeValue = /** @type {any} */ (newVNode.type)\n }\n } else if (oldVNode == null || oldVNode.type !== newVNode.type) {\n const newElement = parent.insertBefore(\n createElement(newVNode, isSVG),\n element\n )\n\n if (oldVNode != null) removeElement(parent, oldVNode)\n\n element = newElement\n } else {\n updateElement(\n element,\n oldVNode.props,\n newVNode.props,\n (isSVG = isSVG || newVNode.type === 'svg')\n )\n\n let savedNode\n let childNode\n\n let lastKey\n let oldVNodeChildren = oldVNode.children\n let oldVNodeChildStart = 0\n let oldVNodeChildEnd = oldVNodeChildren.length - 1\n\n let nextKey\n const newVNodeChildren = newVNode.children\n let newVNodeChildStart = 0\n let newVNodeChildEnd = newVNodeChildren.length - 1\n\n while (\n newVNodeChildStart <= newVNodeChildEnd &&\n oldVNodeChildStart <= oldVNodeChildEnd\n ) {\n lastKey = getKey(oldVNodeChildren[oldVNodeChildStart])\n nextKey = getKey(newVNodeChildren[newVNodeChildStart])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n oldVNodeChildren[oldVNodeChildStart].element,\n oldVNodeChildren[oldVNodeChildStart],\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n\n oldVNodeChildStart++\n newVNodeChildStart++\n }\n\n while (\n newVNodeChildStart <= newVNodeChildEnd &&\n oldVNodeChildStart <= oldVNodeChildEnd\n ) {\n lastKey = getKey(oldVNodeChildren[oldVNodeChildEnd])\n nextKey = getKey(newVNodeChildren[newVNodeChildEnd])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n oldVNodeChildren[oldVNodeChildEnd].element,\n oldVNodeChildren[oldVNodeChildEnd],\n newVNodeChildren[newVNodeChildEnd],\n isSVG\n )\n\n oldVNodeChildEnd--\n newVNodeChildEnd--\n }\n\n if (oldVNodeChildStart > oldVNodeChildEnd) {\n while (newVNodeChildStart <= newVNodeChildEnd) {\n element.insertBefore(\n createElement(newVNodeChildren[newVNodeChildStart++], isSVG),\n (childNode = oldVNodeChildren[oldVNodeChildStart]) &&\n childNode.element\n )\n }\n } else if (newVNodeChildStart > newVNodeChildEnd) {\n while (oldVNodeChildStart <= oldVNodeChildEnd) {\n removeElement(element, oldVNodeChildren[oldVNodeChildStart++])\n }\n } else {\n const lastKeyed = createKeyMap(\n oldVNodeChildren,\n oldVNodeChildStart,\n oldVNodeChildEnd\n )\n const nextKeyed = {}\n\n while (newVNodeChildStart <= newVNodeChildEnd) {\n lastKey = getKey((childNode = oldVNodeChildren[oldVNodeChildStart]))\n nextKey = getKey(newVNodeChildren[newVNodeChildStart])\n\n if (\n nextKeyed[lastKey] ||\n (nextKey != null &&\n nextKey === getKey(oldVNodeChildren[oldVNodeChildStart + 1]))\n ) {\n if (lastKey == null) {\n removeElement(element, childNode)\n }\n oldVNodeChildStart++\n continue\n }\n\n if (nextKey == null || oldVNode.flag === RECYCLED_NODE) {\n if (lastKey == null) {\n patchElement(\n element,\n childNode && childNode.element,\n childNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n newVNodeChildStart++\n }\n oldVNodeChildStart++\n } else {\n if (lastKey === nextKey) {\n patchElement(\n element,\n childNode.element,\n childNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n nextKeyed[nextKey] = true\n oldVNodeChildStart++\n } else {\n if ((savedNode = lastKeyed[nextKey]) != null) {\n patchElement(\n element,\n element.insertBefore(\n savedNode.element,\n childNode && childNode.element\n ),\n savedNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n nextKeyed[nextKey] = true\n } else {\n patchElement(\n element,\n childNode && childNode.element,\n null,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n }\n }\n newVNodeChildStart++\n }\n }\n\n while (oldVNodeChildStart <= oldVNodeChildEnd) {\n if (\n getKey((childNode = oldVNodeChildren[oldVNodeChildStart++])) == null\n ) {\n removeElement(element, childNode)\n }\n }\n\n for (let key in lastKeyed) {\n if (nextKeyed[key] == null) {\n removeElement(element, lastKeyed[key])\n }\n }\n }\n }\n\n if (element) {\n newVNode.element = element\n }\n return newVNode\n}\n\n/**\n * Class to throw error message when attempting to insert Fragement tag directly into DOM.\n * @return {string} message\n */\nexport class FragmentError {\n constructor() {\n this.message = 'Cannot insert Fragment tag directly into DOM.'\n this.toString = function() {\n return this.message\n }\n }\n}\n\n/**\n * Function to either mount an element the first time or patch it in place. This behavior depends on the value of the old VNode. If it is null, a new element will be created, otherwise it compares the new VNode with the old one and patches it.\n * @param {Element | string} container\n * @param {VNode} newVNode\n * @param {VNode} [oldVNode]\n * @return {VNode} VNode\n */\nexport function patch(oldVNode, newVNode, container) {\n if (typeof container === 'string') {\n container = document.querySelector(container)\n }\n\n if (Array.isArray(newVNode)) throw new FragmentError()\n patchElement(container, oldVNode && oldVNode.element, oldVNode, newVNode)\n\n if (newVNode !== oldVNode) {\n while (LIFECYCLE.length > 0) LIFECYCLE.pop()()\n }\n\n return newVNode\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * Create a union of string tags.\n * @param {string[]} types\n */\nfunction createUnion(types) {\n const variants = Object.create(null)\n let checkTag = x => x && x.type\n\n const matcher = (handlers, catchAll) => {\n return (tag, context) => {\n const tagType = checkTag(tag)\n const match = hasOwnProperty.call(handlers, tagType) && handlers[tagType]\n return match ? match(tag.data, context) : catchAll(context)\n }\n }\n\n function match(tag, handlers, catchAll) {\n return matcher(handlers, catchAll)(tag)\n }\n\n let idx = 0\n while (idx < types.length) {\n const type = types[idx]\n variants[type] = data => ({ type, data })\n idx++\n }\n\n return { variants, match }\n}\n\n/**\n * Create a union of types for matching up with functions.\n * @param {...string} types\n */\nexport function union(...types) {\n const { variants, match } = createUnion(types)\n variants.match = match\n return variants\n}\n","/**\n * Used to determine if a vnode should be recycled.\n * @type {number}\n */\nexport const RECYCLED_NODE = 0\n\n/**\n * Used in a vnode to indicate that it is a DOM node.\n * @type {number}\n */\nexport const ELEMENT_NODE = 1\n\n/**\n * Used in a vnode to indicate that it is a text node.\n * @type {number}\n */\nexport const TEXT_NODE = 3\n\n/**\n * Namespace for SVG elements with `xlink:href` attributes.\n * @type {string}\n */\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink'\n\n/**\n * Namespace for SVG elements.\n * @type {string}\n */\nexport const SVG_NS = 'http://www.w3.org/2000/svg'\n\n/**\n * An empty object. Used as placeholder for `props` in VNode.\n * @type {{}} EMPTY_OBJECT\n */\nexport const EMPTY_OBJECT = {}\n\n/**\n * An empty array. Used for access to array methods.\n * @type {any[]} EMPTY_ARRAY\n */\nexport const EMPTY_ARRAY = []\n\n/**\n * An array to store lifecycle hooks.\n * @type {any[]} LIFECYCLE\n */\nexport const LIFECYCLE = []\n","import { createVNode, createTextVNode } from './vnode'\nimport { ELEMENT_NODE } from './constants'\n\n/**\n * Creates a virtual node representing a node or text node to be created.\n * @typedef {import('./vnode').VNode} VNode\n * @param {string | Function} type\n * @param {Object.<string, any>} [props]\n * @return {VNode}\n */\nexport function h(type, props, ...children) {\n props = props || {}\n let node\n const tempBox = []\n const childNodes = []\n let length = children.length\n const key = props.key\n\n while (length-- > 0) tempBox.push(children[length])\n\n if (props.children) {\n if (tempBox.length <= 0) {\n tempBox.push(props.children)\n }\n delete props.children\n }\n\n while (tempBox.length > 0) {\n if (Array.isArray((node = tempBox.pop()))) {\n let length = node.length\n while (length-- > 0) {\n tempBox.push(node[length])\n }\n } else if (node === false || node === true || node == null) {\n } else {\n childNodes.push(typeof node === 'object' ? node : createTextVNode(node))\n }\n }\n\n if (typeof type === 'function') {\n return type(props, (props.children = childNodes))\n } else {\n return createVNode(type, props, childNodes, null, key, ELEMENT_NODE)\n }\n}\n","import { patch } from './vdom'\nimport { hydrate } from './vnode'\nimport { clone } from '@composi/merge-objects'\n\n/**\n * Render a functional component. The first argument is the component to render. This can be either a JSX tag or an `h` function. The second argument is the container to render in. An optional third argument is an element in the document loaded from the server. This will be hydrated with the component provided to render. This third argument can be a DOM referece for that element, or a valid string selector for it.\n * @example\n *\n * ```\n * // Render Title tag into section:\n * render(<Title message='Hello World!'/>, 'section')\n * // Update the title component 5 seconds later:\n * setTimeout(() => {\n * render(<Title message='Hello Everyone!'/>, 'section')\n * }, 5000)\n * ```\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} VNode\n * @param {Element | string} container\n * @param {Element | string} [hydrateThis]\n * @return {void} undefined\n */\nexport function render(VNode, container, hydrateThis) {\n if (typeof container === 'string') {\n container = document.querySelector(container)\n } else {\n container = container\n }\n if (!container) {\n console.error(\n '@composi/core Error: You need to provide a valid container to render the component in. Check the element or selector you provided and make sure that it exists in the DOM before trying to render.'\n )\n console.error(\n `@composi/core Message: The container you provided was \"${container}\"`\n )\n return\n }\n let oldVNode\n let previousVNode = clone(VNode)\n if (hydrateThis) {\n if (typeof hydrateThis === 'string') {\n hydrateThis = document.querySelector(hydrateThis)\n }\n // If user tries to hydrate already rendered component,\n // use its 'vnode' property,\n // otherwise hydrate it.\n oldVNode = (container && container['vnode']) || hydrate(hydrateThis)\n } else {\n oldVNode = container && container['vnode']\n }\n const vnode = patch(oldVNode, VNode, container)\n container['vnode'] = vnode\n container['previousVNode'] = previousVNode\n}\n","/**\n * The @composi/runtime.\n * @example\n *\n * ```\n * // Create a runtime program\n * const program = {\n * // Define state:\n * init() {\n * return [{count: 0}]\n * },\n * // Define view to render.\n * // Notice event to send message 'incr'.\n * view(state, send) {\n * return render(<div onclick={send('incr')}>The count is: {state.count}</div>, document.body)\n * },\n * // Define action to update state:\n * update(state, msg) {\n * if (msg === 'incr') {\n * return [state.count++]\n * }\n * }\n * }\n * // Run the program:\n * run(program)\n * ```\n * @typedef {any} State - type any.\n * @typedef {Function} Effect - A function to execute.\n * @typedef {Object<string, any>} Program A program to run.\n * @prop {Function} Program.init\n * @prop {Function} Program.update\n * @prop {Function} Program.view\n * @prop {Function} [Program.subscriptions]\n * @prop {Function} [Program.subs] Shortcut for subscriptions.\n * @prop {Function} [Program.done]\n * @param {Program} program A program to run with four methods: `init`, `view`, `update` and `subscriptions`.\n * @return {() => void} Function to terminate runtime.\n */\nexport function run(program) {\n const update = program.update\n const view = program.view\n const subscriptions = program.subscriptions || program.subs\n const done = program.done\n let state, effect\n let isRunning = true\n let isFirstRun = false\n const getState = () => state\n\n /**\n * Send a message.\n * @param {any} message A message of any type.\n * @return {void} undefined\n */\n function send(message) {\n if (isRunning) {\n updateView(update(state, message, send))\n }\n }\n\n /**\n * Expose send as static function on program object.\n * This is to let you send messages to the program\n * from other contexts, such as in a @composi/router action.\n */\n program['send'] = send\n\n /**\n * Handle changes to state and executing effects.\n * @param {any[]} update\n * @return {void} undefined\n */\n function updateView(update) {\n let sub\n let init = program.init()\n if (update) {\n ;[state, effect] = update\n } else if (init && init.length) {\n ;[state, effect] = init\n if (subscriptions && !isFirstRun) {\n sub = subscriptions(getState, send)\n if (typeof sub === 'function') sub(getState, send)\n isFirstRun = true\n }\n } else {\n state = []\n }\n if (effect) {\n effect(state, send)\n }\n view(state, send)\n }\n\n updateView(state)\n\n /**\n * Function to end runtime.\n * @return {void} undefined\n */\n return () => {\n if (isRunning) {\n isRunning = false\n if (done) {\n done(state)\n }\n }\n }\n}\n","/**\n * Function to batch effects together.\n * @param {...Function} effects\n * @return {Function} Function\n */\nexport const batchEffects = (...effects) => (state, send) =>\n effects.map(effect => effect && effect(state, send))\n","/**\n * Returns a group of sibling elements for inclusion in another JSX tag.\n * @typedef {import('./vnode').Props} Props\n * @typedef {import('./vnode').Children} Children\n * @param {Props} props\n * @return {Children} children\n */\n/**\n * A tag to enable returning sibling elements. This is useful for returning list items to render in a list or table cells to render in a table row.\n * @example\n *\n * ```\n * <Fragment>\n * <li>A</li>\n * <li>B</li>\n * <li>C</li>\n * </Fragment>\n ```\n * Or functionally:\n * ```\n * Fragment(null, [\n * h('li', {}, 'A'),\n * h('li', {}, 'B'),\n * h('li', {}, 'C')\n * ])\n ```\n * @param {Object} [props] When using Fragment as a function, props is the first argument. Provide either null or {} as the value for props.\n * @param {Children} [children] The siblings to return with the Fragment. This will be an array of sibling elements.\n * @return {VNode[]} An array of virtual nodes.\n */\nexport const Fragment = (props, children) =>\n Array.isArray(props) && !children ? props : children\n"],"names":["createVNode","type","props","children","element","key","flag","createTextVNode","text","EMPTY_OBJECT","EMPTY_ARRAY","removeWhiteSpaceNodes","node","child","n","childNodes","length","nodeType","test","nodeValue","removeChild","hydrate","document","querySelector","nodeName","toLowerCase","map","call","mergeObjects","objects","createClone","object","hash","WeakMap","Object","has","get","result","Date","RegExp","source","flags","constructor","create","set","assign","keys","Array","isArray","unshift","reduce","a","b","prototype","concat","eventProxy","event","currentTarget","getKey","vnode","createKeyMap","startCount","end","out","setProp","prop","oldValue","newValue","isSVG","i","style","setProperty","slice","removeEventListener","addEventListener","removeAttribute","setAttributeNS","setAttribute","createElement","createTextNode","createElementNS","LIFECYCLE","push","idx","appendChild","removeChildren","removeElement","parent","done","cb","updateElement","oldProps","newProps","patchElement","oldVNode","newVNode","newElement","insertBefore","savedNode","childNode","lastKey","nextKey","oldVNodeChildren","oldVNodeChildStart","oldVNodeChildEnd","newVNodeChildren","newVNodeChildStart","newVNodeChildEnd","lastKeyed","nextKeyed","patch","container","FragmentError","pop","createUnion","types","variants","checkTag","x","matcher","handlers","catchAll","tag","context","tagType","match","hasOwnProperty","data","clone","message","toString","tempBox","VNode","hydrateThis","console","error","previousVNode","program","send","isRunning","updateView","update","state","sub","init","effect","subscriptions","isFirstRun","getState","view","subs","effects"],"mappings":"2LAmCO,QAASA,CAAAA,CAAT,CAAqBC,CAArB,CAA2BC,CAA3B,CAAkCC,CAAlC,CAA4CC,CAA5C,CAAqDC,CAArD,CAA0DC,CAA1D,CAAgE,OAChED,CAAAA,IAAKA,CAAG,CAAG,MACT,CACLJ,IADK,CACLA,CADK,CAELC,KAFK,CAELA,CAFK,CAGLC,QAHK,CAGLA,CAHK,CAILC,OAJK,CAILA,CAJK,CAKLC,GALK,CAKLA,CALK,CAMLC,KAAAA,CANK,EAgBF,QAASC,CAAAA,CAAT,CAAyBC,CAAzB,CAA+BJ,CAA/B,CAAwC,OACxCA,CAAAA,IAASA,CAAO,CAAG,MACjBJ,CAAW,CAACQ,CAAD,CAAOC,CAAP,CAAqBC,CAArB,CAAkCN,CAAlC,CAA2C,IAA3C,IAUpB,QAASO,CAAAA,CAAT,CAA+BC,CAA/B,CAAqC,KAC9B,GACGC,CAAAA,CADH,CAAIC,CAAC,CAAG,EAAGA,CAAC,CAAGF,CAAI,CAACG,UAALH,CAAgBI,OAAQF,CAAC,GACrCD,EAAQD,CAAI,CAACG,UAALH,CAAgBE,CAAhBF,EAEO,CAAnBC,GAAAA,CAAK,CAACI,QAANJ,GACoB,CAAnBA,GAAAA,CAAK,CAACI,QAANJ,EAAyB,KAAKK,IAAL,CAAUL,CAAK,CAACM,SAAhB,CAD1BN,EAK4B,CAAnBA,GAAAA,CAAK,CAACI,UACfN,CAAqB,CAACE,CAAD,GAHrBD,CAAI,CAACQ,WAALR,CAAiBC,CAAjBD,EACAE,CAAC,IAYA,QAASO,CAAAA,CAAT,CAAiBjB,CAAjB,CAA0B,OACR,QAAnB,QAAOA,CAAAA,IACTA,CAAO,CAAGkB,QAAQ,CAACC,aAATD,CAAuBlB,CAAvBkB,GAGZX,CAAqB,CAACP,CAAD,EAEdA,IAAAA,CAAO,CAACa,QAARb,CACHG,CAAe,CAACH,CAAO,CAACe,SAAT,CAAoBf,CAApB,CADZA,CAEHJ,CAAW,CACTI,CAAO,CAACoB,QAARpB,CAAiBqB,WAAjBrB,EADS,CAETK,CAFS,CAGTC,CAAW,CAACgB,GAAZhB,CAAgBiB,IAAhBjB,CAAqBN,CAAO,CAACW,UAA7BL,CAAyCW,CAAzCX,CAHS,CAITN,CAJS,CAKT,IALS,ICrFV,QAASwB,CAAAA,CAAT,CAAsB,GAAGC,CAAzB,CAAkC,CAevC,QAASC,CAAAA,CAAT,CAAqBC,CAArB,CAA6BC,CAAI,CAAG,GAAIC,CAAAA,OAAxC,CAAmD,CAEjD,GAAIC,MAAM,CAACH,CAAD,CAAN,GAAmBA,CAAvB,CAA+B,MAAOA,CAAAA,CAAP,CAE/B,GAAIC,CAAI,CAACG,GAAL,CAASJ,CAAT,CAAJ,CAAsB,MAAOC,CAAAA,CAAI,CAACI,GAAL,CAASL,CAAT,CAAP,CACtB,KAAMM,CAAAA,CAAM,CACVN,CAAM,WAAYO,CAAAA,IAAlB,CACI,GAAIA,CAAAA,IAAJ,CAASP,CAAT,CADJ,CAEIA,CAAM,WAAYQ,CAAAA,MAAlB,CACA,GAAIA,CAAAA,MAAJ,CAAWR,CAAM,CAACS,MAAlB,CAA0BT,CAAM,CAACU,KAAjC,CADA,CAEAV,CAAM,CAACW,WAAP,CACA,GAAIX,CAAAA,CAAM,CAACW,WADX,CAEAR,MAAM,CAACS,MAAP,CAAc,IAAd,CAPN,CAiBA,MATAX,CAAAA,CAAI,CAACY,GAAL,CAASb,CAAT,CAAiBM,CAAjB,CASA,CAAOH,MAAM,CAACW,MAAP,CACLR,CADK,CAEL,GAAGH,MAAM,CAACY,IAAP,CAAYf,CAAZ,EAAoBL,GAApB,CAAwBrB,CAAG,GAAK,CACjC,CAACA,CAAD,EAAOyB,CAAW,CAACC,CAAM,CAAC1B,CAAD,CAAP,CAAc2B,CAAd,CADe,CAAL,CAA3B,CAFE,CAMR,CA3CsC,OAGnCe,KAAK,CAACC,OAAN,CAAcnB,CAAO,GAArB,CAHmC,CAIrCA,CAAO,CAACoB,OAAR,CAAgB,EAAhB,CAJqC,CAMrCpB,CAAO,CAACoB,OAAR,CAAgB,EAAhB,CANqC,CA6CnCF,KAAK,CAACC,OAAN,CAAcnB,CAAO,GAArB,CA7CmC,EA8C9BA,CAAO,CAACqB,MAAR,CAAe,CAACC,CAAD,CAAIC,CAAJ,GAAUL,KAAK,CAACM,SAAN,CAAgBC,MAAhB,CAAuBH,CAAvB,CAA0BrB,CAAW,CAACsB,CAAD,CAArC,CAAzB,CA9C8B,CA+CO,QAAnC,QAAOvB,CAAAA,CAAO,GA/Cc,CAgD9BA,CAAO,CAACqB,MAAR,CAAe,CAACC,CAAD,CAAIC,CAAJ,GAAUlB,MAAM,CAACW,MAAP,CAAcM,CAAd,CAAiBrB,CAAW,CAACsB,CAAD,CAA5B,CAAzB,CAhD8B,OAkDxC,CC7CD,QAASG,CAAAA,CAAT,CAAoBC,CAApB,CAA2B,OAClBA,CAAAA,CAAK,CAACC,aAAND,QAA8BA,CAAK,CAACvD,IAApCuD,EAA0CA,CAA1CA,EAST,QAASE,CAAAA,CAAT,CAAgBC,CAAhB,CAAuB,OACL,KAATA,EAAAA,CAAK,CAAW,IAAX,CAAkBA,CAAK,CAACtD,IAWtC,QAASuD,CAAAA,CAAT,CAAsBzD,CAAtB,CAAgC0D,CAAhC,CAA4CC,CAA5C,CAAiD,QAE3CzD,CAAAA,CAF2C,CAG3CsD,CAH2C,CACzCI,CAAG,CAAG,EADmC,CAKxCF,CAAU,EAAIC,CAL0B,EAMK,IAA9C,GAACzD,CAAG,CAAG,CAACsD,CAAK,CAAGxD,CAAQ,CAAC0D,CAAD,CAAjB,EAA+BxD,GAAtC,CANyC,GAO3C0D,CAAG,CAAC1D,CAAD,CAAH0D,CAAWJ,CAPgC,EAS7CE,CAAU,EATmC,OAYxCE,CAAAA,EAYT,QAASC,CAAAA,CAAT,CAAiB5D,CAAjB,CAA0B6D,CAA1B,CAAgCC,CAAhC,CAA0CC,CAA1C,CAAoDC,CAApD,CAA2D,IAC5C,KAATH,GAAAA,EAEG,GAAa,OAATA,GAAAA,CAAI,EAAoC,QAApB,QAAOE,CAAAA,CAA/B,KACA,GAAIE,CAAAA,IAAKzC,CAAAA,CAAY,CAACsC,CAAD,CAAWC,CAAX,EAAsB,IACxCG,CAAAA,CAAK,CAAe,IAAZH,EAAAA,CAAQ,EAA2B,IAAfA,EAAAA,CAAQ,CAACE,CAAD,CAA5BF,CAA0C,EAA1CA,CAA+CA,CAAQ,CAACE,CAAD,EACxD,GAATA,GAAAA,CAAC,CAAC,CAAD,CAFyC,CAG5CjE,CAAO,CAAC6D,CAAD,CAAP7D,CAAcmE,WAAdnE,CAA0BiE,CAA1BjE,CAA6BkE,CAA7BlE,CAH4C,CAK5CA,CAAO,CAAC6D,CAAD,CAAP7D,CAAciE,CAAdjE,EAAmBkE,EANlB,QAUW,GAAZL,GAAAA,CAAI,CAAC,CAAD,CAAJA,EAA+B,GAAZA,GAAAA,CAAI,CAAC,CAAD,EACzBA,CAAI,CAAGA,CAAI,CAACO,KAALP,CAAW,CAAXA,EAAcxC,WAAdwC,GAEF7D,CAAO,UAAYA,CAAO,OAAPA,CAAoB,IAE5CA,CAAO,OAAPA,CAAkB6D,CAAlB7D,EAA0B+D,EAEV,IAAZA,EAAAA,EACF/D,CAAO,CAACqE,mBAARrE,CAA4B6D,CAA5B7D,CAAkCmD,CAAlCnD,EACqB,IAAZ8D,EAAAA,GACT9D,CAAO,CAACsE,gBAARtE,CAAyB6D,CAAzB7D,CAA+BmD,CAA/BnD,MAEG,CAIM,MAAT6D,GAAAA,CAAI,EACK,MAATA,GAAAA,CADAA,EAES,MAATA,GAAAA,CAFAA,EAGS,WAATA,GAAAA,CAHAA,EAIS,YAATA,GAAAA,CAJAA,EAKAA,CAAI,GAAI7D,CAAAA,CALR6D,EAMA,CAACG,CAVE,CAYHhE,CAAO,CAAC6D,CAAD,CAAP7D,CAA4B,IAAZ+D,EAAAA,CAAQ,CAAW,EAAX,CAAgBA,CAZrC,CACyB,IAAZA,EAAAA,CAAQ,EAAYA,KAAAA,CADjC,CAcH/D,CAAO,CAACuE,eAARvE,CAAwB6D,CAAxB7D,CAdG,CAgBU,YAAT6D,GAAAA,CAAI,EAA8B,WAATA,GAAAA,CAhB1B,EAiBD7D,CAAO,CAACwE,cAARxE,gCAAiC,MAAjCA,CAAyC+D,CAAzC/D,CAjBC,CAkBDA,CAAO,CAACyE,YAARzE,CAAqB,MAArBA,CAA6B+D,CAA7B/D,CAlBC,EAoBDA,CAAO,CAACyE,YAARzE,CAAqB6D,CAArB7D,CAA2B+D,CAA3B/D,GAcV,QAAS0E,CAAAA,CAAT,CAAuBnB,CAAvB,CAA8BS,CAA9B,CAAqC,IAC/BhE,CAAAA,CAAJ,CACIuD,IAAAA,CAAK,CAACrD,IADV,CAEYgB,QAAQ,CAACyD,cAATzD,CAA+CqC,CAAK,CAAC1D,IAArDqB,CAFZ,EAIO8C,CAAK,CAAGA,CAAK,EAAmB,KAAfT,GAAAA,CAAK,CAAC1D,IAJ9B,EAKcqB,QAAQ,CAAC0D,eAAT1D,8BAEeqC,CAAK,CAAC1D,IAFrBqB,CALd,CAUcA,QAAQ,CAACwD,aAATxD,CAA8CqC,CAAK,CAAC1D,IAApDqB,KAIRpB,CAAAA,CAAK,CAAGyD,CAAK,CAACzD,MAChBA,CAAK,QAhB0B,EAiBjC+E,CAAS,CAACC,IAAVD,CAAe,UAAW,CACxB/E,CAAK,QAALA,CAAiBE,CAAjBF,CADF,CAAA+E,CAjBiC,QAqB/BE,CAAAA,CAAG,CAAG,CArByB,CAsB7BnE,CAAM,CAAG2C,CAAK,CAACxD,QAANwD,CAAe3C,MAtBK,CAuB5BmE,CAAG,CAAGnE,CAvBsB,EAwBjCZ,CAAO,CAACgF,WAARhF,CAAoB0E,CAAa,CAACnB,CAAK,CAACxD,QAANwD,CAAewB,CAAfxB,CAAD,CAAsBS,CAAtB,CAAjChE,CAxBiC,CAyBjC+E,CAAG,EAzB8B,KA4B9B,GAAIlB,CAAAA,IAAQ/D,CAAAA,EACf8D,CAAO,CAAyB5D,CAAzB,CAAmC6D,CAAnC,CAAyC,IAAzC,CAA+C/D,CAAK,CAAC+D,CAAD,CAApD,CAA4DG,CAA5D,CAAPJ,OAGML,CAAAA,CAAK,CAACvD,OAANuD,CAAwCvD,EAQlD,QAASiF,CAAAA,CAAT,CAAwB1B,CAAxB,CAA+B,QACzBwB,CAAAA,CAAG,CAAG,CADmB,CAEvBnE,CAAM,CAAG2C,CAAK,CAACxD,QAANwD,CAAe3C,MAFD,CAGtBmE,CAAG,CAAGnE,CAHgB,EAI3BqE,CAAc,CAAC1B,CAAK,CAACxD,QAANwD,CAAewB,CAAfxB,CAAD,CAJa,CAK3BwB,CAAG,EALwB,OAQtBxB,CAAAA,CAAK,CAACvD,QASf,QAASkF,CAAAA,CAAT,CAAuBC,CAAvB,CAA+B5B,CAA/B,CAAsC,IAC9B6B,CAAAA,CAAI,CAAG,UAAW,CACtBD,CAAM,CAACnE,WAAPmE,CAAmBF,CAAc,CAAC1B,CAAD,CAAjC4B,CADF,CADoC,CAK9BE,CAAE,CAAG9B,CAAK,CAACzD,KAANyD,EAAeA,CAAK,CAACzD,KAANyD,UALU,CAM1B,IAAN8B,EAAAA,CANgC,CASlCD,CAAI,EAT8B,CAOlCC,CAAE,CAAC9B,CAAK,CAACvD,OAAP,CAAgBoF,CAAhB,EAeN,QAASE,CAAAA,CAAT,CAAuBtF,CAAvB,CAAgCuF,CAAhC,CAA0CC,CAA1C,CAAoDxB,CAApD,CAA2D,KACpD,GAAIH,CAAAA,IAAQrC,CAAAA,CAAY,CAAC+D,CAAD,CAAWC,CAAX,EAEzB,CAAU,OAAT3B,EAAAA,CAAI,EAAyB,SAATA,EAAAA,CAApBA,EAAmD,UAATA,EAAAA,CAA1CA,CACG7D,CAAO,CAAC6D,CAAD,CADVA,CAEG0B,CAAQ,CAAC1B,CAAD,CAFZ,IAEwB2B,CAAQ,CAAC3B,CAAD,GAEhCD,CAAO,CAAC5D,CAAD,CAAU6D,CAAV,CAAgB0B,CAAQ,CAAC1B,CAAD,CAAxB,CAAgC2B,CAAQ,CAAC3B,CAAD,CAAxC,CAAgDG,CAAhD,KAILqB,CAAAA,CAAE,CACNrF,CAAO,MAAPA,EAAoBA,CAAO,MAAPA,CAAiBH,IAAjBG,IAApBA,CACIwF,CAAQ,QADZxF,CAEIwF,CAAQ,UACJ,IAANH,EAAAA,CAfqD,GAgBnDG,CAAQ,QAhB2C,CAiBrDX,CAAS,CAACC,IAAVD,CAAe,UAAW,CACxBQ,CAAE,CAACrF,CAAD,CADJ,CAAA6E,CAjBqD,CAqBrDA,CAAS,CAACC,IAAVD,CAAe,UAAW,CACxBQ,CAAE,CAACrF,CAAD,CAAUuF,CAAV,CAAoBC,CAApB,CADJ,CAAAX,CArBqD,EAqC3D,QAASY,CAAAA,CAAT,CAAsBN,CAAtB,CAA8BnF,CAA9B,CAAuC0F,CAAvC,CAAiDC,CAAjD,CAA2D3B,CAA3D,CAAkE,IAC5DmB,CAAM,cAANA,EAA2BQ,CAAQ,GAAKR,CAAM,eAAmB,KAC9D,IACO,IAAZO,EAAAA,CAAQ,EACRA,IAAAA,CAAQ,CAACxF,IADTwF,EAEAC,IAAAA,CAAQ,CAACzF,IAHJ,CAKDwF,CAAQ,CAAC7F,IAAT6F,GAAkBC,CAAQ,CAAC9F,IAL1B,GAMHG,CAAO,CAACe,SAARf,CAAwC2F,CAAQ,CAAC9F,IAN9C,MAQA,IAAgB,IAAZ6F,EAAAA,CAAQ,EAAYA,CAAQ,CAAC7F,IAAT6F,GAAkBC,CAAQ,CAAC9F,IAAnD,CAAyD,IACxD+F,CAAAA,CAAU,CAAGT,CAAM,CAACU,YAAPV,CACjBT,CAAa,CAACiB,CAAD,CAAW3B,CAAX,CADImB,CAEjBnF,CAFiBmF,EAKH,IAAZO,EAAAA,CAN0D,EAMxCR,CAAa,CAACC,CAAD,CAASO,CAAT,CAN2B,CAQ9D1F,CAAO,CAAG4F,CARL,CAAA,IASA,CACLN,CAAa,CACXtF,CADW,CAEX0F,CAAQ,CAAC5F,KAFE,CAGX6F,CAAQ,CAAC7F,KAHE,CAIVkE,CAAK,CAAGA,CAAK,EAAsB,KAAlB2B,GAAAA,CAAQ,CAAC9F,IAJhB,CADR,QAQDiG,CAAAA,CARC,CASDC,CATC,CAWDC,CAXC,CAgBDC,CAhBC,CAYDC,CAAgB,CAAGR,CAAQ,CAAC3F,QAZ3B,CAaDoG,CAAkB,CAAG,CAbpB,CAcDC,CAAgB,CAAGF,CAAgB,CAACtF,MAAjBsF,CAA0B,CAd5C,CAiBCG,CAAgB,CAAGV,CAAQ,CAAC5F,QAjB7B,CAkBDuG,CAAkB,CAAG,CAlBpB,CAmBDC,CAAgB,CAAGF,CAAgB,CAACzF,MAAjByF,CAA0B,CAnB5C,CAsBHC,CAAkB,EAAIC,CAAtBD,EACAH,CAAkB,EAAIC,CAvBnB,GAyBHJ,CAAO,CAAG1C,CAAM,CAAC4C,CAAgB,CAACC,CAAD,CAAjB,CAzBb,CA0BHF,CAAO,CAAG3C,CAAM,CAAC+C,CAAgB,CAACC,CAAD,CAAjB,CA1Bb,CA4BY,IAAXN,EAAAA,CAAO,EAAYA,CAAO,GAAKC,CA5BhC,GA8BHR,CAAY,CACVzF,CADU,CAEVkG,CAAgB,CAACC,CAAD,CAAhBD,CAAqClG,OAF3B,CAGVkG,CAAgB,CAACC,CAAD,CAHN,CAIVE,CAAgB,CAACC,CAAD,CAJN,CAKVtC,CALU,CA9BT,CAsCHmC,CAAkB,EAtCf,CAuCHG,CAAkB,EAvCf,MA2CHA,CAAkB,EAAIC,CAAtBD,EACAH,CAAkB,EAAIC,CA5CnB,GA8CHJ,CAAO,CAAG1C,CAAM,CAAC4C,CAAgB,CAACE,CAAD,CAAjB,CA9Cb,CA+CHH,CAAO,CAAG3C,CAAM,CAAC+C,CAAgB,CAACE,CAAD,CAAjB,CA/Cb,CAiDY,IAAXP,EAAAA,CAAO,EAAYA,CAAO,GAAKC,CAjDhC,GAmDHR,CAAY,CACVzF,CADU,CAEVkG,CAAgB,CAACE,CAAD,CAAhBF,CAAmClG,OAFzB,CAGVkG,CAAgB,CAACE,CAAD,CAHN,CAIVC,CAAgB,CAACE,CAAD,CAJN,CAKVvC,CALU,CAnDT,CA2DHoC,CAAgB,EA3Db,CA4DHG,CAAgB,EA5Db,IA+DDJ,CAAkB,CAAGC,OAChBE,CAAkB,EAAIC,GAC3BvG,CAAO,CAAC6F,YAAR7F,CACE0E,CAAa,CAAC2B,CAAgB,CAACC,CAAkB,EAAnB,CAAjB,CAAyCtC,CAAzC,CADfhE,CAEE,CAAC+F,CAAS,CAAGG,CAAgB,CAACC,CAAD,CAA7B,GACEJ,CAAS,CAAC/F,OAHdA,MAMG,IAAIsG,CAAkB,CAAGC,CAAzB,MACEJ,CAAkB,EAAIC,CADxB,EAEHlB,CAAa,CAAClF,CAAD,CAAUkG,CAAgB,CAACC,CAAkB,EAAnB,CAA1B,CAAbjB,CAFG,IAIA,QACCsB,CAAAA,CAAS,CAAGhD,CAAY,CAC5B0C,CAD4B,CAE5BC,CAF4B,CAG5BC,CAH4B,CADzB,CAMCK,CAAS,CAAG,EANb,CAQEH,CAAkB,EAAIC,CARxB,EAQ0C,IAC7CP,CAAO,CAAG1C,CAAM,CAAEyC,CAAS,CAAGG,CAAgB,CAACC,CAAD,CAA9B,EAChBF,CAAO,CAAG3C,CAAM,CAAC+C,CAAgB,CAACC,CAAD,CAAjB,EAGdG,CAAS,CAACT,CAAD,CAATS,EACY,IAAXR,EAAAA,CAAO,EACNA,CAAO,GAAK3C,CAAM,CAAC4C,CAAgB,CAACC,CAAkB,CAAG,CAAtB,CAAjB,EACpB,CACe,IAAXH,EAAAA,CADJ,EAEEd,CAAa,CAAClF,CAAD,CAAU+F,CAAV,CAFf,CAIAI,CAAkB,EAJlB,UAQa,IAAXF,EAAAA,CAAO,EAAYP,IAAAA,CAAQ,CAACxF,IAhBa,EAiB5B,IAAX8F,EAAAA,CAjBuC,GAkBzCP,CAAY,CACVzF,CADU,CAEV+F,CAAS,EAAIA,CAAS,CAAC/F,OAFb,CAGV+F,CAHU,CAIVM,CAAgB,CAACC,CAAD,CAJN,CAKVtC,CALU,CAlB6B,CAyBzCsC,CAAkB,EAzBuB,EA2B3CH,CAAkB,EA3ByB,GA6BvCH,CAAO,GAAKC,CA7B2B,EA8BzCR,CAAY,CACVzF,CADU,CAEV+F,CAAS,CAAC/F,OAFA,CAGV+F,CAHU,CAIVM,CAAgB,CAACC,CAAD,CAJN,CAKVtC,CALU,CA9B6B,CAqCzCyC,CAAS,CAACR,CAAD,CAATQ,GArCyC,CAsCzCN,CAAkB,EAtCuB,EAwCD,IAApC,GAACL,CAAS,CAAGU,CAAS,CAACP,CAAD,CAAtB,CAxCqC,CAqDvCR,CAAY,CACVzF,CADU,CAEV+F,CAAS,EAAIA,CAAS,CAAC/F,OAFb,CAGV,IAHU,CAIVqG,CAAgB,CAACC,CAAD,CAJN,CAKVtC,CALU,CArD2B,EAyCvCyB,CAAY,CACVzF,CADU,CAEVA,CAAO,CAAC6F,YAAR7F,CACE8F,CAAS,CAAC9F,OADZA,CAEE+F,CAAS,EAAIA,CAAS,CAAC/F,OAFzBA,CAFU,CAMV8F,CANU,CAOVO,CAAgB,CAACC,CAAD,CAPN,CAQVtC,CARU,CAzC2B,CAmDvCyC,CAAS,CAACR,CAAD,CAATQ,GAnDuC,EA8D3CH,CAAkB,EA9DyB,EAR1C,KA0EEH,CAAkB,EAAIC,CA1ExB,EA4E+D,IAAhE9C,EAAAA,CAAM,CAAEyC,CAAS,CAAGG,CAAgB,CAACC,CAAkB,EAAnB,CAA9B,CA5EL,EA8EDjB,CAAa,CAAClF,CAAD,CAAU+F,CAAV,CA9EZ,KAkFA,GAAI9F,CAAAA,IAAOuG,CAAAA,EACQ,IAAlBC,EAAAA,CAAS,CAACxG,CAAD,GACXiF,CAAa,CAAClF,CAAD,CAAUwG,CAAS,CAACvG,CAAD,CAAnB,SAMjBD,CAAAA,IACF2F,CAAQ,CAAC3F,OAAT2F,CAAmB3F,GAEd2F,EAuBF,QAASe,CAAAA,CAAT,CAAehB,CAAf,CAAyBC,CAAzB,CAAmCgB,CAAnC,CAA8C,IAC1B,QAArB,QAAOA,CAAAA,IACTA,CAAS,CAAGzF,QAAQ,CAACC,aAATD,CAAuByF,CAAvBzF,GAGVyB,KAAK,CAACC,OAAND,CAAcgD,CAAdhD,EAAyB,KAAM,IAAIiE,CAAAA,CAAV,IAC7BnB,CAAY,CAACkB,CAAD,CAAYjB,CAAQ,EAAIA,CAAQ,CAAC1F,OAAjC,CAA0C0F,CAA1C,CAAoDC,CAApD,EAERA,CAAQ,GAAKD,OACW,CAAnBb,CAAAA,CAAS,CAACjE,QAAYiE,CAAS,CAACgC,GAAVhC,WAGxBc,CAAAA,qaCncT,QAASmB,CAAAA,CAAT,CAAqBC,CAArB,CAA4B,QACpBC,CAAAA,CAAQ,CAAGlF,MAAM,CAACS,MAAPT,CAAc,IAAdA,CADS,CAEtBmF,CAAQ,CAAGC,CAAC,EAAIA,CAAC,EAAIA,CAAC,CAACrH,IAFD,CAIpBsH,CAAO,CAAG,CAACC,CAAD,CAAWC,CAAX,GACP,CAACC,CAAD,CAAMC,CAAN,GAAkB,IACjBC,CAAAA,CAAO,CAAGP,CAAQ,CAACK,CAAD,CADD,CAEjBG,CAAK,CAAGC,CAAc,CAACnG,IAAfmG,CAAoBN,CAApBM,CAA8BF,CAA9BE,GAA0CN,CAAQ,CAACI,CAAD,CAFzC,OAGhBC,CAAAA,CAAK,CAAGA,CAAK,CAACH,CAAG,CAACK,IAAL,CAAWJ,CAAX,CAAR,CAA8BF,CAAQ,CAACE,CAAD,CAHpD,CALwB,CAgBtBxC,CAAG,CAAG,CAhBgB,iBAkBlBlF,CAAAA,CAAI,CAAGkH,CAAK,CAAChC,CAAD,EAClBiC,CAAQ,CAACnH,CAAD,CAARmH,CAAiBW,CAAI,GAAK,CAAE9H,IAAF,CAAEA,CAAF,CAAQ8H,KAAAA,CAAR,CAAL,EACrB5C,CAAG,GApBqB,CAiBnBA,CAAG,CAAGgC,CAAK,CAACnG,MAjBO,YAuBnB,CAAEoG,QAAF,CAAEA,CAAF,CAAYS,eAXJH,EAAKF,EAAUC,EAAU,OAC/BF,CAAAA,CAAO,CAACC,CAAD,CAAWC,CAAX,CAAPF,CAA4BG,CAA5BH,EAUF,KCKI9G,CAAAA,CAAY,CAAG,GAMfC,CAAW,CAAG,GAMduE,CAAS,CAAG,GHgBlB,KAAM+C,CAAAA,CAAK,CAAGjG,CAAM,EAAIH,CAAY,CAACG,CAAD,CAApC,CC+WA,KAAMiF,CAAAA,CAAc,CACzBtE,WAAW,EAAG,MACPuF,QAAU,+CADH,MAEPC,SAAW,UAAW,OAClB,MAAKD,OADd,EAHuB,IC7arBH,CAAAA,CAAc,CAAG5F,MAAM,CAACmB,SAAPnB,CAAiB4F,mBEUjC,SAAW7H,CAAX,CAAiBC,CAAjB,CAAqC,CAC1CA,CAAK,CAAGA,CAAK,EAAI,EADyB,QAEtCU,CAAAA,EACEuH,CAAO,CAAG,GACVpH,CAAU,CAAG,sBAJaZ,CAAU,MAAA,UAAA,cAAVA,CAAU,IAAA,CAAVA,aAAAA,CAAU,OAKtCa,CAAAA,CAAM,CAAGb,CAAQ,CAACa,MALoB,CAMpCX,CAAG,CAAGH,CAAK,CAACG,GANwB,CAQxB,CAAXW,CAAAA,CAAM,EAR6B,EAQrBmH,CAAO,CAACjD,IAARiD,CAAahI,CAAQ,CAACa,CAAD,CAArBmH,EARqB,IAUtCjI,CAAK,CAACC,QAVgC,GAWlB,CAAlBgI,EAAAA,CAAO,CAACnH,MAX4B,EAYtCmH,CAAO,CAACjD,IAARiD,CAAajI,CAAK,CAACC,QAAnBgI,CAZsC,OAcjCjI,CAAAA,CAAK,CAACC,QAd2B,EAiBlB,CAAjBgI,CAAAA,CAAO,CAACnH,MAjB2B,KAkBpC+B,KAAK,CAACC,OAAND,CAAenC,CAAI,CAAGuH,CAAO,CAAClB,GAARkB,EAAtBpF,SACE/B,CAAAA,CAAM,CAAGJ,CAAI,CAACI,OACA,CAAXA,CAAAA,CAAM,IACXmH,CAAO,CAACjD,IAARiD,CAAavH,CAAI,CAACI,CAAD,CAAjBmH,MAEG,IAAIvH,KAAAA,CAAI,EAAcA,KAAAA,CAAlBA,EAA2C,IAARA,EAAAA,CAAvC,CAAqD,CAArD,IAELG,CAAAA,CAAU,CAACmE,IAAXnE,CAAgC,QAAhB,QAAOH,CAAAA,CAAP,CAA2BA,CAA3B,CAAkCL,CAAe,CAACK,CAAD,CAAjEG,CAFK,CAvBiC,MA6BtB,UAAhB,QAAOd,CAAAA,CA7B+B,CA8BjCA,CAAI,CAACC,CAAD,CAASA,CAAK,CAACC,QAAND,CAAiBa,CAA1B,CA9B6B,CAgCjCf,CAAW,CAACC,CAAD,CAAOC,CAAP,CAAca,CAAd,CAA0B,IAA1B,CAAgCV,CAAhC,cCpBf,SAAgB+H,CAAhB,CAAuBrB,CAAvB,CAAkCsB,CAAlC,CAA+C,IAElDtB,EADuB,QAArB,QAAOA,CAAAA,EACGzF,QAAQ,CAACC,aAATD,CAAuByF,CAAvBzF,EAEAyF,EAEV,CAACA,QACHuB,CAAAA,OAAO,CAACC,KAARD,CACE,oMADFA,MAGAA,CAAAA,OAAO,CAACC,KAARD,2DAC4DvB,IAD5DuB,EAVkD,GAehDxC,CAAAA,CAfgD,CAgBhD0C,CAAa,CAAGR,CAAK,CAACI,CAAD,CAhB2B,CAiBhDC,CAjBgD,EAkBvB,QAAvB,QAAOA,CAAAA,CAlBuC,GAmBhDA,CAAW,CAAG/G,QAAQ,CAACC,aAATD,CAAuB+G,CAAvB/G,CAnBkC,EAwBlDwE,CAAQ,CAAIiB,CAAS,EAAIA,CAAS,MAAtBA,EAAoC1F,CAAO,CAACgH,CAAD,CAxBL,EA0BlDvC,CAAQ,CAAGiB,CAAS,EAAIA,CAAS,MA1BiB,IA4B9CpD,CAAAA,CAAK,CAAGmD,CAAK,CAAChB,CAAD,CAAWsC,CAAX,CAAkBrB,CAAlB,EACnBA,CAAS,MAATA,CAAqBpD,CA7B+B,CA8BpDoD,CAAS,cAATA,CAA6ByB,SCdxB,SAAaC,CAAb,CAAsB,SAelBC,CAAAA,EAAKT,EAAS,CACjBU,CADiB,EAEnBC,CAAU,CAACC,CAAM,CAACC,CAAD,CAAQb,CAAR,CAAiBS,CAAjB,CAAP,UAgBLE,CAAAA,EAAWC,EAAQ,IACtBE,CAAAA,CADsB,CAEtBC,CAAI,CAAGP,CAAO,CAACO,IAARP,EAFe,IAGtBI,EAAQ,SACSA,KAAjBC,CADQ,KAAA,CACDG,CADC,KAAZ,KAEO,IAAID,CAAI,EAAIA,CAAI,CAAChI,MAAjB,CAAyB,SACXgI,KAAjBF,CAD4B,KAAA,CACrBG,CADqB,KAAA,CAE1BC,CAAa,EAAI,CAACC,CAFQ,GAG5BJ,CAAG,CAAGG,CAAa,CAACE,CAAD,CAAWV,CAAX,CAHS,CAIT,UAAf,QAAOK,CAAAA,CAJiB,EAIGA,CAAG,CAACK,CAAD,CAAWV,CAAX,CAJN,CAK5BS,CAAU,GALkB,CAAzB,CAAA,IAQLL,CAAAA,CAAK,CAAG,EARH,CAUHG,CAfsB,EAgBxBA,CAAM,CAACH,CAAD,CAAQJ,CAAR,CAhBkB,CAkB1BW,CAAI,CAACP,CAAD,CAAQJ,CAAR,EAnDqB,GAKvBI,CAAAA,CALuB,CAKhBG,CALgB,CACrBJ,CAAM,CAAGJ,CAAO,CAACI,MADI,CAErBQ,CAAI,CAAGZ,CAAO,CAACY,IAFM,CAGrBH,CAAa,CAAGT,CAAO,CAACS,aAART,EAAyBA,CAAO,CAACa,IAH5B,CAIrB9D,CAAI,CAAGiD,CAAO,CAACjD,IAJM,CAMvBmD,CAAS,GANc,CAOvBQ,CAAU,GAPa,CAQrBC,CAAQ,CAAG,IAAMN,CARI,OA0B3BL,CAAAA,CAAO,KAAPA,CAAkBC,EA4BlBE,CAAU,CAACE,CAAD,EAMH,IAAM,CACPH,CADO,GAETA,CAAS,GAFA,CAGLnD,CAHK,EAIPA,CAAI,CAACsD,CAAD,CAJG,CAAb,WJ9DK,UAAyB,4BAAP3B,CAAO,MAAA,EAAA,cAAPA,CAAO,EAAA,CAAPA,aAAAA,OACKD,CAAW,CAACC,CAAD,EAA/BC,CADsB,GACtBA,SAAUS,CADY,GACZA,YAClBT,CAAAA,CAAQ,CAACS,KAATT,CAAiBS,EACVT,kBKlCmB,sCAAImC,CAAJ,MAAA,EAAA,cAAIA,CAAJ,EAAA,CAAIA,aAAAA,OAAY,CAACT,CAAD,CAAQJ,CAAR,GAC1Ca,CAAO,CAAC7H,GAAR6H,CAAYN,CAAM,EAAIA,CAAM,EAAIA,CAAM,CAACH,CAAD,CAAQJ,CAAR,CAAtCa,CADK,aCyBiB,CAACrJ,CAAD,CAAQC,CAAR,GACtB4C,KAAK,CAACC,OAAND,CAAc7C,CAAd6C,GAAwB,CAAC5C,CAAzB4C,CAAoC7C,CAApC6C,CAA4C5C"} \ No newline at end of file diff --git a/dist/composi-core.mjs b/dist/composi-core.mjs index faa4cb1..32d39c2 100644 --- a/dist/composi-core.mjs +++ b/dist/composi-core.mjs @@ -1,2 +1,2 @@ -var a=0,b=1,c=3,d="http://www.w3.org/1999/xlink",e="http://www.w3.org/2000/svg",f={},g=[],i=[];function j(a,b,c,d,e,f){return e||(e=null),{type:a,props:b,children:c,element:d,key:e,flag:f}}function k(a,b){return b||(b=null),j(a,f,g,b,null,c)}function l(a){for(var b,c=0;c<a.childNodes.length;c++)b=a.childNodes[c],8!==b.nodeType&&(3!==b.nodeType||/\S/.test(b.nodeValue))?1===b.nodeType&&l(b):(a.removeChild(b),c--)}function m(b){return"string"==typeof b&&(b=document.querySelector(b)),l(b),b.nodeType===c?k(b.nodeValue,b):j(b.nodeName.toLowerCase(),f,g.map.call(b.childNodes,m),b,null,a)}function n(a,c){c=c||{};for(var d,e=[],f=[],g=arguments.length,h=Array(2<g?g-2:0),i=2;i<g;i++)h[i-2]=arguments[i];for(var l=h.length,m=c.key;0<l--;)e.push(h[l]);for(c.children&&(0>=e.length&&e.push(c.children),delete c.children);0<e.length;)if(Array.isArray(d=e.pop()))for(var n=d.length;0<n--;)e.push(d[n]);else if(!1===d||!0===d||null==d);else f.push("object"==typeof d?d:k(d));return"function"==typeof a?a(c,c.children=f):j(a,c,f,null,m,b)}function h(...a){function c(a,b=new WeakMap){if(Object(a)!==a)return a;if(b.has(a))return b.get(a);const d=a instanceof Date?new Date(a):a instanceof RegExp?new RegExp(a.source,a.flags):a.constructor?new a.constructor:Object.create(null);return b.set(a,d),Object.assign(d,...Object.keys(a).map(d=>({[d]:c(a[d],b)})))}return(Array.isArray(a[0])?a.unshift([]):a.unshift({}),Array.isArray(a[0]))?a.reduce((d,a)=>Array.prototype.concat(d,c(a))):"object"==typeof a[0]?a.reduce((d,a)=>Object.assign(d,c(a))):void 0}function o(a){return a.currentTarget.events[a.type](a)}function p(a){return null==a?null:a.key}function q(a,b,c){for(var d,e,f={};b<=c;)null!=(d=(e=a[b]).key)&&(f[d]=e),b++;return f}function r(a,b,c,e,f){if("key"!==b)if("style"===b&&"object"==typeof e)for(var g in h(c,e)){var i=null==e||null==e[g]?"":e[g];"-"===g[0]?a[b].setProperty(g,i):a[b][g]=i}else if("o"===b[0]&&"n"===b[1])b=b.slice(2).toLowerCase(),a.events||(a.events={}),a.events[b]=e,null==e?a.removeEventListener(b,o):null==c&&a.addEventListener(b,o);else{"list"!==b&&"form"!==b&&"type"!==b&&"draggable"!==b&&"spellcheck"!==b&&b in a&&!f?a[b]=null==e?"":e:null==e||!1===e?a.removeAttribute(b):"xlink-href"===b||"xlinkHref"===b?(a.setAttributeNS(d,"href",e),a.setAttribute("href",e)):a.setAttribute(b,e)}}function s(a,b){var d=a.flag===c?document.createTextNode(a.type):(b=b||"svg"===a.type)?document.createElementNS(e,a.type):document.createElement(a.type);var f=a.props;f.onmount&&i.push(function(){f.onmount(d)});for(var g=0,h=a.children.length;g<h;)d.appendChild(s(a.children[g],b)),g++;for(var j in f)r(d,j,null,f[j],b);return a.element=d}function t(a){for(var b=0,c=a.children.length;b<c;)t(a.children[b]),b++;return a.element}function u(a,b){var c=function(){a.removeChild(t(b))},d=b.props&&b.props.onunmount;null==d?c():d(b.element,c)}function v(b,c,d,e){for(var f in h(c,d))("value"==f||"checked"==f||"selected"==f?b[f]:c[f])!==d[f]&&r(b,f,c[f],d[f],e);var g=b.vnode&&b.vnode.type===a?d.onmount:d.onupdate;null!=g&&(d.onmount?i.push(function(){g(b)}):i.push(function(){g(b,c,d)}))}function w(b,d,e,f,g){if(f===e);else if(null!=e&&e.flag===c&&f.flag===c)e.type!==f.type&&(d.nodeValue=f.type);else if(null==e||e.type!==f.type){var h=b.insertBefore(s(f,g),d);null!=e&&u(b,e),d=h}else{v(d,e.props,f.props,g=g||"svg"===f.type);for(var i,j,k,l,m=e.children,n=0,o=m.length-1,r=f.children,t=0,x=r.length-1;t<=x&&n<=o&&(k=p(m[n]),l=p(r[t]),null!=k&&k===l);)w(d,m[n].element,m[n],r[t],g),n++,t++;for(;t<=x&&n<=o&&(k=p(m[o]),l=p(r[x]),null!=k&&k===l);)w(d,m[o].element,m[o],r[x],g),o--,x--;if(n>o)for(;t<=x;)d.insertBefore(s(r[t++],g),(j=m[n])&&j.element);else if(t>x)for(;n<=o;)u(d,m[n++]);else{for(var y=q(m,n,o),z={};t<=x;){if(k=p(j=m[n]),l=p(r[t]),z[k]||null!=l&&l===p(m[n+1])){null==k&&u(d,j),n++;continue}null==l||e.flag===a?(null==k&&(w(d,j&&j.element,j,r[t],g),t++),n++):(k===l?(w(d,j.element,j,r[t],g),z[l]=!0,n++):null==(i=y[l])?w(d,j&&j.element,null,r[t],g):(w(d,d.insertBefore(i.element,j&&j.element),i,r[t],g),z[l]=!0),t++)}for(;n<=o;)null==p(j=m[n++])&&u(d,j);for(var A in y)null==z[A]&&u(d,y[A])}}return d&&(f.element=d),f}class x{constructor(){this.message="Cannot insert Fragment tag directly into DOM.",this.toString=function(){return this.message}}}function y(a,b,c){if("string"==typeof c&&(c=document.querySelector(c)),Array.isArray(b))throw new x;if(w(c,a&&a.element,a,b),b!==a)for(;0<i.length;)i.pop()();return b}function z(a,b,c){if(b="string"==typeof b?document.querySelector(b):b,!b)return console.error("@composi/core Error: You need to provide a valid container to render the component in. Check the element or selector you provided and make sure that it exists in the DOM before trying to render."),void console.error(`@composi/core Message: The container you provided was "${b}"`);var d;c?("string"==typeof c&&(c=document.querySelector(c)),d=b&&b.vnode||m(c)):d=b&&b.vnode;var e=y(d,a,b);b.vnode=e}function A(a,b){return B(a)||C(a,b)||D()}function B(a){if(Array.isArray(a))return a}function C(a,b){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!(b&&c.length===b));d=!0);}catch(a){e=!0,f=a}finally{try{d||null==h["return"]||h["return"]()}finally{if(e)throw f}}return c}function D(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function E(a){function b(a){j&&c(f(d,a,b))}function c(c){var f,i=a.init();if(c){var j=A(c,2);d=j[0],e=j[1]}else if(i&&i.length){var m=A(i,2);d=m[0],e=m[1],h&&!k&&(f=h(l,b),"function"==typeof f&&f(l,b),k=!0)}else d=[];e&&e(d,b),g(d,b)}var d,e,f=a.update,g=a.view,h=a.subscriptions||a.subs,i=a.done,j=!0,k=!1,l=()=>d;return a.send=b,c(d),()=>{j&&(j=!1,i&&i(d))}}var F=Object.prototype.hasOwnProperty;function G(a){for(var b=Object.create(null),c=a=>a&&a.type,d=(a,b)=>(d,e)=>{var f=c(d),g=F.call(a,f)&&a[f];return g?g(d.data,e):b(e)},e=0,f=function(){var c=a[e];b[c]=a=>({type:c,data:a}),e++};e<a.length;)f();return{variants:b,match:function(a,b,c){return d(b,c)(a)}}}function H(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];var d=G(b),e=d.variants,f=d.match;return e.match=f,e}var I=function(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return(a,c)=>b.map(b=>b&&b(a,c))},J=(a,b)=>Array.isArray(a)&&!b?a:b;export{n as h,z as render,E as run,H as union,I as batchEffects,J as Fragment}; +var a=0,b=1,c=3,d="http://www.w3.org/1999/xlink",e="http://www.w3.org/2000/svg",f={},g=[],i=[];function j(a,b,c,d,e,f){return e||(e=null),{type:a,props:b,children:c,element:d,key:e,flag:f}}function k(a,b){return b||(b=null),j(a,f,g,b,null,c)}function l(a){for(var b,c=0;c<a.childNodes.length;c++)b=a.childNodes[c],8!==b.nodeType&&(3!==b.nodeType||/\S/.test(b.nodeValue))?1===b.nodeType&&l(b):(a.removeChild(b),c--)}function m(b){return"string"==typeof b&&(b=document.querySelector(b)),l(b),b.nodeType===c?k(b.nodeValue,b):j(b.nodeName.toLowerCase(),f,g.map.call(b.childNodes,m),b,null,a)}function n(a,c){c=c||{};for(var d,e=[],f=[],g=arguments.length,h=Array(2<g?g-2:0),i=2;i<g;i++)h[i-2]=arguments[i];for(var l=h.length,m=c.key;0<l--;)e.push(h[l]);for(c.children&&(0>=e.length&&e.push(c.children),delete c.children);0<e.length;)if(Array.isArray(d=e.pop()))for(var n=d.length;0<n--;)e.push(d[n]);else if(!1===d||!0===d||null==d);else f.push("object"==typeof d?d:k(d));return"function"==typeof a?a(c,c.children=f):j(a,c,f,null,m,b)}function h(...a){function c(a,b=new WeakMap){if(Object(a)!==a)return a;if(b.has(a))return b.get(a);const d=a instanceof Date?new Date(a):a instanceof RegExp?new RegExp(a.source,a.flags):a.constructor?new a.constructor:Object.create(null);return b.set(a,d),Object.assign(d,...Object.keys(a).map(d=>({[d]:c(a[d],b)})))}return(Array.isArray(a[0])?a.unshift([]):a.unshift({}),Array.isArray(a[0]))?a.reduce((d,a)=>Array.prototype.concat(d,c(a))):"object"==typeof a[0]?a.reduce((d,a)=>Object.assign(d,c(a))):void 0}const o=a=>h(a);function p(a){return a.currentTarget.events[a.type](a)}function q(a){return null==a?null:a.key}function r(a,b,c){for(var d,e,f={};b<=c;)null!=(d=(e=a[b]).key)&&(f[d]=e),b++;return f}function s(a,b,c,e,f){if("key"!==b)if("style"===b&&"object"==typeof e)for(var g in h(c,e)){var i=null==e||null==e[g]?"":e[g];"-"===g[0]?a[b].setProperty(g,i):a[b][g]=i}else if("o"===b[0]&&"n"===b[1])b=b.slice(2).toLowerCase(),a.events||(a.events={}),a.events[b]=e,null==e?a.removeEventListener(b,p):null==c&&a.addEventListener(b,p);else{"list"!==b&&"form"!==b&&"type"!==b&&"draggable"!==b&&"spellcheck"!==b&&b in a&&!f?a[b]=null==e?"":e:null==e||!1===e?a.removeAttribute(b):"xlink-href"===b||"xlinkHref"===b?(a.setAttributeNS(d,"href",e),a.setAttribute("href",e)):a.setAttribute(b,e)}}function t(a,b){var d=a.flag===c?document.createTextNode(a.type):(b=b||"svg"===a.type)?document.createElementNS(e,a.type):document.createElement(a.type);var f=a.props;f.onmount&&i.push(function(){f.onmount(d)});for(var g=0,h=a.children.length;g<h;)d.appendChild(t(a.children[g],b)),g++;for(var j in f)s(d,j,null,f[j],b);return a.element=d}function u(a){for(var b=0,c=a.children.length;b<c;)u(a.children[b]),b++;return a.element}function v(a,b){var c=function(){a.removeChild(u(b))},d=b.props&&b.props.onunmount;null==d?c():d(b.element,c)}function w(b,c,d,e){for(var f in h(c,d))("value"==f||"checked"==f||"selected"==f?b[f]:c[f])!==d[f]&&s(b,f,c[f],d[f],e);var g=b.vnode&&b.vnode.type===a?d.onmount:d.onupdate;null!=g&&(d.onmount?i.push(function(){g(b)}):i.push(function(){g(b,c,d)}))}function x(b,d,e,f,g){if(b.previousVNode&&f===b.previousVNode);else if(null!=e&&e.flag===c&&f.flag===c)e.type!==f.type&&(d.nodeValue=f.type);else if(null==e||e.type!==f.type){var h=b.insertBefore(t(f,g),d);null!=e&&v(b,e),d=h}else{w(d,e.props,f.props,g=g||"svg"===f.type);for(var i,j,k,l,m=e.children,n=0,o=m.length-1,p=f.children,s=0,u=p.length-1;s<=u&&n<=o&&(k=q(m[n]),l=q(p[s]),null!=k&&k===l);)x(d,m[n].element,m[n],p[s],g),n++,s++;for(;s<=u&&n<=o&&(k=q(m[o]),l=q(p[u]),null!=k&&k===l);)x(d,m[o].element,m[o],p[u],g),o--,u--;if(n>o)for(;s<=u;)d.insertBefore(t(p[s++],g),(j=m[n])&&j.element);else if(s>u)for(;n<=o;)v(d,m[n++]);else{for(var y=r(m,n,o),z={};s<=u;){if(k=q(j=m[n]),l=q(p[s]),z[k]||null!=l&&l===q(m[n+1])){null==k&&v(d,j),n++;continue}null==l||e.flag===a?(null==k&&(x(d,j&&j.element,j,p[s],g),s++),n++):(k===l?(x(d,j.element,j,p[s],g),z[l]=!0,n++):null==(i=y[l])?x(d,j&&j.element,null,p[s],g):(x(d,d.insertBefore(i.element,j&&j.element),i,p[s],g),z[l]=!0),s++)}for(;n<=o;)null==q(j=m[n++])&&v(d,j);for(var A in y)null==z[A]&&v(d,y[A])}}return d&&(f.element=d),f}class y{constructor(){this.message="Cannot insert Fragment tag directly into DOM.",this.toString=function(){return this.message}}}function z(a,b,c){if("string"==typeof c&&(c=document.querySelector(c)),Array.isArray(b))throw new y;if(x(c,a&&a.element,a,b),b!==a)for(;0<i.length;)i.pop()();return b}function A(a,b,c){if(b="string"==typeof b?document.querySelector(b):b,!b)return console.error("@composi/core Error: You need to provide a valid container to render the component in. Check the element or selector you provided and make sure that it exists in the DOM before trying to render."),void console.error(`@composi/core Message: The container you provided was "${b}"`);var d,e=o(a);c?("string"==typeof c&&(c=document.querySelector(c)),d=b&&b.vnode||m(c)):d=b&&b.vnode;var f=z(d,a,b);b.vnode=f,b.previousVNode=e}function B(a,b){return C(a)||D(a,b)||E()}function C(a){if(Array.isArray(a))return a}function D(a,b){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!(b&&c.length===b));d=!0);}catch(a){e=!0,f=a}finally{try{d||null==h["return"]||h["return"]()}finally{if(e)throw f}}return c}function E(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function F(a){function b(a){j&&c(f(d,a,b))}function c(c){var f,i=a.init();if(c){var j=B(c,2);d=j[0],e=j[1]}else if(i&&i.length){var m=B(i,2);d=m[0],e=m[1],h&&!k&&(f=h(l,b),"function"==typeof f&&f(l,b),k=!0)}else d=[];e&&e(d,b),g(d,b)}var d,e,f=a.update,g=a.view,h=a.subscriptions||a.subs,i=a.done,j=!0,k=!1,l=()=>d;return a.send=b,c(d),()=>{j&&(j=!1,i&&i(d))}}var G=Object.prototype.hasOwnProperty;function H(a){for(var b=Object.create(null),c=a=>a&&a.type,d=(a,b)=>(d,e)=>{var f=c(d),g=G.call(a,f)&&a[f];return g?g(d.data,e):b(e)},e=0,f=function(){var c=a[e];b[c]=a=>({type:c,data:a}),e++};e<a.length;)f();return{variants:b,match:function(a,b,c){return d(b,c)(a)}}}function I(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];var d=H(b),e=d.variants,f=d.match;return e.match=f,e}var J=function(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return(a,c)=>b.map(b=>b&&b(a,c))},K=(a,b)=>Array.isArray(a)&&!b?a:b;export{n as h,A as render,F as run,I as union,J as batchEffects,K as Fragment}; //# sourceMappingURL=composi-core.mjs.map diff --git a/dist/composi-core.mjs.gz b/dist/composi-core.mjs.gz index 058c2ef44d8982fbe5a5a389c5140dd690f721ec..0db5b5d0637177e3b8b621c1f230c0c8524041e2 100644 GIT binary patch literal 2911 zcmV-l3!wBLiwFP!000006RlWVbKAHTe&1g~s~rt7hH1t7(vXJLY~t)K$#ypBb~>tN z79_!oM3GuvWGj;Xd%pwlCfobc>5Bvc2L}h=xnn0wONtry#Va0&Z+R#tNnLN<>+6Sy z2j}5irzqp=SFc~czJAQod_CdnC4!sTY<6Ak;t7w$;lyLHSn?D<Uex44off&ZvL*L< zz(cNh#15sZn=-f5@n|cNH(AE`q26zmEBUr8wv`LoB+bH7<!-=LrZy_C-H@-<-UWk9 z#%^>v_1xFQz31wKtKV{^b0Z$(Z2IN_8#ZOOWQV9I?Hw?{d1B@Tx6;w)ekwv$Iho4i zI`M+bOXiF5$|6|uzg-C7J2^hTK=A3*{`PF*c)b44=WC}{Rc)Ku-(=P(#^$fY`Nqul znQKd@RGVU_-qInM;lb6_NZ5_t-)~aYWtztmAqcS|vV0uwi?9e9Ldp4~QRV(KFbis2 z&S#9%34Ayb=LhrkSSo<$uG)!Da-*EO_)t8k@~y0t%?LneBezZ<Gq4)rz&ETzR*r<t z0eZj=fe4Pr!^!I~hVIEQBKnDiEMqNi2QyE^o3fO9`{p*D$5%J*jKPL(y!1BqQfMGq zq*ph~VcQ~I_M9`3bX+zfa9}0g>^8f)@|beAO_kWmB3m*|9ypz00kzqkQ0>O)v?Uz~ z7!QGBt*p@$_;x!ymPWP~*-0xSdI)ygVrw(TI?-|wcJ#B`d?Zr1$RU!-DrJGs1zAOS zJYLMqKVgbNOAwhYlfqv?tApmldFZa~kTI_{jZOsviJVJ2;KL0>M5=~<pjEB74U|8q zF0mcQA;0J*0&*>ps|V{}O0GZ3EjvKmU$h`_AlSTQt=~xxE54J+3Jcw&@5G7-y`ade z+6slVQVe7skaX{4t>(m>2B31!R)1CT{o_`zn<2cUDw;A-Tsjm4Dr|5x<FX-Z*Q94N zu94IUN<}B=py2hQRU{e@8E>g%Ri$xmha4cZQ?Mnv4%t7{duJaO;nD>t_#@z;>62mi z#1!OWwq$eZG<lVzQEe}lBy0C|I5GYLJ#8pe*aXUk5R!>ILxh-E7o<?SS|DpI281zl zpP2;ldB)}G_1ew5A`PwC$!Mk!Qrsn^sb2S6ijbXhouDaUKlK-QpsF3U(@rQII(KQ0 z-T#l#He<(fPXD++&>ZMWlM{v@tdj#0i09vmz+<%MLI8E-2)Xc=jJ7klZ3OUzLg=}? z>~t9oY^yfa=tKjHoM6|4Vl(+Gg6BR{6AHo8=`-+D@3t}Q5Y7NDj2&nq73M0c^G&sg zm-ETQrGIa7MJ!{DJtQT=`UmouD(k%+^AxJbEC@w<>O6i@XeqD-g5+lWYKcSxv&>TH z?uI=H!?Fb(>8%?IGNkSUM+n7R>E>NRxu>-cX;rISAsz57a}7x_ok~ZB;d25VbPkgY za~e1Z2wXPZn851BVJYKS`dL3wZB>>9i3-;3j890)>GUGf&~z|r=-eJt9sdTQ-_*!) zeglt1W}4{I<0>gtq+vQ9&CCzo#GK-Ss{2i!KEuW*njZS&=Zki~Kn{7f;$w1DRn(@c z(3UAoz|pC*&$K3}d{K`zWkcKe0&=;pWu$rt^zH1^UH7J@fv6PB%*K~VI=&tW5`mwt zki5t#@=ej?^>mt=^w0@z!=t)IB!?60^JI)lFX<{7ICGbo;#*|1(2?7%%0p9u(6JpE z43|?K5yRg)Rx46##3~@YGKnNwtcc9(14di6iEx0lIjgxKP4I#={w<up8J`c|A3J-` zdSJX8bQOpZ5a(r8L*>v3MXql^gmsz$;A#wDUYmL6fenQqowY}um5vW~TgwiYiMoJ+ zY-~?<R8>Ly5$r%ag9_WPN*8A4bM7x9Boq8l9u4t7omOBSahl^a!CSq@5P3)C8Hub1 z+9=4r=3%F7mqyJtgzb1Hc*cm9{qp>|oy0cfF!#j;x*;XF;o6Uw)G?aJI<gXYYL^yG z_1h;cTBJ+cv&o^vF%l^%v^rP9j(*I{jQ~WX2U_yJLTx9{x#`I9WSg;p1Y)3&K>Ynq zK|>1WOhV&AUN6Q@`#X#w(J}e(08>`R9C+0J$08m)xf7vNc?!#4b5u~M`Z`nPIgGjx zo7R@EUhysV^{W+D8?o(Iz3Nsp(`kMy3fy-s{;)Sx7V-?E?V`fSh`XLn*N_0U3wwl^ zMARE5eQ+YC3+9)XylUO_CFVuXy!mtH#h7_P%p1+TxVqvEN?3ybu3-Hc6g!@v4S6mv z^(K2I^qr>DRmXMEVs+OTHYB9ScIIx_+2)`Q>b)rK4bOSO_*W_r%&BC9bglM;5o%u- z>!nH57a~K8h3jc(FOgx{!Pw54OaReKgGS|Po#u@?nZ=9@t2IqIxBDG7A+#FZ1vb!O zj~i=V$N(D8xgmam@+;aAaWON*hPR!HJvAxwX9wuu+U|5U%O_~3!wF-MdHVD`BjRZU zxH-E;kYMjH>5cpi#kGA)_;vASX(;v>Ay>8mIi#X&i1+9iPeF!i)7l?KwK&2`ourks zQB@^lB_?lWo)@)cE@Qn%DM9<KTE<qGmI#yC9*cEhz5C^(GvRu3U3}K<?>NY}QjD3O zMtS^eS7(~~@4R_N46=hiYn}u4v`k0-sFSjIu&C46lP5eP=1VH2Iwepd;=XQ-G}5!% zbm$mOduR_m$ROsMk(j=C-sR8#w8M9Oe&Kfw7Xe;m%28#B#mV1;VzVu(^g4j4SobvP zTK_H@TtI~uutlKTrJ=H<g`|akfE+=lC<SQ|F)O4|f+m>w<fNZ8cdWOR)bxCNZL27) zsujuFgMZ66v}7Jy8@X0i)j)zek>F5U>JimtMaD%;pkT|_)@;?~9`_y&cP5PMM&<ls zzn@?1qfxtSebJ(JS2z>oK~~n}uLu7$`Q0Q{dXOk|Z#w@U3?tOltx3km<A&zk@myQ4 zeWf0Z>Y{d9MEpsL6lySn@6KMb-a@$J@tvMK9`Ef@E~cf!vj>Qw@0J7UyK!x_KwUwh zM~RD9XtqoX=mGRT*2YvKE<W!!evvt8txAa-FJZD5)QZI-adK3=He*f*d!T+SFy%w+ z=(30L3mYf|t<h6Sz?eseGVg@uHJ~Q*phyT*v!^J{WtQy^Btrl2kt`<diw45@=z|bw z>2Y_}`eM`vqF}i7y$&~>tJ1sIz43@2b7SbTuGMB+lcj~q#3(Y*yvVQgt<lu<j}em* z^6%~O`-o3ph`WIuwTd2*1~3YZd&E-|x@n#QHwqf<^h$h(=y5~ntk4KTDJ%4VeT$e< zX>U+8^c&EphJIt{H=ySUx+}^}kx1-}qR$KOKoM#!v$!Trm@`6pqos-rqGKi2f2W}p zmyW3>>AB9?rRqU<4^`t=L78sp05qd!LSK*!g0D!kYcj7)*i77oL)l)zqXl9dx)M%H z1RQb?Na?Edkag0he=ph>i{arTk<~8`dDm1AZxlbAcN8x?_fU@^?sSMIPB4G%58{sM zJrctBsTL|0-<wxX$s<^{L<QbSAI|}g12iOdxju~V1pLW{N14d@m|Uo(=P!aK9c-J2 zZ4}ek>PqzM>hkjBsax4+g{aR5#2}UE<q^_1<SK5@yiE>W#-;k4(X-1a(fw!-P{`*G ztiI@iMEBTjp0>51{j+MYG_g_qK(EG1gia?Dt{OU8styxnJ`vKC*4s~GEdC#ov`=gF zoGk8q{Rrn{fEcUipn{(}Z9WZz@Ckn|UEfoW+oG%wu)oSm_#65&nT5aC<0j`n(xAy9 zH~)!-KHcg*ieO3=|CwgG;^gFgbAA06%e+E<M8k}n@y}mBh&CBrQ8IEitBOSZ=D!vy JYxZ3k003mZyQ}~J literal 2882 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 diff --git a/dist/composi-core.mjs.map b/dist/composi-core.mjs.map index 5999a64..88dae7f 100644 --- a/dist/composi-core.mjs.map +++ b/dist/composi-core.mjs.map @@ -1 +1 @@ -{"version":3,"file":"composi-core.mjs.map","sources":["../src/constants.js","../src/vnode.js","../src/h.js","../node_modules/@composi/merge-objects/src/index.js","../src/vdom.js","../src/render.js","../src/runtime.js","../src/union.js","../src/effects.js","../src/fragment.js"],"sourcesContent":["/**\n * Used to determine if a vnode should be recycled.\n * @type {number}\n */\nexport const RECYCLED_NODE = 0\n\n/**\n * Used in a vnode to indicate that it is a DOM node.\n * @type {number}\n */\nexport const ELEMENT_NODE = 1\n\n/**\n * Used in a vnode to indicate that it is a text node.\n * @type {number}\n */\nexport const TEXT_NODE = 3\n\n/**\n * Namespace for SVG elements with `xlink:href` attributes.\n * @type {string}\n */\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink'\n\n/**\n * Namespace for SVG elements.\n * @type {string}\n */\nexport const SVG_NS = 'http://www.w3.org/2000/svg'\n\n/**\n * An empty object. Used as placeholder for `props` in VNode.\n * @type {{}} EMPTY_OBJECT\n */\nexport const EMPTY_OBJECT = {}\n\n/**\n * An empty array. Used for access to array methods.\n * @type {any[]} EMPTY_ARRAY\n */\nexport const EMPTY_ARRAY = []\n\n/**\n * An array to store lifecycle hooks.\n * @type {any[]} LIFECYCLE\n */\nexport const LIFECYCLE = []\n","import {\n EMPTY_OBJECT,\n EMPTY_ARRAY,\n TEXT_NODE,\n RECYCLED_NODE\n} from './constants'\n\n/**\n * @typedef {Object.<string, any> | {}} Props\n * @property {Children} Props.children\n */\n/**\n * @typedef {VNode[]} Children\n */\n/**\n * @typedef {string | number | Function} Type\n * @typedef {number | string | null} Key\n * @typedef {Object.<string, any>} VNode\n * @property {Type} VNode.type\n * @property {Props} VNode.props\n * @property {Children} VNode.children\n * @property {Element} VNode.element\n * @property {Key} [VNode.key]\n * @property {number} VNode.flag\n */\n/**\n * Create a virtual node with the provided properties.\n * @param {string | Function} type\n * @param {Props} props\n * @param {Children} children\n * @param {Element} element\n * @param {string | number | null} key\n * @param {number} flag\n * @return {VNode} VNode\n */\nexport function createVNode(type, props, children, element, key, flag) {\n if (!key) key = null\n return {\n type,\n props,\n children,\n element,\n key,\n flag\n }\n}\n\n/**\n * Create a virtual text node.\n * @param {string} text\n * @param {Element} [element]\n * @return {VNode} VNode\n */\nexport function createTextVNode(text, element) {\n if (!element) element = null\n return createVNode(text, EMPTY_OBJECT, EMPTY_ARRAY, element, null, TEXT_NODE)\n}\n\n/**\n * Function to remove whitespace nodes from DOM element.\n * This is to avoid unnecessary inclusion of\n * whitespace nodes in virtual node when hydrating.\n * @param {Element | Node} node\n * @returns {void} undefined\n */\nfunction removeWhiteSpaceNodes(node) {\n for (let n = 0; n < node.childNodes.length; n++) {\n const child = node.childNodes[n]\n if (\n child.nodeType === 8 ||\n (child.nodeType === 3 && !/\\S/.test(child.nodeValue))\n ) {\n node.removeChild(child)\n n--\n } else if (child.nodeType === 1) {\n removeWhiteSpaceNodes(child)\n }\n }\n}\n\n/**\n * Create a virtual node represeting a DOM element and its children.\n * @param {Element} element\n * @return {VNode} VNode\n */\nexport function hydrate(element) {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n }\n // Clean node before using:\n removeWhiteSpaceNodes(element)\n\n return element.nodeType === TEXT_NODE\n ? createTextVNode(element.nodeValue, element)\n : createVNode(\n element.nodeName.toLowerCase(),\n EMPTY_OBJECT,\n EMPTY_ARRAY.map.call(element.childNodes, hydrate),\n element,\n null,\n RECYCLED_NODE\n )\n}\n","import { createVNode, createTextVNode } from './vnode'\nimport { ELEMENT_NODE } from './constants'\n\n/**\n * Creates a virtual node representing a node or text node to be created.\n * @typedef {import('./vnode').VNode} VNode\n * @param {string | Function} type\n * @param {Object.<string, any>} [props]\n * @return {VNode}\n */\nexport function h(type, props, ...children) {\n props = props || {}\n let node\n const tempBox = []\n const childNodes = []\n let length = children.length\n const key = props.key\n\n while (length-- > 0) tempBox.push(children[length])\n\n if (props.children) {\n if (tempBox.length <= 0) {\n tempBox.push(props.children)\n }\n delete props.children\n }\n\n while (tempBox.length > 0) {\n if (Array.isArray((node = tempBox.pop()))) {\n let length = node.length\n while (length-- > 0) {\n tempBox.push(node[length])\n }\n } else if (node === false || node === true || node == null) {\n } else {\n childNodes.push(typeof node === 'object' ? node : createTextVNode(node))\n }\n }\n\n if (typeof type === 'function') {\n return type(props, (props.children = childNodes))\n } else {\n return createVNode(type, props, childNodes, null, key, ELEMENT_NODE)\n }\n}\n","/**\n * Combine two objects, merging the second into the first. Any properties already existing in the first will be replaced by those of the second. Any properties in the second not in the first will be added to it.\n * This does a deep clone. Sub arrays will be cloned. If arrays consist of objects, those will be cloned. Functions will also be cloned. This also support Maps and Sets.\n * Passing in just one object will return a deep clone of it.\n *\n * @param {Object.<string, any>[]} objects One or more objects to use for merging.\n * @return {Object.<string, any>} Object.<string, any>\n */\n\nexport function mergeObjects(...objects) {\n const FIRST_ARGUMENT = 0\n // Add empty array or object to arguments to ensure unique clone:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n objects.unshift([])\n } else {\n objects.unshift({})\n }\n\n /**\n * Create a clone of an object or array.\n * @param {*} object The object to clone.\n * @return {Object<string, any>} Object<string, any>\n */\n\n function createClone(object, hash = new WeakMap()) {\n // Deal with primitive types:\n if (Object(object) !== object) return object\n // Deal with cyclic references:\n if (hash.has(object)) return hash.get(object)\n const result =\n object instanceof Date\n ? new Date(object)\n : object instanceof RegExp\n ? new RegExp(object.source, object.flags)\n : object.constructor\n ? new object.constructor()\n : Object.create(null)\n hash.set(object, result)\n if (object instanceof Map) {\n Array.from(object, ([key, val]) =>\n result.set(key, createClone(val, hash))\n )\n }\n if (object instanceof Set) {\n Array.from(object, val => result.add(createClone(val, hash)))\n }\n return Object.assign(\n result,\n ...Object.keys(object).map(key => ({\n [key]: createClone(object[key], hash)\n }))\n )\n }\n // Return cloned copy of merged objects:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n return objects.reduce((a, b) => Array.prototype.concat(a, createClone(b)))\n } else if (typeof objects[FIRST_ARGUMENT] === 'object') {\n return objects.reduce((a, b) => Object.assign(a, createClone(b)))\n }\n}\n\nexport const cloneObject = object => mergeObjects(object)\nexport const clone = object => mergeObjects(object)\n","import {\n RECYCLED_NODE,\n TEXT_NODE,\n XLINK_NS,\n SVG_NS,\n LIFECYCLE\n} from './constants'\nimport { mergeObjects } from '@composi/merge-objects'\n\n/**\n * Event proxy for inline events.\n * @param {Event} event\n * @return {any} any\n */\nfunction eventProxy(event) {\n return event.currentTarget['events'][event.type](event)\n}\n\n/**\n * Get the key value of a virtual node.\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} vnode\n * @return {string | number | null}\n */\nfunction getKey(vnode) {\n return vnode == null ? null : vnode.key\n}\n\n/**\n * Create a map of keyed nodes.\n * @typedef {import('./vnode').Children} Children\n * @param {Children} children\n * @param {number} startCount\n * @param {number} end\n * @return {Object.<string, any>} Object.<string, any>\n */\nfunction createKeyMap(children, startCount, end) {\n const out = {}\n let key\n let vnode\n\n while (startCount <= end) {\n if ((key = (vnode = children[startCount]).key) != null) {\n out[key] = vnode\n }\n startCount++\n }\n\n return out\n}\n\n/**\n * Update the properties and attributes of a VNode based on new data.\n * @param {Element} element\n * @param {string} prop\n * @param {any} oldValue\n * @param {any} newValue\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction setProp(element, prop, oldValue, newValue, isSVG) {\n if (prop === 'key') {\n return\n } else if (prop === 'style' && typeof newValue === 'object') {\n for (let i in mergeObjects(oldValue, newValue)) {\n const style = newValue == null || newValue[i] == null ? '' : newValue[i]\n if (i[0] === '-') {\n element[prop].setProperty(i, style)\n } else {\n element[prop][i] = style\n }\n }\n } else {\n if (prop[0] === 'o' && prop[1] === 'n') {\n prop = prop.slice(2).toLowerCase()\n\n if (!element['events']) element['events'] = {}\n\n element['events'][prop] = newValue\n\n if (newValue == null) {\n element.removeEventListener(prop, eventProxy)\n } else if (oldValue == null) {\n element.addEventListener(prop, eventProxy)\n }\n } else {\n let nullOrFalse = newValue == null || newValue === false\n\n if (\n prop !== 'list' &&\n prop !== 'form' &&\n prop !== 'type' &&\n prop !== 'draggable' &&\n prop !== 'spellcheck' &&\n prop in element &&\n !isSVG\n ) {\n element[prop] = newValue == null ? '' : newValue\n } else if (nullOrFalse) {\n element.removeAttribute(prop)\n } else {\n if (prop === 'xlink-href' || prop === 'xlinkHref') {\n element.setAttributeNS(XLINK_NS, 'href', newValue)\n element.setAttribute('href', newValue)\n } else {\n element.setAttribute(prop, newValue)\n }\n }\n }\n }\n}\n\n/**\n * Create an element, either node or text, from a VNode.\n * @typedef {Function[]} Lifecycle\n * @param {VNode} vnode\n * @param {boolean} [isSVG]\n * @return {Element} Element\n */\nfunction createElement(vnode, isSVG) {\n let element\n if (vnode.flag === TEXT_NODE) {\n element = document.createTextNode(/** @type {string} */ (vnode.type))\n } else {\n if ((isSVG = isSVG || vnode.type === 'svg')) {\n element = document.createElementNS(\n SVG_NS,\n /** @type {string} */ (vnode.type)\n )\n } else {\n element = document.createElement(/** @type {string} */ (vnode.type))\n }\n }\n\n const props = vnode.props\n if (props['onmount']) {\n LIFECYCLE.push(function() {\n props['onmount'](element)\n })\n }\n let idx = 0\n const length = vnode.children.length\n while (idx < length) {\n element.appendChild(createElement(vnode.children[idx], isSVG))\n idx++\n }\n\n for (let prop in props) {\n setProp(/** @type {Element} */ (element), prop, null, props[prop], isSVG)\n }\n\n return (vnode.element = /** @type {Element} */ (element))\n}\n\n/**\n * Remove children from a node.\n * @param {VNode} vnode\n * @return {Element}\n */\nfunction removeChildren(vnode) {\n let idx = 0\n const length = vnode.children.length\n while (idx < length) {\n removeChildren(vnode.children[idx])\n idx++\n }\n\n return vnode.element\n}\n\n/**\n * Remove an element from the DOM.\n * @param {Element} parent\n * @param {VNode} vnode\n * @return {void} undefined\n */\nfunction removeElement(parent, vnode) {\n const done = function() {\n parent.removeChild(removeChildren(vnode))\n }\n\n const cb = vnode.props && vnode.props['onunmount']\n if (cb != null) {\n cb(vnode.element, done)\n } else {\n done()\n }\n}\n\n/**\n * Update an element based on new prop values.\n * @typedef {import('./vnode').Props} Props\n * @param {Element} element\n * @param {Props} oldProps\n * @param {Props} newProps\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction updateElement(element, oldProps, newProps, isSVG) {\n for (let prop in mergeObjects(oldProps, newProps)) {\n if (\n (prop === 'value' || prop === 'checked' || prop === 'selected'\n ? element[prop]\n : oldProps[prop]) !== newProps[prop]\n ) {\n setProp(element, prop, oldProps[prop], newProps[prop], isSVG)\n }\n }\n\n const cb =\n element['vnode'] && element['vnode'].type === RECYCLED_NODE\n ? newProps['onmount']\n : newProps['onupdate']\n if (cb != null) {\n if (newProps['onmount']) {\n LIFECYCLE.push(function() {\n cb(element)\n })\n } else {\n LIFECYCLE.push(function() {\n cb(element, oldProps, newProps)\n })\n }\n }\n}\n\n/**\n * Patch an element based on differences between its old VNode and its new one.\n * @param {Element} parent\n * @param {Element} element\n * @param {VNode} oldVNode\n * @param {VNode} newVNode\n * @param {boolean} [isSVG]\n * @return {VNode}\n */\nfunction patchElement(parent, element, oldVNode, newVNode, isSVG) {\n if (newVNode === oldVNode) {\n } else if (\n oldVNode != null &&\n oldVNode.flag === TEXT_NODE &&\n newVNode.flag === TEXT_NODE\n ) {\n if (oldVNode.type !== newVNode.type) {\n element.nodeValue = /** @type {any} */ (newVNode.type)\n }\n } else if (oldVNode == null || oldVNode.type !== newVNode.type) {\n const newElement = parent.insertBefore(\n createElement(newVNode, isSVG),\n element\n )\n\n if (oldVNode != null) removeElement(parent, oldVNode)\n\n element = newElement\n } else {\n updateElement(\n element,\n oldVNode.props,\n newVNode.props,\n (isSVG = isSVG || newVNode.type === 'svg')\n )\n\n let savedNode\n let childNode\n\n let lastKey\n let oldVNodeChildren = oldVNode.children\n let oldVNodeChildStart = 0\n let oldVNodeChildEnd = oldVNodeChildren.length - 1\n\n let nextKey\n const newVNodeChildren = newVNode.children\n let newVNodeChildStart = 0\n let newVNodeChildEnd = newVNodeChildren.length - 1\n\n while (\n newVNodeChildStart <= newVNodeChildEnd &&\n oldVNodeChildStart <= oldVNodeChildEnd\n ) {\n lastKey = getKey(oldVNodeChildren[oldVNodeChildStart])\n nextKey = getKey(newVNodeChildren[newVNodeChildStart])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n oldVNodeChildren[oldVNodeChildStart].element,\n oldVNodeChildren[oldVNodeChildStart],\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n\n oldVNodeChildStart++\n newVNodeChildStart++\n }\n\n while (\n newVNodeChildStart <= newVNodeChildEnd &&\n oldVNodeChildStart <= oldVNodeChildEnd\n ) {\n lastKey = getKey(oldVNodeChildren[oldVNodeChildEnd])\n nextKey = getKey(newVNodeChildren[newVNodeChildEnd])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n oldVNodeChildren[oldVNodeChildEnd].element,\n oldVNodeChildren[oldVNodeChildEnd],\n newVNodeChildren[newVNodeChildEnd],\n isSVG\n )\n\n oldVNodeChildEnd--\n newVNodeChildEnd--\n }\n\n if (oldVNodeChildStart > oldVNodeChildEnd) {\n while (newVNodeChildStart <= newVNodeChildEnd) {\n element.insertBefore(\n createElement(newVNodeChildren[newVNodeChildStart++], isSVG),\n (childNode = oldVNodeChildren[oldVNodeChildStart]) &&\n childNode.element\n )\n }\n } else if (newVNodeChildStart > newVNodeChildEnd) {\n while (oldVNodeChildStart <= oldVNodeChildEnd) {\n removeElement(element, oldVNodeChildren[oldVNodeChildStart++])\n }\n } else {\n const lastKeyed = createKeyMap(\n oldVNodeChildren,\n oldVNodeChildStart,\n oldVNodeChildEnd\n )\n const nextKeyed = {}\n\n while (newVNodeChildStart <= newVNodeChildEnd) {\n lastKey = getKey((childNode = oldVNodeChildren[oldVNodeChildStart]))\n nextKey = getKey(newVNodeChildren[newVNodeChildStart])\n\n if (\n nextKeyed[lastKey] ||\n (nextKey != null &&\n nextKey === getKey(oldVNodeChildren[oldVNodeChildStart + 1]))\n ) {\n if (lastKey == null) {\n removeElement(element, childNode)\n }\n oldVNodeChildStart++\n continue\n }\n\n if (nextKey == null || oldVNode.flag === RECYCLED_NODE) {\n if (lastKey == null) {\n patchElement(\n element,\n childNode && childNode.element,\n childNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n newVNodeChildStart++\n }\n oldVNodeChildStart++\n } else {\n if (lastKey === nextKey) {\n patchElement(\n element,\n childNode.element,\n childNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n nextKeyed[nextKey] = true\n oldVNodeChildStart++\n } else {\n if ((savedNode = lastKeyed[nextKey]) != null) {\n patchElement(\n element,\n element.insertBefore(\n savedNode.element,\n childNode && childNode.element\n ),\n savedNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n nextKeyed[nextKey] = true\n } else {\n patchElement(\n element,\n childNode && childNode.element,\n null,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n }\n }\n newVNodeChildStart++\n }\n }\n\n while (oldVNodeChildStart <= oldVNodeChildEnd) {\n if (\n getKey((childNode = oldVNodeChildren[oldVNodeChildStart++])) == null\n ) {\n removeElement(element, childNode)\n }\n }\n\n for (let key in lastKeyed) {\n if (nextKeyed[key] == null) {\n removeElement(element, lastKeyed[key])\n }\n }\n }\n }\n\n if (element) {\n newVNode.element = element\n }\n return newVNode\n}\n\n/**\n * Class to throw error message when attempting to insert Fragement tag directly into DOM.\n * @return {string} message\n */\nexport class FragmentError {\n constructor() {\n this.message = 'Cannot insert Fragment tag directly into DOM.'\n this.toString = function() {\n return this.message\n }\n }\n}\n\n/**\n * Function to either mount an element the first time or patch it in place. This behavior depends on the value of the old VNode. If it is null, a new element will be created, otherwise it compares the new VNode with the old one and patches it.\n * @param {Element | string} container\n * @param {VNode} newVNode\n * @param {VNode} [oldVNode]\n * @return {VNode} VNode\n */\nexport function patch(oldVNode, newVNode, container) {\n if (typeof container === 'string') {\n container = document.querySelector(container)\n }\n\n if (Array.isArray(newVNode)) throw new FragmentError()\n patchElement(container, oldVNode && oldVNode.element, oldVNode, newVNode)\n\n if (newVNode !== oldVNode) {\n while (LIFECYCLE.length > 0) LIFECYCLE.pop()()\n }\n\n return newVNode\n}\n","import { patch } from './vdom'\nimport { hydrate } from './vnode'\n\n/**\n * Render a functional component. The first argument is the component to render. This can be either a JSX tag or an `h` function. The second argument is the container to render in. An optional third argument is an element in the document loaded from the server. This will be hydrated with the component provided to render. This third argument can be a DOM referece for that element, or a valid string selector for it.\n * @example\n *\n * ```\n * // Render Title tag into section:\n * render(<Title message='Hello World!'/>, 'section')\n * // Update the title component 5 seconds later:\n * setTimeout(() => {\n * render(<Title message='Hello Everyone!'/>, 'section')\n * }, 5000)\n * ```\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} VNode\n * @param {Element | string} container\n * @param {Element | string} [hydrateThis]\n * @return {void} undefined\n */\nexport function render(VNode, container, hydrateThis) {\n if (typeof container === 'string') {\n container = document.querySelector(container)\n } else {\n container = container\n }\n if (!container) {\n console.error(\n '@composi/core Error: You need to provide a valid container to render the component in. Check the element or selector you provided and make sure that it exists in the DOM before trying to render.'\n )\n console.error(\n `@composi/core Message: The container you provided was \"${container}\"`\n )\n return\n }\n let oldVNode\n if (hydrateThis) {\n if (typeof hydrateThis === 'string') {\n hydrateThis = document.querySelector(hydrateThis)\n }\n // If user tries to hydrate already rendered component,\n // use its 'vnode' property,\n // otherwise hydrate it.\n oldVNode = (container && container['vnode']) || hydrate(hydrateThis)\n } else {\n oldVNode = container && container['vnode']\n }\n const vnode = patch(oldVNode, VNode, container)\n container['vnode'] = vnode\n}\n","/**\n * The @composi/runtime.\n * @example\n *\n * ```\n * // Create a runtime program\n * const program = {\n * // Define state:\n * init() {\n * return [{count: 0}]\n * },\n * // Define view to render.\n * // Notice event to send message 'incr'.\n * view(state, send) {\n * return render(<div onclick={send('incr')}>The count is: {state.count}</div>, document.body)\n * },\n * // Define action to update state:\n * update(state, msg) {\n * if (msg === 'incr') {\n * return [state.count++]\n * }\n * }\n * }\n * // Run the program:\n * run(program)\n * ```\n * @typedef {any} State - type any.\n * @typedef {Function} Effect - A function to execute.\n * @typedef {Object<string, any>} Program A program to run.\n * @prop {Function} Program.init\n * @prop {Function} Program.update\n * @prop {Function} Program.view\n * @prop {Function} [Program.subscriptions]\n * @prop {Function} [Program.subs] Shortcut for subscriptions.\n * @prop {Function} [Program.done]\n * @param {Program} program A program to run with four methods: `init`, `view`, `update` and `subscriptions`.\n * @return {() => void} Function to terminate runtime.\n */\nexport function run(program) {\n const update = program.update\n const view = program.view\n const subscriptions = program.subscriptions || program.subs\n const done = program.done\n let state, effect\n let isRunning = true\n let isFirstRun = false\n const getState = () => state\n\n /**\n * Send a message.\n * @param {any} message A message of any type.\n * @return {void} undefined\n */\n function send(message) {\n if (isRunning) {\n updateView(update(state, message, send))\n }\n }\n\n /**\n * Expose send as static function on program object.\n * This is to let you send messages to the program\n * from other contexts, such as in a @composi/router action.\n */\n program['send'] = send\n\n /**\n * Handle changes to state and executing effects.\n * @param {any[]} update\n * @return {void} undefined\n */\n function updateView(update) {\n let sub\n let init = program.init()\n if (update) {\n ;[state, effect] = update\n } else if (init && init.length) {\n ;[state, effect] = init\n if (subscriptions && !isFirstRun) {\n sub = subscriptions(getState, send)\n if (typeof sub === 'function') sub(getState, send)\n isFirstRun = true\n }\n } else {\n state = []\n }\n if (effect) {\n effect(state, send)\n }\n view(state, send)\n }\n\n updateView(state)\n\n /**\n * Function to end runtime.\n * @return {void} undefined\n */\n return () => {\n if (isRunning) {\n isRunning = false\n if (done) {\n done(state)\n }\n }\n }\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * Create a union of string tags.\n * @param {string[]} types\n */\nfunction createUnion(types) {\n const variants = Object.create(null)\n let checkTag = x => x && x.type\n\n const matcher = (handlers, catchAll) => {\n return (tag, context) => {\n const tagType = checkTag(tag)\n const match = hasOwnProperty.call(handlers, tagType) && handlers[tagType]\n return match ? match(tag.data, context) : catchAll(context)\n }\n }\n\n function match(tag, handlers, catchAll) {\n return matcher(handlers, catchAll)(tag)\n }\n\n let idx = 0\n while (idx < types.length) {\n const type = types[idx]\n variants[type] = data => ({ type, data })\n idx++\n }\n\n return { variants, match }\n}\n\n/**\n * Create a union of types for matching up with functions.\n * @param {...string} types\n */\nexport function union(...types) {\n const { variants, match } = createUnion(types)\n variants.match = match\n return variants\n}\n","/**\n * Function to batch effects together.\n * @param {...Function} effects\n * @return {Function} Function\n */\nexport const batchEffects = (...effects) => (state, send) =>\n effects.map(effect => effect && effect(state, send))\n","/**\n * Returns a group of sibling elements for inclusion in another JSX tag.\n * @typedef {import('./vnode').Props} Props\n * @typedef {import('./vnode').Children} Children\n * @param {Props} props\n * @return {Children} children\n */\n/**\n * A tag to enable returning sibling elements. This is useful for returning list items to render in a list or table cells to render in a table row.\n * @example\n *\n * ```\n * <Fragment>\n * <li>A</li>\n * <li>B</li>\n * <li>C</li>\n * </Fragment>\n ```\n * Or functionally:\n * ```\n * Fragment(null, [\n * h('li', {}, 'A'),\n * h('li', {}, 'B'),\n * h('li', {}, 'C')\n * ])\n ```\n * @param {Object} [props] When using Fragment as a function, props is the first argument. Provide either null or {} as the value for props.\n * @param {Children} [children] The siblings to return with the Fragment. This will be an array of sibling elements.\n * @return {VNode[]} An array of virtual nodes.\n */\nexport const Fragment = (props, children) =>\n Array.isArray(props) && !children ? props : children\n"],"names":["RECYCLED_NODE","ELEMENT_NODE","TEXT_NODE","XLINK_NS","SVG_NS","EMPTY_OBJECT","EMPTY_ARRAY","LIFECYCLE","createVNode","type","props","children","element","key","flag","createTextVNode","text","removeWhiteSpaceNodes","node","child","n","childNodes","length","nodeType","test","nodeValue","removeChild","hydrate","document","querySelector","nodeName","toLowerCase","map","call","h","tempBox","push","Array","isArray","pop","mergeObjects","objects","createClone","object","hash","WeakMap","Object","has","get","result","Date","RegExp","source","flags","constructor","create","set","assign","keys","unshift","reduce","a","b","prototype","concat","eventProxy","event","currentTarget","getKey","vnode","createKeyMap","startCount","end","out","setProp","prop","oldValue","newValue","isSVG","i","style","setProperty","slice","removeEventListener","addEventListener","removeAttribute","setAttributeNS","setAttribute","createElement","createTextNode","createElementNS","idx","appendChild","removeChildren","removeElement","parent","done","cb","updateElement","oldProps","newProps","patchElement","oldVNode","newVNode","newElement","insertBefore","savedNode","childNode","lastKey","nextKey","oldVNodeChildren","oldVNodeChildStart","oldVNodeChildEnd","newVNodeChildren","newVNodeChildStart","newVNodeChildEnd","lastKeyed","nextKeyed","FragmentError","message","toString","patch","container","render","VNode","hydrateThis","console","error","run","program","send","isRunning","updateView","update","state","sub","init","effect","subscriptions","isFirstRun","getState","view","subs","hasOwnProperty","createUnion","types","variants","checkTag","x","matcher","handlers","catchAll","tag","context","tagType","match","data","union","batchEffects","effects","Fragment"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"composi-core.mjs.map","sources":["../src/constants.js","../src/vnode.js","../src/h.js","../node_modules/@composi/merge-objects/src/index.js","../src/vdom.js","../src/render.js","../src/runtime.js","../src/union.js","../src/effects.js","../src/fragment.js"],"sourcesContent":["/**\n * Used to determine if a vnode should be recycled.\n * @type {number}\n */\nexport const RECYCLED_NODE = 0\n\n/**\n * Used in a vnode to indicate that it is a DOM node.\n * @type {number}\n */\nexport const ELEMENT_NODE = 1\n\n/**\n * Used in a vnode to indicate that it is a text node.\n * @type {number}\n */\nexport const TEXT_NODE = 3\n\n/**\n * Namespace for SVG elements with `xlink:href` attributes.\n * @type {string}\n */\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink'\n\n/**\n * Namespace for SVG elements.\n * @type {string}\n */\nexport const SVG_NS = 'http://www.w3.org/2000/svg'\n\n/**\n * An empty object. Used as placeholder for `props` in VNode.\n * @type {{}} EMPTY_OBJECT\n */\nexport const EMPTY_OBJECT = {}\n\n/**\n * An empty array. Used for access to array methods.\n * @type {any[]} EMPTY_ARRAY\n */\nexport const EMPTY_ARRAY = []\n\n/**\n * An array to store lifecycle hooks.\n * @type {any[]} LIFECYCLE\n */\nexport const LIFECYCLE = []\n","import {\n EMPTY_OBJECT,\n EMPTY_ARRAY,\n TEXT_NODE,\n RECYCLED_NODE\n} from './constants'\n\n/**\n * @typedef {Object.<string, any> | {}} Props\n * @property {Children} Props.children\n */\n/**\n * @typedef {VNode[]} Children\n */\n/**\n * @typedef {string | number | Function} Type\n * @typedef {number | string | null} Key\n * @typedef {Object.<string, any>} VNode\n * @property {Type} VNode.type\n * @property {Props} VNode.props\n * @property {Children} VNode.children\n * @property {Element} VNode.element\n * @property {Key} [VNode.key]\n * @property {number} VNode.flag\n */\n/**\n * Create a virtual node with the provided properties.\n * @param {string | Function} type\n * @param {Props} props\n * @param {Children} children\n * @param {Element} element\n * @param {string | number | null} key\n * @param {number} flag\n * @return {VNode} VNode\n */\nexport function createVNode(type, props, children, element, key, flag) {\n if (!key) key = null\n return {\n type,\n props,\n children,\n element,\n key,\n flag\n }\n}\n\n/**\n * Create a virtual text node.\n * @param {string} text\n * @param {Element} [element]\n * @return {VNode} VNode\n */\nexport function createTextVNode(text, element) {\n if (!element) element = null\n return createVNode(text, EMPTY_OBJECT, EMPTY_ARRAY, element, null, TEXT_NODE)\n}\n\n/**\n * Function to remove whitespace nodes from DOM element.\n * This is to avoid unnecessary inclusion of\n * whitespace nodes in virtual node when hydrating.\n * @param {Element | Node} node\n * @returns {void} undefined\n */\nfunction removeWhiteSpaceNodes(node) {\n for (let n = 0; n < node.childNodes.length; n++) {\n const child = node.childNodes[n]\n if (\n child.nodeType === 8 ||\n (child.nodeType === 3 && !/\\S/.test(child.nodeValue))\n ) {\n node.removeChild(child)\n n--\n } else if (child.nodeType === 1) {\n removeWhiteSpaceNodes(child)\n }\n }\n}\n\n/**\n * Create a virtual node represeting a DOM element and its children.\n * @param {Element} element\n * @return {VNode} VNode\n */\nexport function hydrate(element) {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n }\n // Clean node before using:\n removeWhiteSpaceNodes(element)\n\n return element.nodeType === TEXT_NODE\n ? createTextVNode(element.nodeValue, element)\n : createVNode(\n element.nodeName.toLowerCase(),\n EMPTY_OBJECT,\n EMPTY_ARRAY.map.call(element.childNodes, hydrate),\n element,\n null,\n RECYCLED_NODE\n )\n}\n","import { createVNode, createTextVNode } from './vnode'\nimport { ELEMENT_NODE } from './constants'\n\n/**\n * Creates a virtual node representing a node or text node to be created.\n * @typedef {import('./vnode').VNode} VNode\n * @param {string | Function} type\n * @param {Object.<string, any>} [props]\n * @return {VNode}\n */\nexport function h(type, props, ...children) {\n props = props || {}\n let node\n const tempBox = []\n const childNodes = []\n let length = children.length\n const key = props.key\n\n while (length-- > 0) tempBox.push(children[length])\n\n if (props.children) {\n if (tempBox.length <= 0) {\n tempBox.push(props.children)\n }\n delete props.children\n }\n\n while (tempBox.length > 0) {\n if (Array.isArray((node = tempBox.pop()))) {\n let length = node.length\n while (length-- > 0) {\n tempBox.push(node[length])\n }\n } else if (node === false || node === true || node == null) {\n } else {\n childNodes.push(typeof node === 'object' ? node : createTextVNode(node))\n }\n }\n\n if (typeof type === 'function') {\n return type(props, (props.children = childNodes))\n } else {\n return createVNode(type, props, childNodes, null, key, ELEMENT_NODE)\n }\n}\n","/**\n * Combine two objects, merging the second into the first. Any properties already existing in the first will be replaced by those of the second. Any properties in the second not in the first will be added to it.\n * This does a deep clone. Sub arrays will be cloned. If arrays consist of objects, those will be cloned. Functions will also be cloned. This also support Maps and Sets.\n * Passing in just one object will return a deep clone of it.\n *\n * @param {Object.<string, any>[]} objects One or more objects to use for merging.\n * @return {Object.<string, any>} Object.<string, any>\n */\n\nexport function mergeObjects(...objects) {\n const FIRST_ARGUMENT = 0\n // Add empty array or object to arguments to ensure unique clone:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n objects.unshift([])\n } else {\n objects.unshift({})\n }\n\n /**\n * Create a clone of an object or array.\n * @param {*} object The object to clone.\n * @return {Object<string, any>} Object<string, any>\n */\n\n function createClone(object, hash = new WeakMap()) {\n // Deal with primitive types:\n if (Object(object) !== object) return object\n // Deal with cyclic references:\n if (hash.has(object)) return hash.get(object)\n const result =\n object instanceof Date\n ? new Date(object)\n : object instanceof RegExp\n ? new RegExp(object.source, object.flags)\n : object.constructor\n ? new object.constructor()\n : Object.create(null)\n hash.set(object, result)\n if (object instanceof Map) {\n Array.from(object, ([key, val]) =>\n result.set(key, createClone(val, hash))\n )\n }\n if (object instanceof Set) {\n Array.from(object, val => result.add(createClone(val, hash)))\n }\n return Object.assign(\n result,\n ...Object.keys(object).map(key => ({\n [key]: createClone(object[key], hash)\n }))\n )\n }\n // Return cloned copy of merged objects:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n return objects.reduce((a, b) => Array.prototype.concat(a, createClone(b)))\n } else if (typeof objects[FIRST_ARGUMENT] === 'object') {\n return objects.reduce((a, b) => Object.assign(a, createClone(b)))\n }\n}\n\nexport const cloneObject = object => mergeObjects(object)\nexport const clone = object => mergeObjects(object)\n","import {\n RECYCLED_NODE,\n TEXT_NODE,\n XLINK_NS,\n SVG_NS,\n LIFECYCLE\n} from './constants'\nimport { mergeObjects } from '@composi/merge-objects'\n\n/**\n * Event proxy for inline events.\n * @param {Event} event\n * @return {any} any\n */\nfunction eventProxy(event) {\n return event.currentTarget['events'][event.type](event)\n}\n\n/**\n * Get the key value of a virtual node.\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} vnode\n * @return {string | number | null}\n */\nfunction getKey(vnode) {\n return vnode == null ? null : vnode.key\n}\n\n/**\n * Create a map of keyed nodes.\n * @typedef {import('./vnode').Children} Children\n * @param {Children} children\n * @param {number} startCount\n * @param {number} end\n * @return {Object.<string, any>} Object.<string, any>\n */\nfunction createKeyMap(children, startCount, end) {\n const out = {}\n let key\n let vnode\n\n while (startCount <= end) {\n if ((key = (vnode = children[startCount]).key) != null) {\n out[key] = vnode\n }\n startCount++\n }\n\n return out\n}\n\n/**\n * Update the properties and attributes of a VNode based on new data.\n * @param {Element} element\n * @param {string} prop\n * @param {any} oldValue\n * @param {any} newValue\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction setProp(element, prop, oldValue, newValue, isSVG) {\n if (prop === 'key') {\n return\n } else if (prop === 'style' && typeof newValue === 'object') {\n for (let i in mergeObjects(oldValue, newValue)) {\n const style = newValue == null || newValue[i] == null ? '' : newValue[i]\n if (i[0] === '-') {\n element[prop].setProperty(i, style)\n } else {\n element[prop][i] = style\n }\n }\n } else {\n if (prop[0] === 'o' && prop[1] === 'n') {\n prop = prop.slice(2).toLowerCase()\n\n if (!element['events']) element['events'] = {}\n\n element['events'][prop] = newValue\n\n if (newValue == null) {\n element.removeEventListener(prop, eventProxy)\n } else if (oldValue == null) {\n element.addEventListener(prop, eventProxy)\n }\n } else {\n let nullOrFalse = newValue == null || newValue === false\n\n if (\n prop !== 'list' &&\n prop !== 'form' &&\n prop !== 'type' &&\n prop !== 'draggable' &&\n prop !== 'spellcheck' &&\n prop in element &&\n !isSVG\n ) {\n element[prop] = newValue == null ? '' : newValue\n } else if (nullOrFalse) {\n element.removeAttribute(prop)\n } else {\n if (prop === 'xlink-href' || prop === 'xlinkHref') {\n element.setAttributeNS(XLINK_NS, 'href', newValue)\n element.setAttribute('href', newValue)\n } else {\n element.setAttribute(prop, newValue)\n }\n }\n }\n }\n}\n\n/**\n * Create an element, either node or text, from a VNode.\n * @typedef {Function[]} Lifecycle\n * @param {VNode} vnode\n * @param {boolean} [isSVG]\n * @return {Element} Element\n */\nfunction createElement(vnode, isSVG) {\n let element\n if (vnode.flag === TEXT_NODE) {\n element = document.createTextNode(/** @type {string} */ (vnode.type))\n } else {\n if ((isSVG = isSVG || vnode.type === 'svg')) {\n element = document.createElementNS(\n SVG_NS,\n /** @type {string} */ (vnode.type)\n )\n } else {\n element = document.createElement(/** @type {string} */ (vnode.type))\n }\n }\n\n const props = vnode.props\n if (props['onmount']) {\n LIFECYCLE.push(function() {\n props['onmount'](element)\n })\n }\n let idx = 0\n const length = vnode.children.length\n while (idx < length) {\n element.appendChild(createElement(vnode.children[idx], isSVG))\n idx++\n }\n\n for (let prop in props) {\n setProp(/** @type {Element} */ (element), prop, null, props[prop], isSVG)\n }\n\n return (vnode.element = /** @type {Element} */ (element))\n}\n\n/**\n * Remove children from a node.\n * @param {VNode} vnode\n * @return {Element}\n */\nfunction removeChildren(vnode) {\n let idx = 0\n const length = vnode.children.length\n while (idx < length) {\n removeChildren(vnode.children[idx])\n idx++\n }\n\n return vnode.element\n}\n\n/**\n * Remove an element from the DOM.\n * @param {Element} parent\n * @param {VNode} vnode\n * @return {void} undefined\n */\nfunction removeElement(parent, vnode) {\n const done = function() {\n parent.removeChild(removeChildren(vnode))\n }\n\n const cb = vnode.props && vnode.props['onunmount']\n if (cb != null) {\n cb(vnode.element, done)\n } else {\n done()\n }\n}\n\n/**\n * Update an element based on new prop values.\n * @typedef {import('./vnode').Props} Props\n * @param {Element} element\n * @param {Props} oldProps\n * @param {Props} newProps\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction updateElement(element, oldProps, newProps, isSVG) {\n for (let prop in mergeObjects(oldProps, newProps)) {\n if (\n (prop === 'value' || prop === 'checked' || prop === 'selected'\n ? element[prop]\n : oldProps[prop]) !== newProps[prop]\n ) {\n setProp(element, prop, oldProps[prop], newProps[prop], isSVG)\n }\n }\n\n const cb =\n element['vnode'] && element['vnode'].type === RECYCLED_NODE\n ? newProps['onmount']\n : newProps['onupdate']\n if (cb != null) {\n if (newProps['onmount']) {\n LIFECYCLE.push(function() {\n cb(element)\n })\n } else {\n LIFECYCLE.push(function() {\n cb(element, oldProps, newProps)\n })\n }\n }\n}\n\n/**\n * Patch an element based on differences between its old VNode and its new one.\n * @param {Element} parent\n * @param {Element} element\n * @param {VNode} oldVNode\n * @param {VNode} newVNode\n * @param {boolean} [isSVG]\n * @return {VNode}\n */\nfunction patchElement(parent, element, oldVNode, newVNode, isSVG) {\n if (parent['previousVNode'] && newVNode === parent['previousVNode']) {\n } else if (\n oldVNode != null &&\n oldVNode.flag === TEXT_NODE &&\n newVNode.flag === TEXT_NODE\n ) {\n if (oldVNode.type !== newVNode.type) {\n element.nodeValue = /** @type {any} */ (newVNode.type)\n }\n } else if (oldVNode == null || oldVNode.type !== newVNode.type) {\n const newElement = parent.insertBefore(\n createElement(newVNode, isSVG),\n element\n )\n\n if (oldVNode != null) removeElement(parent, oldVNode)\n\n element = newElement\n } else {\n updateElement(\n element,\n oldVNode.props,\n newVNode.props,\n (isSVG = isSVG || newVNode.type === 'svg')\n )\n\n let savedNode\n let childNode\n\n let lastKey\n let oldVNodeChildren = oldVNode.children\n let oldVNodeChildStart = 0\n let oldVNodeChildEnd = oldVNodeChildren.length - 1\n\n let nextKey\n const newVNodeChildren = newVNode.children\n let newVNodeChildStart = 0\n let newVNodeChildEnd = newVNodeChildren.length - 1\n\n while (\n newVNodeChildStart <= newVNodeChildEnd &&\n oldVNodeChildStart <= oldVNodeChildEnd\n ) {\n lastKey = getKey(oldVNodeChildren[oldVNodeChildStart])\n nextKey = getKey(newVNodeChildren[newVNodeChildStart])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n oldVNodeChildren[oldVNodeChildStart].element,\n oldVNodeChildren[oldVNodeChildStart],\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n\n oldVNodeChildStart++\n newVNodeChildStart++\n }\n\n while (\n newVNodeChildStart <= newVNodeChildEnd &&\n oldVNodeChildStart <= oldVNodeChildEnd\n ) {\n lastKey = getKey(oldVNodeChildren[oldVNodeChildEnd])\n nextKey = getKey(newVNodeChildren[newVNodeChildEnd])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n oldVNodeChildren[oldVNodeChildEnd].element,\n oldVNodeChildren[oldVNodeChildEnd],\n newVNodeChildren[newVNodeChildEnd],\n isSVG\n )\n\n oldVNodeChildEnd--\n newVNodeChildEnd--\n }\n\n if (oldVNodeChildStart > oldVNodeChildEnd) {\n while (newVNodeChildStart <= newVNodeChildEnd) {\n element.insertBefore(\n createElement(newVNodeChildren[newVNodeChildStart++], isSVG),\n (childNode = oldVNodeChildren[oldVNodeChildStart]) &&\n childNode.element\n )\n }\n } else if (newVNodeChildStart > newVNodeChildEnd) {\n while (oldVNodeChildStart <= oldVNodeChildEnd) {\n removeElement(element, oldVNodeChildren[oldVNodeChildStart++])\n }\n } else {\n const lastKeyed = createKeyMap(\n oldVNodeChildren,\n oldVNodeChildStart,\n oldVNodeChildEnd\n )\n const nextKeyed = {}\n\n while (newVNodeChildStart <= newVNodeChildEnd) {\n lastKey = getKey((childNode = oldVNodeChildren[oldVNodeChildStart]))\n nextKey = getKey(newVNodeChildren[newVNodeChildStart])\n\n if (\n nextKeyed[lastKey] ||\n (nextKey != null &&\n nextKey === getKey(oldVNodeChildren[oldVNodeChildStart + 1]))\n ) {\n if (lastKey == null) {\n removeElement(element, childNode)\n }\n oldVNodeChildStart++\n continue\n }\n\n if (nextKey == null || oldVNode.flag === RECYCLED_NODE) {\n if (lastKey == null) {\n patchElement(\n element,\n childNode && childNode.element,\n childNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n newVNodeChildStart++\n }\n oldVNodeChildStart++\n } else {\n if (lastKey === nextKey) {\n patchElement(\n element,\n childNode.element,\n childNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n nextKeyed[nextKey] = true\n oldVNodeChildStart++\n } else {\n if ((savedNode = lastKeyed[nextKey]) != null) {\n patchElement(\n element,\n element.insertBefore(\n savedNode.element,\n childNode && childNode.element\n ),\n savedNode,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n nextKeyed[nextKey] = true\n } else {\n patchElement(\n element,\n childNode && childNode.element,\n null,\n newVNodeChildren[newVNodeChildStart],\n isSVG\n )\n }\n }\n newVNodeChildStart++\n }\n }\n\n while (oldVNodeChildStart <= oldVNodeChildEnd) {\n if (\n getKey((childNode = oldVNodeChildren[oldVNodeChildStart++])) == null\n ) {\n removeElement(element, childNode)\n }\n }\n\n for (let key in lastKeyed) {\n if (nextKeyed[key] == null) {\n removeElement(element, lastKeyed[key])\n }\n }\n }\n }\n\n if (element) {\n newVNode.element = element\n }\n return newVNode\n}\n\n/**\n * Class to throw error message when attempting to insert Fragement tag directly into DOM.\n * @return {string} message\n */\nexport class FragmentError {\n constructor() {\n this.message = 'Cannot insert Fragment tag directly into DOM.'\n this.toString = function() {\n return this.message\n }\n }\n}\n\n/**\n * Function to either mount an element the first time or patch it in place. This behavior depends on the value of the old VNode. If it is null, a new element will be created, otherwise it compares the new VNode with the old one and patches it.\n * @param {Element | string} container\n * @param {VNode} newVNode\n * @param {VNode} [oldVNode]\n * @return {VNode} VNode\n */\nexport function patch(oldVNode, newVNode, container) {\n if (typeof container === 'string') {\n container = document.querySelector(container)\n }\n\n if (Array.isArray(newVNode)) throw new FragmentError()\n patchElement(container, oldVNode && oldVNode.element, oldVNode, newVNode)\n\n if (newVNode !== oldVNode) {\n while (LIFECYCLE.length > 0) LIFECYCLE.pop()()\n }\n\n return newVNode\n}\n","import { patch } from './vdom'\nimport { hydrate } from './vnode'\nimport { clone } from '@composi/merge-objects'\n\n/**\n * Render a functional component. The first argument is the component to render. This can be either a JSX tag or an `h` function. The second argument is the container to render in. An optional third argument is an element in the document loaded from the server. This will be hydrated with the component provided to render. This third argument can be a DOM referece for that element, or a valid string selector for it.\n * @example\n *\n * ```\n * // Render Title tag into section:\n * render(<Title message='Hello World!'/>, 'section')\n * // Update the title component 5 seconds later:\n * setTimeout(() => {\n * render(<Title message='Hello Everyone!'/>, 'section')\n * }, 5000)\n * ```\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} VNode\n * @param {Element | string} container\n * @param {Element | string} [hydrateThis]\n * @return {void} undefined\n */\nexport function render(VNode, container, hydrateThis) {\n if (typeof container === 'string') {\n container = document.querySelector(container)\n } else {\n container = container\n }\n if (!container) {\n console.error(\n '@composi/core Error: You need to provide a valid container to render the component in. Check the element or selector you provided and make sure that it exists in the DOM before trying to render.'\n )\n console.error(\n `@composi/core Message: The container you provided was \"${container}\"`\n )\n return\n }\n let oldVNode\n let previousVNode = clone(VNode)\n if (hydrateThis) {\n if (typeof hydrateThis === 'string') {\n hydrateThis = document.querySelector(hydrateThis)\n }\n // If user tries to hydrate already rendered component,\n // use its 'vnode' property,\n // otherwise hydrate it.\n oldVNode = (container && container['vnode']) || hydrate(hydrateThis)\n } else {\n oldVNode = container && container['vnode']\n }\n const vnode = patch(oldVNode, VNode, container)\n container['vnode'] = vnode\n container['previousVNode'] = previousVNode\n}\n","/**\n * The @composi/runtime.\n * @example\n *\n * ```\n * // Create a runtime program\n * const program = {\n * // Define state:\n * init() {\n * return [{count: 0}]\n * },\n * // Define view to render.\n * // Notice event to send message 'incr'.\n * view(state, send) {\n * return render(<div onclick={send('incr')}>The count is: {state.count}</div>, document.body)\n * },\n * // Define action to update state:\n * update(state, msg) {\n * if (msg === 'incr') {\n * return [state.count++]\n * }\n * }\n * }\n * // Run the program:\n * run(program)\n * ```\n * @typedef {any} State - type any.\n * @typedef {Function} Effect - A function to execute.\n * @typedef {Object<string, any>} Program A program to run.\n * @prop {Function} Program.init\n * @prop {Function} Program.update\n * @prop {Function} Program.view\n * @prop {Function} [Program.subscriptions]\n * @prop {Function} [Program.subs] Shortcut for subscriptions.\n * @prop {Function} [Program.done]\n * @param {Program} program A program to run with four methods: `init`, `view`, `update` and `subscriptions`.\n * @return {() => void} Function to terminate runtime.\n */\nexport function run(program) {\n const update = program.update\n const view = program.view\n const subscriptions = program.subscriptions || program.subs\n const done = program.done\n let state, effect\n let isRunning = true\n let isFirstRun = false\n const getState = () => state\n\n /**\n * Send a message.\n * @param {any} message A message of any type.\n * @return {void} undefined\n */\n function send(message) {\n if (isRunning) {\n updateView(update(state, message, send))\n }\n }\n\n /**\n * Expose send as static function on program object.\n * This is to let you send messages to the program\n * from other contexts, such as in a @composi/router action.\n */\n program['send'] = send\n\n /**\n * Handle changes to state and executing effects.\n * @param {any[]} update\n * @return {void} undefined\n */\n function updateView(update) {\n let sub\n let init = program.init()\n if (update) {\n ;[state, effect] = update\n } else if (init && init.length) {\n ;[state, effect] = init\n if (subscriptions && !isFirstRun) {\n sub = subscriptions(getState, send)\n if (typeof sub === 'function') sub(getState, send)\n isFirstRun = true\n }\n } else {\n state = []\n }\n if (effect) {\n effect(state, send)\n }\n view(state, send)\n }\n\n updateView(state)\n\n /**\n * Function to end runtime.\n * @return {void} undefined\n */\n return () => {\n if (isRunning) {\n isRunning = false\n if (done) {\n done(state)\n }\n }\n }\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * Create a union of string tags.\n * @param {string[]} types\n */\nfunction createUnion(types) {\n const variants = Object.create(null)\n let checkTag = x => x && x.type\n\n const matcher = (handlers, catchAll) => {\n return (tag, context) => {\n const tagType = checkTag(tag)\n const match = hasOwnProperty.call(handlers, tagType) && handlers[tagType]\n return match ? match(tag.data, context) : catchAll(context)\n }\n }\n\n function match(tag, handlers, catchAll) {\n return matcher(handlers, catchAll)(tag)\n }\n\n let idx = 0\n while (idx < types.length) {\n const type = types[idx]\n variants[type] = data => ({ type, data })\n idx++\n }\n\n return { variants, match }\n}\n\n/**\n * Create a union of types for matching up with functions.\n * @param {...string} types\n */\nexport function union(...types) {\n const { variants, match } = createUnion(types)\n variants.match = match\n return variants\n}\n","/**\n * Function to batch effects together.\n * @param {...Function} effects\n * @return {Function} Function\n */\nexport const batchEffects = (...effects) => (state, send) =>\n effects.map(effect => effect && effect(state, send))\n","/**\n * Returns a group of sibling elements for inclusion in another JSX tag.\n * @typedef {import('./vnode').Props} Props\n * @typedef {import('./vnode').Children} Children\n * @param {Props} props\n * @return {Children} children\n */\n/**\n * A tag to enable returning sibling elements. This is useful for returning list items to render in a list or table cells to render in a table row.\n * @example\n *\n * ```\n * <Fragment>\n * <li>A</li>\n * <li>B</li>\n * <li>C</li>\n * </Fragment>\n ```\n * Or functionally:\n * ```\n * Fragment(null, [\n * h('li', {}, 'A'),\n * h('li', {}, 'B'),\n * h('li', {}, 'C')\n * ])\n ```\n * @param {Object} [props] When using Fragment as a function, props is the first argument. Provide either null or {} as the value for props.\n * @param {Children} [children] The siblings to return with the Fragment. This will be an array of sibling elements.\n * @return {VNode[]} An array of virtual nodes.\n */\nexport const Fragment = (props, children) =>\n Array.isArray(props) && !children ? props : children\n"],"names":["RECYCLED_NODE","ELEMENT_NODE","TEXT_NODE","XLINK_NS","SVG_NS","EMPTY_OBJECT","EMPTY_ARRAY","LIFECYCLE","createVNode","type","props","children","element","key","flag","createTextVNode","text","removeWhiteSpaceNodes","node","child","n","childNodes","length","nodeType","test","nodeValue","removeChild","hydrate","document","querySelector","nodeName","toLowerCase","map","call","h","tempBox","push","Array","isArray","pop","mergeObjects","objects","createClone","object","hash","WeakMap","Object","has","get","result","Date","RegExp","source","flags","constructor","create","set","assign","keys","unshift","reduce","a","b","prototype","concat","clone","eventProxy","event","currentTarget","getKey","vnode","createKeyMap","startCount","end","out","setProp","prop","oldValue","newValue","isSVG","i","style","setProperty","slice","removeEventListener","addEventListener","removeAttribute","setAttributeNS","setAttribute","createElement","createTextNode","createElementNS","idx","appendChild","removeChildren","removeElement","parent","done","cb","updateElement","oldProps","newProps","patchElement","oldVNode","newVNode","newElement","insertBefore","savedNode","childNode","lastKey","nextKey","oldVNodeChildren","oldVNodeChildStart","oldVNodeChildEnd","newVNodeChildren","newVNodeChildStart","newVNodeChildEnd","lastKeyed","nextKeyed","FragmentError","message","toString","patch","container","render","VNode","hydrateThis","console","error","previousVNode","run","program","send","isRunning","updateView","update","state","sub","init","effect","subscriptions","isFirstRun","getState","view","subs","hasOwnProperty","createUnion","types","variants","checkTag","x","matcher","handlers","catchAll","tag","context","tagType","match","data","union","batchEffects","effects","Fragment"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e0fb07f..cc06bb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@composi/core", - "version": "1.6.0", + "version": "1.6.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 651fff1..c905661 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@composi/core", - "version": "1.6.0", + "version": "1.6.1", "description": "A JavaScript library for creating websites, PWAs and hybrid apps.", "main": "src/index.js", "module": "dist/composi-core.mjs", diff --git a/src/render.js b/src/render.js index e922119..0a1b340 100755 --- a/src/render.js +++ b/src/render.js @@ -1,5 +1,6 @@ import { patch } from './vdom' import { hydrate } from './vnode' +import { clone } from '@composi/merge-objects' /** * Render a functional component. The first argument is the component to render. This can be either a JSX tag or an `h` function. The second argument is the container to render in. An optional third argument is an element in the document loaded from the server. This will be hydrated with the component provided to render. This third argument can be a DOM referece for that element, or a valid string selector for it. @@ -35,6 +36,7 @@ export function render(VNode, container, hydrateThis) { return } let oldVNode + let previousVNode = clone(VNode) if (hydrateThis) { if (typeof hydrateThis === 'string') { hydrateThis = document.querySelector(hydrateThis) @@ -48,4 +50,5 @@ export function render(VNode, container, hydrateThis) { } const vnode = patch(oldVNode, VNode, container) container['vnode'] = vnode + container['previousVNode'] = previousVNode } diff --git a/src/vdom.js b/src/vdom.js index 4a900a0..ef86a87 100755 --- a/src/vdom.js +++ b/src/vdom.js @@ -234,7 +234,7 @@ function updateElement(element, oldProps, newProps, isSVG) { * @return {VNode} */ function patchElement(parent, element, oldVNode, newVNode, isSVG) { - if (newVNode === oldVNode) { + if (parent['previousVNode'] && newVNode === parent['previousVNode']) { } else if ( oldVNode != null && oldVNode.flag === TEXT_NODE &&