spikijs 1.1.37 → 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.37",
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
187
  var hadKey = isArr ? Number(key) < target.length : Object.prototype.hasOwnProperty.call(target, key);
197
188
 
198
- if (!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
  }
@@ -438,9 +427,9 @@ var spiki = (() => {
438
427
  var key = isArr ? i : keys[i];
439
428
  var item = isArr ? list[i] : list[key];
440
429
  var unique;
441
- if (item == null || typeof item !== 'object') unique = 'p_' + String(item);
442
- else if (keyPath) unique = 'k_' + evalPath(item, keyPath).val;
443
- else unique = 'i_' + String(key);
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';
444
433
 
445
434
  if (usedKeys[unique]) unique += '_' + i;
446
435
  var row = nodePool[unique];
@@ -496,7 +485,6 @@ var spiki = (() => {
496
485
  }
497
486
  else if (attrName.charCodeAt(0) === 115 && attrName.charCodeAt(1) === 45) {
498
487
  let type = attrName.slice(2);
499
- if (type === 'data') continue;
500
488
  let p = attrValue.indexOf('.') === -1 ? attrValue : attrValue.split('.');
501
489
 
502
490
  if (type === 'init' || type === 'destroy') {
@@ -522,14 +510,11 @@ var spiki = (() => {
522
510
  else if (type === 'model') {
523
511
  bindings.push({ type: 'value', path: p });
524
512
  el._s = scope; el._h = el._h || {};
525
- 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';
526
514
 
527
515
  if (evt === 'input') {
528
516
  el.addEventListener('compositionstart', () => el._c = true);
529
- el.addEventListener('compositionend', () => {
530
- el._c = false;
531
- el.dispatchEvent(new Event('input', { bubbles: true }));
532
- });
517
+ el.addEventListener('compositionend', () => { el._c = false; handle({target: el, type: 'input'}); });
533
518
  }
534
519
 
535
520
  (el._h[evt] = el._h[evt] || []).push({ model: true, p: p });
@@ -547,13 +532,6 @@ var spiki = (() => {
547
532
  }
548
533
  }
549
534
 
550
- var child = el.firstChild;
551
- while (child) {
552
- var nextSibling = child.nextSibling;
553
- walk(child, scope, parentCleanups);
554
- child = nextSibling;
555
- }
556
-
557
535
  if (bindings.length) {
558
536
  parentCleanups.push(effect(() => {
559
537
  var i = bindings.length;
@@ -572,6 +550,13 @@ var spiki = (() => {
572
550
  }
573
551
  }, nextTick));
574
552
  }
553
+
554
+ var child = el.firstChild;
555
+ while (child) {
556
+ var nextSibling = child.nextSibling;
557
+ walk(child, scope, parentCleanups);
558
+ child = nextSibling;
559
+ }
575
560
  };
576
561
 
577
562
  walk(rootElement, state, cleanups);
@@ -581,7 +566,7 @@ var spiki = (() => {
581
566
  unmount: () => {
582
567
  if (state.destroy) state.destroy.call(state);
583
568
  var i = cleanups.length; while (i--) cleanups[i]();
584
- for (var k in listeners) rootElement.removeEventListener(k, handle, !!captureEvents[k]);
569
+ for(var k in listeners) rootElement.removeEventListener(k, handle);
585
570
  if (state._c) for (var k in state._c) cleanup(state._c[k].r);
586
571
  rootElement._m = null;
587
572
  }
@@ -591,15 +576,11 @@ var spiki = (() => {
591
576
  };
592
577
 
593
578
  var raw = (o) => {
594
- if (!o || typeof o !== 'object' || o instanceof Node || o instanceof Date || o instanceof RegExp) return o;
579
+ if (!o || typeof o !== 'object') return o;
595
580
  var target = o._t || o;
596
581
  if (Array.isArray(target)) return target.map(e => raw(e));
597
582
  var result = {};
598
- for (var i in target) {
599
- if (Object.prototype.hasOwnProperty.call(target, i) && i.charCodeAt(0) !== 36 && i.charCodeAt(0) !== 95) {
600
- result[i] = raw(target[i]);
601
- }
602
- }
583
+ for (var i in target) result[i] = raw(target[i]);
603
584
  return result;
604
585
  };
605
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,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}},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,i=r.length;a<i;a++){var l=r[a];l!==n&&(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=[]},h=(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)},d=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(!d(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),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(),f(e,t),d(i.v)?y(i.v):i.v}Object.prototype.hasOwnProperty.call(e,t)&&f(e,Array.isArray(e)?"length":t);var s=Reflect.get(e,t,r);return d(s)?y(s):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(!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 p=Reflect.set(e,t,r,a);return!o&&p&&(!l||r!==n||r&&"object"==typeof r)&&(u(e,t),i?u(e,"length"):l||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 i=y(o),p=[],u=Object.create(null),d=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 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)l&&(l[f]=u);else{for(var h=l,d=0,y=f.length-1;d<y&&h;)h=h[f[d++]];h&&(h[f[y]]=u)}}else{var g=c(l,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,d,!!l[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"),l=!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,d=[];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=d.length;e--;)d[e]()}),a.push(h(()=>{var r=c(t,j).val;if(O&&(r=!r),r)v||((v=e.cloneNode(!0)).removeAttribute("s-if"),m(v,t,d),u.parentNode.insertBefore(v,u));else if(v){for(var a=d.length;a--;)d[a]();d=[],v.remove(),v=null}},s))}if(l){var x=l.indexOf(" in ");if(-1!==x){var P,N=l.slice(0,x).trim(),E=l.slice(x+4).trim(),k=N.replace(/[()]/g,"").split(","),w=k[0].trim(),C=k[1]?k[1].trim():null,S=-1===E.indexOf(".")?E:E.split("."),T=e.getAttribute("s-key"),L=T?-1===T.indexOf(".")?T:T.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(h(()=>{var r=c(t,S).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),i=o?r:Object.keys(r),l=o?r.length:i.length,s=0;s<l;s++){var p,v=o?s:i[s],h=o?r[s]:r[v];p=null==h||"object"!=typeof h?"p_"+String(h):L?"k_"+c(h,L).val:"i_"+String(v),P[p]&&(p+="_"+s);var d=$[p];if(d)d.scope[w]=h,C&&(d.scope[C]=v);else{var g=e.content.cloneNode(!0),b=Object.create(t);Object.defineProperty(b,"_i",{value:!0});var _=y(b);_[w]=h,C&&(_[C]=v);for(var O=Array.prototype.slice.call(g.childNodes),A=[],j=0;j<O.length;j++)m(O[j],_,A);d={nodes:Array.prototype.slice.call(g.childNodes),scope:_,cleanups:A},$[p]=d}if(d.nodes[0]===n)a.childNodes.length&&u.parentNode.insertBefore(a,n),n=d.nodes[d.nodes.length-1].nextSibling;else for(j=0;j<d.nodes.length;j++)a.appendChild(d.nodes[j]);P[p]=!0}for(var x in a.childNodes.length&&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(h(()=>{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?i.$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(h(()=>{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,i,p),i.init&&i.init();var O={unmount:()=>{i.destroy&&i.destroy.call(i);for(var e=p.length;e--;)p[e]();for(var t in u)r.removeEventListener(t,d,!!l[t]);if(i._c)for(var t in i._c)v(i._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
190
  var hadKey = isArr ? Number(key) < target.length : Object.prototype.hasOwnProperty.call(target, key);
200
191
 
201
- if (!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
  }
@@ -441,9 +430,9 @@ var spiki = (() => {
441
430
  var key = isArr ? i : keys[i];
442
431
  var item = isArr ? list[i] : list[key];
443
432
  var unique;
444
- if (item == null || typeof item !== 'object') unique = 'p_' + String(item);
445
- else if (keyPath) unique = 'k_' + evalPath(item, keyPath).val;
446
- else unique = 'i_' + String(key);
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';
447
436
 
448
437
  if (usedKeys[unique]) unique += '_' + i;
449
438
  var row = nodePool[unique];
@@ -499,7 +488,6 @@ var spiki = (() => {
499
488
  }
500
489
  else if (attrName.charCodeAt(0) === 115 && attrName.charCodeAt(1) === 45) {
501
490
  let type = attrName.slice(2);
502
- if (type === 'data') continue;
503
491
  let p = attrValue.indexOf('.') === -1 ? attrValue : attrValue.split('.');
504
492
 
505
493
  if (type === 'init' || type === 'destroy') {
@@ -525,14 +513,11 @@ var spiki = (() => {
525
513
  else if (type === 'model') {
526
514
  bindings.push({ type: 'value', path: p });
527
515
  el._s = scope; el._h = el._h || {};
528
- 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';
529
517
 
530
518
  if (evt === 'input') {
531
519
  el.addEventListener('compositionstart', () => el._c = true);
532
- el.addEventListener('compositionend', () => {
533
- el._c = false;
534
- el.dispatchEvent(new Event('input', { bubbles: true }));
535
- });
520
+ el.addEventListener('compositionend', () => { el._c = false; handle({target: el, type: 'input'}); });
536
521
  }
537
522
 
538
523
  (el._h[evt] = el._h[evt] || []).push({ model: true, p: p });
@@ -550,13 +535,6 @@ var spiki = (() => {
550
535
  }
551
536
  }
552
537
 
553
- var child = el.firstChild;
554
- while (child) {
555
- var nextSibling = child.nextSibling;
556
- walk(child, scope, parentCleanups);
557
- child = nextSibling;
558
- }
559
-
560
538
  if (bindings.length) {
561
539
  parentCleanups.push(effect(() => {
562
540
  var i = bindings.length;
@@ -575,6 +553,13 @@ var spiki = (() => {
575
553
  }
576
554
  }, nextTick));
577
555
  }
556
+
557
+ var child = el.firstChild;
558
+ while (child) {
559
+ var nextSibling = child.nextSibling;
560
+ walk(child, scope, parentCleanups);
561
+ child = nextSibling;
562
+ }
578
563
  };
579
564
 
580
565
  walk(rootElement, state, cleanups);
@@ -584,7 +569,7 @@ var spiki = (() => {
584
569
  unmount: () => {
585
570
  if (state.destroy) state.destroy.call(state);
586
571
  var i = cleanups.length; while (i--) cleanups[i]();
587
- for (var k in listeners) rootElement.removeEventListener(k, handle, !!captureEvents[k]);
572
+ for(var k in listeners) rootElement.removeEventListener(k, handle);
588
573
  if (state._c) for (var k in state._c) cleanup(state._c[k].r);
589
574
  rootElement._m = null;
590
575
  }
@@ -594,15 +579,11 @@ var spiki = (() => {
594
579
  };
595
580
 
596
581
  var raw = (o) => {
597
- if (!o || typeof o !== 'object' || o instanceof Node || o instanceof Date || o instanceof RegExp) return o;
582
+ if (!o || typeof o !== 'object') return o;
598
583
  var target = o._t || o;
599
584
  if (Array.isArray(target)) return target.map(e => raw(e));
600
585
  var result = {};
601
- for (var i in target) {
602
- if (Object.prototype.hasOwnProperty.call(target, i) && i.charCodeAt(0) !== 36 && i.charCodeAt(0) !== 95) {
603
- result[i] = raw(target[i]);
604
- }
605
- }
586
+ for (var i in target) result[i] = raw(target[i]);
606
587
  return result;
607
588
  };
608
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,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,i=r.length;a<i;a++){var l=r[a];l!==n&&(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=[]},h=(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)},d=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(!d(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),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),d(i.v)?y(i.v):i.v}Object.prototype.hasOwnProperty.call(e,t)&&p(e,Array.isArray(e)?"length":t);var s=Reflect.get(e,t,r);return d(s)?y(s):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(!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=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 i=y(o),f=[],u=Object.create(null),d=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("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)l&&(l[p]=u);else{for(var h=l,d=0,y=p.length-1;d<y&&h;)h=h[p[d++]];h&&(h[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,d,!!l[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"),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,d=[];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=d.length;e--;)d[e]()}),a.push(h(()=>{var r=c(t,j).val;if(O&&(r=!r),r)v||((v=e.cloneNode(!0)).removeAttribute("s-if"),m(v,t,d),u.parentNode.insertBefore(v,u));else if(v){for(var a=d.length;a--;)d[a]();d=[],v.remove(),v=null}},s))}if(l){var x=l.indexOf(" in ");if(-1!==x){var P,N=l.slice(0,x).trim(),w=l.slice(x+4).trim(),E=N.replace(/[()]/g,"").split(","),k=E[0].trim(),C=E[1]?E[1].trim():null,S=-1===w.indexOf(".")?w:w.split("."),T=e.getAttribute("s-key"),L=T?-1===T.indexOf(".")?T:T.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(h(()=>{var r=c(t,S).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),i=o?r:Object.keys(r),l=o?r.length:i.length,s=0;s<l;s++){var f,v=o?s:i[s],h=o?r[s]:r[v];f=null==h||"object"!=typeof h?"p_"+String(h):L?"k_"+c(h,L).val:"i_"+String(v),P[f]&&(f+="_"+s);var d=$[f];if(d)d.scope[k]=h,C&&(d.scope[C]=v);else{var g=e.content.cloneNode(!0),b=Object.create(t);Object.defineProperty(b,"_i",{value:!0});var _=y(b);_[k]=h,C&&(_[C]=v);for(var O=Array.prototype.slice.call(g.childNodes),A=[],j=0;j<O.length;j++)m(O[j],_,A);d={nodes:Array.prototype.slice.call(g.childNodes),scope:_,cleanups:A},$[f]=d}if(d.nodes[0]===n)a.childNodes.length&&u.parentNode.insertBefore(a,n),n=d.nodes[d.nodes.length-1].nextSibling;else for(j=0;j<d.nodes.length;j++)a.appendChild(d.nodes[j]);P[f]=!0}for(var x in a.childNodes.length&&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(h(()=>{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?i.$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(h(()=>{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,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,d,!!l[t]);if(i._c)for(var t in i._c)v(i._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}();