voodoojs 0.6.1 → 0.7.0

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 (37) hide show
  1. package/README.md +65 -13
  2. package/dist/{chunk-NNU6WOOU.js → chunk-4T2UIPWX.js} +4 -4
  3. package/dist/{chunk-A2UOVQBP.js → chunk-CYN6VLMD.js} +4 -4
  4. package/dist/{chunk-JZIYRIY6.js → chunk-E5T65CEI.js} +5 -5
  5. package/dist/{chunk-U76IRJKH.js → chunk-GIWKGFGY.js} +4 -4
  6. package/dist/{chunk-CNHNFTPC.js → chunk-II3XBOAP.js} +13 -13
  7. package/dist/{chunk-PHMBDPWH.js → chunk-JB2YYNK6.js} +7 -7
  8. package/dist/{chunk-5777LJVW.js → chunk-MMLUK37L.js} +3 -3
  9. package/dist/{chunk-4LR3IFPX.js → chunk-QO3I7VLJ.js} +5 -5
  10. package/dist/{chunk-PQZEVFVZ.js → chunk-WSDB7K4X.js} +6 -6
  11. package/dist/{chunk-E27NRARW.js → chunk-YOZTHZS2.js} +3 -3
  12. package/dist/{chunk-234ZLC6W.js → chunk-ZIWLQZZL.js} +4 -4
  13. package/dist/essential.cjs +2 -2
  14. package/dist/essential.js +10 -10
  15. package/dist/gpu.cjs +1 -1
  16. package/dist/gpu.js +10 -10
  17. package/dist/http.cjs +1 -1
  18. package/dist/http.js +5 -5
  19. package/dist/index.cjs +10 -9
  20. package/dist/index.d.cts +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +28 -27
  23. package/dist/reactivity.cjs +1 -1
  24. package/dist/reactivity.js +2 -2
  25. package/dist/socket.cjs +1 -1
  26. package/dist/socket.js +9 -9
  27. package/dist/style-SLQ6PHZK.js +5 -0
  28. package/dist/utils.cjs +1 -1
  29. package/dist/utils.js +2 -2
  30. package/dist/voodoo.core.js +2 -2
  31. package/dist/voodoo.core.min.js +2 -2
  32. package/dist/voodoo.full.js +10 -9
  33. package/dist/voodoo.full.min.js +4 -4
  34. package/dist/voodoo.js +2 -2
  35. package/dist/voodoo.min.js +2 -2
  36. package/package.json +1 -1
  37. package/dist/style-XEUAGGJK.js +0 -5
package/README.md CHANGED
@@ -4,6 +4,13 @@
4
4
 
5
5
  No mandatory build step · No runtime dependencies · No Virtual DOM · No configuration required
6
6
 
7
+ [Website](https://kwy404.github.io/Voodoo.js/) ·
8
+ [Playground](https://kwy404.github.io/Voodoo.js/playground.html) ·
9
+ [Components](https://kwy404.github.io/Voodoo.js/components.html) ·
10
+ [Examples](https://kwy404.github.io/Voodoo.js/examples/) ·
11
+ [Documentation](https://kwy404.github.io/Voodoo.js/docs/) ·
12
+ [GitHub](https://github.com/kwy404/Voodoo.js)
13
+
7
14
  ---
8
15
 
9
16
  ## Install
@@ -15,14 +22,16 @@ npm install voodoojs
15
22
  Or drop it into a page, with nothing else:
16
23
 
17
24
  ```html
18
- <script src="https://cdn.jsdelivr.net/npm/voodoojs/dist/voodoo.min.js" defer></script>
25
+ <script src="https://cdn.jsdelivr.net/npm/voodoojs@0.6/dist/voodoo.min.js" defer></script>
19
26
 
20
27
  <div v-data="{ count: 0 }">
21
28
  <button @click="count++">Clicked { count } times</button>
22
29
  </div>
23
30
  ```
24
31
 
25
- That page is a complete application. There is no build step, no bundler and no configuration.
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.
26
35
 
27
36
  ## Two ways to write it
28
37
 
@@ -45,30 +54,73 @@ effect(() => console.log(state.count));
45
54
  state.count++;
46
55
  ```
47
56
 
57
+ ## What you get
58
+
59
+ Reactivity, components, a router, HTTP, forms with validation and masks, input
60
+ masks, i18n, charts, motion, sound, a devtools inspector, and 29 ready-made
61
+ components that need no registration — writing the tag is the whole usage.
62
+
63
+ ```html
64
+ <v-button variant="primary">Save</v-button>
65
+ <v-input label="Email" type="email"></v-input>
66
+ <v-table :columns="cols" :rows="people"></v-table>
67
+ ```
68
+
69
+ ## No eval, anywhere
70
+
71
+ Expressions run through a lexer, a Pratt parser and an interpreter, never `eval`
72
+ or `new Function`. That is why the library works under a strict Content Security
73
+ Policy with no `unsafe-eval`, which a browser test proves by loading it under
74
+ `script-src 'self'` and asserting no policy violation is raised.
75
+
76
+ ## It cleans up after itself
77
+
78
+ Once a directive is installed, its attribute is read into memory and removed from
79
+ the document. What ships to the page is ordinary HTML, with no framework residue
80
+ in the inspector. Turn it off with `V.config.cleanAttributes = false` if you need
81
+ the attributes for something else.
82
+
48
83
  ## Builds
49
84
 
50
- | File | What it carries |
51
- | --- | --- |
52
- | `dist/voodoo.core.min.js` | Reactivity, expressions, DOM engine, components, core directives |
53
- | `dist/voodoo.min.js` | The above plus forms, validation, masks, UI and HTTP. Served by default on the CDN |
54
- | `dist/voodoo.full.min.js` | Everything: charts, motion, router, i18n, sound and the devtools inspector |
85
+ | File | What it carries | Gzip |
86
+ | --- | --- | --- |
87
+ | `dist/voodoo.core.min.js` | Reactivity, expressions, DOM engine, components, core directives | 46 KB |
88
+ | `dist/voodoo.min.js` | The above plus forms, validation, masks, UI and HTTP | 83 KB |
89
+ | `dist/voodoo.full.min.js` | Everything: charts, motion, router, i18n, sound, devtools | 129 KB |
55
90
 
56
- Module entry points are also published for bundlers:
91
+ Module entry points are published for bundlers, in ESM and CJS, with types:
57
92
 
58
93
  ```js
59
94
  import { reactive } from 'voodoojs/reactivity';
60
95
  import { http } from 'voodoojs/http';
61
96
  ```
62
97
 
63
- TypeScript definitions ship with the package.
98
+ ## Performance
64
99
 
65
- ## Documentation
100
+ A 1,000-row keyed list, median of 30 samples, against the same document, every
101
+ framework bundled production and minified. Lower is better.
102
+
103
+ | | create 1k | update 1 in 10 | clear 1k |
104
+ | --- | ---: | ---: | ---: |
105
+ | vanilla JS | 48.74 | 7.52 | 21.06 |
106
+ | Preact 10.29.8 | 91.62 | 2.59 | 29.48 |
107
+ | **Voodoo.js** | **97.70** | **5.42** | **30.44** |
108
+ | React 19.2.8 | 100.23 | 4.63 | 33.59 |
109
+ | Vue 3.5.42 | 110.56 | 19.21 | 31.65 |
110
+ | Solid 1.9.15 | 111.63 | 0.91 | 19.99 |
111
+ | Alpine 3.17.1 | 179.47 | 104.51 | 31.39 |
66
112
 
67
- Full documentation, guides, examples and the API reference live in the repository:
113
+ Read honestly: hand-written vanilla still builds a list twice as fast, and Voodoo
114
+ is by far the largest bundle in that table. If size is your main constraint,
115
+ Alpine and Preact are the honest recommendation. Method and per-framework
116
+ adapters are in the repository.
68
117
 
69
- **https://github.com/kwy404/Voodoo.js**
118
+ ## Documentation
70
119
 
71
- The documentation is written in Portuguese under `docs/`, with an English set under `docs/en/`.
120
+ Everything lives at **[kwy404.github.io/Voodoo.js](https://kwy404.github.io/Voodoo.js/)**:
121
+ a guide, an API reference, 13 working example applications, a playground with 26
122
+ runnable examples, and the component gallery. The site is built with Voodoo.js
123
+ itself and has no build step of its own.
72
124
 
73
125
  ## License
74
126
 
@@ -1,7 +1,7 @@
1
- import { __publicField } from './chunk-E27NRARW.js';
1
+ import { __publicField } from './chunk-YOZTHZS2.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.4.6
4
+ * Voodoo.js v0.7.0
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-NNU6WOOU.js.map
641
- //# sourceMappingURL=chunk-NNU6WOOU.js.map
640
+ //# sourceMappingURL=chunk-4T2UIPWX.js.map
641
+ //# sourceMappingURL=chunk-4T2UIPWX.js.map
@@ -1,7 +1,7 @@
1
- import { config } from './chunk-5777LJVW.js';
1
+ import { config } from './chunk-MMLUK37L.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.4.6
4
+ * Voodoo.js v0.7.0
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-A2UOVQBP.js.map
82
- //# sourceMappingURL=chunk-A2UOVQBP.js.map
81
+ //# sourceMappingURL=chunk-CYN6VLMD.js.map
82
+ //# sourceMappingURL=chunk-CYN6VLMD.js.map
@@ -1,8 +1,8 @@
1
- import { handleError } from './chunk-NNU6WOOU.js';
2
- import { warn } from './chunk-A2UOVQBP.js';
1
+ import { handleError } from './chunk-4T2UIPWX.js';
2
+ import { warn } from './chunk-CYN6VLMD.js';
3
3
 
4
4
  /**
5
- * Voodoo.js v0.4.6
5
+ * Voodoo.js v0.7.0
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-JZIYRIY6.js.map
1196
- //# sourceMappingURL=chunk-JZIYRIY6.js.map
1195
+ //# sourceMappingURL=chunk-E5T65CEI.js.map
1196
+ //# sourceMappingURL=chunk-E5T65CEI.js.map
@@ -1,7 +1,7 @@
1
- import { config } from './chunk-5777LJVW.js';
1
+ import { config } from './chunk-MMLUK37L.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.4.6
4
+ * Voodoo.js v0.7.0
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-U76IRJKH.js.map
72
- //# sourceMappingURL=chunk-U76IRJKH.js.map
71
+ //# sourceMappingURL=chunk-GIWKGFGY.js.map
72
+ //# sourceMappingURL=chunk-GIWKGFGY.js.map
@@ -1,14 +1,14 @@
1
- import { http, HttpError, request } from './chunk-PQZEVFVZ.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-PHMBDPWH.js';
3
- import { ref, reactive, handleError, nextTick, queuePostFlush, warn, watch, EffectScope, computed, effect, toRaw, flushSync, effectScope, stop, unref, markRaw, watchEffect, shallowRef, setErrorHandler } from './chunk-NNU6WOOU.js';
4
- import { warnDuplicateKey, warn as warn$1, describeElement, warnUnknownComponent, warnAlias, warnRequiredProp } from './chunk-A2UOVQBP.js';
5
- import { parseDuration, debounce, utils_exports, throttle, uid, device, escapeHtml } from './chunk-234ZLC6W.js';
6
- import { injectStyle, ensureTokens } from './chunk-U76IRJKH.js';
7
- import { defineDirective, config, PRIORITY, directives, normalizeComponentName, components, usePlugin } from './chunk-5777LJVW.js';
8
- import { __publicField } from './chunk-E27NRARW.js';
1
+ import { http, HttpError, request } from './chunk-WSDB7K4X.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-JB2YYNK6.js';
3
+ import { ref, reactive, handleError, nextTick, queuePostFlush, warn, watch, EffectScope, computed, effect, toRaw, flushSync, effectScope, stop, unref, markRaw, watchEffect, shallowRef, setErrorHandler } from './chunk-4T2UIPWX.js';
4
+ import { warnDuplicateKey, warn as warn$1, describeElement, warnUnknownComponent, warnAlias, warnRequiredProp } from './chunk-CYN6VLMD.js';
5
+ import { parseDuration, debounce, utils_exports, throttle, uid, device, escapeHtml } from './chunk-ZIWLQZZL.js';
6
+ import { injectStyle, ensureTokens } from './chunk-GIWKGFGY.js';
7
+ import { defineDirective, config, PRIORITY, directives, normalizeComponentName, components, usePlugin } from './chunk-MMLUK37L.js';
8
+ import { __publicField } from './chunk-YOZTHZS2.js';
9
9
 
10
10
  /**
11
- * Voodoo.js v0.4.6
11
+ * Voodoo.js v0.7.0
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-XEUAGGJK.js').then(({ injectStyle: injectStyle2 }) => {
2665
+ void import('./style-SLQ6PHZK.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.4.6";
2952
+ var version2 = "0.7.0";
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-CNHNFTPC.js.map
10275
- //# sourceMappingURL=chunk-CNHNFTPC.js.map
10274
+ //# sourceMappingURL=chunk-II3XBOAP.js.map
10275
+ //# sourceMappingURL=chunk-II3XBOAP.js.map
@@ -1,10 +1,10 @@
1
- import { reactive, handleError, EffectScope, effect } from './chunk-NNU6WOOU.js';
2
- import { inDevelopment, warnInvalidExpression, warnUnknownDirective } from './chunk-A2UOVQBP.js';
3
- import { config, directives, components } from './chunk-5777LJVW.js';
4
- import { __publicField } from './chunk-E27NRARW.js';
1
+ import { reactive, handleError, EffectScope, effect } from './chunk-4T2UIPWX.js';
2
+ import { inDevelopment, warnInvalidExpression, warnUnknownDirective } from './chunk-CYN6VLMD.js';
3
+ import { config, directives, components } from './chunk-MMLUK37L.js';
4
+ import { __publicField } from './chunk-YOZTHZS2.js';
5
5
 
6
6
  /**
7
- * Voodoo.js v0.4.6
7
+ * Voodoo.js v0.7.0
8
8
  * JavaScript feels like magic.
9
9
  * (c) 2026 Voodoo.js contributors. MIT License.
10
10
  */
@@ -1841,5 +1841,5 @@ function refresh(root) {
1841
1841
  }
1842
1842
 
1843
1843
  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, originalAttributes, parse, parseAttribute, queryDirective, readAttr, refresh, removeQuietly, restoreAttributes, rootScope, setComponentMounter, start, stopObserving, stringify, tokenize, walk };
1844
- //# sourceMappingURL=chunk-PHMBDPWH.js.map
1845
- //# sourceMappingURL=chunk-PHMBDPWH.js.map
1844
+ //# sourceMappingURL=chunk-JB2YYNK6.js.map
1845
+ //# sourceMappingURL=chunk-JB2YYNK6.js.map
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Voodoo.js v0.4.6
2
+ * Voodoo.js v0.7.0
3
3
  * JavaScript feels like magic.
4
4
  * (c) 2026 Voodoo.js contributors. MIT License.
5
5
  */
@@ -60,5 +60,5 @@ function usePlugin(V, plugin, options) {
60
60
  }
61
61
 
62
62
  export { PRIORITY, components, config, defineDirective, directives, normalizeComponentName, usePlugin };
63
- //# sourceMappingURL=chunk-5777LJVW.js.map
64
- //# sourceMappingURL=chunk-5777LJVW.js.map
63
+ //# sourceMappingURL=chunk-MMLUK37L.js.map
64
+ //# sourceMappingURL=chunk-MMLUK37L.js.map
@@ -1,8 +1,8 @@
1
- import { reactive } from './chunk-NNU6WOOU.js';
2
- import { warnOnce } from './chunk-A2UOVQBP.js';
1
+ import { reactive } from './chunk-4T2UIPWX.js';
2
+ import { warnOnce } from './chunk-CYN6VLMD.js';
3
3
 
4
4
  /**
5
- * Voodoo.js v0.4.6
5
+ * Voodoo.js v0.7.0
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-4LR3IFPX.js.map
946
- //# sourceMappingURL=chunk-4LR3IFPX.js.map
945
+ //# sourceMappingURL=chunk-QO3I7VLJ.js.map
946
+ //# sourceMappingURL=chunk-QO3I7VLJ.js.map
@@ -1,9 +1,9 @@
1
- import { warnOnce } from './chunk-A2UOVQBP.js';
2
- import { parseDuration } from './chunk-234ZLC6W.js';
3
- import { __publicField } from './chunk-E27NRARW.js';
1
+ import { warnOnce } from './chunk-CYN6VLMD.js';
2
+ import { parseDuration } from './chunk-ZIWLQZZL.js';
3
+ import { __publicField } from './chunk-YOZTHZS2.js';
4
4
 
5
5
  /**
6
- * Voodoo.js v0.4.6
6
+ * Voodoo.js v0.7.0
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-PQZEVFVZ.js.map
448
- //# sourceMappingURL=chunk-PQZEVFVZ.js.map
447
+ //# sourceMappingURL=chunk-WSDB7K4X.js.map
448
+ //# sourceMappingURL=chunk-WSDB7K4X.js.map
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Voodoo.js v0.4.6
2
+ * Voodoo.js v0.7.0
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-E27NRARW.js.map
16
- //# sourceMappingURL=chunk-E27NRARW.js.map
15
+ //# sourceMappingURL=chunk-YOZTHZS2.js.map
16
+ //# sourceMappingURL=chunk-YOZTHZS2.js.map
@@ -1,7 +1,7 @@
1
- import { __export } from './chunk-E27NRARW.js';
1
+ import { __export } from './chunk-YOZTHZS2.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.4.6
4
+ * Voodoo.js v0.7.0
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-234ZLC6W.js.map
401
- //# sourceMappingURL=chunk-234ZLC6W.js.map
400
+ //# sourceMappingURL=chunk-ZIWLQZZL.js.map
401
+ //# sourceMappingURL=chunk-ZIWLQZZL.js.map
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  /**
6
- * Voodoo.js v0.4.6
6
+ * Voodoo.js v0.7.0
7
7
  * JavaScript feels like magic.
8
8
  * (c) 2026 Voodoo.js contributors. MIT License.
9
9
  */
@@ -6505,7 +6505,7 @@ function data(values) {
6505
6505
  Object.defineProperties(rootScope.data, Object.getOwnPropertyDescriptors(values));
6506
6506
  return rootScope.data;
6507
6507
  }
6508
- var version2 = "0.4.6";
6508
+ var version2 = "0.7.0";
6509
6509
  var core = {
6510
6510
  // Utilities first: Voodoo's own names can override.
6511
6511
  ...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-CNHNFTPC.js';
2
- import './chunk-PQZEVFVZ.js';
3
- import { magic } from './chunk-PHMBDPWH.js';
4
- import './chunk-NNU6WOOU.js';
5
- import './chunk-A2UOVQBP.js';
6
- import './chunk-234ZLC6W.js';
7
- import './chunk-U76IRJKH.js';
8
- import './chunk-5777LJVW.js';
9
- import './chunk-E27NRARW.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-II3XBOAP.js';
2
+ import './chunk-WSDB7K4X.js';
3
+ import { magic } from './chunk-JB2YYNK6.js';
4
+ import './chunk-4T2UIPWX.js';
5
+ import './chunk-CYN6VLMD.js';
6
+ import './chunk-ZIWLQZZL.js';
7
+ import './chunk-GIWKGFGY.js';
8
+ import './chunk-MMLUK37L.js';
9
+ import './chunk-YOZTHZS2.js';
10
10
 
11
11
  /**
12
- * Voodoo.js v0.4.6
12
+ * Voodoo.js v0.7.0
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.4.6
6
+ * Voodoo.js v0.7.0
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-JZIYRIY6.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-JZIYRIY6.js';
3
- import { http } from './chunk-PQZEVFVZ.js';
4
- import { originalAttributes, destroy } from './chunk-PHMBDPWH.js';
5
- import { handleError } from './chunk-NNU6WOOU.js';
6
- import { warn, describeElement } from './chunk-A2UOVQBP.js';
7
- import './chunk-234ZLC6W.js';
8
- import { defineDirective } from './chunk-5777LJVW.js';
9
- import './chunk-E27NRARW.js';
1
+ import { supported, clock, shared, gpu, surface, effect, frameLoop, frame } from './chunk-E5T65CEI.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-E5T65CEI.js';
3
+ import { http } from './chunk-WSDB7K4X.js';
4
+ import { originalAttributes, destroy } from './chunk-JB2YYNK6.js';
5
+ import { handleError } from './chunk-4T2UIPWX.js';
6
+ import { warn, describeElement } from './chunk-CYN6VLMD.js';
7
+ import './chunk-ZIWLQZZL.js';
8
+ import { defineDirective } from './chunk-MMLUK37L.js';
9
+ import './chunk-YOZTHZS2.js';
10
10
 
11
11
  /**
12
- * Voodoo.js v0.4.6
12
+ * Voodoo.js v0.7.0
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.4.6
4
+ * Voodoo.js v0.7.0
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-PQZEVFVZ.js';
2
- import './chunk-A2UOVQBP.js';
3
- import './chunk-234ZLC6W.js';
4
- import './chunk-5777LJVW.js';
5
- import './chunk-E27NRARW.js';
1
+ export { HttpError, clearCache, flushOfflineQueue, http, request } from './chunk-WSDB7K4X.js';
2
+ import './chunk-CYN6VLMD.js';
3
+ import './chunk-ZIWLQZZL.js';
4
+ import './chunk-MMLUK37L.js';
5
+ import './chunk-YOZTHZS2.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.4.6
6
+ * Voodoo.js v0.7.0
7
7
  * JavaScript feels like magic.
8
8
  * (c) 2026 Voodoo.js contributors. MIT License.
9
9
  */
@@ -6516,7 +6516,7 @@ function data(values) {
6516
6516
  Object.defineProperties(rootScope.data, Object.getOwnPropertyDescriptors(values));
6517
6517
  return rootScope.data;
6518
6518
  }
6519
- var version2 = "0.4.6";
6519
+ var version2 = "0.7.0";
6520
6520
  var core = {
6521
6521
  // Utilities first: Voodoo's own names can override.
6522
6522
  ...utils_exports,
@@ -7746,12 +7746,13 @@ function writeUrl(state2, url2, replace) {
7746
7746
  }
7747
7747
  }
7748
7748
  if (settings2.mode !== "hash") return;
7749
- const hash = url2.slice(url2.indexOf("#"));
7749
+ const marker = url2.indexOf("#");
7750
+ if (marker < 0) return;
7751
+ const hash = url2.slice(marker);
7750
7752
  if (window.location.hash === hash) return;
7751
7753
  writingHash = true;
7752
7754
  try {
7753
- if (replace) window.location.replace(url2);
7754
- else window.location.hash = hash;
7755
+ window.location.hash = hash;
7755
7756
  } finally {
7756
7757
  setTimeout(() => {
7757
7758
  writingHash = false;
@@ -20396,8 +20397,8 @@ function enableXrayShortcut() {
20396
20397
  if (shortcutInstalled || typeof document === "undefined") return;
20397
20398
  shortcutInstalled = true;
20398
20399
  document.addEventListener("keydown", (event) => {
20399
- if (!event.ctrlKey || !event.shiftKey) return;
20400
- if (event.key !== "X" && event.key !== "x") return;
20400
+ if (!event.altKey || !event.shiftKey || event.ctrlKey || event.metaKey) return;
20401
+ if (event.code !== "KeyV" && event.key !== "V" && event.key !== "v") return;
20401
20402
  event.preventDefault();
20402
20403
  xray();
20403
20404
  });
@@ -20590,9 +20591,9 @@ function build() {
20590
20591
  const button = document.createElement("button");
20591
20592
  button.type = "button";
20592
20593
  button.className = "v-devtools-btn";
20593
- button.setAttribute("aria-label", "Open Voodoo devtools (Ctrl+Shift+X)");
20594
+ button.setAttribute("aria-label", "Open Voodoo devtools (Alt+Shift+V)");
20594
20595
  button.setAttribute("aria-pressed", "false");
20595
- button.title = "Voodoo devtools \u2014 click to inspect, drag to move (Ctrl+Shift+X)";
20596
+ button.title = "Voodoo devtools \u2014 click to inspect, drag to move (Alt+Shift+V)";
20596
20597
  button.innerHTML = MARK;
20597
20598
  const label = document.createElement("span");
20598
20599
  label.className = "v-devtools-label";
package/dist/index.d.cts CHANGED
@@ -1513,7 +1513,7 @@ declare function isXrayEnabled(): boolean;
1513
1513
  * V.xray(false) // disable
1514
1514
  * ```
1515
1515
  *
1516
- * The first call also installs the `Ctrl+Shift+X` shortcut.
1516
+ * The first call also installs the `Alt+Shift+V` shortcut.
1517
1517
  *
1518
1518
  * @param force enable or disable explicitly. Without argument, toggles.
1519
1519
  * @returns the state after the call.
package/dist/index.d.ts CHANGED
@@ -1513,7 +1513,7 @@ declare function isXrayEnabled(): boolean;
1513
1513
  * V.xray(false) // disable
1514
1514
  * ```
1515
1515
  *
1516
- * The first call also installs the `Ctrl+Shift+X` shortcut.
1516
+ * The first call also installs the `Alt+Shift+V` shortcut.
1517
1517
  *
1518
1518
  * @param force enable or disable explicitly. Without argument, toggles.
1519
1519
  * @returns the state after the call.