pxt-core
Version:
Microsoft MakeCode provides Blocks / JavaScript / Python tools and editors
1 lines • 1.4 MB
JavaScript
!function t(e,i,o){function s(r,a){if(!i[r]){if(!e[r]){var l="function"==typeof require&&require;if(!a&&l)return l(r,!0);if(n)return n(r,!0);var c=new Error("Cannot find module '"+r+"'");throw c.code="MODULE_NOT_FOUND",c}var h=i[r]={exports:{}};e[r][0].call(h.exports,function(t){return s(e[r][1][t]||t)},h,h.exports,t,e,i,o)}return i[r].exports}for(var n="function"==typeof require&&require,r=0;r<o.length;r++)s(o[r]);return s}({1:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.BlockDragger=void 0;const o=t("blockly");class s extends o.dragging.Dragger{onDrag(t,e){super.onDrag(t,e);const i=document.getElementsByClassName("blocklyToolbox")[0],s=document.getElementsByClassName("blocklyTreeRoot")[0]||document.getElementsByClassName("blocklyFlyout")[0],n=document.getElementById("blocklyTrashIcon");if(s&&n){const e=s.getBoundingClientRect(),l=(r=s.getBoundingClientRect(),a=t.clientX,Math.abs(a-(r.left+r.width/2))),c=o.Gesture.inProgress();if(c&&l<200||!c&&function(t,e){return e-(t.left+t.width)<0}(e,t.clientX)){const t=l/200;n.style.opacity=""+(1-t),n.style.display="block",i&&(s.style.opacity=`${t}`,l<50&&pxt.BrowserUtils.addClass(i,"blocklyToolboxDeleting"))}else n.style.display="none",s.style.opacity="1",i&&pxt.BrowserUtils.removeClass(i,"blocklyToolboxDeleting")}var r,a}onDragEnd(t){super.onDragEnd(t);const e=document.getElementsByClassName("blocklyToolbox")[0],i=document.getElementsByClassName("blocklyTreeRoot")[0]||document.getElementsByClassName("blocklyFlyout")[0],o=document.getElementById("blocklyTrashIcon");o&&i&&(o.style.display="none",i.style.opacity="1",e&&pxt.BrowserUtils.removeClass(e,"blocklyToolboxDeleting"))}}i.BlockDragger=s},{blockly:192}],2:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.BreakpointIcon=void 0;const o=t("blockly");class s extends o.icons.Icon{constructor(t,e){super(t),this.onStateChange=e,this.isSet_=!1}getType(){return s.type}initView(t){super.initView(t),this.breakpointSvg||(this.breakpointSvg=o.utils.dom.createSvgElement("circle",{class:"blocklyBreakpointSymbol",stroke:"white","stroke-width":2,cx:7,cy:11.5,r:8},this.svgRoot),this.updateColor())}getSize(){return new o.utils.Size(25,25)}onClick(){this.isSet_=!this.isSet_,this.updateColor(),this.onStateChange(this.sourceBlock,this.isSet_)}isEnabled(){return this.isSet_}setEnabled(t){this.isSet_=t,this.updateColor()}updateColor(){this.breakpointSvg&&this.breakpointSvg.setAttribute("fill",this.isSet_?"#FF0000":"#CCCCCC")}}i.BreakpointIcon=s,s.type=new o.icons.IconType("breakpoint")},{blockly:192}],3:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.initFunctions=void 0;const o=t("blockly"),s=t("../help"),n=t("../plugins/functions"),r=t("../fields"),a=t("../loader"),l=t("../importer"),c=t("../fields/field_imagenotext"),h=t("../utils");i.initFunctions=function(){const t=o.Msg;t.FUNCTION_CREATE_NEW=lf("Make a Function..."),t.FUNCTION_WARNING_DUPLICATE_ARG=lf("Functions cannot use the same argument name more than once."),t.FUNCTION_WARNING_ARG_NAME_IS_FUNCTION_NAME=lf("Argument names must not be the same as the function name."),t.FUNCTION_WARNING_EMPTY_NAME=lf("Function and argument names cannot be empty."),t.FUNCTIONS_DEFAULT_FUNCTION_NAME=lf("doSomething"),t.FUNCTIONS_DEFAULT_BOOLEAN_ARG_NAME=lf("bool"),t.FUNCTIONS_DEFAULT_STRING_ARG_NAME=lf("text"),t.FUNCTIONS_DEFAULT_NUMBER_ARG_NAME=lf("num"),t.FUNCTIONS_DEFAULT_CUSTOM_ARG_NAME=lf("arg"),t.FUNCTION_FLYOUT_LABEL=lf("Your Functions"),t.FUNCTIONS_CREATE_CALL_OPTION=lf("Create 'call {0}'","%1"),t.FUNCTIONS_DEFNORETURN_TITLE=lf("function"),t.PROCEDURES_HUE=pxt.toolbox.getNamespaceColor("functions"),t.REPORTERS_HUE=pxt.toolbox.getNamespaceColor("variables"),t.FUNCTIONS_DELETE_PARAMETER_BUTTON=lf("{id:delete-function-parameter}Delete");const e="procedures_defnoreturn",i=pxt.blocks.getBlockDefinition(e);t.PROCEDURES_DEFNORETURN_TITLE=i.block.PROCEDURES_DEFNORETURN_TITLE,t.PROCEDURE_ALREADY_EXISTS=i.block.PROCEDURE_ALREADY_EXISTS,o.Blocks.procedures_defnoreturn.init=function(){let t=new o.FieldTextInput("",o.Procedures.rename);this.appendDummyInput().appendField(o.Msg.PROCEDURES_DEFNORETURN_TITLE).appendField(t,"NAME").appendField("","PARAMS"),this.setColour(pxt.toolbox.getNamespaceColor("functions")),this.arguments_=[],this.argumentVarModels_=[],this.hat="cap",this.setStatements_(!0),this.statementConnection_=null},(0,s.installBuiltinHelpInfo)(e);const u="procedures_callnoreturn",d=pxt.blocks.getBlockDefinition(u);t.PROCEDURES_CALLRETURN_TOOLTIP=i.tooltip.toString(),o.Blocks.procedures_callnoreturn={init:function(){let t=new r.FieldProcedure("");this.appendDummyInput("TOPROW").appendField(d.block.PROCEDURES_CALLNORETURN_TITLE).appendField(t,"NAME"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setColour(pxt.toolbox.getNamespaceColor("functions")),this.arguments_=[],this.quarkConnections_={},this.quarkIds_=null},getProcedureCall:function(){return this.getFieldValue("NAME")},renameProcedure:function(t,e){o.Names.equals(t,this.getProcedureCall())&&this.setFieldValue(e,"NAME")},onchange:function(t){if(this.workspace&&!this.workspace.isFlyout&&!this.isInsertionMarker())if(t.type==o.Events.CREATE&&-1!=t.ids.indexOf(this.id)){let e=this.getProcedureCall(),i=o.Procedures.getDefinition(e,this.workspace);if(!i||i.type==this.defType_&&JSON.stringify(i.arguments_)==JSON.stringify(this.arguments_)||(i=null),!i){o.Events.setGroup(t.group);let e=o.utils.xml.createElement("xml"),i=o.utils.xml.createElement("block");i.setAttribute("type",this.defType_);let s=this.getRelativeToSurfaceXY(),n=s.x+o.SNAP_RADIUS*(this.RTL?-1:1),r=s.y+2*o.SNAP_RADIUS;i.setAttribute("x",n),i.setAttribute("y",r);let a=o.utils.xml.createElement("field");a.setAttribute("name","NAME"),a.appendChild(document.createTextNode(this.getProcedureCall())),i.appendChild(a),e.appendChild(i),(0,l.domToWorkspaceNoEvents)(e,this.workspace),o.Events.setGroup(!1)}}else if(t.type==o.Events.DELETE){let e=this.getProcedureCall();o.Procedures.getDefinition(e,this.workspace)||(o.Events.setGroup(t.group),this.dispose(!0,!1),o.Events.setGroup(!1))}},mutationToDom:function(){const t=document.createElement("mutation");return t.setAttribute("name",this.getProcedureCall()),t},domToMutation:function(t){const e=t.getAttribute("name");this.renameProcedure(this.getProcedureCall(),e)},customContextMenu:function(t){let e={enabled:!0};e.text=o.Msg.PROCEDURES_HIGHLIGHT_DEF;let i=this.getProcedureCall(),s=this.workspace;e.callback=function(){let t=o.Procedures.getDefinition(i,s);t&&t.select()},t.push(e)},defType_:"procedures_defnoreturn"},(0,s.installBuiltinHelpInfo)(u);const p="function_definition",g=pxt.blocks.getBlockDefinition(p);t.FUNCTIONS_EDIT_OPTION=g.block.FUNCTIONS_EDIT_OPTION,(0,s.installBuiltinHelpInfo)(p);const m="function_call",_=pxt.blocks.getBlockDefinition(m);t.FUNCTIONS_CALL_TITLE=_.block.FUNCTIONS_CALL_TITLE,t.FUNCTIONS_GO_TO_DEFINITION_OPTION=_.block.FUNCTIONS_GO_TO_DEFINITION_OPTION,(0,s.installBuiltinHelpInfo)(m),(0,s.installBuiltinHelpInfo)("function_call_output");const f="function_return";o.Blocks[f]={init:function(){!function(t){const e=pxt.blocks.getBlockDefinition("function_return"),i="0_add_button",s="0_rem_button";o.Extensions.apply("inline-svgs",t,!1);let n,r=!0;function a(o){let a=null;const l=t.getInput("RETURN_VALUE");if(r){if(!l){for(;t.getInput("");)t.removeInput("");t.jsonInit({message0:e.block.message_with_value,args0:[{type:"input_value",name:"RETURN_VALUE",check:null}],previousStatement:null,colour:pxt.toolbox.getNamespaceColor("functions")})}if(t.getInput(i)&&t.removeInput(i),t.getInput(s)||(a=p()),n){const e=t.workspace.getBlockById(n);e&&e.outputConnection&&!e.outputConnection.targetBlock()&&t.getInput("RETURN_VALUE").connection.connect(e.outputConnection),n=void 0}}else{if(l){const i=l.connection.targetBlock();i&&(i.isShadow()&&i.setShadow(!1),l.connection.disconnect(),n=i.id),t.removeInput("RETURN_VALUE"),t.jsonInit({message0:e.block.message_no_value,args0:[],previousStatement:null,colour:pxt.toolbox.getNamespaceColor("functions")})}t.getInput(s)&&t.removeInput(s),t.getInput(i)||(a=d())}t.setInputsInline(!0),o&&(0,h.maybeMoveFocusFromButton)(null==a?void 0:a.fieldRow[0])}function l(t,e){t.setAttribute("no_return_value",e?"false":"true")}function u(t){return"true"!==t.getAttribute("no_return_value")}function d(){return _(i,t.ADD_IMAGE_DATAURI,lf("Add return value"))}function p(){return _(s,t.REMOVE_IMAGE_DATAURI,lf("Remove return value"))}function g(){return o.Xml.domToText(t.mutationToDom())}function m(e,i){e!==i&&o.Events.fire(new o.Events.BlockChange(t,"mutation",null,e,i))}function _(e,i,o){return t.appendDummyInput(e).appendField(new c.FieldImageNoText(i,24,24,o,()=>{const t=g();r=!r;const e=g();m(t,e),a(!0);m(e,g())},!1))}a(),t.domToMutation=t=>{t.hasAttribute("last_connected_id")&&(n=t.getAttribute("last_connected_id")),r=u(t),a()},t.mutationToDom=()=>{const e=document.createElement("mutation");return l(e,!!t.getInput("RETURN_VALUE")),n&&e.setAttribute("last_connected_id",n),e}}(this)}},(0,s.installBuiltinHelpInfo)(f);const T={number:pxt.blocks.defaultIconForArgType("number"),boolean:pxt.blocks.defaultIconForArgType("boolean"),string:pxt.blocks.defaultIconForArgType("string"),Array:pxt.blocks.defaultIconForArgType("Array")},b={},E=pxt.appTarget.runtime&&pxt.appTarget.runtime.functionsOptions;E&&E.extraFunctionEditorTypes&&E.extraFunctionEditorTypes.forEach(t=>{T[t.typeName]=t.icon||pxt.blocks.defaultIconForArgType(),t.defaultName&&(b[t.typeName]=t.defaultName)});for(const t of Object.keys(T))n.FunctionManager.getInstance().setIconForType(t,T[t]);for(const t of Object.keys(b))n.FunctionManager.getInstance().setArgumentNameForType(t,b[t]);o.Blocks.argument_reporter_custom&&(o.Blocks.argument_reporter_custom.domToMutation=function(t){const e=t.getAttribute("typename");this.typeName_=e,(0,a.setOutputCheck)(this,e,a.cachedBlockInfo)});const y=o.Blocks.function_definition.makeCallOption;o.Blocks.function_definition.makeCallOption=function(){const t=y.call(this),e=this.getName();return t.text=pxt.Util.lf("Create 'call {0}'",e),t}}},{"../fields":72,"../fields/field_imagenotext":38,"../help":74,"../importer":75,"../loader":79,"../plugins/functions":127,"../utils":155,blockly:192}],4:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.initLists=void 0;const o=t("blockly"),s=t("../help"),n=t("../constants");i.initLists=function(){const t=o.Msg,e="lists_create_with",i=pxt.blocks.getBlockDefinition(e);t.LISTS_CREATE_EMPTY_TITLE=i.block.LISTS_CREATE_EMPTY_TITLE,t.LISTS_CREATE_WITH_INPUT_WITH=i.block.LISTS_CREATE_WITH_INPUT_WITH,t.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD=i.block.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD,t.LISTS_CREATE_WITH_ITEM_TITLE=i.block.LISTS_CREATE_WITH_ITEM_TITLE,(0,s.installBuiltinHelpInfo)(e);const r="lists_length",a=pxt.blocks.getBlockDefinition(r);t.LISTS_LENGTH_TITLE=a.block.LISTS_LENGTH_TITLE,o.Blocks[r].init=function(){this.jsonInit({message0:t.LISTS_LENGTH_TITLE,args0:[{type:"input_value",name:"VALUE",check:["Array"],ariaLabelText:lf("list to check")}],output:"Number",outputShape:n.provider.SHAPES.ROUND})},(0,s.installBuiltinHelpInfo)(r);const l="lists_index_get",c=pxt.blocks.getBlockDefinition(l);o.Blocks.lists_index_get={init:function(){this.jsonInit({message0:c.block.message0,args0:[{type:"input_value",name:"LIST",check:"Array",ariaLabelText:lf("list to check")},{type:"input_value",name:"INDEX",check:"Number",ariaLabelText:lf("position within list")}],colour:pxt.toolbox.blockColors.arrays,outputShape:n.provider.SHAPES.ROUND,inputsInline:!0}),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0),(0,s.setBuiltinHelpInfo)(this,l)}};const h="lists_index_set",u=pxt.blocks.getBlockDefinition(h);o.Blocks[h]={init:function(){this.jsonInit({message0:u.block.message0,args0:[{type:"input_value",name:"LIST",check:"Array",ariaLabelText:lf("list to change")},{type:"input_value",name:"INDEX",check:"Number",ariaLabelText:lf("position within list")},{type:"input_value",name:"VALUE",check:null,ariaLabelText:lf("value to set")}],previousStatement:null,nextStatement:null,colour:pxt.toolbox.blockColors.arrays,inputsInline:!0}),(0,s.setBuiltinHelpInfo)(this,h)}}}},{"../constants":18,"../help":74,blockly:192}],5:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.initLogic=void 0;const o=t("blockly"),s=t("../help");i.initLogic=function(){const t=o.Msg,e="controls_if",i=pxt.blocks.getBlockDefinition(e),n=i.tooltip;t.CONTROLS_IF_MSG_IF=i.block.CONTROLS_IF_MSG_IF,t.CONTROLS_IF_MSG_THEN=i.block.CONTROLS_IF_MSG_THEN,t.CONTROLS_IF_MSG_ELSE=i.block.CONTROLS_IF_MSG_ELSE,t.CONTROLS_IF_MSG_ELSEIF=i.block.CONTROLS_IF_MSG_ELSEIF,t.CONTROLS_IF_TOOLTIP_1=n.CONTROLS_IF_TOOLTIP_1,t.CONTROLS_IF_TOOLTIP_2=n.CONTROLS_IF_TOOLTIP_2,t.CONTROLS_IF_TOOLTIP_3=n.CONTROLS_IF_TOOLTIP_3,t.CONTROLS_IF_TOOLTIP_4=n.CONTROLS_IF_TOOLTIP_4,(0,s.installBuiltinHelpInfo)(e);const r="logic_compare",a=pxt.blocks.getBlockDefinition(r).tooltip;t.LOGIC_COMPARE_TOOLTIP_EQ=a.LOGIC_COMPARE_TOOLTIP_EQ,t.LOGIC_COMPARE_TOOLTIP_NEQ=a.LOGIC_COMPARE_TOOLTIP_NEQ,t.LOGIC_COMPARE_TOOLTIP_LT=a.LOGIC_COMPARE_TOOLTIP_LT,t.LOGIC_COMPARE_TOOLTIP_LTE=a.LOGIC_COMPARE_TOOLTIP_LTE,t.LOGIC_COMPARE_TOOLTIP_GT=a.LOGIC_COMPARE_TOOLTIP_GT,t.LOGIC_COMPARE_TOOLTIP_GTE=a.LOGIC_COMPARE_TOOLTIP_GTE,(0,s.installBuiltinHelpInfo)(r);const l="logic_operation",c=pxt.blocks.getBlockDefinition(l),h=c.tooltip;t.LOGIC_OPERATION_AND=c.block.LOGIC_OPERATION_AND,t.LOGIC_OPERATION_OR=c.block.LOGIC_OPERATION_OR,t.LOGIC_OPERATION_TOOLTIP_AND=h.LOGIC_OPERATION_TOOLTIP_AND,t.LOGIC_OPERATION_TOOLTIP_OR=h.LOGIC_OPERATION_TOOLTIP_OR,(0,s.installBuiltinHelpInfo)(l);const u="logic_negate",d=pxt.blocks.getBlockDefinition(u);t.LOGIC_NEGATE_TITLE=d.block.LOGIC_NEGATE_TITLE,(0,s.installBuiltinHelpInfo)(u);const p="logic_boolean",g=pxt.blocks.getBlockDefinition(p);t.LOGIC_BOOLEAN_TRUE=g.block.LOGIC_BOOLEAN_TRUE,t.LOGIC_BOOLEAN_FALSE=g.block.LOGIC_BOOLEAN_FALSE,(0,s.installBuiltinHelpInfo)(p)}},{"../help":74,blockly:192}],6:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.initLoops=void 0;const o=t("blockly"),s=t("../help"),n=t("../plugins/duplicateOnDrag");i.initLoops=function(){const t=o.Msg,e="controls_repeat_ext",i=pxt.blocks.getBlockDefinition(e);t.CONTROLS_REPEAT_TITLE=i.block.CONTROLS_REPEAT_TITLE,t.CONTROLS_REPEAT_INPUT_DO=i.block.CONTROLS_REPEAT_INPUT_DO,(0,s.installBuiltinHelpInfo)(e);const r="device_while",a=pxt.blocks.getBlockDefinition(r);o.Blocks[r]={init:function(){this.jsonInit({message0:a.block.message0,args0:[{type:"input_value",name:"COND",check:"Boolean",ariaLabelText:lf("condition")}],previousStatement:null,nextStatement:null,colour:pxt.toolbox.getNamespaceColor("loops")}),this.appendStatementInput("DO").appendField(a.block.appendField),(0,s.setBuiltinHelpInfo)(this,r)}};const l="pxt_controls_for",c=pxt.blocks.getBlockDefinition(l);o.Blocks[l]={init:function(){this.jsonInit({message0:c.block.message0,args0:[{type:"input_value",name:"VAR",variable:c.block.variable,check:"Variable"},{type:"input_value",name:"TO",check:"Number",ariaLabelText:lf("ending number")}],previousStatement:null,nextStatement:null,colour:pxt.toolbox.getNamespaceColor("loops"),inputsInline:!0}),this.appendStatementInput("DO").appendField(c.block.appendField);let t=this;(0,s.setHelpResources)(this,l,c.name,function(){return pxt.U.rlf(c.tooltip,t.getInputTargetBlock("VAR")?t.getInputTargetBlock("VAR").getField("VAR").getText():"")},c.url,String(pxt.toolbox.getNamespaceColor("loops")))},getVars:function(){return[this.getField("VAR").getText()]},renameVar:function(t,e){const i=this.getField("VAR");o.Names.equals(t,i.getText())&&i.setValue(e)}},(0,n.setDuplicateOnDrag)(l,"VAR");const h="controls_simple_for",u=pxt.blocks.getBlockDefinition(h);o.Blocks[h]={init:function(){this.jsonInit({message0:u.block.message0,args0:[{type:"field_variable",name:"VAR",variable:u.block.variable,variableTypes:[""]},{type:"input_value",name:"TO",check:"Number",ariaLabelText:lf("ending number")}],previousStatement:null,nextStatement:null,colour:pxt.toolbox.getNamespaceColor("loops"),inputsInline:!0}),this.appendStatementInput("DO").appendField(u.block.appendField);let t=this;(0,s.setHelpResources)(this,h,u.name,function(){return pxt.U.rlf(u.tooltip,t.getField("VAR").getText())},u.url,String(pxt.toolbox.getNamespaceColor("loops")))},getVars:function(){return[this.getField("VAR").getText()]},renameVar:function(t,e){const i=this.getField("VAR");o.Names.equals(t,i.getText())&&i.setValue(e)},customContextMenu:function(t){var e,i;if(!this.isCollapsed()&&!(null===(i=null===(e=this.workspace)||void 0===e?void 0:e.options)||void 0===i?void 0:i.readOnly)){let e={enabled:!0},i=this.getField("VAR").getText();e.text=lf("Create 'get {0}'",i);let s=o.utils.xml.createElement("field");s.textContent=i,s.setAttribute("name","VAR");let n=o.utils.xml.createElement("block");n.setAttribute("type","variables_get"),n.appendChild(s),e.callback=o.ContextMenu.callbackFactory(this,n),t.push(e)}}};const d=pxt.blocks.getBlockDefinition(ts.pxtc.TS_BREAK_TYPE);o.Blocks[pxtc.TS_BREAK_TYPE]={init:function(){const t=pxt.toolbox.getNamespaceColor("loops");this.jsonInit({message0:d.block.message0,inputsInline:!0,previousStatement:null,nextStatement:null,colour:t}),(0,s.setHelpResources)(this,ts.pxtc.TS_BREAK_TYPE,d.name,d.tooltip,d.url,t,void 0,void 0,!1)}};const p=pxt.blocks.getBlockDefinition(ts.pxtc.TS_CONTINUE_TYPE);o.Blocks[pxtc.TS_CONTINUE_TYPE]={init:function(){const t=pxt.toolbox.getNamespaceColor("loops");this.jsonInit({message0:p.block.message0,inputsInline:!0,previousStatement:null,nextStatement:null,colour:t}),(0,s.setHelpResources)(this,ts.pxtc.TS_CONTINUE_TYPE,p.name,p.tooltip,p.url,t,void 0,void 0,!1)}};const g="#cccccc";o.Blocks[pxtc.COLLAPSED_BLOCK]={init:function(){this.jsonInit({message0:"...",inputsInline:!0,previousStatement:null,nextStatement:null,colour:g}),(0,s.setHelpResources)(this,ts.pxtc.COLLAPSED_BLOCK,"...",lf("a few blocks"),void 0,g,void 0,void 0,!1)}};const m="pxt_controls_for_of",_=pxt.blocks.getBlockDefinition(m);o.Blocks[m]={init:function(){this.jsonInit({message0:_.block.message0,args0:[{type:"input_value",name:"VAR",variable:_.block.variable,check:"Variable"},{type:"input_value",name:"LIST",check:["Array","String"],ariaLabelText:lf("list to iterate over")}],previousStatement:null,nextStatement:null,colour:pxt.toolbox.blockColors.loops,inputsInline:!0}),this.appendStatementInput("DO").appendField(_.block.appendField);let t=this;(0,s.setHelpResources)(this,m,_.name,function(){return pxt.Util.rlf(_.tooltip,t.getInputTargetBlock("VAR")?t.getInputTargetBlock("VAR").getField("VAR").getText():"")},_.url,String(pxt.toolbox.getNamespaceColor("loops")))}},(0,n.setDuplicateOnDrag)(m,"VAR");const f="controls_for_of",T=pxt.blocks.getBlockDefinition(f);o.Blocks[f]={init:function(){this.jsonInit({message0:T.block.message0,args0:[{type:"field_variable",name:"VAR",variable:T.block.variable,variableTypes:[""]},{type:"input_value",name:"LIST",check:"Array",ariaLabelText:lf("list to iterate over")}],previousStatement:null,nextStatement:null,colour:pxt.toolbox.blockColors.loops,inputsInline:!0}),this.appendStatementInput("DO").appendField(T.block.appendField);let t=this;(0,s.setHelpResources)(this,f,T.name,function(){return pxt.Util.rlf(T.tooltip,t.getField("VAR").getText())},T.url,String(pxt.toolbox.getNamespaceColor("loops")))}}}},{"../help":74,"../plugins/duplicateOnDrag":107,blockly:192}],7:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.initMathRoundBlock=i.initMathOpBlock=i.initMath=void 0;const o=t("blockly"),s=t("../help"),n=t("../constants"),r=t("../composableMutations"),a=t("../fields/field_dropdown");function l(){const t=pxt.blocks.MATH_FUNCTIONS.unary.concat(pxt.blocks.MATH_FUNCTIONS.binary).concat(pxt.blocks.MATH_FUNCTIONS.infix),e="math_js_op",i=pxt.blocks.getBlockDefinition(e);function l(t,e){const i=t.appendValueInput("ARG"+(e?1:0));i.setCheck("Number"),i.setAriaLabelProvider(e=>t.getInput("ARG1")?"ARG0"===e.name?lf("first value"):lf("second value"):lf("value")),e&&(i.connection.setShadowDom(function(){if(!c){c=document.createElement("shadow"),c.setAttribute("type","math_number");const t=document.createElement("field");t.setAttribute("name","NUM"),t.textContent="0",c.appendChild(t)}return c}()),i.connection.respawnShadow_())}function h(t,e){let i=!!t.getInput("ARG1");e?(i&&t.moveInputBefore("op_dropdown","ARG1"),t.moveInputBefore("ARG0","op_dropdown")):(i&&t.moveInputBefore("ARG0","ARG1"),t.moveInputBefore("op_dropdown","ARG0"))}o.Blocks[e]={init:function(){const e=this;e.setPreviousStatement(!1),e.setNextStatement(!1),e.setOutput(!0,"Number"),e.setOutputShape(n.provider.SHAPES.ROUND),e.setInputsInline(!0);e.appendDummyInput("op_dropdown").appendField(new a.FieldDropdown(t.map(t=>[i.block[t],t]),t=>function(t,e){!function(t){return-1!==pxt.blocks.MATH_FUNCTIONS.unary.indexOf(t)}(e)?t.getInput("ARG1")||l(t,!0):t.removeInput("ARG1",!0);return h(t,function(t){return-1!==pxt.blocks.MATH_FUNCTIONS.infix.indexOf(t)}(e)),e}(e,t)),"OP"),l(e,!1),(0,r.appendMutation)(e,{mutationToDom:t=>{let i;for(let t=0;t<e.inputList.length;t++){const o=e.inputList[t];if("op_dropdown"===o.name){i=!1;break}if("ARG0"===o.name){i=!0;break}}return t.setAttribute("op-type",(e.getInput("ARG1")?i?"infix":"binary":"unary").toString()),t},domToMutation:t=>{if(t.hasAttribute("op-type")){const i=t.getAttribute("op-type");"unary"!=i&&l(e,!0),h(e,"infix"===i)}}})}},(0,s.installHelpResources)(e,i.name,function(t){return i.tooltip[t.getFieldValue("OP")]},i.url,pxt.toolbox.getNamespaceColor(i.category))}let c;function h(){const t=pxt.blocks.ROUNDING_FUNCTIONS,e="math_js_round",i=pxt.blocks.getBlockDefinition(e);o.Blocks[e]={init:function(){const e=this;e.setPreviousStatement(!1),e.setNextStatement(!1),e.setOutput(!0,"Number"),e.setOutputShape(n.provider.SHAPES.ROUND),e.setInputsInline(!0);e.appendDummyInput("round_dropdown").appendField(new a.FieldDropdown(t.map(t=>[i.block[t],t])),"OP"),function(t){const e=t.appendValueInput("ARG0");e.setCheck("Number"),e.setAriaLabelProvider(lf("value"))}(e)}},(0,s.installHelpResources)(e,i.name,function(t){return i.tooltip[t.getFieldValue("OP")]},i.url,pxt.toolbox.getNamespaceColor(i.category))}i.initMath=function(t){const e="math_op2",i=pxt.blocks.getBlockDefinition(e),r=i.tooltip;o.Blocks[e]={init:function(){this.jsonInit({message0:i.block.message0,args0:[{type:"field_dropdown",name:"op",options:[[i.block.optionMin,"min"],[i.block.optionMax,"max"]]},{type:"input_value",name:"x",check:"Number",ariaLabelText:lf("first value")},{type:"input_value",name:"y",check:"Number",ariaLabelText:lf("second value")}],inputsInline:!0,output:"Number",outputShape:n.provider.SHAPES.ROUND,colour:pxt.toolbox.getNamespaceColor("math")}),(0,s.setHelpResources)(this,e,i.name,function(t){return r[t.getFieldValue("op")]},i.url,pxt.toolbox.getNamespaceColor(i.category))},codeCard:(0,s.attachCardInfo)(t,"Math.min")};const a="math_op3",c=pxt.blocks.getBlockDefinition(a);o.Blocks[a]={init:function(){this.jsonInit({message0:c.block.message0,args0:[{type:"input_value",name:"x",check:"Number",ariaLabelText:lf("value")}],inputsInline:!0,output:"Number",outputShape:n.provider.SHAPES.ROUND,colour:pxt.toolbox.getNamespaceColor("math")}),(0,s.setBuiltinHelpInfo)(this,a)},codeCard:(0,s.attachCardInfo)(t,"Math.abs")},["math_number","math_integer","math_whole_number","math_number_minmax"].forEach(t=>{const e=pxt.blocks.getBlockDefinition(t);(0,s.installHelpResources)(t,e.name,e.tooltip,e.url,"#fff","#fff","#fff")});const u=o.Msg,d="math_arithmetic",p=pxt.blocks.getBlockDefinition(d),g=p.tooltip;u.MATH_ADDITION_SYMBOL=p.block.MATH_ADDITION_SYMBOL,u.MATH_SUBTRACTION_SYMBOL=p.block.MATH_SUBTRACTION_SYMBOL,u.MATH_MULTIPLICATION_SYMBOL=p.block.MATH_MULTIPLICATION_SYMBOL,u.MATH_DIVISION_SYMBOL=p.block.MATH_DIVISION_SYMBOL,u.MATH_POWER_SYMBOL=p.block.MATH_POWER_SYMBOL,(0,s.installHelpResources)(d,p.name,function(t){return g[t.getFieldValue("OP")]},p.url,pxt.toolbox.getNamespaceColor(p.category));const m="math_modulo",_=pxt.blocks.getBlockDefinition(m);u.MATH_MODULO_TITLE=_.block.MATH_MODULO_TITLE,(0,s.installBuiltinHelpInfo)(m),l(),h()},i.initMathOpBlock=l,i.initMathRoundBlock=h},{"../composableMutations":17,"../constants":18,"../fields/field_dropdown":34,"../help":74,blockly:192}],8:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.initOnStart=void 0;const o=t("blockly"),s=t("../fields"),n=t("../help");i.initOnStart=function(){const t=pxt.blocks.getBlockDefinition(ts.pxtc.ON_START_TYPE);if(o.Blocks[ts.pxtc.ON_START_TYPE]={init:function(){var e;let i=null===(e=pxt.appTarget.runtime)||void 0===e?void 0:e.onStartColor;i&&(i=pxt.toolbox.getAccessibleBackground(i)),this.jsonInit({message0:t.block.message0,args0:[{type:"input_dummy"},{type:"input_statement",name:"HANDLER"}],colour:i||pxt.toolbox.getNamespaceColor("loops")}),(0,n.setHelpResources)(this,ts.pxtc.ON_START_TYPE,t.name,t.tooltip,t.url,i||pxt.toolbox.getNamespaceColor("loops"),void 0,void 0,!!pxt.appTarget.runtime&&pxt.appTarget.runtime.onStartUnDeletable)}},o.Blocks[pxtc.TS_STATEMENT_TYPE]={init:function(){let t,e,i=this;i.setColour("#717171"),i.setPreviousStatement(!0),i.setNextStatement(!0),i.setInputsInline(!1),i.domToMutation=t=>{const o=parseInt(t.getAttribute("numlines"));i.declaredVariables=t.getAttribute("declaredvars"),e=[];for(let i=0;i<o;i++){const o=t.getAttribute("line"+i);e.push(o)}i.setPythonEnabled(!1)},i.mutationToDom=()=>{let t=document.createElement("mutation");return e&&(e.forEach((e,i)=>t.setAttribute("line"+i,e)),t.setAttribute("numlines",e.length.toString())),i.declaredVariables&&t.setAttribute("declaredvars",this.declaredVariables),t},i.setPythonEnabled=o=>{if(t!==o){for(;i.inputList.length;)i.removeInput(i.inputList[0].name);t=o,o?(i.appendDummyInput().appendField(pxt.Util.lf("<python code>"),"LINE0"),i.setTooltip(lf("A Python statement that could not be converted to blocks"))):(e.forEach((t,e)=>{i.appendDummyInput().appendField(t,"LINE"+e)}),i.setTooltip(lf("A JavaScript statement that could not be converted to blocks")))}},i.getLines=()=>e,i.setEditable(!1),(0,n.setHelpResources)(this,pxtc.TS_STATEMENT_TYPE,lf("JavaScript statement"),lf("A JavaScript statement that could not be converted to blocks"),"/blocks/javascript-blocks","#717171")}},o.Blocks[pxtc.TS_OUTPUT_TYPE]={init:function(){let t=this;t.setColour("#717171"),t.setPreviousStatement(!1),t.setNextStatement(!1),t.setOutput(!0),t.setEditable(!1),t.appendDummyInput().appendField(new s.FieldTsExpression(""),"EXPRESSION"),t.setPythonEnabled=e=>{t.getField("EXPRESSION").setPythonEnabled(e),e?t.setTooltip(lf("A Python expression that could not be converted to blocks")):t.setTooltip(lf("A JavaScript expression that could not be converted to blocks"))},(0,n.setHelpResources)(t,pxtc.TS_OUTPUT_TYPE,lf("JavaScript expression"),lf("A JavaScript expression that could not be converted to blocks"),"/blocks/javascript-blocks","#717171")}},pxt.appTarget.runtime&&pxt.appTarget.runtime.pauseUntilBlock){const t=pxt.appTarget.runtime.pauseUntilBlock,e=pxt.blocks.getBlockDefinition(ts.pxtc.PAUSE_UNTIL_TYPE);o.Blocks[pxtc.PAUSE_UNTIL_TYPE]={init:function(){const i=t.color||pxt.toolbox.getNamespaceColor("loops");this.jsonInit({message0:e.block.message0,args0:[{type:"input_value",name:"PREDICATE",check:"Boolean",ariaLabelText:lf("condition")}],inputsInline:!0,previousStatement:null,nextStatement:null,colour:i}),(0,n.setHelpResources)(this,ts.pxtc.PAUSE_UNTIL_TYPE,e.name,e.tooltip,e.url,i,void 0,void 0,!1)}}}}},{"../fields":72,"../help":74,blockly:192}],9:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.initText=void 0;const o=t("blockly"),s=t("../help"),n=t("../constants");i.initText=function(){const t=pxt.blocks.getBlockDefinition("text");(0,s.installHelpResources)("text",t.name,t.tooltip,t.url,"#fff","#fff","#fff");const e="text_length",i=pxt.blocks.getBlockDefinition(e);o.Msg.TEXT_LENGTH_TITLE=i.block.TEXT_LENGTH_TITLE,o.Blocks[e].init=function(){this.jsonInit({message0:o.Msg.TEXT_LENGTH_TITLE,args0:[{type:"input_value",name:"VALUE",check:["String"],ariaLabelText:lf("value")}],output:"Number",outputShape:n.provider.SHAPES.ROUND})},(0,s.installBuiltinHelpInfo)(e);const r="text_join",a=pxt.blocks.getBlockDefinition(r);o.Msg.TEXT_JOIN_TITLE_CREATEWITH=a.block.TEXT_JOIN_TITLE_CREATEWITH,(0,s.installBuiltinHelpInfo)(r)}},{"../constants":18,"../help":74,blockly:192}],10:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.createVariablesFlyoutCategory=i.initVariables=void 0;const o=t("blockly"),s=t("../toolbox"),n=t("../help");i.initVariables=function(){let t=lf("{id:var}item");const e=o.Msg,i="variables_get",s=pxt.blocks.getBlockDefinition(i);e.VARIABLES_GET_CREATE_SET=s.block.VARIABLES_GET_CREATE_SET,o.Blocks[i]={init:function(){this.jsonInit({type:"variables_get",message0:"%1",args0:[{type:"field_variable",name:"VAR",variable:"%{BKY_VARIABLES_DEFAULT_NAME}",variableTypes:[""]}],output:null,style:"variable_blocks",helpUrl:"%{BKY_VARIABLES_GET_HELPURL}",tooltip:"%{BKY_VARIABLES_GET_TOOLTIP}",extensions:["contextMenu_variableSetterGetter"]}),(0,n.setBuiltinHelpInfo)(this,i)}},(0,n.installBuiltinHelpInfo)("variables_get_reporter"),e.RENAME_VARIABLE=lf("Rename variable..."),e.DELETE_VARIABLE=lf('Delete the "%1" variable'),e.DELETE_VARIABLE_CONFIRMATION=lf('Delete %1 uses of the "%2" variable?'),e.NEW_VARIABLE_DROPDOWN=lf("New variable...");const r="variables_set",a=pxt.blocks.getBlockDefinition(r);e.VARIABLES_SET=a.block.VARIABLES_SET,e.VARIABLES_DEFAULT_NAME=t,e.VARIABLES_SET_CREATE_GET=lf("Create 'get %1'"),o.Blocks[r]={init:function(){this.jsonInit({type:"variables_set",message0:"%{BKY_VARIABLES_SET}",args0:[{type:"field_variable",name:"VAR",variable:"%{BKY_VARIABLES_DEFAULT_NAME}",variableTypes:[""]},{type:"input_value",name:"VALUE",ariaLabelText:lf("value to set")}],previousStatement:null,nextStatement:null,style:"variable_blocks",tooltip:"%{BKY_VARIABLES_SET_TOOLTIP}",helpUrl:"%{BKY_VARIABLES_SET_HELPURL}",extensions:["contextMenu_variableSetterGetter"]}),(0,n.setBuiltinHelpInfo)(this,r)}};const l="variables_change",c=pxt.blocks.getBlockDefinition(l);o.Blocks[l]={init:function(){this.jsonInit({message0:c.block.message0,args0:[{type:"field_variable",name:"VAR",variable:t,variableTypes:[""]},{type:"input_value",name:"VALUE",check:"Number",ariaLabelText:lf("amount to change by")}],inputsInline:!0,previousStatement:null,nextStatement:null,colour:pxt.toolbox.getNamespaceColor("variables")}),(0,n.setBuiltinHelpInfo)(this,l)},customContextMenu:function(t){var e,i;if(!(null===(i=null===(e=this.workspace)||void 0===e?void 0:e.options)||void 0===i?void 0:i.readOnly)&&!this.isInFlyout){let e={enabled:this.workspace.remainingCapacity()>0},i=this.getField("VAR").getText();e.text=lf("Create 'get {0}'",i);let s=o.utils.xml.createElement("field");s.textContent=i,s.setAttribute("name","VAR");let n=o.utils.xml.createElement("block");n.setAttribute("type","variables_get"),n.appendChild(s),e.callback=o.ContextMenu.callbackFactory(this,n),t.push(e)}}},e.NEW_VARIABLE_TITLE=lf("New variable name:"),e.RENAME_VARIABLE_TITLE=lf("Rename all '%1' variables to:")},i.createVariablesFlyoutCategory=function(t){let e=[];if(!pxt.appTarget.appTheme.hideFlyoutHeadings){const t=(0,s.createFlyoutHeadingLabel)(lf("Variables"),pxt.toolbox.getNamespaceColor("variables"),pxt.toolbox.getNamespaceIcon("variables"));e.push(t)}const i=document.createElement("button");return i.setAttribute("text",lf("Make a Variable...")),i.setAttribute("callbackKey","CREATE_VARIABLE"),t.registerButtonCallback("CREATE_VARIABLE",function(t){o.Variables.createVariableButtonHandler(t.getTargetWorkspace())}),e.push(i),e=e.concat(function(t){const e=t.getVariableMap().getVariablesOfType(""),i=[];if(e.length>0){const t=e[e.length-1];e.sort(o.Variables.compareByName);for(let t=0;t<e.length;t++){const n=e[t];if(o.Blocks.variables_get){const t=(0,s.mkVariableFieldBlock)("variables_get",n.getId(),n.getType(),n.getName(),!1);t.setAttribute("gap","8"),i.push(t)}}if(i[i.length-1].setAttribute("gap","24"),(o.Blocks.variables_change||o.Blocks.variables_set)&&i.unshift((0,s.createFlyoutGroupLabel)(lf("Your Variables"))),o.Blocks.variables_change){const e=o.Blocks.variables_get?20:8,n=(0,s.mkVariableFieldBlock)("variables_change",t.getId(),t.getType(),t.getName(),!1);n.setAttribute("gap",e+"");{const t=o.utils.xml.createElement("value");t.setAttribute("name","VALUE");const e=o.utils.xml.createElement("shadow");e.setAttribute("type","math_number"),t.appendChild(e);const i=o.utils.xml.createElement("field");i.setAttribute("name","NUM"),i.appendChild(document.createTextNode("1")),e.appendChild(i),n.appendChild(t)}i.unshift(n)}if(o.Blocks.variables_set){const e=o.Blocks.variables_change?8:24,n=(0,s.mkVariableFieldBlock)("variables_set",t.getId(),t.getType(),t.getName(),!1);n.setAttribute("gap",e+"");{const t=o.utils.xml.createElement("value");t.setAttribute("name","VALUE");const e=o.utils.xml.createElement("shadow");e.setAttribute("type","math_number"),t.appendChild(e);const i=o.utils.xml.createElement("field");i.setAttribute("name","NUM"),i.appendChild(document.createTextNode("0")),e.appendChild(i),n.appendChild(t)}i.unshift(n)}}return i}(t)),e}},{"../help":74,"../toolbox":154,blockly:192}],11:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.renderCodeCard=void 0;const o=t("./render");i.renderCodeCard=function(t,e={}){const i=t.url?/^[^:]+:\/\//.test(t.url)?t.url:"/"+t.url.replace(/^\.?\/?/,""):t.youTubeId?`https://youtu.be/${t.youTubeId}`:void 0,s=!!i,n=(t,e,i="div",o="")=>{let s=document.createElement(i);return e&&(s.className=e),t&&t.appendChild(s),o&&s.appendChild(document.createTextNode(o+"")),s};let r=n(null,"ui "+(t.style||"card")+" "+(t.color||"")+(s?" link":""),s?"a":"div");if(e.role&&r.setAttribute("role",e.role),"option"===e.role&&r.setAttribute("aria-selected","true"),s){const t=r;t.href=i,/^https?:\/\//.test(i)&&(t.target="_blank")}if(!e.hideHeader&&t.header){let e=n(r,"ui content "+(t.responsive?" tall desktop only":""));t.header&&n(e,"description","span",t.header)}const a=(e.shortName?t.shortName:"")||t.name;let l=n(r,"ui image"+(t.responsive?" tall landscape only":""));if(t.label){let e=document.createElement("label");e.className=`ui ${t.labelClass?t.labelClass:"orange right ribbon"} label`,e.textContent=t.label,l.appendChild(e)}if(t.blocksXml){const e=(0,o.render)(t.blocksXml);if(e){let t=n(l,"");t.setAttribute("style","width:100%; min-height:10em"),t.appendChild(e)}else pxt.error("failed to render blocks"),pxt.debug(t.blocksXml)}if(t.typeScript){let e=document.createElement("pre");e.appendChild(document.createTextNode(t.typeScript)),l.appendChild(e)}if(t.imageUrl||(t.youTubeId?`https://img.youtube.com/vi/${t.youTubeId}/0.jpg`:void 0)){let e=document.createElement("div");e.className="ui imagewrapper";let i=document.createElement("div");i.className="ui cardimage",i.style.backgroundImage=`url("${t.imageUrl}")`,i.title=a,i.setAttribute("role","presentation"),e.appendChild(i),l.appendChild(e)}if("file"==t.cardType){let t=n(r,"ui fileimage");l.appendChild(t)}if(a||t.description){let e=n(r,"ui content");if(a&&(r.setAttribute("aria-label",a),n(e,"header","div",a)),t.description){const i=n(e,"ui description"),o=/((?:\.{1,3})|[\!\?…])/.exec(t.description);let s=t.description+".";if(o){const e=o[1];s=t.description.split(e)[0]+e}i.appendChild(document.createTextNode(s))}}if(t.time){let e=n(r,"meta");if(t.time){n(e,"date","span").appendChild(document.createTextNode(pxt.Util.timeSince(t.time)))}}if(t.extracontent){n(r,"extra content","div").appendChild(document.createTextNode(t.extracontent))}return r}},{"./render":152}],12:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.workerOpAsync=i.compileExpression=i.AUTO_DISABLED_REASON=i.callKey=i.compileAsync=i.compileBlockAsync=i.PXT_WARNING_ID=void 0;const o=t("blockly"),s=t("./environment"),n=t("./typeChecker"),r=t("./util"),a=t("../toolbox"),l=t("../legacyMutations"),c=t("./variables"),h=t("../fields"),u=t("../plugins/duplicateOnDrag"),d=t("../plugins/functions/constants"),p=t("../plugins/colorpicker");function g(t,e){if(t.type===ts.pxtc.ON_START_TYPE)return 0;const i=e.stdCallTable[t.type],o=m(e,t),s=1+ts.pxtc.Util.codalHash16(o);return i&&i.attrs.afterOnStart?s:-s}function m(t,e){if(e.type==ts.pxtc.ON_START_TYPE)return JSON.stringify({name:ts.pxtc.ON_START_TYPE});if(e.type==ts.pxtc.FUNCTION_DEFINITION_TYPE)return JSON.stringify({type:"function",name:e.getFieldValue("function_name")});return JSON.stringify(_(e)).replace(/"id"\s*:\s*"[^"]+"/g,"")}function _(t){const e=[],i=[];for(const s of t.inputList){for(const t of s.fieldRow)t.name&&e.push(t.getText());s.type===o.inputs.inputTypes.VALUE&&(s.connection.targetBlock()?i.push(_(s.connection.targetBlock())):i.push(null))}return{type:t.type,fields:e,inputs:i}}function f(t,e){t.setDisabledReason(!e,i.AUTO_DISABLED_REASON);const o=t.getDescendants(!1);for(const t of o)t.setDisabledReason(!e,i.AUTO_DISABLED_REASON)}function T(t){t.setDisabledReason(!1,i.AUTO_DISABLED_REASON),t.setDisabledReason(!1,o.constants.MANUALLY_DISABLED),t.setDisabledReason(!1,"ORPHANED_BLOCK")}function b(t,e){if(e.isInsertionMarker())return[];let i;const o=[];switch(t.stats[e.type]=(t.stats[e.type]||0)+1,O(e,o),e.type){case"controls_if":i=function(t,e,i){let o=[];for(let s=0;s<=e.elseifCount_;++s){let n=E(t,(0,r.getInputTargetBlock)(t,e,"IF"+s),i),a=y(t,(0,r.getInputTargetBlock)(t,e,"DO"+s)),l=pxt.blocks.mkText("if (");s>0&&(l=pxt.blocks.mkText("else if ("),l.glueToBlock=pxt.blocks.GlueMode.WithSpace),(0,r.append)(o,[l,n,pxt.blocks.mkText(")"),a])}if(e.elseCount_){let i=pxt.blocks.mkText("else");i.glueToBlock=pxt.blocks.GlueMode.WithSpace,(0,r.append)(o,[i,y(t,(0,r.getInputTargetBlock)(t,e,"ELSE"))])}return o}(t,e,o);break;case"pxt_controls_for":case"controls_for":case"controls_simple_for":i=function(t,e,i){let o=(0,r.getInputTargetBlock)(t,e,"TO"),s=(0,r.getInputTargetBlock)(t,e,"DO"),a=(0,r.getInputTargetBlock)(t,e,"BY"),l=(0,r.getInputTargetBlock)(t,e,"FROM"),c=!a||a.type.match(/^math_number/)&&1==V(a),h=(0,n.lookup)(t,e,(0,r.getLoopVariableField)(t,e).getField("VAR").getText());return[pxt.blocks.mkText("for (let "+h.escapedName+" = "),l?E(t,l,i):pxt.blocks.mkText("0"),pxt.blocks.mkText("; "),pxt.blocks.mkInfix(pxt.blocks.mkText(h.escapedName),"<=",E(t,o,i)),pxt.blocks.mkText("; "),c?pxt.blocks.mkText(h.escapedName+"++"):pxt.blocks.mkInfix(pxt.blocks.mkText(h.escapedName),"+=",E(t,a,i)),pxt.blocks.mkText(")"),y(t,s)]}(t,e,o);break;case"pxt_controls_for_of":case"controls_for_of":i=function(t,e,i){let o,s=(0,r.getInputTargetBlock)(t,e,"LIST"),a=(0,r.getInputTargetBlock)(t,e,"DO");o=s&&"placeholder"!==s.type?E(t,s,i):pxt.blocks.mkText("[0]");let l=(0,n.lookup)(t,e,(0,r.getLoopVariableField)(t,e).getField("VAR").getText());return[pxt.blocks.mkText("for (let "+l.escapedName+" of "),o,pxt.blocks.mkText(")"),y(t,a)]}(t,e,o);break;case"variables_set":i=[C(t,e,o)];break;case"variables_change":i=[I(t,e,o)];break;case"controls_repeat_ext":i=function(t,e,i){let o=E(t,(0,r.getInputTargetBlock)(t,e,"TIMES"),i),s=y(t,(0,r.getInputTargetBlock)(t,e,"DO")),a=i=>!(0,n.lookup)(t,e,i),l="index";for(let t=2;!a(l);t++)l="index"+t;return[pxt.blocks.mkText("for (let "+l+" = 0; "),pxt.blocks.mkInfix(pxt.blocks.mkText(l),"<",o),pxt.blocks.mkText("; "+l+"++)"),s]}(t,e,o);break;case"device_while":i=function(t,e,i){let o=E(t,(0,r.getInputTargetBlock)(t,e,"COND"),i),s=y(t,(0,r.getInputTargetBlock)(t,e,"DO"));return[pxt.blocks.mkText("while ("),o,pxt.blocks.mkText(")"),s]}(t,e,o);break;case"procedures_defnoreturn":i=function(t,e){const i=(0,r.escapeVarName)(e.getFieldValue("NAME"),t,!0),o=(0,r.getInputTargetBlock)(t,e,"STACK");return[pxt.blocks.mkText("function "+i+"() "),y(t,o)]}(t,e);break;case"function_definition":i=function(t,e){const i=(0,r.escapeVarName)(e.getField("function_name").getText(),t,!0),o=(0,r.getInputTargetBlock)(t,e,"STACK"),s=e.getArguments().map(i=>{if("Array"==i.type){const o=(0,n.lookup)(t,e,i.name),s=(0,n.getConcreteType)(o.type),a=(null==s?void 0:s.type)&&"Array"!==s.type?s.type:"any[]";return`${(0,r.escapeVarName)(i.name,t)}: ${a}`}return`${(0,r.escapeVarName)(i.name,t)}: ${i.type}`}),a=(0,n.isFunctionRecursive)(t,e,!1);return[pxt.blocks.mkText(`function ${i} (${s.join(", ")})${a?": any":""}`),y(t,o)]}(t,e);break;case"procedures_callnoreturn":i=[L(t,e,o)];break;case"function_call":i=[x(t,e,o,!0)];break;case pxtc.TS_RETURN_STATEMENT_TYPE:i=[D(t,e,o)];break;case ts.pxtc.ON_START_TYPE:i=function(t,e){const i=(0,r.getInputTargetBlock)(t,e,"HANDLER"),o=y(t,i);pxt.appTarget.compile&&pxt.appTarget.compile.onStartText&&o&&o.children&&o.children.unshift(pxt.blocks.mkStmt(pxt.blocks.mkText(`// ${pxtc.ON_START_COMMENT}\n`)));return o}(t,e).children;break;case pxtc.TS_STATEMENT_TYPE:i=function(t,e){return e.getLines().map(t=>pxt.blocks.mkText(t+"\n"))}(0,e);break;case pxtc.PAUSE_UNTIL_TYPE:i=function(t,e,i){const o=pxt.appTarget.runtime&&pxt.appTarget.runtime.pauseUntilBlock;pxt.U.assert(!!o,"target has block enabled");const s=o.namespace,n=o.callName||"pauseUntil",r=B(t,e,{definitionName:"PREDICATE",actualName:"PREDICATE"},i),a=[pxt.blocks.mkGroup([pxt.blocks.mkText("() => "),r])];return s?[pxt.blocks.mkStmt(pxt.blocks.H.namespaceCall(s,n,a,!1))]:[pxt.blocks.mkStmt(pxt.blocks.H.mkCall(n,a,!1,!1))]}(t,e,o);break;case pxtc.TS_DEBUGGER_TYPE:i=function(t,e){if("1"==e.getFieldValue("ON_OFF"))return[pxt.blocks.mkText("debugger;\n")];return[]}(0,e);break;case pxtc.TS_BREAK_TYPE:i=[pxt.blocks.mkText("break;\n")];break;case pxtc.TS_CONTINUE_TYPE:i=[pxt.blocks.mkText("continue;\n")];break;default:i=t.stdCallTable[e.type]?[M(t,e,o)]:[pxt.blocks.mkStmt(E(t,e,o))]}let s=i[i.length-1];return s&&!s.id&&(s.id=e.id),o.length&&function(t,e){const i=[];for(const e of t)for(const t of e.split("\n"))i.push(pxt.blocks.mkText(`// ${t}`)),i.push(pxt.blocks.mkNewLine());for(const t of i.reverse())e.unshift(t)}(o,i),i.forEach(t=>{!(t.type===pxt.blocks.NT.Block||t.type===pxt.blocks.NT.Prefix&&pxt.Util.startsWith(t.op,"//"))||e.type==pxtc.ON_START_TYPE&&t.id||(t.id=e.id)}),i}function E(t,e,i){let o;if(pxt.U.assert(null!=e),t.stats[e.type]=(t.stats[e.type]||0)+1,O(e,i),"placeholder"!=e.type&&e.isEnabled&&e.isEnabled())switch(e.type){case"math_number":case"math_integer":case"math_whole_number":case"math_number_minmax":case p.COLOR_NUMBER_BLOCK_TYPE:o=function(t,e){return pxt.blocks.H.mkNumberLiteral(V(e))}(0,e);break;case"math_op2":o=function(t,e,i){let o=e.getFieldValue("op"),s=E(t,(0,r.getInputTargetBlock)(t,e,"x"),i),n=E(t,(0,r.getInputTargetBlock)(t,e,"y"),i);return pxt.blocks.H.mathCall(o,[s,n])}(t,e,i);break;case"math_op3":o=function(t,e,i){let o=E(t,(0,r.getInputTargetBlock)(t,e,"x"),i);return pxt.blocks.H.mathCall("abs",[o])}(t,e,i);break;case"math_arithmetic":case"logic_compare":case"logic_operation":o=function(t,e,i){let o=e.getFieldValue("OP"),s=(0,r.getInputTargetBlock)(t,e,"A"),a=(0,r.getInputTargetBlock)(t,e,"B"),l=[E(t,s,i),E(t,a,i)];c=o,-1!==["LT","LTE","GT","GTE","EQ","NEQ"].indexOf(c)&&U(t,s)&&U(t,a)&&pxt.blocks.flattenNode([l[0]]).output!==pxt.blocks.flattenNode([l[1]]).output&&(l=l.map(t=>pxt.blocks.H.mkParenthesizedExpression(pxt.blocks.mkGroup([t,pxt.blocks.mkText(" as any")]))));var c;const h=(0,n.returnType)(t,s);if((0,n.isStringType)(h)){if("EQ"==o)return pxt.blocks.H.mkSimpleCall("==",l);if("NEQ"==o)return pxt.blocks.H.mkSimpleCall("!=",l)}else if((0,n.isBooleanType)(h))return pxt.blocks.H.mkSimpleCall(N[o],l);return pxt.U.assert(o in N),pxt.blocks.H.mkSimpleCall(N[o],l)}(t,e,i);break;case"math_modulo":o=function(t,e,i){let o=(0,r.getInputTargetBlock)(t,e,"DIVIDEND"),s=(0,r.getInputTargetBlock)(t,e,"DIVISOR"),n=[E(t,o,i),E(t,s,i)];return pxt.blocks.H.mkSimpleCall("%",n)}(t,e,i);break;case"logic_boolean":o=function(t,e){return pxt.blocks.H.mkBooleanLiteral("TRUE"==e.getFieldValue("BOOL"))}(0,e);break;case"logic_negate":o=function(t,e,i){let o=E(t,(0,r.getInputTargetBlock)(t,e,"BOOL"),i);return pxt.blocks.mkPrefix("!",[pxt.blocks.H.mkParenthesizedExpression(o)])}(t,e,i);break;case"variables_get":case"variables_get_reporter":o=function(t,e){const i=e.getField("VAR").getText();let o=(0,n.lookup)(t,e,i);if(!o)return pxt.blocks.mkText(i);o.firstReference||(o.firstReference=e);return pxt.U.assert(null!=o&&null!=o.type),pxt.blocks.mkText(o.escapedName)}(t,e);break;case"text":case p.COLOR_STRING_BLOCK_TYPE:o=function(t,e){return pxt.blocks.H.mkStringLiteral(e.getFieldValue("TEXT"))}(0,e);break;case"text_join":o=function(t,e,i){let o,s=0;for(;;){const n=(0,r.getInputTargetBlock)(t,e,"ADD"+s);if(s++,!n){if(s<e.inputList.length)continue;break}const a=E(t,n,i);o=o?pxt.blocks.H.mkSimpleCall("+",[o,a]):0===n.type.indexOf("text")?a:pxt.blocks.H.mkSimpleCall("+",[pxt.blocks.H.mkStringLiteral(""),a])}if(!o)return pxt.blocks.H.mkStringLiteral("");return o}(t,e,i);break;case"lists_create_with":o=function(t,e,i){let o=e.inputList.map(e=>e.connection&&e.connection.targetBlock()?E(t,e.connection.targetBlock(),i):void 0).filter(t=>!!t);return pxt.blocks.H.mkArrayLiteral(o,!e.getInputsInline())}(t,e,i);break;case"lists_index_get":o=function(t,e,i){const o=(0,r.getInputTargetBlock)(t,e,"LIST"),s=E(t,o,i),n=E(t,(0,r.getInputTargetBlock)(t,e,"INDEX"),i);return pxt.blocks.mkGroup([s,pxt.blocks.mkText("["),n,pxt.blocks.mkText("]")])}(t,e,i);break;case"lists_index_set":o=function(t,e,i){const o=(0,r.getInputTargetBlock)(t,e,"LIST"),s=E(t,o,i),n=E(t,(0,r.getInputTargetBlock)(t,e,"INDEX"),i),a=E(t,(0,r.getInputTargetBlock)(t,e,"VALUE"),i),l=pxt.blocks.mkGroup([s,pxt.blocks.mkText("["),n,pxt.blocks.mkText("] = "),a]);return"lists_create_with"===o.type?v(l):l}(t,e,i);break;case"math_js_op":case"math_js_round":o=function(t,e,i){const o=e.getFieldValue("OP"),s=[E(t,(0,r.getInputTargetBlock)(t,e,"ARG0"),i)];e.getInput("ARG1")&&s.push(E(t,(0,r.getInputTargetBlock)(t,e,"ARG1"),i));return pxt.blocks.H.mathCall(o,s)}(t,e,i);break;case pxtc.TS_OUTPUT_TYPE:o=function(t,e){return pxt.blocks.mkText(e.getFieldValue("EXPRESSION").trim())}(0,e);break;case"argument_reporter_boolean":case"argument_reporter_number":case"argument_reporter_string":case"argument_reporter_array":case"argument_reporter_custom":o=function(t,e){const i=(0,r.escapeVarName)(e.getFieldValue("VALUE"),t);return pxt.blocks.mkText(i)}(t,e);break;case"function_call_output":o=x(t,e,i,!1);break;case p.COLOR_PICKER_BLOCK_TYPE:o=function(t,e,i){const o=e.getFieldValue("FORMAT");if("hex"===o)return pxt.blocks.H.namespaceCall("colorHelpers","hex",[E(t,(0,r.getInputTargetBlock)(t,e,"HEX_INPUT"),i)],!1);{const s=[];for(let o=0;o<4;o++){const n=e.getInput("INPUT"+o);n&&s.push(E(t,(0,r.getInputTargetBlock)(t,e,n.name),i))}return pxt.blocks.H.namespaceCall("colorHelpers",o,s,!1)}}(t,e,i);break;default:let s=t.stdCallTable[e.type];s?o=s.imageLiteral?A(t,e,s.imageLiteral,s.imageLiteralColumns,s.imageLiteralRows,s.namespace,s.f,(0,r.visibleParams)(s,(0,r.countOptionals)(e,s)).map(o=>B(t,e,o,i))):P(t,e,s,i):(pxt.reportError("blocks","unable to compile expression",{details:e.type}),o=(0,n.defaultValueForType)((0,n.returnType)(t,e)))}else{if("Array"===(0,n.find)((0,n.returnType)(t,e)).type){let i="lists_index_get"===e.getParent().type;if(!i){const o=t.stdCallTable[e.getParent().type];i=o&&o.isExpression}const s=pxt.blocks.mkText("[0]");o=i?s:v(s)}else o=(0,n.defaultValueForType)((0,n.returnType)(t,e))}return o.id=e.id,o}function y(t,e){let i=[],o=e;for(;e;)e.isEnabled()&&(0,r.append)(i,b(t,e)),e=e.getNextBlock();return o&&t.blockDeclarations[o.id]&&t.blockDeclarations[o.id].filter(t=>!t.alreadyDeclared).forEach(e=>{i.unshift(R(e,t.blocksInfo)),e.alreadyDeclared=s.BlockDeclarationType.Implicit}),pxt.blocks.mkBlock(i)}function v(t){const e=pxt.blocks.mkStmt(pxt.blocks.mkText(";"));return e.glueToBlock=pxt.blocks.GlueMode.NoSpace,pxt.blocks.mkGroup([e,t])}function C(t,e,i){let o=(0,r.getInputTargetBlock)(t,e,"VALUE"),a=(0,n.lookup)(t,e,e.getField("VAR").getText());let l=t.idToScope[e.id].declaredVars[a.name]===a&&!a.firstReference&&!a.alreadyDeclared;l&&(0,r.forEachChildExpression)(e,e=>{if("variables_get"===e.type){(0,n.lookup)(t,e,e.getField("VAR").getText())===a&&(l=!1)}},!0);let c=E(t,o,i),h=a.escapedName+" = ";if(a.isAssigned=!0,l){a.alreadyDeclared=s.BlockDeclarationType.Assigned;const e=(0,n.getConcreteType)(a.type);if(h=`let ${a.escapedName} = `,e){const i=(0,n.getConcreteType)((0,n.returnType)(t,o));e.type!==i.type&&(h=`let ${a.escapedName}: ${e.type} = `)}}else a.firstReference||(a.firstReference=e);return pxt.blocks.mkStmt(pxt.blocks.mkText(h),c)}function I(t,e,i){let o=(0,r.getInputTargetBlock)(t,e,"VALUE"),s=(0,n.lookup)(t,e,e.getField("VAR").getText()),a=E(t,o,i),l=pxt.blocks.mkText(s.escapedName);return pxt.blocks.mkStmt(pxt.blocks.mkInfix(l,"+=",a))}function k(t,e,i,o,s,a){const c=o.map(i=>B(t,e,i,a)),h=(0,r.getInputTargetBlock)(t,e,"HANDLER"),u=y(t,h);let d;if(pxt.appTarget.compile&&pxt.appTarget.compile.emptyEventHandlerComments&&0===u.children.length&&u.children.unshift(pxt.blocks.mkStmt(pxt.blocks.mkText(`// ${pxtc.HANDLER_COMMENT}`))),(0,r.isMutatingBlock)(e)&&e.mutation.getMutationType()===l.MutatorTypes.ObjectDestructuringMutator)d=e.mutation.compileMutation(t,a);else if(i.comp.handlerArgs.length){let o=(0,n.getEscapedCBParameters)(e,i,t);d=pxt.blocks.mkText(`function (${o.join(", ")})`)}let p=s,g=i.f;if(i.attrs.blockAliasFor){const e=t.blocksInfo.apis.byQName[i.attrs.blockAliasFor];e&&(g=e.name,p=e.namespace)}return function(t,e,i,o,s,n,r=!1){let a;return s.noFinalNewline=!0,a=n?pxt.blocks.mkGroup([n,s]):pxt.blocks.mkGroup([pxt.blocks.mkText("function ()"),s]),r?pxt.blocks.mkStmt(pxt.blocks.H.extensionCall(i,o.concat([a]),!1)):e?pxt.blocks.mkStmt(pxt.blocks.H.namespaceCall(e,i,o.concat([a]),!1)):pxt.blocks.mkStmt(pxt.blocks.H.mkCall(i,o.concat([a]),!1))}(0,p,g,c,u,d,i.isExtensionMethod)}function A(t,e,i,o,s,n,r,a){a=void 0===