spikijs 1.1.31 → 1.1.33
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/README.md +11 -12
- package/package.json +1 -1
- package/spiki.d.ts +3 -8
- package/spiki.esm.js +62 -50
- package/spiki.esm.min.js +1 -1
- package/spiki.js +62 -50
- package/spiki.min.js +1 -1
package/README.md
CHANGED
|
@@ -117,8 +117,8 @@ import spiki from 'spikijs';
|
|
|
117
117
|
| **`this.$refs`** | Object containing all `s-ref` DOM elements. | `this.$refs.textInput.focus();` |
|
|
118
118
|
| **`this.$store`** | Accesses registered global stores. | `this.$store.settings.theme` |
|
|
119
119
|
| **`spiki.store()`** | Registers global store (runs `init()` automatically if present). | `spiki.store('settings', { theme: 'dark', init() {} })` |
|
|
120
|
+
| **`spiki.data()`** | Registers component state with one or more modules/factories. | `spiki.data('app', createAuth, createCart)` |
|
|
120
121
|
| **`spiki.raw()`** | Unwraps Spiki Proxy to a plain JavaScript object. | `const plainObj = spiki.raw(this.user);` |
|
|
121
|
-
| **`spiki.compose()`** | Merges modular state objects/factories into a single scope. | `spiki.compose(createAuth, createCart)` |
|
|
122
122
|
|
|
123
123
|
---
|
|
124
124
|
|
|
@@ -347,9 +347,9 @@ spiki.data('noteApp', () => ({
|
|
|
347
347
|
|
|
348
348
|
---
|
|
349
349
|
|
|
350
|
-
### 8. Modular State Composition
|
|
350
|
+
### 8. Modular State Composition
|
|
351
351
|
|
|
352
|
-
For large applications, organize code into smaller modules and
|
|
352
|
+
For large applications, organize code into smaller modules and pass them directly into `spiki.data()`. It preserves getters, setters, and computed properties while allowing methods across modules to share state via `this`:
|
|
353
353
|
|
|
354
354
|
```javascript
|
|
355
355
|
import spiki from 'spikijs';
|
|
@@ -364,16 +364,15 @@ const createThemeModule = () => ({
|
|
|
364
364
|
toggleTheme() { this.darkMode = !this.darkMode; }
|
|
365
365
|
});
|
|
366
366
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
}
|
|
367
|
+
// Pass multiple factory functions directly:
|
|
368
|
+
spiki.data('app',
|
|
369
|
+
createCounterModule,
|
|
370
|
+
createThemeModule,
|
|
371
|
+
() => ({
|
|
372
|
+
init() {
|
|
373
|
+
console.log('App ready, initial count:', this.count);
|
|
375
374
|
}
|
|
376
|
-
)
|
|
375
|
+
})
|
|
377
376
|
);
|
|
378
377
|
```
|
|
379
378
|
|
package/package.json
CHANGED
package/spiki.d.ts
CHANGED
|
@@ -56,11 +56,11 @@ export type ComponentFactory<T> = () => T & ThisType<T & SpikiInstance>;
|
|
|
56
56
|
|
|
57
57
|
export interface Spiki {
|
|
58
58
|
/**
|
|
59
|
-
* Registers a new component.
|
|
59
|
+
* Registers a new component with one or more modules/factories.
|
|
60
60
|
* @param name Name matching 's-data' in HTML.
|
|
61
|
-
* @param
|
|
61
|
+
* @param modules Factory functions or objects returning/containing state.
|
|
62
62
|
*/
|
|
63
|
-
data
|
|
63
|
+
data(name: string, ...modules: any[]): void;
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
66
|
* Scans the document and mounts all components.
|
|
@@ -92,11 +92,6 @@ export interface Spiki {
|
|
|
92
92
|
* Returns the original object from a Spiki Proxy.
|
|
93
93
|
*/
|
|
94
94
|
raw<T>(object: T): T;
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Composes multiple state modules/factories into a single object while preserving getters and setters.
|
|
98
|
-
*/
|
|
99
|
-
compose<T = any>(...modules: any[]): T;
|
|
100
95
|
}
|
|
101
96
|
|
|
102
97
|
declare const spiki: Spiki;
|
package/spiki.esm.js
CHANGED
|
@@ -35,8 +35,7 @@ var spiki = (() => {
|
|
|
35
35
|
var queue = scheduler;
|
|
36
36
|
scheduler = [];
|
|
37
37
|
isFlushing = false;
|
|
38
|
-
var i = queue.length;
|
|
39
|
-
while (i--) {
|
|
38
|
+
for (var i = 0; i < queue.length; i++) {
|
|
40
39
|
queue[i]._q = false;
|
|
41
40
|
queue[i]();
|
|
42
41
|
}
|
|
@@ -128,8 +127,15 @@ var spiki = (() => {
|
|
|
128
127
|
return () => cleanup(runner);
|
|
129
128
|
};
|
|
130
129
|
|
|
130
|
+
var isTrackable = (obj) => {
|
|
131
|
+
return obj && typeof obj === 'object' && !obj._y &&
|
|
132
|
+
!(obj instanceof Node) && !(obj instanceof Date) &&
|
|
133
|
+
!(obj instanceof RegExp) && !(obj instanceof Map) &&
|
|
134
|
+
!(obj instanceof Set) && !(obj instanceof Promise);
|
|
135
|
+
};
|
|
136
|
+
|
|
131
137
|
var makeReactive = (obj) => {
|
|
132
|
-
if (!obj
|
|
138
|
+
if (!isTrackable(obj)) return obj;
|
|
133
139
|
if (Object.prototype.hasOwnProperty.call(obj, '_p')) return obj._p;
|
|
134
140
|
|
|
135
141
|
var proxy = new Proxy(obj, {
|
|
@@ -141,6 +147,7 @@ var spiki = (() => {
|
|
|
141
147
|
if (key === '_c') return target._c;
|
|
142
148
|
|
|
143
149
|
if (Array.isArray(target) && arrInst.hasOwnProperty(key)) return arrInst[key];
|
|
150
|
+
|
|
144
151
|
var desc = Object.getOwnPropertyDescriptor(target, key);
|
|
145
152
|
if (desc && desc.get) {
|
|
146
153
|
var c = target._c || (Object.defineProperty(target, '_c', {
|
|
@@ -154,8 +161,8 @@ var spiki = (() => {
|
|
|
154
161
|
var prev = activeEffect;
|
|
155
162
|
activeEffect = runner;
|
|
156
163
|
try {
|
|
157
|
-
comp.d = false;
|
|
158
|
-
comp.v = desc.get.call(
|
|
164
|
+
comp.d = false;
|
|
165
|
+
comp.v = desc.get.call(target._p);
|
|
159
166
|
} finally {
|
|
160
167
|
activeEffect = prev;
|
|
161
168
|
}
|
|
@@ -171,11 +178,15 @@ var spiki = (() => {
|
|
|
171
178
|
}
|
|
172
179
|
if (comp.d) comp.r();
|
|
173
180
|
track(target, key);
|
|
174
|
-
return (comp.v
|
|
181
|
+
return isTrackable(comp.v) ? makeReactive(comp.v) : comp.v;
|
|
175
182
|
}
|
|
176
|
-
|
|
183
|
+
|
|
184
|
+
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
|
185
|
+
track(target, Array.isArray(target) ? 'length' : key);
|
|
186
|
+
}
|
|
187
|
+
|
|
177
188
|
var res = Reflect.get(target, key, receiver);
|
|
178
|
-
return (res
|
|
189
|
+
return isTrackable(res) ? makeReactive(res) : res;
|
|
179
190
|
},
|
|
180
191
|
set: (target, key, val, receiver) => {
|
|
181
192
|
var old = target[key];
|
|
@@ -184,13 +195,13 @@ var spiki = (() => {
|
|
|
184
195
|
|
|
185
196
|
if (target._i && !hadKey) {
|
|
186
197
|
var proto = Object.getPrototypeOf(target);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
return
|
|
198
|
+
while (proto && proto !== Object.prototype) {
|
|
199
|
+
var rawProto = proto._t || proto;
|
|
200
|
+
if (Object.prototype.hasOwnProperty.call(rawProto, key)) {
|
|
201
|
+
proto[key] = val;
|
|
202
|
+
return true;
|
|
192
203
|
}
|
|
193
|
-
proto = Object.getPrototypeOf(
|
|
204
|
+
proto = Object.getPrototypeOf(rawProto);
|
|
194
205
|
}
|
|
195
206
|
}
|
|
196
207
|
|
|
@@ -303,10 +314,12 @@ var spiki = (() => {
|
|
|
303
314
|
|
|
304
315
|
if (handler.model) {
|
|
305
316
|
var val = target.type === 'checkbox' ? target.checked : target.value;
|
|
306
|
-
if (
|
|
317
|
+
if (target.type === 'number' || target.type === 'range') {
|
|
318
|
+
val = val === '' ? null : Number(val);
|
|
319
|
+
} else if (typeof val === 'string') {
|
|
307
320
|
var clean = val.trim();
|
|
308
|
-
if (clean && isFinite(clean)) {
|
|
309
|
-
|
|
321
|
+
if (clean && clean.length < 16 && clean.charCodeAt(clean.length - 1) !== 46 && isFinite(clean)) {
|
|
322
|
+
if (clean.charCodeAt(0) !== 48 || clean.length === 1 || clean.charCodeAt(1) === 46) {
|
|
310
323
|
val = Number(clean);
|
|
311
324
|
}
|
|
312
325
|
}
|
|
@@ -423,9 +436,9 @@ var spiki = (() => {
|
|
|
423
436
|
var key = isArr ? i : keys[i];
|
|
424
437
|
var item = isArr ? list[i] : list[key];
|
|
425
438
|
var unique;
|
|
426
|
-
if (item == null || typeof item !== 'object') unique = String(item);
|
|
427
|
-
else if (keyPath) unique = evalPath(item, keyPath).val;
|
|
428
|
-
else unique = String(key)
|
|
439
|
+
if (item == null || typeof item !== 'object') unique = 'p_' + String(item);
|
|
440
|
+
else if (keyPath) unique = 'k_' + evalPath(item, keyPath).val;
|
|
441
|
+
else unique = 'i_' + String(key);
|
|
429
442
|
|
|
430
443
|
if (usedKeys[unique]) unique += '_' + i;
|
|
431
444
|
var row = nodePool[unique];
|
|
@@ -506,11 +519,14 @@ var spiki = (() => {
|
|
|
506
519
|
else if (type === 'model') {
|
|
507
520
|
bindings.push({ type: 'value', path: p });
|
|
508
521
|
el._s = scope; el._h = el._h || {};
|
|
509
|
-
var evt = (el.type === 'checkbox' || el.type === 'radio' || el.tagName==='SELECT') ? 'change' : 'input';
|
|
522
|
+
var evt = (el.type === 'checkbox' || el.type === 'radio' || el.tagName === 'SELECT') ? 'change' : 'input';
|
|
510
523
|
|
|
511
524
|
if (evt === 'input') {
|
|
512
525
|
el.addEventListener('compositionstart', () => el._c = true);
|
|
513
|
-
el.addEventListener('compositionend', () => {
|
|
526
|
+
el.addEventListener('compositionend', () => {
|
|
527
|
+
el._c = false;
|
|
528
|
+
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
529
|
+
});
|
|
514
530
|
}
|
|
515
531
|
|
|
516
532
|
(el._h[evt] = el._h[evt] || []).push({ model: true, p: p });
|
|
@@ -528,6 +544,13 @@ var spiki = (() => {
|
|
|
528
544
|
}
|
|
529
545
|
}
|
|
530
546
|
|
|
547
|
+
var child = el.firstChild;
|
|
548
|
+
while (child) {
|
|
549
|
+
var nextSibling = child.nextSibling;
|
|
550
|
+
walk(child, scope, parentCleanups);
|
|
551
|
+
child = nextSibling;
|
|
552
|
+
}
|
|
553
|
+
|
|
531
554
|
if (bindings.length) {
|
|
532
555
|
parentCleanups.push(effect(() => {
|
|
533
556
|
var i = bindings.length;
|
|
@@ -546,13 +569,6 @@ var spiki = (() => {
|
|
|
546
569
|
}
|
|
547
570
|
}, nextTick));
|
|
548
571
|
}
|
|
549
|
-
|
|
550
|
-
var child = el.firstChild;
|
|
551
|
-
while (child) {
|
|
552
|
-
var nextSibling = child.nextSibling;
|
|
553
|
-
walk(child, scope, parentCleanups);
|
|
554
|
-
child = nextSibling;
|
|
555
|
-
}
|
|
556
572
|
};
|
|
557
573
|
|
|
558
574
|
walk(rootElement, state, cleanups);
|
|
@@ -562,7 +578,7 @@ var spiki = (() => {
|
|
|
562
578
|
unmount: () => {
|
|
563
579
|
if (state.destroy) state.destroy.call(state);
|
|
564
580
|
var i = cleanups.length; while (i--) cleanups[i]();
|
|
565
|
-
for(var k in listeners) rootElement.removeEventListener(k, handle);
|
|
581
|
+
for (var k in listeners) rootElement.removeEventListener(k, handle, !!captureEvents[k]);
|
|
566
582
|
if (state._c) for (var k in state._c) cleanup(state._c[k].r);
|
|
567
583
|
rootElement._m = null;
|
|
568
584
|
}
|
|
@@ -572,35 +588,31 @@ var spiki = (() => {
|
|
|
572
588
|
};
|
|
573
589
|
|
|
574
590
|
var raw = (o) => {
|
|
575
|
-
if (!o || typeof o !== 'object') return o;
|
|
591
|
+
if (!o || typeof o !== 'object' || o instanceof Node || o instanceof Date || o instanceof RegExp) return o;
|
|
576
592
|
var target = o._t || o;
|
|
577
593
|
if (Array.isArray(target)) return target.map(e => raw(e));
|
|
578
594
|
var result = {};
|
|
579
|
-
for (var i in target)
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
var compose = (...modules) => {
|
|
584
|
-
var target = {};
|
|
585
|
-
for (var i = 0; i < modules.length; i++) {
|
|
586
|
-
var mod = modules[i];
|
|
587
|
-
if (mod) {
|
|
588
|
-
Object.defineProperties(
|
|
589
|
-
target,
|
|
590
|
-
Object.getOwnPropertyDescriptors(typeof mod === 'function' ? mod() : mod)
|
|
591
|
-
);
|
|
595
|
+
for (var i in target) {
|
|
596
|
+
if (Object.prototype.hasOwnProperty.call(target, i) && i.charCodeAt(0) !== 36 && i.charCodeAt(0) !== 95) {
|
|
597
|
+
result[i] = raw(target[i]);
|
|
592
598
|
}
|
|
593
599
|
}
|
|
594
|
-
return
|
|
600
|
+
return result;
|
|
595
601
|
};
|
|
596
602
|
|
|
597
603
|
return {
|
|
598
|
-
data: (name,
|
|
599
|
-
|
|
604
|
+
data: (name, ...fns) => {
|
|
605
|
+
cmpReg[name] = fns.length === 1 ? fns[0] : () => {
|
|
606
|
+
var target = {};
|
|
607
|
+
for (var i = 0; i < fns.length; i++) {
|
|
608
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(fns[i]()));
|
|
609
|
+
}
|
|
610
|
+
return target;
|
|
611
|
+
};
|
|
612
|
+
},
|
|
600
613
|
start: () => {
|
|
601
614
|
var els = document.querySelectorAll('[s-data]');
|
|
602
|
-
var i = els.length;
|
|
603
|
-
while (i--) mount(els[i]);
|
|
615
|
+
for (var i = 0; i < els.length; i++) mount(els[i]);
|
|
604
616
|
},
|
|
605
617
|
store: (name, value) => {
|
|
606
618
|
if (value === undefined) {
|
|
@@ -619,4 +631,4 @@ var spiki = (() => {
|
|
|
619
631
|
};
|
|
620
632
|
})();
|
|
621
633
|
|
|
622
|
-
export default spiki;
|
|
634
|
+
export default spiki;
|
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=e.length;t
|
|
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,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=[]},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(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 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]();a&&Object.setPrototypeOf(o,a);var i=y(o);i.$refs={},i.$root=r,i.$store=e,i.$parent=a;var 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),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;
|
package/spiki.js
CHANGED
|
@@ -38,8 +38,7 @@ var spiki = (() => {
|
|
|
38
38
|
var queue = scheduler;
|
|
39
39
|
scheduler = [];
|
|
40
40
|
isFlushing = false;
|
|
41
|
-
var i = queue.length;
|
|
42
|
-
while (i--) {
|
|
41
|
+
for (var i = 0; i < queue.length; i++) {
|
|
43
42
|
queue[i]._q = false;
|
|
44
43
|
queue[i]();
|
|
45
44
|
}
|
|
@@ -131,8 +130,15 @@ var spiki = (() => {
|
|
|
131
130
|
return () => cleanup(runner);
|
|
132
131
|
};
|
|
133
132
|
|
|
133
|
+
var isTrackable = (obj) => {
|
|
134
|
+
return obj && typeof obj === 'object' && !obj._y &&
|
|
135
|
+
!(obj instanceof Node) && !(obj instanceof Date) &&
|
|
136
|
+
!(obj instanceof RegExp) && !(obj instanceof Map) &&
|
|
137
|
+
!(obj instanceof Set) && !(obj instanceof Promise);
|
|
138
|
+
};
|
|
139
|
+
|
|
134
140
|
var makeReactive = (obj) => {
|
|
135
|
-
if (!obj
|
|
141
|
+
if (!isTrackable(obj)) return obj;
|
|
136
142
|
if (Object.prototype.hasOwnProperty.call(obj, '_p')) return obj._p;
|
|
137
143
|
|
|
138
144
|
var proxy = new Proxy(obj, {
|
|
@@ -144,6 +150,7 @@ var spiki = (() => {
|
|
|
144
150
|
if (key === '_c') return target._c;
|
|
145
151
|
|
|
146
152
|
if (Array.isArray(target) && arrInst.hasOwnProperty(key)) return arrInst[key];
|
|
153
|
+
|
|
147
154
|
var desc = Object.getOwnPropertyDescriptor(target, key);
|
|
148
155
|
if (desc && desc.get) {
|
|
149
156
|
var c = target._c || (Object.defineProperty(target, '_c', {
|
|
@@ -157,8 +164,8 @@ var spiki = (() => {
|
|
|
157
164
|
var prev = activeEffect;
|
|
158
165
|
activeEffect = runner;
|
|
159
166
|
try {
|
|
160
|
-
comp.d = false;
|
|
161
|
-
comp.v = desc.get.call(
|
|
167
|
+
comp.d = false;
|
|
168
|
+
comp.v = desc.get.call(target._p);
|
|
162
169
|
} finally {
|
|
163
170
|
activeEffect = prev;
|
|
164
171
|
}
|
|
@@ -174,11 +181,15 @@ var spiki = (() => {
|
|
|
174
181
|
}
|
|
175
182
|
if (comp.d) comp.r();
|
|
176
183
|
track(target, key);
|
|
177
|
-
return (comp.v
|
|
184
|
+
return isTrackable(comp.v) ? makeReactive(comp.v) : comp.v;
|
|
178
185
|
}
|
|
179
|
-
|
|
186
|
+
|
|
187
|
+
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
|
188
|
+
track(target, Array.isArray(target) ? 'length' : key);
|
|
189
|
+
}
|
|
190
|
+
|
|
180
191
|
var res = Reflect.get(target, key, receiver);
|
|
181
|
-
return (res
|
|
192
|
+
return isTrackable(res) ? makeReactive(res) : res;
|
|
182
193
|
},
|
|
183
194
|
set: (target, key, val, receiver) => {
|
|
184
195
|
var old = target[key];
|
|
@@ -187,13 +198,13 @@ var spiki = (() => {
|
|
|
187
198
|
|
|
188
199
|
if (target._i && !hadKey) {
|
|
189
200
|
var proto = Object.getPrototypeOf(target);
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return
|
|
201
|
+
while (proto && proto !== Object.prototype) {
|
|
202
|
+
var rawProto = proto._t || proto;
|
|
203
|
+
if (Object.prototype.hasOwnProperty.call(rawProto, key)) {
|
|
204
|
+
proto[key] = val;
|
|
205
|
+
return true;
|
|
195
206
|
}
|
|
196
|
-
proto = Object.getPrototypeOf(
|
|
207
|
+
proto = Object.getPrototypeOf(rawProto);
|
|
197
208
|
}
|
|
198
209
|
}
|
|
199
210
|
|
|
@@ -306,10 +317,12 @@ var spiki = (() => {
|
|
|
306
317
|
|
|
307
318
|
if (handler.model) {
|
|
308
319
|
var val = target.type === 'checkbox' ? target.checked : target.value;
|
|
309
|
-
if (
|
|
320
|
+
if (target.type === 'number' || target.type === 'range') {
|
|
321
|
+
val = val === '' ? null : Number(val);
|
|
322
|
+
} else if (typeof val === 'string') {
|
|
310
323
|
var clean = val.trim();
|
|
311
|
-
if (clean && isFinite(clean)) {
|
|
312
|
-
|
|
324
|
+
if (clean && clean.length < 16 && clean.charCodeAt(clean.length - 1) !== 46 && isFinite(clean)) {
|
|
325
|
+
if (clean.charCodeAt(0) !== 48 || clean.length === 1 || clean.charCodeAt(1) === 46) {
|
|
313
326
|
val = Number(clean);
|
|
314
327
|
}
|
|
315
328
|
}
|
|
@@ -426,9 +439,9 @@ var spiki = (() => {
|
|
|
426
439
|
var key = isArr ? i : keys[i];
|
|
427
440
|
var item = isArr ? list[i] : list[key];
|
|
428
441
|
var unique;
|
|
429
|
-
if (item == null || typeof item !== 'object') unique = String(item);
|
|
430
|
-
else if (keyPath) unique = evalPath(item, keyPath).val;
|
|
431
|
-
else unique = String(key)
|
|
442
|
+
if (item == null || typeof item !== 'object') unique = 'p_' + String(item);
|
|
443
|
+
else if (keyPath) unique = 'k_' + evalPath(item, keyPath).val;
|
|
444
|
+
else unique = 'i_' + String(key);
|
|
432
445
|
|
|
433
446
|
if (usedKeys[unique]) unique += '_' + i;
|
|
434
447
|
var row = nodePool[unique];
|
|
@@ -509,11 +522,14 @@ var spiki = (() => {
|
|
|
509
522
|
else if (type === 'model') {
|
|
510
523
|
bindings.push({ type: 'value', path: p });
|
|
511
524
|
el._s = scope; el._h = el._h || {};
|
|
512
|
-
var evt = (el.type === 'checkbox' || el.type === 'radio' || el.tagName==='SELECT') ? 'change' : 'input';
|
|
525
|
+
var evt = (el.type === 'checkbox' || el.type === 'radio' || el.tagName === 'SELECT') ? 'change' : 'input';
|
|
513
526
|
|
|
514
527
|
if (evt === 'input') {
|
|
515
528
|
el.addEventListener('compositionstart', () => el._c = true);
|
|
516
|
-
el.addEventListener('compositionend', () => {
|
|
529
|
+
el.addEventListener('compositionend', () => {
|
|
530
|
+
el._c = false;
|
|
531
|
+
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
532
|
+
});
|
|
517
533
|
}
|
|
518
534
|
|
|
519
535
|
(el._h[evt] = el._h[evt] || []).push({ model: true, p: p });
|
|
@@ -524,13 +540,20 @@ var spiki = (() => {
|
|
|
524
540
|
bindings.push({ type: type, path: p });
|
|
525
541
|
} else {
|
|
526
542
|
el._s = scope; el._h = el._h || {};
|
|
527
|
-
|
|
543
|
+
(el._h[type] = el._h[type] || []).unshift({ p: p });
|
|
528
544
|
addListen(type);
|
|
529
545
|
}
|
|
530
546
|
}
|
|
531
547
|
}
|
|
532
548
|
}
|
|
533
549
|
|
|
550
|
+
var child = el.firstChild;
|
|
551
|
+
while (child) {
|
|
552
|
+
var nextSibling = child.nextSibling;
|
|
553
|
+
walk(child, scope, parentCleanups);
|
|
554
|
+
child = nextSibling;
|
|
555
|
+
}
|
|
556
|
+
|
|
534
557
|
if (bindings.length) {
|
|
535
558
|
parentCleanups.push(effect(() => {
|
|
536
559
|
var i = bindings.length;
|
|
@@ -549,13 +572,6 @@ var spiki = (() => {
|
|
|
549
572
|
}
|
|
550
573
|
}, nextTick));
|
|
551
574
|
}
|
|
552
|
-
|
|
553
|
-
var child = el.firstChild;
|
|
554
|
-
while (child) {
|
|
555
|
-
var nextSibling = child.nextSibling;
|
|
556
|
-
walk(child, scope, parentCleanups);
|
|
557
|
-
child = nextSibling;
|
|
558
|
-
}
|
|
559
575
|
};
|
|
560
576
|
|
|
561
577
|
walk(rootElement, state, cleanups);
|
|
@@ -565,7 +581,7 @@ var spiki = (() => {
|
|
|
565
581
|
unmount: () => {
|
|
566
582
|
if (state.destroy) state.destroy.call(state);
|
|
567
583
|
var i = cleanups.length; while (i--) cleanups[i]();
|
|
568
|
-
for(var k in listeners) rootElement.removeEventListener(k, handle);
|
|
584
|
+
for (var k in listeners) rootElement.removeEventListener(k, handle, !!captureEvents[k]);
|
|
569
585
|
if (state._c) for (var k in state._c) cleanup(state._c[k].r);
|
|
570
586
|
rootElement._m = null;
|
|
571
587
|
}
|
|
@@ -575,35 +591,31 @@ var spiki = (() => {
|
|
|
575
591
|
};
|
|
576
592
|
|
|
577
593
|
var raw = (o) => {
|
|
578
|
-
if (!o || typeof o !== 'object') return o;
|
|
594
|
+
if (!o || typeof o !== 'object' || o instanceof Node || o instanceof Date || o instanceof RegExp) return o;
|
|
579
595
|
var target = o._t || o;
|
|
580
596
|
if (Array.isArray(target)) return target.map(e => raw(e));
|
|
581
597
|
var result = {};
|
|
582
|
-
for (var i in target)
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
var compose = (...modules) => {
|
|
587
|
-
var target = {};
|
|
588
|
-
for (var i = 0; i < modules.length; i++) {
|
|
589
|
-
var mod = modules[i];
|
|
590
|
-
if (mod) {
|
|
591
|
-
Object.defineProperties(
|
|
592
|
-
target,
|
|
593
|
-
Object.getOwnPropertyDescriptors(typeof mod === 'function' ? mod() : mod)
|
|
594
|
-
);
|
|
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]);
|
|
595
601
|
}
|
|
596
602
|
}
|
|
597
|
-
return
|
|
603
|
+
return result;
|
|
598
604
|
};
|
|
599
605
|
|
|
600
606
|
return {
|
|
601
|
-
data: (name,
|
|
602
|
-
|
|
607
|
+
data: (name, ...fns) => {
|
|
608
|
+
cmpReg[name] = fns.length === 1 ? fns[0] : () => {
|
|
609
|
+
var target = {};
|
|
610
|
+
for (var i = 0; i < fns.length; i++) {
|
|
611
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(fns[i]()));
|
|
612
|
+
}
|
|
613
|
+
return target;
|
|
614
|
+
};
|
|
615
|
+
},
|
|
603
616
|
start: () => {
|
|
604
617
|
var els = document.querySelectorAll('[s-data]');
|
|
605
|
-
var i = els.length;
|
|
606
|
-
while (i--) mount(els[i]);
|
|
618
|
+
for (var i = 0; i < els.length; i++) mount(els[i]);
|
|
607
619
|
},
|
|
608
620
|
store: (name, value) => {
|
|
609
621
|
if (value === undefined) {
|
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=e.length;t
|
|
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=[]},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(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=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]();a&&Object.setPrototypeOf(o,a);var i=y(o);i.$refs={},i.$root=r,i.$store=e,i.$parent=a;var 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),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}();
|