qsharp-lang 1.13.1-dev → 1.13.3-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 (330) hide show
  1. package/dist/browser.d.ts +1 -0
  2. package/dist/compiler/compiler.d.ts +3 -3
  3. package/dist/compiler/compiler.js +2 -2
  4. package/dist/debug-service/debug-service.d.ts +1 -1
  5. package/dist/katas-content.generated.js +1 -1
  6. package/dist/katas-content.generated.md.js +1 -1
  7. package/dist/shared/circuit.d.ts +64 -0
  8. package/dist/shared/circuit.js +16 -0
  9. package/dist/shared/register.d.ts +35 -0
  10. package/dist/shared/register.js +10 -0
  11. package/docs/Microsoft.Quantum.Core/Length.md +1 -1
  12. package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
  13. package/docs/Microsoft.Quantum.Core/index.md +1 -1
  14. package/docs/Std.Arithmetic/AddLE.md +1 -1
  15. package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
  16. package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
  17. package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
  18. package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
  19. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
  20. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
  21. package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
  22. package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
  23. package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
  24. package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
  25. package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
  26. package/docs/Std.Arithmetic/IncByI.md +1 -1
  27. package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
  28. package/docs/Std.Arithmetic/IncByL.md +1 -1
  29. package/docs/Std.Arithmetic/IncByLE.md +1 -1
  30. package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
  31. package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
  32. package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
  33. package/docs/Std.Arithmetic/MAJ.md +1 -1
  34. package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
  35. package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
  36. package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
  37. package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
  38. package/docs/Std.Arithmetic/index.md +1 -1
  39. package/docs/Std.Arrays/All.md +1 -1
  40. package/docs/Std.Arrays/Any.md +1 -1
  41. package/docs/Std.Arrays/Chunks.md +1 -1
  42. package/docs/Std.Arrays/CircularlyShifted.md +1 -1
  43. package/docs/Std.Arrays/ColumnAt.md +1 -1
  44. package/docs/Std.Arrays/Count.md +1 -1
  45. package/docs/Std.Arrays/Diagonal.md +1 -1
  46. package/docs/Std.Arrays/DrawMany.md +1 -1
  47. package/docs/Std.Arrays/Enumerated.md +1 -1
  48. package/docs/Std.Arrays/Excluding.md +1 -1
  49. package/docs/Std.Arrays/Filtered.md +1 -1
  50. package/docs/Std.Arrays/FlatMapped.md +1 -1
  51. package/docs/Std.Arrays/Flattened.md +1 -1
  52. package/docs/Std.Arrays/Fold.md +1 -1
  53. package/docs/Std.Arrays/ForEach.md +1 -1
  54. package/docs/Std.Arrays/Head.md +1 -1
  55. package/docs/Std.Arrays/HeadAndRest.md +1 -1
  56. package/docs/Std.Arrays/IndexOf.md +1 -1
  57. package/docs/Std.Arrays/IndexRange.md +1 -1
  58. package/docs/Std.Arrays/Interleaved.md +1 -1
  59. package/docs/Std.Arrays/IsEmpty.md +1 -1
  60. package/docs/Std.Arrays/IsRectangularArray.md +1 -1
  61. package/docs/Std.Arrays/IsSorted.md +1 -1
  62. package/docs/Std.Arrays/IsSquareArray.md +1 -1
  63. package/docs/Std.Arrays/Mapped.md +1 -1
  64. package/docs/Std.Arrays/MappedByIndex.md +1 -1
  65. package/docs/Std.Arrays/MappedOverRange.md +1 -1
  66. package/docs/Std.Arrays/Most.md +1 -1
  67. package/docs/Std.Arrays/MostAndTail.md +1 -1
  68. package/docs/Std.Arrays/Padded.md +1 -1
  69. package/docs/Std.Arrays/Partitioned.md +1 -1
  70. package/docs/Std.Arrays/Rest.md +1 -1
  71. package/docs/Std.Arrays/Reversed.md +1 -1
  72. package/docs/Std.Arrays/SequenceI.md +1 -1
  73. package/docs/Std.Arrays/SequenceL.md +1 -1
  74. package/docs/Std.Arrays/Sorted.md +1 -1
  75. package/docs/Std.Arrays/Subarray.md +1 -1
  76. package/docs/Std.Arrays/Swapped.md +1 -1
  77. package/docs/Std.Arrays/Tail.md +1 -1
  78. package/docs/Std.Arrays/Transposed.md +1 -1
  79. package/docs/Std.Arrays/Unzipped.md +1 -1
  80. package/docs/Std.Arrays/Where.md +1 -1
  81. package/docs/Std.Arrays/Windows.md +1 -1
  82. package/docs/Std.Arrays/Zipped.md +1 -1
  83. package/docs/Std.Arrays/index.md +1 -1
  84. package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
  85. package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
  86. package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
  87. package/docs/Std.Canon/ApplyP.md +1 -1
  88. package/docs/Std.Canon/ApplyPauli.md +1 -1
  89. package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
  90. package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
  91. package/docs/Std.Canon/ApplyQFT.md +1 -1
  92. package/docs/Std.Canon/ApplyToEach.md +1 -1
  93. package/docs/Std.Canon/ApplyToEachA.md +1 -1
  94. package/docs/Std.Canon/ApplyToEachC.md +1 -1
  95. package/docs/Std.Canon/ApplyToEachCA.md +1 -1
  96. package/docs/Std.Canon/ApplyXorInPlace.md +1 -1
  97. package/docs/Std.Canon/ApplyXorInPlaceL.md +1 -1
  98. package/docs/Std.Canon/CX.md +1 -1
  99. package/docs/Std.Canon/CY.md +1 -1
  100. package/docs/Std.Canon/CZ.md +1 -1
  101. package/docs/Std.Canon/Fst.md +1 -1
  102. package/docs/Std.Canon/Relabel.md +1 -1
  103. package/docs/Std.Canon/Snd.md +1 -1
  104. package/docs/Std.Canon/SwapReverseRegister.md +1 -1
  105. package/docs/Std.Canon/index.md +1 -1
  106. package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
  107. package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
  108. package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
  109. package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
  110. package/docs/Std.Convert/BoolAsResult.md +1 -1
  111. package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
  112. package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
  113. package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
  114. package/docs/Std.Convert/IntAsBigInt.md +1 -1
  115. package/docs/Std.Convert/IntAsBoolArray.md +1 -1
  116. package/docs/Std.Convert/IntAsDouble.md +1 -1
  117. package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
  118. package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
  119. package/docs/Std.Convert/ResultAsBool.md +1 -1
  120. package/docs/Std.Convert/index.md +1 -1
  121. package/docs/Std.Core/Length.md +1 -1
  122. package/docs/Std.Core/Repeated.md +1 -1
  123. package/docs/Std.Core/index.md +1 -1
  124. package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
  125. package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
  126. package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
  127. package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
  128. package/docs/Std.Diagnostics/CheckZero.md +1 -1
  129. package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
  130. package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
  131. package/docs/Std.Diagnostics/DumpMachine.md +1 -1
  132. package/docs/Std.Diagnostics/DumpOperation.md +1 -1
  133. package/docs/Std.Diagnostics/DumpRegister.md +1 -1
  134. package/docs/Std.Diagnostics/Fact.md +1 -1
  135. package/docs/Std.Diagnostics/NoNoise.md +1 -1
  136. package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
  137. package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
  138. package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
  139. package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
  140. package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
  141. package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
  142. package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
  143. package/docs/Std.Diagnostics/index.md +1 -1
  144. package/docs/Std.Intrinsic/AND.md +1 -1
  145. package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
  146. package/docs/Std.Intrinsic/CCNOT.md +1 -1
  147. package/docs/Std.Intrinsic/CNOT.md +1 -1
  148. package/docs/Std.Intrinsic/Exp.md +1 -1
  149. package/docs/Std.Intrinsic/H.md +1 -1
  150. package/docs/Std.Intrinsic/I.md +1 -1
  151. package/docs/Std.Intrinsic/M.md +1 -1
  152. package/docs/Std.Intrinsic/Measure.md +1 -1
  153. package/docs/Std.Intrinsic/Message.md +1 -1
  154. package/docs/Std.Intrinsic/R.md +1 -1
  155. package/docs/Std.Intrinsic/R1.md +1 -1
  156. package/docs/Std.Intrinsic/R1Frac.md +1 -1
  157. package/docs/Std.Intrinsic/RFrac.md +1 -1
  158. package/docs/Std.Intrinsic/Reset.md +1 -1
  159. package/docs/Std.Intrinsic/ResetAll.md +1 -1
  160. package/docs/Std.Intrinsic/Rx.md +1 -1
  161. package/docs/Std.Intrinsic/Rxx.md +1 -1
  162. package/docs/Std.Intrinsic/Ry.md +1 -1
  163. package/docs/Std.Intrinsic/Ryy.md +1 -1
  164. package/docs/Std.Intrinsic/Rz.md +1 -1
  165. package/docs/Std.Intrinsic/Rzz.md +1 -1
  166. package/docs/Std.Intrinsic/S.md +1 -1
  167. package/docs/Std.Intrinsic/SWAP.md +1 -1
  168. package/docs/Std.Intrinsic/T.md +1 -1
  169. package/docs/Std.Intrinsic/X.md +1 -1
  170. package/docs/Std.Intrinsic/Y.md +1 -1
  171. package/docs/Std.Intrinsic/Z.md +1 -1
  172. package/docs/Std.Intrinsic/index.md +1 -1
  173. package/docs/Std.Logical/Xor.md +1 -1
  174. package/docs/Std.Logical/index.md +1 -1
  175. package/docs/Std.Math/AbsComplex.md +1 -1
  176. package/docs/Std.Math/AbsComplexPolar.md +1 -1
  177. package/docs/Std.Math/AbsD.md +1 -1
  178. package/docs/Std.Math/AbsI.md +1 -1
  179. package/docs/Std.Math/AbsL.md +1 -1
  180. package/docs/Std.Math/AbsSquaredComplex.md +1 -1
  181. package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
  182. package/docs/Std.Math/ApproximateFactorial.md +1 -1
  183. package/docs/Std.Math/ArcCos.md +1 -1
  184. package/docs/Std.Math/ArcCosh.md +1 -1
  185. package/docs/Std.Math/ArcSin.md +1 -1
  186. package/docs/Std.Math/ArcSinh.md +1 -1
  187. package/docs/Std.Math/ArcTan.md +1 -1
  188. package/docs/Std.Math/ArcTan2.md +1 -1
  189. package/docs/Std.Math/ArcTanh.md +1 -1
  190. package/docs/Std.Math/ArgComplex.md +1 -1
  191. package/docs/Std.Math/ArgComplexPolar.md +1 -1
  192. package/docs/Std.Math/Binom.md +1 -1
  193. package/docs/Std.Math/BitSizeI.md +1 -1
  194. package/docs/Std.Math/BitSizeL.md +1 -1
  195. package/docs/Std.Math/Ceiling.md +1 -1
  196. package/docs/Std.Math/Complex.md +1 -1
  197. package/docs/Std.Math/ComplexPolar.md +1 -1
  198. package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
  199. package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
  200. package/docs/Std.Math/Cos.md +1 -1
  201. package/docs/Std.Math/Cosh.md +1 -1
  202. package/docs/Std.Math/DivRemI.md +1 -1
  203. package/docs/Std.Math/DivRemL.md +1 -1
  204. package/docs/Std.Math/DividedByC.md +1 -1
  205. package/docs/Std.Math/DividedByCP.md +1 -1
  206. package/docs/Std.Math/E.md +1 -1
  207. package/docs/Std.Math/ExpModI.md +1 -1
  208. package/docs/Std.Math/ExpModL.md +1 -1
  209. package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
  210. package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
  211. package/docs/Std.Math/FactorialI.md +1 -1
  212. package/docs/Std.Math/FactorialL.md +1 -1
  213. package/docs/Std.Math/Floor.md +1 -1
  214. package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
  215. package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
  216. package/docs/Std.Math/HammingWeightI.md +1 -1
  217. package/docs/Std.Math/InverseModI.md +1 -1
  218. package/docs/Std.Math/InverseModL.md +1 -1
  219. package/docs/Std.Math/IsCoprimeI.md +1 -1
  220. package/docs/Std.Math/IsCoprimeL.md +1 -1
  221. package/docs/Std.Math/IsInfinite.md +1 -1
  222. package/docs/Std.Math/IsNaN.md +1 -1
  223. package/docs/Std.Math/LargestFixedPoint.md +1 -1
  224. package/docs/Std.Math/Lg.md +1 -1
  225. package/docs/Std.Math/Log.md +1 -1
  226. package/docs/Std.Math/Log10.md +1 -1
  227. package/docs/Std.Math/LogFactorialD.md +1 -1
  228. package/docs/Std.Math/LogGammaD.md +1 -1
  229. package/docs/Std.Math/LogOf2.md +1 -1
  230. package/docs/Std.Math/Max.md +1 -1
  231. package/docs/Std.Math/MaxD.md +1 -1
  232. package/docs/Std.Math/MaxI.md +1 -1
  233. package/docs/Std.Math/MaxL.md +1 -1
  234. package/docs/Std.Math/Min.md +1 -1
  235. package/docs/Std.Math/MinD.md +1 -1
  236. package/docs/Std.Math/MinI.md +1 -1
  237. package/docs/Std.Math/MinL.md +1 -1
  238. package/docs/Std.Math/MinusC.md +1 -1
  239. package/docs/Std.Math/MinusCP.md +1 -1
  240. package/docs/Std.Math/ModulusI.md +1 -1
  241. package/docs/Std.Math/ModulusL.md +1 -1
  242. package/docs/Std.Math/NegationC.md +1 -1
  243. package/docs/Std.Math/NegationCP.md +1 -1
  244. package/docs/Std.Math/PI.md +1 -1
  245. package/docs/Std.Math/PNorm.md +1 -1
  246. package/docs/Std.Math/PNormalized.md +1 -1
  247. package/docs/Std.Math/PlusC.md +1 -1
  248. package/docs/Std.Math/PlusCP.md +1 -1
  249. package/docs/Std.Math/PowC.md +1 -1
  250. package/docs/Std.Math/PowCP.md +1 -1
  251. package/docs/Std.Math/RealMod.md +1 -1
  252. package/docs/Std.Math/Round.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/index.md +1 -1
  305. package/docs/Std.TableLookup/Select.md +1 -1
  306. package/docs/Std.TableLookup/index.md +1 -1
  307. package/docs/index.md +1 -1
  308. package/lib/node/qsc_wasm.cjs +17 -14
  309. package/lib/node/qsc_wasm.d.cts +3 -6
  310. package/lib/node/qsc_wasm_bg.wasm +0 -0
  311. package/lib/web/qsc_wasm.d.ts +4 -7
  312. package/lib/web/qsc_wasm.js +17 -14
  313. package/lib/web/qsc_wasm_bg.wasm +0 -0
  314. package/package.json +1 -1
  315. package/ux/circuit-vis/README.md +1 -0
  316. package/ux/circuit-vis/circuit.ts +10 -0
  317. package/ux/circuit-vis/constants.ts +39 -0
  318. package/ux/circuit-vis/formatters/formatUtils.ts +220 -0
  319. package/ux/circuit-vis/formatters/gateFormatter.ts +557 -0
  320. package/ux/circuit-vis/formatters/inputFormatter.ts +78 -0
  321. package/ux/circuit-vis/formatters/registerFormatter.ts +118 -0
  322. package/ux/circuit-vis/index.ts +30 -0
  323. package/ux/circuit-vis/metadata.ts +56 -0
  324. package/ux/circuit-vis/process.ts +536 -0
  325. package/ux/circuit-vis/register.ts +9 -0
  326. package/ux/circuit-vis/sqore.ts +376 -0
  327. package/ux/circuit-vis/styles.ts +236 -0
  328. package/ux/circuit-vis/utils.ts +77 -0
  329. package/ux/circuit.tsx +2 -2
  330. package/ux/data.ts +1 -1
@@ -0,0 +1,220 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ import { labelFontSize, svgNS } from "../constants";
5
+
6
+ // Helper functions for basic SVG components
7
+
8
+ /**
9
+ * Create an SVG element.
10
+ *
11
+ * @param type The type of element to be created.
12
+ * @param attributes The attributes that define the element.
13
+ *
14
+ * @returns SVG element.
15
+ */
16
+ export const createSvgElement = (
17
+ type: string,
18
+ attributes: { [attr: string]: string } = {},
19
+ ): SVGElement => {
20
+ const el: SVGElement = document.createElementNS(svgNS, type);
21
+ Object.entries(attributes).forEach(([attrName, attrVal]) =>
22
+ el.setAttribute(attrName, attrVal),
23
+ );
24
+ return el;
25
+ };
26
+
27
+ /**
28
+ * Given an array of SVG elements, group them as an SVG group using the `<g>` tag.
29
+ *
30
+ * @param svgElems Array of SVG elements.
31
+ * @param attributes Key-value pairs of attributes and they values.
32
+ *
33
+ * @returns SVG element for grouped elements.
34
+ */
35
+ export const group = (
36
+ svgElems: SVGElement[],
37
+ attributes: { [attr: string]: string } = {},
38
+ ): SVGElement => {
39
+ const el: SVGElement = createSvgElement("g", attributes);
40
+ svgElems.forEach((child: SVGElement) => el.appendChild(child));
41
+ return el;
42
+ };
43
+
44
+ /**
45
+ * Generate an SVG line.
46
+ *
47
+ * @param x1 x coord of starting point of line.
48
+ * @param y1 y coord of starting point of line.
49
+ * @param x2 x coord of ending point of line.
50
+ * @param y2 y coord fo ending point of line.
51
+ * @param className Class name of element.
52
+ *
53
+ * @returns SVG element for line.
54
+ */
55
+ export const line = (
56
+ x1: number,
57
+ y1: number,
58
+ x2: number,
59
+ y2: number,
60
+ className?: string,
61
+ ): SVGElement => {
62
+ const attrs: { [attr: string]: string } = {
63
+ x1: x1.toString(),
64
+ x2: x2.toString(),
65
+ y1: y1.toString(),
66
+ y2: y2.toString(),
67
+ };
68
+ if (className != null) attrs["class"] = className;
69
+ return createSvgElement("line", attrs);
70
+ };
71
+
72
+ /**
73
+ * Generate an SVG circle.
74
+ *
75
+ * @param x x coord of circle.
76
+ * @param y y coord of circle.
77
+ * @param radius Radius of circle.
78
+ *
79
+ * @returns SVG element for circle.
80
+ */
81
+ export const circle = (
82
+ x: number,
83
+ y: number,
84
+ radius: number,
85
+ className?: string,
86
+ ): SVGElement => {
87
+ const attrs: { [attr: string]: string } = {
88
+ cx: x.toString(),
89
+ cy: y.toString(),
90
+ r: radius.toString(),
91
+ };
92
+ if (className != null) attrs["class"] = className;
93
+ return createSvgElement("circle", attrs);
94
+ };
95
+
96
+ /**
97
+ * Generate the SVG representation of a control dot used for controlled operations.
98
+ *
99
+ * @param x x coord of circle.
100
+ * @param y y coord of circle.
101
+ * @param radius Radius of circle.
102
+ *
103
+ * @returns SVG element for control dot.
104
+ */
105
+ export const controlDot = (x: number, y: number, radius = 5): SVGElement =>
106
+ circle(x, y, radius, "control-dot");
107
+
108
+ /**
109
+ * Generate the SVG representation of a unitary box that represents an arbitrary unitary operation.
110
+ *
111
+ * @param x x coord of box.
112
+ * @param y y coord of box.
113
+ * @param width Width of box.
114
+ * @param height Height of box.
115
+ * @param className Class name of element.
116
+ *
117
+ * @returns SVG element for unitary box.
118
+ */
119
+ export const box = (
120
+ x: number,
121
+ y: number,
122
+ width: number,
123
+ height: number,
124
+ className = "gate-unitary",
125
+ ): SVGElement =>
126
+ createSvgElement("rect", {
127
+ class: className,
128
+ x: x.toString(),
129
+ y: y.toString(),
130
+ width: width.toString(),
131
+ height: height.toString(),
132
+ });
133
+
134
+ /**
135
+ * Generate the SVG text element from a given text string.
136
+ *
137
+ * @param text String to render as SVG text.
138
+ * @param x Middle x coord of text.
139
+ * @param y Middle y coord of text.
140
+ * @param fs Font size of text.
141
+ *
142
+ * @returns SVG element for text.
143
+ */
144
+ export const text = (
145
+ text: string,
146
+ x: number,
147
+ y: number,
148
+ fs: number = labelFontSize,
149
+ ): SVGElement => {
150
+ const el: SVGElement = createSvgElement("text", {
151
+ "font-size": fs.toString(),
152
+ x: x.toString(),
153
+ y: y.toString(),
154
+ });
155
+ el.textContent = text;
156
+ return el;
157
+ };
158
+
159
+ /**
160
+ * Generate the SVG representation of the arc used in the measurement box.
161
+ *
162
+ * @param x x coord of arc.
163
+ * @param y y coord of arc.
164
+ * @param rx x radius of arc.
165
+ * @param ry y radius of arc.
166
+ *
167
+ * @returns SVG element for arc.
168
+ */
169
+ export const arc = (x: number, y: number, rx: number, ry: number): SVGElement =>
170
+ createSvgElement("path", {
171
+ class: "arc-measure",
172
+ d: `M ${x + 2 * rx} ${y} A ${rx} ${ry} 0 0 0 ${x} ${y}`,
173
+ });
174
+
175
+ /**
176
+ * Generate a dashed SVG line.
177
+ *
178
+ * @param x1 x coord of starting point of line.
179
+ * @param y1 y coord of starting point of line.
180
+ * @param x2 x coord of ending point of line.
181
+ * @param y2 y coord fo ending point of line.
182
+ * @param className Class name of element.
183
+ *
184
+ * @returns SVG element for dashed line.
185
+ */
186
+ export const dashedLine = (
187
+ x1: number,
188
+ y1: number,
189
+ x2: number,
190
+ y2: number,
191
+ className?: string,
192
+ ): SVGElement => {
193
+ const el: SVGElement = line(x1, y1, x2, y2, className);
194
+ el.setAttribute("stroke-dasharray", "8, 8");
195
+ return el;
196
+ };
197
+
198
+ /**
199
+ * Generate the SVG representation of the dashed box used for enclosing groups of operations controlled on a classical register.
200
+ *
201
+ * @param x x coord of box.
202
+ * @param y y coord of box.
203
+ * @param width Width of box.
204
+ * @param height Height of box.
205
+ * @param className Class name of element.
206
+ *
207
+ * @returns SVG element for dashed box.
208
+ */
209
+ export const dashedBox = (
210
+ x: number,
211
+ y: number,
212
+ width: number,
213
+ height: number,
214
+ className?: string,
215
+ ): SVGElement => {
216
+ const el: SVGElement = box(x, y, width, height, className);
217
+ el.setAttribute("fill-opacity", "0");
218
+ el.setAttribute("stroke-dasharray", "8, 8");
219
+ return el;
220
+ };