@mulanjs/mulanjs 1.0.1-dev.20260219183505 → 1.0.1-dev.20260220104511

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
@@ -32,7 +32,7 @@ npm install @mulanjs/mulanjs@dev
32
32
  ## ⚡ Core Features
33
33
 
34
34
  * **Signal Reactivity Engine** ⚡: Fine-grained reactivity that tracks exact dependencies, eliminating the need for a Virtual DOM.
35
- * **ASTR-Q+ Engine** 🌌: Simulated quantum registers for probabilistic state management and complex logic branching.
35
+ * **ASTR-Q+ Engine** 🌌: Simulated quantum registers with **Quantum Loops** (`muParallel`, `muSwitch`) for complex probabilistic branching.
36
36
  * **Iron Fortress Security** 🛡️: Built-in "Iron Fortress" security module that auto-sanitizes inputs and generates CSP headers.
37
37
  * **Mulan Cycle** 🔄: A redefined component lifecycle (Init, Mount, Destroy) for predictable state management.
38
38
  * **TypeScript First** 🟦: Built from the ground up with TypeScript for world-class type safety.
@@ -56,6 +56,9 @@ State that survives refreshes using `muVault`. Your data, secured in the Iron Fo
56
56
  ### Mulan Router (Time Travel) 🧭
57
57
  Zero-config hash routing with `<mu-link>` for instant, single-page navigation.
58
58
 
59
+ ### Mulan Surge (High Performance) 🚀
60
+ Adaptive non-blocking loops (`muBurst`) and true multicore parallelism (`muSurge`) to handle billions of records at 60fps.
61
+
59
62
  ### Native SCSS Support 🎨
60
63
  Built-in support for `<style lang="scss">`. No config required. Just design.
61
64
  ## 🚀 Quick Start Example
@@ -1,4 +1,11 @@
1
1
  import { muState } from './hooks';
2
+ /**
3
+ * Mulan Quantum (ASTR-Q+) Core
4
+ * Advanced Simulation Engine for multi-qubit registers and entanglement.
5
+ */
6
+ // -- GLOBAL CONTEXT FOR QUANTUM CONTROL --
7
+ // Defined at top to ensure visibility for muGate
8
+ export let activeControls = [];
2
9
  /**
3
10
  * Creates a quantum register of size n.
4
11
  * State vector will have 2^n amplitudes.
@@ -54,14 +61,14 @@ export function muGate(reg, type, target = 0, control) {
54
61
  const n = state.size;
55
62
  const amplitudes = state.amplitudes;
56
63
  const newAmps = amplitudes.map(a => (Object.assign({}, a)));
64
+ // Prepare Effective Control (Explicit Arguments + Global Context)
65
+ const effectiveControl = [...(control === undefined ? [] : (Array.isArray(control) ? control : [control])), ...activeControls];
57
66
  // Helper: Check if all control bits are 1
58
67
  const checkControl = (index, ctrl) => {
59
- if (ctrl === undefined)
68
+ if (ctrl === undefined || (Array.isArray(ctrl) && ctrl.length === 0))
60
69
  return true;
61
- if (typeof ctrl === 'number') {
62
- return ((index >> ctrl) & 1) === 1;
63
- }
64
- return ctrl.every(c => ((index >> c) & 1) === 1);
70
+ const ctrls = Array.isArray(ctrl) ? ctrl : [ctrl];
71
+ return ctrls.every(c => ((index >> c) & 1) === 1);
65
72
  };
66
73
  // SWAP Gate (Unique case: affects 2 targets)
67
74
  if (type === 'SWAP') {
@@ -69,6 +76,9 @@ export function muGate(reg, type, target = 0, control) {
69
76
  const t2 = control; // SWAP uses control arg as second target
70
77
  // Iterate only half to avoid double swapping
71
78
  for (let i = 0; i < amplitudes.length; i++) {
79
+ // Check active controls for SWAP too
80
+ if (activeControls.length > 0 && !checkControl(i, activeControls))
81
+ continue;
72
82
  const bit1 = (i >> t1) & 1;
73
83
  const bit2 = (i >> t2) & 1;
74
84
  if (bit1 !== bit2) {
@@ -93,7 +103,7 @@ export function muGate(reg, type, target = 0, control) {
93
103
  if (processed.has(i))
94
104
  continue;
95
105
  // Check Controls first
96
- if (!checkControl(i, control))
106
+ if (!checkControl(i, effectiveControl))
97
107
  continue;
98
108
  const targetBit = (i >> target) & 1;
99
109
  const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
@@ -114,7 +124,7 @@ export function muGate(reg, type, target = 0, control) {
114
124
  else if (type === 'X' || type === 'CNOT') {
115
125
  // CNOT is just Controlled-X
116
126
  for (let i = 0; i < amplitudes.length; i++) {
117
- if (!checkControl(i, control))
127
+ if (!checkControl(i, effectiveControl))
118
128
  continue;
119
129
  const targetBit = (i >> target) & 1;
120
130
  const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
@@ -128,7 +138,7 @@ export function muGate(reg, type, target = 0, control) {
128
138
  else if (type === 'Z' || type === 'CZ') {
129
139
  // Z and CZ are Phase Flips
130
140
  for (let i = 0; i < amplitudes.length; i++) {
131
- if (!checkControl(i, control))
141
+ if (!checkControl(i, effectiveControl))
132
142
  continue;
133
143
  const targetBit = (i >> target) & 1;
134
144
  // Z Gate acts on |1>
@@ -140,7 +150,7 @@ export function muGate(reg, type, target = 0, control) {
140
150
  else if (type === 'Y') {
141
151
  // Y: |0> -> i|1>, |1> -> -i|0>
142
152
  for (let i = 0; i < amplitudes.length; i++) {
143
- if (!checkControl(i, control))
153
+ if (!checkControl(i, effectiveControl))
144
154
  continue;
145
155
  const targetBit = (i >> target) & 1;
146
156
  const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
@@ -282,3 +292,58 @@ export function muMeasure(reg, target = 0) {
282
292
  updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));
283
293
  return result;
284
294
  }
295
+ /**
296
+ * Quantum Loop: Parallel Execution
297
+ * Applies a gate to multiple qubits "simultaneously" (in simulation steps).
298
+ * Ideal for initialization (Hadamard Transform) or global operations.
299
+ * @param reg Quantum Register
300
+ * @param qubits Array of qubit indices
301
+ * @param gate Gate type to apply (e.g. 'H', 'X')
302
+ */
303
+ export function muParallel(reg, qubits, gate) {
304
+ if (gate === 'SWAP') {
305
+ throw new Error("SWAP cannot be applied in parallel (requires pairs).");
306
+ }
307
+ // In a real quantum computer, these happen at t=0.
308
+ // Here, we loop, but logical time is constant.
309
+ qubits.forEach(q => muGate(reg, gate, q));
310
+ }
311
+ /**
312
+ * Applies a block of operations controlled by specific qubits.
313
+ * Enables "Quantum If/Else".
314
+ */
315
+ export function muControl(reg, controlQubit, inverse, block) {
316
+ // 1. Setup Context
317
+ if (inverse) {
318
+ muGate(reg, 'X', controlQubit); // Flip 0 to 1 to activate
319
+ }
320
+ activeControls.push(controlQubit);
321
+ try {
322
+ block();
323
+ }
324
+ finally {
325
+ activeControls.pop();
326
+ // Uncompute (Restore 0)
327
+ if (inverse) {
328
+ muGate(reg, 'X', controlQubit);
329
+ }
330
+ }
331
+ }
332
+ /**
333
+ * Quantum Switch: conditional Logic on Superposition
334
+ * Executes different logic branches based on the state of control qubits.
335
+ * Because the register can be in a superposition of states (e.g. |0> + |1>),
336
+ * MULTIPLE branches can execute effectively simultaneously on different subspaces.
337
+ *
338
+ * @param reg Quantum Register
339
+ * @param controlQubit The qubit controlling the switch (Single control for v1)
340
+ * @param cases Object mapping state (0 or 1) to a function executing quantum operations
341
+ */
342
+ export function muSwitch(reg, controlQubit, cases) {
343
+ if (cases[0]) {
344
+ muControl(reg, controlQubit, true, cases[0]);
345
+ }
346
+ if (cases[1]) {
347
+ muControl(reg, controlQubit, false, cases[1]);
348
+ }
349
+ }
@@ -35,7 +35,12 @@ export function useQuery(queryFn, options = { enabled: true }) {
35
35
  execute();
36
36
  });
37
37
  }
38
- return Object.assign(Object.assign({}, state), { refetch: execute });
38
+ return {
39
+ get data() { return state.data; },
40
+ get isLoading() { return state.isLoading; },
41
+ get error() { return state.error; },
42
+ refetch: execute
43
+ };
39
44
  }
40
45
  export function useMutation(mutationFn) {
41
46
  const state = reactive({
@@ -59,5 +64,10 @@ export function useMutation(mutationFn) {
59
64
  state.isLoading = false;
60
65
  }
61
66
  });
62
- return Object.assign(Object.assign({}, state), { mutate });
67
+ return {
68
+ get data() { return state.data; },
69
+ get isLoading() { return state.isLoading; },
70
+ get error() { return state.error; },
71
+ mutate
72
+ };
63
73
  }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * muBurst - Adaptive Non-blocking Iterator
3
+ * Processes large arrays in batches within a frame budget (typically 8-16ms)
4
+ * to keep the UI responsive while executing at near-native loop speeds.
5
+ */
6
+ export function muBurst(array, callback, options = {}) {
7
+ const { chunkSize = 1000, timeout = 8, onProgress } = options;
8
+ return new Promise((resolve) => {
9
+ let index = 0;
10
+ const total = array.length;
11
+ function process() {
12
+ const start = performance.now();
13
+ // Tight loop for high-speed processing
14
+ while (index < total && (performance.now() - start) < timeout) {
15
+ // Process in smaller bursts to allow more frequent time checks if needed
16
+ const endBurst = Math.min(index + chunkSize, total);
17
+ for (; index < endBurst; index++) {
18
+ callback(array[index], index);
19
+ }
20
+ }
21
+ if (onProgress) {
22
+ onProgress((index / total) * 100);
23
+ }
24
+ if (index < total) {
25
+ requestAnimationFrame(process);
26
+ }
27
+ else {
28
+ resolve();
29
+ }
30
+ }
31
+ process();
32
+ });
33
+ }
34
+ /**
35
+ * muSurge - Truly Parallel Execution
36
+ * Distributes work across CPU cores using Web Workers.
37
+ * Logic must be serializable.
38
+ */
39
+ export function muSurge(array, taskFn, onProgress) {
40
+ const n = navigator.hardwareConcurrency || 4;
41
+ const chunkSize = Math.ceil(array.length / n);
42
+ const results = new Array(array.length);
43
+ let completedChunks = 0;
44
+ let completedItems = 0;
45
+ // Convert function to string if it isn't already
46
+ const fnStr = typeof taskFn === 'function' ? taskFn.toString() : taskFn;
47
+ const workerCode = `
48
+ self.onmessage = function(e) {
49
+ const { chunk, startIndex, fnStr } = e.data;
50
+ const fn = new Function('item', 'return (' + fnStr + ')(item)');
51
+ const results = chunk.map(fn);
52
+ self.postMessage({ results, startIndex });
53
+ };
54
+ `;
55
+ const blob = new Blob([workerCode], { type: 'application/javascript' });
56
+ const workerUrl = URL.createObjectURL(blob);
57
+ return new Promise((resolve) => {
58
+ if (array.length === 0)
59
+ return resolve([]);
60
+ for (let i = 0; i < n; i++) {
61
+ const start = i * chunkSize;
62
+ const end = Math.min(start + chunkSize, array.length);
63
+ if (start >= end) {
64
+ completedChunks++;
65
+ continue;
66
+ }
67
+ const chunk = array.slice(start, end);
68
+ const worker = new Worker(workerUrl);
69
+ worker.onmessage = (e) => {
70
+ const { results: chunkResults, startIndex } = e.data;
71
+ // Merge results back into main array
72
+ for (let j = 0; j < chunkResults.length; j++) {
73
+ results[startIndex + j] = chunkResults[j];
74
+ }
75
+ completedChunks++;
76
+ completedItems += chunkResults.length;
77
+ if (onProgress)
78
+ onProgress((completedItems / array.length) * 100);
79
+ worker.terminate();
80
+ if (completedChunks === n) {
81
+ URL.revokeObjectURL(workerUrl);
82
+ resolve(results);
83
+ }
84
+ };
85
+ worker.postMessage({ chunk, startIndex: start, fnStr });
86
+ }
87
+ });
88
+ }
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ export * from './core/hooks';
8
8
  export * from './core/query';
9
9
  export * from './core/vault';
10
10
  export * from './core/quantum';
11
+ export * from './core/surge';
11
12
  export * from './components/bloch-sphere';
12
13
  export * from './components/infinity-list';
13
14
  // Global Mulan Object for non-module usage
@@ -20,9 +21,10 @@ import * as Hooks from './core/hooks';
20
21
  import * as Query from './core/query';
21
22
  import { render } from './core/renderer';
22
23
  import * as Quantum from './core/quantum';
24
+ import * as Surge from './core/surge';
23
25
  import * as InfinityList from './components/infinity-list';
24
- const Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive,
25
- effect, Component: MuComponent, defineComponent, Router: MuRouter, createRouter, Store: MuStore, Security: Security }, Hooks), Query), Quantum), InfinityList), { render,
26
+ const Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive,
27
+ effect, Component: MuComponent, defineComponent, Router: MuRouter, createRouter, Store: MuStore, Security: Security }, Hooks), Query), Quantum), Surge), InfinityList), { render,
26
28
  // MULAN INSIGHT: Branded Logging
27
29
  log: (msg, ...args) => {
28
30
  console.log(`%c[MulanJS]%c ${msg}`, "color: #ff3e00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;", "", ...args);
package/dist/mulan.esm.js CHANGED
@@ -821,16 +821,27 @@ function muVault(key, initial, options = {}) {
821
821
 
822
822
  __webpack_require__.r(__webpack_exports__);
823
823
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
824
+ /* harmony export */ activeControls: () => (/* binding */ activeControls),
825
+ /* harmony export */ muControl: () => (/* binding */ muControl),
824
826
  /* harmony export */ muEntangle: () => (/* binding */ muEntangle),
825
827
  /* harmony export */ muGate: () => (/* binding */ muGate),
826
828
  /* harmony export */ muMeasure: () => (/* binding */ muMeasure),
829
+ /* harmony export */ muParallel: () => (/* binding */ muParallel),
827
830
  /* harmony export */ muQubit: () => (/* binding */ muQubit),
828
831
  /* harmony export */ muRegister: () => (/* binding */ muRegister),
829
832
  /* harmony export */ muSearch: () => (/* binding */ muSearch),
833
+ /* harmony export */ muSwitch: () => (/* binding */ muSwitch),
830
834
  /* harmony export */ muTeleport: () => (/* binding */ muTeleport)
831
835
  /* harmony export */ });
832
836
  /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hooks */ "./src/core/hooks.ts");
833
837
 
838
+ /**
839
+ * Mulan Quantum (ASTR-Q+) Core
840
+ * Advanced Simulation Engine for multi-qubit registers and entanglement.
841
+ */
842
+ // -- GLOBAL CONTEXT FOR QUANTUM CONTROL --
843
+ // Defined at top to ensure visibility for muGate
844
+ let activeControls = [];
834
845
  /**
835
846
  * Creates a quantum register of size n.
836
847
  * State vector will have 2^n amplitudes.
@@ -886,14 +897,14 @@ function muGate(reg, type, target = 0, control) {
886
897
  const n = state.size;
887
898
  const amplitudes = state.amplitudes;
888
899
  const newAmps = amplitudes.map(a => (Object.assign({}, a)));
900
+ // Prepare Effective Control (Explicit Arguments + Global Context)
901
+ const effectiveControl = [...(control === undefined ? [] : (Array.isArray(control) ? control : [control])), ...activeControls];
889
902
  // Helper: Check if all control bits are 1
890
903
  const checkControl = (index, ctrl) => {
891
- if (ctrl === undefined)
904
+ if (ctrl === undefined || (Array.isArray(ctrl) && ctrl.length === 0))
892
905
  return true;
893
- if (typeof ctrl === 'number') {
894
- return ((index >> ctrl) & 1) === 1;
895
- }
896
- return ctrl.every(c => ((index >> c) & 1) === 1);
906
+ const ctrls = Array.isArray(ctrl) ? ctrl : [ctrl];
907
+ return ctrls.every(c => ((index >> c) & 1) === 1);
897
908
  };
898
909
  // SWAP Gate (Unique case: affects 2 targets)
899
910
  if (type === 'SWAP') {
@@ -901,6 +912,9 @@ function muGate(reg, type, target = 0, control) {
901
912
  const t2 = control; // SWAP uses control arg as second target
902
913
  // Iterate only half to avoid double swapping
903
914
  for (let i = 0; i < amplitudes.length; i++) {
915
+ // Check active controls for SWAP too
916
+ if (activeControls.length > 0 && !checkControl(i, activeControls))
917
+ continue;
904
918
  const bit1 = (i >> t1) & 1;
905
919
  const bit2 = (i >> t2) & 1;
906
920
  if (bit1 !== bit2) {
@@ -925,7 +939,7 @@ function muGate(reg, type, target = 0, control) {
925
939
  if (processed.has(i))
926
940
  continue;
927
941
  // Check Controls first
928
- if (!checkControl(i, control))
942
+ if (!checkControl(i, effectiveControl))
929
943
  continue;
930
944
  const targetBit = (i >> target) & 1;
931
945
  const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
@@ -946,7 +960,7 @@ function muGate(reg, type, target = 0, control) {
946
960
  else if (type === 'X' || type === 'CNOT') {
947
961
  // CNOT is just Controlled-X
948
962
  for (let i = 0; i < amplitudes.length; i++) {
949
- if (!checkControl(i, control))
963
+ if (!checkControl(i, effectiveControl))
950
964
  continue;
951
965
  const targetBit = (i >> target) & 1;
952
966
  const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
@@ -960,7 +974,7 @@ function muGate(reg, type, target = 0, control) {
960
974
  else if (type === 'Z' || type === 'CZ') {
961
975
  // Z and CZ are Phase Flips
962
976
  for (let i = 0; i < amplitudes.length; i++) {
963
- if (!checkControl(i, control))
977
+ if (!checkControl(i, effectiveControl))
964
978
  continue;
965
979
  const targetBit = (i >> target) & 1;
966
980
  // Z Gate acts on |1>
@@ -972,7 +986,7 @@ function muGate(reg, type, target = 0, control) {
972
986
  else if (type === 'Y') {
973
987
  // Y: |0> -> i|1>, |1> -> -i|0>
974
988
  for (let i = 0; i < amplitudes.length; i++) {
975
- if (!checkControl(i, control))
989
+ if (!checkControl(i, effectiveControl))
976
990
  continue;
977
991
  const targetBit = (i >> target) & 1;
978
992
  const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));
@@ -1114,6 +1128,61 @@ function muMeasure(reg, target = 0) {
1114
1128
  updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));
1115
1129
  return result;
1116
1130
  }
1131
+ /**
1132
+ * Quantum Loop: Parallel Execution
1133
+ * Applies a gate to multiple qubits "simultaneously" (in simulation steps).
1134
+ * Ideal for initialization (Hadamard Transform) or global operations.
1135
+ * @param reg Quantum Register
1136
+ * @param qubits Array of qubit indices
1137
+ * @param gate Gate type to apply (e.g. 'H', 'X')
1138
+ */
1139
+ function muParallel(reg, qubits, gate) {
1140
+ if (gate === 'SWAP') {
1141
+ throw new Error("SWAP cannot be applied in parallel (requires pairs).");
1142
+ }
1143
+ // In a real quantum computer, these happen at t=0.
1144
+ // Here, we loop, but logical time is constant.
1145
+ qubits.forEach(q => muGate(reg, gate, q));
1146
+ }
1147
+ /**
1148
+ * Applies a block of operations controlled by specific qubits.
1149
+ * Enables "Quantum If/Else".
1150
+ */
1151
+ function muControl(reg, controlQubit, inverse, block) {
1152
+ // 1. Setup Context
1153
+ if (inverse) {
1154
+ muGate(reg, 'X', controlQubit); // Flip 0 to 1 to activate
1155
+ }
1156
+ activeControls.push(controlQubit);
1157
+ try {
1158
+ block();
1159
+ }
1160
+ finally {
1161
+ activeControls.pop();
1162
+ // Uncompute (Restore 0)
1163
+ if (inverse) {
1164
+ muGate(reg, 'X', controlQubit);
1165
+ }
1166
+ }
1167
+ }
1168
+ /**
1169
+ * Quantum Switch: conditional Logic on Superposition
1170
+ * Executes different logic branches based on the state of control qubits.
1171
+ * Because the register can be in a superposition of states (e.g. |0> + |1>),
1172
+ * MULTIPLE branches can execute effectively simultaneously on different subspaces.
1173
+ *
1174
+ * @param reg Quantum Register
1175
+ * @param controlQubit The qubit controlling the switch (Single control for v1)
1176
+ * @param cases Object mapping state (0 or 1) to a function executing quantum operations
1177
+ */
1178
+ function muSwitch(reg, controlQubit, cases) {
1179
+ if (cases[0]) {
1180
+ muControl(reg, controlQubit, true, cases[0]);
1181
+ }
1182
+ if (cases[1]) {
1183
+ muControl(reg, controlQubit, false, cases[1]);
1184
+ }
1185
+ }
1117
1186
 
1118
1187
 
1119
1188
  /***/ },
@@ -1167,7 +1236,12 @@ function useQuery(queryFn, options = { enabled: true }) {
1167
1236
  execute();
1168
1237
  });
1169
1238
  }
1170
- return Object.assign(Object.assign({}, state), { refetch: execute });
1239
+ return {
1240
+ get data() { return state.data; },
1241
+ get isLoading() { return state.isLoading; },
1242
+ get error() { return state.error; },
1243
+ refetch: execute
1244
+ };
1171
1245
  }
1172
1246
  function useMutation(mutationFn) {
1173
1247
  const state = (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive)({
@@ -1191,7 +1265,12 @@ function useMutation(mutationFn) {
1191
1265
  state.isLoading = false;
1192
1266
  }
1193
1267
  });
1194
- return Object.assign(Object.assign({}, state), { mutate });
1268
+ return {
1269
+ get data() { return state.data; },
1270
+ get isLoading() { return state.isLoading; },
1271
+ get error() { return state.error; },
1272
+ mutate
1273
+ };
1195
1274
  }
1196
1275
 
1197
1276
 
@@ -1443,6 +1522,109 @@ function sanitize(str) {
1443
1522
  }
1444
1523
 
1445
1524
 
1525
+ /***/ },
1526
+
1527
+ /***/ "./src/core/surge.ts"
1528
+ /*!***************************!*\
1529
+ !*** ./src/core/surge.ts ***!
1530
+ \***************************/
1531
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1532
+
1533
+ __webpack_require__.r(__webpack_exports__);
1534
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1535
+ /* harmony export */ muBurst: () => (/* binding */ muBurst),
1536
+ /* harmony export */ muSurge: () => (/* binding */ muSurge)
1537
+ /* harmony export */ });
1538
+ /**
1539
+ * muBurst - Adaptive Non-blocking Iterator
1540
+ * Processes large arrays in batches within a frame budget (typically 8-16ms)
1541
+ * to keep the UI responsive while executing at near-native loop speeds.
1542
+ */
1543
+ function muBurst(array, callback, options = {}) {
1544
+ const { chunkSize = 1000, timeout = 8, onProgress } = options;
1545
+ return new Promise((resolve) => {
1546
+ let index = 0;
1547
+ const total = array.length;
1548
+ function process() {
1549
+ const start = performance.now();
1550
+ // Tight loop for high-speed processing
1551
+ while (index < total && (performance.now() - start) < timeout) {
1552
+ // Process in smaller bursts to allow more frequent time checks if needed
1553
+ const endBurst = Math.min(index + chunkSize, total);
1554
+ for (; index < endBurst; index++) {
1555
+ callback(array[index], index);
1556
+ }
1557
+ }
1558
+ if (onProgress) {
1559
+ onProgress((index / total) * 100);
1560
+ }
1561
+ if (index < total) {
1562
+ requestAnimationFrame(process);
1563
+ }
1564
+ else {
1565
+ resolve();
1566
+ }
1567
+ }
1568
+ process();
1569
+ });
1570
+ }
1571
+ /**
1572
+ * muSurge - Truly Parallel Execution
1573
+ * Distributes work across CPU cores using Web Workers.
1574
+ * Logic must be serializable.
1575
+ */
1576
+ function muSurge(array, taskFn, onProgress) {
1577
+ const n = navigator.hardwareConcurrency || 4;
1578
+ const chunkSize = Math.ceil(array.length / n);
1579
+ const results = new Array(array.length);
1580
+ let completedChunks = 0;
1581
+ let completedItems = 0;
1582
+ // Convert function to string if it isn't already
1583
+ const fnStr = typeof taskFn === 'function' ? taskFn.toString() : taskFn;
1584
+ const workerCode = `
1585
+ self.onmessage = function(e) {
1586
+ const { chunk, startIndex, fnStr } = e.data;
1587
+ const fn = new Function('item', 'return (' + fnStr + ')(item)');
1588
+ const results = chunk.map(fn);
1589
+ self.postMessage({ results, startIndex });
1590
+ };
1591
+ `;
1592
+ const blob = new Blob([workerCode], { type: 'application/javascript' });
1593
+ const workerUrl = URL.createObjectURL(blob);
1594
+ return new Promise((resolve) => {
1595
+ if (array.length === 0)
1596
+ return resolve([]);
1597
+ for (let i = 0; i < n; i++) {
1598
+ const start = i * chunkSize;
1599
+ const end = Math.min(start + chunkSize, array.length);
1600
+ if (start >= end) {
1601
+ completedChunks++;
1602
+ continue;
1603
+ }
1604
+ const chunk = array.slice(start, end);
1605
+ const worker = new Worker(workerUrl);
1606
+ worker.onmessage = (e) => {
1607
+ const { results: chunkResults, startIndex } = e.data;
1608
+ // Merge results back into main array
1609
+ for (let j = 0; j < chunkResults.length; j++) {
1610
+ results[startIndex + j] = chunkResults[j];
1611
+ }
1612
+ completedChunks++;
1613
+ completedItems += chunkResults.length;
1614
+ if (onProgress)
1615
+ onProgress((completedItems / array.length) * 100);
1616
+ worker.terminate();
1617
+ if (completedChunks === n) {
1618
+ URL.revokeObjectURL(workerUrl);
1619
+ resolve(results);
1620
+ }
1621
+ };
1622
+ worker.postMessage({ chunk, startIndex: start, fnStr });
1623
+ }
1624
+ });
1625
+ }
1626
+
1627
+
1446
1628
  /***/ },
1447
1629
 
1448
1630
  /***/ "./src/core/vault.ts"
@@ -2015,30 +2197,36 @@ var __webpack_exports__ = {};
2015
2197
  __webpack_require__.r(__webpack_exports__);
2016
2198
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2017
2199
  /* harmony export */ Component: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),
2018
- /* harmony export */ MuBlochSphereElement: () => (/* reexport safe */ _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_10__.MuBlochSphereElement),
2200
+ /* harmony export */ MuBlochSphereElement: () => (/* reexport safe */ _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_11__.MuBlochSphereElement),
2019
2201
  /* harmony export */ MuComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),
2020
- /* harmony export */ MuInfinity: () => (/* reexport safe */ _components_infinity_list__WEBPACK_IMPORTED_MODULE_11__.MuInfinity),
2202
+ /* harmony export */ MuInfinity: () => (/* reexport safe */ _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__.MuInfinity),
2021
2203
  /* harmony export */ MuRouter: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),
2022
2204
  /* harmony export */ MuStore: () => (/* reexport safe */ _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore),
2023
2205
  /* harmony export */ Router: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),
2024
2206
  /* harmony export */ Security: () => (/* reexport safe */ _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security),
2025
2207
  /* harmony export */ Signal: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.Signal),
2208
+ /* harmony export */ activeControls: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.activeControls),
2026
2209
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
2027
2210
  /* harmony export */ defineComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent),
2028
2211
  /* harmony export */ effect: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect),
2029
2212
  /* harmony export */ getCurrentInstance: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.getCurrentInstance),
2030
2213
  /* harmony export */ hydrate: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.hydrate),
2214
+ /* harmony export */ muBurst: () => (/* reexport safe */ _core_surge__WEBPACK_IMPORTED_MODULE_10__.muBurst),
2215
+ /* harmony export */ muControl: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muControl),
2031
2216
  /* harmony export */ muEffect: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muEffect),
2032
2217
  /* harmony export */ muEntangle: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muEntangle),
2033
2218
  /* harmony export */ muGate: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muGate),
2034
2219
  /* harmony export */ muGeom: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muGeom),
2035
2220
  /* harmony export */ muMeasure: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muMeasure),
2036
2221
  /* harmony export */ muMemo: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muMemo),
2222
+ /* harmony export */ muParallel: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muParallel),
2037
2223
  /* harmony export */ muPulse: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muPulse),
2038
2224
  /* harmony export */ muQubit: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muQubit),
2039
2225
  /* harmony export */ muRegister: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muRegister),
2040
2226
  /* harmony export */ muSearch: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muSearch),
2041
2227
  /* harmony export */ muState: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muState),
2228
+ /* harmony export */ muSurge: () => (/* reexport safe */ _core_surge__WEBPACK_IMPORTED_MODULE_10__.muSurge),
2229
+ /* harmony export */ muSwitch: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muSwitch),
2042
2230
  /* harmony export */ muTeleport: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muTeleport),
2043
2231
  /* harmony export */ muVault: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muVault),
2044
2232
  /* harmony export */ onMuDestroy: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuDestroy),
@@ -2068,8 +2256,10 @@ __webpack_require__.r(__webpack_exports__);
2068
2256
  /* harmony import */ var _core_query__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./core/query */ "./src/core/query.ts");
2069
2257
  /* harmony import */ var _core_vault__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./core/vault */ "./src/core/vault.ts");
2070
2258
  /* harmony import */ var _core_quantum__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./core/quantum */ "./src/core/quantum.ts");
2071
- /* harmony import */ var _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/bloch-sphere */ "./src/components/bloch-sphere.ts");
2072
- /* harmony import */ var _components_infinity_list__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/infinity-list */ "./src/components/infinity-list.ts");
2259
+ /* harmony import */ var _core_surge__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./core/surge */ "./src/core/surge.ts");
2260
+ /* harmony import */ var _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/bloch-sphere */ "./src/components/bloch-sphere.ts");
2261
+ /* harmony import */ var _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./components/infinity-list */ "./src/components/infinity-list.ts");
2262
+
2073
2263
 
2074
2264
 
2075
2265
 
@@ -2093,8 +2283,9 @@ __webpack_require__.r(__webpack_exports__);
2093
2283
 
2094
2284
 
2095
2285
 
2096
- const Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive,
2097
- effect: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect, Component: _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent, defineComponent: _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent, Router: _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter, createRouter: _router_index__WEBPACK_IMPORTED_MODULE_3__.createRouter, Store: _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore, Security: _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security }, _core_hooks__WEBPACK_IMPORTED_MODULE_6__), _core_query__WEBPACK_IMPORTED_MODULE_7__), _core_quantum__WEBPACK_IMPORTED_MODULE_9__), _components_infinity_list__WEBPACK_IMPORTED_MODULE_11__), { render: _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render,
2286
+
2287
+ const Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive,
2288
+ effect: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect, Component: _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent, defineComponent: _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent, Router: _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter, createRouter: _router_index__WEBPACK_IMPORTED_MODULE_3__.createRouter, Store: _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore, Security: _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security }, _core_hooks__WEBPACK_IMPORTED_MODULE_6__), _core_query__WEBPACK_IMPORTED_MODULE_7__), _core_quantum__WEBPACK_IMPORTED_MODULE_9__), _core_surge__WEBPACK_IMPORTED_MODULE_10__), _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__), { render: _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render,
2098
2289
  // MULAN INSIGHT: Branded Logging
2099
2290
  log: (msg, ...args) => {
2100
2291
  console.log(`%c[MulanJS]%c ${msg}`, "color: #ff3e00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;", "", ...args);
@@ -2139,22 +2330,28 @@ const __webpack_exports__MuStore = __webpack_exports__.MuStore;
2139
2330
  const __webpack_exports__Router = __webpack_exports__.Router;
2140
2331
  const __webpack_exports__Security = __webpack_exports__.Security;
2141
2332
  const __webpack_exports__Signal = __webpack_exports__.Signal;
2333
+ const __webpack_exports__activeControls = __webpack_exports__.activeControls;
2142
2334
  const __webpack_exports__default = __webpack_exports__["default"];
2143
2335
  const __webpack_exports__defineComponent = __webpack_exports__.defineComponent;
2144
2336
  const __webpack_exports__effect = __webpack_exports__.effect;
2145
2337
  const __webpack_exports__getCurrentInstance = __webpack_exports__.getCurrentInstance;
2146
2338
  const __webpack_exports__hydrate = __webpack_exports__.hydrate;
2339
+ const __webpack_exports__muBurst = __webpack_exports__.muBurst;
2340
+ const __webpack_exports__muControl = __webpack_exports__.muControl;
2147
2341
  const __webpack_exports__muEffect = __webpack_exports__.muEffect;
2148
2342
  const __webpack_exports__muEntangle = __webpack_exports__.muEntangle;
2149
2343
  const __webpack_exports__muGate = __webpack_exports__.muGate;
2150
2344
  const __webpack_exports__muGeom = __webpack_exports__.muGeom;
2151
2345
  const __webpack_exports__muMeasure = __webpack_exports__.muMeasure;
2152
2346
  const __webpack_exports__muMemo = __webpack_exports__.muMemo;
2347
+ const __webpack_exports__muParallel = __webpack_exports__.muParallel;
2153
2348
  const __webpack_exports__muPulse = __webpack_exports__.muPulse;
2154
2349
  const __webpack_exports__muQubit = __webpack_exports__.muQubit;
2155
2350
  const __webpack_exports__muRegister = __webpack_exports__.muRegister;
2156
2351
  const __webpack_exports__muSearch = __webpack_exports__.muSearch;
2157
2352
  const __webpack_exports__muState = __webpack_exports__.muState;
2353
+ const __webpack_exports__muSurge = __webpack_exports__.muSurge;
2354
+ const __webpack_exports__muSwitch = __webpack_exports__.muSwitch;
2158
2355
  const __webpack_exports__muTeleport = __webpack_exports__.muTeleport;
2159
2356
  const __webpack_exports__muVault = __webpack_exports__.muVault;
2160
2357
  const __webpack_exports__onMuDestroy = __webpack_exports__.onMuDestroy;
@@ -2173,4 +2370,4 @@ const __webpack_exports__sanitize = __webpack_exports__.sanitize;
2173
2370
  const __webpack_exports__setCurrentInstance = __webpack_exports__.setCurrentInstance;
2174
2371
  const __webpack_exports__useMutation = __webpack_exports__.useMutation;
2175
2372
  const __webpack_exports__useQuery = __webpack_exports__.useQuery;
2176
- export { __webpack_exports__Component as Component, __webpack_exports__MuBlochSphereElement as MuBlochSphereElement, __webpack_exports__MuComponent as MuComponent, __webpack_exports__MuInfinity as MuInfinity, __webpack_exports__MuRouter as MuRouter, __webpack_exports__MuStore as MuStore, __webpack_exports__Router as Router, __webpack_exports__Security as Security, __webpack_exports__Signal as Signal, __webpack_exports__default as default, __webpack_exports__defineComponent as defineComponent, __webpack_exports__effect as effect, __webpack_exports__getCurrentInstance as getCurrentInstance, __webpack_exports__hydrate as hydrate, __webpack_exports__muEffect as muEffect, __webpack_exports__muEntangle as muEntangle, __webpack_exports__muGate as muGate, __webpack_exports__muGeom as muGeom, __webpack_exports__muMeasure as muMeasure, __webpack_exports__muMemo as muMemo, __webpack_exports__muPulse as muPulse, __webpack_exports__muQubit as muQubit, __webpack_exports__muRegister as muRegister, __webpack_exports__muSearch as muSearch, __webpack_exports__muState as muState, __webpack_exports__muTeleport as muTeleport, __webpack_exports__muVault as muVault, __webpack_exports__onMuDestroy as onMuDestroy, __webpack_exports__onMuIdle as onMuIdle, __webpack_exports__onMuInit as onMuInit, __webpack_exports__onMuMount as onMuMount, __webpack_exports__onMuResume as onMuResume, __webpack_exports__onMuShake as onMuShake, __webpack_exports__onMuVoice as onMuVoice, __webpack_exports__persistent as persistent, __webpack_exports__reactive as reactive, __webpack_exports__ref as ref, __webpack_exports__render as render, __webpack_exports__renderToString as renderToString, __webpack_exports__sanitize as sanitize, __webpack_exports__setCurrentInstance as setCurrentInstance, __webpack_exports__useMutation as useMutation, __webpack_exports__useQuery as useQuery };
2373
+ export { __webpack_exports__Component as Component, __webpack_exports__MuBlochSphereElement as MuBlochSphereElement, __webpack_exports__MuComponent as MuComponent, __webpack_exports__MuInfinity as MuInfinity, __webpack_exports__MuRouter as MuRouter, __webpack_exports__MuStore as MuStore, __webpack_exports__Router as Router, __webpack_exports__Security as Security, __webpack_exports__Signal as Signal, __webpack_exports__activeControls as activeControls, __webpack_exports__default as default, __webpack_exports__defineComponent as defineComponent, __webpack_exports__effect as effect, __webpack_exports__getCurrentInstance as getCurrentInstance, __webpack_exports__hydrate as hydrate, __webpack_exports__muBurst as muBurst, __webpack_exports__muControl as muControl, __webpack_exports__muEffect as muEffect, __webpack_exports__muEntangle as muEntangle, __webpack_exports__muGate as muGate, __webpack_exports__muGeom as muGeom, __webpack_exports__muMeasure as muMeasure, __webpack_exports__muMemo as muMemo, __webpack_exports__muParallel as muParallel, __webpack_exports__muPulse as muPulse, __webpack_exports__muQubit as muQubit, __webpack_exports__muRegister as muRegister, __webpack_exports__muSearch as muSearch, __webpack_exports__muState as muState, __webpack_exports__muSurge as muSurge, __webpack_exports__muSwitch as muSwitch, __webpack_exports__muTeleport as muTeleport, __webpack_exports__muVault as muVault, __webpack_exports__onMuDestroy as onMuDestroy, __webpack_exports__onMuIdle as onMuIdle, __webpack_exports__onMuInit as onMuInit, __webpack_exports__onMuMount as onMuMount, __webpack_exports__onMuResume as onMuResume, __webpack_exports__onMuShake as onMuShake, __webpack_exports__onMuVoice as onMuVoice, __webpack_exports__persistent as persistent, __webpack_exports__reactive as reactive, __webpack_exports__ref as ref, __webpack_exports__render as render, __webpack_exports__renderToString as renderToString, __webpack_exports__sanitize as sanitize, __webpack_exports__setCurrentInstance as setCurrentInstance, __webpack_exports__useMutation as useMutation, __webpack_exports__useQuery as useQuery };
package/dist/mulan.js CHANGED
@@ -66,7 +66,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
66
66
  \*****************************/
67
67
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
68
68
 
69
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ muEntangle: () => (/* binding */ muEntangle),\n/* harmony export */ muGate: () => (/* binding */ muGate),\n/* harmony export */ muMeasure: () => (/* binding */ muMeasure),\n/* harmony export */ muQubit: () => (/* binding */ muQubit),\n/* harmony export */ muRegister: () => (/* binding */ muRegister),\n/* harmony export */ muSearch: () => (/* binding */ muSearch),\n/* harmony export */ muTeleport: () => (/* binding */ muTeleport)\n/* harmony export */ });\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hooks */ \"./src/core/hooks.ts\");\n\n/**\n * Creates a quantum register of size n.\n * State vector will have 2^n amplitudes.\n */\nfunction muRegister(n) {\n const numStates = Math.pow(2, n);\n const amplitudes = new Array(numStates).fill(0).map((_, i) => ({\n re: i === 0 ? 1 : 0,\n im: 0\n }));\n return (0,_hooks__WEBPACK_IMPORTED_MODULE_0__.muState)({\n value: {\n size: n,\n amplitudes\n }\n });\n}\n/**\n * Backward compatible muQubit (Single Qubit Register)\n */\nfunction muQubit(initial = 0) {\n const q = muRegister(1);\n if (initial === 1) {\n muGate(q, 'X', 0);\n }\n // Add compatibility properties for Phase 1 components\n // These properties are getters that dynamically access the amplitudes array\n Object.defineProperty(q.value, 'alpha', { get: () => q.value.amplitudes[0] });\n Object.defineProperty(q.value, 'beta', { get: () => q.value.amplitudes[1] });\n return q;\n}\n/**\n * Internal helper to update register state while maintaining compatibility\n */\nfunction updateState(reg, newState) {\n if (newState.size === 1) {\n // Re-inject compatibility getters for muQubit users\n Object.defineProperty(newState, 'alpha', {\n get: () => newState.amplitudes[0],\n configurable: true,\n enumerable: true\n });\n Object.defineProperty(newState, 'beta', {\n get: () => newState.amplitudes[1],\n configurable: true,\n enumerable: true\n });\n }\n reg.value = newState;\n}\nfunction muGate(reg, type, target = 0, control) {\n const state = reg.value;\n const n = state.size;\n const amplitudes = state.amplitudes;\n const newAmps = amplitudes.map(a => (Object.assign({}, a)));\n // Helper: Check if all control bits are 1\n const checkControl = (index, ctrl) => {\n if (ctrl === undefined)\n return true;\n if (typeof ctrl === 'number') {\n return ((index >> ctrl) & 1) === 1;\n }\n return ctrl.every(c => ((index >> c) & 1) === 1);\n };\n // SWAP Gate (Unique case: affects 2 targets)\n if (type === 'SWAP') {\n const t1 = target;\n const t2 = control; // SWAP uses control arg as second target \n // Iterate only half to avoid double swapping\n for (let i = 0; i < amplitudes.length; i++) {\n const bit1 = (i >> t1) & 1;\n const bit2 = (i >> t2) & 1;\n if (bit1 !== bit2) {\n // Determine the swap partner index\n // If i has (0,1), partner has (1,0) at those positions\n const partner = i ^ (1 << t1) ^ (1 << t2);\n if (i < partner) {\n const temp = newAmps[i];\n newAmps[i] = newAmps[partner];\n newAmps[partner] = temp;\n }\n }\n }\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n return;\n }\n // Standard Single-Qubit & Controlled Gates\n if (type === 'H') {\n const s = 1 / Math.sqrt(2);\n const processed = new Set();\n for (let i = 0; i < state.amplitudes.length; i++) {\n if (processed.has(i))\n continue;\n // Check Controls first\n if (!checkControl(i, control))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n const a = state.amplitudes[i];\n const b = state.amplitudes[pairedIndex];\n if (targetBit === 0) {\n newAmps[i] = { re: s * (a.re + b.re), im: s * (a.im + b.im) };\n newAmps[pairedIndex] = { re: s * (a.re - b.re), im: s * (a.im - b.im) };\n }\n else {\n newAmps[pairedIndex] = { re: s * (b.re + a.re), im: s * (b.im + a.im) };\n newAmps[i] = { re: s * (b.re - a.re), im: s * (b.im - a.im) };\n }\n processed.add(i);\n processed.add(pairedIndex);\n }\n }\n else if (type === 'X' || type === 'CNOT') {\n // CNOT is just Controlled-X\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, control))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n if (i < pairedIndex) {\n const temp = newAmps[i];\n newAmps[i] = newAmps[pairedIndex];\n newAmps[pairedIndex] = temp;\n }\n }\n }\n else if (type === 'Z' || type === 'CZ') {\n // Z and CZ are Phase Flips\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, control))\n continue;\n const targetBit = (i >> target) & 1;\n // Z Gate acts on |1>\n if (targetBit === 1) {\n newAmps[i] = { re: -amplitudes[i].re, im: -amplitudes[i].im };\n }\n }\n }\n else if (type === 'Y') {\n // Y: |0> -> i|1>, |1> -> -i|0>\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, control))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n if (i < pairedIndex) {\n // We process pairs (i, pairedIndex) where i has 0 at target, paired has 1\n const a = newAmps[i]; // Coeff of |0>\n const b = newAmps[pairedIndex]; // Coeff of |1>\n // New |0> = -i * Old |1>\n newAmps[i] = { re: b.im, im: -b.re };\n // New |1> = i * Old |0>\n newAmps[pairedIndex] = { re: -a.im, im: a.re };\n }\n }\n }\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n}\n/**\n * Mulan Search Logic (Grover's Operator)\n * Automatically constructs a multi-controlled Phase Flip (Z) for a specific target state.\n * This is the core of the \"Quantum Switch\" or \"Quantum Search\" capability.\n * @param reg Quantum Register\n * @param targetState The integer state to \"search\" and mark (e.g. 2 for |10>)\n */\nfunction muSearch(reg, targetState) {\n const n = reg.value.size;\n const controls = [];\n // 1. Identify which bits are 0 and need wrapping with X gates\n // Logic: To mark |010>, we want C-C-Z to trigger on 111.\n // So we apply X to bits that are 0, then C-C-Z, then X again.\n // We treat the last bit as the 'target' for the Z gate, rest as controls\n const targetQubit = n - 1;\n for (let i = 0; i < n; i++) {\n const bit = (targetState >> i) & 1;\n if (i === targetQubit) {\n // If target bit logic requires 0, we flip it to 1 for the Z gate to work\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n else {\n controls.push(i);\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n }\n // 2. Apply Multi-Controlled Z\n muGate(reg, 'Z', targetQubit, controls);\n // 3. Uncompute (Restore 0s)\n for (let i = 0; i < n; i++) {\n const bit = (targetState >> i) & 1;\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n // --- GROVER DIFFUSER (Amplification) ---\n // This flips the probability amplitudes around the mean, boosting the target state.\n // 1. Apply H to all\n for (let i = 0; i < n; i++)\n muGate(reg, 'H', i);\n // 2. Apply X to all\n for (let i = 0; i < n; i++)\n muGate(reg, 'X', i);\n // 3. Multi-Controlled Z (Reflection about |0...0>)\n // We want to flip phase of |11...1> state after X transformation (which corresponds to |00...0> original)\n // Target is last qubit, controls are 0 to n-2\n const diffControls = [];\n for (let i = 0; i < n - 1; i++)\n diffControls.push(i);\n muGate(reg, 'Z', n - 1, diffControls);\n // 4. Uncompute X\n for (let i = 0; i < n; i++)\n muGate(reg, 'X', i);\n // 5. Uncompute H\n for (let i = 0; i < n; i++)\n muGate(reg, 'H', i);\n}\nfunction muEntangle(reg, i, j) {\n muGate(reg, 'H', i);\n muGate(reg, 'CNOT', j, i);\n}\n/**\n * Quantum Teleportation Protocol\n * Transfers the state of `msgIdx` to `targetIdx` using `ancillaIdx` as a resource.\n * @param reg Register\n * @param msgIdx The qubit containing the state to teleport (Alice)\n * @param ancillaIdx The helper qubit (Alice's half of entanglement)\n * @param targetIdx The destination qubit (Bob)\n */\nfunction muTeleport(reg, msgIdx, ancillaIdx, targetIdx) {\n // 1. Create Bell Pair (Entanglement) between Ancilla and Target\n // Represents the shared link between Alice and Bob\n muEntangle(reg, ancillaIdx, targetIdx);\n // 2. Bell Measurement on Message + Ancilla (Alice's side)\n muGate(reg, 'CNOT', ancillaIdx, msgIdx); // Control: msg, Target: ancilla\n muGate(reg, 'H', msgIdx);\n // 3. Measure Alice's qubits (This collapses them)\n const m1 = muMeasure(reg, msgIdx); // Measures \"Z\" component\n const m2 = muMeasure(reg, ancillaIdx); // Measures \"X\" component\n // 4. Classical Communication & Correction (Bob's side)\n // Apply corrections to Target based on measurements\n if (m2 === 1)\n muGate(reg, 'X', targetIdx);\n if (m1 === 1)\n muGate(reg, 'Z', targetIdx);\n}\n/**\n * Measures a specific qubit in the register, collapsing the superposition.\n * @param reg Quantum Register\n * @param target Index of qubit to measure\n * @returns 0 or 1\n */\nfunction muMeasure(reg, target = 0) {\n const state = reg.value;\n const amplitudes = state.amplitudes;\n let prob0 = 0;\n // 1. Calculate Probability of |0>\n for (let i = 0; i < amplitudes.length; i++) {\n if (((i >> target) & 1) === 0) {\n const a = amplitudes[i];\n prob0 += (a.re * a.re) + (a.im * a.im);\n }\n }\n // 2. Determine Outcome\n const result = Math.random() < prob0 ? 0 : 1;\n const resultProb = result === 0 ? prob0 : (1 - prob0);\n const normFactor = resultProb > 0 ? (1 / Math.sqrt(resultProb)) : 0;\n // 3. Collapse the State (Wavefunction Collapse)\n const newAmps = amplitudes.map((a, i) => {\n const bit = (i >> target) & 1;\n if (bit !== result) {\n return { re: 0, im: 0 };\n }\n else {\n return { re: a.re * normFactor, im: a.im * normFactor };\n }\n });\n // We need to call updateState to ensure reactivity if specialized getters exist\n // But since this file has updateState internal, we can just call it.\n // However, the internal updateState function needs to be in scope. \n // It is defined at line 60. So we are good.\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n return result;\n}\n\n\n//# sourceURL=webpack://Mulan/./src/core/quantum.ts?\n}");
69
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ activeControls: () => (/* binding */ activeControls),\n/* harmony export */ muControl: () => (/* binding */ muControl),\n/* harmony export */ muEntangle: () => (/* binding */ muEntangle),\n/* harmony export */ muGate: () => (/* binding */ muGate),\n/* harmony export */ muMeasure: () => (/* binding */ muMeasure),\n/* harmony export */ muParallel: () => (/* binding */ muParallel),\n/* harmony export */ muQubit: () => (/* binding */ muQubit),\n/* harmony export */ muRegister: () => (/* binding */ muRegister),\n/* harmony export */ muSearch: () => (/* binding */ muSearch),\n/* harmony export */ muSwitch: () => (/* binding */ muSwitch),\n/* harmony export */ muTeleport: () => (/* binding */ muTeleport)\n/* harmony export */ });\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hooks */ \"./src/core/hooks.ts\");\n\n/**\n * Mulan Quantum (ASTR-Q+) Core\n * Advanced Simulation Engine for multi-qubit registers and entanglement.\n */\n// -- GLOBAL CONTEXT FOR QUANTUM CONTROL --\n// Defined at top to ensure visibility for muGate\nlet activeControls = [];\n/**\n * Creates a quantum register of size n.\n * State vector will have 2^n amplitudes.\n */\nfunction muRegister(n) {\n const numStates = Math.pow(2, n);\n const amplitudes = new Array(numStates).fill(0).map((_, i) => ({\n re: i === 0 ? 1 : 0,\n im: 0\n }));\n return (0,_hooks__WEBPACK_IMPORTED_MODULE_0__.muState)({\n value: {\n size: n,\n amplitudes\n }\n });\n}\n/**\n * Backward compatible muQubit (Single Qubit Register)\n */\nfunction muQubit(initial = 0) {\n const q = muRegister(1);\n if (initial === 1) {\n muGate(q, 'X', 0);\n }\n // Add compatibility properties for Phase 1 components\n // These properties are getters that dynamically access the amplitudes array\n Object.defineProperty(q.value, 'alpha', { get: () => q.value.amplitudes[0] });\n Object.defineProperty(q.value, 'beta', { get: () => q.value.amplitudes[1] });\n return q;\n}\n/**\n * Internal helper to update register state while maintaining compatibility\n */\nfunction updateState(reg, newState) {\n if (newState.size === 1) {\n // Re-inject compatibility getters for muQubit users\n Object.defineProperty(newState, 'alpha', {\n get: () => newState.amplitudes[0],\n configurable: true,\n enumerable: true\n });\n Object.defineProperty(newState, 'beta', {\n get: () => newState.amplitudes[1],\n configurable: true,\n enumerable: true\n });\n }\n reg.value = newState;\n}\nfunction muGate(reg, type, target = 0, control) {\n const state = reg.value;\n const n = state.size;\n const amplitudes = state.amplitudes;\n const newAmps = amplitudes.map(a => (Object.assign({}, a)));\n // Prepare Effective Control (Explicit Arguments + Global Context)\n const effectiveControl = [...(control === undefined ? [] : (Array.isArray(control) ? control : [control])), ...activeControls];\n // Helper: Check if all control bits are 1\n const checkControl = (index, ctrl) => {\n if (ctrl === undefined || (Array.isArray(ctrl) && ctrl.length === 0))\n return true;\n const ctrls = Array.isArray(ctrl) ? ctrl : [ctrl];\n return ctrls.every(c => ((index >> c) & 1) === 1);\n };\n // SWAP Gate (Unique case: affects 2 targets)\n if (type === 'SWAP') {\n const t1 = target;\n const t2 = control; // SWAP uses control arg as second target \n // Iterate only half to avoid double swapping\n for (let i = 0; i < amplitudes.length; i++) {\n // Check active controls for SWAP too\n if (activeControls.length > 0 && !checkControl(i, activeControls))\n continue;\n const bit1 = (i >> t1) & 1;\n const bit2 = (i >> t2) & 1;\n if (bit1 !== bit2) {\n // Determine the swap partner index\n // If i has (0,1), partner has (1,0) at those positions\n const partner = i ^ (1 << t1) ^ (1 << t2);\n if (i < partner) {\n const temp = newAmps[i];\n newAmps[i] = newAmps[partner];\n newAmps[partner] = temp;\n }\n }\n }\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n return;\n }\n // Standard Single-Qubit & Controlled Gates\n if (type === 'H') {\n const s = 1 / Math.sqrt(2);\n const processed = new Set();\n for (let i = 0; i < state.amplitudes.length; i++) {\n if (processed.has(i))\n continue;\n // Check Controls first\n if (!checkControl(i, effectiveControl))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n const a = state.amplitudes[i];\n const b = state.amplitudes[pairedIndex];\n if (targetBit === 0) {\n newAmps[i] = { re: s * (a.re + b.re), im: s * (a.im + b.im) };\n newAmps[pairedIndex] = { re: s * (a.re - b.re), im: s * (a.im - b.im) };\n }\n else {\n newAmps[pairedIndex] = { re: s * (b.re + a.re), im: s * (b.im + a.im) };\n newAmps[i] = { re: s * (b.re - a.re), im: s * (b.im - a.im) };\n }\n processed.add(i);\n processed.add(pairedIndex);\n }\n }\n else if (type === 'X' || type === 'CNOT') {\n // CNOT is just Controlled-X\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, effectiveControl))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n if (i < pairedIndex) {\n const temp = newAmps[i];\n newAmps[i] = newAmps[pairedIndex];\n newAmps[pairedIndex] = temp;\n }\n }\n }\n else if (type === 'Z' || type === 'CZ') {\n // Z and CZ are Phase Flips\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, effectiveControl))\n continue;\n const targetBit = (i >> target) & 1;\n // Z Gate acts on |1>\n if (targetBit === 1) {\n newAmps[i] = { re: -amplitudes[i].re, im: -amplitudes[i].im };\n }\n }\n }\n else if (type === 'Y') {\n // Y: |0> -> i|1>, |1> -> -i|0>\n for (let i = 0; i < amplitudes.length; i++) {\n if (!checkControl(i, effectiveControl))\n continue;\n const targetBit = (i >> target) & 1;\n const pairedIndex = targetBit ? (i & ~(1 << target)) : (i | (1 << target));\n if (i < pairedIndex) {\n // We process pairs (i, pairedIndex) where i has 0 at target, paired has 1\n const a = newAmps[i]; // Coeff of |0>\n const b = newAmps[pairedIndex]; // Coeff of |1>\n // New |0> = -i * Old |1>\n newAmps[i] = { re: b.im, im: -b.re };\n // New |1> = i * Old |0>\n newAmps[pairedIndex] = { re: -a.im, im: a.re };\n }\n }\n }\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n}\n/**\n * Mulan Search Logic (Grover's Operator)\n * Automatically constructs a multi-controlled Phase Flip (Z) for a specific target state.\n * This is the core of the \"Quantum Switch\" or \"Quantum Search\" capability.\n * @param reg Quantum Register\n * @param targetState The integer state to \"search\" and mark (e.g. 2 for |10>)\n */\nfunction muSearch(reg, targetState) {\n const n = reg.value.size;\n const controls = [];\n // 1. Identify which bits are 0 and need wrapping with X gates\n // Logic: To mark |010>, we want C-C-Z to trigger on 111.\n // So we apply X to bits that are 0, then C-C-Z, then X again.\n // We treat the last bit as the 'target' for the Z gate, rest as controls\n const targetQubit = n - 1;\n for (let i = 0; i < n; i++) {\n const bit = (targetState >> i) & 1;\n if (i === targetQubit) {\n // If target bit logic requires 0, we flip it to 1 for the Z gate to work\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n else {\n controls.push(i);\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n }\n // 2. Apply Multi-Controlled Z\n muGate(reg, 'Z', targetQubit, controls);\n // 3. Uncompute (Restore 0s)\n for (let i = 0; i < n; i++) {\n const bit = (targetState >> i) & 1;\n if (bit === 0)\n muGate(reg, 'X', i);\n }\n // --- GROVER DIFFUSER (Amplification) ---\n // This flips the probability amplitudes around the mean, boosting the target state.\n // 1. Apply H to all\n for (let i = 0; i < n; i++)\n muGate(reg, 'H', i);\n // 2. Apply X to all\n for (let i = 0; i < n; i++)\n muGate(reg, 'X', i);\n // 3. Multi-Controlled Z (Reflection about |0...0>)\n // We want to flip phase of |11...1> state after X transformation (which corresponds to |00...0> original)\n // Target is last qubit, controls are 0 to n-2\n const diffControls = [];\n for (let i = 0; i < n - 1; i++)\n diffControls.push(i);\n muGate(reg, 'Z', n - 1, diffControls);\n // 4. Uncompute X\n for (let i = 0; i < n; i++)\n muGate(reg, 'X', i);\n // 5. Uncompute H\n for (let i = 0; i < n; i++)\n muGate(reg, 'H', i);\n}\nfunction muEntangle(reg, i, j) {\n muGate(reg, 'H', i);\n muGate(reg, 'CNOT', j, i);\n}\n/**\n * Quantum Teleportation Protocol\n * Transfers the state of `msgIdx` to `targetIdx` using `ancillaIdx` as a resource.\n * @param reg Register\n * @param msgIdx The qubit containing the state to teleport (Alice)\n * @param ancillaIdx The helper qubit (Alice's half of entanglement)\n * @param targetIdx The destination qubit (Bob)\n */\nfunction muTeleport(reg, msgIdx, ancillaIdx, targetIdx) {\n // 1. Create Bell Pair (Entanglement) between Ancilla and Target\n // Represents the shared link between Alice and Bob\n muEntangle(reg, ancillaIdx, targetIdx);\n // 2. Bell Measurement on Message + Ancilla (Alice's side)\n muGate(reg, 'CNOT', ancillaIdx, msgIdx); // Control: msg, Target: ancilla\n muGate(reg, 'H', msgIdx);\n // 3. Measure Alice's qubits (This collapses them)\n const m1 = muMeasure(reg, msgIdx); // Measures \"Z\" component\n const m2 = muMeasure(reg, ancillaIdx); // Measures \"X\" component\n // 4. Classical Communication & Correction (Bob's side)\n // Apply corrections to Target based on measurements\n if (m2 === 1)\n muGate(reg, 'X', targetIdx);\n if (m1 === 1)\n muGate(reg, 'Z', targetIdx);\n}\n/**\n * Measures a specific qubit in the register, collapsing the superposition.\n * @param reg Quantum Register\n * @param target Index of qubit to measure\n * @returns 0 or 1\n */\nfunction muMeasure(reg, target = 0) {\n const state = reg.value;\n const amplitudes = state.amplitudes;\n let prob0 = 0;\n // 1. Calculate Probability of |0>\n for (let i = 0; i < amplitudes.length; i++) {\n if (((i >> target) & 1) === 0) {\n const a = amplitudes[i];\n prob0 += (a.re * a.re) + (a.im * a.im);\n }\n }\n // 2. Determine Outcome\n const result = Math.random() < prob0 ? 0 : 1;\n const resultProb = result === 0 ? prob0 : (1 - prob0);\n const normFactor = resultProb > 0 ? (1 / Math.sqrt(resultProb)) : 0;\n // 3. Collapse the State (Wavefunction Collapse)\n const newAmps = amplitudes.map((a, i) => {\n const bit = (i >> target) & 1;\n if (bit !== result) {\n return { re: 0, im: 0 };\n }\n else {\n return { re: a.re * normFactor, im: a.im * normFactor };\n }\n });\n // We need to call updateState to ensure reactivity if specialized getters exist\n // But since this file has updateState internal, we can just call it.\n // However, the internal updateState function needs to be in scope. \n // It is defined at line 60. So we are good.\n updateState(reg, Object.assign(Object.assign({}, state), { amplitudes: newAmps }));\n return result;\n}\n/**\n * Quantum Loop: Parallel Execution\n * Applies a gate to multiple qubits \"simultaneously\" (in simulation steps).\n * Ideal for initialization (Hadamard Transform) or global operations.\n * @param reg Quantum Register\n * @param qubits Array of qubit indices\n * @param gate Gate type to apply (e.g. 'H', 'X')\n */\nfunction muParallel(reg, qubits, gate) {\n if (gate === 'SWAP') {\n throw new Error(\"SWAP cannot be applied in parallel (requires pairs).\");\n }\n // In a real quantum computer, these happen at t=0.\n // Here, we loop, but logical time is constant.\n qubits.forEach(q => muGate(reg, gate, q));\n}\n/**\n * Applies a block of operations controlled by specific qubits.\n * Enables \"Quantum If/Else\".\n */\nfunction muControl(reg, controlQubit, inverse, block) {\n // 1. Setup Context\n if (inverse) {\n muGate(reg, 'X', controlQubit); // Flip 0 to 1 to activate\n }\n activeControls.push(controlQubit);\n try {\n block();\n }\n finally {\n activeControls.pop();\n // Uncompute (Restore 0)\n if (inverse) {\n muGate(reg, 'X', controlQubit);\n }\n }\n}\n/**\n * Quantum Switch: conditional Logic on Superposition\n * Executes different logic branches based on the state of control qubits.\n * Because the register can be in a superposition of states (e.g. |0> + |1>),\n * MULTIPLE branches can execute effectively simultaneously on different subspaces.\n *\n * @param reg Quantum Register\n * @param controlQubit The qubit controlling the switch (Single control for v1)\n * @param cases Object mapping state (0 or 1) to a function executing quantum operations\n */\nfunction muSwitch(reg, controlQubit, cases) {\n if (cases[0]) {\n muControl(reg, controlQubit, true, cases[0]);\n }\n if (cases[1]) {\n muControl(reg, controlQubit, false, cases[1]);\n }\n}\n\n\n//# sourceURL=webpack://Mulan/./src/core/quantum.ts?\n}");
70
70
 
71
71
  /***/ },
72
72
 
@@ -76,7 +76,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
76
76
  \***************************/
77
77
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
78
78
 
79
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useMutation: () => (/* binding */ useMutation),\n/* harmony export */ useQuery: () => (/* binding */ useQuery)\n/* harmony export */ });\n/* harmony import */ var _reactive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reactive */ \"./src/core/reactive.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nfunction useQuery(queryFn, options = { enabled: true }) {\n const state = (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive)({\n data: null,\n isLoading: false,\n error: null\n });\n const execute = () => __awaiter(this, void 0, void 0, function* () {\n state.isLoading = true;\n state.error = null;\n try {\n const result = yield queryFn();\n state.data = result;\n }\n catch (err) {\n state.error = err;\n }\n finally {\n state.isLoading = false;\n }\n });\n if (options.enabled) {\n // Run automatically\n (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.effect)(() => {\n // Basic effect wrapper to allow reactivity if queryFn relies on signals\n execute();\n });\n }\n return Object.assign(Object.assign({}, state), { refetch: execute });\n}\nfunction useMutation(mutationFn) {\n const state = (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive)({\n data: null,\n isLoading: false,\n error: null\n });\n const mutate = (args) => __awaiter(this, void 0, void 0, function* () {\n state.isLoading = true;\n state.error = null;\n try {\n const result = yield mutationFn(args);\n state.data = result;\n return result;\n }\n catch (err) {\n state.error = err;\n throw err;\n }\n finally {\n state.isLoading = false;\n }\n });\n return Object.assign(Object.assign({}, state), { mutate });\n}\n\n\n//# sourceURL=webpack://Mulan/./src/core/query.ts?\n}");
79
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useMutation: () => (/* binding */ useMutation),\n/* harmony export */ useQuery: () => (/* binding */ useQuery)\n/* harmony export */ });\n/* harmony import */ var _reactive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reactive */ \"./src/core/reactive.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nfunction useQuery(queryFn, options = { enabled: true }) {\n const state = (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive)({\n data: null,\n isLoading: false,\n error: null\n });\n const execute = () => __awaiter(this, void 0, void 0, function* () {\n state.isLoading = true;\n state.error = null;\n try {\n const result = yield queryFn();\n state.data = result;\n }\n catch (err) {\n state.error = err;\n }\n finally {\n state.isLoading = false;\n }\n });\n if (options.enabled) {\n // Run automatically\n (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.effect)(() => {\n // Basic effect wrapper to allow reactivity if queryFn relies on signals\n execute();\n });\n }\n return {\n get data() { return state.data; },\n get isLoading() { return state.isLoading; },\n get error() { return state.error; },\n refetch: execute\n };\n}\nfunction useMutation(mutationFn) {\n const state = (0,_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive)({\n data: null,\n isLoading: false,\n error: null\n });\n const mutate = (args) => __awaiter(this, void 0, void 0, function* () {\n state.isLoading = true;\n state.error = null;\n try {\n const result = yield mutationFn(args);\n state.data = result;\n return result;\n }\n catch (err) {\n state.error = err;\n throw err;\n }\n finally {\n state.isLoading = false;\n }\n });\n return {\n get data() { return state.data; },\n get isLoading() { return state.isLoading; },\n get error() { return state.error; },\n mutate\n };\n}\n\n\n//# sourceURL=webpack://Mulan/./src/core/query.ts?\n}");
80
80
 
81
81
  /***/ },
82
82
 
@@ -100,6 +100,16 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
100
100
 
101
101
  /***/ },
102
102
 
103
+ /***/ "./src/core/surge.ts"
104
+ /*!***************************!*\
105
+ !*** ./src/core/surge.ts ***!
106
+ \***************************/
107
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
108
+
109
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ muBurst: () => (/* binding */ muBurst),\n/* harmony export */ muSurge: () => (/* binding */ muSurge)\n/* harmony export */ });\n/**\n * muBurst - Adaptive Non-blocking Iterator\n * Processes large arrays in batches within a frame budget (typically 8-16ms)\n * to keep the UI responsive while executing at near-native loop speeds.\n */\nfunction muBurst(array, callback, options = {}) {\n const { chunkSize = 1000, timeout = 8, onProgress } = options;\n return new Promise((resolve) => {\n let index = 0;\n const total = array.length;\n function process() {\n const start = performance.now();\n // Tight loop for high-speed processing\n while (index < total && (performance.now() - start) < timeout) {\n // Process in smaller bursts to allow more frequent time checks if needed\n const endBurst = Math.min(index + chunkSize, total);\n for (; index < endBurst; index++) {\n callback(array[index], index);\n }\n }\n if (onProgress) {\n onProgress((index / total) * 100);\n }\n if (index < total) {\n requestAnimationFrame(process);\n }\n else {\n resolve();\n }\n }\n process();\n });\n}\n/**\n * muSurge - Truly Parallel Execution\n * Distributes work across CPU cores using Web Workers.\n * Logic must be serializable.\n */\nfunction muSurge(array, taskFn, onProgress) {\n const n = navigator.hardwareConcurrency || 4;\n const chunkSize = Math.ceil(array.length / n);\n const results = new Array(array.length);\n let completedChunks = 0;\n let completedItems = 0;\n // Convert function to string if it isn't already\n const fnStr = typeof taskFn === 'function' ? taskFn.toString() : taskFn;\n const workerCode = `\r\n self.onmessage = function(e) {\r\n const { chunk, startIndex, fnStr } = e.data;\r\n const fn = new Function('item', 'return (' + fnStr + ')(item)');\r\n const results = chunk.map(fn);\r\n self.postMessage({ results, startIndex });\r\n };\r\n `;\n const blob = new Blob([workerCode], { type: 'application/javascript' });\n const workerUrl = URL.createObjectURL(blob);\n return new Promise((resolve) => {\n if (array.length === 0)\n return resolve([]);\n for (let i = 0; i < n; i++) {\n const start = i * chunkSize;\n const end = Math.min(start + chunkSize, array.length);\n if (start >= end) {\n completedChunks++;\n continue;\n }\n const chunk = array.slice(start, end);\n const worker = new Worker(workerUrl);\n worker.onmessage = (e) => {\n const { results: chunkResults, startIndex } = e.data;\n // Merge results back into main array\n for (let j = 0; j < chunkResults.length; j++) {\n results[startIndex + j] = chunkResults[j];\n }\n completedChunks++;\n completedItems += chunkResults.length;\n if (onProgress)\n onProgress((completedItems / array.length) * 100);\n worker.terminate();\n if (completedChunks === n) {\n URL.revokeObjectURL(workerUrl);\n resolve(results);\n }\n };\n worker.postMessage({ chunk, startIndex: start, fnStr });\n }\n });\n}\n\n\n//# sourceURL=webpack://Mulan/./src/core/surge.ts?\n}");
110
+
111
+ /***/ },
112
+
103
113
  /***/ "./src/core/vault.ts"
104
114
  /*!***************************!*\
105
115
  !*** ./src/core/vault.ts ***!
@@ -116,7 +126,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
116
126
  \**********************/
117
127
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
118
128
 
119
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Component: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),\n/* harmony export */ MuBlochSphereElement: () => (/* reexport safe */ _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_10__.MuBlochSphereElement),\n/* harmony export */ MuComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),\n/* harmony export */ MuInfinity: () => (/* reexport safe */ _components_infinity_list__WEBPACK_IMPORTED_MODULE_11__.MuInfinity),\n/* harmony export */ MuRouter: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),\n/* harmony export */ MuStore: () => (/* reexport safe */ _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore),\n/* harmony export */ Router: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),\n/* harmony export */ Security: () => (/* reexport safe */ _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security),\n/* harmony export */ Signal: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.Signal),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ defineComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent),\n/* harmony export */ effect: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect),\n/* harmony export */ getCurrentInstance: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.getCurrentInstance),\n/* harmony export */ hydrate: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.hydrate),\n/* harmony export */ muEffect: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muEffect),\n/* harmony export */ muEntangle: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muEntangle),\n/* harmony export */ muGate: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muGate),\n/* harmony export */ muGeom: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muGeom),\n/* harmony export */ muMeasure: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muMeasure),\n/* harmony export */ muMemo: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muMemo),\n/* harmony export */ muPulse: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muPulse),\n/* harmony export */ muQubit: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muQubit),\n/* harmony export */ muRegister: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muRegister),\n/* harmony export */ muSearch: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muSearch),\n/* harmony export */ muState: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muState),\n/* harmony export */ muTeleport: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muTeleport),\n/* harmony export */ muVault: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muVault),\n/* harmony export */ onMuDestroy: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuDestroy),\n/* harmony export */ onMuIdle: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuIdle),\n/* harmony export */ onMuInit: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuInit),\n/* harmony export */ onMuMount: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuMount),\n/* harmony export */ onMuResume: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuResume),\n/* harmony export */ onMuShake: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuShake),\n/* harmony export */ onMuVoice: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuVoice),\n/* harmony export */ persistent: () => (/* reexport safe */ _core_vault__WEBPACK_IMPORTED_MODULE_8__.persistent),\n/* harmony export */ reactive: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive),\n/* harmony export */ ref: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.ref),\n/* harmony export */ render: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render),\n/* harmony export */ renderToString: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.renderToString),\n/* harmony export */ sanitize: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.sanitize),\n/* harmony export */ setCurrentInstance: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.setCurrentInstance),\n/* harmony export */ useMutation: () => (/* reexport safe */ _core_query__WEBPACK_IMPORTED_MODULE_7__.useMutation),\n/* harmony export */ useQuery: () => (/* reexport safe */ _core_query__WEBPACK_IMPORTED_MODULE_7__.useQuery)\n/* harmony export */ });\n/* harmony import */ var _core_reactive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/reactive */ \"./src/core/reactive.ts\");\n/* harmony import */ var _core_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core/component */ \"./src/core/component.ts\");\n/* harmony import */ var _core_renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./core/renderer */ \"./src/core/renderer.ts\");\n/* harmony import */ var _router_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./router/index */ \"./src/router/index.ts\");\n/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./store/index */ \"./src/store/index.ts\");\n/* harmony import */ var _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./security/sanitizer */ \"./src/security/sanitizer.ts\");\n/* harmony import */ var _core_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./core/hooks */ \"./src/core/hooks.ts\");\n/* harmony import */ var _core_query__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./core/query */ \"./src/core/query.ts\");\n/* harmony import */ var _core_vault__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./core/vault */ \"./src/core/vault.ts\");\n/* harmony import */ var _core_quantum__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./core/quantum */ \"./src/core/quantum.ts\");\n/* harmony import */ var _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/bloch-sphere */ \"./src/components/bloch-sphere.ts\");\n/* harmony import */ var _components_infinity_list__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/infinity-list */ \"./src/components/infinity-list.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n// Global Mulan Object for non-module usage\n\n\n\n\n\n\n\n\n\n\nconst Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive,\n effect: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect, Component: _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent, defineComponent: _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent, Router: _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter, createRouter: _router_index__WEBPACK_IMPORTED_MODULE_3__.createRouter, Store: _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore, Security: _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security }, _core_hooks__WEBPACK_IMPORTED_MODULE_6__), _core_query__WEBPACK_IMPORTED_MODULE_7__), _core_quantum__WEBPACK_IMPORTED_MODULE_9__), _components_infinity_list__WEBPACK_IMPORTED_MODULE_11__), { render: _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render, \n // MULAN INSIGHT: Branded Logging\n log: (msg, ...args) => {\n console.log(`%c[MulanJS]%c ${msg}`, \"color: #ff3e00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n }, warn: (msg, ...args) => {\n console.warn(`%c[MulanJS]%c ${msg}`, \"color: #ffcc00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n }, error: (msg, ...args) => {\n console.error(`%c[MulanJS]%c ${msg}`, \"color: #ff0000; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n } });\n// Security: Freeze the object to prevent runtime tampering\nObject.freeze(Mulan);\nObject.freeze(Mulan.Security);\n// MULAN INSIGHT: Initialize Global Registry\nif (typeof window !== 'undefined') {\n window.__MULAN_INSIGHT__ = window.__MULAN_INSIGHT__ || { components: new Map() };\n // MULAN INSIGHT: HMR Support\n window.__MULAN_REFRESH__ = () => {\n var _a;\n const components = (_a = window.__MULAN_INSIGHT__) === null || _a === void 0 ? void 0 : _a.components;\n if (components) {\n components.forEach((comp) => {\n if (comp && typeof comp.update === 'function') {\n // Force refresh\n comp.update();\n }\n });\n }\n };\n}\nif (typeof window !== 'undefined') {\n window.Mulan = Mulan;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Mulan);\n\n\n//# sourceURL=webpack://Mulan/./src/index.ts?\n}");
129
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Component: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),\n/* harmony export */ MuBlochSphereElement: () => (/* reexport safe */ _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_11__.MuBlochSphereElement),\n/* harmony export */ MuComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent),\n/* harmony export */ MuInfinity: () => (/* reexport safe */ _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__.MuInfinity),\n/* harmony export */ MuRouter: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),\n/* harmony export */ MuStore: () => (/* reexport safe */ _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore),\n/* harmony export */ Router: () => (/* reexport safe */ _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter),\n/* harmony export */ Security: () => (/* reexport safe */ _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security),\n/* harmony export */ Signal: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.Signal),\n/* harmony export */ activeControls: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.activeControls),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ defineComponent: () => (/* reexport safe */ _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent),\n/* harmony export */ effect: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect),\n/* harmony export */ getCurrentInstance: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.getCurrentInstance),\n/* harmony export */ hydrate: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.hydrate),\n/* harmony export */ muBurst: () => (/* reexport safe */ _core_surge__WEBPACK_IMPORTED_MODULE_10__.muBurst),\n/* harmony export */ muControl: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muControl),\n/* harmony export */ muEffect: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muEffect),\n/* harmony export */ muEntangle: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muEntangle),\n/* harmony export */ muGate: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muGate),\n/* harmony export */ muGeom: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muGeom),\n/* harmony export */ muMeasure: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muMeasure),\n/* harmony export */ muMemo: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muMemo),\n/* harmony export */ muParallel: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muParallel),\n/* harmony export */ muPulse: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muPulse),\n/* harmony export */ muQubit: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muQubit),\n/* harmony export */ muRegister: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muRegister),\n/* harmony export */ muSearch: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muSearch),\n/* harmony export */ muState: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muState),\n/* harmony export */ muSurge: () => (/* reexport safe */ _core_surge__WEBPACK_IMPORTED_MODULE_10__.muSurge),\n/* harmony export */ muSwitch: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muSwitch),\n/* harmony export */ muTeleport: () => (/* reexport safe */ _core_quantum__WEBPACK_IMPORTED_MODULE_9__.muTeleport),\n/* harmony export */ muVault: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.muVault),\n/* harmony export */ onMuDestroy: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuDestroy),\n/* harmony export */ onMuIdle: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuIdle),\n/* harmony export */ onMuInit: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuInit),\n/* harmony export */ onMuMount: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuMount),\n/* harmony export */ onMuResume: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuResume),\n/* harmony export */ onMuShake: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuShake),\n/* harmony export */ onMuVoice: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.onMuVoice),\n/* harmony export */ persistent: () => (/* reexport safe */ _core_vault__WEBPACK_IMPORTED_MODULE_8__.persistent),\n/* harmony export */ reactive: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive),\n/* harmony export */ ref: () => (/* reexport safe */ _core_reactive__WEBPACK_IMPORTED_MODULE_0__.ref),\n/* harmony export */ render: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render),\n/* harmony export */ renderToString: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.renderToString),\n/* harmony export */ sanitize: () => (/* reexport safe */ _core_renderer__WEBPACK_IMPORTED_MODULE_2__.sanitize),\n/* harmony export */ setCurrentInstance: () => (/* reexport safe */ _core_hooks__WEBPACK_IMPORTED_MODULE_6__.setCurrentInstance),\n/* harmony export */ useMutation: () => (/* reexport safe */ _core_query__WEBPACK_IMPORTED_MODULE_7__.useMutation),\n/* harmony export */ useQuery: () => (/* reexport safe */ _core_query__WEBPACK_IMPORTED_MODULE_7__.useQuery)\n/* harmony export */ });\n/* harmony import */ var _core_reactive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/reactive */ \"./src/core/reactive.ts\");\n/* harmony import */ var _core_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core/component */ \"./src/core/component.ts\");\n/* harmony import */ var _core_renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./core/renderer */ \"./src/core/renderer.ts\");\n/* harmony import */ var _router_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./router/index */ \"./src/router/index.ts\");\n/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./store/index */ \"./src/store/index.ts\");\n/* harmony import */ var _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./security/sanitizer */ \"./src/security/sanitizer.ts\");\n/* harmony import */ var _core_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./core/hooks */ \"./src/core/hooks.ts\");\n/* harmony import */ var _core_query__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./core/query */ \"./src/core/query.ts\");\n/* harmony import */ var _core_vault__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./core/vault */ \"./src/core/vault.ts\");\n/* harmony import */ var _core_quantum__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./core/quantum */ \"./src/core/quantum.ts\");\n/* harmony import */ var _core_surge__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./core/surge */ \"./src/core/surge.ts\");\n/* harmony import */ var _components_bloch_sphere__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/bloch-sphere */ \"./src/components/bloch-sphere.ts\");\n/* harmony import */ var _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./components/infinity-list */ \"./src/components/infinity-list.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Global Mulan Object for non-module usage\n\n\n\n\n\n\n\n\n\n\n\nconst Mulan = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ reactive: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.reactive,\n effect: _core_reactive__WEBPACK_IMPORTED_MODULE_0__.effect, Component: _core_component__WEBPACK_IMPORTED_MODULE_1__.MuComponent, defineComponent: _core_component__WEBPACK_IMPORTED_MODULE_1__.defineComponent, Router: _router_index__WEBPACK_IMPORTED_MODULE_3__.MuRouter, createRouter: _router_index__WEBPACK_IMPORTED_MODULE_3__.createRouter, Store: _store_index__WEBPACK_IMPORTED_MODULE_4__.MuStore, Security: _security_sanitizer__WEBPACK_IMPORTED_MODULE_5__.Security }, _core_hooks__WEBPACK_IMPORTED_MODULE_6__), _core_query__WEBPACK_IMPORTED_MODULE_7__), _core_quantum__WEBPACK_IMPORTED_MODULE_9__), _core_surge__WEBPACK_IMPORTED_MODULE_10__), _components_infinity_list__WEBPACK_IMPORTED_MODULE_12__), { render: _core_renderer__WEBPACK_IMPORTED_MODULE_2__.render, \n // MULAN INSIGHT: Branded Logging\n log: (msg, ...args) => {\n console.log(`%c[MulanJS]%c ${msg}`, \"color: #ff3e00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n }, warn: (msg, ...args) => {\n console.warn(`%c[MulanJS]%c ${msg}`, \"color: #ffcc00; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n }, error: (msg, ...args) => {\n console.error(`%c[MulanJS]%c ${msg}`, \"color: #ff0000; font-weight: bold; background: #222; padding: 2px 4px; border-radius: 3px;\", \"\", ...args);\n } });\n// Security: Freeze the object to prevent runtime tampering\nObject.freeze(Mulan);\nObject.freeze(Mulan.Security);\n// MULAN INSIGHT: Initialize Global Registry\nif (typeof window !== 'undefined') {\n window.__MULAN_INSIGHT__ = window.__MULAN_INSIGHT__ || { components: new Map() };\n // MULAN INSIGHT: HMR Support\n window.__MULAN_REFRESH__ = () => {\n var _a;\n const components = (_a = window.__MULAN_INSIGHT__) === null || _a === void 0 ? void 0 : _a.components;\n if (components) {\n components.forEach((comp) => {\n if (comp && typeof comp.update === 'function') {\n // Force refresh\n comp.update();\n }\n });\n }\n };\n}\nif (typeof window !== 'undefined') {\n window.Mulan = Mulan;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Mulan);\n\n\n//# sourceURL=webpack://Mulan/./src/index.ts?\n}");
120
130
 
121
131
  /***/ },
122
132
 
@@ -2,6 +2,7 @@
2
2
  * Mulan Quantum (ASTR-Q+) Core
3
3
  * Advanced Simulation Engine for multi-qubit registers and entanglement.
4
4
  */
5
+ export declare let activeControls: number[];
5
6
  export interface Amplitude {
6
7
  re: number;
7
8
  im: number;
@@ -48,3 +49,30 @@ export declare function muTeleport(reg: any, msgIdx: number, ancillaIdx: number,
48
49
  * @returns 0 or 1
49
50
  */
50
51
  export declare function muMeasure(reg: any, target?: number): number;
52
+ /**
53
+ * Quantum Loop: Parallel Execution
54
+ * Applies a gate to multiple qubits "simultaneously" (in simulation steps).
55
+ * Ideal for initialization (Hadamard Transform) or global operations.
56
+ * @param reg Quantum Register
57
+ * @param qubits Array of qubit indices
58
+ * @param gate Gate type to apply (e.g. 'H', 'X')
59
+ */
60
+ export declare function muParallel(reg: any, qubits: number[], gate: GateType): void;
61
+ /**
62
+ * Applies a block of operations controlled by specific qubits.
63
+ * Enables "Quantum If/Else".
64
+ */
65
+ export declare function muControl(reg: any, controlQubit: number, inverse: boolean, block: () => void): void;
66
+ /**
67
+ * Quantum Switch: conditional Logic on Superposition
68
+ * Executes different logic branches based on the state of control qubits.
69
+ * Because the register can be in a superposition of states (e.g. |0> + |1>),
70
+ * MULTIPLE branches can execute effectively simultaneously on different subspaces.
71
+ *
72
+ * @param reg Quantum Register
73
+ * @param controlQubit The qubit controlling the switch (Single control for v1)
74
+ * @param cases Object mapping state (0 or 1) to a function executing quantum operations
75
+ */
76
+ export declare function muSwitch(reg: any, controlQubit: number, cases: {
77
+ [key: number]: () => void;
78
+ }): void;
@@ -1,14 +1,14 @@
1
1
  export declare function useQuery<T>(queryFn: () => Promise<T>, options?: {
2
2
  enabled?: boolean;
3
3
  }): {
4
+ readonly data: T | null;
5
+ readonly isLoading: boolean;
6
+ readonly error: any;
4
7
  refetch: () => Promise<void>;
5
- data: T | null;
6
- isLoading: boolean;
7
- error: any;
8
8
  };
9
9
  export declare function useMutation<T, A = void>(mutationFn: (args: A) => Promise<T>): {
10
+ readonly data: T | null;
11
+ readonly isLoading: boolean;
12
+ readonly error: any;
10
13
  mutate: (args: A) => Promise<T>;
11
- data: T | null;
12
- isLoading: boolean;
13
- error: any;
14
14
  };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Mulan Surge (ASTR-S)
3
+ * High-performance classical iteration and parallel processing engine.
4
+ */
5
+ export interface BurstOptions {
6
+ chunkSize?: number;
7
+ timeout?: number;
8
+ onProgress?: (progress: number) => void;
9
+ }
10
+ /**
11
+ * muBurst - Adaptive Non-blocking Iterator
12
+ * Processes large arrays in batches within a frame budget (typically 8-16ms)
13
+ * to keep the UI responsive while executing at near-native loop speeds.
14
+ */
15
+ export declare function muBurst<T>(array: T[], callback: (item: T, index: number) => void, options?: BurstOptions): Promise<void>;
16
+ /**
17
+ * muSurge - Truly Parallel Execution
18
+ * Distributes work across CPU cores using Web Workers.
19
+ * Logic must be serializable.
20
+ */
21
+ export declare function muSurge<T, R>(array: T[], taskFn: string | ((item: T) => R), onProgress?: (p: number) => void): Promise<R[]>;
@@ -8,6 +8,7 @@ export * from './core/hooks';
8
8
  export * from './core/query';
9
9
  export * from './core/vault';
10
10
  export * from './core/quantum';
11
+ export * from './core/surge';
11
12
  export * from './components/bloch-sphere';
12
13
  export * from './components/infinity-list';
13
14
  import { reactive, effect } from './core/reactive';
@@ -17,6 +18,7 @@ import { MuStore } from './store/index';
17
18
  import { Security } from './security/sanitizer';
18
19
  import { render } from './core/renderer';
19
20
  import * as Quantum from './core/quantum';
21
+ import * as Surge from './core/surge';
20
22
  import * as InfinityList from './components/infinity-list';
21
23
  declare const Mulan: {
22
24
  render: typeof render;
@@ -24,6 +26,8 @@ declare const Mulan: {
24
26
  warn: (msg: string, ...args: any[]) => void;
25
27
  error: (msg: string, ...args: any[]) => void;
26
28
  MuInfinity: typeof InfinityList.MuInfinity;
29
+ muBurst<T>(array: T[], callback: (item: T, index: number) => void, options?: Surge.BurstOptions): Promise<void>;
30
+ muSurge<T, R>(array: T[], taskFn: string | ((item: T) => R), onProgress?: (p: number) => void): Promise<R[]>;
27
31
  muRegister(n: number): any;
28
32
  muQubit(initial?: 0 | 1): any;
29
33
  muGate(reg: any, type: Quantum.GateType, target?: number, control?: number | number[]): void;
@@ -31,19 +35,25 @@ declare const Mulan: {
31
35
  muEntangle(reg: any, i: number, j: number): void;
32
36
  muTeleport(reg: any, msgIdx: number, ancillaIdx: number, targetIdx: number): void;
33
37
  muMeasure(reg: any, target?: number): number;
38
+ muParallel(reg: any, qubits: number[], gate: Quantum.GateType): void;
39
+ muControl(reg: any, controlQubit: number, inverse: boolean, block: () => void): void;
40
+ muSwitch(reg: any, controlQubit: number, cases: {
41
+ [key: number]: () => void;
42
+ }): void;
43
+ activeControls: number[];
34
44
  useQuery<T>(queryFn: () => Promise<T>, options?: {
35
45
  enabled?: boolean;
36
46
  }): {
47
+ readonly data: T | null;
48
+ readonly isLoading: boolean;
49
+ readonly error: any;
37
50
  refetch: () => Promise<void>;
38
- data: T | null;
39
- isLoading: boolean;
40
- error: any;
41
51
  };
42
52
  useMutation<T, A = void>(mutationFn: (args: A) => Promise<T>): {
53
+ readonly data: T | null;
54
+ readonly isLoading: boolean;
55
+ readonly error: any;
43
56
  mutate: (args: A) => Promise<T>;
44
- data: T | null;
45
- isLoading: boolean;
46
- error: any;
47
57
  };
48
58
  setCurrentInstance(instance: any): void;
49
59
  getCurrentInstance(): any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mulanjs/mulanjs",
3
- "version": "1.0.1-dev.20260219183505",
3
+ "version": "1.0.1-dev.20260220104511",
4
4
  "description": "A powerful, secure, and enterprise-grade JavaScript framework.",
5
5
  "main": "dist/mulan.js",
6
6
  "module": "dist/mulan.esm.js",