qsharp-lang 1.25.7-dev → 1.26.0

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 (335) hide show
  1. package/dist/data-structures/circuit.d.ts +8 -1
  2. package/docs/Microsoft.Quantum.Core/IsRangeEmpty.md +1 -1
  3. package/docs/Microsoft.Quantum.Core/Length.md +1 -1
  4. package/docs/Microsoft.Quantum.Core/RangeEnd.md +1 -1
  5. package/docs/Microsoft.Quantum.Core/RangeStart.md +1 -1
  6. package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
  7. package/docs/Microsoft.Quantum.Core/index.md +1 -1
  8. package/docs/Std.Arithmetic/AddLE.md +1 -1
  9. package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
  10. package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
  11. package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
  12. package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
  13. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
  14. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
  15. package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
  16. package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
  17. package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
  18. package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
  19. package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
  20. package/docs/Std.Arithmetic/IncByI.md +1 -1
  21. package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
  22. package/docs/Std.Arithmetic/IncByL.md +1 -1
  23. package/docs/Std.Arithmetic/IncByLE.md +1 -1
  24. package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
  25. package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
  26. package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
  27. package/docs/Std.Arithmetic/MAJ.md +1 -1
  28. package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
  29. package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
  30. package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
  31. package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
  32. package/docs/Std.Arithmetic/index.md +1 -1
  33. package/docs/Std.Arrays/All.md +1 -1
  34. package/docs/Std.Arrays/Any.md +1 -1
  35. package/docs/Std.Arrays/Chunks.md +1 -1
  36. package/docs/Std.Arrays/CircularlyShifted.md +1 -1
  37. package/docs/Std.Arrays/ColumnAt.md +1 -1
  38. package/docs/Std.Arrays/Count.md +1 -1
  39. package/docs/Std.Arrays/Diagonal.md +1 -1
  40. package/docs/Std.Arrays/DrawMany.md +1 -1
  41. package/docs/Std.Arrays/Enumerated.md +1 -1
  42. package/docs/Std.Arrays/Excluding.md +1 -1
  43. package/docs/Std.Arrays/Filtered.md +1 -1
  44. package/docs/Std.Arrays/FlatMapped.md +1 -1
  45. package/docs/Std.Arrays/Flattened.md +1 -1
  46. package/docs/Std.Arrays/Fold.md +1 -1
  47. package/docs/Std.Arrays/ForEach.md +1 -1
  48. package/docs/Std.Arrays/Head.md +1 -1
  49. package/docs/Std.Arrays/HeadAndRest.md +1 -1
  50. package/docs/Std.Arrays/IndexOf.md +1 -1
  51. package/docs/Std.Arrays/IndexRange.md +1 -1
  52. package/docs/Std.Arrays/Interleaved.md +1 -1
  53. package/docs/Std.Arrays/IsEmpty.md +1 -1
  54. package/docs/Std.Arrays/IsRectangularArray.md +1 -1
  55. package/docs/Std.Arrays/IsSorted.md +1 -1
  56. package/docs/Std.Arrays/IsSquareArray.md +1 -1
  57. package/docs/Std.Arrays/Mapped.md +1 -1
  58. package/docs/Std.Arrays/MappedByIndex.md +1 -1
  59. package/docs/Std.Arrays/MappedOverRange.md +1 -1
  60. package/docs/Std.Arrays/Most.md +1 -1
  61. package/docs/Std.Arrays/MostAndTail.md +1 -1
  62. package/docs/Std.Arrays/Padded.md +1 -1
  63. package/docs/Std.Arrays/Partitioned.md +1 -1
  64. package/docs/Std.Arrays/Rest.md +1 -1
  65. package/docs/Std.Arrays/Reversed.md +1 -1
  66. package/docs/Std.Arrays/SequenceI.md +1 -1
  67. package/docs/Std.Arrays/SequenceL.md +1 -1
  68. package/docs/Std.Arrays/Sorted.md +1 -1
  69. package/docs/Std.Arrays/Subarray.md +1 -1
  70. package/docs/Std.Arrays/Swapped.md +1 -1
  71. package/docs/Std.Arrays/Tail.md +1 -1
  72. package/docs/Std.Arrays/Transposed.md +1 -1
  73. package/docs/Std.Arrays/Unzipped.md +1 -1
  74. package/docs/Std.Arrays/Where.md +1 -1
  75. package/docs/Std.Arrays/Windows.md +1 -1
  76. package/docs/Std.Arrays/Zipped.md +1 -1
  77. package/docs/Std.Arrays/index.md +1 -1
  78. package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
  79. package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
  80. package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
  81. package/docs/Std.Canon/ApplyOperationPowerA.md +1 -1
  82. package/docs/Std.Canon/ApplyOperationPowerCA.md +1 -1
  83. package/docs/Std.Canon/ApplyP.md +1 -1
  84. package/docs/Std.Canon/ApplyPauli.md +1 -1
  85. package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
  86. package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
  87. package/docs/Std.Canon/ApplyQFT.md +1 -1
  88. package/docs/Std.Canon/ApplyQPE.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/MapPauliAxis.md +1 -1
  100. package/docs/Std.Canon/Relabel.md +1 -1
  101. package/docs/Std.Canon/Snd.md +1 -1
  102. package/docs/Std.Canon/SwapReverseRegister.md +1 -1
  103. package/docs/Std.Canon/index.md +1 -1
  104. package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
  105. package/docs/Std.Convert/BigIntAsInt.md +1 -1
  106. package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
  107. package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
  108. package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
  109. package/docs/Std.Convert/BoolAsResult.md +1 -1
  110. package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
  111. package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
  112. package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
  113. package/docs/Std.Convert/IntAsBigInt.md +1 -1
  114. package/docs/Std.Convert/IntAsBoolArray.md +1 -1
  115. package/docs/Std.Convert/IntAsDouble.md +1 -1
  116. package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
  117. package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
  118. package/docs/Std.Convert/ResultAsBool.md +1 -1
  119. package/docs/Std.Convert/index.md +1 -1
  120. package/docs/Std.Core/Complex.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/ConfigureQubitLoss.md +1 -1
  131. package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
  132. package/docs/Std.Diagnostics/DumpMachine.md +1 -1
  133. package/docs/Std.Diagnostics/DumpOperation.md +1 -1
  134. package/docs/Std.Diagnostics/DumpRegister.md +1 -1
  135. package/docs/Std.Diagnostics/Fact.md +1 -1
  136. package/docs/Std.Diagnostics/NoNoise.md +1 -1
  137. package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
  138. package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
  139. package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
  140. package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
  141. package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
  142. package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
  143. package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
  144. package/docs/Std.Diagnostics/index.md +1 -1
  145. package/docs/Std.Intrinsic/AND.md +1 -1
  146. package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
  147. package/docs/Std.Intrinsic/CCNOT.md +1 -1
  148. package/docs/Std.Intrinsic/CNOT.md +1 -1
  149. package/docs/Std.Intrinsic/Exp.md +1 -1
  150. package/docs/Std.Intrinsic/H.md +1 -1
  151. package/docs/Std.Intrinsic/I.md +1 -1
  152. package/docs/Std.Intrinsic/M.md +1 -1
  153. package/docs/Std.Intrinsic/Measure.md +1 -1
  154. package/docs/Std.Intrinsic/Message.md +1 -1
  155. package/docs/Std.Intrinsic/R.md +1 -1
  156. package/docs/Std.Intrinsic/R1.md +1 -1
  157. package/docs/Std.Intrinsic/R1Frac.md +1 -1
  158. package/docs/Std.Intrinsic/RFrac.md +1 -1
  159. package/docs/Std.Intrinsic/Reset.md +1 -1
  160. package/docs/Std.Intrinsic/ResetAll.md +1 -1
  161. package/docs/Std.Intrinsic/Rx.md +1 -1
  162. package/docs/Std.Intrinsic/Rxx.md +1 -1
  163. package/docs/Std.Intrinsic/Ry.md +1 -1
  164. package/docs/Std.Intrinsic/Ryy.md +1 -1
  165. package/docs/Std.Intrinsic/Rz.md +1 -1
  166. package/docs/Std.Intrinsic/Rzz.md +1 -1
  167. package/docs/Std.Intrinsic/S.md +1 -1
  168. package/docs/Std.Intrinsic/SWAP.md +1 -1
  169. package/docs/Std.Intrinsic/SX.md +1 -1
  170. package/docs/Std.Intrinsic/T.md +1 -1
  171. package/docs/Std.Intrinsic/X.md +1 -1
  172. package/docs/Std.Intrinsic/Y.md +1 -1
  173. package/docs/Std.Intrinsic/Z.md +1 -1
  174. package/docs/Std.Intrinsic/index.md +1 -1
  175. package/docs/Std.Logical/Xor.md +1 -1
  176. package/docs/Std.Logical/index.md +1 -1
  177. package/docs/Std.Math/AbsComplex.md +1 -1
  178. package/docs/Std.Math/AbsComplexPolar.md +1 -1
  179. package/docs/Std.Math/AbsD.md +1 -1
  180. package/docs/Std.Math/AbsI.md +1 -1
  181. package/docs/Std.Math/AbsL.md +1 -1
  182. package/docs/Std.Math/AbsSquaredComplex.md +1 -1
  183. package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
  184. package/docs/Std.Math/ApproximateFactorial.md +1 -1
  185. package/docs/Std.Math/ArcCos.md +1 -1
  186. package/docs/Std.Math/ArcCosh.md +1 -1
  187. package/docs/Std.Math/ArcSin.md +1 -1
  188. package/docs/Std.Math/ArcSinh.md +1 -1
  189. package/docs/Std.Math/ArcTan.md +1 -1
  190. package/docs/Std.Math/ArcTan2.md +1 -1
  191. package/docs/Std.Math/ArcTanh.md +1 -1
  192. package/docs/Std.Math/ArgComplex.md +1 -1
  193. package/docs/Std.Math/ArgComplexPolar.md +1 -1
  194. package/docs/Std.Math/Binom.md +1 -1
  195. package/docs/Std.Math/BitSizeI.md +1 -1
  196. package/docs/Std.Math/BitSizeL.md +1 -1
  197. package/docs/Std.Math/Ceiling.md +1 -1
  198. package/docs/Std.Math/Complex.md +1 -1
  199. package/docs/Std.Math/ComplexPolar.md +1 -1
  200. package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
  201. package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
  202. package/docs/Std.Math/Cos.md +1 -1
  203. package/docs/Std.Math/Cosh.md +1 -1
  204. package/docs/Std.Math/DivRemI.md +1 -1
  205. package/docs/Std.Math/DivRemL.md +1 -1
  206. package/docs/Std.Math/DividedByC.md +1 -1
  207. package/docs/Std.Math/DividedByCP.md +1 -1
  208. package/docs/Std.Math/E.md +1 -1
  209. package/docs/Std.Math/ExpModI.md +1 -1
  210. package/docs/Std.Math/ExpModL.md +1 -1
  211. package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
  212. package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
  213. package/docs/Std.Math/FactorialI.md +1 -1
  214. package/docs/Std.Math/FactorialL.md +1 -1
  215. package/docs/Std.Math/Floor.md +1 -1
  216. package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
  217. package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
  218. package/docs/Std.Math/HammingWeightI.md +1 -1
  219. package/docs/Std.Math/InverseModI.md +1 -1
  220. package/docs/Std.Math/InverseModL.md +1 -1
  221. package/docs/Std.Math/IsCoprimeI.md +1 -1
  222. package/docs/Std.Math/IsCoprimeL.md +1 -1
  223. package/docs/Std.Math/IsInfinite.md +1 -1
  224. package/docs/Std.Math/IsNaN.md +1 -1
  225. package/docs/Std.Math/LargestFixedPoint.md +1 -1
  226. package/docs/Std.Math/Lg.md +1 -1
  227. package/docs/Std.Math/Log.md +1 -1
  228. package/docs/Std.Math/Log10.md +1 -1
  229. package/docs/Std.Math/LogFactorialD.md +1 -1
  230. package/docs/Std.Math/LogGammaD.md +1 -1
  231. package/docs/Std.Math/LogOf2.md +1 -1
  232. package/docs/Std.Math/Max.md +1 -1
  233. package/docs/Std.Math/MaxD.md +1 -1
  234. package/docs/Std.Math/MaxI.md +1 -1
  235. package/docs/Std.Math/MaxL.md +1 -1
  236. package/docs/Std.Math/Min.md +1 -1
  237. package/docs/Std.Math/MinD.md +1 -1
  238. package/docs/Std.Math/MinI.md +1 -1
  239. package/docs/Std.Math/MinL.md +1 -1
  240. package/docs/Std.Math/MinusC.md +1 -1
  241. package/docs/Std.Math/MinusCP.md +1 -1
  242. package/docs/Std.Math/ModulusI.md +1 -1
  243. package/docs/Std.Math/ModulusL.md +1 -1
  244. package/docs/Std.Math/NegationC.md +1 -1
  245. package/docs/Std.Math/NegationCP.md +1 -1
  246. package/docs/Std.Math/PI.md +1 -1
  247. package/docs/Std.Math/PNorm.md +1 -1
  248. package/docs/Std.Math/PNormalized.md +1 -1
  249. package/docs/Std.Math/PlusC.md +1 -1
  250. package/docs/Std.Math/PlusCP.md +1 -1
  251. package/docs/Std.Math/PowC.md +1 -1
  252. package/docs/Std.Math/PowCP.md +1 -1
  253. package/docs/Std.Math/RealMod.md +1 -1
  254. package/docs/Std.Math/Round.md +1 -1
  255. package/docs/Std.Math/RoundHalfAwayFromZero.md +1 -1
  256. package/docs/Std.Math/SignD.md +1 -1
  257. package/docs/Std.Math/SignI.md +1 -1
  258. package/docs/Std.Math/SignL.md +1 -1
  259. package/docs/Std.Math/Sin.md +1 -1
  260. package/docs/Std.Math/Sinh.md +1 -1
  261. package/docs/Std.Math/SmallestFixedPoint.md +1 -1
  262. package/docs/Std.Math/Sqrt.md +1 -1
  263. package/docs/Std.Math/SquaredNorm.md +1 -1
  264. package/docs/Std.Math/Tan.md +1 -1
  265. package/docs/Std.Math/Tanh.md +1 -1
  266. package/docs/Std.Math/TimesC.md +1 -1
  267. package/docs/Std.Math/TimesCP.md +1 -1
  268. package/docs/Std.Math/TrailingZeroCountI.md +1 -1
  269. package/docs/Std.Math/TrailingZeroCountL.md +1 -1
  270. package/docs/Std.Math/Truncate.md +1 -1
  271. package/docs/Std.Math/index.md +1 -1
  272. package/docs/Std.Measurement/IsLossResult.md +1 -1
  273. package/docs/Std.Measurement/MResetEachZ.md +1 -1
  274. package/docs/Std.Measurement/MResetX.md +1 -1
  275. package/docs/Std.Measurement/MResetY.md +1 -1
  276. package/docs/Std.Measurement/MResetZ.md +1 -1
  277. package/docs/Std.Measurement/MResetZChecked.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/EnableMemoryComputeArchitecture.md +1 -1
  298. package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
  299. package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
  300. package/docs/Std.ResourceEstimation/LeastFrequentlyUsed.md +1 -1
  301. package/docs/Std.ResourceEstimation/LeastRecentlyUsed.md +1 -1
  302. package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
  303. package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
  304. package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
  305. package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
  306. package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
  307. package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
  308. package/docs/Std.ResourceEstimation/TCount.md +1 -1
  309. package/docs/Std.ResourceEstimation/index.md +1 -1
  310. package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
  311. package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
  312. package/docs/Std.StatePreparation/PrepareUniformSuperposition.md +1 -1
  313. package/docs/Std.StatePreparation/index.md +1 -1
  314. package/docs/Std.TableLookup/Select.md +1 -1
  315. package/docs/Std.TableLookup/index.md +1 -1
  316. package/docs/index.md +1 -1
  317. package/lib/nodejs/qsc_wasm.cjs +2 -2
  318. package/lib/nodejs/qsc_wasm.d.cts +1 -1
  319. package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
  320. package/lib/web/qsc_wasm.d.ts +1 -1
  321. package/lib/web/qsc_wasm.js +2 -2
  322. package/lib/web/qsc_wasm_bg.wasm +0 -0
  323. package/package.json +1 -1
  324. package/ux/circuit-vis/constants.ts +4 -4
  325. package/ux/circuit-vis/draggable.ts +1 -1
  326. package/ux/circuit-vis/events.ts +3 -12
  327. package/ux/circuit-vis/formatters/gateFormatter.ts +168 -73
  328. package/ux/circuit-vis/formatters/registerFormatter.ts +7 -2
  329. package/ux/circuit-vis/gateRenderData.ts +3 -1
  330. package/ux/circuit-vis/index.ts +9 -1
  331. package/ux/circuit-vis/process.ts +64 -87
  332. package/ux/circuit-vis/sqore.ts +103 -55
  333. package/ux/circuit-vis/utils.ts +9 -19
  334. package/ux/circuit.tsx +12 -95
  335. package/ux/qsharp-circuit.css +5 -47
@@ -2,7 +2,7 @@
2
2
  uid: Qdk.Std.ResourceEstimation.TCount
3
3
  title: TCount function
4
4
  description: "Q# TCount function: Returns a tuple that can be passed to the `AccountForEstimates` operation to specify that the number of the T gates is equal to the `amount`."
5
- ms.date: 02/20/2026
5
+ ms.date: 02/28/2026
6
6
  qsharp.kind: function
7
7
  qsharp.package: __Std__
8
8
  qsharp.namespace: Std.ResourceEstimation
@@ -2,7 +2,7 @@
2
2
  uid: Qdk.Std.ResourceEstimation-toc
3
3
  title: Std.ResourceEstimation namespace
4
4
  description: Table of contents for the Q# ResourceEstimation namespace
5
- ms.date: 02/20/2026
5
+ ms.date: 02/28/2026
6
6
  ms.topic: landing-page
7
7
  ---
8
8
 
@@ -2,7 +2,7 @@
2
2
  uid: Qdk.Std.StatePreparation.ApproximatelyPreparePureStateCP
3
3
  title: ApproximatelyPreparePureStateCP operation
4
4
  description: "Q# ApproximatelyPreparePureStateCP operation: Given a set of coefficients and a big-endian quantum register, prepares a state on that register described by the given coefficients, up to a given approximation tolerance."
5
- ms.date: 02/20/2026
5
+ ms.date: 02/28/2026
6
6
  qsharp.kind: operation
7
7
  qsharp.package: __Std__
8
8
  qsharp.namespace: Std.StatePreparation
@@ -2,7 +2,7 @@
2
2
  uid: Qdk.Std.StatePreparation.PreparePureStateD
3
3
  title: PreparePureStateD operation
4
4
  description: "Q# PreparePureStateD operation: Given a set of coefficients and a big-endian quantum register, prepares a state on that register described by the given coefficients."
5
- ms.date: 02/20/2026
5
+ ms.date: 02/28/2026
6
6
  qsharp.kind: operation
7
7
  qsharp.package: __Std__
8
8
  qsharp.namespace: Std.StatePreparation
@@ -2,7 +2,7 @@
2
2
  uid: Qdk.Std.StatePreparation.PrepareUniformSuperposition
3
3
  title: PrepareUniformSuperposition operation
4
4
  description: "Q# PrepareUniformSuperposition operation: Prepares a uniform superposition of states that represent integers 0 through `nStates - 1` in a little-endian `qubits` register."
5
- ms.date: 02/20/2026
5
+ ms.date: 02/28/2026
6
6
  qsharp.kind: operation
7
7
  qsharp.package: __Std__
8
8
  qsharp.namespace: Std.StatePreparation
@@ -2,7 +2,7 @@
2
2
  uid: Qdk.Std.StatePreparation-toc
3
3
  title: Std.StatePreparation namespace
4
4
  description: Table of contents for the Q# StatePreparation namespace
5
- ms.date: 02/20/2026
5
+ ms.date: 02/28/2026
6
6
  ms.topic: landing-page
7
7
  ---
8
8
 
@@ -2,7 +2,7 @@
2
2
  uid: Qdk.Std.TableLookup.Select
3
3
  title: Select operation
4
4
  description: "Q# Select operation: Performs table lookup using a SELECT network"
5
- ms.date: 02/20/2026
5
+ ms.date: 02/28/2026
6
6
  qsharp.kind: operation
7
7
  qsharp.package: __Std__
8
8
  qsharp.namespace: Std.TableLookup
@@ -2,7 +2,7 @@
2
2
  uid: Qdk.Std.TableLookup-toc
3
3
  title: Std.TableLookup namespace
4
4
  description: Table of contents for the Q# TableLookup namespace
5
- ms.date: 02/20/2026
5
+ ms.date: 02/28/2026
6
6
  ms.topic: landing-page
7
7
  ---
8
8
 
package/docs/index.md CHANGED
@@ -2,7 +2,7 @@
2
2
  uid: Microsoft.Quantum.apiref-toc
3
3
  title: Q# standard libraries for the Microsoft Quantum Development Kit
4
4
  description: Table of contents for the Q# standard libraries for Microsoft Quantum Development Kit
5
- ms.date: 02/20/2026
5
+ ms.date: 02/28/2026
6
6
  ms.topic: landing-page
7
7
  ---
8
8
 
@@ -1570,8 +1570,8 @@ module.exports.__wbindgen_cb_drop = function(arg0) {
1570
1570
  return ret;
1571
1571
  };
1572
1572
 
1573
- module.exports.__wbindgen_closure_wrapper6582 = function(arg0, arg1, arg2) {
1574
- const ret = makeMutClosure(arg0, arg1, 2071, __wbg_adapter_52);
1573
+ module.exports.__wbindgen_closure_wrapper6736 = function(arg0, arg1, arg2) {
1574
+ const ret = makeMutClosure(arg0, arg1, 2132, __wbg_adapter_52);
1575
1575
  return addHeapObject(ret);
1576
1576
  };
1577
1577
 
@@ -289,7 +289,7 @@ export interface ITestDescriptor {
289
289
  }
290
290
 
291
291
  export interface ICircuitConfig {
292
- generationMethod: "simulate" | "classicalEval";
292
+ generationMethod: "simulate" | "classicalEval" | "static";
293
293
  maxOperations: number;
294
294
  sourceLocations: boolean;
295
295
  groupByScope: boolean;
Binary file
@@ -289,7 +289,7 @@ export interface ITestDescriptor {
289
289
  }
290
290
 
291
291
  export interface ICircuitConfig {
292
- generationMethod: "simulate" | "classicalEval";
292
+ generationMethod: "simulate" | "classicalEval" | "static";
293
293
  maxOperations: number;
294
294
  sourceLocations: boolean;
295
295
  groupByScope: boolean;
@@ -1525,8 +1525,8 @@ function __wbg_get_imports() {
1525
1525
  const ret = false;
1526
1526
  return ret;
1527
1527
  };
1528
- imports.wbg.__wbindgen_closure_wrapper6582 = function(arg0, arg1, arg2) {
1529
- const ret = makeMutClosure(arg0, arg1, 2071, __wbg_adapter_52);
1528
+ imports.wbg.__wbindgen_closure_wrapper6736 = function(arg0, arg1, arg2) {
1529
+ const ret = makeMutClosure(arg0, arg1, 2132, __wbg_adapter_52);
1530
1530
  return addHeapObject(ret);
1531
1531
  };
1532
1532
  imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "qsharp-lang",
3
3
  "description": "qsharp language package for quantum development",
4
- "version": "1.25.7-dev",
4
+ "version": "1.26.0",
5
5
  "license": "MIT",
6
6
  "engines": {
7
7
  "node": ">=16.17.0"
@@ -32,10 +32,10 @@ export const groupBottomPadding = 10;
32
32
  /** Top padding inside group box. */
33
33
  export const groupTopPadding =
34
34
  groupBottomPadding + labelFontSize + groupLabelPaddingY;
35
- /** Additional offset for control button. */
36
- export const controlBtnOffset = 40;
37
- /** Control button radius. */
38
- export const controlBtnRadius = 15;
35
+ /** Additional offset for the classical control circle. */
36
+ export const controlCircleOffset = 40;
37
+ /** Classical control circle radius. */
38
+ export const controlCircleRadius = 15;
39
39
  /** Default font size for gate arguments. */
40
40
  export const argsFontSize = 12;
41
41
  /** Starting x coord for each register wire. */
@@ -362,7 +362,7 @@ const _dropzoneLayer = (context: Context) => {
362
362
  );
363
363
 
364
364
  columnOps.components.forEach((op, opIndex) => {
365
- const [minTarget, maxTarget] = getMinMaxRegIdx(op, wireData.length);
365
+ const [minTarget, maxTarget] = getMinMaxRegIdx(op);
366
366
  // Add dropzones before the first target
367
367
  while (wireIndex <= maxTarget) {
368
368
  dropzoneLayer.appendChild(makeBox(opIndex, true));
@@ -413,10 +413,7 @@ class CircuitEvents {
413
413
  return;
414
414
 
415
415
  // Add temporary dropzones specific to this operation
416
- const [minTarget, maxTarget] = getMinMaxRegIdx(
417
- this.selectedOperation,
418
- this.wireData.length,
419
- );
416
+ const [minTarget, maxTarget] = getMinMaxRegIdx(this.selectedOperation);
420
417
  for (let wire = minTarget; wire <= maxTarget; wire++) {
421
418
  if (wire === this.selectedWire) continue;
422
419
  const indexes = locationStringToIndexes(selectedLocation);
@@ -921,17 +918,11 @@ class CircuitEvents {
921
918
  );
922
919
  if (!selectedOperationParent) return;
923
920
 
924
- const [minTarget, maxTarget] = getMinMaxRegIdx(
925
- selectedOperation,
926
- this.wireData.length,
927
- );
921
+ const [minTarget, maxTarget] = getMinMaxRegIdx(selectedOperation);
928
922
  selectedOperationParent[columnIndex].components.forEach(
929
923
  (op, opIndex) => {
930
924
  if (opIndex === position) return; // Don't check the selected operation against itself
931
- const [minOp, maxOp] = getMinMaxRegIdx(
932
- op,
933
- this.wireData.length,
934
- );
925
+ const [minOp, maxOp] = getMinMaxRegIdx(op);
935
926
  // Check if selectedOperation's range overlaps with op's range
936
927
  if (
937
928
  (minOp >= minTarget && minOp <= maxTarget) ||
@@ -7,13 +7,13 @@ import {
7
7
  gateHeight,
8
8
  labelFontSize,
9
9
  argsFontSize,
10
- controlBtnRadius,
11
- controlBtnOffset,
10
+ controlCircleRadius,
11
+ controlCircleOffset,
12
12
  groupPaddingX,
13
- classicalRegHeight,
14
13
  groupTopPadding,
15
14
  labelPaddingX,
16
15
  groupLabelPaddingY,
16
+ groupBottomPadding,
17
17
  } from "../constants.js";
18
18
  import {
19
19
  createSvgElement,
@@ -107,15 +107,10 @@ const _createGate = (
107
107
  // `GateType.Group` corresponds to an *expanded* group, which will contain clickable gates
108
108
  // so therefore should not itself be clickable
109
109
  if (renderData.link && renderData.type !== GateType.Group) {
110
- const linkElem = createSvgElement("a", {
111
- href: renderData.link.href,
112
- class: "qs-circuit-source-link",
113
- });
114
-
115
- // Add title as a child <title> element for accessibility and hover tooltip
116
- const titleElem = createSvgElement("title");
117
- titleElem.textContent = renderData.link.title;
118
- linkElem.appendChild(titleElem);
110
+ const linkElem = createLinkElement(
111
+ renderData.link.href,
112
+ renderData.link.title,
113
+ );
119
114
 
120
115
  // Add the gate elements as children of the link
121
116
  for (const e of svgElems) {
@@ -145,7 +140,8 @@ const _createGate = (
145
140
  const _zoomButton = (renderData: GateRenderData): SVGElement | null => {
146
141
  if (renderData == undefined) return null;
147
142
 
148
- const [gateBoundingBoxX, gateBoundingBoxY] = _gateBoundingBox(renderData);
143
+ const { x: gateBoundingBoxX, y: gateBoundingBoxY } =
144
+ _gateBoundingBox(renderData);
149
145
  let { dataAttributes } = renderData;
150
146
  dataAttributes = dataAttributes || {};
151
147
 
@@ -180,15 +176,37 @@ const _zoomButton = (renderData: GateRenderData): SVGElement | null => {
180
176
  *
181
177
  * @param renderData Operation render data.
182
178
  *
183
- * @returns [x, y, width, height]
179
+ * @returns Bounding box of the gate, including any control dots and circles.
184
180
  */
185
181
  const _gateBoundingBox = (
186
182
  renderData: GateRenderData,
187
- ): [number, number, number, number] => {
188
- const { x: centerX, width, targetsY, topPadding, bottomPadding } = renderData;
183
+ ): { x: number; y: number; width: number; height: number } => {
184
+ const {
185
+ x: centerX,
186
+ width,
187
+ targetsY,
188
+ controlsY,
189
+ topPadding,
190
+ bottomPadding,
191
+ } = renderData;
189
192
 
190
193
  const x = centerX - width / 2;
191
- const ys = targetsY?.flatMap((y) => y as number[]) || [];
194
+
195
+ // If we are rendering a classically controlled group, we want the bounding box to go around
196
+ // the targets AND controls. This is because the classical control circle is rendered next
197
+ // to the dashed box, and needs to touch the box, like so:
198
+ // ┌╌╌╌╌╌┐
199
+ // ╎ ┌─┐ ╎
200
+ // ─────────┼─│X│─┼─
201
+ // ╎ └─┘ ╎
202
+ // ┌─┐ ╎ ┌─┐ ╎
203
+ // ─│M│─────┼─│Y│─┼─
204
+ // └╥┘ ╭─╮ ╎ └─┘ ╎
205
+ // ╚══╡ ╞═╪═════╪═
206
+ // │c│┄╎ ╎
207
+ // ╰─╯ └╌╌╌╌╌┘
208
+ const ys = targetsY.flatMap((y) => y as number[]).concat(controlsY);
209
+
192
210
  const maxY = Math.max(...ys);
193
211
  const minY = Math.min(...ys);
194
212
 
@@ -213,7 +231,7 @@ const _gateBoundingBox = (
213
231
  const y = minY - gateHeight / 2 - topPadding;
214
232
  const height = maxY - minY + gateHeight + bottomPadding + topPadding;
215
233
 
216
- return [x, y, width, height];
234
+ return { x, y, width, height };
217
235
  };
218
236
 
219
237
  /**
@@ -254,6 +272,19 @@ const _measure = (x: number, y: number, wireYs: number[]): SVGElement => {
254
272
 
255
273
  const use_katex = true;
256
274
 
275
+ function createLinkElement(href: string, title: string) {
276
+ const linkElem = createSvgElement("a", {
277
+ href: href,
278
+ class: "qs-circuit-source-link",
279
+ });
280
+
281
+ // Add title as a child <title> element for accessibility and hover tooltip
282
+ const titleElem = createSvgElement("title");
283
+ titleElem.textContent = title;
284
+ linkElem.appendChild(titleElem);
285
+ return linkElem;
286
+ }
287
+
257
288
  function _style_gate_text(gate: SVGTextElement) {
258
289
  if (!use_katex) return;
259
290
  let label = gate.textContent || "";
@@ -268,6 +299,12 @@ function _style_gate_text(gate: SVGTextElement) {
268
299
 
269
300
  label = label.replace(italicChars, `<tspan class='qs-mathtext'>$&</tspan>`);
270
301
 
302
+ // Subscript any `_0`, `_1`, etc. in the label
303
+ label = label.replace(
304
+ /_(\d+)/g,
305
+ `<tspan baseline-shift="sub" font-size="65%">$1</tspan>`,
306
+ );
307
+
271
308
  // Replace a trailing ' with the proper unicode dagger symbol
272
309
  label = label.replace(
273
310
  /'$/,
@@ -403,8 +440,12 @@ const _swap = (renderData: GateRenderData): SVGElement => {
403
440
  const { x: centerX, targetsY } = renderData;
404
441
 
405
442
  // Get SVGs of crosses
406
- const [boundingBoxX, boundingBoxY, width, height] =
407
- _gateBoundingBox(renderData);
443
+ const {
444
+ x: boundingBoxX,
445
+ y: boundingBoxY,
446
+ width,
447
+ height,
448
+ } = _gateBoundingBox(renderData);
408
449
  const ys = targetsY?.flatMap((y) => y as number[]) || [];
409
450
  const bg: SVGElement = box(
410
451
  boundingBoxX,
@@ -560,7 +601,7 @@ const _oplus = (x: number, y: number, wireYs: number[]): SVGElement => {
560
601
  */
561
602
  const _groupedOperations = (renderData: GateRenderData): SVGElement => {
562
603
  const { children, label } = renderData;
563
- const [x, y, w, h] = _gateBoundingBox(renderData);
604
+ const { x, y, width: w, height: h } = _gateBoundingBox(renderData);
564
605
 
565
606
  // Draw dashed box around children gates
566
607
  const box: SVGElement = dashedBox(x, y, w, h, "gate-unitary");
@@ -573,7 +614,16 @@ const _groupedOperations = (renderData: GateRenderData): SVGElement => {
573
614
  y + groupTopPadding / 2 + groupLabelPaddingY,
574
615
  );
575
616
  labelText.classList.add("qs-group-label");
576
- elems.push(labelText);
617
+
618
+ if (renderData.link) {
619
+ const link = createLinkElement(renderData.link.href, renderData.link.title);
620
+ // Make the text element clickable
621
+ labelText.style.pointerEvents = "all";
622
+ link.appendChild(labelText);
623
+ elems.push(link);
624
+ } else {
625
+ elems.push(labelText);
626
+ }
577
627
 
578
628
  return _createGate(elems, renderData);
579
629
  };
@@ -590,67 +640,82 @@ const _classicalControlled = (
590
640
  renderData: GateRenderData,
591
641
  padding: number = groupPaddingX,
592
642
  ): SVGElement => {
593
- const { controlsY, dataAttributes } = renderData;
594
- const targetsY: number[] = renderData.targetsY as number[];
595
- const children: GateRenderData[][][] =
596
- renderData.children as GateRenderData[][][];
597
- let { x, width } = renderData;
643
+ const { controlsY, dataAttributes, label, classicalControlIds, children } =
644
+ renderData;
598
645
 
599
- const controlY = controlsY[0];
646
+ const boundingBox = _gateBoundingBox(renderData);
647
+ let { x, width } = boundingBox;
648
+ const { y, height } = boundingBox;
600
649
 
601
650
  const elems: SVGElement[] = [];
602
651
 
603
- if (children != null) {
604
- if (children.length !== 2)
605
- throw new Error(
606
- `Invalid number of children found for classically-controlled gate: ${children.length}`,
607
- );
652
+ for (let i = 0; i < controlsY.length; i++) {
653
+ const controlY = controlsY[i];
654
+ const label = classicalControlIds?.[i] ?? null;
655
+ // Draw control button and attached dashed line to dashed box
656
+ const controlCircleX: number = x + controlCircleRadius;
657
+ const controlCircle: SVGElement = _controlCircle(
658
+ controlCircleX,
659
+ controlY,
660
+ label,
661
+ );
662
+ const lineY1: number = controlY + controlCircleRadius;
663
+ const lineY2: number =
664
+ controlY + controlCircleRadius + groupBottomPadding / 2;
665
+ const vertLine: SVGElement = dashedLine(
666
+ controlCircleX,
667
+ lineY1,
668
+ controlCircleX,
669
+ lineY2,
670
+ "classical-line",
671
+ );
672
+ const lineEndX = x + controlCircleOffset;
673
+ const horLine: SVGElement = dashedLine(
674
+ controlCircleX,
675
+ lineY2,
676
+ lineEndX,
677
+ lineY2,
678
+ "classical-line",
679
+ );
608
680
 
609
- // Get SVG for gates controlled on 0
610
- const childrenZero: SVGElement = formatGates(children[0]);
611
- childrenZero.setAttribute("class", "gates-zero");
612
- elems.push(childrenZero);
613
-
614
- // Get SVG for gates controlled on 1
615
- const childrenOne: SVGElement = formatGates(children[1]);
616
- childrenOne.setAttribute("class", "gates-one");
617
- elems.push(childrenOne);
681
+ elems.push(horLine, vertLine, controlCircle);
618
682
  }
619
683
 
620
- // Draw control button and attached dashed line to dashed box
621
- const controlCircleX: number = x + controlBtnRadius;
622
- const controlCircle: SVGElement = _controlCircle(controlCircleX, controlY);
623
- const lineY1: number = controlY + controlBtnRadius,
624
- lineY2: number = controlY + classicalRegHeight / 2;
625
- const vertLine: SVGElement = dashedLine(
626
- controlCircleX,
627
- lineY1,
628
- controlCircleX,
629
- lineY2,
630
- "classical-line",
631
- );
632
- x += controlBtnOffset;
633
- const horLine: SVGElement = dashedLine(
634
- controlCircleX,
635
- lineY2,
636
- x,
637
- lineY2,
638
- "classical-line",
639
- );
684
+ x += controlCircleOffset;
640
685
 
641
- width = width - controlBtnOffset + (padding - groupPaddingX) * 2;
686
+ width = width - controlCircleOffset + (padding - groupPaddingX) * 2;
642
687
  x += groupPaddingX - padding;
643
- const y: number = targetsY[0] - gateHeight / 2 - padding;
644
- const height: number = targetsY[1] - targetsY[0] + gateHeight + padding * 2;
645
688
 
646
689
  // Draw dashed box around children gates
647
690
  const box: SVGElement = dashedBox(x, y, width, height, "classical-container");
648
691
 
649
- elems.push(...[horLine, vertLine, controlCircle, box]);
692
+ elems.push(box);
693
+
694
+ const labelText = _labelText(
695
+ label,
696
+ x + labelPaddingX,
697
+ y + groupTopPadding / 2 + groupLabelPaddingY,
698
+ );
699
+ labelText.classList.add("qs-group-label");
700
+
701
+ if (renderData.link) {
702
+ const link = createLinkElement(renderData.link.href, renderData.link.title);
703
+ // Make the text element clickable
704
+ labelText.style.pointerEvents = "all";
705
+ link.appendChild(labelText);
706
+ elems.push(link);
707
+ } else {
708
+ elems.push(labelText);
709
+ }
710
+
711
+ if (children != null) {
712
+ // Get SVG for gates controlled on 0
713
+ const childrenSvg: SVGElement = formatGates(children);
714
+ elems.push(childrenSvg);
715
+ }
650
716
 
651
- // Display controlled operation in initial "unknown" state
652
717
  const attributes: { [attr: string]: string } = {
653
- class: `classically-controlled-group classically-controlled-unknown`,
718
+ class: `classically-controlled-group`,
654
719
  };
655
720
  if (dataAttributes != null)
656
721
  Object.entries(dataAttributes).forEach(
@@ -664,21 +729,51 @@ const _classicalControlled = (
664
729
  * Generates the SVG representation of the control circle on a classical register with interactivity support
665
730
  * for toggling between bit values (unknown, 1, and 0).
666
731
  *
667
- * @param x x coord.
668
- * @param y y coord.
669
- * @param r Radius of circle.
732
+ * @param x Center x coord.
733
+ * @param y Center y coord.
734
+ * @param controlId ID label to display inside control circle
670
735
  *
671
736
  * @returns SVG representation of control circle.
672
737
  */
673
738
  const _controlCircle = (
674
739
  x: number,
675
740
  y: number,
676
- r: number = controlBtnRadius,
741
+ controlId: number | null,
677
742
  ): SVGElement =>
678
- group([circle(x, y, r), text("?", x, y, labelFontSize)], {
743
+ group([circle(x, y, controlCircleRadius), controlLabel(x, y, controlId)], {
679
744
  class: "classically-controlled-btn",
680
745
  });
681
746
 
747
+ /**
748
+ * Generates the text element label inside a classical control circle.
749
+ *
750
+ * @param x Center x coord.
751
+ * @param y Center y coord.
752
+ * @param label ID label to display inside control circle
753
+ *
754
+ * @returns SVG representation of control label
755
+ */
756
+ function controlLabel(x: number, y: number, label: number | null): SVGElement {
757
+ const el: SVGElement = text("", x, y, labelFontSize);
758
+
759
+ // Create text content "c"
760
+ el.appendChild(document.createTextNode("c"));
761
+
762
+ // Create tspan with subscript label
763
+ const tspan = createSvgElement("tspan", {
764
+ "baseline-shift": "sub",
765
+ "font-size": "65%",
766
+ });
767
+ tspan.appendChild(document.createTextNode(String(label)));
768
+ el.appendChild(tspan);
769
+
770
+ el.setAttribute("text-anchor", "start");
771
+ el.setAttribute("dominant-baseline", "middle");
772
+ el.classList.add("qs-maintext");
773
+
774
+ return el;
775
+ }
776
+
682
777
  /**
683
778
  * Generates the SVG representation of the label text for a gate or grouped operation.
684
779
  *
@@ -38,10 +38,11 @@ const formatRegisters = (
38
38
 
39
39
  // Render classical wires
40
40
  for (const classical of registers[qId].children || []) {
41
+ const ys: number[] = [];
41
42
  for (const gate of allGates.flat()) {
42
43
  if (
43
- gate.type === GateType.Group &&
44
- gate.dataAttributes?.["expanded"] === "true"
44
+ gate.type === GateType.Group ||
45
+ gate.type === GateType.ClassicalControlled
45
46
  ) {
46
47
  // Don't render classical wires for a group that is expanded - the wires
47
48
  // will be coming out of the measurement operations *inside* the group.
@@ -49,6 +50,10 @@ const formatRegisters = (
49
50
  }
50
51
 
51
52
  for (const y of gate.targetsY.flat().filter((y) => y === classical.y)) {
53
+ if (ys.includes(y)) {
54
+ continue;
55
+ }
56
+ ys.push(y);
52
57
  // Found the gate that this classical wire originates from. Draw
53
58
  // it starting at this gates x-coordinate.
54
59
 
@@ -52,7 +52,7 @@ export interface GateRenderData {
52
52
  /** Gate width. */
53
53
  width: number;
54
54
  /** Children operations as part of group. */
55
- children?: GateRenderData[][] | GateRenderData[][][];
55
+ children?: GateRenderData[][];
56
56
  /** Vertical space from the top of this gate to the top of the topmost contained gate. 0 for non-groups. */
57
57
  topPadding: number;
58
58
  /** Vertical space from the bottom of this gate to the bottom of the bottommost contained gate. 0 for non-groups. */
@@ -61,4 +61,6 @@ export interface GateRenderData {
61
61
  dataAttributes?: DataAttributes;
62
62
  /** Link href and title for clickable gate. */
63
63
  link?: { href: string; title: string };
64
+ /** Labels for the classical control registers (applicable only for GateType.ClassicalControlled). */
65
+ classicalControlIds?: (number | null)[];
64
66
  }
@@ -24,9 +24,17 @@ export const draw = (
24
24
  circuitGroup: CircuitGroup,
25
25
  container: HTMLElement,
26
26
  options: DrawOptions = {},
27
- ): void => {
27
+ ): {
28
+ userSetZoomLevel: (zoomLevel: number) => void;
29
+ } => {
28
30
  const sqore = new Sqore(circuitGroup, options);
29
31
  sqore.draw(container);
32
+ return {
33
+ userSetZoomLevel: (zoomLevel: number) => {
34
+ sqore.zoomOnResize = false;
35
+ sqore.updateZoomLevel(zoomLevel);
36
+ },
37
+ };
30
38
  };
31
39
 
32
40
  export type { DrawOptions, EditorHandlers } from "./sqore.js";