qsharp-lang 1.14.5-dev → 1.15.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 (338) hide show
  1. package/dist/browser.d.ts +1 -1
  2. package/dist/compiler/compiler.d.ts +1 -1
  3. package/dist/compiler/compiler.js +6 -1
  4. package/dist/debug-service/debug-service.d.ts +1 -1
  5. package/dist/debug-service/debug-service.js +6 -1
  6. package/dist/katas-content.generated.js +1 -1
  7. package/dist/katas-content.generated.md.js +1 -1
  8. package/dist/samples.generated.js +1 -1
  9. package/dist/shared/circuit.d.ts +86 -30
  10. package/dist/shared/circuit.js +4 -0
  11. package/dist/shared/legacyCircuitUpdate.d.ts +9 -0
  12. package/dist/shared/legacyCircuitUpdate.js +312 -0
  13. package/dist/shared/register.d.ts +3 -5
  14. package/dist/utils.d.ts +9 -0
  15. package/dist/utils.js +41 -0
  16. package/docs/Microsoft.Quantum.Core/Length.md +1 -1
  17. package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
  18. package/docs/Microsoft.Quantum.Core/index.md +1 -1
  19. package/docs/Std.Arithmetic/AddLE.md +1 -1
  20. package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
  21. package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
  22. package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
  23. package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
  24. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
  25. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
  26. package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
  27. package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
  28. package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
  29. package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
  30. package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
  31. package/docs/Std.Arithmetic/IncByI.md +1 -1
  32. package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
  33. package/docs/Std.Arithmetic/IncByL.md +1 -1
  34. package/docs/Std.Arithmetic/IncByLE.md +1 -1
  35. package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
  36. package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
  37. package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
  38. package/docs/Std.Arithmetic/MAJ.md +1 -1
  39. package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
  40. package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
  41. package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
  42. package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
  43. package/docs/Std.Arithmetic/index.md +1 -1
  44. package/docs/Std.Arrays/All.md +1 -1
  45. package/docs/Std.Arrays/Any.md +1 -1
  46. package/docs/Std.Arrays/Chunks.md +1 -1
  47. package/docs/Std.Arrays/CircularlyShifted.md +1 -1
  48. package/docs/Std.Arrays/ColumnAt.md +1 -1
  49. package/docs/Std.Arrays/Count.md +1 -1
  50. package/docs/Std.Arrays/Diagonal.md +1 -1
  51. package/docs/Std.Arrays/DrawMany.md +1 -1
  52. package/docs/Std.Arrays/Enumerated.md +1 -1
  53. package/docs/Std.Arrays/Excluding.md +1 -1
  54. package/docs/Std.Arrays/Filtered.md +1 -1
  55. package/docs/Std.Arrays/FlatMapped.md +1 -1
  56. package/docs/Std.Arrays/Flattened.md +1 -1
  57. package/docs/Std.Arrays/Fold.md +1 -1
  58. package/docs/Std.Arrays/ForEach.md +1 -1
  59. package/docs/Std.Arrays/Head.md +1 -1
  60. package/docs/Std.Arrays/HeadAndRest.md +1 -1
  61. package/docs/Std.Arrays/IndexOf.md +1 -1
  62. package/docs/Std.Arrays/IndexRange.md +1 -1
  63. package/docs/Std.Arrays/Interleaved.md +1 -1
  64. package/docs/Std.Arrays/IsEmpty.md +1 -1
  65. package/docs/Std.Arrays/IsRectangularArray.md +1 -1
  66. package/docs/Std.Arrays/IsSorted.md +1 -1
  67. package/docs/Std.Arrays/IsSquareArray.md +1 -1
  68. package/docs/Std.Arrays/Mapped.md +1 -1
  69. package/docs/Std.Arrays/MappedByIndex.md +1 -1
  70. package/docs/Std.Arrays/MappedOverRange.md +1 -1
  71. package/docs/Std.Arrays/Most.md +1 -1
  72. package/docs/Std.Arrays/MostAndTail.md +1 -1
  73. package/docs/Std.Arrays/Padded.md +1 -1
  74. package/docs/Std.Arrays/Partitioned.md +1 -1
  75. package/docs/Std.Arrays/Rest.md +1 -1
  76. package/docs/Std.Arrays/Reversed.md +1 -1
  77. package/docs/Std.Arrays/SequenceI.md +1 -1
  78. package/docs/Std.Arrays/SequenceL.md +1 -1
  79. package/docs/Std.Arrays/Sorted.md +1 -1
  80. package/docs/Std.Arrays/Subarray.md +1 -1
  81. package/docs/Std.Arrays/Swapped.md +1 -1
  82. package/docs/Std.Arrays/Tail.md +1 -1
  83. package/docs/Std.Arrays/Transposed.md +1 -1
  84. package/docs/Std.Arrays/Unzipped.md +1 -1
  85. package/docs/Std.Arrays/Where.md +1 -1
  86. package/docs/Std.Arrays/Windows.md +1 -1
  87. package/docs/Std.Arrays/Zipped.md +1 -1
  88. package/docs/Std.Arrays/index.md +1 -1
  89. package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
  90. package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
  91. package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
  92. package/docs/Std.Canon/ApplyP.md +1 -1
  93. package/docs/Std.Canon/ApplyPauli.md +1 -1
  94. package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
  95. package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
  96. package/docs/Std.Canon/ApplyQFT.md +1 -1
  97. package/docs/Std.Canon/ApplyToEach.md +1 -1
  98. package/docs/Std.Canon/ApplyToEachA.md +1 -1
  99. package/docs/Std.Canon/ApplyToEachC.md +1 -1
  100. package/docs/Std.Canon/ApplyToEachCA.md +1 -1
  101. package/docs/Std.Canon/ApplyXorInPlace.md +1 -1
  102. package/docs/Std.Canon/ApplyXorInPlaceL.md +1 -1
  103. package/docs/Std.Canon/CX.md +1 -1
  104. package/docs/Std.Canon/CY.md +1 -1
  105. package/docs/Std.Canon/CZ.md +1 -1
  106. package/docs/Std.Canon/Fst.md +1 -1
  107. package/docs/Std.Canon/Relabel.md +1 -1
  108. package/docs/Std.Canon/Snd.md +1 -1
  109. package/docs/Std.Canon/SwapReverseRegister.md +1 -1
  110. package/docs/Std.Canon/index.md +1 -1
  111. package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
  112. package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
  113. package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
  114. package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
  115. package/docs/Std.Convert/BoolAsResult.md +1 -1
  116. package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
  117. package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
  118. package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
  119. package/docs/Std.Convert/IntAsBigInt.md +1 -1
  120. package/docs/Std.Convert/IntAsBoolArray.md +1 -1
  121. package/docs/Std.Convert/IntAsDouble.md +1 -1
  122. package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
  123. package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
  124. package/docs/Std.Convert/ResultAsBool.md +1 -1
  125. package/docs/Std.Convert/index.md +1 -1
  126. package/docs/Std.Core/Length.md +1 -1
  127. package/docs/Std.Core/Repeated.md +1 -1
  128. package/docs/Std.Core/index.md +1 -1
  129. package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
  130. package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
  131. package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
  132. package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
  133. package/docs/Std.Diagnostics/CheckZero.md +1 -1
  134. package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
  135. package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
  136. package/docs/Std.Diagnostics/DumpMachine.md +1 -1
  137. package/docs/Std.Diagnostics/DumpOperation.md +1 -1
  138. package/docs/Std.Diagnostics/DumpRegister.md +1 -1
  139. package/docs/Std.Diagnostics/Fact.md +1 -1
  140. package/docs/Std.Diagnostics/NoNoise.md +1 -1
  141. package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
  142. package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
  143. package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
  144. package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
  145. package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
  146. package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
  147. package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
  148. package/docs/Std.Diagnostics/index.md +1 -1
  149. package/docs/Std.Intrinsic/AND.md +1 -1
  150. package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
  151. package/docs/Std.Intrinsic/CCNOT.md +1 -1
  152. package/docs/Std.Intrinsic/CNOT.md +1 -1
  153. package/docs/Std.Intrinsic/Exp.md +1 -1
  154. package/docs/Std.Intrinsic/H.md +1 -1
  155. package/docs/Std.Intrinsic/I.md +1 -1
  156. package/docs/Std.Intrinsic/M.md +1 -1
  157. package/docs/Std.Intrinsic/Measure.md +1 -1
  158. package/docs/Std.Intrinsic/Message.md +1 -1
  159. package/docs/Std.Intrinsic/R.md +1 -1
  160. package/docs/Std.Intrinsic/R1.md +1 -1
  161. package/docs/Std.Intrinsic/R1Frac.md +1 -1
  162. package/docs/Std.Intrinsic/RFrac.md +1 -1
  163. package/docs/Std.Intrinsic/Reset.md +1 -1
  164. package/docs/Std.Intrinsic/ResetAll.md +1 -1
  165. package/docs/Std.Intrinsic/Rx.md +1 -1
  166. package/docs/Std.Intrinsic/Rxx.md +1 -1
  167. package/docs/Std.Intrinsic/Ry.md +1 -1
  168. package/docs/Std.Intrinsic/Ryy.md +1 -1
  169. package/docs/Std.Intrinsic/Rz.md +1 -1
  170. package/docs/Std.Intrinsic/Rzz.md +1 -1
  171. package/docs/Std.Intrinsic/S.md +1 -1
  172. package/docs/Std.Intrinsic/SWAP.md +1 -1
  173. package/docs/Std.Intrinsic/T.md +1 -1
  174. package/docs/Std.Intrinsic/X.md +1 -1
  175. package/docs/Std.Intrinsic/Y.md +1 -1
  176. package/docs/Std.Intrinsic/Z.md +1 -1
  177. package/docs/Std.Intrinsic/index.md +1 -1
  178. package/docs/Std.Logical/Xor.md +1 -1
  179. package/docs/Std.Logical/index.md +1 -1
  180. package/docs/Std.Math/AbsComplex.md +1 -1
  181. package/docs/Std.Math/AbsComplexPolar.md +1 -1
  182. package/docs/Std.Math/AbsD.md +1 -1
  183. package/docs/Std.Math/AbsI.md +1 -1
  184. package/docs/Std.Math/AbsL.md +1 -1
  185. package/docs/Std.Math/AbsSquaredComplex.md +1 -1
  186. package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
  187. package/docs/Std.Math/ApproximateFactorial.md +1 -1
  188. package/docs/Std.Math/ArcCos.md +1 -1
  189. package/docs/Std.Math/ArcCosh.md +1 -1
  190. package/docs/Std.Math/ArcSin.md +1 -1
  191. package/docs/Std.Math/ArcSinh.md +1 -1
  192. package/docs/Std.Math/ArcTan.md +1 -1
  193. package/docs/Std.Math/ArcTan2.md +1 -1
  194. package/docs/Std.Math/ArcTanh.md +1 -1
  195. package/docs/Std.Math/ArgComplex.md +1 -1
  196. package/docs/Std.Math/ArgComplexPolar.md +1 -1
  197. package/docs/Std.Math/Binom.md +1 -1
  198. package/docs/Std.Math/BitSizeI.md +1 -1
  199. package/docs/Std.Math/BitSizeL.md +1 -1
  200. package/docs/Std.Math/Ceiling.md +1 -1
  201. package/docs/Std.Math/Complex.md +1 -1
  202. package/docs/Std.Math/ComplexPolar.md +1 -1
  203. package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
  204. package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
  205. package/docs/Std.Math/Cos.md +1 -1
  206. package/docs/Std.Math/Cosh.md +1 -1
  207. package/docs/Std.Math/DivRemI.md +1 -1
  208. package/docs/Std.Math/DivRemL.md +1 -1
  209. package/docs/Std.Math/DividedByC.md +1 -1
  210. package/docs/Std.Math/DividedByCP.md +1 -1
  211. package/docs/Std.Math/E.md +1 -1
  212. package/docs/Std.Math/ExpModI.md +1 -1
  213. package/docs/Std.Math/ExpModL.md +1 -1
  214. package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
  215. package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
  216. package/docs/Std.Math/FactorialI.md +1 -1
  217. package/docs/Std.Math/FactorialL.md +1 -1
  218. package/docs/Std.Math/Floor.md +1 -1
  219. package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
  220. package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
  221. package/docs/Std.Math/HammingWeightI.md +1 -1
  222. package/docs/Std.Math/InverseModI.md +1 -1
  223. package/docs/Std.Math/InverseModL.md +1 -1
  224. package/docs/Std.Math/IsCoprimeI.md +1 -1
  225. package/docs/Std.Math/IsCoprimeL.md +1 -1
  226. package/docs/Std.Math/IsInfinite.md +1 -1
  227. package/docs/Std.Math/IsNaN.md +1 -1
  228. package/docs/Std.Math/LargestFixedPoint.md +1 -1
  229. package/docs/Std.Math/Lg.md +1 -1
  230. package/docs/Std.Math/Log.md +1 -1
  231. package/docs/Std.Math/Log10.md +1 -1
  232. package/docs/Std.Math/LogFactorialD.md +1 -1
  233. package/docs/Std.Math/LogGammaD.md +1 -1
  234. package/docs/Std.Math/LogOf2.md +1 -1
  235. package/docs/Std.Math/Max.md +1 -1
  236. package/docs/Std.Math/MaxD.md +1 -1
  237. package/docs/Std.Math/MaxI.md +1 -1
  238. package/docs/Std.Math/MaxL.md +1 -1
  239. package/docs/Std.Math/Min.md +1 -1
  240. package/docs/Std.Math/MinD.md +1 -1
  241. package/docs/Std.Math/MinI.md +1 -1
  242. package/docs/Std.Math/MinL.md +1 -1
  243. package/docs/Std.Math/MinusC.md +1 -1
  244. package/docs/Std.Math/MinusCP.md +1 -1
  245. package/docs/Std.Math/ModulusI.md +1 -1
  246. package/docs/Std.Math/ModulusL.md +1 -1
  247. package/docs/Std.Math/NegationC.md +1 -1
  248. package/docs/Std.Math/NegationCP.md +1 -1
  249. package/docs/Std.Math/PI.md +1 -1
  250. package/docs/Std.Math/PNorm.md +1 -1
  251. package/docs/Std.Math/PNormalized.md +1 -1
  252. package/docs/Std.Math/PlusC.md +1 -1
  253. package/docs/Std.Math/PlusCP.md +1 -1
  254. package/docs/Std.Math/PowC.md +1 -1
  255. package/docs/Std.Math/PowCP.md +1 -1
  256. package/docs/Std.Math/RealMod.md +1 -1
  257. package/docs/Std.Math/Round.md +1 -1
  258. package/docs/Std.Math/SignD.md +1 -1
  259. package/docs/Std.Math/SignI.md +1 -1
  260. package/docs/Std.Math/SignL.md +1 -1
  261. package/docs/Std.Math/Sin.md +1 -1
  262. package/docs/Std.Math/Sinh.md +1 -1
  263. package/docs/Std.Math/SmallestFixedPoint.md +1 -1
  264. package/docs/Std.Math/Sqrt.md +1 -1
  265. package/docs/Std.Math/SquaredNorm.md +1 -1
  266. package/docs/Std.Math/Tan.md +1 -1
  267. package/docs/Std.Math/Tanh.md +1 -1
  268. package/docs/Std.Math/TimesC.md +1 -1
  269. package/docs/Std.Math/TimesCP.md +1 -1
  270. package/docs/Std.Math/TrailingZeroCountI.md +1 -1
  271. package/docs/Std.Math/TrailingZeroCountL.md +1 -1
  272. package/docs/Std.Math/Truncate.md +1 -1
  273. package/docs/Std.Math/index.md +1 -1
  274. package/docs/Std.Measurement/MResetEachZ.md +1 -1
  275. package/docs/Std.Measurement/MResetX.md +1 -1
  276. package/docs/Std.Measurement/MResetY.md +1 -1
  277. package/docs/Std.Measurement/MResetZ.md +1 -1
  278. package/docs/Std.Measurement/MeasureAllZ.md +1 -1
  279. package/docs/Std.Measurement/MeasureEachZ.md +1 -1
  280. package/docs/Std.Measurement/MeasureInteger.md +1 -1
  281. package/docs/Std.Measurement/index.md +1 -1
  282. package/docs/Std.Random/DrawRandomBool.md +1 -1
  283. package/docs/Std.Random/DrawRandomDouble.md +1 -1
  284. package/docs/Std.Random/DrawRandomInt.md +1 -1
  285. package/docs/Std.Random/index.md +1 -1
  286. package/docs/Std.Range/IsRangeEmpty.md +1 -1
  287. package/docs/Std.Range/RangeEnd.md +1 -1
  288. package/docs/Std.Range/RangeReverse.md +1 -1
  289. package/docs/Std.Range/RangeStart.md +1 -1
  290. package/docs/Std.Range/RangeStep.md +1 -1
  291. package/docs/Std.Range/index.md +1 -1
  292. package/docs/Std.ResourceEstimation/AccountForEstimates.md +1 -1
  293. package/docs/Std.ResourceEstimation/AuxQubitCount.md +1 -1
  294. package/docs/Std.ResourceEstimation/BeginEstimateCaching.md +1 -1
  295. package/docs/Std.ResourceEstimation/BeginRepeatEstimates.md +1 -1
  296. package/docs/Std.ResourceEstimation/CczCount.md +1 -1
  297. package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
  298. package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
  299. package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
  300. package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
  301. package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
  302. package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
  303. package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
  304. package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
  305. package/docs/Std.ResourceEstimation/TCount.md +1 -1
  306. package/docs/Std.ResourceEstimation/index.md +1 -1
  307. package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
  308. package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
  309. package/docs/Std.StatePreparation/PrepareUniformSuperposition.md +1 -1
  310. package/docs/Std.StatePreparation/index.md +1 -1
  311. package/docs/Std.TableLookup/Select.md +1 -1
  312. package/docs/Std.TableLookup/index.md +1 -1
  313. package/docs/index.md +1 -1
  314. package/lib/node/qsc_wasm.cjs +2 -2
  315. package/lib/node/qsc_wasm_bg.wasm +0 -0
  316. package/lib/web/qsc_wasm.js +2 -2
  317. package/lib/web/qsc_wasm_bg.wasm +0 -0
  318. package/package.json +1 -1
  319. package/ux/circuit-vis/circuit.ts +11 -0
  320. package/ux/circuit-vis/circuitManipulation.ts +549 -0
  321. package/ux/circuit-vis/constants.ts +7 -0
  322. package/ux/circuit-vis/contextMenu.ts +376 -0
  323. package/ux/circuit-vis/draggable.ts +352 -0
  324. package/ux/circuit-vis/events.ts +818 -0
  325. package/ux/circuit-vis/formatters/gateFormatter.ts +56 -23
  326. package/ux/circuit-vis/formatters/inputFormatter.ts +38 -7
  327. package/ux/circuit-vis/formatters/registerFormatter.ts +12 -30
  328. package/ux/circuit-vis/index.ts +16 -11
  329. package/ux/circuit-vis/metadata.ts +3 -1
  330. package/ux/circuit-vis/panel.ts +333 -0
  331. package/ux/circuit-vis/process.ts +136 -232
  332. package/ux/circuit-vis/sqore.ts +231 -116
  333. package/ux/circuit-vis/utils.ts +269 -1
  334. package/ux/circuit.tsx +71 -37
  335. package/ux/data.ts +4 -2
  336. package/ux/index.ts +1 -1
  337. package/ux/qsharp-circuit.css +260 -4
  338. package/ux/circuit-vis/styles.ts +0 -236
@@ -29,15 +29,18 @@ import {
29
29
  /**
30
30
  * Given an array of operations (in metadata format), return the SVG representation.
31
31
  *
32
- * @param opsMetadata Array of Metadata representation of operations.
32
+ * @param opsMetadata 2D array of Metadata representation of operations.
33
33
  * @param nestedDepth Depth of nested operations (used in classically controlled and grouped operations).
34
34
  *
35
35
  * @returns SVG representation of operations.
36
36
  */
37
- const formatGates = (opsMetadata: Metadata[], nestedDepth = 0): SVGElement => {
38
- const formattedGates: SVGElement[] = opsMetadata.map((metadata) =>
39
- _formatGate(metadata, nestedDepth),
40
- );
37
+ const formatGates = (
38
+ opsMetadata: Metadata[][],
39
+ nestedDepth = 0,
40
+ ): SVGElement => {
41
+ const formattedGates: SVGElement[] = opsMetadata
42
+ .map((col) => col.map((metadata) => formatGate(metadata, nestedDepth)))
43
+ .flat();
41
44
  return group(formattedGates);
42
45
  };
43
46
 
@@ -49,7 +52,7 @@ const formatGates = (opsMetadata: Metadata[], nestedDepth = 0): SVGElement => {
49
52
  *
50
53
  * @returns SVG representation of gate.
51
54
  */
52
- const _formatGate = (metadata: Metadata, nestedDepth = 0): SVGElement => {
55
+ const formatGate = (metadata: Metadata, nestedDepth = 0): SVGElement => {
53
56
  const { type, x, controlsY, targetsY, label, displayArgs, width } = metadata;
54
57
  switch (type) {
55
58
  case GateType.Measure:
@@ -62,6 +65,8 @@ const _formatGate = (metadata: Metadata, nestedDepth = 0): SVGElement => {
62
65
  );
63
66
  case GateType.X:
64
67
  return _createGate([_x(metadata, nestedDepth)], metadata, nestedDepth);
68
+ case GateType.Ket:
69
+ return _createGate([_ket(label, metadata)], metadata, nestedDepth);
65
70
  case GateType.Swap:
66
71
  return controlsY.length > 0
67
72
  ? _controlledGate(metadata, nestedDepth)
@@ -209,12 +214,14 @@ const _measure = (x: number, y: number): SVGElement => {
209
214
  "gate-measure",
210
215
  );
211
216
  const mArc: SVGElement = arc(x + 5, y + 2, width / 2 - 5, height / 2 - 8);
217
+ mArc.style.pointerEvents = "none";
212
218
  const meter: SVGElement = line(
213
219
  x + width / 2,
214
220
  y + 8,
215
221
  x + width - 8,
216
222
  y - height / 2 + 8,
217
223
  );
224
+ meter.style.pointerEvents = "none";
218
225
  return group([mBox, mArc, meter]);
219
226
  };
220
227
 
@@ -226,7 +233,9 @@ const _measure = (x: number, y: number): SVGElement => {
226
233
  * @param y Array of y coords of registers acted upon by gate.
227
234
  * @param width Width of gate.
228
235
  * @param displayArgs Arguments passed in to gate.
236
+ * @param params Non-Qubit required parameters for the unitary gate.
229
237
  * @param renderDashedLine If true, draw dashed lines between non-adjacent unitaries.
238
+ * @param cssClass Optional CSS class to apply to the unitary gate for styling.
230
239
  *
231
240
  * @returns SVG representation of unitary gate.
232
241
  */
@@ -237,6 +246,7 @@ const _unitary = (
237
246
  width: number,
238
247
  displayArgs?: string,
239
248
  renderDashedLine = true,
249
+ cssClass?: string,
240
250
  ): SVGElement => {
241
251
  if (y.length === 0)
242
252
  throw new Error(
@@ -248,7 +258,7 @@ const _unitary = (
248
258
  const maxY: number = group[group.length - 1],
249
259
  minY: number = group[0];
250
260
  const height: number = maxY - minY + gateHeight;
251
- return _unitaryBox(label, x, minY, width, height, displayArgs);
261
+ return _unitaryBox(label, x, minY, width, height, displayArgs, cssClass);
252
262
  });
253
263
 
254
264
  // Draw dashed line between disconnected unitaries
@@ -273,6 +283,7 @@ const _unitary = (
273
283
  * @param width Width of gate.
274
284
  * @param height Height of gate.
275
285
  * @param displayArgs Arguments passed in to gate.
286
+ * @param cssClass Optional CSS class to apply to the unitary gate for styling.
276
287
  *
277
288
  * @returns SVG representation of unitary box.
278
289
  */
@@ -283,16 +294,22 @@ const _unitaryBox = (
283
294
  width: number,
284
295
  height: number = gateHeight,
285
296
  displayArgs?: string,
297
+ cssClass?: string,
286
298
  ): SVGElement => {
287
299
  y -= gateHeight / 2;
288
300
  const uBox: SVGElement = box(x - width / 2, y, width, height);
301
+ if (cssClass != null) {
302
+ uBox.setAttribute("class", cssClass);
303
+ }
289
304
  const labelY = y + height / 2 - (displayArgs == null ? 0 : 7);
290
305
  const labelText: SVGElement = text(label, x, labelY);
291
306
  const elems = [uBox, labelText];
292
307
  if (displayArgs != null) {
293
308
  const argStrY = y + height / 2 + 8;
294
- const argText: SVGElement = text(displayArgs, x, argStrY, argsFontSize);
295
- elems.push(argText);
309
+
310
+ const argButton: SVGElement = text(displayArgs, x, argStrY, argsFontSize);
311
+ argButton.setAttribute("class", "arg-button");
312
+ elems.push(argButton);
296
313
  }
297
314
  return group(elems);
298
315
  };
@@ -315,8 +332,10 @@ const _swap = (metadata: Metadata, nestedDepth: number): SVGElement => {
315
332
  const bg: SVGElement = box(x1, y1, x2, y2, "gate-swap");
316
333
  const crosses: SVGElement[] = ys.map((y) => _cross(x, y));
317
334
  const vertLine: SVGElement = line(x, ys[0], x, ys[1]);
335
+ vertLine.style.pointerEvents = "none";
318
336
  return group([bg, ...crosses, vertLine]);
319
337
  };
338
+
320
339
  /**
321
340
  * Creates the SVG for an X gate
322
341
  *
@@ -328,6 +347,30 @@ const _x = (metadata: Metadata, _: number): SVGElement => {
328
347
  const ys = targetsY.flatMap((y) => y as number[]);
329
348
  return _oplus(x, ys[0]);
330
349
  };
350
+
351
+ /**
352
+ * Creates the SVG for a ket notation (e.g "|0⟩" or "|1⟩") gate.
353
+ *
354
+ * @param label The label for the ket notation (e.g., "0" or "1").
355
+ * @param metadata The metadata object containing information about the gate's position and appearance.
356
+ *
357
+ * @returns SVG representation of the ket notation gate.
358
+ */
359
+ const _ket = (label: string, metadata: Metadata): SVGElement => {
360
+ const { x, targetsY, width } = metadata;
361
+ const gate = _unitary(
362
+ `|${label}〉`,
363
+ x,
364
+ targetsY as number[][],
365
+ width,
366
+ undefined,
367
+ false,
368
+ "gate-ket",
369
+ );
370
+ gate.querySelector("text")!.setAttribute("class", "ket-text");
371
+ return gate;
372
+ };
373
+
331
374
  /**
332
375
  * Generates cross for display in SWAP gate.
333
376
  *
@@ -396,6 +439,7 @@ const _controlledGate = (
396
439
  const maxY: number = Math.max(...controlsY, ...(targetsY as number[]));
397
440
  const minY: number = Math.min(...controlsY, ...(targetsY as number[]));
398
441
  const vertLine: SVGElement = line(x, minY, x, maxY);
442
+ vertLine.style.pointerEvents = "none";
399
443
  const svg: SVGElement = _createGate(
400
444
  [vertLine, ...controlledDotsSvg, ...targetGateSvgs],
401
445
  metadata,
@@ -439,7 +483,7 @@ const _groupedOperations = (
439
483
  const box: SVGElement = dashedBox(x1, y1, x2, y2);
440
484
  const elems: SVGElement[] = [box];
441
485
  if (children != null)
442
- elems.push(formatGates(children as Metadata[], nestedDepth + 1));
486
+ elems.push(formatGates(children as Metadata[][], nestedDepth + 1));
443
487
  return _createGate(elems, metadata, nestedDepth);
444
488
  };
445
489
 
@@ -457,7 +501,7 @@ const _classicalControlled = (
457
501
  ): SVGElement => {
458
502
  const { controlsY, dataAttributes } = metadata;
459
503
  const targetsY: number[] = metadata.targetsY as number[];
460
- const children: Metadata[][] = metadata.children as Metadata[][];
504
+ const children: Metadata[][][] = metadata.children as Metadata[][][];
461
505
  let { x, width } = metadata;
462
506
 
463
507
  const controlY = controlsY[0];
@@ -543,15 +587,4 @@ const _controlCircle = (
543
587
  class: "classically-controlled-btn",
544
588
  });
545
589
 
546
- export {
547
- formatGates,
548
- _formatGate,
549
- _createGate,
550
- _zoomButton,
551
- _measure,
552
- _unitary,
553
- _swap,
554
- _controlledGate,
555
- _groupedOperations,
556
- _classicalControlled,
557
- };
590
+ export { formatGates, formatGate };
@@ -27,15 +27,15 @@ const formatInputs = (
27
27
  const registers: RegisterMap = {};
28
28
 
29
29
  let currY: number = startY;
30
- qubits.forEach(({ id, numChildren }) => {
30
+ qubits.forEach(({ id, numResults }) => {
31
31
  // Add qubit wire to list of qubit wires
32
- qubitWires.push(_qubitInput(currY));
32
+ qubitWires.push(_qubitInput(currY, id.toString()));
33
33
 
34
34
  // Create qubit register
35
35
  registers[id] = { type: RegisterType.Qubit, y: currY };
36
36
 
37
37
  // If there are no attached classical registers, increment y by fixed register height
38
- if (numChildren == null || numChildren === 0) {
38
+ if (numResults == null || numResults === 0) {
39
39
  currY += registerHeight;
40
40
  return;
41
41
  }
@@ -44,7 +44,7 @@ const formatInputs = (
44
44
  currY += classicalRegHeight;
45
45
 
46
46
  // Add classical wires
47
- registers[id].children = Array.from(Array(numChildren), () => {
47
+ registers[id].children = Array.from(Array(numResults), () => {
48
48
  const clsReg: RegisterMetadata = {
49
49
  type: RegisterType.Classical,
50
50
  y: currY,
@@ -55,7 +55,7 @@ const formatInputs = (
55
55
  });
56
56
 
57
57
  return {
58
- qubitWires: group(qubitWires),
58
+ qubitWires: group(qubitWires, { class: "qubit-input-states" }),
59
59
  registers,
60
60
  svgHeight: currY,
61
61
  };
@@ -68,8 +68,39 @@ const formatInputs = (
68
68
  *
69
69
  * @returns SVG text component for the input register.
70
70
  */
71
- const _qubitInput = (y: number): SVGElement => {
72
- const el: SVGElement = text("|0⟩", leftPadding, y, 16);
71
+ const _qubitInput = (y: number, subscript?: string): SVGElement => {
72
+ const el: SVGElement = text("", leftPadding, y, 16);
73
+
74
+ // Create the main text node
75
+ const mainText = document.createElementNS(
76
+ "http://www.w3.org/2000/svg",
77
+ "tspan",
78
+ );
79
+ mainText.textContent = "|𝜓";
80
+
81
+ // Create the subscript node if provided
82
+ if (subscript) {
83
+ const subscriptText = document.createElementNS(
84
+ "http://www.w3.org/2000/svg",
85
+ "tspan",
86
+ );
87
+ subscriptText.textContent = subscript;
88
+ subscriptText.setAttribute("baseline-shift", "sub");
89
+ subscriptText.setAttribute("font-size", "65%");
90
+ mainText.appendChild(subscriptText);
91
+ }
92
+
93
+ // Add the closing part of the text
94
+ const closingText = document.createElementNS(
95
+ "http://www.w3.org/2000/svg",
96
+ "tspan",
97
+ );
98
+ closingText.textContent = "⟩";
99
+
100
+ // Append all parts to the main SVG text element
101
+ el.appendChild(mainText);
102
+ el.appendChild(closingText);
103
+
73
104
  el.setAttribute("text-anchor", "start");
74
105
  el.setAttribute("dominant-baseline", "middle");
75
106
  return el;
@@ -4,7 +4,7 @@
4
4
  import { RegisterMap } from "../register";
5
5
  import { regLineStart } from "../constants";
6
6
  import { Metadata, GateType } from "../metadata";
7
- import { group, line, text } from "./formatUtils";
7
+ import { group, line } from "./formatUtils";
8
8
 
9
9
  /**
10
10
  * Generate the SVG representation of the qubit register wires in `registers` and the classical wires
@@ -24,7 +24,15 @@ const formatRegisters = (
24
24
  const formattedRegs: SVGElement[] = [];
25
25
  // Render qubit wires
26
26
  for (const qId in registers) {
27
- formattedRegs.push(_qubitRegister(Number(qId), endX, registers[qId].y));
27
+ formattedRegs.push(
28
+ line(
29
+ regLineStart,
30
+ registers[qId].y,
31
+ endX,
32
+ registers[qId].y,
33
+ "qubit-wire",
34
+ ),
35
+ );
28
36
  }
29
37
  // Render classical wires
30
38
  measureGates.forEach(({ type, x, targetsY, controlsY }) => {
@@ -34,7 +42,7 @@ const formatRegisters = (
34
42
  formattedRegs.push(_classicalRegister(x, gateY, endX, y));
35
43
  });
36
44
  });
37
- return group(formattedRegs);
45
+ return group(formattedRegs, { class: "wires" });
38
46
  };
39
47
 
40
48
  /**
@@ -89,30 +97,4 @@ const _classicalRegister = (
89
97
  return group([vLine1, vLine2, hLine1, hLine2]);
90
98
  };
91
99
 
92
- /**
93
- * Generates the SVG representation of a qubit register.
94
- *
95
- * @param qId Qubit register index.
96
- * @param endX End x coord.
97
- * @param y y coord of wire.
98
- * @param labelOffset y offset for wire label.
99
- *
100
- * @returns SVG representation of the given qubit register.
101
- */
102
- const _qubitRegister = (
103
- qId: number,
104
- endX: number,
105
- y: number,
106
- labelOffset = 16,
107
- ): SVGElement => {
108
- const wire: SVGElement = line(regLineStart, y, endX, y);
109
-
110
- const label: SVGElement = text(`q${qId}`, regLineStart, y - labelOffset);
111
- label.setAttribute("dominant-baseline", "hanging");
112
- label.setAttribute("text-anchor", "start");
113
- label.setAttribute("font-size", "75%");
114
-
115
- return group([wire, label]);
116
- };
117
-
118
- export { formatRegisters, _classicalRegister, _qubitRegister };
100
+ export { formatRegisters };
@@ -2,29 +2,34 @@
2
2
  // Licensed under the MIT license.
3
3
 
4
4
  import { Sqore } from "./sqore";
5
- import { Circuit } from "./circuit";
6
- import { StyleConfig } from "./styles";
5
+ import { CircuitGroup } from "./circuit";
7
6
 
8
7
  /**
9
8
  * Render `circuit` into `container` at the specified layer depth.
10
9
  *
11
- * @param circuit Circuit to be visualized.
10
+ * @param circuitGroup Group of circuits to be visualized.
12
11
  * @param container HTML element for rendering visualization into.
13
- * @param style Custom visualization style.
14
12
  * @param renderDepth Initial layer depth at which to render gates.
13
+ * @param isEditable Whether the circuit is editable.
14
+ * @param editCallback Callback function to be called when the circuit is edited.
15
15
  */
16
16
  export const draw = (
17
- circuit: Circuit,
17
+ circuitGroup: CircuitGroup,
18
18
  container: HTMLElement,
19
- style: StyleConfig | string = {},
20
19
  renderDepth = 0,
20
+ isEditable = false,
21
+ editCallback?: (circuitGroup: CircuitGroup) => void,
21
22
  ): void => {
22
- const sqore = new Sqore(circuit, style);
23
+ const sqore = new Sqore(circuitGroup, isEditable, editCallback);
23
24
  sqore.draw(container, renderDepth);
24
25
  };
25
26
 
26
- export { STYLES } from "./styles";
27
-
28
27
  // Export types
29
- export type { StyleConfig } from "./styles";
30
- export type { Circuit, Qubit, Operation } from "./circuit";
28
+ export type {
29
+ CircuitGroup,
30
+ Circuit,
31
+ ComponentGrid,
32
+ Column,
33
+ Qubit,
34
+ Operation,
35
+ } from "./circuit";
@@ -15,6 +15,8 @@ export enum GateType {
15
15
  Swap,
16
16
  /** X gate. */
17
17
  X,
18
+ /** |0〉 or |1〉 gate. */
19
+ Ket,
18
20
  /** Single/multi qubit unitary gate. */
19
21
  Unitary,
20
22
  /** Single/multi controlled unitary gate. */
@@ -50,7 +52,7 @@ export interface Metadata {
50
52
  /** Gate width. */
51
53
  width: number;
52
54
  /** Children operations as part of group. */
53
- children?: (Metadata | Metadata[])[];
55
+ children?: Metadata[][] | Metadata[][][];
54
56
  /** Custom data attributes to attach to gate element. */
55
57
  dataAttributes?: DataAttributes;
56
58
  }