sprae 11.2.3 → 11.2.5

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/core.js CHANGED
@@ -2,12 +2,12 @@ import { use, effect } from "./signal.js";
2
2
  import { store, _signals } from './store.js';
3
3
 
4
4
  // polyfill
5
- const _dispose = (Symbol.dispose ||= Symbol("dispose"));
5
+ export const _dispose = (Symbol.dispose ||= Symbol("dispose"));
6
6
 
7
7
  export const _state = Symbol("state"), _on = Symbol('on'), _off = Symbol('off')
8
8
 
9
9
  // registered directives
10
- const directive = {}
10
+ export const directive = {}
11
11
 
12
12
  /**
13
13
  * Register a directive with a parsed expression and evaluator.
@@ -28,39 +28,39 @@ export const dir = (name, create, p = parse) => directive[name] = (el, expr, sta
28
28
  * @param {Object} [values] - Initial values to populate the element's reactive state.
29
29
  * @returns {Object} The reactive state object associated with the element.
30
30
  */
31
- export default function sprae(el, values) {
31
+ export const sprae = (el, values) => {
32
32
  // repeated call can be caused by eg. :each with new objects with old keys
33
33
  if (el[_state]) return Object.assign(el[_state], values)
34
34
 
35
35
  // take over existing state instead of creating a clone
36
- const state = store(values || {}), offs = [], fx = []
36
+ let state = store(values || {}), offs = [], fx = [],
37
37
 
38
- const init = (el, attrs=el.attributes) => {
39
- // we iterate live collection (subsprae can init args)
40
- if (attrs) for (let i = 0; i < attrs.length;) {
41
- let {name, value} = attrs[i], pfx, update, dir
38
+ init = (el, attrs = el.attributes) => {
39
+ // we iterate live collection (subsprae can init args)
40
+ if (attrs) for (let i = 0; i < attrs.length;) {
41
+ let { name, value } = attrs[i], pfx, update, dir
42
42
 
43
- // if we have parts meaning there's attr needs to be spraed
44
- // :id:name -> [,id,name]; s-text:id -> [,text,id]; ab-cd -> [ab-cd]
45
- if (pfx = name[0] === ':' ? 1 : (name[0]==='s' && name[1]==='-') ? 2 : 0) {
46
- el.removeAttribute(name);
43
+ // if we have parts meaning there's attr needs to be spraed
44
+ // :id:name -> [,id,name]; s-text:id -> [,text,id]; ab-cd -> [ab-cd]
45
+ if (pfx = name[0] === ':' ? 1 : (name[0] === 's' && name[1] === '-') ? 2 : 0) {
46
+ el.removeAttribute(name);
47
47
 
48
- // multiple attributes like :id:for=""
49
- for (dir of name.slice(pfx).split(':')) {
50
- update = (directive[dir] || directive.default)(el, value, state, dir)
48
+ // multiple attributes like :id:for=""
49
+ for (dir of name.slice(pfx).split(':')) {
50
+ update = (directive[dir] || directive.default)(el, value, state, dir)
51
51
 
52
- // save & start effect
53
- fx.push(update), offs.push(effect(update))
52
+ // save & start effect
53
+ fx.push(update), offs.push(effect(update))
54
54
 
55
- // stop after :each, :if, :with etc.
56
- if (el[_state]===null) return
57
- }
58
- } else i++
59
- }
55
+ // stop after :each, :if, :with etc.
56
+ if (el[_state] === null) return
57
+ }
58
+ } else i++
59
+ }
60
60
 
61
- // :if and :each replace element with text node, which tweaks .children length, but .childNodes length persists
62
- for (let child of el.childNodes) child.nodeType==1 && init(child)
63
- };
61
+ // :if and :each replace element with text node, which tweaks .children length, but .childNodes length persists
62
+ for (let child of el.childNodes) child.nodeType == 1 && init(child)
63
+ };
64
64
 
65
65
  init(el);
66
66
 
@@ -69,8 +69,8 @@ export default function sprae(el, values) {
69
69
  el[_state] = state
70
70
 
71
71
  // on/off all effects
72
- el[_off] = () => { while (offs.length) offs.pop()() }
73
- el[_on] = () => offs.push(...fx.map(f => effect(f)))
72
+ el[_off] = () => (offs.map(off => off()), offs = [])
73
+ el[_on] = () => offs = fx.map(f => effect(f))
74
74
 
75
75
  // destroy
76
76
  el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_state] = null)
@@ -79,6 +79,13 @@ export default function sprae(el, values) {
79
79
  return state;
80
80
  }
81
81
 
82
+ // configure signals/compile
83
+ // it's more compact than using sprae.signal = signal etc.
84
+ sprae.use = s => {
85
+ s.signal && use(s);
86
+ s.compile && (compile = s.compile);
87
+ }
88
+
82
89
  /**
83
90
  * Parses an expression into an evaluator function, caching the result for reuse.
84
91
  *
@@ -105,7 +112,7 @@ const memo = {};
105
112
  * @param {string} [expr=''] - The expression associated with the error, if any.
106
113
  * @throws {Error} The enhanced error object with a formatted message.
107
114
  */
108
- export const err = (e, dir='', expr='') => {
115
+ export const err = (e, dir = '', expr = '') => {
109
116
  throw Object.assign(e, { message: `∴ ${e.message}\n\n${dir}${expr ? `="${expr}"\n\n` : ""}`, expr })
110
117
  }
111
118
 
@@ -116,14 +123,6 @@ export const err = (e, dir='', expr='') => {
116
123
  */
117
124
  export let compile
118
125
 
119
- // configure signals/compile
120
- // it's more compact than using sprae.signal = signal etc.
121
- sprae.use = s => {
122
- s.signal && use(s);
123
- s.compile && (compile = s.compile);
124
- }
125
-
126
-
127
126
  // instantiated <template> fragment holder, like persisting fragment but with minimal API surface
128
127
  export const frag = (tpl) => {
129
128
  if (!tpl.nodeType) return tpl // existing tpl
@@ -149,3 +148,5 @@ export const frag = (tpl) => {
149
148
  // setAttributeNode() { }
150
149
  }
151
150
  }
151
+
152
+ export default sprae
@@ -11,7 +11,7 @@ dir('default', (target, state, expr, name) => {
11
11
  // bind event to a target
12
12
  // NOTE: if you decide to remove chain of events, thing again - that's unique feature of sprae, don't diminish your own value.
13
13
  // ona..onb
14
- const ctxs = name.split('..').map(e => {
14
+ let ctxs = name.split('..').map(e => {
15
15
  let ctx = { evt: '', target, test: () => true };
16
16
  ctx.evt = (e.startsWith('on') ? e.slice(2) : e).replace(/\.(\w+)?-?([-\w]+)?/g,
17
17
  (_, mod, param = '') => (ctx.test = mods[mod]?.(ctx, ...param.split('-')) || ctx.test, '')
@@ -20,10 +20,10 @@ dir('default', (target, state, expr, name) => {
20
20
  });
21
21
 
22
22
  // add listener with the context
23
- const addListener = (fn, { evt, target, test, defer, stop, prevent, immediate, ...opts }) => {
23
+ let addListener = (fn, { evt, target, test, defer, stop, prevent, immediate, ...opts }, cb) => {
24
24
  if (defer) fn = defer(fn)
25
25
 
26
- const cb = (e) => {
26
+ cb = (e) => {
27
27
  try {
28
28
  test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.call(state, e))
29
29
  } catch (error) { err(error, `:on${evt}`, fn) }
@@ -38,7 +38,7 @@ dir('default', (target, state, expr, name) => {
38
38
 
39
39
  // events cycler
40
40
  let startFn, nextFn, off, idx = 0
41
- const nextListener = (fn) => {
41
+ let nextListener = (fn) => {
42
42
  off = addListener((e) => (
43
43
  off(), nextFn = fn?.(e), (idx = ++idx % ctxs.length) ? nextListener(nextFn) : (startFn && nextListener(startFn))
44
44
  ), ctxs[idx]);
@@ -68,8 +68,8 @@ const mods = {
68
68
  document(ctx) { ctx.target = document; },
69
69
  parent(ctx) { ctx.target = ctx.target.parentNode; },
70
70
 
71
- throttle(ctx, limit) { ctx.defer = (fn) => throttle(fn, limit ? Number(limit) || 0 : 108); },
72
- debounce(ctx, wait) { ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108); },
71
+ throttle(ctx, limit) { ctx.defer = (fn) => throttle(fn, limit ? +limit || 0 : 108); },
72
+ debounce(ctx, wait) { ctx.defer = (fn) => debounce(fn, wait ? +wait || 0 : 108); },
73
73
 
74
74
  // test
75
75
  outside: (ctx) => (e) => {
package/directive/each.js CHANGED
@@ -4,17 +4,15 @@ import { effect } from '../signal.js';
4
4
 
5
5
 
6
6
  dir('each', (tpl, state, expr) => {
7
- const [itemVar, idxVar = "$"] = expr.split(/\s+in\s+/)[0].split(/\s*,\s*/);
7
+ let [itemVar, idxVar = "$"] = expr.split(/\bin\b/)[0].trim().split(/\s*,\s*/);
8
8
 
9
9
  // we need :if to be able to replace holder instead of tpl for :if :each case
10
- const holder = document.createTextNode("");
11
- tpl.replaceWith(holder);
12
- tpl[_state] = null // mark as fake-spraed, to preserve :-attribs for template
10
+ let holder = document.createTextNode("");
13
11
 
14
12
  // we re-create items any time new items are produced
15
13
  let cur, keys, items, prevl = 0
16
14
 
17
- const update = () => {
15
+ let update = () => {
18
16
  let i = 0, newItems = items, newl = newItems.length
19
17
 
20
18
  // plain array update, not store (signal with array) - updates full list
@@ -56,7 +54,11 @@ dir('each', (tpl, state, expr) => {
56
54
  prevl = newl
57
55
  }
58
56
 
57
+ tpl.replaceWith(holder);
58
+ tpl[_state] = null // mark as fake-spraed, to preserve :-attribs for template
59
+
59
60
  return value => {
61
+ // obtain new items
60
62
  keys = null
61
63
  if (typeof value === "number") items = Array.from({ length: value }, (_, i) => i + 1)
62
64
  else if (value?.constructor === Object) keys = Object.keys(value), items = Object.values(value)
@@ -75,5 +77,5 @@ dir('each', (tpl, state, expr) => {
75
77
  },
76
78
 
77
79
  // redefine evaluator to take second part of expression
78
- expr => parse(expr.split(/\s+in\s+/)[1])
80
+ expr => parse(expr.split(/\bin\b/)[1])
79
81
  )
package/directive/if.js CHANGED
@@ -6,7 +6,7 @@ import sprae, { dir, _state, _on, _off, frag } from "../core.js";
6
6
  const _prevIf = Symbol("if");
7
7
 
8
8
  dir('if', (el, state) => {
9
- const holder = document.createTextNode('')
9
+ let holder = document.createTextNode('')
10
10
 
11
11
  let next = el.nextElementSibling,
12
12
  curEl, ifEl, elseEl;
@@ -22,8 +22,7 @@ dir('if', (el, state) => {
22
22
  if (!next.hasAttribute(":if")) next.remove(), elseEl = next.content ? frag(next) : next, elseEl[_state] = null
23
23
  }
24
24
 
25
- return (value) => {
26
- const newEl = value ? ifEl : el[_prevIf] ? null : elseEl;
25
+ return (value, newEl = value ? ifEl : el[_prevIf] ? null : elseEl) => {
27
26
  if (next) next[_prevIf] = newEl === ifEl
28
27
  if (curEl != newEl) {
29
28
  // disable effects on child elements when element is not matched
package/dist/sprae.js CHANGED
@@ -42,9 +42,8 @@ var _signals = Symbol("signals");
42
42
  var _change = Symbol("change");
43
43
  var store = (values, parent) => {
44
44
  if (!values) return values;
45
- if (values[_signals]) return values;
46
- if (Array.isArray(values)) return list(values);
47
- if (values.constructor !== Object || values[Symbol.toStringTag]) return values;
45
+ if (values[_signals] || values[Symbol.toStringTag]) return values;
46
+ if (values.constructor !== Object) return Array.isArray(values) ? list(values) : values;
48
47
  let signals = { ...parent?.[_signals] }, _len = signal(Object.values(values).length), state = new Proxy(signals, {
49
48
  get: (_, key) => key === _change ? _len : key === _signals ? signals : signals[key]?.valueOf(),
50
49
  set: (_, key, v, s) => (s = signals[key], set(signals, key, v), s ?? ++_len.value, 1),
@@ -62,10 +61,7 @@ var store = (values, parent) => {
62
61
  return state;
63
62
  };
64
63
  var list = (values) => {
65
- let lastProp;
66
- if (values[_signals]) return values;
67
- let _len = signal(values.length), signals = Array(values.length).fill();
68
- const state = new Proxy(signals, {
64
+ let lastProp, _len = signal(values.length), signals = Array(values.length).fill(), state = new Proxy(signals, {
69
65
  get(_, key) {
70
66
  if (typeof key === "symbol") return key === _change ? _len : key === _signals ? signals : signals[key];
71
67
  if (key === "length") return mut.includes(lastProp) ? _len.peek() : _len.value;
@@ -77,11 +73,11 @@ var list = (values) => {
77
73
  if (key === "length") {
78
74
  for (let i = v; i < signals.length; i++) delete state[i];
79
75
  _len.value = signals.length = v;
80
- return true;
76
+ } else {
77
+ set(signals, key, v);
78
+ if (key >= _len.peek()) _len.value = signals.length = +key + 1;
81
79
  }
82
- set(signals, key, v);
83
- if (key >= _len.peek()) _len.value = signals.length = +key + 1;
84
- return true;
80
+ return 1;
85
81
  },
86
82
  deleteProperty: (_, key) => (signals[key]?.[Symbol.dispose]?.(), delete signals[key], 1)
87
83
  });
@@ -89,13 +85,12 @@ var list = (values) => {
89
85
  };
90
86
  var mut = ["push", "pop", "shift", "unshift", "splice"];
91
87
  var set = (signals, key, v) => {
92
- let s = signals[key];
88
+ let s = signals[key], cur;
93
89
  if (key[0] === "_") signals[key] = v;
94
90
  else if (!s) signals[key] = s = v?.peek ? v : signal(store(v));
95
- else if (v === s.peek()) ;
91
+ else if (v === (cur = s.peek())) ;
96
92
  else if (s._set) s._set(v);
97
- else if (Array.isArray(v) && Array.isArray(s.peek())) {
98
- const cur = s.peek();
93
+ else if (Array.isArray(v) && Array.isArray(cur)) {
99
94
  if (cur[_change]) batch(() => {
100
95
  for (let i = 0; i < v.length; i++) cur[i] = v[i];
101
96
  cur.length = v.length;
@@ -112,10 +107,9 @@ var _on = Symbol("on");
112
107
  var _off = Symbol("off");
113
108
  var directive = {};
114
109
  var dir = (name, create, p = parse) => directive[name] = (el, expr, state, name2, update, evaluate) => (evaluate = p(expr), update = create(el, state, expr, name2, evaluate), () => update(evaluate(state)));
115
- function sprae(el, values) {
110
+ var sprae = (el, values) => {
116
111
  if (el[_state]) return Object.assign(el[_state], values);
117
- const state = store(values || {}), offs = [], fx = [];
118
- const init = (el2, attrs = el2.attributes) => {
112
+ let state = store(values || {}), offs = [], fx = [], init = (el2, attrs = el2.attributes) => {
119
113
  if (attrs) for (let i = 0; i < attrs.length; ) {
120
114
  let { name, value } = attrs[i], pfx, update, dir2;
121
115
  if (pfx = name[0] === ":" ? 1 : name[0] === "s" && name[1] === "-" ? 2 : 0) {
@@ -132,14 +126,16 @@ function sprae(el, values) {
132
126
  init(el);
133
127
  if (!(_state in el)) {
134
128
  el[_state] = state;
135
- el[_off] = () => {
136
- while (offs.length) offs.pop()();
137
- };
138
- el[_on] = () => offs.push(...fx.map((f) => effect(f)));
129
+ el[_off] = () => (offs.map((off) => off()), offs = []);
130
+ el[_on] = () => offs = fx.map((f) => effect(f));
139
131
  el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_state] = null);
140
132
  }
141
133
  return state;
142
- }
134
+ };
135
+ sprae.use = (s) => {
136
+ s.signal && use(s);
137
+ s.compile && (compile = s.compile);
138
+ };
143
139
  var parse = (expr, dir2, fn) => {
144
140
  if (fn = memo[expr = expr.trim()]) return fn;
145
141
  try {
@@ -158,10 +154,6 @@ ${dir2}${expr ? `="${expr}"
158
154
  ` : ""}`, expr });
159
155
  };
160
156
  var compile;
161
- sprae.use = (s) => {
162
- s.signal && use(s);
163
- s.compile && (compile = s.compile);
164
- };
165
157
  var frag = (tpl) => {
166
158
  if (!tpl.nodeType) return tpl;
167
159
  let content = tpl.content.cloneNode(true), attributes = [...tpl.attributes], ref = document.createTextNode(""), childNodes = (content.append(ref), [...content.childNodes]);
@@ -182,11 +174,12 @@ var frag = (tpl) => {
182
174
  // setAttributeNode() { }
183
175
  };
184
176
  };
177
+ var core_default = sprae;
185
178
 
186
179
  // directive/if.js
187
180
  var _prevIf = Symbol("if");
188
181
  dir("if", (el, state) => {
189
- const holder = document.createTextNode("");
182
+ let holder = document.createTextNode("");
190
183
  let next = el.nextElementSibling, curEl, ifEl, elseEl;
191
184
  el.replaceWith(holder);
192
185
  ifEl = el.content ? frag(el) : el;
@@ -195,14 +188,13 @@ dir("if", (el, state) => {
195
188
  next.removeAttribute(":else");
196
189
  if (!next.hasAttribute(":if")) next.remove(), elseEl = next.content ? frag(next) : next, elseEl[_state] = null;
197
190
  }
198
- return (value) => {
199
- const newEl = value ? ifEl : el[_prevIf] ? null : elseEl;
191
+ return (value, newEl = value ? ifEl : el[_prevIf] ? null : elseEl) => {
200
192
  if (next) next[_prevIf] = newEl === ifEl;
201
193
  if (curEl != newEl) {
202
194
  if (curEl) curEl.remove(), curEl[_off]?.();
203
195
  if (curEl = newEl) {
204
196
  holder.before(curEl.content || curEl);
205
- curEl[_state] === null ? (delete curEl[_state], sprae(curEl, state)) : curEl[_on]();
197
+ curEl[_state] === null ? (delete curEl[_state], core_default(curEl, state)) : curEl[_on]();
206
198
  }
207
199
  }
208
200
  };
@@ -212,12 +204,10 @@ dir("if", (el, state) => {
212
204
  dir(
213
205
  "each",
214
206
  (tpl, state, expr) => {
215
- const [itemVar, idxVar = "$"] = expr.split(/\s+in\s+/)[0].split(/\s*,\s*/);
216
- const holder = document.createTextNode("");
217
- tpl.replaceWith(holder);
218
- tpl[_state] = null;
207
+ let [itemVar, idxVar = "$"] = expr.split(/\bin\b/)[0].trim().split(/\s*,\s*/);
208
+ let holder = document.createTextNode("");
219
209
  let cur, keys2, items, prevl = 0;
220
- const update = () => {
210
+ let update = () => {
221
211
  var _a, _b;
222
212
  let i = 0, newItems = items, newl = newItems.length;
223
213
  if (cur && !cur[_change]) {
@@ -235,7 +225,7 @@ dir(
235
225
  [idxVar]: keys2 ? keys2[idx] : idx
236
226
  }, state), el = tpl.content ? frag(tpl) : tpl.cloneNode(true);
237
227
  holder.before(el.content || el);
238
- sprae(el, scope);
228
+ core_default(el, scope);
239
229
  ((_b = cur[_a = _signals] || (cur[_a] = []))[i] || (_b[i] = {}))[Symbol.dispose] = () => {
240
230
  el[Symbol.dispose]?.(), el.remove();
241
231
  };
@@ -243,6 +233,8 @@ dir(
243
233
  }
244
234
  prevl = newl;
245
235
  };
236
+ tpl.replaceWith(holder);
237
+ tpl[_state] = null;
246
238
  return (value) => {
247
239
  keys2 = null;
248
240
  if (typeof value === "number") items = Array.from({ length: value }, (_, i) => i + 1);
@@ -256,7 +248,7 @@ dir(
256
248
  };
257
249
  },
258
250
  // redefine evaluator to take second part of expression
259
- (expr) => parse(expr.split(/\s+in\s+/)[1])
251
+ (expr) => parse(expr.split(/\bin\b/)[1])
260
252
  );
261
253
 
262
254
  // directive/default.js
@@ -265,7 +257,7 @@ dir("default", (target, state, expr, name) => {
265
257
  return name ? (value) => attr(target, name, value) : (value) => {
266
258
  for (let key in value) attr(target, dashcase(key), value[key]);
267
259
  };
268
- const ctxs = name.split("..").map((e) => {
260
+ let ctxs = name.split("..").map((e) => {
269
261
  let ctx = { evt: "", target, test: () => true };
270
262
  ctx.evt = (e.startsWith("on") ? e.slice(2) : e).replace(
271
263
  /\.(\w+)?-?([-\w]+)?/g,
@@ -273,9 +265,9 @@ dir("default", (target, state, expr, name) => {
273
265
  );
274
266
  return ctx;
275
267
  });
276
- const addListener = (fn, { evt, target: target2, test, defer, stop, prevent, immediate, ...opts }) => {
268
+ let addListener = (fn, { evt, target: target2, test, defer, stop, prevent, immediate, ...opts }, cb) => {
277
269
  if (defer) fn = defer(fn);
278
- const cb = (e) => {
270
+ cb = (e) => {
279
271
  try {
280
272
  test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.call(state, e));
281
273
  } catch (error) {
@@ -287,7 +279,7 @@ dir("default", (target, state, expr, name) => {
287
279
  };
288
280
  if (ctxs.length == 1) return (v) => addListener(v, ctxs[0]);
289
281
  let startFn, nextFn, off, idx = 0;
290
- const nextListener = (fn) => {
282
+ let nextListener = (fn) => {
291
283
  off = addListener((e) => (off(), nextFn = fn?.(e), (idx = ++idx % ctxs.length) ? nextListener(nextFn) : startFn && nextListener(startFn)), ctxs[idx]);
292
284
  };
293
285
  return (value) => (startFn = value, !off && nextListener(startFn), () => startFn = null);
@@ -324,10 +316,10 @@ var mods = {
324
316
  ctx.target = ctx.target.parentNode;
325
317
  },
326
318
  throttle(ctx, limit) {
327
- ctx.defer = (fn) => throttle(fn, limit ? Number(limit) || 0 : 108);
319
+ ctx.defer = (fn) => throttle(fn, limit ? +limit || 0 : 108);
328
320
  },
329
321
  debounce(ctx, wait) {
330
- ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108);
322
+ ctx.defer = (fn) => debounce(fn, wait ? +wait || 0 : 108);
331
323
  },
332
324
  // test
333
325
  outside: (ctx) => (e) => {
@@ -421,7 +413,7 @@ dir("value", (el, state, expr) => {
421
413
  el.oninput = el.onchange = handleChange;
422
414
  if (el.type?.startsWith("select")) {
423
415
  new MutationObserver(handleChange).observe(el, { childList: true, subtree: true, attributes: true });
424
- sprae(el, state);
416
+ core_default(el, state);
425
417
  }
426
418
  } catch {
427
419
  }
@@ -440,7 +432,7 @@ var ensure = (state, expr, name = expr.match(/^\w+(?=\s*(?:\.|\[|$))/)) => {
440
432
  dir("ref", (el, state, expr, _, ev) => (ensure(state, expr), ev(state) == null ? (setter(expr)(state, el), (_2) => _2) : (v) => v.call(null, el)));
441
433
 
442
434
  // directive/with.js
443
- dir("with", (el, rootState, state) => (state = null, (values) => sprae(el, state ? values : state = store_default(values, rootState))));
435
+ dir("with", (el, rootState, state) => (state = null, (values) => core_default(el, state ? values : state = store_default(values, rootState))));
444
436
 
445
437
  // directive/text.js
446
438
  dir("text", (el) => (
@@ -490,8 +482,8 @@ dir("data", (el) => (value) => {
490
482
  });
491
483
 
492
484
  // sprae.js
493
- sprae.use({ compile: (expr) => sprae.constructor(`with (arguments[0]) { return ${expr} };`) });
494
- var sprae_default = sprae;
485
+ core_default.use({ compile: (expr) => core_default.constructor(`with (arguments[0]) { return ${expr} };`) });
486
+ var sprae_default = core_default;
495
487
  export {
496
488
  sprae_default as default
497
489
  };