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