react-state-basis 0.1.2 β†’ 0.1.3

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
@@ -1,5 +1,10 @@
1
- [![npm version](https://badge.fury.io/js/react-state-basis.svg)](https://www.npmjs.com/package/react-state-basis)
1
+ <p align="center">
2
+ <img src="./assets/logo.png" width="300" alt="Basis Logo">
3
+ </p>
4
+
5
+ [![npm version](https://img.shields.io/npm/v/react-state-basis.svg?style=flat-square)](https://www.npmjs.com/package/react-state-basis)
2
6
  [![View on GitHub](https://img.shields.io/badge/View_Documentation-GitHub-black?logo=github)](https://github.com/liovic/react-state-basis#readme)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)
3
8
 
4
9
  # πŸ“ REACT-STATE-BASIS
5
10
  ### **Behavioral State Analysis for React**
@@ -214,7 +219,9 @@ In pure Linear Algebra, proving linear independence for $N$ variables requires s
214
219
 
215
220
  To maintain real-time performance, React-State-Basis uses **Cosine Similarity** as a high-speed heuristic ($O(D)$, where $D$ is the vector dimension) to detect **pairwise collinearity**:
216
221
 
217
- $$ \text{similarity} = \cos(\theta) = \frac{\mathbf{A} \cdot \mathbf{B}}{\Vert \mathbf{A} \Vert \Vert \mathbf{B} \Vert} $$
222
+ ```math
223
+ \text{similarity} = \cos(\theta) = \frac{\mathbf{A} \cdot \mathbf{B}}{\Vert \mathbf{A} \Vert \Vert \mathbf{B} \Vert}
224
+ ```
218
225
 
219
226
  If $\cos(\theta) \approx 1.00$, the vectors are collinear (linearly dependent), and the engine triggers a redundancy alert.
220
227
 
@@ -438,6 +445,37 @@ When in doubt, it surfaces potential issues so developers can make informed deci
438
445
 
439
446
  Think of it as an architectural smoke detector-not a fire marshal.
440
447
 
448
+ ---
449
+
450
+ ## πŸ—ΊοΈ Roadmap & Future Improvements (v0.2.0+)
451
+
452
+ **React-State-Basis** is a solo-developed diagnostic infrastructure. I am currently working on the following features to enhance the "Zero-Friction" developer experience:
453
+
454
+ ### 1. ⚑ Hybrid Production Strategy
455
+ I am moving towards a "Set and Forget" model to eliminate manual import management:
456
+ * **Production Pass-through:** A production-mode toggle that bypasses the auditing logic and maps directly to React core hooks with zero overhead.
457
+ * **Tree-Shaking Optimization:** Ensuring the Linear Algebra engine and Circuit Breaker logic are physically excluded from production bundles via conditional exports.
458
+
459
+ ### 2. πŸ› οΈ CLI "Clean-Exit" Utility
460
+ For engineers who prefer a purist approach or want to remove the dependency after a refactor phase:
461
+ * **Automated Codemod:** I plan to release `npx rsb-clean`, a utility to automatically revert all `react-state-basis` imports back to standard `react` imports across your entire project.
462
+ * **One-Command Cleanup:** Ensures a zero-overhead production build without manual searching and replacing.
463
+
464
+ ### 3. πŸ“‰ Dependency Topology Visualizer
465
+ I want to transform the "Audit Report" from console logs into a visual map:
466
+ * **Redundancy Clusters:** A 2D canvas showing "entangled" states as physical clusters.
467
+ * **Vector Distance Mapping:** A visual representation of how close your state variables are to being collinear.
468
+
469
+
470
+
471
+ ### 4. πŸ§ͺ CI/CD Integration
472
+ * **Test-Health Reporting:** Integration with Vitest/Jest to automatically fail builds if a "Dimension Collapse" or "Infinite Loop" is detected during automated test runs.
473
+ * **Architectural KPI tracking:** Monitoring your **System Efficiency Score** over time as the codebase grows.
474
+
475
+ ---
476
+
477
+ ### πŸ“¬ Get Involved
478
+ If you have an idea for a mathematical heuristic or a DX improvement, feel free to open an issue or a PR.
441
479
 
442
480
  ---
443
481
  *Developed by LP*
package/dist/index.d.mts CHANGED
@@ -20,8 +20,8 @@ declare const __testEngine__: {
20
20
  };
21
21
 
22
22
  declare function useState<T>(initialValue: T, label?: string): [T, Dispatch<SetStateAction<T>>];
23
- declare function useMemo<T>(factory: () => T, deps: DependencyList | undefined, label?: string): T;
24
- declare function useEffect(effect: EffectCallback, deps?: DependencyList, label?: string): void;
23
+ declare function useMemo<T>(factory: () => T, depsOrLabel?: DependencyList | string, label?: string): T;
24
+ declare function useEffect(effect: EffectCallback, depsOrLabel?: DependencyList | string, label?: string): void;
25
25
  declare function useReducer<S, A, I>(reducer: Reducer<S, A>, initialArg: I & S, init?: any, label?: string): [S, Dispatch<A>];
26
26
  declare function createContext<T>(defaultValue: T, label?: string): Context<T>;
27
27
  declare function useContext<T>(context: Context<T>): T;
package/dist/index.d.ts CHANGED
@@ -20,8 +20,8 @@ declare const __testEngine__: {
20
20
  };
21
21
 
22
22
  declare function useState<T>(initialValue: T, label?: string): [T, Dispatch<SetStateAction<T>>];
23
- declare function useMemo<T>(factory: () => T, deps: DependencyList | undefined, label?: string): T;
24
- declare function useEffect(effect: EffectCallback, deps?: DependencyList, label?: string): void;
23
+ declare function useMemo<T>(factory: () => T, depsOrLabel?: DependencyList | string, label?: string): T;
24
+ declare function useEffect(effect: EffectCallback, depsOrLabel?: DependencyList | string, label?: string): void;
25
25
  declare function useReducer<S, A, I>(reducer: Reducer<S, A>, initialArg: I & S, init?: any, label?: string): [S, Dispatch<A>];
26
26
  declare function createContext<T>(defaultValue: T, label?: string): Context<T>;
27
27
  declare function useContext<T>(context: Context<T>): T;
package/dist/index.js CHANGED
@@ -347,23 +347,27 @@ function useState(initialValue, label) {
347
347
  }, [effectiveLabel]);
348
348
  return [val, setter];
349
349
  }
350
- function useMemo(factory, deps, label) {
351
- const effectiveLabel = label || "anonymous_projection";
350
+ function useMemo(factory, depsOrLabel, label) {
351
+ const isLabelAsSecondArg = typeof depsOrLabel === "string";
352
+ const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
353
+ const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_projection";
352
354
  (0, import_react.useEffect)(() => {
353
355
  if (window._basis_debug !== false) {
354
356
  console.log(`%c [Basis] Valid Projection: "${effectiveLabel}" `, "color: #2ecc71; font-weight: bold;");
355
357
  }
356
358
  }, [effectiveLabel]);
357
- return (0, import_react.useMemo)(factory, deps || []);
359
+ return (0, import_react.useMemo)(factory, actualDeps || []);
358
360
  }
359
- function useEffect(effect, deps, label) {
360
- const effectiveLabel = label || "anonymous_effect";
361
+ function useEffect(effect, depsOrLabel, label) {
362
+ const isLabelAsSecondArg = typeof depsOrLabel === "string";
363
+ const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
364
+ const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_effect";
361
365
  (0, import_react.useEffect)(() => {
362
366
  beginEffectTracking(effectiveLabel);
363
367
  const cleanup = effect();
364
368
  endEffectTracking();
365
369
  return cleanup;
366
- }, deps);
370
+ }, actualDeps);
367
371
  }
368
372
  function useReducer(reducer, initialArg, init, label) {
369
373
  const effectiveLabel = typeof init === "string" ? init : label || "anonymous_reducer";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/core/logger.ts","../src/core/math.ts","../src/core/constants.ts","../src/engine.ts","../src/hooks.ts","../src/context.tsx"],"sourcesContent":["// src/index.ts\n\nexport * from './engine';\nexport * from './hooks';\nexport * from './context';\nexport type { \n ReactNode, \n ReactElement, \n FC, \n PropsWithChildren, \n Context,\n Dispatch,\n SetStateAction,\n Reducer,\n CSSProperties\n} from 'react';","// src/core/logger.ts\n\nconst STYLES = {\n // Brand Colors\n basis: \"background: #6c5ce7; color: white; font-weight: bold; padding: 2px 6px; border-radius: 3px;\",\n version: \"background: #a29bfe; color: #2d3436; padding: 2px 6px; border-radius: 3px; margin-left: -4px;\",\n\n // Headers\n headerRed: \"background: #d63031; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerBlue: \"background: #0984e3; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerGreen: \"background: #00b894; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n\n // Elements\n label: \"background: #dfe6e9; color: #2d3436; padding: 0 4px; border-radius: 3px; font-family: monospace; font-weight: bold; border: 1px solid #b2bec3;\",\n location: \"color: #0984e3; font-family: monospace; font-weight: bold;\",\n math: \"color: #636e72; font-style: italic; font-family: serif;\",\n\n // Code Block\n codeBlock: `\n background: #1e1e1e; \n color: #9cdcfe; \n padding: 8px 12px; \n display: block; \n margin: 4px 0; \n border-left: 3px solid #00b894; \n font-family: 'Fira Code', monospace; \n line-height: 1.4; \n border-radius: 0 3px 3px 0;\n `,\n\n // Highlights\n dim: \"color: #e84393; font-weight: bold;\",\n bold: \"font-weight: bold;\"\n};\n\nconst parseLabel = (label: string) => {\n const parts = label.split(' -> ');\n return {\n file: parts[0] || \"Unknown\",\n name: parts[1] || label\n };\n};\n\nexport const displayBootLog = (windowSize: number) => {\n console.log(\n `%cBasis%cAuditor v0.1.0%c Monitoring State Space | Window: ${windowSize} ticks`,\n STYLES.basis,\n STYLES.version,\n \"color: #636e72; font-style: italic; margin-left: 8px;\"\n );\n};\n\nexport const displayRedundancyAlert = (labelA: string, labelB: string, sim: number, totalDimensions: number) => {\n const infoA = parseLabel(labelA);\n const infoB = parseLabel(labelB);\n const isCrossFile = infoA.file !== infoB.file;\n\n console.group(`%c πŸ“ BASIS | DIMENSION COLLAPSE DETECTED `, STYLES.headerRed);\n\n console.log(`%cπŸ“ Location: %c${isCrossFile ? `${infoA.file} & ${infoB.file}` : infoA.file}`, STYLES.bold, STYLES.location);\n\n console.log(\n `%cAnalysis:%c Vectors %c${infoA.name}%c and %c${infoB.name}%c are collinear (redundant).`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\"\n );\n\n console.log(\n `%cHow to fix:%c Project %c${infoB.name}%c as a derived value:\n%c// πŸ› οΈ Basis Fix: Remove useState, use useMemo\nconst ${infoB.name} = useMemo(() => deriveFrom(${infoA.name}), [${infoA.name}]);%c`,\n \"color: #00b894; font-weight: bold;\", \"\",\n \"color: #e84393; font-weight: bold;\", \"\",\n STYLES.codeBlock, \"\"\n );\n\n console.groupCollapsed(`%c πŸ”¬ Proof Details `, \"color: #636e72; font-size: 10px; cursor: pointer;\");\n console.table({\n \"Similarity\": `${(sim * 100).toFixed(2)}%`,\n \"Linear Dependency\": \"TRUE\",\n \"Rank\": totalDimensions - 1\n });\n console.groupEnd();\n console.groupEnd();\n};\n\nexport const displayCausalHint = (targetLabel: string, sourceLabel: string) => {\n const target = parseLabel(targetLabel);\n const source = parseLabel(sourceLabel);\n\n const isCrossFile = target.file !== source.file;\n const locationPath = isCrossFile\n ? `${source.file} βž” ${target.file}`\n : target.file;\n\n console.groupCollapsed(`%c πŸ’‘ BASIS | CAUSALITY (Sequential Update) `, STYLES.headerBlue);\n\n console.log(`%cπŸ“ Location: %c${locationPath}`, STYLES.bold, STYLES.location);\n\n console.log(\n `%cSequence:%c %c${source.name}%c βž” Effect βž” %c${target.name}%c`,\n STYLES.bold, \"\",\n STYLES.label, \"\",\n STYLES.label, \"\"\n );\n\n console.log(\n `%cObservation:%c Variable %c${target.name}%c is being manually synchronized.\nThis creates a %c\"Double Render Cycle\"%c.`,\n STYLES.bold, \"\", STYLES.label, \"\",\n \"color: #d63031; font-weight: bold;\", \"\"\n );\n\n console.log(\n `%cHow to fix:%c Use %cuseMemo%c to calculate %c${target.name}%c during render:\n%cconst ${target.name} = useMemo(() => computeFrom(${source.name.includes('effect') ? 'source' : source.name}), [${source.name.includes('effect') ? 'source' : source.name}]);%c`,\n \"color: #00b894; font-weight: bold;\", \"\",\n \"color: #0984e3; font-weight: bold;\", \"\",\n \"color: #e84393; font-weight: bold;\", \"\",\n STYLES.codeBlock, \"\"\n );\n\n console.groupEnd();\n};\n\nexport const displayInfiniteLoop = (label: string) => {\n const info = parseLabel(label);\n console.group(`%c πŸ›‘ BASIS CRITICAL | CIRCUIT BREAKER `, STYLES.headerRed);\n console.error(\n `Infinite oscillation detected on: %c${info.name}%c\nExecution halted to prevent browser thread lock. Check your dependency arrays.`,\n \"color: white; background: #d63031; padding: 2px 4px; border-radius: 3px;\", \"\"\n );\n console.groupEnd();\n};\n\nexport const displayHealthReport = (\n history: Map<string, number[]>,\n similarityFn: (A: number[], B: number[]) => number,\n threshold: number\n) => {\n const entries = Array.from(history.entries());\n const totalVars = entries.length;\n if (totalVars === 0) return;\n\n const clusters: string[][] = [];\n const processed = new Set<string>();\n let independentCount = 0;\n\n entries.forEach(([labelA, vecA]) => {\n if (processed.has(labelA)) return;\n\n const currentCluster = [labelA];\n processed.add(labelA);\n\n entries.forEach(([labelB, vecB]) => {\n if (labelA === labelB || processed.has(labelB)) return;\n\n const sim = similarityFn(vecA, vecB);\n if (sim > threshold) {\n currentCluster.push(labelB);\n processed.add(labelB);\n }\n });\n\n if (currentCluster.length > 1) {\n clusters.push(currentCluster);\n } else {\n independentCount++;\n }\n });\n\n const systemRank = independentCount + clusters.length;\n const efficiency = (systemRank / totalVars) * 100;\n\n console.group(`%c πŸ“Š BASIS | SYSTEM HEALTH REPORT `, STYLES.headerGreen);\n\n console.log(\n `%cBasis Efficiency: %c${efficiency.toFixed(1)}% %c(Rank: ${systemRank}/${totalVars})`,\n STYLES.bold,\n `color: ${efficiency > 85 ? '#00b894' : '#d63031'}; font-size: 16px; font-weight: bold;`,\n \"color: #636e72; font-style: italic;\"\n );\n\n if (clusters.length > 0) {\n console.log(`%cDetected ${clusters.length} Redundancy Clusters:`, \"font-weight: bold; color: #e17055; margin-top: 10px;\");\n\n clusters.forEach((cluster, idx) => {\n const names = cluster.map(l => parseLabel(l).name).join(' ⟷ ');\n console.log(` %c${idx + 1}%c ${names}`, \"background: #e17055; color: white; border-radius: 50%; padding: 0 5px;\", \"font-family: monospace;\");\n });\n } else {\n console.log(\"%c✨ All state variables are linearly independent. Your Basis is optimal.\", \"color: #00b894; font-weight: bold; margin-top: 10px;\");\n }\n\n if (totalVars > 0 && totalVars < 15) {\n console.groupCollapsed(\"%cView Full Correlation Matrix\", \"color: #636e72; font-size: 11px;\");\n const matrix: any = {};\n entries.forEach(([labelA]) => {\n const nameA = parseLabel(labelA).name;\n matrix[nameA] = {};\n entries.forEach(([labelB]) => {\n const nameB = parseLabel(labelB).name;\n const sim = similarityFn(history.get(labelA)!, history.get(labelB)!);\n matrix[nameA][nameB] = sim > threshold ? `❌ ${(sim * 100).toFixed(0)}%` : `βœ…`;\n });\n });\n console.table(matrix);\n console.groupEnd();\n } else {\n console.log(\"%c[Note] Matrix hidden due to high dimensionality. Focus on clusters above.\", \"color: #636e72; font-size: 10px; font-style: italic;\");\n }\n\n console.groupEnd();\n};","// src/core/math.ts\n\nexport const calculateCosineSimilarity = (A: number[], B: number[]): number => {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < A.length; i++) {\n dot += A[i] * B[i];\n magA += A[i] * A[i];\n magB += B[i] * B[i];\n }\n return magA && magB ? dot / (Math.sqrt(magA) * Math.sqrt(magB)) : 0;\n};","// src/core/constants.ts\n\nexport const WINDOW_SIZE = 50;\nexport const SIMILARITY_THRESHOLD = 0.88;\nexport const LOOP_THRESHOLD = 25;\nexport const LOOP_WINDOW_MS = 500;\nexport const ANALYSIS_INTERVAL = 5;","// src/engine.ts\n\nimport * as UI from './core/logger';\nimport { calculateCosineSimilarity } from './core/math';\nimport { \n WINDOW_SIZE, \n SIMILARITY_THRESHOLD, \n LOOP_THRESHOLD, \n LOOP_WINDOW_MS, \n ANALYSIS_INTERVAL \n} from './core/constants';\n\nexport const history = new Map<string, number[]>();\nexport const currentTickBatch = new Set<string>();\nlet updateLog: { label: string; ts: number }[] = [];\nlet currentEffectSource: string | null = null; \nlet tick = 0;\nlet isBatching = false;\n\nUI.displayBootLog(WINDOW_SIZE);\n\nconst analyzeBasis = () => {\n const entries = Array.from(history.entries());\n if (entries.length < 2) return;\n\n entries.forEach(([labelA, vecA], i) => {\n entries.slice(i + 1).forEach(([labelB, vecB]) => {\n const sim = calculateCosineSimilarity(vecA, vecB);\n \n if (sim > SIMILARITY_THRESHOLD) {\n UI.displayRedundancyAlert(labelA, labelB, sim, history.size);\n }\n });\n });\n};\n\nexport const printBasisHealthReport = (threshold = 0.5) => {\n UI.displayHealthReport(history, calculateCosineSimilarity, threshold);\n};\n\nexport const beginEffectTracking = (label: string) => { currentEffectSource = label; };\nexport const endEffectTracking = () => { currentEffectSource = null; };\n\nexport const registerVariable = (label: string) => {\n if (!history.has(label)) {\n history.set(label, new Array(WINDOW_SIZE).fill(0));\n }\n};\n\nexport const unregisterVariable = (label: string) => {\n history.delete(label);\n};\n\nexport const recordUpdate = (label: string): boolean => {\n const now = Date.now();\n\n updateLog.push({ label, ts: now });\n updateLog = updateLog.filter(e => now - e.ts < LOOP_WINDOW_MS);\n if (updateLog.filter(e => e.label === label).length > LOOP_THRESHOLD) {\n UI.displayInfiniteLoop(label);\n return false;\n }\n\n if (currentEffectSource && currentEffectSource !== label) {\n UI.displayCausalHint(label, currentEffectSource);\n }\n\n currentTickBatch.add(label);\n\n if (!isBatching) {\n isBatching = true;\n setTimeout(() => {\n tick++;\n history.forEach((vec, l) => {\n vec.shift();\n vec.push(currentTickBatch.has(l) ? 1 : 0);\n });\n\n currentTickBatch.clear();\n isBatching = false;\n \n if (tick % ANALYSIS_INTERVAL === 0) {\n analyzeBasis();\n }\n }, 20);\n }\n\n return true;\n};\n\nif (typeof window !== 'undefined') {\n (window as any).printBasisReport = printBasisHealthReport;\n}\n\nexport const __testEngine__ = {\n history,\n currentTickBatch,\n registerVariable,\n recordUpdate,\n printBasisHealthReport,\n beginEffectTracking,\n endEffectTracking,\n};","// src/hooks.ts\n\nimport { \n useState as reactUseState, \n useEffect as reactUseEffect, \n useMemo as reactUseMemo, \n useReducer as reactUseReducer,\n useContext as reactUseContext,\n createContext as reactCreateContext,\n useCallback \n} from 'react';\n\nimport type { \n Reducer, \n Context,\n Dispatch,\n SetStateAction,\n DependencyList,\n EffectCallback\n} from 'react';\n\nimport { \n registerVariable, \n unregisterVariable, \n recordUpdate, \n beginEffectTracking, \n endEffectTracking \n} from './engine';\n\nimport * as engine from './engine';\n\nexport type { \n ReactNode, \n FC, \n PropsWithChildren, \n Context, \n ReactElement,\n Dispatch,\n SetStateAction,\n Reducer,\n CSSProperties,\n EffectCallback,\n DependencyList\n} from 'react';\n\nexport function useState<T>(initialValue: T, label?: string): [T, Dispatch<SetStateAction<T>>] {\n const [val, setVal] = reactUseState(initialValue);\n const effectiveLabel = label || 'anonymous_state';\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const setter = useCallback((newValue: SetStateAction<T>) => {\n if (recordUpdate(effectiveLabel)) {\n setVal(newValue);\n }\n }, [effectiveLabel]);\n\n return [val, setter];\n}\n\nexport function useMemo<T>(factory: () => T, deps: DependencyList | undefined, label?: string): T {\n const effectiveLabel = label || 'anonymous_projection';\n \n reactUseEffect(() => {\n if ((window as any)._basis_debug !== false) {\n console.log(`%c [Basis] Valid Projection: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\");\n }\n }, [effectiveLabel]);\n\n return reactUseMemo(factory, deps || []);\n}\n\nexport function useEffect(effect: EffectCallback, deps?: DependencyList, label?: string) {\n const effectiveLabel = label || 'anonymous_effect';\n\n reactUseEffect(() => {\n beginEffectTracking(effectiveLabel);\n const cleanup = effect();\n endEffectTracking();\n return cleanup;\n }, deps);\n}\n\nexport function useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: I & S,\n init?: any,\n label?: string\n): [S, Dispatch<A>] {\n\n const effectiveLabel = typeof init === 'string' ? init : (label || 'anonymous_reducer');\n\n const reactInit = typeof init === 'function' ? init : undefined;\n\n const [state, dispatch] = reactUseReducer(reducer, initialArg, reactInit);\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const basisDispatch = useCallback((action: A) => {\n if (recordUpdate(effectiveLabel)) {\n dispatch(action);\n }\n }, [effectiveLabel]);\n\n return [state, basisDispatch];\n}\n\nexport function createContext<T>(defaultValue: T, label?: string): Context<T> {\n const context = reactCreateContext(defaultValue);\n if (label) {\n (context as any)._basis_label = label;\n }\n return context;\n}\n\nexport function useContext<T>(context: Context<T>): T {\n return reactUseContext(context);\n}\n\nexport const __test__ = {\n registerVariable,\n unregisterVariable,\n recordUpdate,\n beginEffectTracking,\n endEffectTracking,\n history: (engine as any).history,\n currentTickBatch: (engine as any).currentTickBatch\n};","// src/context.tsx\n\nimport React, { createContext, useContext, ReactNode } from 'react';\n\nconst BasisContext = createContext({ debug: false });\n\ninterface BasisProviderProps {\n children: ReactNode;\n debug?: boolean;\n}\n\nexport const BasisProvider: React.FC<BasisProviderProps> = ({ children, debug = true }) => {\n if (typeof window !== 'undefined') {\n (window as any)._basis_debug = debug;\n }\n\n return (\n <BasisContext.Provider value={{ debug }}>\n {children}\n {debug && (\n <div style={{ \n position: 'fixed', bottom: 10, right: 10, background: 'black', color: '#0f0', \n padding: '5px 10px', fontSize: '10px', fontFamily: 'monospace', \n border: '1px solid #0f0', zIndex: 99999, borderRadius: '4px', pointerEvents: 'none'\n }}>\n BASIS_ENGINE: ACTIVE\n </div>\n )}\n </BasisContext.Provider>\n );\n};\n\nexport const useBasisConfig = () => useContext(BasisContext);"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,IAAM,SAAS;AAAA;AAAA,EAEb,OAAO;AAAA,EACP,SAAS;AAAA;AAAA,EAGT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,aAAa;AAAA;AAAA,EAGb,OAAO;AAAA,EACP,UAAU;AAAA,EACV,MAAM;AAAA;AAAA,EAGN,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaX,KAAK;AAAA,EACL,MAAM;AACR;AAEA,IAAM,aAAa,CAAC,UAAkB;AACpC,QAAM,QAAQ,MAAM,MAAM,MAAM;AAChC,SAAO;AAAA,IACL,MAAM,MAAM,CAAC,KAAK;AAAA,IAClB,MAAM,MAAM,CAAC,KAAK;AAAA,EACpB;AACF;AAEO,IAAM,iBAAiB,CAAC,eAAuB;AACpD,UAAQ;AAAA,IACN,8DAA8D,UAAU;AAAA,IACxE,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,EACF;AACF;AAEO,IAAM,yBAAyB,CAAC,QAAgB,QAAgB,KAAa,oBAA4B;AAC9G,QAAM,QAAQ,WAAW,MAAM;AAC/B,QAAM,QAAQ,WAAW,MAAM;AAC/B,QAAM,cAAc,MAAM,SAAS,MAAM;AAEzC,UAAQ,MAAM,qDAA8C,OAAO,SAAS;AAE5E,UAAQ,IAAI,2BAAoB,cAAc,GAAG,MAAM,IAAI,MAAM,MAAM,IAAI,KAAK,MAAM,IAAI,IAAI,OAAO,MAAM,OAAO,QAAQ;AAE1H,UAAQ;AAAA,IACN,2BAA2B,MAAM,IAAI,YAAY,MAAM,IAAI;AAAA,IAC3D,OAAO;AAAA,IAAM;AAAA,IAAI,OAAO;AAAA,IAAO;AAAA,IAAI,OAAO;AAAA,IAAO;AAAA,EACnD;AAEA,UAAQ;AAAA,IACN,6BAA6B,MAAM,IAAI;AAAA;AAAA,QAEnC,MAAM,IAAI,+BAA+B,MAAM,IAAI,OAAO,MAAM,IAAI;AAAA,IACxE;AAAA,IAAsC;AAAA,IACtC;AAAA,IAAsC;AAAA,IACtC,OAAO;AAAA,IAAW;AAAA,EACpB;AAEA,UAAQ,eAAe,+BAAwB,mDAAmD;AAClG,UAAQ,MAAM;AAAA,IACZ,cAAc,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC;AAAA,IACvC,qBAAqB;AAAA,IACrB,QAAQ,kBAAkB;AAAA,EAC5B,CAAC;AACD,UAAQ,SAAS;AACjB,UAAQ,SAAS;AACnB;AAEO,IAAM,oBAAoB,CAAC,aAAqB,gBAAwB;AAC7E,QAAM,SAAS,WAAW,WAAW;AACrC,QAAM,SAAS,WAAW,WAAW;AAErC,QAAM,cAAc,OAAO,SAAS,OAAO;AAC3C,QAAM,eAAe,cACjB,GAAG,OAAO,IAAI,WAAM,OAAO,IAAI,KAC/B,OAAO;AAEX,UAAQ,eAAe,uDAAgD,OAAO,UAAU;AAExF,UAAQ,IAAI,2BAAoB,YAAY,IAAI,OAAO,MAAM,OAAO,QAAQ;AAE5E,UAAQ;AAAA,IACN,mBAAmB,OAAO,IAAI,6BAAmB,OAAO,IAAI;AAAA,IAC5D,OAAO;AAAA,IAAM;AAAA,IACb,OAAO;AAAA,IAAO;AAAA,IACd,OAAO;AAAA,IAAO;AAAA,EAChB;AAEA,UAAQ;AAAA,IACN,+BAA+B,OAAO,IAAI;AAAA;AAAA,IAE1C,OAAO;AAAA,IAAM;AAAA,IAAI,OAAO;AAAA,IAAO;AAAA,IAC/B;AAAA,IAAsC;AAAA,EACxC;AAEA,UAAQ;AAAA,IACN,kDAAkD,OAAO,IAAI;AAAA,UACvD,OAAO,IAAI,gCAAgC,OAAO,KAAK,SAAS,QAAQ,IAAI,WAAW,OAAO,IAAI,OAAO,OAAO,KAAK,SAAS,QAAQ,IAAI,WAAW,OAAO,IAAI;AAAA,IACtK;AAAA,IAAsC;AAAA,IACtC;AAAA,IAAsC;AAAA,IACtC;AAAA,IAAsC;AAAA,IACtC,OAAO;AAAA,IAAW;AAAA,EACpB;AAEA,UAAQ,SAAS;AACnB;AAEO,IAAM,sBAAsB,CAAC,UAAkB;AACpD,QAAM,OAAO,WAAW,KAAK;AAC7B,UAAQ,MAAM,kDAA2C,OAAO,SAAS;AACzE,UAAQ;AAAA,IACN,uCAAuC,KAAK,IAAI;AAAA;AAAA,IAEhD;AAAA,IAA4E;AAAA,EAC9E;AACA,UAAQ,SAAS;AACnB;AAEO,IAAM,sBAAsB,CACjCA,UACA,cACA,cACG;AACH,QAAM,UAAU,MAAM,KAAKA,SAAQ,QAAQ,CAAC;AAC5C,QAAM,YAAY,QAAQ;AAC1B,MAAI,cAAc,EAAG;AAErB,QAAM,WAAuB,CAAC;AAC9B,QAAM,YAAY,oBAAI,IAAY;AAClC,MAAI,mBAAmB;AAEvB,UAAQ,QAAQ,CAAC,CAAC,QAAQ,IAAI,MAAM;AAClC,QAAI,UAAU,IAAI,MAAM,EAAG;AAE3B,UAAM,iBAAiB,CAAC,MAAM;AAC9B,cAAU,IAAI,MAAM;AAEpB,YAAQ,QAAQ,CAAC,CAAC,QAAQ,IAAI,MAAM;AAClC,UAAI,WAAW,UAAU,UAAU,IAAI,MAAM,EAAG;AAEhD,YAAM,MAAM,aAAa,MAAM,IAAI;AACnC,UAAI,MAAM,WAAW;AACnB,uBAAe,KAAK,MAAM;AAC1B,kBAAU,IAAI,MAAM;AAAA,MACtB;AAAA,IACF,CAAC;AAED,QAAI,eAAe,SAAS,GAAG;AAC7B,eAAS,KAAK,cAAc;AAAA,IAC9B,OAAO;AACL;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,aAAa,mBAAmB,SAAS;AAC/C,QAAM,aAAc,aAAa,YAAa;AAE9C,UAAQ,MAAM,8CAAuC,OAAO,WAAW;AAEvE,UAAQ;AAAA,IACN,yBAAyB,WAAW,QAAQ,CAAC,CAAC,cAAc,UAAU,IAAI,SAAS;AAAA,IACnF,OAAO;AAAA,IACP,UAAU,aAAa,KAAK,YAAY,SAAS;AAAA,IACjD;AAAA,EACF;AAEA,MAAI,SAAS,SAAS,GAAG;AACvB,YAAQ,IAAI,cAAc,SAAS,MAAM,yBAAyB,sDAAsD;AAExH,aAAS,QAAQ,CAAC,SAAS,QAAQ;AACjC,YAAM,QAAQ,QAAQ,IAAI,OAAK,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,UAAK;AAC7D,cAAQ,IAAI,MAAM,MAAM,CAAC,MAAM,KAAK,IAAI,0EAA0E,yBAAyB;AAAA,IAC7I,CAAC;AAAA,EACH,OAAO;AACL,YAAQ,IAAI,iFAA4E,sDAAsD;AAAA,EAChJ;AAEA,MAAI,YAAY,KAAK,YAAY,IAAI;AACnC,YAAQ,eAAe,kCAAkC,kCAAkC;AAC3F,UAAM,SAAc,CAAC;AACrB,YAAQ,QAAQ,CAAC,CAAC,MAAM,MAAM;AAC5B,YAAM,QAAQ,WAAW,MAAM,EAAE;AACjC,aAAO,KAAK,IAAI,CAAC;AACjB,cAAQ,QAAQ,CAAC,CAAC,MAAM,MAAM;AAC5B,cAAM,QAAQ,WAAW,MAAM,EAAE;AACjC,cAAM,MAAM,aAAaA,SAAQ,IAAI,MAAM,GAAIA,SAAQ,IAAI,MAAM,CAAE;AACnE,eAAO,KAAK,EAAE,KAAK,IAAI,MAAM,YAAY,WAAM,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;AAAA,MAC5E,CAAC;AAAA,IACH,CAAC;AACD,YAAQ,MAAM,MAAM;AACpB,YAAQ,SAAS;AAAA,EACnB,OAAO;AACL,YAAQ,IAAI,+EAA+E,sDAAsD;AAAA,EACnJ;AAEA,UAAQ,SAAS;AACnB;;;ACnNO,IAAM,4BAA4B,CAAC,GAAa,MAAwB;AAC7E,MAAI,MAAM,GAAG,OAAO,GAAG,OAAO;AAC9B,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,WAAO,EAAE,CAAC,IAAI,EAAE,CAAC;AACjB,YAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAClB,YAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,EACpB;AACA,SAAO,QAAQ,OAAO,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK;AACpE;;;ACRO,IAAM,cAAc;AACpB,IAAM,uBAAuB;AAC7B,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,oBAAoB;;;ACM1B,IAAM,UAAU,oBAAI,IAAsB;AAC1C,IAAM,mBAAmB,oBAAI,IAAY;AAChD,IAAI,YAA6C,CAAC;AAClD,IAAI,sBAAqC;AACzC,IAAI,OAAO;AACX,IAAI,aAAa;AAEd,eAAe,WAAW;AAE7B,IAAM,eAAe,MAAM;AACzB,QAAM,UAAU,MAAM,KAAK,QAAQ,QAAQ,CAAC;AAC5C,MAAI,QAAQ,SAAS,EAAG;AAExB,UAAQ,QAAQ,CAAC,CAAC,QAAQ,IAAI,GAAG,MAAM;AACrC,YAAQ,MAAM,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,IAAI,MAAM;AAC/C,YAAM,MAAM,0BAA0B,MAAM,IAAI;AAEhD,UAAI,MAAM,sBAAsB;AAC9B,QAAG,uBAAuB,QAAQ,QAAQ,KAAK,QAAQ,IAAI;AAAA,MAC7D;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAEO,IAAM,yBAAyB,CAAC,YAAY,QAAQ;AACzD,EAAG,oBAAoB,SAAS,2BAA2B,SAAS;AACtE;AAEO,IAAM,sBAAsB,CAAC,UAAkB;AAAE,wBAAsB;AAAO;AAC9E,IAAM,oBAAoB,MAAM;AAAE,wBAAsB;AAAM;AAE9D,IAAM,mBAAmB,CAAC,UAAkB;AACjD,MAAI,CAAC,QAAQ,IAAI,KAAK,GAAG;AACvB,YAAQ,IAAI,OAAO,IAAI,MAAM,WAAW,EAAE,KAAK,CAAC,CAAC;AAAA,EACnD;AACF;AAEO,IAAM,qBAAqB,CAAC,UAAkB;AACnD,UAAQ,OAAO,KAAK;AACtB;AAEO,IAAM,eAAe,CAAC,UAA2B;AACtD,QAAM,MAAM,KAAK,IAAI;AAErB,YAAU,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC;AACjC,cAAY,UAAU,OAAO,OAAK,MAAM,EAAE,KAAK,cAAc;AAC7D,MAAI,UAAU,OAAO,OAAK,EAAE,UAAU,KAAK,EAAE,SAAS,gBAAgB;AACpE,IAAG,oBAAoB,KAAK;AAC5B,WAAO;AAAA,EACT;AAEA,MAAI,uBAAuB,wBAAwB,OAAO;AACxD,IAAG,kBAAkB,OAAO,mBAAmB;AAAA,EACjD;AAEA,mBAAiB,IAAI,KAAK;AAE1B,MAAI,CAAC,YAAY;AACf,iBAAa;AACb,eAAW,MAAM;AACf;AACA,cAAQ,QAAQ,CAAC,KAAK,MAAM;AAC1B,YAAI,MAAM;AACV,YAAI,KAAK,iBAAiB,IAAI,CAAC,IAAI,IAAI,CAAC;AAAA,MAC1C,CAAC;AAED,uBAAiB,MAAM;AACvB,mBAAa;AAEb,UAAI,OAAO,sBAAsB,GAAG;AAClC,qBAAa;AAAA,MACf;AAAA,IACF,GAAG,EAAE;AAAA,EACP;AAEA,SAAO;AACT;AAEA,IAAI,OAAO,WAAW,aAAa;AACjC,EAAC,OAAe,mBAAmB;AACrC;AAEO,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACpGA,mBAQO;AAmCA,SAAS,SAAY,cAAiB,OAAkD;AAC7F,QAAM,CAAC,KAAK,MAAM,QAAI,aAAAC,UAAc,YAAY;AAChD,QAAM,iBAAiB,SAAS;AAEhC,mBAAAC,WAAe,MAAM;AACnB,qBAAiB,cAAc;AAC/B,WAAO,MAAM,mBAAmB,cAAc;AAAA,EAChD,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,aAAS,0BAAY,CAAC,aAAgC;AAC1D,QAAI,aAAa,cAAc,GAAG;AAChC,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAO,CAAC,KAAK,MAAM;AACrB;AAEO,SAAS,QAAW,SAAkB,MAAkC,OAAmB;AAChG,QAAM,iBAAiB,SAAS;AAEhC,mBAAAA,WAAe,MAAM;AACnB,QAAK,OAAe,iBAAiB,OAAO;AAC1C,cAAQ,IAAI,iCAAiC,cAAc,MAAM,oCAAoC;AAAA,IACvG;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,aAAO,aAAAC,SAAa,SAAS,QAAQ,CAAC,CAAC;AACzC;AAEO,SAAS,UAAU,QAAwB,MAAuB,OAAgB;AACvF,QAAM,iBAAiB,SAAS;AAEhC,mBAAAD,WAAe,MAAM;AACnB,wBAAoB,cAAc;AAClC,UAAM,UAAU,OAAO;AACvB,sBAAkB;AAClB,WAAO;AAAA,EACT,GAAG,IAAI;AACT;AAEO,SAAS,WACd,SACA,YACA,MACA,OACkB;AAElB,QAAM,iBAAiB,OAAO,SAAS,WAAW,OAAQ,SAAS;AAEnE,QAAM,YAAY,OAAO,SAAS,aAAa,OAAO;AAEtD,QAAM,CAAC,OAAO,QAAQ,QAAI,aAAAE,YAAgB,SAAS,YAAY,SAAS;AAExE,mBAAAF,WAAe,MAAM;AACnB,qBAAiB,cAAc;AAC/B,WAAO,MAAM,mBAAmB,cAAc;AAAA,EAChD,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,oBAAgB,0BAAY,CAAC,WAAc;AAC/C,QAAI,aAAa,cAAc,GAAG;AAChC,eAAS,MAAM;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAO,CAAC,OAAO,aAAa;AAC9B;AAEO,SAAS,cAAiB,cAAiB,OAA4B;AAC5E,QAAM,cAAU,aAAAG,eAAmB,YAAY;AAC/C,MAAI,OAAO;AACT,IAAC,QAAgB,eAAe;AAAA,EAClC;AACA,SAAO;AACT;AAEO,SAAS,WAAc,SAAwB;AACpD,aAAO,aAAAC,YAAgB,OAAO;AAChC;AAEO,IAAM,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACnIA,IAAAC,gBAA4D;AAexD;AAbJ,IAAM,mBAAe,6BAAc,EAAE,OAAO,MAAM,CAAC;AAO5C,IAAM,gBAA8C,CAAC,EAAE,UAAU,QAAQ,KAAK,MAAM;AACzF,MAAI,OAAO,WAAW,aAAa;AACjC,IAAC,OAAe,eAAe;AAAA,EACjC;AAEA,SACE,6CAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,MAAM,GACnC;AAAA;AAAA,IACA,SACC,4CAAC,SAAI,OAAO;AAAA,MACV,UAAU;AAAA,MAAS,QAAQ;AAAA,MAAI,OAAO;AAAA,MAAI,YAAY;AAAA,MAAS,OAAO;AAAA,MACtE,SAAS;AAAA,MAAY,UAAU;AAAA,MAAQ,YAAY;AAAA,MACnD,QAAQ;AAAA,MAAkB,QAAQ;AAAA,MAAO,cAAc;AAAA,MAAO,eAAe;AAAA,IAC/E,GAAG,kCAEH;AAAA,KAEJ;AAEJ;AAEO,IAAM,iBAAiB,UAAM,0BAAW,YAAY;","names":["history","reactUseState","reactUseEffect","reactUseMemo","reactUseReducer","reactCreateContext","reactUseContext","import_react"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/core/logger.ts","../src/core/math.ts","../src/core/constants.ts","../src/engine.ts","../src/hooks.ts","../src/context.tsx"],"sourcesContent":["// src/index.ts\n\nexport * from './engine';\nexport * from './hooks';\nexport * from './context';\nexport type { \n ReactNode, \n ReactElement, \n FC, \n PropsWithChildren, \n Context,\n Dispatch,\n SetStateAction,\n Reducer,\n CSSProperties\n} from 'react';","// src/core/logger.ts\n\nconst STYLES = {\n // Brand Colors\n basis: \"background: #6c5ce7; color: white; font-weight: bold; padding: 2px 6px; border-radius: 3px;\",\n version: \"background: #a29bfe; color: #2d3436; padding: 2px 6px; border-radius: 3px; margin-left: -4px;\",\n\n // Headers\n headerRed: \"background: #d63031; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerBlue: \"background: #0984e3; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerGreen: \"background: #00b894; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n\n // Elements\n label: \"background: #dfe6e9; color: #2d3436; padding: 0 4px; border-radius: 3px; font-family: monospace; font-weight: bold; border: 1px solid #b2bec3;\",\n location: \"color: #0984e3; font-family: monospace; font-weight: bold;\",\n math: \"color: #636e72; font-style: italic; font-family: serif;\",\n\n // Code Block\n codeBlock: `\n background: #1e1e1e; \n color: #9cdcfe; \n padding: 8px 12px; \n display: block; \n margin: 4px 0; \n border-left: 3px solid #00b894; \n font-family: 'Fira Code', monospace; \n line-height: 1.4; \n border-radius: 0 3px 3px 0;\n `,\n\n // Highlights\n dim: \"color: #e84393; font-weight: bold;\",\n bold: \"font-weight: bold;\"\n};\n\nconst parseLabel = (label: string) => {\n const parts = label.split(' -> ');\n return {\n file: parts[0] || \"Unknown\",\n name: parts[1] || label\n };\n};\n\nexport const displayBootLog = (windowSize: number) => {\n console.log(\n `%cBasis%cAuditor v0.1.0%c Monitoring State Space | Window: ${windowSize} ticks`,\n STYLES.basis,\n STYLES.version,\n \"color: #636e72; font-style: italic; margin-left: 8px;\"\n );\n};\n\nexport const displayRedundancyAlert = (labelA: string, labelB: string, sim: number, totalDimensions: number) => {\n const infoA = parseLabel(labelA);\n const infoB = parseLabel(labelB);\n const isCrossFile = infoA.file !== infoB.file;\n\n console.group(`%c πŸ“ BASIS | DIMENSION COLLAPSE DETECTED `, STYLES.headerRed);\n\n console.log(`%cπŸ“ Location: %c${isCrossFile ? `${infoA.file} & ${infoB.file}` : infoA.file}`, STYLES.bold, STYLES.location);\n\n console.log(\n `%cAnalysis:%c Vectors %c${infoA.name}%c and %c${infoB.name}%c are collinear (redundant).`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\"\n );\n\n console.log(\n `%cHow to fix:%c Project %c${infoB.name}%c as a derived value:\n%c// πŸ› οΈ Basis Fix: Remove useState, use useMemo\nconst ${infoB.name} = useMemo(() => deriveFrom(${infoA.name}), [${infoA.name}]);%c`,\n \"color: #00b894; font-weight: bold;\", \"\",\n \"color: #e84393; font-weight: bold;\", \"\",\n STYLES.codeBlock, \"\"\n );\n\n console.groupCollapsed(`%c πŸ”¬ Proof Details `, \"color: #636e72; font-size: 10px; cursor: pointer;\");\n console.table({\n \"Similarity\": `${(sim * 100).toFixed(2)}%`,\n \"Linear Dependency\": \"TRUE\",\n \"Rank\": totalDimensions - 1\n });\n console.groupEnd();\n console.groupEnd();\n};\n\nexport const displayCausalHint = (targetLabel: string, sourceLabel: string) => {\n const target = parseLabel(targetLabel);\n const source = parseLabel(sourceLabel);\n\n const isCrossFile = target.file !== source.file;\n const locationPath = isCrossFile\n ? `${source.file} βž” ${target.file}`\n : target.file;\n\n console.groupCollapsed(`%c πŸ’‘ BASIS | CAUSALITY (Sequential Update) `, STYLES.headerBlue);\n\n console.log(`%cπŸ“ Location: %c${locationPath}`, STYLES.bold, STYLES.location);\n\n console.log(\n `%cSequence:%c %c${source.name}%c βž” Effect βž” %c${target.name}%c`,\n STYLES.bold, \"\",\n STYLES.label, \"\",\n STYLES.label, \"\"\n );\n\n console.log(\n `%cObservation:%c Variable %c${target.name}%c is being manually synchronized.\nThis creates a %c\"Double Render Cycle\"%c.`,\n STYLES.bold, \"\", STYLES.label, \"\",\n \"color: #d63031; font-weight: bold;\", \"\"\n );\n\n console.log(\n `%cHow to fix:%c Use %cuseMemo%c to calculate %c${target.name}%c during render:\n%cconst ${target.name} = useMemo(() => computeFrom(${source.name.includes('effect') ? 'source' : source.name}), [${source.name.includes('effect') ? 'source' : source.name}]);%c`,\n \"color: #00b894; font-weight: bold;\", \"\",\n \"color: #0984e3; font-weight: bold;\", \"\",\n \"color: #e84393; font-weight: bold;\", \"\",\n STYLES.codeBlock, \"\"\n );\n\n console.groupEnd();\n};\n\nexport const displayInfiniteLoop = (label: string) => {\n const info = parseLabel(label);\n console.group(`%c πŸ›‘ BASIS CRITICAL | CIRCUIT BREAKER `, STYLES.headerRed);\n console.error(\n `Infinite oscillation detected on: %c${info.name}%c\nExecution halted to prevent browser thread lock. Check your dependency arrays.`,\n \"color: white; background: #d63031; padding: 2px 4px; border-radius: 3px;\", \"\"\n );\n console.groupEnd();\n};\n\nexport const displayHealthReport = (\n history: Map<string, number[]>,\n similarityFn: (A: number[], B: number[]) => number,\n threshold: number\n) => {\n const entries = Array.from(history.entries());\n const totalVars = entries.length;\n if (totalVars === 0) return;\n\n const clusters: string[][] = [];\n const processed = new Set<string>();\n let independentCount = 0;\n\n entries.forEach(([labelA, vecA]) => {\n if (processed.has(labelA)) return;\n\n const currentCluster = [labelA];\n processed.add(labelA);\n\n entries.forEach(([labelB, vecB]) => {\n if (labelA === labelB || processed.has(labelB)) return;\n\n const sim = similarityFn(vecA, vecB);\n if (sim > threshold) {\n currentCluster.push(labelB);\n processed.add(labelB);\n }\n });\n\n if (currentCluster.length > 1) {\n clusters.push(currentCluster);\n } else {\n independentCount++;\n }\n });\n\n const systemRank = independentCount + clusters.length;\n const efficiency = (systemRank / totalVars) * 100;\n\n console.group(`%c πŸ“Š BASIS | SYSTEM HEALTH REPORT `, STYLES.headerGreen);\n\n console.log(\n `%cBasis Efficiency: %c${efficiency.toFixed(1)}% %c(Rank: ${systemRank}/${totalVars})`,\n STYLES.bold,\n `color: ${efficiency > 85 ? '#00b894' : '#d63031'}; font-size: 16px; font-weight: bold;`,\n \"color: #636e72; font-style: italic;\"\n );\n\n if (clusters.length > 0) {\n console.log(`%cDetected ${clusters.length} Redundancy Clusters:`, \"font-weight: bold; color: #e17055; margin-top: 10px;\");\n\n clusters.forEach((cluster, idx) => {\n const names = cluster.map(l => parseLabel(l).name).join(' ⟷ ');\n console.log(` %c${idx + 1}%c ${names}`, \"background: #e17055; color: white; border-radius: 50%; padding: 0 5px;\", \"font-family: monospace;\");\n });\n } else {\n console.log(\"%c✨ All state variables are linearly independent. Your Basis is optimal.\", \"color: #00b894; font-weight: bold; margin-top: 10px;\");\n }\n\n if (totalVars > 0 && totalVars < 15) {\n console.groupCollapsed(\"%cView Full Correlation Matrix\", \"color: #636e72; font-size: 11px;\");\n const matrix: any = {};\n entries.forEach(([labelA]) => {\n const nameA = parseLabel(labelA).name;\n matrix[nameA] = {};\n entries.forEach(([labelB]) => {\n const nameB = parseLabel(labelB).name;\n const sim = similarityFn(history.get(labelA)!, history.get(labelB)!);\n matrix[nameA][nameB] = sim > threshold ? `❌ ${(sim * 100).toFixed(0)}%` : `βœ…`;\n });\n });\n console.table(matrix);\n console.groupEnd();\n } else {\n console.log(\"%c[Note] Matrix hidden due to high dimensionality. Focus on clusters above.\", \"color: #636e72; font-size: 10px; font-style: italic;\");\n }\n\n console.groupEnd();\n};","// src/core/math.ts\n\nexport const calculateCosineSimilarity = (A: number[], B: number[]): number => {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < A.length; i++) {\n dot += A[i] * B[i];\n magA += A[i] * A[i];\n magB += B[i] * B[i];\n }\n return magA && magB ? dot / (Math.sqrt(magA) * Math.sqrt(magB)) : 0;\n};","// src/core/constants.ts\n\nexport const WINDOW_SIZE = 50;\nexport const SIMILARITY_THRESHOLD = 0.88;\nexport const LOOP_THRESHOLD = 25;\nexport const LOOP_WINDOW_MS = 500;\nexport const ANALYSIS_INTERVAL = 5;","// src/engine.ts\n\nimport * as UI from './core/logger';\nimport { calculateCosineSimilarity } from './core/math';\nimport { \n WINDOW_SIZE, \n SIMILARITY_THRESHOLD, \n LOOP_THRESHOLD, \n LOOP_WINDOW_MS, \n ANALYSIS_INTERVAL \n} from './core/constants';\n\nexport const history = new Map<string, number[]>();\nexport const currentTickBatch = new Set<string>();\nlet updateLog: { label: string; ts: number }[] = [];\nlet currentEffectSource: string | null = null; \nlet tick = 0;\nlet isBatching = false;\n\nUI.displayBootLog(WINDOW_SIZE);\n\nconst analyzeBasis = () => {\n const entries = Array.from(history.entries());\n if (entries.length < 2) return;\n\n entries.forEach(([labelA, vecA], i) => {\n entries.slice(i + 1).forEach(([labelB, vecB]) => {\n const sim = calculateCosineSimilarity(vecA, vecB);\n \n if (sim > SIMILARITY_THRESHOLD) {\n UI.displayRedundancyAlert(labelA, labelB, sim, history.size);\n }\n });\n });\n};\n\nexport const printBasisHealthReport = (threshold = 0.5) => {\n UI.displayHealthReport(history, calculateCosineSimilarity, threshold);\n};\n\nexport const beginEffectTracking = (label: string) => { currentEffectSource = label; };\nexport const endEffectTracking = () => { currentEffectSource = null; };\n\nexport const registerVariable = (label: string) => {\n if (!history.has(label)) {\n history.set(label, new Array(WINDOW_SIZE).fill(0));\n }\n};\n\nexport const unregisterVariable = (label: string) => {\n history.delete(label);\n};\n\nexport const recordUpdate = (label: string): boolean => {\n const now = Date.now();\n\n updateLog.push({ label, ts: now });\n updateLog = updateLog.filter(e => now - e.ts < LOOP_WINDOW_MS);\n if (updateLog.filter(e => e.label === label).length > LOOP_THRESHOLD) {\n UI.displayInfiniteLoop(label);\n return false;\n }\n\n if (currentEffectSource && currentEffectSource !== label) {\n UI.displayCausalHint(label, currentEffectSource);\n }\n\n currentTickBatch.add(label);\n\n if (!isBatching) {\n isBatching = true;\n setTimeout(() => {\n tick++;\n history.forEach((vec, l) => {\n vec.shift();\n vec.push(currentTickBatch.has(l) ? 1 : 0);\n });\n\n currentTickBatch.clear();\n isBatching = false;\n \n if (tick % ANALYSIS_INTERVAL === 0) {\n analyzeBasis();\n }\n }, 20);\n }\n\n return true;\n};\n\nif (typeof window !== 'undefined') {\n (window as any).printBasisReport = printBasisHealthReport;\n}\n\nexport const __testEngine__ = {\n history,\n currentTickBatch,\n registerVariable,\n recordUpdate,\n printBasisHealthReport,\n beginEffectTracking,\n endEffectTracking,\n};","// src/hooks.ts\n\nimport { \n useState as reactUseState, \n useEffect as reactUseEffect, \n useMemo as reactUseMemo, \n useReducer as reactUseReducer,\n useContext as reactUseContext,\n createContext as reactCreateContext,\n useCallback \n} from 'react';\n\nimport type { \n Reducer, \n Context,\n Dispatch,\n SetStateAction,\n DependencyList,\n EffectCallback\n} from 'react';\n\nimport { \n registerVariable, \n unregisterVariable, \n recordUpdate, \n beginEffectTracking, \n endEffectTracking \n} from './engine';\n\nimport * as engine from './engine';\n\nexport type { \n ReactNode, \n FC, \n PropsWithChildren, \n Context, \n ReactElement,\n Dispatch,\n SetStateAction,\n Reducer,\n CSSProperties,\n EffectCallback,\n DependencyList\n} from 'react';\n\nexport function useState<T>(initialValue: T, label?: string): [T, Dispatch<SetStateAction<T>>] {\n const [val, setVal] = reactUseState(initialValue);\n const effectiveLabel = label || 'anonymous_state';\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const setter = useCallback((newValue: SetStateAction<T>) => {\n if (recordUpdate(effectiveLabel)) {\n setVal(newValue);\n }\n }, [effectiveLabel]);\n\n return [val, setter];\n}\n\nexport function useMemo<T>(factory: () => T, depsOrLabel?: DependencyList | string, label?: string): T {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n \n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_projection');\n \n reactUseEffect(() => {\n if ((window as any)._basis_debug !== false) {\n console.log(`%c [Basis] Valid Projection: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\");\n }\n }, [effectiveLabel]);\n\n return reactUseMemo(factory, actualDeps || []);\n}\n\nexport function useEffect(effect: EffectCallback, depsOrLabel?: DependencyList | string, label?: string) {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n \n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_effect');\n\n reactUseEffect(() => {\n beginEffectTracking(effectiveLabel);\n const cleanup = effect();\n endEffectTracking();\n return cleanup;\n }, actualDeps);\n}\n\nexport function useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: I & S,\n init?: any,\n label?: string\n): [S, Dispatch<A>] {\n\n const effectiveLabel = typeof init === 'string' ? init : (label || 'anonymous_reducer');\n\n const reactInit = typeof init === 'function' ? init : undefined;\n\n const [state, dispatch] = reactUseReducer(reducer, initialArg, reactInit);\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const basisDispatch = useCallback((action: A) => {\n if (recordUpdate(effectiveLabel)) {\n dispatch(action);\n }\n }, [effectiveLabel]);\n\n return [state, basisDispatch];\n}\n\nexport function createContext<T>(defaultValue: T, label?: string): Context<T> {\n const context = reactCreateContext(defaultValue);\n if (label) {\n (context as any)._basis_label = label;\n }\n return context;\n}\n\nexport function useContext<T>(context: Context<T>): T {\n return reactUseContext(context);\n}\n\nexport const __test__ = {\n registerVariable,\n unregisterVariable,\n recordUpdate,\n beginEffectTracking,\n endEffectTracking,\n history: (engine as any).history,\n currentTickBatch: (engine as any).currentTickBatch\n};","// src/context.tsx\n\nimport React, { createContext, useContext, ReactNode } from 'react';\n\nconst BasisContext = createContext({ debug: false });\n\ninterface BasisProviderProps {\n children: ReactNode;\n debug?: boolean;\n}\n\nexport const BasisProvider: React.FC<BasisProviderProps> = ({ children, debug = true }) => {\n if (typeof window !== 'undefined') {\n (window as any)._basis_debug = debug;\n }\n\n return (\n <BasisContext.Provider value={{ debug }}>\n {children}\n {debug && (\n <div style={{ \n position: 'fixed', bottom: 10, right: 10, background: 'black', color: '#0f0', \n padding: '5px 10px', fontSize: '10px', fontFamily: 'monospace', \n border: '1px solid #0f0', zIndex: 99999, borderRadius: '4px', pointerEvents: 'none'\n }}>\n BASIS_ENGINE: ACTIVE\n </div>\n )}\n </BasisContext.Provider>\n );\n};\n\nexport const useBasisConfig = () => useContext(BasisContext);"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,IAAM,SAAS;AAAA;AAAA,EAEb,OAAO;AAAA,EACP,SAAS;AAAA;AAAA,EAGT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,aAAa;AAAA;AAAA,EAGb,OAAO;AAAA,EACP,UAAU;AAAA,EACV,MAAM;AAAA;AAAA,EAGN,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaX,KAAK;AAAA,EACL,MAAM;AACR;AAEA,IAAM,aAAa,CAAC,UAAkB;AACpC,QAAM,QAAQ,MAAM,MAAM,MAAM;AAChC,SAAO;AAAA,IACL,MAAM,MAAM,CAAC,KAAK;AAAA,IAClB,MAAM,MAAM,CAAC,KAAK;AAAA,EACpB;AACF;AAEO,IAAM,iBAAiB,CAAC,eAAuB;AACpD,UAAQ;AAAA,IACN,8DAA8D,UAAU;AAAA,IACxE,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,EACF;AACF;AAEO,IAAM,yBAAyB,CAAC,QAAgB,QAAgB,KAAa,oBAA4B;AAC9G,QAAM,QAAQ,WAAW,MAAM;AAC/B,QAAM,QAAQ,WAAW,MAAM;AAC/B,QAAM,cAAc,MAAM,SAAS,MAAM;AAEzC,UAAQ,MAAM,qDAA8C,OAAO,SAAS;AAE5E,UAAQ,IAAI,2BAAoB,cAAc,GAAG,MAAM,IAAI,MAAM,MAAM,IAAI,KAAK,MAAM,IAAI,IAAI,OAAO,MAAM,OAAO,QAAQ;AAE1H,UAAQ;AAAA,IACN,2BAA2B,MAAM,IAAI,YAAY,MAAM,IAAI;AAAA,IAC3D,OAAO;AAAA,IAAM;AAAA,IAAI,OAAO;AAAA,IAAO;AAAA,IAAI,OAAO;AAAA,IAAO;AAAA,EACnD;AAEA,UAAQ;AAAA,IACN,6BAA6B,MAAM,IAAI;AAAA;AAAA,QAEnC,MAAM,IAAI,+BAA+B,MAAM,IAAI,OAAO,MAAM,IAAI;AAAA,IACxE;AAAA,IAAsC;AAAA,IACtC;AAAA,IAAsC;AAAA,IACtC,OAAO;AAAA,IAAW;AAAA,EACpB;AAEA,UAAQ,eAAe,+BAAwB,mDAAmD;AAClG,UAAQ,MAAM;AAAA,IACZ,cAAc,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC;AAAA,IACvC,qBAAqB;AAAA,IACrB,QAAQ,kBAAkB;AAAA,EAC5B,CAAC;AACD,UAAQ,SAAS;AACjB,UAAQ,SAAS;AACnB;AAEO,IAAM,oBAAoB,CAAC,aAAqB,gBAAwB;AAC7E,QAAM,SAAS,WAAW,WAAW;AACrC,QAAM,SAAS,WAAW,WAAW;AAErC,QAAM,cAAc,OAAO,SAAS,OAAO;AAC3C,QAAM,eAAe,cACjB,GAAG,OAAO,IAAI,WAAM,OAAO,IAAI,KAC/B,OAAO;AAEX,UAAQ,eAAe,uDAAgD,OAAO,UAAU;AAExF,UAAQ,IAAI,2BAAoB,YAAY,IAAI,OAAO,MAAM,OAAO,QAAQ;AAE5E,UAAQ;AAAA,IACN,mBAAmB,OAAO,IAAI,6BAAmB,OAAO,IAAI;AAAA,IAC5D,OAAO;AAAA,IAAM;AAAA,IACb,OAAO;AAAA,IAAO;AAAA,IACd,OAAO;AAAA,IAAO;AAAA,EAChB;AAEA,UAAQ;AAAA,IACN,+BAA+B,OAAO,IAAI;AAAA;AAAA,IAE1C,OAAO;AAAA,IAAM;AAAA,IAAI,OAAO;AAAA,IAAO;AAAA,IAC/B;AAAA,IAAsC;AAAA,EACxC;AAEA,UAAQ;AAAA,IACN,kDAAkD,OAAO,IAAI;AAAA,UACvD,OAAO,IAAI,gCAAgC,OAAO,KAAK,SAAS,QAAQ,IAAI,WAAW,OAAO,IAAI,OAAO,OAAO,KAAK,SAAS,QAAQ,IAAI,WAAW,OAAO,IAAI;AAAA,IACtK;AAAA,IAAsC;AAAA,IACtC;AAAA,IAAsC;AAAA,IACtC;AAAA,IAAsC;AAAA,IACtC,OAAO;AAAA,IAAW;AAAA,EACpB;AAEA,UAAQ,SAAS;AACnB;AAEO,IAAM,sBAAsB,CAAC,UAAkB;AACpD,QAAM,OAAO,WAAW,KAAK;AAC7B,UAAQ,MAAM,kDAA2C,OAAO,SAAS;AACzE,UAAQ;AAAA,IACN,uCAAuC,KAAK,IAAI;AAAA;AAAA,IAEhD;AAAA,IAA4E;AAAA,EAC9E;AACA,UAAQ,SAAS;AACnB;AAEO,IAAM,sBAAsB,CACjCA,UACA,cACA,cACG;AACH,QAAM,UAAU,MAAM,KAAKA,SAAQ,QAAQ,CAAC;AAC5C,QAAM,YAAY,QAAQ;AAC1B,MAAI,cAAc,EAAG;AAErB,QAAM,WAAuB,CAAC;AAC9B,QAAM,YAAY,oBAAI,IAAY;AAClC,MAAI,mBAAmB;AAEvB,UAAQ,QAAQ,CAAC,CAAC,QAAQ,IAAI,MAAM;AAClC,QAAI,UAAU,IAAI,MAAM,EAAG;AAE3B,UAAM,iBAAiB,CAAC,MAAM;AAC9B,cAAU,IAAI,MAAM;AAEpB,YAAQ,QAAQ,CAAC,CAAC,QAAQ,IAAI,MAAM;AAClC,UAAI,WAAW,UAAU,UAAU,IAAI,MAAM,EAAG;AAEhD,YAAM,MAAM,aAAa,MAAM,IAAI;AACnC,UAAI,MAAM,WAAW;AACnB,uBAAe,KAAK,MAAM;AAC1B,kBAAU,IAAI,MAAM;AAAA,MACtB;AAAA,IACF,CAAC;AAED,QAAI,eAAe,SAAS,GAAG;AAC7B,eAAS,KAAK,cAAc;AAAA,IAC9B,OAAO;AACL;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,aAAa,mBAAmB,SAAS;AAC/C,QAAM,aAAc,aAAa,YAAa;AAE9C,UAAQ,MAAM,8CAAuC,OAAO,WAAW;AAEvE,UAAQ;AAAA,IACN,yBAAyB,WAAW,QAAQ,CAAC,CAAC,cAAc,UAAU,IAAI,SAAS;AAAA,IACnF,OAAO;AAAA,IACP,UAAU,aAAa,KAAK,YAAY,SAAS;AAAA,IACjD;AAAA,EACF;AAEA,MAAI,SAAS,SAAS,GAAG;AACvB,YAAQ,IAAI,cAAc,SAAS,MAAM,yBAAyB,sDAAsD;AAExH,aAAS,QAAQ,CAAC,SAAS,QAAQ;AACjC,YAAM,QAAQ,QAAQ,IAAI,OAAK,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,UAAK;AAC7D,cAAQ,IAAI,MAAM,MAAM,CAAC,MAAM,KAAK,IAAI,0EAA0E,yBAAyB;AAAA,IAC7I,CAAC;AAAA,EACH,OAAO;AACL,YAAQ,IAAI,iFAA4E,sDAAsD;AAAA,EAChJ;AAEA,MAAI,YAAY,KAAK,YAAY,IAAI;AACnC,YAAQ,eAAe,kCAAkC,kCAAkC;AAC3F,UAAM,SAAc,CAAC;AACrB,YAAQ,QAAQ,CAAC,CAAC,MAAM,MAAM;AAC5B,YAAM,QAAQ,WAAW,MAAM,EAAE;AACjC,aAAO,KAAK,IAAI,CAAC;AACjB,cAAQ,QAAQ,CAAC,CAAC,MAAM,MAAM;AAC5B,cAAM,QAAQ,WAAW,MAAM,EAAE;AACjC,cAAM,MAAM,aAAaA,SAAQ,IAAI,MAAM,GAAIA,SAAQ,IAAI,MAAM,CAAE;AACnE,eAAO,KAAK,EAAE,KAAK,IAAI,MAAM,YAAY,WAAM,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;AAAA,MAC5E,CAAC;AAAA,IACH,CAAC;AACD,YAAQ,MAAM,MAAM;AACpB,YAAQ,SAAS;AAAA,EACnB,OAAO;AACL,YAAQ,IAAI,+EAA+E,sDAAsD;AAAA,EACnJ;AAEA,UAAQ,SAAS;AACnB;;;ACnNO,IAAM,4BAA4B,CAAC,GAAa,MAAwB;AAC7E,MAAI,MAAM,GAAG,OAAO,GAAG,OAAO;AAC9B,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,WAAO,EAAE,CAAC,IAAI,EAAE,CAAC;AACjB,YAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAClB,YAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,EACpB;AACA,SAAO,QAAQ,OAAO,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK;AACpE;;;ACRO,IAAM,cAAc;AACpB,IAAM,uBAAuB;AAC7B,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,oBAAoB;;;ACM1B,IAAM,UAAU,oBAAI,IAAsB;AAC1C,IAAM,mBAAmB,oBAAI,IAAY;AAChD,IAAI,YAA6C,CAAC;AAClD,IAAI,sBAAqC;AACzC,IAAI,OAAO;AACX,IAAI,aAAa;AAEd,eAAe,WAAW;AAE7B,IAAM,eAAe,MAAM;AACzB,QAAM,UAAU,MAAM,KAAK,QAAQ,QAAQ,CAAC;AAC5C,MAAI,QAAQ,SAAS,EAAG;AAExB,UAAQ,QAAQ,CAAC,CAAC,QAAQ,IAAI,GAAG,MAAM;AACrC,YAAQ,MAAM,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,IAAI,MAAM;AAC/C,YAAM,MAAM,0BAA0B,MAAM,IAAI;AAEhD,UAAI,MAAM,sBAAsB;AAC9B,QAAG,uBAAuB,QAAQ,QAAQ,KAAK,QAAQ,IAAI;AAAA,MAC7D;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAEO,IAAM,yBAAyB,CAAC,YAAY,QAAQ;AACzD,EAAG,oBAAoB,SAAS,2BAA2B,SAAS;AACtE;AAEO,IAAM,sBAAsB,CAAC,UAAkB;AAAE,wBAAsB;AAAO;AAC9E,IAAM,oBAAoB,MAAM;AAAE,wBAAsB;AAAM;AAE9D,IAAM,mBAAmB,CAAC,UAAkB;AACjD,MAAI,CAAC,QAAQ,IAAI,KAAK,GAAG;AACvB,YAAQ,IAAI,OAAO,IAAI,MAAM,WAAW,EAAE,KAAK,CAAC,CAAC;AAAA,EACnD;AACF;AAEO,IAAM,qBAAqB,CAAC,UAAkB;AACnD,UAAQ,OAAO,KAAK;AACtB;AAEO,IAAM,eAAe,CAAC,UAA2B;AACtD,QAAM,MAAM,KAAK,IAAI;AAErB,YAAU,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC;AACjC,cAAY,UAAU,OAAO,OAAK,MAAM,EAAE,KAAK,cAAc;AAC7D,MAAI,UAAU,OAAO,OAAK,EAAE,UAAU,KAAK,EAAE,SAAS,gBAAgB;AACpE,IAAG,oBAAoB,KAAK;AAC5B,WAAO;AAAA,EACT;AAEA,MAAI,uBAAuB,wBAAwB,OAAO;AACxD,IAAG,kBAAkB,OAAO,mBAAmB;AAAA,EACjD;AAEA,mBAAiB,IAAI,KAAK;AAE1B,MAAI,CAAC,YAAY;AACf,iBAAa;AACb,eAAW,MAAM;AACf;AACA,cAAQ,QAAQ,CAAC,KAAK,MAAM;AAC1B,YAAI,MAAM;AACV,YAAI,KAAK,iBAAiB,IAAI,CAAC,IAAI,IAAI,CAAC;AAAA,MAC1C,CAAC;AAED,uBAAiB,MAAM;AACvB,mBAAa;AAEb,UAAI,OAAO,sBAAsB,GAAG;AAClC,qBAAa;AAAA,MACf;AAAA,IACF,GAAG,EAAE;AAAA,EACP;AAEA,SAAO;AACT;AAEA,IAAI,OAAO,WAAW,aAAa;AACjC,EAAC,OAAe,mBAAmB;AACrC;AAEO,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACpGA,mBAQO;AAmCA,SAAS,SAAY,cAAiB,OAAkD;AAC7F,QAAM,CAAC,KAAK,MAAM,QAAI,aAAAC,UAAc,YAAY;AAChD,QAAM,iBAAiB,SAAS;AAEhC,mBAAAC,WAAe,MAAM;AACnB,qBAAiB,cAAc;AAC/B,WAAO,MAAM,mBAAmB,cAAc;AAAA,EAChD,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,aAAS,0BAAY,CAAC,aAAgC;AAC1D,QAAI,aAAa,cAAc,GAAG;AAChC,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAO,CAAC,KAAK,MAAM;AACrB;AAEO,SAAS,QAAW,SAAkB,aAAuC,OAAmB;AACrG,QAAM,qBAAqB,OAAO,gBAAgB;AAElD,QAAM,aAAa,qBAAqB,SAAa;AACrD,QAAM,iBAAiB,qBAAsB,cAA0B,SAAS;AAEhF,mBAAAA,WAAe,MAAM;AACnB,QAAK,OAAe,iBAAiB,OAAO;AAC1C,cAAQ,IAAI,iCAAiC,cAAc,MAAM,oCAAoC;AAAA,IACvG;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,aAAO,aAAAC,SAAa,SAAS,cAAc,CAAC,CAAC;AAC/C;AAEO,SAAS,UAAU,QAAwB,aAAuC,OAAgB;AACvG,QAAM,qBAAqB,OAAO,gBAAgB;AAElD,QAAM,aAAa,qBAAqB,SAAa;AACrD,QAAM,iBAAiB,qBAAsB,cAA0B,SAAS;AAEhF,mBAAAD,WAAe,MAAM;AACnB,wBAAoB,cAAc;AAClC,UAAM,UAAU,OAAO;AACvB,sBAAkB;AAClB,WAAO;AAAA,EACT,GAAG,UAAU;AACf;AAEO,SAAS,WACd,SACA,YACA,MACA,OACkB;AAElB,QAAM,iBAAiB,OAAO,SAAS,WAAW,OAAQ,SAAS;AAEnE,QAAM,YAAY,OAAO,SAAS,aAAa,OAAO;AAEtD,QAAM,CAAC,OAAO,QAAQ,QAAI,aAAAE,YAAgB,SAAS,YAAY,SAAS;AAExE,mBAAAF,WAAe,MAAM;AACnB,qBAAiB,cAAc;AAC/B,WAAO,MAAM,mBAAmB,cAAc;AAAA,EAChD,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,oBAAgB,0BAAY,CAAC,WAAc;AAC/C,QAAI,aAAa,cAAc,GAAG;AAChC,eAAS,MAAM;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAO,CAAC,OAAO,aAAa;AAC9B;AAEO,SAAS,cAAiB,cAAiB,OAA4B;AAC5E,QAAM,cAAU,aAAAG,eAAmB,YAAY;AAC/C,MAAI,OAAO;AACT,IAAC,QAAgB,eAAe;AAAA,EAClC;AACA,SAAO;AACT;AAEO,SAAS,WAAc,SAAwB;AACpD,aAAO,aAAAC,YAAgB,OAAO;AAChC;AAEO,IAAM,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACzIA,IAAAC,gBAA4D;AAexD;AAbJ,IAAM,mBAAe,6BAAc,EAAE,OAAO,MAAM,CAAC;AAO5C,IAAM,gBAA8C,CAAC,EAAE,UAAU,QAAQ,KAAK,MAAM;AACzF,MAAI,OAAO,WAAW,aAAa;AACjC,IAAC,OAAe,eAAe;AAAA,EACjC;AAEA,SACE,6CAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,MAAM,GACnC;AAAA;AAAA,IACA,SACC,4CAAC,SAAI,OAAO;AAAA,MACV,UAAU;AAAA,MAAS,QAAQ;AAAA,MAAI,OAAO;AAAA,MAAI,YAAY;AAAA,MAAS,OAAO;AAAA,MACtE,SAAS;AAAA,MAAY,UAAU;AAAA,MAAQ,YAAY;AAAA,MACnD,QAAQ;AAAA,MAAkB,QAAQ;AAAA,MAAO,cAAc;AAAA,MAAO,eAAe;AAAA,IAC/E,GAAG,kCAEH;AAAA,KAEJ;AAEJ;AAEO,IAAM,iBAAiB,UAAM,0BAAW,YAAY;","names":["history","reactUseState","reactUseEffect","reactUseMemo","reactUseReducer","reactCreateContext","reactUseContext","import_react"]}
package/dist/index.mjs CHANGED
@@ -312,23 +312,27 @@ function useState(initialValue, label) {
312
312
  }, [effectiveLabel]);
313
313
  return [val, setter];
314
314
  }
315
- function useMemo(factory, deps, label) {
316
- const effectiveLabel = label || "anonymous_projection";
315
+ function useMemo(factory, depsOrLabel, label) {
316
+ const isLabelAsSecondArg = typeof depsOrLabel === "string";
317
+ const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
318
+ const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_projection";
317
319
  reactUseEffect(() => {
318
320
  if (window._basis_debug !== false) {
319
321
  console.log(`%c [Basis] Valid Projection: "${effectiveLabel}" `, "color: #2ecc71; font-weight: bold;");
320
322
  }
321
323
  }, [effectiveLabel]);
322
- return reactUseMemo(factory, deps || []);
324
+ return reactUseMemo(factory, actualDeps || []);
323
325
  }
324
- function useEffect(effect, deps, label) {
325
- const effectiveLabel = label || "anonymous_effect";
326
+ function useEffect(effect, depsOrLabel, label) {
327
+ const isLabelAsSecondArg = typeof depsOrLabel === "string";
328
+ const actualDeps = isLabelAsSecondArg ? void 0 : depsOrLabel;
329
+ const effectiveLabel = isLabelAsSecondArg ? depsOrLabel : label || "anonymous_effect";
326
330
  reactUseEffect(() => {
327
331
  beginEffectTracking(effectiveLabel);
328
332
  const cleanup = effect();
329
333
  endEffectTracking();
330
334
  return cleanup;
331
- }, deps);
335
+ }, actualDeps);
332
336
  }
333
337
  function useReducer(reducer, initialArg, init, label) {
334
338
  const effectiveLabel = typeof init === "string" ? init : label || "anonymous_reducer";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/logger.ts","../src/core/math.ts","../src/core/constants.ts","../src/engine.ts","../src/hooks.ts","../src/context.tsx"],"sourcesContent":["// src/core/logger.ts\n\nconst STYLES = {\n // Brand Colors\n basis: \"background: #6c5ce7; color: white; font-weight: bold; padding: 2px 6px; border-radius: 3px;\",\n version: \"background: #a29bfe; color: #2d3436; padding: 2px 6px; border-radius: 3px; margin-left: -4px;\",\n\n // Headers\n headerRed: \"background: #d63031; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerBlue: \"background: #0984e3; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerGreen: \"background: #00b894; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n\n // Elements\n label: \"background: #dfe6e9; color: #2d3436; padding: 0 4px; border-radius: 3px; font-family: monospace; font-weight: bold; border: 1px solid #b2bec3;\",\n location: \"color: #0984e3; font-family: monospace; font-weight: bold;\",\n math: \"color: #636e72; font-style: italic; font-family: serif;\",\n\n // Code Block\n codeBlock: `\n background: #1e1e1e; \n color: #9cdcfe; \n padding: 8px 12px; \n display: block; \n margin: 4px 0; \n border-left: 3px solid #00b894; \n font-family: 'Fira Code', monospace; \n line-height: 1.4; \n border-radius: 0 3px 3px 0;\n `,\n\n // Highlights\n dim: \"color: #e84393; font-weight: bold;\",\n bold: \"font-weight: bold;\"\n};\n\nconst parseLabel = (label: string) => {\n const parts = label.split(' -> ');\n return {\n file: parts[0] || \"Unknown\",\n name: parts[1] || label\n };\n};\n\nexport const displayBootLog = (windowSize: number) => {\n console.log(\n `%cBasis%cAuditor v0.1.0%c Monitoring State Space | Window: ${windowSize} ticks`,\n STYLES.basis,\n STYLES.version,\n \"color: #636e72; font-style: italic; margin-left: 8px;\"\n );\n};\n\nexport const displayRedundancyAlert = (labelA: string, labelB: string, sim: number, totalDimensions: number) => {\n const infoA = parseLabel(labelA);\n const infoB = parseLabel(labelB);\n const isCrossFile = infoA.file !== infoB.file;\n\n console.group(`%c πŸ“ BASIS | DIMENSION COLLAPSE DETECTED `, STYLES.headerRed);\n\n console.log(`%cπŸ“ Location: %c${isCrossFile ? `${infoA.file} & ${infoB.file}` : infoA.file}`, STYLES.bold, STYLES.location);\n\n console.log(\n `%cAnalysis:%c Vectors %c${infoA.name}%c and %c${infoB.name}%c are collinear (redundant).`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\"\n );\n\n console.log(\n `%cHow to fix:%c Project %c${infoB.name}%c as a derived value:\n%c// πŸ› οΈ Basis Fix: Remove useState, use useMemo\nconst ${infoB.name} = useMemo(() => deriveFrom(${infoA.name}), [${infoA.name}]);%c`,\n \"color: #00b894; font-weight: bold;\", \"\",\n \"color: #e84393; font-weight: bold;\", \"\",\n STYLES.codeBlock, \"\"\n );\n\n console.groupCollapsed(`%c πŸ”¬ Proof Details `, \"color: #636e72; font-size: 10px; cursor: pointer;\");\n console.table({\n \"Similarity\": `${(sim * 100).toFixed(2)}%`,\n \"Linear Dependency\": \"TRUE\",\n \"Rank\": totalDimensions - 1\n });\n console.groupEnd();\n console.groupEnd();\n};\n\nexport const displayCausalHint = (targetLabel: string, sourceLabel: string) => {\n const target = parseLabel(targetLabel);\n const source = parseLabel(sourceLabel);\n\n const isCrossFile = target.file !== source.file;\n const locationPath = isCrossFile\n ? `${source.file} βž” ${target.file}`\n : target.file;\n\n console.groupCollapsed(`%c πŸ’‘ BASIS | CAUSALITY (Sequential Update) `, STYLES.headerBlue);\n\n console.log(`%cπŸ“ Location: %c${locationPath}`, STYLES.bold, STYLES.location);\n\n console.log(\n `%cSequence:%c %c${source.name}%c βž” Effect βž” %c${target.name}%c`,\n STYLES.bold, \"\",\n STYLES.label, \"\",\n STYLES.label, \"\"\n );\n\n console.log(\n `%cObservation:%c Variable %c${target.name}%c is being manually synchronized.\nThis creates a %c\"Double Render Cycle\"%c.`,\n STYLES.bold, \"\", STYLES.label, \"\",\n \"color: #d63031; font-weight: bold;\", \"\"\n );\n\n console.log(\n `%cHow to fix:%c Use %cuseMemo%c to calculate %c${target.name}%c during render:\n%cconst ${target.name} = useMemo(() => computeFrom(${source.name.includes('effect') ? 'source' : source.name}), [${source.name.includes('effect') ? 'source' : source.name}]);%c`,\n \"color: #00b894; font-weight: bold;\", \"\",\n \"color: #0984e3; font-weight: bold;\", \"\",\n \"color: #e84393; font-weight: bold;\", \"\",\n STYLES.codeBlock, \"\"\n );\n\n console.groupEnd();\n};\n\nexport const displayInfiniteLoop = (label: string) => {\n const info = parseLabel(label);\n console.group(`%c πŸ›‘ BASIS CRITICAL | CIRCUIT BREAKER `, STYLES.headerRed);\n console.error(\n `Infinite oscillation detected on: %c${info.name}%c\nExecution halted to prevent browser thread lock. Check your dependency arrays.`,\n \"color: white; background: #d63031; padding: 2px 4px; border-radius: 3px;\", \"\"\n );\n console.groupEnd();\n};\n\nexport const displayHealthReport = (\n history: Map<string, number[]>,\n similarityFn: (A: number[], B: number[]) => number,\n threshold: number\n) => {\n const entries = Array.from(history.entries());\n const totalVars = entries.length;\n if (totalVars === 0) return;\n\n const clusters: string[][] = [];\n const processed = new Set<string>();\n let independentCount = 0;\n\n entries.forEach(([labelA, vecA]) => {\n if (processed.has(labelA)) return;\n\n const currentCluster = [labelA];\n processed.add(labelA);\n\n entries.forEach(([labelB, vecB]) => {\n if (labelA === labelB || processed.has(labelB)) return;\n\n const sim = similarityFn(vecA, vecB);\n if (sim > threshold) {\n currentCluster.push(labelB);\n processed.add(labelB);\n }\n });\n\n if (currentCluster.length > 1) {\n clusters.push(currentCluster);\n } else {\n independentCount++;\n }\n });\n\n const systemRank = independentCount + clusters.length;\n const efficiency = (systemRank / totalVars) * 100;\n\n console.group(`%c πŸ“Š BASIS | SYSTEM HEALTH REPORT `, STYLES.headerGreen);\n\n console.log(\n `%cBasis Efficiency: %c${efficiency.toFixed(1)}% %c(Rank: ${systemRank}/${totalVars})`,\n STYLES.bold,\n `color: ${efficiency > 85 ? '#00b894' : '#d63031'}; font-size: 16px; font-weight: bold;`,\n \"color: #636e72; font-style: italic;\"\n );\n\n if (clusters.length > 0) {\n console.log(`%cDetected ${clusters.length} Redundancy Clusters:`, \"font-weight: bold; color: #e17055; margin-top: 10px;\");\n\n clusters.forEach((cluster, idx) => {\n const names = cluster.map(l => parseLabel(l).name).join(' ⟷ ');\n console.log(` %c${idx + 1}%c ${names}`, \"background: #e17055; color: white; border-radius: 50%; padding: 0 5px;\", \"font-family: monospace;\");\n });\n } else {\n console.log(\"%c✨ All state variables are linearly independent. Your Basis is optimal.\", \"color: #00b894; font-weight: bold; margin-top: 10px;\");\n }\n\n if (totalVars > 0 && totalVars < 15) {\n console.groupCollapsed(\"%cView Full Correlation Matrix\", \"color: #636e72; font-size: 11px;\");\n const matrix: any = {};\n entries.forEach(([labelA]) => {\n const nameA = parseLabel(labelA).name;\n matrix[nameA] = {};\n entries.forEach(([labelB]) => {\n const nameB = parseLabel(labelB).name;\n const sim = similarityFn(history.get(labelA)!, history.get(labelB)!);\n matrix[nameA][nameB] = sim > threshold ? `❌ ${(sim * 100).toFixed(0)}%` : `βœ…`;\n });\n });\n console.table(matrix);\n console.groupEnd();\n } else {\n console.log(\"%c[Note] Matrix hidden due to high dimensionality. Focus on clusters above.\", \"color: #636e72; font-size: 10px; font-style: italic;\");\n }\n\n console.groupEnd();\n};","// src/core/math.ts\n\nexport const calculateCosineSimilarity = (A: number[], B: number[]): number => {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < A.length; i++) {\n dot += A[i] * B[i];\n magA += A[i] * A[i];\n magB += B[i] * B[i];\n }\n return magA && magB ? dot / (Math.sqrt(magA) * Math.sqrt(magB)) : 0;\n};","// src/core/constants.ts\n\nexport const WINDOW_SIZE = 50;\nexport const SIMILARITY_THRESHOLD = 0.88;\nexport const LOOP_THRESHOLD = 25;\nexport const LOOP_WINDOW_MS = 500;\nexport const ANALYSIS_INTERVAL = 5;","// src/engine.ts\n\nimport * as UI from './core/logger';\nimport { calculateCosineSimilarity } from './core/math';\nimport { \n WINDOW_SIZE, \n SIMILARITY_THRESHOLD, \n LOOP_THRESHOLD, \n LOOP_WINDOW_MS, \n ANALYSIS_INTERVAL \n} from './core/constants';\n\nexport const history = new Map<string, number[]>();\nexport const currentTickBatch = new Set<string>();\nlet updateLog: { label: string; ts: number }[] = [];\nlet currentEffectSource: string | null = null; \nlet tick = 0;\nlet isBatching = false;\n\nUI.displayBootLog(WINDOW_SIZE);\n\nconst analyzeBasis = () => {\n const entries = Array.from(history.entries());\n if (entries.length < 2) return;\n\n entries.forEach(([labelA, vecA], i) => {\n entries.slice(i + 1).forEach(([labelB, vecB]) => {\n const sim = calculateCosineSimilarity(vecA, vecB);\n \n if (sim > SIMILARITY_THRESHOLD) {\n UI.displayRedundancyAlert(labelA, labelB, sim, history.size);\n }\n });\n });\n};\n\nexport const printBasisHealthReport = (threshold = 0.5) => {\n UI.displayHealthReport(history, calculateCosineSimilarity, threshold);\n};\n\nexport const beginEffectTracking = (label: string) => { currentEffectSource = label; };\nexport const endEffectTracking = () => { currentEffectSource = null; };\n\nexport const registerVariable = (label: string) => {\n if (!history.has(label)) {\n history.set(label, new Array(WINDOW_SIZE).fill(0));\n }\n};\n\nexport const unregisterVariable = (label: string) => {\n history.delete(label);\n};\n\nexport const recordUpdate = (label: string): boolean => {\n const now = Date.now();\n\n updateLog.push({ label, ts: now });\n updateLog = updateLog.filter(e => now - e.ts < LOOP_WINDOW_MS);\n if (updateLog.filter(e => e.label === label).length > LOOP_THRESHOLD) {\n UI.displayInfiniteLoop(label);\n return false;\n }\n\n if (currentEffectSource && currentEffectSource !== label) {\n UI.displayCausalHint(label, currentEffectSource);\n }\n\n currentTickBatch.add(label);\n\n if (!isBatching) {\n isBatching = true;\n setTimeout(() => {\n tick++;\n history.forEach((vec, l) => {\n vec.shift();\n vec.push(currentTickBatch.has(l) ? 1 : 0);\n });\n\n currentTickBatch.clear();\n isBatching = false;\n \n if (tick % ANALYSIS_INTERVAL === 0) {\n analyzeBasis();\n }\n }, 20);\n }\n\n return true;\n};\n\nif (typeof window !== 'undefined') {\n (window as any).printBasisReport = printBasisHealthReport;\n}\n\nexport const __testEngine__ = {\n history,\n currentTickBatch,\n registerVariable,\n recordUpdate,\n printBasisHealthReport,\n beginEffectTracking,\n endEffectTracking,\n};","// src/hooks.ts\n\nimport { \n useState as reactUseState, \n useEffect as reactUseEffect, \n useMemo as reactUseMemo, \n useReducer as reactUseReducer,\n useContext as reactUseContext,\n createContext as reactCreateContext,\n useCallback \n} from 'react';\n\nimport type { \n Reducer, \n Context,\n Dispatch,\n SetStateAction,\n DependencyList,\n EffectCallback\n} from 'react';\n\nimport { \n registerVariable, \n unregisterVariable, \n recordUpdate, \n beginEffectTracking, \n endEffectTracking \n} from './engine';\n\nimport * as engine from './engine';\n\nexport type { \n ReactNode, \n FC, \n PropsWithChildren, \n Context, \n ReactElement,\n Dispatch,\n SetStateAction,\n Reducer,\n CSSProperties,\n EffectCallback,\n DependencyList\n} from 'react';\n\nexport function useState<T>(initialValue: T, label?: string): [T, Dispatch<SetStateAction<T>>] {\n const [val, setVal] = reactUseState(initialValue);\n const effectiveLabel = label || 'anonymous_state';\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const setter = useCallback((newValue: SetStateAction<T>) => {\n if (recordUpdate(effectiveLabel)) {\n setVal(newValue);\n }\n }, [effectiveLabel]);\n\n return [val, setter];\n}\n\nexport function useMemo<T>(factory: () => T, deps: DependencyList | undefined, label?: string): T {\n const effectiveLabel = label || 'anonymous_projection';\n \n reactUseEffect(() => {\n if ((window as any)._basis_debug !== false) {\n console.log(`%c [Basis] Valid Projection: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\");\n }\n }, [effectiveLabel]);\n\n return reactUseMemo(factory, deps || []);\n}\n\nexport function useEffect(effect: EffectCallback, deps?: DependencyList, label?: string) {\n const effectiveLabel = label || 'anonymous_effect';\n\n reactUseEffect(() => {\n beginEffectTracking(effectiveLabel);\n const cleanup = effect();\n endEffectTracking();\n return cleanup;\n }, deps);\n}\n\nexport function useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: I & S,\n init?: any,\n label?: string\n): [S, Dispatch<A>] {\n\n const effectiveLabel = typeof init === 'string' ? init : (label || 'anonymous_reducer');\n\n const reactInit = typeof init === 'function' ? init : undefined;\n\n const [state, dispatch] = reactUseReducer(reducer, initialArg, reactInit);\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const basisDispatch = useCallback((action: A) => {\n if (recordUpdate(effectiveLabel)) {\n dispatch(action);\n }\n }, [effectiveLabel]);\n\n return [state, basisDispatch];\n}\n\nexport function createContext<T>(defaultValue: T, label?: string): Context<T> {\n const context = reactCreateContext(defaultValue);\n if (label) {\n (context as any)._basis_label = label;\n }\n return context;\n}\n\nexport function useContext<T>(context: Context<T>): T {\n return reactUseContext(context);\n}\n\nexport const __test__ = {\n registerVariable,\n unregisterVariable,\n recordUpdate,\n beginEffectTracking,\n endEffectTracking,\n history: (engine as any).history,\n currentTickBatch: (engine as any).currentTickBatch\n};","// src/context.tsx\n\nimport React, { createContext, useContext, ReactNode } from 'react';\n\nconst BasisContext = createContext({ debug: false });\n\ninterface BasisProviderProps {\n children: ReactNode;\n debug?: boolean;\n}\n\nexport const BasisProvider: React.FC<BasisProviderProps> = ({ children, debug = true }) => {\n if (typeof window !== 'undefined') {\n (window as any)._basis_debug = debug;\n }\n\n return (\n <BasisContext.Provider value={{ debug }}>\n {children}\n {debug && (\n <div style={{ \n position: 'fixed', bottom: 10, right: 10, background: 'black', color: '#0f0', \n padding: '5px 10px', fontSize: '10px', fontFamily: 'monospace', \n border: '1px solid #0f0', zIndex: 99999, borderRadius: '4px', pointerEvents: 'none'\n }}>\n BASIS_ENGINE: ACTIVE\n </div>\n )}\n </BasisContext.Provider>\n );\n};\n\nexport const useBasisConfig = () => useContext(BasisContext);"],"mappings":"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","names":["history","createContext","useContext"]}
1
+ {"version":3,"sources":["../src/core/logger.ts","../src/core/math.ts","../src/core/constants.ts","../src/engine.ts","../src/hooks.ts","../src/context.tsx"],"sourcesContent":["// src/core/logger.ts\n\nconst STYLES = {\n // Brand Colors\n basis: \"background: #6c5ce7; color: white; font-weight: bold; padding: 2px 6px; border-radius: 3px;\",\n version: \"background: #a29bfe; color: #2d3436; padding: 2px 6px; border-radius: 3px; margin-left: -4px;\",\n\n // Headers\n headerRed: \"background: #d63031; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerBlue: \"background: #0984e3; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerGreen: \"background: #00b894; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n\n // Elements\n label: \"background: #dfe6e9; color: #2d3436; padding: 0 4px; border-radius: 3px; font-family: monospace; font-weight: bold; border: 1px solid #b2bec3;\",\n location: \"color: #0984e3; font-family: monospace; font-weight: bold;\",\n math: \"color: #636e72; font-style: italic; font-family: serif;\",\n\n // Code Block\n codeBlock: `\n background: #1e1e1e; \n color: #9cdcfe; \n padding: 8px 12px; \n display: block; \n margin: 4px 0; \n border-left: 3px solid #00b894; \n font-family: 'Fira Code', monospace; \n line-height: 1.4; \n border-radius: 0 3px 3px 0;\n `,\n\n // Highlights\n dim: \"color: #e84393; font-weight: bold;\",\n bold: \"font-weight: bold;\"\n};\n\nconst parseLabel = (label: string) => {\n const parts = label.split(' -> ');\n return {\n file: parts[0] || \"Unknown\",\n name: parts[1] || label\n };\n};\n\nexport const displayBootLog = (windowSize: number) => {\n console.log(\n `%cBasis%cAuditor v0.1.0%c Monitoring State Space | Window: ${windowSize} ticks`,\n STYLES.basis,\n STYLES.version,\n \"color: #636e72; font-style: italic; margin-left: 8px;\"\n );\n};\n\nexport const displayRedundancyAlert = (labelA: string, labelB: string, sim: number, totalDimensions: number) => {\n const infoA = parseLabel(labelA);\n const infoB = parseLabel(labelB);\n const isCrossFile = infoA.file !== infoB.file;\n\n console.group(`%c πŸ“ BASIS | DIMENSION COLLAPSE DETECTED `, STYLES.headerRed);\n\n console.log(`%cπŸ“ Location: %c${isCrossFile ? `${infoA.file} & ${infoB.file}` : infoA.file}`, STYLES.bold, STYLES.location);\n\n console.log(\n `%cAnalysis:%c Vectors %c${infoA.name}%c and %c${infoB.name}%c are collinear (redundant).`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\"\n );\n\n console.log(\n `%cHow to fix:%c Project %c${infoB.name}%c as a derived value:\n%c// πŸ› οΈ Basis Fix: Remove useState, use useMemo\nconst ${infoB.name} = useMemo(() => deriveFrom(${infoA.name}), [${infoA.name}]);%c`,\n \"color: #00b894; font-weight: bold;\", \"\",\n \"color: #e84393; font-weight: bold;\", \"\",\n STYLES.codeBlock, \"\"\n );\n\n console.groupCollapsed(`%c πŸ”¬ Proof Details `, \"color: #636e72; font-size: 10px; cursor: pointer;\");\n console.table({\n \"Similarity\": `${(sim * 100).toFixed(2)}%`,\n \"Linear Dependency\": \"TRUE\",\n \"Rank\": totalDimensions - 1\n });\n console.groupEnd();\n console.groupEnd();\n};\n\nexport const displayCausalHint = (targetLabel: string, sourceLabel: string) => {\n const target = parseLabel(targetLabel);\n const source = parseLabel(sourceLabel);\n\n const isCrossFile = target.file !== source.file;\n const locationPath = isCrossFile\n ? `${source.file} βž” ${target.file}`\n : target.file;\n\n console.groupCollapsed(`%c πŸ’‘ BASIS | CAUSALITY (Sequential Update) `, STYLES.headerBlue);\n\n console.log(`%cπŸ“ Location: %c${locationPath}`, STYLES.bold, STYLES.location);\n\n console.log(\n `%cSequence:%c %c${source.name}%c βž” Effect βž” %c${target.name}%c`,\n STYLES.bold, \"\",\n STYLES.label, \"\",\n STYLES.label, \"\"\n );\n\n console.log(\n `%cObservation:%c Variable %c${target.name}%c is being manually synchronized.\nThis creates a %c\"Double Render Cycle\"%c.`,\n STYLES.bold, \"\", STYLES.label, \"\",\n \"color: #d63031; font-weight: bold;\", \"\"\n );\n\n console.log(\n `%cHow to fix:%c Use %cuseMemo%c to calculate %c${target.name}%c during render:\n%cconst ${target.name} = useMemo(() => computeFrom(${source.name.includes('effect') ? 'source' : source.name}), [${source.name.includes('effect') ? 'source' : source.name}]);%c`,\n \"color: #00b894; font-weight: bold;\", \"\",\n \"color: #0984e3; font-weight: bold;\", \"\",\n \"color: #e84393; font-weight: bold;\", \"\",\n STYLES.codeBlock, \"\"\n );\n\n console.groupEnd();\n};\n\nexport const displayInfiniteLoop = (label: string) => {\n const info = parseLabel(label);\n console.group(`%c πŸ›‘ BASIS CRITICAL | CIRCUIT BREAKER `, STYLES.headerRed);\n console.error(\n `Infinite oscillation detected on: %c${info.name}%c\nExecution halted to prevent browser thread lock. Check your dependency arrays.`,\n \"color: white; background: #d63031; padding: 2px 4px; border-radius: 3px;\", \"\"\n );\n console.groupEnd();\n};\n\nexport const displayHealthReport = (\n history: Map<string, number[]>,\n similarityFn: (A: number[], B: number[]) => number,\n threshold: number\n) => {\n const entries = Array.from(history.entries());\n const totalVars = entries.length;\n if (totalVars === 0) return;\n\n const clusters: string[][] = [];\n const processed = new Set<string>();\n let independentCount = 0;\n\n entries.forEach(([labelA, vecA]) => {\n if (processed.has(labelA)) return;\n\n const currentCluster = [labelA];\n processed.add(labelA);\n\n entries.forEach(([labelB, vecB]) => {\n if (labelA === labelB || processed.has(labelB)) return;\n\n const sim = similarityFn(vecA, vecB);\n if (sim > threshold) {\n currentCluster.push(labelB);\n processed.add(labelB);\n }\n });\n\n if (currentCluster.length > 1) {\n clusters.push(currentCluster);\n } else {\n independentCount++;\n }\n });\n\n const systemRank = independentCount + clusters.length;\n const efficiency = (systemRank / totalVars) * 100;\n\n console.group(`%c πŸ“Š BASIS | SYSTEM HEALTH REPORT `, STYLES.headerGreen);\n\n console.log(\n `%cBasis Efficiency: %c${efficiency.toFixed(1)}% %c(Rank: ${systemRank}/${totalVars})`,\n STYLES.bold,\n `color: ${efficiency > 85 ? '#00b894' : '#d63031'}; font-size: 16px; font-weight: bold;`,\n \"color: #636e72; font-style: italic;\"\n );\n\n if (clusters.length > 0) {\n console.log(`%cDetected ${clusters.length} Redundancy Clusters:`, \"font-weight: bold; color: #e17055; margin-top: 10px;\");\n\n clusters.forEach((cluster, idx) => {\n const names = cluster.map(l => parseLabel(l).name).join(' ⟷ ');\n console.log(` %c${idx + 1}%c ${names}`, \"background: #e17055; color: white; border-radius: 50%; padding: 0 5px;\", \"font-family: monospace;\");\n });\n } else {\n console.log(\"%c✨ All state variables are linearly independent. Your Basis is optimal.\", \"color: #00b894; font-weight: bold; margin-top: 10px;\");\n }\n\n if (totalVars > 0 && totalVars < 15) {\n console.groupCollapsed(\"%cView Full Correlation Matrix\", \"color: #636e72; font-size: 11px;\");\n const matrix: any = {};\n entries.forEach(([labelA]) => {\n const nameA = parseLabel(labelA).name;\n matrix[nameA] = {};\n entries.forEach(([labelB]) => {\n const nameB = parseLabel(labelB).name;\n const sim = similarityFn(history.get(labelA)!, history.get(labelB)!);\n matrix[nameA][nameB] = sim > threshold ? `❌ ${(sim * 100).toFixed(0)}%` : `βœ…`;\n });\n });\n console.table(matrix);\n console.groupEnd();\n } else {\n console.log(\"%c[Note] Matrix hidden due to high dimensionality. Focus on clusters above.\", \"color: #636e72; font-size: 10px; font-style: italic;\");\n }\n\n console.groupEnd();\n};","// src/core/math.ts\n\nexport const calculateCosineSimilarity = (A: number[], B: number[]): number => {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < A.length; i++) {\n dot += A[i] * B[i];\n magA += A[i] * A[i];\n magB += B[i] * B[i];\n }\n return magA && magB ? dot / (Math.sqrt(magA) * Math.sqrt(magB)) : 0;\n};","// src/core/constants.ts\n\nexport const WINDOW_SIZE = 50;\nexport const SIMILARITY_THRESHOLD = 0.88;\nexport const LOOP_THRESHOLD = 25;\nexport const LOOP_WINDOW_MS = 500;\nexport const ANALYSIS_INTERVAL = 5;","// src/engine.ts\n\nimport * as UI from './core/logger';\nimport { calculateCosineSimilarity } from './core/math';\nimport { \n WINDOW_SIZE, \n SIMILARITY_THRESHOLD, \n LOOP_THRESHOLD, \n LOOP_WINDOW_MS, \n ANALYSIS_INTERVAL \n} from './core/constants';\n\nexport const history = new Map<string, number[]>();\nexport const currentTickBatch = new Set<string>();\nlet updateLog: { label: string; ts: number }[] = [];\nlet currentEffectSource: string | null = null; \nlet tick = 0;\nlet isBatching = false;\n\nUI.displayBootLog(WINDOW_SIZE);\n\nconst analyzeBasis = () => {\n const entries = Array.from(history.entries());\n if (entries.length < 2) return;\n\n entries.forEach(([labelA, vecA], i) => {\n entries.slice(i + 1).forEach(([labelB, vecB]) => {\n const sim = calculateCosineSimilarity(vecA, vecB);\n \n if (sim > SIMILARITY_THRESHOLD) {\n UI.displayRedundancyAlert(labelA, labelB, sim, history.size);\n }\n });\n });\n};\n\nexport const printBasisHealthReport = (threshold = 0.5) => {\n UI.displayHealthReport(history, calculateCosineSimilarity, threshold);\n};\n\nexport const beginEffectTracking = (label: string) => { currentEffectSource = label; };\nexport const endEffectTracking = () => { currentEffectSource = null; };\n\nexport const registerVariable = (label: string) => {\n if (!history.has(label)) {\n history.set(label, new Array(WINDOW_SIZE).fill(0));\n }\n};\n\nexport const unregisterVariable = (label: string) => {\n history.delete(label);\n};\n\nexport const recordUpdate = (label: string): boolean => {\n const now = Date.now();\n\n updateLog.push({ label, ts: now });\n updateLog = updateLog.filter(e => now - e.ts < LOOP_WINDOW_MS);\n if (updateLog.filter(e => e.label === label).length > LOOP_THRESHOLD) {\n UI.displayInfiniteLoop(label);\n return false;\n }\n\n if (currentEffectSource && currentEffectSource !== label) {\n UI.displayCausalHint(label, currentEffectSource);\n }\n\n currentTickBatch.add(label);\n\n if (!isBatching) {\n isBatching = true;\n setTimeout(() => {\n tick++;\n history.forEach((vec, l) => {\n vec.shift();\n vec.push(currentTickBatch.has(l) ? 1 : 0);\n });\n\n currentTickBatch.clear();\n isBatching = false;\n \n if (tick % ANALYSIS_INTERVAL === 0) {\n analyzeBasis();\n }\n }, 20);\n }\n\n return true;\n};\n\nif (typeof window !== 'undefined') {\n (window as any).printBasisReport = printBasisHealthReport;\n}\n\nexport const __testEngine__ = {\n history,\n currentTickBatch,\n registerVariable,\n recordUpdate,\n printBasisHealthReport,\n beginEffectTracking,\n endEffectTracking,\n};","// src/hooks.ts\n\nimport { \n useState as reactUseState, \n useEffect as reactUseEffect, \n useMemo as reactUseMemo, \n useReducer as reactUseReducer,\n useContext as reactUseContext,\n createContext as reactCreateContext,\n useCallback \n} from 'react';\n\nimport type { \n Reducer, \n Context,\n Dispatch,\n SetStateAction,\n DependencyList,\n EffectCallback\n} from 'react';\n\nimport { \n registerVariable, \n unregisterVariable, \n recordUpdate, \n beginEffectTracking, \n endEffectTracking \n} from './engine';\n\nimport * as engine from './engine';\n\nexport type { \n ReactNode, \n FC, \n PropsWithChildren, \n Context, \n ReactElement,\n Dispatch,\n SetStateAction,\n Reducer,\n CSSProperties,\n EffectCallback,\n DependencyList\n} from 'react';\n\nexport function useState<T>(initialValue: T, label?: string): [T, Dispatch<SetStateAction<T>>] {\n const [val, setVal] = reactUseState(initialValue);\n const effectiveLabel = label || 'anonymous_state';\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const setter = useCallback((newValue: SetStateAction<T>) => {\n if (recordUpdate(effectiveLabel)) {\n setVal(newValue);\n }\n }, [effectiveLabel]);\n\n return [val, setter];\n}\n\nexport function useMemo<T>(factory: () => T, depsOrLabel?: DependencyList | string, label?: string): T {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n \n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_projection');\n \n reactUseEffect(() => {\n if ((window as any)._basis_debug !== false) {\n console.log(`%c [Basis] Valid Projection: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\");\n }\n }, [effectiveLabel]);\n\n return reactUseMemo(factory, actualDeps || []);\n}\n\nexport function useEffect(effect: EffectCallback, depsOrLabel?: DependencyList | string, label?: string) {\n const isLabelAsSecondArg = typeof depsOrLabel === 'string';\n \n const actualDeps = isLabelAsSecondArg ? undefined : (depsOrLabel as DependencyList);\n const effectiveLabel = isLabelAsSecondArg ? (depsOrLabel as string) : (label || 'anonymous_effect');\n\n reactUseEffect(() => {\n beginEffectTracking(effectiveLabel);\n const cleanup = effect();\n endEffectTracking();\n return cleanup;\n }, actualDeps);\n}\n\nexport function useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: I & S,\n init?: any,\n label?: string\n): [S, Dispatch<A>] {\n\n const effectiveLabel = typeof init === 'string' ? init : (label || 'anonymous_reducer');\n\n const reactInit = typeof init === 'function' ? init : undefined;\n\n const [state, dispatch] = reactUseReducer(reducer, initialArg, reactInit);\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const basisDispatch = useCallback((action: A) => {\n if (recordUpdate(effectiveLabel)) {\n dispatch(action);\n }\n }, [effectiveLabel]);\n\n return [state, basisDispatch];\n}\n\nexport function createContext<T>(defaultValue: T, label?: string): Context<T> {\n const context = reactCreateContext(defaultValue);\n if (label) {\n (context as any)._basis_label = label;\n }\n return context;\n}\n\nexport function useContext<T>(context: Context<T>): T {\n return reactUseContext(context);\n}\n\nexport const __test__ = {\n registerVariable,\n unregisterVariable,\n recordUpdate,\n beginEffectTracking,\n endEffectTracking,\n history: (engine as any).history,\n currentTickBatch: (engine as any).currentTickBatch\n};","// src/context.tsx\n\nimport React, { createContext, useContext, ReactNode } from 'react';\n\nconst BasisContext = createContext({ debug: false });\n\ninterface BasisProviderProps {\n children: ReactNode;\n debug?: boolean;\n}\n\nexport const BasisProvider: React.FC<BasisProviderProps> = ({ children, debug = true }) => {\n if (typeof window !== 'undefined') {\n (window as any)._basis_debug = debug;\n }\n\n return (\n <BasisContext.Provider value={{ debug }}>\n {children}\n {debug && (\n <div style={{ \n position: 'fixed', bottom: 10, right: 10, background: 'black', color: '#0f0', \n padding: '5px 10px', fontSize: '10px', fontFamily: 'monospace', \n border: '1px solid #0f0', zIndex: 99999, borderRadius: '4px', pointerEvents: 'none'\n }}>\n BASIS_ENGINE: ACTIVE\n </div>\n )}\n </BasisContext.Provider>\n );\n};\n\nexport const useBasisConfig = () => useContext(BasisContext);"],"mappings":"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","names":["history","createContext","useContext"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-state-basis",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "A linear algebra-powered React architectural tool that detects redundant state and synchronization anti-patterns by modeling state transitions as vectors in a basis.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -67,4 +67,4 @@
67
67
  "typescript": "^5.7.0",
68
68
  "vitest": "^4.0.16"
69
69
  }
70
- }
70
+ }