pxt-core 7.3.24 → 7.3.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/built/target.js CHANGED
@@ -1 +1 @@
1
- var pxtTargetBundle = {"id":"core","name":"Microsoft MakeCode","title":"Microsoft MakeCode","description":"A toolkit to build JavaScript Blocks editors.","bundleddirs":[],"compile":{"hasHex":false,"jsRefCounting":false,"switches":{},"noSourceInFlash":true,"utf8":true},"appTheme":{"logoUrl":"https://makecode.com/","logo":"@cdnUrl@/blob/4d9a6c8b1fa4c75911b2c468cb3ca1cdfb61fcb6/static/logo.svg","docsLogo":"@cdnUrl@/blob/4d9a6c8b1fa4c75911b2c468cb3ca1cdfb61fcb6/static/logo.svg","portraitLogo":"@cdnUrl@/blob/4d9a6c8b1fa4c75911b2c468cb3ca1cdfb61fcb6/static/logo.svg","organizationLogo":"@cdnUrl@/blob/106597ae039a275897661651b96856220c9b0fad/static/orglogo.png","organizationWideLogo":"@cdnUrl@/blob/d6139e3d0af51f02aa5f8765ecb0985acbd98551/static/orglogowide.png","homeUrl":"https://makecode.com/","cardLogo":"@cdnUrl@/blob/4d9a6c8b1fa4c75911b2c468cb3ca1cdfb61fcb6/static/logo.svg","appLogo":"@cdnUrl@/blob/4d9a6c8b1fa4c75911b2c468cb3ca1cdfb61fcb6/static/logo.svg","crowdinProject":"kindscript","docMenu":[{"name":"About","path":"/about"},{"name":"Docs","path":"/docs"},{"name":"Blog","path":"/blog"}],"hideDocsEdit":true,"hideDocsSimulator":true,"TOC":[{"name":"About MakeCode","path":"/about","subitems":[]},{"name":"Blog","path":"/blog","subitems":[]},{"name":"Online Learning","path":"/online-learning","subitems":[]},{"name":"Contact Us","path":"/contact","subitems":[]},{"name":"Tools","path":"/tools","subitems":[]},{"name":"Technical Docs","path":"/docs","subitems":[{"name":"JS Editor Features","path":"/js/editor","subitems":[]},{"name":"Programming Language","path":"/language","subitems":[]},{"name":"Async Functions","path":"/async","subitems":[]},{"name":"Partial Flashing","path":"/partial-flashing","subitems":[]},{"name":"Source Embedding","path":"/source-embedding","subitems":[]},{"name":"Updating Blockly Version","path":"/develop/blocklyupgrade","subitems":[]},{"name":"Accessibility","path":"/develop/accessibility","subitems":[]},{"name":"Profiling","path":"/js/profiling","subitems":[]},{"name":"Debugging Hardware","path":"/develop/hw-debugging","subitems":[]}]},{"name":"Creating Targets","path":"/target-creation","subitems":[{"name":"pxtarget.json","path":"/targets/pxtarget","subitems":[]},{"name":"Defining Blocks","path":"/defining-blocks","subitems":[]},{"name":"Auto-generation of .d.ts","path":"/simshim","subitems":[]},{"name":"Static File Drops","path":"/cli/staticpkg","subitems":[]},{"name":"Simulator","path":"/targets/simulator","subitems":[]},{"name":"Theming Editor","path":"/targets/theming","subitems":[]},{"name":"Embedding resources","path":"/jres","subitems":[]}]},{"name":"Creating Extensions","path":"/extensions","subitems":[{"name":"Getting started","path":"/extensions/getting-started","subitems":[]},{"name":"pxt.json","path":"/extensions/pxt-json","subitems":[]},{"name":"Extension versioning","path":"/extensions/versioning","subitems":[]},{"name":"Extension localization","path":"/extensions/localization","subitems":[]},{"name":"Extension approval","path":"/extensions/approval","subitems":[]},{"name":"Editor extensions","path":"/extensions/extensions","subitems":[]},{"name":"GitHub Extension Authoring","path":"/extensions/github-authoring","subitems":[]}]},{"name":"Writing Docs","path":"/writing-docs","subitems":[{"name":"Macros","path":"/writing-docs/macros","subitems":[]},{"name":"Anchors","path":"/writing-docs/anchors","subitems":[]},{"name":"Tutorials","path":"/writing-docs/tutorials","subitems":[]},{"name":"User Tutorials","path":"/writing-docs/user-tutorials","subitems":[]},{"name":"Skillmaps","path":"/writing-docs/skillmaps","subitems":[]},{"name":"Routing","path":"/writing-docs/routing","subitems":[]},{"name":"Testing","path":"/writing-docs/testing","subitems":[]}]},{"name":"Translations","path":"/translate","subitems":[]},{"name":"Blocks Embedding","path":"/blocks-embed","subitems":[]},{"name":"Command Line Interface","path":"/cli","subitems":[{"name":"install","path":"/cli/install","subitems":[]},{"name":"build","path":"/cli/build","subitems":[]},{"name":"bump","path":"/cli/bump","subitems":[]},{"name":"deploy","path":"/cli/deploy","subitems":[]},{"name":"console","path":"/cli/console","subitems":[]},{"name":"gdb","path":"/cli/gdb","subitems":[]},{"name":"staticpkg","path":"/cli/staticpkg","subitems":[]},{"name":"update","path":"/cli/update","subitems":[]},{"name":"pyconv","path":"/cli/pyconv","subitems":[]},{"name":"hidserial","path":"/cli/hidserial","subitems":[]},{"name":"hiddmesg","path":"/cli/hiddmesg","subitems":[]},{"name":"login","path":"/cli/login","subitems":[]}]},{"name":"Labs","path":"/labs","subitems":[]},{"name":"UF2 File Format","path":"https://github.com/microsoft/uf2","subitems":[]},{"name":"Accessibility","path":"/accessibility","subitems":[]},{"name":"Telemetry","path":"/telemetry","subitems":[]}],"embedUrl":"https://makecode.com/","id":"core","title":"Microsoft MakeCode","name":"Microsoft MakeCode","description":"A toolkit to build JavaScript Blocks editors.","htmlDocIncludes":{}},"uploadDocs":true,"versions":{"branch":"v7.3.24","tag":"v7.3.24","commits":"https://github.com/microsoft/pxt/commits/3222a766b3ede75a1defcd416a316ad797b92c72","target":"7.3.24","pxt":"7.3.24"},"blocksprj":{"id":"blocksprj","config":{"name":"empty","description":"An empty project for docs rendering","dependencies":{},"files":["main.ts","pxt-core.d.ts","pxt-helpers.ts"],"public":true,"additionalFilePaths":[]},"files":{"main.ts":"\n"}},"tsprj":{"id":"tsprj","config":{"name":"empty","description":"An empty project for docs rendering","dependencies":{},"files":["main.ts","pxt-core.d.ts","pxt-helpers.ts"],"public":true,"additionalFilePaths":[]},"files":{"main.ts":"\n"}},"bundledpkgs":{},"apiInfo":{"libs/blocksprj":{"apis":{"byQName":{"Array":{"kind":5,"retType":"","attributes":{"blockNamespace":"Arrays","jsDoc":"Add, remove, and replace items in lists."}},"Array.length":{"kind":2,"retType":"number","attributes":{"weight":84,"blockId":"lists_length","block":"length of %VALUE","blockBuiltin":"true","blockNamespace":"arrays","jsDoc":"Get or set the length of an array. This number is one more than the index of the last element the array.","_def":{"parts":[{"kind":"label","text":"length of ","style":[]},{"kind":"param","name":"VALUE","ref":false}],"parameters":[{"kind":"param","name":"VALUE","ref":false}]}},"isInstance":true},"Array.push":{"kind":-1,"attributes":{"help":"arrays/push","weight":50,"blockId":"array_push","block":"%list| add value %value| to end","blockNamespace":"arrays","group":"Modify","paramHelp":{"items":"New elements of the Array."},"jsDoc":"Append a new element to an array.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" add value ","style":[]},{"kind":"param","name":"value","ref":false},{"kind":"break"},{"kind":"label","text":" to end","style":[]}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"item","type":"T"}],"isInstance":true,"pyQName":"Array.append"},"Array.concat":{"kind":-1,"retType":"T[]","attributes":{"helper":"arrayConcat","weight":40,"paramHelp":{"arr":"The other array that is being concatenated with"},"jsDoc":"Concatenates the values with another array."},"parameters":[{"name":"arr","description":"The other array that is being concatenated with","type":"T[]"}],"isInstance":true},"Array.pop":{"kind":-1,"retType":"T","attributes":{"help":"arrays/pop","weight":45,"blockId":"array_pop","block":"get and remove last value from %list","blockNamespace":"arrays","group":"Read","jsDoc":"Remove the last element from an array and return it.","_def":{"parts":[{"kind":"label","text":"get and remove last value from ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true},"Array.reverse":{"kind":-1,"attributes":{"help":"arrays/reverse","helper":"arrayReverse","weight":10,"blockId":"array_reverse","block":"reverse %list","blockNamespace":"arrays","group":"Operations","jsDoc":"Reverse the elements in an array. The first array element becomes the last, and the last array element becomes the first.","_def":{"parts":[{"kind":"label","text":"reverse ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true},"Array.shift":{"kind":-1,"retType":"T","attributes":{"help":"arrays/shift","helper":"arrayShift","weight":30,"blockId":"array_shift","block":"get and remove first value from %list","blockNamespace":"arrays","group":"Read","jsDoc":"Remove the first element from an array and return it. This method changes the length of the array.","_def":{"parts":[{"kind":"label","text":"get and remove first value from ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true},"Array.unshift":{"kind":-1,"retType":"number","attributes":{"help":"arrays/unshift","helper":"arrayUnshift","weight":25,"blockId":"array_unshift","block":"%list| insert %value| at beginning","blockNamespace":"arrays","group":"Modify","paramHelp":{"element":"to insert at the start of the Array."},"jsDoc":"Add one element to the beginning of an array and return the new length of the array.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" insert ","style":[]},{"kind":"param","name":"value","ref":false},{"kind":"break"},{"kind":"label","text":" at beginning","style":[]}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"value","type":"T"}],"isInstance":true},"Array.slice":{"kind":-1,"retType":"T[]","attributes":{"paramDefl":{"start":"0","end":"0"},"help":"arrays/slice","helper":"arraySlice","weight":41,"blockNamespace":"arrays","paramHelp":{"start":"The beginning of the specified portion of the array. eg: 0","end":"The end of the specified portion of the array. eg: 0"},"jsDoc":"Return a section of an array."},"parameters":[{"name":"start","description":"The beginning of the specified portion of the array. eg: 0","initializer":"undefined","default":"0"},{"name":"end","description":"The end of the specified portion of the array. eg: 0","initializer":"undefined","default":"0"}],"isInstance":true},"Array.splice":{"kind":-1,"attributes":{"paramDefl":{"start":"0","deleteCount":"0"},"helper":"arraySplice","weight":40,"paramHelp":{"start":"The zero-based location in the array from which to start removing elements. eg: 0","deleteCount":"The number of elements to remove. eg: 0"},"jsDoc":"Remove elements from an array."},"parameters":[{"name":"start","description":"The zero-based location in the array from which to start removing elements. eg: 0","default":"0"},{"name":"deleteCount","description":"The number of elements to remove. eg: 0","default":"0"}],"isInstance":true},"Array.join":{"kind":-1,"retType":"string","attributes":{"helper":"arrayJoin","weight":40,"paramHelp":{"sep":"the string separator"},"jsDoc":"joins all elements of an array into a string and returns this string."},"parameters":[{"name":"sep","description":"the string separator","type":"string","initializer":"undefined"}],"isInstance":true},"Array.some":{"kind":-1,"retType":"boolean","attributes":{"helper":"arraySome","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to two arguments. The some method calls the callbackfn function one time for each element in the array."},"jsDoc":"Tests whether at least one element in the array passes the test implemented by the provided function."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to two arguments. The some method calls the callbackfn function one time for each element in the array.","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true},"Array.every":{"kind":-1,"retType":"boolean","attributes":{"helper":"arrayEvery","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to two arguments. The every method calls the callbackfn function one time for each element in the array."},"jsDoc":"Tests whether all elements in the array pass the test implemented by the provided function."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to two arguments. The every method calls the callbackfn function one time for each element in the array.","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true},"Array.sort":{"kind":-1,"retType":"T[]","attributes":{"helper":"arraySort","weight":40,"paramHelp":{"specifies":"a function that defines the sort order. If omitted, the array is sorted according to the prmitive type"},"jsDoc":"Sort the elements of an array in place and returns the array. The sort is not necessarily stable."},"parameters":[{"name":"callbackfn","type":"(value1: T, value2: T) => number","initializer":"undefined","handlerParameters":[{"name":"value1","type":"T"},{"name":"value2","type":"T"}]}],"isInstance":true},"Array.map":{"kind":-1,"retType":"U[]","attributes":{"helper":"arrayMap","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array."},"jsDoc":"Call a defined callback function on each element of an array, and return an array containing the results."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array.","type":"(value: T, index: number) => U","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true},"Array.forEach":{"kind":-1,"attributes":{"helper":"arrayForEach","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to two arguments. The forEach method calls the callbackfn function one time for each element in the array."},"jsDoc":"Call a defined callback function on each element of an array."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to two arguments. The forEach method calls the callbackfn function one time for each element in the array.","type":"(value: T, index: number) => void","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true,"pyQName":"Array.for_each"},"Array.filter":{"kind":-1,"retType":"T[]","attributes":{"helper":"arrayFilter","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array."},"jsDoc":"Return the elements of an array that meet the condition specified in a callback function."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array.","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true},"Array.fill":{"kind":-1,"retType":"T[]","attributes":{"helper":"arrayFill","weight":39,"jsDoc":"Fills all the elements of an array from a start index to an end index with a static value. The end index is not included."},"parameters":[{"name":"value","type":"T"},{"name":"start","initializer":"undefined"},{"name":"end","initializer":"undefined"}],"isInstance":true},"Array.find":{"kind":-1,"retType":"T","attributes":{"helper":"arrayFind","weight":40,"paramHelp":{"callbackfn":""},"jsDoc":"Returns the value of the first element in the array that satisfies the provided testing function. Otherwise undefined is returned."},"parameters":[{"name":"callbackfn","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true},"Array.reduce":{"kind":-1,"retType":"U","attributes":{"helper":"arrayReduce","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.","initialValue":"Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value."},"jsDoc":"Call the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.","type":"(previousValue: U, currentValue: T, currentIndex: number) => U","handlerParameters":[{"name":"previousValue","type":"U"},{"name":"currentValue","type":"T"},{"name":"currentIndex","type":"number"}]},{"name":"initialValue","description":"Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.","type":"U"}],"isInstance":true},"Array.removeElement":{"kind":-1,"retType":"boolean","attributes":{"weight":48,"jsDoc":"Remove the first occurence of an object. Returns true if removed."},"parameters":[{"name":"element","type":"T"}],"isInstance":true,"pyQName":"Array.remove_element"},"Array.removeAt":{"kind":-1,"retType":"T","attributes":{"help":"arrays/remove-at","weight":47,"blockId":"array_removeat","block":"%list| get and remove value at %index","blockNamespace":"arrays","group":"Read","jsDoc":"Remove the element at a certain index.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" get and remove value at ","style":[]},{"kind":"param","name":"index","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"index","ref":false}]}},"parameters":[{"name":"index"}],"isInstance":true,"pyQName":"Array.remove_at"},"Array.insertAt":{"kind":-1,"attributes":{"paramDefl":{"index":"0","the":"0"},"help":"arrays/insert-at","weight":20,"blockId":"array_insertAt","block":"%list| insert at %index| value %value","blockNamespace":"arrays","group":"Modify","paramHelp":{"index":"the zero-based position in the list to insert the value, eg: 0","the":"value to insert, eg: 0"},"jsDoc":"Insert the value at a particular index, increases length by 1","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" insert at ","style":[]},{"kind":"param","name":"index","ref":false},{"kind":"break"},{"kind":"label","text":" value ","style":[]},{"kind":"param","name":"value","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"index","ref":false},{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"index","description":"the zero-based position in the list to insert the value, eg: 0","default":"0"},{"name":"value","type":"T"}],"isInstance":true,"pyQName":"Array.insert_at"},"Array.indexOf":{"kind":-1,"retType":"number","attributes":{"help":"arrays/index-of","weight":40,"blockId":"array_indexof","block":"%list| find index of %value","blockNamespace":"arrays","group":"Operations","paramHelp":{"item":"The value to locate in the array.","fromIndex":"The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0."},"jsDoc":"Return the index of the first occurrence of a value in an array.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" find index of ","style":[]},{"kind":"param","name":"value","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"item","description":"The value to locate in the array.","type":"T"},{"name":"fromIndex","description":"The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.","initializer":"undefined"}],"isInstance":true,"pyQName":"Array.index"},"Array.get":{"kind":-1,"retType":"T","attributes":{"paramDefl":{"index":"0"},"help":"arrays/get","weight":85,"paramHelp":{"index":"the zero-based position in the list of the item, eg: 0"},"jsDoc":"Get the value at a particular index"},"parameters":[{"name":"index","description":"the zero-based position in the list of the item, eg: 0","default":"0"}],"isInstance":true},"Array.set":{"kind":-1,"attributes":{"paramDefl":{"index":"0","value":"0"},"help":"arrays/set","weight":84,"paramHelp":{"index":"the zero-based position in the list to store the value, eg: 0","value":"the value to insert, eg: 0"},"jsDoc":"Store a value at a particular index"},"parameters":[{"name":"index","description":"the zero-based position in the list to store the value, eg: 0","default":"0"},{"name":"value","description":"the value to insert, eg: 0","type":"T","default":"0"}],"isInstance":true},"Array._pickRandom":{"kind":-1,"retType":"T","attributes":{"help":"arrays/pick-random","helper":"arrayPickRandom","weight":25,"blockId":"array_pickRandom","block":"get random value from %list","blockNamespace":"arrays","group":"Read","jsDoc":"Return a random value from the array","_def":{"parts":[{"kind":"label","text":"get random value from ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true,"pyQName":"Array._pick_random"},"Array._unshiftStatement":{"kind":-1,"attributes":{"help":"arrays/unshift","helper":"arrayUnshift","weight":24,"blockId":"array_unshift_statement","block":"%list| insert %value| at beginning","blockNamespace":"arrays","blockAliasFor":"Array.unshift","group":"Modify","paramHelp":{"element":"to insert at the start of the Array."},"jsDoc":"Add one element to the beginning of an array and return the new length of the array.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" insert ","style":[]},{"kind":"param","name":"value","ref":false},{"kind":"break"},{"kind":"label","text":" at beginning","style":[]}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"value","type":"T"}],"isInstance":true,"pyQName":"Array._unshift_statement"},"Array._popStatement":{"kind":-1,"attributes":{"help":"arrays/pop","weight":44,"blockId":"array_pop_statement","block":"remove last value from %list","blockNamespace":"arrays","blockAliasFor":"Array.pop","group":"Modify","jsDoc":"Remove the last element from an array and return it.","_def":{"parts":[{"kind":"label","text":"remove last value from ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true,"pyQName":"Array._pop_statement"},"Array._shiftStatement":{"kind":-1,"attributes":{"help":"arrays/shift","helper":"arrayShift","weight":29,"blockId":"array_shift_statement","block":"remove first value from %list","blockNamespace":"arrays","blockAliasFor":"Array.shift","group":"Modify","jsDoc":"Remove the first element from an array and return it. This method changes the length of the array.","_def":{"parts":[{"kind":"label","text":"remove first value from ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true,"pyQName":"Array._shift_statement"},"Array._removeAtStatement":{"kind":-1,"attributes":{"help":"arrays/remove-at","weight":14,"blockId":"array_removeat_statement","block":"%list| remove value at %index","blockNamespace":"arrays","blockAliasFor":"Array.removeAt","group":"Modify","jsDoc":"Remove the element at a certain index.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" remove value at ","style":[]},{"kind":"param","name":"index","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"index","ref":false}]}},"parameters":[{"name":"index"}],"isInstance":true,"pyQName":"Array._remove_at_statement"},"String":{"kind":5,"retType":"","attributes":{"blockNamespace":"text","jsDoc":"Combine, split, and search text strings."}},"String.concat":{"kind":-1,"retType":"string","attributes":{"weight":49,"blockId":"string_concat","blockNamespace":"text","paramHelp":{"other":"The string to append to the end of the string."},"jsDoc":"Returns a string that contains the concatenation of two or more strings."},"parameters":[{"name":"other","description":"The string to append to the end of the string.","type":"string"}],"isInstance":true},"String.charAt":{"kind":-1,"retType":"string","attributes":{"weight":48,"help":"text/char-at","blockId":"string_get","block":"char from %this=text|at %pos","blockNamespace":"text","paramHelp":{"index":"The zero-based index of the desired character."},"jsDoc":"Return the character at the specified index.","_def":{"parts":[{"kind":"label","text":"char from ","style":[]},{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":"at ","style":[]},{"kind":"param","name":"pos","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"pos","ref":false}]}},"parameters":[{"name":"index","description":"The zero-based index of the desired character."}],"isInstance":true,"pyQName":"String.char_at"},"String.length":{"kind":2,"retType":"number","attributes":{"property":"true","weight":47,"blockId":"text_length","block":"length of %VALUE","blockBuiltin":"true","blockNamespace":"text","jsDoc":"Returns the length of a String object.","_def":{"parts":[{"kind":"label","text":"length of ","style":[]},{"kind":"param","name":"VALUE","ref":false}],"parameters":[{"kind":"param","name":"VALUE","ref":false}]}},"isInstance":true},"String.charCodeAt":{"kind":-1,"retType":"number","attributes":{"paramHelp":{"index":"The zero-based index of the desired character. If there is no character at the specified index, NaN is returned."},"jsDoc":"Return the Unicode value of the character at the specified location."},"parameters":[{"name":"index","description":"The zero-based index of the desired character. If there is no character at the specified index, NaN is returned."}],"isInstance":true,"pyQName":"String.char_code_at"},"String.compare":{"kind":-1,"retType":"number","attributes":{"help":"text/compare","blockId":"string_compare","block":"compare %this=text| to %that","blockNamespace":"text","paramHelp":{"that":"String to compare to target string"},"jsDoc":"See how the order of characters in two strings is different (in ASCII encoding).","_def":{"parts":[{"kind":"label","text":"compare ","style":[]},{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":" to ","style":[]},{"kind":"param","name":"that","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"that","ref":false}]}},"parameters":[{"name":"that","description":"String to compare to target string","type":"string"}],"isInstance":true},"String.substr":{"kind":-1,"retType":"string","attributes":{"paramDefl":{"start":"0","length":"10"},"helper":"stringSubstr","help":"text/substr","blockId":"string_substr","block":"substring of %this=text|from %start|of length %length","blockNamespace":"text","paramHelp":{"start":"first character index; can be negative from counting from the end, eg:0","length":"number of characters to extract, eg: 10"},"jsDoc":"Return a substring of the current string.","_def":{"parts":[{"kind":"label","text":"substring of ","style":[]},{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":"from ","style":[]},{"kind":"param","name":"start","ref":false},{"kind":"break"},{"kind":"label","text":"of length ","style":[]},{"kind":"param","name":"length","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"start","ref":false},{"kind":"param","name":"length","ref":false}]}},"parameters":[{"name":"start","description":"first character index; can be negative from counting from the end, eg:0","default":"0"},{"name":"length","description":"number of characters to extract, eg: 10","initializer":"undefined","default":"10"}],"isInstance":true},"String.replace":{"kind":-1,"retType":"string","attributes":{"helper":"stringReplace","paramHelp":{"toReplace":"the substring to replace in the current string","replacer":"either the string that replaces toReplace in the current string,"},"jsDoc":"Return the current string with the first occurence of toReplace\nreplaced with the replacer\n\n\nor a function that accepts the substring and returns the replacement string."},"parameters":[{"name":"toReplace","description":"the substring to replace in the current string","type":"string"},{"name":"replacer","description":"either the string that replaces toReplace in the current string,","type":"string | ((sub: string) => string)"}],"isInstance":true},"String.replaceAll":{"kind":-1,"retType":"string","attributes":{"helper":"stringReplaceAll","paramHelp":{"toReplace":"the substring to replace in the current string","replacer":"either the string that replaces toReplace in the current string,"},"jsDoc":"Return the current string with each occurence of toReplace\nreplaced with the replacer\n\n\nor a function that accepts the substring and returns the replacement string."},"parameters":[{"name":"toReplace","description":"the substring to replace in the current string","type":"string"},{"name":"replacer","description":"either the string that replaces toReplace in the current string,","type":"string | ((sub: string) => string)"}],"isInstance":true,"pyQName":"String.replace_all"},"String.slice":{"kind":-1,"retType":"string","attributes":{"paramDefl":{"start":"0"},"helper":"stringSlice","paramHelp":{"start":"first character index; can be negative from counting from the end, eg:0","end":"one-past-last character index"},"jsDoc":"Return a substring of the current string."},"parameters":[{"name":"start","description":"first character index; can be negative from counting from the end, eg:0","default":"0"},{"name":"end","description":"one-past-last character index","initializer":"undefined"}],"isInstance":true},"String.isEmpty":{"kind":-1,"retType":"boolean","attributes":{"helper":"stringEmpty","help":"text/is-empty","blockId":"string_isempty","blockNamespace":"text","block":"%this=text| is empty","jsDoc":"Returns a value indicating if the string is empty","_def":{"parts":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":" is empty","style":[]}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false}]}},"parameters":[],"isInstance":true,"pyQName":"String.is_empty"},"String.indexOf":{"kind":-1,"retType":"number","attributes":{"help":"text/index-of","blockId":"string_indexof","blockNamespace":"text","block":"%this=text|find index of %searchValue","paramHelp":{"searchValue":"the text to find","start":"optional start index for the search"},"jsDoc":"Returns the position of the first occurrence of a specified value in a string.","_def":{"parts":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":"find index of ","style":[]},{"kind":"param","name":"searchValue","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"searchValue","ref":false}]}},"parameters":[{"name":"searchValue","description":"the text to find","type":"string"},{"name":"start","description":"optional start index for the search","initializer":"undefined"}],"isInstance":true,"pyQName":"String.index_of"},"String.includes":{"kind":-1,"retType":"boolean","attributes":{"help":"text/includes","blockId":"string_includes","blockNamespace":"text","block":"%this=text|includes %searchValue","paramHelp":{"searchValue":"the text to find","start":"optional start index for the search"},"jsDoc":"Determines whether a string contains the characters of a specified string.","_def":{"parts":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":"includes ","style":[]},{"kind":"param","name":"searchValue","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"searchValue","ref":false}]}},"parameters":[{"name":"searchValue","description":"the text to find","type":"string"},{"name":"start","description":"optional start index for the search","initializer":"undefined"}],"isInstance":true},"String.split":{"kind":-1,"retType":"string[]","attributes":{"helper":"stringSplit","help":"text/split","blockId":"string_split","blockNamespace":"text","block":"split %this=text|at %separator","paramHelp":{"separator":"@param limit"},"jsDoc":"Splits the string according to the separators","_def":{"parts":[{"kind":"label","text":"split ","style":[]},{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":"at ","style":[]},{"kind":"param","name":"separator","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"separator","ref":false}]}},"parameters":[{"name":"separator","description":"@param limit","type":"string","initializer":"undefined"},{"name":"limit","initializer":"undefined"}],"isInstance":true},"String.trim":{"kind":-1,"retType":"string","attributes":{"helper":"stringTrim","jsDoc":"Return a substring of the current string with whitespace removed from both ends"},"parameters":[],"isInstance":true},"String.toUpperCase":{"kind":-1,"retType":"string","attributes":{"helper":"stringToUpperCase","help":"text/to-upper-case","jsDoc":"Converts the string to upper case characters."},"parameters":[],"isInstance":true,"pyQName":"String.to_upper_case"},"String.toLowerCase":{"kind":-1,"retType":"string","attributes":{"helper":"stringToLowerCase","help":"text/to-lower-case","jsDoc":"Converts the string to lower case characters."},"parameters":[],"isInstance":true,"pyQName":"String.to_lower_case"},"parseFloat":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"text":"123","s":"123"},"help":"text/parse-float","blockId":"string_parsefloat","block":"parse to number %text","blockNamespace":"text","explicitDefaults":["text"],"paramHelp":{"s":"A string to convert into a number. eg: 123"},"jsDoc":"Convert a string to a number.","_def":{"parts":[{"kind":"label","text":"parse to number ","style":[]},{"kind":"param","name":"text","ref":false}],"parameters":[{"kind":"param","name":"text","ref":false}]}},"parameters":[{"name":"text","type":"string","initializer":"123","default":"123"}],"pyQName":"parse_float"},"randint":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"min":"0","max":"10"},"blockId":"device_random","block":"pick random %min|to %limit","blockNamespace":"Math","help":"math/randint","paramHelp":{"min":"the lower inclusive bound, eg: 0","max":"the upper inclusive bound, eg: 10"},"jsDoc":"Returns a pseudorandom number between min and max included.\nIf both numbers are integral, the result is integral.","_def":{"parts":[{"kind":"label","text":"pick random ","style":[]},{"kind":"param","name":"min","ref":false},{"kind":"break"},{"kind":"label","text":"to ","style":[]},{"kind":"param","name":"limit","ref":false}],"parameters":[{"kind":"param","name":"min","ref":false},{"kind":"param","name":"limit","ref":false}]}},"parameters":[{"name":"min","description":"the lower inclusive bound, eg: 0","default":"0"},{"name":"max","description":"the upper inclusive bound, eg: 10","default":"10"}]},"Object":{"kind":5,"retType":""},"Function":{"kind":9,"retType":"Function","extendsTypes":[]},"Function.__assignableToFunction":{"kind":2,"retType":"Function","isInstance":true},"IArguments":{"kind":9,"retType":"IArguments","extendsTypes":[]},"IArguments.__assignableToIArguments":{"kind":2,"retType":"IArguments","isInstance":true},"RegExp":{"kind":9,"retType":"RegExp","extendsTypes":[]},"RegExp.__assignableToRegExp":{"kind":2,"retType":"RegExp","isInstance":true},"Boolean":{"kind":9,"retType":"Boolean","extendsTypes":[]},"Boolean.toString":{"kind":-1,"retType":"string","attributes":{"jsDoc":"Returns a string representation of an object."},"parameters":[],"isInstance":true,"pyQName":"Boolean.to_string"},"String@type":{"kind":9,"retType":"String","attributes":{"blockNamespace":"text","jsDoc":"Combine, split, and search text strings."},"extendsTypes":[],"pyQName":"String"},"String.fromCharCode":{"kind":-3,"retType":"string","attributes":{"help":"math/from-char-code","weight":1,"blockNamespace":"text","blockId":"stringFromCharCode","block":"text from char code %code","jsDoc":"Make a string from the given ASCII character code.","_def":{"parts":[{"kind":"label","text":"text from char code ","style":[]},{"kind":"param","name":"code","ref":false}],"parameters":[{"kind":"param","name":"code","ref":false}]}},"parameters":[{"name":"code"}],"pyQName":"String.from_char_code"},"Number":{"kind":5,"retType":""},"Number.toString":{"kind":-1,"retType":"string","attributes":{"jsDoc":"Returns a string representation of a number."},"parameters":[],"isInstance":true,"pyQName":"Number.to_string"},"Array@type":{"kind":9,"retType":"T[]","attributes":{"blockNamespace":"Arrays","jsDoc":"Add, remove, and replace items in lists."},"extendsTypes":[],"pyQName":"Array"},"Array.isArray":{"kind":-3,"retType":"boolean","attributes":{"jsDoc":"Check if a given object is an array."},"parameters":[{"name":"obj","type":"any"}],"pyQName":"Array.is_array"},"Object@type":{"kind":9,"retType":"Object","extendsTypes":[],"pyQName":"Object"},"Object.keys":{"kind":-3,"retType":"string[]","attributes":{"jsDoc":"Return the field names in an object."},"parameters":[{"name":"obj","type":"any"}]},"Math":{"kind":5,"retType":"","attributes":{"jsDoc":"More complex operations with numbers."}},"Math.pow":{"kind":-3,"retType":"number","attributes":{"paramHelp":{"x":"The base value of the expression.","y":"The exponent value of the expression."},"jsDoc":"Returns the value of a base expression taken to a specified power."},"parameters":[{"name":"x","description":"The base value of the expression."},{"name":"y","description":"The exponent value of the expression."}]},"Math.random":{"kind":-3,"retType":"number","attributes":{"help":"math/random","jsDoc":"Returns a pseudorandom number between 0 and 1."},"parameters":[]},"Math.randomRange":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"min":"0","max":"10"},"blockId":"device_random_deprecated","block":"pick random %min|to %limit","help":"math/random-range","deprecated":"true","paramHelp":{"min":"the lower inclusive bound, eg: 0","max":"the upper inclusive bound, eg: 10"},"jsDoc":"Returns a pseudorandom number between min and max included.\nIf both numbers are integral, the result is integral.","_def":{"parts":[{"kind":"label","text":"pick random ","style":[]},{"kind":"param","name":"min","ref":false},{"kind":"break"},{"kind":"label","text":"to ","style":[]},{"kind":"param","name":"limit","ref":false}],"parameters":[{"kind":"param","name":"min","ref":false},{"kind":"param","name":"limit","ref":false}]}},"parameters":[{"name":"min","description":"the lower inclusive bound, eg: 0","default":"0"},{"name":"max","description":"the upper inclusive bound, eg: 10","default":"10"}],"pyQName":"Math.random_range"},"Math.log":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A number"},"jsDoc":"Returns the natural logarithm (base e) of a number."},"parameters":[{"name":"x","description":"A number"}]},"Math.exp":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A number"},"jsDoc":"Returns returns ``e^x``."},"parameters":[{"name":"x","description":"A number"}]},"Math.sin":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"An angle in radians"},"jsDoc":"Returns the sine of a number."},"parameters":[{"name":"x","description":"An angle in radians"}]},"Math.cos":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"An angle in radians"},"jsDoc":"Returns the cosine of a number."},"parameters":[{"name":"x","description":"An angle in radians"}]},"Math.tan":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"An angle in radians"},"jsDoc":"Returns the tangent of a number."},"parameters":[{"name":"x","description":"An angle in radians"}]},"Math.asin":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"A number"},"jsDoc":"Returns the arcsine (in radians) of a number"},"parameters":[{"name":"x","description":"A number"}]},"Math.acos":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"A number"},"jsDoc":"Returns the arccosine (in radians) of a number"},"parameters":[{"name":"x","description":"A number"}]},"Math.atan":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"A number"},"jsDoc":"Returns the arctangent (in radians) of a number"},"parameters":[{"name":"x","description":"A number"}]},"Math.atan2":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"y":"A number","x":"A number"},"jsDoc":"Returns the arctangent of the quotient of its arguments."},"parameters":[{"name":"y","description":"A number"},{"name":"x","description":"A number"}]},"Math.sqrt":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A numeric expression."},"jsDoc":"Returns the square root of a number."},"parameters":[{"name":"x","description":"A numeric expression."}]},"Math.ceil":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A numeric expression."},"jsDoc":"Returns the smallest number greater than or equal to its numeric argument."},"parameters":[{"name":"x","description":"A numeric expression."}]},"Math.floor":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A numeric expression."},"jsDoc":"Returns the greatest number less than or equal to its numeric argument."},"parameters":[{"name":"x","description":"A numeric expression."}]},"Math.trunc":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A numeric expression."},"jsDoc":"Returns the number with the decimal part truncated."},"parameters":[{"name":"x","description":"A numeric expression."}],"pyQName":"int"},"Math.round":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"The value to be rounded to the nearest number."},"jsDoc":"Returns a supplied numeric expression rounded to the nearest number."},"parameters":[{"name":"x","description":"The value to be rounded to the nearest number."}]},"Math.imul":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"The first number","y":"The second number"},"jsDoc":"Returns the value of integer signed 32 bit multiplication of two numbers."},"parameters":[{"name":"x","description":"The first number"},{"name":"y","description":"The second number"}]},"Math.idiv":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"The first number","y":"The second number"},"jsDoc":"Returns the value of integer signed 32 bit division of two numbers."},"parameters":[{"name":"x","description":"The first number"},{"name":"y","description":"The second number"}]},"control":{"kind":5,"retType":""},"control._onCodeStart":{"kind":-3,"parameters":[{"name":"arg","type":"any"}],"pyQName":"control._on_code_start"},"control._onCodeStop":{"kind":-3,"parameters":[{"name":"arg","type":"any"}],"pyQName":"control._on_code_stop"},"NaN":{"kind":4,"retType":"number","attributes":{"jsDoc":"Constant representing Not-A-Number."},"pyQName":"na_n"},"Infinity":{"kind":4,"retType":"number","attributes":{"jsDoc":"Constant representing positive infinity."},"pyQName":"infinity"},"isNaN":{"kind":-3,"retType":"boolean","parameters":[{"name":"x"}],"pyQName":"is_na_n"},"Number@type":{"kind":9,"retType":"Number","extendsTypes":[],"pyQName":"Number"},"Number.isNaN":{"kind":-3,"retType":"boolean","attributes":{"jsDoc":"Check if a given value is of type Number and it is a NaN."},"parameters":[{"name":"x","type":"any"}],"pyQName":"Number.is_na_n"},"StringMap":{"kind":9,"retType":"StringMap","attributes":{"jsDoc":"A dictionary from string key to string values"},"extendsTypes":[]},"parseInt":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"text":"123"},"help":"text/parse-int","blockId":"string_parseint","block":"parse to integer %text","blockNamespace":"text","explicitDefaults":["text"],"blockHidden":true,"paramHelp":{"text":"A string to convert into an integral number. eg: \"123\"","radix":"optional A value between 2 and 36 that specifies the base of the number in text."},"jsDoc":"Convert a string to an integer.\n\n\nIf this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.\nAll other strings are considered decimal.","_def":{"parts":[{"kind":"label","text":"parse to integer ","style":[]},{"kind":"param","name":"text","ref":false}],"parameters":[{"kind":"param","name":"text","ref":false}]}},"parameters":[{"name":"text","description":"A string to convert into an integral number. eg: \"123\"","type":"string","initializer":"123","default":"123"},{"name":"radix","description":"optional A value between 2 and 36 that specifies the base of the number in text.","initializer":"undefined"}],"pyQName":"int"},"helpers":{"kind":5,"retType":""},"helpers.arrayFill":{"kind":-3,"retType":"T[]","parameters":[{"name":"O","type":"T[]"},{"name":"value","type":"T"},{"name":"start","initializer":"undefined"},{"name":"end","initializer":"undefined"}],"pyQName":"helpers.array_fill"},"helpers.arraySplice":{"kind":-3,"parameters":[{"name":"arr","type":"T[]"},{"name":"start"},{"name":"len"}],"pyQName":"helpers.array_splice"},"helpers.arrayReverse":{"kind":-3,"parameters":[{"name":"arr","type":"T[]"}],"pyQName":"helpers.array_reverse"},"helpers.arrayShift":{"kind":-3,"retType":"T","parameters":[{"name":"arr","type":"T[]"}],"pyQName":"helpers.array_shift"},"helpers.arrayJoin":{"kind":-3,"retType":"string","parameters":[{"name":"arr","type":"T[]"},{"name":"sep","type":"string","initializer":"undefined"}],"pyQName":"helpers.array_join"},"helpers.arrayUnshift":{"kind":-3,"retType":"number","parameters":[{"name":"arr","type":"T[]"},{"name":"value","type":"T"}],"pyQName":"helpers.array_unshift"},"helpers.arraySort":{"kind":-3,"retType":"T[]","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value1: T, value2: T) => number","initializer":"undefined","handlerParameters":[{"name":"value1","type":"T"},{"name":"value2","type":"T"}]}],"pyQName":"helpers.array_sort"},"helpers.arrayMap":{"kind":-3,"retType":"U[]","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => U","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_map"},"helpers.arraySome":{"kind":-3,"retType":"boolean","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_some"},"helpers.arrayEvery":{"kind":-3,"retType":"boolean","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_every"},"helpers.arrayForEach":{"kind":-3,"parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => void","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_for_each"},"helpers.arrayFilter":{"kind":-3,"retType":"T[]","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_filter"},"helpers.arrayFind":{"kind":-3,"retType":"T","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_find"},"helpers.arrayReduce":{"kind":-3,"retType":"U","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(previousValue: U, currentValue: T, currentIndex: number) => U","handlerParameters":[{"name":"previousValue","type":"U"},{"name":"currentValue","type":"T"},{"name":"currentIndex","type":"number"}]},{"name":"initialValue","type":"U"}],"pyQName":"helpers.array_reduce"},"helpers.arrayConcat":{"kind":-3,"retType":"T[]","parameters":[{"name":"arr","type":"T[]"},{"name":"otherArr","type":"T[]"}],"pyQName":"helpers.array_concat"},"helpers.arrayPickRandom":{"kind":-3,"retType":"T","parameters":[{"name":"arr","type":"T[]"}],"pyQName":"helpers.array_pick_random"},"helpers.arraySlice":{"kind":-3,"retType":"T[]","parameters":[{"name":"arr","type":"T[]"},{"name":"start","initializer":"undefined"},{"name":"end","initializer":"undefined"}],"pyQName":"helpers.array_slice"},"helpers.stringReplace":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"},{"name":"toReplace","type":"string"},{"name":"replacer","type":"string | ((sub: string) => string)"}],"pyQName":"helpers.string_replace"},"helpers.stringReplaceAll":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"},{"name":"toReplace","type":"string"},{"name":"replacer","type":"string | ((sub: string) => string)"}],"pyQName":"helpers.string_replace_all"},"helpers.stringSubstr":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"},{"name":"start"},{"name":"length","initializer":"undefined"}],"pyQName":"helpers.string_substr"},"helpers.stringSlice":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"},{"name":"start"},{"name":"end","initializer":"undefined"}],"pyQName":"helpers.string_slice"},"helpers.stringToUpperCase":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"}],"pyQName":"helpers.string_to_upper_case"},"helpers.stringToLowerCase":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"}],"pyQName":"helpers.string_to_lower_case"},"helpers.stringSplit":{"kind":-3,"retType":"string[]","parameters":[{"name":"S","type":"string"},{"name":"separator","type":"string","initializer":"undefined"},{"name":"limit","initializer":"undefined"}],"pyQName":"helpers.string_split"},"helpers.stringTrim":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"}],"pyQName":"helpers.string_trim"},"helpers.isWhitespace":{"kind":-3,"retType":"boolean","parameters":[{"name":"c"}],"pyQName":"helpers.is_whitespace"},"helpers.stringEmpty":{"kind":-3,"retType":"boolean","parameters":[{"name":"S","type":"string"}],"pyQName":"helpers.string_empty"},"Math.clamp":{"kind":-3,"retType":"number","parameters":[{"name":"min"},{"name":"max"},{"name":"value"}]},"Math.abs":{"kind":-3,"retType":"number","attributes":{"help":"math/abs","paramHelp":{"x":"A numeric expression for which the absolute value is needed."},"jsDoc":"Returns the absolute value of a number (the value without regard to whether it is positive or negative).\nFor example, the absolute value of -5 is the same as the absolute value of 5."},"parameters":[{"name":"x","description":"A numeric expression for which the absolute value is needed."}],"pyQName":"abs"},"Math.sign":{"kind":-3,"retType":"number","attributes":{"paramHelp":{"x":"The numeric expression to test"},"jsDoc":"Returns the sign of the x, indicating whether x is positive, negative or zero."},"parameters":[{"name":"x","description":"The numeric expression to test"}]},"Math.max":{"kind":-3,"retType":"number","attributes":{"help":"math/max","jsDoc":"Returns the larger of two supplied numeric expressions."},"parameters":[{"name":"a"},{"name":"b"}],"pyQName":"max"},"Math.min":{"kind":-3,"retType":"number","attributes":{"help":"math/min","jsDoc":"Returns the smaller of two supplied numeric expressions."},"parameters":[{"name":"a"},{"name":"b"}],"pyQName":"min"},"Math.roundWithPrecision":{"kind":-3,"retType":"number","attributes":{"paramHelp":{"x":"the number to round","digits":"the number of resulting digits"},"jsDoc":"Rounds ``x`` to a number with the given number of ``digits``"},"parameters":[{"name":"x","description":"the number to round"},{"name":"digits","description":"the number of resulting digits"}],"pyQName":"Math.round_with_precision"},"__internal":{"kind":5,"retType":"","attributes":{"blockHidden":true}},"__internal.__downUp":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleDownUp","block":"%down","paramFieldEditor":{"down":"toggledownup"},"paramFieldEditorOptions":{"down":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a down/up toggle","_def":{"parts":[{"kind":"param","name":"down","ref":false}],"parameters":[{"kind":"param","name":"down","ref":false}]}},"parameters":[{"name":"down","type":"boolean"}]},"__internal.__upDown":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleUpDown","block":"%up","paramFieldEditor":{"up":"toggleupdown"},"paramFieldEditorOptions":{"up":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a up/down toggle","_def":{"parts":[{"kind":"param","name":"up","ref":false}],"parameters":[{"kind":"param","name":"up","ref":false}]}},"parameters":[{"name":"up","type":"boolean"}]},"__internal.__highLow":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleHighLow","block":"%high","paramFieldEditor":{"high":"togglehighlow"},"paramFieldEditorOptions":{"high":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a high/low toggle","_def":{"parts":[{"kind":"param","name":"high","ref":false}],"parameters":[{"kind":"param","name":"high","ref":false}]}},"parameters":[{"name":"high","type":"boolean"}]},"__internal.__onOff":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleOnOff","block":"%on","paramFieldEditor":{"on":"toggleonoff"},"paramFieldEditorOptions":{"on":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a on/off toggle","_def":{"parts":[{"kind":"param","name":"on","ref":false}],"parameters":[{"kind":"param","name":"on","ref":false}]}},"parameters":[{"name":"on","type":"boolean"}]},"__internal.__yesNo":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleYesNo","block":"%yes","paramFieldEditor":{"yes":"toggleyesno"},"paramFieldEditorOptions":{"yes":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a yes/no toggle","_def":{"parts":[{"kind":"param","name":"yes","ref":false}],"parameters":[{"kind":"param","name":"yes","ref":false}]}},"parameters":[{"name":"yes","type":"boolean"}]},"__internal.__winLose":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleWinLose","block":"%win","paramFieldEditor":{"win":"togglewinlose"},"paramFieldEditorOptions":{"win":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a win/lose toggle","_def":{"parts":[{"kind":"param","name":"win","ref":false}],"parameters":[{"kind":"param","name":"win","ref":false}]}},"parameters":[{"name":"win","type":"boolean"}]},"__internal.__colorNumberPicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"value":"#ff0000","color":"#ff0000"},"blockId":"colorNumberPicker","block":"%value","blockHidden":true,"shim":"TD_ID","colorSecondary":"#FFFFFF","paramFieldEditor":{"value":"colornumber"},"paramFieldEditorOptions":{"value":{"decompileLiterals":"true","colours":"[\"#ff0000\",\"#ff8000\",\"#ffff00\",\"#ff9da5\",\"#00ff00\",\"#b09eff\",\"#00ffff\",\"#007fff\",\"#65471f\",\"#0000ff\",\"#7f00ff\",\"#ff0080\",\"#ff00ff\",\"#ffffff\",\"#999999\",\"#000000\"]","columns":"4","className":"rgbColorPicker"}},"explicitDefaults":["value"],"paramHelp":{"color":"color, eg: #ff0000"},"jsDoc":"Get the color wheel field editor","_def":{"parts":[{"kind":"param","name":"value","ref":false}],"parameters":[{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"value","initializer":"#ff0000","default":"#ff0000"}]},"__internal.__colorWheelPicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"value":"10"},"blockId":"colorWheelPicker","block":"%value","blockHidden":true,"shim":"TD_ID","colorSecondary":"#FFFFFF","paramFieldEditor":{"value":"colorwheel"},"paramFieldEditorOptions":{"value":{"decompileLiterals":"true","sliderWidth":"200","min":"0","max":"255"}},"paramHelp":{"value":"value between 0 to 255 to get a color value, eg: 10"},"jsDoc":"Get the color wheel field editor","_def":{"parts":[{"kind":"param","name":"value","ref":false}],"parameters":[{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"value","description":"value between 0 to 255 to get a color value, eg: 10","default":"10"}]},"__internal.__colorWheelHsvPicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"value":"10"},"blockId":"colorWheelHsvPicker","block":"%value","blockHidden":true,"shim":"TD_ID","colorSecondary":"#FFFFFF","paramFieldEditor":{"value":"colorwheel"},"paramFieldEditorOptions":{"value":{"decompileLiterals":"true","sliderWidth":"200","min":"0","max":"255","channel":"hsvfast"}},"paramHelp":{"value":"value between 0 to 255 to get a color value, eg: 10"},"jsDoc":"Get the color wheel field editor using HSV values","_def":{"parts":[{"kind":"param","name":"value","ref":false}],"parameters":[{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"value","description":"value between 0 to 255 to get a color value, eg: 10","default":"10"}]},"__internal.__speedPicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"speed":"50"},"blockId":"speedPicker","block":"%speed","shim":"TD_ID","paramFieldEditor":{"speed":"speed"},"colorSecondary":"#FFFFFF","weight":0,"blockHidden":true,"paramFieldEditorOptions":{"speed":{"decompileLiterals":"1"}},"paramHelp":{"speed":"the speed, eg: 50"},"jsDoc":"A speed picker","_def":{"parts":[{"kind":"param","name":"speed","ref":false}],"parameters":[{"kind":"param","name":"speed","ref":false}]}},"parameters":[{"name":"speed","description":"the speed, eg: 50","default":"50"}]},"__internal.__turnRatioPicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"turnratio":"0"},"blockId":"turnRatioPicker","block":"%turnratio","shim":"TD_ID","paramFieldEditor":{"turnratio":"turnratio"},"colorSecondary":"#FFFFFF","weight":0,"blockHidden":true,"paramFieldEditorOptions":{"turnRatio":{"decompileLiterals":"1"}},"paramHelp":{"turnratio":"the turn ratio, eg: 0"},"jsDoc":"A turn ratio picker","_def":{"parts":[{"kind":"param","name":"turnratio","ref":false}],"parameters":[{"kind":"param","name":"turnratio","ref":false}]}},"parameters":[{"name":"turnratio","description":"the turn ratio, eg: 0","default":"0"}]},"__internal.__protractor":{"kind":-3,"retType":"number","attributes":{"blockId":"protractorPicker","block":"%angle","shim":"TD_ID","paramFieldEditor":{"angle":"protractor"},"paramFieldEditorOptions":{"angle":{"decompileLiterals":"1"}},"colorSecondary":"#FFFFFF","blockHidden":true,"jsDoc":"A field editor that displays a protractor","_def":{"parts":[{"kind":"param","name":"angle","ref":false}],"parameters":[{"kind":"param","name":"angle","ref":false}]}},"parameters":[{"name":"angle"}]},"__internal.__timePicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"ms":"500"},"blockId":"timePicker","block":"%ms","blockHidden":true,"shim":"TD_ID","colorSecondary":"#FFFFFF","paramFieldEditor":{"ms":"numberdropdown"},"paramFieldEditorOptions":{"ms":{"decompileLiterals":"true","data":"[[\"100 ms\", 100], [\"200 ms\", 200], [\"500 ms\", 500], [\"1 second\", 1000], [\"2 seconds\", 2000], [\"5 seconds\", 5000]]"}},"paramHelp":{"ms":"time duration in milliseconds, eg: 500, 1000"},"jsDoc":"Get the time field editor","_def":{"parts":[{"kind":"param","name":"ms","ref":false}],"parameters":[{"kind":"param","name":"ms","ref":false}]}},"parameters":[{"name":"ms","description":"time duration in milliseconds, eg: 500, 1000","default":"500"}]}}},"sha":"d97d41a301d755ccdcad9adb8cb957306ad780cee967cffe4ffef018dabf775e"}}}
1
+ var pxtTargetBundle = {"id":"core","name":"Microsoft MakeCode","title":"Microsoft MakeCode","description":"A toolkit to build JavaScript Blocks editors.","bundleddirs":[],"compile":{"hasHex":false,"jsRefCounting":false,"switches":{},"noSourceInFlash":true,"utf8":true},"appTheme":{"logoUrl":"https://makecode.com/","logo":"@cdnUrl@/blob/4d9a6c8b1fa4c75911b2c468cb3ca1cdfb61fcb6/static/logo.svg","docsLogo":"@cdnUrl@/blob/4d9a6c8b1fa4c75911b2c468cb3ca1cdfb61fcb6/static/logo.svg","portraitLogo":"@cdnUrl@/blob/4d9a6c8b1fa4c75911b2c468cb3ca1cdfb61fcb6/static/logo.svg","organizationLogo":"@cdnUrl@/blob/106597ae039a275897661651b96856220c9b0fad/static/orglogo.png","organizationWideLogo":"@cdnUrl@/blob/d6139e3d0af51f02aa5f8765ecb0985acbd98551/static/orglogowide.png","homeUrl":"https://makecode.com/","cardLogo":"@cdnUrl@/blob/4d9a6c8b1fa4c75911b2c468cb3ca1cdfb61fcb6/static/logo.svg","appLogo":"@cdnUrl@/blob/4d9a6c8b1fa4c75911b2c468cb3ca1cdfb61fcb6/static/logo.svg","crowdinProject":"kindscript","docMenu":[{"name":"About","path":"/about"},{"name":"Docs","path":"/docs"},{"name":"Blog","path":"/blog"}],"hideDocsEdit":true,"hideDocsSimulator":true,"TOC":[{"name":"About MakeCode","path":"/about","subitems":[]},{"name":"Blog","path":"/blog","subitems":[]},{"name":"Online Learning","path":"/online-learning","subitems":[]},{"name":"Contact Us","path":"/contact","subitems":[]},{"name":"Tools","path":"/tools","subitems":[]},{"name":"Technical Docs","path":"/docs","subitems":[{"name":"JS Editor Features","path":"/js/editor","subitems":[]},{"name":"Programming Language","path":"/language","subitems":[]},{"name":"Async Functions","path":"/async","subitems":[]},{"name":"Partial Flashing","path":"/partial-flashing","subitems":[]},{"name":"Source Embedding","path":"/source-embedding","subitems":[]},{"name":"Updating Blockly Version","path":"/develop/blocklyupgrade","subitems":[]},{"name":"Accessibility","path":"/develop/accessibility","subitems":[]},{"name":"Profiling","path":"/js/profiling","subitems":[]},{"name":"Debugging Hardware","path":"/develop/hw-debugging","subitems":[]}]},{"name":"Creating Targets","path":"/target-creation","subitems":[{"name":"pxtarget.json","path":"/targets/pxtarget","subitems":[]},{"name":"Defining Blocks","path":"/defining-blocks","subitems":[]},{"name":"Auto-generation of .d.ts","path":"/simshim","subitems":[]},{"name":"Static File Drops","path":"/cli/staticpkg","subitems":[]},{"name":"Simulator","path":"/targets/simulator","subitems":[]},{"name":"Theming Editor","path":"/targets/theming","subitems":[]},{"name":"Embedding resources","path":"/jres","subitems":[]}]},{"name":"Creating Extensions","path":"/extensions","subitems":[{"name":"Getting started","path":"/extensions/getting-started","subitems":[]},{"name":"pxt.json","path":"/extensions/pxt-json","subitems":[]},{"name":"Extension versioning","path":"/extensions/versioning","subitems":[]},{"name":"Extension localization","path":"/extensions/localization","subitems":[]},{"name":"Extension approval","path":"/extensions/approval","subitems":[]},{"name":"Editor extensions","path":"/extensions/extensions","subitems":[]},{"name":"GitHub Extension Authoring","path":"/extensions/github-authoring","subitems":[]}]},{"name":"Writing Docs","path":"/writing-docs","subitems":[{"name":"Macros","path":"/writing-docs/macros","subitems":[]},{"name":"Anchors","path":"/writing-docs/anchors","subitems":[]},{"name":"Tutorials","path":"/writing-docs/tutorials","subitems":[]},{"name":"User Tutorials","path":"/writing-docs/user-tutorials","subitems":[]},{"name":"Skillmaps","path":"/writing-docs/skillmaps","subitems":[]},{"name":"Routing","path":"/writing-docs/routing","subitems":[]},{"name":"Testing","path":"/writing-docs/testing","subitems":[]}]},{"name":"Translations","path":"/translate","subitems":[]},{"name":"Blocks Embedding","path":"/blocks-embed","subitems":[]},{"name":"Command Line Interface","path":"/cli","subitems":[{"name":"install","path":"/cli/install","subitems":[]},{"name":"build","path":"/cli/build","subitems":[]},{"name":"bump","path":"/cli/bump","subitems":[]},{"name":"deploy","path":"/cli/deploy","subitems":[]},{"name":"console","path":"/cli/console","subitems":[]},{"name":"gdb","path":"/cli/gdb","subitems":[]},{"name":"staticpkg","path":"/cli/staticpkg","subitems":[]},{"name":"update","path":"/cli/update","subitems":[]},{"name":"pyconv","path":"/cli/pyconv","subitems":[]},{"name":"hidserial","path":"/cli/hidserial","subitems":[]},{"name":"hiddmesg","path":"/cli/hiddmesg","subitems":[]},{"name":"login","path":"/cli/login","subitems":[]}]},{"name":"Labs","path":"/labs","subitems":[]},{"name":"UF2 File Format","path":"https://github.com/microsoft/uf2","subitems":[]},{"name":"Accessibility","path":"/accessibility","subitems":[]},{"name":"Telemetry","path":"/telemetry","subitems":[]}],"embedUrl":"https://makecode.com/","id":"core","title":"Microsoft MakeCode","name":"Microsoft MakeCode","description":"A toolkit to build JavaScript Blocks editors.","htmlDocIncludes":{}},"uploadDocs":true,"versions":{"branch":"v7.3.25","tag":"v7.3.25","commits":"https://github.com/microsoft/pxt/commits/a25447972537e0e381a9ff28835901779fb82548","target":"7.3.25","pxt":"7.3.25"},"blocksprj":{"id":"blocksprj","config":{"name":"empty","description":"An empty project for docs rendering","dependencies":{},"files":["main.ts","pxt-core.d.ts","pxt-helpers.ts"],"public":true,"additionalFilePaths":[]},"files":{"main.ts":"\n"}},"tsprj":{"id":"tsprj","config":{"name":"empty","description":"An empty project for docs rendering","dependencies":{},"files":["main.ts","pxt-core.d.ts","pxt-helpers.ts"],"public":true,"additionalFilePaths":[]},"files":{"main.ts":"\n"}},"bundledpkgs":{},"apiInfo":{"libs/blocksprj":{"apis":{"byQName":{"Array":{"kind":5,"retType":"","attributes":{"blockNamespace":"Arrays","jsDoc":"Add, remove, and replace items in lists."}},"Array.length":{"kind":2,"retType":"number","attributes":{"weight":84,"blockId":"lists_length","block":"length of %VALUE","blockBuiltin":"true","blockNamespace":"arrays","jsDoc":"Get or set the length of an array. This number is one more than the index of the last element the array.","_def":{"parts":[{"kind":"label","text":"length of ","style":[]},{"kind":"param","name":"VALUE","ref":false}],"parameters":[{"kind":"param","name":"VALUE","ref":false}]}},"isInstance":true},"Array.push":{"kind":-1,"attributes":{"help":"arrays/push","weight":50,"blockId":"array_push","block":"%list| add value %value| to end","blockNamespace":"arrays","group":"Modify","paramHelp":{"items":"New elements of the Array."},"jsDoc":"Append a new element to an array.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" add value ","style":[]},{"kind":"param","name":"value","ref":false},{"kind":"break"},{"kind":"label","text":" to end","style":[]}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"item","type":"T"}],"isInstance":true,"pyQName":"Array.append"},"Array.concat":{"kind":-1,"retType":"T[]","attributes":{"helper":"arrayConcat","weight":40,"paramHelp":{"arr":"The other array that is being concatenated with"},"jsDoc":"Concatenates the values with another array."},"parameters":[{"name":"arr","description":"The other array that is being concatenated with","type":"T[]"}],"isInstance":true},"Array.pop":{"kind":-1,"retType":"T","attributes":{"help":"arrays/pop","weight":45,"blockId":"array_pop","block":"get and remove last value from %list","blockNamespace":"arrays","group":"Read","jsDoc":"Remove the last element from an array and return it.","_def":{"parts":[{"kind":"label","text":"get and remove last value from ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true},"Array.reverse":{"kind":-1,"attributes":{"help":"arrays/reverse","helper":"arrayReverse","weight":10,"blockId":"array_reverse","block":"reverse %list","blockNamespace":"arrays","group":"Operations","jsDoc":"Reverse the elements in an array. The first array element becomes the last, and the last array element becomes the first.","_def":{"parts":[{"kind":"label","text":"reverse ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true},"Array.shift":{"kind":-1,"retType":"T","attributes":{"help":"arrays/shift","helper":"arrayShift","weight":30,"blockId":"array_shift","block":"get and remove first value from %list","blockNamespace":"arrays","group":"Read","jsDoc":"Remove the first element from an array and return it. This method changes the length of the array.","_def":{"parts":[{"kind":"label","text":"get and remove first value from ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true},"Array.unshift":{"kind":-1,"retType":"number","attributes":{"help":"arrays/unshift","helper":"arrayUnshift","weight":25,"blockId":"array_unshift","block":"%list| insert %value| at beginning","blockNamespace":"arrays","group":"Modify","paramHelp":{"element":"to insert at the start of the Array."},"jsDoc":"Add one element to the beginning of an array and return the new length of the array.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" insert ","style":[]},{"kind":"param","name":"value","ref":false},{"kind":"break"},{"kind":"label","text":" at beginning","style":[]}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"value","type":"T"}],"isInstance":true},"Array.slice":{"kind":-1,"retType":"T[]","attributes":{"paramDefl":{"start":"0","end":"0"},"help":"arrays/slice","helper":"arraySlice","weight":41,"blockNamespace":"arrays","paramHelp":{"start":"The beginning of the specified portion of the array. eg: 0","end":"The end of the specified portion of the array. eg: 0"},"jsDoc":"Return a section of an array."},"parameters":[{"name":"start","description":"The beginning of the specified portion of the array. eg: 0","initializer":"undefined","default":"0"},{"name":"end","description":"The end of the specified portion of the array. eg: 0","initializer":"undefined","default":"0"}],"isInstance":true},"Array.splice":{"kind":-1,"attributes":{"paramDefl":{"start":"0","deleteCount":"0"},"helper":"arraySplice","weight":40,"paramHelp":{"start":"The zero-based location in the array from which to start removing elements. eg: 0","deleteCount":"The number of elements to remove. eg: 0"},"jsDoc":"Remove elements from an array."},"parameters":[{"name":"start","description":"The zero-based location in the array from which to start removing elements. eg: 0","default":"0"},{"name":"deleteCount","description":"The number of elements to remove. eg: 0","default":"0"}],"isInstance":true},"Array.join":{"kind":-1,"retType":"string","attributes":{"helper":"arrayJoin","weight":40,"paramHelp":{"sep":"the string separator"},"jsDoc":"joins all elements of an array into a string and returns this string."},"parameters":[{"name":"sep","description":"the string separator","type":"string","initializer":"undefined"}],"isInstance":true},"Array.some":{"kind":-1,"retType":"boolean","attributes":{"helper":"arraySome","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to two arguments. The some method calls the callbackfn function one time for each element in the array."},"jsDoc":"Tests whether at least one element in the array passes the test implemented by the provided function."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to two arguments. The some method calls the callbackfn function one time for each element in the array.","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true},"Array.every":{"kind":-1,"retType":"boolean","attributes":{"helper":"arrayEvery","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to two arguments. The every method calls the callbackfn function one time for each element in the array."},"jsDoc":"Tests whether all elements in the array pass the test implemented by the provided function."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to two arguments. The every method calls the callbackfn function one time for each element in the array.","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true},"Array.sort":{"kind":-1,"retType":"T[]","attributes":{"helper":"arraySort","weight":40,"paramHelp":{"specifies":"a function that defines the sort order. If omitted, the array is sorted according to the prmitive type"},"jsDoc":"Sort the elements of an array in place and returns the array. The sort is not necessarily stable."},"parameters":[{"name":"callbackfn","type":"(value1: T, value2: T) => number","initializer":"undefined","handlerParameters":[{"name":"value1","type":"T"},{"name":"value2","type":"T"}]}],"isInstance":true},"Array.map":{"kind":-1,"retType":"U[]","attributes":{"helper":"arrayMap","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array."},"jsDoc":"Call a defined callback function on each element of an array, and return an array containing the results."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to two arguments. The map method calls the callbackfn function one time for each element in the array.","type":"(value: T, index: number) => U","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true},"Array.forEach":{"kind":-1,"attributes":{"helper":"arrayForEach","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to two arguments. The forEach method calls the callbackfn function one time for each element in the array."},"jsDoc":"Call a defined callback function on each element of an array."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to two arguments. The forEach method calls the callbackfn function one time for each element in the array.","type":"(value: T, index: number) => void","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true,"pyQName":"Array.for_each"},"Array.filter":{"kind":-1,"retType":"T[]","attributes":{"helper":"arrayFilter","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array."},"jsDoc":"Return the elements of an array that meet the condition specified in a callback function."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to two arguments. The filter method calls the callbackfn function one time for each element in the array.","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true},"Array.fill":{"kind":-1,"retType":"T[]","attributes":{"helper":"arrayFill","weight":39,"jsDoc":"Fills all the elements of an array from a start index to an end index with a static value. The end index is not included."},"parameters":[{"name":"value","type":"T"},{"name":"start","initializer":"undefined"},{"name":"end","initializer":"undefined"}],"isInstance":true},"Array.find":{"kind":-1,"retType":"T","attributes":{"helper":"arrayFind","weight":40,"paramHelp":{"callbackfn":""},"jsDoc":"Returns the value of the first element in the array that satisfies the provided testing function. Otherwise undefined is returned."},"parameters":[{"name":"callbackfn","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"isInstance":true},"Array.reduce":{"kind":-1,"retType":"U","attributes":{"helper":"arrayReduce","weight":40,"paramHelp":{"callbackfn":"A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.","initialValue":"Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value."},"jsDoc":"Call the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function."},"parameters":[{"name":"callbackfn","description":"A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the array.","type":"(previousValue: U, currentValue: T, currentIndex: number) => U","handlerParameters":[{"name":"previousValue","type":"U"},{"name":"currentValue","type":"T"},{"name":"currentIndex","type":"number"}]},{"name":"initialValue","description":"Initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.","type":"U"}],"isInstance":true},"Array.removeElement":{"kind":-1,"retType":"boolean","attributes":{"weight":48,"jsDoc":"Remove the first occurence of an object. Returns true if removed."},"parameters":[{"name":"element","type":"T"}],"isInstance":true,"pyQName":"Array.remove_element"},"Array.removeAt":{"kind":-1,"retType":"T","attributes":{"help":"arrays/remove-at","weight":47,"blockId":"array_removeat","block":"%list| get and remove value at %index","blockNamespace":"arrays","group":"Read","jsDoc":"Remove the element at a certain index.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" get and remove value at ","style":[]},{"kind":"param","name":"index","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"index","ref":false}]}},"parameters":[{"name":"index"}],"isInstance":true,"pyQName":"Array.remove_at"},"Array.insertAt":{"kind":-1,"attributes":{"paramDefl":{"index":"0","the":"0"},"help":"arrays/insert-at","weight":20,"blockId":"array_insertAt","block":"%list| insert at %index| value %value","blockNamespace":"arrays","group":"Modify","paramHelp":{"index":"the zero-based position in the list to insert the value, eg: 0","the":"value to insert, eg: 0"},"jsDoc":"Insert the value at a particular index, increases length by 1","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" insert at ","style":[]},{"kind":"param","name":"index","ref":false},{"kind":"break"},{"kind":"label","text":" value ","style":[]},{"kind":"param","name":"value","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"index","ref":false},{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"index","description":"the zero-based position in the list to insert the value, eg: 0","default":"0"},{"name":"value","type":"T"}],"isInstance":true,"pyQName":"Array.insert_at"},"Array.indexOf":{"kind":-1,"retType":"number","attributes":{"help":"arrays/index-of","weight":40,"blockId":"array_indexof","block":"%list| find index of %value","blockNamespace":"arrays","group":"Operations","paramHelp":{"item":"The value to locate in the array.","fromIndex":"The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0."},"jsDoc":"Return the index of the first occurrence of a value in an array.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" find index of ","style":[]},{"kind":"param","name":"value","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"item","description":"The value to locate in the array.","type":"T"},{"name":"fromIndex","description":"The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.","initializer":"undefined"}],"isInstance":true,"pyQName":"Array.index"},"Array.get":{"kind":-1,"retType":"T","attributes":{"paramDefl":{"index":"0"},"help":"arrays/get","weight":85,"paramHelp":{"index":"the zero-based position in the list of the item, eg: 0"},"jsDoc":"Get the value at a particular index"},"parameters":[{"name":"index","description":"the zero-based position in the list of the item, eg: 0","default":"0"}],"isInstance":true},"Array.set":{"kind":-1,"attributes":{"paramDefl":{"index":"0","value":"0"},"help":"arrays/set","weight":84,"paramHelp":{"index":"the zero-based position in the list to store the value, eg: 0","value":"the value to insert, eg: 0"},"jsDoc":"Store a value at a particular index"},"parameters":[{"name":"index","description":"the zero-based position in the list to store the value, eg: 0","default":"0"},{"name":"value","description":"the value to insert, eg: 0","type":"T","default":"0"}],"isInstance":true},"Array._pickRandom":{"kind":-1,"retType":"T","attributes":{"help":"arrays/pick-random","helper":"arrayPickRandom","weight":25,"blockId":"array_pickRandom","block":"get random value from %list","blockNamespace":"arrays","group":"Read","jsDoc":"Return a random value from the array","_def":{"parts":[{"kind":"label","text":"get random value from ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true,"pyQName":"Array._pick_random"},"Array._unshiftStatement":{"kind":-1,"attributes":{"help":"arrays/unshift","helper":"arrayUnshift","weight":24,"blockId":"array_unshift_statement","block":"%list| insert %value| at beginning","blockNamespace":"arrays","blockAliasFor":"Array.unshift","group":"Modify","paramHelp":{"element":"to insert at the start of the Array."},"jsDoc":"Add one element to the beginning of an array and return the new length of the array.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" insert ","style":[]},{"kind":"param","name":"value","ref":false},{"kind":"break"},{"kind":"label","text":" at beginning","style":[]}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"value","type":"T"}],"isInstance":true,"pyQName":"Array._unshift_statement"},"Array._popStatement":{"kind":-1,"attributes":{"help":"arrays/pop","weight":44,"blockId":"array_pop_statement","block":"remove last value from %list","blockNamespace":"arrays","blockAliasFor":"Array.pop","group":"Modify","jsDoc":"Remove the last element from an array and return it.","_def":{"parts":[{"kind":"label","text":"remove last value from ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true,"pyQName":"Array._pop_statement"},"Array._shiftStatement":{"kind":-1,"attributes":{"help":"arrays/shift","helper":"arrayShift","weight":29,"blockId":"array_shift_statement","block":"remove first value from %list","blockNamespace":"arrays","blockAliasFor":"Array.shift","group":"Modify","jsDoc":"Remove the first element from an array and return it. This method changes the length of the array.","_def":{"parts":[{"kind":"label","text":"remove first value from ","style":[]},{"kind":"param","name":"list","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false}]}},"parameters":[],"isInstance":true,"pyQName":"Array._shift_statement"},"Array._removeAtStatement":{"kind":-1,"attributes":{"help":"arrays/remove-at","weight":14,"blockId":"array_removeat_statement","block":"%list| remove value at %index","blockNamespace":"arrays","blockAliasFor":"Array.removeAt","group":"Modify","jsDoc":"Remove the element at a certain index.","_def":{"parts":[{"kind":"param","name":"list","ref":false},{"kind":"break"},{"kind":"label","text":" remove value at ","style":[]},{"kind":"param","name":"index","ref":false}],"parameters":[{"kind":"param","name":"list","ref":false},{"kind":"param","name":"index","ref":false}]}},"parameters":[{"name":"index"}],"isInstance":true,"pyQName":"Array._remove_at_statement"},"String":{"kind":5,"retType":"","attributes":{"blockNamespace":"text","jsDoc":"Combine, split, and search text strings."}},"String.concat":{"kind":-1,"retType":"string","attributes":{"weight":49,"blockId":"string_concat","blockNamespace":"text","paramHelp":{"other":"The string to append to the end of the string."},"jsDoc":"Returns a string that contains the concatenation of two or more strings."},"parameters":[{"name":"other","description":"The string to append to the end of the string.","type":"string"}],"isInstance":true},"String.charAt":{"kind":-1,"retType":"string","attributes":{"weight":48,"help":"text/char-at","blockId":"string_get","block":"char from %this=text|at %pos","blockNamespace":"text","paramHelp":{"index":"The zero-based index of the desired character."},"jsDoc":"Return the character at the specified index.","_def":{"parts":[{"kind":"label","text":"char from ","style":[]},{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":"at ","style":[]},{"kind":"param","name":"pos","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"pos","ref":false}]}},"parameters":[{"name":"index","description":"The zero-based index of the desired character."}],"isInstance":true,"pyQName":"String.char_at"},"String.length":{"kind":2,"retType":"number","attributes":{"property":"true","weight":47,"blockId":"text_length","block":"length of %VALUE","blockBuiltin":"true","blockNamespace":"text","jsDoc":"Returns the length of a String object.","_def":{"parts":[{"kind":"label","text":"length of ","style":[]},{"kind":"param","name":"VALUE","ref":false}],"parameters":[{"kind":"param","name":"VALUE","ref":false}]}},"isInstance":true},"String.charCodeAt":{"kind":-1,"retType":"number","attributes":{"paramHelp":{"index":"The zero-based index of the desired character. If there is no character at the specified index, NaN is returned."},"jsDoc":"Return the Unicode value of the character at the specified location."},"parameters":[{"name":"index","description":"The zero-based index of the desired character. If there is no character at the specified index, NaN is returned."}],"isInstance":true,"pyQName":"String.char_code_at"},"String.compare":{"kind":-1,"retType":"number","attributes":{"help":"text/compare","blockId":"string_compare","block":"compare %this=text| to %that","blockNamespace":"text","paramHelp":{"that":"String to compare to target string"},"jsDoc":"See how the order of characters in two strings is different (in ASCII encoding).","_def":{"parts":[{"kind":"label","text":"compare ","style":[]},{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":" to ","style":[]},{"kind":"param","name":"that","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"that","ref":false}]}},"parameters":[{"name":"that","description":"String to compare to target string","type":"string"}],"isInstance":true},"String.substr":{"kind":-1,"retType":"string","attributes":{"paramDefl":{"start":"0","length":"10"},"helper":"stringSubstr","help":"text/substr","blockId":"string_substr","block":"substring of %this=text|from %start|of length %length","blockNamespace":"text","paramHelp":{"start":"first character index; can be negative from counting from the end, eg:0","length":"number of characters to extract, eg: 10"},"jsDoc":"Return a substring of the current string.","_def":{"parts":[{"kind":"label","text":"substring of ","style":[]},{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":"from ","style":[]},{"kind":"param","name":"start","ref":false},{"kind":"break"},{"kind":"label","text":"of length ","style":[]},{"kind":"param","name":"length","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"start","ref":false},{"kind":"param","name":"length","ref":false}]}},"parameters":[{"name":"start","description":"first character index; can be negative from counting from the end, eg:0","default":"0"},{"name":"length","description":"number of characters to extract, eg: 10","initializer":"undefined","default":"10"}],"isInstance":true},"String.replace":{"kind":-1,"retType":"string","attributes":{"helper":"stringReplace","paramHelp":{"toReplace":"the substring to replace in the current string","replacer":"either the string that replaces toReplace in the current string,"},"jsDoc":"Return the current string with the first occurence of toReplace\nreplaced with the replacer\n\n\nor a function that accepts the substring and returns the replacement string."},"parameters":[{"name":"toReplace","description":"the substring to replace in the current string","type":"string"},{"name":"replacer","description":"either the string that replaces toReplace in the current string,","type":"string | ((sub: string) => string)"}],"isInstance":true},"String.replaceAll":{"kind":-1,"retType":"string","attributes":{"helper":"stringReplaceAll","paramHelp":{"toReplace":"the substring to replace in the current string","replacer":"either the string that replaces toReplace in the current string,"},"jsDoc":"Return the current string with each occurence of toReplace\nreplaced with the replacer\n\n\nor a function that accepts the substring and returns the replacement string."},"parameters":[{"name":"toReplace","description":"the substring to replace in the current string","type":"string"},{"name":"replacer","description":"either the string that replaces toReplace in the current string,","type":"string | ((sub: string) => string)"}],"isInstance":true,"pyQName":"String.replace_all"},"String.slice":{"kind":-1,"retType":"string","attributes":{"paramDefl":{"start":"0"},"helper":"stringSlice","paramHelp":{"start":"first character index; can be negative from counting from the end, eg:0","end":"one-past-last character index"},"jsDoc":"Return a substring of the current string."},"parameters":[{"name":"start","description":"first character index; can be negative from counting from the end, eg:0","default":"0"},{"name":"end","description":"one-past-last character index","initializer":"undefined"}],"isInstance":true},"String.isEmpty":{"kind":-1,"retType":"boolean","attributes":{"helper":"stringEmpty","help":"text/is-empty","blockId":"string_isempty","blockNamespace":"text","block":"%this=text| is empty","jsDoc":"Returns a value indicating if the string is empty","_def":{"parts":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":" is empty","style":[]}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false}]}},"parameters":[],"isInstance":true,"pyQName":"String.is_empty"},"String.indexOf":{"kind":-1,"retType":"number","attributes":{"help":"text/index-of","blockId":"string_indexof","blockNamespace":"text","block":"%this=text|find index of %searchValue","paramHelp":{"searchValue":"the text to find","start":"optional start index for the search"},"jsDoc":"Returns the position of the first occurrence of a specified value in a string.","_def":{"parts":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":"find index of ","style":[]},{"kind":"param","name":"searchValue","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"searchValue","ref":false}]}},"parameters":[{"name":"searchValue","description":"the text to find","type":"string"},{"name":"start","description":"optional start index for the search","initializer":"undefined"}],"isInstance":true,"pyQName":"String.index_of"},"String.includes":{"kind":-1,"retType":"boolean","attributes":{"help":"text/includes","blockId":"string_includes","blockNamespace":"text","block":"%this=text|includes %searchValue","paramHelp":{"searchValue":"the text to find","start":"optional start index for the search"},"jsDoc":"Determines whether a string contains the characters of a specified string.","_def":{"parts":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":"includes ","style":[]},{"kind":"param","name":"searchValue","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"searchValue","ref":false}]}},"parameters":[{"name":"searchValue","description":"the text to find","type":"string"},{"name":"start","description":"optional start index for the search","initializer":"undefined"}],"isInstance":true},"String.split":{"kind":-1,"retType":"string[]","attributes":{"helper":"stringSplit","help":"text/split","blockId":"string_split","blockNamespace":"text","block":"split %this=text|at %separator","paramHelp":{"separator":"@param limit"},"jsDoc":"Splits the string according to the separators","_def":{"parts":[{"kind":"label","text":"split ","style":[]},{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"break"},{"kind":"label","text":"at ","style":[]},{"kind":"param","name":"separator","ref":false}],"parameters":[{"kind":"param","name":"this","shadowBlockId":"text","ref":false},{"kind":"param","name":"separator","ref":false}]}},"parameters":[{"name":"separator","description":"@param limit","type":"string","initializer":"undefined"},{"name":"limit","initializer":"undefined"}],"isInstance":true},"String.trim":{"kind":-1,"retType":"string","attributes":{"helper":"stringTrim","jsDoc":"Return a substring of the current string with whitespace removed from both ends"},"parameters":[],"isInstance":true},"String.toUpperCase":{"kind":-1,"retType":"string","attributes":{"helper":"stringToUpperCase","help":"text/to-upper-case","jsDoc":"Converts the string to upper case characters."},"parameters":[],"isInstance":true,"pyQName":"String.to_upper_case"},"String.toLowerCase":{"kind":-1,"retType":"string","attributes":{"helper":"stringToLowerCase","help":"text/to-lower-case","jsDoc":"Converts the string to lower case characters."},"parameters":[],"isInstance":true,"pyQName":"String.to_lower_case"},"parseFloat":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"text":"123","s":"123"},"help":"text/parse-float","blockId":"string_parsefloat","block":"parse to number %text","blockNamespace":"text","explicitDefaults":["text"],"paramHelp":{"s":"A string to convert into a number. eg: 123"},"jsDoc":"Convert a string to a number.","_def":{"parts":[{"kind":"label","text":"parse to number ","style":[]},{"kind":"param","name":"text","ref":false}],"parameters":[{"kind":"param","name":"text","ref":false}]}},"parameters":[{"name":"text","type":"string","initializer":"123","default":"123"}],"pyQName":"parse_float"},"randint":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"min":"0","max":"10"},"blockId":"device_random","block":"pick random %min|to %limit","blockNamespace":"Math","help":"math/randint","paramHelp":{"min":"the lower inclusive bound, eg: 0","max":"the upper inclusive bound, eg: 10"},"jsDoc":"Returns a pseudorandom number between min and max included.\nIf both numbers are integral, the result is integral.","_def":{"parts":[{"kind":"label","text":"pick random ","style":[]},{"kind":"param","name":"min","ref":false},{"kind":"break"},{"kind":"label","text":"to ","style":[]},{"kind":"param","name":"limit","ref":false}],"parameters":[{"kind":"param","name":"min","ref":false},{"kind":"param","name":"limit","ref":false}]}},"parameters":[{"name":"min","description":"the lower inclusive bound, eg: 0","default":"0"},{"name":"max","description":"the upper inclusive bound, eg: 10","default":"10"}]},"Object":{"kind":5,"retType":""},"Function":{"kind":9,"retType":"Function","extendsTypes":[]},"Function.__assignableToFunction":{"kind":2,"retType":"Function","isInstance":true},"IArguments":{"kind":9,"retType":"IArguments","extendsTypes":[]},"IArguments.__assignableToIArguments":{"kind":2,"retType":"IArguments","isInstance":true},"RegExp":{"kind":9,"retType":"RegExp","extendsTypes":[]},"RegExp.__assignableToRegExp":{"kind":2,"retType":"RegExp","isInstance":true},"Boolean":{"kind":9,"retType":"Boolean","extendsTypes":[]},"Boolean.toString":{"kind":-1,"retType":"string","attributes":{"jsDoc":"Returns a string representation of an object."},"parameters":[],"isInstance":true,"pyQName":"Boolean.to_string"},"String@type":{"kind":9,"retType":"String","attributes":{"blockNamespace":"text","jsDoc":"Combine, split, and search text strings."},"extendsTypes":[],"pyQName":"String"},"String.fromCharCode":{"kind":-3,"retType":"string","attributes":{"help":"math/from-char-code","weight":1,"blockNamespace":"text","blockId":"stringFromCharCode","block":"text from char code %code","jsDoc":"Make a string from the given ASCII character code.","_def":{"parts":[{"kind":"label","text":"text from char code ","style":[]},{"kind":"param","name":"code","ref":false}],"parameters":[{"kind":"param","name":"code","ref":false}]}},"parameters":[{"name":"code"}],"pyQName":"String.from_char_code"},"Number":{"kind":5,"retType":""},"Number.toString":{"kind":-1,"retType":"string","attributes":{"jsDoc":"Returns a string representation of a number."},"parameters":[],"isInstance":true,"pyQName":"Number.to_string"},"Array@type":{"kind":9,"retType":"T[]","attributes":{"blockNamespace":"Arrays","jsDoc":"Add, remove, and replace items in lists."},"extendsTypes":[],"pyQName":"Array"},"Array.isArray":{"kind":-3,"retType":"boolean","attributes":{"jsDoc":"Check if a given object is an array."},"parameters":[{"name":"obj","type":"any"}],"pyQName":"Array.is_array"},"Object@type":{"kind":9,"retType":"Object","extendsTypes":[],"pyQName":"Object"},"Object.keys":{"kind":-3,"retType":"string[]","attributes":{"jsDoc":"Return the field names in an object."},"parameters":[{"name":"obj","type":"any"}]},"Math":{"kind":5,"retType":"","attributes":{"jsDoc":"More complex operations with numbers."}},"Math.pow":{"kind":-3,"retType":"number","attributes":{"paramHelp":{"x":"The base value of the expression.","y":"The exponent value of the expression."},"jsDoc":"Returns the value of a base expression taken to a specified power."},"parameters":[{"name":"x","description":"The base value of the expression."},{"name":"y","description":"The exponent value of the expression."}]},"Math.random":{"kind":-3,"retType":"number","attributes":{"help":"math/random","jsDoc":"Returns a pseudorandom number between 0 and 1."},"parameters":[]},"Math.randomRange":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"min":"0","max":"10"},"blockId":"device_random_deprecated","block":"pick random %min|to %limit","help":"math/random-range","deprecated":"true","paramHelp":{"min":"the lower inclusive bound, eg: 0","max":"the upper inclusive bound, eg: 10"},"jsDoc":"Returns a pseudorandom number between min and max included.\nIf both numbers are integral, the result is integral.","_def":{"parts":[{"kind":"label","text":"pick random ","style":[]},{"kind":"param","name":"min","ref":false},{"kind":"break"},{"kind":"label","text":"to ","style":[]},{"kind":"param","name":"limit","ref":false}],"parameters":[{"kind":"param","name":"min","ref":false},{"kind":"param","name":"limit","ref":false}]}},"parameters":[{"name":"min","description":"the lower inclusive bound, eg: 0","default":"0"},{"name":"max","description":"the upper inclusive bound, eg: 10","default":"10"}],"pyQName":"Math.random_range"},"Math.log":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A number"},"jsDoc":"Returns the natural logarithm (base e) of a number."},"parameters":[{"name":"x","description":"A number"}]},"Math.exp":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A number"},"jsDoc":"Returns returns ``e^x``."},"parameters":[{"name":"x","description":"A number"}]},"Math.sin":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"An angle in radians"},"jsDoc":"Returns the sine of a number."},"parameters":[{"name":"x","description":"An angle in radians"}]},"Math.cos":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"An angle in radians"},"jsDoc":"Returns the cosine of a number."},"parameters":[{"name":"x","description":"An angle in radians"}]},"Math.tan":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"An angle in radians"},"jsDoc":"Returns the tangent of a number."},"parameters":[{"name":"x","description":"An angle in radians"}]},"Math.asin":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"A number"},"jsDoc":"Returns the arcsine (in radians) of a number"},"parameters":[{"name":"x","description":"A number"}]},"Math.acos":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"A number"},"jsDoc":"Returns the arccosine (in radians) of a number"},"parameters":[{"name":"x","description":"A number"}]},"Math.atan":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"x":"A number"},"jsDoc":"Returns the arctangent (in radians) of a number"},"parameters":[{"name":"x","description":"A number"}]},"Math.atan2":{"kind":-3,"retType":"number","attributes":{"help":"math/trigonometry","paramHelp":{"y":"A number","x":"A number"},"jsDoc":"Returns the arctangent of the quotient of its arguments."},"parameters":[{"name":"y","description":"A number"},{"name":"x","description":"A number"}]},"Math.sqrt":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A numeric expression."},"jsDoc":"Returns the square root of a number."},"parameters":[{"name":"x","description":"A numeric expression."}]},"Math.ceil":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A numeric expression."},"jsDoc":"Returns the smallest number greater than or equal to its numeric argument."},"parameters":[{"name":"x","description":"A numeric expression."}]},"Math.floor":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A numeric expression."},"jsDoc":"Returns the greatest number less than or equal to its numeric argument."},"parameters":[{"name":"x","description":"A numeric expression."}]},"Math.trunc":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"A numeric expression."},"jsDoc":"Returns the number with the decimal part truncated."},"parameters":[{"name":"x","description":"A numeric expression."}],"pyQName":"int"},"Math.round":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"The value to be rounded to the nearest number."},"jsDoc":"Returns a supplied numeric expression rounded to the nearest number."},"parameters":[{"name":"x","description":"The value to be rounded to the nearest number."}]},"Math.imul":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"The first number","y":"The second number"},"jsDoc":"Returns the value of integer signed 32 bit multiplication of two numbers."},"parameters":[{"name":"x","description":"The first number"},{"name":"y","description":"The second number"}]},"Math.idiv":{"kind":-3,"retType":"number","attributes":{"help":"math","paramHelp":{"x":"The first number","y":"The second number"},"jsDoc":"Returns the value of integer signed 32 bit division of two numbers."},"parameters":[{"name":"x","description":"The first number"},{"name":"y","description":"The second number"}]},"control":{"kind":5,"retType":""},"control._onCodeStart":{"kind":-3,"parameters":[{"name":"arg","type":"any"}],"pyQName":"control._on_code_start"},"control._onCodeStop":{"kind":-3,"parameters":[{"name":"arg","type":"any"}],"pyQName":"control._on_code_stop"},"NaN":{"kind":4,"retType":"number","attributes":{"jsDoc":"Constant representing Not-A-Number."},"pyQName":"na_n"},"Infinity":{"kind":4,"retType":"number","attributes":{"jsDoc":"Constant representing positive infinity."},"pyQName":"infinity"},"isNaN":{"kind":-3,"retType":"boolean","parameters":[{"name":"x"}],"pyQName":"is_na_n"},"Number@type":{"kind":9,"retType":"Number","extendsTypes":[],"pyQName":"Number"},"Number.isNaN":{"kind":-3,"retType":"boolean","attributes":{"jsDoc":"Check if a given value is of type Number and it is a NaN."},"parameters":[{"name":"x","type":"any"}],"pyQName":"Number.is_na_n"},"StringMap":{"kind":9,"retType":"StringMap","attributes":{"jsDoc":"A dictionary from string key to string values"},"extendsTypes":[]},"parseInt":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"text":"123"},"help":"text/parse-int","blockId":"string_parseint","block":"parse to integer %text","blockNamespace":"text","explicitDefaults":["text"],"blockHidden":true,"paramHelp":{"text":"A string to convert into an integral number. eg: \"123\"","radix":"optional A value between 2 and 36 that specifies the base of the number in text."},"jsDoc":"Convert a string to an integer.\n\n\nIf this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.\nAll other strings are considered decimal.","_def":{"parts":[{"kind":"label","text":"parse to integer ","style":[]},{"kind":"param","name":"text","ref":false}],"parameters":[{"kind":"param","name":"text","ref":false}]}},"parameters":[{"name":"text","description":"A string to convert into an integral number. eg: \"123\"","type":"string","initializer":"123","default":"123"},{"name":"radix","description":"optional A value between 2 and 36 that specifies the base of the number in text.","initializer":"undefined"}],"pyQName":"int"},"helpers":{"kind":5,"retType":""},"helpers.arrayFill":{"kind":-3,"retType":"T[]","parameters":[{"name":"O","type":"T[]"},{"name":"value","type":"T"},{"name":"start","initializer":"undefined"},{"name":"end","initializer":"undefined"}],"pyQName":"helpers.array_fill"},"helpers.arraySplice":{"kind":-3,"parameters":[{"name":"arr","type":"T[]"},{"name":"start"},{"name":"len"}],"pyQName":"helpers.array_splice"},"helpers.arrayReverse":{"kind":-3,"parameters":[{"name":"arr","type":"T[]"}],"pyQName":"helpers.array_reverse"},"helpers.arrayShift":{"kind":-3,"retType":"T","parameters":[{"name":"arr","type":"T[]"}],"pyQName":"helpers.array_shift"},"helpers.arrayJoin":{"kind":-3,"retType":"string","parameters":[{"name":"arr","type":"T[]"},{"name":"sep","type":"string","initializer":"undefined"}],"pyQName":"helpers.array_join"},"helpers.arrayUnshift":{"kind":-3,"retType":"number","parameters":[{"name":"arr","type":"T[]"},{"name":"value","type":"T"}],"pyQName":"helpers.array_unshift"},"helpers.arraySort":{"kind":-3,"retType":"T[]","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value1: T, value2: T) => number","initializer":"undefined","handlerParameters":[{"name":"value1","type":"T"},{"name":"value2","type":"T"}]}],"pyQName":"helpers.array_sort"},"helpers.arrayMap":{"kind":-3,"retType":"U[]","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => U","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_map"},"helpers.arraySome":{"kind":-3,"retType":"boolean","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_some"},"helpers.arrayEvery":{"kind":-3,"retType":"boolean","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_every"},"helpers.arrayForEach":{"kind":-3,"parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => void","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_for_each"},"helpers.arrayFilter":{"kind":-3,"retType":"T[]","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_filter"},"helpers.arrayFind":{"kind":-3,"retType":"T","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(value: T, index: number) => boolean","handlerParameters":[{"name":"value","type":"T"},{"name":"index","type":"number"}]}],"pyQName":"helpers.array_find"},"helpers.arrayReduce":{"kind":-3,"retType":"U","parameters":[{"name":"arr","type":"T[]"},{"name":"callbackfn","type":"(previousValue: U, currentValue: T, currentIndex: number) => U","handlerParameters":[{"name":"previousValue","type":"U"},{"name":"currentValue","type":"T"},{"name":"currentIndex","type":"number"}]},{"name":"initialValue","type":"U"}],"pyQName":"helpers.array_reduce"},"helpers.arrayConcat":{"kind":-3,"retType":"T[]","parameters":[{"name":"arr","type":"T[]"},{"name":"otherArr","type":"T[]"}],"pyQName":"helpers.array_concat"},"helpers.arrayPickRandom":{"kind":-3,"retType":"T","parameters":[{"name":"arr","type":"T[]"}],"pyQName":"helpers.array_pick_random"},"helpers.arraySlice":{"kind":-3,"retType":"T[]","parameters":[{"name":"arr","type":"T[]"},{"name":"start","initializer":"undefined"},{"name":"end","initializer":"undefined"}],"pyQName":"helpers.array_slice"},"helpers.stringReplace":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"},{"name":"toReplace","type":"string"},{"name":"replacer","type":"string | ((sub: string) => string)"}],"pyQName":"helpers.string_replace"},"helpers.stringReplaceAll":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"},{"name":"toReplace","type":"string"},{"name":"replacer","type":"string | ((sub: string) => string)"}],"pyQName":"helpers.string_replace_all"},"helpers.stringSubstr":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"},{"name":"start"},{"name":"length","initializer":"undefined"}],"pyQName":"helpers.string_substr"},"helpers.stringSlice":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"},{"name":"start"},{"name":"end","initializer":"undefined"}],"pyQName":"helpers.string_slice"},"helpers.stringToUpperCase":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"}],"pyQName":"helpers.string_to_upper_case"},"helpers.stringToLowerCase":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"}],"pyQName":"helpers.string_to_lower_case"},"helpers.stringSplit":{"kind":-3,"retType":"string[]","parameters":[{"name":"S","type":"string"},{"name":"separator","type":"string","initializer":"undefined"},{"name":"limit","initializer":"undefined"}],"pyQName":"helpers.string_split"},"helpers.stringTrim":{"kind":-3,"retType":"string","parameters":[{"name":"s","type":"string"}],"pyQName":"helpers.string_trim"},"helpers.isWhitespace":{"kind":-3,"retType":"boolean","parameters":[{"name":"c"}],"pyQName":"helpers.is_whitespace"},"helpers.stringEmpty":{"kind":-3,"retType":"boolean","parameters":[{"name":"S","type":"string"}],"pyQName":"helpers.string_empty"},"Math.clamp":{"kind":-3,"retType":"number","parameters":[{"name":"min"},{"name":"max"},{"name":"value"}]},"Math.abs":{"kind":-3,"retType":"number","attributes":{"help":"math/abs","paramHelp":{"x":"A numeric expression for which the absolute value is needed."},"jsDoc":"Returns the absolute value of a number (the value without regard to whether it is positive or negative).\nFor example, the absolute value of -5 is the same as the absolute value of 5."},"parameters":[{"name":"x","description":"A numeric expression for which the absolute value is needed."}],"pyQName":"abs"},"Math.sign":{"kind":-3,"retType":"number","attributes":{"paramHelp":{"x":"The numeric expression to test"},"jsDoc":"Returns the sign of the x, indicating whether x is positive, negative or zero."},"parameters":[{"name":"x","description":"The numeric expression to test"}]},"Math.max":{"kind":-3,"retType":"number","attributes":{"help":"math/max","jsDoc":"Returns the larger of two supplied numeric expressions."},"parameters":[{"name":"a"},{"name":"b"}],"pyQName":"max"},"Math.min":{"kind":-3,"retType":"number","attributes":{"help":"math/min","jsDoc":"Returns the smaller of two supplied numeric expressions."},"parameters":[{"name":"a"},{"name":"b"}],"pyQName":"min"},"Math.roundWithPrecision":{"kind":-3,"retType":"number","attributes":{"paramHelp":{"x":"the number to round","digits":"the number of resulting digits"},"jsDoc":"Rounds ``x`` to a number with the given number of ``digits``"},"parameters":[{"name":"x","description":"the number to round"},{"name":"digits","description":"the number of resulting digits"}],"pyQName":"Math.round_with_precision"},"__internal":{"kind":5,"retType":"","attributes":{"blockHidden":true}},"__internal.__downUp":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleDownUp","block":"%down","paramFieldEditor":{"down":"toggledownup"},"paramFieldEditorOptions":{"down":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a down/up toggle","_def":{"parts":[{"kind":"param","name":"down","ref":false}],"parameters":[{"kind":"param","name":"down","ref":false}]}},"parameters":[{"name":"down","type":"boolean"}]},"__internal.__upDown":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleUpDown","block":"%up","paramFieldEditor":{"up":"toggleupdown"},"paramFieldEditorOptions":{"up":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a up/down toggle","_def":{"parts":[{"kind":"param","name":"up","ref":false}],"parameters":[{"kind":"param","name":"up","ref":false}]}},"parameters":[{"name":"up","type":"boolean"}]},"__internal.__highLow":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleHighLow","block":"%high","paramFieldEditor":{"high":"togglehighlow"},"paramFieldEditorOptions":{"high":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a high/low toggle","_def":{"parts":[{"kind":"param","name":"high","ref":false}],"parameters":[{"kind":"param","name":"high","ref":false}]}},"parameters":[{"name":"high","type":"boolean"}]},"__internal.__onOff":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleOnOff","block":"%on","paramFieldEditor":{"on":"toggleonoff"},"paramFieldEditorOptions":{"on":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a on/off toggle","_def":{"parts":[{"kind":"param","name":"on","ref":false}],"parameters":[{"kind":"param","name":"on","ref":false}]}},"parameters":[{"name":"on","type":"boolean"}]},"__internal.__yesNo":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleYesNo","block":"%yes","paramFieldEditor":{"yes":"toggleyesno"},"paramFieldEditorOptions":{"yes":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a yes/no toggle","_def":{"parts":[{"kind":"param","name":"yes","ref":false}],"parameters":[{"kind":"param","name":"yes","ref":false}]}},"parameters":[{"name":"yes","type":"boolean"}]},"__internal.__winLose":{"kind":-3,"retType":"boolean","attributes":{"shim":"TD_ID","blockHidden":true,"blockId":"toggleWinLose","block":"%win","paramFieldEditor":{"win":"togglewinlose"},"paramFieldEditorOptions":{"win":{"decompileLiterals":"true"}},"jsDoc":"A shim to render a boolean as a win/lose toggle","_def":{"parts":[{"kind":"param","name":"win","ref":false}],"parameters":[{"kind":"param","name":"win","ref":false}]}},"parameters":[{"name":"win","type":"boolean"}]},"__internal.__colorNumberPicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"value":"#ff0000","color":"#ff0000"},"blockId":"colorNumberPicker","block":"%value","blockHidden":true,"shim":"TD_ID","colorSecondary":"#FFFFFF","paramFieldEditor":{"value":"colornumber"},"paramFieldEditorOptions":{"value":{"decompileLiterals":"true","colours":"[\"#ff0000\",\"#ff8000\",\"#ffff00\",\"#ff9da5\",\"#00ff00\",\"#b09eff\",\"#00ffff\",\"#007fff\",\"#65471f\",\"#0000ff\",\"#7f00ff\",\"#ff0080\",\"#ff00ff\",\"#ffffff\",\"#999999\",\"#000000\"]","columns":"4","className":"rgbColorPicker"}},"explicitDefaults":["value"],"paramHelp":{"color":"color, eg: #ff0000"},"jsDoc":"Get the color wheel field editor","_def":{"parts":[{"kind":"param","name":"value","ref":false}],"parameters":[{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"value","initializer":"#ff0000","default":"#ff0000"}]},"__internal.__colorWheelPicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"value":"10"},"blockId":"colorWheelPicker","block":"%value","blockHidden":true,"shim":"TD_ID","colorSecondary":"#FFFFFF","paramFieldEditor":{"value":"colorwheel"},"paramFieldEditorOptions":{"value":{"decompileLiterals":"true","sliderWidth":"200","min":"0","max":"255"}},"paramHelp":{"value":"value between 0 to 255 to get a color value, eg: 10"},"jsDoc":"Get the color wheel field editor","_def":{"parts":[{"kind":"param","name":"value","ref":false}],"parameters":[{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"value","description":"value between 0 to 255 to get a color value, eg: 10","default":"10"}]},"__internal.__colorWheelHsvPicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"value":"10"},"blockId":"colorWheelHsvPicker","block":"%value","blockHidden":true,"shim":"TD_ID","colorSecondary":"#FFFFFF","paramFieldEditor":{"value":"colorwheel"},"paramFieldEditorOptions":{"value":{"decompileLiterals":"true","sliderWidth":"200","min":"0","max":"255","channel":"hsvfast"}},"paramHelp":{"value":"value between 0 to 255 to get a color value, eg: 10"},"jsDoc":"Get the color wheel field editor using HSV values","_def":{"parts":[{"kind":"param","name":"value","ref":false}],"parameters":[{"kind":"param","name":"value","ref":false}]}},"parameters":[{"name":"value","description":"value between 0 to 255 to get a color value, eg: 10","default":"10"}]},"__internal.__speedPicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"speed":"50"},"blockId":"speedPicker","block":"%speed","shim":"TD_ID","paramFieldEditor":{"speed":"speed"},"colorSecondary":"#FFFFFF","weight":0,"blockHidden":true,"paramFieldEditorOptions":{"speed":{"decompileLiterals":"1"}},"paramHelp":{"speed":"the speed, eg: 50"},"jsDoc":"A speed picker","_def":{"parts":[{"kind":"param","name":"speed","ref":false}],"parameters":[{"kind":"param","name":"speed","ref":false}]}},"parameters":[{"name":"speed","description":"the speed, eg: 50","default":"50"}]},"__internal.__turnRatioPicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"turnratio":"0"},"blockId":"turnRatioPicker","block":"%turnratio","shim":"TD_ID","paramFieldEditor":{"turnratio":"turnratio"},"colorSecondary":"#FFFFFF","weight":0,"blockHidden":true,"paramFieldEditorOptions":{"turnRatio":{"decompileLiterals":"1"}},"paramHelp":{"turnratio":"the turn ratio, eg: 0"},"jsDoc":"A turn ratio picker","_def":{"parts":[{"kind":"param","name":"turnratio","ref":false}],"parameters":[{"kind":"param","name":"turnratio","ref":false}]}},"parameters":[{"name":"turnratio","description":"the turn ratio, eg: 0","default":"0"}]},"__internal.__protractor":{"kind":-3,"retType":"number","attributes":{"blockId":"protractorPicker","block":"%angle","shim":"TD_ID","paramFieldEditor":{"angle":"protractor"},"paramFieldEditorOptions":{"angle":{"decompileLiterals":"1"}},"colorSecondary":"#FFFFFF","blockHidden":true,"jsDoc":"A field editor that displays a protractor","_def":{"parts":[{"kind":"param","name":"angle","ref":false}],"parameters":[{"kind":"param","name":"angle","ref":false}]}},"parameters":[{"name":"angle"}]},"__internal.__timePicker":{"kind":-3,"retType":"number","attributes":{"paramDefl":{"ms":"500"},"blockId":"timePicker","block":"%ms","blockHidden":true,"shim":"TD_ID","colorSecondary":"#FFFFFF","paramFieldEditor":{"ms":"numberdropdown"},"paramFieldEditorOptions":{"ms":{"decompileLiterals":"true","data":"[[\"100 ms\", 100], [\"200 ms\", 200], [\"500 ms\", 500], [\"1 second\", 1000], [\"2 seconds\", 2000], [\"5 seconds\", 5000]]"}},"paramHelp":{"ms":"time duration in milliseconds, eg: 500, 1000"},"jsDoc":"Get the time field editor","_def":{"parts":[{"kind":"param","name":"ms","ref":false}],"parameters":[{"kind":"param","name":"ms","ref":false}]}},"parameters":[{"name":"ms","description":"time duration in milliseconds, eg: 500, 1000","default":"500"}]}}},"sha":"8ddde78dbba68300c1dcd6b232ae7e5448dfb83e35db4a546faff426ca58427d"}}}
@@ -1 +1 @@
1
- (this.webpackJsonpskillsmap=this.webpackJsonpskillsmap||[]).push([[0],{13:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=t.CheckboxStatus=void 0;var r,n=a(12);!function(e){e[e.Selected=0]="Selected",e[e.Unselected=1]="Unselected",e[e.Waiting=2]="Waiting"}(r=t.CheckboxStatus||(t.CheckboxStatus={})),t.Checkbox=function(e){var t=e.isChecked,a=e.label;return n.createElement("div",{className:"checkbox"},t==r.Waiting?n.createElement("div",{className:"ui inline mini loader active"}):n.createElement("i",{className:"icon square outline ".concat(t==r.Selected?"check":""),onClick:function(){return e.onClick(!(t==r.Selected))},role:"checkbox","aria-checked":t==r.Selected,"aria-labelledby":a}))}},17:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fireClickOnEnter=t.jsxLF=void 0;var r=a(12);t.jsxLF=function(e){var t=[];e.replace(/\{\d\}/g,(function(e){return t.push(parseInt(e.substr(1,1))),e}));for(var a,n=[],i=0,c=arguments.length,o=new Array(c>1?c-1:0),s=1;s<c;s++)o[s-1]=arguments[s];for(var l=0,u=t;l<u.length;l++){var d=u[l];a=e.split("{".concat(d,"}")),pxt.U.assert(2===a.length),n.push(r.createElement("span",{key:i++},a[0])),n.push(r.createElement("span",{key:i++},o[d])),e=a[1]}return n.push(r.createElement("span",{key:i++},e)),n},t.fireClickOnEnter=function(e){var t="number"==typeof e.which?e.which:e.keyCode;13!==t&&32!==t||(e.preventDefault(),e.currentTarget.click())}},21:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Badge=void 0;var r=a(12),n=a(17);t.Badge=function(e){var t=e.badge,a=e.disabled,i=e.isNew,c=e.onClick,o=c&&function(){c(t)},s=a&&t.lockedImage||t.image,l=a?pxt.U.lf("Locked '{0}' badge",t.title):t.title;return r.createElement("div",{className:"profile-badge ".concat(c?"clickable":""),role:c?"button":void 0,tabIndex:c?0:void 0,title:lf("{0} Badge",t.title),onClick:o,onKeyDown:n.fireClickOnEnter},i&&r.createElement("div",{className:"profile-badge-notification"},pxt.U.lf("New!")),r.createElement("img",{src:s,alt:l}))}},36:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Profile=void 0;var r=a(12),n=a(58),i=a(62),c=a(64);t.Profile=function(e){var t,a=e.user,o=e.signOut,s=e.deleteProfile,l=e.onClickedEmail,u=e.notification,d=e.checkedEmail,p=e.showModalAsync,f=(null==a?void 0:a.profile)||{idp:{}},h=(null===(t=null==a?void 0:a.preferences)||void 0===t?void 0:t.badges)||{badges:[]};return r.createElement("div",{className:"user-profile"},r.createElement(i.UserPane,{profile:f,onSignOutClick:o,onDeleteProfileClick:s,notification:u,emailChecked:d,onEmailCheckClick:l}),r.createElement(n.BadgeList,{availableBadges:pxt.appTarget.defaultBadges||[],userState:h,onBadgeClick:function(e){p({header:lf("{0} Badge",e.title),size:"tiny",hasCloseIcon:!0,jsx:r.createElement(c.BadgeInfo,{badge:e})})}}))}},37:function(e,t,a){"use strict";var r=a(65),n=a(66),i=a(67),c=a(69);Object.defineProperty(t,"__esModule",{value:!0}),t.pushNotificationMessage=t.Notification=void 0;var o=a(12),s=a(75),l=function(e){i(a,e);var t=c(a);function a(e){var n;return r(this,a),(n=t.call(this,e)).state={notifications:{}},n}return n(a,[{key:"push",value:function(e){var t=this,a=this.state.notifications,r=ts.pxtc.Util.guidGen();Object.keys(a).filter((function(t){return a[t].kind==e.kind})).forEach((function(e){return t.remove(e)})),a[r]=e;var n=this;setTimeout((function(){n.remove(r)}),3e3),this.setState({notifications:a})}},{key:"remove",value:function(e){var t=this.state.notifications;t[e]&&(delete t[e],this.setState({notifications:t}))}},{key:"render",value:function(){var e=this.state.notifications;return o.createElement("div",{id:"msg","aria-live":"polite"},Object.keys(e).map((function(t){return function(e,t){var a=t.kind,r=t.text,n=t.hc,i="ignored info message";switch(a){case"err":i="red inverted segment";break;case"warn":i="orange inverted segment";break;case"info":i="teal inverted segment";break;case"compile":i="ignored info message"}return o.createElement("div",{key:"".concat(e),id:"".concat(a,"msg"),className:"ui ".concat(n," ").concat(i)},r)}(t,e[t])})))}}]),a}(o.Component);t.Notification=l;var u,d=!1;t.pushNotificationMessage=function(e){if(d)u&&u.push(e);else{d=!0;var t=document.body.appendChild(document.createElement("div"));(u=s.render(o.createElement(l,e),t)).push(e)}}},51:function(e,t,a){},52:function(e,t,a){},53:function(e,t,a){},55:function(e,t,a){},56:function(e,t,a){},57:function(e,t,a){},58:function(e,t,a){"use strict";var r=a(59);Object.defineProperty(t,"__esModule",{value:!0}),t.BadgeList=void 0;var n=a(12),i=a(21);t.BadgeList=function(e){var t,a=e.onBadgeClick,c=e.availableBadges,o=e.userState,s=c.slice(),l={},u=r(o.badges);try{var d=function(){var e=t.value;l[e.id]=!0;var a=s.findIndex((function(t){return t.id===e.id}));a>-1?s[a]=Object.assign(Object.assign({},s[a]),{timestamp:s[a].timestamp||e.timestamp}):s.push(e)};for(u.s();!(t=u.n()).done;)d()}catch(e){u.e(e)}finally{u.f()}for(var p=[],f=0;f<Math.max(s.length+10,20);f++)p.push(n.createElement("div",{key:f,className:"placeholder-badge"}));return n.createElement("div",{className:"profile-badge-list"},n.createElement("div",{className:"profile-badge-header"},n.createElement("span",{className:"profile-badge-title"},lf("Badges")),n.createElement("span",{className:"profile-badge-subtitle"},lf("Click each badge to see details"))),n.createElement("div",{className:"profile-badges-scroller"},n.createElement("div",{className:"profile-badges"},n.createElement("div",{className:"profile-badges-background-container"},n.createElement("div",{className:"profile-badges-background"},p)),s.map((function(e){return n.createElement("div",{className:"profile-badge-and-title"},n.createElement(i.Badge,{key:e.id,onClick:a,badge:e,disabled:!l[e.id]}),n.createElement("div",{className:"profile-badge-name"},e.title))})))))}},62:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UserPane=void 0;var r=a(12),n=a(17),i=a(63),c=a(13);t.UserPane=function(e){var t=e.profile,a=e.onSignOutClick,o=e.onDeleteProfileClick,s=e.onEmailCheckClick,l=e.notification,u=e.emailChecked,d=t.idp,p=d.username,f=d.displayName,h=d.picture,m="email-optin-label";return r.createElement("div",{className:"profile-user-pane"},r.createElement("div",{className:"profile-portrait"},(null==h?void 0:h.dataUrl)?r.createElement("img",{src:null==h?void 0:h.dataUrl,alt:pxt.U.lf("Profile Picture")}):r.createElement("div",{className:"profile-initials-portrait"},pxt.auth.userInitials(t))),r.createElement("div",{className:"profile-user-details"},r.createElement("div",{className:"profile-display-name"},f),p&&r.createElement("div",{className:"profile-username"},p)),l&&r.createElement(i.UserNotification,{notification:l}),r.createElement("div",{className:"profile-spacer"}),r.createElement("div",{className:"profile-email"},r.createElement(c.Checkbox,{isChecked:u,onClick:s,label:m}),r.createElement("div",{id:m},lf("I would like to receive the MakeCode newsletter. "),r.createElement("a",{href:"https://makecode.com/privacy",target:"_blank",rel:"noopener noreferrer"},lf("View Privacy Statement")))),r.createElement("div",{className:"profile-actions"},r.createElement("a",{role:"button",tabIndex:0,onKeyPress:n.fireClickOnEnter,onClick:o},lf("Delete Profile")),r.createElement("button",{onClick:a,className:"ui icon button sign-out"},r.createElement("i",{className:"icon sign-out"}),lf("Sign Out"))))}},63:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UserNotification=void 0;var r=a(12);t.UserNotification=function(e){var t=e.notification,a=t.message,n=t.icon,i=t.actionText,c=t.link,o=t.xicon,s=t.title;return r.createElement("div",{className:"profile-notification"},r.createElement("div",{className:"profile-notification-icon"},r.createElement("i",{className:"".concat(o?"xicon":"ui large circular icon "," ").concat(n)})),r.createElement("div",{className:"profile-notification-title"},s),r.createElement("div",{className:"profile-notification-message"},a),r.createElement("button",{className:"ui icon button profile-notification-button",onClick:function(){window.open(c,"_blank")},role:"link"},r.createElement("i",{className:"icon external alternate"}),i))}},64:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.badgeDescription=t.BadgeInfo=void 0;var r=a(12),n=a(17),i=a(21);function c(e){var t;if(-1!==e.indexOf("/api/md/")){var a=e.split("/api/md/")[1].split("/").slice(1).join("/");return(null===(t=pxt.webConfig)||void 0===t?void 0:t.skillmapUrl)+"#docs:"+a}var r=e.split("#");return 2==r.length?pxt.webConfig.skillmapUrl+"#github:https://github.com/"+r[0]+"/"+r[1]:pxt.BrowserUtils.isLocalHostDev()?"http://localhost:3000#local:"+e:e}t.BadgeInfo=function(e){var a=e.badge,n=new Date(a.timestamp);return r.createElement("div",{className:"profile-badge-info"},r.createElement("div",{className:"profile-badge-info-image"},r.createElement(i.Badge,{badge:a,disabled:!a.timestamp})),r.createElement("div",{className:"profile-badge-info-item"},r.createElement("div",{className:"profile-badge-info-header"},lf("Awarded For:")),r.createElement("div",{className:"profile-badge-info-text"},t.badgeDescription(a))),a.timestamp?r.createElement("div",{className:"profile-badge-info-item"},r.createElement("div",{className:"profile-badge-info-header"},lf("Awarded On:")),r.createElement("div",{className:"profile-badge-info-text"},n.toLocaleDateString(pxt.U.userLanguage()))):void 0)},t.badgeDescription=function(e){switch(e.type){case"skillmap-completion":return r.createElement("span",null,n.jsxLF(lf("Completing {0}"),r.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:c(e.sourceURL)},pxt.U.rlf(e.title))))}}},79:function(e,t,a){},80:function(e,t,a){},81:function(e,t,a){"use strict";a.r(t);var r,n,i=a(0),c=a.n(i),o=a(31),s=a.n(o),l=a(9),u=a(25),d=a(8),p=a(10),f=a(1),h="ADD_SKILL_MAP",m="CLEAR_SKILL_MAPS",v="CLEAR_METADATA",g="CHANGE_SELECTED_ITEM",y="SET_SKILL_MAP_COMPLETED",b="SET_HEADERID_FOR_ACTIVITY",k="OPEN_ACTIVITY",w="CLOSE_ACTIVITY",S="SAVE_AND_CLOSE_ACTIVITY",I="RESTART_ACTIVITY",x="SET_USER",C="UPDATE_USER_COMPLETED_TAGS",O="RESET_USER",E="SET_PAGE_TITLE",j="SET_PAGE_DESCRIPTION",N="SET_PAGE_INFO_URL",A="SET_PAGE_BACKGROUND_IMAGE_URL",U="SET_PAGE_BANNER_IMAGE_URL",P="SET_PAGE_THEME",M="SET_PAGE_SOURCE_URL",L="SET_PAGE_ALTERNATE_URLS",T="ENQUEUE_MODALS",R="SET_MODAL",_="NEXT_MODAL",B="HIDE_MODAL",H="SHOW_COMPLETION_MODAL",D="GRANT_SKILLMAP_BADGE",F="SET_USER_PROFILE",V="SET_USER_PREFERENCES",W="USER_LOG_OUT",G="SHOW_USER_PROFILE",z="HIDE_USER_PROFILE",q="SET_SHARE_STATUS",Q="SET_CLOUD_STATUS",Y="SET_READY_RESOURCES",K=a(2),$=a.n(K),J=a(3),X="-SHOWN-LOGIN-PROMPT";function Z(e){var t={cmd:"",arg:""},a=/^(\w+)(:([:./\-+=\w]+))?/.exec((e||window.location.hash).replace(/^#/,""));return a&&(t={cmd:a[1],arg:a[3]||""}),t}function ee(){var e={},t=window.location.search;return t&&new URLSearchParams(t).forEach((function(t,a){"true"!==t.toLowerCase()&&"1"!==t||(t="true"),e[a]=t})),e}function te(e,t){return ae.apply(this,arguments)}function ae(){return(ae=Object(J.a)($.a.mark((function e(t,a){var r,n,i;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t&&a){e.next=2;break}return e.abrupt("return",void 0);case 2:n="unknown",e.t0=t,e.next="docs"===e.t0?6:"github"===e.t0?7:"local"===e.t0?10:13;break;case 6:return e.abrupt("return",re(a));case 7:return e.next=9,ie(a);case 9:return e.abrupt("return",e.sent);case 10:return e.next=12,oe(a);case 12:return e.abrupt("return",e.sent);case 13:return r=a,e.abrupt("break",15);case 15:if(!pxt.BrowserUtils.isSafari()){e.next=29;break}return e.prev=16,e.next=19,fe(r);case 19:i=e.sent,e.next=27;break;case 22:return e.prev=22,e.t1=e.catch(16),e.next=26,fe(r);case 26:i=e.sent;case 27:e.next=32;break;case 29:return e.next=31,fe(r);case 31:i=e.sent;case 32:return e.abrupt("return",{text:i,identifier:r,status:n});case 33:case"end":return e.stop()}}),e,null,[[16,22]])})))).apply(this,arguments)}function re(e){return ne.apply(this,arguments)}function ne(){return(ne=Object(J.a)($.a.mark((function e(t){var a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,pxt.Cloud.markdownAsync(le(t));case 2:if(!(a=e.sent)){e.next=5;break}return e.abrupt("return",{text:a,identifier:ue(t),status:"approved"});case 5:return e.abrupt("return",void 0);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function ie(e){return ce.apply(this,arguments)}function ce(){return(ce=Object(J.a)($.a.mark((function e(t){var a,r,n,i,c,o,s,l,u,d,p;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=pxt.github.parseRepoId(t),e.next=3,pxt.packagesConfigAsync();case 3:if(e.t0=e.sent,e.t0){e.next=6;break}e.t0={};case 6:r=e.t0,n=pxt.github.parseRepoId(a.slug),i=pxt.github.repoStatus(n,r),c="unknown",e.t1=i,e.next=e.t1===pxt.github.GitRepoStatus.Banned?13:e.t1===pxt.github.GitRepoStatus.Approved?16:19;break;case 13:return c="banned",o="https://github.com/"+a.fullName,e.abrupt("break",21);case 16:return c="approved",o=void 0,e.abrupt("break",21);case 19:return o="https://github.com/"+a.fullName,e.abrupt("break",21);case 21:if(e.t2=a.tag,e.t2){e.next=26;break}return e.next=25,pxt.github.latestVersionAsync(a.slug,r,!0);case 25:e.t2=e.sent;case 26:if(s=e.t2){e.next=30;break}return pxt.log("skillmap github tag not found at ".concat(a.fullName)),e.abrupt("return",void 0);case 30:return a.tag=s,e.next=33,pxt.github.downloadPackageAsync("".concat(a.slug,"#").concat(a.tag),r);case 33:if(!(l=e.sent)){e.next=37;break}return u=de(a),d=u.identifier,p=u.fileName,e.abrupt("return",{text:pxt.tutorial.resolveLocalizedMarkdown(a,l.files,p),identifier:d,reportId:o,status:c});case 37:return e.abrupt("return",void 0);case 38:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function oe(e){return se.apply(this,arguments)}function se(){return(se=Object(J.a)($.a.mark((function e(t){var a,r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!ve()){e.next=9;break}return t=t.replace(/^\//,"").replace(/\.md$/,""),e.next=4,fetch("docs/"+t+".md");case 4:return a=e.sent,e.next=7,a.text();case 7:return r=e.sent,e.abrupt("return",{text:r,identifier:t,status:"approved"});case 9:return e.abrupt("return",void 0);case 10:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function le(e){return e.trim().replace(/^[\\/]/i,"").replace(/\.md$/i,"")}function ue(e){var t;e=le(e);var a=(null===(t=window.pxtTargetBundle)||void 0===t?void 0:t.name)||"arcade";return"".concat("https://www.makecode.com/api","/md/").concat(a,"/").concat(e)}function de(e){var t=function(e){return(e=(e=e.replace(/^\/?blob\/main\//,"")).replace(/^\/?blob\/master\//,"")).replace(/\.md$/,"")}(e.fileName||"skillmap");return{identifier:e.fullName+"#"+t,fileName:t}}function pe(){return(pe=Object(J.a)($.a.mark((function e(t,a){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t){e.next=3;break}return e.next=3,he("/api/".concat(encodeURIComponent(t),"/abusereports"),a);case 3:return e.abrupt("return");case 4:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function fe(e){return new Promise((function(t,a){var r=new XMLHttpRequest;r.addEventListener("error",(function(e){a(e)})),r.addEventListener("load",(function(){try{t(r.responseText)}catch(e){a(e)}})),r.open("GET",e),r.send()}))}function he(e,t){return new Promise((function(a,r){var n=new XMLHttpRequest;n.addEventListener("error",(function(e){r(e)})),n.addEventListener("load",(function(){try{a(n.responseText)}catch(e){r(e)}})),n.open("POST",e,!0),n.setRequestHeader("Content-type","application/json"),n.send(JSON.stringify(t))}))}function me(){function e(){return(65536|function(){var e=new Uint8Array(4);return function(e){if(window.crypto)window.crypto.getRandomValues(e);else for(var t=0;t<e.length;++t)e[t]=Math.floor(255*Math.random())}(e),new Uint32Array(e.buffer)[0]}()).toString(16).slice(-4)}return e()+e()+"-"+e()+"-4"+e().slice(-3)+"-"+e()+"-"+e()+e()+e()}function ve(){return"localhost"===window.location.hostname}function ge(e){return"".concat(ve()?"":"/static/skillmap","/").concat(e.replace(/^\//,""))}function ye(e){n=e}function be(e,t){var a,i;(t=t||{}).page=n,t.pageTitle=r,null===(a=(i=window).pxtTickEvent)||void 0===a||a.call(i,e,t)}function ke(e,t,a,r){return!Object.keys(null==a?void 0:a.activities).some((function(n){var i,c;return!(null===(i=Ce(e,t,a.mapId))||void 0===i||null===(c=i.activityState[n])||void 0===c?void 0:c.isCompleted)&&n!==r}))}function we(e,t,a,r){var n;return!!(null===(n=Oe(e,t,a,r))||void 0===n?void 0:n.isCompleted)}function Se(e,t,a,r){var n,i,c,o=e&&a&&xe(e,t,a,r)?"notstarted":"locked";if(e)if(a&&t&&!function(e,t,a){var r,n=Object(d.a)(t.prerequisites);try{for(n.s();!(r=n.n()).done;){var i=r.value;if("tag"===i.type){if(!e.completedTags[a])return!1;var c=e.completedTags[a][i.tag];if(void 0===c||c<i.numberCompleted)return!1}else if("map"===i.type&&!ke(e,a,t))return!1}}catch(e){n.e(e)}finally{n.f()}return!0}(e,a,t))o="locked";else{var s=Oe(e,t,a.mapId,r);s&&(s.isCompleted?(o=s.currentStep&&s.maxSteps&&s.currentStep<s.maxSteps?"restarted":"completed",c=s.headerId):s.headerId&&(o="inprogress"),n=null==s?void 0:s.currentStep,i=null==s?void 0:s.maxSteps)}return{status:o,currentStep:n,maxSteps:i,completedHeadedId:c}}function Ie(e,t,a){var r,n={},i=Object(d.a)(a);try{for(i.s();!(r=i.n()).done;)for(var c=r.value,o=0,s=Object.keys(c.activities);o<s.length;o++){var l=s[o],u=c.activities[l];if(we(e,t,c.mapId,u.activityId)&&"activity"===u.kind){var p,f=Object(d.a)(u.tags);try{for(f.s();!(p=f.n()).done;){var h=p.value;n[h]||(n[h]=0),n[h]++}}catch(e){f.e(e)}finally{f.f()}}}}catch(e){i.e(e)}finally{i.f()}return n}function xe(e,t,a,r){return a.root.activityId===r||function n(i){if(we(e,t,a.mapId,i.activityId)){if(i.next.some((function(e){return e.activityId===r})))return!0;var c,o=Object(d.a)(i.next);try{for(o.s();!(c=o.n()).done;){if(n(c.value))return!0}}catch(e){o.e(e)}finally{o.f()}}return!1}(a.root)}function Ce(e,t,a){return e.mapProgress[t]?e.mapProgress[t][a]:void 0}function Oe(e,t,a,r){var n;return null===(n=Ce(e,t,a))||void 0===n?void 0:n.activityState[r]}function Ee(e,t){return!!(e.mapProgress&&e.mapProgress[t]&&0!=Object.keys(e.mapProgress[t]).length&&Object.keys(e.mapProgress[t]).some((function(a){return 0!=Object.keys(e.mapProgress[t][a].activityState).length})))}function je(e,t){return Object.keys(e.activities).filter((function(t){return!Me(e.activities[t])})).filter((function(a){return Pe(e.activities[a],Me(e.activities[t])).map((function(e){return e.activityId})).some((function(e){return e===t}))})).map((function(t){return e.activities[t]}))}function Ne(e,t,a,r){return je(a,r).map((function(r){return Oe(e,t,a.mapId,r.activityId)})).filter((function(e){return!!e}))}function Ae(e,t,a,r){var n=Ne(e,t,a,r).filter((function(e){return(null==e?void 0:e.isCompleted)&&e.maxSteps===e.currentStep})).sort((function(e,t){return(t.completedTime||0)-(e.completedTime||0)}));return null==n?void 0:n[0]}function Ue(e,t,a,r){if(!e||!a||!r||"activity"!==r.kind)return!1;var n=Ne(e,t,a,r.activityId),i=null==n?void 0:n.some((function(e){return(null==e?void 0:e.isCompleted)&&e.maxSteps===e.currentStep}));return r.allowCodeCarryover&&n.length>0&&i&&xe(e,t,a,r.activityId)}function Pe(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=[];return e.next.forEach((function(e){t||!Me(e)?a.push(e):a=a.concat(Pe(e))})),a}function Me(e){return"reward"===e.kind||"completion"===e.kind}function Le(e,t,a){for(var r=[],n=0,i=Object.keys(a.activities);n<i.length;n++){var c=i[n];if(Me(a.activities[c])&&xe(e,t,a,c)){var o,s=a.activities[c],l=Object(d.a)(s.rewards);try{for(l.s();!(o=l.n()).done;)"completion-badge"===o.value.type&&r.push(Te(t,a,s))}catch(e){l.e(e)}finally{l.f()}}}return r}function Te(e,t,a){var r=a.rewards.filter((function(e){return"completion-badge"===e.type}))[0];return{id:"skillmap-completion-".concat(t.mapId),image:null==r?void 0:r.imageUrl,sourceURL:e,type:"skillmap-completion",title:(null==r?void 0:r.displayName)||t.displayName}}function Re(e,t,a){var r;return Object.values(null!==(r=e.mapProgress[t])&&void 0!==r?r:[]).filter((function(e){var r;return!a||!(null===(r=a.mapProgress[t])||void 0===r?void 0:r[e.mapId])||0===Object.keys(a.mapProgress[t][e.mapId].activityState).length})).map((function(e){return Object.values(e.activityState)})).reduce((function(e,t){return e.concat(t,[])}),[]).map((function(e){return e.headerId})).filter((function(e){return!!e}))}function _e(e,t,a,r){var n=pxt.semver.parse(e.version||"0.0.0"),i=pxt.semver.parse(t),c=e;if(0===pxt.semver.cmp(n,i))return c;if(0===pxt.semver.cmp(n,pxt.semver.parse("0.0.0"))){var o=(null==e?void 0:e.mapProgress)&&Object.keys(null==e?void 0:e.mapProgress);if((null==o?void 0:o.length)>0&&e.mapProgress[o[0]].activityState){var s=e,l={};Object.keys(r).forEach((function(e){s.mapProgress[e]&&(l[e]=s.mapProgress[e])})),c=Object(f.a)(Object(f.a)({},s),{},{mapProgress:Object(p.a)({},a,l)})}}return c}function Be(e,t,a){if(0===a.length)return e;var r=e.mapProgress[t]||{};return a.forEach((function(t){var a=Z(t),n=a.cmd,i=a.arg,c=i;switch(n){case"github":var o=pxt.github.parseRepoId(i),s=o&&de(o);c=(null==s?void 0:s.identifier)||i;break;case"docs":c=ue(i)}var l=e.mapProgress[c];l&&Object.keys(l).forEach((function(e){if(r[e]){var t=l[e].activityState;Object.keys(t).forEach((function(a){r[e].activityState[a]||(r[e].activityState[a]=t[a])}))}else r[e]=l[e]}))})),Object(f.a)(Object(f.a)({},e),{},{mapProgress:Object(f.a)(Object(f.a)({},e.mapProgress),{},Object(p.a)({},t,r))})}var He={title:lf("Game Maker Guide"),description:lf("Level up your game making skills by completing the tutorials in this guide."),pageSourceStatus:"unknown",pageSourceUrl:"default",user:{version:pxt.skillmap.USER_VERSION,isDebug:!0,id:me(),mapProgress:{},completedTags:{}},theme:{backgroundColor:"var(--body-background-color)",pathColor:"#BFBFBF",strokeColor:"#000000",rewardNodeColor:"var(--primary-color)",rewardNodeForeground:"#000000",unlockedNodeColor:"var(--secondary-color)",unlockedNodeForeground:"#000000",lockedNodeColor:"#BFBFBF",lockedNodeForeground:"#000000",completedNodeColor:"var(--secondary-color)",completedNodeForeground:"#000000",selectedStrokeColor:"var(--hover-color)",pathOpacity:.5},maps:{},auth:{signedIn:!1},cloudState:{}};function De(e,t,a,r,n,i,c){var o,s,l=arguments.length>7&&void 0!==arguments[7]&&arguments[7],u=a.mapId,d=Oe(e,t,u,r);d||(d={isCompleted:!1,activityId:r,currentStep:i,maxSteps:c,headerId:n});var h=(null===(o=e.mapProgress)||void 0===o?void 0:o[t])||{};return Object(f.a)(Object(f.a)({},e),{},{mapProgress:Object(f.a)(Object(f.a)({},e.mapProgress),{},Object(p.a)({},t,Object(f.a)(Object(f.a)({},h),{},Object(p.a)({},u,Object(f.a)(Object(f.a)({},(null==h?void 0:h[u])||{mapId:u}),{},{activityState:Object(f.a)(Object(f.a)({},(null==h||null===(s=h[u])||void 0===s?void 0:s.activityState)||{}),{},Object(p.a)({},r,Object(f.a)(Object(f.a)({},d),{},{headerId:n,currentStep:i,maxSteps:c,isCompleted:d.isCompleted||l})))})))))})}function Fe(e,t,a,r){var n,i,c,o=a.mapId,s=!1,l={};r.forEach((function(r){var n=Oe(e,t,o,r);s=s||Me(a.activities[r])&&!(null==n?void 0:n.isCompleted),l[r]=n||{isCompleted:!0,activityId:r,headerId:"",currentStep:0},l[r].isCompleted=!0,l[r].completedTime=Date.now()}));var u=(null===(n=e.mapProgress)||void 0===n?void 0:n[t])||{};return Object(f.a)(Object(f.a)({},e),{},{mapProgress:Object(f.a)(Object(f.a)({},e.mapProgress),{},Object(p.a)({},t,Object(f.a)(Object(f.a)({},u),{},Object(p.a)({},o,Object(f.a)(Object(f.a)({},(null==u?void 0:u[o])||{mapId:o}),{},{activityState:Object(f.a)(Object(f.a)({},(null==u||null===(i=u[o])||void 0===i?void 0:i.activityState)||{}),l),completionState:s?"transitioning":null==u||null===(c=u[o])||void 0===c?void 0:c.completionState})))))})}function Ve(e,t){var a=[e.activities[t]],r=e.activities[t].next.filter((function(e){return Me(e)}));return a.concat(r)}function We(e,t){var a=[{type:"completion",currentMapId:e.mapId,currentActivityId:t}],r=e.activities[t];if(1===r.rewards.length&&"certificate"===r.rewards[0].type)return a[0].currentReward=r.rewards[0],a;var n,i=Object(d.a)(r.rewards);try{for(i.s();!(n=i.n()).done;){var c=n.value;a.push({type:"reward",currentMapId:e.mapId,currentActivityId:t,currentReward:c})}}catch(e){i.e(e)}finally{i.f()}return a}var Ge,ze,qe=Object(u.b)((function(){var e,t,a,r,n,i,c,o,s,l,u,d,K,$=arguments.length>0&&void 0!==arguments[0]?arguments[0]:He,J=arguments.length>1?arguments[1]:void 0;switch(J.type){case h:return Object(f.a)(Object(f.a)({},$),{},{maps:Object(f.a)(Object(f.a)({},$.maps),{},Object(p.a)({},J.map.mapId,J.map))});case m:return Object(f.a)(Object(f.a)({},$),{},{maps:{}});case v:return Object(f.a)(Object(f.a)({},$),{},{title:He.title,description:He.description,infoUrl:He.infoUrl,backgroundImageUrl:void 0,bannerImageUrl:void 0,alternateSourceUrls:void 0,theme:Object(f.a)({},He.theme)});case g:return Object(f.a)(Object(f.a)({},$),{},{selectedItem:{mapId:J.mapId,activityId:J.activityId}});case y:return Object(f.a)(Object(f.a)({},$),{},{user:Object(f.a)(Object(f.a)({},$.user),{},{mapProgress:Object(f.a)(Object(f.a)({},$.user.mapProgress),{},Object(p.a)({},$.pageSourceUrl,Object(f.a)(Object(f.a)({},null===(e=$.user.mapProgress)||void 0===e?void 0:e[$.pageSourceUrl]),{},Object(p.a)({},J.mapId,Object(f.a)(Object(f.a)({},null===(t=$.user.mapProgress)||void 0===t||null===(a=t[$.pageSourceUrl])||void 0===a?void 0:a[J.mapId]),{},{completionState:"completed"})))))})});case k:return Object(f.a)(Object(f.a)({},$),{},{editorView:{currentMapId:J.mapId,currentActivityId:J.activityId,state:"active",allowCodeCarryover:!!J.carryoverCode,previousHeaderId:J.previousHeaderId,currentHeaderId:null===(r=Oe($.user,$.pageSourceUrl,J.mapId,J.activityId))||void 0===r?void 0:r.headerId}});case S:return Object(f.a)(Object(f.a)({},$),{},{editorView:Object(f.a)(Object(f.a)({},$.editorView),{},{state:"saving"})});case w:var Z=$.maps[$.editorView.currentMapId],ee=$.editorView.currentActivityId,te=J.finished?Ve(Z,ee):[],ae=te.find((function(e){return Me(e)})),re=ae&&(null===(n=$.user.mapProgress[$.pageSourceUrl])||void 0===n||null===(i=n[Z.mapId])||void 0===i?void 0:i.activityState[ae.activityId]);return Object(f.a)(Object(f.a)({},$),{},{selectedItem:ae&&!re?{mapId:Z.mapId,activityId:ae.activityId}:$.selectedItem,editorView:void 0,user:J.finished?Fe($.user,$.pageSourceUrl,Z,te.map((function(e){return e.activityId}))):$.user});case I:return Object(f.a)(Object(f.a)({},$),{},{modalQueue:[],editorView:{state:"active",currentMapId:J.mapId,currentActivityId:J.activityId,allowCodeCarryover:!!J.carryoverCode,previousHeaderId:J.previousHeaderId},user:De($.user,$.pageSourceUrl,$.maps[J.mapId],J.activityId)});case b:var ne=(null===(c=$.editorView)||void 0===c?void 0:c.currentActivityId)===J.activityId&&(null===(o=$.editorView)||void 0===o?void 0:o.currentMapId)===J.mapId;return Object(f.a)(Object(f.a)({},$),{},{editorView:ne?Object(f.a)(Object(f.a)({},$.editorView),{},{currentHeaderId:J.id}):$.editorView,user:De($.user,$.pageSourceUrl,$.maps[J.mapId],J.activityId,J.id,J.currentStep,J.maxSteps,J.isCompleted)});case x:var ie=$.pageSourceUrl,ce=_e(J.user,pxt.skillmap.USER_VERSION,ie,$.maps);return $.alternateSourceUrls&&(ce=Be(ce,ie,$.alternateSourceUrls)),ce.mapProgress[ie]||(ce.mapProgress[ie]={}),Object.keys($.maps).forEach((function(e){ce.mapProgress[ie][e]||(ce.mapProgress[ie][e]={completionState:"incomplete",mapId:e,activityState:{}})})),Object(f.a)(Object(f.a)({},$),{},{user:ce});case O:return pxt.storage.removeLocal($.pageSourceUrl+X),Object(f.a)(Object(f.a)({},$),{},{user:Object(f.a)(Object(f.a)({},$.user),{},{completedTags:Object(f.a)(Object(f.a)({},$.user.completedTags),{},Object(p.a)({},$.pageSourceUrl,{})),mapProgress:Object(f.a)(Object(f.a)({},$.user.mapProgress),{},Object(p.a)({},$.pageSourceUrl,{}))})});case C:return $.pageSourceUrl?Object(f.a)(Object(f.a)({},$),{},{user:Object(f.a)(Object(f.a)({},$.user),{},{completedTags:Object(f.a)(Object(f.a)({},$.user.completedTags),{},Object(p.a)({},$.pageSourceUrl,Ie($.user,$.pageSourceUrl,Object.keys($.maps).map((function(e){return $.maps[e]})))))})}):$;case q:return Object(f.a)(Object(f.a)({},$),{},{shareState:J.headerId||J.url?{headerId:J.headerId,url:J.url,rewardsShare:null===(s=$.shareState)||void 0===s?void 0:s.rewardsShare}:void 0});case Q:return Object(f.a)(Object(f.a)({},$),{},{cloudState:Object(f.a)(Object(f.a)({},$.cloudState),{},Object(p.a)({},J.headerId,J.status))});case E:return Object(f.a)(Object(f.a)({},$),{},{title:J.title});case j:return Object(f.a)(Object(f.a)({},$),{},{description:J.description});case N:return Object(f.a)(Object(f.a)({},$),{},{infoUrl:J.infoUrl});case A:return Object(f.a)(Object(f.a)({},$),{},{backgroundImageUrl:J.backgroundImageUrl});case U:return Object(f.a)(Object(f.a)({},$),{},{bannerImageUrl:J.bannerImageUrl});case P:return Object(f.a)(Object(f.a)({},$),{},{theme:J.theme});case M:return Object(f.a)(Object(f.a)({},$),{},{pageSourceUrl:J.url,pageSourceStatus:J.status});case L:return Object(f.a)(Object(f.a)({},$),{},{alternateSourceUrls:J.urls});case R:return Object(f.a)(Object(f.a)({},$),{},{shareState:void 0!==J.rewardsShare?{headerId:(null===(l=$.shareState)||void 0===l?void 0:l.headerId)||"",url:null===(u=$.shareState)||void 0===u?void 0:u.url,rewardsShare:J.rewardsShare}:$.shareState,modalQueue:[J.modal]});case T:return Object(f.a)(Object(f.a)({},$),{},{modalQueue:J.modals});case _:return Object(f.a)(Object(f.a)({},$),{},{modalQueue:null===(d=$.modalQueue)||void 0===d?void 0:d.slice(1)});case B:return Object(f.a)(Object(f.a)({},$),{},{modalQueue:[]});case H:return Object(f.a)(Object(f.a)({},$),{},{modalQueue:We($.maps[J.mapId],J.activityId)});case G:return Object(f.a)(Object(f.a)({},$),{},{showProfile:!0});case z:return Object(f.a)(Object(f.a)({},$),{},{showProfile:!1});case F:return Object(f.a)(Object(f.a)({},$),{},{auth:Object(f.a)(Object(f.a)({},$.auth),{},{profile:J.profile,signedIn:!!(null===(K=J.profile)||void 0===K?void 0:K.id)})});case V:return Object(f.a)(Object(f.a)({},$),{},{auth:Object(f.a)(Object(f.a)({},$.auth),{},{preferences:J.preferences})});case W:return Object(f.a)(Object(f.a)({},$),{},{auth:Object(f.a)(Object(f.a)({},$.auth),{},{signedIn:!1})});case Y:return Object(f.a)(Object(f.a)({},$),{},{readyResources:J.resources});case D:return Object(f.a)({},$);default:return $}})),Qe=a(15),Ye=a(4),Ke=a(5),$e=a(7),Je=a(6),Xe=a(38),Ze=a(16),et=function(e,t,a,r){return{type:k,mapId:e,activityId:t,previousHeaderId:a,carryoverCode:r}},tt=function(){return{type:S}},at=function(){return{type:G}},rt=function(){return{type:z}},nt=function(e,t){return{type:q,headerId:e,url:t}},it=function(e,t){return{type:H,mapId:e,activityId:t}},ct=function(e,t){return lt({type:"carryover",currentMapId:e,currentActivityId:t})},ot=function(e,t,a){return lt({type:"share",currentMapId:e,currentActivityId:t},a)},st=function(){return lt({type:"login"})},lt=function(e,t){return{type:R,modal:e,rewardsShare:t}};function ut(){return ze||(Ge=new pxt.skillmap.IndexedDBWorkspace,ze=Ge.initAsync().then((function(e){return Ge}))),ze}function dt(){return pt.apply(this,arguments)}function pt(){return(pt=Object(J.a)($.a.mark((function e(){var t,a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,ut();case 2:return t=e.sent,e.next=5,t.getUserStateAsync();case 5:return(a=e.sent)||(a={id:me(),completedTags:{},mapProgress:{},version:pxt.skillmap.USER_VERSION}),e.abrupt("return",a);case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function ft(){return ht.apply(this,arguments)}function ht(){return(ht=Object(J.a)($.a.mark((function e(){var t,a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,dt();case 2:return t=e.sent,e.next=5,It();case 5:if(!e.sent){e.next=10;break}return e.next=8,Mt();case 8:a=e.sent,t=Object(f.a)(Object(f.a)({},t),{},{mapProgress:(null==a?void 0:a.mapProgress)||{},completedTags:(null==a?void 0:a.completedTags)||{}});case 10:return e.abrupt("return",t);case 11:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function mt(e){return vt.apply(this,arguments)}function vt(){return(vt=Object(J.a)($.a.mark((function e(t){var a,r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.isDebug){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,ut();case 4:return r=e.sent,e.next=7,null===(a=pxt.auth.client())||void 0===a?void 0:a.loggedInAsync();case 7:if(e.sent){e.next=10;break}return e.next=10,r.saveUserStateAsync(t);case 10:return e.next=12,Nt({mapProgress:t.mapProgress,completedTags:t.completedTags});case 12:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var gt,yt=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){return Object(Ye.a)(this,a),t.apply(this,arguments)}return Object(Ke.a)(a,[{key:"onSignedIn",value:function(){return Promise.resolve()}},{key:"onSignedOut",value:function(){return qe.dispatch({type:W}),Promise.resolve()}},{key:"onSignInFailed",value:function(){return Promise.resolve()}},{key:"onUserProfileChanged",value:function(){var e,t=this.getState();return t.profile&&pxt.auth.generateUserProfilePicDataUrl(t.profile),qe.dispatch((e=t.profile,{type:F,profile:e})),Promise.resolve()}},{key:"onUserPreferencesChanged",value:function(e){return Promise.resolve()}},{key:"onStateCleared",value:function(){return Promise.resolve()}},{key:"onProfileDeleted",value:function(){var e=Object(J.a)($.a.mark((function e(t){var a,r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=qe.getState(),e.next=3,null===(a=r.readyResources)||void 0===a?void 0:a.exportCloudProjectsToLocal(t);case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()},{key:"onApiError",value:function(e){return Promise.resolve()}},{key:"logoutAsync",value:function(){var e=Object(J.a)($.a.mark((function e(t){var r,n;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=qe.getState(),n=r.user,e.next=4,mt(n);case 4:Object(Xe.a)(Object(Ze.a)(a.prototype),"logoutAsync",this).call(this,t);case 5:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}()}]),a}(pxt.auth.AuthClient);function bt(){return kt.apply(this,arguments)}function kt(){return(kt=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(pxt.auth.hasIdentity()){e.next=2;break}return e.abrupt("return",void 0);case 2:if(!gt){e.next=4;break}return e.abrupt("return",gt);case 4:return gt=new Promise(function(){var e=Object(J.a)($.a.mark((function e(t,a){var r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new yt,e.next=3,r.initAsync();case 3:return e.next=5,r.authCheckAsync();case 5:return e.next=7,r.initialUserPreferencesAsync();case 7:t(r);case 8:case"end":return e.stop()}}),e)})));return function(t,a){return e.apply(this,arguments)}}()),e.abrupt("return",gt);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function wt(){return St.apply(this,arguments)}function St(){return(St=Object(J.a)($.a.mark((function e(){var t;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:return t=e.sent,e.next=5,null==t?void 0:t.authCheckAsync();case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function It(){return xt.apply(this,arguments)}function xt(){return(xt=Object(J.a)($.a.mark((function e(){var t;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:return t=e.sent,e.next=5,null==t?void 0:t.loggedInAsync();case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Ct(e){return Ot.apply(this,arguments)}function Ot(){return(Ot=Object(J.a)($.a.mark((function e(t){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,pxt.auth.loginCallbackAsync(t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Et(e){return jt.apply(this,arguments)}function jt(){return(jt=Object(J.a)($.a.mark((function e(t){var a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:return a=e.sent,e.next=5,null==a?void 0:a.logoutAsync(t);case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Nt(e){return At.apply(this,arguments)}function At(){return(At=Object(J.a)($.a.mark((function e(t){var a,r,n;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:return a=e.sent,r=qe.getState(),n=r.pageSourceUrl,e.next=7,null==a?void 0:a.patchUserPreferencesAsync({op:"replace",path:["skillmap"],value:t},{filter:function(e){return e.path.includes(n)}});case 7:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Ut(e,t){return Pt.apply(this,arguments)}function Pt(){return(Pt=Object(J.a)($.a.mark((function e(t,a){var r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:return r=e.sent,a=a.filter((function(e){return!t.some((function(t){return pxt.auth.badgeEquals(t,e)}))})),t=t.map((function(e){return Object(f.a)(Object(f.a)({},e),{},{timestamp:Date.now()})})),e.next=7,null==r?void 0:r.patchUserPreferencesAsync({op:"replace",path:["badges"],value:{badges:[].concat(Object(Qe.a)(a),Object(Qe.a)(t))}});case 7:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Mt(){return Lt.apply(this,arguments)}function Lt(){return(Lt=Object(J.a)($.a.mark((function e(){var t,a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:if(!(t=e.sent)){e.next=8;break}return e.next=6,t.userPreferencesAsync();case 6:return a=e.sent,e.abrupt("return",null==a?void 0:a.skillmap);case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Tt(){return Rt.apply(this,arguments)}function Rt(){return(Rt=Object(J.a)($.a.mark((function e(){var t,a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:if(!(t=e.sent)){e.next=9;break}return e.next=6,t.userPreferencesAsync();case 6:if(!(a=e.sent)){e.next=9;break}return e.abrupt("return",a.badges);case 9:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function _t(){return Bt.apply(this,arguments)}function Bt(){return(Bt=Object(J.a)($.a.mark((function e(){var t;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:if(!(t=e.sent)){e.next=7;break}return e.next=6,t.userPreferencesAsync();case 6:return e.abrupt("return",e.sent);case 7:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Ht(e){return Dt.apply(this,arguments)}function Dt(){return(Dt=Object(J.a)($.a.mark((function e(t){var a,r,n=arguments;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=n.length>1&&void 0!==n[1]?n[1]:{},e.next=3,bt();case 3:return r=e.sent,e.next=6,null==r?void 0:r.patchUserPreferencesAsync(t,a);case 6:return e.abrupt("return",e.sent);case 7:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Ft(){return(Ft=Object(J.a)($.a.mark((function e(t){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Ht({op:"replace",path:["email"],value:t},{immediate:!0});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}a(51);var Vt=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).handleOnClick=function(){r.setState({expanded:!r.state.expanded})},r.handleOnBlur=function(){r.setState({expanded:!1})},r.state={expanded:!1},r}return Object(Ke.a)(a,[{key:"getItemOnClick",value:function(e){return function(){return e.onClick(e.id)}}},{key:"render",value:function(){var e=this,t=this.props,a=t.icon,r=t.picture,n=t.items,c=t.className,o=this.state.expanded;return i.createElement("div",{className:"dropdown ".concat(c," ").concat(o?"expanded":""),tabIndex:0,role:"button",onClick:this.handleOnClick,onBlur:this.handleOnBlur},r||i.createElement("i",{className:"icon ".concat(a)}),o&&i.createElement("div",{className:"dropdown-menu"},n.map((function(t,a){return i.createElement("div",{key:a,className:"dropdown-item",onClick:e.getItemOnClick(t),role:"menuitem"},t.label)}))))}}]),a}(i.Component),Wt=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){var e;Object(Ye.a)(this,a);for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(e=t.call.apply(t,[this].concat(n))).reportAbuseUrl="https://github.com/contact/report-content",e.avatarPicUrl=function(){var t,a,r,n,i=e.props.profile;return null!==(t=null==i||null===(a=i.idp)||void 0===a?void 0:a.pictureUrl)&&void 0!==t?t:null==i||null===(r=i.idp)||void 0===r||null===(n=r.picture)||void 0===n?void 0:n.dataUrl},e.onBackClicked=function(){var t=e.props;be("skillmap.activity.back",{path:t.currentMapId||"",activity:t.currentActivityId||""}),e.props.dispatchSaveAndCloseActivity()},e.onHomeClicked=function(){var e;be("skillmap.home");var t,a,r=null===(e=pxt.webConfig)||void 0===e?void 0:e.relprefix.substr(0,pxt.webConfig.relprefix.length-3);pxt.appTarget.appTheme.homeUrl&&r?((null===(t=pxt.appTarget.appTheme.homeUrl)||void 0===t?void 0:t.lastIndexOf("/"))===(null===(a=pxt.appTarget.appTheme.homeUrl)||void 0===a?void 0:a.length)-1&&(r=r.substr(1)),window.open(pxt.appTarget.appTheme.homeUrl+r)):window.open(pxt.appTarget.appTheme.homeUrl)},e.onBugClicked=function(){var e,t;be("skillmap.bugreport"),null===(e=(t=window).usabilla_live)||void 0===e||e.call(t,"click")},e.onLogoutClicked=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return pxt.tickEvent("skillmap.usermenu.signout"),e.next=3,Et(location.hash);case 3:case"end":return e.stop()}}),e)}))),e.onProfileClicked=function(){pxt.tickEvent("skillmap.profile"),e.props.dispatchShowUserProfile()},e}return Object(Ke.a)(a,[{key:"getSettingItems",value:function(){var e=this,t=[];return this.props.showReportAbuse&&t.push({id:"report",label:lf("Report Abuse"),onClick:function(t){be("skillmap.reportabuse"),window.open(e.reportAbuseUrl)}}),this.props.activityOpen||t.push({id:"reset",label:lf("Reset All"),onClick:function(){be("skillmap.reset.warning"),e.props.dispatchShowResetUserModal()}}),t}},{key:"getOrganizationLogo",value:function(e){var t=e.organizationWideLogo;return i.createElement("div",{className:"header-logo"},t?i.createElement("img",{src:ve()?"./assets/".concat(t):t,alt:lf("{0} Logo",e.organization)}):i.createElement("span",{className:"name"},e.organization))}},{key:"getTargetLogo",value:function(e){var t=this.props.activityOpen;return i.createElement("div",{className:"ui item logo brand ".concat(t?"":"noclick")},e.useTextLogo?[i.createElement("span",{className:"name",key:"org-name",onClick:this.onBackClicked},e.organizationText),i.createElement("span",{className:"name-short",key:"org-name-short",onClick:this.onBackClicked},e.organizationShortText||e.organizationText)]:e.logo||e.portraitLogo?i.createElement("img",{className:"logo",src:e.logo||e.portraitLogo,alt:lf("{0} Logo",e.boardName)}):i.createElement("span",{className:"name"}," ",e.boardName))}},{key:"getHelpItems",value:function(){var e=[];return this.props.activityOpen&&e.push({id:"feedback",label:lf("Feedback"),onClick:this.onBugClicked}),e}},{key:"getUserMenu",value:function(){var e=this,t=this.props,a=t.signedIn,r=t.profile,n=[];a&&n.push({id:"profile",label:lf("My Profile"),onClick:this.onProfileClicked},{id:"signout",label:lf("Sign Out"),onClick:this.onLogoutClicked});var c=this.avatarPicUrl()?i.createElement("div",{className:"avatar"},i.createElement("img",{src:this.avatarPicUrl(),alt:lf("User Menu")})):void 0,o=i.createElement("span",null,i.createElement("div",{className:"avatar-initials"},pxt.auth.userInitials(r)));return i.createElement("div",{className:"user-menu"},a?i.createElement(Vt,{icon:"user",items:n,picture:c||o,className:"header-dropdown user-dropdown"}):i.createElement(Gt,{className:"sign-in",icon:"xicon cloud-user",title:lf("Sign In"),label:lf("Sign In"),onClick:function(){pxt.tickEvent("skillmap.usermenu.signin"),e.props.dispatchShowLoginModal()}}))}},{key:"render",value:function(){var e,t=this.props.activityOpen,a=pxt.auth.hasIdentity(),r=null===(e=pxt.appTarget)||void 0===e?void 0:e.appTheme,n=this.getSettingItems(),c=this.getHelpItems();return i.createElement("div",{className:"header"},i.createElement("div",{className:"header-left"},this.getOrganizationLogo(r),this.getTargetLogo(r)),i.createElement("div",{className:"spacer"}),i.createElement("div",{className:"header-right"},t&&i.createElement(Gt,{icon:"icon arrow left",title:lf("Return to activity selection"),onClick:this.onBackClicked}),i.createElement(Gt,{icon:"icon home",title:lf("Return to the editor homepage"),onClick:this.onHomeClicked}),(null==c?void 0:c.length)>0&&i.createElement(Vt,{icon:"help circle",className:"header-dropdown",items:c}),(null==n?void 0:n.length)>0&&i.createElement(Vt,{icon:"setting",className:"header-dropdown",items:n}),a&&this.getUserMenu()))}}]),a}(i.Component),Gt=function(e){var t=e.icon,a=e.label,r=e.title,n=e.onClick,c=e.className;return i.createElement("div",{className:"header-button ".concat(a?"with-label":"icon-only"," ").concat(c),title:r,role:"button",onClick:n},i.createElement("i",{className:t}),a&&i.createElement("span",{className:"header-button-label"},a))},zt={dispatchSaveAndCloseActivity:tt,dispatchShowResetUserModal:function(){return lt({type:"reset"})},dispatchShowLoginModal:st,dispatchShowUserProfile:at},qt=Object(l.b)((function(e,t){var a,r,n,i;if(!e)return{};(null===(a=e.editorView)||void 0===a?void 0:a.currentHeaderId)&&we(e.user,e.pageSourceUrl,e.editorView.currentMapId,e.editorView.currentActivityId)&&e.editorView.currentHeaderId;var c,o=!!e.editorView;return(null===(r=e.editorView)||void 0===r?void 0:r.currentActivityId)&&(null===(c=e.maps[e.editorView.currentMapId])||void 0===c||c.activities[e.editorView.currentActivityId]),{activityOpen:o,currentMapId:o&&(null===(n=e.editorView)||void 0===n?void 0:n.currentMapId),currentActivityId:o&&(null===(i=e.editorView)||void 0===i?void 0:i.currentActivityId),showReportAbuse:"unknown"===e.pageSourceStatus,signedIn:e.auth.signedIn,profile:e.auth.profile}}),zt)(Wt),Qt=a(39),Yt=(a(52),ve()?"http://localhost:3232/index.html":function(e){var t,a;if(!pxt.webConfig&&window.pxtConfig&&pxt.setupWebConfig(window.pxtConfig),(null===(t=pxt.webConfig)||void 0===t?void 0:t.targetUrl)&&(null===(a=pxt.webConfig)||void 0===a?void 0:a.relprefix))return pxt.webConfig.targetUrl+pxt.webConfig.relprefix.substr(0,pxt.webConfig.relprefix.length-3);var r=/\/([\da-zA-Z\.]+)(?:--)?/i.exec(window.location.pathname);return"".concat(e.replace(/\/$/,""),"/").concat((null==r?void 0:r[1])||"")}(window.pxtTargetBundle.appTheme.embedUrl)),Kt=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).ref=void 0,r.messageQueue=[],r.finishedActivityState=void 0,r.nextId=0,r.pendingMessages={},r.isNewActivity=!1,r.handleFrameRef=function(e){if(e&&e.contentWindow){window.addEventListener("message",r.onMessageReceived),e.addEventListener("load",r.handleFrameReload),r.ref=e,$t(".usabilla_live_button_container",!1),$t("footer",!1);var t=document.getElementById("root");t&&pxt.BrowserUtils.addClass(t,"editor")}},r.handleFrameReload=function(){r.setState({frameState:"loading"})},r.onMessageReceived=function(e){var t=e.data;if("opening-project"===r.state.frameState&&r.setState({loadPercent:Math.min((r.state.loadPercent||0)+4,95)}),"pxteditor"===t.type&&t.id&&r.pendingMessages[t.id])return r.pendingMessages[t.id].handler(t),void delete r.pendingMessages[t.id];switch(t.action){case"newproject":r.state.workspaceReady||(r.setState({workspaceReady:!0}),r.sendMessageAsync(),r.props.onWorkspaceReady((function(e){return r.sendMessageAsync(e)}))),"loading"===r.state.frameState&&r.setState({frameState:"no-project"});break;case"tutorialevent":r.handleTutorialEvent(t);break;case"projectcloudstatus":var a=t;r.props.dispatchSetCloudStatus(a.headerId,a.status)}},r.state={frameState:"loading",workspaceReady:!1,loadPercent:0,pendingShare:!1},r}return Object(Ke.a)(a,[{key:"componentDidUpdate",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r,n,i=this;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=this.props.shareHeaderId,a=this.state,r=a.frameState,n=a.pendingShare,"project-open"===r&&this.props.save?this.setState({frameState:"closing-project"},Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.closeActivityAsync();case 2:case"end":return e.stop()}}),e)})))):"no-project"===r&&this.props.activityId&&this.setState({frameState:"opening-project",loadPercent:0},Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.startActivityAsync();case 2:case"end":return e.stop()}}),e)})))),t&&!n&&this.setState({pendingShare:!0},Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.shareProjectAsync();case 2:case"end":return e.stop()}}),e)}))));case 4:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"componentWillUnmount",value:function(){window.removeEventListener("message",this.onMessageReceived),$t(".usabilla_live_button_container",!0),$t("footer",!0);var e=document.getElementById("root");e&&pxt.BrowserUtils.removeClass(e,"editor")}},{key:"render",value:function(){var e=this.props,t=e.title,a=e.activityId,r=this.state,n=r.frameState,c=r.loadPercent,o=lf("Loading..."),s="opening-project"===n,l=s||"closing-project"===n,u=Yt;return"/"!==Yt.charAt(Yt.length-1)||ve()||(u=Yt.substr(0,Yt.length-1)),u+="?controller=1&skillsMap=1&noproject=1&nocookiebanner=1&ws=browser",i.createElement("div",{className:"makecode-frame-outer",style:{display:a?"block":"none"}},i.createElement("div",{className:"makecode-frame-loader ".concat(l?"":"hidden")},i.createElement("img",{src:ge("assets/logo.svg"),alt:"MakeCode Logo"}),s&&i.createElement("div",{className:"makecode-frame-loader-bar"},i.createElement("div",{className:"makecode-frame-loader-fill",style:{width:c+"%"}})),i.createElement("div",{className:"makecode-frame-loader-text"},o)),i.createElement("iframe",{className:"makecode-frame",src:u,title:t,ref:this.handleFrameRef}))}},{key:"sendMessageAsync",value:function(e){var t=this;return new Promise((function(a){var r=function(e){e.response=!0,e.id=t.nextId+++"",t.pendingMessages[e.id]={original:e,handler:a},t.ref.contentWindow.postMessage(e,"*")};if(t.ref)if(t.state.workspaceReady){for(;t.messageQueue.length;)r(t.messageQueue.shift());e&&r(e)}else t.messageQueue.push(e)}))}},{key:"startActivityAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.props.activityHeaderId){e.next=5;break}return e.next=3,this.sendMessageAsync({type:"pxteditor",action:"openheader",headerId:this.props.activityHeaderId});case 3:e.next=8;break;case 5:return this.isNewActivity=!0,e.next=8,this.sendMessageAsync({type:"pxteditor",action:"startactivity",path:this.props.tutorialPath,title:this.props.title,activityType:"tutorial",carryoverPreviousCode:this.props.carryoverCode,previousProjectHeaderId:this.props.previousHeaderId});case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"closeActivityAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.sendMessageAsync({type:"pxteditor",action:"saveproject"});case 2:return this.props.dispatchCloseActivity("finished"===this.finishedActivityState),this.props.dispatchUpdateUserCompletedTags(),this.finishedActivityState=void 0,e.next=7,this.sendMessageAsync({type:"pxteditor",action:"unloadproject"});case 7:this.setState({frameState:"no-project"});case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"shareProjectAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r,n;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.props,a=t.shareHeaderId,r=t.dispatchSetShareStatus,e.next=3,this.sendMessageAsync({type:"pxteditor",action:"shareproject",headerId:a});case 3:n=e.sent,r(a,n.resp.shortid),this.setState({pendingShare:!1});case 6:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"handleTutorialEvent",value:function(e){var t=this.props,a=t.dispatchSetHeaderIdForActivity,r=t.dispatchSaveAndCloseActivity,n=t.mapId,i=t.activityId,c=t.progress;switch(e.tutorialEvent){case"progress":i&&a(n,i,e.projectHeaderId,e.currentStep+1,e.totalSteps,e.isCompleted||!!(null==c?void 0:c.isCompleted));break;case"loaded":this.onEditorLoaded();break;case"completed":this.onTutorialFinished();break;case"exit":r()}}},{key:"onEditorLoaded",value:function(){var e=this.props,t=e.mapId,a=e.activityId;t&&a&&(be("skillmap.activity.loaded",{path:t,activity:a}),this.setState({frameState:"project-open"}),this.isNewActivity&&(this.isNewActivity=!1))}},{key:"onTutorialFinished",value:function(){var e=this.props,t=e.mapId,a=e.activityId,r=e.signedIn,n=e.pageSourceUrl;be("skillmap.activity.complete",{path:t,activity:a}),this.finishedActivityState="finished",this.props.dispatchSaveAndCloseActivity();var i=pxt.storage.getLocal(n+X);r||i||(this.props.dispatchShowLoginPrompt(),pxt.storage.setLocal(n+X,"true"))}}]),a}(i.Component);function $t(e,t){var a=document.querySelector(e);(null==a?void 0:a.style)&&(a.style.display=t?"":"none")}var Jt={dispatchSetHeaderIdForActivity:function(e,t,a,r,n,i){return{type:b,mapId:e,activityId:t,id:a,currentStep:r,maxSteps:n,isCompleted:i}},dispatchCloseActivity:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return{type:w,finished:e}},dispatchSaveAndCloseActivity:tt,dispatchUpdateUserCompletedTags:function(){return{type:C}},dispatchSetShareStatus:nt,dispatchShowLoginPrompt:function(){return lt({type:"login-prompt"})},dispatchSetCloudStatus:function(e,t){return{type:Q,headerId:e,status:t}}},Xt=Object(l.b)((function(e,t){var a,r,n=(null===(a=e.shareState)||void 0===a?void 0:a.url)||null===(r=e.shareState)||void 0===r?void 0:r.headerId;if(!e||!e.editorView)return{shareHeaderId:n};var i,c=e.editorView,o=c.currentActivityId,s=c.currentMapId,l=c.currentHeaderId,u=c.state,d=c.allowCodeCarryover,p=c.previousHeaderId,f=e.maps[s],h=null==f?void 0:f.activities[o];i=null==h?void 0:h.displayName;var m=Oe(e.user,e.pageSourceUrl,s,o);return{tutorialPath:h.url,title:i,mapId:s,activityId:o,activityHeaderId:l,activityType:h.type,carryoverCode:d,previousHeaderId:p,progress:m,save:"saving"===u,shareHeaderId:n,signedIn:e.auth.signedIn,pageSourceUrl:e.pageSourceUrl}}),Jt)(Kt),Zt=(a(53),function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){var e;Object(Ye.a)(this,a);for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(e=t.call.apply(t,[this].concat(n))).handleModalClick=function(e){e.stopPropagation()},e.handleCloseClick=function(){e.props.onClose&&e.props.onClose(),e.setState({visible:!1})},e}return Object(Ke.a)(a,[{key:"render",value:function(){var e=this.props,t=e.title,a=e.actions,r=e.className,n=e.fullscreen;return i.createElement("div",{className:"modal-overlay ".concat(n?"fullscreen":""),onClick:this.handleCloseClick,role:"region"},i.createElement("div",{className:"modal ".concat(r||""),onClick:this.handleModalClick,role:"dialog"},i.createElement("div",{className:"modal-header"},n&&i.createElement("div",{className:"close button",onClick:this.handleCloseClick},i.createElement("i",{className:"icon arrow left"}),lf("Go Back")),i.createElement("div",{className:"modal-title"},t),!n&&i.createElement("div",{className:"spacer"}),!n&&i.createElement("div",{className:"modal-close-icon",onClick:this.handleCloseClick,role:"button"},i.createElement("i",{className:"icon close remove circle"}))),i.createElement("div",{className:"modal-body"},this.props.children),a&&a.length>0&&i.createElement("div",{className:"modal-actions"},a.map((function(e,t){return e.url?i.createElement("a",{key:t,className:"modal-button ".concat(e.className||""),href:e.url,onClick:e.onClick,target:"_blank",rel:"noopener noreferrer",role:"button"},e.label):i.createElement("div",{key:t,className:"modal-button ".concat(e.className||""),onClick:e.onClick,role:"button",tabIndex:0},e.label,e.icon&&i.createElement("i",{className:"".concat(e.xicon?"xicon":"icon"," ").concat(e.icon)}))})))))}}]),a}(i.Component)),ea=a(17),ta=a(21),aa=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).handleOnClose=function(){r.setState({loading:!1,data:void 0,checkboxSelected:!1}),r.props.dispatchHideModal(),r.props.dispatchSetShareStatus()},r.handleRewardShareClick=function(){var e=r.props,t=e.mapId,a=e.userState,n=e.pageSourceUrl,i=e.skillMap,c=e.activity,o=(e.shareState,Ae(a,n,i,c.activityId));o&&r.props.dispatchShowShareModal(t,o.activityId,!0)},r.handleShareInputClick=function(e){e.target.select()},r.handleShareCopyClick=function(){var e=r.props;be("skillmap.share.copy",{path:e.mapId,activity:e.activity.activityId});var t=document.querySelector(".share-input input");t&&(t.select(),document.execCommand("copy"))},r.state={},r}return Object(Ke.a)(a,[{key:"render",value:function(){var e=this.props,t=e.activity;switch(e.type){case"completion":return t?this.renderCompletionModal():i.createElement("div",null);case"restart-warning":return t?this.renderRestartWarning():i.createElement("div",null);case"report-abuse":return this.renderReportAbuse();case"reset":return this.renderResetWarning();case"carryover":return this.renderCodeCarryoverModal();case"share":return this.renderShareModal();case"login":return this.renderLoginModal(!1);case"login-prompt":return this.renderLoginModal(!0);case"delete-account":return this.renderDeleteAccountModal();case"reward":return this.renderRewardModal();default:return i.createElement("div",null)}}},{key:"getCompletionActionText",value:function(e){switch(e.kind){case"activity":return lf("Start Activity");case"map":return lf("Start Skill Map");case"editor":return lf("Keep Building");case"tutorial":return lf("Start Tutorial");case"docs":default:return lf("Learn More")}}},{key:"getCompletionActions",value:function(e){var t=this,a=this.props,r=a.userState,n=a.pageSourceUrl,i=a.mapId,c=a.skillMap,o=a.activity,s=a.dispatchOpenActivity,l=a.dispatchShowCarryoverModal,u=o,d=[];return null==e||e.forEach((function(e){var a={label:e.label||t.getCompletionActionText(e),url:e.url};switch(e.kind){case"activity":var p=null==c?void 0:c.activities[e.activityId||""];p&&(a.onClick=function(){be("skillmap.reward.action.activity",{path:i,activity:u.activityId,nextActivityId:p.activityId}),t.handleOnClose(),Ue(r,n,c,p)?l(c.mapId,p.activityId):s(i,p.activityId)},d.push(a));break;case"editor":var f=Ae(r,n,c,o.activityId);(null==f?void 0:f.headerId)&&(a.onClick=function(){be("skillmap.reward.action.editor",{path:i,activity:u.activityId}),window.open("".concat(Yt,"#skillmapimport:").concat(f.headerId))},d.push(a));break;case"tutorial":case"map":case"docs":default:a.onClick=function(){return be("skillmap.reward.action.".concat(e.kind),{path:i,activity:u.activityId,url:a.url||""})},d.push(a)}})),d}},{key:"renderConfetti",value:function(){return Array(100).fill(0).map((function(e,t){var a={animationDelay:"".concat(t%100*.1,"s"),left:"".concat(1*Math.floor(100*Math.random()),"%")};return i.createElement("div",{key:t,style:a,className:"confetti ".concat(Math.random()>.5?"reverse":""," color-").concat(Math.floor(9*Math.random()))})}))}},{key:"renderCompletionModal",value:function(){var e=this.props,t=e.skillMap,a=e.type,r=e.activity,n=e.userState,c=e.pageSourceUrl,o=e.dispatchNextModal,s=e.reward,l=e.mapId;if(!a||!t)return i.createElement("div",null);var u=r,d=lf("You Did It!"),p=lf("Congratulations on completing {0}. Take some time to explore any activities you missed, or reset your progress to try again. But first, be sure to claim your reward using the button below.","{0}").split("{0}"),f=Ae(n,c,t,r.activityId),h=s?function(){be("skillmap.openCertificate",{path:l,activity:r.activityId}),window.open(s.url||t.completionUrl)}:o;return i.createElement("div",{className:"confetti-container"},i.createElement(Zt,{title:d,actions:this.getCompletionActions(u.actions),className:"completion",onClose:this.handleOnClose},p[0],i.createElement("strong",null,t.displayName),p[1],i.createElement("button",{className:"completion-reward",onClick:h},i.createElement("i",{className:"icon gift"}),i.createElement("span",null,lf("Claim your reward!"))),f&&f.headerId&&i.createElement("button",{className:"completion-reward",onClick:this.handleRewardShareClick},i.createElement("i",{className:"icon send"}),i.createElement("span",null,lf("Share your game!")))),this.renderConfetti())}},{key:"renderRestartWarning",value:function(){var e=this.props,t=e.mapId,a=e.activity,r=e.dispatchRestartActivity,n=e.showCodeCarryoverModal,c=e.dispatchShowCarryoverModal,o=lf("Restart Activity?"),s=lf("Are you sure you want to restart {0}? You won't lose your path progress but the code you have written for this activity will be deleted.","{0}").split("{0}"),l=[{label:lf("CANCEL"),onClick:this.handleOnClose},{label:lf("RESTART"),onClick:function(){be("skillmap.activity.restart",{path:t,activity:a.activityId}),n?c(t,a.activityId):r(t,a.activityId)}}];return i.createElement(Zt,{title:o,actions:l,onClose:this.handleOnClose},s[0],i.createElement("strong",null,a.displayName),s[1])}},{key:"renderResetWarning",value:function(){var e=this.props,t=e.dispatchResetUser,a=e.dispatchHideModal,r=lf("Reset All Activities?"),n=lf("Are you sure you want to reset? This will permanently erase all progress and delete the project created for each tutorial. This action cannot be undone."),c=[{label:lf("CANCEL"),onClick:this.handleOnClose},{label:lf("RESET"),onClick:function(){be("skillmap.reset"),t(),a()}}];return i.createElement(Zt,{title:r,actions:c,onClose:this.handleOnClose},n)}},{key:"renderReportAbuse",value:function(){var e=this.props,t=e.pageSourceUrl,a=e.dispatchHideModal,r=[{label:"REPORT",onClick:function(){be("skillmap.reportabuse"),function(e,t){pe.apply(this,arguments)}(t||"",{text:document.querySelector(".report-abuse-text").value}),a()}}];return i.createElement(Zt,{title:"Report Abuse",actions:r,onClose:this.handleOnClose},i.createElement("textarea",{className:"report-abuse-text",placeholder:"Describe the content and explain why you are reporting it for abuse. Provide as much detail as possible!"}))}},{key:"renderCodeCarryoverModal",value:function(){var e=this.props,t=e.skillMap,a=e.activity,r=e.pageSourceUrl,n=e.userState,c=e.dispatchHideModal,o=e.dispatchRestartActivity,s=lf("Keep code from previous activity?"),l=lf("Do you want to start with your code from {0} or start fresh with starter code? Your images, tilemaps, tiles, and animations will stick around either way.").split("{0}"),u=Ae(n,r,t,a.activityId),d=t.activities[null==u?void 0:u.activityId];if(!d)return i.createElement("div",null);var p=[{label:lf("START FRESH"),onClick:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:be("skillmap.startfresh",{path:t.mapId,activity:a.activityId,previousActivity:d.activityId}),o(t.mapId,a.activityId,u.headerId,!1),c();case 3:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}()},{label:lf("KEEP CODE"),onClick:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:be("skillmap.keepcode",{path:t.mapId,activity:a.activityId,previousActivity:d.activityId}),o(t.mapId,a.activityId,u.headerId,!0),c();case 3:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}()}];return i.createElement(Zt,{title:s,actions:p,onClose:this.handleOnClose},l[0],i.createElement("strong",null,d.displayName),l[1])}},{key:"renderShareModal",value:function(){var e=this,t=this.props,a=t.userState,r=t.pageSourceUrl,n=t.mapId,c=t.activity,o=t.shareState,s=t.dispatchSetShareStatus,l=this.state.loading,u=null==o?void 0:o.url,d=u?lf("Share Project"):lf("Publish Project"),p=[];return u||(p.push({label:lf("Cancel"),onClick:this.handleOnClose}),p.push({label:lf("Publish"),onClick:function(){var t=Object(J.a)($.a.mark((function t(){var i;return $.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:be("skillmap.share",{path:n,activity:c.activityId}),e.setState({loading:!0}),i=Oe(a,r,n,c.activityId),s(null==i?void 0:i.headerId);case 4:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}()})),i.createElement(Zt,{title:d,actions:p,onClose:this.handleOnClose},u?i.createElement("div",null,lf("Your project is ready! Use the address below to share your projects.")):i.createElement("div",{className:"share-disclaimer"},lf("You need to publish your project to share it or embed it in other web pages. You acknowledge having consent to publish this project.")),l&&!u&&i.createElement("div",{className:"share-loader"},i.createElement("div",{className:"ui active inline loader"}),i.createElement("span",null,lf("Loading..."))),u&&i.createElement("div",{className:"share-input"},i.createElement("input",{type:"text",readOnly:!0,autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:!1,value:"https://makecode.com/".concat(u),onClick:this.handleShareInputClick}),i.createElement("div",{className:"share-copy",onClick:this.handleShareCopyClick,role:"button"},i.createElement("i",{className:"icon copy"}),lf("Copy"))),u&&(null==o?void 0:o.rewardsShare)&&i.createElement("div",null,this.renderConfetti()))}},{key:"renderLoginModal",value:function(e){var t,a=this,r=null!==(t=this.state.checkboxSelected)&&void 0!==t&&t,n=lf("Sign in icon"),c=pxt.auth.identityProvider("microsoft"),o=[];return o.push({label:lf("Sign In"),onClick:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:pxt.tickEvent("skillmap.signindialog.signin",{provider:c.name?c.name:"",rememberMe:r.toString()}),pxt.auth.client().loginAsync(c.id,r,{hash:location.hash});case 2:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}()}),i.createElement(Zt,{title:e?lf("Save your Completed Activity"):lf("Sign into MakeCode Arcade"),onClose:this.handleOnClose,actions:o,className:"sign-in"},i.createElement("div",{className:"description"},i.createElement("p",null,lf("Sign in with your Microsoft Account. We'll save your projects to the cloud, where they're accessible from anywhere.")),i.createElement("div",{className:"container"},e&&i.createElement("img",{src:ge("/assets/cloud-user.svg"),alt:n,className:"icon cloud-user"}),i.createElement("p",null,lf("Don't have a Microsoft Account? Start signing in to create one!"),i.createElement("a",{href:"https://aka.ms/cloudsave",target:"_blank",onClick:function(){be("skillmap.signindialog.learn"),window.open("https://aka.ms/cloudsave","_blank")}},i.createElement("i",{className:"icon external alternate"}),lf("Learn more")))),i.createElement("div",{className:"remember",onClick:function(){var e=!r;be("skillmap.signindialog.rememberme",{rememberMe:e.toString()}),a.setState({checkboxSelected:e})}},i.createElement("i",{className:"icon square outline ".concat(r?"check":"")}),lf("Remember me"))))}},{key:"handleSigninClick",value:function(){var e=Object(J.a)($.a.mark((function e(t){var a,r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=null!==(a=this.state.checkboxSelected)&&void 0!==a&&a,pxt.tickEvent("skillmap.signindialog.signin",{provider:t.id,rememberMe:r.toString()}),e.next=4,pxt.auth.client().loginAsync(t.id,r,{hash:location.hash});case 4:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}()},{key:"handleRememberMeClick",value:function(){var e,t=!(null!==(e=this.state.checkboxSelected)&&void 0!==e&&e);be("skillmap.signindialog.rememberme",{rememberMe:t.toString()}),this.setState({checkboxSelected:t})}},{key:"renderDeleteAccountModal",value:function(){var e=this,t=this.state.checkboxSelected,a=[];return a.push({label:lf("Confirm"),className:t?"confirm":"confirm disabled",onClick:function(){var a=Object(J.a)($.a.mark((function a(){return $.a.wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if(!t){a.next=7;break}return be("skillmap.profile.delete"),e.props.dispatchHideModal(),e.props.dispatchCloseUserProfile(),a.next=6,pxt.auth.client().deleteProfileAsync();case 6:location.reload();case 7:case"end":return a.stop()}}),a)})));return function(){return a.apply(this,arguments)}}()}),a.push({label:lf("Back to safety"),className:"disagree",onClick:this.props.dispatchHideModal}),i.createElement(Zt,{title:lf("Delete Profile"),className:"delete",actions:a,onClose:this.handleOnClose},i.createElement("div",null," ",lf("Are you sure? This cannot be reversed! Your cloud-saved projects will be converted to local projects on this device.")),i.createElement("div",{className:"confirm-delete checkbox",onClick:function(){e.setState({checkboxSelected:!t})}},i.createElement("i",{className:"icon square outline ".concat(t?"check":"")}),lf("I understand this is permanent. No undo.")))}},{key:"renderRewardModal",value:function(){var e,t=this.props.reward;return"certificate"===(null==t?void 0:t.type)?e=this.renderCertificateModal(t):"completion-badge"===(null==t?void 0:t.type)&&(e=this.renderBadgeModal(t)),i.createElement("div",{className:"confetti-container"},e,this.renderConfetti())}},{key:"renderCertificateModal",value:function(e){var t=lf("Rewards"),a=this.props,r=a.mapId,n=a.skillMap,c=a.activity,o=a.hasPendingModals,s=a.dispatchNextModal,l=[];return l.push({label:lf("Open Certificate"),className:"completion-reward inverted",icon:"file outline",onClick:function(){be("skillmap.openCertificate",{path:r,activity:c.activityId}),window.open(e.url||n.completionUrl)}}),o&&l.push({label:lf("Next Reward"),className:"completion-reward",icon:"right circle arrow",onClick:function(){be("skillmap.nextReward",{path:r,activity:c.activityId,currentReward:e.type}),s()}}),i.createElement(Zt,{title:t,onClose:this.handleOnClose,actions:l},lf("Use the button below to get your completion certificate!"),e.previewUrl&&i.createElement("div",{className:"certificate-reward"},i.createElement("img",{src:e.previewUrl,alt:lf("certificate Preview")})))}},{key:"renderBadgeModal",value:function(e){var t,a=lf("Rewards"),r=this.props,n=r.mapId,c=r.skillMap,o=r.activity,s=r.hasPendingModals,l=r.badge,u=r.dispatchNextModal,d=r.dispatchShowUserProfile,p=r.dispatchHideModal,f=r.signedIn,h=r.dispatchShowLoginModal,m=function(){be("skillmap.goToBadges",{path:n,activity:o.activityId}),p(),d()},v=function(){be("skillmap.badgeSignIn",{path:n,activity:o.activityId}),p(),h()},g=[];return f?(t=Object(ea.jsxLF)(lf("You’ve received the {0} Badge! Find it in the badges section of your {1}."),i.createElement("span",null,pxt.U.rlf(l.title)),i.createElement("a",{onClick:m},lf("User Profile"))),g.push({label:lf("Go to Badges"),className:"completion-reward inverted",icon:"trophy",onClick:m})):(t=Object(ea.jsxLF)(lf("You’ve received the {0} Badge! {1} to save your progress"),i.createElement("span",null,pxt.U.rlf(c.displayName)),i.createElement("a",{onClick:v},lf("Sign In"))),g.push({label:lf("Sign In"),className:"completion-reward inverted",xicon:!0,icon:"cloud-user",onClick:v})),s&&g.push({label:lf("Next Reward"),className:"completion-reward",icon:"right circle arrow",onClick:function(){be("skillmap.nextReward",{path:n,activity:o.activityId,currentReward:e.type}),u()}}),i.createElement(Zt,{title:a,onClose:this.handleOnClose,actions:g},t,i.createElement("div",{className:"badge-modal-image"},i.createElement(ta.Badge,{badge:l})))}}]),a}(i.Component),ra={dispatchHideModal:function(){return{type:B}},dispatchRestartActivity:function(e,t,a,r){return{type:I,mapId:e,activityId:t,previousHeaderId:a,carryoverCode:r}},dispatchOpenActivity:et,dispatchResetUser:function(){return{type:O}},dispatchShowCarryoverModal:ct,dispatchCloseUserProfile:rt,dispatchSetShareStatus:nt,dispatchShowShareModal:ot,dispatchNextModal:function(){return{type:_}},dispatchShowUserProfile:at,dispatchShowLoginModal:st},na=Object(l.b)((function(e,t){var a,r,n;if(!e)return{};var i,c=e.pageSourceUrl,o=e.shareState,s=e.modalQueue||[],l=Object(Qt.a)(s,1)[0]||{},u=l.currentMapId,d=l.currentActivityId,p=l.type,f=l.currentReward,h=e.editorView?e.maps[e.editorView.currentMapId]:u&&e.maps[u],m=u&&d?null===(a=e.maps[u])||void 0===a?void 0:a.activities[d]:void 0;return h&&m&&Me(m)&&"completion-badge"===(null==f?void 0:f.type)&&(i=Te(c,h,m)),{type:p,pageSourceUrl:c,skillMap:h,userState:e.user,showCodeCarryoverModal:h&&m&&Ue(e.user,e.pageSourceUrl,h,m),mapId:u,activity:u&&d?e.maps[u].activities[d]:void 0,shareState:o,reward:f,hasPendingModals:(null===(r=e.modalQueue)||void 0===r?void 0:r.length)&&(null===(n=e.modalQueue)||void 0===n?void 0:n.length)>1,badge:i,signedIn:e.auth.signedIn}}),ra)(aa),ia=(a(55),function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).handleClick=function(){r.props.onItemSelect&&r.props.onItemSelect(r.props.activityId,r.props.kind)},r.handleDoubleClick=function(){r.props.onItemDoubleClick&&r.props.onItemDoubleClick(r.props.activityId,r.props.kind)},r.handleRef=function(e){e&&(e.addEventListener("mouseenter",(function(){r.setState({hover:!0})})),e.addEventListener("mouseleave",(function(){r.setState({hover:!1})})))},r.state={hover:!1},r}return Object(Ke.a)(a,[{key:"getIcon",value:function(e,t){switch(t){case"reward":return"";case"completion":return"";default:switch(e){case"locked":return"";case"completed":return"";default:return""}}}},{key:"getIconClass",value:function(e,t){switch(t){case"reward":case"completion":return"graph-icon";default:switch(e){case"locked":case"completed":return"graph-icon";default:return"graph-icon-x"}}}},{key:"getNodeMarker",value:function(e,t,a,r){var n,c,o=t/50,s=t/576;switch(e){case"notstarted":return i.createElement("g",{transform:"translate(".concat(t/2-12*o," ").concat(-t/2-9*o,")")},i.createElement("title",null,lf("Not Started")),i.createElement("g",{transform:"scale(".concat(s/2,")")},(n=a,c=r,i.createElement("path",{fill:n,stroke:c,strokeWidth:"50",d:"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"}))));default:return i.createElement("g",null)}}},{key:"render",value:function(){var e=this.state.hover,t=this.props,a=t.width,r=t.position,n=t.selected,c=t.status,o=t.kind,s=t.theme,l=e?s.unlockedNodeColor:s.unlockedNodeForeground,u=e?s.unlockedNodeForeground:s.unlockedNodeColor;"locked"===c?(u=e?s.lockedNodeForeground:s.lockedNodeColor,l=e?s.lockedNodeColor:s.lockedNodeForeground):"activity"!==o?(u=e?s.rewardNodeForeground:s.rewardNodeColor,l=e?s.rewardNodeColor:s.rewardNodeForeground):"completed"===c&&(u=e?s.completedNodeForeground:s.completedNodeColor,l=e?s.completedNodeColor:s.completedNodeForeground);var d=a/8,p=a/12.5;return i.createElement("g",{className:"graph-activity ".concat(n?"selected":""," ").concat(e?"hover":""),transform:"translate(".concat(r.x," ").concat(r.y,")"),onClick:this.handleClick,onDoubleClick:this.handleDoubleClick,ref:this.handleRef},n&&("activity"!==o?i.createElement("circle",{className:"highlight",cx:0,cy:0,r:a/2+d,stroke:s.selectedStrokeColor}):i.createElement("rect",{className:"highlight",x:-a/2-d,y:-a/2-d,width:a+2*d,height:a+2*d,rx:a/6,stroke:s.selectedStrokeColor})),"activity"!==o?i.createElement("circle",{cx:0,cy:0,r:a/2,fill:u,stroke:l,strokeWidth:"2"}):i.createElement("rect",{x:-a/2,y:-a/2,width:a,height:a,rx:a/10,fill:u,stroke:l,strokeWidth:"2"}),"activity"===o&&this.getNodeMarker(c,a,s.selectedStrokeColor,s.strokeColor),i.createElement("text",{dy:p,textAnchor:"middle",alignmentBaseline:"middle",dominantBaseline:"middle",fill:l,className:this.getIconClass(c,o)},this.getIcon(c,o)))}}]),a}(i.Component)),ca=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){return Object(Ye.a)(this,a),t.apply(this,arguments)}return Object(Ke.a)(a,[{key:"render",value:function(){var e,t,a=this.props,r=a.points,n=a.strokeWidth,c=a.color,o="M 0 0",s="";return r.forEach((function(a){var r,n,i,c;e=a,t&&(o+=" l ".concat(((null===(r=e)||void 0===r?void 0:r.x)||0)-t.x," ").concat(((null===(n=e)||void 0===n?void 0:n.y)||0)-t.y),s=" l ".concat(t.x-((null===(i=e)||void 0===i?void 0:i.x)||0)," ").concat(t.y-((null===(c=e)||void 0===c?void 0:c.y)||0)," ").concat(s)),t=e})),i.createElement("g",{transform:"translate(".concat(r[0].x||0," ").concat(r[0].y||0,")")},i.createElement("path",{stroke:c,strokeWidth:n,d:"".concat(o," ").concat(s)}))}}]),a}(i.Component),oa=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).onItemSelect=function(e,t){var a=r.props,n=a.user,i=a.pageSourceUrl,c=a.map,o=(a.completionState,a.selectedActivityId),s=a.dispatchChangeSelectedItem,l=a.dispatchShowCompletionModal,u=Se(n,i,c,e).status;"completion"===t&&"completed"===u?(be("skillmap.graph.reward.select",{path:c.mapId,activity:e}),s(c.mapId,e),l(c.mapId,e)):e!==o?(be("skillmap.graph.item.select",{path:c.mapId,activity:e}),s(c.mapId,e)):(be("skillmap.graph.item.deselect",{path:c.mapId,activity:e}),s(void 0))},r.onItemDoubleClick=function(e,t){var a=r.props,n=a.user,i=a.pageSourceUrl,c=a.map,o=a.dispatchOpenActivity,s=a.dispatchShowCarryoverModal,l=Se(n,i,c,e).status,u=c.activities[e];be("skillmap.activity.open.doubleclick",{path:c.mapId,activity:e,status:l||""});var d=Oe(n,i,c.mapId,u.activityId);Ue(n,i,c,u)&&!(null==d?void 0:d.headerId)?s(c.mapId,e):"activity"==t&&"locked"!==l&&o(c.mapId,e)},r}return Object(Ke.a)(a,[{key:"componentDidUpdate",value:function(e){"transitioning"===e.completionState&&setTimeout((function(){be("skillmap.graph.reward.auto",{path:e.map.mapId,activity:e.selectedActivityId||""}),e.dispatchSetSkillMapCompleted(e.map.mapId),e.dispatchShowCompletionModal(e.map.mapId,e.selectedActivityId)}),400)}},{key:"render",value:function(){var e=this,t=this.props,a=t.unit,r=t.items,n=t.paths,c=t.map,o=t.user,s=t.selectedActivityId,l=t.pageSourceUrl,u=t.theme;return i.createElement("g",{className:"skill-graph"},i.createElement("g",{opacity:u.pathOpacity},n.map((function(e,t){return i.createElement(ca,{key:"graph-activity-".concat(t),strokeWidth:3*a,color:u.strokeColor,points:e.points})})),n.map((function(e,t){return i.createElement(ca,{key:"graph-activity-".concat(t),strokeWidth:3*a-4,color:u.pathColor,points:e.points})}))),r.map((function(t,r){return i.createElement(ia,{key:"graph-activity-".concat(r),theme:u,kind:t.activity.kind,activityId:t.activity.activityId,position:t.position,width:5*a,selected:t.activity.activityId===s,onItemSelect:e.onItemSelect,onItemDoubleClick:e.onItemDoubleClick,status:Se(o,l,c,t.activity.activityId).status})})))}}]),a}(i.Component),sa={dispatchChangeSelectedItem:function(e,t){return{type:g,mapId:e,activityId:t}},dispatchShowCompletionModal:it,dispatchSetSkillMapCompleted:function(e){return{type:y,mapId:e}},dispatchOpenActivity:et,dispatchShowCarryoverModal:ct},la=Object(l.b)((function(e,t){var a,r,n,i;if(!e)return{};var c=null===(a=e.user)||void 0===a||null===(r=a.mapProgress)||void 0===r?void 0:r[e.pageSourceUrl];return{user:e.user,pageSourceUrl:e.pageSourceUrl,theme:e.theme,selectedActivityId:e.selectedItem&&(null===(n=t.map)||void 0===n?void 0:n.mapId)==e.selectedItem.mapId?e.selectedItem.activityId:void 0,completionState:null==c||null===(i=c[t.map.mapId])||void 0===i?void 0:i.completionState}}),sa)(oa);function ua(e,t){return{x:da(e),y:pa(t)}}function da(e){return 10*(12*e+4)}function pa(e){return 10*(9*e+4)}function fa(e){for(var t=[],a=[e],r={};a.length>0;){var n=a.shift();n&&!r[n.activityId]&&(r[n.activityId]=!0,t.push(n),a=n.next.concat(a))}return t}function ha(e){var t=function(e){for(var t=[],a=[e],r={};a.length>0;){var n=a.shift();n&&!r[n.activityId]&&(r[n.activityId]=!0,t.push(n),a=a.concat(n.next))}return t}(e),a={};return t.forEach((function(e){var t=e.next.slice();e.next.length=0,a[e.activityId]=JSON.parse(JSON.stringify(e)),e.next=t})),Object.keys(a).forEach((function(e){return a[e].next=a[e].nextIds.map((function(e){return a[e]}))})),a[e.activityId]}a(56);var ma=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).onImageLoad=function(e){r.setState({backgroundSize:{width:e.target.naturalWidth,height:e.target.naturalHeight}})},r.state={backgroundSize:{width:0,height:0}},r}return Object(Ke.a)(a,[{key:"render",value:function(){var e=this.props,t=e.graphs,a=e.graphSize,r=e.backgroundImageUrl,n=this.state.backgroundSize,c=0,o=a.width/a.height,s=n.width/n.height,l=r&&n.width>0&&n.height>0,u=Math.max(400,a.height),d=Math.max(600,a.width);l&&(o-s>.05?u=d*(1/s):o-s<-.05&&(d=u*s));var p=Math.max(u-a.height,0)/2,f=Math.max(d-a.width,0)/2;return i.createElement("div",{className:"skill-graph-wrapper"},i.createElement("div",{className:"skill-graph-content ".concat(l?"has-background":"")},i.createElement("div",{className:"skill-graph-activities"},i.createElement("svg",{viewBox:"-".concat(f+40," -").concat(p+40," ").concat(d+80," ").concat(u+80),preserveAspectRatio:"xMidYMid meet"},t.map((function(e,t){return c+=e.height,i.createElement("g",{key:t,transform:"translate(0, ".concat(c-e.height,")")},i.createElement(la,Object.assign({unit:10},e)))})))),r&&i.createElement("div",{className:"skill-graph-background"},i.createElement("img",{src:r,alt:lf("Background Image"),onLoad:this.onImageLoad}))))}}]),a}(i.Component),va=Object(l.b)((function(e,t){if(!e)return{};var a=t.maps.map((function(e){return function(e){var t=[];switch(e.layout){case"manual":t=t.concat(function(e){var t=[],a=fa(ha(e)).filter((function(e){return"layout"!==e.kind}));return a.forEach((function(e){if(t.indexOf(e.activityId)<0){var a,r;t.push(e.activityId),e.depth=(null===(a=e.position)||void 0===a?void 0:a.depth)||0,e.offset=(null===(r=e.position)||void 0===r?void 0:r.offset)||0;var n=[];e.next.forEach((function(t,a){var r,i,c,o=(null===(r=t.position)||void 0===r?void 0:r.depth)||0,s=(null===(i=t.position)||void 0===i?void 0:i.offset)||0,l=[{depth:e.depth,offset:e.offset}];(null===(c=e.edges)||void 0===c?void 0:c[a])&&e.edges[a].forEach((function(e){var t=l[l.length-1];e.depth!==t.depth&&e.offset!==t.offset&&l.push({depth:t.depth,offset:e.offset}),l.push(e)}));var u=l[l.length-1];o!==u.depth&&s!==u.offset&&l.push({depth:u.depth,offset:s}),l.push({depth:o,offset:s}),n.push(l)})),e.edges=n}})),a}(e.root));break;case"ortho":default:t=t.concat(function(e){for(var t=ha(e),a=[t],r={},n={},i=0,c=function(){var e=a.shift();if(e&&!n[e.activityId]){var t;n[e.activityId]=!0;var c=null===(t=e.parents)||void 0===t?void 0:t[0];if(c){var o=r[c.activityId]||{depth:0,offset:0};0==o.depth?(o.depth=1,e.offset=c.offset+o.offset):(i+=1,o.offset=i,e.offset=i),e.depth=c.depth+o.depth,r[c.activityId]=o}else e.depth=0,e.offset=0;var s=e.next.map((function(t){var a=t;return a.parents?a.parents.push(e):a.parents=[e],a}));s.filter((function(e){return n[e.activityId]})).forEach((function(t){(function(e,t){return!(!e.parents||!t.parents||(e.parents.forEach((function(e){t.parents.indexOf(e)>=0&&(a=e)})),!a||1!=Math.abs(a.nextIds.indexOf(e.activityId)-a.nextIds.indexOf(t.activityId))||e.depth!=t.depth));var a})(t,e)||(t.offset+=1,i=Math.max(i,t.offset),t.depth=Math.max(t.depth,e.depth+1))})),a=s.concat(a)}};a.length>0;)c();var o=fa(t).filter((function(e){return"layout"!==e.kind})),s={};return o.forEach((function(e){null==s[e.depth]&&(s[e.depth]=[]),s[e.depth].push(e.offset)})),o.forEach((function(e){var t;if((!e.next||0==e.next.length)&&1==(null===(t=e.parents)||void 0===t?void 0:t.length)){var a=e.parents[0],r=s[e.depth],n=r[r.indexOf(e.offset)-1];(n?e.offset-n:Math.abs(e.depth-a.depth)+Math.abs(e.offset-a.offset))>2&&(e.depth=a.depth,e.offset=(n||a.offset)+1)}})),o.forEach((function(e){if(e.parents){e.edges=[];var t=e.parents.some((function(t){return t.offset==e.offset}))||e.parents.length>2;e.parents.forEach((function(a){var r,n=[{depth:a.depth,offset:a.offset}];if(t){var i=s[e.depth],c=i.indexOf(e.offset),o=e.offset>a.offset&&!(i[c+1]-i[c]<e.offset-a.offset),l=e.offset<a.offset&&!(i[c]-i[c-1]<a.offset-e.offset);o||l?n.push({depth:e.depth,offset:a.offset}):n.push({depth:a.depth,offset:e.offset})}else n.push({depth:a.depth,offset:e.offset});n.push({depth:e.depth,offset:e.offset}),null===(r=e.edges)||void 0===r||r.push(n)}))}})),o}(e.root))}var a,r=0,n=0,i=[],c=[],o=Object(d.a)(t);try{for(o.s();!(a=o.n()).done;){var s=a.value,l=s.depth,u=s.offset;i.push({activity:s,position:ua(l,u)}),s.edges&&s.edges.forEach((function(e){var t=[];e.forEach((function(e){return t.push(ua(e.depth,e.offset))})),c.push({points:t})})),r=Math.max(r,s.depth),n=Math.max(n,s.offset)}}catch(e){o.e(e)}finally{o.f()}var p=da(r)+40,f=pa(n)+40;return{map:e,items:i,paths:c,width:p,height:f}}(e)})),r=(null==a?void 0:a.length)?a.map((function(e){return e.width})).reduce((function(e,t){return Math.max(e,t)})):0,n=(null==a?void 0:a.length)?a.map((function(e){return e.height})).reduce((function(e,t){return e+t})):0;return{graphs:a,graphSize:{width:r,height:n}}}))(ma),ga=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){var e;Object(Ye.a)(this,a);for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(e=t.call.apply(t,[this].concat(n))).handleActionButtonClick=function(){var t=e.props,a=t.status,r=t.mapId,n=t.activityId,i=t.dispatchOpenActivity,c=t.dispatchShowCarryoverModal,o=t.showCodeCarryoverModal;if("locked"!==a)switch(be("skillmap.activity.open",{path:r,activity:n,status:a||""}),a){case"notstarted":o?c(r,n):i(r,n);break;case"completed":case"inprogress":case"restarted":default:i(r,n)}},e.handleRestartButtonClick=function(){var t=e.props,a=t.mapId,r=t.activityId,n=t.status,i=t.dispatchShowRestartActivityWarning;be("skillmap.sidebar.restart",{path:a,activity:r,status:n||""}),i(a,r)},e.handleShareButtonClick=function(){var t=e.props,a=t.mapId,r=t.activityId,n=t.status,i=t.dispatchShowShareModal;be("skillmap.sidebar.share",{path:a,activity:r,status:n||""}),i(a,r)},e.handleSaveToProjectsClick=function(){var t=e.props,a=t.completedHeaderId;be("skillmap.export",{path:t.mapId||"",activity:t.activityId||""}),window.open("".concat(Yt,"#skillmapimport:").concat(a))},e}return Object(Ke.a)(a,[{key:"getActivityActionText",value:function(){switch(this.props.status){case"locked":return lf("LOCKED");case"completed":return lf("VIEW CODE");case"inprogress":case"restarted":return lf("CONTINUE");case"notstarted":default:return lf("START")}}},{key:"isCompleted",value:function(e){return"completed"===e||"restarted"===e}},{key:"render",value:function(){var e=this.props,t=e.status,a=e.completedHeaderId,r=t&&"notstarted"!==t&&"locked"!==t;return"locked"===t?i.createElement("div",null):i.createElement("div",{className:"actions ".concat(a?"grid":"")},i.createElement("div",{className:"action-button",role:"button",onClick:this.handleActionButtonClick},this.getActivityActionText()),r&&i.createElement("div",{className:"action-button",role:"button",onClick:this.handleRestartButtonClick},lf("Restart")),r&&i.createElement("div",{className:"action-button",role:"button",onClick:this.handleShareButtonClick},lf("Share")),a&&i.createElement("div",{className:"action-button",role:"button",onClick:this.handleSaveToProjectsClick},lf("Save to My Projects")))}}]),a}(i.Component),ya={dispatchOpenActivity:et,dispatchShowRestartActivityWarning:function(e,t){return lt({type:"restart-warning",currentMapId:e,currentActivityId:t})},dispatchShowShareModal:ot,dispatchShowCarryoverModal:ct},ba=Object(l.b)((function(e,t){if(!e)return{};var a=t,r=e.maps[a.mapId],n=r.activities[a.activityId];return{showCodeCarryoverModal:Ue(e.user,e.pageSourceUrl,r,n)}}),ya)(ga),ka=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){var e;Object(Ye.a)(this,a);for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(e=t.call.apply(t,[this].concat(n))).handleActionButtonClick=function(){var t=e.props,a=t.status,r=t.mapId,n=t.activityId,i=t.dispatchShowCompletionModal;switch(a){case"locked":break;default:return be("skillmap.sidebar.reward",{path:r,activity:n}),i(r,n)}},e}return Object(Ke.a)(a,[{key:"render",value:function(){return"locked"===this.props.status?i.createElement("div",null):i.createElement("div",{className:"actions"},i.createElement("div",{className:"action-button",role:"button",onClick:this.handleActionButtonClick},lf("Claim Reward")))}}]),a}(i.Component),wa={dispatchOpenActivity:et,dispatchShowCompletionModal:it},Sa=Object(l.b)(null,wa)(ka),Ia=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){return Object(Ye.a)(this,a),t.apply(this,arguments)}return Object(Ke.a)(a,[{key:"render",value:function(){var e=pxt.cloud.cloudStatus[this.props.cloudStatus];return i.createElement("div",{className:"cloud-action"},this.props.signedIn?i.createElement("div",{className:"cloud-indicator"},i.createElement("div",{className:"ui tiny cloudicon xicon ".concat(e.icon),title:e.tooltip,tabIndex:-1}),e.longStatus):i.createElement("div",{className:"sign-in-button",onClick:this.props.dispatchShowLoginModal},lf("Sign in to Save")))}}]),a}(i.Component),xa={dispatchShowLoginModal:st},Ca=Object(l.b)((function(e,t){var a=e.user,r=e.pageSourceUrl,n=e.selectedItem,i="none";if(null==n?void 0:n.activityId){var c,o=null===(c=Oe(a,r,n.mapId,n.activityId))||void 0===c?void 0:c.headerId;o&&(i=e.cloudState&&e.cloudState[o]||i)}else i="synced";return{signedIn:e.auth.signedIn,cloudStatus:i}}),xa)(Ia),Oa=(a(57),function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){return Object(Ye.a)(this,a),t.apply(this,arguments)}return Object(Ke.a)(a,[{key:"getStatusLabel",value:function(e){switch(e){case"locked":return lf("Locked");case"completed":return lf("Completed");default:return null}}},{key:"getStatusIcon",value:function(e){switch(e){case"locked":return"lock";case"completed":return"check circle";default:return null}}},{key:"render",value:function(){var e=this.props,t=e.mapId,a=e.title,r=e.subtitle,n=e.description,c=e.infoUrl,o=e.imageUrl,s=e.details,l=e.node,u=e.status,d=e.completedHeaderId,p=this.getStatusLabel(u),f=!l,h=l&&!Me(l),m=h&&l.tags||void 0,v=pxt.auth.hasIdentity();return i.createElement("div",{className:"info-panel"},i.createElement("div",{className:"info-panel-image"},o?i.createElement("img",{src:o,alt:lf("Preview of activity content")}):i.createElement("i",{className:"icon image"})),i.createElement("div",{className:"info-panel-content"},r&&i.createElement("div",{className:"info-panel-subtitle"},r),i.createElement("div",{className:"info-panel-title"},a),p&&i.createElement("div",{className:"info-panel-label"},i.createElement("i",{className:"ui icon ".concat(this.getStatusIcon(u))}),i.createElement("span",null,p)),i.createElement("div",{className:"info-panel-description"},n),f&&c&&i.createElement("a",{className:"info-panel-link",href:c,target:"_blank",rel:"noopener noreferrer"},lf("Learning Outcomes")),m&&m.length>0&&i.createElement("div",{className:"info-panel-tags"},m.map((function(e,t){return i.createElement("div",{key:t},e)}))),i.createElement("div",{className:"info-panel-detail"},null==s?void 0:s.map((function(e,t){return i.createElement("div",{key:"detail_".concat(t)},e)}))),i.createElement("div",{className:"tablet-spacer"}),!f&&(h?i.createElement(ba,{mapId:t,activityId:l.activityId,status:u,completedHeaderId:d}):i.createElement(Sa,{mapId:t,activityId:l.activityId,status:u})),v&&i.createElement(Ca,null)))}}]),a}(i.Component)),Ea=Object(l.b)((function(e,t){var a,r,n,i,c=e.user,o=e.pageSourceUrl,s=e.maps,l=e.selectedItem,u=e.infoUrl,d=l&&(null===(a=e.maps[l.mapId])||void 0===a?void 0:a.activities[l.activityId]),p="activity"===(null==d?void 0:d.kind),f=[];if(s)if((null==l?void 0:l.activityId)&&s[l.mapId]){var h=s[l.mapId],m=Se(e.user,e.pageSourceUrl,h,l.activityId),v=m.status,g=m.currentStep,y=m.maxSteps;r=v,i=m.completedHeadedId,p&&(f.push(y?"".concat(g,"/").concat(y," ").concat(lf("Steps")):lf("Not Started")),f.push(p?d.type:"")),h&&(n=h.displayName)}else if(c){var b=Object.keys(s),k=0,w=0,S=0,I=0;b.forEach((function(e){var t=s[e].activities;Object.keys(t).filter((function(e){return"activity"==t[e].kind})).forEach((function(t){return++w&&we(c,o,e,t)&&++k})),Object.keys(t).filter((function(e){return Me(t[e])})).forEach((function(t){return++I&&we(c,o,e,t)&&++S}))})),f.push("".concat(k,"/").concat(w," ").concat(lf("Complete"))),f.push(I?"".concat(S,"/").concat(I," ").concat(lf("Reward(s)")):"")}return{mapId:null==l?void 0:l.mapId,title:(null==d?void 0:d.displayName)||e.title,subtitle:n,description:p?d.description:e.description,infoUrl:u,imageUrl:d?null==d?void 0:d.imageUrl:e.bannerImageUrl,node:d,status:r,details:f,completedHeaderId:i}}))(Oa),ja=a(20);function Na(e){var t=function(e){var t,a=e.split("\n"),r=[],n=null,i=null,c=null,o=[],s=0,l=Object(d.a)(a);try{for(l.s();!(t=l.n()).done;){var u=t.value;if(u.trim()){if(u.startsWith("#")){var p=/^(#+)\s*(.+)$/.exec(u);if(p){y(),n={headerKind:1===p[1].length?"single":2===p[1].length?"double":"triple",header:p[2],attributes:{}},i=null,c=null;continue}}if(n){var f=Da(u),h=u.trim(),m=/^[*-]\s+(?:([^:]+):)?(.*)$/.exec(h);if(!m)continue;if(Math.abs(f-s)>1&&i){if(f>s){var v={key:i,items:[]};o.length?o[o.length-1].items.push(v):(n.listAttributes||(n.listAttributes={}),n.listAttributes[i]=v),i=null,o.push(v)}else{var g=o.pop();i&&c&&(null==g||g.items.push((i+":"+c).trim()),c=null)}s=f}m&&(m[1]?(i&&c&&(o.length?o[o.length-1].items.push((i+":"+c).trim()):n.attributes[i]=c.trim()),i=m[1].toLowerCase(),c=m[2]):i&&(c+=m[2]))}}else c&&(c+="\n")}}catch(e){l.e(e)}finally{l.f()}return y(),r;function y(){n&&(i&&c&&(o.length?o[o.length-1].items.push((i+":"+c).trim()):n.attributes[i]=c.trim()),r.push(n)),o=[]}}(e);(null==t?void 0:t.length)||Ha("Cannot parse content: ".concat(e));for(var a,r=[],n=-1,i=0;i<t.length;i++)"single"===t[i].headerKind?a=Ma(t[i]):"double"===t[i].headerKind&&(n>=0&&r.push(Aa(t[n],t.slice(n+1,i))),n=i);return(n>0||0===r.length)&&r.push(Aa(t[n],t.slice(n+1,t.length))),{maps:r,metadata:a}}function Aa(e,t){var a=function(e){var t={mapId:e.header.toLowerCase(),displayName:e.attributes.name||e.header,description:e.attributes.description,completionUrl:e.attributes.completionurl,prerequisites:[],activities:{},allowCodeCarryover:!e.attributes.allowcodecarryover||!Pa(e.attributes.allowcodecarryover)};if("manual"===e.attributes.layout&&(t.layout="manual"),e.attributes.required){var a,r=e.attributes.required.split(","),n=Object(d.a)(r);try{for(n.s();!(a=n.n()).done;){var i=a.value,c=/^\s*(?:(\d+) +)?(.+)$/.exec(i);c[1]?t.prerequisites.push({type:"tag",tag:c[2].trim(),numberCompleted:parseInt(c[1])}):t.prerequisites.push({type:"map",mapId:c[2].trim()})}}catch(e){n.e(e)}finally{n.f()}}return t}(e),r=t.map(Ua),n=r.filter((function(e){return"activity"===e.kind}));a.allowCodeCarryover&&n.forEach((function(e){void 0===e.allowCodeCarryover&&(e.allowCodeCarryover=!0)})),a.root=r[0];var i,c=Object(d.a)(r);try{for(c.s();!(i=c.n()).done;){var o=i.value;a.activities[o.activityId]&&Ha("Duplicate activity id '".concat(o.activityId,"' in map '").concat(a.mapId,"'")),a.activities[o.activityId]=o}}catch(e){c.e(e)}finally{c.f()}var s,l=Object(d.a)(r);try{for(l.s();!(s=l.n()).done;){var u,p=s.value,h=Object(d.a)(p.nextIds);try{for(h.s();!(u=h.n()).done;){var m=u.value;a.activities[m]||Ha("Unknown activity id '".concat(m,"' in map '").concat(a.mapId,"'")),p.next.push(a.activities[m])}}catch(e){h.e(e)}finally{h.f()}}}catch(e){l.e(e)}finally{l.f()}var v={};!function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r[t.activityId])console.warn("Loop in map '".concat(a.mapId,"' detected"));else{r[t.activityId]=!0,v[t.activityId]=!0;var n,i=Object(d.a)(t.next);try{for(i.s();!(n=i.n()).done;){var c=n.value;e(c,Object(f.a)({},r))}}catch(e){i.e(e)}finally{i.f()}}}(a.root);var g,y=Object(d.a)(r);try{for(y.s();!(g=y.n()).done;){var b=g.value;v[b.activityId]||console.warn("Unreachable activity detected '".concat(b.activityId,"' in map '").concat(a.mapId,"'"))}}catch(e){y.e(e)}finally{y.f()}return a}function Ua(e){var t={activityId:e.header.toLowerCase(),imageUrl:e.attributes.imageurl,next:[],displayName:e.attributes.name||e.header,nextIds:Ba(e.attributes.next)};if(e.attributes.position){var a=e.attributes.position.split(" ");t.position={depth:parseInt(a[0])||0,offset:parseInt(a[1])||0}}if(e.attributes.edges){var r;t.edges=[];var n=Ba(e.attributes.edges,!1,";");null===(r=t.nextIds)||void 0===r||r.forEach((function(e,a){var r,i=Ba(n[a])||[];null===(r=t.edges)||void 0===r||r.push(i.map((function(e){var t=e.split(" ");return{depth:parseInt(t[0])||0,offset:parseInt(t[1])||0}})))}))}return"reward"===e.attributes.kind||"completion"===e.attributes.kind?function(e,t){var a,r,n,i=Object(f.a)(Object(f.a)({},t),{},{kind:e.attributes.kind||"reward"});if(e.attributes.type)switch(e.attributes.type.toLowerCase()){case"certificate":i.rewards||(i.rewards=[]),null===(a=i.rewards)||void 0===a||a.push({type:"certificate",url:e.attributes.url})}if(null===(r=e.listAttributes)||void 0===r?void 0:r.actions){var c,o=[],s=e.listAttributes.actions.items.filter((function(e){return"string"==typeof e})),l=Object(d.a)(s);try{for(l.s();!(c=l.n()).done;){var u=c.value.split(":"),p=Object(ja.a)(u),h=p[0],m=p.slice(1),v=/\s*\[\s*(.*)\s*\](?:\(([^\s]+)\))?/gi.exec(m.join(":")),g=null==v?void 0:v[1],y=null==v?void 0:v[2];switch(h){case"activity":o.push({kind:"activity",label:g,activityId:y});break;case"map":if(y){var b=Ta(y)?"github":Ra(y)?"docs":void 0;b||Ha("URL: ".concat(y," must be to Github or MakeCode documentation")),o.push({kind:"map",label:g,url:"#".concat(b,":").concat(y)})}break;case"tutorial":y&&(Ta(y)||Ra(y)||Ha("URL: ".concat(y," must be to Github or MakeCode documentation")),o.push({kind:"tutorial",label:g,url:"/#tutorial:".concat(y)}));break;case"docs":if(y){var k=(y.startsWith("/")?"":"/")+y;Ra(k)||Ha("URL: ".concat(k," must be to MakeCode documentation")),o.push({kind:"docs",label:g,url:k})}break;case"editor":o.push({kind:"editor",label:g})}}}catch(e){l.e(e)}finally{l.f()}o.length&&(i.actions=o)}if(null===(n=e.listAttributes)||void 0===n?void 0:n.rewards){var w,S=[],I=e.listAttributes.rewards,x=Object(d.a)(I.items);try{for(x.s();!(w=x.n()).done;){var C=w.value;if("string"==typeof C){var O=C.split(":"),E=Object(ja.a)(O),j=E[0],N=E.slice(1);switch(j){case"certificate":S.push({type:"certificate",url:N.join(":").trim()});break;case"completion-badge":S.push({type:"completion-badge",imageUrl:N.join(":").trim()})}}else if("certificate"===C.key){var A,U=C.items.filter((function(e){return"string"==typeof e})),P={type:"certificate"},M=Object(d.a)(U);try{for(M.s();!(A=M.n()).done;){var L=A.value.split(":"),T=Object(ja.a)(L),R=T[0],_=T.slice(1);"url"===R&&(P.url=_.join(":").trim()),"previewurl"!==R&&"preview"!==R||(P.previewUrl=_.join(":").trim())}}catch(e){M.e(e)}finally{M.f()}P.url||Ha("Certificate in activity ".concat(e.header," is missing url attribute")),S.push(P)}else if("completion-badge"===C.key){var B,H=C.items.filter((function(e){return"string"==typeof e})),D={type:"completion-badge"},F=Object(d.a)(H);try{for(F.s();!(B=F.n()).done;){var V=B.value.split(":"),W=Object(ja.a)(V),G=W[0],z=W.slice(1);"imageurl"!==G&&"image"!==G||(D.imageUrl=z.join(":").trim()),"displayname"!==G&&"name"!==G||(D.displayName=z.join(":").trim())}}catch(e){F.e(e)}finally{F.f()}D.imageUrl||Ha("completion-badge in activity ".concat(e.header," is missing imageurl attribute")),S.push(D)}}}catch(e){x.e(e)}finally{x.f()}var q=["completion-badge","certificate"];S.sort((function(e,t){return q.indexOf(e.type)-q.indexOf(t.type)})),S.length&&(i.rewards=S)}return i}(e,t):"layout"===e.attributes.kind?function(e,t){return Object(f.a)(Object(f.a)({},t),{},{kind:"layout",next:[]})}(0,t):function(e,t){var a=Object(f.a)(Object(f.a)({},t),{},{kind:"activity",description:e.attributes.description,url:e.attributes.url,tags:Ba(e.attributes.tags),allowCodeCarryover:!e.attributes.allowcodecarryover||!Pa(e.attributes.allowcodecarryover)});if(e.attributes.type){var r=e.attributes.type.toLowerCase();switch(r){case"tutorial":a.type=r}}if(e.attributes.editor){var n=e.attributes.editor.toLowerCase();switch(n){case"py":case"blocks":case"js":a.editor=n;break;default:a.editor="blocks"}}return a.url||Ha("Activity '".concat(a.activityId,"' is missing attribute 'url'")),a.type||Ha("Activity '".concat(a.activityId,"' is missing attribute 'type'")),a}(e,t)}function Pa(e){if(!e)return!1;switch(e.toLowerCase().trim()){case"0":case"no":case"n":case"off":case"false":return!0;default:return!1}}function Ma(e){var t=e.attributes.primarycolor,a=e.attributes.secondarycolor,r=e.attributes.tertiarycolor,n=e.attributes.highlightcolor,i=e.attributes.unlockednodecolor,c=e.attributes.lockednodecolor,o=e.attributes.completednodecolor;return{title:e.attributes.name||e.header,description:e.attributes.description,infoUrl:_a(e.attributes.infourl),backgroundImageUrl:e.attributes.backgroundurl,bannerImageUrl:e.attributes.bannerurl,alternateSources:Ba(e.attributes.alternatesources),theme:{backgroundColor:r||"var(--body-background-color)",pathColor:t||"#BFBFBF",strokeColor:"#000000",rewardNodeColor:n||"var(--primary-color)",rewardNodeForeground:n?La(n):"#000000",unlockedNodeColor:i||a||"var(--secondary-color)",unlockedNodeForeground:i||a?La(i||a):"#000000",lockedNodeColor:c||t||"#BFBFBF",lockedNodeForeground:c||t?La(c||t):"#000000",completedNodeColor:o||a||"var(--secondary-color)",completedNodeForeground:o||a?La(o||a):"#000000",selectedStrokeColor:n||"var(--primary-color)",pathOpacity:.5}}}function La(e){return e=e.replace("#",""),Number.parseInt(e.slice(0,2),16)+Number.parseInt(e.slice(2,4),16)+Number.parseInt(e.slice(4),16)>382.5?"#000000":"#ffffff"}function Ta(e){return e.match(/^(https?:\/\/)?(www\.)?github\.com\//gi)}function Ra(e){return e.indexOf(".")<0}function _a(e){if(e)return Ta(e)?e.replace(/\?[\s\S]+$/gi,""):Ra(e)?"".concat(e.startsWith("/")?"":"/").concat(e):void Ha("URL: ".concat(e," must be to Github or MakeCode documentation"))}function Ba(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:",";if(!e)return[];var r=e.split(a).map((function(e){return e.trim().toLowerCase()})).filter((function(e){return!!e}));if(!t){var n={};return r.forEach((function(e){return n[e]=e})),Object.keys(n)}return r}function Ha(e){throw e}function Da(e){for(var t=0,a=0;a<e.length;a++)if(" "===e.charAt(a))t++;else{if("\t"!==e.charAt(a))return t;t+=4}return 0}var Fa=a(36),Va=a(13),Wa=a(37);function Ga(e,t){Object(Wa.pushNotificationMessage)({kind:e,text:t,hc:!1})}var za=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).renderUserProfile=function(){var e,t=r.props,a=t.profile,n=t.preferences,c=r.state,o=c.notification,s=c.modal,l=c.emailSelected;return i.createElement(Zt,{title:(null==a||null===(e=a.idp)||void 0===e?void 0:e.displayName)||"",fullscreen:!0,onClose:r.handleOnClose},i.createElement(Fa.Profile,{user:{profile:a,preferences:n},signOut:r.handleSignout,deleteProfile:r.handleDeleteAccountClick,notification:o,showModalAsync:r.showModalAsync,checkedEmail:l,onClickedEmail:r.handleEmailClick}),s&&i.createElement(Zt,{title:s.header,onClose:r.closeModal,className:s.className},s.jsx))},r.avatarPicUrl=function(){var e,t,a,n,i=r.props.profile;return null!==(e=null==i||null===(t=i.idp)||void 0===t?void 0:t.pictureUrl)&&void 0!==e?e:null==i||null===(a=i.idp)||void 0===a||null===(n=a.picture)||void 0===n?void 0:n.dataUrl},r.getAccountPanel=function(){var e,t,a,n,c,o,s=r.props.profile,l=(null==s||null===(e=s.idp)||void 0===e?void 0:e.provider)&&pxt.auth.identityProvider(null==s||null===(t=s.idp)||void 0===t?void 0:t.provider),u=i.createElement("div",{className:"profile-pic avatar"},i.createElement("img",{src:r.avatarPicUrl(),alt:lf("User")})),d=i.createElement("div",{className:"profile-pic avatar"},i.createElement("span",null,pxt.auth.userInitials(s)));return i.createElement("div",{className:"account panel ui card"},i.createElement("div",{className:"header-text"},i.createElement("label",null,lf("Profile"))),r.avatarPicUrl()?u:d,i.createElement("div",{className:"row-span-two"},i.createElement("label",{className:"title"},lf("Name")),i.createElement("p",{className:"value"},(null==s||null===(a=s.idp)||void 0===a?void 0:a.displayName)||(null==s||null===(n=s.idp)||void 0===n?void 0:n.username))),i.createElement("div",{className:"row-span-two"},i.createElement("label",{className:"title"},lf("Username")),i.createElement("p",{className:"value"},null==s||null===(c=s.idp)||void 0===c?void 0:c.username)),i.createElement("div",{className:"row-span-two"},i.createElement("label",{className:"title"},lf("Provider")),i.createElement("p",{className:"value"},null==l?void 0:l.name)),i.createElement("div",{className:"row-span-two",onClick:r.handleSignout},i.createElement("div",{className:"ui icon button"},i.createElement("span",{className:"xicon ".concat(null==s||null===(o=s.idp)||void 0===o?void 0:o.provider)}),i.createElement("span",null," ",lf("Sign out")," "))),i.createElement("div",{className:"row-span-two"},i.createElement("a",{className:"ui",title:lf("delete profile"),onClick:r.handleDeleteAccountClick},lf("I want to delete my profile")," ")))},r.handleOnClose=function(){r.props.dispatchCloseUserProfile()},r.getFeedbackPanel=function(){return i.createElement("div",{className:"feedback panel ui card"},i.createElement("div",{className:"header-text"},i.createElement("label",null,lf("Feedback"))),i.createElement("div",{className:"row-span-two"},lf("What do you think about the Sign In & Cloud Save feature? Is there something you'd like to change? Did you encounter issues? Please let us know!")),i.createElement("div",{className:"row-span-two"},i.createElement("a",{className:"ui",title:lf("Provide feedback in a from"),href:"https://aka.ms/AAcnpaj",target:"_blank"},i.createElement("i",{className:"icon external alternate"}),lf("Take the Survey"))))},r.handleSignout=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:pxt.tickEvent("skillmap.userprofile.signout"),Et(location.hash);case 2:case"end":return e.stop()}}),e)}))),r.handleDeleteAccountClick=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r.props.dispatchShowDeleteAccountModal();case 1:case"end":return e.stop()}}),e)}))),r.handleEmailClick=function(e){r.setState({emailSelected:Va.CheckboxStatus.Waiting}),function(e){return Ft.apply(this,arguments)}(e).then((function(t){var a,n;(null==t?void 0:t.success)?(n=lf("Settings saved"),pxt.debug(n),Ga("info",n),r.setState({emailSelected:(null===(a=t.res)||void 0===a?void 0:a.email)?Va.CheckboxStatus.Selected:Va.CheckboxStatus.Unselected})):(function(e){pxt.tickEvent("notification.error",{message:e}),Ga("err",e)}(lf("Oops, something went wrong")),r.setState({emailSelected:e?Va.CheckboxStatus.Unselected:Va.CheckboxStatus.Selected}))}))},r.showModalAsync=function(){var e=Object(J.a)($.a.mark((function e(t){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r.setState({modal:t});case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),r.closeModal=function(){r.setState({modal:void 0})},_t().then((function(e){return r.setState({emailSelected:(null==e?void 0:e.email)?Va.CheckboxStatus.Selected:Va.CheckboxStatus.Unselected})})),pxt.targetConfigAsync().then((function(e){return r.setState({notification:e.profileNotification})})),r}return Object(Ke.a)(a,[{key:"render",value:function(){return this.props.showProfile?this.renderUserProfile():i.createElement("div",null)}}]),a}(i.Component),qa={dispatchCloseUserProfile:rt,dispatchShowDeleteAccountModal:function(){return lt({type:"delete-account"})}},Qa=Object(l.b)((function(e,t){return e?{signedIn:e.auth.signedIn,profile:e.auth.profile,showProfile:e.showProfile,preferences:e.auth.preferences}:{}}),qa)(za),Ya=function(){function e(){Object(Ye.a)(this,e),this.sendMessageAsync=void 0}return Object(Ke.a)(e,[{key:"exportCloudProjectsToLocal",value:function(e){return this.sendMessageAsync({type:"pxteditor",action:"convertcloudprojectstolocal",userId:e})}}]),e}(),Ka=function(){function e(){var t=this;Object(Ye.a)(this,e),this.promise_=void 0,this.resources=void 0,this.appMounted=void 0,this.resolve=void 0,this.promise=function(){return t.promise_},this.resources=new Ya,this.promise_=new Promise((function(e){t.resolve=e,t.checkComplete()}))}return Object(Ke.a)(e,[{key:"setSendMessageAsync",value:function(e){this.resources.sendMessageAsync=e,this.checkComplete()}},{key:"setAppMounted",value:function(){this.appMounted=!0,this.checkComplete()}},{key:"checkComplete",value:function(){var e;this.resolve&&this.appMounted&&this.resources.sendMessageAsync&&(qe.dispatch((e=this.resources,{type:Y,resources:e})),this.resolve(this.resources))}}]),e}(),$a=(a(79),a(80),function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).queryFlags={},r.unsubscribeChangeListener=void 0,r.loadedUser=void 0,r.readyPromise=void 0,r.ready=function(){return r.readyPromise.promise()},r.handleHashChange=function(){var e=Object(J.a)($.a.mark((function e(t){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,r.parseHashAsync();case 2:t.stopPropagation(),t.preventDefault();case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),r.handleError=function(e){var t=e||lf("Oops! Couldn't load content, please check the URL and markdown file.");console.error(t),r.setState({error:t})},r.onMakeCodeFrameLoaded=function(){var e=Object(J.a)($.a.mark((function e(t){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r.readyPromise.setSendMessageAsync(t);case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),r.onStoreChange=Object(J.a)($.a.mark((function e(){var t,a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=qe.getState(),(a=t.user)===r.loadedUser||r.loadedUser&&a.id!==r.loadedUser.id){e.next=6;break}if(!(!r.props.signedIn||r.props.signedIn&&r.state.cloudSyncCheckHasFinished)){e.next=6;break}return e.next=5,mt(a);case 5:r.loadedUser=a;case 6:return e.next=8,r.syncBadgesAsync();case 8:case"end":return e.stop()}}),e)}))),r.state={cloudSyncCheckHasFinished:!1,badgeSyncLock:!1},r.readyPromise=new Ka,window.addEventListener("hashchange",r.handleHashChange),r.cloudSyncCheckAsync(),r}return Object(Ke.a)(a,[{key:"parseHashAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r,n,i,c;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,pxt.targetConfigAsync();case 2:return r=e.sent,i=window.location.hash.replace("#",""),n=i&&(null===(t=r.skillMap)||void 0===t||null===(a=t.pathAliases)||void 0===a?void 0:a[i])?Z(r.skillMap.pathAliases[i]):Z(window.location.hash||(null===(c=r.skillMap)||void 0===c?void 0:c.defaultPath)),e.next=7,this.fetchAndParseSkillMaps(n.cmd,n.arg);case 7:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"initLocalizationAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r,n,i,c,o,s,l,u,d,p;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=pxt.appTarget.appTheme,r=window.location.href,n=!1,i=void 0,/[&?]translate=1/.test(r)&&!pxt.BrowserUtils.isIE()?i=ts.pxtc.Util.TRANSLATION_LOCALE:((c=/(live)?(force)?lang=([a-z]{2,}(-[A-Z]+)?)/i.exec(window.location.href))&&window.location.hash.indexOf(c[0])>=0&&pxt.BrowserUtils.changeHash(window.location.hash.replace(c[0],"")),i=c?c[3]:pxt.BrowserUtils.getCookieLang()||a.defaultLocale||navigator.userLanguage||navigator.language,n=!!c&&!!c[2]),o=pxt.appTarget.id,s=pxt.appTarget.versions.pxtCrowdinBranch,l=pxt.appTarget.versions.targetCrowdinBranch,u=pxt.appTarget.appTheme.defaultLocale,d=null===(t=i)||void 0===t?void 0:t.toLocaleLowerCase(),p=pxt.BrowserUtils.isLocalHostDev()&&(!d||(u?u.toLocaleLowerCase()===d:"en"===d||"en-us"===d)),pxt.BrowserUtils.isPxtElectron()||p||pxt.Util.enableLiveLocalizationUpdates(),e.next=16,Ja({targetId:o,baseUrl:"",code:i,pxtBranch:s,targetBranch:l,force:n});case 16:pxt.Util.isLocaleEnabled(i)&&pxt.BrowserUtils.setCookieLang(i);case 17:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}()},{key:"fetchAndParseSkillMaps",value:function(){var e=Object(J.a)($.a.mark((function e(t,a){var n,i,c,o,s,l,u,d,p,f,h,m,v,g,y,b,k,w=this;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,te(t,a);case 2:if(n=e.sent,i=null==n?void 0:n.text,c=null==n?void 0:n.identifier,o=null==n?void 0:n.status,i&&c&&o)try{"banned"===o?this.handleError(lf("This GitHub repository has been banned.")):(ye(c),this.props.dispatchSetPageSourceUrl(c,o),this.props.dispatchClearMetadata()),l=Na(i),u=l.maps,d=l.metadata,(null==u?void 0:u.length)>0&&(s=u,this.props.dispatchClearSkillMaps(),u.forEach((function(e){w.props.dispatchAddSkillMap(e)}))),d&&(p=d.title,f=d.description,h=d.infoUrl,m=d.backgroundImageUrl,v=d.bannerImageUrl,g=d.theme,y=d.alternateSources,r=p,this.props.dispatchSetPageTitle(p),f&&this.props.dispatchSetPageDescription(f),h&&this.props.dispatchSetPageInfoUrl(h),m&&this.props.dispatchSetPageBackgroundImageUrl(m),v&&this.props.dispatchSetPageBannerImageUrl(v),y&&this.props.dispatchSetPageAlternateUrls(y),g&&this.props.dispatchSetPageTheme(g)),this.setState({error:void 0})}catch(e){this.handleError(e)}else this.setState({error:lf("No content loaded.")});return e.next=9,ft();case 9:return b=e.sent,c&&!b.completedTags[c]&&(b.completedTags[c]={}),this.applyQueryFlags(b,s,c),this.loadedUser=b,this.props.dispatchSetUser(b),e.next=16,_t();case 16:(k=e.sent)&&this.props.dispatchSetUserPreferences(k);case 18:case"end":return e.stop()}}),e,this)})));return function(t,a){return e.apply(this,arguments)}}()},{key:"cloudSyncCheckAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r=this;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.ready();case 2:return t=e.sent,e.next=5,It();case 5:if(e.sent){e.next=9;break}this.setState({cloudSyncCheckHasFinished:!0}),e.next=13;break;case 9:return a=function(){var e=Object(J.a)($.a.mark((function e(){var a,n,i,c,o,s,l,u,d,p,h,m,v,g,y,b,k,w,S,I,x,C,O,E,j;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=qe.getState(),e.next=3,dt();case 3:return n=e.sent,e.next=6,ft();case 6:return i=e.sent,c=Re(n,a.pageSourceUrl,i),e.next=10,t.sendMessageAsync({type:"pxteditor",action:"savelocalprojectstocloud",headerIds:c});case 10:if(!(o=e.sent.resp.headerIdMap)){e.next=27;break}for(s=Object(f.a)(Object(f.a)({},i),{},{mapProgress:{}}),l=Object.keys(n.mapProgress),u=0,d=l;u<d.length;u++)for(p=d[u],s.mapProgress[p]=Object(f.a)({},n.mapProgress[p]),h=Object.keys(n.mapProgress[p]),m=0,v=h;m<v.length;m++)if(g=v[m],!Ee(i,p))for(s.mapProgress[p][g]=Object(f.a)({},n.mapProgress[p][g]),s.completedTags[p]=n.completedTags[p],y={},s.mapProgress[p][g].activityState=y,b=n.mapProgress[p][g].activityState,k=0,w=Object.keys(b);k<w.length;k++)S=w[k],(I=b[S]).headerId?y[S]=Object(f.a)(Object(f.a)({},I),{},{headerId:o[I.headerId]||I.headerId}):Me(a.maps[g].activities[S])&&(y[S]=Object(f.a)({},I));for(x=Object.keys(i.mapProgress),C=0,O=x;C<O.length;C++)E=O[C],Ee(i,E)&&(s.mapProgress[E]=Object(f.a)({},i.mapProgress[E]),s.completedTags[E]=i.completedTags[E]);return r.props.dispatchSetUser(s),e.next=20,mt(s);case 20:return i=s,e.next=23,_t();case 23:return(j=e.sent)&&r.props.dispatchSetUserPreferences(j),e.next=27,r.syncBadgesAsync();case 27:return e.next=29,t.sendMessageAsync({type:"pxteditor",action:"requestprojectcloudstatus",headerIds:Re(i,a.pageSourceUrl)});case 29:r.setState({cloudSyncCheckHasFinished:!0,showingSyncLoader:!1});case 30:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),e.next=13,Promise.race([pxt.U.delay(1e4).then((function(){r.state.cloudSyncCheckHasFinished||r.setState({cloudSyncCheckHasFinished:!0,showingSyncLoader:!1})})),a()]);case 13:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"componentDidMount",value:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.unsubscribeChangeListener=qe.subscribe(this.onStoreChange),this.queryFlags=ee(),!this.queryFlags.authcallback){e.next=5;break}return e.next=5,Ct(this.queryFlags);case 5:return e.next=7,wt();case 7:return e.next=9,this.initLocalizationAsync();case 9:return e.next=11,this.parseHashAsync();case 11:return this.readyPromise.setAppMounted(),e.next=14,It();case 14:if(e.t0=e.sent,!e.t0){e.next=17;break}e.t0=!this.state.cloudSyncCheckHasFinished;case 17:if(!e.t0){e.next=19;break}this.setState({showingSyncLoader:!0});case 19:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"componentWillUnmount",value:function(){window.removeEventListener("hashchange",this.handleHashChange),this.unsubscribeChangeListener&&this.unsubscribeChangeListener()}},{key:"render",value:function(){var e=this.props,t=e.skillMaps,a=e.activityOpen,r=e.backgroundImageUrl,n=e.theme,i=this.state,o=i.error,s=i.showingSyncLoader,l=Object.keys(t).map((function(e){return t[e]}));return c.a.createElement("div",{className:"app-container ".concat(pxt.appTarget.id)},c.a.createElement(qt,null),s&&c.a.createElement("div",{className:"makecode-frame-loader"},c.a.createElement("img",{src:ge("assets/logo.svg"),alt:lf("MakeCode Logo")}),c.a.createElement("div",{className:"makecode-frame-loader-text"},lf("Saving to cloud..."))),c.a.createElement("div",{className:"skill-map-container ".concat(a?"hidden":""),style:{backgroundColor:n.backgroundColor}},o?c.a.createElement("div",{className:"skill-map-error"},o):c.a.createElement(va,{maps:l,backgroundImageUrl:r}),!o&&c.a.createElement(Ea,null)),c.a.createElement(Xt,{onWorkspaceReady:this.onMakeCodeFrameLoaded}),c.a.createElement(na,null),c.a.createElement(Qa,null))}},{key:"applyQueryFlags",value:function(e,t,a){var r=a||"default";if("true"===this.queryFlags.debugNewUser&&(e.isDebug=!0,e.mapProgress=Object(p.a)({},r,{}),e.completedTags={}),"true"===this.queryFlags.debugCompleted&&(e.isDebug=!0,e.mapProgress=Object(p.a)({},r,{}),t)){var n,i=Object(d.a)(t);try{for(i.s();!(n=i.n()).done;){var c=n.value;e.mapProgress[r][c.mapId]={completionState:"completed",mapId:c.mapId,activityState:{}};for(var o=0,s=Object.keys(c.activities);o<s.length;o++){var l,u=s[o],f=c.activities[u];if(e.mapProgress[r][c.mapId].activityState[f.activityId]?e.mapProgress[r][c.mapId].activityState[f.activityId].isCompleted=!0:e.mapProgress[r][c.mapId].activityState[f.activityId]={activityId:f.activityId,isCompleted:!0},"activity"===f.kind&&(null===(l=f.tags)||void 0===l?void 0:l.length)&&a){var h,m=Object(d.a)(f.tags);try{for(m.s();!(h=m.n()).done;){var v=h.value;e.completedTags[a][v]||(e.completedTags[a][v]=0),e.completedTags[a][v]++}}catch(e){m.e(e)}finally{m.f()}}}}}catch(e){i.e(e)}finally{i.f()}}}},{key:"syncBadgesAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r,n,i,c,o,s,l,u,d,p;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=qe.getState(),a=t.user,r=t.maps,n=t.pageSourceUrl,i=t.pageSourceStatus,!this.props.signedIn||!this.state.cloudSyncCheckHasFinished||"approved"!==i){e.next=24;break}for(c=[],o=0,s=Object.keys(r);o<s.length;o++)u=s[o],(l=c).push.apply(l,Object(Qe.a)(Le(a,n,r[u])));if(!c.length){e.next=24;break}return e.next=7,Tt();case 7:if(e.t0=e.sent,e.t0){e.next=10;break}e.t0={badges:[]};case 10:if(d=e.t0,!(c=c.filter((function(e){return!pxt.auth.hasBadge(d,e)}))).length||this.state.badgeSyncLock){e.next=24;break}return this.setState({badgeSyncLock:!0}),e.prev=14,e.next=17,Ut(c,d.badges);case 17:return e.next=19,_t();case 19:(p=e.sent)&&this.props.dispatchSetUserPreferences(p);case 21:return e.prev=21,this.setState({badgeSyncLock:!1}),e.finish(21);case 24:case"end":return e.stop()}}),e,this,[[14,,21,24]])})));return function(){return e.apply(this,arguments)}}()}]),a}(c.a.Component));function Ja(e){return Xa.apply(this,arguments)}function Xa(){return(Xa=Object(J.a)($.a.mark((function e(t){var a,r,n,i,c,o;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=t.targetId,r=t.baseUrl,n=t.pxtBranch,i=t.targetBranch,t.force,c=t.code,e.next=4,pxt.Util.downloadTranslationsAsync(a,r,c,n,i,pxt.Util.liveLocalizationEnabled(),ts.pxtc.Util.TranslationsKind.SkillMap);case 4:o=e.sent,pxt.Util.setUserLanguage(c),o&&pxt.Util.setLocalizedStrings(o);case 7:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var Za={dispatchAddSkillMap:function(e){return{type:h,map:e}},dispatchClearSkillMaps:function(){return{type:m}},dispatchClearMetadata:function(){return{type:v}},dispatchSetPageTitle:function(e){return{type:E,title:e}},dispatchSetPageDescription:function(e){return{type:j,description:e}},dispatchSetPageInfoUrl:function(e){return{type:N,infoUrl:e}},dispatchSetUser:function(e){return{type:x,user:e}},dispatchSetPageSourceUrl:function(e,t){return{type:M,url:e,status:t}},dispatchSetPageAlternateUrls:function(e){return{type:L,urls:e}},dispatchSetPageBackgroundImageUrl:function(e){return{type:A,backgroundImageUrl:e}},dispatchSetPageBannerImageUrl:function(e){return{type:U,bannerImageUrl:e}},dispatchSetPageTheme:function(e){return{type:P,theme:e}},dispatchSetUserPreferences:function(e){return{type:V,preferences:e}}},er=Object(l.b)((function(e,t){return e?{skillMaps:e.maps,activityOpen:!!e.editorView,backgroundImageUrl:e.backgroundImageUrl,theme:e.theme,signedIn:e.auth.signedIn}:{}}),Za)($a),tr=window.pxtTargetBundle;tr.bundledpkgs={},pxt.setAppTarget(tr),pxt.Cloud.apiRoot="https://www.makecode.com/api/",ve()||pxt.setupWebConfig(window.pxtConfig),s.a.render(c.a.createElement(l.a,{store:qe},c.a.createElement(er,null)),document.getElementById("root"))}},[[81,1,2]]]);
1
+ (this.webpackJsonpskillsmap=this.webpackJsonpskillsmap||[]).push([[0],{13:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=t.CheckboxStatus=void 0;var r,n=a(12);!function(e){e[e.Selected=0]="Selected",e[e.Unselected=1]="Unselected",e[e.Waiting=2]="Waiting"}(r=t.CheckboxStatus||(t.CheckboxStatus={})),t.Checkbox=function(e){var t=e.isChecked,a=e.label;return n.createElement("div",{className:"checkbox"},t==r.Waiting?n.createElement("div",{className:"ui inline mini loader active"}):n.createElement("i",{className:"icon square outline ".concat(t==r.Selected?"check":""),onClick:function(){return e.onClick(!(t==r.Selected))},role:"checkbox","aria-checked":t==r.Selected,"aria-labelledby":a}))}},17:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fireClickOnEnter=t.jsxLF=void 0;var r=a(12);t.jsxLF=function(e){var t=[];e.replace(/\{\d\}/g,(function(e){return t.push(parseInt(e.substr(1,1))),e}));for(var a,n=[],i=0,c=arguments.length,o=new Array(c>1?c-1:0),s=1;s<c;s++)o[s-1]=arguments[s];for(var l=0,u=t;l<u.length;l++){var d=u[l];a=e.split("{".concat(d,"}")),pxt.U.assert(2===a.length),n.push(r.createElement("span",{key:i++},a[0])),n.push(r.createElement("span",{key:i++},o[d])),e=a[1]}return n.push(r.createElement("span",{key:i++},e)),n},t.fireClickOnEnter=function(e){var t="number"==typeof e.which?e.which:e.keyCode;13!==t&&32!==t||(e.preventDefault(),e.currentTarget.click())}},21:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Badge=void 0;var r=a(12),n=a(17);t.Badge=function(e){var t=e.badge,a=e.disabled,i=e.isNew,c=e.onClick,o=c&&function(){c(t)},s=a&&t.lockedImage||t.image,l=a?pxt.U.lf("Locked '{0}' badge",t.title):t.title;return r.createElement("div",{className:"profile-badge ".concat(c?"clickable":""),role:c?"button":void 0,tabIndex:c?0:void 0,title:lf("{0} Badge",t.title),onClick:o,onKeyDown:n.fireClickOnEnter},i&&r.createElement("div",{className:"profile-badge-notification"},pxt.U.lf("New!")),r.createElement("img",{src:s,alt:l}))}},36:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Profile=void 0;var r=a(12),n=a(58),i=a(62),c=a(64);t.Profile=function(e){var t,a=e.user,o=e.signOut,s=e.deleteProfile,l=e.onClickedEmail,u=e.notification,d=e.checkedEmail,p=e.showModalAsync,f=(null==a?void 0:a.profile)||{idp:{}},h=(null===(t=null==a?void 0:a.preferences)||void 0===t?void 0:t.badges)||{badges:[]};return r.createElement("div",{className:"user-profile"},r.createElement(i.UserPane,{profile:f,onSignOutClick:o,onDeleteProfileClick:s,notification:u,emailChecked:d,onEmailCheckClick:l}),r.createElement(n.BadgeList,{availableBadges:pxt.appTarget.defaultBadges||[],userState:h,onBadgeClick:function(e){p({header:lf("{0} Badge",e.title),size:"tiny",hasCloseIcon:!0,jsx:r.createElement(c.BadgeInfo,{badge:e})})}}))}},37:function(e,t,a){"use strict";var r=a(65),n=a(66),i=a(67),c=a(69);Object.defineProperty(t,"__esModule",{value:!0}),t.pushNotificationMessage=t.Notification=void 0;var o=a(12),s=a(75),l=function(e){i(a,e);var t=c(a);function a(e){var n;return r(this,a),(n=t.call(this,e)).state={notifications:{}},n}return n(a,[{key:"push",value:function(e){var t=this,a=this.state.notifications,r=ts.pxtc.Util.guidGen();Object.keys(a).filter((function(t){return a[t].kind==e.kind})).forEach((function(e){return t.remove(e)})),a[r]=e;var n=this;setTimeout((function(){n.remove(r)}),3e3),this.setState({notifications:a})}},{key:"remove",value:function(e){var t=this.state.notifications;t[e]&&(delete t[e],this.setState({notifications:t}))}},{key:"render",value:function(){var e=this.state.notifications;return o.createElement("div",{id:"msg","aria-live":"polite"},Object.keys(e).map((function(t){return function(e,t){var a=t.kind,r=t.text,n=t.hc,i="ignored info message";switch(a){case"err":i="red inverted segment";break;case"warn":i="orange inverted segment";break;case"info":i="teal inverted segment";break;case"compile":i="ignored info message"}return o.createElement("div",{key:"".concat(e),id:"".concat(a,"msg"),className:"ui ".concat(n," ").concat(i)},r)}(t,e[t])})))}}]),a}(o.Component);t.Notification=l;var u,d=!1;t.pushNotificationMessage=function(e){if(d)u&&u.push(e);else{d=!0;var t=document.body.appendChild(document.createElement("div"));(u=s.render(o.createElement(l,e),t)).push(e)}}},51:function(e,t,a){},52:function(e,t,a){},53:function(e,t,a){},55:function(e,t,a){},56:function(e,t,a){},57:function(e,t,a){},58:function(e,t,a){"use strict";var r=a(59);Object.defineProperty(t,"__esModule",{value:!0}),t.BadgeList=void 0;var n=a(12),i=a(21);t.BadgeList=function(e){var t,a=e.onBadgeClick,c=e.availableBadges,o=e.userState,s=c.slice(),l={},u=r(o.badges);try{var d=function(){var e=t.value;l[e.id]=!0;var a=s.findIndex((function(t){return t.id===e.id}));a>-1?s[a]=Object.assign(Object.assign({},s[a]),{timestamp:s[a].timestamp||e.timestamp}):s.push(e)};for(u.s();!(t=u.n()).done;)d()}catch(e){u.e(e)}finally{u.f()}for(var p=[],f=0;f<Math.max(s.length+10,20);f++)p.push(n.createElement("div",{key:f,className:"placeholder-badge"}));return n.createElement("div",{className:"profile-badge-list"},n.createElement("div",{className:"profile-badge-header"},n.createElement("span",{className:"profile-badge-title"},lf("Badges")),n.createElement("span",{className:"profile-badge-subtitle"},lf("Click each badge to see details"))),n.createElement("div",{className:"profile-badges-scroller"},n.createElement("div",{className:"profile-badges"},n.createElement("div",{className:"profile-badges-background-container"},n.createElement("div",{className:"profile-badges-background"},p)),s.map((function(e){return n.createElement("div",{className:"profile-badge-and-title"},n.createElement(i.Badge,{key:e.id,onClick:a,badge:e,disabled:!l[e.id]}),n.createElement("div",{className:"profile-badge-name"},e.title))})))))}},62:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UserPane=void 0;var r=a(12),n=a(17),i=a(63),c=a(13);t.UserPane=function(e){var t=e.profile,a=e.onSignOutClick,o=e.onDeleteProfileClick,s=e.onEmailCheckClick,l=e.notification,u=e.emailChecked,d=t.idp,p=d.username,f=d.displayName,h=d.picture,m="email-optin-label";return r.createElement("div",{className:"profile-user-pane"},r.createElement("div",{className:"profile-portrait"},(null==h?void 0:h.dataUrl)?r.createElement("img",{src:null==h?void 0:h.dataUrl,alt:pxt.U.lf("Profile Picture")}):r.createElement("div",{className:"profile-initials-portrait"},pxt.auth.userInitials(t))),r.createElement("div",{className:"profile-user-details"},r.createElement("div",{className:"profile-display-name"},f),p&&r.createElement("div",{className:"profile-username"},p)),l&&r.createElement(i.UserNotification,{notification:l}),r.createElement("div",{className:"profile-spacer"}),r.createElement("div",{className:"profile-email"},r.createElement(c.Checkbox,{isChecked:u,onClick:s,label:m}),r.createElement("div",{id:m},lf("I would like to receive the MakeCode newsletter. "),r.createElement("a",{href:"https://makecode.com/privacy",target:"_blank",rel:"noopener noreferrer"},lf("View Privacy Statement")))),r.createElement("div",{className:"profile-actions"},r.createElement("a",{role:"button",tabIndex:0,onKeyPress:n.fireClickOnEnter,onClick:o},lf("Delete Profile")),r.createElement("button",{onClick:a,className:"ui icon button sign-out"},r.createElement("i",{className:"icon sign-out"}),lf("Sign Out"))))}},63:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UserNotification=void 0;var r=a(12);t.UserNotification=function(e){var t=e.notification,a=t.message,n=t.icon,i=t.actionText,c=t.link,o=t.xicon,s=t.title;return r.createElement("div",{className:"profile-notification"},r.createElement("div",{className:"profile-notification-icon"},r.createElement("i",{className:"".concat(o?"xicon":"ui large circular icon "," ").concat(n)})),r.createElement("div",{className:"profile-notification-title"},s),r.createElement("div",{className:"profile-notification-message"},a),r.createElement("button",{className:"ui icon button profile-notification-button",onClick:function(){window.open(c,"_blank")},role:"link"},r.createElement("i",{className:"icon external alternate"}),i))}},64:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.badgeDescription=t.BadgeInfo=void 0;var r=a(12),n=a(17),i=a(21);function c(e){var t;if(-1!==e.indexOf("/api/md/")){var a=e.split("/api/md/")[1].split("/").slice(1).join("/");return(null===(t=pxt.webConfig)||void 0===t?void 0:t.skillmapUrl)+"#docs:"+a}var r=e.split("#");return 2==r.length?pxt.webConfig.skillmapUrl+"#github:https://github.com/"+r[0]+"/"+r[1]:pxt.BrowserUtils.isLocalHostDev()?"http://localhost:3000#local:"+e:e}t.BadgeInfo=function(e){var a=e.badge,n=new Date(a.timestamp);return r.createElement("div",{className:"profile-badge-info"},r.createElement("div",{className:"profile-badge-info-image"},r.createElement(i.Badge,{badge:a,disabled:!a.timestamp})),r.createElement("div",{className:"profile-badge-info-item"},r.createElement("div",{className:"profile-badge-info-header"},lf("Awarded For:")),r.createElement("div",{className:"profile-badge-info-text"},t.badgeDescription(a))),a.timestamp?r.createElement("div",{className:"profile-badge-info-item"},r.createElement("div",{className:"profile-badge-info-header"},lf("Awarded On:")),r.createElement("div",{className:"profile-badge-info-text"},n.toLocaleDateString(pxt.U.userLanguage()))):void 0)},t.badgeDescription=function(e){switch(e.type){case"skillmap-completion":return r.createElement("span",null,n.jsxLF(lf("Completing {0}"),r.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:c(e.sourceURL)},pxt.U.rlf(e.title))))}}},79:function(e,t,a){},80:function(e,t,a){},81:function(e,t,a){"use strict";a.r(t);var r,n,i=a(0),c=a.n(i),o=a(31),s=a.n(o),l=a(9),u=a(25),d=a(8),p=a(10),f=a(1),h="ADD_SKILL_MAP",m="CLEAR_SKILL_MAPS",v="CLEAR_METADATA",g="CHANGE_SELECTED_ITEM",y="SET_SKILL_MAP_COMPLETED",b="SET_HEADERID_FOR_ACTIVITY",k="OPEN_ACTIVITY",w="CLOSE_ACTIVITY",S="SAVE_AND_CLOSE_ACTIVITY",I="RESTART_ACTIVITY",x="SET_USER",C="UPDATE_USER_COMPLETED_TAGS",O="RESET_USER",E="SET_PAGE_TITLE",j="SET_PAGE_DESCRIPTION",N="SET_PAGE_INFO_URL",A="SET_PAGE_BACKGROUND_IMAGE_URL",U="SET_PAGE_BANNER_IMAGE_URL",P="SET_PAGE_THEME",M="SET_PAGE_SOURCE_URL",L="SET_PAGE_ALTERNATE_URLS",T="ENQUEUE_MODALS",R="SET_MODAL",_="NEXT_MODAL",B="HIDE_MODAL",H="SHOW_COMPLETION_MODAL",D="GRANT_SKILLMAP_BADGE",F="SET_USER_PROFILE",V="SET_USER_PREFERENCES",W="USER_LOG_OUT",G="SHOW_USER_PROFILE",z="HIDE_USER_PROFILE",q="SET_SHARE_STATUS",Q="SET_CLOUD_STATUS",Y="SET_READY_RESOURCES",K=a(2),$=a.n(K),J=a(3),X="-SHOWN-LOGIN-PROMPT";function Z(e){var t={cmd:"",arg:""},a=/^(\w+)(:([:./\-+=\w]+))?/.exec((e||window.location.hash).replace(/^#/,""));return a&&(t={cmd:a[1],arg:a[3]||""}),t}function ee(){var e={},t=window.location.search;return t&&new URLSearchParams(t).forEach((function(t,a){"true"!==t.toLowerCase()&&"1"!==t||(t="true"),e[a]=t})),e}function te(e,t){return ae.apply(this,arguments)}function ae(){return(ae=Object(J.a)($.a.mark((function e(t,a){var r,n,i;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t&&a){e.next=2;break}return e.abrupt("return",void 0);case 2:n="unknown",e.t0=t,e.next="docs"===e.t0?6:"github"===e.t0?7:"local"===e.t0?10:13;break;case 6:return e.abrupt("return",re(a));case 7:return e.next=9,ie(a);case 9:return e.abrupt("return",e.sent);case 10:return e.next=12,oe(a);case 12:return e.abrupt("return",e.sent);case 13:return r=a,e.abrupt("break",15);case 15:if(!pxt.BrowserUtils.isSafari()){e.next=29;break}return e.prev=16,e.next=19,fe(r);case 19:i=e.sent,e.next=27;break;case 22:return e.prev=22,e.t1=e.catch(16),e.next=26,fe(r);case 26:i=e.sent;case 27:e.next=32;break;case 29:return e.next=31,fe(r);case 31:i=e.sent;case 32:return e.abrupt("return",{text:i,identifier:r,status:n});case 33:case"end":return e.stop()}}),e,null,[[16,22]])})))).apply(this,arguments)}function re(e){return ne.apply(this,arguments)}function ne(){return(ne=Object(J.a)($.a.mark((function e(t){var a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,pxt.Cloud.markdownAsync(le(t));case 2:if(!(a=e.sent)){e.next=5;break}return e.abrupt("return",{text:a,identifier:ue(t),status:"approved"});case 5:return e.abrupt("return",void 0);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function ie(e){return ce.apply(this,arguments)}function ce(){return(ce=Object(J.a)($.a.mark((function e(t){var a,r,n,i,c,o,s,l,u,d,p;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=pxt.github.parseRepoId(t),e.next=3,pxt.packagesConfigAsync();case 3:if(e.t0=e.sent,e.t0){e.next=6;break}e.t0={};case 6:r=e.t0,n=pxt.github.parseRepoId(a.slug),i=pxt.github.repoStatus(n,r),c="unknown",e.t1=i,e.next=e.t1===pxt.github.GitRepoStatus.Banned?13:e.t1===pxt.github.GitRepoStatus.Approved?16:19;break;case 13:return c="banned",o="https://github.com/"+a.fullName,e.abrupt("break",21);case 16:return c="approved",o=void 0,e.abrupt("break",21);case 19:return o="https://github.com/"+a.fullName,e.abrupt("break",21);case 21:if(e.t2=a.tag,e.t2){e.next=26;break}return e.next=25,pxt.github.latestVersionAsync(a.slug,r,!0);case 25:e.t2=e.sent;case 26:if(s=e.t2){e.next=30;break}return pxt.log("skillmap github tag not found at ".concat(a.fullName)),e.abrupt("return",void 0);case 30:return a.tag=s,e.next=33,pxt.github.downloadPackageAsync("".concat(a.slug,"#").concat(a.tag),r);case 33:if(!(l=e.sent)){e.next=37;break}return u=de(a),d=u.identifier,p=u.fileName,e.abrupt("return",{text:pxt.tutorial.resolveLocalizedMarkdown(a,l.files,p),identifier:d,reportId:o,status:c});case 37:return e.abrupt("return",void 0);case 38:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function oe(e){return se.apply(this,arguments)}function se(){return(se=Object(J.a)($.a.mark((function e(t){var a,r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!ve()){e.next=9;break}return t=t.replace(/^\//,"").replace(/\.md$/,""),e.next=4,fetch("docs/"+t+".md");case 4:return a=e.sent,e.next=7,a.text();case 7:return r=e.sent,e.abrupt("return",{text:r,identifier:t,status:"approved"});case 9:return e.abrupt("return",void 0);case 10:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function le(e){return e.trim().replace(/^[\\/]/i,"").replace(/\.md$/i,"")}function ue(e){var t;e=le(e);var a=(null===(t=window.pxtTargetBundle)||void 0===t?void 0:t.name)||"arcade";return"".concat("https://www.makecode.com/api","/md/").concat(a,"/").concat(e)}function de(e){var t=function(e){return(e=(e=e.replace(/^\/?blob\/main\//,"")).replace(/^\/?blob\/master\//,"")).replace(/\.md$/,"")}(e.fileName||"skillmap");return{identifier:e.fullName+"#"+t,fileName:t}}function pe(){return(pe=Object(J.a)($.a.mark((function e(t,a){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t){e.next=3;break}return e.next=3,he("/api/".concat(encodeURIComponent(t),"/abusereports"),a);case 3:return e.abrupt("return");case 4:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function fe(e){return new Promise((function(t,a){var r=new XMLHttpRequest;r.addEventListener("error",(function(e){a(e)})),r.addEventListener("load",(function(){try{t(r.responseText)}catch(e){a(e)}})),r.open("GET",e),r.send()}))}function he(e,t){return new Promise((function(a,r){var n=new XMLHttpRequest;n.addEventListener("error",(function(e){r(e)})),n.addEventListener("load",(function(){try{a(n.responseText)}catch(e){r(e)}})),n.open("POST",e,!0),n.setRequestHeader("Content-type","application/json"),n.send(JSON.stringify(t))}))}function me(){function e(){return(65536|function(){var e=new Uint8Array(4);return function(e){if(window.crypto)window.crypto.getRandomValues(e);else for(var t=0;t<e.length;++t)e[t]=Math.floor(255*Math.random())}(e),new Uint32Array(e.buffer)[0]}()).toString(16).slice(-4)}return e()+e()+"-"+e()+"-4"+e().slice(-3)+"-"+e()+"-"+e()+e()+e()}function ve(){return"localhost"===window.location.hostname}function ge(e){return"".concat(ve()?"":"/static/skillmap","/").concat(e.replace(/^\//,""))}function ye(e){n=e}function be(e,t){var a,i;(t=t||{}).page=n,t.pageTitle=r,null===(a=(i=window).pxtTickEvent)||void 0===a||a.call(i,e,t)}function ke(e,t,a,r){return!Object.keys(null==a?void 0:a.activities).some((function(n){var i,c;return!(null===(i=Ce(e,t,a.mapId))||void 0===i||null===(c=i.activityState[n])||void 0===c?void 0:c.isCompleted)&&n!==r}))}function we(e,t,a,r){var n;return!!(null===(n=Oe(e,t,a,r))||void 0===n?void 0:n.isCompleted)}function Se(e,t,a,r){var n,i,c,o=e&&a&&xe(e,t,a,r)?"notstarted":"locked";if(e)if(a&&t&&!function(e,t,a){var r,n=Object(d.a)(t.prerequisites);try{for(n.s();!(r=n.n()).done;){var i=r.value;if("tag"===i.type){if(!e.completedTags[a])return!1;var c=e.completedTags[a][i.tag];if(void 0===c||c<i.numberCompleted)return!1}else if("map"===i.type&&!ke(e,a,t))return!1}}catch(e){n.e(e)}finally{n.f()}return!0}(e,a,t))o="locked";else{var s=Oe(e,t,a.mapId,r);s&&(s.isCompleted?(o=s.currentStep&&s.maxSteps&&s.currentStep<s.maxSteps?"restarted":"completed",c=s.headerId):s.headerId&&(o="inprogress"),n=null==s?void 0:s.currentStep,i=null==s?void 0:s.maxSteps)}return{status:o,currentStep:n,maxSteps:i,completedHeadedId:c}}function Ie(e,t,a){var r,n={},i=Object(d.a)(a);try{for(i.s();!(r=i.n()).done;)for(var c=r.value,o=0,s=Object.keys(c.activities);o<s.length;o++){var l=s[o],u=c.activities[l];if(we(e,t,c.mapId,u.activityId)&&"activity"===u.kind){var p,f=Object(d.a)(u.tags);try{for(f.s();!(p=f.n()).done;){var h=p.value;n[h]||(n[h]=0),n[h]++}}catch(e){f.e(e)}finally{f.f()}}}}catch(e){i.e(e)}finally{i.f()}return n}function xe(e,t,a,r){return a.root.activityId===r||function n(i){if(we(e,t,a.mapId,i.activityId)){if(i.next.some((function(e){return e.activityId===r})))return!0;var c,o=Object(d.a)(i.next);try{for(o.s();!(c=o.n()).done;){if(n(c.value))return!0}}catch(e){o.e(e)}finally{o.f()}}return!1}(a.root)}function Ce(e,t,a){return e.mapProgress[t]?e.mapProgress[t][a]:void 0}function Oe(e,t,a,r){var n;return null===(n=Ce(e,t,a))||void 0===n?void 0:n.activityState[r]}function Ee(e,t){return!!(e.mapProgress&&e.mapProgress[t]&&0!=Object.keys(e.mapProgress[t]).length&&Object.keys(e.mapProgress[t]).some((function(a){return 0!=Object.keys(e.mapProgress[t][a].activityState).length})))}function je(e,t){return Object.keys(e.activities).filter((function(t){return!Me(e.activities[t])})).filter((function(a){return Pe(e.activities[a],Me(e.activities[t])).map((function(e){return e.activityId})).some((function(e){return e===t}))})).map((function(t){return e.activities[t]}))}function Ne(e,t,a,r){return je(a,r).map((function(r){return Oe(e,t,a.mapId,r.activityId)})).filter((function(e){return!!e}))}function Ae(e,t,a,r){var n=Ne(e,t,a,r).filter((function(e){return(null==e?void 0:e.isCompleted)&&e.maxSteps===e.currentStep})).sort((function(e,t){return(t.completedTime||0)-(e.completedTime||0)}));return null==n?void 0:n[0]}function Ue(e,t,a,r){if(!e||!a||!r||"activity"!==r.kind)return!1;var n=Ne(e,t,a,r.activityId),i=null==n?void 0:n.some((function(e){return(null==e?void 0:e.isCompleted)&&e.maxSteps===e.currentStep}));return r.allowCodeCarryover&&n.length>0&&i&&xe(e,t,a,r.activityId)}function Pe(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=[];return e.next.forEach((function(e){t||!Me(e)?a.push(e):a=a.concat(Pe(e))})),a}function Me(e){return"reward"===e.kind||"completion"===e.kind}function Le(e,t,a){for(var r=[],n=0,i=Object.keys(a.activities);n<i.length;n++){var c=i[n];if(Me(a.activities[c])&&xe(e,t,a,c)){var o,s=a.activities[c],l=Object(d.a)(s.rewards);try{for(l.s();!(o=l.n()).done;)"completion-badge"===o.value.type&&r.push(Te(t,a,s))}catch(e){l.e(e)}finally{l.f()}}}return r}function Te(e,t,a){var r=a.rewards.filter((function(e){return"completion-badge"===e.type}))[0];return{id:"skillmap-completion-".concat(t.mapId),image:null==r?void 0:r.imageUrl,sourceURL:e,type:"skillmap-completion",title:(null==r?void 0:r.displayName)||t.displayName}}function Re(e,t,a){var r;return Object.values(null!==(r=e.mapProgress[t])&&void 0!==r?r:[]).filter((function(e){var r;return!a||!(null===(r=a.mapProgress[t])||void 0===r?void 0:r[e.mapId])||0===Object.keys(a.mapProgress[t][e.mapId].activityState).length})).map((function(e){return Object.values(e.activityState)})).reduce((function(e,t){return e.concat(t,[])}),[]).map((function(e){return e.headerId})).filter((function(e){return!!e}))}function _e(e,t,a,r){var n=pxt.semver.parse(e.version||"0.0.0"),i=pxt.semver.parse(t),c=e;if(0===pxt.semver.cmp(n,i))return c;if(0===pxt.semver.cmp(n,pxt.semver.parse("0.0.0"))){var o=(null==e?void 0:e.mapProgress)&&Object.keys(null==e?void 0:e.mapProgress);if((null==o?void 0:o.length)>0&&e.mapProgress[o[0]].activityState){var s=e,l={};Object.keys(r).forEach((function(e){s.mapProgress[e]&&(l[e]=s.mapProgress[e])})),c=Object(f.a)(Object(f.a)({},s),{},{mapProgress:Object(p.a)({},a,l)})}}return c}function Be(e,t,a){if(0===a.length)return e;var r=e.mapProgress[t]||{};return a.forEach((function(t){var a=Z(t),n=a.cmd,i=a.arg,c=i;switch(n){case"github":var o=pxt.github.parseRepoId(i),s=o&&de(o);c=(null==s?void 0:s.identifier)||i;break;case"docs":c=ue(i)}var l=e.mapProgress[c];l&&Object.keys(l).forEach((function(e){if(r[e]){var t=l[e].activityState;Object.keys(t).forEach((function(a){r[e].activityState[a]||(r[e].activityState[a]=t[a])}))}else r[e]=l[e]}))})),Object(f.a)(Object(f.a)({},e),{},{mapProgress:Object(f.a)(Object(f.a)({},e.mapProgress),{},Object(p.a)({},t,r))})}var He={title:lf("Game Maker Guide"),description:lf("Level up your game making skills by completing the tutorials in this guide."),pageSourceStatus:"unknown",pageSourceUrl:"default",user:{version:pxt.skillmap.USER_VERSION,isDebug:!0,id:me(),mapProgress:{},completedTags:{}},theme:{backgroundColor:"var(--body-background-color)",pathColor:"#BFBFBF",strokeColor:"#000000",rewardNodeColor:"var(--primary-color)",rewardNodeForeground:"#000000",unlockedNodeColor:"var(--secondary-color)",unlockedNodeForeground:"#000000",lockedNodeColor:"#BFBFBF",lockedNodeForeground:"#000000",completedNodeColor:"var(--secondary-color)",completedNodeForeground:"#000000",selectedStrokeColor:"var(--hover-color)",pathOpacity:.5},maps:{},auth:{signedIn:!1},cloudState:{}};function De(e,t,a,r,n,i,c){var o,s,l=arguments.length>7&&void 0!==arguments[7]&&arguments[7],u=a.mapId,d=Oe(e,t,u,r);d||(d={isCompleted:!1,activityId:r,currentStep:i,maxSteps:c,headerId:n});var h=(null===(o=e.mapProgress)||void 0===o?void 0:o[t])||{};return Object(f.a)(Object(f.a)({},e),{},{mapProgress:Object(f.a)(Object(f.a)({},e.mapProgress),{},Object(p.a)({},t,Object(f.a)(Object(f.a)({},h),{},Object(p.a)({},u,Object(f.a)(Object(f.a)({},(null==h?void 0:h[u])||{mapId:u}),{},{activityState:Object(f.a)(Object(f.a)({},(null==h||null===(s=h[u])||void 0===s?void 0:s.activityState)||{}),{},Object(p.a)({},r,Object(f.a)(Object(f.a)({},d),{},{headerId:n,currentStep:i,maxSteps:c,isCompleted:d.isCompleted||l})))})))))})}function Fe(e,t,a,r){var n,i,c,o=a.mapId,s=!1,l={};r.forEach((function(r){var n=Oe(e,t,o,r);s=s||Me(a.activities[r])&&!(null==n?void 0:n.isCompleted),l[r]=n||{isCompleted:!0,activityId:r,headerId:"",currentStep:0},l[r].isCompleted=!0,l[r].completedTime=Date.now()}));var u=(null===(n=e.mapProgress)||void 0===n?void 0:n[t])||{};return Object(f.a)(Object(f.a)({},e),{},{mapProgress:Object(f.a)(Object(f.a)({},e.mapProgress),{},Object(p.a)({},t,Object(f.a)(Object(f.a)({},u),{},Object(p.a)({},o,Object(f.a)(Object(f.a)({},(null==u?void 0:u[o])||{mapId:o}),{},{activityState:Object(f.a)(Object(f.a)({},(null==u||null===(i=u[o])||void 0===i?void 0:i.activityState)||{}),l),completionState:s?"transitioning":null==u||null===(c=u[o])||void 0===c?void 0:c.completionState})))))})}function Ve(e,t){var a=[e.activities[t]],r=e.activities[t].next.filter((function(e){return Me(e)}));return a.concat(r)}function We(e,t){var a=[{type:"completion",currentMapId:e.mapId,currentActivityId:t}],r=e.activities[t];if(1===r.rewards.length&&"certificate"===r.rewards[0].type)return a[0].currentReward=r.rewards[0],a;var n,i=Object(d.a)(r.rewards);try{for(i.s();!(n=i.n()).done;){var c=n.value;a.push({type:"reward",currentMapId:e.mapId,currentActivityId:t,currentReward:c})}}catch(e){i.e(e)}finally{i.f()}return a}var Ge,ze,qe=Object(u.b)((function(){var e,t,a,r,n,i,c,o,s,l,u,d,K,$=arguments.length>0&&void 0!==arguments[0]?arguments[0]:He,J=arguments.length>1?arguments[1]:void 0;switch(J.type){case h:return Object(f.a)(Object(f.a)({},$),{},{maps:Object(f.a)(Object(f.a)({},$.maps),{},Object(p.a)({},J.map.mapId,J.map))});case m:return Object(f.a)(Object(f.a)({},$),{},{maps:{}});case v:return Object(f.a)(Object(f.a)({},$),{},{title:He.title,description:He.description,infoUrl:He.infoUrl,backgroundImageUrl:void 0,bannerImageUrl:void 0,alternateSourceUrls:void 0,theme:Object(f.a)({},He.theme)});case g:return Object(f.a)(Object(f.a)({},$),{},{selectedItem:{mapId:J.mapId,activityId:J.activityId}});case y:return Object(f.a)(Object(f.a)({},$),{},{user:Object(f.a)(Object(f.a)({},$.user),{},{mapProgress:Object(f.a)(Object(f.a)({},$.user.mapProgress),{},Object(p.a)({},$.pageSourceUrl,Object(f.a)(Object(f.a)({},null===(e=$.user.mapProgress)||void 0===e?void 0:e[$.pageSourceUrl]),{},Object(p.a)({},J.mapId,Object(f.a)(Object(f.a)({},null===(t=$.user.mapProgress)||void 0===t||null===(a=t[$.pageSourceUrl])||void 0===a?void 0:a[J.mapId]),{},{completionState:"completed"})))))})});case k:return Object(f.a)(Object(f.a)({},$),{},{editorView:{currentMapId:J.mapId,currentActivityId:J.activityId,state:"active",allowCodeCarryover:!!J.carryoverCode,previousHeaderId:J.previousHeaderId,currentHeaderId:null===(r=Oe($.user,$.pageSourceUrl,J.mapId,J.activityId))||void 0===r?void 0:r.headerId}});case S:return Object(f.a)(Object(f.a)({},$),{},{editorView:Object(f.a)(Object(f.a)({},$.editorView),{},{state:"saving"})});case w:var Z=$.maps[$.editorView.currentMapId],ee=$.editorView.currentActivityId,te=J.finished?Ve(Z,ee):[],ae=te.find((function(e){return Me(e)})),re=ae&&(null===(n=$.user.mapProgress[$.pageSourceUrl])||void 0===n||null===(i=n[Z.mapId])||void 0===i?void 0:i.activityState[ae.activityId]);return Object(f.a)(Object(f.a)({},$),{},{selectedItem:ae&&!re?{mapId:Z.mapId,activityId:ae.activityId}:$.selectedItem,editorView:void 0,user:J.finished?Fe($.user,$.pageSourceUrl,Z,te.map((function(e){return e.activityId}))):$.user});case I:return Object(f.a)(Object(f.a)({},$),{},{modalQueue:[],editorView:{state:"active",currentMapId:J.mapId,currentActivityId:J.activityId,allowCodeCarryover:!!J.carryoverCode,previousHeaderId:J.previousHeaderId},user:De($.user,$.pageSourceUrl,$.maps[J.mapId],J.activityId)});case b:var ne=(null===(c=$.editorView)||void 0===c?void 0:c.currentActivityId)===J.activityId&&(null===(o=$.editorView)||void 0===o?void 0:o.currentMapId)===J.mapId;return Object(f.a)(Object(f.a)({},$),{},{editorView:ne?Object(f.a)(Object(f.a)({},$.editorView),{},{currentHeaderId:J.id}):$.editorView,user:De($.user,$.pageSourceUrl,$.maps[J.mapId],J.activityId,J.id,J.currentStep,J.maxSteps,J.isCompleted)});case x:var ie=$.pageSourceUrl,ce=_e(J.user,pxt.skillmap.USER_VERSION,ie,$.maps);return $.alternateSourceUrls&&(ce=Be(ce,ie,$.alternateSourceUrls)),ce.mapProgress[ie]||(ce.mapProgress[ie]={}),Object.keys($.maps).forEach((function(e){ce.mapProgress[ie][e]||(ce.mapProgress[ie][e]={completionState:"incomplete",mapId:e,activityState:{}})})),Object(f.a)(Object(f.a)({},$),{},{user:ce});case O:return pxt.storage.removeLocal($.pageSourceUrl+X),Object(f.a)(Object(f.a)({},$),{},{user:Object(f.a)(Object(f.a)({},$.user),{},{completedTags:Object(f.a)(Object(f.a)({},$.user.completedTags),{},Object(p.a)({},$.pageSourceUrl,{})),mapProgress:Object(f.a)(Object(f.a)({},$.user.mapProgress),{},Object(p.a)({},$.pageSourceUrl,{}))})});case C:return $.pageSourceUrl?Object(f.a)(Object(f.a)({},$),{},{user:Object(f.a)(Object(f.a)({},$.user),{},{completedTags:Object(f.a)(Object(f.a)({},$.user.completedTags),{},Object(p.a)({},$.pageSourceUrl,Ie($.user,$.pageSourceUrl,Object.keys($.maps).map((function(e){return $.maps[e]})))))})}):$;case q:return Object(f.a)(Object(f.a)({},$),{},{shareState:J.headerId||J.url?{headerId:J.headerId,url:J.url,rewardsShare:null===(s=$.shareState)||void 0===s?void 0:s.rewardsShare}:void 0});case Q:return Object(f.a)(Object(f.a)({},$),{},{cloudState:Object(f.a)(Object(f.a)({},$.cloudState),{},Object(p.a)({},J.headerId,J.status))});case E:return Object(f.a)(Object(f.a)({},$),{},{title:J.title});case j:return Object(f.a)(Object(f.a)({},$),{},{description:J.description});case N:return Object(f.a)(Object(f.a)({},$),{},{infoUrl:J.infoUrl});case A:return Object(f.a)(Object(f.a)({},$),{},{backgroundImageUrl:J.backgroundImageUrl});case U:return Object(f.a)(Object(f.a)({},$),{},{bannerImageUrl:J.bannerImageUrl});case P:return Object(f.a)(Object(f.a)({},$),{},{theme:J.theme});case M:return Object(f.a)(Object(f.a)({},$),{},{pageSourceUrl:J.url,pageSourceStatus:J.status});case L:return Object(f.a)(Object(f.a)({},$),{},{alternateSourceUrls:J.urls});case R:return Object(f.a)(Object(f.a)({},$),{},{shareState:void 0!==J.rewardsShare?{headerId:(null===(l=$.shareState)||void 0===l?void 0:l.headerId)||"",url:null===(u=$.shareState)||void 0===u?void 0:u.url,rewardsShare:J.rewardsShare}:$.shareState,modalQueue:[J.modal]});case T:return Object(f.a)(Object(f.a)({},$),{},{modalQueue:J.modals});case _:return Object(f.a)(Object(f.a)({},$),{},{modalQueue:null===(d=$.modalQueue)||void 0===d?void 0:d.slice(1)});case B:return Object(f.a)(Object(f.a)({},$),{},{modalQueue:[]});case H:return Object(f.a)(Object(f.a)({},$),{},{modalQueue:We($.maps[J.mapId],J.activityId)});case G:return Object(f.a)(Object(f.a)({},$),{},{showProfile:!0});case z:return Object(f.a)(Object(f.a)({},$),{},{showProfile:!1});case F:return Object(f.a)(Object(f.a)({},$),{},{auth:Object(f.a)(Object(f.a)({},$.auth),{},{profile:J.profile,signedIn:!!(null===(K=J.profile)||void 0===K?void 0:K.id)})});case V:return Object(f.a)(Object(f.a)({},$),{},{auth:Object(f.a)(Object(f.a)({},$.auth),{},{preferences:J.preferences})});case W:return Object(f.a)(Object(f.a)({},$),{},{auth:Object(f.a)(Object(f.a)({},$.auth),{},{signedIn:!1})});case Y:return Object(f.a)(Object(f.a)({},$),{},{readyResources:J.resources});case D:return Object(f.a)({},$);default:return $}})),Qe=a(15),Ye=a(4),Ke=a(5),$e=a(7),Je=a(6),Xe=a(38),Ze=a(16),et=function(e,t,a,r){return{type:k,mapId:e,activityId:t,previousHeaderId:a,carryoverCode:r}},tt=function(){return{type:S}},at=function(){return{type:G}},rt=function(){return{type:z}},nt=function(e,t){return{type:q,headerId:e,url:t}},it=function(e,t){return{type:H,mapId:e,activityId:t}},ct=function(e,t){return lt({type:"carryover",currentMapId:e,currentActivityId:t})},ot=function(e,t,a){return lt({type:"share",currentMapId:e,currentActivityId:t},a)},st=function(){return lt({type:"login"})},lt=function(e,t){return{type:R,modal:e,rewardsShare:t}};function ut(){return ze||(Ge=new pxt.skillmap.IndexedDBWorkspace,ze=Ge.initAsync().then((function(e){return Ge}))),ze}function dt(){return pt.apply(this,arguments)}function pt(){return(pt=Object(J.a)($.a.mark((function e(){var t,a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,ut();case 2:return t=e.sent,e.next=5,t.getUserStateAsync();case 5:return(a=e.sent)||(a={id:me(),completedTags:{},mapProgress:{},version:pxt.skillmap.USER_VERSION}),e.abrupt("return",a);case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function ft(){return ht.apply(this,arguments)}function ht(){return(ht=Object(J.a)($.a.mark((function e(){var t,a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,dt();case 2:return t=e.sent,e.next=5,It();case 5:if(!e.sent){e.next=10;break}return e.next=8,Mt();case 8:a=e.sent,t=Object(f.a)(Object(f.a)({},t),{},{mapProgress:(null==a?void 0:a.mapProgress)||{},completedTags:(null==a?void 0:a.completedTags)||{}});case 10:return e.abrupt("return",t);case 11:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function mt(e){return vt.apply(this,arguments)}function vt(){return(vt=Object(J.a)($.a.mark((function e(t){var a,r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.isDebug){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,ut();case 4:return r=e.sent,e.next=7,null===(a=pxt.auth.client())||void 0===a?void 0:a.loggedInAsync();case 7:if(e.sent){e.next=10;break}return e.next=10,r.saveUserStateAsync(t);case 10:return e.next=12,Nt({mapProgress:t.mapProgress,completedTags:t.completedTags});case 12:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var gt,yt=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){return Object(Ye.a)(this,a),t.apply(this,arguments)}return Object(Ke.a)(a,[{key:"onSignedIn",value:function(){return Promise.resolve()}},{key:"onSignedOut",value:function(){return qe.dispatch({type:W}),Promise.resolve()}},{key:"onSignInFailed",value:function(){return Promise.resolve()}},{key:"onUserProfileChanged",value:function(){var e,t=this.getState();return t.profile&&pxt.auth.generateUserProfilePicDataUrl(t.profile),qe.dispatch((e=t.profile,{type:F,profile:e})),Promise.resolve()}},{key:"onUserPreferencesChanged",value:function(e){return Promise.resolve()}},{key:"onStateCleared",value:function(){return Promise.resolve()}},{key:"onProfileDeleted",value:function(){var e=Object(J.a)($.a.mark((function e(t){var a,r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=qe.getState(),e.next=3,null===(a=r.readyResources)||void 0===a?void 0:a.exportCloudProjectsToLocal(t);case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()},{key:"onApiError",value:function(e){return Promise.resolve()}},{key:"logoutAsync",value:function(){var e=Object(J.a)($.a.mark((function e(t){var r,n;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=qe.getState(),n=r.user,e.next=4,mt(n);case 4:Object(Xe.a)(Object(Ze.a)(a.prototype),"logoutAsync",this).call(this,t);case 5:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}()}]),a}(pxt.auth.AuthClient);function bt(){return kt.apply(this,arguments)}function kt(){return(kt=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(pxt.auth.hasIdentity()){e.next=2;break}return e.abrupt("return",void 0);case 2:if(!gt){e.next=4;break}return e.abrupt("return",gt);case 4:return gt=new Promise(function(){var e=Object(J.a)($.a.mark((function e(t,a){var r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new yt,e.next=3,r.initAsync();case 3:return e.next=5,r.authCheckAsync();case 5:return e.next=7,r.initialUserPreferencesAsync();case 7:t(r);case 8:case"end":return e.stop()}}),e)})));return function(t,a){return e.apply(this,arguments)}}()),e.abrupt("return",gt);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function wt(){return St.apply(this,arguments)}function St(){return(St=Object(J.a)($.a.mark((function e(){var t;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:return t=e.sent,e.next=5,null==t?void 0:t.authCheckAsync();case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function It(){return xt.apply(this,arguments)}function xt(){return(xt=Object(J.a)($.a.mark((function e(){var t;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:return t=e.sent,e.next=5,null==t?void 0:t.loggedInAsync();case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Ct(e){return Ot.apply(this,arguments)}function Ot(){return(Ot=Object(J.a)($.a.mark((function e(t){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,pxt.auth.loginCallbackAsync(t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Et(e){return jt.apply(this,arguments)}function jt(){return(jt=Object(J.a)($.a.mark((function e(t){var a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:return a=e.sent,e.next=5,null==a?void 0:a.logoutAsync(t);case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Nt(e){return At.apply(this,arguments)}function At(){return(At=Object(J.a)($.a.mark((function e(t){var a,r,n;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:return a=e.sent,r=qe.getState(),n=r.pageSourceUrl,e.next=7,null==a?void 0:a.patchUserPreferencesAsync({op:"replace",path:["skillmap"],value:t},{filter:function(e){return e.path.includes(n)}});case 7:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Ut(e,t){return Pt.apply(this,arguments)}function Pt(){return(Pt=Object(J.a)($.a.mark((function e(t,a){var r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:return r=e.sent,a=a.filter((function(e){return!t.some((function(t){return pxt.auth.badgeEquals(t,e)}))})),t=t.map((function(e){return Object(f.a)(Object(f.a)({},e),{},{timestamp:Date.now()})})),e.next=7,null==r?void 0:r.patchUserPreferencesAsync({op:"replace",path:["badges"],value:{badges:[].concat(Object(Qe.a)(a),Object(Qe.a)(t))}});case 7:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Mt(){return Lt.apply(this,arguments)}function Lt(){return(Lt=Object(J.a)($.a.mark((function e(){var t,a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:if(!(t=e.sent)){e.next=8;break}return e.next=6,t.userPreferencesAsync();case 6:return a=e.sent,e.abrupt("return",null==a?void 0:a.skillmap);case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Tt(){return Rt.apply(this,arguments)}function Rt(){return(Rt=Object(J.a)($.a.mark((function e(){var t,a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:if(!(t=e.sent)){e.next=9;break}return e.next=6,t.userPreferencesAsync();case 6:if(!(a=e.sent)){e.next=9;break}return e.abrupt("return",a.badges);case 9:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function _t(){return Bt.apply(this,arguments)}function Bt(){return(Bt=Object(J.a)($.a.mark((function e(){var t;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,bt();case 2:if(!(t=e.sent)){e.next=7;break}return e.next=6,t.userPreferencesAsync();case 6:return e.abrupt("return",e.sent);case 7:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Ht(e){return Dt.apply(this,arguments)}function Dt(){return(Dt=Object(J.a)($.a.mark((function e(t){var a,r,n=arguments;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=n.length>1&&void 0!==n[1]?n[1]:{},e.next=3,bt();case 3:return r=e.sent,e.next=6,null==r?void 0:r.patchUserPreferencesAsync(t,a);case 6:return e.abrupt("return",e.sent);case 7:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Ft(){return(Ft=Object(J.a)($.a.mark((function e(t){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Ht({op:"replace",path:["email"],value:t},{immediate:!0});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}a(51);var Vt=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).handleOnClick=function(){r.setState({expanded:!r.state.expanded})},r.handleOnBlur=function(){r.setState({expanded:!1})},r.state={expanded:!1},r}return Object(Ke.a)(a,[{key:"getItemOnClick",value:function(e){return function(){return e.onClick(e.id)}}},{key:"render",value:function(){var e=this,t=this.props,a=t.icon,r=t.picture,n=t.items,c=t.className,o=this.state.expanded;return i.createElement("div",{className:"dropdown ".concat(c," ").concat(o?"expanded":""),tabIndex:0,role:"button",onClick:this.handleOnClick,onBlur:this.handleOnBlur},r||i.createElement("i",{className:"icon ".concat(a)}),o&&i.createElement("div",{className:"dropdown-menu"},n.map((function(t,a){return i.createElement("div",{key:a,className:"dropdown-item",onClick:e.getItemOnClick(t),role:"menuitem"},t.label)}))))}}]),a}(i.Component),Wt=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){var e;Object(Ye.a)(this,a);for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(e=t.call.apply(t,[this].concat(n))).reportAbuseUrl="https://github.com/contact/report-content",e.avatarPicUrl=function(){var t,a,r,n,i=e.props.profile;return null!==(t=null==i||null===(a=i.idp)||void 0===a?void 0:a.pictureUrl)&&void 0!==t?t:null==i||null===(r=i.idp)||void 0===r||null===(n=r.picture)||void 0===n?void 0:n.dataUrl},e.onBackClicked=function(){var t=e.props;be("skillmap.activity.back",{path:t.currentMapId||"",activity:t.currentActivityId||""}),e.props.dispatchSaveAndCloseActivity()},e.onHomeClicked=function(){var e;be("skillmap.home");var t,a,r=null===(e=pxt.webConfig)||void 0===e?void 0:e.relprefix.substr(0,pxt.webConfig.relprefix.length-3);pxt.appTarget.appTheme.homeUrl&&r?((null===(t=pxt.appTarget.appTheme.homeUrl)||void 0===t?void 0:t.lastIndexOf("/"))===(null===(a=pxt.appTarget.appTheme.homeUrl)||void 0===a?void 0:a.length)-1&&(r=r.substr(1)),window.open(pxt.appTarget.appTheme.homeUrl+r)):window.open(pxt.appTarget.appTheme.homeUrl)},e.onBugClicked=function(){var e,t;be("skillmap.bugreport"),null===(e=(t=window).usabilla_live)||void 0===e||e.call(t,"click")},e.onLogoutClicked=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return pxt.tickEvent("skillmap.usermenu.signout"),e.next=3,Et(location.hash);case 3:case"end":return e.stop()}}),e)}))),e.onProfileClicked=function(){pxt.tickEvent("skillmap.profile"),e.props.dispatchShowUserProfile()},e}return Object(Ke.a)(a,[{key:"getSettingItems",value:function(){var e=this,t=[];return this.props.showReportAbuse&&t.push({id:"report",label:lf("Report Abuse"),onClick:function(t){be("skillmap.reportabuse"),window.open(e.reportAbuseUrl)}}),this.props.activityOpen||t.push({id:"reset",label:lf("Reset All"),onClick:function(){be("skillmap.reset.warning"),e.props.dispatchShowResetUserModal()}}),t}},{key:"getOrganizationLogo",value:function(e){var t=e.organizationWideLogo;return i.createElement("div",{className:"header-logo"},t?i.createElement("img",{src:ve()?"./assets/".concat(t):t,alt:lf("{0} Logo",e.organization)}):i.createElement("span",{className:"name"},e.organization))}},{key:"getTargetLogo",value:function(e){var t=this.props.activityOpen;return i.createElement("div",{className:"ui item logo brand ".concat(t?"":"noclick")},e.useTextLogo?[i.createElement("span",{className:"name",key:"org-name",onClick:this.onBackClicked},e.organizationText),i.createElement("span",{className:"name-short",key:"org-name-short",onClick:this.onBackClicked},e.organizationShortText||e.organizationText)]:e.logo||e.portraitLogo?i.createElement("img",{className:"logo",src:e.logo||e.portraitLogo,alt:lf("{0} Logo",e.boardName)}):i.createElement("span",{className:"name"}," ",e.boardName))}},{key:"getHelpItems",value:function(){var e=[];return this.props.activityOpen&&e.push({id:"feedback",label:lf("Feedback"),onClick:this.onBugClicked}),e}},{key:"getUserMenu",value:function(){var e=this,t=this.props,a=t.signedIn,r=t.profile,n=[];a&&n.push({id:"profile",label:lf("My Profile"),onClick:this.onProfileClicked},{id:"signout",label:lf("Sign Out"),onClick:this.onLogoutClicked});var c=this.avatarPicUrl()?i.createElement("div",{className:"avatar"},i.createElement("img",{src:this.avatarPicUrl(),alt:lf("User Menu")})):void 0,o=i.createElement("span",null,i.createElement("div",{className:"avatar-initials"},pxt.auth.userInitials(r)));return i.createElement("div",{className:"user-menu"},a?i.createElement(Vt,{icon:"user",items:n,picture:c||o,className:"header-dropdown user-dropdown"}):i.createElement(Gt,{className:"sign-in",icon:"xicon cloud-user",title:lf("Sign In"),label:lf("Sign In"),onClick:function(){pxt.tickEvent("skillmap.usermenu.signin"),e.props.dispatchShowLoginModal()}}))}},{key:"render",value:function(){var e,t=this.props.activityOpen,a=pxt.auth.hasIdentity(),r=null===(e=pxt.appTarget)||void 0===e?void 0:e.appTheme,n=this.getSettingItems(),c=this.getHelpItems();return i.createElement("div",{className:"header"},i.createElement("div",{className:"header-left"},this.getOrganizationLogo(r),this.getTargetLogo(r)),i.createElement("div",{className:"spacer"}),i.createElement("div",{className:"header-right"},t&&i.createElement(Gt,{icon:"icon arrow left",title:lf("Return to activity selection"),onClick:this.onBackClicked}),i.createElement(Gt,{icon:"icon home",title:lf("Return to the editor homepage"),onClick:this.onHomeClicked}),(null==c?void 0:c.length)>0&&i.createElement(Vt,{icon:"help circle",className:"header-dropdown",items:c}),(null==n?void 0:n.length)>0&&i.createElement(Vt,{icon:"setting",className:"header-dropdown",items:n}),a&&this.getUserMenu()))}}]),a}(i.Component),Gt=function(e){var t=e.icon,a=e.label,r=e.title,n=e.onClick,c=e.className;return i.createElement("div",{className:"header-button ".concat(a?"with-label":"icon-only"," ").concat(c),title:r,role:"button",onClick:n},i.createElement("i",{className:t}),a&&i.createElement("span",{className:"header-button-label"},a))},zt={dispatchSaveAndCloseActivity:tt,dispatchShowResetUserModal:function(){return lt({type:"reset"})},dispatchShowLoginModal:st,dispatchShowUserProfile:at},qt=Object(l.b)((function(e,t){var a,r,n,i;if(!e)return{};(null===(a=e.editorView)||void 0===a?void 0:a.currentHeaderId)&&we(e.user,e.pageSourceUrl,e.editorView.currentMapId,e.editorView.currentActivityId)&&e.editorView.currentHeaderId;var c,o=!!e.editorView;return(null===(r=e.editorView)||void 0===r?void 0:r.currentActivityId)&&(null===(c=e.maps[e.editorView.currentMapId])||void 0===c||c.activities[e.editorView.currentActivityId]),{activityOpen:o,currentMapId:o&&(null===(n=e.editorView)||void 0===n?void 0:n.currentMapId),currentActivityId:o&&(null===(i=e.editorView)||void 0===i?void 0:i.currentActivityId),showReportAbuse:"unknown"===e.pageSourceStatus,signedIn:e.auth.signedIn,profile:e.auth.profile}}),zt)(Wt),Qt=a(39),Yt=(a(52),ve()?"http://localhost:3232/index.html":function(e){var t,a;if(!pxt.webConfig&&window.pxtConfig&&pxt.setupWebConfig(window.pxtConfig),(null===(t=pxt.webConfig)||void 0===t?void 0:t.targetUrl)&&(null===(a=pxt.webConfig)||void 0===a?void 0:a.relprefix))return pxt.webConfig.targetUrl+pxt.webConfig.relprefix.substr(0,pxt.webConfig.relprefix.length-3);var r=/\/([\da-zA-Z\.]+)(?:--)?/i.exec(window.location.pathname);return"".concat(e.replace(/\/$/,""),"/").concat((null==r?void 0:r[1])||"")}(window.pxtTargetBundle.appTheme.embedUrl)),Kt=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).ref=void 0,r.messageQueue=[],r.finishedActivityState=void 0,r.nextId=0,r.pendingMessages={},r.isNewActivity=!1,r.handleFrameRef=function(e){if(e&&e.contentWindow){window.addEventListener("message",r.onMessageReceived),e.addEventListener("load",r.handleFrameReload),r.ref=e,$t(".usabilla_live_button_container",!1),$t("footer",!1);var t=document.getElementById("root");t&&pxt.BrowserUtils.addClass(t,"editor")}},r.handleFrameReload=function(){r.setState({frameState:"loading"})},r.onMessageReceived=function(e){var t=e.data;if("opening-project"===r.state.frameState&&r.setState({loadPercent:Math.min((r.state.loadPercent||0)+4,95)}),"pxteditor"===t.type&&t.id&&r.pendingMessages[t.id])return r.pendingMessages[t.id].handler(t),void delete r.pendingMessages[t.id];switch(t.action){case"newproject":r.state.workspaceReady||(r.setState({workspaceReady:!0}),r.sendMessageAsync(),r.props.onWorkspaceReady((function(e){return r.sendMessageAsync(e)}))),"loading"===r.state.frameState&&r.setState({frameState:"no-project"});break;case"tutorialevent":r.handleTutorialEvent(t);break;case"projectcloudstatus":var a=t;r.props.dispatchSetCloudStatus(a.headerId,a.status)}},r.state={frameState:"loading",workspaceReady:!1,loadPercent:0,pendingShare:!1},r}return Object(Ke.a)(a,[{key:"componentDidUpdate",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r,n,i=this;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=this.props.shareHeaderId,a=this.state,r=a.frameState,n=a.pendingShare,"project-open"===r&&this.props.save?this.setState({frameState:"closing-project"},Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.closeActivityAsync();case 2:case"end":return e.stop()}}),e)})))):"no-project"===r&&this.props.activityId&&this.setState({frameState:"opening-project",loadPercent:0},Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.startActivityAsync();case 2:case"end":return e.stop()}}),e)})))),t&&!n&&this.setState({pendingShare:!0},Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.shareProjectAsync();case 2:case"end":return e.stop()}}),e)}))));case 4:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"componentWillUnmount",value:function(){window.removeEventListener("message",this.onMessageReceived),$t(".usabilla_live_button_container",!0),$t("footer",!0);var e=document.getElementById("root");e&&pxt.BrowserUtils.removeClass(e,"editor")}},{key:"render",value:function(){var e=this.props,t=e.title,a=e.activityId,r=this.state,n=r.frameState,c=r.loadPercent,o=lf("Loading..."),s="opening-project"===n,l=s||"closing-project"===n,u=Yt;return"/"!==Yt.charAt(Yt.length-1)||ve()||(u=Yt.substr(0,Yt.length-1)),u+="?controller=1&skillsMap=1&noproject=1&nocookiebanner=1&ws=browser",i.createElement("div",{className:"makecode-frame-outer",style:{display:a?"block":"none"}},i.createElement("div",{className:"makecode-frame-loader ".concat(l?"":"hidden")},i.createElement("img",{src:ge("assets/logo.svg"),alt:"MakeCode Logo"}),s&&i.createElement("div",{className:"makecode-frame-loader-bar"},i.createElement("div",{className:"makecode-frame-loader-fill",style:{width:c+"%"}})),i.createElement("div",{className:"makecode-frame-loader-text"},o)),i.createElement("iframe",{className:"makecode-frame",src:u,title:t,ref:this.handleFrameRef}))}},{key:"sendMessageAsync",value:function(e){var t=this;return new Promise((function(a){var r=function(e){e.response=!0,e.id=t.nextId+++"",t.pendingMessages[e.id]={original:e,handler:a},t.ref.contentWindow.postMessage(e,"*")};if(t.ref)if(t.state.workspaceReady){for(;t.messageQueue.length;)r(t.messageQueue.shift());e&&r(e)}else t.messageQueue.push(e)}))}},{key:"startActivityAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.props.activityHeaderId){e.next=5;break}return e.next=3,this.sendMessageAsync({type:"pxteditor",action:"openheader",headerId:this.props.activityHeaderId});case 3:e.next=8;break;case 5:return this.isNewActivity=!0,e.next=8,this.sendMessageAsync({type:"pxteditor",action:"startactivity",path:this.props.tutorialPath,title:this.props.title,activityType:"tutorial",carryoverPreviousCode:this.props.carryoverCode,previousProjectHeaderId:this.props.previousHeaderId});case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"closeActivityAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.sendMessageAsync({type:"pxteditor",action:"saveproject"});case 2:return this.props.dispatchCloseActivity("finished"===this.finishedActivityState),this.props.dispatchUpdateUserCompletedTags(),this.finishedActivityState=void 0,e.next=7,this.sendMessageAsync({type:"pxteditor",action:"unloadproject"});case 7:this.setState({frameState:"no-project"});case 8:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"shareProjectAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r,n;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.props,a=t.shareHeaderId,r=t.dispatchSetShareStatus,e.next=3,this.sendMessageAsync({type:"pxteditor",action:"shareproject",headerId:a});case 3:n=e.sent,r(a,n.resp.shortid),this.setState({pendingShare:!1});case 6:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"handleTutorialEvent",value:function(e){var t=this.props,a=t.dispatchSetHeaderIdForActivity,r=t.dispatchSaveAndCloseActivity,n=t.mapId,i=t.activityId,c=t.progress;switch(e.tutorialEvent){case"progress":i&&a(n,i,e.projectHeaderId,e.currentStep+1,e.totalSteps,e.isCompleted||!!(null==c?void 0:c.isCompleted));break;case"loaded":this.onEditorLoaded();break;case"completed":this.onTutorialFinished();break;case"exit":r()}}},{key:"onEditorLoaded",value:function(){var e=this.props,t=e.mapId,a=e.activityId;t&&a&&(be("skillmap.activity.loaded",{path:t,activity:a}),this.setState({frameState:"project-open"}),this.isNewActivity&&(this.isNewActivity=!1))}},{key:"onTutorialFinished",value:function(){var e=this.props,t=e.mapId,a=e.activityId,r=e.signedIn,n=e.pageSourceUrl;be("skillmap.activity.complete",{path:t,activity:a}),this.finishedActivityState="finished",this.props.dispatchSaveAndCloseActivity();var i=pxt.storage.getLocal(n+X);r||i||(this.props.dispatchShowLoginPrompt(),pxt.storage.setLocal(n+X,"true"))}}]),a}(i.Component);function $t(e,t){var a=document.querySelector(e);(null==a?void 0:a.style)&&(a.style.display=t?"":"none")}var Jt={dispatchSetHeaderIdForActivity:function(e,t,a,r,n,i){return{type:b,mapId:e,activityId:t,id:a,currentStep:r,maxSteps:n,isCompleted:i}},dispatchCloseActivity:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return{type:w,finished:e}},dispatchSaveAndCloseActivity:tt,dispatchUpdateUserCompletedTags:function(){return{type:C}},dispatchSetShareStatus:nt,dispatchShowLoginPrompt:function(){return lt({type:"login-prompt"})},dispatchSetCloudStatus:function(e,t){return{type:Q,headerId:e,status:t}}},Xt=Object(l.b)((function(e,t){var a,r,n=(null===(a=e.shareState)||void 0===a?void 0:a.url)||null===(r=e.shareState)||void 0===r?void 0:r.headerId;if(!e||!e.editorView)return{shareHeaderId:n};var i,c=e.editorView,o=c.currentActivityId,s=c.currentMapId,l=c.currentHeaderId,u=c.state,d=c.allowCodeCarryover,p=c.previousHeaderId,f=e.maps[s],h=null==f?void 0:f.activities[o];i=null==h?void 0:h.displayName;var m=Oe(e.user,e.pageSourceUrl,s,o);return{tutorialPath:h.url,title:i,mapId:s,activityId:o,activityHeaderId:l,activityType:h.type,carryoverCode:d,previousHeaderId:p,progress:m,save:"saving"===u,shareHeaderId:n,signedIn:e.auth.signedIn,pageSourceUrl:e.pageSourceUrl}}),Jt)(Kt),Zt=(a(53),function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){var e;Object(Ye.a)(this,a);for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(e=t.call.apply(t,[this].concat(n))).handleModalClick=function(e){e.stopPropagation()},e.handleCloseClick=function(){e.props.onClose&&e.props.onClose(),e.setState({visible:!1})},e}return Object(Ke.a)(a,[{key:"render",value:function(){var e=this.props,t=e.title,a=e.actions,r=e.className,n=e.fullscreen;return i.createElement("div",{className:"modal-overlay ".concat(n?"fullscreen":""),onClick:this.handleCloseClick,role:"region"},i.createElement("div",{className:"modal ".concat(r||""),onClick:this.handleModalClick,role:"dialog"},i.createElement("div",{className:"modal-header"},n&&i.createElement("div",{className:"close button",onClick:this.handleCloseClick},i.createElement("i",{className:"icon arrow left"}),lf("Go Back")),i.createElement("div",{className:"modal-title"},t),!n&&i.createElement("div",{className:"spacer"}),!n&&i.createElement("div",{className:"modal-close-icon",onClick:this.handleCloseClick,role:"button"},i.createElement("i",{className:"icon close remove circle"}))),i.createElement("div",{className:"modal-body"},this.props.children),a&&a.length>0&&i.createElement("div",{className:"modal-actions"},a.map((function(e,t){return e.url?i.createElement("a",{key:t,className:"modal-button ".concat(e.className||""),href:e.url,onClick:e.onClick,target:"_blank",rel:"noopener noreferrer",role:"button"},e.label):i.createElement("div",{key:t,className:"modal-button ".concat(e.className||""),onClick:e.onClick,role:"button",tabIndex:0},e.label,e.icon&&i.createElement("i",{className:"".concat(e.xicon?"xicon":"icon"," ").concat(e.icon)}))})))))}}]),a}(i.Component)),ea=a(17),ta=a(21),aa=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).handleOnClose=function(){r.setState({loading:!1,data:void 0,checkboxSelected:!1}),r.props.dispatchHideModal(),r.props.dispatchSetShareStatus()},r.handleRewardShareClick=function(){var e=r.props,t=e.mapId,a=e.userState,n=e.pageSourceUrl,i=e.skillMap,c=e.activity,o=(e.shareState,Ae(a,n,i,c.activityId));o&&r.props.dispatchShowShareModal(t,o.activityId,!0)},r.handleShareInputClick=function(e){e.target.select()},r.handleShareCopyClick=function(){var e=r.props;be("skillmap.share.copy",{path:e.mapId,activity:e.activity.activityId});var t=document.querySelector(".share-input input");t&&(t.select(),document.execCommand("copy"))},r.state={},r}return Object(Ke.a)(a,[{key:"render",value:function(){var e=this.props,t=e.activity;switch(e.type){case"completion":return t?this.renderCompletionModal():i.createElement("div",null);case"restart-warning":return t?this.renderRestartWarning():i.createElement("div",null);case"report-abuse":return this.renderReportAbuse();case"reset":return this.renderResetWarning();case"carryover":return this.renderCodeCarryoverModal();case"share":return this.renderShareModal();case"login":return this.renderLoginModal(!1);case"login-prompt":return this.renderLoginModal(!0);case"delete-account":return this.renderDeleteAccountModal();case"reward":return this.renderRewardModal();default:return i.createElement("div",null)}}},{key:"getCompletionActionText",value:function(e){switch(e.kind){case"activity":return lf("Start Activity");case"map":return lf("Start Skill Map");case"editor":return lf("Keep Building");case"tutorial":return lf("Start Tutorial");case"docs":default:return lf("Learn More")}}},{key:"getCompletionActions",value:function(e){var t=this,a=this.props,r=a.userState,n=a.pageSourceUrl,i=a.mapId,c=a.skillMap,o=a.activity,s=a.dispatchOpenActivity,l=a.dispatchShowCarryoverModal,u=o,d=[];return null==e||e.forEach((function(e){var a={label:e.label||t.getCompletionActionText(e),url:e.url};switch(e.kind){case"activity":var p=null==c?void 0:c.activities[e.activityId||""];p&&(a.onClick=function(){be("skillmap.reward.action.activity",{path:i,activity:u.activityId,nextActivityId:p.activityId}),t.handleOnClose(),Ue(r,n,c,p)?l(c.mapId,p.activityId):s(i,p.activityId)},d.push(a));break;case"editor":var f=Ae(r,n,c,o.activityId);(null==f?void 0:f.headerId)&&(a.onClick=function(){be("skillmap.reward.action.editor",{path:i,activity:u.activityId}),window.open("".concat(Yt,"#skillmapimport:").concat(f.headerId))},d.push(a));break;case"tutorial":case"map":case"docs":default:a.onClick=function(){return be("skillmap.reward.action.".concat(e.kind),{path:i,activity:u.activityId,url:a.url||""})},d.push(a)}})),d}},{key:"renderConfetti",value:function(){return Array(100).fill(0).map((function(e,t){var a={animationDelay:"".concat(t%100*.1,"s"),left:"".concat(1*Math.floor(100*Math.random()),"%")};return i.createElement("div",{key:t,style:a,className:"confetti ".concat(Math.random()>.5?"reverse":""," color-").concat(Math.floor(9*Math.random()))})}))}},{key:"renderCompletionModal",value:function(){var e=this.props,t=e.skillMap,a=e.type,r=e.activity,n=e.userState,c=e.pageSourceUrl,o=e.dispatchNextModal,s=e.reward,l=e.mapId;if(!a||!t)return i.createElement("div",null);var u=r,d=lf("You Did It!"),p=lf("Congratulations on completing {0}. Take some time to explore any activities you missed, or reset your progress to try again. But first, be sure to claim your reward using the button below.","{0}").split("{0}"),f=Ae(n,c,t,r.activityId),h=s?function(){be("skillmap.openCertificate",{path:l,activity:r.activityId}),window.open(s.url||t.completionUrl)}:o;return i.createElement("div",{className:"confetti-container"},i.createElement(Zt,{title:d,actions:this.getCompletionActions(u.actions),className:"completion",onClose:this.handleOnClose},p[0],i.createElement("strong",null,t.displayName),p[1],i.createElement("button",{className:"completion-reward",onClick:h},i.createElement("i",{className:"icon gift"}),i.createElement("span",null,lf("Claim your reward!"))),f&&f.headerId&&i.createElement("button",{className:"completion-reward",onClick:this.handleRewardShareClick},i.createElement("i",{className:"icon send"}),i.createElement("span",null,lf("Share your game!")))),this.renderConfetti())}},{key:"renderRestartWarning",value:function(){var e=this.props,t=e.mapId,a=e.activity,r=e.dispatchRestartActivity,n=e.showCodeCarryoverModal,c=e.dispatchShowCarryoverModal,o=lf("Restart Activity?"),s=lf("Are you sure you want to restart {0}? You won't lose your path progress but the code you have written for this activity will be deleted.","{0}").split("{0}"),l=[{label:lf("CANCEL"),onClick:this.handleOnClose},{label:lf("RESTART"),onClick:function(){be("skillmap.activity.restart",{path:t,activity:a.activityId}),n?c(t,a.activityId):r(t,a.activityId)}}];return i.createElement(Zt,{title:o,actions:l,onClose:this.handleOnClose},s[0],i.createElement("strong",null,a.displayName),s[1])}},{key:"renderResetWarning",value:function(){var e=this.props,t=e.dispatchResetUser,a=e.dispatchHideModal,r=lf("Reset All Activities?"),n=lf("Are you sure you want to reset? This will permanently erase all progress and delete the project created for each tutorial. This action cannot be undone."),c=[{label:lf("CANCEL"),onClick:this.handleOnClose},{label:lf("RESET"),onClick:function(){be("skillmap.reset"),t(),a()}}];return i.createElement(Zt,{title:r,actions:c,onClose:this.handleOnClose},n)}},{key:"renderReportAbuse",value:function(){var e=this.props,t=e.pageSourceUrl,a=e.dispatchHideModal,r=[{label:"REPORT",onClick:function(){be("skillmap.reportabuse"),function(e,t){pe.apply(this,arguments)}(t||"",{text:document.querySelector(".report-abuse-text").value}),a()}}];return i.createElement(Zt,{title:"Report Abuse",actions:r,onClose:this.handleOnClose},i.createElement("textarea",{className:"report-abuse-text",placeholder:"Describe the content and explain why you are reporting it for abuse. Provide as much detail as possible!"}))}},{key:"renderCodeCarryoverModal",value:function(){var e=this.props,t=e.skillMap,a=e.activity,r=e.pageSourceUrl,n=e.userState,c=e.dispatchHideModal,o=e.dispatchRestartActivity,s=lf("Keep code from previous activity?"),l=lf("Do you want to start with your code from {0} or start fresh with starter code? Your images, tilemaps, tiles, and animations will stick around either way.").split("{0}"),u=Ae(n,r,t,a.activityId),d=t.activities[null==u?void 0:u.activityId];if(!d)return i.createElement("div",null);var p=[{label:lf("START FRESH"),onClick:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:be("skillmap.startfresh",{path:t.mapId,activity:a.activityId,previousActivity:d.activityId}),o(t.mapId,a.activityId,u.headerId,!1),c();case 3:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}()},{label:lf("KEEP CODE"),onClick:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:be("skillmap.keepcode",{path:t.mapId,activity:a.activityId,previousActivity:d.activityId}),o(t.mapId,a.activityId,u.headerId,!0),c();case 3:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}()}];return i.createElement(Zt,{title:s,actions:p,onClose:this.handleOnClose},l[0],i.createElement("strong",null,d.displayName),l[1])}},{key:"renderShareModal",value:function(){var e=this,t=this.props,a=t.userState,r=t.pageSourceUrl,n=t.mapId,c=t.activity,o=t.shareState,s=t.dispatchSetShareStatus,l=this.state.loading,u=null==o?void 0:o.url,d=u?lf("Share Project"):lf("Publish Project"),p=[];return u||(p.push({label:lf("Cancel"),onClick:this.handleOnClose}),p.push({label:lf("Publish"),onClick:function(){var t=Object(J.a)($.a.mark((function t(){var i;return $.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:be("skillmap.share",{path:n,activity:c.activityId}),e.setState({loading:!0}),i=Oe(a,r,n,c.activityId),s(null==i?void 0:i.headerId);case 4:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}()})),i.createElement(Zt,{title:d,actions:p,onClose:this.handleOnClose},u?i.createElement("div",null,lf("Your project is ready! Use the address below to share your projects.")):i.createElement("div",{className:"share-disclaimer"},lf("You need to publish your project to share it or embed it in other web pages. You acknowledge having consent to publish this project.")),l&&!u&&i.createElement("div",{className:"share-loader"},i.createElement("div",{className:"ui active inline loader"}),i.createElement("span",null,lf("Loading..."))),u&&i.createElement("div",{className:"share-input"},i.createElement("input",{type:"text",readOnly:!0,autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:!1,value:"https://makecode.com/".concat(u),onClick:this.handleShareInputClick}),i.createElement("div",{className:"share-copy",onClick:this.handleShareCopyClick,role:"button"},i.createElement("i",{className:"icon copy"}),lf("Copy"))),u&&(null==o?void 0:o.rewardsShare)&&i.createElement("div",null,this.renderConfetti()))}},{key:"renderLoginModal",value:function(e){var t,a=this,r=null!==(t=this.state.checkboxSelected)&&void 0!==t&&t,n=lf("Sign in icon"),c=pxt.auth.identityProvider("microsoft"),o=[];return o.push({label:lf("Sign In"),onClick:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:pxt.tickEvent("skillmap.signindialog.signin",{provider:c.name?c.name:"",rememberMe:r.toString()}),pxt.auth.client().loginAsync(c.id,r,{hash:location.hash});case 2:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}()}),i.createElement(Zt,{title:e?lf("Save your Completed Activity"):lf("Sign into MakeCode Arcade"),onClose:this.handleOnClose,actions:o,className:"sign-in"},i.createElement("div",{className:"description"},i.createElement("p",null,lf("Sign in with your Microsoft Account. We'll save your projects to the cloud, where they're accessible from anywhere.")),i.createElement("div",{className:"container"},e&&i.createElement("img",{src:ge("/assets/cloud-user.svg"),alt:n,className:"icon cloud-user"}),i.createElement("p",null,lf("Don't have a Microsoft Account? Start signing in to create one!"),i.createElement("a",{href:"https://aka.ms/cloudsave",target:"_blank",onClick:function(){be("skillmap.signindialog.learn"),window.open("https://aka.ms/cloudsave","_blank")}},i.createElement("i",{className:"icon external alternate"}),lf("Learn more")))),i.createElement("div",{className:"remember",onClick:function(){var e=!r;be("skillmap.signindialog.rememberme",{rememberMe:e.toString()}),a.setState({checkboxSelected:e})}},i.createElement("i",{className:"icon square outline ".concat(r?"check":"")}),lf("Remember me"))))}},{key:"handleSigninClick",value:function(){var e=Object(J.a)($.a.mark((function e(t){var a,r;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=null!==(a=this.state.checkboxSelected)&&void 0!==a&&a,pxt.tickEvent("skillmap.signindialog.signin",{provider:t.id,rememberMe:r.toString()}),e.next=4,pxt.auth.client().loginAsync(t.id,r,{hash:location.hash});case 4:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}()},{key:"handleRememberMeClick",value:function(){var e,t=!(null!==(e=this.state.checkboxSelected)&&void 0!==e&&e);be("skillmap.signindialog.rememberme",{rememberMe:t.toString()}),this.setState({checkboxSelected:t})}},{key:"renderDeleteAccountModal",value:function(){var e=this,t=this.state.checkboxSelected,a=[];return a.push({label:lf("Confirm"),className:t?"confirm":"confirm disabled",onClick:function(){var a=Object(J.a)($.a.mark((function a(){return $.a.wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if(!t){a.next=7;break}return be("skillmap.profile.delete"),e.props.dispatchHideModal(),e.props.dispatchCloseUserProfile(),a.next=6,pxt.auth.client().deleteProfileAsync();case 6:location.reload();case 7:case"end":return a.stop()}}),a)})));return function(){return a.apply(this,arguments)}}()}),a.push({label:lf("Back to safety"),className:"disagree",onClick:this.props.dispatchHideModal}),i.createElement(Zt,{title:lf("Delete Profile"),className:"delete",actions:a,onClose:this.handleOnClose},i.createElement("div",null," ",lf("Are you sure? This cannot be reversed! Your cloud-saved projects will be converted to local projects on this device.")),i.createElement("div",{className:"confirm-delete checkbox",onClick:function(){e.setState({checkboxSelected:!t})}},i.createElement("i",{className:"icon square outline ".concat(t?"check":"")}),lf("I understand this is permanent. No undo.")))}},{key:"renderRewardModal",value:function(){var e,t=this.props.reward;return"certificate"===(null==t?void 0:t.type)?e=this.renderCertificateModal(t):"completion-badge"===(null==t?void 0:t.type)&&(e=this.renderBadgeModal(t)),i.createElement("div",{className:"confetti-container"},e,this.renderConfetti())}},{key:"renderCertificateModal",value:function(e){var t=lf("Rewards"),a=this.props,r=a.mapId,n=a.skillMap,c=a.activity,o=a.hasPendingModals,s=a.dispatchNextModal,l=[];return l.push({label:lf("Open Certificate"),className:"completion-reward inverted",icon:"file outline",onClick:function(){be("skillmap.openCertificate",{path:r,activity:c.activityId}),window.open(e.url||n.completionUrl)}}),o&&l.push({label:lf("Next Reward"),className:"completion-reward",icon:"right circle arrow",onClick:function(){be("skillmap.nextReward",{path:r,activity:c.activityId,currentReward:e.type}),s()}}),i.createElement(Zt,{title:t,onClose:this.handleOnClose,actions:l},lf("Use the button below to get your completion certificate!"),e.previewUrl&&i.createElement("div",{className:"certificate-reward"},i.createElement("img",{src:e.previewUrl,alt:lf("certificate Preview")})))}},{key:"renderBadgeModal",value:function(e){var t,a=lf("Rewards"),r=this.props,n=r.mapId,c=r.skillMap,o=r.activity,s=r.hasPendingModals,l=r.badge,u=r.dispatchNextModal,d=r.dispatchShowUserProfile,p=r.dispatchHideModal,f=r.signedIn,h=r.dispatchShowLoginModal,m=function(){be("skillmap.goToBadges",{path:n,activity:o.activityId}),p(),d()},v=function(){be("skillmap.badgeSignIn",{path:n,activity:o.activityId}),p(),h()},g=[];return f?(t=Object(ea.jsxLF)(lf("You’ve received the {0} Badge! Find it in the badges section of your {1}."),i.createElement("span",null,pxt.U.rlf(l.title)),i.createElement("a",{onClick:m},lf("User Profile"))),g.push({label:lf("Go to Badges"),className:"completion-reward inverted",icon:"trophy",onClick:m})):(t=Object(ea.jsxLF)(lf("You’ve received the {0} Badge! {1} to save your progress"),i.createElement("span",null,pxt.U.rlf(c.displayName)),i.createElement("a",{onClick:v},lf("Sign In"))),g.push({label:lf("Sign In"),className:"completion-reward inverted",xicon:!0,icon:"cloud-user",onClick:v})),s&&g.push({label:lf("Next Reward"),className:"completion-reward",icon:"right circle arrow",onClick:function(){be("skillmap.nextReward",{path:n,activity:o.activityId,currentReward:e.type}),u()}}),i.createElement(Zt,{title:a,onClose:this.handleOnClose,actions:g},t,i.createElement("div",{className:"badge-modal-image"},i.createElement(ta.Badge,{badge:l})))}}]),a}(i.Component),ra={dispatchHideModal:function(){return{type:B}},dispatchRestartActivity:function(e,t,a,r){return{type:I,mapId:e,activityId:t,previousHeaderId:a,carryoverCode:r}},dispatchOpenActivity:et,dispatchResetUser:function(){return{type:O}},dispatchShowCarryoverModal:ct,dispatchCloseUserProfile:rt,dispatchSetShareStatus:nt,dispatchShowShareModal:ot,dispatchNextModal:function(){return{type:_}},dispatchShowUserProfile:at,dispatchShowLoginModal:st},na=Object(l.b)((function(e,t){var a,r,n;if(!e)return{};var i,c=e.pageSourceUrl,o=e.shareState,s=e.modalQueue||[],l=Object(Qt.a)(s,1)[0]||{},u=l.currentMapId,d=l.currentActivityId,p=l.type,f=l.currentReward,h=e.editorView?e.maps[e.editorView.currentMapId]:u&&e.maps[u],m=u&&d?null===(a=e.maps[u])||void 0===a?void 0:a.activities[d]:void 0;return h&&m&&Me(m)&&"completion-badge"===(null==f?void 0:f.type)&&(i=Te(c,h,m)),{type:p,pageSourceUrl:c,skillMap:h,userState:e.user,showCodeCarryoverModal:h&&m&&Ue(e.user,e.pageSourceUrl,h,m),mapId:u,activity:u&&d?e.maps[u].activities[d]:void 0,shareState:o,reward:f,hasPendingModals:(null===(r=e.modalQueue)||void 0===r?void 0:r.length)&&(null===(n=e.modalQueue)||void 0===n?void 0:n.length)>1,badge:i,signedIn:e.auth.signedIn}}),ra)(aa),ia=(a(55),function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).handleClick=function(){r.props.onItemSelect&&r.props.onItemSelect(r.props.activityId,r.props.kind)},r.handleDoubleClick=function(){r.props.onItemDoubleClick&&r.props.onItemDoubleClick(r.props.activityId,r.props.kind)},r.handleRef=function(e){e&&(e.addEventListener("mouseenter",(function(){r.setState({hover:!0})})),e.addEventListener("mouseleave",(function(){r.setState({hover:!1})})))},r.state={hover:!1},r}return Object(Ke.a)(a,[{key:"getIcon",value:function(e,t){switch(t){case"reward":return"";case"completion":return"";default:switch(e){case"locked":return"";case"completed":return"";default:return""}}}},{key:"getIconClass",value:function(e,t){switch(t){case"reward":case"completion":return"graph-icon";default:switch(e){case"locked":case"completed":return"graph-icon";default:return"graph-icon-x"}}}},{key:"getNodeMarker",value:function(e,t,a,r){var n,c,o=t/50,s=t/576;switch(e){case"notstarted":return i.createElement("g",{transform:"translate(".concat(t/2-12*o," ").concat(-t/2-9*o,")")},i.createElement("title",null,lf("Not Started")),i.createElement("g",{transform:"scale(".concat(s/2,")")},(n=a,c=r,i.createElement("path",{fill:n,stroke:c,strokeWidth:"50",d:"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"}))));default:return i.createElement("g",null)}}},{key:"render",value:function(){var e=this.state.hover,t=this.props,a=t.width,r=t.position,n=t.selected,c=t.status,o=t.kind,s=t.theme,l=e?s.unlockedNodeColor:s.unlockedNodeForeground,u=e?s.unlockedNodeForeground:s.unlockedNodeColor;"locked"===c?(u=e?s.lockedNodeForeground:s.lockedNodeColor,l=e?s.lockedNodeColor:s.lockedNodeForeground):"activity"!==o?(u=e?s.rewardNodeForeground:s.rewardNodeColor,l=e?s.rewardNodeColor:s.rewardNodeForeground):"completed"===c&&(u=e?s.completedNodeForeground:s.completedNodeColor,l=e?s.completedNodeColor:s.completedNodeForeground);var d=a/8,p=a/12.5;return i.createElement("g",{className:"graph-activity ".concat(n?"selected":""," ").concat(e?"hover":""),transform:"translate(".concat(r.x," ").concat(r.y,")"),onClick:this.handleClick,onDoubleClick:this.handleDoubleClick,ref:this.handleRef},n&&("activity"!==o?i.createElement("circle",{className:"highlight",cx:0,cy:0,r:a/2+d,stroke:s.selectedStrokeColor}):i.createElement("rect",{className:"highlight",x:-a/2-d,y:-a/2-d,width:a+2*d,height:a+2*d,rx:a/6,stroke:s.selectedStrokeColor})),"activity"!==o?i.createElement("circle",{cx:0,cy:0,r:a/2,fill:u,stroke:l,strokeWidth:"2"}):i.createElement("rect",{x:-a/2,y:-a/2,width:a,height:a,rx:a/10,fill:u,stroke:l,strokeWidth:"2"}),"activity"===o&&this.getNodeMarker(c,a,s.selectedStrokeColor,s.strokeColor),i.createElement("text",{dy:p,textAnchor:"middle",alignmentBaseline:"middle",dominantBaseline:"middle",fill:l,className:this.getIconClass(c,o)},this.getIcon(c,o)))}}]),a}(i.Component)),ca=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){return Object(Ye.a)(this,a),t.apply(this,arguments)}return Object(Ke.a)(a,[{key:"render",value:function(){var e,t,a=this.props,r=a.points,n=a.strokeWidth,c=a.color,o="M 0 0",s="";return r.forEach((function(a){var r,n,i,c;e=a,t&&(o+=" l ".concat(((null===(r=e)||void 0===r?void 0:r.x)||0)-t.x," ").concat(((null===(n=e)||void 0===n?void 0:n.y)||0)-t.y),s=" l ".concat(t.x-((null===(i=e)||void 0===i?void 0:i.x)||0)," ").concat(t.y-((null===(c=e)||void 0===c?void 0:c.y)||0)," ").concat(s)),t=e})),i.createElement("g",{transform:"translate(".concat(r[0].x||0," ").concat(r[0].y||0,")")},i.createElement("path",{stroke:c,strokeWidth:n,d:"".concat(o," ").concat(s)}))}}]),a}(i.Component),oa=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).onItemSelect=function(e,t){var a=r.props,n=a.user,i=a.pageSourceUrl,c=a.map,o=(a.completionState,a.selectedActivityId),s=a.dispatchChangeSelectedItem,l=a.dispatchShowCompletionModal,u=Se(n,i,c,e).status;"completion"===t&&"completed"===u?(be("skillmap.graph.reward.select",{path:c.mapId,activity:e}),s(c.mapId,e),l(c.mapId,e)):e!==o?(be("skillmap.graph.item.select",{path:c.mapId,activity:e}),s(c.mapId,e)):(be("skillmap.graph.item.deselect",{path:c.mapId,activity:e}),s(void 0))},r.onItemDoubleClick=function(e,t){var a=r.props,n=a.user,i=a.pageSourceUrl,c=a.map,o=a.dispatchOpenActivity,s=a.dispatchShowCarryoverModal,l=Se(n,i,c,e).status,u=c.activities[e];be("skillmap.activity.open.doubleclick",{path:c.mapId,activity:e,status:l||""});var d=Oe(n,i,c.mapId,u.activityId);Ue(n,i,c,u)&&!(null==d?void 0:d.headerId)?s(c.mapId,e):"activity"==t&&"locked"!==l&&o(c.mapId,e)},r}return Object(Ke.a)(a,[{key:"componentDidUpdate",value:function(e){"transitioning"===e.completionState&&setTimeout((function(){be("skillmap.graph.reward.auto",{path:e.map.mapId,activity:e.selectedActivityId||""}),e.dispatchSetSkillMapCompleted(e.map.mapId),e.dispatchShowCompletionModal(e.map.mapId,e.selectedActivityId)}),400)}},{key:"render",value:function(){var e=this,t=this.props,a=t.unit,r=t.items,n=t.paths,c=t.map,o=t.user,s=t.selectedActivityId,l=t.pageSourceUrl,u=t.theme;return i.createElement("g",{className:"skill-graph"},i.createElement("g",{opacity:u.pathOpacity},n.map((function(e,t){return i.createElement(ca,{key:"graph-activity-".concat(t),strokeWidth:3*a,color:u.strokeColor,points:e.points})})),n.map((function(e,t){return i.createElement(ca,{key:"graph-activity-".concat(t),strokeWidth:3*a-4,color:u.pathColor,points:e.points})}))),r.map((function(t,r){return i.createElement(ia,{key:"graph-activity-".concat(r),theme:u,kind:t.activity.kind,activityId:t.activity.activityId,position:t.position,width:5*a,selected:t.activity.activityId===s,onItemSelect:e.onItemSelect,onItemDoubleClick:e.onItemDoubleClick,status:Se(o,l,c,t.activity.activityId).status})})))}}]),a}(i.Component),sa={dispatchChangeSelectedItem:function(e,t){return{type:g,mapId:e,activityId:t}},dispatchShowCompletionModal:it,dispatchSetSkillMapCompleted:function(e){return{type:y,mapId:e}},dispatchOpenActivity:et,dispatchShowCarryoverModal:ct},la=Object(l.b)((function(e,t){var a,r,n,i;if(!e)return{};var c=null===(a=e.user)||void 0===a||null===(r=a.mapProgress)||void 0===r?void 0:r[e.pageSourceUrl];return{user:e.user,pageSourceUrl:e.pageSourceUrl,theme:e.theme,selectedActivityId:e.selectedItem&&(null===(n=t.map)||void 0===n?void 0:n.mapId)==e.selectedItem.mapId?e.selectedItem.activityId:void 0,completionState:null==c||null===(i=c[t.map.mapId])||void 0===i?void 0:i.completionState}}),sa)(oa);function ua(e,t){return{x:da(e),y:pa(t)}}function da(e){return 10*(12*e+4)}function pa(e){return 10*(9*e+4)}function fa(e){for(var t=[],a=[e],r={};a.length>0;){var n=a.shift();n&&!r[n.activityId]&&(r[n.activityId]=!0,t.push(n),a=n.next.concat(a))}return t}function ha(e){var t=function(e){for(var t=[],a=[e],r={};a.length>0;){var n=a.shift();n&&!r[n.activityId]&&(r[n.activityId]=!0,t.push(n),a=a.concat(n.next))}return t}(e),a={};return t.forEach((function(e){var t=e.next.slice();e.next.length=0,a[e.activityId]=JSON.parse(JSON.stringify(e)),e.next=t})),Object.keys(a).forEach((function(e){return a[e].next=a[e].nextIds.map((function(e){return a[e]}))})),a[e.activityId]}a(56);var ma=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).onImageLoad=function(e){r.setState({backgroundSize:{width:e.target.naturalWidth,height:e.target.naturalHeight}})},r.state={backgroundSize:{width:0,height:0}},r}return Object(Ke.a)(a,[{key:"render",value:function(){var e=this.props,t=e.graphs,a=e.graphSize,r=e.backgroundImageUrl,n=this.state.backgroundSize,c=0,o=a.width/a.height,s=n.width/n.height,l=r&&n.width>0&&n.height>0,u=Math.max(400,a.height),d=Math.max(600,a.width);l&&(o-s>.05?u=d*(1/s):o-s<-.05&&(d=u*s));var p=Math.max(u-a.height,0)/2,f=Math.max(d-a.width,0)/2;return i.createElement("div",{className:"skill-graph-wrapper"},i.createElement("div",{className:"skill-graph-content ".concat(l?"has-background":"")},i.createElement("div",{className:"skill-graph-activities"},i.createElement("svg",{viewBox:"-".concat(f+40," -").concat(p+40," ").concat(d+80," ").concat(u+80),preserveAspectRatio:"xMidYMid meet"},t.map((function(e,t){return c+=e.height,i.createElement("g",{key:t,transform:"translate(0, ".concat(c-e.height,")")},i.createElement(la,Object.assign({unit:10},e)))})))),r&&i.createElement("div",{className:"skill-graph-background"},i.createElement("img",{src:r,alt:lf("Background Image"),onLoad:this.onImageLoad}))))}}]),a}(i.Component),va=Object(l.b)((function(e,t){if(!e)return{};var a=t.maps.map((function(e){return function(e){var t=[];switch(e.layout){case"manual":t=t.concat(function(e){var t=[],a=fa(ha(e)).filter((function(e){return"layout"!==e.kind}));return a.forEach((function(e){if(t.indexOf(e.activityId)<0){var a,r;t.push(e.activityId),e.depth=(null===(a=e.position)||void 0===a?void 0:a.depth)||0,e.offset=(null===(r=e.position)||void 0===r?void 0:r.offset)||0;var n=[];e.next.forEach((function(t,a){var r,i,c,o=(null===(r=t.position)||void 0===r?void 0:r.depth)||0,s=(null===(i=t.position)||void 0===i?void 0:i.offset)||0,l=[{depth:e.depth,offset:e.offset}];(null===(c=e.edges)||void 0===c?void 0:c[a])&&e.edges[a].forEach((function(e){var t=l[l.length-1];e.depth!==t.depth&&e.offset!==t.offset&&l.push({depth:t.depth,offset:e.offset}),l.push(e)}));var u=l[l.length-1];o!==u.depth&&s!==u.offset&&l.push({depth:u.depth,offset:s}),l.push({depth:o,offset:s}),n.push(l)})),e.edges=n}})),a}(e.root));break;case"ortho":default:t=t.concat(function(e){for(var t=ha(e),a=[t],r={},n={},i=0,c=function(){var e=a.shift();if(e&&!n[e.activityId]){var t;n[e.activityId]=!0;var c=null===(t=e.parents)||void 0===t?void 0:t[0];if(c){var o=r[c.activityId]||{depth:0,offset:0};0==o.depth?(o.depth=1,e.offset=c.offset+o.offset):(i+=1,o.offset=i,e.offset=i),e.depth=c.depth+o.depth,r[c.activityId]=o}else e.depth=0,e.offset=0;var s=e.next.map((function(t){var a=t;return a.parents?a.parents.push(e):a.parents=[e],a}));s.filter((function(e){return n[e.activityId]})).forEach((function(t){(function(e,t){return!(!e.parents||!t.parents||(e.parents.forEach((function(e){t.parents.indexOf(e)>=0&&(a=e)})),!a||1!=Math.abs(a.nextIds.indexOf(e.activityId)-a.nextIds.indexOf(t.activityId))||e.depth!=t.depth));var a})(t,e)||(t.offset+=1,i=Math.max(i,t.offset),t.depth=Math.max(t.depth,e.depth+1))})),a=s.concat(a)}};a.length>0;)c();var o=fa(t).filter((function(e){return"layout"!==e.kind})),s={};return o.forEach((function(e){null==s[e.depth]&&(s[e.depth]=[]),s[e.depth].push(e.offset)})),o.forEach((function(e){var t;if((!e.next||0==e.next.length)&&1==(null===(t=e.parents)||void 0===t?void 0:t.length)){var a=e.parents[0],r=s[e.depth],n=r[r.indexOf(e.offset)-1];(n?e.offset-n:Math.abs(e.depth-a.depth)+Math.abs(e.offset-a.offset))>2&&(e.depth=a.depth,e.offset=(n||a.offset)+1)}})),o.forEach((function(e){if(e.parents){e.edges=[];var t=e.parents.some((function(t){return t.offset==e.offset}))||e.parents.length>2;e.parents.forEach((function(a){var r,n=[{depth:a.depth,offset:a.offset}];if(t){var i=s[e.depth],c=i.indexOf(e.offset),o=e.offset>a.offset&&!(i[c+1]-i[c]<e.offset-a.offset),l=e.offset<a.offset&&!(i[c]-i[c-1]<a.offset-e.offset);o||l?n.push({depth:e.depth,offset:a.offset}):n.push({depth:a.depth,offset:e.offset})}else n.push({depth:a.depth,offset:e.offset});n.push({depth:e.depth,offset:e.offset}),null===(r=e.edges)||void 0===r||r.push(n)}))}})),o}(e.root))}var a,r=0,n=0,i=[],c=[],o=Object(d.a)(t);try{for(o.s();!(a=o.n()).done;){var s=a.value,l=s.depth,u=s.offset;i.push({activity:s,position:ua(l,u)}),s.edges&&s.edges.forEach((function(e){var t=[];e.forEach((function(e){return t.push(ua(e.depth,e.offset))})),c.push({points:t})})),r=Math.max(r,s.depth),n=Math.max(n,s.offset)}}catch(e){o.e(e)}finally{o.f()}var p=da(r)+40,f=pa(n)+40;return{map:e,items:i,paths:c,width:p,height:f}}(e)})),r=(null==a?void 0:a.length)?a.map((function(e){return e.width})).reduce((function(e,t){return Math.max(e,t)})):0,n=(null==a?void 0:a.length)?a.map((function(e){return e.height})).reduce((function(e,t){return e+t})):0;return{graphs:a,graphSize:{width:r,height:n}}}))(ma),ga=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){var e;Object(Ye.a)(this,a);for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(e=t.call.apply(t,[this].concat(n))).handleActionButtonClick=function(){var t=e.props,a=t.status,r=t.mapId,n=t.activityId,i=t.dispatchOpenActivity,c=t.dispatchShowCarryoverModal,o=t.showCodeCarryoverModal;if("locked"!==a)switch(be("skillmap.activity.open",{path:r,activity:n,status:a||""}),a){case"notstarted":o?c(r,n):i(r,n);break;case"completed":case"inprogress":case"restarted":default:i(r,n)}},e.handleRestartButtonClick=function(){var t=e.props,a=t.mapId,r=t.activityId,n=t.status,i=t.dispatchShowRestartActivityWarning;be("skillmap.sidebar.restart",{path:a,activity:r,status:n||""}),i(a,r)},e.handleShareButtonClick=function(){var t=e.props,a=t.mapId,r=t.activityId,n=t.status,i=t.dispatchShowShareModal;be("skillmap.sidebar.share",{path:a,activity:r,status:n||""}),i(a,r)},e.handleSaveToProjectsClick=function(){var t=e.props,a=t.completedHeaderId;be("skillmap.export",{path:t.mapId||"",activity:t.activityId||""}),window.open("".concat(Yt,"#skillmapimport:").concat(a))},e}return Object(Ke.a)(a,[{key:"getActivityActionText",value:function(){switch(this.props.status){case"locked":return lf("LOCKED");case"completed":return lf("VIEW CODE");case"inprogress":case"restarted":return lf("CONTINUE");case"notstarted":default:return lf("START")}}},{key:"isCompleted",value:function(e){return"completed"===e||"restarted"===e}},{key:"render",value:function(){var e=this.props,t=e.status,a=e.completedHeaderId,r=t&&"notstarted"!==t&&"locked"!==t;return"locked"===t?i.createElement("div",null):i.createElement("div",{className:"actions ".concat(a?"grid":"")},i.createElement("div",{className:"action-button",role:"button",onClick:this.handleActionButtonClick},this.getActivityActionText()),r&&i.createElement("div",{className:"action-button",role:"button",onClick:this.handleRestartButtonClick},lf("Restart")),r&&i.createElement("div",{className:"action-button",role:"button",onClick:this.handleShareButtonClick},lf("Share")),a&&i.createElement("div",{className:"action-button",role:"button",onClick:this.handleSaveToProjectsClick},lf("Save to My Projects")))}}]),a}(i.Component),ya={dispatchOpenActivity:et,dispatchShowRestartActivityWarning:function(e,t){return lt({type:"restart-warning",currentMapId:e,currentActivityId:t})},dispatchShowShareModal:ot,dispatchShowCarryoverModal:ct},ba=Object(l.b)((function(e,t){if(!e)return{};var a=t,r=e.maps[a.mapId],n=r.activities[a.activityId];return{showCodeCarryoverModal:Ue(e.user,e.pageSourceUrl,r,n)}}),ya)(ga),ka=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){var e;Object(Ye.a)(this,a);for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(e=t.call.apply(t,[this].concat(n))).handleActionButtonClick=function(){var t=e.props,a=t.status,r=t.mapId,n=t.activityId,i=t.dispatchShowCompletionModal;switch(a){case"locked":break;default:return be("skillmap.sidebar.reward",{path:r,activity:n}),i(r,n)}},e}return Object(Ke.a)(a,[{key:"render",value:function(){return"locked"===this.props.status?i.createElement("div",null):i.createElement("div",{className:"actions"},i.createElement("div",{className:"action-button",role:"button",onClick:this.handleActionButtonClick},lf("Claim Reward")))}}]),a}(i.Component),wa={dispatchOpenActivity:et,dispatchShowCompletionModal:it},Sa=Object(l.b)(null,wa)(ka),Ia=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){return Object(Ye.a)(this,a),t.apply(this,arguments)}return Object(Ke.a)(a,[{key:"render",value:function(){var e=pxt.cloud.cloudStatus[this.props.cloudStatus];return i.createElement("div",{className:"cloud-action"},this.props.signedIn?i.createElement("div",{className:"cloud-indicator"},i.createElement("div",{className:"ui tiny cloudicon xicon ".concat(e.icon),title:e.tooltip,tabIndex:-1}),e.longStatus):i.createElement("div",{className:"sign-in-button",onClick:this.props.dispatchShowLoginModal},lf("Sign in to Save")))}}]),a}(i.Component),xa={dispatchShowLoginModal:st},Ca=Object(l.b)((function(e,t){var a=e.user,r=e.pageSourceUrl,n=e.selectedItem,i="none";if(null==n?void 0:n.activityId){var c,o=null===(c=Oe(a,r,n.mapId,n.activityId))||void 0===c?void 0:c.headerId;o&&(i=e.cloudState&&e.cloudState[o]||i)}else i="synced";return{signedIn:e.auth.signedIn,cloudStatus:i}}),xa)(Ia),Oa=(a(57),function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(){return Object(Ye.a)(this,a),t.apply(this,arguments)}return Object(Ke.a)(a,[{key:"getStatusLabel",value:function(e){switch(e){case"locked":return lf("Locked");case"completed":return lf("Completed");default:return null}}},{key:"getStatusIcon",value:function(e){switch(e){case"locked":return"lock";case"completed":return"check circle";default:return null}}},{key:"render",value:function(){var e=this.props,t=e.mapId,a=e.title,r=e.subtitle,n=e.description,c=e.infoUrl,o=e.imageUrl,s=e.details,l=e.node,u=e.status,d=e.completedHeaderId,p=this.getStatusLabel(u),f=!l,h=l&&!Me(l),m=h&&l.tags||void 0,v=pxt.auth.hasIdentity();return i.createElement("div",{className:"info-panel"},i.createElement("div",{className:"info-panel-image"},o?i.createElement("img",{src:o,alt:lf("Preview of activity content")}):i.createElement("i",{className:"icon image"})),i.createElement("div",{className:"info-panel-content"},r&&i.createElement("div",{className:"info-panel-subtitle"},r),i.createElement("div",{className:"info-panel-title"},a),p&&i.createElement("div",{className:"info-panel-label"},i.createElement("i",{className:"ui icon ".concat(this.getStatusIcon(u))}),i.createElement("span",null,p)),i.createElement("div",{className:"info-panel-description"},n),f&&c&&i.createElement("a",{className:"info-panel-link",href:c,target:"_blank",rel:"noopener noreferrer"},lf("Learning Outcomes")),m&&m.length>0&&i.createElement("div",{className:"info-panel-tags"},m.map((function(e,t){return i.createElement("div",{key:t},e)}))),i.createElement("div",{className:"info-panel-detail"},null==s?void 0:s.map((function(e,t){return i.createElement("div",{key:"detail_".concat(t)},e)}))),i.createElement("div",{className:"tablet-spacer"}),!f&&(h?i.createElement(ba,{mapId:t,activityId:l.activityId,status:u,completedHeaderId:d}):i.createElement(Sa,{mapId:t,activityId:l.activityId,status:u})),v&&i.createElement(Ca,null)))}}]),a}(i.Component)),Ea=Object(l.b)((function(e,t){var a,r,n,i,c=e.user,o=e.pageSourceUrl,s=e.maps,l=e.selectedItem,u=e.infoUrl,d=l&&(null===(a=e.maps[l.mapId])||void 0===a?void 0:a.activities[l.activityId]),p="activity"===(null==d?void 0:d.kind),f=[];if(s)if((null==l?void 0:l.activityId)&&s[l.mapId]){var h=s[l.mapId],m=Se(e.user,e.pageSourceUrl,h,l.activityId),v=m.status,g=m.currentStep,y=m.maxSteps;r=v,i=m.completedHeadedId,p&&(f.push(y?"".concat(g,"/").concat(y," ").concat(lf("Steps")):lf("Not Started")),f.push(p?d.type:"")),h&&(n=h.displayName)}else if(c){var b=Object.keys(s),k=0,w=0,S=0,I=0;b.forEach((function(e){var t=s[e].activities;Object.keys(t).filter((function(e){return"activity"==t[e].kind})).forEach((function(t){return++w&&we(c,o,e,t)&&++k})),Object.keys(t).filter((function(e){return Me(t[e])})).forEach((function(t){return++I&&we(c,o,e,t)&&++S}))})),f.push("".concat(k,"/").concat(w," ").concat(lf("Complete"))),f.push(I?"".concat(S,"/").concat(I," ").concat(lf("Reward(s)")):"")}return{mapId:null==l?void 0:l.mapId,title:(null==d?void 0:d.displayName)||e.title,subtitle:n,description:p?d.description:e.description,infoUrl:u,imageUrl:d?null==d?void 0:d.imageUrl:e.bannerImageUrl,node:d,status:r,details:f,completedHeaderId:i}}))(Oa),ja=a(20);function Na(e){var t=function(e){var t,a=e.split("\n"),r=[],n=null,i=null,c=null,o=[],s=0,l=Object(d.a)(a);try{for(l.s();!(t=l.n()).done;){var u=t.value;if(u.trim()){if(u.startsWith("#")){var p=/^(#+)\s*(.+)$/.exec(u);if(p){y(),n={headerKind:1===p[1].length?"single":2===p[1].length?"double":"triple",header:p[2],attributes:{}},i=null,c=null;continue}}if(n){var f=Da(u),h=u.trim(),m=/^[*-]\s+(?:([^:]+):)?(.*)$/.exec(h);if(!m)continue;if(Math.abs(f-s)>1&&i){if(f>s){var v={key:i,items:[]};o.length?o[o.length-1].items.push(v):(n.listAttributes||(n.listAttributes={}),n.listAttributes[i]=v),i=null,o.push(v)}else{var g=o.pop();i&&c&&(null==g||g.items.push((i+":"+c).trim()),c=null)}s=f}m&&(m[1]?(i&&c&&(o.length?o[o.length-1].items.push((i+":"+c).trim()):n.attributes[i]=c.trim()),i=m[1].toLowerCase(),c=m[2]):i&&(c+=m[2]))}}else c&&(c+="\n")}}catch(e){l.e(e)}finally{l.f()}return y(),r;function y(){n&&(i&&c&&(o.length?o[o.length-1].items.push((i+":"+c).trim()):n.attributes[i]=c.trim()),r.push(n)),o=[]}}(e);(null==t?void 0:t.length)||Ha("Cannot parse content: ".concat(e));for(var a,r=[],n=-1,i=0;i<t.length;i++)"single"===t[i].headerKind?a=Ma(t[i]):"double"===t[i].headerKind&&(n>=0&&r.push(Aa(t[n],t.slice(n+1,i))),n=i);return(n>0||0===r.length)&&r.push(Aa(t[n],t.slice(n+1,t.length))),{maps:r,metadata:a}}function Aa(e,t){var a=function(e){var t={mapId:e.header.toLowerCase(),displayName:e.attributes.name||e.header,description:e.attributes.description,completionUrl:e.attributes.completionurl,prerequisites:[],activities:{},allowCodeCarryover:!e.attributes.allowcodecarryover||!Pa(e.attributes.allowcodecarryover)};if("manual"===e.attributes.layout&&(t.layout="manual"),e.attributes.required){var a,r=e.attributes.required.split(","),n=Object(d.a)(r);try{for(n.s();!(a=n.n()).done;){var i=a.value,c=/^\s*(?:(\d+) +)?(.+)$/.exec(i);c[1]?t.prerequisites.push({type:"tag",tag:c[2].trim(),numberCompleted:parseInt(c[1])}):t.prerequisites.push({type:"map",mapId:c[2].trim()})}}catch(e){n.e(e)}finally{n.f()}}return t}(e),r=t.map(Ua),n=r.filter((function(e){return"activity"===e.kind}));a.allowCodeCarryover&&n.forEach((function(e){void 0===e.allowCodeCarryover&&(e.allowCodeCarryover=!0)})),a.root=r[0];var i,c=Object(d.a)(r);try{for(c.s();!(i=c.n()).done;){var o=i.value;a.activities[o.activityId]&&Ha("Duplicate activity id '".concat(o.activityId,"' in map '").concat(a.mapId,"'")),a.activities[o.activityId]=o}}catch(e){c.e(e)}finally{c.f()}var s,l=Object(d.a)(r);try{for(l.s();!(s=l.n()).done;){var u,p=s.value,h=Object(d.a)(p.nextIds);try{for(h.s();!(u=h.n()).done;){var m=u.value;a.activities[m]||Ha("Unknown activity id '".concat(m,"' in map '").concat(a.mapId,"'")),p.next.push(a.activities[m])}}catch(e){h.e(e)}finally{h.f()}}}catch(e){l.e(e)}finally{l.f()}var v={};!function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r[t.activityId])console.warn("Loop in map '".concat(a.mapId,"' detected"));else{r[t.activityId]=!0,v[t.activityId]=!0;var n,i=Object(d.a)(t.next);try{for(i.s();!(n=i.n()).done;){var c=n.value;e(c,Object(f.a)({},r))}}catch(e){i.e(e)}finally{i.f()}}}(a.root);var g,y=Object(d.a)(r);try{for(y.s();!(g=y.n()).done;){var b=g.value;v[b.activityId]||console.warn("Unreachable activity detected '".concat(b.activityId,"' in map '").concat(a.mapId,"'"))}}catch(e){y.e(e)}finally{y.f()}return a}function Ua(e){var t={activityId:e.header.toLowerCase(),imageUrl:e.attributes.imageurl,next:[],displayName:e.attributes.name||e.header,nextIds:Ba(e.attributes.next)};if(e.attributes.position){var a=e.attributes.position.split(" ");t.position={depth:parseInt(a[0])||0,offset:parseInt(a[1])||0}}if(e.attributes.edges){var r;t.edges=[];var n=Ba(e.attributes.edges,!1,";");null===(r=t.nextIds)||void 0===r||r.forEach((function(e,a){var r,i=Ba(n[a])||[];null===(r=t.edges)||void 0===r||r.push(i.map((function(e){var t=e.split(" ");return{depth:parseInt(t[0])||0,offset:parseInt(t[1])||0}})))}))}return"reward"===e.attributes.kind||"completion"===e.attributes.kind?function(e,t){var a,r,n,i=Object(f.a)(Object(f.a)({},t),{},{kind:e.attributes.kind||"reward"});if(e.attributes.type)switch(e.attributes.type.toLowerCase()){case"certificate":i.rewards||(i.rewards=[]),null===(a=i.rewards)||void 0===a||a.push({type:"certificate",url:e.attributes.url})}if(null===(r=e.listAttributes)||void 0===r?void 0:r.actions){var c,o=[],s=e.listAttributes.actions.items.filter((function(e){return"string"==typeof e})),l=Object(d.a)(s);try{for(l.s();!(c=l.n()).done;){var u=c.value.split(":"),p=Object(ja.a)(u),h=p[0],m=p.slice(1),v=/\s*\[\s*(.*)\s*\](?:\(([^\s]+)\))?/gi.exec(m.join(":")),g=null==v?void 0:v[1],y=null==v?void 0:v[2];switch(h){case"activity":o.push({kind:"activity",label:g,activityId:y});break;case"map":if(y){var b=Ta(y)?"github":Ra(y)?"docs":void 0;b||Ha("URL: ".concat(y," must be to Github or MakeCode documentation")),o.push({kind:"map",label:g,url:"#".concat(b,":").concat(y)})}break;case"tutorial":y&&(Ta(y)||Ra(y)||Ha("URL: ".concat(y," must be to Github or MakeCode documentation")),o.push({kind:"tutorial",label:g,url:"/#tutorial:".concat(y)}));break;case"docs":if(y){var k=(y.startsWith("/")?"":"/")+y;Ra(k)||Ha("URL: ".concat(k," must be to MakeCode documentation")),o.push({kind:"docs",label:g,url:k})}break;case"editor":o.push({kind:"editor",label:g})}}}catch(e){l.e(e)}finally{l.f()}o.length&&(i.actions=o)}if(null===(n=e.listAttributes)||void 0===n?void 0:n.rewards){var w,S=[],I=e.listAttributes.rewards,x=Object(d.a)(I.items);try{for(x.s();!(w=x.n()).done;){var C=w.value;if("string"==typeof C){var O=C.split(":"),E=Object(ja.a)(O),j=E[0],N=E.slice(1);switch(j){case"certificate":S.push({type:"certificate",url:N.join(":").trim()});break;case"completion-badge":S.push({type:"completion-badge",imageUrl:N.join(":").trim()})}}else if("certificate"===C.key){var A,U=C.items.filter((function(e){return"string"==typeof e})),P={type:"certificate"},M=Object(d.a)(U);try{for(M.s();!(A=M.n()).done;){var L=A.value.split(":"),T=Object(ja.a)(L),R=T[0],_=T.slice(1);"url"===R&&(P.url=_.join(":").trim()),"previewurl"!==R&&"preview"!==R||(P.previewUrl=_.join(":").trim())}}catch(e){M.e(e)}finally{M.f()}P.url||Ha("Certificate in activity ".concat(e.header," is missing url attribute")),S.push(P)}else if("completion-badge"===C.key){var B,H=C.items.filter((function(e){return"string"==typeof e})),D={type:"completion-badge"},F=Object(d.a)(H);try{for(F.s();!(B=F.n()).done;){var V=B.value.split(":"),W=Object(ja.a)(V),G=W[0],z=W.slice(1);"imageurl"!==G&&"image"!==G||(D.imageUrl=z.join(":").trim()),"displayname"!==G&&"name"!==G||(D.displayName=z.join(":").trim())}}catch(e){F.e(e)}finally{F.f()}D.imageUrl||Ha("completion-badge in activity ".concat(e.header," is missing imageurl attribute")),S.push(D)}}}catch(e){x.e(e)}finally{x.f()}var q=["completion-badge","certificate"];S.sort((function(e,t){return q.indexOf(e.type)-q.indexOf(t.type)})),S.length&&(i.rewards=S)}return i}(e,t):"layout"===e.attributes.kind?function(e,t){return Object(f.a)(Object(f.a)({},t),{},{kind:"layout",next:[]})}(0,t):function(e,t){var a=Object(f.a)(Object(f.a)({},t),{},{kind:"activity",description:e.attributes.description,url:e.attributes.url,tags:Ba(e.attributes.tags),allowCodeCarryover:!e.attributes.allowcodecarryover||!Pa(e.attributes.allowcodecarryover)});if(e.attributes.type){var r=e.attributes.type.toLowerCase();switch(r){case"tutorial":a.type=r}}if(e.attributes.editor){var n=e.attributes.editor.toLowerCase();switch(n){case"py":case"blocks":case"js":a.editor=n;break;default:a.editor="blocks"}}return a.url||Ha("Activity '".concat(a.activityId,"' is missing attribute 'url'")),a.type||Ha("Activity '".concat(a.activityId,"' is missing attribute 'type'")),a}(e,t)}function Pa(e){if(!e)return!1;switch(e.toLowerCase().trim()){case"0":case"no":case"n":case"off":case"false":return!0;default:return!1}}function Ma(e){var t=e.attributes.primarycolor,a=e.attributes.secondarycolor,r=e.attributes.tertiarycolor,n=e.attributes.highlightcolor,i=e.attributes.unlockednodecolor,c=e.attributes.lockednodecolor,o=e.attributes.completednodecolor;return{title:e.attributes.name||e.header,description:e.attributes.description,infoUrl:_a(e.attributes.infourl),backgroundImageUrl:e.attributes.backgroundurl,bannerImageUrl:e.attributes.bannerurl,alternateSources:Ba(e.attributes.alternatesources),theme:{backgroundColor:r||"var(--body-background-color)",pathColor:t||"#BFBFBF",strokeColor:"#000000",rewardNodeColor:n||"var(--primary-color)",rewardNodeForeground:n?La(n):"#000000",unlockedNodeColor:i||a||"var(--secondary-color)",unlockedNodeForeground:i||a?La(i||a):"#000000",lockedNodeColor:c||t||"#BFBFBF",lockedNodeForeground:c||t?La(c||t):"#000000",completedNodeColor:o||a||"var(--secondary-color)",completedNodeForeground:o||a?La(o||a):"#000000",selectedStrokeColor:n||"var(--primary-color)",pathOpacity:.5}}}function La(e){return e=e.replace("#",""),Number.parseInt(e.slice(0,2),16)+Number.parseInt(e.slice(2,4),16)+Number.parseInt(e.slice(4),16)>382.5?"#000000":"#ffffff"}function Ta(e){return e.match(/^(https?:\/\/)?(www\.)?github\.com\//gi)}function Ra(e){return e.indexOf(".")<0}function _a(e){if(e)return Ta(e)?e.replace(/\?[\s\S]+$/gi,""):Ra(e)?"".concat(e.startsWith("/")?"":"/").concat(e):void Ha("URL: ".concat(e," must be to Github or MakeCode documentation"))}function Ba(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:",";if(!e)return[];var r=e.split(a).map((function(e){return e.trim().toLowerCase()})).filter((function(e){return!!e}));if(!t){var n={};return r.forEach((function(e){return n[e]=e})),Object.keys(n)}return r}function Ha(e){throw e}function Da(e){for(var t=0,a=0;a<e.length;a++)if(" "===e.charAt(a))t++;else{if("\t"!==e.charAt(a))return t;t+=4}return 0}var Fa=a(36),Va=a(13),Wa=a(37);function Ga(e,t){Object(Wa.pushNotificationMessage)({kind:e,text:t,hc:!1})}var za=function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).renderUserProfile=function(){var e,t=r.props,a=t.profile,n=t.preferences,c=r.state,o=c.notification,s=c.modal,l=c.emailSelected;return i.createElement(Zt,{title:(null==a||null===(e=a.idp)||void 0===e?void 0:e.displayName)||"",fullscreen:!0,onClose:r.handleOnClose},i.createElement(Fa.Profile,{user:{profile:a,preferences:n},signOut:r.handleSignout,deleteProfile:r.handleDeleteAccountClick,notification:o,showModalAsync:r.showModalAsync,checkedEmail:l,onClickedEmail:r.handleEmailClick}),s&&i.createElement(Zt,{title:s.header,onClose:r.closeModal,className:s.className},s.jsx))},r.avatarPicUrl=function(){var e,t,a,n,i=r.props.profile;return null!==(e=null==i||null===(t=i.idp)||void 0===t?void 0:t.pictureUrl)&&void 0!==e?e:null==i||null===(a=i.idp)||void 0===a||null===(n=a.picture)||void 0===n?void 0:n.dataUrl},r.getAccountPanel=function(){var e,t,a,n,c,o,s=r.props.profile,l=(null==s||null===(e=s.idp)||void 0===e?void 0:e.provider)&&pxt.auth.identityProvider(null==s||null===(t=s.idp)||void 0===t?void 0:t.provider),u=i.createElement("div",{className:"profile-pic avatar"},i.createElement("img",{src:r.avatarPicUrl(),alt:lf("User")})),d=i.createElement("div",{className:"profile-pic avatar"},i.createElement("span",null,pxt.auth.userInitials(s)));return i.createElement("div",{className:"account panel ui card"},i.createElement("div",{className:"header-text"},i.createElement("label",null,lf("Profile"))),r.avatarPicUrl()?u:d,i.createElement("div",{className:"row-span-two"},i.createElement("label",{className:"title"},lf("Name")),i.createElement("p",{className:"value"},(null==s||null===(a=s.idp)||void 0===a?void 0:a.displayName)||(null==s||null===(n=s.idp)||void 0===n?void 0:n.username))),i.createElement("div",{className:"row-span-two"},i.createElement("label",{className:"title"},lf("Username")),i.createElement("p",{className:"value"},null==s||null===(c=s.idp)||void 0===c?void 0:c.username)),i.createElement("div",{className:"row-span-two"},i.createElement("label",{className:"title"},lf("Provider")),i.createElement("p",{className:"value"},null==l?void 0:l.name)),i.createElement("div",{className:"row-span-two",onClick:r.handleSignout},i.createElement("div",{className:"ui icon button"},i.createElement("span",{className:"xicon ".concat(null==s||null===(o=s.idp)||void 0===o?void 0:o.provider)}),i.createElement("span",null," ",lf("Sign out")," "))),i.createElement("div",{className:"row-span-two"},i.createElement("a",{className:"ui",title:lf("delete profile"),onClick:r.handleDeleteAccountClick},lf("I want to delete my profile")," ")))},r.handleOnClose=function(){r.props.dispatchCloseUserProfile()},r.getFeedbackPanel=function(){return i.createElement("div",{className:"feedback panel ui card"},i.createElement("div",{className:"header-text"},i.createElement("label",null,lf("Feedback"))),i.createElement("div",{className:"row-span-two"},lf("What do you think about the Sign In & Cloud Save feature? Is there something you'd like to change? Did you encounter issues? Please let us know!")),i.createElement("div",{className:"row-span-two"},i.createElement("a",{className:"ui",title:lf("Provide feedback in a from"),href:"https://aka.ms/AAcnpaj",target:"_blank"},i.createElement("i",{className:"icon external alternate"}),lf("Take the Survey"))))},r.handleSignout=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:pxt.tickEvent("skillmap.userprofile.signout"),Et(location.hash);case 2:case"end":return e.stop()}}),e)}))),r.handleDeleteAccountClick=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r.props.dispatchShowDeleteAccountModal();case 1:case"end":return e.stop()}}),e)}))),r.handleEmailClick=function(e){r.setState({emailSelected:Va.CheckboxStatus.Waiting}),function(e){return Ft.apply(this,arguments)}(e).then((function(t){var a,n;(null==t?void 0:t.success)?(n=lf("Settings saved"),pxt.debug(n),Ga("info",n),r.setState({emailSelected:(null===(a=t.res)||void 0===a?void 0:a.email)?Va.CheckboxStatus.Selected:Va.CheckboxStatus.Unselected})):(function(e){pxt.tickEvent("notification.error",{message:e}),Ga("err",e)}(lf("Oops, something went wrong")),r.setState({emailSelected:e?Va.CheckboxStatus.Unselected:Va.CheckboxStatus.Selected}))}))},r.showModalAsync=function(){var e=Object(J.a)($.a.mark((function e(t){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r.setState({modal:t});case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),r.closeModal=function(){r.setState({modal:void 0})},_t().then((function(e){return r.setState({emailSelected:(null==e?void 0:e.email)?Va.CheckboxStatus.Selected:Va.CheckboxStatus.Unselected})})),pxt.targetConfigAsync().then((function(e){return r.setState({notification:e.profileNotification})})),r}return Object(Ke.a)(a,[{key:"render",value:function(){return this.props.showProfile?this.renderUserProfile():i.createElement("div",null)}}]),a}(i.Component),qa={dispatchCloseUserProfile:rt,dispatchShowDeleteAccountModal:function(){return lt({type:"delete-account"})}},Qa=Object(l.b)((function(e,t){return e?{signedIn:e.auth.signedIn,profile:e.auth.profile,showProfile:e.showProfile,preferences:e.auth.preferences}:{}}),qa)(za),Ya=function(){function e(){Object(Ye.a)(this,e),this.sendMessageAsync=void 0}return Object(Ke.a)(e,[{key:"exportCloudProjectsToLocal",value:function(e){return this.sendMessageAsync({type:"pxteditor",action:"convertcloudprojectstolocal",userId:e})}}]),e}(),Ka=function(){function e(){var t=this;Object(Ye.a)(this,e),this.promise_=void 0,this.resources=void 0,this.appMounted=void 0,this.resolve=void 0,this.promise=function(){return t.promise_},this.resources=new Ya,this.promise_=new Promise((function(e){t.resolve=e,t.checkComplete()}))}return Object(Ke.a)(e,[{key:"setSendMessageAsync",value:function(e){this.resources.sendMessageAsync=e,this.checkComplete()}},{key:"setAppMounted",value:function(){this.appMounted=!0,this.checkComplete()}},{key:"checkComplete",value:function(){var e;this.resolve&&this.appMounted&&this.resources.sendMessageAsync&&(qe.dispatch((e=this.resources,{type:Y,resources:e})),this.resolve(this.resources))}}]),e}(),$a=(a(79),a(80),function(e){Object($e.a)(a,e);var t=Object(Je.a)(a);function a(e){var r;return Object(Ye.a)(this,a),(r=t.call(this,e)).queryFlags={},r.unsubscribeChangeListener=void 0,r.loadedUser=void 0,r.readyPromise=void 0,r.ready=function(){return r.readyPromise.promise()},r.handleHashChange=function(){var e=Object(J.a)($.a.mark((function e(t){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,r.parseHashAsync();case 2:t.stopPropagation(),t.preventDefault();case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),r.handleError=function(e){var t=e||lf("Oops! Couldn't load content, please check the URL and markdown file.");console.error(t),r.setState({error:t})},r.onMakeCodeFrameLoaded=function(){var e=Object(J.a)($.a.mark((function e(t){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r.readyPromise.setSendMessageAsync(t);case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),r.onStoreChange=Object(J.a)($.a.mark((function e(){var t,a;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=qe.getState(),(a=t.user)===r.loadedUser||r.loadedUser&&a.id!==r.loadedUser.id){e.next=6;break}if(!(!r.props.signedIn||r.props.signedIn&&r.state.cloudSyncCheckHasFinished)){e.next=6;break}return e.next=5,mt(a);case 5:r.loadedUser=a;case 6:return e.next=8,r.syncBadgesAsync();case 8:case"end":return e.stop()}}),e)}))),r.state={cloudSyncCheckHasFinished:!1,badgeSyncLock:!1},r.readyPromise=new Ka,window.addEventListener("hashchange",r.handleHashChange),r.cloudSyncCheckAsync(),r}return Object(Ke.a)(a,[{key:"parseHashAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r,n,i,c;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,pxt.targetConfigAsync();case 2:return r=e.sent,i=window.location.hash.replace("#",""),n=i&&(null===(t=r.skillMap)||void 0===t||null===(a=t.pathAliases)||void 0===a?void 0:a[i])?Z(r.skillMap.pathAliases[i]):Z(window.location.hash||(null===(c=r.skillMap)||void 0===c?void 0:c.defaultPath)),e.next=7,this.fetchAndParseSkillMaps(n.cmd,n.arg);case 7:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"initLocalizationAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r,n,i,c,o,s,l,u,d,p;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=pxt.appTarget.appTheme,r=window.location.href,n=!1,i=void 0,/[&?]translate=1/.test(r)&&!pxt.BrowserUtils.isIE()?i=ts.pxtc.Util.TRANSLATION_LOCALE:((c=/(live)?(force)?lang=([a-z]{2,}(-[A-Z]+)?)/i.exec(window.location.href))&&window.location.hash.indexOf(c[0])>=0&&pxt.BrowserUtils.changeHash(window.location.hash.replace(c[0],"")),i=c?c[3]:pxt.BrowserUtils.getCookieLang()||a.defaultLocale||navigator.userLanguage||navigator.language,n=!!c&&!!c[2]),o=pxt.appTarget.appTheme.defaultLocale,n||pxt.Util.isLocaleEnabled(i)||(i=o),s=pxt.appTarget.id,l=pxt.appTarget.versions.pxtCrowdinBranch,u=pxt.appTarget.versions.targetCrowdinBranch,d=null===(t=i)||void 0===t?void 0:t.toLocaleLowerCase(),p=pxt.BrowserUtils.isLocalHostDev()&&(!d||(o?o.toLocaleLowerCase()===d:"en"===d||"en-us"===d)),pxt.BrowserUtils.isPxtElectron()||p||pxt.Util.enableLiveLocalizationUpdates(),e.next=17,Ja({targetId:s,baseUrl:"",code:i,pxtBranch:l,targetBranch:u,force:n});case 17:pxt.Util.isLocaleEnabled(i)&&(pxt.BrowserUtils.setCookieLang(i),pxt.Util.setUserLanguage(i));case 18:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}()},{key:"fetchAndParseSkillMaps",value:function(){var e=Object(J.a)($.a.mark((function e(t,a){var n,i,c,o,s,l,u,d,p,f,h,m,v,g,y,b,k,w=this;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,te(t,a);case 2:if(n=e.sent,i=null==n?void 0:n.text,c=null==n?void 0:n.identifier,o=null==n?void 0:n.status,i&&c&&o)try{"banned"===o?this.handleError(lf("This GitHub repository has been banned.")):(ye(c),this.props.dispatchSetPageSourceUrl(c,o),this.props.dispatchClearMetadata()),l=Na(i),u=l.maps,d=l.metadata,(null==u?void 0:u.length)>0&&(s=u,this.props.dispatchClearSkillMaps(),u.forEach((function(e){w.props.dispatchAddSkillMap(e)}))),d&&(p=d.title,f=d.description,h=d.infoUrl,m=d.backgroundImageUrl,v=d.bannerImageUrl,g=d.theme,y=d.alternateSources,r=p,this.props.dispatchSetPageTitle(p),f&&this.props.dispatchSetPageDescription(f),h&&this.props.dispatchSetPageInfoUrl(h),m&&this.props.dispatchSetPageBackgroundImageUrl(m),v&&this.props.dispatchSetPageBannerImageUrl(v),y&&this.props.dispatchSetPageAlternateUrls(y),g&&this.props.dispatchSetPageTheme(g)),this.setState({error:void 0})}catch(e){this.handleError(e)}else this.setState({error:lf("No content loaded.")});return e.next=9,ft();case 9:return b=e.sent,c&&!b.completedTags[c]&&(b.completedTags[c]={}),this.applyQueryFlags(b,s,c),this.loadedUser=b,this.props.dispatchSetUser(b),e.next=16,_t();case 16:(k=e.sent)&&this.props.dispatchSetUserPreferences(k);case 18:case"end":return e.stop()}}),e,this)})));return function(t,a){return e.apply(this,arguments)}}()},{key:"cloudSyncCheckAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r=this;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.ready();case 2:return t=e.sent,e.next=5,It();case 5:if(e.sent){e.next=9;break}this.setState({cloudSyncCheckHasFinished:!0}),e.next=13;break;case 9:return a=function(){var e=Object(J.a)($.a.mark((function e(){var a,n,i,c,o,s,l,u,d,p,h,m,v,g,y,b,k,w,S,I,x,C,O,E,j;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=qe.getState(),e.next=3,dt();case 3:return n=e.sent,e.next=6,ft();case 6:return i=e.sent,c=Re(n,a.pageSourceUrl,i),e.next=10,t.sendMessageAsync({type:"pxteditor",action:"savelocalprojectstocloud",headerIds:c});case 10:if(!(o=e.sent.resp.headerIdMap)){e.next=27;break}for(s=Object(f.a)(Object(f.a)({},i),{},{mapProgress:{}}),l=Object.keys(n.mapProgress),u=0,d=l;u<d.length;u++)for(p=d[u],s.mapProgress[p]=Object(f.a)({},n.mapProgress[p]),h=Object.keys(n.mapProgress[p]),m=0,v=h;m<v.length;m++)if(g=v[m],!Ee(i,p))for(s.mapProgress[p][g]=Object(f.a)({},n.mapProgress[p][g]),s.completedTags[p]=n.completedTags[p],y={},s.mapProgress[p][g].activityState=y,b=n.mapProgress[p][g].activityState,k=0,w=Object.keys(b);k<w.length;k++)S=w[k],(I=b[S]).headerId?y[S]=Object(f.a)(Object(f.a)({},I),{},{headerId:o[I.headerId]||I.headerId}):Me(a.maps[g].activities[S])&&(y[S]=Object(f.a)({},I));for(x=Object.keys(i.mapProgress),C=0,O=x;C<O.length;C++)E=O[C],Ee(i,E)&&(s.mapProgress[E]=Object(f.a)({},i.mapProgress[E]),s.completedTags[E]=i.completedTags[E]);return r.props.dispatchSetUser(s),e.next=20,mt(s);case 20:return i=s,e.next=23,_t();case 23:return(j=e.sent)&&r.props.dispatchSetUserPreferences(j),e.next=27,r.syncBadgesAsync();case 27:return e.next=29,t.sendMessageAsync({type:"pxteditor",action:"requestprojectcloudstatus",headerIds:Re(i,a.pageSourceUrl)});case 29:r.setState({cloudSyncCheckHasFinished:!0,showingSyncLoader:!1});case 30:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),e.next=13,Promise.race([pxt.U.delay(1e4).then((function(){r.state.cloudSyncCheckHasFinished||r.setState({cloudSyncCheckHasFinished:!0,showingSyncLoader:!1})})),a()]);case 13:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"componentDidMount",value:function(){var e=Object(J.a)($.a.mark((function e(){return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.unsubscribeChangeListener=qe.subscribe(this.onStoreChange),this.queryFlags=ee(),!this.queryFlags.authcallback){e.next=5;break}return e.next=5,Ct(this.queryFlags);case 5:return e.next=7,wt();case 7:return e.next=9,this.initLocalizationAsync();case 9:return e.next=11,this.parseHashAsync();case 11:return this.readyPromise.setAppMounted(),e.next=14,It();case 14:if(e.t0=e.sent,!e.t0){e.next=17;break}e.t0=!this.state.cloudSyncCheckHasFinished;case 17:if(!e.t0){e.next=19;break}this.setState({showingSyncLoader:!0});case 19:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}()},{key:"componentWillUnmount",value:function(){window.removeEventListener("hashchange",this.handleHashChange),this.unsubscribeChangeListener&&this.unsubscribeChangeListener()}},{key:"render",value:function(){var e=this.props,t=e.skillMaps,a=e.activityOpen,r=e.backgroundImageUrl,n=e.theme,i=this.state,o=i.error,s=i.showingSyncLoader,l=Object.keys(t).map((function(e){return t[e]}));return c.a.createElement("div",{className:"app-container ".concat(pxt.appTarget.id)},c.a.createElement(qt,null),s&&c.a.createElement("div",{className:"makecode-frame-loader"},c.a.createElement("img",{src:ge("assets/logo.svg"),alt:lf("MakeCode Logo")}),c.a.createElement("div",{className:"makecode-frame-loader-text"},lf("Saving to cloud..."))),c.a.createElement("div",{className:"skill-map-container ".concat(a?"hidden":""),style:{backgroundColor:n.backgroundColor}},o?c.a.createElement("div",{className:"skill-map-error"},o):c.a.createElement(va,{maps:l,backgroundImageUrl:r}),!o&&c.a.createElement(Ea,null)),c.a.createElement(Xt,{onWorkspaceReady:this.onMakeCodeFrameLoaded}),c.a.createElement(na,null),c.a.createElement(Qa,null))}},{key:"applyQueryFlags",value:function(e,t,a){var r=a||"default";if("true"===this.queryFlags.debugNewUser&&(e.isDebug=!0,e.mapProgress=Object(p.a)({},r,{}),e.completedTags={}),"true"===this.queryFlags.debugCompleted&&(e.isDebug=!0,e.mapProgress=Object(p.a)({},r,{}),t)){var n,i=Object(d.a)(t);try{for(i.s();!(n=i.n()).done;){var c=n.value;e.mapProgress[r][c.mapId]={completionState:"completed",mapId:c.mapId,activityState:{}};for(var o=0,s=Object.keys(c.activities);o<s.length;o++){var l,u=s[o],f=c.activities[u];if(e.mapProgress[r][c.mapId].activityState[f.activityId]?e.mapProgress[r][c.mapId].activityState[f.activityId].isCompleted=!0:e.mapProgress[r][c.mapId].activityState[f.activityId]={activityId:f.activityId,isCompleted:!0},"activity"===f.kind&&(null===(l=f.tags)||void 0===l?void 0:l.length)&&a){var h,m=Object(d.a)(f.tags);try{for(m.s();!(h=m.n()).done;){var v=h.value;e.completedTags[a][v]||(e.completedTags[a][v]=0),e.completedTags[a][v]++}}catch(e){m.e(e)}finally{m.f()}}}}}catch(e){i.e(e)}finally{i.f()}}}},{key:"syncBadgesAsync",value:function(){var e=Object(J.a)($.a.mark((function e(){var t,a,r,n,i,c,o,s,l,u,d,p;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=qe.getState(),a=t.user,r=t.maps,n=t.pageSourceUrl,i=t.pageSourceStatus,!this.props.signedIn||!this.state.cloudSyncCheckHasFinished||"approved"!==i){e.next=24;break}for(c=[],o=0,s=Object.keys(r);o<s.length;o++)u=s[o],(l=c).push.apply(l,Object(Qe.a)(Le(a,n,r[u])));if(!c.length){e.next=24;break}return e.next=7,Tt();case 7:if(e.t0=e.sent,e.t0){e.next=10;break}e.t0={badges:[]};case 10:if(d=e.t0,!(c=c.filter((function(e){return!pxt.auth.hasBadge(d,e)}))).length||this.state.badgeSyncLock){e.next=24;break}return this.setState({badgeSyncLock:!0}),e.prev=14,e.next=17,Ut(c,d.badges);case 17:return e.next=19,_t();case 19:(p=e.sent)&&this.props.dispatchSetUserPreferences(p);case 21:return e.prev=21,this.setState({badgeSyncLock:!1}),e.finish(21);case 24:case"end":return e.stop()}}),e,this,[[14,,21,24]])})));return function(){return e.apply(this,arguments)}}()}]),a}(c.a.Component));function Ja(e){return Xa.apply(this,arguments)}function Xa(){return(Xa=Object(J.a)($.a.mark((function e(t){var a,r,n,i,c,o;return $.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=t.targetId,r=t.baseUrl,n=t.pxtBranch,i=t.targetBranch,t.force,c=t.code,e.next=4,pxt.Util.downloadTranslationsAsync(a,r,c,n,i,pxt.Util.liveLocalizationEnabled(),ts.pxtc.Util.TranslationsKind.SkillMap);case 4:(o=e.sent)&&pxt.Util.setLocalizedStrings(o);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var Za={dispatchAddSkillMap:function(e){return{type:h,map:e}},dispatchClearSkillMaps:function(){return{type:m}},dispatchClearMetadata:function(){return{type:v}},dispatchSetPageTitle:function(e){return{type:E,title:e}},dispatchSetPageDescription:function(e){return{type:j,description:e}},dispatchSetPageInfoUrl:function(e){return{type:N,infoUrl:e}},dispatchSetUser:function(e){return{type:x,user:e}},dispatchSetPageSourceUrl:function(e,t){return{type:M,url:e,status:t}},dispatchSetPageAlternateUrls:function(e){return{type:L,urls:e}},dispatchSetPageBackgroundImageUrl:function(e){return{type:A,backgroundImageUrl:e}},dispatchSetPageBannerImageUrl:function(e){return{type:U,bannerImageUrl:e}},dispatchSetPageTheme:function(e){return{type:P,theme:e}},dispatchSetUserPreferences:function(e){return{type:V,preferences:e}}},er=Object(l.b)((function(e,t){return e?{skillMaps:e.maps,activityOpen:!!e.editorView,backgroundImageUrl:e.backgroundImageUrl,theme:e.theme,signedIn:e.auth.signedIn}:{}}),Za)($a),tr=window.pxtTargetBundle;tr.bundledpkgs={},pxt.setAppTarget(tr),pxt.Cloud.apiRoot="https://www.makecode.com/api/",ve()||pxt.setupWebConfig(window.pxtConfig),s.a.render(c.a.createElement(l.a,{store:qe},c.a.createElement(er,null)),document.getElementById("root"))}},[[81,1,2]]]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pxt-core",
3
- "version": "7.3.24",
3
+ "version": "7.3.25",
4
4
  "description": "Microsoft MakeCode provides Blocks / JavaScript / Python tools and editors",
5
5
  "keywords": [
6
6
  "TypeScript",
@@ -28,5 +28,5 @@
28
28
  <!-- end usabilla live embed code -->
29
29
 
30
30
  <!-- @include thin-footer.html -->
31
- <script>!function(e){function r(r){for(var n,l,i=r[0],a=r[1],p=r[2],c=0,s=[];c<i.length;c++)l=i[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,p||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var a=t[i];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var i=this.webpackJsonpskillsmap=this.webpackJsonpskillsmap||[],a=i.push.bind(i);i.push=r,i=i.slice();for(var p=0;p<i.length;p++)r(i[p]);var f=a;t()}([])</script><script src="/blb/skillmap/js/2.7dd06a3a.chunk.js"></script><script src="/blb/skillmap/js/main.55881627.chunk.js"></script></body>
31
+ <script>!function(e){function r(r){for(var n,l,i=r[0],a=r[1],p=r[2],c=0,s=[];c<i.length;c++)l=i[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,p||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var a=t[i];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var i=this.webpackJsonpskillsmap=this.webpackJsonpskillsmap||[],a=i.push.bind(i);i.push=r,i=i.slice();for(var p=0;p<i.length;p++)r(i[p]);var f=a;t()}([])</script><script src="/blb/skillmap/js/2.7dd06a3a.chunk.js"></script><script src="/blb/skillmap/js/main.7ad07e3a.chunk.js"></script></body>
32
32
  </html>