qsharp-lang 1.25.2-dev → 1.25.3-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +1 -1
- package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
- package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/LeastFrequentlyUsed.md +1 -1
- package/docs/Std.ResourceEstimation/LeastRecentlyUsed.md +1 -1
- 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 +1 -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 +1 -1
- package/docs/Std.TableLookup/index.md +1 -1
- package/docs/index.md +1 -1
- package/lib/nodejs/qsc_wasm.cjs +2 -2
- package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
- package/lib/web/qsc_wasm.js +2 -2
- package/lib/web/qsc_wasm_bg.wasm +0 -0
- package/package.json +1 -1
- package/ux/atoms/index.css +26 -71
- package/ux/atoms/layout.ts +215 -49
- package/ux/chem/index.tsx +10 -18
- package/ux/chem/style.css +2 -2
- package/ux/qdk-theme.css +18 -1
- package/ux/qsharp-ux.css +0 -174
package/ux/atoms/layout.ts
CHANGED
|
@@ -4,17 +4,59 @@
|
|
|
4
4
|
import { appendChildren, createSvgElements, setAttributes } from "./utils.js";
|
|
5
5
|
|
|
6
6
|
// Zones will be rendered from top to bottom in array order
|
|
7
|
+
// Supports both old format (rows count) and new format (rowStart/rowEnd)
|
|
8
|
+
type ZoneDataInput = {
|
|
9
|
+
title: string;
|
|
10
|
+
kind: "register" | "interaction" | "measurement";
|
|
11
|
+
} & (
|
|
12
|
+
| { rows: number; rowStart?: never; rowEnd?: never }
|
|
13
|
+
| { rowStart: number; rowEnd: number; rows?: never }
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
// Normalized internal format always uses rowStart/rowEnd
|
|
7
17
|
type ZoneData = {
|
|
8
18
|
title: string;
|
|
9
|
-
|
|
19
|
+
rowStart: number;
|
|
20
|
+
rowEnd: number;
|
|
10
21
|
kind: "register" | "interaction" | "measurement";
|
|
11
22
|
};
|
|
12
23
|
|
|
13
24
|
export type ZoneLayout = {
|
|
14
25
|
cols: number;
|
|
15
|
-
zones:
|
|
26
|
+
zones: ZoneDataInput[];
|
|
27
|
+
// The instructions may assume certain columns are missing, but we don't render that visually.
|
|
28
|
+
// e.g. if `skipCols: [0,9]` was provided, then a `move(0,1)` would actually move to visual column 0,
|
|
29
|
+
// and a `move(1,10)` would move to visual column 8.
|
|
30
|
+
skipCols?: number[];
|
|
16
31
|
};
|
|
17
32
|
|
|
33
|
+
// Normalize zone data to always use rowStart/rowEnd format
|
|
34
|
+
function normalizeZones(zones: ZoneDataInput[]): ZoneData[] {
|
|
35
|
+
let nextRowStart = 0;
|
|
36
|
+
return zones.map((zone) => {
|
|
37
|
+
if ("rowStart" in zone && zone.rowStart !== undefined) {
|
|
38
|
+
// New format with explicit rowStart/rowEnd
|
|
39
|
+
return {
|
|
40
|
+
title: zone.title,
|
|
41
|
+
rowStart: zone.rowStart,
|
|
42
|
+
rowEnd: zone.rowEnd,
|
|
43
|
+
kind: zone.kind,
|
|
44
|
+
};
|
|
45
|
+
} else {
|
|
46
|
+
// Old format with rows count - convert to rowStart/rowEnd
|
|
47
|
+
const rowStart = nextRowStart;
|
|
48
|
+
const rowEnd = nextRowStart + zone.rows - 1;
|
|
49
|
+
nextRowStart = rowEnd + 1;
|
|
50
|
+
return {
|
|
51
|
+
title: zone.title,
|
|
52
|
+
rowStart,
|
|
53
|
+
rowEnd,
|
|
54
|
+
kind: zone.kind,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
18
60
|
export type TraceData = {
|
|
19
61
|
metadata: any;
|
|
20
62
|
qubits: Array<[number, number]>;
|
|
@@ -51,25 +93,40 @@ export function fillQubitLocations(
|
|
|
51
93
|
layout: ZoneLayout,
|
|
52
94
|
): Array<[number, number]> {
|
|
53
95
|
const qubits: Array<[number, number]> = [];
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
96
|
+
const normalizedZones = normalizeZones(layout.zones);
|
|
97
|
+
normalizedZones.forEach((zone) => {
|
|
98
|
+
if (zone.kind === "register") {
|
|
99
|
+
for (let row = zone.rowStart; row <= zone.rowEnd; ++row) {
|
|
58
100
|
for (let col = 0; col < layout.cols; ++col) {
|
|
59
|
-
qubits.push([
|
|
101
|
+
qubits.push([row, col]);
|
|
60
102
|
}
|
|
61
103
|
}
|
|
62
|
-
++currRow;
|
|
63
104
|
}
|
|
64
105
|
});
|
|
65
106
|
|
|
66
107
|
return qubits;
|
|
67
108
|
}
|
|
68
109
|
|
|
69
|
-
|
|
110
|
+
// Maps an instruction column to a visual column by accounting for skipped columns.
|
|
111
|
+
// For each column in skipCols that is less than the instruction column, we subtract 1.
|
|
112
|
+
function mapColumn(col: number, skipCols?: number[]): number {
|
|
113
|
+
if (!skipCols || skipCols.length === 0) {
|
|
114
|
+
return col;
|
|
115
|
+
}
|
|
116
|
+
const skippedBefore = skipCols.filter((c) => c < col).length;
|
|
117
|
+
return col - skippedBefore;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function parseMove(
|
|
121
|
+
op: string,
|
|
122
|
+
skipCols?: number[],
|
|
123
|
+
): { qubit: number; to: Location } | undefined {
|
|
70
124
|
const match = op.match(/move\((\d+), (\d+)\) (\d+)/);
|
|
71
125
|
if (match) {
|
|
72
|
-
const to: Location = [
|
|
126
|
+
const to: Location = [
|
|
127
|
+
parseInt(match[1]),
|
|
128
|
+
mapColumn(parseInt(match[2]), skipCols),
|
|
129
|
+
];
|
|
73
130
|
return { qubit: parseInt(match[3]), to };
|
|
74
131
|
}
|
|
75
132
|
return undefined;
|
|
@@ -89,12 +146,39 @@ function parseGate(
|
|
|
89
146
|
}
|
|
90
147
|
}
|
|
91
148
|
|
|
149
|
+
function parseZoneOp(
|
|
150
|
+
op: string,
|
|
151
|
+
layout: ZoneLayout,
|
|
152
|
+
): { op: "zone_cz" | "zone_mresetz"; zoneIndex: number } | undefined {
|
|
153
|
+
// If we get a naked 'cz' or 'mresetz', treat it as a zone op for the first zone of the matching type
|
|
154
|
+
if (op === "cz") {
|
|
155
|
+
return {
|
|
156
|
+
op: "zone_cz",
|
|
157
|
+
zoneIndex: layout.zones.findIndex((z) => z.kind === "interaction"),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
if (op === "mresetz") {
|
|
161
|
+
return {
|
|
162
|
+
op: "zone_mresetz",
|
|
163
|
+
zoneIndex: layout.zones.findIndex((z) => z.kind === "measurement"),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
const match = op.match(/^(zone_cz|zone_mresetz)\s+(\d+)$/);
|
|
167
|
+
if (match) {
|
|
168
|
+
return {
|
|
169
|
+
op: match[1] as "zone_cz" | "zone_mresetz",
|
|
170
|
+
zoneIndex: parseInt(match[2]),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
|
|
92
176
|
/*
|
|
93
177
|
We want to build up a cache of the qubit location at each 'n' steps so that scrubbing is fast.
|
|
94
178
|
Storing for each step is too large for the number of steps we want to handle. Also, the building
|
|
95
179
|
of the cache can take a long time, so we want to chunk it up to avoid blocking the UI thread.
|
|
96
180
|
*/
|
|
97
|
-
function TraceToGetLayoutFn(trace: TraceData) {
|
|
181
|
+
function TraceToGetLayoutFn(trace: TraceData, skipCols?: number[]) {
|
|
98
182
|
const STEP_SIZE = 100; // How many steps between each cache entry
|
|
99
183
|
|
|
100
184
|
const cacheEntries = Math.ceil(trace.steps.length / STEP_SIZE);
|
|
@@ -116,7 +200,7 @@ function TraceToGetLayoutFn(trace: TraceData) {
|
|
|
116
200
|
}
|
|
117
201
|
// Extract the move operations in the prior step, to apply to the prior layout
|
|
118
202
|
const moves = trace.steps[stepIndex - 1].ops
|
|
119
|
-
.map(parseMove)
|
|
203
|
+
.map((op) => parseMove(op, skipCols))
|
|
120
204
|
.filter((x) => x != undefined);
|
|
121
205
|
|
|
122
206
|
// Then apply them to the layout
|
|
@@ -221,7 +305,9 @@ export class Layout {
|
|
|
221
305
|
height: number;
|
|
222
306
|
scale: number = initialScale;
|
|
223
307
|
qubits: Location[];
|
|
224
|
-
|
|
308
|
+
rowOffsetMap: Map<number, number>; // Maps absolute row numbers to visual Y offsets
|
|
309
|
+
normalizedZones: ZoneData[];
|
|
310
|
+
effectiveCols: number; // Visual column count after accounting for skipCols
|
|
225
311
|
currentStep = 0;
|
|
226
312
|
trackParent: SVGGElement;
|
|
227
313
|
activeGates: SVGElement[] = [];
|
|
@@ -237,9 +323,15 @@ export class Layout {
|
|
|
237
323
|
) {
|
|
238
324
|
if (!trace.qubits?.length) {
|
|
239
325
|
trace.qubits = fillQubitLocations(layout);
|
|
326
|
+
} else if (layout.skipCols?.length) {
|
|
327
|
+
// Map the initial qubit column positions if skipCols is provided
|
|
328
|
+
trace.qubits = trace.qubits.map(([row, col]) => [
|
|
329
|
+
row,
|
|
330
|
+
mapColumn(col, layout.skipCols),
|
|
331
|
+
]);
|
|
240
332
|
}
|
|
241
333
|
this.trace = trace;
|
|
242
|
-
this.getStepLayout = TraceToGetLayoutFn(trace);
|
|
334
|
+
this.getStepLayout = TraceToGetLayoutFn(trace, layout.skipCols);
|
|
243
335
|
|
|
244
336
|
this.qubits = structuredClone(trace.qubits);
|
|
245
337
|
|
|
@@ -248,11 +340,20 @@ export class Layout {
|
|
|
248
340
|
"svg",
|
|
249
341
|
);
|
|
250
342
|
|
|
251
|
-
|
|
343
|
+
// Normalize zones to always use rowStart/rowEnd format
|
|
344
|
+
this.normalizedZones = normalizeZones(layout.zones);
|
|
345
|
+
|
|
346
|
+
// Calculate effective columns (visual count after skipping)
|
|
347
|
+
this.effectiveCols = layout.cols - (layout.skipCols?.length ?? 0);
|
|
348
|
+
|
|
349
|
+
const totalRows = this.normalizedZones.reduce(
|
|
350
|
+
(prev, curr) => prev + (curr.rowEnd - curr.rowStart + 1),
|
|
351
|
+
0,
|
|
352
|
+
);
|
|
252
353
|
|
|
253
354
|
this.height =
|
|
254
355
|
totalRows * qubitSize + zoneSpacing * (layout.zones.length + 1);
|
|
255
|
-
this.width =
|
|
356
|
+
this.width = this.effectiveCols * qubitSize + colPadding;
|
|
256
357
|
|
|
257
358
|
setAttributes(this.container, {
|
|
258
359
|
viewBox: `-5 0 ${this.width} ${this.height}`,
|
|
@@ -261,21 +362,20 @@ export class Layout {
|
|
|
261
362
|
});
|
|
262
363
|
|
|
263
364
|
// Loop through the zones, calculating the row offsets, and rendering the zones
|
|
264
|
-
|
|
365
|
+
// Maps absolute row numbers to visual Y offsets
|
|
366
|
+
this.rowOffsetMap = new Map();
|
|
265
367
|
let nextOffset = zoneSpacing;
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
this.rowOffset.push(nextOffset);
|
|
368
|
+
this.normalizedZones.forEach((zone, index) => {
|
|
369
|
+
this.renderZone(index, nextOffset);
|
|
370
|
+
for (let row = zone.rowStart; row <= zone.rowEnd; ++row) {
|
|
371
|
+
this.rowOffsetMap.set(row, nextOffset);
|
|
271
372
|
nextOffset += qubitSize;
|
|
272
|
-
++nextRowNum;
|
|
273
373
|
}
|
|
274
374
|
nextOffset += zoneSpacing; // Add spacing after each zone
|
|
275
375
|
});
|
|
276
376
|
|
|
277
377
|
const colNumOffset = nextOffset - 8;
|
|
278
|
-
this.renderColNums(
|
|
378
|
+
this.renderColNums(this.effectiveCols, colNumOffset);
|
|
279
379
|
|
|
280
380
|
// Put the track parent before the qubits, so the qubits render on top
|
|
281
381
|
this.trackParent = createSvgElements("g")[0] as SVGGElement;
|
|
@@ -319,8 +419,9 @@ export class Layout {
|
|
|
319
419
|
return this.trace.steps[step].ops;
|
|
320
420
|
}
|
|
321
421
|
|
|
322
|
-
private renderZone(zoneIndex: number, offset: number
|
|
323
|
-
const zoneData = this.
|
|
422
|
+
private renderZone(zoneIndex: number, offset: number) {
|
|
423
|
+
const zoneData = this.normalizedZones[zoneIndex];
|
|
424
|
+
const zoneRows = zoneData.rowEnd - zoneData.rowStart + 1;
|
|
324
425
|
const g = createSvgElements("g")[0];
|
|
325
426
|
setAttributes(g, {
|
|
326
427
|
transform: `translate(0 ${offset})`,
|
|
@@ -333,32 +434,32 @@ export class Layout {
|
|
|
333
434
|
setAttributes(rect, {
|
|
334
435
|
x: "0",
|
|
335
436
|
y: "0",
|
|
336
|
-
width: `${this.
|
|
337
|
-
height: `${
|
|
437
|
+
width: `${this.effectiveCols * qubitSize}`,
|
|
438
|
+
height: `${zoneRows * qubitSize}`,
|
|
338
439
|
rx: `${zoneBoxCornerRadius}`,
|
|
339
440
|
});
|
|
340
441
|
appendChildren(g, [rect]);
|
|
341
442
|
|
|
342
443
|
// Draw the lines between the rows
|
|
343
|
-
for (let i = 1; i <
|
|
444
|
+
for (let i = 1; i < zoneRows; i++) {
|
|
344
445
|
const path = createSvgElements("path")[0];
|
|
345
446
|
setAttributes(path, {
|
|
346
|
-
d: `M 0,${i * qubitSize} h${this.
|
|
447
|
+
d: `M 0,${i * qubitSize} h${this.effectiveCols * qubitSize}`,
|
|
347
448
|
});
|
|
348
449
|
appendChildren(g, [path]);
|
|
349
450
|
}
|
|
350
451
|
// Draw the lines between the columns
|
|
351
|
-
for (let i = 1; i < this.
|
|
452
|
+
for (let i = 1; i < this.effectiveCols; i++) {
|
|
352
453
|
const path = createSvgElements("path")[0];
|
|
353
454
|
setAttributes(path, {
|
|
354
|
-
d: `M ${i * qubitSize},0 v${
|
|
455
|
+
d: `M ${i * qubitSize},0 v${zoneRows * qubitSize}`,
|
|
355
456
|
});
|
|
356
457
|
appendChildren(g, [path]);
|
|
357
458
|
}
|
|
358
459
|
} else {
|
|
359
460
|
// For the interaction zone draw each doublon
|
|
360
|
-
for (let row = 0; row <
|
|
361
|
-
for (let i = 0; i < this.
|
|
461
|
+
for (let row = 0; row < zoneRows; ++row) {
|
|
462
|
+
for (let i = 0; i < this.effectiveCols; i += 2) {
|
|
362
463
|
const rect = createSvgElements("rect")[0];
|
|
363
464
|
setAttributes(rect, {
|
|
364
465
|
x: `${i * qubitSize}`,
|
|
@@ -376,12 +477,12 @@ export class Layout {
|
|
|
376
477
|
}
|
|
377
478
|
}
|
|
378
479
|
|
|
379
|
-
// Number the rows
|
|
380
|
-
for (let i = 0; i <
|
|
381
|
-
const rowNum =
|
|
480
|
+
// Number the rows using the absolute row numbers from rowStart to rowEnd
|
|
481
|
+
for (let i = 0; i < zoneRows; ++i) {
|
|
482
|
+
const rowNum = zoneData.rowStart + i;
|
|
382
483
|
const label = createSvgElements("text")[0];
|
|
383
484
|
setAttributes(label, {
|
|
384
|
-
x: `${this.
|
|
485
|
+
x: `${this.effectiveCols * qubitSize + 5}`,
|
|
385
486
|
y: `${i * qubitSize + 5}`,
|
|
386
487
|
class: "qs-atoms-label",
|
|
387
488
|
});
|
|
@@ -435,16 +536,20 @@ export class Layout {
|
|
|
435
536
|
setAttributes(g, {
|
|
436
537
|
transform: `translate(0 ${offset})`,
|
|
437
538
|
});
|
|
438
|
-
// Number the columns
|
|
439
|
-
|
|
539
|
+
// Number the columns, showing original column numbers (skipping those in skipCols)
|
|
540
|
+
const skipCols = this.layout.skipCols ?? [];
|
|
541
|
+
let visualCol = 0;
|
|
542
|
+
for (let origCol = 0; visualCol < cols; ++origCol) {
|
|
543
|
+
if (skipCols.includes(origCol)) continue;
|
|
440
544
|
const label = createSvgElements("text")[0];
|
|
441
545
|
setAttributes(label, {
|
|
442
|
-
x: `${
|
|
546
|
+
x: `${visualCol * qubitSize + 5}`,
|
|
443
547
|
y: `5`,
|
|
444
548
|
class: "qs-atoms-label",
|
|
445
549
|
});
|
|
446
|
-
label.textContent = `${
|
|
550
|
+
label.textContent = `${origCol}`;
|
|
447
551
|
appendChildren(g, [label]);
|
|
552
|
+
++visualCol;
|
|
448
553
|
}
|
|
449
554
|
appendChildren(this.container, [g]);
|
|
450
555
|
}
|
|
@@ -588,7 +693,27 @@ export class Layout {
|
|
|
588
693
|
}
|
|
589
694
|
|
|
590
695
|
getQubitRowOffset(row: number) {
|
|
591
|
-
|
|
696
|
+
const offset = this.rowOffsetMap.get(row);
|
|
697
|
+
if (offset === undefined) {
|
|
698
|
+
throw `Row ${row} not found in layout`;
|
|
699
|
+
}
|
|
700
|
+
return offset;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
// Returns array of qubit indices that are currently in the specified zone
|
|
704
|
+
getQubitsInZone(zoneIndex: number): number[] {
|
|
705
|
+
const zone = this.normalizedZones[zoneIndex];
|
|
706
|
+
if (!zone) {
|
|
707
|
+
throw `Zone ${zoneIndex} not found`;
|
|
708
|
+
}
|
|
709
|
+
const qubitsInZone: number[] = [];
|
|
710
|
+
for (let i = 0; i < this.qubits.length; i++) {
|
|
711
|
+
const [row] = this.qubits[i];
|
|
712
|
+
if (row >= zone.rowStart && row <= zone.rowEnd) {
|
|
713
|
+
qubitsInZone.push(i);
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
return qubitsInZone;
|
|
592
717
|
}
|
|
593
718
|
|
|
594
719
|
getLocationCenter(row: number, col: number): [number, number] {
|
|
@@ -645,7 +770,7 @@ export class Layout {
|
|
|
645
770
|
const ops = this.getOpsAtStep(qubitLocationIndex);
|
|
646
771
|
let trailId = 0;
|
|
647
772
|
ops.forEach((op) => {
|
|
648
|
-
const move = parseMove(op);
|
|
773
|
+
const move = parseMove(op, this.layout.skipCols);
|
|
649
774
|
if (move) {
|
|
650
775
|
// Apply the move animation
|
|
651
776
|
const [oldX, oldY] = this.getQubitCenter(move.qubit);
|
|
@@ -718,11 +843,52 @@ export class Layout {
|
|
|
718
843
|
});
|
|
719
844
|
// TODO: Check if you can/should cancel when scrubbing
|
|
720
845
|
} else {
|
|
721
|
-
//
|
|
722
|
-
const
|
|
723
|
-
if (
|
|
724
|
-
|
|
725
|
-
|
|
846
|
+
// Check if it's a zone operation
|
|
847
|
+
const zoneOp = parseZoneOp(op, this.layout);
|
|
848
|
+
if (zoneOp) {
|
|
849
|
+
const qubitsInZone = this.getQubitsInZone(zoneOp.zoneIndex);
|
|
850
|
+
if (zoneOp.op === "zone_cz") {
|
|
851
|
+
// For zone_cz, render CZ gates on pairs of qubits in doublons
|
|
852
|
+
// Group qubits by their row, then pair adjacent columns
|
|
853
|
+
const qubitsByRow = new Map<number, number[]>();
|
|
854
|
+
for (const qubitIdx of qubitsInZone) {
|
|
855
|
+
const [row] = this.qubits[qubitIdx];
|
|
856
|
+
if (!qubitsByRow.has(row)) {
|
|
857
|
+
qubitsByRow.set(row, []);
|
|
858
|
+
}
|
|
859
|
+
qubitsByRow.get(row)!.push(qubitIdx);
|
|
860
|
+
}
|
|
861
|
+
// For each row, find pairs in doublons (col 0-1, 2-3, 4-5, etc.)
|
|
862
|
+
for (const [, qubitsInRow] of qubitsByRow) {
|
|
863
|
+
// Sort by column
|
|
864
|
+
qubitsInRow.sort(
|
|
865
|
+
(a, b) => this.qubits[a][1] - this.qubits[b][1],
|
|
866
|
+
);
|
|
867
|
+
for (let i = 0; i < qubitsInRow.length - 1; i++) {
|
|
868
|
+
const q1 = qubitsInRow[i];
|
|
869
|
+
const q2 = qubitsInRow[i + 1];
|
|
870
|
+
const col1 = this.qubits[q1][1];
|
|
871
|
+
const col2 = this.qubits[q2][1];
|
|
872
|
+
// Check if they're in the same doublon (even-odd pair)
|
|
873
|
+
if (Math.floor(col1 / 2) === Math.floor(col2 / 2)) {
|
|
874
|
+
this.renderGateOnQubit(q1, "CZ");
|
|
875
|
+
i++; // Skip the next qubit since we've paired it
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
} else if (zoneOp.op === "zone_mresetz") {
|
|
880
|
+
// For zone_mresetz, render MZ gate on all qubits in the zone
|
|
881
|
+
for (const qubitIdx of qubitsInZone) {
|
|
882
|
+
this.renderGateOnQubit(qubitIdx, "MZ");
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
} else {
|
|
886
|
+
// Wasn't a move or zone op, so render the gate
|
|
887
|
+
const gate = parseGate(op);
|
|
888
|
+
if (!gate) throw `Invalid gate: ${op}`;
|
|
889
|
+
const arg = gate.arg ? gate.arg.substring(0, 4) : undefined;
|
|
890
|
+
this.renderGateOnQubit(gate.qubit, gate.gate.toUpperCase(), arg);
|
|
891
|
+
}
|
|
726
892
|
}
|
|
727
893
|
});
|
|
728
894
|
}
|
package/ux/chem/index.tsx
CHANGED
|
@@ -5,8 +5,7 @@ import { useRef, useEffect, useState } from "preact/hooks";
|
|
|
5
5
|
import { createViewer, GLViewer } from "3dmol";
|
|
6
6
|
|
|
7
7
|
import "./style.css";
|
|
8
|
-
|
|
9
|
-
const themeAttribute = "data-vscode-theme-kind";
|
|
8
|
+
import { detectThemeChange } from "../themeObserver.js";
|
|
10
9
|
|
|
11
10
|
export function MoleculeViewer(props: {
|
|
12
11
|
moleculeData: string;
|
|
@@ -29,7 +28,7 @@ export function MoleculeViewer(props: {
|
|
|
29
28
|
viewer.current ??
|
|
30
29
|
createViewer(viewerRef.current, {
|
|
31
30
|
backgroundColor: getComputedStyle(document.body).getPropertyValue(
|
|
32
|
-
"--
|
|
31
|
+
"--qdk-host-background",
|
|
33
32
|
),
|
|
34
33
|
});
|
|
35
34
|
try {
|
|
@@ -44,22 +43,15 @@ export function MoleculeViewer(props: {
|
|
|
44
43
|
viewer.current.zoomTo();
|
|
45
44
|
}
|
|
46
45
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (viewer.current) {
|
|
55
|
-
viewer.current.setBackgroundColor(newBackgroundColor, 1.0);
|
|
56
|
-
viewer.current.render();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
46
|
+
detectThemeChange(document.body, () => {
|
|
47
|
+
const newBackgroundColor = getComputedStyle(
|
|
48
|
+
document.body,
|
|
49
|
+
).getPropertyValue("--qdk-host-background");
|
|
50
|
+
if (viewer.current) {
|
|
51
|
+
viewer.current.setBackgroundColor(newBackgroundColor, 1.0);
|
|
52
|
+
viewer.current.render();
|
|
59
53
|
}
|
|
60
|
-
};
|
|
61
|
-
const observer = new MutationObserver(callback);
|
|
62
|
-
observer.observe(document.body, { attributeFilter: [themeAttribute] });
|
|
54
|
+
});
|
|
63
55
|
}, [props.moleculeData]);
|
|
64
56
|
|
|
65
57
|
useEffect(() => {
|
package/ux/chem/style.css
CHANGED
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
|
|
48
48
|
.view-option select,
|
|
49
49
|
.view-option input[type="range"] {
|
|
50
|
-
color: var(--
|
|
51
|
-
background-color: var(--
|
|
50
|
+
color: var(--qdk-host-foreground);
|
|
51
|
+
background-color: var(--qdk-host-background);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
#cube-dropdown-container {
|
package/ux/qdk-theme.css
CHANGED
|
@@ -68,6 +68,7 @@ body[data-jp-theme-light="true"],
|
|
|
68
68
|
body[data-vscode-theme-kind="vscode-light"],
|
|
69
69
|
body[data-vscode-theme-kind="vscode-high-contrast-light"] {
|
|
70
70
|
/* Set any non-theme specific values here only */
|
|
71
|
+
--qdk-font-family: system-ui, "Segoe UI", "Roboto", sans-serif;
|
|
71
72
|
--qdk-font-family-monospace: var(
|
|
72
73
|
--vscode-editor-font-family,
|
|
73
74
|
"Consolas",
|
|
@@ -88,6 +89,7 @@ body[data-vscode-theme-kind="vscode-high-contrast-light"] {
|
|
|
88
89
|
var(--jp-widgets-color, #222)
|
|
89
90
|
);
|
|
90
91
|
--qdk-background-accent: #ddd;
|
|
92
|
+
--qdk-foreground-muted: #aaa;
|
|
91
93
|
|
|
92
94
|
/* Used for text that must stand out on various backgrounds */
|
|
93
95
|
--qdk-text-high-contrast: #000;
|
|
@@ -96,7 +98,7 @@ body[data-vscode-theme-kind="vscode-high-contrast-light"] {
|
|
|
96
98
|
--qdk-widget-outline: #ccc;
|
|
97
99
|
|
|
98
100
|
/* Use for menus */
|
|
99
|
-
--qdk-menu-fill: #
|
|
101
|
+
--qdk-menu-fill: #c4dbeb;
|
|
100
102
|
--qdk-menu-fill-hover: #9cf;
|
|
101
103
|
--qdk-menu-fill-selected: #7af;
|
|
102
104
|
|
|
@@ -105,6 +107,13 @@ body[data-vscode-theme-kind="vscode-high-contrast-light"] {
|
|
|
105
107
|
--qdk-shape-fill-selected: #b5c5f2;
|
|
106
108
|
--qdk-shape-stroke-selected: #587ddd;
|
|
107
109
|
--qdk-shape-stroke-hover: #6b6b6b;
|
|
110
|
+
|
|
111
|
+
--qdk-gate-generic: #66d;
|
|
112
|
+
--qdk-gate-pair: #eae753;
|
|
113
|
+
--qdk-gate-measure: #822;
|
|
114
|
+
--qdk-gate-reset: #282;
|
|
115
|
+
--qdk-atom-fill: #0078d4;
|
|
116
|
+
--qdk-atom-trail: #fa0;
|
|
108
117
|
}
|
|
109
118
|
|
|
110
119
|
/* Set these variables on the body element if attributes indicate a dark theme choice */
|
|
@@ -122,6 +131,7 @@ body[data-vscode-theme-kind="vscode-high-contrast"] {
|
|
|
122
131
|
var(--jp-widgets-color, #eee)
|
|
123
132
|
);
|
|
124
133
|
--qdk-background-accent: #333;
|
|
134
|
+
--qdk-foreground-muted: #666;
|
|
125
135
|
|
|
126
136
|
/* Used for text that must stand out on various backgrounds */
|
|
127
137
|
--qdk-text-high-contrast: #fff;
|
|
@@ -139,4 +149,11 @@ body[data-vscode-theme-kind="vscode-high-contrast"] {
|
|
|
139
149
|
--qdk-shape-fill-selected: #ffd54f;
|
|
140
150
|
--qdk-shape-stroke-selected: #ffecb3;
|
|
141
151
|
--qdk-shape-stroke-hover: #c5c5c5;
|
|
152
|
+
|
|
153
|
+
--qdk-gate-generic: #ccf;
|
|
154
|
+
--qdk-gate-pair: #b91;
|
|
155
|
+
--qdk-gate-measure: #e88;
|
|
156
|
+
--qdk-gate-reset: #8e8;
|
|
157
|
+
--qdk-atom-fill: #9df;
|
|
158
|
+
--qdk-atom-trail: #fa0;
|
|
142
159
|
}
|