qsharp-lang 1.22.4-dev → 1.22.5-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 (335) hide show
  1. package/dist/data-structures/circuit.d.ts +6 -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 +81 -81
  318. package/lib/nodejs/qsc_wasm.d.cts +2 -1
  319. package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
  320. package/lib/web/qsc_wasm.d.ts +2 -1
  321. package/lib/web/qsc_wasm.js +74 -74
  322. package/lib/web/qsc_wasm_bg.wasm +0 -0
  323. package/package.json +1 -1
  324. package/ux/atoms/controls.ts +216 -0
  325. package/ux/atoms/index.css +226 -0
  326. package/ux/atoms/index.ts +192 -0
  327. package/ux/atoms/layout.ts +730 -0
  328. package/ux/atoms/utils.ts +32 -0
  329. package/ux/chem/index.tsx +191 -0
  330. package/ux/chem/style.css +83 -0
  331. package/ux/circuit-vis/events.ts +1 -5
  332. package/ux/circuit-vis/formatters/gateFormatter.ts +1 -1
  333. package/ux/circuit-vis/process.ts +13 -5
  334. package/ux/circuit-vis/sqore.ts +10 -8
  335. package/ux/index.ts +2 -0
@@ -0,0 +1,32 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ // **** Helper functions for rendering SVG elements ****
5
+
6
+ type StringMap = Record<string, string>;
7
+
8
+ export function createSvgElements(...tags: string[]): SVGElement[] {
9
+ return tags.map((tag) =>
10
+ document.createElementNS("http://www.w3.org/2000/svg", tag),
11
+ );
12
+ }
13
+
14
+ export function setAttributes(el: SVGElement, attrs: StringMap) {
15
+ for (const key in attrs) el.setAttribute(key, attrs[key]);
16
+ }
17
+
18
+ export function appendChildren(parent: Element, children: Element[]) {
19
+ children.forEach((child) => parent.appendChild(child));
20
+ }
21
+
22
+ export function addChildWithClass(
23
+ parent: HTMLElement,
24
+ childTag: string,
25
+ className: string,
26
+ ): HTMLElement {
27
+ const parentDoc = parent.ownerDocument;
28
+ const child = parentDoc.createElement(childTag);
29
+ child.classList.add(className);
30
+ parent.appendChild(child);
31
+ return child;
32
+ }
@@ -0,0 +1,191 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ import { useRef, useEffect, useState } from "preact/hooks";
5
+ import { createViewer, GLViewer } from "3dmol";
6
+
7
+ import "./style.css";
8
+
9
+ const themeAttribute = "data-vscode-theme-kind";
10
+
11
+ export function MoleculeViewer(props: {
12
+ moleculeData: string;
13
+ cubeData: { [key: string]: string };
14
+ isoValue?: number;
15
+ }) {
16
+ // Holds reference to the viewer div and 3Dmol viewer object.
17
+ const viewerRef = useRef<HTMLDivElement>(null);
18
+ const viewer = useRef<GLViewer | null>(null);
19
+ const activeCubeData = useRef([] as any[]);
20
+
21
+ const [viewStyle, setViewStyle] = useState("Sphere");
22
+ const [isoval, setIsoval] = useState(props.isoValue || 0.02);
23
+ const [cubeKey, setCubeKey] = useState(Object.keys(props.cubeData)[0] || "");
24
+
25
+ // Runs after the DOM has been created. Create the 3Dmol viewer and adds the model.
26
+ useEffect(() => {
27
+ if (props.moleculeData && viewerRef.current) {
28
+ const molViewer =
29
+ viewer.current ??
30
+ createViewer(viewerRef.current, {
31
+ backgroundColor: getComputedStyle(document.body).getPropertyValue(
32
+ "--vscode-editor-background",
33
+ ),
34
+ });
35
+ try {
36
+ molViewer.clear(); // If the model is being replaced, clear the old one. Perhaps should get and update instead?
37
+ molViewer.addModel(props.moleculeData.trim(), "xyz", {
38
+ assignBonds: true,
39
+ });
40
+ } catch (error) {
41
+ console.error("Error adding model:", error);
42
+ }
43
+ viewer.current = molViewer;
44
+ viewer.current.zoomTo();
45
+ }
46
+
47
+ // Respond to theme changes
48
+ const callback = (mutations: MutationRecord[]) => {
49
+ for (const mutation of mutations) {
50
+ if (mutation.attributeName === themeAttribute) {
51
+ const newBackgroundColor = getComputedStyle(
52
+ document.body,
53
+ ).getPropertyValue("--vscode-editor-background");
54
+ if (viewer.current) {
55
+ viewer.current.setBackgroundColor(newBackgroundColor, 1.0);
56
+ viewer.current.render();
57
+ }
58
+ }
59
+ }
60
+ };
61
+ const observer = new MutationObserver(callback);
62
+ observer.observe(document.body, { attributeFilter: [themeAttribute] });
63
+ }, [props.moleculeData]);
64
+
65
+ useEffect(() => {
66
+ const currViewer = viewer.current;
67
+ if (!currViewer) {
68
+ return;
69
+ }
70
+
71
+ if (cubeKey && props.cubeData[cubeKey]) {
72
+ activeCubeData.current.forEach((voldata) => {
73
+ currViewer.removeShape(voldata);
74
+ });
75
+ activeCubeData.current = [];
76
+ const cubeData = props.cubeData[cubeKey];
77
+ activeCubeData.current.push(
78
+ currViewer.addVolumetricData(cubeData.trim(), "cube", {
79
+ isoval,
80
+ opacity: 1,
81
+ color: "red",
82
+ }),
83
+ );
84
+ activeCubeData.current.push(
85
+ currViewer.addVolumetricData(cubeData.trim(), "cube", {
86
+ isoval: -1 * isoval,
87
+ opacity: 1,
88
+ color: "green",
89
+ }),
90
+ );
91
+ }
92
+
93
+ if (viewStyle === "Sphere") {
94
+ currViewer.setStyle({}, { sphere: { scale: 0.3 }, stick: {} });
95
+ } else if (viewStyle === "Stick") {
96
+ currViewer.setStyle({}, { stick: { radius: 0.2 } });
97
+ } else if (viewStyle === "Line") {
98
+ currViewer.setStyle({}, { line: { linewidth: 5.0 } });
99
+ }
100
+ currViewer.render();
101
+
102
+ // Sometimes keys are added later. If that's the case, change the cubeKey to the first available.
103
+ if (!cubeKey && Object.keys(props.cubeData).length > 0) {
104
+ setCubeKey(Object.keys(props.cubeData)[0]);
105
+ }
106
+ }, [viewStyle, isoval, cubeKey, props.moleculeData, props.cubeData]);
107
+
108
+ // React to changes in the initial isovalue prop, just in case the widget updates state in parts.
109
+ useEffect(() => {
110
+ setIsoval(props.isoValue || 0.02);
111
+ }, [props.isoValue]);
112
+
113
+ return (
114
+ <div id="viewer-container">
115
+ <div
116
+ id="viewer"
117
+ ref={viewerRef}
118
+ style="width: 640px; height: 480px;"
119
+ ></div>
120
+
121
+ <div id="view-dropdown-container" class="view-option">
122
+ <label for="viewSelector">Visualization Style:</label>
123
+ <select
124
+ id="viewSelector"
125
+ onChange={(e) => {
126
+ const style = (e.target as HTMLSelectElement).value;
127
+ setViewStyle(style);
128
+ }}
129
+ >
130
+ <option value="Sphere">Sphere</option>
131
+ <option value="Stick">Stick</option>
132
+ <option value="Line">Line</option>
133
+ </select>
134
+ </div>
135
+ {cubeKey ? (
136
+ <>
137
+ <div id="cube-dropdown-container" class="view-option">
138
+ <label for="cubeSelector">Cube selection:</label>
139
+ <select
140
+ id="cubeSelector"
141
+ onChange={(e) => {
142
+ const key = (e.target as HTMLSelectElement).value;
143
+ setCubeKey(key);
144
+ }}
145
+ >
146
+ {Object.keys(props.cubeData).map((key) => (
147
+ <option value={key} selected={key === cubeKey}>
148
+ {key}
149
+ </option>
150
+ ))}
151
+ </select>
152
+ </div>
153
+
154
+ <div id="isoval-slider-container" class="view-option">
155
+ <label for="isovalSlider">Adjust isovalue:</label>
156
+ <input
157
+ type="range"
158
+ id="isovalSlider"
159
+ min="0.005"
160
+ max="0.1"
161
+ step="0.005"
162
+ value={isoval}
163
+ onInput={(e) => {
164
+ const new_isoval = parseFloat(
165
+ (e.target as HTMLInputElement).value,
166
+ );
167
+ setIsoval(new_isoval);
168
+ }}
169
+ />
170
+ <input
171
+ type="number"
172
+ id="isovalInput"
173
+ min="0.005"
174
+ max="0.1"
175
+ step="0.001"
176
+ value={isoval}
177
+ onInput={(e) => {
178
+ const new_isoval = parseFloat(
179
+ (e.target as HTMLInputElement).value,
180
+ );
181
+ if (!isNaN(new_isoval)) {
182
+ setIsoval(new_isoval);
183
+ }
184
+ }}
185
+ />
186
+ </div>
187
+ </>
188
+ ) : null}
189
+ </div>
190
+ );
191
+ }
@@ -0,0 +1,83 @@
1
+ #viewer {
2
+ width: 100%;
3
+ height: 100%;
4
+ margin: 0;
5
+ overflow: hidden;
6
+ }
7
+
8
+ #viewer-container {
9
+ width: 100%;
10
+ height: 100%;
11
+ margin: 0;
12
+ overflow: hidden;
13
+ /* border: 1px solid gray; */
14
+ }
15
+
16
+ #viewer {
17
+ width: 100%;
18
+ height: 100%;
19
+ }
20
+
21
+ #view-dropdown-container {
22
+ position: absolute;
23
+ top: 10px; /* distance from bottom */
24
+ left: 10px; /* distance from right */
25
+ height: 20px;
26
+ padding: 10px;
27
+ border-radius: 4px;
28
+ z-index: 10;
29
+ font-family: system-ui;
30
+ }
31
+
32
+ #viewSelector {
33
+ padding-left: 4px;
34
+ }
35
+
36
+ .view-option {
37
+ display: flex;
38
+ align-items: center;
39
+ gap: 8px;
40
+ }
41
+
42
+ .view-option label {
43
+ margin-right: 0;
44
+ white-space: nowrap;
45
+ min-width: 120px;
46
+ }
47
+
48
+ .view-option select,
49
+ .view-option input[type="range"] {
50
+ color: var(--vscode-editor-foreground);
51
+ background-color: var(--vscode-editor-background);
52
+ }
53
+
54
+ #cube-dropdown-container {
55
+ position: absolute;
56
+ top: 40px; /* distance from bottom */
57
+ left: 10px; /* distance from right */
58
+ padding: 10px;
59
+ height: 20px;
60
+ border-radius: 4px;
61
+ z-index: 10;
62
+ font-family: system-ui;
63
+ }
64
+
65
+ #isoval-slider-container {
66
+ position: absolute;
67
+ top: 70px; /* distance from bottom */
68
+ left: 10px; /* distance from right */
69
+ padding: 10px;
70
+ height: 40px;
71
+ border-radius: 4px;
72
+ z-index: 10;
73
+ font-family: system-ui;
74
+ }
75
+
76
+ #isovalSlider {
77
+ width: 100px;
78
+ outline: none;
79
+ }
80
+
81
+ #isovalInput {
82
+ width: 64px;
83
+ }
@@ -170,11 +170,7 @@ class CircuitEvents {
170
170
  this.selectedOperation.controls != null &&
171
171
  this.selectedWire != null
172
172
  ) {
173
- const controlIndex = this.selectedOperation.controls.findIndex(
174
- (control) => control.qubit === this.selectedWire,
175
- );
176
- if (controlIndex !== -1)
177
- this.selectedOperation.controls.splice(controlIndex, 1);
173
+ removeControl(this, this.selectedOperation, this.selectedWire);
178
174
  } else {
179
175
  // Otherwise, remove the selectedOperation
180
176
  removeOperation(this, selectedLocation);
@@ -164,7 +164,7 @@ const _zoomButton = (
164
164
  let { dataAttributes } = renderData;
165
165
  dataAttributes = dataAttributes || {};
166
166
 
167
- const expanded = "expanded" in dataAttributes;
167
+ const expanded = dataAttributes["expanded"] == "true";
168
168
 
169
169
  const x = gateBoundingBoxX + 2;
170
170
  const y = gateBoundingBoxY + 2;
@@ -213,7 +213,11 @@ const _opToRenderData = (
213
213
  ),
214
214
  }))
215
215
  .filter((col) => col.components.length > 0);
216
- let childrenInstrs = processOperations(onZeroOps, registers);
216
+ let childrenInstrs = processOperations(
217
+ onZeroOps,
218
+ registers,
219
+ renderLocations,
220
+ );
217
221
  const zeroGates: GateRenderData[][] = childrenInstrs.renderDataArray;
218
222
  const zeroChildWidth: number = childrenInstrs.svgWidth;
219
223
 
@@ -225,7 +229,7 @@ const _opToRenderData = (
225
229
  ),
226
230
  }))
227
231
  .filter((col) => col.components.length > 0);
228
- childrenInstrs = processOperations(onOneOps, registers);
232
+ childrenInstrs = processOperations(onOneOps, registers, renderLocations);
229
233
  const oneGates: GateRenderData[][] = childrenInstrs.renderDataArray;
230
234
  const oneChildWidth: number = childrenInstrs.svgWidth;
231
235
 
@@ -247,7 +251,11 @@ const _opToRenderData = (
247
251
  conditionalRender == ConditionalRender.AsGroup &&
248
252
  (children?.length || 0) > 0
249
253
  ) {
250
- const childrenInstrs = processOperations(children!, registers);
254
+ const childrenInstrs = processOperations(
255
+ children!,
256
+ registers,
257
+ renderLocations,
258
+ );
251
259
  renderData.type = GateType.Group;
252
260
  renderData.children = childrenInstrs.renderDataArray;
253
261
  // _zoomButton function in gateFormatter.ts relies on
@@ -285,8 +293,8 @@ const _opToRenderData = (
285
293
  // Set gate width
286
294
  renderData.width = getGateWidth(renderData);
287
295
 
288
- if (op.source && renderLocations) {
289
- renderData.link = renderLocations([op.source]);
296
+ if (op.metadata?.source && renderLocations) {
297
+ renderData.link = renderLocations([op.metadata.source]);
290
298
  }
291
299
 
292
300
  // Extend existing data attributes with user-provided data attributes
@@ -59,6 +59,7 @@ export type DrawOptions = {
59
59
  export class Sqore {
60
60
  circuit: Circuit;
61
61
  gateRegistry: GateRegistry = {};
62
+ renderDepth: number = this.options.renderDepth ?? 0;
62
63
  /**
63
64
  * Initializes Sqore object.
64
65
  *
@@ -106,7 +107,6 @@ export class Sqore {
106
107
  // Create copy of circuit to prevent mutation
107
108
  const _circuit: Circuit =
108
109
  circuit ?? JSON.parse(JSON.stringify(this.circuit));
109
- const renderDepth = this.options.renderDepth || 0;
110
110
 
111
111
  // Assign unique locations to each operation
112
112
  _circuit.componentGrid.forEach((col, colIndex) =>
@@ -118,7 +118,7 @@ export class Sqore {
118
118
  // Render operations starting at given depth
119
119
  _circuit.componentGrid = this.selectOpsAtDepth(
120
120
  _circuit.componentGrid,
121
- renderDepth,
121
+ this.renderDepth,
122
122
  );
123
123
 
124
124
  // If only one top-level operation, expand automatically:
@@ -129,7 +129,9 @@ export class Sqore {
129
129
  Object.prototype.hasOwnProperty.call(
130
130
  _circuit.componentGrid[0].components[0].dataAttributes,
131
131
  "location",
132
- )
132
+ ) &&
133
+ _circuit.componentGrid[0].components[0].dataAttributes["expanded"] !==
134
+ "false"
133
135
  ) {
134
136
  const location: string =
135
137
  _circuit.componentGrid[0].components[0].dataAttributes["location"];
@@ -337,11 +339,11 @@ export class Sqore {
337
339
  } else {
338
340
  selectedCol.push(op);
339
341
  }
340
- selectedOps.push({ components: selectedCol });
341
- if (extraCols.length > 0) {
342
- selectedOps.push(...extraCols);
343
- }
344
342
  });
343
+ selectedOps.push({ components: selectedCol });
344
+ if (extraCols.length > 0) {
345
+ selectedOps.push(...extraCols);
346
+ }
345
347
  });
346
348
  return selectedOps;
347
349
  }
@@ -478,7 +480,7 @@ export class Sqore {
478
480
  // Collapse parent gate and its children
479
481
  if (opId.startsWith(parentLoc)) {
480
482
  op.conditionalRender = ConditionalRender.Always;
481
- delete op.dataAttributes["expanded"];
483
+ op.dataAttributes["expanded"] = "false";
482
484
  }
483
485
  }),
484
486
  );
package/ux/index.ts CHANGED
@@ -20,3 +20,5 @@ export { EstimatesOverview } from "./estimatesOverview.js";
20
20
  export { EstimatesPanel } from "./estimatesPanel.js";
21
21
  export { Circuit, CircuitPanel } from "./circuit.js";
22
22
  export { setRenderer, Markdown } from "./renderers.js";
23
+ export { Atoms, type ZoneLayout, type TraceData } from "./atoms/index.js";
24
+ export { MoleculeViewer } from "./chem/index.js";