{"version":3,"sources":["../src/index.ts","../src/components/Qubit.tsx","../src/components/QuantumGate.tsx","../src/components/QuantumCircuit.tsx","../src/components/QuantumWire.tsx"],"sourcesContent":["export { Qubit } from './components/Qubit.js';\nexport type { QubitProps } from './components/Qubit.js';\nexport { QuantumGate } from './components/QuantumGate.js';\nimport type { GateType } from './components/QuantumGate.js';\nexport type { QuantumGateProps, GateType } from './components/QuantumGate.js';\nexport { QuantumCircuit } from './components/QuantumCircuit.js';\nexport type { QuantumCircuitProps, QuantumState } from './components/QuantumCircuit.js';\nexport { QuantumWire } from './components/QuantumWire.js';\nexport type { QuantumWireProps } from './components/QuantumWire.js';\n\nexport const calculateQuantumState = (gates: GateType[], initialState: ('0' | '1')[]) => {\n\n  const numQubits = initialState.length;\n  const possibleStates = Math.pow(2, numQubits);\n  \n  const probabilities = [];\n  let remainingProb = 1.0;\n  \n  for (let i = 0; i < possibleStates - 1; i++) {\n    // More gates = more uniform distribution\n    const variance = 0.5 + (gates.length * 0.1);\n    const prob = Math.random() * variance * remainingProb;\n    probabilities.push(prob);\n    remainingProb -= prob;\n  }\n  \n  probabilities.push(remainingProb);\n  \n  // Return base states with their probabilities\n  return {\n    states: Array(possibleStates).fill(0).map((_, i) => {\n      const binaryString = i.toString(2).padStart(numQubits, '0');\n      return `|${binaryString}⟩`;\n    }),\n    probabilities: probabilities.map(p => Number(p.toFixed(4)))\n  };\n};\n\nexport const applyGate = (gate: GateType, qubitValues: ('0' | '1' | '+' | '-')[]) => {\n  // Simulate applying a quantum gate\n  return qubitValues.map(v => {\n    if (gate === 'X') return v === '0' ? '1' : (v === '1' ? '0' : v);\n    if (gate === 'H') return v === '0' || v === '1' ? '+' : '0';\n    if (gate === 'Z') return v === '+' ? '-' : (v === '-' ? '+' : v);\n    return v;\n  });\n};\n\n// Bonus function to calculate quantum entanglement\nexport const calculateEntanglement = (state1: string, state2: string) => {\n  if ((state1 === '+' && state2 === '+') || (state1 === '1' && state2 === '1')) {\n    return 1.0; // Fully entangled\n  } else if ((state1 === '0' && state2 === '0') || (state1 === '-' && state2 === '-')) {\n    return 0.8; // Strongly entangled\n  } else {\n    return 0.2; // Weakly entangled\n  }\n};","import * as React from 'react';\n\nexport interface QubitProps {\n  id: string;\n  value?: '0' | '1' | '+' | '-';\n  className?: string;\n  children?: React.ReactNode;\n}\n\nexport const Qubit = ({ \n  id, \n  value = '0', \n  className = '', \n  children \n}: QubitProps) => {\n  return (\n    <div id={id} className={`qubit animate-quantum-pulse ${className}`} data-value={value}>\n      {value}\n      {children}\n    </div>\n  );\n};","import * as React from 'react';\n\nexport type GateType = 'H' | 'X' | 'Y' | 'Z' | 'CNOT' | 'T' | 'S';\n\nexport interface QuantumGateProps {\n  type: GateType;\n  targets: string[];\n  controls?: string[];\n  className?: string;\n  onClick?: () => void;\n}\n\nexport const QuantumGate: React.FC<QuantumGateProps> = ({ \n  type, \n  targets, \n  controls = [], \n  className = '',\n  onClick\n}) => {\n  return (\n    <div \n      className={`quantum-gate ${className}`} \n      data-gate-type={type}\n      data-targets={targets.join(',')}\n      data-controls={controls.join(',')}\n      onClick={onClick}\n    >\n      {type}\n    </div>\n  );\n};","import * as React from 'react';\nimport { useState } from 'react';\n\nexport interface QuantumCircuitProps {\n  qubits: number;\n  className?: string;\n  children?: React.ReactNode;\n}\n\nexport interface QuantumState {\n  states: string[];\n  probabilities: number[];\n}\n\nexport const QuantumCircuit: React.FC<QuantumCircuitProps> = ({ \n  qubits, \n  className = '',\n  children \n}) => {\n  const [simulating, setSimulating] = useState(false);\n  const [results, setResults] = useState<QuantumState | null>(null);\n  \n  const runSimulation = () => {\n    setSimulating(true);\n    \n    // Simulate quantum processing...\n    setTimeout(() => {\n      // Generate pseudo-random \"quantum\" results\n      const possibleStates = generatePossibleStates(qubits);\n      const probabilities = generateProbabilities(possibleStates.length);\n      \n      setResults({\n        states: possibleStates,\n        probabilities: probabilities\n      });\n      \n      setSimulating(false);\n    }, 1500);\n  };\n  \n  // Generate all possible binary combinations for a certain number of qubits\n  const generatePossibleStates = (numQubits: number): string[] => {\n    const states: string[] = [];\n    const totalStates = Math.pow(2, numQubits);\n    \n    for (let i = 0; i < totalStates; i++) {\n      const binaryString = i.toString(2).padStart(numQubits, '0');\n      const ketNotation = `|${binaryString}⟩`;\n      states.push(ketNotation);\n    }\n    \n    return states;\n  };\n  \n  // Generate random probabilities that sum to 1\n  const generateProbabilities = (numStates: number): number[] => {\n    const rawValues: number[] = [];\n    let sum = 0;\n    \n    // Generate random values\n    for (let i = 0; i < numStates; i++) {\n      const val = Math.random();\n      rawValues.push(val);\n      sum += val;\n    }\n    \n    // Normalize so the sum equals 1\n    return rawValues.map(val => Number((val / sum).toFixed(4)));\n  };\n  \n  return (\n    <div className={`p-4 border-2 border-[#4C1D95] rounded-lg ${className}`}>\n      <div className=\"flex justify-between items-center mb-4\">\n        <h3 className=\"text-lg font-bold text-[#6D28D9]\">Quantum Circuit ({qubits} qubits)</h3>\n        <button \n          className=\"px-4 py-2 bg-[#6D28D9] text-white rounded-md hover:bg-[#4C1D95] transition-colors\"\n          onClick={runSimulation}\n          disabled={simulating}\n        >\n          {simulating ? 'Simulating...' : 'Simulate'}\n        </button>\n      </div>\n      <div className=\"space-y-4 mb-4\">\n        {children}\n      </div>\n      \n      {results && (\n        <div className=\"mt-6 p-4 bg-[#F3F4F6] rounded-lg border border-[#C4B5FD]\">\n          <h4 className=\"text-md font-semibold text-[#6D28D9] mb-2\">Quantum Superposition Result</h4>\n          <div className=\"grid grid-cols-2 gap-2\">\n            {results.states.map((state, index) => (\n              <div key={index} className=\"flex justify-between items-center\">\n                <span className=\"font-mono\">{state}</span>\n                <div className=\"flex items-center\">\n                  <div \n                    className=\"h-4 bg-[#6D28D9]\" \n                    style={{ width: `${results.probabilities[index] * 100}px` }}\n                  ></div>\n                  <span className=\"ml-2 text-sm\">{(results.probabilities[index] * 100).toFixed(1)}%</span>\n                </div>\n              </div>\n            ))}\n          </div>\n          <p className=\"mt-4 text-xs text-gray-500 italic\">\n            Probability amplitude for each possible basis state\n          </p>\n        </div>\n      )}\n    </div>\n  );\n};","import * as React from 'react';\n\nexport interface QuantumWireProps {\n  qubitId: string;\n  className?: string;\n}\n\nexport const QuantumWire: React.FC<QuantumWireProps> = ({ qubitId, className = '' }) => {\n  return (\n    <div className={`quantum-wire w-full ${className}`} data-qubit-id={qubitId}></div>\n  );\n};"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}