@ryupold/vode 1.3.1 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,28 +4,36 @@ on:
4
4
  release:
5
5
  types: published
6
6
  branches:
7
- - 'main'
7
+ - "main"
8
+
9
+ permissions:
10
+ id-token: write # Required for OIDC
11
+ contents: read
8
12
 
9
13
  jobs:
10
- test-build-and-publish-to-npm:
14
+ build-and-publish-to-npm:
11
15
  runs-on: ubuntu-latest
12
- permissions:
13
- contents: read
14
- id-token: write
15
16
  steps:
16
17
  - uses: actions/checkout@v4
18
+ - uses: actions/setup-node@v6
19
+ with:
20
+ registry-url: "https://registry.npmjs.org"
17
21
  - uses: oven-sh/setup-bun@v2
18
- - run: bun install
22
+ - run: npm ci
19
23
  - run: bun run release
20
24
  - run: |
21
- echo "releasing to npm..."
22
- bun publish --provenance --access public | grep "+ @ryupold/vode@" > version.txt
25
+ npm publish --access public | grep "📦 @ryupold/vode@" > version.txt
23
26
  NEWVERSION=$(cat version.txt)
24
27
  if [[ $NEWVERSION == *"vode"* ]]; then
25
28
  echo "...success: $NEWVERSION"
26
29
  else
27
30
  echo "...failed to publish"
28
31
  fi
29
-
30
32
  env:
31
- NPM_CONFIG_TOKEN: ${{ secrets.NPM_TOKEN }}
33
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
34
+ - uses: actions/setup-node@v6
35
+ with:
36
+ registry-url: "https://npm.pkg.github.com"
37
+ - run: npm publish --access public
38
+ env:
39
+ NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
package/README.md CHANGED
@@ -511,6 +511,65 @@ const CompMathML = (s) =>
511
511
 
512
512
  ### advanced usage
513
513
 
514
+ #### state context
515
+
516
+ The state context utilities can help creating shareable type safe components.
517
+
518
+ ```typescript
519
+
520
+ type Settings = { theme: string, lang: string };
521
+ type StateType = {
522
+ user: {
523
+ profile: { settings: Settings }
524
+ }
525
+ };
526
+
527
+ const state = createState<StateType>({
528
+ user: {
529
+ profile: {
530
+ settings: { theme: 'dark', lang: 'en' }
531
+ }
532
+ }
533
+ });
534
+
535
+ // Create a context for the nested settings
536
+ const settingsCtx = new KeyStateContext<typeof state, Settings>(state, 'user.profile.settings');
537
+
538
+ const element = document.getElementById('app')!;
539
+ app(element, state,
540
+ (s) => [DIV,
541
+ [H1, "Settings"],
542
+ SettingsForm(settingsCtx),
543
+ ]
544
+ );
545
+
546
+ function SettingsForm(ctx: SubStateContext<Settings>) {
547
+ const settings = ctx.get()!; // { theme: 'dark', lang: 'en' }
548
+
549
+ return <Vode>[FORM,
550
+ [P, "current theme:", settings.theme],
551
+ [SELECT,
552
+ {
553
+ class: 'theme-select',
554
+ onchange: (s: PatchableState, e: Event) => ctx.patch({ theme: (<HTMLSelectElement>e.target).value }),
555
+ },
556
+ [OPTION, { value: 'light', selected: settings.theme === 'light' ? '' : null }, 'light'],
557
+ [OPTION, { value: 'dark', selected: settings.theme === 'dark' ? '' : null }, 'dark'],
558
+ ],
559
+ [P, "current lang:", settings.lang],
560
+ [SELECT, {
561
+ class: 'lang-select',
562
+ onchange: (s: PatchableState, e: Event) => ctx.patch({ lang: (<HTMLSelectElement>e.target).value }),
563
+ },
564
+ [OPTION, { value: 'en', selected: settings.lang === 'en' ? '' : null }, 'en'],
565
+ [OPTION, { value: 'de', selected: settings.lang === 'de' ? '' : null }, 'de'],
566
+ [OPTION, { value: 'es', selected: settings.lang === 'es' ? '' : null }, 'es'],
567
+ [OPTION, { value: 'fr', selected: settings.lang === 'fr' ? '' : null }, 'fr'],
568
+ ],
569
+ ];
570
+ }
571
+ ```
572
+
514
573
  #### isolated state
515
574
  You can have multiple isolated vode app instances on a page, each with its own state and render function.
516
575
  The returned patch function from `app` can be used to synchronize the state between them.
@@ -574,13 +633,19 @@ console.log(appNode._vode.stats);
574
633
  // number of patches applied to the state overall
575
634
  patchCount: 100,
576
635
  // number of render-patches (objects) overall
577
- renderPatchCount: 50,
636
+ syncRenderPatchCount: 55,
637
+ // number of view transition render-patches (arrays) overall
638
+ asyncRenderPatchCount: 3,
578
639
  // number of renders performed overall
579
- renderCount: 40,
580
- // number of active (async) running patches (effects)
581
- liveEffectCount: 0,
640
+ syncRenderCount: 43,
641
+ // number of renders performed overall
642
+ asyncRenderCount: 2,
582
643
  // time the last render took in milliseconds
583
- lastRenderTime: 1,
644
+ lastSyncRenderTime: 2,
645
+ // time the last view transition took in milliseconds
646
+ lastAsyncRenderTime: 21,
647
+ // number of active async running effects (function based patches)
648
+ liveEffectCount: 0,
584
649
  }
585
650
  ```
586
651
 
package/dist/vode.js CHANGED
@@ -458,13 +458,17 @@ var V = (() => {
458
458
  return null;
459
459
  }
460
460
  function childCount(vode2) {
461
- return vode2.length - childrenStart(vode2);
461
+ const start = childrenStart(vode2);
462
+ if (start < 0) return 0;
463
+ return vode2.length - start;
462
464
  }
463
465
  function child(vode2, index) {
464
- return vode2[index + childrenStart(vode2)];
466
+ const start = childrenStart(vode2);
467
+ if (start > 0) return vode2[index + start];
468
+ else return void 0;
465
469
  }
466
470
  function childrenStart(vode2) {
467
- return props(vode2) ? 2 : 1;
471
+ return props(vode2) ? vode2.length > 2 ? 2 : -1 : Array.isArray(vode2) && vode2.length > 1 ? 1 : -1;
468
472
  }
469
473
  function mergeState(target, source, allowDeletion) {
470
474
  if (!source) return target;
package/dist/vode.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";var V=(()=>{var N=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var G=(e,n)=>{for(var a in n)N(e,a,{get:n[a],enumerable:!0})},K=(e,n,a,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of j(n))!U.call(e,t)&&t!==a&&N(e,t,{get:()=>n[t],enumerable:!(s=H(n,t))||s.enumerable});return e};var B=e=>K(N({},"__esModule",{value:!0}),e);var Kn={};G(Kn,{A:()=>Z,ABBR:()=>tt,ADDRESS:()=>et,ANIMATE:()=>no,ANIMATEMOTION:()=>so,ANIMATETRANSFORM:()=>ao,ANNOTATION:()=>ln,ANNOTATION_XML:()=>Sn,AREA:()=>ot,ARTICLE:()=>nt,ASIDE:()=>st,AUDIO:()=>at,B:()=>rt,BASE:()=>ct,BDI:()=>it,BDO:()=>pt,BLOCKQUOTE:()=>lt,BODY:()=>St,BR:()=>Tt,BUTTON:()=>ft,CANVAS:()=>dt,CAPTION:()=>ut,CIRCLE:()=>ro,CITE:()=>yt,CLIPPATH:()=>co,CODE:()=>gt,COL:()=>xt,COLGROUP:()=>ht,DATA:()=>mt,DATALIST:()=>Et,DD:()=>bt,DEFS:()=>io,DEL:()=>Pt,DESC:()=>po,DETAILS:()=>At,DFN:()=>Ct,DIALOG:()=>Mt,DIV:()=>Nt,DL:()=>Rt,DT:()=>Ot,DelegateStateContext:()=>L,ELLIPSE:()=>lo,EM:()=>Dt,EMBED:()=>vt,FEBLEND:()=>So,FECOLORMATRIX:()=>To,FECOMPONENTTRANSFER:()=>fo,FECOMPOSITE:()=>uo,FECONVOLVEMATRIX:()=>yo,FEDIFFUSELIGHTING:()=>go,FEDISPLACEMENTMAP:()=>xo,FEDISTANTLIGHT:()=>ho,FEDROPSHADOW:()=>mo,FEFLOOD:()=>Eo,FEFUNCA:()=>bo,FEFUNCB:()=>Po,FEFUNCG:()=>Ao,FEFUNCR:()=>Co,FEGAUSSIANBLUR:()=>Mo,FEIMAGE:()=>No,FEMERGE:()=>Ro,FEMERGENODE:()=>Oo,FEMORPHOLOGY:()=>Do,FEOFFSET:()=>vo,FEPOINTLIGHT:()=>Lo,FESPECULARLIGHTING:()=>Io,FESPOTLIGHT:()=>Fo,FETILE:()=>Vo,FETURBULENCE:()=>ko,FIELDSET:()=>Lt,FIGCAPTION:()=>It,FIGURE:()=>Ft,FILTER:()=>Ho,FOOTER:()=>Vt,FOREIGNOBJECT:()=>jo,FORM:()=>kt,G:()=>Uo,H1:()=>Ht,H2:()=>jt,H3:()=>Ut,H4:()=>Gt,H5:()=>Kt,H6:()=>Bt,HEAD:()=>_t,HEADER:()=>qt,HGROUP:()=>Xt,HR:()=>wt,HTML:()=>$t,I:()=>Yt,IFRAME:()=>Wt,IMAGE:()=>Go,IMG:()=>Jt,INPUT:()=>Qt,INS:()=>zt,KBD:()=>Zt,KeyStateContext:()=>v,LABEL:()=>te,LEGEND:()=>ee,LI:()=>oe,LINE:()=>Ko,LINEARGRADIENT:()=>Bo,LINK:()=>ne,MACTION:()=>Tn,MAIN:()=>se,MAP:()=>ae,MARK:()=>re,MARKER:()=>_o,MASK:()=>qo,MATH:()=>fn,MENU:()=>ce,MERROR:()=>dn,META:()=>ie,METADATA:()=>Xo,METER:()=>pe,MFRAC:()=>un,MI:()=>yn,MMULTISCRIPTS:()=>gn,MN:()=>xn,MO:()=>hn,MOVER:()=>mn,MPADDED:()=>En,MPATH:()=>wo,MPHANTOM:()=>bn,MPRESCRIPTS:()=>Pn,MROOT:()=>An,MROW:()=>Cn,MS:()=>Mn,MSPACE:()=>Nn,MSQRT:()=>Rn,MSTYLE:()=>On,MSUB:()=>Dn,MSUBSUP:()=>vn,MSUP:()=>Ln,MTABLE:()=>In,MTD:()=>Fn,MTEXT:()=>Vn,MTR:()=>kn,MUNDER:()=>Hn,MUNDEROVER:()=>jn,NAV:()=>le,NOSCRIPT:()=>Se,OBJECT:()=>Te,OL:()=>fe,OPTGROUP:()=>de,OPTION:()=>ue,OUTPUT:()=>ye,P:()=>ge,PATH:()=>$o,PATTERN:()=>Yo,PICTURE:()=>xe,POLYGON:()=>Wo,POLYLINE:()=>Jo,PRE:()=>he,PROGRESS:()=>me,Q:()=>Ee,RADIALGRADIENT:()=>Qo,RECT:()=>zo,RP:()=>be,RT:()=>Pe,RUBY:()=>Ae,S:()=>Ce,SAMP:()=>Me,SCRIPT:()=>Ne,SEARCH:()=>Re,SECTION:()=>Oe,SELECT:()=>De,SEMANTICS:()=>Un,SET:()=>Zo,SLOT:()=>ve,SMALL:()=>Le,SOURCE:()=>Ie,SPAN:()=>Fe,STOP:()=>tn,STRONG:()=>Ve,STYLE:()=>ke,SUB:()=>He,SUMMARY:()=>je,SUP:()=>Ue,SVG:()=>en,SWITCH:()=>on,SYMBOL:()=>nn,TABLE:()=>Ge,TBODY:()=>Ke,TD:()=>Be,TEMPLATE:()=>_e,TEXT:()=>sn,TEXTAREA:()=>qe,TEXTPATH:()=>an,TFOOT:()=>Xe,TH:()=>we,THEAD:()=>$e,TIME:()=>Ye,TITLE:()=>We,TR:()=>Je,TRACK:()=>Qe,TSPAN:()=>rn,U:()=>ze,UL:()=>Ze,USE:()=>cn,VAR:()=>to,VIDEO:()=>eo,VIEW:()=>pn,WBR:()=>oo,app:()=>q,child:()=>J,childCount:()=>W,children:()=>A,childrenStart:()=>M,createPatch:()=>$,createState:()=>w,globals:()=>h,hydrate:()=>D,memo:()=>X,mergeClass:()=>Gn,props:()=>m,tag:()=>Y,vode:()=>_});var h={currentViewTransition:void 0,requestAnimationFrame:window.requestAnimationFrame?window.requestAnimationFrame.bind(window):(e=>e()),startViewTransition:document.startViewTransition?document.startViewTransition.bind(document):null};function _(e,n,...a){if(!e)throw new Error("first argument to vode() must be a tag name or a vode");return Array.isArray(e)?e:n?[e,n,...a]:[e,...a]}function q(e,n,a,...s){if(!e?.parentElement)throw new Error("first argument to app() must be a valid HTMLElement inside the <html></html> document");if(!n||typeof n!="object")throw new Error("second argument to app() must be a state object");if(typeof a!="function")throw new Error("third argument to app() must be a function that returns a vode");let t={};t.syncRenderer=h.requestAnimationFrame,t.asyncRenderer=h.startViewTransition,t.qSync=null,t.qAsync=null,t.stats={lastSyncRenderTime:0,lastAsyncRenderTime:0,syncRenderCount:0,asyncRenderCount:0,liveEffectCount:0,patchCount:0,syncRenderPatchCount:0,asyncRenderPatchCount:0},Object.defineProperty(n,"patch",{enumerable:!1,configurable:!0,writable:!1,value:async(c,d)=>{if(!(!c||typeof c!="function"&&typeof c!="object"))if(t.stats.patchCount++,c?.next){let S=c;t.stats.liveEffectCount++;try{let x=await S.next();for(;x.done===!1;){t.stats.liveEffectCount++;try{t.patch(x.value,d),x=await S.next()}finally{t.stats.liveEffectCount--}}t.patch(x.value,d)}finally{t.stats.liveEffectCount--}}else if(c.then){t.stats.liveEffectCount++;try{let S=await c;t.patch(S,d)}finally{t.stats.liveEffectCount--}}else if(Array.isArray(c))if(c.length>0)for(let S of c)t.patch(S,!document.hidden&&!!t.asyncRenderer);else t.qSync=g(t.qSync||{},t.qAsync,!1),t.qAsync=null,h.currentViewTransition?.skipTransition(),t.stats.syncRenderPatchCount++,t.renderSync();else typeof c=="function"?t.patch(c(t.state),d):d?(t.stats.asyncRenderPatchCount++,t.qAsync=g(t.qAsync||{},c,!1),await t.renderAsync()):(t.stats.syncRenderPatchCount++,t.qSync=g(t.qSync||{},c,!1),t.renderSync())}});function o(c){let d=Date.now(),S=a(t.state);t.vode=C(t.state,t.patch,e.parentElement,0,t.vode,S),e.tagName.toUpperCase()!==S[0].toUpperCase()&&(e=t.vode.node,e._vode=t),c||(t.stats.lastSyncRenderTime=Date.now()-d,t.stats.syncRenderCount++,t.isRendering=!1,t.qSync&&t.renderSync())}let r=o.bind(null,!1),l=o.bind(null,!0);Object.defineProperty(t,"renderSync",{enumerable:!1,configurable:!0,writable:!1,value:()=>{t.isRendering||!t.qSync||(t.isRendering=!0,t.state=g(t.state,t.qSync,!0),t.qSync=null,t.syncRenderer(r))}}),Object.defineProperty(t,"renderAsync",{enumerable:!1,configurable:!0,writable:!1,value:async()=>{if(t.isAnimating||!t.qAsync||(await h.currentViewTransition?.updateCallbackDone,t.isAnimating||!t.qAsync||document.hidden))return;t.isAnimating=!0;let c=Date.now();try{t.state=g(t.state,t.qAsync,!0),t.qAsync=null,h.currentViewTransition=t.asyncRenderer(l),await h.currentViewTransition?.updateCallbackDone}finally{t.stats.lastAsyncRenderTime=Date.now()-c,t.stats.asyncRenderCount++,t.isAnimating=!1}t.qAsync&&t.renderAsync()}}),t.patch=n.patch,t.state=n;let u=e;u._vode=t,t.vode=C(n,t.patch,e.parentElement,Array.from(e.parentElement.children).indexOf(e),D(e,!0),a(n));for(let c of s)t.patch(c);return t.patch}function D(e,n){if(e?.nodeType===Node.TEXT_NODE)return e.nodeValue?.trim()!==""?n?e:e.nodeValue:void 0;if(e.nodeType===Node.COMMENT_NODE)return;if(e.nodeType===Node.ELEMENT_NODE){let s=[e.tagName.toLowerCase()];if(n&&(s.node=e),e?.hasAttributes()){let t={},o=e.attributes;for(let r of o)t[r.name]=r.value;s.push(t)}if(e.hasChildNodes()){let t=[];for(let o of e.childNodes){let r=o&&D(o,n);r?s.push(r):o&&n&&t.push(o)}for(let o of t)o.remove()}return s}else return}function X(e,n){if(!e||!Array.isArray(e))throw new Error("first argument to memo() must be an array of values to compare");if(typeof n!="function")throw new Error("second argument to memo() must be a function that returns a vode or props object");return n.__memo=e,n}function w(e){if(!e||typeof e!="object")throw new Error("createState() must be called with a state object");return e}function $(e){return e}function Y(e){return e?Array.isArray(e)?e[0]:typeof e=="string"||e.nodeType===Node.TEXT_NODE?"#text":void 0:void 0}function m(e){if(Array.isArray(e)&&e.length>1&&e[1]&&!Array.isArray(e[1])&&typeof e[1]=="object"&&e[1].nodeType!==Node.TEXT_NODE)return e[1]}function A(e){let n=M(e);return n>0?e.slice(n):null}function W(e){return e.length-M(e)}function J(e,n){return e[n+M(e)]}function M(e){return m(e)?2:1}function g(e,n,a){if(!n)return e;for(let s in n){let t=n[s];if(t&&typeof t=="object"){let o=e[s];o?Array.isArray(t)?e[s]=[...t]:t instanceof Date&&o!==t?e[s]=new Date(t):Array.isArray(o)?e[s]=g({},t,a):typeof o=="object"?g(e[s],t,a):e[s]=g({},t,a):Array.isArray(t)?e[s]=[...t]:t instanceof Date?e[s]=new Date(t):e[s]=g({},t,a)}else t===void 0&&a?delete e[s]:e[s]=t}return e}function C(e,n,a,s,t,o,r){o=R(e,o,t);let l=!o||typeof o=="number"||typeof o=="boolean";if(o===t||!t&&l)return t;let u=t?.nodeType===Node.TEXT_NODE,c=u?t:t?.node;if(l){c?.onUnmount&&n(c.onUnmount(c)),c?.remove();return}let d=!l&&z(o),S=!l&&Q(o),x=!!o&&typeof o!="string"&&!!(o?.node||o?.nodeType===Node.TEXT_NODE);if(!d&&!S&&!x&&!t)throw new Error("Invalid vode: "+typeof o+" "+JSON.stringify(o));if(x&&d?o=o.wholeText:x&&S&&(o=[...o]),u&&d)return c.nodeValue!==o&&(c.nodeValue=o),t;if(d&&(!c||!u)){let T=document.createTextNode(o);return c?(c.onUnmount&&n(c.onUnmount(c)),c.replaceWith(T)):a.childNodes[s]?a.insertBefore(T,a.childNodes[s]):a.appendChild(T),T}if(S&&(!c||u||t[0]!==o[0])){let T=o;1 in T&&(T[1]=R(e,T[1],void 0));let b=m(o);r=b?.xmlns||r;let f=r?document.createElementNS(r,o[0]):document.createElement(o[0]);o.node=f,O(e,n,f,void 0,b),c?(c.onUnmount&&n(c.onUnmount(c)),c.replaceWith(f)):a.childNodes[s]?a.insertBefore(f,a.childNodes[s]):a.appendChild(f);let y=A(o);if(y)for(let p=0;p<y.length;p++){let i=y[p],E=C(e,n,f,p,void 0,i,r);o[b?p+2:p+1]=E}return f.onMount&&n(f.onMount(f)),o}if(!u&&S&&t[0]===o[0]){o.node=c;let T=o,b=t,f=!1;if(T[1]?.__memo){let i=T[1];if(T[1]=R(e,T[1],b[1]),i!==T[1]){let E=m(o);O(e,n,c,m(t),E),f=!!E}}else{let i=m(o);O(e,n,c,m(t),i),f=!!i}let y=A(o),p=A(t);if(y){for(let i=0;i<y.length;i++){let E=y[i],k=p&&p[i],I=C(e,n,c,i,k,E,r);I&&(o[f?i+2:i+1]=I)}for(let i=y.length;p&&i<p.length;i++)p[i]?.node?p[i].node.remove():p[i]?.nodeType===Node.TEXT_NODE&&p[i].remove()}for(let i=y?.length||0;i<p?.length;i++)p[i]?.node?p[i].node.remove():p[i]?.nodeType===Node.TEXT_NODE&&p[i].remove();return o}}function Q(e){return Array.isArray(e)&&e.length>0&&typeof e[0]=="string"}function z(e){return typeof e=="string"||e?.nodeType===Node.TEXT_NODE}function R(e,n,a){if(typeof n!="function")return n;let s=n?.__memo,t=a?.__memo;if(Array.isArray(s)&&Array.isArray(t)&&s.length===t.length){let r=!0;for(let l=0;l<s.length;l++)if(s[l]!==t[l]){r=!1;break}if(r)return a}let o=F(n,e);return typeof o=="object"&&(o.__memo=n?.__memo),o}function F(e,n){return typeof e=="function"?F(e(n),n):e}function O(e,n,a,s,t){if(!(!t&&!s)){if(s)for(let o in s){let r=s[o],l=t?.[o];r!==l&&(t?t[o]=P(e,n,a,o,r,l):P(e,n,a,o,r,void 0))}if(t&&s){for(let o in t)if(!(o in s)){let r=t[o];t[o]=P(e,n,a,o,void 0,r)}}else if(t)for(let o in t){let r=t[o];t[o]=P(e,n,a,o,void 0,r)}}}function P(e,n,a,s,t,o){if(s==="style")if(!o)a.style.cssText="";else if(typeof o=="string")t!==o&&(a.style.cssText=o);else if(t&&typeof t=="object")for(let r in{...t,...o})!t||o[r]!==t[r]?a.style[r]=o[r]:t[r]&&!o[r]&&(a.style[r]=void 0);else for(let r in o)a.style[r]=o[r];else if(s==="class")o?a.setAttribute("class",V(o)):a.removeAttribute("class");else if(s[0]==="o"&&s[1]==="n")if(o){let r=null;if(typeof o=="function"){let l=o;r=u=>n(l(e,u))}else typeof o=="object"&&(r=()=>n(o));a[s]=r}else a[s]=null;else o!=null&&o!==!1?a.setAttribute(s,o):a.removeAttribute(s);return o}function V(e){return typeof e=="string"?e:Array.isArray(e)?e.map(V).join(" "):typeof e=="object"?Object.keys(e).filter(n=>e[n]).join(" "):""}var Z="a",tt="abbr",et="address",ot="area",nt="article",st="aside",at="audio",rt="b",ct="base",it="bdi",pt="bdo",lt="blockquote",St="body",Tt="br",ft="button",dt="canvas",ut="caption",yt="cite",gt="code",xt="col",ht="colgroup",mt="data",Et="datalist",bt="dd",Pt="del",At="details",Ct="dfn",Mt="dialog",Nt="div",Rt="dl",Ot="dt",Dt="em",vt="embed",Lt="fieldset",It="figcaption",Ft="figure",Vt="footer",kt="form",Ht="h1",jt="h2",Ut="h3",Gt="h4",Kt="h5",Bt="h6",_t="head",qt="header",Xt="hgroup",wt="hr",$t="html",Yt="i",Wt="iframe",Jt="img",Qt="input",zt="ins",Zt="kbd",te="label",ee="legend",oe="li",ne="link",se="main",ae="map",re="mark",ce="menu",ie="meta",pe="meter",le="nav",Se="noscript",Te="object",fe="ol",de="optgroup",ue="option",ye="output",ge="p",xe="picture",he="pre",me="progress",Ee="q",be="rp",Pe="rt",Ae="ruby",Ce="s",Me="samp",Ne="script",Re="search",Oe="section",De="select",ve="slot",Le="small",Ie="source",Fe="span",Ve="strong",ke="style",He="sub",je="summary",Ue="sup",Ge="table",Ke="tbody",Be="td",_e="template",qe="textarea",Xe="tfoot",we="th",$e="thead",Ye="time",We="title",Je="tr",Qe="track",ze="u",Ze="ul",to="var",eo="video",oo="wbr",no="animate",so="animateMotion",ao="animateTransform",ro="circle",co="clipPath",io="defs",po="desc",lo="ellipse",So="feBlend",To="feColorMatrix",fo="feComponentTransfer",uo="feComposite",yo="feConvolveMatrix",go="feDiffuseLighting",xo="feDisplacementMap",ho="feDistantLight",mo="feDropShadow",Eo="feFlood",bo="feFuncA",Po="feFuncB",Ao="feFuncG",Co="feFuncR",Mo="feGaussianBlur",No="feImage",Ro="feMerge",Oo="feMergeNode",Do="feMorphology",vo="feOffset",Lo="fePointLight",Io="feSpecularLighting",Fo="feSpotLight",Vo="feTile",ko="feTurbulence",Ho="filter",jo="foreignObject",Uo="g",Go="image",Ko="line",Bo="linearGradient",_o="marker",qo="mask",Xo="metadata",wo="mpath",$o="path",Yo="pattern",Wo="polygon",Jo="polyline",Qo="radialGradient",zo="rect",Zo="set",tn="stop",en="svg",on="switch",nn="symbol",sn="text",an="textPath",rn="tspan",cn="use",pn="view",ln="annotation",Sn="annotation-xml",Tn="maction",fn="math",dn="merror",un="mfrac",yn="mi",gn="mmultiscripts",xn="mn",hn="mo",mn="mover",En="mpadded",bn="mphantom",Pn="mprescripts",An="mroot",Cn="mrow",Mn="ms",Nn="mspace",Rn="msqrt",On="mstyle",Dn="msub",vn="msubsup",Ln="msup",In="mtable",Fn="mtd",Vn="mtext",kn="mtr",Hn="munder",jn="munderover",Un="semantics";function Gn(...e){if(!e||e.length===0)return null;if(e.length===1)return e[0];let n=e[0];for(let a=1;a<e.length;a++){let s=n,t=e[a];if(!s)n=t;else if(t)if(typeof s=="string"&&typeof t=="string"){let o=s.split(" "),r=t.split(" "),l=new Set([...o,...r]);n=Array.from(l).join(" ").trim()}else if(typeof s=="string"&&Array.isArray(t)){let o=new Set([...t,...s.split(" ")]);n=Array.from(o).join(" ").trim()}else if(Array.isArray(s)&&typeof t=="string"){let o=new Set([...s,...t.split(" ")]);n=Array.from(o).join(" ").trim()}else if(Array.isArray(s)&&Array.isArray(t)){let o=new Set([...s,...t]);n=Array.from(o).join(" ").trim()}else if(typeof s=="string"&&typeof t=="object")n={[s]:!0,...t};else if(typeof s=="object"&&typeof t=="string")n={...s,[t]:!0};else if(typeof s=="object"&&typeof t=="object")n={...s,...t};else if(typeof s=="object"&&Array.isArray(t)){let o={...s};for(let r of t)o[r]=!0;n=o}else if(Array.isArray(s)&&typeof t=="object"){let o={};for(let r of s)o[r]=!0;for(let r of Object.keys(t))o[r]=t[r];n=o}else throw new Error(`cannot merge classes of ${s} (${typeof s}) and ${t} (${typeof t})`);else continue}return n}var v=class{constructor(n,a){this.state=n;this.path=a;this.keys=a.split(".")}keys;get(){let n=this.keys,a=this.state?this.state[n[0]]:void 0;for(let s=1;s<n.length&&a;s++)a=a[n[s]];return a}put(n){this.putDeep(n,this.state)}patch(n){if(Array.isArray(n)){let a=[];for(let s of n)a.push(this.createPatch(s));this.state.patch(a)}else this.state.patch(this.createPatch(n))}createPatch(n){let a={};return this.putDeep(n,a),a}putDeep(n,a){let s=this.keys;if(s.length>1){let t=0,o=a[s[t]];for((typeof o!="object"||o===null)&&(a[s[t]]=o={}),t=1;t<s.length-1;t++){let r=o;o=o[s[t]],(typeof o!="object"||o===null)&&(r[s[t]]=o={})}o[s[t]]=n}else typeof a[s[0]]=="object"&&typeof n=="object"?Object.assign(a[s[0]],n):a[s[0]]=n}},L=class{constructor(n,a,s,t){this.state=n;this.get=a;this.put=s;this.patch=t}};return B(Kn);})();
1
+ "use strict";var V=(()=>{var N=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var G=(e,n)=>{for(var a in n)N(e,a,{get:n[a],enumerable:!0})},K=(e,n,a,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of j(n))!U.call(e,t)&&t!==a&&N(e,t,{get:()=>n[t],enumerable:!(s=H(n,t))||s.enumerable});return e};var B=e=>K(N({},"__esModule",{value:!0}),e);var Kn={};G(Kn,{A:()=>Z,ABBR:()=>tt,ADDRESS:()=>et,ANIMATE:()=>no,ANIMATEMOTION:()=>so,ANIMATETRANSFORM:()=>ao,ANNOTATION:()=>ln,ANNOTATION_XML:()=>Sn,AREA:()=>ot,ARTICLE:()=>nt,ASIDE:()=>st,AUDIO:()=>at,B:()=>rt,BASE:()=>ct,BDI:()=>it,BDO:()=>pt,BLOCKQUOTE:()=>lt,BODY:()=>St,BR:()=>Tt,BUTTON:()=>ft,CANVAS:()=>dt,CAPTION:()=>ut,CIRCLE:()=>ro,CITE:()=>yt,CLIPPATH:()=>co,CODE:()=>gt,COL:()=>xt,COLGROUP:()=>ht,DATA:()=>mt,DATALIST:()=>Et,DD:()=>bt,DEFS:()=>io,DEL:()=>Pt,DESC:()=>po,DETAILS:()=>At,DFN:()=>Ct,DIALOG:()=>Mt,DIV:()=>Nt,DL:()=>Rt,DT:()=>Ot,DelegateStateContext:()=>L,ELLIPSE:()=>lo,EM:()=>Dt,EMBED:()=>vt,FEBLEND:()=>So,FECOLORMATRIX:()=>To,FECOMPONENTTRANSFER:()=>fo,FECOMPOSITE:()=>uo,FECONVOLVEMATRIX:()=>yo,FEDIFFUSELIGHTING:()=>go,FEDISPLACEMENTMAP:()=>xo,FEDISTANTLIGHT:()=>ho,FEDROPSHADOW:()=>mo,FEFLOOD:()=>Eo,FEFUNCA:()=>bo,FEFUNCB:()=>Po,FEFUNCG:()=>Ao,FEFUNCR:()=>Co,FEGAUSSIANBLUR:()=>Mo,FEIMAGE:()=>No,FEMERGE:()=>Ro,FEMERGENODE:()=>Oo,FEMORPHOLOGY:()=>Do,FEOFFSET:()=>vo,FEPOINTLIGHT:()=>Lo,FESPECULARLIGHTING:()=>Io,FESPOTLIGHT:()=>Fo,FETILE:()=>Vo,FETURBULENCE:()=>ko,FIELDSET:()=>Lt,FIGCAPTION:()=>It,FIGURE:()=>Ft,FILTER:()=>Ho,FOOTER:()=>Vt,FOREIGNOBJECT:()=>jo,FORM:()=>kt,G:()=>Uo,H1:()=>Ht,H2:()=>jt,H3:()=>Ut,H4:()=>Gt,H5:()=>Kt,H6:()=>Bt,HEAD:()=>_t,HEADER:()=>qt,HGROUP:()=>Xt,HR:()=>wt,HTML:()=>$t,I:()=>Yt,IFRAME:()=>Wt,IMAGE:()=>Go,IMG:()=>Jt,INPUT:()=>Qt,INS:()=>zt,KBD:()=>Zt,KeyStateContext:()=>v,LABEL:()=>te,LEGEND:()=>ee,LI:()=>oe,LINE:()=>Ko,LINEARGRADIENT:()=>Bo,LINK:()=>ne,MACTION:()=>Tn,MAIN:()=>se,MAP:()=>ae,MARK:()=>re,MARKER:()=>_o,MASK:()=>qo,MATH:()=>fn,MENU:()=>ce,MERROR:()=>dn,META:()=>ie,METADATA:()=>Xo,METER:()=>pe,MFRAC:()=>un,MI:()=>yn,MMULTISCRIPTS:()=>gn,MN:()=>xn,MO:()=>hn,MOVER:()=>mn,MPADDED:()=>En,MPATH:()=>wo,MPHANTOM:()=>bn,MPRESCRIPTS:()=>Pn,MROOT:()=>An,MROW:()=>Cn,MS:()=>Mn,MSPACE:()=>Nn,MSQRT:()=>Rn,MSTYLE:()=>On,MSUB:()=>Dn,MSUBSUP:()=>vn,MSUP:()=>Ln,MTABLE:()=>In,MTD:()=>Fn,MTEXT:()=>Vn,MTR:()=>kn,MUNDER:()=>Hn,MUNDEROVER:()=>jn,NAV:()=>le,NOSCRIPT:()=>Se,OBJECT:()=>Te,OL:()=>fe,OPTGROUP:()=>de,OPTION:()=>ue,OUTPUT:()=>ye,P:()=>ge,PATH:()=>$o,PATTERN:()=>Yo,PICTURE:()=>xe,POLYGON:()=>Wo,POLYLINE:()=>Jo,PRE:()=>he,PROGRESS:()=>me,Q:()=>Ee,RADIALGRADIENT:()=>Qo,RECT:()=>zo,RP:()=>be,RT:()=>Pe,RUBY:()=>Ae,S:()=>Ce,SAMP:()=>Me,SCRIPT:()=>Ne,SEARCH:()=>Re,SECTION:()=>Oe,SELECT:()=>De,SEMANTICS:()=>Un,SET:()=>Zo,SLOT:()=>ve,SMALL:()=>Le,SOURCE:()=>Ie,SPAN:()=>Fe,STOP:()=>tn,STRONG:()=>Ve,STYLE:()=>ke,SUB:()=>He,SUMMARY:()=>je,SUP:()=>Ue,SVG:()=>en,SWITCH:()=>on,SYMBOL:()=>nn,TABLE:()=>Ge,TBODY:()=>Ke,TD:()=>Be,TEMPLATE:()=>_e,TEXT:()=>sn,TEXTAREA:()=>qe,TEXTPATH:()=>an,TFOOT:()=>Xe,TH:()=>we,THEAD:()=>$e,TIME:()=>Ye,TITLE:()=>We,TR:()=>Je,TRACK:()=>Qe,TSPAN:()=>rn,U:()=>ze,UL:()=>Ze,USE:()=>cn,VAR:()=>to,VIDEO:()=>eo,VIEW:()=>pn,WBR:()=>oo,app:()=>q,child:()=>J,childCount:()=>W,children:()=>A,childrenStart:()=>M,createPatch:()=>$,createState:()=>w,globals:()=>h,hydrate:()=>D,memo:()=>X,mergeClass:()=>Gn,props:()=>m,tag:()=>Y,vode:()=>_});var h={currentViewTransition:void 0,requestAnimationFrame:window.requestAnimationFrame?window.requestAnimationFrame.bind(window):(e=>e()),startViewTransition:document.startViewTransition?document.startViewTransition.bind(document):null};function _(e,n,...a){if(!e)throw new Error("first argument to vode() must be a tag name or a vode");return Array.isArray(e)?e:n?[e,n,...a]:[e,...a]}function q(e,n,a,...s){if(!e?.parentElement)throw new Error("first argument to app() must be a valid HTMLElement inside the <html></html> document");if(!n||typeof n!="object")throw new Error("second argument to app() must be a state object");if(typeof a!="function")throw new Error("third argument to app() must be a function that returns a vode");let t={};t.syncRenderer=h.requestAnimationFrame,t.asyncRenderer=h.startViewTransition,t.qSync=null,t.qAsync=null,t.stats={lastSyncRenderTime:0,lastAsyncRenderTime:0,syncRenderCount:0,asyncRenderCount:0,liveEffectCount:0,patchCount:0,syncRenderPatchCount:0,asyncRenderPatchCount:0},Object.defineProperty(n,"patch",{enumerable:!1,configurable:!0,writable:!1,value:async(c,d)=>{if(!(!c||typeof c!="function"&&typeof c!="object"))if(t.stats.patchCount++,c?.next){let S=c;t.stats.liveEffectCount++;try{let x=await S.next();for(;x.done===!1;){t.stats.liveEffectCount++;try{t.patch(x.value,d),x=await S.next()}finally{t.stats.liveEffectCount--}}t.patch(x.value,d)}finally{t.stats.liveEffectCount--}}else if(c.then){t.stats.liveEffectCount++;try{let S=await c;t.patch(S,d)}finally{t.stats.liveEffectCount--}}else if(Array.isArray(c))if(c.length>0)for(let S of c)t.patch(S,!document.hidden&&!!t.asyncRenderer);else t.qSync=g(t.qSync||{},t.qAsync,!1),t.qAsync=null,h.currentViewTransition?.skipTransition(),t.stats.syncRenderPatchCount++,t.renderSync();else typeof c=="function"?t.patch(c(t.state),d):d?(t.stats.asyncRenderPatchCount++,t.qAsync=g(t.qAsync||{},c,!1),await t.renderAsync()):(t.stats.syncRenderPatchCount++,t.qSync=g(t.qSync||{},c,!1),t.renderSync())}});function o(c){let d=Date.now(),S=a(t.state);t.vode=C(t.state,t.patch,e.parentElement,0,t.vode,S),e.tagName.toUpperCase()!==S[0].toUpperCase()&&(e=t.vode.node,e._vode=t),c||(t.stats.lastSyncRenderTime=Date.now()-d,t.stats.syncRenderCount++,t.isRendering=!1,t.qSync&&t.renderSync())}let r=o.bind(null,!1),l=o.bind(null,!0);Object.defineProperty(t,"renderSync",{enumerable:!1,configurable:!0,writable:!1,value:()=>{t.isRendering||!t.qSync||(t.isRendering=!0,t.state=g(t.state,t.qSync,!0),t.qSync=null,t.syncRenderer(r))}}),Object.defineProperty(t,"renderAsync",{enumerable:!1,configurable:!0,writable:!1,value:async()=>{if(t.isAnimating||!t.qAsync||(await h.currentViewTransition?.updateCallbackDone,t.isAnimating||!t.qAsync||document.hidden))return;t.isAnimating=!0;let c=Date.now();try{t.state=g(t.state,t.qAsync,!0),t.qAsync=null,h.currentViewTransition=t.asyncRenderer(l),await h.currentViewTransition?.updateCallbackDone}finally{t.stats.lastAsyncRenderTime=Date.now()-c,t.stats.asyncRenderCount++,t.isAnimating=!1}t.qAsync&&t.renderAsync()}}),t.patch=n.patch,t.state=n;let u=e;u._vode=t,t.vode=C(n,t.patch,e.parentElement,Array.from(e.parentElement.children).indexOf(e),D(e,!0),a(n));for(let c of s)t.patch(c);return t.patch}function D(e,n){if(e?.nodeType===Node.TEXT_NODE)return e.nodeValue?.trim()!==""?n?e:e.nodeValue:void 0;if(e.nodeType===Node.COMMENT_NODE)return;if(e.nodeType===Node.ELEMENT_NODE){let s=[e.tagName.toLowerCase()];if(n&&(s.node=e),e?.hasAttributes()){let t={},o=e.attributes;for(let r of o)t[r.name]=r.value;s.push(t)}if(e.hasChildNodes()){let t=[];for(let o of e.childNodes){let r=o&&D(o,n);r?s.push(r):o&&n&&t.push(o)}for(let o of t)o.remove()}return s}else return}function X(e,n){if(!e||!Array.isArray(e))throw new Error("first argument to memo() must be an array of values to compare");if(typeof n!="function")throw new Error("second argument to memo() must be a function that returns a vode or props object");return n.__memo=e,n}function w(e){if(!e||typeof e!="object")throw new Error("createState() must be called with a state object");return e}function $(e){return e}function Y(e){return e?Array.isArray(e)?e[0]:typeof e=="string"||e.nodeType===Node.TEXT_NODE?"#text":void 0:void 0}function m(e){if(Array.isArray(e)&&e.length>1&&e[1]&&!Array.isArray(e[1])&&typeof e[1]=="object"&&e[1].nodeType!==Node.TEXT_NODE)return e[1]}function A(e){let n=M(e);return n>0?e.slice(n):null}function W(e){let n=M(e);return n<0?0:e.length-n}function J(e,n){let a=M(e);if(a>0)return e[n+a]}function M(e){return m(e)?e.length>2?2:-1:Array.isArray(e)&&e.length>1?1:-1}function g(e,n,a){if(!n)return e;for(let s in n){let t=n[s];if(t&&typeof t=="object"){let o=e[s];o?Array.isArray(t)?e[s]=[...t]:t instanceof Date&&o!==t?e[s]=new Date(t):Array.isArray(o)?e[s]=g({},t,a):typeof o=="object"?g(e[s],t,a):e[s]=g({},t,a):Array.isArray(t)?e[s]=[...t]:t instanceof Date?e[s]=new Date(t):e[s]=g({},t,a)}else t===void 0&&a?delete e[s]:e[s]=t}return e}function C(e,n,a,s,t,o,r){o=R(e,o,t);let l=!o||typeof o=="number"||typeof o=="boolean";if(o===t||!t&&l)return t;let u=t?.nodeType===Node.TEXT_NODE,c=u?t:t?.node;if(l){c?.onUnmount&&n(c.onUnmount(c)),c?.remove();return}let d=!l&&z(o),S=!l&&Q(o),x=!!o&&typeof o!="string"&&!!(o?.node||o?.nodeType===Node.TEXT_NODE);if(!d&&!S&&!x&&!t)throw new Error("Invalid vode: "+typeof o+" "+JSON.stringify(o));if(x&&d?o=o.wholeText:x&&S&&(o=[...o]),u&&d)return c.nodeValue!==o&&(c.nodeValue=o),t;if(d&&(!c||!u)){let T=document.createTextNode(o);return c?(c.onUnmount&&n(c.onUnmount(c)),c.replaceWith(T)):a.childNodes[s]?a.insertBefore(T,a.childNodes[s]):a.appendChild(T),T}if(S&&(!c||u||t[0]!==o[0])){let T=o;1 in T&&(T[1]=R(e,T[1],void 0));let b=m(o);r=b?.xmlns||r;let f=r?document.createElementNS(r,o[0]):document.createElement(o[0]);o.node=f,O(e,n,f,void 0,b),c?(c.onUnmount&&n(c.onUnmount(c)),c.replaceWith(f)):a.childNodes[s]?a.insertBefore(f,a.childNodes[s]):a.appendChild(f);let y=A(o);if(y)for(let p=0;p<y.length;p++){let i=y[p],E=C(e,n,f,p,void 0,i,r);o[b?p+2:p+1]=E}return f.onMount&&n(f.onMount(f)),o}if(!u&&S&&t[0]===o[0]){o.node=c;let T=o,b=t,f=!1;if(T[1]?.__memo){let i=T[1];if(T[1]=R(e,T[1],b[1]),i!==T[1]){let E=m(o);O(e,n,c,m(t),E),f=!!E}}else{let i=m(o);O(e,n,c,m(t),i),f=!!i}let y=A(o),p=A(t);if(y){for(let i=0;i<y.length;i++){let E=y[i],k=p&&p[i],I=C(e,n,c,i,k,E,r);I&&(o[f?i+2:i+1]=I)}for(let i=y.length;p&&i<p.length;i++)p[i]?.node?p[i].node.remove():p[i]?.nodeType===Node.TEXT_NODE&&p[i].remove()}for(let i=y?.length||0;i<p?.length;i++)p[i]?.node?p[i].node.remove():p[i]?.nodeType===Node.TEXT_NODE&&p[i].remove();return o}}function Q(e){return Array.isArray(e)&&e.length>0&&typeof e[0]=="string"}function z(e){return typeof e=="string"||e?.nodeType===Node.TEXT_NODE}function R(e,n,a){if(typeof n!="function")return n;let s=n?.__memo,t=a?.__memo;if(Array.isArray(s)&&Array.isArray(t)&&s.length===t.length){let r=!0;for(let l=0;l<s.length;l++)if(s[l]!==t[l]){r=!1;break}if(r)return a}let o=F(n,e);return typeof o=="object"&&(o.__memo=n?.__memo),o}function F(e,n){return typeof e=="function"?F(e(n),n):e}function O(e,n,a,s,t){if(!(!t&&!s)){if(s)for(let o in s){let r=s[o],l=t?.[o];r!==l&&(t?t[o]=P(e,n,a,o,r,l):P(e,n,a,o,r,void 0))}if(t&&s){for(let o in t)if(!(o in s)){let r=t[o];t[o]=P(e,n,a,o,void 0,r)}}else if(t)for(let o in t){let r=t[o];t[o]=P(e,n,a,o,void 0,r)}}}function P(e,n,a,s,t,o){if(s==="style")if(!o)a.style.cssText="";else if(typeof o=="string")t!==o&&(a.style.cssText=o);else if(t&&typeof t=="object")for(let r in{...t,...o})!t||o[r]!==t[r]?a.style[r]=o[r]:t[r]&&!o[r]&&(a.style[r]=void 0);else for(let r in o)a.style[r]=o[r];else if(s==="class")o?a.setAttribute("class",V(o)):a.removeAttribute("class");else if(s[0]==="o"&&s[1]==="n")if(o){let r=null;if(typeof o=="function"){let l=o;r=u=>n(l(e,u))}else typeof o=="object"&&(r=()=>n(o));a[s]=r}else a[s]=null;else o!=null&&o!==!1?a.setAttribute(s,o):a.removeAttribute(s);return o}function V(e){return typeof e=="string"?e:Array.isArray(e)?e.map(V).join(" "):typeof e=="object"?Object.keys(e).filter(n=>e[n]).join(" "):""}var Z="a",tt="abbr",et="address",ot="area",nt="article",st="aside",at="audio",rt="b",ct="base",it="bdi",pt="bdo",lt="blockquote",St="body",Tt="br",ft="button",dt="canvas",ut="caption",yt="cite",gt="code",xt="col",ht="colgroup",mt="data",Et="datalist",bt="dd",Pt="del",At="details",Ct="dfn",Mt="dialog",Nt="div",Rt="dl",Ot="dt",Dt="em",vt="embed",Lt="fieldset",It="figcaption",Ft="figure",Vt="footer",kt="form",Ht="h1",jt="h2",Ut="h3",Gt="h4",Kt="h5",Bt="h6",_t="head",qt="header",Xt="hgroup",wt="hr",$t="html",Yt="i",Wt="iframe",Jt="img",Qt="input",zt="ins",Zt="kbd",te="label",ee="legend",oe="li",ne="link",se="main",ae="map",re="mark",ce="menu",ie="meta",pe="meter",le="nav",Se="noscript",Te="object",fe="ol",de="optgroup",ue="option",ye="output",ge="p",xe="picture",he="pre",me="progress",Ee="q",be="rp",Pe="rt",Ae="ruby",Ce="s",Me="samp",Ne="script",Re="search",Oe="section",De="select",ve="slot",Le="small",Ie="source",Fe="span",Ve="strong",ke="style",He="sub",je="summary",Ue="sup",Ge="table",Ke="tbody",Be="td",_e="template",qe="textarea",Xe="tfoot",we="th",$e="thead",Ye="time",We="title",Je="tr",Qe="track",ze="u",Ze="ul",to="var",eo="video",oo="wbr",no="animate",so="animateMotion",ao="animateTransform",ro="circle",co="clipPath",io="defs",po="desc",lo="ellipse",So="feBlend",To="feColorMatrix",fo="feComponentTransfer",uo="feComposite",yo="feConvolveMatrix",go="feDiffuseLighting",xo="feDisplacementMap",ho="feDistantLight",mo="feDropShadow",Eo="feFlood",bo="feFuncA",Po="feFuncB",Ao="feFuncG",Co="feFuncR",Mo="feGaussianBlur",No="feImage",Ro="feMerge",Oo="feMergeNode",Do="feMorphology",vo="feOffset",Lo="fePointLight",Io="feSpecularLighting",Fo="feSpotLight",Vo="feTile",ko="feTurbulence",Ho="filter",jo="foreignObject",Uo="g",Go="image",Ko="line",Bo="linearGradient",_o="marker",qo="mask",Xo="metadata",wo="mpath",$o="path",Yo="pattern",Wo="polygon",Jo="polyline",Qo="radialGradient",zo="rect",Zo="set",tn="stop",en="svg",on="switch",nn="symbol",sn="text",an="textPath",rn="tspan",cn="use",pn="view",ln="annotation",Sn="annotation-xml",Tn="maction",fn="math",dn="merror",un="mfrac",yn="mi",gn="mmultiscripts",xn="mn",hn="mo",mn="mover",En="mpadded",bn="mphantom",Pn="mprescripts",An="mroot",Cn="mrow",Mn="ms",Nn="mspace",Rn="msqrt",On="mstyle",Dn="msub",vn="msubsup",Ln="msup",In="mtable",Fn="mtd",Vn="mtext",kn="mtr",Hn="munder",jn="munderover",Un="semantics";function Gn(...e){if(!e||e.length===0)return null;if(e.length===1)return e[0];let n=e[0];for(let a=1;a<e.length;a++){let s=n,t=e[a];if(!s)n=t;else if(t)if(typeof s=="string"&&typeof t=="string"){let o=s.split(" "),r=t.split(" "),l=new Set([...o,...r]);n=Array.from(l).join(" ").trim()}else if(typeof s=="string"&&Array.isArray(t)){let o=new Set([...t,...s.split(" ")]);n=Array.from(o).join(" ").trim()}else if(Array.isArray(s)&&typeof t=="string"){let o=new Set([...s,...t.split(" ")]);n=Array.from(o).join(" ").trim()}else if(Array.isArray(s)&&Array.isArray(t)){let o=new Set([...s,...t]);n=Array.from(o).join(" ").trim()}else if(typeof s=="string"&&typeof t=="object")n={[s]:!0,...t};else if(typeof s=="object"&&typeof t=="string")n={...s,[t]:!0};else if(typeof s=="object"&&typeof t=="object")n={...s,...t};else if(typeof s=="object"&&Array.isArray(t)){let o={...s};for(let r of t)o[r]=!0;n=o}else if(Array.isArray(s)&&typeof t=="object"){let o={};for(let r of s)o[r]=!0;for(let r of Object.keys(t))o[r]=t[r];n=o}else throw new Error(`cannot merge classes of ${s} (${typeof s}) and ${t} (${typeof t})`);else continue}return n}var v=class{constructor(n,a){this.state=n;this.path=a;this.keys=a.split(".")}keys;get(){let n=this.keys,a=this.state?this.state[n[0]]:void 0;for(let s=1;s<n.length&&a;s++)a=a[n[s]];return a}put(n){this.putDeep(n,this.state)}patch(n){if(Array.isArray(n)){let a=[];for(let s of n)a.push(this.createPatch(s));this.state.patch(a)}else this.state.patch(this.createPatch(n))}createPatch(n){let a={};return this.putDeep(n,a),a}putDeep(n,a){let s=this.keys;if(s.length>1){let t=0,o=a[s[t]];for((typeof o!="object"||o===null)&&(a[s[t]]=o={}),t=1;t<s.length-1;t++){let r=o;o=o[s[t]],(typeof o!="object"||o===null)&&(r[s[t]]=o={})}o[s[t]]=n}else typeof a[s[0]]=="object"&&typeof n=="object"?Object.assign(a[s[0]],n):a[s[0]]=n}},L=class{constructor(n,a,s,t){this.state=n;this.get=a;this.put=s;this.patch=t}};return B(Kn);})();
package/dist/vode.min.mjs CHANGED
@@ -1 +1 @@
1
- var R={currentViewTransition:void 0,requestAnimationFrame:window.requestAnimationFrame?window.requestAnimationFrame.bind(window):(z)=>z(),startViewTransition:document.startViewTransition?document.startViewTransition.bind(document):null};function u(z,E,...J){if(!z)throw Error("first argument to vode() must be a tag name or a vode");if(Array.isArray(z))return z;else if(E)return[z,E,...J];else return[z,...J]}function v(z,E,J,...G){if(!z?.parentElement)throw Error("first argument to app() must be a valid HTMLElement inside the <html></html> document");if(!E||typeof E!=="object")throw Error("second argument to app() must be a state object");if(typeof J!=="function")throw Error("third argument to app() must be a function that returns a vode");let q={};q.syncRenderer=R.requestAnimationFrame,q.asyncRenderer=R.startViewTransition,q.qSync=null,q.qAsync=null,q.stats={lastSyncRenderTime:0,lastAsyncRenderTime:0,syncRenderCount:0,asyncRenderCount:0,liveEffectCount:0,patchCount:0,syncRenderPatchCount:0,asyncRenderPatchCount:0},Object.defineProperty(E,"patch",{enumerable:!1,configurable:!0,writable:!1,value:async(U,H)=>{if(!U||typeof U!=="function"&&typeof U!=="object")return;if(q.stats.patchCount++,U?.next){let L=U;q.stats.liveEffectCount++;try{let M=await L.next();while(M.done===!1){q.stats.liveEffectCount++;try{q.patch(M.value,H),M=await L.next()}finally{q.stats.liveEffectCount--}}q.patch(M.value,H)}finally{q.stats.liveEffectCount--}}else if(U.then){q.stats.liveEffectCount++;try{let L=await U;q.patch(L,H)}finally{q.stats.liveEffectCount--}}else if(Array.isArray(U))if(U.length>0)for(let L of U)q.patch(L,!document.hidden&&!!q.asyncRenderer);else q.qSync=F(q.qSync||{},q.qAsync,!1),q.qAsync=null,R.currentViewTransition?.skipTransition(),q.stats.syncRenderPatchCount++,q.renderSync();else if(typeof U==="function")q.patch(U(q.state),H);else if(H)q.stats.asyncRenderPatchCount++,q.qAsync=F(q.qAsync||{},U,!1),await q.renderAsync();else q.stats.syncRenderPatchCount++,q.qSync=F(q.qSync||{},U,!1),q.renderSync()}});function B(U){let H=Date.now(),L=J(q.state);if(q.vode=C(q.state,q.patch,z.parentElement,0,q.vode,L),z.tagName.toUpperCase()!==L[0].toUpperCase())z=q.vode.node,z._vode=q;if(!U){if(q.stats.lastSyncRenderTime=Date.now()-H,q.stats.syncRenderCount++,q.isRendering=!1,q.qSync)q.renderSync()}}let Q=B.bind(null,!1),$=B.bind(null,!0);Object.defineProperty(q,"renderSync",{enumerable:!1,configurable:!0,writable:!1,value:()=>{if(q.isRendering||!q.qSync)return;q.isRendering=!0,q.state=F(q.state,q.qSync,!0),q.qSync=null,q.syncRenderer(Q)}}),Object.defineProperty(q,"renderAsync",{enumerable:!1,configurable:!0,writable:!1,value:async()=>{if(q.isAnimating||!q.qAsync)return;if(await R.currentViewTransition?.updateCallbackDone,q.isAnimating||!q.qAsync||document.hidden)return;q.isAnimating=!0;let U=Date.now();try{q.state=F(q.state,q.qAsync,!0),q.qAsync=null,R.currentViewTransition=q.asyncRenderer($),await R.currentViewTransition?.updateCallbackDone}finally{q.stats.lastAsyncRenderTime=Date.now()-U,q.stats.asyncRenderCount++,q.isAnimating=!1}if(q.qAsync)q.renderAsync()}}),q.patch=E.patch,q.state=E;let Y=z;Y._vode=q,q.vode=C(E,q.patch,z.parentElement,Array.from(z.parentElement.children).indexOf(z),x(z,!0),J(E));for(let U of G)q.patch(U);return q.patch}function x(z,E){if(z?.nodeType===Node.TEXT_NODE){if(z.nodeValue?.trim()!=="")return E?z:z.nodeValue;return}else if(z.nodeType===Node.COMMENT_NODE)return;else if(z.nodeType===Node.ELEMENT_NODE){let G=[z.tagName.toLowerCase()];if(E)G.node=z;if(z?.hasAttributes()){let q={},B=z.attributes;for(let Q of B)q[Q.name]=Q.value;G.push(q)}if(z.hasChildNodes()){let q=[];for(let B of z.childNodes){let Q=B&&x(B,E);if(Q)G.push(Q);else if(B&&E)q.push(B)}for(let B of q)B.remove()}return G}else return}function V(z,E){if(!z||!Array.isArray(z))throw Error("first argument to memo() must be an array of values to compare");if(typeof E!=="function")throw Error("second argument to memo() must be a function that returns a vode or props object");return E.__memo=z,E}function w(z){if(!z||typeof z!=="object")throw Error("createState() must be called with a state object");return z}function c(z){return z}function p(z){return z?Array.isArray(z)?z[0]:typeof z==="string"||z.nodeType===Node.TEXT_NODE?"#text":void 0:void 0}function D(z){if(Array.isArray(z)&&z.length>1&&z[1]&&!Array.isArray(z[1])){if(typeof z[1]==="object"&&z[1].nodeType!==Node.TEXT_NODE)return z[1]}return}function f(z){let E=N(z);if(E>0)return z.slice(E);return null}function i(z){return z.length-N(z)}function r(z,E){return z[E+N(z)]}function N(z){return D(z)?2:1}function F(z,E,J){if(!E)return z;for(let G in E){let q=E[G];if(q&&typeof q==="object"){let B=z[G];if(B)if(Array.isArray(q))z[G]=[...q];else if(q instanceof Date&&B!==q)z[G]=new Date(q);else if(Array.isArray(B))z[G]=F({},q,J);else if(typeof B==="object")F(z[G],q,J);else z[G]=F({},q,J);else if(Array.isArray(q))z[G]=[...q];else if(q instanceof Date)z[G]=new Date(q);else z[G]=F({},q,J)}else if(q===void 0&&J)delete z[G];else z[G]=q}return z}function C(z,E,J,G,q,B,Q){B=K(z,B,q);let $=!B||typeof B==="number"||typeof B==="boolean";if(B===q||!q&&$)return q;let Y=q?.nodeType===Node.TEXT_NODE,U=Y?q:q?.node;if($){U?.onUnmount&&E(U.onUnmount(U)),U?.remove();return}let H=!$&&y(B),L=!$&&g(B),M=!!B&&typeof B!=="string"&&!!(B?.node||B?.nodeType===Node.TEXT_NODE);if(!H&&!L&&!M&&!q)throw Error("Invalid vode: "+typeof B+" "+JSON.stringify(B));else if(M&&H)B=B.wholeText;else if(M&&L)B=[...B];if(Y&&H){if(U.nodeValue!==B)U.nodeValue=B;return q}if(H&&(!U||!Y)){let W=document.createTextNode(B);if(U)U.onUnmount&&E(U.onUnmount(U)),U.replaceWith(W);else if(J.childNodes[G])J.insertBefore(W,J.childNodes[G]);else J.appendChild(W);return W}if(L&&(!U||Y||q[0]!==B[0])){let W=B;if(1 in W)W[1]=K(z,W[1],void 0);let I=D(B);Q=I?.xmlns||Q;let j=Q?document.createElementNS(Q,B[0]):document.createElement(B[0]);if(B.node=j,S(z,E,j,void 0,I),U)U.onUnmount&&E(U.onUnmount(U)),U.replaceWith(j);else if(J.childNodes[G])J.insertBefore(j,J.childNodes[G]);else J.appendChild(j);let O=f(B);if(O)for(let Z=0;Z<O.length;Z++){let X=O[Z],T=C(z,E,j,Z,void 0,X,Q);B[I?Z+2:Z+1]=T}return j.onMount&&E(j.onMount(j)),B}if(!Y&&L&&q[0]===B[0]){B.node=U;let W=B,I=q,j=!1;if(W[1]?.__memo){let X=W[1];if(W[1]=K(z,W[1],I[1]),X!==W[1]){let T=D(B);S(z,E,U,D(q),T),j=!!T}}else{let X=D(B);S(z,E,U,D(q),X),j=!!X}let O=f(B),Z=f(q);if(O){for(let X=0;X<O.length;X++){let T=O[X],_=Z&&Z[X],b=C(z,E,U,X,_,T,Q);if(b)B[j?X+2:X+1]=b}for(let X=O.length;Z&&X<Z.length;X++)if(Z[X]?.node)Z[X].node.remove();else if(Z[X]?.nodeType===Node.TEXT_NODE)Z[X].remove()}for(let X=O?.length||0;X<Z?.length;X++)if(Z[X]?.node)Z[X].node.remove();else if(Z[X]?.nodeType===Node.TEXT_NODE)Z[X].remove();return B}return}function g(z){return Array.isArray(z)&&z.length>0&&typeof z[0]==="string"}function y(z){return typeof z==="string"||z?.nodeType===Node.TEXT_NODE}function K(z,E,J){if(typeof E!=="function")return E;let G=E?.__memo,q=J?.__memo;if(Array.isArray(G)&&Array.isArray(q)&&G.length===q.length){let Q=!0;for(let $=0;$<G.length;$++)if(G[$]!==q[$]){Q=!1;break}if(Q)return J}let B=k(E,z);if(typeof B==="object")B.__memo=E?.__memo;return B}function k(z,E){if(typeof z==="function")return k(z(E),E);else return z}function S(z,E,J,G,q){if(!q&&!G)return;if(G)for(let B in G){let Q=G[B],$=q?.[B];if(Q!==$)if(q)q[B]=A(z,E,J,B,Q,$);else A(z,E,J,B,Q,void 0)}if(q&&G){for(let B in q)if(!(B in G)){let Q=q[B];q[B]=A(z,E,J,B,void 0,Q)}}else if(q)for(let B in q){let Q=q[B];q[B]=A(z,E,J,B,void 0,Q)}}function A(z,E,J,G,q,B){if(G==="style")if(!B)J.style.cssText="";else if(typeof B==="string"){if(q!==B)J.style.cssText=B}else if(q&&typeof q==="object"){for(let Q in{...q,...B})if(!q||B[Q]!==q[Q])J.style[Q]=B[Q];else if(q[Q]&&!B[Q])J.style[Q]=void 0}else for(let Q in B)J.style[Q]=B[Q];else if(G==="class")if(B)J.setAttribute("class",P(B));else J.removeAttribute("class");else if(G[0]==="o"&&G[1]==="n")if(B){let Q=null;if(typeof B==="function"){let $=B;Q=(Y)=>E($(z,Y))}else if(typeof B==="object")Q=()=>E(B);J[G]=Q}else J[G]=null;else if(B!==null&&B!==void 0&&B!==!1)J.setAttribute(G,B);else J.removeAttribute(G);return B}function P(z){if(typeof z==="string")return z;else if(Array.isArray(z))return z.map(P).join(" ");else if(typeof z==="object")return Object.keys(z).filter((E)=>z[E]).join(" ");else return""}var s="a",n="abbr",t="address",d="area",a="article",o="aside",e="audio",qq="b",zq="base",Bq="bdi",Eq="bdo",Gq="blockquote",Jq="body",Qq="br",Uq="button",Xq="canvas",Zq="caption",$q="cite",Lq="code",Wq="col",jq="colgroup",Hq="data",Yq="datalist",Oq="dd",Fq="del",Mq="details",Tq="dfn",Rq="dialog",Dq="div",Iq="dl",Aq="dt",Cq="em",fq="embed",Kq="fieldset",Sq="figcaption",Nq="figure",bq="footer",xq="form",kq="h1",Pq="h2",_q="h3",gq="h4",yq="h5",hq="h6",mq="head",uq="header",vq="hgroup",Vq="hr",wq="html",cq="i",pq="iframe",iq="img",rq="input",lq="ins",sq="kbd",nq="label",tq="legend",dq="li",aq="link",oq="main",eq="map",qz="mark",zz="menu",Bz="meta",Ez="meter",Gz="nav",Jz="noscript",Qz="object",Uz="ol",Xz="optgroup",Zz="option",$z="output",Lz="p",Wz="picture",jz="pre",Hz="progress",Yz="q",Oz="rp",Fz="rt",Mz="ruby",Tz="s",Rz="samp",Dz="script",Iz="search",Az="section",Cz="select",fz="slot",Kz="small",Sz="source",Nz="span",bz="strong",xz="style",kz="sub",Pz="summary",_z="sup",gz="table",yz="tbody",hz="td",mz="template",uz="textarea",vz="tfoot",Vz="th",wz="thead",cz="time",pz="title",iz="tr",rz="track",lz="u",sz="ul",nz="var",tz="video",dz="wbr",az="animate",oz="animateMotion",ez="animateTransform",qB="circle",zB="clipPath",BB="defs",EB="desc",GB="ellipse",JB="feBlend",QB="feColorMatrix",UB="feComponentTransfer",XB="feComposite",ZB="feConvolveMatrix",$B="feDiffuseLighting",LB="feDisplacementMap",WB="feDistantLight",jB="feDropShadow",HB="feFlood",YB="feFuncA",OB="feFuncB",FB="feFuncG",MB="feFuncR",TB="feGaussianBlur",RB="feImage",DB="feMerge",IB="feMergeNode",AB="feMorphology",CB="feOffset",fB="fePointLight",KB="feSpecularLighting",SB="feSpotLight",NB="feTile",bB="feTurbulence",xB="filter",kB="foreignObject",PB="g",_B="image",gB="line",yB="linearGradient",hB="marker",mB="mask",uB="metadata",vB="mpath",VB="path",wB="pattern",cB="polygon",pB="polyline",iB="radialGradient",rB="rect",lB="set",sB="stop",nB="svg",tB="switch",dB="symbol",aB="text",oB="textPath",eB="tspan",qE="use",zE="view",BE="annotation",EE="annotation-xml",GE="maction",JE="math",QE="merror",UE="mfrac",XE="mi",ZE="mmultiscripts",$E="mn",LE="mo",WE="mover",jE="mpadded",HE="mphantom",YE="mprescripts",OE="mroot",FE="mrow",ME="ms",TE="mspace",RE="msqrt",DE="mstyle",IE="msub",AE="msubsup",CE="msup",fE="mtable",KE="mtd",SE="mtext",NE="mtr",bE="munder",xE="munderover",kE="semantics";function _E(...z){if(!z||z.length===0)return null;if(z.length===1)return z[0];let E=z[0];for(let J=1;J<z.length;J++){let G=E,q=z[J];if(!G)E=q;else if(!q)continue;else if(typeof G==="string"&&typeof q==="string"){let B=G.split(" "),Q=q.split(" "),$=new Set([...B,...Q]);E=Array.from($).join(" ").trim()}else if(typeof G==="string"&&Array.isArray(q)){let B=new Set([...q,...G.split(" ")]);E=Array.from(B).join(" ").trim()}else if(Array.isArray(G)&&typeof q==="string"){let B=new Set([...G,...q.split(" ")]);E=Array.from(B).join(" ").trim()}else if(Array.isArray(G)&&Array.isArray(q)){let B=new Set([...G,...q]);E=Array.from(B).join(" ").trim()}else if(typeof G==="string"&&typeof q==="object")E={[G]:!0,...q};else if(typeof G==="object"&&typeof q==="string")E={...G,[q]:!0};else if(typeof G==="object"&&typeof q==="object")E={...G,...q};else if(typeof G==="object"&&Array.isArray(q)){let B={...G};for(let Q of q)B[Q]=!0;E=B}else if(Array.isArray(G)&&typeof q==="object"){let B={};for(let Q of G)B[Q]=!0;for(let Q of Object.keys(q))B[Q]=q[Q];E=B}else throw Error(`cannot merge classes of ${G} (${typeof G}) and ${q} (${typeof q})`)}return E}class h{state;path;keys;constructor(z,E){this.state=z;this.path=E;this.keys=E.split(".")}get(){let z=this.keys,E=this.state?this.state[z[0]]:void 0;for(let J=1;J<z.length&&!!E;J++)E=E[z[J]];return E}put(z){this.putDeep(z,this.state)}patch(z){if(Array.isArray(z)){let E=[];for(let J of z)E.push(this.createPatch(J));this.state.patch(E)}else this.state.patch(this.createPatch(z))}createPatch(z){let E={};return this.putDeep(z,E),E}putDeep(z,E){let J=this.keys;if(J.length>1){let G=0,q=E[J[G]];if(typeof q!=="object"||q===null)E[J[G]]=q={};for(G=1;G<J.length-1;G++){let B=q;if(q=q[J[G]],typeof q!=="object"||q===null)B[J[G]]=q={}}q[J[G]]=z}else if(typeof E[J[0]]==="object"&&typeof z==="object")Object.assign(E[J[0]],z);else E[J[0]]=z}}class m{state;get;put;patch;constructor(z,E,J,G){this.state=z;this.get=E;this.put=J;this.patch=G}}export{u as vode,p as tag,D as props,_E as mergeClass,V as memo,x as hydrate,R as globals,w as createState,c as createPatch,N as childrenStart,f as children,i as childCount,r as child,v as app,dz as WBR,zE as VIEW,tz as VIDEO,nz as VAR,qE as USE,sz as UL,lz as U,eB as TSPAN,rz as TRACK,iz as TR,pz as TITLE,cz as TIME,wz as THEAD,Vz as TH,vz as TFOOT,oB as TEXTPATH,uz as TEXTAREA,aB as TEXT,mz as TEMPLATE,hz as TD,yz as TBODY,gz as TABLE,dB as SYMBOL,tB as SWITCH,nB as SVG,_z as SUP,Pz as SUMMARY,kz as SUB,xz as STYLE,bz as STRONG,sB as STOP,Nz as SPAN,Sz as SOURCE,Kz as SMALL,fz as SLOT,lB as SET,kE as SEMANTICS,Cz as SELECT,Az as SECTION,Iz as SEARCH,Dz as SCRIPT,Rz as SAMP,Tz as S,Mz as RUBY,Fz as RT,Oz as RP,rB as RECT,iB as RADIALGRADIENT,Yz as Q,Hz as PROGRESS,jz as PRE,pB as POLYLINE,cB as POLYGON,Wz as PICTURE,wB as PATTERN,VB as PATH,Lz as P,$z as OUTPUT,Zz as OPTION,Xz as OPTGROUP,Uz as OL,Qz as OBJECT,Jz as NOSCRIPT,Gz as NAV,xE as MUNDEROVER,bE as MUNDER,NE as MTR,SE as MTEXT,KE as MTD,fE as MTABLE,CE as MSUP,AE as MSUBSUP,IE as MSUB,DE as MSTYLE,RE as MSQRT,TE as MSPACE,ME as MS,FE as MROW,OE as MROOT,YE as MPRESCRIPTS,HE as MPHANTOM,vB as MPATH,jE as MPADDED,WE as MOVER,LE as MO,$E as MN,ZE as MMULTISCRIPTS,XE as MI,UE as MFRAC,Ez as METER,uB as METADATA,Bz as META,QE as MERROR,zz as MENU,JE as MATH,mB as MASK,hB as MARKER,qz as MARK,eq as MAP,oq as MAIN,GE as MACTION,aq as LINK,yB as LINEARGRADIENT,gB as LINE,dq as LI,tq as LEGEND,nq as LABEL,h as KeyStateContext,sq as KBD,lq as INS,rq as INPUT,iq as IMG,_B as IMAGE,pq as IFRAME,cq as I,wq as HTML,Vq as HR,vq as HGROUP,uq as HEADER,mq as HEAD,hq as H6,yq as H5,gq as H4,_q as H3,Pq as H2,kq as H1,PB as G,xq as FORM,kB as FOREIGNOBJECT,bq as FOOTER,xB as FILTER,Nq as FIGURE,Sq as FIGCAPTION,Kq as FIELDSET,bB as FETURBULENCE,NB as FETILE,SB as FESPOTLIGHT,KB as FESPECULARLIGHTING,fB as FEPOINTLIGHT,CB as FEOFFSET,AB as FEMORPHOLOGY,IB as FEMERGENODE,DB as FEMERGE,RB as FEIMAGE,TB as FEGAUSSIANBLUR,MB as FEFUNCR,FB as FEFUNCG,OB as FEFUNCB,YB as FEFUNCA,HB as FEFLOOD,jB as FEDROPSHADOW,WB as FEDISTANTLIGHT,LB as FEDISPLACEMENTMAP,$B as FEDIFFUSELIGHTING,ZB as FECONVOLVEMATRIX,XB as FECOMPOSITE,UB as FECOMPONENTTRANSFER,QB as FECOLORMATRIX,JB as FEBLEND,fq as EMBED,Cq as EM,GB as ELLIPSE,m as DelegateStateContext,Aq as DT,Iq as DL,Dq as DIV,Rq as DIALOG,Tq as DFN,Mq as DETAILS,EB as DESC,Fq as DEL,BB as DEFS,Oq as DD,Yq as DATALIST,Hq as DATA,jq as COLGROUP,Wq as COL,Lq as CODE,zB as CLIPPATH,$q as CITE,qB as CIRCLE,Zq as CAPTION,Xq as CANVAS,Uq as BUTTON,Qq as BR,Jq as BODY,Gq as BLOCKQUOTE,Eq as BDO,Bq as BDI,zq as BASE,qq as B,e as AUDIO,o as ASIDE,a as ARTICLE,d as AREA,EE as ANNOTATION_XML,BE as ANNOTATION,ez as ANIMATETRANSFORM,oz as ANIMATEMOTION,az as ANIMATE,t as ADDRESS,n as ABBR,s as A};
1
+ var R={currentViewTransition:void 0,requestAnimationFrame:window.requestAnimationFrame?window.requestAnimationFrame.bind(window):(z)=>z(),startViewTransition:document.startViewTransition?document.startViewTransition.bind(document):null};function u(z,E,...J){if(!z)throw Error("first argument to vode() must be a tag name or a vode");if(Array.isArray(z))return z;else if(E)return[z,E,...J];else return[z,...J]}function V(z,E,J,...G){if(!z?.parentElement)throw Error("first argument to app() must be a valid HTMLElement inside the <html></html> document");if(!E||typeof E!=="object")throw Error("second argument to app() must be a state object");if(typeof J!=="function")throw Error("third argument to app() must be a function that returns a vode");let q={};q.syncRenderer=R.requestAnimationFrame,q.asyncRenderer=R.startViewTransition,q.qSync=null,q.qAsync=null,q.stats={lastSyncRenderTime:0,lastAsyncRenderTime:0,syncRenderCount:0,asyncRenderCount:0,liveEffectCount:0,patchCount:0,syncRenderPatchCount:0,asyncRenderPatchCount:0},Object.defineProperty(E,"patch",{enumerable:!1,configurable:!0,writable:!1,value:async(U,H)=>{if(!U||typeof U!=="function"&&typeof U!=="object")return;if(q.stats.patchCount++,U?.next){let L=U;q.stats.liveEffectCount++;try{let M=await L.next();while(M.done===!1){q.stats.liveEffectCount++;try{q.patch(M.value,H),M=await L.next()}finally{q.stats.liveEffectCount--}}q.patch(M.value,H)}finally{q.stats.liveEffectCount--}}else if(U.then){q.stats.liveEffectCount++;try{let L=await U;q.patch(L,H)}finally{q.stats.liveEffectCount--}}else if(Array.isArray(U))if(U.length>0)for(let L of U)q.patch(L,!document.hidden&&!!q.asyncRenderer);else q.qSync=F(q.qSync||{},q.qAsync,!1),q.qAsync=null,R.currentViewTransition?.skipTransition(),q.stats.syncRenderPatchCount++,q.renderSync();else if(typeof U==="function")q.patch(U(q.state),H);else if(H)q.stats.asyncRenderPatchCount++,q.qAsync=F(q.qAsync||{},U,!1),await q.renderAsync();else q.stats.syncRenderPatchCount++,q.qSync=F(q.qSync||{},U,!1),q.renderSync()}});function B(U){let H=Date.now(),L=J(q.state);if(q.vode=C(q.state,q.patch,z.parentElement,0,q.vode,L),z.tagName.toUpperCase()!==L[0].toUpperCase())z=q.vode.node,z._vode=q;if(!U){if(q.stats.lastSyncRenderTime=Date.now()-H,q.stats.syncRenderCount++,q.isRendering=!1,q.qSync)q.renderSync()}}let Q=B.bind(null,!1),$=B.bind(null,!0);Object.defineProperty(q,"renderSync",{enumerable:!1,configurable:!0,writable:!1,value:()=>{if(q.isRendering||!q.qSync)return;q.isRendering=!0,q.state=F(q.state,q.qSync,!0),q.qSync=null,q.syncRenderer(Q)}}),Object.defineProperty(q,"renderAsync",{enumerable:!1,configurable:!0,writable:!1,value:async()=>{if(q.isAnimating||!q.qAsync)return;if(await R.currentViewTransition?.updateCallbackDone,q.isAnimating||!q.qAsync||document.hidden)return;q.isAnimating=!0;let U=Date.now();try{q.state=F(q.state,q.qAsync,!0),q.qAsync=null,R.currentViewTransition=q.asyncRenderer($),await R.currentViewTransition?.updateCallbackDone}finally{q.stats.lastAsyncRenderTime=Date.now()-U,q.stats.asyncRenderCount++,q.isAnimating=!1}if(q.qAsync)q.renderAsync()}}),q.patch=E.patch,q.state=E;let Y=z;Y._vode=q,q.vode=C(E,q.patch,z.parentElement,Array.from(z.parentElement.children).indexOf(z),x(z,!0),J(E));for(let U of G)q.patch(U);return q.patch}function x(z,E){if(z?.nodeType===Node.TEXT_NODE){if(z.nodeValue?.trim()!=="")return E?z:z.nodeValue;return}else if(z.nodeType===Node.COMMENT_NODE)return;else if(z.nodeType===Node.ELEMENT_NODE){let G=[z.tagName.toLowerCase()];if(E)G.node=z;if(z?.hasAttributes()){let q={},B=z.attributes;for(let Q of B)q[Q.name]=Q.value;G.push(q)}if(z.hasChildNodes()){let q=[];for(let B of z.childNodes){let Q=B&&x(B,E);if(Q)G.push(Q);else if(B&&E)q.push(B)}for(let B of q)B.remove()}return G}else return}function v(z,E){if(!z||!Array.isArray(z))throw Error("first argument to memo() must be an array of values to compare");if(typeof E!=="function")throw Error("second argument to memo() must be a function that returns a vode or props object");return E.__memo=z,E}function w(z){if(!z||typeof z!=="object")throw Error("createState() must be called with a state object");return z}function c(z){return z}function p(z){return z?Array.isArray(z)?z[0]:typeof z==="string"||z.nodeType===Node.TEXT_NODE?"#text":void 0:void 0}function D(z){if(Array.isArray(z)&&z.length>1&&z[1]&&!Array.isArray(z[1])){if(typeof z[1]==="object"&&z[1].nodeType!==Node.TEXT_NODE)return z[1]}return}function f(z){let E=N(z);if(E>0)return z.slice(E);return null}function i(z){let E=N(z);if(E<0)return 0;return z.length-E}function r(z,E){let J=N(z);if(J>0)return z[E+J];else return}function N(z){return D(z)?z.length>2?2:-1:Array.isArray(z)&&z.length>1?1:-1}function F(z,E,J){if(!E)return z;for(let G in E){let q=E[G];if(q&&typeof q==="object"){let B=z[G];if(B)if(Array.isArray(q))z[G]=[...q];else if(q instanceof Date&&B!==q)z[G]=new Date(q);else if(Array.isArray(B))z[G]=F({},q,J);else if(typeof B==="object")F(z[G],q,J);else z[G]=F({},q,J);else if(Array.isArray(q))z[G]=[...q];else if(q instanceof Date)z[G]=new Date(q);else z[G]=F({},q,J)}else if(q===void 0&&J)delete z[G];else z[G]=q}return z}function C(z,E,J,G,q,B,Q){B=K(z,B,q);let $=!B||typeof B==="number"||typeof B==="boolean";if(B===q||!q&&$)return q;let Y=q?.nodeType===Node.TEXT_NODE,U=Y?q:q?.node;if($){U?.onUnmount&&E(U.onUnmount(U)),U?.remove();return}let H=!$&&y(B),L=!$&&g(B),M=!!B&&typeof B!=="string"&&!!(B?.node||B?.nodeType===Node.TEXT_NODE);if(!H&&!L&&!M&&!q)throw Error("Invalid vode: "+typeof B+" "+JSON.stringify(B));else if(M&&H)B=B.wholeText;else if(M&&L)B=[...B];if(Y&&H){if(U.nodeValue!==B)U.nodeValue=B;return q}if(H&&(!U||!Y)){let W=document.createTextNode(B);if(U)U.onUnmount&&E(U.onUnmount(U)),U.replaceWith(W);else if(J.childNodes[G])J.insertBefore(W,J.childNodes[G]);else J.appendChild(W);return W}if(L&&(!U||Y||q[0]!==B[0])){let W=B;if(1 in W)W[1]=K(z,W[1],void 0);let I=D(B);Q=I?.xmlns||Q;let j=Q?document.createElementNS(Q,B[0]):document.createElement(B[0]);if(B.node=j,S(z,E,j,void 0,I),U)U.onUnmount&&E(U.onUnmount(U)),U.replaceWith(j);else if(J.childNodes[G])J.insertBefore(j,J.childNodes[G]);else J.appendChild(j);let O=f(B);if(O)for(let Z=0;Z<O.length;Z++){let X=O[Z],T=C(z,E,j,Z,void 0,X,Q);B[I?Z+2:Z+1]=T}return j.onMount&&E(j.onMount(j)),B}if(!Y&&L&&q[0]===B[0]){B.node=U;let W=B,I=q,j=!1;if(W[1]?.__memo){let X=W[1];if(W[1]=K(z,W[1],I[1]),X!==W[1]){let T=D(B);S(z,E,U,D(q),T),j=!!T}}else{let X=D(B);S(z,E,U,D(q),X),j=!!X}let O=f(B),Z=f(q);if(O){for(let X=0;X<O.length;X++){let T=O[X],_=Z&&Z[X],b=C(z,E,U,X,_,T,Q);if(b)B[j?X+2:X+1]=b}for(let X=O.length;Z&&X<Z.length;X++)if(Z[X]?.node)Z[X].node.remove();else if(Z[X]?.nodeType===Node.TEXT_NODE)Z[X].remove()}for(let X=O?.length||0;X<Z?.length;X++)if(Z[X]?.node)Z[X].node.remove();else if(Z[X]?.nodeType===Node.TEXT_NODE)Z[X].remove();return B}return}function g(z){return Array.isArray(z)&&z.length>0&&typeof z[0]==="string"}function y(z){return typeof z==="string"||z?.nodeType===Node.TEXT_NODE}function K(z,E,J){if(typeof E!=="function")return E;let G=E?.__memo,q=J?.__memo;if(Array.isArray(G)&&Array.isArray(q)&&G.length===q.length){let Q=!0;for(let $=0;$<G.length;$++)if(G[$]!==q[$]){Q=!1;break}if(Q)return J}let B=k(E,z);if(typeof B==="object")B.__memo=E?.__memo;return B}function k(z,E){if(typeof z==="function")return k(z(E),E);else return z}function S(z,E,J,G,q){if(!q&&!G)return;if(G)for(let B in G){let Q=G[B],$=q?.[B];if(Q!==$)if(q)q[B]=A(z,E,J,B,Q,$);else A(z,E,J,B,Q,void 0)}if(q&&G){for(let B in q)if(!(B in G)){let Q=q[B];q[B]=A(z,E,J,B,void 0,Q)}}else if(q)for(let B in q){let Q=q[B];q[B]=A(z,E,J,B,void 0,Q)}}function A(z,E,J,G,q,B){if(G==="style")if(!B)J.style.cssText="";else if(typeof B==="string"){if(q!==B)J.style.cssText=B}else if(q&&typeof q==="object"){for(let Q in{...q,...B})if(!q||B[Q]!==q[Q])J.style[Q]=B[Q];else if(q[Q]&&!B[Q])J.style[Q]=void 0}else for(let Q in B)J.style[Q]=B[Q];else if(G==="class")if(B)J.setAttribute("class",P(B));else J.removeAttribute("class");else if(G[0]==="o"&&G[1]==="n")if(B){let Q=null;if(typeof B==="function"){let $=B;Q=(Y)=>E($(z,Y))}else if(typeof B==="object")Q=()=>E(B);J[G]=Q}else J[G]=null;else if(B!==null&&B!==void 0&&B!==!1)J.setAttribute(G,B);else J.removeAttribute(G);return B}function P(z){if(typeof z==="string")return z;else if(Array.isArray(z))return z.map(P).join(" ");else if(typeof z==="object")return Object.keys(z).filter((E)=>z[E]).join(" ");else return""}var s="a",n="abbr",t="address",d="area",a="article",o="aside",e="audio",qq="b",zq="base",Bq="bdi",Eq="bdo",Gq="blockquote",Jq="body",Qq="br",Uq="button",Xq="canvas",Zq="caption",$q="cite",Lq="code",Wq="col",jq="colgroup",Hq="data",Yq="datalist",Oq="dd",Fq="del",Mq="details",Tq="dfn",Rq="dialog",Dq="div",Iq="dl",Aq="dt",Cq="em",fq="embed",Kq="fieldset",Sq="figcaption",Nq="figure",bq="footer",xq="form",kq="h1",Pq="h2",_q="h3",gq="h4",yq="h5",hq="h6",mq="head",uq="header",Vq="hgroup",vq="hr",wq="html",cq="i",pq="iframe",iq="img",rq="input",lq="ins",sq="kbd",nq="label",tq="legend",dq="li",aq="link",oq="main",eq="map",qz="mark",zz="menu",Bz="meta",Ez="meter",Gz="nav",Jz="noscript",Qz="object",Uz="ol",Xz="optgroup",Zz="option",$z="output",Lz="p",Wz="picture",jz="pre",Hz="progress",Yz="q",Oz="rp",Fz="rt",Mz="ruby",Tz="s",Rz="samp",Dz="script",Iz="search",Az="section",Cz="select",fz="slot",Kz="small",Sz="source",Nz="span",bz="strong",xz="style",kz="sub",Pz="summary",_z="sup",gz="table",yz="tbody",hz="td",mz="template",uz="textarea",Vz="tfoot",vz="th",wz="thead",cz="time",pz="title",iz="tr",rz="track",lz="u",sz="ul",nz="var",tz="video",dz="wbr",az="animate",oz="animateMotion",ez="animateTransform",qB="circle",zB="clipPath",BB="defs",EB="desc",GB="ellipse",JB="feBlend",QB="feColorMatrix",UB="feComponentTransfer",XB="feComposite",ZB="feConvolveMatrix",$B="feDiffuseLighting",LB="feDisplacementMap",WB="feDistantLight",jB="feDropShadow",HB="feFlood",YB="feFuncA",OB="feFuncB",FB="feFuncG",MB="feFuncR",TB="feGaussianBlur",RB="feImage",DB="feMerge",IB="feMergeNode",AB="feMorphology",CB="feOffset",fB="fePointLight",KB="feSpecularLighting",SB="feSpotLight",NB="feTile",bB="feTurbulence",xB="filter",kB="foreignObject",PB="g",_B="image",gB="line",yB="linearGradient",hB="marker",mB="mask",uB="metadata",VB="mpath",vB="path",wB="pattern",cB="polygon",pB="polyline",iB="radialGradient",rB="rect",lB="set",sB="stop",nB="svg",tB="switch",dB="symbol",aB="text",oB="textPath",eB="tspan",qE="use",zE="view",BE="annotation",EE="annotation-xml",GE="maction",JE="math",QE="merror",UE="mfrac",XE="mi",ZE="mmultiscripts",$E="mn",LE="mo",WE="mover",jE="mpadded",HE="mphantom",YE="mprescripts",OE="mroot",FE="mrow",ME="ms",TE="mspace",RE="msqrt",DE="mstyle",IE="msub",AE="msubsup",CE="msup",fE="mtable",KE="mtd",SE="mtext",NE="mtr",bE="munder",xE="munderover",kE="semantics";function _E(...z){if(!z||z.length===0)return null;if(z.length===1)return z[0];let E=z[0];for(let J=1;J<z.length;J++){let G=E,q=z[J];if(!G)E=q;else if(!q)continue;else if(typeof G==="string"&&typeof q==="string"){let B=G.split(" "),Q=q.split(" "),$=new Set([...B,...Q]);E=Array.from($).join(" ").trim()}else if(typeof G==="string"&&Array.isArray(q)){let B=new Set([...q,...G.split(" ")]);E=Array.from(B).join(" ").trim()}else if(Array.isArray(G)&&typeof q==="string"){let B=new Set([...G,...q.split(" ")]);E=Array.from(B).join(" ").trim()}else if(Array.isArray(G)&&Array.isArray(q)){let B=new Set([...G,...q]);E=Array.from(B).join(" ").trim()}else if(typeof G==="string"&&typeof q==="object")E={[G]:!0,...q};else if(typeof G==="object"&&typeof q==="string")E={...G,[q]:!0};else if(typeof G==="object"&&typeof q==="object")E={...G,...q};else if(typeof G==="object"&&Array.isArray(q)){let B={...G};for(let Q of q)B[Q]=!0;E=B}else if(Array.isArray(G)&&typeof q==="object"){let B={};for(let Q of G)B[Q]=!0;for(let Q of Object.keys(q))B[Q]=q[Q];E=B}else throw Error(`cannot merge classes of ${G} (${typeof G}) and ${q} (${typeof q})`)}return E}class h{state;path;keys;constructor(z,E){this.state=z;this.path=E;this.keys=E.split(".")}get(){let z=this.keys,E=this.state?this.state[z[0]]:void 0;for(let J=1;J<z.length&&!!E;J++)E=E[z[J]];return E}put(z){this.putDeep(z,this.state)}patch(z){if(Array.isArray(z)){let E=[];for(let J of z)E.push(this.createPatch(J));this.state.patch(E)}else this.state.patch(this.createPatch(z))}createPatch(z){let E={};return this.putDeep(z,E),E}putDeep(z,E){let J=this.keys;if(J.length>1){let G=0,q=E[J[G]];if(typeof q!=="object"||q===null)E[J[G]]=q={};for(G=1;G<J.length-1;G++){let B=q;if(q=q[J[G]],typeof q!=="object"||q===null)B[J[G]]=q={}}q[J[G]]=z}else if(typeof E[J[0]]==="object"&&typeof z==="object")Object.assign(E[J[0]],z);else E[J[0]]=z}}class m{state;get;put;patch;constructor(z,E,J,G){this.state=z;this.get=E;this.put=J;this.patch=G}}export{u as vode,p as tag,D as props,_E as mergeClass,v as memo,x as hydrate,R as globals,w as createState,c as createPatch,N as childrenStart,f as children,i as childCount,r as child,V as app,dz as WBR,zE as VIEW,tz as VIDEO,nz as VAR,qE as USE,sz as UL,lz as U,eB as TSPAN,rz as TRACK,iz as TR,pz as TITLE,cz as TIME,wz as THEAD,vz as TH,Vz as TFOOT,oB as TEXTPATH,uz as TEXTAREA,aB as TEXT,mz as TEMPLATE,hz as TD,yz as TBODY,gz as TABLE,dB as SYMBOL,tB as SWITCH,nB as SVG,_z as SUP,Pz as SUMMARY,kz as SUB,xz as STYLE,bz as STRONG,sB as STOP,Nz as SPAN,Sz as SOURCE,Kz as SMALL,fz as SLOT,lB as SET,kE as SEMANTICS,Cz as SELECT,Az as SECTION,Iz as SEARCH,Dz as SCRIPT,Rz as SAMP,Tz as S,Mz as RUBY,Fz as RT,Oz as RP,rB as RECT,iB as RADIALGRADIENT,Yz as Q,Hz as PROGRESS,jz as PRE,pB as POLYLINE,cB as POLYGON,Wz as PICTURE,wB as PATTERN,vB as PATH,Lz as P,$z as OUTPUT,Zz as OPTION,Xz as OPTGROUP,Uz as OL,Qz as OBJECT,Jz as NOSCRIPT,Gz as NAV,xE as MUNDEROVER,bE as MUNDER,NE as MTR,SE as MTEXT,KE as MTD,fE as MTABLE,CE as MSUP,AE as MSUBSUP,IE as MSUB,DE as MSTYLE,RE as MSQRT,TE as MSPACE,ME as MS,FE as MROW,OE as MROOT,YE as MPRESCRIPTS,HE as MPHANTOM,VB as MPATH,jE as MPADDED,WE as MOVER,LE as MO,$E as MN,ZE as MMULTISCRIPTS,XE as MI,UE as MFRAC,Ez as METER,uB as METADATA,Bz as META,QE as MERROR,zz as MENU,JE as MATH,mB as MASK,hB as MARKER,qz as MARK,eq as MAP,oq as MAIN,GE as MACTION,aq as LINK,yB as LINEARGRADIENT,gB as LINE,dq as LI,tq as LEGEND,nq as LABEL,h as KeyStateContext,sq as KBD,lq as INS,rq as INPUT,iq as IMG,_B as IMAGE,pq as IFRAME,cq as I,wq as HTML,vq as HR,Vq as HGROUP,uq as HEADER,mq as HEAD,hq as H6,yq as H5,gq as H4,_q as H3,Pq as H2,kq as H1,PB as G,xq as FORM,kB as FOREIGNOBJECT,bq as FOOTER,xB as FILTER,Nq as FIGURE,Sq as FIGCAPTION,Kq as FIELDSET,bB as FETURBULENCE,NB as FETILE,SB as FESPOTLIGHT,KB as FESPECULARLIGHTING,fB as FEPOINTLIGHT,CB as FEOFFSET,AB as FEMORPHOLOGY,IB as FEMERGENODE,DB as FEMERGE,RB as FEIMAGE,TB as FEGAUSSIANBLUR,MB as FEFUNCR,FB as FEFUNCG,OB as FEFUNCB,YB as FEFUNCA,HB as FEFLOOD,jB as FEDROPSHADOW,WB as FEDISTANTLIGHT,LB as FEDISPLACEMENTMAP,$B as FEDIFFUSELIGHTING,ZB as FECONVOLVEMATRIX,XB as FECOMPOSITE,UB as FECOMPONENTTRANSFER,QB as FECOLORMATRIX,JB as FEBLEND,fq as EMBED,Cq as EM,GB as ELLIPSE,m as DelegateStateContext,Aq as DT,Iq as DL,Dq as DIV,Rq as DIALOG,Tq as DFN,Mq as DETAILS,EB as DESC,Fq as DEL,BB as DEFS,Oq as DD,Yq as DATALIST,Hq as DATA,jq as COLGROUP,Wq as COL,Lq as CODE,zB as CLIPPATH,$q as CITE,qB as CIRCLE,Zq as CAPTION,Xq as CANVAS,Uq as BUTTON,Qq as BR,Jq as BODY,Gq as BLOCKQUOTE,Eq as BDO,Bq as BDI,zq as BASE,qq as B,e as AUDIO,o as ASIDE,a as ARTICLE,d as AREA,EE as ANNOTATION_XML,BE as ANNOTATION,ez as ANIMATETRANSFORM,oz as ANIMATEMOTION,az as ANIMATE,t as ADDRESS,n as ABBR,s as A};
package/dist/vode.mjs CHANGED
@@ -228,13 +228,20 @@ function children(vode2) {
228
228
  return null;
229
229
  }
230
230
  function childCount(vode2) {
231
- return vode2.length - childrenStart(vode2);
231
+ const start = childrenStart(vode2);
232
+ if (start < 0)
233
+ return 0;
234
+ return vode2.length - start;
232
235
  }
233
236
  function child(vode2, index) {
234
- return vode2[index + childrenStart(vode2)];
237
+ const start = childrenStart(vode2);
238
+ if (start > 0)
239
+ return vode2[index + start];
240
+ else
241
+ return;
235
242
  }
236
243
  function childrenStart(vode2) {
237
- return props(vode2) ? 2 : 1;
244
+ return props(vode2) ? vode2.length > 2 ? 2 : -1 : Array.isArray(vode2) && vode2.length > 1 ? 1 : -1;
238
245
  }
239
246
  function mergeState(target, source, allowDeletion) {
240
247
  if (!source)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryupold/vode",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "a minimalist web framework",
5
5
  "author": "Michael Scherbakow (ryupold)",
6
6
  "license": "MIT",
@@ -28,7 +28,7 @@
28
28
  "build-classic": "esbuild index.ts --outfile=dist/vode.js --bundle --global-name=V",
29
29
  "build-classic-min": "esbuild index.ts --outfile=dist/vode.min.js --bundle --global-name=V --minify",
30
30
  "release": "bun run build && bun run build-min && bun run build-classic && bun run build-classic-min",
31
- "publish": "bun publish --provenance --access public",
31
+ "publish": "npm publish --access public",
32
32
  "clean": "tsc -b --clean",
33
33
  "watch": "tsc -b -w"
34
34
  },
package/src/vode.ts CHANGED
@@ -373,19 +373,24 @@ export function children<S = PatchableState>(vode: ChildVode<S> | AttachedVode<S
373
373
  if (start > 0) {
374
374
  return (<Vode<S>>vode).slice(start) as Vode<S>[];
375
375
  }
376
-
377
376
  return null;
378
377
  }
379
378
 
380
- export function childCount<S = PatchableState>(vode: Vode<S>) { return vode.length - childrenStart(vode); }
379
+ export function childCount<S = PatchableState>(vode: Vode<S>) {
380
+ const start = childrenStart(vode);
381
+ if (start < 0) return 0;
382
+ return vode.length - start;
383
+ }
381
384
 
382
385
  export function child<S = PatchableState>(vode: Vode<S>, index: number): ChildVode<S> | undefined {
383
- return vode[index + childrenStart(vode)] as ChildVode<S>;
386
+ const start = childrenStart(vode);
387
+ if (start > 0) return vode[index + start] as ChildVode<S>;
388
+ else return undefined;
384
389
  }
385
390
 
386
391
  /** index in vode at which child-vodes start */
387
- export function childrenStart<S = PatchableState>(vode: ChildVode<S> | AttachedVode<S>): number {
388
- return props(vode) ? 2 : 1;
392
+ export function childrenStart<S = PatchableState>(vode: ChildVode<S> | AttachedVode<S>): 1 | 2 | -1 {
393
+ return props(vode) ? (<Vode>vode).length > 2 ? 2 : -1 : (Array.isArray(vode) && vode.length > 1 ? 1 : -1);
389
394
  }
390
395
 
391
396
  function mergeState(target: any, source: any, allowDeletion: boolean) {