qsharp-lang 1.21.1-dev → 1.21.2-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.
- package/dist/katas-content.generated.js +3 -3
- package/dist/katas-content.generated.md.js +3 -3
- package/dist/log.d.ts +1 -1
- package/dist/log.js +1 -1
- package/dist/workers/common.js +1 -1
- package/docs/Microsoft.Quantum.Core/IsRangeEmpty.md +1 -1
- package/docs/Microsoft.Quantum.Core/Length.md +1 -1
- package/docs/Microsoft.Quantum.Core/RangeEnd.md +1 -1
- package/docs/Microsoft.Quantum.Core/RangeStart.md +1 -1
- package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
- package/docs/Microsoft.Quantum.Core/index.md +1 -1
- package/docs/Std.Arithmetic/AddLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
- package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
- package/docs/Std.Arithmetic/IncByI.md +1 -1
- package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
- package/docs/Std.Arithmetic/IncByL.md +1 -1
- package/docs/Std.Arithmetic/IncByLE.md +1 -1
- package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
- package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
- package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
- package/docs/Std.Arithmetic/MAJ.md +1 -1
- package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
- package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
- package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
- package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
- package/docs/Std.Arithmetic/index.md +1 -1
- package/docs/Std.Arrays/All.md +1 -1
- package/docs/Std.Arrays/Any.md +1 -1
- package/docs/Std.Arrays/Chunks.md +1 -1
- package/docs/Std.Arrays/CircularlyShifted.md +1 -1
- package/docs/Std.Arrays/ColumnAt.md +1 -1
- package/docs/Std.Arrays/Count.md +1 -1
- package/docs/Std.Arrays/Diagonal.md +1 -1
- package/docs/Std.Arrays/DrawMany.md +1 -1
- package/docs/Std.Arrays/Enumerated.md +1 -1
- package/docs/Std.Arrays/Excluding.md +1 -1
- package/docs/Std.Arrays/Filtered.md +1 -1
- package/docs/Std.Arrays/FlatMapped.md +1 -1
- package/docs/Std.Arrays/Flattened.md +1 -1
- package/docs/Std.Arrays/Fold.md +1 -1
- package/docs/Std.Arrays/ForEach.md +1 -1
- package/docs/Std.Arrays/Head.md +1 -1
- package/docs/Std.Arrays/HeadAndRest.md +1 -1
- package/docs/Std.Arrays/IndexOf.md +1 -1
- package/docs/Std.Arrays/IndexRange.md +1 -1
- package/docs/Std.Arrays/Interleaved.md +1 -1
- package/docs/Std.Arrays/IsEmpty.md +1 -1
- package/docs/Std.Arrays/IsRectangularArray.md +1 -1
- package/docs/Std.Arrays/IsSorted.md +1 -1
- package/docs/Std.Arrays/IsSquareArray.md +1 -1
- package/docs/Std.Arrays/Mapped.md +1 -1
- package/docs/Std.Arrays/MappedByIndex.md +1 -1
- package/docs/Std.Arrays/MappedOverRange.md +1 -1
- package/docs/Std.Arrays/Most.md +1 -1
- package/docs/Std.Arrays/MostAndTail.md +1 -1
- package/docs/Std.Arrays/Padded.md +1 -1
- package/docs/Std.Arrays/Partitioned.md +1 -1
- package/docs/Std.Arrays/Rest.md +1 -1
- package/docs/Std.Arrays/Reversed.md +1 -1
- package/docs/Std.Arrays/SequenceI.md +1 -1
- package/docs/Std.Arrays/SequenceL.md +1 -1
- package/docs/Std.Arrays/Sorted.md +1 -1
- package/docs/Std.Arrays/Subarray.md +1 -1
- package/docs/Std.Arrays/Swapped.md +1 -1
- package/docs/Std.Arrays/Tail.md +1 -1
- package/docs/Std.Arrays/Transposed.md +1 -1
- package/docs/Std.Arrays/Unzipped.md +1 -1
- package/docs/Std.Arrays/Where.md +1 -1
- package/docs/Std.Arrays/Windows.md +1 -1
- package/docs/Std.Arrays/Zipped.md +1 -1
- package/docs/Std.Arrays/index.md +1 -1
- package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
- package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
- package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
- package/docs/Std.Canon/ApplyOperationPowerA.md +1 -1
- package/docs/Std.Canon/ApplyOperationPowerCA.md +1 -1
- package/docs/Std.Canon/ApplyP.md +1 -1
- package/docs/Std.Canon/ApplyPauli.md +1 -1
- package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
- package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
- package/docs/Std.Canon/ApplyQFT.md +1 -1
- package/docs/Std.Canon/ApplyQPE.md +1 -1
- package/docs/Std.Canon/ApplyToEach.md +1 -1
- package/docs/Std.Canon/ApplyToEachA.md +1 -1
- package/docs/Std.Canon/ApplyToEachC.md +1 -1
- package/docs/Std.Canon/ApplyToEachCA.md +1 -1
- package/docs/Std.Canon/ApplyXorInPlace.md +1 -1
- package/docs/Std.Canon/ApplyXorInPlaceL.md +1 -1
- package/docs/Std.Canon/CX.md +1 -1
- package/docs/Std.Canon/CY.md +1 -1
- package/docs/Std.Canon/CZ.md +1 -1
- package/docs/Std.Canon/Fst.md +1 -1
- package/docs/Std.Canon/MapPauliAxis.md +1 -1
- package/docs/Std.Canon/Relabel.md +1 -1
- package/docs/Std.Canon/Snd.md +1 -1
- package/docs/Std.Canon/SwapReverseRegister.md +1 -1
- package/docs/Std.Canon/index.md +1 -1
- package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
- package/docs/Std.Convert/BigIntAsInt.md +1 -1
- package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
- package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
- package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
- package/docs/Std.Convert/BoolAsResult.md +1 -1
- package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
- package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
- package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
- package/docs/Std.Convert/IntAsBigInt.md +1 -1
- package/docs/Std.Convert/IntAsBoolArray.md +1 -1
- package/docs/Std.Convert/IntAsDouble.md +1 -1
- package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
- package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
- package/docs/Std.Convert/ResultAsBool.md +1 -1
- package/docs/Std.Convert/index.md +1 -1
- package/docs/Std.Core/Complex.md +1 -1
- package/docs/Std.Core/Length.md +1 -1
- package/docs/Std.Core/Repeated.md +1 -1
- package/docs/Std.Core/index.md +1 -1
- package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
- package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
- package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
- package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
- package/docs/Std.Diagnostics/CheckZero.md +1 -1
- package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
- package/docs/Std.Diagnostics/ConfigureQubitLoss.md +1 -1
- package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
- package/docs/Std.Diagnostics/DumpMachine.md +1 -1
- package/docs/Std.Diagnostics/DumpOperation.md +1 -1
- package/docs/Std.Diagnostics/DumpRegister.md +1 -1
- package/docs/Std.Diagnostics/Fact.md +1 -1
- package/docs/Std.Diagnostics/NoNoise.md +1 -1
- package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
- package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
- package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
- package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
- package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
- package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
- package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
- package/docs/Std.Diagnostics/index.md +1 -1
- package/docs/Std.Intrinsic/AND.md +1 -1
- package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
- package/docs/Std.Intrinsic/CCNOT.md +1 -1
- package/docs/Std.Intrinsic/CNOT.md +1 -1
- package/docs/Std.Intrinsic/Exp.md +1 -1
- package/docs/Std.Intrinsic/H.md +1 -1
- package/docs/Std.Intrinsic/I.md +1 -1
- package/docs/Std.Intrinsic/M.md +1 -1
- package/docs/Std.Intrinsic/Measure.md +1 -1
- package/docs/Std.Intrinsic/Message.md +1 -1
- package/docs/Std.Intrinsic/R.md +1 -1
- package/docs/Std.Intrinsic/R1.md +1 -1
- package/docs/Std.Intrinsic/R1Frac.md +1 -1
- package/docs/Std.Intrinsic/RFrac.md +1 -1
- package/docs/Std.Intrinsic/Reset.md +1 -1
- package/docs/Std.Intrinsic/ResetAll.md +1 -1
- package/docs/Std.Intrinsic/Rx.md +1 -1
- package/docs/Std.Intrinsic/Rxx.md +1 -1
- package/docs/Std.Intrinsic/Ry.md +1 -1
- package/docs/Std.Intrinsic/Ryy.md +1 -1
- package/docs/Std.Intrinsic/Rz.md +1 -1
- package/docs/Std.Intrinsic/Rzz.md +1 -1
- package/docs/Std.Intrinsic/S.md +1 -1
- package/docs/Std.Intrinsic/SWAP.md +1 -1
- package/docs/Std.Intrinsic/SX.md +1 -1
- package/docs/Std.Intrinsic/T.md +1 -1
- package/docs/Std.Intrinsic/X.md +1 -1
- package/docs/Std.Intrinsic/Y.md +1 -1
- package/docs/Std.Intrinsic/Z.md +1 -1
- package/docs/Std.Intrinsic/index.md +1 -1
- package/docs/Std.Logical/Xor.md +1 -1
- package/docs/Std.Logical/index.md +1 -1
- package/docs/Std.Math/AbsComplex.md +1 -1
- package/docs/Std.Math/AbsComplexPolar.md +1 -1
- package/docs/Std.Math/AbsD.md +1 -1
- package/docs/Std.Math/AbsI.md +1 -1
- package/docs/Std.Math/AbsL.md +1 -1
- package/docs/Std.Math/AbsSquaredComplex.md +1 -1
- package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
- package/docs/Std.Math/ApproximateFactorial.md +1 -1
- package/docs/Std.Math/ArcCos.md +1 -1
- package/docs/Std.Math/ArcCosh.md +1 -1
- package/docs/Std.Math/ArcSin.md +1 -1
- package/docs/Std.Math/ArcSinh.md +1 -1
- package/docs/Std.Math/ArcTan.md +1 -1
- package/docs/Std.Math/ArcTan2.md +1 -1
- package/docs/Std.Math/ArcTanh.md +1 -1
- package/docs/Std.Math/ArgComplex.md +1 -1
- package/docs/Std.Math/ArgComplexPolar.md +1 -1
- package/docs/Std.Math/Binom.md +1 -1
- package/docs/Std.Math/BitSizeI.md +1 -1
- package/docs/Std.Math/BitSizeL.md +1 -1
- package/docs/Std.Math/Ceiling.md +1 -1
- package/docs/Std.Math/Complex.md +1 -1
- package/docs/Std.Math/ComplexPolar.md +1 -1
- package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
- package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
- package/docs/Std.Math/Cos.md +1 -1
- package/docs/Std.Math/Cosh.md +1 -1
- package/docs/Std.Math/DivRemI.md +1 -1
- package/docs/Std.Math/DivRemL.md +1 -1
- package/docs/Std.Math/DividedByC.md +1 -1
- package/docs/Std.Math/DividedByCP.md +1 -1
- package/docs/Std.Math/E.md +1 -1
- package/docs/Std.Math/ExpModI.md +1 -1
- package/docs/Std.Math/ExpModL.md +1 -1
- package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
- package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
- package/docs/Std.Math/FactorialI.md +1 -1
- package/docs/Std.Math/FactorialL.md +1 -1
- package/docs/Std.Math/Floor.md +1 -1
- package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
- package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
- package/docs/Std.Math/HammingWeightI.md +1 -1
- package/docs/Std.Math/InverseModI.md +1 -1
- package/docs/Std.Math/InverseModL.md +1 -1
- package/docs/Std.Math/IsCoprimeI.md +1 -1
- package/docs/Std.Math/IsCoprimeL.md +1 -1
- package/docs/Std.Math/IsInfinite.md +1 -1
- package/docs/Std.Math/IsNaN.md +1 -1
- package/docs/Std.Math/LargestFixedPoint.md +1 -1
- package/docs/Std.Math/Lg.md +1 -1
- package/docs/Std.Math/Log.md +1 -1
- package/docs/Std.Math/Log10.md +1 -1
- package/docs/Std.Math/LogFactorialD.md +1 -1
- package/docs/Std.Math/LogGammaD.md +1 -1
- package/docs/Std.Math/LogOf2.md +1 -1
- package/docs/Std.Math/Max.md +1 -1
- package/docs/Std.Math/MaxD.md +1 -1
- package/docs/Std.Math/MaxI.md +1 -1
- package/docs/Std.Math/MaxL.md +1 -1
- package/docs/Std.Math/Min.md +1 -1
- package/docs/Std.Math/MinD.md +1 -1
- package/docs/Std.Math/MinI.md +1 -1
- package/docs/Std.Math/MinL.md +1 -1
- package/docs/Std.Math/MinusC.md +1 -1
- package/docs/Std.Math/MinusCP.md +1 -1
- package/docs/Std.Math/ModulusI.md +1 -1
- package/docs/Std.Math/ModulusL.md +1 -1
- package/docs/Std.Math/NegationC.md +1 -1
- package/docs/Std.Math/NegationCP.md +1 -1
- package/docs/Std.Math/PI.md +1 -1
- package/docs/Std.Math/PNorm.md +1 -1
- package/docs/Std.Math/PNormalized.md +1 -1
- package/docs/Std.Math/PlusC.md +1 -1
- package/docs/Std.Math/PlusCP.md +1 -1
- package/docs/Std.Math/PowC.md +1 -1
- package/docs/Std.Math/PowCP.md +1 -1
- package/docs/Std.Math/RealMod.md +1 -1
- package/docs/Std.Math/Round.md +1 -1
- package/docs/Std.Math/RoundHalfAwayFromZero.md +1 -1
- package/docs/Std.Math/SignD.md +1 -1
- package/docs/Std.Math/SignI.md +1 -1
- package/docs/Std.Math/SignL.md +1 -1
- package/docs/Std.Math/Sin.md +1 -1
- package/docs/Std.Math/Sinh.md +1 -1
- package/docs/Std.Math/SmallestFixedPoint.md +1 -1
- package/docs/Std.Math/Sqrt.md +1 -1
- package/docs/Std.Math/SquaredNorm.md +1 -1
- package/docs/Std.Math/Tan.md +1 -1
- package/docs/Std.Math/Tanh.md +1 -1
- package/docs/Std.Math/TimesC.md +1 -1
- package/docs/Std.Math/TimesCP.md +1 -1
- package/docs/Std.Math/TrailingZeroCountI.md +1 -1
- package/docs/Std.Math/TrailingZeroCountL.md +1 -1
- package/docs/Std.Math/Truncate.md +1 -1
- package/docs/Std.Math/index.md +1 -1
- package/docs/Std.Measurement/IsLossResult.md +1 -1
- package/docs/Std.Measurement/MResetEachZ.md +1 -1
- package/docs/Std.Measurement/MResetX.md +1 -1
- package/docs/Std.Measurement/MResetY.md +1 -1
- package/docs/Std.Measurement/MResetZ.md +1 -1
- package/docs/Std.Measurement/MResetZChecked.md +1 -1
- package/docs/Std.Measurement/MeasureAllZ.md +1 -1
- package/docs/Std.Measurement/MeasureEachZ.md +1 -1
- package/docs/Std.Measurement/MeasureInteger.md +1 -1
- package/docs/Std.Measurement/index.md +1 -1
- package/docs/Std.Random/DrawRandomBool.md +1 -1
- package/docs/Std.Random/DrawRandomDouble.md +1 -1
- package/docs/Std.Random/DrawRandomInt.md +1 -1
- package/docs/Std.Random/index.md +1 -1
- package/docs/Std.Range/IsRangeEmpty.md +1 -1
- package/docs/Std.Range/RangeEnd.md +1 -1
- package/docs/Std.Range/RangeReverse.md +1 -1
- package/docs/Std.Range/RangeStart.md +1 -1
- package/docs/Std.Range/RangeStep.md +1 -1
- package/docs/Std.Range/index.md +1 -1
- package/docs/Std.ResourceEstimation/AccountForEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/AuxQubitCount.md +1 -1
- package/docs/Std.ResourceEstimation/BeginEstimateCaching.md +1 -1
- package/docs/Std.ResourceEstimation/BeginRepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/CczCount.md +1 -1
- package/docs/Std.ResourceEstimation/EnableMemoryComputeArchitecture.md +34 -0
- package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
- package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/LeastFrequentlyUsed.md +23 -0
- package/docs/Std.ResourceEstimation/LeastRecentlyUsed.md +23 -0
- package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
- package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
- package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
- package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
- package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
- package/docs/Std.ResourceEstimation/TCount.md +1 -1
- package/docs/Std.ResourceEstimation/index.md +4 -1
- package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
- package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
- package/docs/Std.StatePreparation/PrepareUniformSuperposition.md +1 -1
- package/docs/Std.StatePreparation/index.md +1 -1
- package/docs/Std.TableLookup/Select.md +5 -2
- package/docs/Std.TableLookup/index.md +1 -1
- package/docs/index.md +1 -1
- package/docs/toc.yml +3 -0
- package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
- package/lib/web/qsc_wasm_bg.wasm +0 -0
- package/package.json +5 -2
- package/ux/circuit-vis/circuit.ts +3 -3
- package/ux/circuit-vis/circuitManipulation.ts +5 -5
- package/ux/circuit-vis/contextMenu.ts +4 -4
- package/ux/circuit-vis/draggable.ts +38 -38
- package/ux/circuit-vis/events.ts +9 -9
- package/ux/circuit-vis/formatters/formatUtils.ts +15 -6
- package/ux/circuit-vis/formatters/gateFormatter.ts +51 -19
- package/ux/circuit-vis/formatters/inputFormatter.ts +5 -5
- package/ux/circuit-vis/formatters/registerFormatter.ts +4 -4
- package/ux/circuit-vis/gateRenderData.ts +1 -1
- package/ux/circuit-vis/index.ts +3 -3
- package/ux/circuit-vis/panel.ts +6 -6
- package/ux/circuit-vis/process.ts +5 -5
- package/ux/circuit-vis/register.ts +1 -1
- package/ux/circuit-vis/sqore.ts +16 -14
- package/ux/circuit-vis/utils.ts +8 -23
- package/ux/circuit.tsx +2 -2
- package/ux/data.ts +1 -1
- package/ux/histogram.tsx +2 -2
- package/ux/qsharp-ux.css +1 -1
- package/ux/scatterChart.tsx +1 -1
- package/ux/tsconfig.json +5 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
|
|
4
|
-
import { GateRenderData, GateType } from "../gateRenderData";
|
|
4
|
+
import { GateRenderData, GateType } from "../gateRenderData.js";
|
|
5
5
|
import {
|
|
6
6
|
minGateWidth,
|
|
7
7
|
gateHeight,
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
groupBoxPadding,
|
|
13
13
|
classicalRegHeight,
|
|
14
14
|
nestedGroupPadding,
|
|
15
|
-
} from "../constants";
|
|
15
|
+
} from "../constants.js";
|
|
16
16
|
import {
|
|
17
17
|
createSvgElement,
|
|
18
18
|
group,
|
|
@@ -24,9 +24,9 @@ import {
|
|
|
24
24
|
arc,
|
|
25
25
|
dashedLine,
|
|
26
26
|
dashedBox,
|
|
27
|
-
} from "./formatUtils";
|
|
27
|
+
} from "./formatUtils.js";
|
|
28
28
|
|
|
29
|
-
import { mathChars } from "../utils";
|
|
29
|
+
import { mathChars } from "../utils.js";
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Given an array of operations render data, return the SVG representation.
|
|
@@ -62,7 +62,11 @@ const formatGate = (
|
|
|
62
62
|
renderData;
|
|
63
63
|
switch (type) {
|
|
64
64
|
case GateType.Measure:
|
|
65
|
-
return _createGate(
|
|
65
|
+
return _createGate(
|
|
66
|
+
[_measure(x, controlsY[0], controlsY)],
|
|
67
|
+
renderData,
|
|
68
|
+
nestedDepth,
|
|
69
|
+
);
|
|
66
70
|
case GateType.Unitary:
|
|
67
71
|
return _createGate(
|
|
68
72
|
[_unitary(label, x, targetsY as number[][], width, displayArgs)],
|
|
@@ -209,10 +213,11 @@ const _gatePosition = (
|
|
|
209
213
|
*
|
|
210
214
|
* @param x x coord of measurement gate.
|
|
211
215
|
* @param y y coord of measurement gate.
|
|
216
|
+
* @param wireYs y coords of wires connected to the measurement gate.
|
|
212
217
|
*
|
|
213
218
|
* @returns SVG representation of measurement gate.
|
|
214
219
|
*/
|
|
215
|
-
const _measure = (x: number, y: number): SVGElement => {
|
|
220
|
+
const _measure = (x: number, y: number, wireYs: number[]): SVGElement => {
|
|
216
221
|
x -= minGateWidth / 2;
|
|
217
222
|
const width: number = minGateWidth,
|
|
218
223
|
height = gateHeight;
|
|
@@ -233,6 +238,8 @@ const _measure = (x: number, y: number): SVGElement => {
|
|
|
233
238
|
y - height / 2 + 8,
|
|
234
239
|
);
|
|
235
240
|
meter.style.pointerEvents = "none";
|
|
241
|
+
mBox.setAttribute("data-wire-ys", JSON.stringify(wireYs));
|
|
242
|
+
mBox.setAttribute("data-width", `${width}`);
|
|
236
243
|
return group([mBox, mArc, meter]);
|
|
237
244
|
};
|
|
238
245
|
|
|
@@ -290,11 +297,20 @@ const _unitary = (
|
|
|
290
297
|
);
|
|
291
298
|
|
|
292
299
|
// Render each group as a separate unitary boxes
|
|
293
|
-
const unitaryBoxes: SVGElement[] = y.map((
|
|
294
|
-
const maxY: number =
|
|
295
|
-
|
|
300
|
+
const unitaryBoxes: SVGElement[] = y.map((wireYs: number[]) => {
|
|
301
|
+
const maxY: number = wireYs[wireYs.length - 1];
|
|
302
|
+
const minY: number = wireYs[0];
|
|
296
303
|
const height: number = maxY - minY + gateHeight;
|
|
297
|
-
return _unitaryBox(
|
|
304
|
+
return _unitaryBox(
|
|
305
|
+
label,
|
|
306
|
+
x,
|
|
307
|
+
minY,
|
|
308
|
+
width,
|
|
309
|
+
height,
|
|
310
|
+
wireYs,
|
|
311
|
+
displayArgs,
|
|
312
|
+
cssClass,
|
|
313
|
+
);
|
|
298
314
|
});
|
|
299
315
|
|
|
300
316
|
// Draw dashed line between disconnected unitaries
|
|
@@ -318,6 +334,7 @@ const _unitary = (
|
|
|
318
334
|
* @param y y coord of gate.
|
|
319
335
|
* @param width Width of gate.
|
|
320
336
|
* @param height Height of gate.
|
|
337
|
+
* @param wireYs y coords of wires connected to the gate.
|
|
321
338
|
* @param displayArgs Arguments passed in to gate.
|
|
322
339
|
* @param cssClass Optional CSS class to apply to the unitary gate for styling.
|
|
323
340
|
*
|
|
@@ -328,15 +345,24 @@ const _unitaryBox = (
|
|
|
328
345
|
x: number,
|
|
329
346
|
y: number,
|
|
330
347
|
width: number,
|
|
331
|
-
height: number
|
|
348
|
+
height: number,
|
|
349
|
+
wireYs: number[],
|
|
332
350
|
displayArgs?: string,
|
|
333
351
|
cssClass?: string,
|
|
334
352
|
): SVGElement => {
|
|
335
353
|
y -= gateHeight / 2;
|
|
336
|
-
const uBox: SVGElement = box(
|
|
354
|
+
const uBox: SVGElement = box(
|
|
355
|
+
x - width / 2,
|
|
356
|
+
y,
|
|
357
|
+
width,
|
|
358
|
+
height,
|
|
359
|
+
cssClass || "gate-unitary",
|
|
360
|
+
);
|
|
337
361
|
if (cssClass != null) {
|
|
338
362
|
uBox.setAttribute("class", cssClass);
|
|
339
363
|
}
|
|
364
|
+
uBox.setAttribute("data-wire-ys", JSON.stringify(wireYs));
|
|
365
|
+
uBox.setAttribute("data-width", `${width}`);
|
|
340
366
|
const labelY = y + height / 2 - (displayArgs == null ? 0 : 7);
|
|
341
367
|
const labelText = text(label, x, labelY);
|
|
342
368
|
_style_gate_text(labelText);
|
|
@@ -385,7 +411,7 @@ const _swap = (renderData: GateRenderData, nestedDepth: number): SVGElement => {
|
|
|
385
411
|
const _x = (renderData: GateRenderData): SVGElement => {
|
|
386
412
|
const { x, targetsY } = renderData;
|
|
387
413
|
const ys = targetsY.flatMap((y) => y as number[]);
|
|
388
|
-
return _oplus(x, ys[0]);
|
|
414
|
+
return _oplus(x, ys[0], ys);
|
|
389
415
|
};
|
|
390
416
|
|
|
391
417
|
/**
|
|
@@ -454,7 +480,9 @@ const _controlledGate = (
|
|
|
454
480
|
// Get SVG for target gates
|
|
455
481
|
switch (type) {
|
|
456
482
|
case GateType.Cnot:
|
|
457
|
-
(targetsY as number[]).forEach((y) =>
|
|
483
|
+
(targetsY as number[]).forEach((y) =>
|
|
484
|
+
targetGateSvgs.push(_oplus(x, y, [y])),
|
|
485
|
+
);
|
|
458
486
|
break;
|
|
459
487
|
case GateType.Swap:
|
|
460
488
|
(targetsY as number[]).forEach((y) => targetGateSvgs.push(_cross(x, y)));
|
|
@@ -473,7 +501,7 @@ const _controlledGate = (
|
|
|
473
501
|
}
|
|
474
502
|
// Get SVGs for control dots
|
|
475
503
|
const controlledDotsSvg: SVGElement[] = controlsY.map((y) =>
|
|
476
|
-
controlDot(x, y),
|
|
504
|
+
controlDot(x, y, [y]),
|
|
477
505
|
);
|
|
478
506
|
// Create control lines
|
|
479
507
|
const maxY: number = Math.max(...controlsY, ...(targetsY as number[]));
|
|
@@ -493,15 +521,19 @@ const _controlledGate = (
|
|
|
493
521
|
*
|
|
494
522
|
* @param x x coordinate of gate.
|
|
495
523
|
* @param y y coordinate of gate.
|
|
496
|
-
* @param
|
|
524
|
+
* @param wireYs y coords of wires connected to the gate.
|
|
497
525
|
*
|
|
498
526
|
* @returns SVG representation of $\oplus$ symbol.
|
|
499
527
|
*/
|
|
500
|
-
const _oplus = (x: number, y: number,
|
|
528
|
+
const _oplus = (x: number, y: number, wireYs: number[]): SVGElement => {
|
|
529
|
+
const r = 15;
|
|
501
530
|
const circleBorder: SVGElement = circle(x, y, r);
|
|
502
531
|
const vertLine: SVGElement = line(x, y - r, x, y + r);
|
|
503
532
|
const horLine: SVGElement = line(x - r, y, x + r, y);
|
|
504
|
-
|
|
533
|
+
const oplus = group([circleBorder, vertLine, horLine], { class: "oplus" });
|
|
534
|
+
oplus.setAttribute("data-wire-ys", JSON.stringify(wireYs));
|
|
535
|
+
oplus.setAttribute("data-width", `${2 * r}`);
|
|
536
|
+
return oplus;
|
|
505
537
|
};
|
|
506
538
|
|
|
507
539
|
/**
|
|
@@ -520,7 +552,7 @@ const _groupedOperations = (
|
|
|
520
552
|
const [x1, y1, x2, y2] = _gatePosition(renderData, nestedDepth);
|
|
521
553
|
|
|
522
554
|
// Draw dashed box around children gates
|
|
523
|
-
const box: SVGElement = dashedBox(x1, y1, x2, y2);
|
|
555
|
+
const box: SVGElement = dashedBox(x1, y1, x2, y2, "gate-unitary");
|
|
524
556
|
const elems: SVGElement[] = [box];
|
|
525
557
|
if (children != null)
|
|
526
558
|
elems.push(formatGates(children as GateRenderData[][], nestedDepth + 1));
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
|
|
4
|
-
import { Qubit } from "../circuit";
|
|
5
|
-
import { RegisterType, RegisterMap, RegisterRenderData } from "../register";
|
|
4
|
+
import { Qubit } from "../circuit.js";
|
|
5
|
+
import { RegisterType, RegisterMap, RegisterRenderData } from "../register.js";
|
|
6
6
|
import {
|
|
7
7
|
leftPadding,
|
|
8
8
|
startY,
|
|
9
9
|
registerHeight,
|
|
10
10
|
classicalRegHeight,
|
|
11
|
-
} from "../constants";
|
|
12
|
-
import { group, text } from "./formatUtils";
|
|
13
|
-
import { mathChars } from "../utils";
|
|
11
|
+
} from "../constants.js";
|
|
12
|
+
import { group, text } from "./formatUtils.js";
|
|
13
|
+
import { mathChars } from "../utils.js";
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* `formatInputs` takes in an array of Qubits and outputs the SVG string of formatted
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
|
|
4
|
-
import { RegisterMap } from "../register";
|
|
5
|
-
import { regLineStart } from "../constants";
|
|
6
|
-
import { GateRenderData, GateType } from "../gateRenderData";
|
|
7
|
-
import { group, line } from "./formatUtils";
|
|
4
|
+
import { RegisterMap } from "../register.js";
|
|
5
|
+
import { regLineStart } from "../constants.js";
|
|
6
|
+
import { GateRenderData, GateType } from "../gateRenderData.js";
|
|
7
|
+
import { group, line } from "./formatUtils.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Generate the SVG representation of the qubit register wires in `registers` and the classical wires
|
package/ux/circuit-vis/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
|
|
4
|
-
import { Sqore } from "./sqore";
|
|
5
|
-
import { CircuitGroup } from "./circuit";
|
|
4
|
+
import { Sqore } from "./sqore.js";
|
|
5
|
+
import { CircuitGroup } from "./circuit.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Render `circuit` into `container` at the specified layer depth.
|
|
@@ -34,4 +34,4 @@ export type {
|
|
|
34
34
|
Column,
|
|
35
35
|
Qubit,
|
|
36
36
|
Operation,
|
|
37
|
-
} from "./circuit";
|
|
37
|
+
} from "./circuit.js";
|
package/ux/circuit-vis/panel.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
|
|
4
|
-
import { Ket, Measurement, Operation, Unitary } from "./circuit";
|
|
4
|
+
import { Ket, Measurement, Operation, Unitary } from "./circuit.js";
|
|
5
5
|
import {
|
|
6
6
|
gateHeight,
|
|
7
7
|
horizontalGap,
|
|
8
8
|
minGateWidth,
|
|
9
9
|
verticalGap,
|
|
10
|
-
} from "./constants";
|
|
11
|
-
import { formatGate } from "./formatters/gateFormatter";
|
|
12
|
-
import { GateType, GateRenderData } from "./gateRenderData";
|
|
13
|
-
import { getGateWidth } from "./utils";
|
|
10
|
+
} from "./constants.js";
|
|
11
|
+
import { formatGate } from "./formatters/gateFormatter.js";
|
|
12
|
+
import { GateType, GateRenderData } from "./gateRenderData.js";
|
|
13
|
+
import { getGateWidth } from "./utils.js";
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Create a panel for the circuit visualization.
|
|
@@ -19,7 +19,7 @@ import { getGateWidth } from "./utils";
|
|
|
19
19
|
const createPanel = (container: HTMLElement): void => {
|
|
20
20
|
// Find or create the wrapper
|
|
21
21
|
let wrapper: HTMLElement | null = container.querySelector(".circuit-wrapper");
|
|
22
|
-
const circuit = container.querySelector("svg
|
|
22
|
+
const circuit = container.querySelector("svg.qviz");
|
|
23
23
|
if (circuit == null) {
|
|
24
24
|
throw new Error("No circuit found in the container");
|
|
25
25
|
}
|
|
@@ -7,11 +7,11 @@ import {
|
|
|
7
7
|
gatePadding,
|
|
8
8
|
controlBtnOffset,
|
|
9
9
|
groupBoxPadding,
|
|
10
|
-
} from "./constants";
|
|
11
|
-
import { ComponentGrid, Operation, ConditionalRender } from "./circuit";
|
|
12
|
-
import { GateRenderData, GateType } from "./gateRenderData";
|
|
13
|
-
import { Register, RegisterMap } from "./register";
|
|
14
|
-
import { getGateWidth } from "./utils";
|
|
10
|
+
} from "./constants.js";
|
|
11
|
+
import { ComponentGrid, Operation, ConditionalRender } from "./circuit.js";
|
|
12
|
+
import { GateRenderData, GateType } from "./gateRenderData.js";
|
|
13
|
+
import { Register, RegisterMap } from "./register.js";
|
|
14
|
+
import { getGateWidth } from "./utils.js";
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Takes in a component grid and maps the operations to `GateRenderData` objects which
|
package/ux/circuit-vis/sqore.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
|
|
4
|
-
import { formatInputs } from "./formatters/inputFormatter";
|
|
5
|
-
import { formatGates } from "./formatters/gateFormatter";
|
|
6
|
-
import { formatRegisters } from "./formatters/registerFormatter";
|
|
7
|
-
import { processOperations } from "./process";
|
|
4
|
+
import { formatInputs } from "./formatters/inputFormatter.js";
|
|
5
|
+
import { formatGates } from "./formatters/gateFormatter.js";
|
|
6
|
+
import { formatRegisters } from "./formatters/registerFormatter.js";
|
|
7
|
+
import { processOperations } from "./process.js";
|
|
8
8
|
import {
|
|
9
9
|
ConditionalRender,
|
|
10
10
|
Circuit,
|
|
@@ -12,13 +12,17 @@ import {
|
|
|
12
12
|
ComponentGrid,
|
|
13
13
|
Operation,
|
|
14
14
|
Column,
|
|
15
|
-
} from "./circuit";
|
|
16
|
-
import { GateRenderData, GateType } from "./gateRenderData";
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
} from "./circuit.js";
|
|
16
|
+
import { GateRenderData, GateType } from "./gateRenderData.js";
|
|
17
|
+
import {
|
|
18
|
+
gateHeight,
|
|
19
|
+
minGateWidth,
|
|
20
|
+
minToolboxHeight,
|
|
21
|
+
svgNS,
|
|
22
|
+
} from "./constants.js";
|
|
23
|
+
import { createDropzones } from "./draggable.js";
|
|
24
|
+
import { enableEvents } from "./events.js";
|
|
25
|
+
import { createPanel, enableRunButton } from "./panel.js";
|
|
22
26
|
|
|
23
27
|
/**
|
|
24
28
|
* Contains render data for visualization.
|
|
@@ -133,7 +137,7 @@ export class Sqore {
|
|
|
133
137
|
const composedSqore: ComposedSqore = this.compose(_circuit);
|
|
134
138
|
const svg: SVGElement = this.generateSvg(composedSqore);
|
|
135
139
|
this.setViewBox(svg);
|
|
136
|
-
const previousSvg = container.querySelector("svg
|
|
140
|
+
const previousSvg = container.querySelector("svg.qviz");
|
|
137
141
|
if (previousSvg == null) {
|
|
138
142
|
container.appendChild(svg);
|
|
139
143
|
} else {
|
|
@@ -231,10 +235,8 @@ export class Sqore {
|
|
|
231
235
|
*/
|
|
232
236
|
private generateSvg(composedSqore: ComposedSqore): SVGElement {
|
|
233
237
|
const { width, height, elements } = composedSqore;
|
|
234
|
-
const uuid: string = createUUID();
|
|
235
238
|
|
|
236
239
|
const svg: SVGElement = document.createElementNS(svgNS, "svg");
|
|
237
|
-
svg.setAttribute("id", uuid);
|
|
238
240
|
svg.setAttribute("class", "qviz");
|
|
239
241
|
svg.setAttribute("width", width.toString());
|
|
240
242
|
svg.setAttribute("height", height.toString());
|
package/ux/circuit-vis/utils.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
|
|
4
|
-
import { GateRenderData, GateType } from "./gateRenderData";
|
|
4
|
+
import { GateRenderData, GateType } from "./gateRenderData.js";
|
|
5
5
|
import {
|
|
6
6
|
minGateWidth,
|
|
7
7
|
labelPadding,
|
|
8
8
|
labelFontSize,
|
|
9
9
|
argsFontSize,
|
|
10
|
-
} from "./constants";
|
|
11
|
-
import { ComponentGrid, Operation } from "./circuit";
|
|
12
|
-
import { Register } from "./register";
|
|
10
|
+
} from "./constants.js";
|
|
11
|
+
import { ComponentGrid, Operation } from "./circuit.js";
|
|
12
|
+
import { Register } from "./register.js";
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Performs a deep equality check between two objects or arrays.
|
|
@@ -49,20 +49,6 @@ const deepEqual = (obj1: unknown, obj2: unknown): boolean => {
|
|
|
49
49
|
return true;
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
/**
|
|
53
|
-
* Generate a UUID using `Math.random`.
|
|
54
|
-
* Note: this implementation came from https://stackoverflow.com/questions/105034/how-to-create-guid-uuid
|
|
55
|
-
* and is not cryptographically secure but works for our use case.
|
|
56
|
-
*
|
|
57
|
-
* @returns UUID string.
|
|
58
|
-
*/
|
|
59
|
-
const createUUID = (): string =>
|
|
60
|
-
"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
|
|
61
|
-
const r = (Math.random() * 16) | 0,
|
|
62
|
-
v = c == "x" ? r : (r & 0x3) | 0x8;
|
|
63
|
-
return v.toString(16);
|
|
64
|
-
});
|
|
65
|
-
|
|
66
52
|
/**
|
|
67
53
|
* Calculate the width of a gate, given its render data.
|
|
68
54
|
*
|
|
@@ -117,7 +103,7 @@ const _getStringWidth = (
|
|
|
117
103
|
/**
|
|
118
104
|
* Find targets of an operation's children by recursively walking
|
|
119
105
|
* through all of its children's controls and targets.
|
|
120
|
-
* Note that this
|
|
106
|
+
* Note that this intentionally ignores the direct targets of the
|
|
121
107
|
* operation itself.
|
|
122
108
|
*
|
|
123
109
|
* Example:
|
|
@@ -388,7 +374,7 @@ const getToolboxElems = (container: HTMLElement): SVGGraphicsElement[] => {
|
|
|
388
374
|
* @returns An array of SVG graphics elements representing the host elements.
|
|
389
375
|
*/
|
|
390
376
|
const getHostElems = (container: HTMLElement): SVGGraphicsElement[] => {
|
|
391
|
-
const circuitSvg = container.querySelector("svg
|
|
377
|
+
const circuitSvg = container.querySelector("svg.qviz");
|
|
392
378
|
return circuitSvg != null
|
|
393
379
|
? Array.from(
|
|
394
380
|
circuitSvg.querySelectorAll<SVGGraphicsElement>(
|
|
@@ -405,7 +391,7 @@ const getHostElems = (container: HTMLElement): SVGGraphicsElement[] => {
|
|
|
405
391
|
* @returns An array of SVG graphics elements representing the gate elements.
|
|
406
392
|
*/
|
|
407
393
|
const getGateElems = (container: HTMLElement): SVGGraphicsElement[] => {
|
|
408
|
-
const circuitSvg = container.querySelector("svg
|
|
394
|
+
const circuitSvg = container.querySelector("svg.qviz");
|
|
409
395
|
return circuitSvg != null
|
|
410
396
|
? Array.from(circuitSvg.querySelectorAll<SVGGraphicsElement>(".gate"))
|
|
411
397
|
: [];
|
|
@@ -418,7 +404,7 @@ const getGateElems = (container: HTMLElement): SVGGraphicsElement[] => {
|
|
|
418
404
|
* @returns An array of SVGTextElement representing the qubit labels.
|
|
419
405
|
*/
|
|
420
406
|
const getQubitLabelElems = (container: HTMLElement): SVGTextElement[] => {
|
|
421
|
-
const circuitSvg = container.querySelector("svg
|
|
407
|
+
const circuitSvg = container.querySelector("svg.qviz");
|
|
422
408
|
if (!circuitSvg) return [];
|
|
423
409
|
const labelGroup = circuitSvg.querySelector("g.qubit-input-states");
|
|
424
410
|
if (!labelGroup) return [];
|
|
@@ -440,7 +426,6 @@ const mathChars = {
|
|
|
440
426
|
|
|
441
427
|
export {
|
|
442
428
|
deepEqual,
|
|
443
|
-
createUUID,
|
|
444
429
|
getGateWidth,
|
|
445
430
|
getChildTargets,
|
|
446
431
|
locationStringToIndexes,
|
package/ux/circuit.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
3
|
|
|
4
|
-
import * as qviz from "./circuit-vis";
|
|
4
|
+
import * as qviz from "./circuit-vis/index.js";
|
|
5
5
|
import { useEffect, useRef, useState } from "preact/hooks";
|
|
6
6
|
import { CircuitProps } from "./data.js";
|
|
7
7
|
import { Spinner } from "./spinner.js";
|
|
8
|
-
import { toCircuitGroup } from "./circuit-vis/circuit";
|
|
8
|
+
import { toCircuitGroup } from "./circuit-vis/circuit.js";
|
|
9
9
|
|
|
10
10
|
// For perf reasons we set a limit on how many gates/qubits
|
|
11
11
|
// we attempt to render. This is still a lot higher than a human would
|
package/ux/data.ts
CHANGED
package/ux/histogram.tsx
CHANGED
|
@@ -200,7 +200,7 @@ export function Histogram(props: {
|
|
|
200
200
|
const svgElem = e.currentTarget as SVGSVGElement;
|
|
201
201
|
|
|
202
202
|
// Below gets the mouse location in the svg element coordinates. This stays
|
|
203
|
-
// consistent while the scroll is
|
|
203
|
+
// consistent while the scroll is occurring (i.e. it is the point the mouse
|
|
204
204
|
// was at when scrolling started).
|
|
205
205
|
const mousePoint = new DOMPoint(e.clientX, e.clientY).matrixTransform(
|
|
206
206
|
svgElem.getScreenCTM()?.inverse(),
|
|
@@ -211,7 +211,7 @@ export function Histogram(props: {
|
|
|
211
211
|
that location on the screen. That means adjusting the scroll offset.
|
|
212
212
|
|
|
213
213
|
SVG translation is used to pan left and right, but zooming is done manually (making the
|
|
214
|
-
bars wider or thinner) to keep the fonts from getting
|
|
214
|
+
bars wider or thinner) to keep the fonts from getting stretched, which occurs with scaling.
|
|
215
215
|
|
|
216
216
|
deltaX and deltaY do not accumulate across events, they are a new delta each time.
|
|
217
217
|
*/
|
package/ux/qsharp-ux.css
CHANGED
|
@@ -675,7 +675,7 @@ modern-normalize (see https://mattbrictson.com/blog/css-normalize-and-reset for
|
|
|
675
675
|
padding: 4px;
|
|
676
676
|
}
|
|
677
677
|
|
|
678
|
-
/* This rule adds the little
|
|
678
|
+
/* This rule adds the little triangle pointer at the top */
|
|
679
679
|
.qs-scatterChart-tooltip::after,
|
|
680
680
|
.qs-scatterChart-selectedInfo::after {
|
|
681
681
|
content: "";
|
package/ux/scatterChart.tsx
CHANGED
|
@@ -179,7 +179,7 @@ export function ScatterChart(props: {
|
|
|
179
179
|
}
|
|
180
180
|
});
|
|
181
181
|
|
|
182
|
-
// The mouse events (over, out, and click) bubble, so put the
|
|
182
|
+
// The mouse events (over, out, and click) bubble, so put the handlers on the
|
|
183
183
|
// SVG element and check the target element in the handler.
|
|
184
184
|
return (
|
|
185
185
|
<div style="position: relative">
|
package/ux/tsconfig.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
-
"
|
|
3
|
+
"outDir": "../dist",
|
|
4
|
+
"declaration": true,
|
|
5
|
+
"sourceMap": true,
|
|
6
|
+
"module": "nodenext",
|
|
7
|
+
"moduleResolution": "nodenext",
|
|
4
8
|
"target": "ES2020",
|
|
5
|
-
"noEmit": true,
|
|
6
9
|
"lib": ["DOM", "ES2020"],
|
|
7
10
|
"strict": true /* enable all strict type-checking options */,
|
|
8
11
|
"jsx": "react-jsx",
|