qsharp-lang 1.15.4-dev → 1.16.1-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/dist/browser.d.ts +2 -2
  2. package/dist/compiler/compiler.d.ts +3 -1
  3. package/dist/compiler/compiler.js +5 -1
  4. package/dist/samples.generated.js +1 -1
  5. package/dist/utils.d.ts +8 -0
  6. package/dist/utils.js +22 -8
  7. package/docs/Microsoft.Quantum.Core/Length.md +1 -1
  8. package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
  9. package/docs/Microsoft.Quantum.Core/index.md +1 -1
  10. package/docs/Std.Arithmetic/AddLE.md +1 -1
  11. package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
  12. package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
  13. package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
  14. package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
  15. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
  16. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
  17. package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
  18. package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
  19. package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
  20. package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
  21. package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
  22. package/docs/Std.Arithmetic/IncByI.md +1 -1
  23. package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
  24. package/docs/Std.Arithmetic/IncByL.md +1 -1
  25. package/docs/Std.Arithmetic/IncByLE.md +1 -1
  26. package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
  27. package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
  28. package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
  29. package/docs/Std.Arithmetic/MAJ.md +1 -1
  30. package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
  31. package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
  32. package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
  33. package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
  34. package/docs/Std.Arithmetic/index.md +1 -1
  35. package/docs/Std.Arrays/All.md +1 -1
  36. package/docs/Std.Arrays/Any.md +1 -1
  37. package/docs/Std.Arrays/Chunks.md +1 -1
  38. package/docs/Std.Arrays/CircularlyShifted.md +1 -1
  39. package/docs/Std.Arrays/ColumnAt.md +1 -1
  40. package/docs/Std.Arrays/Count.md +1 -1
  41. package/docs/Std.Arrays/Diagonal.md +1 -1
  42. package/docs/Std.Arrays/DrawMany.md +1 -1
  43. package/docs/Std.Arrays/Enumerated.md +1 -1
  44. package/docs/Std.Arrays/Excluding.md +1 -1
  45. package/docs/Std.Arrays/Filtered.md +1 -1
  46. package/docs/Std.Arrays/FlatMapped.md +1 -1
  47. package/docs/Std.Arrays/Flattened.md +1 -1
  48. package/docs/Std.Arrays/Fold.md +1 -1
  49. package/docs/Std.Arrays/ForEach.md +1 -1
  50. package/docs/Std.Arrays/Head.md +1 -1
  51. package/docs/Std.Arrays/HeadAndRest.md +1 -1
  52. package/docs/Std.Arrays/IndexOf.md +1 -1
  53. package/docs/Std.Arrays/IndexRange.md +1 -1
  54. package/docs/Std.Arrays/Interleaved.md +1 -1
  55. package/docs/Std.Arrays/IsEmpty.md +1 -1
  56. package/docs/Std.Arrays/IsRectangularArray.md +1 -1
  57. package/docs/Std.Arrays/IsSorted.md +1 -1
  58. package/docs/Std.Arrays/IsSquareArray.md +1 -1
  59. package/docs/Std.Arrays/Mapped.md +1 -1
  60. package/docs/Std.Arrays/MappedByIndex.md +1 -1
  61. package/docs/Std.Arrays/MappedOverRange.md +1 -1
  62. package/docs/Std.Arrays/Most.md +1 -1
  63. package/docs/Std.Arrays/MostAndTail.md +1 -1
  64. package/docs/Std.Arrays/Padded.md +1 -1
  65. package/docs/Std.Arrays/Partitioned.md +1 -1
  66. package/docs/Std.Arrays/Rest.md +1 -1
  67. package/docs/Std.Arrays/Reversed.md +1 -1
  68. package/docs/Std.Arrays/SequenceI.md +1 -1
  69. package/docs/Std.Arrays/SequenceL.md +1 -1
  70. package/docs/Std.Arrays/Sorted.md +1 -1
  71. package/docs/Std.Arrays/Subarray.md +1 -1
  72. package/docs/Std.Arrays/Swapped.md +1 -1
  73. package/docs/Std.Arrays/Tail.md +1 -1
  74. package/docs/Std.Arrays/Transposed.md +1 -1
  75. package/docs/Std.Arrays/Unzipped.md +1 -1
  76. package/docs/Std.Arrays/Where.md +1 -1
  77. package/docs/Std.Arrays/Windows.md +1 -1
  78. package/docs/Std.Arrays/Zipped.md +1 -1
  79. package/docs/Std.Arrays/index.md +1 -1
  80. package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
  81. package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
  82. package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
  83. package/docs/Std.Canon/ApplyOperationPowerA.md +1 -1
  84. package/docs/Std.Canon/ApplyP.md +1 -1
  85. package/docs/Std.Canon/ApplyPauli.md +1 -1
  86. package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
  87. package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
  88. package/docs/Std.Canon/ApplyQFT.md +1 -1
  89. package/docs/Std.Canon/ApplyToEach.md +1 -1
  90. package/docs/Std.Canon/ApplyToEachA.md +1 -1
  91. package/docs/Std.Canon/ApplyToEachC.md +1 -1
  92. package/docs/Std.Canon/ApplyToEachCA.md +1 -1
  93. package/docs/Std.Canon/ApplyXorInPlace.md +1 -1
  94. package/docs/Std.Canon/ApplyXorInPlaceL.md +1 -1
  95. package/docs/Std.Canon/CX.md +1 -1
  96. package/docs/Std.Canon/CY.md +1 -1
  97. package/docs/Std.Canon/CZ.md +1 -1
  98. package/docs/Std.Canon/Fst.md +1 -1
  99. package/docs/Std.Canon/Relabel.md +1 -1
  100. package/docs/Std.Canon/Snd.md +1 -1
  101. package/docs/Std.Canon/SwapReverseRegister.md +1 -1
  102. package/docs/Std.Canon/index.md +1 -1
  103. package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
  104. package/docs/Std.Convert/BigIntAsInt.md +1 -1
  105. package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
  106. package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
  107. package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
  108. package/docs/Std.Convert/BoolAsResult.md +1 -1
  109. package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
  110. package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
  111. package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
  112. package/docs/Std.Convert/IntAsBigInt.md +1 -1
  113. package/docs/Std.Convert/IntAsBoolArray.md +1 -1
  114. package/docs/Std.Convert/IntAsDouble.md +1 -1
  115. package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
  116. package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
  117. package/docs/Std.Convert/ResultAsBool.md +1 -1
  118. package/docs/Std.Convert/index.md +1 -1
  119. package/docs/Std.Core/Length.md +1 -1
  120. package/docs/Std.Core/Repeated.md +1 -1
  121. package/docs/Std.Core/index.md +1 -1
  122. package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
  123. package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
  124. package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
  125. package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
  126. package/docs/Std.Diagnostics/CheckZero.md +1 -1
  127. package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
  128. package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
  129. package/docs/Std.Diagnostics/DumpMachine.md +1 -1
  130. package/docs/Std.Diagnostics/DumpOperation.md +1 -1
  131. package/docs/Std.Diagnostics/DumpRegister.md +1 -1
  132. package/docs/Std.Diagnostics/Fact.md +1 -1
  133. package/docs/Std.Diagnostics/NoNoise.md +1 -1
  134. package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
  135. package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
  136. package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
  137. package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
  138. package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
  139. package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
  140. package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
  141. package/docs/Std.Diagnostics/index.md +1 -1
  142. package/docs/Std.Intrinsic/AND.md +1 -1
  143. package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
  144. package/docs/Std.Intrinsic/CCNOT.md +1 -1
  145. package/docs/Std.Intrinsic/CNOT.md +1 -1
  146. package/docs/Std.Intrinsic/Exp.md +1 -1
  147. package/docs/Std.Intrinsic/H.md +1 -1
  148. package/docs/Std.Intrinsic/I.md +1 -1
  149. package/docs/Std.Intrinsic/M.md +1 -1
  150. package/docs/Std.Intrinsic/Measure.md +1 -1
  151. package/docs/Std.Intrinsic/Message.md +1 -1
  152. package/docs/Std.Intrinsic/R.md +1 -1
  153. package/docs/Std.Intrinsic/R1.md +1 -1
  154. package/docs/Std.Intrinsic/R1Frac.md +1 -1
  155. package/docs/Std.Intrinsic/RFrac.md +1 -1
  156. package/docs/Std.Intrinsic/Reset.md +1 -1
  157. package/docs/Std.Intrinsic/ResetAll.md +1 -1
  158. package/docs/Std.Intrinsic/Rx.md +1 -1
  159. package/docs/Std.Intrinsic/Rxx.md +1 -1
  160. package/docs/Std.Intrinsic/Ry.md +1 -1
  161. package/docs/Std.Intrinsic/Ryy.md +1 -1
  162. package/docs/Std.Intrinsic/Rz.md +1 -1
  163. package/docs/Std.Intrinsic/Rzz.md +1 -1
  164. package/docs/Std.Intrinsic/S.md +1 -1
  165. package/docs/Std.Intrinsic/SWAP.md +1 -1
  166. package/docs/Std.Intrinsic/SX.md +38 -0
  167. package/docs/Std.Intrinsic/T.md +1 -1
  168. package/docs/Std.Intrinsic/X.md +1 -1
  169. package/docs/Std.Intrinsic/Y.md +1 -1
  170. package/docs/Std.Intrinsic/Z.md +1 -1
  171. package/docs/Std.Intrinsic/index.md +2 -1
  172. package/docs/Std.Logical/Xor.md +1 -1
  173. package/docs/Std.Logical/index.md +1 -1
  174. package/docs/Std.Math/AbsComplex.md +1 -1
  175. package/docs/Std.Math/AbsComplexPolar.md +1 -1
  176. package/docs/Std.Math/AbsD.md +1 -1
  177. package/docs/Std.Math/AbsI.md +1 -1
  178. package/docs/Std.Math/AbsL.md +1 -1
  179. package/docs/Std.Math/AbsSquaredComplex.md +1 -1
  180. package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
  181. package/docs/Std.Math/ApproximateFactorial.md +1 -1
  182. package/docs/Std.Math/ArcCos.md +1 -1
  183. package/docs/Std.Math/ArcCosh.md +1 -1
  184. package/docs/Std.Math/ArcSin.md +1 -1
  185. package/docs/Std.Math/ArcSinh.md +1 -1
  186. package/docs/Std.Math/ArcTan.md +1 -1
  187. package/docs/Std.Math/ArcTan2.md +1 -1
  188. package/docs/Std.Math/ArcTanh.md +1 -1
  189. package/docs/Std.Math/ArgComplex.md +1 -1
  190. package/docs/Std.Math/ArgComplexPolar.md +1 -1
  191. package/docs/Std.Math/Binom.md +1 -1
  192. package/docs/Std.Math/BitSizeI.md +1 -1
  193. package/docs/Std.Math/BitSizeL.md +1 -1
  194. package/docs/Std.Math/Ceiling.md +1 -1
  195. package/docs/Std.Math/Complex.md +1 -1
  196. package/docs/Std.Math/ComplexPolar.md +1 -1
  197. package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
  198. package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
  199. package/docs/Std.Math/Cos.md +1 -1
  200. package/docs/Std.Math/Cosh.md +1 -1
  201. package/docs/Std.Math/DivRemI.md +1 -1
  202. package/docs/Std.Math/DivRemL.md +1 -1
  203. package/docs/Std.Math/DividedByC.md +1 -1
  204. package/docs/Std.Math/DividedByCP.md +1 -1
  205. package/docs/Std.Math/E.md +1 -1
  206. package/docs/Std.Math/ExpModI.md +1 -1
  207. package/docs/Std.Math/ExpModL.md +1 -1
  208. package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
  209. package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
  210. package/docs/Std.Math/FactorialI.md +1 -1
  211. package/docs/Std.Math/FactorialL.md +1 -1
  212. package/docs/Std.Math/Floor.md +1 -1
  213. package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
  214. package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
  215. package/docs/Std.Math/HammingWeightI.md +1 -1
  216. package/docs/Std.Math/InverseModI.md +1 -1
  217. package/docs/Std.Math/InverseModL.md +1 -1
  218. package/docs/Std.Math/IsCoprimeI.md +1 -1
  219. package/docs/Std.Math/IsCoprimeL.md +1 -1
  220. package/docs/Std.Math/IsInfinite.md +1 -1
  221. package/docs/Std.Math/IsNaN.md +1 -1
  222. package/docs/Std.Math/LargestFixedPoint.md +1 -1
  223. package/docs/Std.Math/Lg.md +1 -1
  224. package/docs/Std.Math/Log.md +1 -1
  225. package/docs/Std.Math/Log10.md +1 -1
  226. package/docs/Std.Math/LogFactorialD.md +1 -1
  227. package/docs/Std.Math/LogGammaD.md +1 -1
  228. package/docs/Std.Math/LogOf2.md +1 -1
  229. package/docs/Std.Math/Max.md +1 -1
  230. package/docs/Std.Math/MaxD.md +1 -1
  231. package/docs/Std.Math/MaxI.md +1 -1
  232. package/docs/Std.Math/MaxL.md +1 -1
  233. package/docs/Std.Math/Min.md +1 -1
  234. package/docs/Std.Math/MinD.md +1 -1
  235. package/docs/Std.Math/MinI.md +1 -1
  236. package/docs/Std.Math/MinL.md +1 -1
  237. package/docs/Std.Math/MinusC.md +1 -1
  238. package/docs/Std.Math/MinusCP.md +1 -1
  239. package/docs/Std.Math/ModulusI.md +1 -1
  240. package/docs/Std.Math/ModulusL.md +1 -1
  241. package/docs/Std.Math/NegationC.md +1 -1
  242. package/docs/Std.Math/NegationCP.md +1 -1
  243. package/docs/Std.Math/PI.md +1 -1
  244. package/docs/Std.Math/PNorm.md +1 -1
  245. package/docs/Std.Math/PNormalized.md +1 -1
  246. package/docs/Std.Math/PlusC.md +1 -1
  247. package/docs/Std.Math/PlusCP.md +1 -1
  248. package/docs/Std.Math/PowC.md +1 -1
  249. package/docs/Std.Math/PowCP.md +1 -1
  250. package/docs/Std.Math/RealMod.md +1 -1
  251. package/docs/Std.Math/Round.md +1 -1
  252. package/docs/Std.Math/RoundHalfAwayFromZero.md +1 -1
  253. package/docs/Std.Math/SignD.md +1 -1
  254. package/docs/Std.Math/SignI.md +1 -1
  255. package/docs/Std.Math/SignL.md +1 -1
  256. package/docs/Std.Math/Sin.md +1 -1
  257. package/docs/Std.Math/Sinh.md +1 -1
  258. package/docs/Std.Math/SmallestFixedPoint.md +1 -1
  259. package/docs/Std.Math/Sqrt.md +1 -1
  260. package/docs/Std.Math/SquaredNorm.md +1 -1
  261. package/docs/Std.Math/Tan.md +1 -1
  262. package/docs/Std.Math/Tanh.md +1 -1
  263. package/docs/Std.Math/TimesC.md +1 -1
  264. package/docs/Std.Math/TimesCP.md +1 -1
  265. package/docs/Std.Math/TrailingZeroCountI.md +1 -1
  266. package/docs/Std.Math/TrailingZeroCountL.md +1 -1
  267. package/docs/Std.Math/Truncate.md +1 -1
  268. package/docs/Std.Math/index.md +1 -1
  269. package/docs/Std.Measurement/MResetEachZ.md +1 -1
  270. package/docs/Std.Measurement/MResetX.md +1 -1
  271. package/docs/Std.Measurement/MResetY.md +1 -1
  272. package/docs/Std.Measurement/MResetZ.md +1 -1
  273. package/docs/Std.Measurement/MeasureAllZ.md +1 -1
  274. package/docs/Std.Measurement/MeasureEachZ.md +1 -1
  275. package/docs/Std.Measurement/MeasureInteger.md +1 -1
  276. package/docs/Std.Measurement/index.md +1 -1
  277. package/docs/Std.Random/DrawRandomBool.md +1 -1
  278. package/docs/Std.Random/DrawRandomDouble.md +1 -1
  279. package/docs/Std.Random/DrawRandomInt.md +1 -1
  280. package/docs/Std.Random/index.md +1 -1
  281. package/docs/Std.Range/IsRangeEmpty.md +1 -1
  282. package/docs/Std.Range/RangeEnd.md +1 -1
  283. package/docs/Std.Range/RangeReverse.md +1 -1
  284. package/docs/Std.Range/RangeStart.md +1 -1
  285. package/docs/Std.Range/RangeStep.md +1 -1
  286. package/docs/Std.Range/index.md +1 -1
  287. package/docs/Std.ResourceEstimation/AccountForEstimates.md +1 -1
  288. package/docs/Std.ResourceEstimation/AuxQubitCount.md +1 -1
  289. package/docs/Std.ResourceEstimation/BeginEstimateCaching.md +1 -1
  290. package/docs/Std.ResourceEstimation/BeginRepeatEstimates.md +1 -1
  291. package/docs/Std.ResourceEstimation/CczCount.md +1 -1
  292. package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
  293. package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
  294. package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
  295. package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
  296. package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
  297. package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
  298. package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
  299. package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
  300. package/docs/Std.ResourceEstimation/TCount.md +1 -1
  301. package/docs/Std.ResourceEstimation/index.md +1 -1
  302. package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
  303. package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
  304. package/docs/Std.StatePreparation/PrepareUniformSuperposition.md +1 -1
  305. package/docs/Std.StatePreparation/index.md +1 -1
  306. package/docs/Std.TableLookup/Select.md +1 -1
  307. package/docs/Std.TableLookup/index.md +1 -1
  308. package/docs/index.md +1 -1
  309. package/docs/toc.yml +1 -0
  310. package/lib/node/qsc_wasm.cjs +22 -4
  311. package/lib/node/qsc_wasm.d.cts +10 -0
  312. package/lib/node/qsc_wasm_bg.wasm +0 -0
  313. package/lib/web/qsc_wasm.d.ts +11 -0
  314. package/lib/web/qsc_wasm.js +21 -4
  315. package/lib/web/qsc_wasm_bg.wasm +0 -0
  316. package/package.json +1 -1
  317. package/ux/circuit-vis/circuitManipulation.ts +145 -48
  318. package/ux/circuit-vis/contextMenu.ts +1 -1
  319. package/ux/circuit-vis/draggable.ts +288 -112
  320. package/ux/circuit-vis/events.ts +433 -199
  321. package/ux/circuit-vis/formatters/inputFormatter.ts +9 -4
  322. package/ux/circuit-vis/panel.ts +37 -34
  323. package/ux/circuit-vis/process.ts +1 -1
  324. package/ux/circuit-vis/sqore.ts +2 -2
  325. package/ux/circuit-vis/utils.ts +17 -1
  326. package/ux/qsharp-circuit.css +2 -35
@@ -28,9 +28,9 @@ const formatInputs = (
28
28
  const registers: RegisterMap = {};
29
29
 
30
30
  let currY: number = startY;
31
- qubits.forEach(({ id, numResults }) => {
31
+ qubits.forEach(({ id, numResults }, wireIndex) => {
32
32
  // Add qubit wire to list of qubit wires
33
- qubitWires.push(_qubitInput(currY, id.toString()));
33
+ qubitWires.push(qubitInput(currY, wireIndex, id.toString()));
34
34
 
35
35
  // Create qubit register
36
36
  registers[id] = { type: RegisterType.Qubit, y: currY };
@@ -69,7 +69,11 @@ const formatInputs = (
69
69
  *
70
70
  * @returns SVG text component for the input register.
71
71
  */
72
- const _qubitInput = (y: number, subscript?: string): SVGElement => {
72
+ const qubitInput = (
73
+ y: number,
74
+ wireIndex: number,
75
+ subscript?: string,
76
+ ): SVGElement => {
73
77
  const el: SVGElement = text("", leftPadding, y, 16);
74
78
 
75
79
  const subtext = subscript
@@ -80,8 +84,9 @@ const _qubitInput = (y: number, subscript?: string): SVGElement => {
80
84
 
81
85
  el.setAttribute("text-anchor", "start");
82
86
  el.setAttribute("dominant-baseline", "middle");
87
+ el.setAttribute("data-wire", wireIndex.toString());
83
88
  el.classList.add("qs-maintext");
84
89
  return el;
85
90
  };
86
91
 
87
- export { formatInputs, _qubitInput };
92
+ export { formatInputs, qubitInput };
@@ -17,20 +17,45 @@ import { getGateWidth } from "./utils";
17
17
  * @param container HTML element for rendering visualization into
18
18
  */
19
19
  const createPanel = (container: HTMLElement): void => {
20
- if (container.querySelector(".panel") == null) {
21
- const circuit = container.querySelector("svg[id]");
22
- if (circuit == null) {
23
- throw new Error("No circuit found in the container");
24
- }
25
-
26
- const wrapper = _elem("div", "");
20
+ // Find or create the wrapper
21
+ let wrapper: HTMLElement | null = container.querySelector(".circuit-wrapper");
22
+ const circuit = container.querySelector("svg[id]");
23
+ if (circuit == null) {
24
+ throw new Error("No circuit found in the container");
25
+ }
26
+ if (!wrapper) {
27
+ wrapper = _elem("div", "");
28
+ wrapper.className = "circuit-wrapper";
27
29
  wrapper.style.display = "block";
28
30
  wrapper.style.overflow = "auto";
29
31
  wrapper.style.width = "100%";
30
- wrapper.appendChild(_qubitLineControl());
32
+ wrapper.appendChild(circuit);
31
33
  container.appendChild(wrapper);
34
+ } else if (circuit.parentElement !== wrapper) {
35
+ // If wrapper exists but SVG is not inside, ensure it's appended
32
36
  wrapper.appendChild(circuit);
37
+ }
38
+
39
+ // Remove any previous message
40
+ const prevMsg = wrapper.querySelector(".empty-circuit-message");
41
+ if (prevMsg) prevMsg.remove();
42
+
43
+ // Check if the circuit is empty by inspecting the .wires group
44
+ const wiresGroup = circuit?.querySelector(".wires");
45
+ if (!wiresGroup || wiresGroup.children.length === 0) {
46
+ const emptyMsg = document.createElement("div");
47
+ emptyMsg.className = "empty-circuit-message";
48
+ emptyMsg.textContent =
49
+ "Your circuit is empty. Drag gates from the toolbox to get started!";
50
+ emptyMsg.style.padding = "2em";
51
+ emptyMsg.style.textAlign = "center";
52
+ emptyMsg.style.color = "#888";
53
+ emptyMsg.style.fontSize = "1.1em";
54
+ wrapper.appendChild(emptyMsg);
55
+ return;
56
+ }
33
57
 
58
+ if (container.querySelector(".panel") == null) {
34
59
  const panelElem = _panel();
35
60
  container.prepend(panelElem);
36
61
  container.style.display = "flex";
@@ -39,28 +64,6 @@ const createPanel = (container: HTMLElement): void => {
39
64
  }
40
65
  };
41
66
 
42
- const _qubitLineControl = (): HTMLElement => {
43
- const qubitLineControlElem = _elem("div", "qubit-line-control");
44
- _children(qubitLineControlElem, [
45
- _title("Add/Remove Qubit Lines:"),
46
- _addQubitLineControl(),
47
- _removeQubitLineControl(),
48
- ]);
49
- return qubitLineControlElem;
50
- };
51
-
52
- const _addQubitLineControl = (): HTMLElement => {
53
- const addQubitLineControlElem = _elem("button", "add-qubit-line");
54
- addQubitLineControlElem.textContent = "+";
55
- return addQubitLineControlElem;
56
- };
57
-
58
- const _removeQubitLineControl = (): HTMLElement => {
59
- const removeQubitLineControlElem = _elem("button", "remove-qubit-line");
60
- removeQubitLineControlElem.textContent = "-";
61
- return removeQubitLineControlElem;
62
- };
63
-
64
67
  /**
65
68
  * Function to produce panel element
66
69
  * @param context Context object to manage extension state
@@ -280,7 +283,7 @@ const _makeUnitary = (gate: string): Unitary => {
280
283
  return {
281
284
  kind: "unitary",
282
285
  gate: gate,
283
- targets: [{ qubit: 0 }],
286
+ targets: [],
284
287
  };
285
288
  };
286
289
 
@@ -294,8 +297,8 @@ const _makeMeasurement = (gate: string): Measurement => {
294
297
  return {
295
298
  kind: "measurement",
296
299
  gate: gate,
297
- qubits: [{ qubit: 0 }],
298
- results: [{ qubit: 0, result: 0 }],
300
+ qubits: [],
301
+ results: [],
299
302
  };
300
303
  };
301
304
 
@@ -303,7 +306,7 @@ const _makeKet = (gate: string): Ket => {
303
306
  return {
304
307
  kind: "ket",
305
308
  gate: gate,
306
- targets: [{ qubit: 0 }],
309
+ targets: [],
307
310
  };
308
311
  };
309
312
 
@@ -28,7 +28,7 @@ const processOperations = (
28
28
  registers: RegisterMap,
29
29
  ): { renderDataArray: GateRenderData[][]; svgWidth: number } => {
30
30
  if (componentGrid.length === 0)
31
- return { renderDataArray: [], svgWidth: startX };
31
+ return { renderDataArray: [], svgWidth: startX + gatePadding * 2 };
32
32
  const numColumns: number = componentGrid.length;
33
33
  const columnsWidths: number[] = new Array(numColumns).fill(minGateWidth);
34
34
 
@@ -16,7 +16,7 @@ import {
16
16
  import { GateRenderData, GateType } from "./gateRenderData";
17
17
  import { createUUID } from "./utils";
18
18
  import { gateHeight, minGateWidth, minToolboxHeight, svgNS } from "./constants";
19
- import { createDragzones } from "./draggable";
19
+ import { createDropzones } from "./draggable";
20
20
  import { enableEvents } from "./events";
21
21
  import { createPanel } from "./panel";
22
22
 
@@ -145,7 +145,7 @@ export class Sqore {
145
145
  this.addGateClickHandlers(container, _circuit);
146
146
 
147
147
  if (this.isEditable) {
148
- createDragzones(container, this);
148
+ createDropzones(container, this);
149
149
  createPanel(container);
150
150
  enableEvents(container, this, () => this.renderCircuit(container));
151
151
  if (this.editCallback != undefined) {
@@ -17,7 +17,7 @@ import { Register } from "./register";
17
17
  * @param obj2 - The second object or array to compare.
18
18
  * @returns True if the objects are deeply equal, false otherwise.
19
19
  */
20
- export const deepEqual = (obj1: unknown, obj2: unknown): boolean => {
20
+ const deepEqual = (obj1: unknown, obj2: unknown): boolean => {
21
21
  if (obj1 === obj2) return true;
22
22
 
23
23
  if (
@@ -365,6 +365,20 @@ const getGateElems = (container: HTMLElement): SVGGraphicsElement[] => {
365
365
  : [];
366
366
  };
367
367
 
368
+ /**
369
+ * Get list of qubit label elements for drag-and-drop.
370
+ *
371
+ * @param container The HTML container element containing the circuit visualization.
372
+ * @returns An array of SVGTextElement representing the qubit labels.
373
+ */
374
+ const getQubitLabelElems = (container: HTMLElement): SVGTextElement[] => {
375
+ const circuitSvg = container.querySelector("svg[id]");
376
+ if (!circuitSvg) return [];
377
+ const labelGroup = circuitSvg.querySelector("g.qubit-input-states");
378
+ if (!labelGroup) return [];
379
+ return Array.from(labelGroup.querySelectorAll<SVGTextElement>("text"));
380
+ };
381
+
368
382
  // Non-ASCII chars are fraught with danger. Copy/paste these when possible.
369
383
  // Use the following regex in VS Code to find invalid unicode chars
370
384
  // [^\x20-\x7e\u{03b8}-\u{03c8}\u{2020}\u{27e8}\u{27e9}]
@@ -379,6 +393,7 @@ const mathChars = {
379
393
  };
380
394
 
381
395
  export {
396
+ deepEqual,
382
397
  createUUID,
383
398
  getGateWidth,
384
399
  getChildTargets,
@@ -393,5 +408,6 @@ export {
393
408
  getToolboxElems,
394
409
  getHostElems,
395
410
  getGateElems,
411
+ getQubitLabelElems,
396
412
  mathChars,
397
413
  };
@@ -331,41 +331,8 @@
331
331
  opacity: 0.5;
332
332
  }
333
333
 
334
- .qubit-line-control {
335
- display: flex;
336
- justify-content: flex-start;
337
- align-items: center;
338
- margin-bottom: 8px;
339
- }
340
-
341
- .qubit-line-control .title {
342
- margin-left: 16px;
343
- }
344
-
345
- .add-qubit-line,
346
- .remove-qubit-line {
347
- border-radius: 4px;
348
- padding: 8px 16px;
349
- margin: 4px;
350
- cursor: pointer;
351
- font-size: 14px;
352
- user-select: none;
353
- background: var(--vscode-button-background, #007acc);
354
- color: var(--vscode-button-foreground, #ffffff);
355
- border: 1px solid var(--vscode-button-border, #005a9e);
356
- }
357
-
358
- .add-qubit-line:hover,
359
- .remove-qubit-line:hover {
360
- background: var(--vscode-button-hoverBackground, #005a9e);
361
- }
362
-
363
- .add-qubit-line:disabled,
364
- .remove-qubit-line:disabled {
365
- background: var(--vscode-button-secondaryBackground, #d4d4d4);
366
- color: var(--vscode-disabledForeground, #a1a1a1);
367
- border: 1px solid var(--vscode-button-secondaryBackground, #d4d4d4);
368
- cursor: not-allowed;
334
+ .ghost-opacity {
335
+ opacity: 0.5;
369
336
  }
370
337
  }
371
338