voodoojs 0.11.0 → 0.11.2

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 CHANGED
@@ -22,7 +22,7 @@ npm install voodoojs
22
22
  Or drop it into a page, with nothing else:
23
23
 
24
24
  ```html
25
- <script src="https://cdn.jsdelivr.net/npm/voodoojs@0.10/dist/voodoo.min.js" defer></script>
25
+ <script src="https://cdn.jsdelivr.net/npm/voodoojs@0.11.2/dist/voodoo.full.min.js" defer></script>
26
26
 
27
27
  <div v-data="{ count: 0 }">
28
28
  <button @click="count++">Clicked { count } times</button>
@@ -30,8 +30,9 @@ Or drop it into a page, with nothing else:
30
30
  ```
31
31
 
32
32
  That page is a complete application. There is no build step, no bundler and no
33
- configuration. The tag is pinned to the `0.6` line, so patch releases arrive
34
- without an edit; pin the exact version if you would rather approve each one.
33
+ configuration. The tag names an exact version, so what you load never changes
34
+ under you. It is the FULL build, which is the one that carries JSX; drop `.full`
35
+ for the essential build, 84 KB gzipped against 132, if you do not need it.
35
36
 
36
37
  ## Two ways to write it
37
38
 
@@ -1,14 +1,14 @@
1
- import { http, HttpError, request } from './chunk-VQEJ4DTE.js';
2
- import { stringify, markInitialized, markSkipChildren, destroy, walk, removeQuietly, evaluateIn, addCleanup, markNodeScope, setComponentMounter, closestDirective, magic, readAttr, hasAttr, componentAliases, Scope, queryDirective, parse, evaluate, parseAttribute, originalAttributes, hasDirective, findScope, VoodooRuntimeError, VoodooSyntaxError, allowedGlobals, clearParseCache, tokenize, getScope, stopObserving, refresh, start, magics, rootScope, isInitialized, restoreAttributes, hasDirectives } from './chunk-NUBOX6YQ.js';
3
- import { ref, reactive, handleError, nextTick, queuePostFlush, warn, watch, EffectScope, computed, effect, toRaw, flushSync, effectScope, stop, unref, markRaw, watchEffect, shallowRef, setErrorHandler } from './chunk-5GWN7E6N.js';
4
- import { warnDuplicateKey, warn as warn$1, describeElement, warnUnknownComponent, warnAlias, warnRequiredProp } from './chunk-OTRGHJIJ.js';
5
- import { parseDuration, debounce, utils_exports, throttle, uid, device, escapeHtml } from './chunk-FBQPFIHZ.js';
6
- import { injectStyle, ensureTokens } from './chunk-QL2GIGVQ.js';
7
- import { defineDirective, config, PRIORITY, directives, normalizeComponentName, components, usePlugin } from './chunk-WIXAZJYS.js';
8
- import { __publicField } from './chunk-EYGQD7OP.js';
1
+ import { http, HttpError, request } from './chunk-DJJB35SR.js';
2
+ import { stringify, markInitialized, markSkipChildren, destroy, walk, removeQuietly, evaluateIn, addCleanup, markNodeScope, setComponentMounter, closestDirective, magic, readAttr, hasAttr, componentAliases, Scope, queryDirective, parse, evaluate, parseAttribute, originalAttributes, hasDirective, findScope, VoodooRuntimeError, VoodooSyntaxError, allowedGlobals, clearParseCache, tokenize, getScope, stopObserving, refresh, start, magics, rootScope, isInitialized, restoreAttributes, hasDirectives } from './chunk-H2ZUEQWV.js';
3
+ import { ref, reactive, handleError, nextTick, queuePostFlush, warn, watch, EffectScope, computed, effect, toRaw, flushSync, effectScope, stop, unref, markRaw, watchEffect, shallowRef, setErrorHandler } from './chunk-WJP3YGUI.js';
4
+ import { warnDuplicateKey, warn as warn$1, describeElement, warnUnknownComponent, warnAlias, warnRequiredProp } from './chunk-UV5PMS7P.js';
5
+ import { parseDuration, debounce, utils_exports, throttle, uid, device, escapeHtml } from './chunk-IGZSDZKU.js';
6
+ import { injectStyle, ensureTokens } from './chunk-V3O3WOZH.js';
7
+ import { defineDirective, config, PRIORITY, directives, normalizeComponentName, components, usePlugin } from './chunk-NFDXVIII.js';
8
+ import { __publicField } from './chunk-IS3DR2KY.js';
9
9
 
10
10
  /**
11
- * Voodoo.js v0.11.0
11
+ * Voodoo.js v0.11.2
12
12
  * JavaScript feels like magic.
13
13
  * (c) 2026 Voodoo.js contributors. MIT License.
14
14
  */
@@ -2662,7 +2662,7 @@ var jsonStylesInjected = false;
2662
2662
  function injectJSONStyles() {
2663
2663
  if (jsonStylesInjected) return;
2664
2664
  jsonStylesInjected = true;
2665
- void import('./style-ZM3TAT4K.js').then(({ injectStyle: injectStyle2 }) => {
2665
+ void import('./style-4X62SABN.js').then(({ injectStyle: injectStyle2 }) => {
2666
2666
  injectStyle2(
2667
2667
  "json-render",
2668
2668
  `
@@ -2949,7 +2949,7 @@ function data(values) {
2949
2949
  Object.defineProperties(rootScope.data, Object.getOwnPropertyDescriptors(values));
2950
2950
  return rootScope.data;
2951
2951
  }
2952
- var version2 = "0.11.0";
2952
+ var version2 = "0.11.2";
2953
2953
  var core = {
2954
2954
  // Utilities first: Voodoo's own names can override.
2955
2955
  ...utils_exports,
@@ -10271,5 +10271,5 @@ defineDirective(
10271
10271
  );
10272
10272
 
10273
10273
  export { VoodooCollection, alert, allStores, applyMask, cache, clearErrors, clipboard, confirm, cookie, core, createApp, createResource, defineComponent, dialog, efeitos, ensurePalette, enter, fadeIn, fadeOut, fromHtml, hotkey, instances, leave, mask, masks, messages, modal, mountComponent, network, palette, prompt, query, ready, ready2, registerMask, removeStore, screen, serializeForm, session, showFieldError, showFormErrors, slideDown, slideUp, sound, storage, store, storeNames, theme, toast, unmask, url, validate, validator, viewTransition, whenElement, whenReady };
10274
- //# sourceMappingURL=chunk-PBZCYF2Y.js.map
10275
- //# sourceMappingURL=chunk-PBZCYF2Y.js.map
10274
+ //# sourceMappingURL=chunk-AH2VXDZD.js.map
10275
+ //# sourceMappingURL=chunk-AH2VXDZD.js.map
@@ -1,8 +1,8 @@
1
- import { reactive } from './chunk-5GWN7E6N.js';
2
- import { warnOnce } from './chunk-OTRGHJIJ.js';
1
+ import { reactive } from './chunk-WJP3YGUI.js';
2
+ import { warnOnce } from './chunk-UV5PMS7P.js';
3
3
 
4
4
  /**
5
- * Voodoo.js v0.11.0
5
+ * Voodoo.js v0.11.2
6
6
  * JavaScript feels like magic.
7
7
  * (c) 2026 Voodoo.js contributors. MIT License.
8
8
  */
@@ -942,5 +942,5 @@ Object.defineProperty(factory, "open", {
942
942
  var socket = factory;
943
943
 
944
944
  export { ENGINE, SIO, createSocket, decodeEngine, decodeSocketIo, devtoolsBus, encodeSocketIo, engineURL, resolveSocketURL, socket, socketSupported };
945
- //# sourceMappingURL=chunk-KAS77SGY.js.map
946
- //# sourceMappingURL=chunk-KAS77SGY.js.map
945
+ //# sourceMappingURL=chunk-DCE5WIGA.js.map
946
+ //# sourceMappingURL=chunk-DCE5WIGA.js.map
@@ -1,9 +1,9 @@
1
- import { warnOnce } from './chunk-OTRGHJIJ.js';
2
- import { parseDuration } from './chunk-FBQPFIHZ.js';
3
- import { __publicField } from './chunk-EYGQD7OP.js';
1
+ import { warnOnce } from './chunk-UV5PMS7P.js';
2
+ import { parseDuration } from './chunk-IGZSDZKU.js';
3
+ import { __publicField } from './chunk-IS3DR2KY.js';
4
4
 
5
5
  /**
6
- * Voodoo.js v0.11.0
6
+ * Voodoo.js v0.11.2
7
7
  * JavaScript feels like magic.
8
8
  * (c) 2026 Voodoo.js contributors. MIT License.
9
9
  */
@@ -444,5 +444,5 @@ var http = {
444
444
  };
445
445
 
446
446
  export { HttpError, clearCache, flushOfflineQueue, http, request };
447
- //# sourceMappingURL=chunk-VQEJ4DTE.js.map
448
- //# sourceMappingURL=chunk-VQEJ4DTE.js.map
447
+ //# sourceMappingURL=chunk-DJJB35SR.js.map
448
+ //# sourceMappingURL=chunk-DJJB35SR.js.map
@@ -1,10 +1,10 @@
1
- import { reactive, handleError, EffectScope, effect } from './chunk-5GWN7E6N.js';
2
- import { inDevelopment, warnInvalidExpression, warnUnknownDirective } from './chunk-OTRGHJIJ.js';
3
- import { config, directives, components } from './chunk-WIXAZJYS.js';
4
- import { __publicField } from './chunk-EYGQD7OP.js';
1
+ import { reactive, handleError, EffectScope, effect } from './chunk-WJP3YGUI.js';
2
+ import { inDevelopment, warnInvalidExpression, warnUnknownDirective } from './chunk-UV5PMS7P.js';
3
+ import { config, directives, components } from './chunk-NFDXVIII.js';
4
+ import { __publicField } from './chunk-IS3DR2KY.js';
5
5
 
6
6
  /**
7
- * Voodoo.js v0.11.0
7
+ * Voodoo.js v0.11.2
8
8
  * JavaScript feels like magic.
9
9
  * (c) 2026 Voodoo.js contributors. MIT License.
10
10
  */
@@ -810,9 +810,17 @@ var Parser = class {
810
810
  if (t.type === "punct") {
811
811
  if (t.value === "(") {
812
812
  this.next();
813
- const expr = this.parseExpression();
813
+ const body = [this.parseExpression()];
814
+ while (this.isPunct(",")) {
815
+ this.next();
816
+ if (this.isPunct(")")) {
817
+ const stray = this.peek();
818
+ throw new VoodooSyntaxError("Trailing comma in a group", this.source, stray.start);
819
+ }
820
+ body.push(this.parseExpression());
821
+ }
814
822
  this.expect(")");
815
- return expr;
823
+ return body.length === 1 ? body[0] : { t: "seq", body };
816
824
  }
817
825
  if (t.value === "[") return this.parseArrayLiteral();
818
826
  if (t.value === "{") return this.parseObjectLiteral();
@@ -2102,5 +2110,5 @@ function refresh(root) {
2102
2110
  }
2103
2111
 
2104
2112
  export { Scope, VoodooRuntimeError, VoodooSyntaxError, addCleanup, allowedGlobals, clearParseCache, closestDirective, collectDirectives, componentAliases, destroy, evaluate, evaluateIn, findScope, getEffectScopes, getScope, hadDirectives, hasAttr, hasDirective, hasDirectives, isInitialized, magic, magics, markInitialized, markNodeScope, markSkipChildren, onStart, originalAttributes, parse, parseAttribute, queryDirective, readAttr, refresh, removeQuietly, restoreAttributes, rootScope, setComponentMounter, start, stopObserving, stringify, tokenize, unwrap, walk };
2105
- //# sourceMappingURL=chunk-NUBOX6YQ.js.map
2106
- //# sourceMappingURL=chunk-NUBOX6YQ.js.map
2113
+ //# sourceMappingURL=chunk-H2ZUEQWV.js.map
2114
+ //# sourceMappingURL=chunk-H2ZUEQWV.js.map
@@ -1,7 +1,7 @@
1
- import { __export } from './chunk-EYGQD7OP.js';
1
+ import { __export } from './chunk-IS3DR2KY.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.11.0
4
+ * Voodoo.js v0.11.2
5
5
  * JavaScript feels like magic.
6
6
  * (c) 2026 Voodoo.js contributors. MIT License.
7
7
  */
@@ -397,5 +397,5 @@ var device = {
397
397
  };
398
398
 
399
399
  export { capitalize, chunk, clone, debounce, device, escapeHtml, formatCurrency, formatDate, formatFileSize, formatNumber, formatPercent, get, groupBy, isBrowser, matchesMedia, memoize, merge, once, parseDuration, random, relativeTime, sample, set, setFormatDefaults, sleep, slugify, sortBy, stripTags, throttle, titleCase, truncate, uid, unique, utils_exports, uuid };
400
- //# sourceMappingURL=chunk-FBQPFIHZ.js.map
401
- //# sourceMappingURL=chunk-FBQPFIHZ.js.map
400
+ //# sourceMappingURL=chunk-IGZSDZKU.js.map
401
+ //# sourceMappingURL=chunk-IGZSDZKU.js.map
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Voodoo.js v0.11.0
2
+ * Voodoo.js v0.11.2
3
3
  * JavaScript feels like magic.
4
4
  * (c) 2026 Voodoo.js contributors. MIT License.
5
5
  */
@@ -12,5 +12,5 @@ var __export = (target, all) => {
12
12
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
13
13
 
14
14
  export { __export, __publicField };
15
- //# sourceMappingURL=chunk-EYGQD7OP.js.map
16
- //# sourceMappingURL=chunk-EYGQD7OP.js.map
15
+ //# sourceMappingURL=chunk-IS3DR2KY.js.map
16
+ //# sourceMappingURL=chunk-IS3DR2KY.js.map
@@ -1,8 +1,8 @@
1
- import { handleError } from './chunk-5GWN7E6N.js';
2
- import { warn } from './chunk-OTRGHJIJ.js';
1
+ import { handleError } from './chunk-WJP3YGUI.js';
2
+ import { warn } from './chunk-UV5PMS7P.js';
3
3
 
4
4
  /**
5
- * Voodoo.js v0.11.0
5
+ * Voodoo.js v0.11.2
6
6
  * JavaScript feels like magic.
7
7
  * (c) 2026 Voodoo.js contributors. MIT License.
8
8
  */
@@ -1192,5 +1192,5 @@ var gpu = {
1192
1192
  };
1193
1193
 
1194
1194
  export { clock, compute, describeWgslType, destroy, effect, findEntry, flattenValue, frame, frameLoop, gpu, inferStruct, init, packStruct, reflectBindings, reflectEntries, reflectStructs, reflectWgsl, resetShared, shared, splitTopLevel, stripWgslComments, supported, surface, target, uniforms, writeField, writeStruct };
1195
- //# sourceMappingURL=chunk-TZJSPNLV.js.map
1196
- //# sourceMappingURL=chunk-TZJSPNLV.js.map
1195
+ //# sourceMappingURL=chunk-KQYSJHZR.js.map
1196
+ //# sourceMappingURL=chunk-KQYSJHZR.js.map
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Voodoo.js v0.11.0
2
+ * Voodoo.js v0.11.2
3
3
  * JavaScript feels like magic.
4
4
  * (c) 2026 Voodoo.js contributors. MIT License.
5
5
  */
@@ -61,5 +61,5 @@ function usePlugin(V, plugin, options) {
61
61
  }
62
62
 
63
63
  export { PRIORITY, components, config, defineDirective, directives, normalizeComponentName, usePlugin };
64
- //# sourceMappingURL=chunk-WIXAZJYS.js.map
65
- //# sourceMappingURL=chunk-WIXAZJYS.js.map
64
+ //# sourceMappingURL=chunk-NFDXVIII.js.map
65
+ //# sourceMappingURL=chunk-NFDXVIII.js.map
@@ -1,7 +1,7 @@
1
- import { config } from './chunk-WIXAZJYS.js';
1
+ import { config } from './chunk-NFDXVIII.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.11.0
4
+ * Voodoo.js v0.11.2
5
5
  * JavaScript feels like magic.
6
6
  * (c) 2026 Voodoo.js contributors. MIT License.
7
7
  */
@@ -78,5 +78,5 @@ function warnAlias(alias, canonical) {
78
78
  }
79
79
 
80
80
  export { describeElement, inDevelopment, warn, warnAlias, warnDuplicateKey, warnInvalidExpression, warnOnce, warnRequiredProp, warnUnknownComponent, warnUnknownDirective };
81
- //# sourceMappingURL=chunk-OTRGHJIJ.js.map
82
- //# sourceMappingURL=chunk-OTRGHJIJ.js.map
81
+ //# sourceMappingURL=chunk-UV5PMS7P.js.map
82
+ //# sourceMappingURL=chunk-UV5PMS7P.js.map
@@ -1,7 +1,7 @@
1
- import { config } from './chunk-WIXAZJYS.js';
1
+ import { config } from './chunk-NFDXVIII.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.11.0
4
+ * Voodoo.js v0.11.2
5
5
  * JavaScript feels like magic.
6
6
  * (c) 2026 Voodoo.js contributors. MIT License.
7
7
  */
@@ -68,5 +68,5 @@ function ensureTokens() {
68
68
  }
69
69
 
70
70
  export { BASE_TOKENS, ensureTokens, injectStyle };
71
- //# sourceMappingURL=chunk-QL2GIGVQ.js.map
72
- //# sourceMappingURL=chunk-QL2GIGVQ.js.map
71
+ //# sourceMappingURL=chunk-V3O3WOZH.js.map
72
+ //# sourceMappingURL=chunk-V3O3WOZH.js.map
@@ -1,7 +1,7 @@
1
- import { __publicField } from './chunk-EYGQD7OP.js';
1
+ import { __publicField } from './chunk-IS3DR2KY.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.11.0
4
+ * Voodoo.js v0.11.2
5
5
  * JavaScript feels like magic.
6
6
  * (c) 2026 Voodoo.js contributors. MIT License.
7
7
  */
@@ -637,5 +637,5 @@ function traverse(value, seen = /* @__PURE__ */ new Set()) {
637
637
  }
638
638
 
639
639
  export { EffectScope, ITERATE_KEY, ReactiveEffect, TriggerType, computed, effect, effectScope, enableTracking, flushSync, getActiveEffect, getActiveScope, handleError, hasChanged, isReactive, isRef, markRaw, nextTick, pauseTracking, queueJob, queuePostFlush, reactive, ref, resetTracking, setErrorHandler, shallowRef, stop, toRaw, track, trigger, unref, warn, watch, watchEffect };
640
- //# sourceMappingURL=chunk-5GWN7E6N.js.map
641
- //# sourceMappingURL=chunk-5GWN7E6N.js.map
640
+ //# sourceMappingURL=chunk-WJP3YGUI.js.map
641
+ //# sourceMappingURL=chunk-WJP3YGUI.js.map
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  /**
6
- * Voodoo.js v0.11.0
6
+ * Voodoo.js v0.11.2
7
7
  * JavaScript feels like magic.
8
8
  * (c) 2026 Voodoo.js contributors. MIT License.
9
9
  */
@@ -1626,9 +1626,17 @@ var Parser = class {
1626
1626
  if (t.type === "punct") {
1627
1627
  if (t.value === "(") {
1628
1628
  this.next();
1629
- const expr = this.parseExpression();
1629
+ const body = [this.parseExpression()];
1630
+ while (this.isPunct(",")) {
1631
+ this.next();
1632
+ if (this.isPunct(")")) {
1633
+ const stray = this.peek();
1634
+ throw new VoodooSyntaxError("Trailing comma in a group", this.source, stray.start);
1635
+ }
1636
+ body.push(this.parseExpression());
1637
+ }
1630
1638
  this.expect(")");
1631
- return expr;
1639
+ return body.length === 1 ? body[0] : { t: "seq", body };
1632
1640
  }
1633
1641
  if (t.value === "[") return this.parseArrayLiteral();
1634
1642
  if (t.value === "{") return this.parseObjectLiteral();
@@ -6764,7 +6772,7 @@ function data(values) {
6764
6772
  Object.defineProperties(rootScope.data, Object.getOwnPropertyDescriptors(values));
6765
6773
  return rootScope.data;
6766
6774
  }
6767
- var version2 = "0.11.0";
6775
+ var version2 = "0.11.2";
6768
6776
  var core = {
6769
6777
  // Utilities first: Voodoo's own names can override.
6770
6778
  ...utils_exports,
package/dist/essential.js CHANGED
@@ -1,15 +1,15 @@
1
- import { core, sound, hotkey, palette, registerMask, unmask, applyMask, masks, mask, clearErrors, showFieldError, showFormErrors, messages, serializeForm, validate, validator, dialog, prompt, confirm, alert, modal, VoodooCollection, fromHtml, ready2, query } from './chunk-PBZCYF2Y.js';
2
- import './chunk-VQEJ4DTE.js';
3
- import { magic } from './chunk-NUBOX6YQ.js';
4
- import './chunk-5GWN7E6N.js';
5
- import './chunk-OTRGHJIJ.js';
6
- import './chunk-FBQPFIHZ.js';
7
- import './chunk-QL2GIGVQ.js';
8
- import './chunk-WIXAZJYS.js';
9
- import './chunk-EYGQD7OP.js';
1
+ import { core, sound, hotkey, palette, registerMask, unmask, applyMask, masks, mask, clearErrors, showFieldError, showFormErrors, messages, serializeForm, validate, validator, dialog, prompt, confirm, alert, modal, VoodooCollection, fromHtml, ready2, query } from './chunk-AH2VXDZD.js';
2
+ import './chunk-DJJB35SR.js';
3
+ import { magic } from './chunk-H2ZUEQWV.js';
4
+ import './chunk-WJP3YGUI.js';
5
+ import './chunk-UV5PMS7P.js';
6
+ import './chunk-IGZSDZKU.js';
7
+ import './chunk-V3O3WOZH.js';
8
+ import './chunk-NFDXVIII.js';
9
+ import './chunk-IS3DR2KY.js';
10
10
 
11
11
  /**
12
- * Voodoo.js v0.11.0
12
+ * Voodoo.js v0.11.2
13
13
  * JavaScript feels like magic.
14
14
  * (c) 2026 Voodoo.js contributors. MIT License.
15
15
  */
package/dist/gpu.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  /**
6
- * Voodoo.js v0.11.0
6
+ * Voodoo.js v0.11.2
7
7
  * JavaScript feels like magic.
8
8
  * (c) 2026 Voodoo.js contributors. MIT License.
9
9
  */
package/dist/gpu.js CHANGED
@@ -1,15 +1,15 @@
1
- import { supported, clock, shared, gpu, surface, effect, frameLoop, frame } from './chunk-TZJSPNLV.js';
2
- export { clock, compute, describeWgslType, destroy, effect, findEntry, flattenValue, frame, frameLoop, gpu, inferStruct, init, packStruct, reflectBindings, reflectEntries, reflectStructs, reflectWgsl, resetShared, shared, splitTopLevel, stripWgslComments, supported, surface, target, uniforms, writeField, writeStruct } from './chunk-TZJSPNLV.js';
3
- import { http } from './chunk-VQEJ4DTE.js';
4
- import { originalAttributes, destroy } from './chunk-NUBOX6YQ.js';
5
- import { handleError } from './chunk-5GWN7E6N.js';
6
- import { warn, describeElement } from './chunk-OTRGHJIJ.js';
7
- import './chunk-FBQPFIHZ.js';
8
- import { defineDirective } from './chunk-WIXAZJYS.js';
9
- import './chunk-EYGQD7OP.js';
1
+ import { supported, clock, shared, gpu, surface, effect, frameLoop, frame } from './chunk-KQYSJHZR.js';
2
+ export { clock, compute, describeWgslType, destroy, effect, findEntry, flattenValue, frame, frameLoop, gpu, inferStruct, init, packStruct, reflectBindings, reflectEntries, reflectStructs, reflectWgsl, resetShared, shared, splitTopLevel, stripWgslComments, supported, surface, target, uniforms, writeField, writeStruct } from './chunk-KQYSJHZR.js';
3
+ import { http } from './chunk-DJJB35SR.js';
4
+ import { originalAttributes, destroy } from './chunk-H2ZUEQWV.js';
5
+ import { handleError } from './chunk-WJP3YGUI.js';
6
+ import { warn, describeElement } from './chunk-UV5PMS7P.js';
7
+ import './chunk-IGZSDZKU.js';
8
+ import { defineDirective } from './chunk-NFDXVIII.js';
9
+ import './chunk-IS3DR2KY.js';
10
10
 
11
11
  /**
12
- * Voodoo.js v0.11.0
12
+ * Voodoo.js v0.11.2
13
13
  * JavaScript feels like magic.
14
14
  * (c) 2026 Voodoo.js contributors. MIT License.
15
15
  */
package/dist/http.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.11.0
4
+ * Voodoo.js v0.11.2
5
5
  * JavaScript feels like magic.
6
6
  * (c) 2026 Voodoo.js contributors. MIT License.
7
7
  */
package/dist/http.js CHANGED
@@ -1,7 +1,7 @@
1
- export { HttpError, clearCache, flushOfflineQueue, http, request } from './chunk-VQEJ4DTE.js';
2
- import './chunk-OTRGHJIJ.js';
3
- import './chunk-FBQPFIHZ.js';
4
- import './chunk-WIXAZJYS.js';
5
- import './chunk-EYGQD7OP.js';
1
+ export { HttpError, clearCache, flushOfflineQueue, http, request } from './chunk-DJJB35SR.js';
2
+ import './chunk-UV5PMS7P.js';
3
+ import './chunk-IGZSDZKU.js';
4
+ import './chunk-NFDXVIII.js';
5
+ import './chunk-IS3DR2KY.js';
6
6
  //# sourceMappingURL=http.js.map
7
7
  //# sourceMappingURL=http.js.map
package/dist/index.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  /**
6
- * Voodoo.js v0.11.0
6
+ * Voodoo.js v0.11.2
7
7
  * JavaScript feels like magic.
8
8
  * (c) 2026 Voodoo.js contributors. MIT License.
9
9
  */
@@ -1626,9 +1626,17 @@ var Parser = class {
1626
1626
  if (t2.type === "punct") {
1627
1627
  if (t2.value === "(") {
1628
1628
  this.next();
1629
- const expr = this.parseExpression();
1629
+ const body = [this.parseExpression()];
1630
+ while (this.isPunct(",")) {
1631
+ this.next();
1632
+ if (this.isPunct(")")) {
1633
+ const stray = this.peek();
1634
+ throw new VoodooSyntaxError("Trailing comma in a group", this.source, stray.start);
1635
+ }
1636
+ body.push(this.parseExpression());
1637
+ }
1630
1638
  this.expect(")");
1631
- return expr;
1639
+ return body.length === 1 ? body[0] : { t: "seq", body };
1632
1640
  }
1633
1641
  if (t2.value === "[") return this.parseArrayLiteral();
1634
1642
  if (t2.value === "{") return this.parseObjectLiteral();
@@ -6778,7 +6786,7 @@ function data(values) {
6778
6786
  Object.defineProperties(rootScope.data, Object.getOwnPropertyDescriptors(values));
6779
6787
  return rootScope.data;
6780
6788
  }
6781
- var version2 = "0.11.0";
6789
+ var version2 = "0.11.2";
6782
6790
  var core = {
6783
6791
  // Utilities first: Voodoo's own names can override.
6784
6792
  ...utils_exports,
@@ -20912,10 +20920,14 @@ function install(parent, collected, hint) {
20912
20920
  function readDeclarationBlock(root = document.body) {
20913
20921
  for (const node of Array.from(root.childNodes)) {
20914
20922
  if (node.nodeType !== Node.TEXT_NODE) continue;
20915
- const text = (node.textContent ?? "").trim();
20916
- if (!text.startsWith("{") || !text.endsWith("}")) continue;
20917
- if (!/\b(const|let|var)\s/.test(text)) continue;
20918
- const body = text.slice(1, -1).replace(/\b(?:const|let|var)\s+/g, "");
20923
+ const raw = node.textContent ?? "";
20924
+ const open = raw.indexOf("{");
20925
+ if (open < 0) continue;
20926
+ const end = matchBrace(raw, open);
20927
+ if (end < 0) continue;
20928
+ const group = raw.slice(open, end + 1);
20929
+ if (!/\b(?:const|let|var)\s/.test(group)) continue;
20930
+ const body = group.slice(1, -1).replace(/\b(?:const|let|var)\s+/g, "");
20919
20931
  const data2 = reactive({});
20920
20932
  try {
20921
20933
  evaluate(parse(body), new Scope(data2));
@@ -20925,11 +20937,32 @@ function readDeclarationBlock(root = document.body) {
20925
20937
  }
20926
20938
  return null;
20927
20939
  }
20928
- node.remove();
20940
+ node.textContent = raw.slice(0, open) + raw.slice(end + 1);
20929
20941
  return data2;
20930
20942
  }
20931
20943
  return null;
20932
20944
  }
20945
+ function matchBrace(text, from) {
20946
+ let depth = 0;
20947
+ let quote = null;
20948
+ let escaped = false;
20949
+ for (let i = from; i < text.length; i++) {
20950
+ const ch = text[i];
20951
+ if (escaped) {
20952
+ escaped = false;
20953
+ continue;
20954
+ }
20955
+ if (quote) {
20956
+ if (ch === "\\") escaped = true;
20957
+ else if (ch === quote) quote = null;
20958
+ continue;
20959
+ }
20960
+ if (ch === '"' || ch === "'" || ch === "`") quote = ch;
20961
+ else if (ch === "{") depth++;
20962
+ else if (ch === "}" && --depth === 0) return i;
20963
+ }
20964
+ return -1;
20965
+ }
20933
20966
  function activateJsx() {
20934
20967
  const work = pending.splice(0, pending.length);
20935
20968
  for (const run of work) {
package/dist/index.js CHANGED
@@ -1,25 +1,25 @@
1
- import { core, sound, hotkey, palette, registerMask, unmask, applyMask, masks, mask, clearErrors, showFieldError, showFormErrors, messages, serializeForm, validate, validator, dialog, prompt, confirm, alert, modal, VoodooCollection, fromHtml, ready2, query, viewTransition, defineComponent, storage, ensurePalette, instances, storeNames, allStores } from './chunk-PBZCYF2Y.js';
2
- export { VoodooCollection, alert, allStores, applyMask, cache, clearErrors, clipboard, confirm, cookie, createApp, createResource, defineComponent, dialog, ready as documentReady, enter, fadeIn, fadeOut, fromHtml, hotkey, instances, leave, mask, masks, modal, mountComponent, network, palette, prompt, query, ready2 as ready, registerMask, removeStore, createResource as resource, screen, serializeForm, session, showFormErrors, slideDown, slideUp, sound, efeitos as soundEffects, storage, store, storeNames, theme, toast, unmask, url, validate, validator, viewTransition, whenElement, whenReady } from './chunk-PBZCYF2Y.js';
3
- export { gpu, reflectWgsl } from './chunk-TZJSPNLV.js';
4
- import { http } from './chunk-VQEJ4DTE.js';
5
- export { HttpError, http, request } from './chunk-VQEJ4DTE.js';
6
- import { devtoolsBus } from './chunk-KAS77SGY.js';
7
- export { createSocket, devtoolsBus, socket, socketSupported } from './chunk-KAS77SGY.js';
8
- import { magic, markSkipChildren, onStart, rootScope, findScope, destroy, readAttr, evaluate, parse, Scope, getScope, walk, unwrap, addCleanup, hadDirectives, collectDirectives, getEffectScopes, evaluateIn } from './chunk-NUBOX6YQ.js';
9
- export { Scope, VoodooRuntimeError, VoodooSyntaxError, addCleanup, allowedGlobals, clearParseCache, destroy, evaluate, findScope, getScope, magic, magics, parse, refresh, rootScope, start, stringify, tokenize, walk } from './chunk-NUBOX6YQ.js';
10
- import { reactive, warn, handleError, effect, queuePostFlush, nextTick } from './chunk-5GWN7E6N.js';
11
- export { EffectScope, computed, effect, effectScope, flushSync, isReactive, markRaw, nextTick, reactive, ref, shallowRef, stop, toRaw, unref, watch, watchEffect } from './chunk-5GWN7E6N.js';
12
- import { warnAlias } from './chunk-OTRGHJIJ.js';
13
- import { parseDuration, formatNumber, formatCurrency, formatDate, relativeTime, device, setFormatDefaults, uid, merge, escapeHtml, truncate, get, titleCase } from './chunk-FBQPFIHZ.js';
14
- export { capitalize, chunk, clone, debounce, device, escapeHtml, formatCurrency, formatDate, formatFileSize, formatNumber, formatPercent, get, groupBy, isBrowser, matchesMedia, memoize, merge, once, parseDuration, random, relativeTime, sample, set, setFormatDefaults, sleep, slugify, sortBy, stripTags, throttle, titleCase, truncate, uid, unique, uuid } from './chunk-FBQPFIHZ.js';
15
- import { ensureTokens, injectStyle } from './chunk-QL2GIGVQ.js';
16
- export { ensureTokens, injectStyle } from './chunk-QL2GIGVQ.js';
17
- import { defineDirective, PRIORITY, config } from './chunk-WIXAZJYS.js';
18
- export { PRIORITY, config, defineDirective } from './chunk-WIXAZJYS.js';
19
- import './chunk-EYGQD7OP.js';
1
+ import { core, sound, hotkey, palette, registerMask, unmask, applyMask, masks, mask, clearErrors, showFieldError, showFormErrors, messages, serializeForm, validate, validator, dialog, prompt, confirm, alert, modal, VoodooCollection, fromHtml, ready2, query, viewTransition, defineComponent, storage, ensurePalette, instances, storeNames, allStores } from './chunk-AH2VXDZD.js';
2
+ export { VoodooCollection, alert, allStores, applyMask, cache, clearErrors, clipboard, confirm, cookie, createApp, createResource, defineComponent, dialog, ready as documentReady, enter, fadeIn, fadeOut, fromHtml, hotkey, instances, leave, mask, masks, modal, mountComponent, network, palette, prompt, query, ready2 as ready, registerMask, removeStore, createResource as resource, screen, serializeForm, session, showFormErrors, slideDown, slideUp, sound, efeitos as soundEffects, storage, store, storeNames, theme, toast, unmask, url, validate, validator, viewTransition, whenElement, whenReady } from './chunk-AH2VXDZD.js';
3
+ export { gpu, reflectWgsl } from './chunk-KQYSJHZR.js';
4
+ import { http } from './chunk-DJJB35SR.js';
5
+ export { HttpError, http, request } from './chunk-DJJB35SR.js';
6
+ import { devtoolsBus } from './chunk-DCE5WIGA.js';
7
+ export { createSocket, devtoolsBus, socket, socketSupported } from './chunk-DCE5WIGA.js';
8
+ import { magic, markSkipChildren, onStart, rootScope, findScope, destroy, readAttr, evaluate, parse, Scope, getScope, walk, unwrap, addCleanup, hadDirectives, collectDirectives, getEffectScopes, evaluateIn } from './chunk-H2ZUEQWV.js';
9
+ export { Scope, VoodooRuntimeError, VoodooSyntaxError, addCleanup, allowedGlobals, clearParseCache, destroy, evaluate, findScope, getScope, magic, magics, parse, refresh, rootScope, start, stringify, tokenize, walk } from './chunk-H2ZUEQWV.js';
10
+ import { reactive, warn, handleError, effect, queuePostFlush, nextTick } from './chunk-WJP3YGUI.js';
11
+ export { EffectScope, computed, effect, effectScope, flushSync, isReactive, markRaw, nextTick, reactive, ref, shallowRef, stop, toRaw, unref, watch, watchEffect } from './chunk-WJP3YGUI.js';
12
+ import { warnAlias } from './chunk-UV5PMS7P.js';
13
+ import { parseDuration, formatNumber, formatCurrency, formatDate, relativeTime, device, setFormatDefaults, uid, merge, escapeHtml, truncate, get, titleCase } from './chunk-IGZSDZKU.js';
14
+ export { capitalize, chunk, clone, debounce, device, escapeHtml, formatCurrency, formatDate, formatFileSize, formatNumber, formatPercent, get, groupBy, isBrowser, matchesMedia, memoize, merge, once, parseDuration, random, relativeTime, sample, set, setFormatDefaults, sleep, slugify, sortBy, stripTags, throttle, titleCase, truncate, uid, unique, uuid } from './chunk-IGZSDZKU.js';
15
+ import { ensureTokens, injectStyle } from './chunk-V3O3WOZH.js';
16
+ export { ensureTokens, injectStyle } from './chunk-V3O3WOZH.js';
17
+ import { defineDirective, PRIORITY, config } from './chunk-NFDXVIII.js';
18
+ export { PRIORITY, config, defineDirective } from './chunk-NFDXVIII.js';
19
+ import './chunk-IS3DR2KY.js';
20
20
 
21
21
  /**
22
- * Voodoo.js v0.11.0
22
+ * Voodoo.js v0.11.2
23
23
  * JavaScript feels like magic.
24
24
  * (c) 2026 Voodoo.js contributors. MIT License.
25
25
  */
@@ -6752,10 +6752,14 @@ function install(parent, collected, hint) {
6752
6752
  function readDeclarationBlock(root = document.body) {
6753
6753
  for (const node of Array.from(root.childNodes)) {
6754
6754
  if (node.nodeType !== Node.TEXT_NODE) continue;
6755
- const text = (node.textContent ?? "").trim();
6756
- if (!text.startsWith("{") || !text.endsWith("}")) continue;
6757
- if (!/\b(const|let|var)\s/.test(text)) continue;
6758
- const body = text.slice(1, -1).replace(/\b(?:const|let|var)\s+/g, "");
6755
+ const raw = node.textContent ?? "";
6756
+ const open = raw.indexOf("{");
6757
+ if (open < 0) continue;
6758
+ const end = matchBrace(raw, open);
6759
+ if (end < 0) continue;
6760
+ const group = raw.slice(open, end + 1);
6761
+ if (!/\b(?:const|let|var)\s/.test(group)) continue;
6762
+ const body = group.slice(1, -1).replace(/\b(?:const|let|var)\s+/g, "");
6759
6763
  const data = reactive({});
6760
6764
  try {
6761
6765
  evaluate(parse(body), new Scope(data));
@@ -6765,11 +6769,32 @@ function readDeclarationBlock(root = document.body) {
6765
6769
  }
6766
6770
  return null;
6767
6771
  }
6768
- node.remove();
6772
+ node.textContent = raw.slice(0, open) + raw.slice(end + 1);
6769
6773
  return data;
6770
6774
  }
6771
6775
  return null;
6772
6776
  }
6777
+ function matchBrace(text, from) {
6778
+ let depth = 0;
6779
+ let quote = null;
6780
+ let escaped = false;
6781
+ for (let i = from; i < text.length; i++) {
6782
+ const ch = text[i];
6783
+ if (escaped) {
6784
+ escaped = false;
6785
+ continue;
6786
+ }
6787
+ if (quote) {
6788
+ if (ch === "\\") escaped = true;
6789
+ else if (ch === quote) quote = null;
6790
+ continue;
6791
+ }
6792
+ if (ch === '"' || ch === "'" || ch === "`") quote = ch;
6793
+ else if (ch === "{") depth++;
6794
+ else if (ch === "}" && --depth === 0) return i;
6795
+ }
6796
+ return -1;
6797
+ }
6773
6798
  function activateJsx() {
6774
6799
  const work = pending.splice(0, pending.length);
6775
6800
  for (const run of work) {
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.11.0
4
+ * Voodoo.js v0.11.2
5
5
  * JavaScript feels like magic.
6
6
  * (c) 2026 Voodoo.js contributors. MIT License.
7
7
  */
@@ -1,4 +1,4 @@
1
- export { EffectScope, ITERATE_KEY, ReactiveEffect, TriggerType, computed, effect, effectScope, enableTracking, flushSync, getActiveEffect, getActiveScope, handleError, hasChanged, isReactive, isRef, markRaw, nextTick, pauseTracking, queueJob, queuePostFlush, reactive, ref, resetTracking, setErrorHandler, shallowRef, stop, toRaw, track, trigger, unref, warn, watch, watchEffect } from './chunk-5GWN7E6N.js';
2
- import './chunk-EYGQD7OP.js';
1
+ export { EffectScope, ITERATE_KEY, ReactiveEffect, TriggerType, computed, effect, effectScope, enableTracking, flushSync, getActiveEffect, getActiveScope, handleError, hasChanged, isReactive, isRef, markRaw, nextTick, pauseTracking, queueJob, queuePostFlush, reactive, ref, resetTracking, setErrorHandler, shallowRef, stop, toRaw, track, trigger, unref, warn, watch, watchEffect } from './chunk-WJP3YGUI.js';
2
+ import './chunk-IS3DR2KY.js';
3
3
  //# sourceMappingURL=reactivity.js.map
4
4
  //# sourceMappingURL=reactivity.js.map