pxt-microbit 6.1.10 → 7.0.2

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.
@@ -711,6 +711,349 @@ var pxsim;
711
711
  loops.forever = pxsim.thread.forever;
712
712
  })(loops = pxsim.loops || (pxsim.loops = {}));
713
713
  })(pxsim || (pxsim = {}));
714
+ var pxsim;
715
+ (function (pxsim) {
716
+ var browserEvents;
717
+ (function (browserEvents) {
718
+ function mouseX() {
719
+ return pxsim.board().mouseState.mouseX();
720
+ }
721
+ browserEvents.mouseX = mouseX;
722
+ function mouseY() {
723
+ return pxsim.board().mouseState.mouseY();
724
+ }
725
+ browserEvents.mouseY = mouseY;
726
+ function wheelDx() {
727
+ return pxsim.board().mouseState.wheelDx();
728
+ }
729
+ browserEvents.wheelDx = wheelDx;
730
+ function wheelDy() {
731
+ return pxsim.board().mouseState.wheelDy();
732
+ }
733
+ browserEvents.wheelDy = wheelDy;
734
+ function wheelDz() {
735
+ return pxsim.board().mouseState.wheelDz();
736
+ }
737
+ browserEvents.wheelDz = wheelDz;
738
+ })(browserEvents = pxsim.browserEvents || (pxsim.browserEvents = {}));
739
+ })(pxsim || (pxsim = {}));
740
+ var pxsim;
741
+ (function (pxsim) {
742
+ var browserEvents;
743
+ (function (browserEvents) {
744
+ let Key;
745
+ (function (Key) {
746
+ Key[Key["Zero"] = 48] = "Zero";
747
+ Key[Key["One"] = 49] = "One";
748
+ Key[Key["Two"] = 50] = "Two";
749
+ Key[Key["Three"] = 51] = "Three";
750
+ Key[Key["Four"] = 52] = "Four";
751
+ Key[Key["Five"] = 53] = "Five";
752
+ Key[Key["Six"] = 54] = "Six";
753
+ Key[Key["Seven"] = 55] = "Seven";
754
+ Key[Key["Eight"] = 56] = "Eight";
755
+ Key[Key["Nine"] = 57] = "Nine";
756
+ Key[Key["BackTick"] = 192] = "BackTick";
757
+ Key[Key["Hyphen"] = 189] = "Hyphen";
758
+ Key[Key["Equals"] = 187] = "Equals";
759
+ Key[Key["Q"] = 81] = "Q";
760
+ Key[Key["W"] = 87] = "W";
761
+ Key[Key["E"] = 69] = "E";
762
+ Key[Key["R"] = 82] = "R";
763
+ Key[Key["T"] = 84] = "T";
764
+ Key[Key["Y"] = 89] = "Y";
765
+ Key[Key["U"] = 85] = "U";
766
+ Key[Key["I"] = 73] = "I";
767
+ Key[Key["O"] = 79] = "O";
768
+ Key[Key["P"] = 80] = "P";
769
+ Key[Key["OpenBracket"] = 219] = "OpenBracket";
770
+ Key[Key["CloseBracket"] = 221] = "CloseBracket";
771
+ Key[Key["BackSlash"] = 220] = "BackSlash";
772
+ Key[Key["A"] = 65] = "A";
773
+ Key[Key["S"] = 83] = "S";
774
+ Key[Key["D"] = 68] = "D";
775
+ Key[Key["F"] = 70] = "F";
776
+ Key[Key["G"] = 71] = "G";
777
+ Key[Key["H"] = 72] = "H";
778
+ Key[Key["Space"] = 32] = "Space";
779
+ Key[Key["PageUp"] = 33] = "PageUp";
780
+ Key[Key["J"] = 74] = "J";
781
+ Key[Key["K"] = 75] = "K";
782
+ Key[Key["L"] = 76] = "L";
783
+ Key[Key["SemiColon"] = 186] = "SemiColon";
784
+ Key[Key["Apostrophe"] = 222] = "Apostrophe";
785
+ Key[Key["Z"] = 90] = "Z";
786
+ Key[Key["X"] = 88] = "X";
787
+ Key[Key["C"] = 67] = "C";
788
+ Key[Key["V"] = 86] = "V";
789
+ Key[Key["B"] = 66] = "B";
790
+ Key[Key["N"] = 78] = "N";
791
+ Key[Key["M"] = 77] = "M";
792
+ Key[Key["Comma"] = 188] = "Comma";
793
+ Key[Key["Period"] = 190] = "Period";
794
+ Key[Key["ForwardSlash"] = 191] = "ForwardSlash";
795
+ Key[Key["Shift"] = 16] = "Shift";
796
+ Key[Key["Enter"] = 13] = "Enter";
797
+ Key[Key["CapsLock"] = 20] = "CapsLock";
798
+ Key[Key["Tab"] = 9] = "Tab";
799
+ Key[Key["Control"] = 17] = "Control";
800
+ Key[Key["Meta"] = 91] = "Meta";
801
+ Key[Key["Alt"] = 18] = "Alt";
802
+ Key[Key["ArrowUp"] = 38] = "ArrowUp";
803
+ Key[Key["ArrowDown"] = 40] = "ArrowDown";
804
+ Key[Key["ArrowLeft"] = 37] = "ArrowLeft";
805
+ Key[Key["ArrowRight"] = 39] = "ArrowRight";
806
+ Key[Key["PageDown"] = 34] = "PageDown";
807
+ Key[Key["End"] = 35] = "End";
808
+ Key[Key["Home"] = 36] = "Home";
809
+ })(Key = browserEvents.Key || (browserEvents.Key = {}));
810
+ function onKeyboardEvent(event, pressed) {
811
+ if (pressed) {
812
+ pxsim.board().bus.queue(6866, getValueForKey(event));
813
+ }
814
+ else {
815
+ pxsim.board().bus.queue(6867, getValueForKey(event));
816
+ }
817
+ }
818
+ browserEvents.onKeyboardEvent = onKeyboardEvent;
819
+ function getValueForKey(event) {
820
+ switch (event.key) {
821
+ case "0":
822
+ case ")":
823
+ return Key.Zero;
824
+ case "1":
825
+ case "!":
826
+ return Key.One;
827
+ case "2":
828
+ case "@":
829
+ return Key.Two;
830
+ case "3":
831
+ case "#":
832
+ return Key.Three;
833
+ case "4":
834
+ case "$":
835
+ return Key.Four;
836
+ case "5":
837
+ case "%":
838
+ return Key.Five;
839
+ case "6":
840
+ case "^":
841
+ return Key.Six;
842
+ case "7":
843
+ case "&":
844
+ return Key.Seven;
845
+ case "8":
846
+ case "*":
847
+ return Key.Eight;
848
+ case "9":
849
+ case "(":
850
+ return Key.Nine;
851
+ case "`":
852
+ case "~":
853
+ return Key.BackTick;
854
+ case "-":
855
+ case "_":
856
+ return Key.Hyphen;
857
+ case "=":
858
+ case "+":
859
+ return Key.Equals;
860
+ case "Q":
861
+ case "q":
862
+ return Key.Q;
863
+ case "W":
864
+ case "w":
865
+ return Key.W;
866
+ case "E":
867
+ case "e":
868
+ return Key.E;
869
+ case "R":
870
+ case "r":
871
+ return Key.R;
872
+ case "T":
873
+ case "t":
874
+ return Key.T;
875
+ case "Y":
876
+ case "y":
877
+ return Key.Y;
878
+ case "U":
879
+ case "u":
880
+ return Key.U;
881
+ case "I":
882
+ case "i":
883
+ return Key.I;
884
+ case "O":
885
+ case "o":
886
+ return Key.O;
887
+ case "P":
888
+ case "p":
889
+ return Key.P;
890
+ case "[":
891
+ case "{":
892
+ return Key.OpenBracket;
893
+ case "]":
894
+ case "}":
895
+ return Key.CloseBracket;
896
+ case "\\":
897
+ case "|":
898
+ return Key.BackSlash;
899
+ case "A":
900
+ case "a":
901
+ return Key.A;
902
+ case "S":
903
+ case "s":
904
+ return Key.S;
905
+ case "D":
906
+ case "d":
907
+ return Key.D;
908
+ case "F":
909
+ case "f":
910
+ return Key.F;
911
+ case "G":
912
+ case "g":
913
+ return Key.G;
914
+ case "H":
915
+ case "h":
916
+ return Key.H;
917
+ case " ":
918
+ return Key.Space;
919
+ case "PageUp":
920
+ return Key.PageUp;
921
+ case "J":
922
+ case "j":
923
+ return Key.J;
924
+ case "K":
925
+ case "k":
926
+ return Key.K;
927
+ case "L":
928
+ case "l":
929
+ return Key.L;
930
+ case ";":
931
+ case ":":
932
+ return Key.SemiColon;
933
+ case "'":
934
+ case "\"":
935
+ return Key.Apostrophe;
936
+ case "Z":
937
+ case "z":
938
+ return Key.Z;
939
+ case "X":
940
+ case "x":
941
+ return Key.X;
942
+ case "C":
943
+ case "c":
944
+ return Key.C;
945
+ case "V":
946
+ case "v":
947
+ return Key.V;
948
+ case "B":
949
+ case "b":
950
+ return Key.B;
951
+ case "N":
952
+ case "n":
953
+ return Key.N;
954
+ case "M":
955
+ case "m":
956
+ return Key.M;
957
+ case ",":
958
+ case "<":
959
+ return Key.Comma;
960
+ case ".":
961
+ case ">":
962
+ return Key.Period;
963
+ case "/":
964
+ case "?":
965
+ return Key.ForwardSlash;
966
+ case "Shift":
967
+ return Key.Shift;
968
+ case "Enter":
969
+ return Key.Enter;
970
+ case "CapsLock":
971
+ return Key.CapsLock;
972
+ case "Tab":
973
+ return Key.Tab;
974
+ case "Control":
975
+ return Key.Control;
976
+ case "Meta":
977
+ return Key.Meta;
978
+ case "Alt":
979
+ return Key.Alt;
980
+ case "ArrowUp":
981
+ return Key.ArrowUp;
982
+ case "ArrowDown":
983
+ return Key.ArrowDown;
984
+ case "ArrowLeft":
985
+ return Key.ArrowLeft;
986
+ case "ArrowRight":
987
+ return Key.ArrowRight;
988
+ case "PageDown":
989
+ return Key.PageDown;
990
+ case "End":
991
+ return Key.End;
992
+ case "Home":
993
+ return Key.Home;
994
+ default:
995
+ return 0;
996
+ }
997
+ }
998
+ browserEvents.getValueForKey = getValueForKey;
999
+ })(browserEvents = pxsim.browserEvents || (pxsim.browserEvents = {}));
1000
+ })(pxsim || (pxsim = {}));
1001
+ var pxsim;
1002
+ (function (pxsim) {
1003
+ var browserEvents;
1004
+ (function (browserEvents) {
1005
+ const THROTTLE_INTERVAL = 50;
1006
+ class MouseState {
1007
+ constructor() {
1008
+ this.onMove = pxsim.U.throttle(() => {
1009
+ pxsim.board().bus.queue(6859, 0);
1010
+ }, THROTTLE_INTERVAL, true);
1011
+ this.onWheel = pxsim.U.throttle(() => {
1012
+ pxsim.board().bus.queue(6865, 0);
1013
+ }, THROTTLE_INTERVAL, true);
1014
+ }
1015
+ onEvent(event, x, y) {
1016
+ this.x = x;
1017
+ this.y = y;
1018
+ const events = [
1019
+ "pointerdown",
1020
+ "pointerup",
1021
+ "pointermove",
1022
+ "pointerleave",
1023
+ "pointerenter",
1024
+ "pointercancel",
1025
+ "pointerover",
1026
+ "pointerout",
1027
+ ];
1028
+ // We add 1 to the button here because the left button is 0 and
1029
+ // that's used as a wildcard in our event bus
1030
+ pxsim.board().bus.queue(6857 + events.indexOf(event.type), (event.button || 0) + 1);
1031
+ }
1032
+ onWheelEvent(dx, dy, dz) {
1033
+ this.dx = dx;
1034
+ this.dy = dy;
1035
+ this.dz = dz;
1036
+ this.onWheel();
1037
+ }
1038
+ mouseX() {
1039
+ return this.x || 0;
1040
+ }
1041
+ mouseY() {
1042
+ return this.y || 0;
1043
+ }
1044
+ wheelDx() {
1045
+ return this.dx || 0;
1046
+ }
1047
+ wheelDy() {
1048
+ return this.dy || 0;
1049
+ }
1050
+ wheelDz() {
1051
+ return this.dz || 0;
1052
+ }
1053
+ }
1054
+ browserEvents.MouseState = MouseState;
1055
+ })(browserEvents = pxsim.browserEvents || (pxsim.browserEvents = {}));
1056
+ })(pxsim || (pxsim = {}));
714
1057
  /// <reference path="../../core/dal.d.ts"/>
715
1058
  var pxsim;
716
1059
  (function (pxsim) {
@@ -3179,6 +3522,7 @@ var pxsim;
3179
3522
  input.setLoudSoundThreshold = setLoudSoundThreshold;
3180
3523
  })(input = pxsim.input || (pxsim.input = {}));
3181
3524
  })(pxsim || (pxsim = {}));
3525
+ /// <reference path="../../core/sim/analogSensor.ts" />
3182
3526
  var pxsim;
3183
3527
  (function (pxsim) {
3184
3528
  class MicrophoneState extends pxsim.AnalogSensorState {
@@ -3792,7 +4136,9 @@ var pxsim;
3792
4136
  var ImageMethods;
3793
4137
  (function (ImageMethods) {
3794
4138
  function XX(x) { return (x << 16) >> 16; }
4139
+ ImageMethods.XX = XX;
3795
4140
  function YY(x) { return x >> 16; }
4141
+ ImageMethods.YY = YY;
3796
4142
  function width(img) { return img._width; }
3797
4143
  ImageMethods.width = width;
3798
4144
  function height(img) { return img._height; }
@@ -4236,57 +4582,58 @@ var pxsim;
4236
4582
  }
4237
4583
  ImageMethods.drawLine = drawLine;
4238
4584
  function drawIcon(img, icon, x, y, color) {
4239
- const img2 = icon.data;
4585
+ const src = icon.data;
4240
4586
  if (!pxsim.image.isValidImage(icon))
4241
4587
  return;
4242
- if (img2[1] != 1)
4588
+ if (src[1] != 1)
4243
4589
  return; // only mono
4244
- let w = pxsim.image.bufW(img2);
4245
- let h = pxsim.image.bufH(img2);
4246
- let byteH = pxsim.image.byteHeight(h, 1);
4590
+ let width = pxsim.image.bufW(src);
4591
+ let height = pxsim.image.bufH(src);
4592
+ let byteH = pxsim.image.byteHeight(height, 1);
4247
4593
  x |= 0;
4248
4594
  y |= 0;
4249
- const sh = img._height;
4250
- const sw = img._width;
4251
- if (x + w <= 0)
4595
+ const destHeight = img._height;
4596
+ const destWidth = img._width;
4597
+ if (x + width <= 0)
4252
4598
  return;
4253
- if (x >= sw)
4599
+ if (x >= destWidth)
4254
4600
  return;
4255
- if (y + h <= 0)
4601
+ if (y + height <= 0)
4256
4602
  return;
4257
- if (y >= sh)
4603
+ if (y >= destHeight)
4258
4604
  return;
4259
4605
  img.makeWritable();
4260
- let p = 8;
4606
+ let srcPointer = 8;
4261
4607
  color = img.color(color);
4262
4608
  const screen = img.data;
4263
- for (let i = 0; i < w; ++i) {
4264
- let xxx = x + i;
4265
- if (0 <= xxx && xxx < sw) {
4266
- let dst = xxx + y * sw;
4267
- let src = p;
4268
- let yy = y;
4269
- let end = Math.min(sh, h + y);
4609
+ for (let i = 0; i < width; ++i) {
4610
+ let destX = x + i;
4611
+ if (0 <= destX && destX < destWidth) {
4612
+ let destIndex = destX + y * destWidth;
4613
+ let srcIndex = srcPointer;
4614
+ let destY = y;
4615
+ let destEnd = Math.min(destHeight, height + y);
4270
4616
  if (y < 0) {
4271
- src += ((-y) >> 3);
4272
- yy += ((-y) >> 3) * 8;
4617
+ srcIndex += ((-y) >> 3);
4618
+ destY += ((-y) >> 3) * 8;
4619
+ destIndex += (destY - y) * destWidth;
4273
4620
  }
4274
4621
  let mask = 0x01;
4275
- let v = img2[src++];
4276
- while (yy < end) {
4277
- if (yy >= 0 && (v & mask)) {
4278
- screen[dst] = color;
4622
+ let srcByte = src[srcIndex++];
4623
+ while (destY < destEnd) {
4624
+ if (destY >= 0 && (srcByte & mask)) {
4625
+ screen[destIndex] = color;
4279
4626
  }
4280
4627
  mask <<= 1;
4281
4628
  if (mask == 0x100) {
4282
4629
  mask = 0x01;
4283
- v = img2[src++];
4630
+ srcByte = src[srcIndex++];
4284
4631
  }
4285
- dst += sw;
4286
- yy++;
4632
+ destIndex += destWidth;
4633
+ destY++;
4287
4634
  }
4288
4635
  }
4289
- p += byteH;
4636
+ srcPointer += byteH;
4290
4637
  }
4291
4638
  }
4292
4639
  ImageMethods.drawIcon = drawIcon;
@@ -5129,6 +5476,35 @@ var pxsim;
5129
5476
  settings._list = _list;
5130
5477
  })(settings = pxsim.settings || (pxsim.settings = {}));
5131
5478
  })(pxsim || (pxsim = {}));
5479
+ /// <reference path="../../screen/sim/image.ts" />
5480
+ var pxsim;
5481
+ (function (pxsim) {
5482
+ var ShaderMethods;
5483
+ (function (ShaderMethods) {
5484
+ function _mergeImage(dst, src, xy) {
5485
+ mergeImage(dst, src, pxsim.ImageMethods.XX(xy), pxsim.ImageMethods.YY(xy));
5486
+ }
5487
+ ShaderMethods._mergeImage = _mergeImage;
5488
+ function mergeImage(dst, src, x0, y0) {
5489
+ for (let x = 0; x < src._width; x++) {
5490
+ for (let y = 0; y < src._height; y++) {
5491
+ pxsim.ImageMethods.setPixel(dst, x0 + x, y0 + y, Math.min(pxsim.ImageMethods.getPixel(dst, x0 + x, y0 + y), pxsim.ImageMethods.getPixel(src, x, y)));
5492
+ }
5493
+ }
5494
+ }
5495
+ function _mapImage(dst, src, xy, buf) {
5496
+ mapImage(dst, src, pxsim.ImageMethods.XX(xy), pxsim.ImageMethods.YY(xy), buf);
5497
+ }
5498
+ ShaderMethods._mapImage = _mapImage;
5499
+ function mapImage(dst, src, x0, y0, buf) {
5500
+ for (let x = 0; x < src._width; x++) {
5501
+ for (let y = 0; y < src._height; y++) {
5502
+ pxsim.ImageMethods.setPixel(dst, x0 + x, y0 + y, buf.data[pxsim.ImageMethods.getPixel(dst, x0 + x, y0 + y) + (pxsim.ImageMethods.getPixel(src, x, y) << 4)]);
5503
+ }
5504
+ }
5505
+ }
5506
+ })(ShaderMethods = pxsim.ShaderMethods || (pxsim.ShaderMethods = {}));
5507
+ })(pxsim || (pxsim = {}));
5132
5508
  var pxsim;
5133
5509
  (function (pxsim) {
5134
5510
  class StorageState {
package/built/editor.js CHANGED
@@ -3092,7 +3092,6 @@ exports.showProgramTooLargeErrorAsync = showProgramTooLargeErrorAsync;
3092
3092
  "use strict";
3093
3093
  Object.defineProperty(exports, "__esModule", { value: true });
3094
3094
  /// <reference path="../node_modules/pxt-core/localtypings/pxtarget.d.ts" />
3095
- /// <reference path="../node_modules/pxt-core/built/pxtblocks.d.ts" />
3096
3095
  /// <reference path="../node_modules/pxt-core/built/pxtcompiler.d.ts" />
3097
3096
  /// <reference path="../node_modules/pxt-core/built/pxtlib.d.ts" />
3098
3097
  /// <reference path="../node_modules/pxt-core/localtypings/pxteditor.d.ts" />
@@ -17,27 +17,80 @@ pxt.editor.initFieldExtensionsAsync = function (opts) {
17
17
 
18
18
  },{"./field_gestures":2}],2:[function(require,module,exports){
19
19
  "use strict";
20
- /// <reference path="../node_modules/pxt-core/localtypings/blockly.d.ts"/>
21
- /// <reference path="../node_modules/pxt-core/built/pxtblocks.d.ts"/>
22
- /// <reference path="../node_modules/pxt-core/built/pxtsim.d.ts"/>
20
+ /// <reference path="../node_modules/pxt-core/localtypings/pxtblockly.d.ts"/>
23
21
  Object.defineProperty(exports, "__esModule", { value: true });
24
22
  exports.FieldGestures = void 0;
23
+ const pxtblockly = pxt.blocks.requirePxtBlockly();
24
+ const Blockly = pxt.blocks.requireBlockly();
25
25
  class FieldGestures extends pxtblockly.FieldImages {
26
26
  constructor(text, options, validator) {
27
27
  super(text, options, validator);
28
28
  this.isFieldCustom_ = true;
29
- this.buttonClick_ = function (e) {
30
- let value = e.target.getAttribute('data-value');
31
- this.setValue(value);
32
- Blockly.DropDownDiv.hide();
33
- };
34
29
  this.columns_ = parseInt(options.columns) || 4;
35
30
  this.width_ = parseInt(options.width) || 350;
36
31
  this.addLabel_ = true;
37
- this.renderSelectedImage_ = Blockly.FieldDropdown.prototype.renderSelectedText_;
38
- this.updateSize_ = Blockly.Field.prototype.updateSize_;
39
32
  }
40
- trimOptions_() {
33
+ render_() {
34
+ if (this.addLabel_) {
35
+ this.renderSelectedText_();
36
+ this.positionBorderRect_();
37
+ }
38
+ else {
39
+ super.render_();
40
+ }
41
+ }
42
+ /** Renders the selected option, which must be text. */
43
+ renderSelectedText_() {
44
+ // Retrieves the selected option to display through getText_.
45
+ this.getTextContent().nodeValue = this.getDisplayText_();
46
+ const textElement = this.getTextElement();
47
+ Blockly.utils.dom.addClass(textElement, 'blocklyDropdownText');
48
+ textElement.setAttribute('text-anchor', 'start');
49
+ // Height and width include the border rect.
50
+ const hasBorder = !!this.borderRect_;
51
+ const height = Math.max(hasBorder ? this.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT : 0, this.getConstants().FIELD_TEXT_HEIGHT);
52
+ const textWidth = Blockly.utils.dom.getFastTextWidth(this.getTextElement(), this.getConstants().FIELD_TEXT_FONTSIZE, this.getConstants().FIELD_TEXT_FONTWEIGHT, this.getConstants().FIELD_TEXT_FONTFAMILY);
53
+ const xPadding = hasBorder
54
+ ? this.getConstants().FIELD_BORDER_RECT_X_PADDING
55
+ : 0;
56
+ let arrowWidth = 0;
57
+ if (this.getSvgArrow()) {
58
+ arrowWidth = this.positionSVGArrow_(textWidth + xPadding, height / 2 - this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE / 2);
59
+ }
60
+ this.size_.width = textWidth + arrowWidth + xPadding * 2;
61
+ this.size_.height = height;
62
+ this.positionTextElement_(xPadding, textWidth);
63
+ }
64
+ positionSVGArrow_(x, y) {
65
+ const svgArrow = this.getSvgArrow();
66
+ if (!svgArrow) {
67
+ return 0;
68
+ }
69
+ const block = this.getSourceBlock();
70
+ const hasBorder = !!this.borderRect_;
71
+ const xPadding = hasBorder
72
+ ? this.getConstants().FIELD_BORDER_RECT_X_PADDING
73
+ : 0;
74
+ const textPadding = this.getConstants().FIELD_DROPDOWN_SVG_ARROW_PADDING;
75
+ const svgArrowSize = this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE;
76
+ const arrowX = block.RTL ? xPadding : x + textPadding;
77
+ svgArrow.setAttribute('transform', 'translate(' + arrowX + ',' + y + ')');
78
+ return svgArrowSize + textPadding;
79
+ }
80
+ // This hack exists because svgArrow is private in Blockly's field dropdown.
81
+ // It should always be the last image element in the field group
82
+ getSvgArrow() {
83
+ if (this.fieldGroup_) {
84
+ const children = this.fieldGroup_.children;
85
+ let lastImage;
86
+ for (let i = 0; i < children.length; i++) {
87
+ if (children.item(i).tagName.toLowerCase() === "image") {
88
+ lastImage = children.item(i);
89
+ }
90
+ }
91
+ return lastImage;
92
+ }
93
+ return undefined;
41
94
  }
42
95
  }
43
96
  exports.FieldGestures = FieldGestures;
package/built/sim.js CHANGED
@@ -4542,6 +4542,7 @@ var pxsim;
4542
4542
  }
4543
4543
  pxsim.AnalogSensorState = AnalogSensorState;
4544
4544
  })(pxsim || (pxsim = {}));
4545
+ /// <reference path="../../core/sim/analogSensor.ts" />
4545
4546
  var pxsim;
4546
4547
  (function (pxsim) {
4547
4548
  class MicrophoneState extends pxsim.AnalogSensorState {