spikijs 1.1.38 → 1.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "spikijs",
3
3
  "license": "MIT",
4
- "version": "1.1.38",
4
+ "version": "1.1.39",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",
package/spiki.d.ts CHANGED
@@ -42,6 +42,10 @@ export interface SpikiInstance {
42
42
  */
43
43
  destroy?(): void;
44
44
 
45
+ /**
46
+ * Allows dynamic properties (e.g. variables from s-for).
47
+ */
48
+ [key: string]: any;
45
49
  }
46
50
 
47
51
  /**
@@ -52,18 +56,11 @@ export type ComponentFactory<T> = () => T & ThisType<T & SpikiInstance>;
52
56
 
53
57
  export interface Spiki {
54
58
  /**
55
- * Registers a new component with a factory function.
56
- * @param name Name matching 's-data' in HTML.
57
- * @param factory Factory function returning state.
58
- */
59
- data<T>(name: string, factory: ComponentFactory<T>): void;
60
-
61
- /**
62
- * Registers a new component with one or more modules/factories.
59
+ * Registers a new component.
63
60
  * @param name Name matching 's-data' in HTML.
64
- * @param modules Factory functions or objects returning/containing state.
61
+ * @param factory Function returning the state object.
65
62
  */
66
- data<T extends object>(name: string, ...modules: (ComponentFactory<any> | object)[]): void;
63
+ data<T extends object>(name: string, factory: ComponentFactory<T>): void;
67
64
 
68
65
  /**
69
66
  * Scans the document and mounts all components.
package/spiki.esm.js CHANGED
@@ -96,9 +96,7 @@ var spiki = (() => {
96
96
  var i = 0, len = effects.length;
97
97
  for (; i < len; i++) {
98
98
  var effect = effects[i];
99
- if (effect !== activeEffect) {
100
- effect.sched ? effect.sched(effect) : effect();
101
- }
99
+ effect.sched ? effect.sched(effect) : effect();
102
100
  }
103
101
  }
104
102
  };
@@ -129,15 +127,8 @@ var spiki = (() => {
129
127
  return () => cleanup(runner);
130
128
  };
131
129
 
132
- var isTrackable = (obj) => {
133
- return obj && typeof obj === 'object' && !obj._y &&
134
- !(obj instanceof Node) && !(obj instanceof Date) &&
135
- !(obj instanceof RegExp) && !(obj instanceof Map) &&
136
- !(obj instanceof Set) && !(obj instanceof Promise);
137
- };
138
-
139
130
  var makeReactive = (obj) => {
140
- if (!isTrackable(obj)) return obj;
131
+ if (!obj || typeof obj !== 'object' || obj._y || obj instanceof Node) return obj;
141
132
  if (Object.prototype.hasOwnProperty.call(obj, '_p')) return obj._p;
142
133
 
143
134
  var proxy = new Proxy(obj, {
@@ -180,22 +171,22 @@ var spiki = (() => {
180
171
  }
181
172
  if (comp.d) comp.r();
182
173
  track(target, key);
183
- return isTrackable(comp.v) ? makeReactive(comp.v) : comp.v;
174
+ return (comp.v && typeof comp.v === 'object' && !(comp.v instanceof Node)) ? makeReactive(comp.v) : comp.v;
184
175
  }
185
176
 
186
177
  if (Object.prototype.hasOwnProperty.call(target, key)) {
187
- track(target, Array.isArray(target) ? 'length' : key);
178
+ track(target, key);
188
179
  }
189
180
 
190
181
  var res = Reflect.get(target, key, receiver);
191
- return isTrackable(res) ? makeReactive(res) : res;
182
+ return (res && typeof res === 'object' && !(res instanceof Node)) ? makeReactive(res) : res;
192
183
  },
193
184
  set: (target, key, val, receiver) => {
194
185
  var old = target[key];
195
186
  var isArr = Array.isArray(target);
196
- var hadKey = isArr ? (key === 'length' || Number(key) < target.length) : Object.prototype.hasOwnProperty.call(target, key);
187
+ var hadKey = isArr ? Number(key) < target.length : Object.prototype.hasOwnProperty.call(target, key);
197
188
 
198
- if (!isArr && !hadKey) {
189
+ if (target._i && !hadKey) {
199
190
  var proto = Object.getPrototypeOf(target);
200
191
  while (proto && proto !== Object.prototype) {
201
192
  var rawProto = proto._t || proto;
@@ -283,13 +274,13 @@ var spiki = (() => {
283
274
  if (!cmpReg[name]) return;
284
275
 
285
276
  var data = cmpReg[name]();
286
- data.$refs = {};
287
- data.$root = rootElement;
288
- data.$store = globalStore;
289
- data.$parent = parentScope;
290
277
  if (parentScope) Object.setPrototypeOf(data, parentScope);
291
278
 
292
279
  var state = makeReactive(data);
280
+ state.$refs = {};
281
+ state.$root = rootElement;
282
+ state.$store = globalStore;
283
+ state.$parent = parentScope;
293
284
 
294
285
  var cleanups = [];
295
286
  var listeners = Object.create(null);
@@ -316,12 +307,10 @@ var spiki = (() => {
316
307
 
317
308
  if (handler.model) {
318
309
  var val = target.type === 'checkbox' ? target.checked : target.value;
319
- if (target.type === 'number' || target.type === 'range') {
320
- val = val === '' ? null : Number(val);
321
- } else if (typeof val === 'string') {
310
+ if (typeof val === 'string') {
322
311
  var clean = val.trim();
323
- if (clean && clean.length < 16 && clean.charCodeAt(clean.length - 1) !== 46 && isFinite(clean)) {
324
- if (clean.charCodeAt(0) !== 48 || clean.length === 1 || clean.charCodeAt(1) === 46) {
312
+ if (clean && isFinite(clean)) {
313
+ if (clean.charCodeAt(0) !== 48 || clean.length === 1 || clean.charCodeAt(1) === 46) {
325
314
  val = Number(clean);
326
315
  }
327
316
  }
@@ -437,7 +426,11 @@ var spiki = (() => {
437
426
  for (var i = 0; i < len; i++) {
438
427
  var key = isArr ? i : keys[i];
439
428
  var item = isArr ? list[i] : list[key];
440
- var unique = (keyPath ? evalPath(item, keyPath).val : null) ?? key;
429
+ var unique;
430
+ if (item == null || typeof item !== 'object') unique = String(item);
431
+ else if (keyPath) unique = evalPath(item, keyPath).val;
432
+ else unique = String(key) + '_o';
433
+
441
434
  if (usedKeys[unique]) unique += '_' + i;
442
435
  var row = nodePool[unique];
443
436
  if (row) {
@@ -458,14 +451,14 @@ var spiki = (() => {
458
451
  nodePool[unique] = row;
459
452
  }
460
453
  if (row.nodes[0] === anchor) {
461
- if (frag.childNodes.length && end.parentNode) end.parentNode.insertBefore(frag, anchor);
454
+ if (frag.childNodes.length) end.parentNode.insertBefore(frag, anchor);
462
455
  anchor = row.nodes[row.nodes.length - 1].nextSibling;
463
456
  } else {
464
457
  for (var n = 0; n < row.nodes.length; n++) frag.appendChild(row.nodes[n]);
465
458
  }
466
459
  usedKeys[unique] = true;
467
460
  }
468
- if (frag.childNodes.length && end.parentNode) end.parentNode.insertBefore(frag, anchor);
461
+ if (frag.childNodes.length) end.parentNode.insertBefore(frag, anchor);
469
462
  for (var k in nodePool) if (!usedKeys[k]) {
470
463
  nodePool[k].cleanups.forEach(c => c());
471
464
  nodePool[k].nodes.forEach(n => n.remove());
@@ -492,7 +485,6 @@ var spiki = (() => {
492
485
  }
493
486
  else if (attrName.charCodeAt(0) === 115 && attrName.charCodeAt(1) === 45) {
494
487
  let type = attrName.slice(2);
495
- if (type === 'data') continue;
496
488
  let p = attrValue.indexOf('.') === -1 ? attrValue : attrValue.split('.');
497
489
 
498
490
  if (type === 'init' || type === 'destroy') {
@@ -518,14 +510,11 @@ var spiki = (() => {
518
510
  else if (type === 'model') {
519
511
  bindings.push({ type: 'value', path: p });
520
512
  el._s = scope; el._h = el._h || {};
521
- var evt = (el.type === 'checkbox' || el.type === 'radio' || el.tagName === 'SELECT') ? 'change' : 'input';
513
+ var evt = (el.type === 'checkbox' || el.type === 'radio' || el.tagName==='SELECT') ? 'change' : 'input';
522
514
 
523
515
  if (evt === 'input') {
524
516
  el.addEventListener('compositionstart', () => el._c = true);
525
- el.addEventListener('compositionend', () => {
526
- el._c = false;
527
- el.dispatchEvent(new Event('input', { bubbles: true }));
528
- });
517
+ el.addEventListener('compositionend', () => { el._c = false; handle({target: el, type: 'input'}); });
529
518
  }
530
519
 
531
520
  (el._h[evt] = el._h[evt] || []).push({ model: true, p: p });
@@ -543,13 +532,6 @@ var spiki = (() => {
543
532
  }
544
533
  }
545
534
 
546
- var child = el.firstChild;
547
- while (child) {
548
- var nextSibling = child.nextSibling;
549
- walk(child, scope, parentCleanups);
550
- child = nextSibling;
551
- }
552
-
553
535
  if (bindings.length) {
554
536
  parentCleanups.push(effect(() => {
555
537
  var i = bindings.length;
@@ -568,6 +550,13 @@ var spiki = (() => {
568
550
  }
569
551
  }, nextTick));
570
552
  }
553
+
554
+ var child = el.firstChild;
555
+ while (child) {
556
+ var nextSibling = child.nextSibling;
557
+ walk(child, scope, parentCleanups);
558
+ child = nextSibling;
559
+ }
571
560
  };
572
561
 
573
562
  walk(rootElement, state, cleanups);
@@ -577,7 +566,7 @@ var spiki = (() => {
577
566
  unmount: () => {
578
567
  if (state.destroy) state.destroy.call(state);
579
568
  var i = cleanups.length; while (i--) cleanups[i]();
580
- for (var k in listeners) rootElement.removeEventListener(k, handle, !!captureEvents[k]);
569
+ for(var k in listeners) rootElement.removeEventListener(k, handle);
581
570
  if (state._c) for (var k in state._c) cleanup(state._c[k].r);
582
571
  rootElement._m = null;
583
572
  }
@@ -587,15 +576,11 @@ var spiki = (() => {
587
576
  };
588
577
 
589
578
  var raw = (o) => {
590
- if (!o || typeof o !== 'object' || o instanceof Node || o instanceof Date || o instanceof RegExp) return o;
579
+ if (!o || typeof o !== 'object') return o;
591
580
  var target = o._t || o;
592
581
  if (Array.isArray(target)) return target.map(e => raw(e));
593
582
  var result = {};
594
- for (var i in target) {
595
- if (Object.prototype.hasOwnProperty.call(target, i) && i.charCodeAt(0) !== 36 && i.charCodeAt(0) !== 95) {
596
- result[i] = raw(target[i]);
597
- }
598
- }
583
+ for (var i in target) result[i] = raw(target[i]);
599
584
  return result;
600
585
  };
601
586
 
package/spiki.esm.min.js CHANGED
@@ -1 +1 @@
1
- var spiki=(()=>{var e,t=Object.create(null),r=[],a=!1,n=null,o=!1,l=Promise.resolve(),i={blur:1,focus:1,scroll:1,load:1,error:1,mouseenter:1,mouseleave:1,toggle:1},s=e=>{e._q||(e._q=!0,r.push(e),a||(a=!0,l.then(()=>{var e=r;r=[],a=!1;for(var t=0;t<e.length;t++)e[t]._q=!1,e[t]()})))},c=(e,t)=>{var r,a=e;if("string"==typeof t)r=e?e[t]:void 0;else{for(var n=0,o=t.length;n<o-1&&a;)a=a[t[n++]];r=a?a[t[o-1]]:void 0}if(void 0===r){var l=Array.isArray(t)?t.join("."):t;console.warn("[spikijs] Property undefined: "+l)}return{ctx:a,val:r}},p={};["push","pop","shift","unshift","splice","sort","reverse"].forEach(e=>{p[e]=function(...t){o=!0;try{return Array.prototype[e].apply(this,t)}finally{o=!1,u(this,"length")}}});var f=(e,t)=>{if(n){var r=e._d||(Object.defineProperty(e,"_d",{value:Object.create(null),writable:!0}),e._d),a=r[t]||(r[t]=[]);-1===a.indexOf(n)&&(a.push(n),n.deps.push(a))}},u=(e,t)=>{if(!o&&e._d&&e._d[t])for(var r=e._d[t].slice(),a=0,l=r.length;a<l;a++){var i=r[a];i!==n&&(i.sched?i.sched(i):i())}},v=e=>{for(var t=e.deps.length;t--;){var r=e.deps[t],a=r.indexOf(e);-1!==a&&(r[a]=r[r.length-1],r.pop())}e.deps=[]},d=(e,t)=>{var r=()=>{v(r);var t=n;n=r;try{e()}finally{n=t}};return r.deps=[],r.sched=t,r(),()=>v(r)},h=e=>e&&"object"==typeof e&&!e._y&&!(e instanceof Node)&&!(e instanceof Date)&&!(e instanceof RegExp)&&!(e instanceof Map)&&!(e instanceof Set)&&!(e instanceof Promise),y=e=>{if(!h(e))return e;if(Object.prototype.hasOwnProperty.call(e,"_p"))return e._p;var t=new Proxy(e,{get:(e,t,r)=>{if("_y"===t)return r===e._p;if("_t"===t)return e;if("_d"===t)return e._d;if("_i"===t)return e._i;if("_c"===t)return e._c;if(Array.isArray(e)&&p.hasOwnProperty(t))return p[t];var a=Object.getOwnPropertyDescriptor(e,t);if(a&&a.get){var o=e._c||(Object.defineProperty(e,"_c",{value:Object.create(null)}),e._c),l=o[t];if(!l){var i=()=>{v(i);var t=n;n=i;try{l.d=!1,l.v=a.get.call(e._p)}finally{n=t}};i.deps=[],i.sched=()=>{l.d||(l.d=!0,u(e,t))},l=o[t]={r:i,d:!0,v:void 0}}return l.d&&l.r(),f(e,t),h(l.v)?y(l.v):l.v}Object.prototype.hasOwnProperty.call(e,t)&&f(e,Array.isArray(e)?"length":t);var s=Reflect.get(e,t,r);return h(s)?y(s):s},set:(e,t,r,a)=>{var n=e[t],l=Array.isArray(e),i=l?"length"===t||Number(t)<e.length:Object.prototype.hasOwnProperty.call(e,t);if(!l&&!i)for(var s=Object.getPrototypeOf(e);s&&s!==Object.prototype;){var c=s._t||s;if(Object.prototype.hasOwnProperty.call(c,t))return s[t]=r,!0;s=Object.getPrototypeOf(c)}var p=Reflect.set(e,t,r,a);return!o&&p&&(!i||r!==n||r&&"object"==typeof r)&&(u(e,t),l?u(e,"length"):i||u(e,"_k")),p},deleteProperty:(e,t)=>{var r=Object.prototype.hasOwnProperty.call(e,t),a=Reflect.deleteProperty(e,t);return a&&r&&(u(e,t),Array.isArray(e)?u(e,"length"):u(e,"_k")),a},ownKeys:e=>(f(e,"_k"),Reflect.ownKeys(e))});return Object.defineProperty(e,"_p",{value:t}),t};e=y({});var g=Object.create(null);g.text=(e,t)=>{t=null==t?"":t,e.textContent!==String(t)&&(e.textContent=t)},g.html=(e,t)=>{e.innerHTML!=t&&(e.innerHTML=null==t?"":t)},g.value=(e,t)=>{"checkbox"===e.type?e.checked=!!t:"radio"===e.type?e.checked=e.value==t:e.value!=t&&(e.value=null==t?"":t)},g.attr=(e,t,r)=>{if(null==t||!1===t)e.removeAttribute(r);else{var a=!0===t?"":String(t);e.getAttribute(r)!==a&&e.setAttribute(r,a)}},g.class=(e,t)=>{var r=e._n||"",a=Object.create(null);if(r.split(/\s+/).forEach(e=>e&&(a[e]=1)),"string"==typeof t)t.split(/\s+/).forEach(e=>e&&(a[e]=1));else if(t)for(var n in t)t[n]?a[n]=1:delete a[n];var o=Object.keys(a).join(" ");(e.getAttribute("class")||"")!==o&&e.setAttribute("class",o)};var b=(r,a)=>{if(r._m)return r._m;var n=r.getAttribute("s-data");if(t[n]){var o=t[n]();o.$refs={},o.$root=r,o.$store=e,o.$parent=a,a&&Object.setPrototypeOf(o,a);var l=y(o),p=[],u=Object.create(null),h=e=>{var t=e.target;if("input"!==e.type||!t._c)for(var a=r.parentNode,n=e.type;t&&t!==a&&!e.cancelBubble;){var o=t._h&&t._h[n];if(o){var i=t._s;if(!i||i.$root!==l.$root){t=t.parentNode;continue}for(var s=o.length;s--;){var p=o[s],f=p.p;if(p.model){var u="checkbox"===t.type?t.checked:t.value;if("number"===t.type||"range"===t.type)u=""===u?null:Number(u);else if("string"==typeof u){var v=u.trim();v&&v.length<16&&46!==v.charCodeAt(v.length-1)&&isFinite(v)&&(48===v.charCodeAt(0)&&1!==v.length&&46!==v.charCodeAt(1)||(u=Number(v)))}if("string"==typeof f)i&&(i[f]=u);else{for(var d=i,h=0,y=f.length-1;h<y&&d;)d=d[f[h++]];d&&(d[f[y]]=u)}}else{var g=c(i,f);"function"==typeof g.val&&(Object.defineProperty(e,"currentTarget",{configurable:!0,value:t}),g.val.call(g.ctx,e))}if(e.cancelBubble)break}}t=t.parentNode}},_=e=>{u[e]||(u[e]=!0,r.addEventListener(e,h,!!i[e]))},m=(e,t,a)=>{if(1===e.nodeType&&!e.hasAttribute("s-ignore"))if(e!==r&&e.hasAttribute("s-data")){var n=b(e,t);n&&a.push(n.unmount)}else{var o=e.getAttribute("s-if"),i=!o&&"TEMPLATE"===e.tagName&&e.getAttribute("s-for"),p=[];if(e.hasAttribute("class")&&!e._n&&(e._n=e.getAttribute("class")),o){var u=document.createTextNode(""),v=null,h=[];e.replaceWith(u);var O="!"===o[0],A=O?o.slice(1):o,j=-1===A.indexOf(".")?A:A.split(".");return a.push(()=>{for(var e=h.length;e--;)h[e]()}),a.push(d(()=>{var r=c(t,j).val;if(O&&(r=!r),r)v||((v=e.cloneNode(!0)).removeAttribute("s-if"),m(v,t,h),u.parentNode.insertBefore(v,u));else if(v){for(var a=h.length;a--;)h[a]();h=[],v.remove(),v=null}},s))}if(i){var x=i.indexOf(" in ");if(-1!==x){var P,N=i.slice(0,x).trim(),E=i.slice(x+4).trim(),k=N.replace(/[()]/g,"").split(","),w=k[0].trim(),C=k[1]?k[1].trim():null,T=-1===E.indexOf(".")?E:E.split("."),L=e.getAttribute("s-key"),S=L?-1===L.indexOf(".")?L:L.split("."):null,$=(u=document.createTextNode(""),Object.create(null));return e.replaceWith(u),a.push(()=>{for(var e in $)$[e].cleanups.forEach(e=>e())}),a.push(d(()=>{var r=c(t,T).val||[];"number"==typeof r&&(r=Array.from({length:Math.max(0,Math.floor(r))},(e,t)=>t+1)),Array.isArray(r)&&f(r,"length");var a=document.createDocumentFragment(),n=u.nextSibling;P=Object.create(null);for(var o=Array.isArray(r),l=o?r:Object.keys(r),i=o?r.length:l.length,s=0;s<i;s++){var p=o?s:l[s],v=o?r[s]:r[p],d=(S?c(v,S).val:null)??p;P[d]&&(d+="_"+s);var h=$[d];if(h)h.scope[w]=v,C&&(h.scope[C]=p);else{var g=e.content.cloneNode(!0),b=Object.create(t);Object.defineProperty(b,"_i",{value:!0});var _=y(b);_[w]=v,C&&(_[C]=p);for(var O=Array.prototype.slice.call(g.childNodes),A=[],j=0;j<O.length;j++)m(O[j],_,A);h={nodes:Array.prototype.slice.call(g.childNodes),scope:_,cleanups:A},$[d]=h}if(h.nodes[0]===n)a.childNodes.length&&u.parentNode&&u.parentNode.insertBefore(a,n),n=h.nodes[h.nodes.length-1].nextSibling;else for(j=0;j<h.nodes.length;j++)a.appendChild(h.nodes[j]);P[d]=!0}for(var x in a.childNodes.length&&u.parentNode&&u.parentNode.insertBefore(a,n),$)P[x]||($[x].cleanups.forEach(e=>e()),$[x].nodes.forEach(e=>e.remove()),delete $[x])},s))}}if(e.hasAttributes())for(var M=e.attributes,R=M.length;R--;){var B=M[R],D=B.name,q=B.value;if(58===D.charCodeAt(0)){var F=D.slice(1),H=33===q.charCodeAt(0),K=H?q.slice(1):q;j=-1===K.indexOf(".")?K:K.split(".");p.push({type:"attr",name:F,path:j,neg:H})}else if(115===D.charCodeAt(0)&&45===D.charCodeAt(1)){let r=D.slice(2);if("data"===r)continue;let n=-1===q.indexOf(".")?q:q.split(".");if("init"===r||"destroy"===r)((r,n)=>{var o=c(t,n);"function"==typeof o.val&&("init"===r?s(()=>{var t=o.val.call(o.ctx,e);"function"==typeof t&&a.push(t)}):a.push(()=>o.val.call(o.ctx,e)))})(r,n);else if("effect"===r)a.push(d(()=>{var r=c(t,n);"function"==typeof r.val&&r.val.call(r.ctx,e)},s));else if("model"===r){p.push({type:"value",path:n}),e._s=t,e._h=e._h||{};var W="checkbox"===e.type||"radio"===e.type||"SELECT"===e.tagName?"change":"input";"input"===W&&(e.addEventListener("compositionstart",()=>e._c=!0),e.addEventListener("compositionend",()=>{e._c=!1,e.dispatchEvent(new Event("input",{bubbles:!0}))})),(e._h[W]=e._h[W]||[]).push({model:!0,p:n}),_(W)}else"ref"===r?l.$refs[q]=e:g[r]?p.push({type:r,path:n}):(e._s=t,e._h=e._h||{},(e._h[r]=e._h[r]||[]).unshift({p:n}),_(r))}}for(var z=e.firstChild;z;){var G=z.nextSibling;m(z,t,a),z=G}p.length&&a.push(d(()=>{for(var r=p.length;r--;){var a=p[r],n=c(t,a.path),o="function"==typeof n.val?n.val.call(n.ctx,e):n.val;"attr"===a.type?(a.neg&&(o=!o),"class"===a.name?g.class(e,o):g.attr(e,o,a.name)):g[a.type](e,o)}},s))}};m(r,l,p),l.init&&l.init();var O={unmount:()=>{l.destroy&&l.destroy.call(l);for(var e=p.length;e--;)p[e]();for(var t in u)r.removeEventListener(t,h,!!i[t]);if(l._c)for(var t in l._c)v(l._c[t].r);r._m=null}};return r._m=O,O}},_=e=>{if(!e||"object"!=typeof e||e instanceof Node||e instanceof Date||e instanceof RegExp)return e;var t=e._t||e;if(Array.isArray(t))return t.map(e=>_(e));var r={};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&36!==a.charCodeAt(0)&&95!==a.charCodeAt(0)&&(r[a]=_(t[a]));return r};return{data:(e,...r)=>{t[e]=1===r.length?r[0]:()=>{for(var e={},t=0;t<r.length;t++)Object.defineProperties(e,Object.getOwnPropertyDescriptors(r[t]()));return e}},start:()=>{for(var e=document.querySelectorAll("[s-data]"),t=0;t<e.length;t++)b(e[t])},store:(t,r)=>{if(void 0===r)return e[t];e[t]=r;var a=e[t];return a&&"function"==typeof a.init&&a.init.call(a),a},raw:_,mount:e=>b(e),unmount:e=>{e&&e._m&&e._m.unmount()}}})();export default spiki;
1
+ var spiki=(()=>{var e,t=Object.create(null),r=[],a=!1,n=null,o=!1,l=Promise.resolve(),i={blur:1,focus:1,scroll:1,load:1,error:1,mouseenter:1,mouseleave:1,toggle:1},s=e=>{e._q||(e._q=!0,r.push(e),a||(a=!0,l.then(()=>{var e=r;r=[],a=!1;for(var t=0;t<e.length;t++)e[t]._q=!1,e[t]()})))},c=(e,t)=>{var r,a=e;if("string"==typeof t)r=e?e[t]:void 0;else{for(var n=0,o=t.length;n<o-1&&a;)a=a[t[n++]];r=a?a[t[o-1]]:void 0}if(void 0===r){var l=Array.isArray(t)?t.join("."):t;console.warn("[spikijs] Property undefined: "+l)}return{ctx:a,val:r}},f={};["push","pop","shift","unshift","splice","sort","reverse"].forEach(e=>{f[e]=function(...t){o=!0;try{return Array.prototype[e].apply(this,t)}finally{o=!1,u(this,"length")}}});var p=(e,t)=>{if(n){var r=e._d||(Object.defineProperty(e,"_d",{value:Object.create(null),writable:!0}),e._d),a=r[t]||(r[t]=[]);-1===a.indexOf(n)&&(a.push(n),n.deps.push(a))}},u=(e,t)=>{if(!o&&e._d&&e._d[t])for(var r=e._d[t].slice(),a=0,n=r.length;a<n;a++){var l=r[a];l.sched?l.sched(l):l()}},v=e=>{for(var t=e.deps.length;t--;){var r=e.deps[t],a=r.indexOf(e);-1!==a&&(r[a]=r[r.length-1],r.pop())}e.deps=[]},d=(e,t)=>{var r=()=>{v(r);var t=n;n=r;try{e()}finally{n=t}};return r.deps=[],r.sched=t,r(),()=>v(r)},h=e=>{if(!e||"object"!=typeof e||e._y||e instanceof Node)return e;if(Object.prototype.hasOwnProperty.call(e,"_p"))return e._p;var t=new Proxy(e,{get:(e,t,r)=>{if("_y"===t)return r===e._p;if("_t"===t)return e;if("_d"===t)return e._d;if("_i"===t)return e._i;if("_c"===t)return e._c;if(Array.isArray(e)&&f.hasOwnProperty(t))return f[t];var a=Object.getOwnPropertyDescriptor(e,t);if(a&&a.get){var o=e._c||(Object.defineProperty(e,"_c",{value:Object.create(null)}),e._c),l=o[t];if(!l){var i=()=>{v(i);var t=n;n=i;try{l.d=!1,l.v=a.get.call(e._p)}finally{n=t}};i.deps=[],i.sched=()=>{l.d||(l.d=!0,u(e,t))},l=o[t]={r:i,d:!0,v:void 0}}return l.d&&l.r(),p(e,t),!l.v||"object"!=typeof l.v||l.v instanceof Node?l.v:h(l.v)}Object.prototype.hasOwnProperty.call(e,t)&&p(e,t);var s=Reflect.get(e,t,r);return!s||"object"!=typeof s||s instanceof Node?s:h(s)},set:(e,t,r,a)=>{var n=e[t],l=Array.isArray(e),i=l?Number(t)<e.length:Object.prototype.hasOwnProperty.call(e,t);if(e._i&&!i)for(var s=Object.getPrototypeOf(e);s&&s!==Object.prototype;){var c=s._t||s;if(Object.prototype.hasOwnProperty.call(c,t))return s[t]=r,!0;s=Object.getPrototypeOf(c)}var f=Reflect.set(e,t,r,a);return!o&&f&&(!i||r!==n||r&&"object"==typeof r)&&(u(e,t),l?u(e,"length"):i||u(e,"_k")),f},deleteProperty:(e,t)=>{var r=Object.prototype.hasOwnProperty.call(e,t),a=Reflect.deleteProperty(e,t);return a&&r&&(u(e,t),Array.isArray(e)?u(e,"length"):u(e,"_k")),a},ownKeys:e=>(p(e,"_k"),Reflect.ownKeys(e))});return Object.defineProperty(e,"_p",{value:t}),t};e=h({});var y=Object.create(null);y.text=(e,t)=>{t=null==t?"":t,e.textContent!==String(t)&&(e.textContent=t)},y.html=(e,t)=>{e.innerHTML!=t&&(e.innerHTML=null==t?"":t)},y.value=(e,t)=>{"checkbox"===e.type?e.checked=!!t:"radio"===e.type?e.checked=e.value==t:e.value!=t&&(e.value=null==t?"":t)},y.attr=(e,t,r)=>{if(null==t||!1===t)e.removeAttribute(r);else{var a=!0===t?"":String(t);e.getAttribute(r)!==a&&e.setAttribute(r,a)}},y.class=(e,t)=>{var r=e._n||"",a=Object.create(null);if(r.split(/\s+/).forEach(e=>e&&(a[e]=1)),"string"==typeof t)t.split(/\s+/).forEach(e=>e&&(a[e]=1));else if(t)for(var n in t)t[n]?a[n]=1:delete a[n];var o=Object.keys(a).join(" ");(e.getAttribute("class")||"")!==o&&e.setAttribute("class",o)};var g=(r,a)=>{if(r._m)return r._m;var n=r.getAttribute("s-data");if(t[n]){var o=t[n]();a&&Object.setPrototypeOf(o,a);var l=h(o);l.$refs={},l.$root=r,l.$store=e,l.$parent=a;var f=[],u=Object.create(null),b=e=>{var t=e.target;if("input"!==e.type||!t._c)for(var a=r.parentNode,n=e.type;t&&t!==a&&!e.cancelBubble;){var o=t._h&&t._h[n];if(o){var i=t._s;if(!i||i.$root!==l.$root){t=t.parentNode;continue}for(var s=o.length;s--;){var f=o[s],p=f.p;if(f.model){var u="checkbox"===t.type?t.checked:t.value;if("string"==typeof u){var v=u.trim();v&&isFinite(v)&&(48===v.charCodeAt(0)&&1!==v.length&&46!==v.charCodeAt(1)||(u=Number(v)))}if("string"==typeof p)i&&(i[p]=u);else{for(var d=i,h=0,y=p.length-1;h<y&&d;)d=d[p[h++]];d&&(d[p[y]]=u)}}else{var g=c(i,p);"function"==typeof g.val&&(Object.defineProperty(e,"currentTarget",{configurable:!0,value:t}),g.val.call(g.ctx,e))}if(e.cancelBubble)break}}t=t.parentNode}},_=e=>{u[e]||(u[e]=!0,r.addEventListener(e,b,!!i[e]))},m=(e,t,a)=>{if(1===e.nodeType&&!e.hasAttribute("s-ignore"))if(e!==r&&e.hasAttribute("s-data")){var n=g(e,t);n&&a.push(n.unmount)}else{var o=e.getAttribute("s-if"),i=!o&&"TEMPLATE"===e.tagName&&e.getAttribute("s-for"),f=[];if(e.hasAttribute("class")&&!e._n&&(e._n=e.getAttribute("class")),o){var u=document.createTextNode(""),v=null,O=[];e.replaceWith(u);var A="!"===o[0],j=A?o.slice(1):o,x=-1===j.indexOf(".")?j:j.split(".");return a.push(()=>{for(var e=O.length;e--;)O[e]()}),a.push(d(()=>{var r=c(t,x).val;if(A&&(r=!r),r)v||((v=e.cloneNode(!0)).removeAttribute("s-if"),m(v,t,O),u.parentNode.insertBefore(v,u));else if(v){for(var a=O.length;a--;)O[a]();O=[],v.remove(),v=null}},s))}if(i){var P=i.indexOf(" in ");if(-1!==P){var N,k=i.slice(0,P).trim(),w=i.slice(P+4).trim(),E=k.replace(/[()]/g,"").split(","),C=E[0].trim(),S=E[1]?E[1].trim():null,T=-1===w.indexOf(".")?w:w.split("."),L=e.getAttribute("s-key"),$=L?-1===L.indexOf(".")?L:L.split("."):null,B=(u=document.createTextNode(""),Object.create(null));return e.replaceWith(u),a.push(()=>{for(var e in B)B[e].cleanups.forEach(e=>e())}),a.push(d(()=>{var r=c(t,T).val||[];"number"==typeof r&&(r=Array.from({length:Math.max(0,Math.floor(r))},(e,t)=>t+1)),Array.isArray(r)&&p(r,"length");var a=document.createDocumentFragment(),n=u.nextSibling;N=Object.create(null);for(var o=Array.isArray(r),l=o?r:Object.keys(r),i=o?r.length:l.length,s=0;s<i;s++){var f,v=o?s:l[s],d=o?r[s]:r[v];f=null==d||"object"!=typeof d?String(d):$?c(d,$).val:String(v)+"_o",N[f]&&(f+="_"+s);var y=B[f];if(y)y.scope[C]=d,S&&(y.scope[S]=v);else{var g=e.content.cloneNode(!0),b=Object.create(t);Object.defineProperty(b,"_i",{value:!0});var _=h(b);_[C]=d,S&&(_[S]=v);for(var O=Array.prototype.slice.call(g.childNodes),A=[],j=0;j<O.length;j++)m(O[j],_,A);y={nodes:Array.prototype.slice.call(g.childNodes),scope:_,cleanups:A},B[f]=y}if(y.nodes[0]===n)a.childNodes.length&&u.parentNode.insertBefore(a,n),n=y.nodes[y.nodes.length-1].nextSibling;else for(j=0;j<y.nodes.length;j++)a.appendChild(y.nodes[j]);N[f]=!0}for(var x in a.childNodes.length&&u.parentNode.insertBefore(a,n),B)N[x]||(B[x].cleanups.forEach(e=>e()),B[x].nodes.forEach(e=>e.remove()),delete B[x])},s))}}if(e.hasAttributes())for(var M=e.attributes,q=M.length;q--;){var R=M[q],D=R.name,F=R.value;if(58===D.charCodeAt(0)){var H=D.slice(1),K=33===F.charCodeAt(0),W=K?F.slice(1):F;x=-1===W.indexOf(".")?W:W.split(".");f.push({type:"attr",name:H,path:x,neg:K})}else if(115===D.charCodeAt(0)&&45===D.charCodeAt(1)){let r=D.slice(2),n=-1===F.indexOf(".")?F:F.split(".");if("init"===r||"destroy"===r)((r,n)=>{var o=c(t,n);"function"==typeof o.val&&("init"===r?s(()=>{var t=o.val.call(o.ctx,e);"function"==typeof t&&a.push(t)}):a.push(()=>o.val.call(o.ctx,e)))})(r,n);else if("effect"===r)a.push(d(()=>{var r=c(t,n);"function"==typeof r.val&&r.val.call(r.ctx,e)},s));else if("model"===r){f.push({type:"value",path:n}),e._s=t,e._h=e._h||{};var z="checkbox"===e.type||"radio"===e.type||"SELECT"===e.tagName?"change":"input";"input"===z&&(e.addEventListener("compositionstart",()=>e._c=!0),e.addEventListener("compositionend",()=>{e._c=!1,b({target:e,type:"input"})})),(e._h[z]=e._h[z]||[]).push({model:!0,p:n}),_(z)}else"ref"===r?l.$refs[F]=e:y[r]?f.push({type:r,path:n}):(e._s=t,e._h=e._h||{},(e._h[r]=e._h[r]||[]).unshift({p:n}),_(r))}}f.length&&a.push(d(()=>{for(var r=f.length;r--;){var a=f[r],n=c(t,a.path),o="function"==typeof n.val?n.val.call(n.ctx,e):n.val;"attr"===a.type?(a.neg&&(o=!o),"class"===a.name?y.class(e,o):y.attr(e,o,a.name)):y[a.type](e,o)}},s));for(var G=e.firstChild;G;){var I=G.nextSibling;m(G,t,a),G=I}}};m(r,l,f),l.init&&l.init();var O={unmount:()=>{l.destroy&&l.destroy.call(l);for(var e=f.length;e--;)f[e]();for(var t in u)r.removeEventListener(t,b);if(l._c)for(var t in l._c)v(l._c[t].r);r._m=null}};return r._m=O,O}},b=e=>{if(!e||"object"!=typeof e)return e;var t=e._t||e;if(Array.isArray(t))return t.map(e=>b(e));var r={};for(var a in t)r[a]=b(t[a]);return r};return{data:(e,...r)=>{t[e]=1===r.length?r[0]:()=>{for(var e={},t=0;t<r.length;t++)Object.defineProperties(e,Object.getOwnPropertyDescriptors(r[t]()));return e}},start:()=>{for(var e=document.querySelectorAll("[s-data]"),t=0;t<e.length;t++)g(e[t])},store:(t,r)=>{if(void 0===r)return e[t];e[t]=r;var a=e[t];return a&&"function"==typeof a.init&&a.init.call(a),a},raw:b,mount:e=>g(e),unmount:e=>{e&&e._m&&e._m.unmount()}}})();export default spiki;
package/spiki.js CHANGED
@@ -99,9 +99,7 @@ var spiki = (() => {
99
99
  var i = 0, len = effects.length;
100
100
  for (; i < len; i++) {
101
101
  var effect = effects[i];
102
- if (effect !== activeEffect) {
103
- effect.sched ? effect.sched(effect) : effect();
104
- }
102
+ effect.sched ? effect.sched(effect) : effect();
105
103
  }
106
104
  }
107
105
  };
@@ -132,15 +130,8 @@ var spiki = (() => {
132
130
  return () => cleanup(runner);
133
131
  };
134
132
 
135
- var isTrackable = (obj) => {
136
- return obj && typeof obj === 'object' && !obj._y &&
137
- !(obj instanceof Node) && !(obj instanceof Date) &&
138
- !(obj instanceof RegExp) && !(obj instanceof Map) &&
139
- !(obj instanceof Set) && !(obj instanceof Promise);
140
- };
141
-
142
133
  var makeReactive = (obj) => {
143
- if (!isTrackable(obj)) return obj;
134
+ if (!obj || typeof obj !== 'object' || obj._y || obj instanceof Node) return obj;
144
135
  if (Object.prototype.hasOwnProperty.call(obj, '_p')) return obj._p;
145
136
 
146
137
  var proxy = new Proxy(obj, {
@@ -183,22 +174,22 @@ var spiki = (() => {
183
174
  }
184
175
  if (comp.d) comp.r();
185
176
  track(target, key);
186
- return isTrackable(comp.v) ? makeReactive(comp.v) : comp.v;
177
+ return (comp.v && typeof comp.v === 'object' && !(comp.v instanceof Node)) ? makeReactive(comp.v) : comp.v;
187
178
  }
188
179
 
189
180
  if (Object.prototype.hasOwnProperty.call(target, key)) {
190
- track(target, Array.isArray(target) ? 'length' : key);
181
+ track(target, key);
191
182
  }
192
183
 
193
184
  var res = Reflect.get(target, key, receiver);
194
- return isTrackable(res) ? makeReactive(res) : res;
185
+ return (res && typeof res === 'object' && !(res instanceof Node)) ? makeReactive(res) : res;
195
186
  },
196
187
  set: (target, key, val, receiver) => {
197
188
  var old = target[key];
198
189
  var isArr = Array.isArray(target);
199
- var hadKey = isArr ? (key === 'length' || Number(key) < target.length) : Object.prototype.hasOwnProperty.call(target, key);
190
+ var hadKey = isArr ? Number(key) < target.length : Object.prototype.hasOwnProperty.call(target, key);
200
191
 
201
- if (!isArr && !hadKey) {
192
+ if (target._i && !hadKey) {
202
193
  var proto = Object.getPrototypeOf(target);
203
194
  while (proto && proto !== Object.prototype) {
204
195
  var rawProto = proto._t || proto;
@@ -286,13 +277,13 @@ var spiki = (() => {
286
277
  if (!cmpReg[name]) return;
287
278
 
288
279
  var data = cmpReg[name]();
289
- data.$refs = {};
290
- data.$root = rootElement;
291
- data.$store = globalStore;
292
- data.$parent = parentScope;
293
280
  if (parentScope) Object.setPrototypeOf(data, parentScope);
294
281
 
295
282
  var state = makeReactive(data);
283
+ state.$refs = {};
284
+ state.$root = rootElement;
285
+ state.$store = globalStore;
286
+ state.$parent = parentScope;
296
287
 
297
288
  var cleanups = [];
298
289
  var listeners = Object.create(null);
@@ -319,12 +310,10 @@ var spiki = (() => {
319
310
 
320
311
  if (handler.model) {
321
312
  var val = target.type === 'checkbox' ? target.checked : target.value;
322
- if (target.type === 'number' || target.type === 'range') {
323
- val = val === '' ? null : Number(val);
324
- } else if (typeof val === 'string') {
313
+ if (typeof val === 'string') {
325
314
  var clean = val.trim();
326
- if (clean && clean.length < 16 && clean.charCodeAt(clean.length - 1) !== 46 && isFinite(clean)) {
327
- if (clean.charCodeAt(0) !== 48 || clean.length === 1 || clean.charCodeAt(1) === 46) {
315
+ if (clean && isFinite(clean)) {
316
+ if (clean.charCodeAt(0) !== 48 || clean.length === 1 || clean.charCodeAt(1) === 46) {
328
317
  val = Number(clean);
329
318
  }
330
319
  }
@@ -440,7 +429,11 @@ var spiki = (() => {
440
429
  for (var i = 0; i < len; i++) {
441
430
  var key = isArr ? i : keys[i];
442
431
  var item = isArr ? list[i] : list[key];
443
- var unique = (keyPath ? evalPath(item, keyPath).val : null) ?? key;
432
+ var unique;
433
+ if (item == null || typeof item !== 'object') unique = String(item);
434
+ else if (keyPath) unique = evalPath(item, keyPath).val;
435
+ else unique = String(key) + '_o';
436
+
444
437
  if (usedKeys[unique]) unique += '_' + i;
445
438
  var row = nodePool[unique];
446
439
  if (row) {
@@ -461,14 +454,14 @@ var spiki = (() => {
461
454
  nodePool[unique] = row;
462
455
  }
463
456
  if (row.nodes[0] === anchor) {
464
- if (frag.childNodes.length && end.parentNode) end.parentNode.insertBefore(frag, anchor);
457
+ if (frag.childNodes.length) end.parentNode.insertBefore(frag, anchor);
465
458
  anchor = row.nodes[row.nodes.length - 1].nextSibling;
466
459
  } else {
467
460
  for (var n = 0; n < row.nodes.length; n++) frag.appendChild(row.nodes[n]);
468
461
  }
469
462
  usedKeys[unique] = true;
470
463
  }
471
- if (frag.childNodes.length && end.parentNode) end.parentNode.insertBefore(frag, anchor);
464
+ if (frag.childNodes.length) end.parentNode.insertBefore(frag, anchor);
472
465
  for (var k in nodePool) if (!usedKeys[k]) {
473
466
  nodePool[k].cleanups.forEach(c => c());
474
467
  nodePool[k].nodes.forEach(n => n.remove());
@@ -495,7 +488,6 @@ var spiki = (() => {
495
488
  }
496
489
  else if (attrName.charCodeAt(0) === 115 && attrName.charCodeAt(1) === 45) {
497
490
  let type = attrName.slice(2);
498
- if (type === 'data') continue;
499
491
  let p = attrValue.indexOf('.') === -1 ? attrValue : attrValue.split('.');
500
492
 
501
493
  if (type === 'init' || type === 'destroy') {
@@ -521,14 +513,11 @@ var spiki = (() => {
521
513
  else if (type === 'model') {
522
514
  bindings.push({ type: 'value', path: p });
523
515
  el._s = scope; el._h = el._h || {};
524
- var evt = (el.type === 'checkbox' || el.type === 'radio' || el.tagName === 'SELECT') ? 'change' : 'input';
516
+ var evt = (el.type === 'checkbox' || el.type === 'radio' || el.tagName==='SELECT') ? 'change' : 'input';
525
517
 
526
518
  if (evt === 'input') {
527
519
  el.addEventListener('compositionstart', () => el._c = true);
528
- el.addEventListener('compositionend', () => {
529
- el._c = false;
530
- el.dispatchEvent(new Event('input', { bubbles: true }));
531
- });
520
+ el.addEventListener('compositionend', () => { el._c = false; handle({target: el, type: 'input'}); });
532
521
  }
533
522
 
534
523
  (el._h[evt] = el._h[evt] || []).push({ model: true, p: p });
@@ -546,13 +535,6 @@ var spiki = (() => {
546
535
  }
547
536
  }
548
537
 
549
- var child = el.firstChild;
550
- while (child) {
551
- var nextSibling = child.nextSibling;
552
- walk(child, scope, parentCleanups);
553
- child = nextSibling;
554
- }
555
-
556
538
  if (bindings.length) {
557
539
  parentCleanups.push(effect(() => {
558
540
  var i = bindings.length;
@@ -571,6 +553,13 @@ var spiki = (() => {
571
553
  }
572
554
  }, nextTick));
573
555
  }
556
+
557
+ var child = el.firstChild;
558
+ while (child) {
559
+ var nextSibling = child.nextSibling;
560
+ walk(child, scope, parentCleanups);
561
+ child = nextSibling;
562
+ }
574
563
  };
575
564
 
576
565
  walk(rootElement, state, cleanups);
@@ -580,7 +569,7 @@ var spiki = (() => {
580
569
  unmount: () => {
581
570
  if (state.destroy) state.destroy.call(state);
582
571
  var i = cleanups.length; while (i--) cleanups[i]();
583
- for (var k in listeners) rootElement.removeEventListener(k, handle, !!captureEvents[k]);
572
+ for(var k in listeners) rootElement.removeEventListener(k, handle);
584
573
  if (state._c) for (var k in state._c) cleanup(state._c[k].r);
585
574
  rootElement._m = null;
586
575
  }
@@ -590,15 +579,11 @@ var spiki = (() => {
590
579
  };
591
580
 
592
581
  var raw = (o) => {
593
- if (!o || typeof o !== 'object' || o instanceof Node || o instanceof Date || o instanceof RegExp) return o;
582
+ if (!o || typeof o !== 'object') return o;
594
583
  var target = o._t || o;
595
584
  if (Array.isArray(target)) return target.map(e => raw(e));
596
585
  var result = {};
597
- for (var i in target) {
598
- if (Object.prototype.hasOwnProperty.call(target, i) && i.charCodeAt(0) !== 36 && i.charCodeAt(0) !== 95) {
599
- result[i] = raw(target[i]);
600
- }
601
- }
586
+ for (var i in target) result[i] = raw(target[i]);
602
587
  return result;
603
588
  };
604
589
 
package/spiki.min.js CHANGED
@@ -1 +1 @@
1
- !function(){"use strict";var e=(()=>{var e,t=Object.create(null),r=[],a=!1,n=null,o=!1,l=Promise.resolve(),i={blur:1,focus:1,scroll:1,load:1,error:1,mouseenter:1,mouseleave:1,toggle:1},s=e=>{e._q||(e._q=!0,r.push(e),a||(a=!0,l.then(()=>{var e=r;r=[],a=!1;for(var t=0;t<e.length;t++)e[t]._q=!1,e[t]()})))},c=(e,t)=>{var r,a=e;if("string"==typeof t)r=e?e[t]:void 0;else{for(var n=0,o=t.length;n<o-1&&a;)a=a[t[n++]];r=a?a[t[o-1]]:void 0}if(void 0===r){var l=Array.isArray(t)?t.join("."):t;console.warn("[spikijs] Property undefined: "+l)}return{ctx:a,val:r}},f={};["push","pop","shift","unshift","splice","sort","reverse"].forEach(e=>{f[e]=function(...t){o=!0;try{return Array.prototype[e].apply(this,t)}finally{o=!1,u(this,"length")}}});var p=(e,t)=>{if(n){var r=e._d||(Object.defineProperty(e,"_d",{value:Object.create(null),writable:!0}),e._d),a=r[t]||(r[t]=[]);-1===a.indexOf(n)&&(a.push(n),n.deps.push(a))}},u=(e,t)=>{if(!o&&e._d&&e._d[t])for(var r=e._d[t].slice(),a=0,l=r.length;a<l;a++){var i=r[a];i!==n&&(i.sched?i.sched(i):i())}},v=e=>{for(var t=e.deps.length;t--;){var r=e.deps[t],a=r.indexOf(e);-1!==a&&(r[a]=r[r.length-1],r.pop())}e.deps=[]},d=(e,t)=>{var r=()=>{v(r);var t=n;n=r;try{e()}finally{n=t}};return r.deps=[],r.sched=t,r(),()=>v(r)},h=e=>e&&"object"==typeof e&&!e._y&&!(e instanceof Node)&&!(e instanceof Date)&&!(e instanceof RegExp)&&!(e instanceof Map)&&!(e instanceof Set)&&!(e instanceof Promise),y=e=>{if(!h(e))return e;if(Object.prototype.hasOwnProperty.call(e,"_p"))return e._p;var t=new Proxy(e,{get:(e,t,r)=>{if("_y"===t)return r===e._p;if("_t"===t)return e;if("_d"===t)return e._d;if("_i"===t)return e._i;if("_c"===t)return e._c;if(Array.isArray(e)&&f.hasOwnProperty(t))return f[t];var a=Object.getOwnPropertyDescriptor(e,t);if(a&&a.get){var o=e._c||(Object.defineProperty(e,"_c",{value:Object.create(null)}),e._c),l=o[t];if(!l){var i=()=>{v(i);var t=n;n=i;try{l.d=!1,l.v=a.get.call(e._p)}finally{n=t}};i.deps=[],i.sched=()=>{l.d||(l.d=!0,u(e,t))},l=o[t]={r:i,d:!0,v:void 0}}return l.d&&l.r(),p(e,t),h(l.v)?y(l.v):l.v}Object.prototype.hasOwnProperty.call(e,t)&&p(e,Array.isArray(e)?"length":t);var s=Reflect.get(e,t,r);return h(s)?y(s):s},set:(e,t,r,a)=>{var n=e[t],l=Array.isArray(e),i=l?"length"===t||Number(t)<e.length:Object.prototype.hasOwnProperty.call(e,t);if(!l&&!i)for(var s=Object.getPrototypeOf(e);s&&s!==Object.prototype;){var c=s._t||s;if(Object.prototype.hasOwnProperty.call(c,t))return s[t]=r,!0;s=Object.getPrototypeOf(c)}var f=Reflect.set(e,t,r,a);return!o&&f&&(!i||r!==n||r&&"object"==typeof r)&&(u(e,t),l?u(e,"length"):i||u(e,"_k")),f},deleteProperty:(e,t)=>{var r=Object.prototype.hasOwnProperty.call(e,t),a=Reflect.deleteProperty(e,t);return a&&r&&(u(e,t),Array.isArray(e)?u(e,"length"):u(e,"_k")),a},ownKeys:e=>(p(e,"_k"),Reflect.ownKeys(e))});return Object.defineProperty(e,"_p",{value:t}),t};e=y({});var g=Object.create(null);g.text=(e,t)=>{t=null==t?"":t,e.textContent!==String(t)&&(e.textContent=t)},g.html=(e,t)=>{e.innerHTML!=t&&(e.innerHTML=null==t?"":t)},g.value=(e,t)=>{"checkbox"===e.type?e.checked=!!t:"radio"===e.type?e.checked=e.value==t:e.value!=t&&(e.value=null==t?"":t)},g.attr=(e,t,r)=>{if(null==t||!1===t)e.removeAttribute(r);else{var a=!0===t?"":String(t);e.getAttribute(r)!==a&&e.setAttribute(r,a)}},g.class=(e,t)=>{var r=e._n||"",a=Object.create(null);if(r.split(/\s+/).forEach(e=>e&&(a[e]=1)),"string"==typeof t)t.split(/\s+/).forEach(e=>e&&(a[e]=1));else if(t)for(var n in t)t[n]?a[n]=1:delete a[n];var o=Object.keys(a).join(" ");(e.getAttribute("class")||"")!==o&&e.setAttribute("class",o)};var b=(r,a)=>{if(r._m)return r._m;var n=r.getAttribute("s-data");if(t[n]){var o=t[n]();o.$refs={},o.$root=r,o.$store=e,o.$parent=a,a&&Object.setPrototypeOf(o,a);var l=y(o),f=[],u=Object.create(null),h=e=>{var t=e.target;if("input"!==e.type||!t._c)for(var a=r.parentNode,n=e.type;t&&t!==a&&!e.cancelBubble;){var o=t._h&&t._h[n];if(o){var i=t._s;if(!i||i.$root!==l.$root){t=t.parentNode;continue}for(var s=o.length;s--;){var f=o[s],p=f.p;if(f.model){var u="checkbox"===t.type?t.checked:t.value;if("number"===t.type||"range"===t.type)u=""===u?null:Number(u);else if("string"==typeof u){var v=u.trim();v&&v.length<16&&46!==v.charCodeAt(v.length-1)&&isFinite(v)&&(48===v.charCodeAt(0)&&1!==v.length&&46!==v.charCodeAt(1)||(u=Number(v)))}if("string"==typeof p)i&&(i[p]=u);else{for(var d=i,h=0,y=p.length-1;h<y&&d;)d=d[p[h++]];d&&(d[p[y]]=u)}}else{var g=c(i,p);"function"==typeof g.val&&(Object.defineProperty(e,"currentTarget",{configurable:!0,value:t}),g.val.call(g.ctx,e))}if(e.cancelBubble)break}}t=t.parentNode}},_=e=>{u[e]||(u[e]=!0,r.addEventListener(e,h,!!i[e]))},m=(e,t,a)=>{if(1===e.nodeType&&!e.hasAttribute("s-ignore"))if(e!==r&&e.hasAttribute("s-data")){var n=b(e,t);n&&a.push(n.unmount)}else{var o=e.getAttribute("s-if"),i=!o&&"TEMPLATE"===e.tagName&&e.getAttribute("s-for"),f=[];if(e.hasAttribute("class")&&!e._n&&(e._n=e.getAttribute("class")),o){var u=document.createTextNode(""),v=null,h=[];e.replaceWith(u);var O="!"===o[0],A=O?o.slice(1):o,j=-1===A.indexOf(".")?A:A.split(".");return a.push(()=>{for(var e=h.length;e--;)h[e]()}),a.push(d(()=>{var r=c(t,j).val;if(O&&(r=!r),r)v||((v=e.cloneNode(!0)).removeAttribute("s-if"),m(v,t,h),u.parentNode.insertBefore(v,u));else if(v){for(var a=h.length;a--;)h[a]();h=[],v.remove(),v=null}},s))}if(i){var x=i.indexOf(" in ");if(-1!==x){var P,N=i.slice(0,x).trim(),w=i.slice(x+4).trim(),E=N.replace(/[()]/g,"").split(","),k=E[0].trim(),C=E[1]?E[1].trim():null,T=-1===w.indexOf(".")?w:w.split("."),L=e.getAttribute("s-key"),S=L?-1===L.indexOf(".")?L:L.split("."):null,$=(u=document.createTextNode(""),Object.create(null));return e.replaceWith(u),a.push(()=>{for(var e in $)$[e].cleanups.forEach(e=>e())}),a.push(d(()=>{var r=c(t,T).val||[];"number"==typeof r&&(r=Array.from({length:Math.max(0,Math.floor(r))},(e,t)=>t+1)),Array.isArray(r)&&p(r,"length");var a=document.createDocumentFragment(),n=u.nextSibling;P=Object.create(null);for(var o=Array.isArray(r),l=o?r:Object.keys(r),i=o?r.length:l.length,s=0;s<i;s++){var f=o?s:l[s],v=o?r[s]:r[f],d=(S?c(v,S).val:null)??f;P[d]&&(d+="_"+s);var h=$[d];if(h)h.scope[k]=v,C&&(h.scope[C]=f);else{var g=e.content.cloneNode(!0),b=Object.create(t);Object.defineProperty(b,"_i",{value:!0});var _=y(b);_[k]=v,C&&(_[C]=f);for(var O=Array.prototype.slice.call(g.childNodes),A=[],j=0;j<O.length;j++)m(O[j],_,A);h={nodes:Array.prototype.slice.call(g.childNodes),scope:_,cleanups:A},$[d]=h}if(h.nodes[0]===n)a.childNodes.length&&u.parentNode&&u.parentNode.insertBefore(a,n),n=h.nodes[h.nodes.length-1].nextSibling;else for(j=0;j<h.nodes.length;j++)a.appendChild(h.nodes[j]);P[d]=!0}for(var x in a.childNodes.length&&u.parentNode&&u.parentNode.insertBefore(a,n),$)P[x]||($[x].cleanups.forEach(e=>e()),$[x].nodes.forEach(e=>e.remove()),delete $[x])},s))}}if(e.hasAttributes())for(var M=e.attributes,R=M.length;R--;){var B=M[R],D=B.name,q=B.value;if(58===D.charCodeAt(0)){var F=D.slice(1),H=33===q.charCodeAt(0),K=H?q.slice(1):q;j=-1===K.indexOf(".")?K:K.split(".");f.push({type:"attr",name:F,path:j,neg:H})}else if(115===D.charCodeAt(0)&&45===D.charCodeAt(1)){let r=D.slice(2);if("data"===r)continue;let n=-1===q.indexOf(".")?q:q.split(".");if("init"===r||"destroy"===r)((r,n)=>{var o=c(t,n);"function"==typeof o.val&&("init"===r?s(()=>{var t=o.val.call(o.ctx,e);"function"==typeof t&&a.push(t)}):a.push(()=>o.val.call(o.ctx,e)))})(r,n);else if("effect"===r)a.push(d(()=>{var r=c(t,n);"function"==typeof r.val&&r.val.call(r.ctx,e)},s));else if("model"===r){f.push({type:"value",path:n}),e._s=t,e._h=e._h||{};var W="checkbox"===e.type||"radio"===e.type||"SELECT"===e.tagName?"change":"input";"input"===W&&(e.addEventListener("compositionstart",()=>e._c=!0),e.addEventListener("compositionend",()=>{e._c=!1,e.dispatchEvent(new Event("input",{bubbles:!0}))})),(e._h[W]=e._h[W]||[]).push({model:!0,p:n}),_(W)}else"ref"===r?l.$refs[q]=e:g[r]?f.push({type:r,path:n}):(e._s=t,e._h=e._h||{},(e._h[r]=e._h[r]||[]).unshift({p:n}),_(r))}}for(var z=e.firstChild;z;){var G=z.nextSibling;m(z,t,a),z=G}f.length&&a.push(d(()=>{for(var r=f.length;r--;){var a=f[r],n=c(t,a.path),o="function"==typeof n.val?n.val.call(n.ctx,e):n.val;"attr"===a.type?(a.neg&&(o=!o),"class"===a.name?g.class(e,o):g.attr(e,o,a.name)):g[a.type](e,o)}},s))}};m(r,l,f),l.init&&l.init();var O={unmount:()=>{l.destroy&&l.destroy.call(l);for(var e=f.length;e--;)f[e]();for(var t in u)r.removeEventListener(t,h,!!i[t]);if(l._c)for(var t in l._c)v(l._c[t].r);r._m=null}};return r._m=O,O}},_=e=>{if(!e||"object"!=typeof e||e instanceof Node||e instanceof Date||e instanceof RegExp)return e;var t=e._t||e;if(Array.isArray(t))return t.map(e=>_(e));var r={};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&36!==a.charCodeAt(0)&&95!==a.charCodeAt(0)&&(r[a]=_(t[a]));return r};return{data:(e,...r)=>{t[e]=1===r.length?r[0]:()=>{for(var e={},t=0;t<r.length;t++)Object.defineProperties(e,Object.getOwnPropertyDescriptors(r[t]()));return e}},start:()=>{for(var e=document.querySelectorAll("[s-data]"),t=0;t<e.length;t++)b(e[t])},store:(t,r)=>{if(void 0===r)return e[t];e[t]=r;var a=e[t];return a&&"function"==typeof a.init&&a.init.call(a),a},raw:_,mount:e=>b(e),unmount:e=>{e&&e._m&&e._m.unmount()}}})();window.spiki=e}();
1
+ !function(){"use strict";var e=(()=>{var e,t=Object.create(null),r=[],a=!1,n=null,o=!1,i=Promise.resolve(),l={blur:1,focus:1,scroll:1,load:1,error:1,mouseenter:1,mouseleave:1,toggle:1},s=e=>{e._q||(e._q=!0,r.push(e),a||(a=!0,i.then(()=>{var e=r;r=[],a=!1;for(var t=0;t<e.length;t++)e[t]._q=!1,e[t]()})))},c=(e,t)=>{var r,a=e;if("string"==typeof t)r=e?e[t]:void 0;else{for(var n=0,o=t.length;n<o-1&&a;)a=a[t[n++]];r=a?a[t[o-1]]:void 0}if(void 0===r){var i=Array.isArray(t)?t.join("."):t;console.warn("[spikijs] Property undefined: "+i)}return{ctx:a,val:r}},f={};["push","pop","shift","unshift","splice","sort","reverse"].forEach(e=>{f[e]=function(...t){o=!0;try{return Array.prototype[e].apply(this,t)}finally{o=!1,u(this,"length")}}});var p=(e,t)=>{if(n){var r=e._d||(Object.defineProperty(e,"_d",{value:Object.create(null),writable:!0}),e._d),a=r[t]||(r[t]=[]);-1===a.indexOf(n)&&(a.push(n),n.deps.push(a))}},u=(e,t)=>{if(!o&&e._d&&e._d[t])for(var r=e._d[t].slice(),a=0,n=r.length;a<n;a++){var i=r[a];i.sched?i.sched(i):i()}},v=e=>{for(var t=e.deps.length;t--;){var r=e.deps[t],a=r.indexOf(e);-1!==a&&(r[a]=r[r.length-1],r.pop())}e.deps=[]},d=(e,t)=>{var r=()=>{v(r);var t=n;n=r;try{e()}finally{n=t}};return r.deps=[],r.sched=t,r(),()=>v(r)},h=e=>{if(!e||"object"!=typeof e||e._y||e instanceof Node)return e;if(Object.prototype.hasOwnProperty.call(e,"_p"))return e._p;var t=new Proxy(e,{get:(e,t,r)=>{if("_y"===t)return r===e._p;if("_t"===t)return e;if("_d"===t)return e._d;if("_i"===t)return e._i;if("_c"===t)return e._c;if(Array.isArray(e)&&f.hasOwnProperty(t))return f[t];var a=Object.getOwnPropertyDescriptor(e,t);if(a&&a.get){var o=e._c||(Object.defineProperty(e,"_c",{value:Object.create(null)}),e._c),i=o[t];if(!i){var l=()=>{v(l);var t=n;n=l;try{i.d=!1,i.v=a.get.call(e._p)}finally{n=t}};l.deps=[],l.sched=()=>{i.d||(i.d=!0,u(e,t))},i=o[t]={r:l,d:!0,v:void 0}}return i.d&&i.r(),p(e,t),!i.v||"object"!=typeof i.v||i.v instanceof Node?i.v:h(i.v)}Object.prototype.hasOwnProperty.call(e,t)&&p(e,t);var s=Reflect.get(e,t,r);return!s||"object"!=typeof s||s instanceof Node?s:h(s)},set:(e,t,r,a)=>{var n=e[t],i=Array.isArray(e),l=i?Number(t)<e.length:Object.prototype.hasOwnProperty.call(e,t);if(e._i&&!l)for(var s=Object.getPrototypeOf(e);s&&s!==Object.prototype;){var c=s._t||s;if(Object.prototype.hasOwnProperty.call(c,t))return s[t]=r,!0;s=Object.getPrototypeOf(c)}var f=Reflect.set(e,t,r,a);return!o&&f&&(!l||r!==n||r&&"object"==typeof r)&&(u(e,t),i?u(e,"length"):l||u(e,"_k")),f},deleteProperty:(e,t)=>{var r=Object.prototype.hasOwnProperty.call(e,t),a=Reflect.deleteProperty(e,t);return a&&r&&(u(e,t),Array.isArray(e)?u(e,"length"):u(e,"_k")),a},ownKeys:e=>(p(e,"_k"),Reflect.ownKeys(e))});return Object.defineProperty(e,"_p",{value:t}),t};e=h({});var y=Object.create(null);y.text=(e,t)=>{t=null==t?"":t,e.textContent!==String(t)&&(e.textContent=t)},y.html=(e,t)=>{e.innerHTML!=t&&(e.innerHTML=null==t?"":t)},y.value=(e,t)=>{"checkbox"===e.type?e.checked=!!t:"radio"===e.type?e.checked=e.value==t:e.value!=t&&(e.value=null==t?"":t)},y.attr=(e,t,r)=>{if(null==t||!1===t)e.removeAttribute(r);else{var a=!0===t?"":String(t);e.getAttribute(r)!==a&&e.setAttribute(r,a)}},y.class=(e,t)=>{var r=e._n||"",a=Object.create(null);if(r.split(/\s+/).forEach(e=>e&&(a[e]=1)),"string"==typeof t)t.split(/\s+/).forEach(e=>e&&(a[e]=1));else if(t)for(var n in t)t[n]?a[n]=1:delete a[n];var o=Object.keys(a).join(" ");(e.getAttribute("class")||"")!==o&&e.setAttribute("class",o)};var g=(r,a)=>{if(r._m)return r._m;var n=r.getAttribute("s-data");if(t[n]){var o=t[n]();a&&Object.setPrototypeOf(o,a);var i=h(o);i.$refs={},i.$root=r,i.$store=e,i.$parent=a;var f=[],u=Object.create(null),b=e=>{var t=e.target;if("input"!==e.type||!t._c)for(var a=r.parentNode,n=e.type;t&&t!==a&&!e.cancelBubble;){var o=t._h&&t._h[n];if(o){var l=t._s;if(!l||l.$root!==i.$root){t=t.parentNode;continue}for(var s=o.length;s--;){var f=o[s],p=f.p;if(f.model){var u="checkbox"===t.type?t.checked:t.value;if("string"==typeof u){var v=u.trim();v&&isFinite(v)&&(48===v.charCodeAt(0)&&1!==v.length&&46!==v.charCodeAt(1)||(u=Number(v)))}if("string"==typeof p)l&&(l[p]=u);else{for(var d=l,h=0,y=p.length-1;h<y&&d;)d=d[p[h++]];d&&(d[p[y]]=u)}}else{var g=c(l,p);"function"==typeof g.val&&(Object.defineProperty(e,"currentTarget",{configurable:!0,value:t}),g.val.call(g.ctx,e))}if(e.cancelBubble)break}}t=t.parentNode}},_=e=>{u[e]||(u[e]=!0,r.addEventListener(e,b,!!l[e]))},m=(e,t,a)=>{if(1===e.nodeType&&!e.hasAttribute("s-ignore"))if(e!==r&&e.hasAttribute("s-data")){var n=g(e,t);n&&a.push(n.unmount)}else{var o=e.getAttribute("s-if"),l=!o&&"TEMPLATE"===e.tagName&&e.getAttribute("s-for"),f=[];if(e.hasAttribute("class")&&!e._n&&(e._n=e.getAttribute("class")),o){var u=document.createTextNode(""),v=null,O=[];e.replaceWith(u);var A="!"===o[0],j=A?o.slice(1):o,x=-1===j.indexOf(".")?j:j.split(".");return a.push(()=>{for(var e=O.length;e--;)O[e]()}),a.push(d(()=>{var r=c(t,x).val;if(A&&(r=!r),r)v||((v=e.cloneNode(!0)).removeAttribute("s-if"),m(v,t,O),u.parentNode.insertBefore(v,u));else if(v){for(var a=O.length;a--;)O[a]();O=[],v.remove(),v=null}},s))}if(l){var P=l.indexOf(" in ");if(-1!==P){var N,w=l.slice(0,P).trim(),k=l.slice(P+4).trim(),E=w.replace(/[()]/g,"").split(","),C=E[0].trim(),S=E[1]?E[1].trim():null,T=-1===k.indexOf(".")?k:k.split("."),L=e.getAttribute("s-key"),$=L?-1===L.indexOf(".")?L:L.split("."):null,B=(u=document.createTextNode(""),Object.create(null));return e.replaceWith(u),a.push(()=>{for(var e in B)B[e].cleanups.forEach(e=>e())}),a.push(d(()=>{var r=c(t,T).val||[];"number"==typeof r&&(r=Array.from({length:Math.max(0,Math.floor(r))},(e,t)=>t+1)),Array.isArray(r)&&p(r,"length");var a=document.createDocumentFragment(),n=u.nextSibling;N=Object.create(null);for(var o=Array.isArray(r),i=o?r:Object.keys(r),l=o?r.length:i.length,s=0;s<l;s++){var f,v=o?s:i[s],d=o?r[s]:r[v];f=null==d||"object"!=typeof d?String(d):$?c(d,$).val:String(v)+"_o",N[f]&&(f+="_"+s);var y=B[f];if(y)y.scope[C]=d,S&&(y.scope[S]=v);else{var g=e.content.cloneNode(!0),b=Object.create(t);Object.defineProperty(b,"_i",{value:!0});var _=h(b);_[C]=d,S&&(_[S]=v);for(var O=Array.prototype.slice.call(g.childNodes),A=[],j=0;j<O.length;j++)m(O[j],_,A);y={nodes:Array.prototype.slice.call(g.childNodes),scope:_,cleanups:A},B[f]=y}if(y.nodes[0]===n)a.childNodes.length&&u.parentNode.insertBefore(a,n),n=y.nodes[y.nodes.length-1].nextSibling;else for(j=0;j<y.nodes.length;j++)a.appendChild(y.nodes[j]);N[f]=!0}for(var x in a.childNodes.length&&u.parentNode.insertBefore(a,n),B)N[x]||(B[x].cleanups.forEach(e=>e()),B[x].nodes.forEach(e=>e.remove()),delete B[x])},s))}}if(e.hasAttributes())for(var M=e.attributes,q=M.length;q--;){var R=M[q],D=R.name,F=R.value;if(58===D.charCodeAt(0)){var H=D.slice(1),K=33===F.charCodeAt(0),W=K?F.slice(1):F;x=-1===W.indexOf(".")?W:W.split(".");f.push({type:"attr",name:H,path:x,neg:K})}else if(115===D.charCodeAt(0)&&45===D.charCodeAt(1)){let r=D.slice(2),n=-1===F.indexOf(".")?F:F.split(".");if("init"===r||"destroy"===r)((r,n)=>{var o=c(t,n);"function"==typeof o.val&&("init"===r?s(()=>{var t=o.val.call(o.ctx,e);"function"==typeof t&&a.push(t)}):a.push(()=>o.val.call(o.ctx,e)))})(r,n);else if("effect"===r)a.push(d(()=>{var r=c(t,n);"function"==typeof r.val&&r.val.call(r.ctx,e)},s));else if("model"===r){f.push({type:"value",path:n}),e._s=t,e._h=e._h||{};var z="checkbox"===e.type||"radio"===e.type||"SELECT"===e.tagName?"change":"input";"input"===z&&(e.addEventListener("compositionstart",()=>e._c=!0),e.addEventListener("compositionend",()=>{e._c=!1,b({target:e,type:"input"})})),(e._h[z]=e._h[z]||[]).push({model:!0,p:n}),_(z)}else"ref"===r?i.$refs[F]=e:y[r]?f.push({type:r,path:n}):(e._s=t,e._h=e._h||{},(e._h[r]=e._h[r]||[]).unshift({p:n}),_(r))}}f.length&&a.push(d(()=>{for(var r=f.length;r--;){var a=f[r],n=c(t,a.path),o="function"==typeof n.val?n.val.call(n.ctx,e):n.val;"attr"===a.type?(a.neg&&(o=!o),"class"===a.name?y.class(e,o):y.attr(e,o,a.name)):y[a.type](e,o)}},s));for(var G=e.firstChild;G;){var I=G.nextSibling;m(G,t,a),G=I}}};m(r,i,f),i.init&&i.init();var O={unmount:()=>{i.destroy&&i.destroy.call(i);for(var e=f.length;e--;)f[e]();for(var t in u)r.removeEventListener(t,b);if(i._c)for(var t in i._c)v(i._c[t].r);r._m=null}};return r._m=O,O}},b=e=>{if(!e||"object"!=typeof e)return e;var t=e._t||e;if(Array.isArray(t))return t.map(e=>b(e));var r={};for(var a in t)r[a]=b(t[a]);return r};return{data:(e,...r)=>{t[e]=1===r.length?r[0]:()=>{for(var e={},t=0;t<r.length;t++)Object.defineProperties(e,Object.getOwnPropertyDescriptors(r[t]()));return e}},start:()=>{for(var e=document.querySelectorAll("[s-data]"),t=0;t<e.length;t++)g(e[t])},store:(t,r)=>{if(void 0===r)return e[t];e[t]=r;var a=e[t];return a&&"function"==typeof a.init&&a.init.call(a),a},raw:b,mount:e=>g(e),unmount:e=>{e&&e._m&&e._m.unmount()}}})();window.spiki=e}();