voodoojs 0.12.1 → 0.12.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.
Files changed (41) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-KN7NAKBL.js → chunk-7AKBELZA.js} +4 -4
  3. package/dist/{chunk-NP66JM2P.js → chunk-AVXQPDQH.js} +4 -4
  4. package/dist/{chunk-RDHYPGH6.js → chunk-K2U3O36M.js} +19 -15
  5. package/dist/{chunk-GXPNWCGE.js → chunk-MEE2ZAKJ.js} +3 -3
  6. package/dist/{chunk-D7675IJG.js → chunk-NVANUFWZ.js} +6 -6
  7. package/dist/{chunk-4M4ZXHNY.js → chunk-OWCQV42D.js} +35 -8
  8. package/dist/{chunk-AFMCDNYS.js → chunk-RTZEIVNA.js} +5 -5
  9. package/dist/{chunk-T5ION5NG.js → chunk-RXOLGHSU.js} +3 -3
  10. package/dist/{chunk-LLNDLLKV.js → chunk-S4BXAGAW.js} +4 -4
  11. package/dist/{chunk-HNM3CTBD.js → chunk-UGLD36KV.js} +5 -5
  12. package/dist/{chunk-72PMUUMT.js → chunk-YV4I45SK.js} +4 -4
  13. package/dist/essential.cjs +36 -5
  14. package/dist/essential.d.cts +1 -1
  15. package/dist/essential.d.ts +1 -1
  16. package/dist/essential.js +10 -10
  17. package/dist/gpu.cjs +1 -1
  18. package/dist/gpu.js +10 -10
  19. package/dist/http.cjs +1 -1
  20. package/dist/http.js +5 -5
  21. package/dist/index.cjs +54 -9
  22. package/dist/index.d.cts +2 -2
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.js +38 -24
  25. package/dist/reactivity.cjs +1 -1
  26. package/dist/reactivity.js +2 -2
  27. package/dist/socket.cjs +29 -2
  28. package/dist/socket.js +9 -9
  29. package/dist/style-GWGXWHB4.js +5 -0
  30. package/dist/utils.cjs +1 -1
  31. package/dist/utils.js +2 -2
  32. package/dist/voodoo.core.js +37 -5
  33. package/dist/voodoo.core.min.js +16 -16
  34. package/dist/voodoo.full.js +61 -11
  35. package/dist/voodoo.full.min.js +46 -46
  36. package/dist/voodoo.js +43 -7
  37. package/dist/voodoo.min.js +25 -25
  38. package/package.json +1 -1
  39. package/dist/style-GR4X6O7I.js +0 -5
  40. package/dist/{query-XooOh4vB.d.cts → query-D_BGQw8m.d.cts} +28 -28
  41. package/dist/{query-DzHfm8Kg.d.ts → query-Dl6Urlwd.d.ts} +28 -28
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.12.1/dist/voodoo.full.min.js" defer></script>
25
+ <script src="https://cdn.jsdelivr.net/npm/voodoojs@0.12.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>
@@ -1,7 +1,7 @@
1
- import { __export } from './chunk-GXPNWCGE.js';
1
+ import { __export } from './chunk-MEE2ZAKJ.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.12.1
4
+ * Voodoo.js v0.12.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-KN7NAKBL.js.map
401
- //# sourceMappingURL=chunk-KN7NAKBL.js.map
400
+ //# sourceMappingURL=chunk-7AKBELZA.js.map
401
+ //# sourceMappingURL=chunk-7AKBELZA.js.map
@@ -1,7 +1,7 @@
1
- import { config } from './chunk-T5ION5NG.js';
1
+ import { config } from './chunk-RXOLGHSU.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.12.1
4
+ * Voodoo.js v0.12.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-NP66JM2P.js.map
72
- //# sourceMappingURL=chunk-NP66JM2P.js.map
71
+ //# sourceMappingURL=chunk-AVXQPDQH.js.map
72
+ //# sourceMappingURL=chunk-AVXQPDQH.js.map
@@ -1,14 +1,14 @@
1
- import { http, HttpError, request } from './chunk-D7675IJG.js';
2
- import { stringify, markInitialized, markSkipChildren, destroy, walk, removeQuietly, evaluateIn, addCleanup, markNodeScope, setComponentMounter, closestDirective, magic, readAttr, hasAttr, componentAliases, Scope, hook, queryDirective, parse, evaluate, parseAttribute, originalAttributes, hasDirective, currentHookHost, findScope, VoodooRuntimeError, VoodooSyntaxError, allowedGlobals, clearParseCache, tokenize, getScope, stopObserving, refresh, start, magics, rootScope, isInitialized, restoreAttributes, hasDirectives } from './chunk-4M4ZXHNY.js';
3
- import { ref, reactive, handleError, nextTick, queuePostFlush, warn, watch, EffectScope, computed, effect, toRaw, markRaw, stop, flushSync, effectScope, unref, watchEffect, shallowRef, setErrorHandler } from './chunk-LLNDLLKV.js';
4
- import { warnDuplicateKey, warn as warn$1, describeElement, warnUnknownComponent, warnAlias, warnRequiredProp } from './chunk-72PMUUMT.js';
5
- import { parseDuration, debounce, utils_exports, throttle, uid, device, escapeHtml } from './chunk-KN7NAKBL.js';
6
- import { injectStyle, ensureTokens } from './chunk-NP66JM2P.js';
7
- import { defineDirective, config, PRIORITY, directives, normalizeComponentName, components, usePlugin } from './chunk-T5ION5NG.js';
8
- import { __publicField } from './chunk-GXPNWCGE.js';
1
+ import { http, HttpError, request } from './chunk-NVANUFWZ.js';
2
+ import { stringify, markInitialized, markSkipChildren, destroy, walk, removeQuietly, evaluateIn, addCleanup, markNodeScope, setComponentMounter, closestDirective, magic, readAttr, hasAttr, componentAliases, Scope, hook, queryDirective, parse, evaluate, parseAttribute, originalAttributes, hasDirective, currentHookHost, findScope, VoodooRuntimeError, VoodooSyntaxError, allowedGlobals, clearParseCache, tokenize, getScope, stopObserving, refresh, start, magics, rootScope, isInitialized, restoreAttributes, hasDirectives } from './chunk-OWCQV42D.js';
3
+ import { ref, reactive, handleError, nextTick, queuePostFlush, warn, watch, EffectScope, computed, effect, toRaw, markRaw, stop, flushSync, effectScope, unref, watchEffect, shallowRef, setErrorHandler } from './chunk-S4BXAGAW.js';
4
+ import { warnDuplicateKey, warn as warn$1, describeElement, warnUnknownComponent, warnAlias, warnRequiredProp } from './chunk-YV4I45SK.js';
5
+ import { parseDuration, debounce, utils_exports, throttle, uid, device, escapeHtml } from './chunk-7AKBELZA.js';
6
+ import { injectStyle, ensureTokens } from './chunk-AVXQPDQH.js';
7
+ import { defineDirective, config, PRIORITY, directives, normalizeComponentName, components, usePlugin } from './chunk-RXOLGHSU.js';
8
+ import { __publicField } from './chunk-MEE2ZAKJ.js';
9
9
 
10
10
  /**
11
- * Voodoo.js v0.12.1
11
+ * Voodoo.js v0.12.2
12
12
  * JavaScript feels like magic.
13
13
  * (c) 2026 Voodoo.js contributors. MIT License.
14
14
  */
@@ -2811,7 +2811,7 @@ var jsonStylesInjected = false;
2811
2811
  function injectJSONStyles() {
2812
2812
  if (jsonStylesInjected) return;
2813
2813
  jsonStylesInjected = true;
2814
- void import('./style-GR4X6O7I.js').then(({ injectStyle: injectStyle2 }) => {
2814
+ void import('./style-GWGXWHB4.js').then(({ injectStyle: injectStyle2 }) => {
2815
2815
  injectStyle2(
2816
2816
  "json-render",
2817
2817
  `
@@ -3099,7 +3099,7 @@ function data(values) {
3099
3099
  Object.defineProperties(rootScope.data, Object.getOwnPropertyDescriptors(values));
3100
3100
  return rootScope.data;
3101
3101
  }
3102
- var version2 = "0.12.1";
3102
+ var version2 = "0.12.2";
3103
3103
  var core = {
3104
3104
  // Utilities first: Voodoo's own names can override.
3105
3105
  ...utils_exports,
@@ -5282,6 +5282,7 @@ defineDirective("collapse", ({ el }) => {
5282
5282
  ensureUi();
5283
5283
  collapseOf(el);
5284
5284
  });
5285
+ var selfToggling = /* @__PURE__ */ new WeakSet();
5285
5286
  defineDirective("collapse-toggle", ({ el, expression, cleanup }) => {
5286
5287
  ensureUi();
5287
5288
  const target = resolveTarget(el, expression);
@@ -5290,6 +5291,8 @@ defineDirective("collapse-toggle", ({ el, expression, cleanup }) => {
5290
5291
  controller.triggers.add(el);
5291
5292
  controller.sync();
5292
5293
  makeInteractive(el, cleanup);
5294
+ selfToggling.add(el);
5295
+ cleanup(() => selfToggling.delete(el));
5293
5296
  const onClick = (event) => {
5294
5297
  event.preventDefault();
5295
5298
  controller.toggle();
@@ -5700,10 +5703,11 @@ defineDirective("accordion", ({ el, cleanup }) => {
5700
5703
  if (index === -1) return;
5701
5704
  event.preventDefault();
5702
5705
  const controller = controllers2[index];
5703
- if (single && !controller.open) {
5706
+ const ownToggle = selfToggling.has(header);
5707
+ if (single && (ownToggle ? controller.open : !controller.open)) {
5704
5708
  for (const other of controllers2) if (other !== controller) other.hide();
5705
5709
  }
5706
- controller.toggle();
5710
+ if (!ownToggle) controller.toggle();
5707
5711
  };
5708
5712
  const onKeyDown = (event) => {
5709
5713
  const header = event.target?.closest(".v-accordion-header");
@@ -10440,5 +10444,5 @@ defineDirective(
10440
10444
  );
10441
10445
 
10442
10446
  export { VoodooCollection, alert, allStores, applyMask, cache, clearErrors, clipboard, confirm, cookie, core, createApp, createResource, defineComponent, dialog, efeitos, ensurePalette, enter, fadeIn, fadeOut, fromHtml, hotkey, installHooks, 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, useContext, useEffect, useMemo, useRef, useState, validate, validator, viewTransition, whenElement, whenReady };
10443
- //# sourceMappingURL=chunk-RDHYPGH6.js.map
10444
- //# sourceMappingURL=chunk-RDHYPGH6.js.map
10447
+ //# sourceMappingURL=chunk-K2U3O36M.js.map
10448
+ //# sourceMappingURL=chunk-K2U3O36M.js.map
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Voodoo.js v0.12.1
2
+ * Voodoo.js v0.12.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-GXPNWCGE.js.map
16
- //# sourceMappingURL=chunk-GXPNWCGE.js.map
15
+ //# sourceMappingURL=chunk-MEE2ZAKJ.js.map
16
+ //# sourceMappingURL=chunk-MEE2ZAKJ.js.map
@@ -1,9 +1,9 @@
1
- import { warnOnce } from './chunk-72PMUUMT.js';
2
- import { parseDuration } from './chunk-KN7NAKBL.js';
3
- import { __publicField } from './chunk-GXPNWCGE.js';
1
+ import { warnOnce } from './chunk-YV4I45SK.js';
2
+ import { parseDuration } from './chunk-7AKBELZA.js';
3
+ import { __publicField } from './chunk-MEE2ZAKJ.js';
4
4
 
5
5
  /**
6
- * Voodoo.js v0.12.1
6
+ * Voodoo.js v0.12.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-D7675IJG.js.map
448
- //# sourceMappingURL=chunk-D7675IJG.js.map
447
+ //# sourceMappingURL=chunk-NVANUFWZ.js.map
448
+ //# sourceMappingURL=chunk-NVANUFWZ.js.map
@@ -1,10 +1,10 @@
1
- import { reactive, handleError, EffectScope, effect } from './chunk-LLNDLLKV.js';
2
- import { inDevelopment, warnInvalidExpression, warnUnknownDirective } from './chunk-72PMUUMT.js';
3
- import { config, directives, components } from './chunk-T5ION5NG.js';
4
- import { __publicField } from './chunk-GXPNWCGE.js';
1
+ import { reactive, handleError, EffectScope, effect } from './chunk-S4BXAGAW.js';
2
+ import { inDevelopment, warnInvalidExpression, warnUnknownDirective } from './chunk-YV4I45SK.js';
3
+ import { config, directives, components } from './chunk-RXOLGHSU.js';
4
+ import { __publicField } from './chunk-MEE2ZAKJ.js';
5
5
 
6
6
  /**
7
- * Voodoo.js v0.12.1
7
+ * Voodoo.js v0.12.2
8
8
  * JavaScript feels like magic.
9
9
  * (c) 2026 Voodoo.js contributors. MIT License.
10
10
  */
@@ -957,6 +957,23 @@ var DELIBERATELY_WITHHELD = /* @__PURE__ */ new Set([
957
957
  "SharedWorker",
958
958
  "ServiceWorker"
959
959
  ]);
960
+ function guardedTimer(name) {
961
+ return function(handler, timeout, ...rest) {
962
+ if (typeof handler !== "function") {
963
+ throw new VoodooRuntimeError(
964
+ `${name} needs a function. Passing a string would compile it, which this library never does.`
965
+ );
966
+ }
967
+ const timer = globalThis[name];
968
+ return timer(handler, timeout, ...rest);
969
+ };
970
+ }
971
+ function forwardGlobal(name) {
972
+ return function(...args) {
973
+ const fn = globalThis[name];
974
+ return fn(...args);
975
+ };
976
+ }
960
977
  var allowedGlobals = {
961
978
  Math,
962
979
  JSON,
@@ -975,7 +992,17 @@ var allowedGlobals = {
975
992
  isFinite,
976
993
  encodeURIComponent,
977
994
  decodeURIComponent,
978
- console
995
+ console,
996
+ ...typeof setTimeout !== "undefined" ? {
997
+ setTimeout: guardedTimer("setTimeout"),
998
+ setInterval: guardedTimer("setInterval"),
999
+ clearTimeout: forwardGlobal("clearTimeout"),
1000
+ clearInterval: forwardGlobal("clearInterval")
1001
+ } : {},
1002
+ ...typeof requestAnimationFrame !== "undefined" ? {
1003
+ requestAnimationFrame: forwardGlobal("requestAnimationFrame"),
1004
+ cancelAnimationFrame: forwardGlobal("cancelAnimationFrame")
1005
+ } : {}
979
1006
  };
980
1007
  var VoodooRuntimeError = class extends Error {
981
1008
  constructor(message, expression) {
@@ -2175,5 +2202,5 @@ function refresh(root) {
2175
2202
  }
2176
2203
 
2177
2204
  export { Scope, VoodooRuntimeError, VoodooSyntaxError, addCleanup, allowedGlobals, clearParseCache, closestDirective, collectDirectives, componentAliases, currentHookHost, destroy, evaluate, evaluateIn, findScope, getEffectScopes, getScope, hadDirectives, hasAttr, hasDirective, hasDirectives, hook, hooks, isInitialized, magic, magics, markInitialized, markNodeScope, markSkipChildren, onStart, originalAttributes, parse, parseAttribute, queryDirective, readAttr, refresh, removeQuietly, restoreAttributes, rootScope, setComponentMounter, start, stopObserving, stringify, tokenize, unwrap, walk };
2178
- //# sourceMappingURL=chunk-4M4ZXHNY.js.map
2179
- //# sourceMappingURL=chunk-4M4ZXHNY.js.map
2205
+ //# sourceMappingURL=chunk-OWCQV42D.js.map
2206
+ //# sourceMappingURL=chunk-OWCQV42D.js.map
@@ -1,8 +1,8 @@
1
- import { handleError } from './chunk-LLNDLLKV.js';
2
- import { warn } from './chunk-72PMUUMT.js';
1
+ import { handleError } from './chunk-S4BXAGAW.js';
2
+ import { warn } from './chunk-YV4I45SK.js';
3
3
 
4
4
  /**
5
- * Voodoo.js v0.12.1
5
+ * Voodoo.js v0.12.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-AFMCDNYS.js.map
1196
- //# sourceMappingURL=chunk-AFMCDNYS.js.map
1195
+ //# sourceMappingURL=chunk-RTZEIVNA.js.map
1196
+ //# sourceMappingURL=chunk-RTZEIVNA.js.map
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Voodoo.js v0.12.1
2
+ * Voodoo.js v0.12.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-T5ION5NG.js.map
65
- //# sourceMappingURL=chunk-T5ION5NG.js.map
64
+ //# sourceMappingURL=chunk-RXOLGHSU.js.map
65
+ //# sourceMappingURL=chunk-RXOLGHSU.js.map
@@ -1,7 +1,7 @@
1
- import { __publicField } from './chunk-GXPNWCGE.js';
1
+ import { __publicField } from './chunk-MEE2ZAKJ.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.12.1
4
+ * Voodoo.js v0.12.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-LLNDLLKV.js.map
641
- //# sourceMappingURL=chunk-LLNDLLKV.js.map
640
+ //# sourceMappingURL=chunk-S4BXAGAW.js.map
641
+ //# sourceMappingURL=chunk-S4BXAGAW.js.map
@@ -1,8 +1,8 @@
1
- import { reactive } from './chunk-LLNDLLKV.js';
2
- import { warnOnce } from './chunk-72PMUUMT.js';
1
+ import { reactive } from './chunk-S4BXAGAW.js';
2
+ import { warnOnce } from './chunk-YV4I45SK.js';
3
3
 
4
4
  /**
5
- * Voodoo.js v0.12.1
5
+ * Voodoo.js v0.12.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-HNM3CTBD.js.map
946
- //# sourceMappingURL=chunk-HNM3CTBD.js.map
945
+ //# sourceMappingURL=chunk-UGLD36KV.js.map
946
+ //# sourceMappingURL=chunk-UGLD36KV.js.map
@@ -1,7 +1,7 @@
1
- import { config } from './chunk-T5ION5NG.js';
1
+ import { config } from './chunk-RXOLGHSU.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.12.1
4
+ * Voodoo.js v0.12.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-72PMUUMT.js.map
82
- //# sourceMappingURL=chunk-72PMUUMT.js.map
81
+ //# sourceMappingURL=chunk-YV4I45SK.js.map
82
+ //# sourceMappingURL=chunk-YV4I45SK.js.map
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  /**
6
- * Voodoo.js v0.12.1
6
+ * Voodoo.js v0.12.2
7
7
  * JavaScript feels like magic.
8
8
  * (c) 2026 Voodoo.js contributors. MIT License.
9
9
  */
@@ -1773,6 +1773,23 @@ var DELIBERATELY_WITHHELD = /* @__PURE__ */ new Set([
1773
1773
  "SharedWorker",
1774
1774
  "ServiceWorker"
1775
1775
  ]);
1776
+ function guardedTimer(name) {
1777
+ return function(handler, timeout, ...rest) {
1778
+ if (typeof handler !== "function") {
1779
+ throw new VoodooRuntimeError(
1780
+ `${name} needs a function. Passing a string would compile it, which this library never does.`
1781
+ );
1782
+ }
1783
+ const timer = globalThis[name];
1784
+ return timer(handler, timeout, ...rest);
1785
+ };
1786
+ }
1787
+ function forwardGlobal(name) {
1788
+ return function(...args) {
1789
+ const fn = globalThis[name];
1790
+ return fn(...args);
1791
+ };
1792
+ }
1776
1793
  var allowedGlobals = {
1777
1794
  Math,
1778
1795
  JSON,
@@ -1791,7 +1808,17 @@ var allowedGlobals = {
1791
1808
  isFinite,
1792
1809
  encodeURIComponent,
1793
1810
  decodeURIComponent,
1794
- console
1811
+ console,
1812
+ ...typeof setTimeout !== "undefined" ? {
1813
+ setTimeout: guardedTimer("setTimeout"),
1814
+ setInterval: guardedTimer("setInterval"),
1815
+ clearTimeout: forwardGlobal("clearTimeout"),
1816
+ clearInterval: forwardGlobal("clearInterval")
1817
+ } : {},
1818
+ ...typeof requestAnimationFrame !== "undefined" ? {
1819
+ requestAnimationFrame: forwardGlobal("requestAnimationFrame"),
1820
+ cancelAnimationFrame: forwardGlobal("cancelAnimationFrame")
1821
+ } : {}
1795
1822
  };
1796
1823
  var VoodooRuntimeError = class extends Error {
1797
1824
  constructor(message, expression) {
@@ -6989,7 +7016,7 @@ function data(values) {
6989
7016
  Object.defineProperties(rootScope.data, Object.getOwnPropertyDescriptors(values));
6990
7017
  return rootScope.data;
6991
7018
  }
6992
- var version2 = "0.12.1";
7019
+ var version2 = "0.12.2";
6993
7020
  var core = {
6994
7021
  // Utilities first: Voodoo's own names can override.
6995
7022
  ...utils_exports,
@@ -9182,6 +9209,7 @@ defineDirective("collapse", ({ el }) => {
9182
9209
  ensureUi();
9183
9210
  collapseOf(el);
9184
9211
  });
9212
+ var selfToggling = /* @__PURE__ */ new WeakSet();
9185
9213
  defineDirective("collapse-toggle", ({ el, expression, cleanup }) => {
9186
9214
  ensureUi();
9187
9215
  const target = resolveTarget(el, expression);
@@ -9190,6 +9218,8 @@ defineDirective("collapse-toggle", ({ el, expression, cleanup }) => {
9190
9218
  controller.triggers.add(el);
9191
9219
  controller.sync();
9192
9220
  makeInteractive(el, cleanup);
9221
+ selfToggling.add(el);
9222
+ cleanup(() => selfToggling.delete(el));
9193
9223
  const onClick = (event) => {
9194
9224
  event.preventDefault();
9195
9225
  controller.toggle();
@@ -9600,10 +9630,11 @@ defineDirective("accordion", ({ el, cleanup }) => {
9600
9630
  if (index === -1) return;
9601
9631
  event.preventDefault();
9602
9632
  const controller = controllers2[index];
9603
- if (single && !controller.open) {
9633
+ const ownToggle = selfToggling.has(header);
9634
+ if (single && (ownToggle ? controller.open : !controller.open)) {
9604
9635
  for (const other of controllers2) if (other !== controller) other.hide();
9605
9636
  }
9606
- controller.toggle();
9637
+ if (!ownToggle) controller.toggle();
9607
9638
  };
9608
9639
  const onKeyDown = (event) => {
9609
9640
  const header = event.target?.closest(".v-accordion-header");
@@ -1,4 +1,4 @@
1
- import { c as core, V as VoodooCollection } from './query-XooOh4vB.cjs';
1
+ import { c as core, V as VoodooCollection } from './query-D_BGQw8m.cjs';
2
2
  import './http.cjs';
3
3
  import './utils.cjs';
4
4
  import './reactivity.cjs';
@@ -1,4 +1,4 @@
1
- import { c as core, V as VoodooCollection } from './query-DzHfm8Kg.js';
1
+ import { c as core, V as VoodooCollection } from './query-Dl6Urlwd.js';
2
2
  import './http.js';
3
3
  import './utils.js';
4
4
  import './reactivity.js';
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-RDHYPGH6.js';
2
- import './chunk-D7675IJG.js';
3
- import { magic } from './chunk-4M4ZXHNY.js';
4
- import './chunk-LLNDLLKV.js';
5
- import './chunk-72PMUUMT.js';
6
- import './chunk-KN7NAKBL.js';
7
- import './chunk-NP66JM2P.js';
8
- import './chunk-T5ION5NG.js';
9
- import './chunk-GXPNWCGE.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-K2U3O36M.js';
2
+ import './chunk-NVANUFWZ.js';
3
+ import { magic } from './chunk-OWCQV42D.js';
4
+ import './chunk-S4BXAGAW.js';
5
+ import './chunk-YV4I45SK.js';
6
+ import './chunk-7AKBELZA.js';
7
+ import './chunk-AVXQPDQH.js';
8
+ import './chunk-RXOLGHSU.js';
9
+ import './chunk-MEE2ZAKJ.js';
10
10
 
11
11
  /**
12
- * Voodoo.js v0.12.1
12
+ * Voodoo.js v0.12.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.12.1
6
+ * Voodoo.js v0.12.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-AFMCDNYS.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-AFMCDNYS.js';
3
- import { http } from './chunk-D7675IJG.js';
4
- import { originalAttributes, destroy } from './chunk-4M4ZXHNY.js';
5
- import { handleError } from './chunk-LLNDLLKV.js';
6
- import { warn, describeElement } from './chunk-72PMUUMT.js';
7
- import './chunk-KN7NAKBL.js';
8
- import { defineDirective } from './chunk-T5ION5NG.js';
9
- import './chunk-GXPNWCGE.js';
1
+ import { supported, clock, shared, gpu, surface, effect, frameLoop, frame } from './chunk-RTZEIVNA.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-RTZEIVNA.js';
3
+ import { http } from './chunk-NVANUFWZ.js';
4
+ import { originalAttributes, destroy } from './chunk-OWCQV42D.js';
5
+ import { handleError } from './chunk-S4BXAGAW.js';
6
+ import { warn, describeElement } from './chunk-YV4I45SK.js';
7
+ import './chunk-7AKBELZA.js';
8
+ import { defineDirective } from './chunk-RXOLGHSU.js';
9
+ import './chunk-MEE2ZAKJ.js';
10
10
 
11
11
  /**
12
- * Voodoo.js v0.12.1
12
+ * Voodoo.js v0.12.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.12.1
4
+ * Voodoo.js v0.12.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-D7675IJG.js';
2
- import './chunk-72PMUUMT.js';
3
- import './chunk-KN7NAKBL.js';
4
- import './chunk-T5ION5NG.js';
5
- import './chunk-GXPNWCGE.js';
1
+ export { HttpError, clearCache, flushOfflineQueue, http, request } from './chunk-NVANUFWZ.js';
2
+ import './chunk-YV4I45SK.js';
3
+ import './chunk-7AKBELZA.js';
4
+ import './chunk-RXOLGHSU.js';
5
+ import './chunk-MEE2ZAKJ.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.12.1
6
+ * Voodoo.js v0.12.2
7
7
  * JavaScript feels like magic.
8
8
  * (c) 2026 Voodoo.js contributors. MIT License.
9
9
  */
@@ -1773,6 +1773,23 @@ var DELIBERATELY_WITHHELD = /* @__PURE__ */ new Set([
1773
1773
  "SharedWorker",
1774
1774
  "ServiceWorker"
1775
1775
  ]);
1776
+ function guardedTimer(name) {
1777
+ return function(handler, timeout, ...rest) {
1778
+ if (typeof handler !== "function") {
1779
+ throw new VoodooRuntimeError(
1780
+ `${name} needs a function. Passing a string would compile it, which this library never does.`
1781
+ );
1782
+ }
1783
+ const timer = globalThis[name];
1784
+ return timer(handler, timeout, ...rest);
1785
+ };
1786
+ }
1787
+ function forwardGlobal(name) {
1788
+ return function(...args) {
1789
+ const fn = globalThis[name];
1790
+ return fn(...args);
1791
+ };
1792
+ }
1776
1793
  var allowedGlobals = {
1777
1794
  Math,
1778
1795
  JSON,
@@ -1791,7 +1808,17 @@ var allowedGlobals = {
1791
1808
  isFinite,
1792
1809
  encodeURIComponent,
1793
1810
  decodeURIComponent,
1794
- console
1811
+ console,
1812
+ ...typeof setTimeout !== "undefined" ? {
1813
+ setTimeout: guardedTimer("setTimeout"),
1814
+ setInterval: guardedTimer("setInterval"),
1815
+ clearTimeout: forwardGlobal("clearTimeout"),
1816
+ clearInterval: forwardGlobal("clearInterval")
1817
+ } : {},
1818
+ ...typeof requestAnimationFrame !== "undefined" ? {
1819
+ requestAnimationFrame: forwardGlobal("requestAnimationFrame"),
1820
+ cancelAnimationFrame: forwardGlobal("cancelAnimationFrame")
1821
+ } : {}
1795
1822
  };
1796
1823
  var VoodooRuntimeError = class extends Error {
1797
1824
  constructor(message, expression) {
@@ -7003,7 +7030,7 @@ function data(values) {
7003
7030
  Object.defineProperties(rootScope.data, Object.getOwnPropertyDescriptors(values));
7004
7031
  return rootScope.data;
7005
7032
  }
7006
- var version2 = "0.12.1";
7033
+ var version2 = "0.12.2";
7007
7034
  var core = {
7008
7035
  // Utilities first: Voodoo's own names can override.
7009
7036
  ...utils_exports,
@@ -10125,6 +10152,7 @@ defineDirective("collapse", ({ el }) => {
10125
10152
  ensureUi();
10126
10153
  collapseOf(el);
10127
10154
  });
10155
+ var selfToggling = /* @__PURE__ */ new WeakSet();
10128
10156
  defineDirective("collapse-toggle", ({ el, expression, cleanup }) => {
10129
10157
  ensureUi();
10130
10158
  const target2 = resolveTarget(el, expression);
@@ -10133,6 +10161,8 @@ defineDirective("collapse-toggle", ({ el, expression, cleanup }) => {
10133
10161
  controller.triggers.add(el);
10134
10162
  controller.sync();
10135
10163
  makeInteractive(el, cleanup);
10164
+ selfToggling.add(el);
10165
+ cleanup(() => selfToggling.delete(el));
10136
10166
  const onClick = (event) => {
10137
10167
  event.preventDefault();
10138
10168
  controller.toggle();
@@ -10543,10 +10573,11 @@ defineDirective("accordion", ({ el, cleanup }) => {
10543
10573
  if (index === -1) return;
10544
10574
  event.preventDefault();
10545
10575
  const controller = controllers2[index];
10546
- if (single && !controller.open) {
10576
+ const ownToggle = selfToggling.has(header);
10577
+ if (single && (ownToggle ? controller.open : !controller.open)) {
10547
10578
  for (const other of controllers2) if (other !== controller) other.hide();
10548
10579
  }
10549
- controller.toggle();
10580
+ if (!ownToggle) controller.toggle();
10550
10581
  };
10551
10582
  const onKeyDown = (event) => {
10552
10583
  const header = event.target?.closest(".v-accordion-header");
@@ -18067,8 +18098,22 @@ register("v-table", {
18067
18098
  }
18068
18099
  },
18069
18100
  methods: {
18070
- cell(row, column) {
18071
- const value = get(row, column.key);
18101
+ /**
18102
+ * A row may be an object keyed by column, or a positional array.
18103
+ *
18104
+ * Only the object form was ever read. The documentation's own example on
18105
+ * the components page passes `[['Ada', 'Engineer']]` against columns
18106
+ * `['Name', 'Role']`, and looking `'Name'` up on an array finds nothing, so
18107
+ * every cell rendered empty while the header row and the row count both
18108
+ * looked perfectly right — which is a hard failure to even notice, let
18109
+ * alone diagnose.
18110
+ *
18111
+ * The index comes from the template rather than `cols.indexOf(column)`,
18112
+ * because `cols` is a computed and identity is not guaranteed to survive a
18113
+ * recomputation.
18114
+ */
18115
+ cell(row, column, index) {
18116
+ const value = Array.isArray(row) && typeof index === "number" ? row[index] : get(row, column.key);
18072
18117
  if (value === null || value === void 0) return "";
18073
18118
  return String(value);
18074
18119
  },
@@ -18116,8 +18161,8 @@ register("v-table", {
18116
18161
  </thead>
18117
18162
  <tbody>
18118
18163
  <tr v-for="(row, index) in sorted" :key="index">
18119
- <td v-for="column in cols" :key="column.key" :style="alignStyle(column)"
18120
- v-text="cell(row, column)"></td>
18164
+ <td v-for="(column, ci) in cols" :key="column.key" :style="alignStyle(column)"
18165
+ v-text="cell(row, column, ci)"></td>
18121
18166
  </tr>
18122
18167
  <tr v-if="!sorted.length">
18123
18168
  <td class="v-table-empty" :colspan="cols.length || 1" v-text="empty"></td>