pxt-microbit 7.0.25 → 7.0.26

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/built/editor.js CHANGED
@@ -3962,50 +3962,98 @@ exports.mkDAPLinkPacketIOWrapper = mkDAPLinkPacketIOWrapper;
3962
3962
 
3963
3963
  },{}],4:[function(require,module,exports){
3964
3964
  "use strict";
3965
- /**
3966
- * <block type="device_show_leds">
3967
- <field name="LED00">FALSE</field>
3968
- <field name="LED10">FALSE</field>
3969
- <field name="LED20">FALSE</field>
3970
- <field name="LED30">FALSE</field>
3971
- <field name="LED40">FALSE</field>
3972
- <field name="LED01">FALSE</field>
3973
- <field name="LED11">FALSE</field>
3974
- <field name="LED21">FALSE</field>
3975
- <field name="LED31">TRUE</field>
3976
- <field name="LED41">FALSE</field>
3977
- <field name="LED02">FALSE</field>
3978
- <field name="LED12">FALSE</field>
3979
- <field name="LED22">FALSE</field>
3980
- <field name="LED32">FALSE</field>
3981
- <field name="LED42">FALSE</field>
3982
- <field name="LED03">FALSE</field>
3983
- <field name="LED13">TRUE</field>
3984
- <field name="LED23">FALSE</field>
3985
- <field name="LED33">FALSE</field>
3986
- <field name="LED43">FALSE</field>
3987
- <field name="LED04">FALSE</field>
3988
- <field name="LED14">FALSE</field>
3989
- <field name="LED24">FALSE</field>
3990
- <field name="LED34">FALSE</field>
3991
- <field name="LED44">FALSE</field>
3992
- </block>
3993
-
3994
- to
3995
- <block type="device_show_leds">
3996
- <field name="LEDS">`
3997
- # # # # #
3998
- . . . . #
3999
- . . . . .
4000
- . . . . #
4001
- . . . . #
4002
- `
4003
- </field>
4004
- </block>
4005
- */
4006
3965
  Object.defineProperty(exports, "__esModule", { value: true });
4007
3966
  exports.patchBlocks = void 0;
4008
3967
  function patchBlocks(pkgTargetVersion, dom) {
3968
+ if (pxt.semver.majorCmp(pkgTargetVersion || "0.0.0", "7.0.13") <= 0) {
3969
+ // Variable pin param
3970
+ /*
3971
+ <block type="device_get_digital_pin">
3972
+ <field name="name">DigitalPin.P0</field>
3973
+ </block>
3974
+
3975
+ converts to
3976
+
3977
+ <block type="device_get_digital_pin">
3978
+ <value name="name">
3979
+ <shadow type="digital_pin">
3980
+ <field name="pin">DigitalPin.P0</field>
3981
+ </shadow>
3982
+ </value>
3983
+ </block>
3984
+ */
3985
+ pxt.U.toArray(dom.querySelectorAll("block[type=device_get_digital_pin]"))
3986
+ .concat(pxt.U.toArray(dom.querySelectorAll("shadow[type=device_get_digital_pin]")))
3987
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_set_digital_pin]")))
3988
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_get_analog_pin]")))
3989
+ .concat(pxt.U.toArray(dom.querySelectorAll("shadow[type=device_get_analog_pin]")))
3990
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_set_analog_pin]")))
3991
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_set_analog_period]")))
3992
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=pins_on_pulsed]")))
3993
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=pins_pulse_in]")))
3994
+ .concat(pxt.U.toArray(dom.querySelectorAll("shadow[type=pins_pulse_in]")))
3995
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_set_servo_pin]")))
3996
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_set_servo_pulse]")))
3997
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_analog_set_pitch_pin]")))
3998
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_set_pull]")))
3999
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_set_pin_events]")))
4000
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=pin_neopixel_matrix_width]")))
4001
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=spi_pins]")))
4002
+ .concat(pxt.U.toArray(dom.querySelectorAll("block[type=pin_set_audio_pin]")))
4003
+ .forEach(node => {
4004
+ const blockType = node.getAttribute("type");
4005
+ pxt.U.toArray(node.children)
4006
+ .filter(oldPinNode => {
4007
+ if (oldPinNode.tagName != "field")
4008
+ return false;
4009
+ switch (blockType) {
4010
+ case "device_get_digital_pin":
4011
+ case "device_set_digital_pin":
4012
+ case "device_get_analog_pin":
4013
+ case "device_set_analog_pin":
4014
+ case "pins_pulse_in":
4015
+ case "device_set_servo_pin":
4016
+ case "device_analog_set_pitch_pin":
4017
+ case "pin_set_audio_pin":
4018
+ return oldPinNode.getAttribute("name") === "name";
4019
+ case "device_set_analog_period":
4020
+ case "pins_on_pulsed":
4021
+ case "device_set_pull":
4022
+ case "device_set_pin_events":
4023
+ case "pin_neopixel_matrix_width":
4024
+ return oldPinNode.getAttribute("name") === "pin";
4025
+ case "device_set_servo_pulse":
4026
+ return oldPinNode.getAttribute("name") === "value";
4027
+ case "spi_pins":
4028
+ return ["mosi", "miso", "sck"].includes(oldPinNode.getAttribute("name"));
4029
+ }
4030
+ return false;
4031
+ })
4032
+ .forEach(oldPinNode => {
4033
+ const valueNode = node.ownerDocument.createElement("value");
4034
+ valueNode.setAttribute("name", oldPinNode.getAttribute("name"));
4035
+ const pinShadowNode = node.ownerDocument.createElement("shadow");
4036
+ let pinBlockType;
4037
+ switch (oldPinNode.textContent.split(".")[0]) {
4038
+ case "DigitalPin":
4039
+ pinBlockType = "digital_pin_shadow";
4040
+ break;
4041
+ case "AnalogPin":
4042
+ pinBlockType = "analog_pin_shadow";
4043
+ break;
4044
+ }
4045
+ if (!pinBlockType)
4046
+ return;
4047
+ pinShadowNode.setAttribute("type", pinBlockType);
4048
+ const fieldNode = node.ownerDocument.createElement("field");
4049
+ fieldNode.setAttribute("name", "pin");
4050
+ fieldNode.textContent = oldPinNode.textContent;
4051
+ pinShadowNode.appendChild(fieldNode);
4052
+ valueNode.appendChild(pinShadowNode);
4053
+ node.replaceChild(valueNode, oldPinNode);
4054
+ });
4055
+ });
4056
+ }
4009
4057
  if (pxt.semver.majorCmp(pkgTargetVersion || "0.0.0", "5.0.12") <= 0) {
4010
4058
  // Eighth note misspelling
4011
4059
  /*
@@ -4041,12 +4089,54 @@ function patchBlocks(pkgTargetVersion, dom) {
4041
4089
  if (pxt.semver.majorCmp(pkgTargetVersion || "0.0.0", "1.0.0") >= 0)
4042
4090
  return;
4043
4091
  // showleds
4044
- const nodes = pxt.U.toArray(dom.querySelectorAll("block[type=device_show_leds]"))
4092
+ /**
4093
+ <block type="device_show_leds">
4094
+ <field name="LED00">FALSE</field>
4095
+ <field name="LED10">FALSE</field>
4096
+ <field name="LED20">FALSE</field>
4097
+ <field name="LED30">FALSE</field>
4098
+ <field name="LED40">FALSE</field>
4099
+ <field name="LED01">FALSE</field>
4100
+ <field name="LED11">FALSE</field>
4101
+ <field name="LED21">FALSE</field>
4102
+ <field name="LED31">TRUE</field>
4103
+ <field name="LED41">FALSE</field>
4104
+ <field name="LED02">FALSE</field>
4105
+ <field name="LED12">FALSE</field>
4106
+ <field name="LED22">FALSE</field>
4107
+ <field name="LED32">FALSE</field>
4108
+ <field name="LED42">FALSE</field>
4109
+ <field name="LED03">FALSE</field>
4110
+ <field name="LED13">TRUE</field>
4111
+ <field name="LED23">FALSE</field>
4112
+ <field name="LED33">FALSE</field>
4113
+ <field name="LED43">FALSE</field>
4114
+ <field name="LED04">FALSE</field>
4115
+ <field name="LED14">FALSE</field>
4116
+ <field name="LED24">FALSE</field>
4117
+ <field name="LED34">FALSE</field>
4118
+ <field name="LED44">FALSE</field>
4119
+ </block>
4120
+
4121
+ converts to
4122
+
4123
+ <block type="device_show_leds">
4124
+ <field name="LEDS">`
4125
+ . . . . .
4126
+ . . . # .
4127
+ . . . . .
4128
+ . # . . .
4129
+ . . . . .
4130
+ `
4131
+ </field>
4132
+ </block>
4133
+ */
4134
+ pxt.U.toArray(dom.querySelectorAll("block[type=device_show_leds]"))
4045
4135
  .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_build_image]")))
4046
4136
  .concat(pxt.U.toArray(dom.querySelectorAll("shadow[type=device_build_image]")))
4047
4137
  .concat(pxt.U.toArray(dom.querySelectorAll("block[type=device_build_big_image]")))
4048
- .concat(pxt.U.toArray(dom.querySelectorAll("shadow[type=device_build_big_image]")));
4049
- nodes.forEach(node => {
4138
+ .concat(pxt.U.toArray(dom.querySelectorAll("shadow[type=device_build_big_image]")))
4139
+ .forEach(node => {
4050
4140
  // don't rewrite if already upgraded, eg. field LEDS already present
4051
4141
  if (pxt.U.toArray(node.children).filter(child => child.tagName == "field" && "LEDS" == child.getAttribute("name"))[0])
4052
4142
  return;
@@ -4071,33 +4161,33 @@ function patchBlocks(pkgTargetVersion, dom) {
4071
4161
  });
4072
4162
  // radio
4073
4163
  /*
4074
- <block type="radio_on_packet" x="174" y="120">
4075
- <mutation callbackproperties="receivedNumber" renamemap="{}"></mutation>
4076
- <field name="receivedNumber">receivedNumber</field>
4077
- </block>
4078
- <block type="radio_on_packet" disabled="true" x="127" y="263">
4079
- <mutation callbackproperties="receivedString,receivedNumber" renamemap="{&quot;receivedString&quot;:&quot;name&quot;,&quot;receivedNumber&quot;:&quot;value&quot;}"></mutation>
4080
- <field name="receivedString">name</field>
4081
- <field name="receivedNumber">value</field>
4082
- </block>
4083
- <block type="radio_on_packet" disabled="true" x="162" y="420">
4084
- <mutation callbackproperties="receivedString" renamemap="{}"></mutation>
4085
- <field name="receivedString">receivedString</field>
4086
- </block>
4164
+ <block type="radio_on_packet" x="174" y="120">
4165
+ <mutation callbackproperties="receivedNumber" renamemap="{}"></mutation>
4166
+ <field name="receivedNumber">receivedNumber</field>
4167
+ </block>
4168
+ <block type="radio_on_packet" disabled="true" x="127" y="263">
4169
+ <mutation callbackproperties="receivedString,receivedNumber" renamemap="{&quot;receivedString&quot;:&quot;name&quot;,&quot;receivedNumber&quot;:&quot;value&quot;}"></mutation>
4170
+ <field name="receivedString">name</field>
4171
+ <field name="receivedNumber">value</field>
4172
+ </block>
4173
+ <block type="radio_on_packet" disabled="true" x="162" y="420">
4174
+ <mutation callbackproperties="receivedString" renamemap="{}"></mutation>
4175
+ <field name="receivedString">receivedString</field>
4176
+ </block>
4087
4177
 
4088
- converts to
4178
+ converts to
4089
4179
 
4090
- <block type="radio_on_number" x="196" y="208">
4091
- <field name="HANDLER_receivedNumber" id="DCy(W;1)*jLWQUpoy4Mm" variabletype="">receivedNumber</field>
4092
- </block>
4093
- <block type="radio_on_value" x="134" y="408">
4094
- <field name="HANDLER_name" id="*d-Jm^MJXO]Djs(dTR*?" variabletype="">name</field>
4095
- <field name="HANDLER_value" id="A6HQjH[k^X43o3h775+G" variabletype="">value</field>
4096
- </block>
4097
- <block type="radio_on_string" x="165" y="583">
4098
- <field name="HANDLER_receivedString" id="V9KsE!h$(iO?%W:[32CV" variabletype="">receivedString</field>
4099
- </block>
4100
- */
4180
+ <block type="radio_on_number" x="196" y="208">
4181
+ <field name="HANDLER_receivedNumber" id="DCy(W;1)*jLWQUpoy4Mm" variabletype="">receivedNumber</field>
4182
+ </block>
4183
+ <block type="radio_on_value" x="134" y="408">
4184
+ <field name="HANDLER_name" id="*d-Jm^MJXO]Djs(dTR*?" variabletype="">name</field>
4185
+ <field name="HANDLER_value" id="A6HQjH[k^X43o3h775+G" variabletype="">value</field>
4186
+ </block>
4187
+ <block type="radio_on_string" x="165" y="583">
4188
+ <field name="HANDLER_receivedString" id="V9KsE!h$(iO?%W:[32CV" variabletype="">receivedString</field>
4189
+ </block>
4190
+ */
4101
4191
  const varids = {};
4102
4192
  function addField(node, renameMap, name) {
4103
4193
  const f = node.ownerDocument.createElement("field");
@@ -4,18 +4,25 @@
4
4
  /// <reference path="../node_modules/pxt-core/built/pxtsim.d.ts"/>
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const field_gestures_1 = require("./field_gestures");
7
+ const field_pinPicker_1 = require("./field_pinPicker");
7
8
  pxt.editor.initFieldExtensionsAsync = function (opts) {
8
9
  pxt.debug('loading pxt-microbit field editors...');
9
10
  const res = {
10
- fieldEditors: [{
11
+ fieldEditors: [
12
+ {
11
13
  selector: "gestures",
12
14
  editor: field_gestures_1.FieldGestures
13
- }]
15
+ },
16
+ {
17
+ selector: "pinpicker",
18
+ editor: field_pinPicker_1.FieldPinPicker
19
+ }
20
+ ]
14
21
  };
15
22
  return Promise.resolve(res);
16
23
  };
17
24
 
18
- },{"./field_gestures":2}],2:[function(require,module,exports){
25
+ },{"./field_gestures":2,"./field_pinPicker":3}],2:[function(require,module,exports){
19
26
  "use strict";
20
27
  /// <reference path="../node_modules/pxt-core/localtypings/pxtblockly.d.ts"/>
21
28
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -95,4 +102,87 @@ class FieldGestures extends pxtblockly.FieldImages {
95
102
  }
96
103
  exports.FieldGestures = FieldGestures;
97
104
 
98
- },{}]},{},[1,2]);
105
+ },{}],3:[function(require,module,exports){
106
+ "use strict";
107
+ /// <reference path="../node_modules/pxt-core/localtypings/pxtblockly.d.ts"/>
108
+ Object.defineProperty(exports, "__esModule", { value: true });
109
+ exports.FieldPinPicker = void 0;
110
+ const pxtblockly = pxt.blocks.requirePxtBlockly();
111
+ const Blockly = pxt.blocks.requireBlockly();
112
+ const WARNING_ID = "pinpicker_warning";
113
+ class FieldPinPicker extends pxtblockly.FieldGridPicker {
114
+ constructor() {
115
+ super(...arguments);
116
+ this.changeListener = (e) => {
117
+ if (e.type === Blockly.Events.BLOCK_MOVE && e.blockId === this.sourceBlock_.id) {
118
+ this.updateWarning();
119
+ }
120
+ };
121
+ }
122
+ init() {
123
+ super.init();
124
+ const sourceBlock = this.sourceBlock_;
125
+ if (sourceBlock.isShadow() || sourceBlock.isInFlyout) {
126
+ return;
127
+ }
128
+ sourceBlock.workspace.addChangeListener(this.changeListener);
129
+ }
130
+ doValueUpdate_(newValue) {
131
+ super.doValueUpdate_(newValue);
132
+ this.updateWarning();
133
+ }
134
+ updateWarning() {
135
+ this.hideWarning();
136
+ const sourceBlock = this.sourceBlock_;
137
+ if (!sourceBlock || !this.value_ || sourceBlock.isShadow() || sourceBlock.isInFlyout) {
138
+ return;
139
+ }
140
+ const pin = this.value_.split(".")[1];
141
+ if (!isAnalogWriteOnlyPin(pin)) {
142
+ return;
143
+ }
144
+ const parent = sourceBlock.outputConnection.targetBlock();
145
+ if (!parent || parent.type !== "device_get_analog_pin") {
146
+ return;
147
+ }
148
+ this.showWarning(pin);
149
+ }
150
+ showWarning(pin) {
151
+ if (!this.sourceBlock_) {
152
+ return;
153
+ }
154
+ this.sourceBlock_.setWarningText(pxt.U.lf("{0} is a write only analog pin", pin), WARNING_ID);
155
+ }
156
+ hideWarning() {
157
+ if (!this.sourceBlock_) {
158
+ return;
159
+ }
160
+ this.sourceBlock_.setWarningText(null, WARNING_ID);
161
+ }
162
+ dispose() {
163
+ var _a, _b;
164
+ super.dispose();
165
+ (_b = (_a = this.sourceBlock_) === null || _a === void 0 ? void 0 : _a.workspace) === null || _b === void 0 ? void 0 : _b.removeChangeListener(this.changeListener);
166
+ }
167
+ }
168
+ exports.FieldPinPicker = FieldPinPicker;
169
+ function isAnalogWriteOnlyPin(pin) {
170
+ switch (pin) {
171
+ case "P5":
172
+ case "P6":
173
+ case "P7":
174
+ case "P8":
175
+ case "P9":
176
+ case "P11":
177
+ case "P12":
178
+ case "P13":
179
+ case "P14":
180
+ case "P15":
181
+ case "P16":
182
+ return true;
183
+ default:
184
+ return false;
185
+ }
186
+ }
187
+
188
+ },{}]},{},[1,2,3]);
@@ -1 +1 @@
1
- {"A Blocks / JavaScript code editor for the micro:bit powered by Microsoft MakeCode.":"A Blocks / JavaScript code editor for the micro:bit powered by Microsoft MakeCode.","A micro-servo library":"A micro-servo library","Adds new blocks for message communication in the radio category":"Adds new blocks for message communication in the radio category","BETA - Camera, remote control and other Bluetooth services. App required.":"BETA - Camera, remote control and other Bluetooth services. App required.","Behind the MakeCode Hardware":"Behind the MakeCode Hardware","Blocks to JavaScript":"Blocks to JavaScript","Bluetooth services":"Bluetooth services","Buy":"Buy","Can't import microbit.co.uk scripts...":"Can't import microbit.co.uk scripts...","Coding Cards":"Coding Cards","Coding for Teachers":"Coding for Teachers","Color manipulation":"Color manipulation","Courses":"Courses","Data logging to flash memory. micro:bit (V2) only.":"Data logging to flash memory. micro:bit (V2) only.","Data logging to flash.":"Data logging to flash.","Deep Dive":"Deep Dive","Disable Bluetooth Event Service":"Disable Bluetooth Event Service","Download cancelled":"Download cancelled","Download failed, please try again":"Download failed, please try again","Download for V2 only":"Download for V2 only","Fashion":"Fashion","Fonts for displays (V2 only).":"Fonts for displays (V2 only).","Games":"Games","Go Back":"Go Back","Go to the old editor":"Go to the old editor","Great coding skills! Unfortunately, your program is too large to fit on a micro:bit V1😢. You can go back and try to make your program smaller, or you can download your program onto a micro:bit V2.":"Great coding skills! Unfortunately, your program is too large to fit on a micro:bit V1😢. You can go back and try to make your program smaller, or you can download your program onto a micro:bit V2.","Great coding skills! Unfortunately, your program is too large to fit on a micro:bit V2😢. You can go back and try to make your program smaller, or continue to use the simulator to run your code.":"Great coding skills! Unfortunately, your program is too large to fit on a micro:bit V2😢. You can go back and try to make your program smaller, or continue to use the simulator to run your code.","Hardware":"Hardware","Importing microbit.co.uk programs is not supported in this editor anymore. Please open this script in the https://makecode.microbit.org/v0 editor.":"Importing microbit.co.uk programs is not supported in this editor anymore. Please open this script in the https://makecode.microbit.org/v0 editor.","Jacdac":"Jacdac","JustWorks pairing (default): Pairing is automatic once the pairing is initiated.":"JustWorks pairing (default): Pairing is automatic once the pairing is initiated.","Live Coding":"Live Coding","MicroCode for the new micro:bit (V2)":"MicroCode for the new micro:bit (V2)","Microsoft MakeCode for micro:bit":"Microsoft MakeCode for micro:bit","Music":"Music","New? Start here!":"New? Start here!","No Pairing Required: Anyone can connect via Bluetooth.":"No Pairing Required: Anyone can connect via Bluetooth.","Oops, there was a problem downloading your code":"Oops, there was a problem downloading your code","Passkey pairing: Pairing requires 6 digit key to pair.":"Passkey pairing: Pairing requires 6 digit key to pair.","Radio Games":"Radio Games","Record sound clips. micro:bit (V2) only":"Record sound clips. micro:bit (V2) only","Reference":"Reference","Science":"Science","Science Experiments":"Science Experiments","Settings storage in internal flash":"Settings storage in internal flash","Support":"Support","The microbit core library":"The microbit core library","The microphone library":"The microphone library","The radio services":"The radio services","Tools":"Tools","Toys":"Toys","Turtle":"Turtle","Tutorials":"Tutorials","Tutorials for the new micro:bit (V2)":"Tutorials for the new micro:bit (V2)","makecode.microbit.org":"makecode.microbit.org","{id:extension-tag}Gaming":"Gaming","{id:extension-tag}Lights and Display":"Lights and Display","{id:extension-tag}Networking":"Networking","{id:extension-tag}Robotics":"Robotics","{id:extension-tag}Science":"Science","{id:extension-tag}Software":"Software","{id:type}Image":"Image","{id:type}LedSprite":"LedSprite","{id:var}image":"image","{id:var}sprite":"sprite"}
1
+ {"A Blocks / JavaScript code editor for the micro:bit powered by Microsoft MakeCode.":"A Blocks / JavaScript code editor for the micro:bit powered by Microsoft MakeCode.","A micro-servo library":"A micro-servo library","Adds new blocks for message communication in the radio category":"Adds new blocks for message communication in the radio category","BETA - Camera, remote control and other Bluetooth services. App required.":"BETA - Camera, remote control and other Bluetooth services. App required.","Behind the MakeCode Hardware":"Behind the MakeCode Hardware","Blocks to JavaScript":"Blocks to JavaScript","Bluetooth services":"Bluetooth services","Buy":"Buy","Can't import microbit.co.uk scripts...":"Can't import microbit.co.uk scripts...","Coding Cards":"Coding Cards","Coding for Teachers":"Coding for Teachers","Color manipulation":"Color manipulation","Courses":"Courses","Data logging to flash memory. micro:bit (V2) only.":"Data logging to flash memory. micro:bit (V2) only.","Data logging to flash.":"Data logging to flash.","Deep Dive":"Deep Dive","Disable Bluetooth Event Service":"Disable Bluetooth Event Service","Download cancelled":"Download cancelled","Download failed, please try again":"Download failed, please try again","Download for V2 only":"Download for V2 only","Fashion":"Fashion","Fonts for displays (V2 only).":"Fonts for displays (V2 only).","Games":"Games","Go Back":"Go Back","Go to the old editor":"Go to the old editor","Great coding skills! Unfortunately, your program is too large to fit on a micro:bit V1😢. You can go back and try to make your program smaller, or you can download your program onto a micro:bit V2.":"Great coding skills! Unfortunately, your program is too large to fit on a micro:bit V1😢. You can go back and try to make your program smaller, or you can download your program onto a micro:bit V2.","Great coding skills! Unfortunately, your program is too large to fit on a micro:bit V2😢. You can go back and try to make your program smaller, or continue to use the simulator to run your code.":"Great coding skills! Unfortunately, your program is too large to fit on a micro:bit V2😢. You can go back and try to make your program smaller, or continue to use the simulator to run your code.","Hardware":"Hardware","Importing microbit.co.uk programs is not supported in this editor anymore. Please open this script in the https://makecode.microbit.org/v0 editor.":"Importing microbit.co.uk programs is not supported in this editor anymore. Please open this script in the https://makecode.microbit.org/v0 editor.","Jacdac":"Jacdac","JustWorks pairing (default): Pairing is automatic once the pairing is initiated.":"JustWorks pairing (default): Pairing is automatic once the pairing is initiated.","Live Coding":"Live Coding","MicroCode for the new micro:bit (V2)":"MicroCode for the new micro:bit (V2)","Microsoft MakeCode for micro:bit":"Microsoft MakeCode for micro:bit","Music":"Music","New? Start here!":"New? Start here!","No Pairing Required: Anyone can connect via Bluetooth.":"No Pairing Required: Anyone can connect via Bluetooth.","Oops, there was a problem downloading your code":"Oops, there was a problem downloading your code","Passkey pairing: Pairing requires 6 digit key to pair.":"Passkey pairing: Pairing requires 6 digit key to pair.","Radio Games":"Radio Games","Record sound clips. micro:bit (V2) only":"Record sound clips. micro:bit (V2) only","Reference":"Reference","Science":"Science","Science Experiments":"Science Experiments","Settings storage in internal flash":"Settings storage in internal flash","Support":"Support","The microbit core library":"The microbit core library","The microphone library":"The microphone library","The radio services":"The radio services","Tools":"Tools","Toys":"Toys","Turtle":"Turtle","Tutorials":"Tutorials","Tutorials for the new micro:bit (V2)":"Tutorials for the new micro:bit (V2)","makecode.microbit.org":"makecode.microbit.org","{0} is a write only analog pin":"{0} is a write only analog pin","{id:extension-tag}Gaming":"Gaming","{id:extension-tag}Lights and Display":"Lights and Display","{id:extension-tag}Networking":"Networking","{id:extension-tag}Robotics":"Robotics","{id:extension-tag}Science":"Science","{id:extension-tag}Software":"Software","{id:type}Image":"Image","{id:type}LedSprite":"LedSprite","{id:var}image":"image","{id:var}sprite":"sprite"}