{"code":"(window.webpackJsonpGUI=window.webpackJsonpGUI||[]).push([[1],{146:function(e,t,a){\"use strict\";var s=a(254),o=a(551),n=a(709);function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function r(e){for(var t=1;t{const t=e._;if(5===t||!t)return e;if(t<2){const t=e[\"tw-project-info\"];t&&t.enabled&&(e[\"block-count\"]={enabled:!0});const a=e[\"tw-interface-customization\"];a&&a.enabled&&(a.removeBackpack&&(e[\"tw-remove-backpack\"]={enabled:!0}),a.removeFeedback&&(e[\"tw-remove-feedback\"]={enabled:!0}))}if(t<3){const t=e[\"hide-flyout\"];t&&t.enabled&&void 0===t.toggled&&(t.toggle=\"hover\")}if(t<4){const t=e[\"editor-devtools\"];t&&!1===t.enabled&&(e[\"find-bar\"]={enabled:!1},e[\"middle-click-popup\"]={enabled:!1})}if(t<5){const t=e.fullscreen;t&&t.hideToolbar&&(!1===t.hoverToolbar?t.toolbar=\"hide\":t.toolbar=\"hover\")}return e})(a);for(const t of Object.keys(a))if(Object.prototype.hasOwnProperty.call(e,t)){const s=a[t];s&&\"object\"==typeof s&&(e[t]=s)}}}}catch(e){}this.store=e}saveToLocalStorage(){if(!this.remote)try{const e={_:5};for(const t of Object.keys(s.a)){const a=this.getAddonStorage(t);Object.keys(a).length>0&&(e[t]=a)}localStorage.setItem(d,JSON.stringify(e))}catch(e){}}getAddonStorage(e){if(this.store[e])return this.store[e];throw new Error(\"Unknown addon store: \".concat(e))}getAddonManifest(e){if(s.a[e])return s.a[e];throw new Error(\"Unknown addon: \".concat(e))}getAddonSettingObject(e,t){if(!e.settings)return null;for(const a of e.settings)if(a.id===t)return a;return null}getAddonEnabled(e){const t=this.getAddonManifest(e);if(t.unsupported)return!1;const a=this.getAddonStorage(e);return Object.prototype.hasOwnProperty.call(a,\"enabled\")?a.enabled:!!t.enabledByDefault}getAddonSetting(e,t){const a=this.getAddonStorage(e),s=this.getAddonManifest(e),o=this.getAddonSettingObject(s,t);if(!o)throw new Error(\"Unknown setting: \".concat(t));return Object.prototype.hasOwnProperty.call(a,t)?a[t]:o.default}getDefaultSettings(e){const t=this.getAddonManifest(e),a={};for(const{id:e,default:s}of t.settings)a[e]=s;return a}setAddonEnabled(e,t){const a=this.getAddonStorage(e),s=this.getAddonManifest(e),o=this.getAddonEnabled(e);if(null===t)t=!!s.enabledByDefault,delete a.enabled;else{if(\"boolean\"!=typeof t)throw new Error(\"Enabled value is invalid.\");a.enabled=t}if(this.saveToLocalStorage(),t!==o){const a=!!t||!!s.dynamicDisable;this.dispatchEvent(new CustomEvent(\"setting-changed\",{detail:{addonId:e,settingId:\"enabled\",reloadRequired:!a,value:t}}))}}setAddonSetting(e,t,a){const s=this.getAddonStorage(e),o=this.getAddonManifest(e),n=this.getAddonSettingObject(o,t),i=this.getAddonSetting(e,t);if(null===a)a=n.default,delete s[t];else{if(\"boolean\"===n.type){if(\"boolean\"!=typeof a)throw new Error(\"Setting value is invalid.\")}else if(\"integer\"===n.type||\"positive_integer\"===n.type){if(\"number\"!=typeof a)throw new Error(\"Setting value is invalid.\")}else if(\"string\"===n.type||\"untranslated\"===n.type);else if(\"color\"===n.type){if(\"string\"!=typeof a)throw new Error(\"Color value is not a string.\");if(9===a.length&&(a=a.substring(0,7)),!/^#[0-9a-f]{6}$/i.test(a))throw new Error(\"Color value is invalid format.\")}else{if(\"select\"!==n.type)throw new Error(\"Setting object is of unknown type\");if(!n.potentialValues.some((e=>e.id===a)))throw new Error(\"Setting value is invalid.\")}s[t]=a}this.saveToLocalStorage(),a!==i&&this.dispatchEvent(new CustomEvent(\"setting-changed\",{detail:{addonId:e,settingId:t,reloadRequired:!n.dynamic,value:a}}))}applyAddonPreset(e,t){const a=this.getAddonManifest(e);for(const{id:s,values:o}of a.presets){if(s!==t)continue;const a=r(r({},this.getDefaultSettings(e)),o);for(const t of Object.keys(a))this.setAddonSetting(e,t,a[t]);return}throw new Error(\"Unknown preset: \".concat(t))}resetAllAddons(){for(const e of Object.keys(s.a))this.resetAddon(e,!0);this.store=this.createEmptyStore(),this.saveToLocalStorage()}resetAddon(e,t){const a=this.getAddonStorage(e);for(const s of Object.keys(a))if(\"enabled\"!==s)try{this.setAddonSetting(e,s,null)}catch(e){}else t&&this.setAddonEnabled(e,null)}parseUrlParameter(e){this.remote=!0;const t=e.split(\",\");for(const e of Object.keys(s.a))this.setAddonEnabled(e,t.includes(e))}export(e){let{theme:t}=e;const a={core:{lightTheme:!t.isDark(),version:\"v1.0.0-tw-\".concat(o.commit)},addons:{}};for(const[e,t]of Object.entries(s.a)){const s=this.getAddonEnabled(e),o={};if(t.settings)for(const{id:a}of t.settings)o[a]=this.getAddonSetting(e,a);a.addons[e]={enabled:s,settings:o}}return a}import(e){for(const[t,a]of Object.entries(e.addons)){if(!Object.prototype.hasOwnProperty.call(s.a,t))continue;const{enabled:e,settings:o}=a;\"boolean\"==typeof e&&this.setAddonEnabled(t,e);for(const[e,a]of Object.entries(o))try{this.setAddonSetting(t,e,a)}catch(e){}}}setStoreWithVersionCheck(e){let{version:t,store:a}=e;t===o.commit&&this.setStore(a)}setStore(e){const t=this.store;for(const a of Object.keys(t)){const s=t[a],o=e[a];if(o&&\"object\"==typeof o&&JSON.stringify(s)!==JSON.stringify(o)){const e=this.getAddonManifest(a),t=!s.enabled&&o.enabled,n=!!e.dynamicDisable&&s.enabled&&!o.enabled;this.store[a]=JSON.parse(JSON.stringify(o)),this.dispatchEvent(new CustomEvent(\"addon-changed\",{detail:{addonId:a,dynamicEnable:t,dynamicDisable:n}}))}}}evaluateCondition(e,t){if(!t)return!0;if(t.addonEnabled){if((a=t.addonEnabled,Array.isArray(a)?a:[a]).every((e=>!this.getAddonEnabled(e))))return!1}var a;if(t.settings)for(const[a,s]of Object.entries(t.settings)){if(!(Array.isArray(s)?s:[s]).includes(this.getAddonSetting(e,a)))return!1}return!0}}const u=new c,m=new URLSearchParams(location.search);m.has(\"addons\")?u.parseUrlParameter(m.get(\"addons\")):u.readLocalStorage();t.a=u},254:function(e,t,a){\"use strict\";var s={editorOnly:!0,noTranslations:!0,name:\"Cat blocks\",description:\"Brings back editor cat hat blocks that were first introduced for April Fools' Day 2020.\",credits:[{name:\"TheColaber\",link:\"https://scratch.mit.edu/users/TheColaber/\"},{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],info:[{type:\"notice\",text:'The \"watch mouse cursor\" setting may impact performance when the editor is open.',id:\"watch\"}],settings:[{id:\"watch\",name:\"Watch mouse cursor\",default:!1,type:\"boolean\"}],tags:[\"theme\"],enabledByDefault:!1};var o={editorOnly:!0,name:\"Developer tools\",description:\"Adds new menu options to the editor: copy/paste blocks, better clean up, and more!\",credits:[{name:\"griffpatch\"}],settings:[{dynamic:!0,name:'Enhance \"Clean up Blocks\"',id:\"enableCleanUpPlus\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Paste blocks at mouse cursor\",id:\"enablePasteBlocksAtMouse\",type:\"boolean\",default:!0}],userscripts:[{url:\"userscript.js\"}],tags:[\"recommended\"],enabledByDefault:!0};var n={editorOnly:!0,name:\"Editor find bar\",description:\"Adds a find bar to find and jump to scripts, costumes and sounds next to the sounds tab. Use Ctrl+Left and Ctrl+Right in the code area to navigate to previous or next visited position after using the find bar.\",info:[{text:'This addon was previously part of the \"developer tools\" addon but has moved here.',id:\"developer-tools\"}],credits:[{name:\"griffpatch\"},{name:\"TheColaber\",link:\"https://scratch.mit.edu/users/thecolaber/\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"userstyle.css\"}],tags:[\"recommended\"],enabledByDefault:!0};var i={editorOnly:!0,name:\"Insert blocks by name\",description:\"Middle or shift-click the code area, or press Ctrl+Space to bring up a block search window. Type block names (or parts of them) and drag them into the code area to add them to your project. The menu can be navigated with the arrow keys and Enter and supports autocompleting with Tab. To prevent the menu from closing, hold Shift while dragging blocks out of it.\",credits:[{name:\"Tacodiva\",link:\"https://scratch.mit.edu/users/Tacodiva7729/\"},{name:\"griffpatch\"},{name:\"TheColaber\",link:\"https://scratch.mit.edu/users/TheColaber/\"},{name:\"CST1229\",link:\"https://scratch.mit.edu/users/CST1229/\"}],tags:[\"recommended\"],enabledByDefault:!0,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"userstyle.css\"}],settings:[{dynamic:!0,name:\"Popup Block Size\",id:\"popup_scale\",type:\"integer\",min:1,max:100,default:48},{dynamic:!0,name:\"Popup Width\",id:\"popup_width\",type:\"integer\",min:1,max:100,default:16},{dynamic:!0,name:\"Popup Maximum Height\",id:\"popup_max_height\",type:\"integer\",min:1,max:100,default:40}],info:[{text:'This addon was previously part of the \"developer tools\" addon but has moved here.',id:\"developer-tools\"}]};var r={name:\"Jump to custom block definition\",description:\"Allows you to jump to a custom block's definition using the middle mouse button or Shift+Click on the block.\",info:[{text:'This addon was previously part of the \"developer tools\" addon but has moved here.',id:\"developer-tools\"}],credits:[{name:\"griffpatch\"}],userscripts:[{url:\"userscript.js\"}],tags:[\"recommended\"],enabledByDefault:!0,dynamicDisable:!0};var l={editorOnly:!0,noTranslations:!0,name:\"Rearrangeable custom block inputs\",description:'Allows rearranging custom block parameters on the \"Make a block\" screen.',credits:[{name:\"Chrome_Cat\",link:\"https://scratch.mit.edu/users/Chrome_Cat/\"}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"arrows.css\"}],settings:[{dynamic:!0,name:\"Insert new inputs after selected input\",id:\"InsertInputsAfter\",type:\"boolean\",default:!1}],tags:[\"recommended\"],enabledByDefault:!0,dynamicDisable:!0};const d=\"undefined\"!=typeof window&&\"ontouchstart\"in window,c=\"undefined\"!=typeof navigator&&navigator.clipboard&&navigator.clipboard.write,u=\"undefined\"!=typeof MediaRecorder,m={editorOnly:!0,name:\"Block dropdown search\",description:\"Allows you to search the options in block dropdowns.\",credits:[{name:\"GarboMuffin\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"userscript.css\"}],tags:[\"recommended\"],enabledByDefault:!0};d&&(m.enabledByDefault=!1);var p=m;var y={editorOnly:!0,name:\"Data category tweaks\",description:'Provides tweaks for the Data (\"Variables\") block category.',credits:[{name:\"GarboMuffin\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,name:\"Separate List Category\",id:\"separateListCategory\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Separate Sprite-only Variables\",id:\"separateLocalVariables\",type:\"boolean\",default:!1},{dynamic:!0,name:\"Move data blocks above variables list\",id:\"moveReportersDown\",type:\"boolean\",default:!1}],tags:[\"recommended\"],enabledByDefault:!1};var h={editorOnly:!0,name:\"Block palette category icons\",description:\"Adds icons inside the colored circles that identify block categories.\",tags:[\"theme\"],enabledByDefault:!1,dynamicDisable:!0,userstyles:[{url:\"userstyle.css\"}],credits:[{name:\"--Explosion--\",link:\"https://scratch.mit.edu/users/--Explosion--/\"},{name:\"RedGuy7\",link:\"https://scratch.mit.edu/users/RedGuy7/\"}]};var b={editorOnly:!0,noTranslations:!0,name:\"Auto-hiding block palette\",description:'Hides the block palette unless you\\'re hovering over it. Click the lock icon to lock it in place temporarily. Or use the \"category click\" mode to show/hide it when you click a block category.',credits:[{name:\"TheColaber\",link:\"https://scratch.mit.edu/users/TheColaber/\"},{name:\"Maximouse\",link:\"https://scratch.mit.edu/users/Maximouse/\"}],info:[{text:'\"Palette area hover\" mode only extends the viewing area. If you want to be able to drag blocks into that area without them getting trashed, use one of the other modes.',id:\"hoverExplanation\"}],dynamicDisable:!0,customCssVariables:[{name:\"lockDisplay\",value:{type:\"map\",source:{type:\"settingValue\",settingId:\"toggle\"},options:{hover:\"flex\",cathover:\"flex\",category:\"none\"}}},{name:\"placeholderDisplay\",value:{type:\"map\",source:{type:\"settingValue\",settingId:\"toggle\"},options:{hover:\"block\",cathover:\"none\",category:\"none\"}}}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],settings:[{dynamic:!0,name:\"Toggle on...\",id:\"toggle\",type:\"select\",potentialValues:[{id:\"hover\",name:\"Palette area hover\"},{id:\"cathover\",name:\"Category hover\"},{id:\"category\",name:\"Category click\"}],default:\"cathover\"},{dynamic:!0,name:\"Animation speed\",id:\"speed\",type:\"select\",potentialValues:[{id:\"none\",name:\"Instant\"},{id:\"short\",name:\"Quick\"},{id:\"default\",name:\"Default\"},{id:\"long\",name:\"Slow\"}],default:\"default\"},{name:\"Open by default\",id:\"lockLoad\",type:\"boolean\",default:!1}],tags:[\"recommended\"]};const f={name:\"Project video recorder\",description:'Adds a \"start recording\" button to the editor menu bar that allows you to record the project\\'s stage.',tags:[\"recommended\"],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],enabledByDefault:!1};u||(f.unsupported=!0);var g=f;var k={noTranslations:!0,name:\"File drag and drop\",description:'Lets you drag images and sounds from your file manager into the sprite pane or costume/sound list. You can also drag text files into lists or \"ask and wait\" question inputs.',credits:[{name:\"Sheep_maker\"}],userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,id:\"use-hd-upload\",name:\"Use HD uploads\",type:\"boolean\",default:!1,if:{addonEnabled:\"better-img-uploads\"}}],dynamicDisable:!0,tags:[\"recommended\"],enabledByDefault:!0};var v={editorOnly:!0,name:\"Debugger\",description:'Adds a new \"debugger\" window to the editor. Allows for logging into the \"Logs\" tab of the debugger window using the \"log\", \"warn\" and \"error\" blocks. The \"breakpoint\" block will pause the project when executed. All running stacks of blocks can be viewed in the \"Threads\" tab of the debugger window, and when paused the \"Step\" button can be used to execute the next block. A graph of frames per second and number of clones can be viewed in the \"Performance\" tab.',credits:[{name:\"Tacodiva\",link:\"https://scratch.mit.edu/users/Tacodiva7729/\"},{name:\"GarboMuffin\"},{name:\"GrahamSH\"},{name:\"TheColaber\"},{name:\"retronbv\"}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],settings:[{dynamic:!0,name:\"Clear logs on green flag\",id:\"log_clear_greenflag\",type:\"boolean\",default:!1},{dynamic:!0,name:\"Log green flag clicks\",id:\"log_greenflag\",type:\"boolean\",default:!1},{dynamic:!0,name:\"Log clone creation\",id:\"log_clone_create\",type:\"boolean\",default:!1},{name:\"Log when clone limit exceeded\",id:\"log_failed_clone_creation\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Log broadcasts\",id:\"log_broadcasts\",type:\"boolean\",default:!1},{name:\"Log when max list length exceeded\",id:\"log_max_list_length\",type:\"boolean\",default:!0},{name:\"Log invalid cloud variable values\",id:\"log_invalid_cloud_data\",type:\"boolean\",default:!1},{name:\"Animated graphs (may affect performance)\",id:\"fancy_graphs\",type:\"boolean\",default:!1}],tags:[]};var w={name:\"Pause button\",description:\"Adds a button to pause the project next to the green flag.\",info:[{text:\"The project can also be paused with Alt+X (Option+X on macOS).\",id:\"keybind\"}],credits:[{name:\"Jeffalo\"},{name:\"GarboMuffin\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],tags:[\"recommended\"],enabledByDefault:!0};var D={noTranslations:!0,name:\"Muted project player mode\",description:\"Ctrl+Click the green flag to mute/unmute the project.\",info:[{text:\"On macOS, use the Cmd key instead of the Ctrl key.\",id:\"macOS\"}],credits:[{name:\"TheColaber\",link:\"https://scratch.mit.edu/users/TheColaber/\"}],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0,enabledByDefault:!0,tags:[\"recommended\"]};var S={noTranslations:!0,name:\"Project volume slider\",description:\"Adds a volume slider next to the green flag controls.\",credits:[{name:\"samq64\",link:\"https://scratch.mit.edu/users/samq64/\"},{name:\"GarboMuffin\"},{name:\"DNin01\"}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"userstyle.css\"},{url:\"hover.css\",if:{settings:{always:!1}}}],settings:[{name:\"Default volume\",id:\"defVol\",type:\"integer\",min:0,max:100,default:100},{name:\"Always show slider\",id:\"always\",type:\"boolean\",default:!1}],dynamicDisable:!0,tags:[\"recommended\"]};var C={editorOnly:!0,name:\"Clone counter\",description:\"Adds a counter above the stage in the editor which shows the total amount of clones.\",credits:[{name:\"Jeffalo\"},{name:\"OregSam\",link:\"https://scratch.mit.edu/users/simiagain/\"},{name:\"DNin01\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],settings:[{dynamic:!0,id:\"projectpage\",name:\"Show on project page\",default:!1,type:\"boolean\"},{dynamic:!0,id:\"showicononly\",name:\"Show icon only\",default:!1,type:\"boolean\"}],tags:[\"recommended\"],enabledByDefault:!1};var x={editorOnly:!0,noTranslations:!0,name:\"Mouse position display\",description:\"Displays your mouse x/y position above the stage in the editor.\",credits:[{name:\"Jeffalo\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],tags:[\"recommended\"],enabledByDefault:!1};var T={editorOnly:!0,name:\"Hex color picker\",description:\"Adds hex code inputs to color pickers.\",tags:[\"recommended\"],credits:[{name:\"Richie Bendall\"},{name:\"apple502j\"}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],dynamicDisable:!0,enabledByDefault:!0};var j={editorOnly:!0,name:\"Sprite deletion confirmation\",description:\"Asks if you're sure when deleting a sprite inside a project.\",info:[{text:\"Tip: If you accidentally delete a sprite, costume, or sound, you can undo the deletion by clicking Edit in the menu bar then Restore.\",id:\"restoretip\"}],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0,tags:[\"recommended\"],enabledByDefault:!1};var O={editorOnly:!0,name:\"Block count\",description:'Shows the total number of blocks in a project in the editor menu bar. Previously part of \"sprite and script count\".',tags:[],credits:[{name:\"TheColaber\",link:\"https://scratch.mit.edu/users/TheColaber/\"}],dynamicDisable:!0,userscripts:[{url:\"blockcount.js\"}]};var A={editorOnly:!0,name:\"Onion skinning\",description:\"Shows transparent overlays of previous or next costumes when editing a costume. Controlled by buttons under the costume editor by the zoom buttons.\",credits:[{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],settings:[{id:\"default\",name:\"Enable by default\",type:\"boolean\",default:!1},{id:\"previous\",name:\"Default previous costumes\",type:\"integer\",default:1,min:0,max:100},{id:\"next\",name:\"Default next costumes\",type:\"integer\",default:0,min:0,max:100},{id:\"opacity\",name:\"Opacity (%)\",type:\"integer\",min:0,max:100,default:25},{id:\"opacityStep\",name:\"Opacity Step (%)\",type:\"integer\",min:0,max:100,default:10},{id:\"layering\",name:\"Default layering\",type:\"select\",default:\"front\",potentialValues:[{id:\"front\",name:\"Front\"},{id:\"behind\",name:\"Behind\"}]},{id:\"mode\",name:\"Default mode\",type:\"select\",default:\"merge\",potentialValues:[{id:\"merge\",name:\"Merge images\"},{id:\"tint\",name:\"Color tint\"}]},{name:\"Previous costume tint\",id:\"beforeTint\",type:\"color\",default:\"#FF0000\"},{name:\"Next costume tint\",id:\"afterTint\",type:\"color\",default:\"#0000FF\"}],tags:[\"recommended\"],dynamicDisable:!0,enabledByDefault:!0};var F={name:\"Costume editor snapping\",description:\"Snap objects in the costume editor to bounding boxes and vector nodes.\",tags:[],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"userstyle.css\"}],settings:[{type:\"boolean\",id:\"enable-default\",name:\"Enable by default\",default:!0},{dynamic:!0,type:\"color\",id:\"guide-color\",name:\"Snapping guide color\",default:\"#ff0000\",allowTransparency:!0},{type:\"boolean\",id:\"pageCenter\",name:\"Snap to page center\",default:!0},{type:\"boolean\",id:\"pageAxes\",name:\"Snap to page x and y axes\",default:!0},{type:\"boolean\",id:\"pageEdges\",name:\"Snap to page edges\",default:!0},{type:\"boolean\",id:\"pageCorners\",name:\"Snap to page corners\",default:!1},{type:\"boolean\",id:\"objectEdges\",name:\"Snap to object edges\",default:!0},{type:\"boolean\",id:\"objectCenters\",name:\"Snap to object centers\",default:!0},{type:\"boolean\",id:\"objectMidlines\",name:\"Snap to object midlines\",default:!0},{type:\"boolean\",id:\"objectCorners\",name:\"Snap to object corners\",default:!1},{type:\"boolean\",id:\"boxCenter\",name:\"Snap from selection box center\",default:!0},{type:\"boolean\",id:\"boxCorners\",name:\"Snap from selection box corners\",default:!1},{type:\"boolean\",id:\"boxEdgeMids\",name:\"Snap from selection box edge midpoints\",default:!1},{type:\"positive_integer\",id:\"threshold\",name:\"Snapping distance\",default:10,min:4,max:100}],dynamicDisable:!0};var B={editorOnly:!0,noTranslations:!0,name:\"Customizable default costume editor colors\",description:\"Changes the default colors and outline size used by the costume editor.\",credits:[{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,name:\"Default fill color\",id:\"fill\",type:\"color\",default:\"#9966FF\"},{dynamic:!0,name:\"Default outline color\",id:\"stroke\",type:\"color\",default:\"#000000\"},{dynamic:!0,name:\"Default outline size\",id:\"strokeSize\",type:\"integer\",min:0,max:100,default:4},{dynamic:!0,name:\"Use previous color instead of resetting after switching tools\",id:\"persistence\",type:\"boolean\",default:!0}],tags:[],dynamicDisable:!0,enabledByDefault:!1};const E={editorOnly:!0,noTranslations:!0,name:\"Bitmap images copying\",description:\"Allows you to copy a bitmap image from the costume editor into the system clipboard, so that you can paste it in other websites or software.\",info:[{type:\"notice\",text:'\"Right click → copy\" is not supported. You must press Ctrl+C while a bitmap image is selected.',id:\"norightclick\"}],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0,tags:[],enabledByDefault:!0};c||(E.unsupported=!0);var M=E;var _={editorOnly:!0,name:\"2D color picker\",description:\"Replaces saturation and brightness sliders in the costume editor with a 2D color picker. Hold Shift while dragging the cursor to change the values on a single axis.\",tags:[],credits:[{name:\"Ucrash\"}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],enabledByDefault:!1};var P={editorOnly:!0,noTranslations:!0,enabledByDefault:!0,name:\"Skewing in costume editor\",description:\"Hold Ctrl while scaling an object on its sides to skew it. Hold Alt while skewing an object to skew it from its center.\",info:[{text:\"On macOS, use the Command key instead of the Control key and the Option key instead of the Alt key.\",id:\"useCmdOnMac\"}],credits:[{name:\"CST1229\",link:\"https://scratch.mit.edu/users/CST1229/\"}],tags:[],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0};var z={editorOnly:!0,name:\"HD image uploads\",description:'Adds a new button above the \"upload costume\" button that automatically converts uploaded bitmap images into SVG (vector) images to avoid losing quality.',tags:[\"beta\"],info:[{type:\"notice\",text:\"Avoid using the HD upload button if you plan to edit the image after uploading.\",id:\"notSuitableEdit\"}],credits:[{name:\"ErrorGamer2000\",link:\"https://scratch.mit.edu/users/ErrorGamer2000/\"},{name:\"GarboMuffin\"},{name:\"World_Languages\"},{name:\"SheepTester\",link:\"https://scratch.mit.edu/users/Sheep_maker/\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],settings:[{dynamic:!0,name:\"Image sizing\",id:\"fitting\",type:\"select\",potentialValues:[{id:\"full\",name:\"Original size\"},{id:\"fill\",name:\"Stretch to fill canvas\"},{id:\"fit\",name:\"Shrink to fit canvas\"}],default:\"fit\"}]};var G={editorOnly:!0,noTranslations:!0,enabledByDefault:!0,name:\"Pick colors on stage with eyedropper\",description:\"Allows the eyedropper in the costume editor to also pick colors from the stage.\",credits:[{name:\"GarboMuffin\"}],tags:[],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],dynamicDisable:!0};var V={editorOnly:!0,noTranslations:!0,name:\"Customizable block shape\",description:\"Adjust the padding, corner radius, and notch height of blocks.\",tags:[\"theme\"],credits:[{name:\"SheepTester\",link:\"https://scratch.mit.edu/users/Sheep_maker/\"},{name:\"lisa_wolfgang\",link:\"https://scratch.mit.edu/users/lisa_wolfgang/\"},{name:\"GarboMuffin\",link:\"https://scratch.mit.edu/users/GarboMuffin/\"}],enabledByDefault:!1,dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],info:[{type:\"notice\",text:\"Decreasing the padding size is only visible to you, so when your projects are viewed by other users, your scripts may overlap.\",id:\"paddingWarning\"}],settings:[{dynamic:!0,name:\"Padding size (50-200%)\",id:\"paddingSize\",type:\"integer\",min:50,default:100,max:200},{dynamic:!0,name:\"Corner size (0-300%)\",id:\"cornerSize\",type:\"integer\",min:0,default:100,max:300},{dynamic:!0,name:\"Notch height (0-150%)\",id:\"notchSize\",type:\"integer\",min:0,default:100,max:150}],presets:[{name:\"3.0 Blocks\",id:\"default3\",description:\"The regular appearance of Scratch 3.0 blocks\",values:{paddingSize:100,cornerSize:100,notchSize:100}},{name:\"2.0 Blocks\",id:\"default2\",description:\"An appearance similar to Scratch 2.0 blocks\",values:{paddingSize:70,cornerSize:150,notchSize:75}},{name:\"3.0 Flat\",id:\"flat3\",description:\"Scratch 3.0 blocks with notches and corners removed\",values:{paddingSize:100,cornerSize:0,notchSize:0}},{name:\"2.0 Flat\",id:\"flat2\",description:\"Scratch 2.0 blocks with notches and corners removed\",values:{paddingSize:70,cornerSize:0,notchSize:0}}]};var I={editorOnly:!0,noTranslations:!0,name:\"Square block inputs\",description:\"Makes certain block input types (such as text or color) rectangular instead of round, like in Scratch 2.0.\",credits:[{name:\"CST1229\",link:\"https://scratch.mit.edu/users/CST1229/\"}],tags:[\"theme\"],userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,name:\"Text inputs\",id:\"text\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Color inputs\",id:\"color\",type:\"boolean\",default:!0},{name:\"Number inputs\",id:\"number\",type:\"boolean\",default:!1}],dynamicDisable:!0};var L={editorOnly:!0,noTranslations:!0,name:\"Alternating nested block colors\",description:\"Makes blocks of the same category alternate between lighter and darker shades when nested inside each other. This is also known as zebra striping.\",credits:[{name:\"CST1229\",link:\"https://scratch.mit.edu/users/CST1229/\"},{name:\"GarboMuffin\"},{name:\"TheColaber\",link:\"https://scratch.mit.edu/users/thecolaber\"}],tags:[],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"userstyle.css\"}],settings:[{dynamic:!0,name:\"Shade\",id:\"shade\",type:\"select\",potentialValues:[{name:\"Lighter\",id:\"lighter\"},{name:\"Darker\",id:\"darker\"}],default:\"lighter\"},{dynamic:!0,name:\"Intensity (0-100%)\",id:\"intensity\",type:\"integer\",min:0,default:20,max:100}],customCssVariables:[{name:\"shadeNumber\",value:{type:\"map\",source:{type:\"settingValue\",settingId:\"shade\"},options:{lighter:\"1\",darker:\"-1\"}}}],dynamicDisable:!0};var R={editorOnly:!0,noTranslations:!0,name:\"Compact editor\",description:\"Decreases the size of buttons, input fields, the menu bar, and other elements in the editor, making more space for components such as the code area, the costume editor, and costume previews, as was the case in Scratch 2.0.\",tags:[\"theme\",\"beta\"],credits:[{name:\"lisa_wolfgang\",link:\"https://scratch.mit.edu/users/lisa_wolfgang/\"},{name:\"Maximouse\",link:\"https://scratch.mit.edu/users/Maximouse/\"}],info:[{id:\"hide-icons-update\",text:'To hide menu bar icons, use the \"Customizable menu bar\" addon.'}],userstyles:[{url:\"userstyle.css\"},{url:\"hide-labels.css\",if:{settings:{hideLabels:!0}}},{url:\"sprite-properties.css\",if:{addonEnabled:[\"sprite-properties\"]}}],userscripts:[{url:\"userscript.js\"}],settings:[{id:\"hideLabels\",type:\"boolean\",name:\"Hide button labels in costume and sound editor\",default:!0}],dynamicDisable:!0,enabledByDefault:!1};var N={name:\"Customizable editor menu bar\",description:\"Allows you to hide specific editor menu bar items or remove their labels or icons.\",credits:[{name:\"philipp2007\"},{name:\"CST1229\",link:\"https://scratch.mit.edu/users/CST1229/\"},{name:\"lisa_wolfgang\",link:\"https://scratch.mit.edu/users/lisa_wolfgang/\"}],info:[{type:\"notice\",id:\"small-screens\",text:\"The text labels may be automatically replaced by icons on smaller windows.\"}],tags:[],settings:[{dynamic:!0,name:\"Show menu...\",id:\"menu-labels\",type:\"select\",potentialValues:[{name:\"Icons and labels\",id:\"both\"},{name:\"Icons only\",id:\"icons\"},{name:\"Labels only\",id:\"labels\"}],default:\"both\"}],userstyles:[{url:\"menu-icons.css\",if:{settings:{\"menu-labels\":\"icons\"}}},{url:\"menu-labels.css\",if:{settings:{\"menu-labels\":\"labels\"}}}],dynamicDisable:!0,enabledByDefault:!1};var H={editorOnly:!0,noTranslations:!0,name:\"Customizable block colors\",description:\"Edit block colors for each category in the editor.\",credits:[{name:\"NitroCipher/ZenithRogue\"},{name:\"TheColaber\",link:\"https://scratch.mit.edu/users/TheColaber/\"},{name:\"DNin01\"}],customCssVariables:[{name:\"commentText\",value:{type:\"textColor\",source:{type:\"settingValue\",settingId:\"comment-color\"}}},{name:\"commentTextTransparent\",value:{type:\"textColor\",black:\"rgba(0, 0, 0, 0.50)\",white:\"rgba(255, 255, 255, 0.50)\",source:{type:\"settingValue\",settingId:\"comment-color\"}}},{name:\"commentBorder\",value:{type:\"multiply\",source:{type:\"settingValue\",settingId:\"comment-color\"},r:.7,g:.7,b:.7}}],dynamicDisable:!0,userscripts:[{url:\"theme3.js\"}],userstyles:[{url:\"theme3.css\"},{url:\"black_text.css\",if:{settings:{text:\"black\"}}},{url:\"color_on_white.css\",if:{settings:{text:\"colorOnWhite\"}}},{url:\"color_on_black.css\",if:{settings:{text:\"colorOnBlack\"}}}],settings:[{dynamic:!0,name:\"motion\",id:\"motion-color\",type:\"color\",default:\"#4C97FF\",allowTransparency:!0},{dynamic:!0,name:\"looks\",id:\"looks-color\",type:\"color\",default:\"#9966FF\",allowTransparency:!0},{dynamic:!0,name:\"sounds\",id:\"sounds-color\",type:\"color\",default:\"#CF63CF\",allowTransparency:!0},{dynamic:!0,name:\"events\",id:\"events-color\",type:\"color\",default:\"#FFBF00\",allowTransparency:!0},{dynamic:!0,name:\"control\",id:\"control-color\",type:\"color\",default:\"#FFAB19\",allowTransparency:!0},{dynamic:!0,name:\"sensing\",id:\"sensing-color\",type:\"color\",default:\"#5CB1D6\",allowTransparency:!0},{dynamic:!0,name:\"operators\",id:\"operators-color\",type:\"color\",default:\"#59C059\",allowTransparency:!0},{dynamic:!0,name:\"variables\",id:\"data-color\",type:\"color\",default:\"#FF8C1A\",allowTransparency:!0},{dynamic:!0,name:\"lists\",id:\"data-lists-color\",type:\"color\",default:\"#FF661A\",allowTransparency:!0},{dynamic:!0,name:\"custom\",id:\"custom-color\",type:\"color\",default:\"#FF6680\",allowTransparency:!0},{dynamic:!0,name:\"extensions\",id:\"Pen-color\",type:\"color\",default:\"#0FBD8C\",allowTransparency:!0},{dynamic:!0,name:\"Addon blocks\",id:\"sa-color\",type:\"color\",default:\"#29BEB8\",allowTransparency:!0,if:{addonEnabled:[\"debugger\"]}},{dynamic:!0,name:\"Block inputs\",id:\"input-color\",type:\"color\",default:\"#FFFFFF\",allowTransparency:!0},{dynamic:!0,name:\"Comments\",id:\"comment-color\",type:\"color\",default:\"#FEF49C\"},{dynamic:!0,name:\"Text color\",id:\"text\",type:\"select\",default:\"white\",potentialValues:[{id:\"white\",name:\"White\"},{id:\"black\",name:\"Black\"},{id:\"colorOnWhite\",name:\"Colored on white background\"},{id:\"colorOnBlack\",name:\"Colored on black background\"}]}],tags:[\"theme\"],enabledByDefault:!1,presets:[{name:\"High contrast\",id:\"contrast\",description:\"Scratch 3.0's high contrast block color palette\",values:{\"motion-color\":\"#80B5FF\",\"looks-color\":\"#CCB3FF\",\"sounds-color\":\"#E19DE1\",\"events-color\":\"#FFD966\",\"control-color\":\"#FFBE4C\",\"sensing-color\":\"#85C4E0\",\"operators-color\":\"#7ECE7E\",\"data-color\":\"#FFA54C\",\"data-lists-color\":\"#FF9966\",\"custom-color\":\"#FF99AA\",\"Pen-color\":\"#13ECAF\",\"sa-color\":\"#34E4D0\",\"comment-color\":\"#FEF49C\",\"input-color\":\"#FFFFFF\",text:\"black\"}},{name:\"Dark\",id:\"new-dark\",description:\"Dark versions of the default colors that look good in dark themes\",values:{\"motion-color\":\"#2461B7\",\"looks-color\":\"#633EAC\",\"sounds-color\":\"#863286\",\"events-color\":\"#AE8500\",\"control-color\":\"#B07200\",\"sensing-color\":\"#468CAF\",\"operators-color\":\"#438C43\",\"data-color\":\"#B46313\",\"data-lists-color\":\"#A84210\",\"custom-color\":\"#973545\",\"Pen-color\":\"#2A7468\",\"sa-color\":\"#2A797C\",\"comment-color\":\"#423F24\",\"input-color\":\"#FFFFFF\",text:\"white\"}},{name:\"Darker\",id:\"dark\",description:\"Even darker versions of the default colors\",values:{\"motion-color\":\"#004099\",\"looks-color\":\"#220066\",\"sounds-color\":\"#752475\",\"events-color\":\"#997300\",\"control-color\":\"#664100\",\"sensing-color\":\"#1f5f7a\",\"operators-color\":\"#235c23\",\"data-color\":\"#b35900\",\"data-lists-color\":\"#993300\",\"custom-color\":\"#99004d\",\"Pen-color\":\"#064734\",\"sa-color\":\"#166966\",\"comment-color\":\"#423f24\",\"input-color\":\"#202020\",text:\"white\"}},{name:\"Scratch 3.0 tweaked\",id:\"tweaks\",description:\"Scratch 3.0's block colors with Events, Control, and Custom blocks that resemble Scratch 2.0's colors\",values:{\"motion-color\":\"#4C97FF\",\"looks-color\":\"#9966FF\",\"sounds-color\":\"#CF63CF\",\"events-color\":\"#DE9E2E\",\"control-color\":\"#FFBF00\",\"sensing-color\":\"#5CB1D6\",\"operators-color\":\"#59C059\",\"data-color\":\"#FF8C1A\",\"data-lists-color\":\"#FF661A\",\"custom-color\":\"#5f49d8\",\"Pen-color\":\"#0FBD8C\",\"sa-color\":\"#29BEB8\",\"comment-color\":\"#FEF49C\",\"input-color\":\"#FFFFFF\",text:\"white\"}},{name:\"Scratch 2.0 colors\",id:\"original\",description:\"The original block colors from Scratch 2.0\",values:{\"motion-color\":\"#4a6cd4\",\"looks-color\":\"#8a55d7\",\"sounds-color\":\"#bb42c3\",\"events-color\":\"#c88330\",\"control-color\":\"#e1a91a\",\"sensing-color\":\"#2ca5e2\",\"operators-color\":\"#5cb712\",\"data-color\":\"#ee7d16\",\"data-lists-color\":\"#cc5b22\",\"custom-color\":\"#632d99\",\"Pen-color\":\"#0e9a6c\",\"sa-color\":\"#29beb8\",\"comment-color\":\"#FFFFD2\",\"input-color\":\"#ffffff\",text:\"white\"}},{name:\"Black\",id:\"black\",description:\"Makes block backgrounds black and borders/text colored\",values:{\"motion-color\":\"#80B5FF\",\"looks-color\":\"#CCB3FF\",\"sounds-color\":\"#E19DE1\",\"events-color\":\"#FFD966\",\"control-color\":\"#FFBE4C\",\"sensing-color\":\"#85C4E0\",\"operators-color\":\"#7ECE7E\",\"data-color\":\"#FFA54C\",\"data-lists-color\":\"#FF9966\",\"custom-color\":\"#FF99AA\",\"Pen-color\":\"#13ECAF\",\"sa-color\":\"#34E4D0\",\"comment-color\":\"#FEF49C\",\"input-color\":\"#202020\",text:\"colorOnBlack\"}}]};var U={name:\"Customizable block text style\",description:\"Lets you customize the style of text on blocks, including adjusting the size, using bold text, or adding a shadow.\",tags:[\"theme\"],credits:[{name:\"Secret-chest\"},{name:\"_nix\",link:\"https://scratch.mit.edu/users/_nix/\"},{name:\"DNin01\"}],userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,name:\"Text size (%)\",id:\"size\",type:\"integer\",min:75,max:200,default:100},{dynamic:!0,name:\"Bold text\",id:\"bold\",type:\"boolean\",default:!1},{dynamic:!0,name:\"Shadow under text\",id:\"shadow\",type:\"boolean\",default:!1}],dynamicDisable:!0,enabledByDefault:!1};var W={editorOnly:!0,noTranslations:!0,name:\"Colored context menus\",description:\"Makes block right click context menus colorful.\",credits:[{name:\"GarboMuffin\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"userscript.css\"}],tags:[\"theme\"],enabledByDefault:!1};var J={noTranslations:!0,name:\"Display stage on left side\",description:\"Moves the stage to the left side of the editor, like in Scratch 2.0.\",info:[{id:\"reverseOrder\",text:'To change the position of buttons above the stage, use the \"reverse order of project controls\" addon.'}],credits:[{name:\"NitroCipher/ZenithRogue\"}],userscripts:[{url:\"fix-share-the-love.js\"}],dynamicDisable:!0,userstyles:[{url:\"stageleft.css\"}],tags:[\"theme\"],enabledByDefault:!1};var K={name:\"Reverse order of project controls\",description:\"Moves the green flag and stop buttons to the right and the full screen button to the left, like in Scratch 2.0.\",tags:[\"theme\"],dynamicDisable:!0,userstyles:[{url:\"userstyle.css\"}]};var q={editorOnly:!0,name:\"Variable manager\",description:'Adds a tab next to \"sounds\" in the editor for easily updating variables and lists.',credits:[{name:\"Jeffalo\"},{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],dynamicDisable:!0,tags:[],enabledByDefault:!1};var Z={editorOnly:!0,name:\"Search box in sprite pane\",description:\"Adds a search box to the sprite pane to search for sprites by name.\",credits:[{name:\"BarelySmooth\",link:\"https://scratch.mit.edu/users/BarelySmooth/\"},{name:\"GarboMuffin\"}],userstyles:[{url:\"search-bar.css\"}],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0,tags:[],enabledByDefault:!1};var Y={editorOnly:!0,name:\"Collapsing sprite properties\",description:\"Hides the sprite properties panel by default, like in Scratch 2.0. Use the info button on the currently selected sprite or double-click a sprite to show the properties panel again. To re-hide it, use the collapse button in the properties panel or double-click a sprite.\",tags:[\"recommended\"],credits:[{name:\"lisa_wolfgang\",link:\"https://scratch.mit.edu/users/lisa_wolfgang/\"}],userstyles:[{url:\"userstyle.css\"}],userscripts:[{url:\"userscript.js\"}],customCssVariables:[{name:\"transitionDuration\",value:{type:\"map\",source:{type:\"settingValue\",settingId:\"transitionDuration\"},options:{none:\"0s\",short:\"0.15s\",default:\"0.25s\",long:\"0.5s\"}}}],settings:[{dynamic:!0,name:\"Automatically collapse when mouse leaves sprite panel\",id:\"autoCollapse\",type:\"boolean\",default:!1},{dynamic:!0,name:\"Collapse panel by default\",id:\"hideByDefault\",type:\"boolean\",default:!0,if:{settings:{autoCollapse:!1}}},{dynamic:!0,name:\"Animation speed\",id:\"transitionDuration\",type:\"select\",potentialValues:[{id:\"none\",name:\"Instant\"},{id:\"short\",name:\"Quick\"},{id:\"default\",name:\"Default\"},{id:\"long\",name:\"Slow\"}],default:\"default\"}],dynamicDisable:!0,enabledByDefault:!1};var Q={name:\"Gamepad support\",description:\"Interact with projects using a USB or Bluetooth controller/gamepad.\",credits:[{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"},{url:\"gamepadlib.css\"}],settings:[{dynamic:!0,name:\"Hide settings button when no controllers detected\",type:\"boolean\",default:!1,id:\"hide\"}],tags:[],enabledByDefault:!1,dynamicDisable:!0};var X={editorOnly:!0,noTranslations:!0,name:\"Editor sound effects\",description:\"Plays sound effects when you connect or delete blocks.\",credits:[{name:\"GarboMuffin\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],tags:[],enabledByDefault:!1};var $={editorOnly:!0,name:\"Sprite folders\",description:'Adds folders to the sprite pane, as well as costume and sound lists. To create a folder, right click any sprite and click \"create folder\". Click a folder to open or close it. Right click a sprite to see what folders you can move it to, or alternatively drag and drop it into an open folder. This feature works by adding \"[folderName]//\" at the beginning of the names for your sprites.',info:[{type:\"notice\",text:\"Users with this feature enabled will be able to see the folders in your project. Anyone else will see sprite lists normally (no folders).\",id:\"notice-folders-are-public\"}],credits:[{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],tags:[\"recommended\"],enabledByDefault:!0};var ee={editorOnly:!0,name:\"Block switching\",description:\"Right click on a block to switch it to a related block.\",credits:[{name:\"GarboMuffin\"},{name:\"pufferfish101007\",link:\"https://scratch.mit.edu/users/pufferfish101007/\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],tags:[\"recommended\"],settings:[{dynamic:!0,name:\"Motion blocks\",id:\"motion\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Looks blocks\",id:\"looks\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Sound blocks\",id:\"sound\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Event blocks\",id:\"event\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Control blocks\",id:\"control\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Operator blocks\",id:\"operator\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Sensing blocks\",id:\"sensing\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Data blocks\",id:\"data\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Extension blocks\",id:\"extension\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Addon blocks\",id:\"sa\",type:\"boolean\",default:!0,if:{addonEnabled:[\"debugger\"]}},{dynamic:!0,name:\"Custom block parameters\",id:\"customargs\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Shown custom block parameters options\",id:\"customargsmode\",type:\"select\",default:\"defOnly\",potentialValues:[{id:\"defOnly\",name:\"Parameters in own custom block\"},{id:\"all\",name:\"Parameters in all custom blocks in sprite\"}],if:{settings:{customargs:!0}}},{dynamic:!0,name:\"Show option to change block to self\",id:\"noop\",type:\"boolean\",default:!0}],enabledByDefault:!0};var te={editorOnly:!0,noTranslations:!0,name:\"Automatically add extensions\",description:\"Auto-shows music, pen, and other extensions in the block category menu in the editor.\",userscripts:[{url:\"userscript.js\"}],settings:[{name:\"Music\",id:\"music\",type:\"boolean\",default:!0},{name:\"Pen\",id:\"pen\",type:\"boolean\",default:!0},{name:\"Text to Speech\",id:\"text2speech\",type:\"boolean\",default:!1},{name:\"Translate\",id:\"translate\",type:\"boolean\",default:!1}],dynamicDisable:!0,tags:[]};var ae={editorOnly:!0,noTranslations:!0,name:\"Customizable code area zoom\",description:\"Choose custom settings for the minimum, maximum, speed, and start size of the zoom of scripts in the code area, and autohide the controls.\",tags:[],credits:[{name:\"ErrorGamer2000\",link:\"https://scratch.mit.edu/users/ErrorGamer2000/\"}],enabledByDefault:!1,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],settings:[{dynamic:!0,name:\"Maximum Zoom (100-500%)\",id:\"maxZoom\",type:\"integer\",min:100,default:300,max:500},{dynamic:!0,name:\"Minimum Zoom (1-100%)\",id:\"minZoom\",type:\"integer\",min:1,default:30,max:100},{dynamic:!0,name:\"Start Zoom (50-500%)\",id:\"startZoom\",type:\"integer\",min:50,default:68,max:500},{dynamic:!0,name:\"Zoom Speed (50-200%)\",id:\"zoomSpeed\",type:\"integer\",min:50,default:100,max:200},{name:\"Autohide Zoom Controls\",id:\"autohide\",type:\"boolean\",default:!1},{dynamic:!0,name:\"Autohide Animation Speed\",id:\"speed\",type:\"select\",potentialValues:[{id:\"none\",name:\"Instant\"},{id:\"short\",name:\"Quick\"},{id:\"default\",name:\"Default\"},{id:\"long\",name:\"Slow\"}],default:\"default\",if:{settings:{autohide:!0}}}]};var se={editorOnly:!0,name:\"Copy reporter values\",description:\"Adds the option to copy values displayed by variable monitors (from the right click context menu) and block reporter balloons.\",credits:[{name:\"TheKodeToad\"}],tags:[],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],dynamicDisable:!0};var oe={editorOnly:!0,noTranslations:!0,name:\"Customizable new sprite position\",description:\"Change where newly created sprites are placed on the stage.\",credits:[{name:\"pufferfish101007\",link:\"https://scratch.mit.edu/users/pufferfish101007/\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,id:\"x\",name:\"X position\",type:\"integer\",default:0,min:-240,max:240},{dynamic:!0,id:\"y\",name:\"Y position\",type:\"integer\",default:0,min:-180,max:180},{dynamic:!0,id:\"library\",name:\"Place sprites from library at random position\",type:\"boolean\",default:!1},{dynamic:!0,id:\"duplicate\",name:\"Position for duplicated sprites\",type:\"select\",default:\"randomize\",potentialValues:[{id:\"custom\",name:\"Specified x/y position\"},{id:\"keep\",name:\"Same as original sprite\"},{id:\"randomize\",name:\"Random\"}]}],tags:[],enabledByDefault:!1};var ne={editorOnly:!0,name:\"Save blocks as image\",description:\"Right click the code area to export blocks as SVG/PNG images.\",tags:[],credits:[{name:\"summerscar\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],enabledByDefault:!1};var ie={noTranslations:!0,name:\"Remove curved stage border\",description:\"Removes the curved border around the stage, allowing you to see the corners.\",tags:[\"theme\"],credits:[{name:\"Tacodiva\",link:\"https://scratch.mit.edu/users/Tacodiva7729/\"}],enabledByDefault:!1,dynamicDisable:!0,userstyles:[{url:\"remove-borders.css\"}]};var re={editorOnly:!0,noTranslations:!0,name:\"Block transparency\",description:\"Adjust the transparency for blocks in the editor, with separate options for orphaned blocks (those without a hat block at the top) and blocks that are being dragged.\",tags:[],dynamicDisable:!0,credits:[{name:\"ErrorGamer2000\",link:\"https://scratch.mit.edu/users/ErrorGamer2000/\"},{name:\"GarboMuffin\"}],settings:[{dynamic:!0,name:\"Block transparency (%)\",id:\"block\",type:\"integer\",min:0,max:100,default:0},{dynamic:!0,name:\"Orphaned transparency (%)\",id:\"orphan\",type:\"integer\",min:0,max:100,default:25},{dynamic:!0,name:\"Dragged transparency (%)\",id:\"dragged\",type:\"integer\",min:0,max:100,default:25}],userstyles:[{url:\"userstyle.css\"}]};var le={editorOnly:!0,noTranslations:!0,name:\"Paint costume by default\",description:'Changes the default action of \"Choose a Sprite/Costume/Backdrop/Sound\" buttons, which open the library by default.',credits:[{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,id:\"sprite\",name:\"Add sprite\",type:\"select\",potentialValues:[{id:\"library\",name:\"Library\"},{id:\"paint\",name:\"Paint\"},{id:\"surprise\",name:\"Surprise\"},{id:\"upload\",name:\"Upload\"}],default:\"paint\"},{dynamic:!0,id:\"costume\",name:\"Add costume\",type:\"select\",potentialValues:[{id:\"library\",name:\"Library\"},{id:\"paint\",name:\"Paint\"},{id:\"surprise\",name:\"Surprise\"},{id:\"upload\",name:\"Upload\"}],default:\"paint\"},{dynamic:!0,id:\"backdrop\",name:\"Add backdrop\",type:\"select\",potentialValues:[{id:\"library\",name:\"Library\"},{id:\"paint\",name:\"Paint\"},{id:\"surprise\",name:\"Surprise\"},{id:\"upload\",name:\"Upload\"}],default:\"paint\"},{dynamic:!0,id:\"sound\",name:\"Add sound\",type:\"select\",potentialValues:[{id:\"library\",name:\"Library\"},{id:\"record\",name:\"Record\"},{id:\"surprise\",name:\"Surprise\"},{id:\"upload\",name:\"Upload\"}],default:\"library\"}],dynamicDisable:!0,tags:[\"recommended\"],enabledByDefault:!1};var de={editorOnly:!0,noTranslations:!0,name:\"Grab single block with Ctrl key\",description:\"Adds the ability to drag a single block out of the middle of a script (instead of the entire stack attached below it) while holding the Ctrl key.\",info:[{text:\"On macOS, use the Cmd key instead of the Ctrl key.\",id:\"macContextDisabled\"},{text:'If \"flip controls\" is enabled, grabbing blocks individually will be the default behavior. Hold Ctrl to drag the entire stack.',id:\"flipControls\"}],credits:[{name:\"lisa_wolfgang\",link:\"https://scratch.mit.edu/users/lisa_wolfgang/\"},{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,name:\"Flip controls\",id:\"invertDrag\",type:\"boolean\",default:!1}],tags:[],dynamicDisable:!0,enabledByDefault:!0};var ce={editorOnly:!0,noTranslations:!0,name:\"Hide new variables\",description:\"Do not automatically show monitors for newly created variables or lists.\",credits:[{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],tags:[],dynamicDisable:!0};var ue={editorOnly:!0,name:\"Extra key options\",description:'Adds more keys to the \"key () pressed?\" and \"when () key pressed\" block dropdowns, such as enter, dot, comma, and more. These keys will work even for users who do not have this addon.',tags:[],credits:[{name:\"Tacodiva\",link:\"https://scratch.mit.edu/users/Tacodiva7729/\"}],info:[{type:\"notice\",text:'The \"experimental keys\" include equals, slash, semicolon and more. They may not work on all operating systems or keyboard layouts.',id:\"experimentalKeysWarn\"},{type:\"notice\",text:'The \"Shift keys\" include keys which typically require the Shift key and a number key, like hashtag, exclamation mark and more. These keys only work with the \"when () key pressed\" block and do not work on all operating systems or keyboard layouts.',id:\"shiftKeysWarn\"},{type:\"warning\",text:'The \"TurboWarp keys\" will only work in TurboWarp, not in Scratch.',id:\"twKeysWarn\"}],settings:[{dynamic:!0,name:\"Show experimental keys\",id:\"experimentalKeys\",type:\"boolean\",default:!1},{dynamic:!0,name:\"Show Shift keys\",id:\"shiftKeys\",type:\"boolean\",default:!1},{dynamic:!0,name:\"Show TurboWarp keys\",id:\"twKeys\",type:\"boolean\",default:!1}],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0};var me={name:\"Hide delete button\",description:\"Hides delete button (trash can icon) from sprites, costumes and sounds. They can still be deleted using the right click context menu.\",tags:[],info:[{text:\"Tip: If you accidentally delete a sprite, costume, or sound, you can undo the deletion by clicking Edit in the menu bar then Restore.\",id:\"restoretip\"}],dynamicDisable:!0,settings:[{dynamic:!0,name:\"Sprites\",id:\"sprites\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Costumes and backdrops\",id:\"costumes\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Sounds\",id:\"sounds\",type:\"boolean\",default:!0}],userstyles:[{url:\"sprites.css\",if:{settings:{sprites:!0}}},{url:\"costumes.css\",if:{settings:{costumes:!0}}},{url:\"sounds.css\",if:{settings:{sounds:!0}}}]};var pe={editorOnly:!0,noTranslations:!0,name:\"Do not automatically space overlapping scripts\",description:\"Allows scripts to be moved and modified without causing overlapping scripts to move around.\",credits:[{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0,tags:[],enabledByDefault:!1};var ye={editorOnly:!0,noTranslations:!0,name:\"Non-draggable sprites in editor\",description:\"Removes the ability to drag sprites around on the stage in the editor, except those explicitly set as draggable. Hold Shift while dragging a sprite to move it normally.\",credits:[{name:\"Chrome_Cat\",link:\"https://scratch.mit.edu/users/Chrome_Cat/\"},{name:\"GarboMuffin\"},{name:\"Mr_MPH\",link:\"https://scratch.mit.edu/users/Mr_MPH/\"}],userscripts:[{url:\"userscript.js\"}],settings:[{name:\"Allow dragging while project is stopped\",id:\"drag_while_stopped\",type:\"boolean\",default:!1}],tags:[],enabledByDefault:!1,dynamicDisable:!0};var he={enabledByDefault:!0,editorOnly:!0,name:\"Move costume to top or bottom\",description:\"Adds options to the right click context menu for costumes and sounds to move them to the top or the bottom of the list.\",info:[{text:'This addon was previously part of the \"developer tools\" addon but has moved here.',id:\"developer-tools\"}],tags:[],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0};var be={editorOnly:!0,noTranslations:!0,name:\"Move sprite to front layer\",description:\"Shift+Click a sprite within the sprite pane to move it to the front (top layer) of the stage.\",credits:[{name:\"Norbiros\",link:\"https://scratch.mit.edu/users/Norbir/\"},{name:\"s_federici\",link:\"https://scratch.mit.edu/users/s_federici/\"}],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0,tags:[]};var fe={editorOnly:!0,noTranslations:!0,name:\"Do not shift pasted items\",description:\"Paste copied items at their original position instead of shifted slightly in the costume editor.\",info:[{text:\"This behavior can also be achieved without this addon by Alt+Clicking the item.\",id:\"vanilla\"}],credits:[{name:\"GarboMuffin\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],tags:[],enabledByDefault:!1};var ge={editorOnly:!0,noTranslations:!0,name:\"Duplicate script with Alt key\",description:\"Quickly duplicate a script by dragging it while holding the Alt key. Hold Ctrl as well to only duplicate a single block instead of the entire stack attached below it.\",credits:[{name:\"GarboMuffin\"}],info:[{text:\"On macOS, use the Option key instead of the Alt key and Command key instead of the Control key.\",id:\"mac\"}],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0,tags:[],enabledByDefault:!0};var ke={editorOnly:!0,enabledByDefault:!0,name:\"Rename broadcasts\",description:\"Adds an option to rename broadcast messages in the broadcast blocks' dropdowns.\",credits:[{name:\"TheColaber\",link:\"https://scratch.mit.edu/users/TheColaber\"},{name:\"GarboMuffin\"}],tags:[],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0};var ve={editorOnly:!0,name:'Switch variables between \"For all sprites\" and \"For this sprite only\"',description:'Adds more options when renaming an existing variable or list: allows changing between \"For all sprites\" and \"For this sprite only\" and whether variables are stored in the cloud. Also adds a new option when right clicking a variable/list to quickly change its scope.',credits:[{name:\"GarboMuffin\"}],userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],tags:[],dynamicDisable:!0,enabledByDefault:!1};var we={editorOnly:!0,noTranslations:!0,name:\"Editor comment previews\",description:\"Allows you to preview the contents of comments by hovering over collapsed comments and blocks. You can use this to view comments that are off-screen, identify a loop block from the bottom by its preview, fit many long comments in a small space, and more.\",tags:[],credits:[{name:\"lisa_wolfgang\",link:\"https://scratch.mit.edu/users/lisa_wolfgang/\"},{name:\"GarboMuffin\"}],userstyles:[{url:\"userstyle.css\"}],userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,name:\"Hover collapsed comments to preview\",id:\"hover-view\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Hover blocks to preview attached comments\",id:\"hover-view-block\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Hover custom blocks to preview definition comments\",id:\"hover-view-procedure\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Delay duration\",id:\"delay\",type:\"select\",potentialValues:[{name:\"None\",id:\"none\"},{name:\"Short\",id:\"short\"},{name:\"Long\",id:\"long\"}],default:\"short\"},{dynamic:!0,name:\"Follow mouse\",id:\"follow-mouse\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Reduce transparency\",id:\"reduce-transparency\",type:\"boolean\",default:!1},{dynamic:!0,name:\"Reduce animation\",id:\"reduce-animation\",type:\"boolean\",default:!1}],dynamicDisable:!0,enabledByDefault:!0};var De={editorOnly:!0,noTranslations:!0,name:\"Two-column category menu\",description:\"Splits the block category menu into two columns and moves it to the top of the block palette, like in Scratch 2.0.\",credits:[{name:\"TheColaber\",link:\"https://scratch.mit.edu/TheColaber\"}],tags:[\"theme\"],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}]};var Se={editorOnly:!0,noTranslations:!0,name:\"Always show number pad\",description:\"Show Scratch's virtual number pad when editing number fields in blocks on all devices, instead of only touchscreen devices.\",credits:[{name:\"GarboMuffin\"}],info:[{text:'A number pad will show when editing number inputs from blocks such as \"move () steps\".',id:\"explanation\"}],tags:[],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0};var Ce={editorOnly:!0,noTranslations:!0,name:\"Arrow key incrementation in editor\",description:\"Use the up and down arrow keys to increase or decrease number values in numeric input fields such as those in blocks or the sprite properties area.\",tags:[\"recommended\"],userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,name:\"Change on regular key press\",id:\"regular\",type:\"select\",default:\"one\",potentialValues:[{id:\"none\",name:\"None\"},{id:\"hundredth\",name:\"0.01\"},{id:\"tenth\",name:\"0.1\"},{id:\"one\",name:\"1\"},{id:\"ten\",name:\"10\"}],if:{settings:{useCustom:!1}}},{dynamic:!0,name:\"Change on regular key press\",id:\"regularCustom\",type:\"untranslated\",default:\"1\",max:8,if:{settings:{useCustom:!0}}},{dynamic:!0,name:\"Change on Shift+Key\",id:\"shift\",type:\"select\",default:\"ten\",potentialValues:[{id:\"none\",name:\"None\"},{id:\"hundredth\",name:\"0.01\"},{id:\"tenth\",name:\"0.1\"},{id:\"one\",name:\"1\"},{id:\"ten\",name:\"10\"}],if:{settings:{useCustom:!1}}},{dynamic:!0,name:\"Change on Shift+Key\",id:\"shiftCustom\",type:\"untranslated\",default:\"10\",max:8,if:{settings:{useCustom:!0}}},{dynamic:!0,name:\"Change on Alt+Key\",id:\"alt\",type:\"select\",default:\"tenth\",potentialValues:[{id:\"none\",name:\"None\"},{id:\"hundredth\",name:\"0.01\"},{id:\"tenth\",name:\"0.1\"},{id:\"one\",name:\"1\"},{id:\"ten\",name:\"10\"}],if:{settings:{useCustom:!1}}},{dynamic:!0,name:\"Change on Alt+Key\",id:\"altCustom\",type:\"untranslated\",default:\"0.1\",max:8,if:{settings:{useCustom:!0}}},{dynamic:!0,name:\"Use custom values\",id:\"useCustom\",type:\"boolean\",default:!1}],credits:[{name:\"mybearworld\",link:\"https://scratch.mit.edu/users/mybearworld/\"},{name:\"World_Languages\"}],dynamicDisable:!0};var xe={name:\"Multiple rows in backpack\",description:\"Arranges the contents of the editor backpack into an expandable two-way grid, similar to the costume library and increases the size of certain thumbnails.\",credits:[{name:\"pumpkinhasapatch\"}],tags:[\"new\"],enabledByDefault:!1,settings:[{dynamic:!0,name:\"Number of displayed rows\",id:\"rows\",type:\"integer\",min:1,max:4,default:2},{dynamic:!0,name:\"Larger costume and script thumbnails\",id:\"upscale\",type:\"boolean\",default:!0}],customCssVariables:[{name:\"imgsize\",value:{type:\"ternary\",source:{type:\"settingValue\",settingId:\"upscale\"},true:\"95%\",false:\"32px\"}},{name:\"bgcolor\",value:{type:\"ternary\",source:{type:\"settingValue\",settingId:\"upscale\"},true:\"var(--ui-white)\",false:\"transparent\"}}],userstyles:[{url:\"backpack.css\"}],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0};var Te={editorOnly:!0,noTranslations:!0,name:\"Snap scripts to grid\",description:\"Drag a script to automatically align its position to the code area dots.\",tags:[],credits:[{name:\"CST1229\",link:\"https://scratch.mit.edu/users/CST1229/\"},{name:\"TheColaber\",link:\"https://scratch.mit.edu/users/TheColaber/\"},{name:\"lisa_wolfgang\",link:\"https://scratch.mit.edu/users/lisa_wolfgang/\"}],userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,name:\"Grid size (px)\",id:\"grid\",type:\"integer\",min:1,default:40}],presets:[{name:\"Whole-block\",id:\"whole-block\",values:{grid:48}},{name:\"Half-block\",id:\"half-block\",values:{grid:24}},{name:\"Default\",id:\"default\",values:{grid:40}}],dynamicDisable:!0,enabledByDefault:!1};var je={name:\"Enhanced full screen\",description:\"Fixes some undesired effects in the project player's full screen mode, opens it in your browser's full screen mode, and hides the green flag toolbar.\",credits:[{name:\"lisa_wolfgang\",link:\"https://scratch.mit.edu/users/lisa_wolfgang/\"}],info:[{type:\"notice\",text:\"If you choose to never show the toolbar, remember that you can use the Esc key to exit the project player's full screen mode.\",id:\"hideToolbarNotice\"}],settings:[{dynamic:!0,name:\"Open full screen project player in full screen browser mode\",id:\"browserFullscreen\",type:\"boolean\",default:!0},{dynamic:!0,name:\"Toolbar visibility\",id:\"toolbar\",type:\"select\",potentialValues:[{name:\"Always\",id:\"show\"},{name:\"When hovered\",id:\"hover\"},{name:\"Never\",id:\"hide\"}],default:\"show\"}],dynamicDisable:!0,userstyles:[{url:\"hideOverflow.css\"},{url:\"removeBorder.css\"},{url:\"resizeWindow.css\",if:{settings:{toolbar:\"show\"}}},{url:\"resizeWindow_noToolbar.css\",if:{settings:{toolbar:[\"hide\",\"hover\"]}}},{url:\"hideToolbar.css\",if:{settings:{toolbar:[\"hide\",\"hover\"]}}}],userscripts:[{url:\"userscript.js\"}],tags:[\"beta\"],enabledByDefault:!1};var Oe={editorOnly:!0,name:\"Hide stage and sprite pane\",description:'Adds a button next to the \"small stage\" and \"large stage\" buttons that hides the stage and the sprite pane, making the code area much larger.',credits:[{name:\"Maximouse\",link:\"https://scratch.mit.edu/users/Maximouse/\"}],dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],userstyles:[{url:\"style.css\"}],tags:[]};var Ae={editorOnly:!0,noTranslations:!0,name:\"Keep block comment connections straight\",description:\"Forces block comments to always be connected to their source block by a horizontal straight line, not at an angle.\",tags:[],credits:[{name:\"lisa_wolfgang\",link:\"https://scratch.mit.edu/users/lisa_wolfgang/\"}],userscripts:[{url:\"userscript.js\"}],dynamicDisable:!0,enabledByDefault:!1};var Fe={noTranslations:!0,name:\"Hide backpack\",description:\"Removes the backpack feature from the editor.\",userscripts:[{url:\"remove-backpack.js\"}],userstyles:[{url:\"remove-backpack.css\"}],tags:[\"danger\"],dynamicDisable:!0,enabledByDefault:!1};var Be={noTranslations:!0,name:\"Remove feedback button\",description:\"Removes the feedback button from the menu bar.\",userstyles:[{url:\"remove-feedback.css\"}],tags:[\"danger\"],dynamicDisable:!0,enabledByDefault:!1};var Ee={noTranslations:!0,name:\"Disable vibrations\",description:\"Prevents the vibration and gamepad extensions from causing vibrations.\",userscripts:[{url:\"userscript.js\"}],tags:[\"danger\"],enabledByDefault:!1},Me=a(37);const _e={noTranslations:!0,name:\"Disable cloud variables\",description:\"Disable cloud variables by default. You can still re-enable them using the Edit > Enable cloud variables menu.\",userscripts:[{url:\"userscript.js\"}],tags:[\"danger\"],enabledByDefault:!1};Object(Me.b)()&&(_e.unsupported=!0);var Pe=_e;var ze={editorOnly:!0,noTranslations:!0,name:\"Disable compiler in editor\",description:'Turns off the compiler by default in the script editor. It can still be manually enabled through the \"Advanced\" menu bar button.',userscripts:[{url:\"userscript.js\"}],tags:[\"danger\"],enabledByDefault:!1};var Ge={editorOnly:!0,noTranslations:!0,noCompiler:!0,name:\"Running block border\",description:\"Adds a colored highlight to the blocks that are currently being executed in a project.\",dynamicDisable:!0,userscripts:[{url:\"userscript.js\"}],settings:[{dynamic:!0,name:\"Highlight color\",id:\"highlight-color\",type:\"color\",default:\"#0000ff\"}],tags:[],enabledByDefault:!1};t.a={\"cat-blocks\":s,\"editor-devtools\":o,\"find-bar\":n,\"middle-click-popup\":i,\"jump-to-def\":r,\"reorder-custom-inputs\":l,\"editor-searchable-dropdowns\":p,\"data-category-tweaks-v2\":y,\"block-palette-icons\":h,\"hide-flyout\":b,mediarecorder:g,\"drag-drop\":k,debugger:v,pause:w,\"mute-project\":D,\"vol-slider\":S,clones:C,\"mouse-pos\":x,\"color-picker\":T,\"remove-sprite-confirm\":j,\"block-count\":O,\"onion-skinning\":A,\"paint-snap\":F,\"default-costume-editor-color\":B,\"bitmap-copy\":M,\"2d-color-picker\":_,\"paint-skew\":P,\"better-img-uploads\":z,\"pick-colors-from-stage\":G,\"custom-block-shape\":V,\"editor-square-inputs\":I,\"zebra-striping\":L,\"editor-compact\":R,\"custom-menu-bar\":N,\"editor-theme3\":H,\"custom-block-text\":U,\"editor-colored-context-menus\":W,\"editor-stage-left\":J,\"editor-buttons-reverse-order\":K,\"variable-manager\":q,\"search-sprites\":Z,\"sprite-properties\":Y,gamepad:Q,\"editor-sounds\":X,folders:$,\"block-switching\":ee,\"load-extensions\":te,\"custom-zoom\":ae,\"copy-reporter\":se,\"initialise-sprite-position\":oe,blocks2image:ne,\"remove-curved-stage-border\":ie,\"transparent-orphans\":re,\"paint-by-default\":le,\"block-cherry-picking\":de,\"hide-new-variables\":ce,\"editor-extra-keys\":ue,\"hide-delete-button\":me,\"no-script-bumping\":pe,\"disable-stage-drag-select\":ye,\"move-to-top-bottom\":he,\"move-to-top-layer\":be,\"disable-paste-offset\":fe,\"block-duplicate\":ge,\"rename-broadcasts\":ke,\"swap-local-global\":ve,\"editor-comment-previews\":we,columns:De,\"number-pad\":Se,\"editor-number-arrow-keys\":Ce,\"expanded-backpack\":xe,\"script-snap\":Te,fullscreen:je,\"hide-stage\":Oe,\"tw-straighten-comments\":Ae,\"tw-remove-backpack\":Fe,\"tw-remove-feedback\":Be,\"tw-disable-vibration\":Ee,\"tw-disable-cloud-variables\":Pe,\"tw-disable-compiler\":ze,\"editor-stepping\":Ge}},551:function(e){e.exports=JSON.parse('{\"commit\":\"965a016\"}')},709:function(e,t,a){\"use strict\";t.a=class{constructor(){this._events={}}addEventListener(e,t){this._events[e]||(this._events[e]=[]),this._events[e].push(t)}removeEventListener(e,t){const a=this._events[e];a&&(this._events[e]=a.filter((e=>e!==t)))}dispatchEvent(e){const t=this._events[e.type];if(t)for(const a of t)a(e)}}}}]);","name":"js/pentapod/addon-settings~addons~editor~fullscreen~player.a4613a5aed857a44a156.js","input":"(window[\"webpackJsonpGUI\"] = window[\"webpackJsonpGUI\"] || []).push([[1],{\n\n/***/ 146:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: ./src/addons/generated/addon-manifests.js + 82 modules\nvar addon_manifests = __webpack_require__(254);\n\n// EXTERNAL MODULE: ./src/addons/generated/upstream-meta.json\nvar upstream_meta = __webpack_require__(551);\n\n// EXTERNAL MODULE: ./src/addons/event-target.js\nvar event_target = __webpack_require__(709);\n\n// CONCATENATED MODULE: ./src/addons/settings-store.js\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * Copyright (C) 2021 Thomas Weber\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License version 3 as\n * published by the Free Software Foundation.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n\n\n\nconst SETTINGS_KEY = 'tw:addons';\nconst VERSION = 5;\nconst migrateSettings = settings => {\n const oldVersion = settings._;\n if (oldVersion === VERSION || !oldVersion) {\n return settings;\n }\n\n // Migrate 1 -> 2\n // tw-project-info is now block-count\n // tw-interface-customization split into tw-remove-backpack and tw-remove-feedback\n if (oldVersion < 2) {\n const projectInfo = settings['tw-project-info'];\n if (projectInfo && projectInfo.enabled) {\n settings['block-count'] = {\n enabled: true\n };\n }\n const interfaceCustomization = settings['tw-interface-customization'];\n if (interfaceCustomization && interfaceCustomization.enabled) {\n if (interfaceCustomization.removeBackpack) {\n settings['tw-remove-backpack'] = {\n enabled: true\n };\n }\n if (interfaceCustomization.removeFeedback) {\n settings['tw-remove-feedback'] = {\n enabled: true\n };\n }\n }\n }\n\n // Migrate 2 -> 3\n // The default value of hide-flyout's toggle setting changed from \"hover\" to \"cathover\"\n // We want to keep the old default value for existing users.\n if (oldVersion < 3) {\n const hideFlyout = settings['hide-flyout'];\n if (hideFlyout && hideFlyout.enabled && typeof hideFlyout.toggled === 'undefined') {\n hideFlyout.toggle = 'hover';\n }\n }\n\n // Migrate 3 -> 4\n // editor-devtools was broken up into find-bar and middle-click-popup.\n // If someone disabled editor-devtools, we want to keep these disabled.\n if (oldVersion < 4) {\n const editorDevtools = settings['editor-devtools'];\n if (editorDevtools && editorDevtools.enabled === false) {\n settings['find-bar'] = {\n enabled: false\n };\n settings['middle-click-popup'] = {\n enabled: false\n };\n }\n }\n\n // Migrate 4 -> 5\n // fullscreen's hideToolbar and hoverToolbar settings were merged into one toolbar setting\n if (oldVersion < 5) {\n const fullscreen = settings.fullscreen;\n // hideToolbar was false by default\n // hoverToolbar was true by default\n if (fullscreen && fullscreen.hideToolbar) {\n if (fullscreen.hoverToolbar === false) {\n fullscreen.toolbar = 'hide';\n } else {\n fullscreen.toolbar = 'hover';\n }\n }\n }\n return settings;\n};\n\n/**\n * @template T\n * @param {T|T[]} v A value\n * @returns {T[]} The value if it is a list, otherwise a 1 item list\n */\nconst asArray = v => {\n if (Array.isArray(v)) {\n return v;\n }\n return [v];\n};\nclass settings_store_SettingsStore extends event_target[\"a\" /* default */] {\n constructor() {\n super();\n this.store = this.createEmptyStore();\n this.remote = false;\n }\n\n /**\n * @private\n */\n createEmptyStore() {\n const result = {};\n for (const addonId of Object.keys(addon_manifests[\"a\" /* default */])) {\n result[addonId] = {};\n }\n return result;\n }\n readLocalStorage() {\n const base = this.store;\n try {\n const local = localStorage.getItem(SETTINGS_KEY);\n if (local) {\n let result = JSON.parse(local);\n if (result && typeof result === 'object') {\n result = migrateSettings(result);\n for (const key of Object.keys(result)) {\n if (Object.prototype.hasOwnProperty.call(base, key)) {\n const value = result[key];\n if (value && typeof value === 'object') {\n base[key] = value;\n }\n }\n }\n }\n }\n } catch (e) {\n // ignore\n }\n this.store = base;\n }\n\n /**\n * @private\n */\n saveToLocalStorage() {\n if (this.remote) {\n return;\n }\n try {\n const result = {\n _: VERSION\n };\n for (const addonId of Object.keys(addon_manifests[\"a\" /* default */])) {\n const data = this.getAddonStorage(addonId);\n if (Object.keys(data).length > 0) {\n result[addonId] = data;\n }\n }\n localStorage.setItem(SETTINGS_KEY, JSON.stringify(result));\n } catch (e) {\n // ignore\n }\n }\n\n /**\n * @private\n */\n getAddonStorage(addonId) {\n if (this.store[addonId]) {\n return this.store[addonId];\n }\n throw new Error(\"Unknown addon store: \".concat(addonId));\n }\n\n /**\n * @private\n */\n getAddonManifest(addonId) {\n if (addon_manifests[\"a\" /* default */][addonId]) {\n return addon_manifests[\"a\" /* default */][addonId];\n }\n throw new Error(\"Unknown addon: \".concat(addonId));\n }\n\n /**\n * @private\n */\n getAddonSettingObject(manifest, settingId) {\n if (!manifest.settings) {\n return null;\n }\n for (const setting of manifest.settings) {\n if (setting.id === settingId) {\n return setting;\n }\n }\n return null;\n }\n getAddonEnabled(addonId) {\n const manifest = this.getAddonManifest(addonId);\n if (manifest.unsupported) {\n return false;\n }\n const storage = this.getAddonStorage(addonId);\n if (Object.prototype.hasOwnProperty.call(storage, 'enabled')) {\n return storage.enabled;\n }\n return !!manifest.enabledByDefault;\n }\n getAddonSetting(addonId, settingId) {\n const storage = this.getAddonStorage(addonId);\n const manifest = this.getAddonManifest(addonId);\n const settingObject = this.getAddonSettingObject(manifest, settingId);\n if (!settingObject) {\n throw new Error(\"Unknown setting: \".concat(settingId));\n }\n if (Object.prototype.hasOwnProperty.call(storage, settingId)) {\n return storage[settingId];\n }\n return settingObject.default;\n }\n\n /**\n * @private\n */\n getDefaultSettings(addonId) {\n const manifest = this.getAddonManifest(addonId);\n const result = {};\n for (const {\n id,\n default: value\n } of manifest.settings) {\n result[id] = value;\n }\n return result;\n }\n setAddonEnabled(addonId, enabled) {\n const storage = this.getAddonStorage(addonId);\n const manifest = this.getAddonManifest(addonId);\n const oldValue = this.getAddonEnabled(addonId);\n if (enabled === null) {\n enabled = !!manifest.enabledByDefault;\n delete storage.enabled;\n } else if (typeof enabled === 'boolean') {\n storage.enabled = enabled;\n } else {\n throw new Error('Enabled value is invalid.');\n }\n this.saveToLocalStorage();\n if (enabled !== oldValue) {\n // Dynamic enable is always supported.\n // Dynamic disable requires addon support.\n const supportsDynamic = enabled ? true : !!manifest.dynamicDisable;\n this.dispatchEvent(new CustomEvent('setting-changed', {\n detail: {\n addonId,\n settingId: 'enabled',\n reloadRequired: !supportsDynamic,\n value: enabled\n }\n }));\n }\n }\n setAddonSetting(addonId, settingId, value) {\n const storage = this.getAddonStorage(addonId);\n const manifest = this.getAddonManifest(addonId);\n const settingObject = this.getAddonSettingObject(manifest, settingId);\n const oldValue = this.getAddonSetting(addonId, settingId);\n if (value === null) {\n value = settingObject.default;\n delete storage[settingId];\n } else {\n if (settingObject.type === 'boolean') {\n if (typeof value !== 'boolean') {\n throw new Error('Setting value is invalid.');\n }\n } else if (settingObject.type === 'integer' || settingObject.type === 'positive_integer') {\n if (typeof value !== 'number') {\n throw new Error('Setting value is invalid.');\n }\n } else if (settingObject.type === 'string' || settingObject.type === 'untranslated') {\n // always valid\n } else if (settingObject.type === 'color') {\n if (typeof value !== 'string') {\n throw new Error('Color value is not a string.');\n }\n // Remove alpha channel from colors like #012345ff\n // We don't support transparency yet, but settings imported from Scratch Addons\n // might contain transparency.\n if (value.length === 9) {\n value = value.substring(0, 7);\n }\n if (!/^#[0-9a-f]{6}$/i.test(value)) {\n throw new Error('Color value is invalid format.');\n }\n } else if (settingObject.type === 'select') {\n if (!settingObject.potentialValues.some(potentialValue => potentialValue.id === value)) {\n throw new Error('Setting value is invalid.');\n }\n } else {\n throw new Error('Setting object is of unknown type');\n }\n storage[settingId] = value;\n }\n this.saveToLocalStorage();\n if (value !== oldValue) {\n this.dispatchEvent(new CustomEvent('setting-changed', {\n detail: {\n addonId,\n settingId,\n reloadRequired: !settingObject.dynamic,\n value\n }\n }));\n }\n }\n applyAddonPreset(addonId, presetId) {\n const manifest = this.getAddonManifest(addonId);\n for (const {\n id,\n values\n } of manifest.presets) {\n if (id !== presetId) {\n continue;\n }\n const settings = _objectSpread(_objectSpread({}, this.getDefaultSettings(addonId)), values);\n for (const key of Object.keys(settings)) {\n this.setAddonSetting(addonId, key, settings[key]);\n }\n return;\n }\n throw new Error(\"Unknown preset: \".concat(presetId));\n }\n resetAllAddons() {\n for (const addon of Object.keys(addon_manifests[\"a\" /* default */])) {\n this.resetAddon(addon, true);\n }\n // In case resetAddon missed some properties, do a hard reset on storage.\n this.store = this.createEmptyStore();\n this.saveToLocalStorage();\n }\n resetAddon(addonId, resetEverything) {\n const storage = this.getAddonStorage(addonId);\n for (const setting of Object.keys(storage)) {\n if (setting === 'enabled') {\n if (resetEverything) {\n this.setAddonEnabled(addonId, null);\n }\n continue;\n }\n try {\n this.setAddonSetting(addonId, setting, null);\n } catch (e) {\n // ignore\n }\n }\n }\n parseUrlParameter(parameter) {\n this.remote = true;\n const enabled = parameter.split(',');\n for (const id of Object.keys(addon_manifests[\"a\" /* default */])) {\n this.setAddonEnabled(id, enabled.includes(id));\n }\n }\n export(_ref) {\n let {\n theme\n } = _ref;\n const result = {\n core: {\n // Upstream property. We don't use this.\n lightTheme: !theme.isDark(),\n // Doesn't matter what we set this to\n version: \"v1.0.0-tw-\".concat(upstream_meta.commit)\n },\n addons: {}\n };\n for (const [addonId, manifest] of Object.entries(addon_manifests[\"a\" /* default */])) {\n const enabled = this.getAddonEnabled(addonId);\n const settings = {};\n if (manifest.settings) {\n for (const {\n id\n } of manifest.settings) {\n settings[id] = this.getAddonSetting(addonId, id);\n }\n }\n result.addons[addonId] = {\n enabled,\n settings\n };\n }\n return result;\n }\n import(data) {\n for (const [addonId, value] of Object.entries(data.addons)) {\n if (!Object.prototype.hasOwnProperty.call(addon_manifests[\"a\" /* default */], addonId)) {\n continue;\n }\n const {\n enabled,\n settings\n } = value;\n if (typeof enabled === 'boolean') {\n this.setAddonEnabled(addonId, enabled);\n }\n for (const [settingId, settingValue] of Object.entries(settings)) {\n try {\n this.setAddonSetting(addonId, settingId, settingValue);\n } catch (e) {\n // ignore\n }\n }\n }\n }\n setStoreWithVersionCheck(_ref2) {\n let {\n version,\n store\n } = _ref2;\n if (version !== upstream_meta.commit) {\n return;\n }\n this.setStore(store);\n }\n setStore(newStore) {\n const oldStore = this.store;\n for (const addonId of Object.keys(oldStore)) {\n const oldSettings = oldStore[addonId];\n const newSettings = newStore[addonId];\n if (!newSettings || typeof newSettings !== 'object') {\n continue;\n }\n if (JSON.stringify(oldSettings) !== JSON.stringify(newSettings)) {\n const manifest = this.getAddonManifest(addonId);\n // Dynamic enable is always supported.\n const dynamicEnable = !oldSettings.enabled && newSettings.enabled;\n // Dynamic disable requires addon support.\n const dynamicDisable = !!manifest.dynamicDisable && oldSettings.enabled && !newSettings.enabled;\n // Clone to avoid pass-by-reference issues\n this.store[addonId] = JSON.parse(JSON.stringify(newSettings));\n this.dispatchEvent(new CustomEvent('addon-changed', {\n detail: {\n addonId,\n dynamicEnable,\n dynamicDisable\n }\n }));\n }\n }\n }\n\n /**\n * Evaluate an `if` value from addon.json.\n * @param {string} addonId The ID of the addon.\n * @param {unknown} condition Condition from addon.json\n * @returns {boolean} True if the condition is met.\n */\n evaluateCondition(addonId, condition) {\n if (!condition) {\n // No condition. Default to true.\n return true;\n }\n if (condition.addonEnabled) {\n // addonEnabled is an OR\n const addonsToCheck = asArray(condition.addonEnabled);\n if (addonsToCheck.every(id => !this.getAddonEnabled(id))) {\n return false;\n }\n }\n if (condition.settings) {\n // settings is an AND\n for (const [settingName, expectedValue] of Object.entries(condition.settings)) {\n // expectedValue can be a string or an array of possible options\n const expectedValues = Array.isArray(expectedValue) ? expectedValue : [expectedValue];\n if (!expectedValues.includes(this.getAddonSetting(addonId, settingName))) {\n return false;\n }\n }\n }\n return true;\n }\n}\n/* harmony default export */ var settings_store = (settings_store_SettingsStore);\n// CONCATENATED MODULE: ./src/addons/settings-store-singleton.js\n\nconst settingStore = new settings_store();\nconst urlParameters = new URLSearchParams(location.search);\nif (urlParameters.has('addons')) {\n settingStore.parseUrlParameter(urlParameters.get('addons'));\n} else {\n settingStore.readLocalStorage();\n}\n/* harmony default export */ var settings_store_singleton = __webpack_exports__[\"a\"] = (settingStore);\n\n/***/ }),\n\n/***/ 254:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// CONCATENATED MODULE: ./src/addons/addons/cat-blocks/_manifest_entry.js\n/* generated by pull.js */\nconst manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Cat blocks\",\n \"description\": \"Brings back editor cat hat blocks that were first introduced for April Fools' Day 2020.\",\n \"credits\": [{\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/users/TheColaber/\"\n }, {\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"info\": [{\n \"type\": \"notice\",\n \"text\": \"The \\\"watch mouse cursor\\\" setting may impact performance when the editor is open.\",\n \"id\": \"watch\"\n }],\n \"settings\": [{\n \"id\": \"watch\",\n \"name\": \"Watch mouse cursor\",\n \"default\": false,\n \"type\": \"boolean\"\n }],\n \"tags\": [\"theme\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var _manifest_entry = (manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-devtools/_manifest_entry.js\n/* generated by pull.js */\nconst _manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Developer tools\",\n \"description\": \"Adds new menu options to the editor: copy/paste blocks, better clean up, and more!\",\n \"credits\": [{\n \"name\": \"griffpatch\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Enhance \\\"Clean up Blocks\\\"\",\n \"id\": \"enableCleanUpPlus\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Paste blocks at mouse cursor\",\n \"id\": \"enablePasteBlocksAtMouse\",\n \"type\": \"boolean\",\n \"default\": true\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": true\n};\n/* harmony default export */ var editor_devtools_manifest_entry = (_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/find-bar/_manifest_entry.js\n/* generated by pull.js */\nconst find_bar_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Editor find bar\",\n \"description\": \"Adds a find bar to find and jump to scripts, costumes and sounds next to the sounds tab. Use Ctrl+Left and Ctrl+Right in the code area to navigate to previous or next visited position after using the find bar.\",\n \"info\": [{\n \"text\": \"This addon was previously part of the \\\"developer tools\\\" addon but has moved here.\",\n \"id\": \"developer-tools\"\n }],\n \"credits\": [{\n \"name\": \"griffpatch\"\n }, {\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/users/thecolaber/\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": true\n};\n/* harmony default export */ var find_bar_manifest_entry = (find_bar_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/middle-click-popup/_manifest_entry.js\n/* generated by pull.js */\nconst middle_click_popup_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Insert blocks by name\",\n \"description\": \"Middle or shift-click the code area, or press Ctrl+Space to bring up a block search window. Type block names (or parts of them) and drag them into the code area to add them to your project. The menu can be navigated with the arrow keys and Enter and supports autocompleting with Tab. To prevent the menu from closing, hold Shift while dragging blocks out of it.\",\n \"credits\": [{\n \"name\": \"Tacodiva\",\n \"link\": \"https://scratch.mit.edu/users/Tacodiva7729/\"\n }, {\n \"name\": \"griffpatch\"\n }, {\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/users/TheColaber/\"\n }, {\n \"name\": \"CST1229\",\n \"link\": \"https://scratch.mit.edu/users/CST1229/\"\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Popup Block Size\",\n \"id\": \"popup_scale\",\n \"type\": \"integer\",\n \"min\": 1,\n \"max\": 100,\n \"default\": 48\n }, {\n \"dynamic\": true,\n \"name\": \"Popup Width\",\n \"id\": \"popup_width\",\n \"type\": \"integer\",\n \"min\": 1,\n \"max\": 100,\n \"default\": 16\n }, {\n \"dynamic\": true,\n \"name\": \"Popup Maximum Height\",\n \"id\": \"popup_max_height\",\n \"type\": \"integer\",\n \"min\": 1,\n \"max\": 100,\n \"default\": 40\n }],\n \"info\": [{\n \"text\": \"This addon was previously part of the \\\"developer tools\\\" addon but has moved here.\",\n \"id\": \"developer-tools\"\n }]\n};\n/* harmony default export */ var middle_click_popup_manifest_entry = (middle_click_popup_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/jump-to-def/_manifest_entry.js\n/* generated by pull.js */\nconst jump_to_def_manifest_entry_manifest = {\n \"name\": \"Jump to custom block definition\",\n \"description\": \"Allows you to jump to a custom block's definition using the middle mouse button or Shift+Click on the block.\",\n \"info\": [{\n \"text\": \"This addon was previously part of the \\\"developer tools\\\" addon but has moved here.\",\n \"id\": \"developer-tools\"\n }],\n \"credits\": [{\n \"name\": \"griffpatch\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": true,\n \"dynamicDisable\": true\n};\n/* harmony default export */ var jump_to_def_manifest_entry = (jump_to_def_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/reorder-custom-inputs/_manifest_entry.js\n/* generated by pull.js */\nconst reorder_custom_inputs_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Rearrangeable custom block inputs\",\n \"description\": \"Allows rearranging custom block parameters on the \\\"Make a block\\\" screen.\",\n \"credits\": [{\n \"name\": \"Chrome_Cat\",\n \"link\": \"https://scratch.mit.edu/users/Chrome_Cat/\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"arrows.css\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Insert new inputs after selected input\",\n \"id\": \"InsertInputsAfter\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": true,\n \"dynamicDisable\": true\n};\n/* harmony default export */ var reorder_custom_inputs_manifest_entry = (reorder_custom_inputs_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/environment.js\nconst isMobile = typeof window !== 'undefined' && 'ontouchstart' in window;\nconst clipboardSupported = typeof navigator !== 'undefined' && navigator.clipboard && navigator.clipboard.write;\nconst mediaRecorderSupported = typeof MediaRecorder !== 'undefined';\n// CONCATENATED MODULE: ./src/addons/addons/editor-searchable-dropdowns/_manifest_entry.js\n/* generated by pull.js */\nconst editor_searchable_dropdowns_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Block dropdown search\",\n \"description\": \"Allows you to search the options in block dropdowns.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"userscript.css\"\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": true\n};\n\nif (isMobile) editor_searchable_dropdowns_manifest_entry_manifest.enabledByDefault = false;\n/* harmony default export */ var editor_searchable_dropdowns_manifest_entry = (editor_searchable_dropdowns_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/data-category-tweaks-v2/_manifest_entry.js\n/* generated by pull.js */\nconst data_category_tweaks_v2_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Data category tweaks\",\n \"description\": \"Provides tweaks for the Data (\\\"Variables\\\") block category.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Separate List Category\",\n \"id\": \"separateListCategory\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Separate Sprite-only Variables\",\n \"id\": \"separateLocalVariables\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"dynamic\": true,\n \"name\": \"Move data blocks above variables list\",\n \"id\": \"moveReportersDown\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var data_category_tweaks_v2_manifest_entry = (data_category_tweaks_v2_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/block-palette-icons/_manifest_entry.js\n/* generated by pull.js */\nconst block_palette_icons_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Block palette category icons\",\n \"description\": \"Adds icons inside the colored circles that identify block categories.\",\n \"tags\": [\"theme\"],\n \"enabledByDefault\": false,\n \"dynamicDisable\": true,\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }],\n \"credits\": [{\n \"name\": \"--Explosion--\",\n \"link\": \"https://scratch.mit.edu/users/--Explosion--/\"\n }, {\n \"name\": \"RedGuy7\",\n \"link\": \"https://scratch.mit.edu/users/RedGuy7/\"\n }]\n};\n/* harmony default export */ var block_palette_icons_manifest_entry = (block_palette_icons_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/hide-flyout/_manifest_entry.js\n/* generated by pull.js */\nconst hide_flyout_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Auto-hiding block palette\",\n \"description\": \"Hides the block palette unless you're hovering over it. Click the lock icon to lock it in place temporarily. Or use the \\\"category click\\\" mode to show/hide it when you click a block category.\",\n \"credits\": [{\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/users/TheColaber/\"\n }, {\n \"name\": \"Maximouse\",\n \"link\": \"https://scratch.mit.edu/users/Maximouse/\"\n }],\n \"info\": [{\n \"text\": \"\\\"Palette area hover\\\" mode only extends the viewing area. If you want to be able to drag blocks into that area without them getting trashed, use one of the other modes.\",\n \"id\": \"hoverExplanation\"\n }],\n \"dynamicDisable\": true,\n \"customCssVariables\": [{\n \"name\": \"lockDisplay\",\n \"value\": {\n \"type\": \"map\",\n \"source\": {\n \"type\": \"settingValue\",\n \"settingId\": \"toggle\"\n },\n \"options\": {\n \"hover\": \"flex\",\n \"cathover\": \"flex\",\n \"category\": \"none\"\n }\n }\n }, {\n \"name\": \"placeholderDisplay\",\n \"value\": {\n \"type\": \"map\",\n \"source\": {\n \"type\": \"settingValue\",\n \"settingId\": \"toggle\"\n },\n \"options\": {\n \"hover\": \"block\",\n \"cathover\": \"none\",\n \"category\": \"none\"\n }\n }\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Toggle on...\",\n \"id\": \"toggle\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"id\": \"hover\",\n \"name\": \"Palette area hover\"\n }, {\n \"id\": \"cathover\",\n \"name\": \"Category hover\"\n }, {\n \"id\": \"category\",\n \"name\": \"Category click\"\n }],\n \"default\": \"cathover\"\n }, {\n \"dynamic\": true,\n \"name\": \"Animation speed\",\n \"id\": \"speed\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"id\": \"none\",\n \"name\": \"Instant\"\n }, {\n \"id\": \"short\",\n \"name\": \"Quick\"\n }, {\n \"id\": \"default\",\n \"name\": \"Default\"\n }, {\n \"id\": \"long\",\n \"name\": \"Slow\"\n }],\n \"default\": \"default\"\n }, {\n \"name\": \"Open by default\",\n \"id\": \"lockLoad\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"tags\": [\"recommended\"]\n};\n/* harmony default export */ var hide_flyout_manifest_entry = (hide_flyout_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/mediarecorder/_manifest_entry.js\n/* generated by pull.js */\nconst mediarecorder_manifest_entry_manifest = {\n \"name\": \"Project video recorder\",\n \"description\": \"Adds a \\\"start recording\\\" button to the editor menu bar that allows you to record the project's stage.\",\n \"tags\": [\"recommended\"],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"enabledByDefault\": false\n};\n\nif (!mediaRecorderSupported) mediarecorder_manifest_entry_manifest.unsupported = true;\n/* harmony default export */ var mediarecorder_manifest_entry = (mediarecorder_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/drag-drop/_manifest_entry.js\n/* generated by pull.js */\nconst drag_drop_manifest_entry_manifest = {\n \"noTranslations\": true,\n \"name\": \"File drag and drop\",\n \"description\": \"Lets you drag images and sounds from your file manager into the sprite pane or costume/sound list. You can also drag text files into lists or \\\"ask and wait\\\" question inputs.\",\n \"credits\": [{\n \"name\": \"Sheep_maker\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"id\": \"use-hd-upload\",\n \"name\": \"Use HD uploads\",\n \"type\": \"boolean\",\n \"default\": false,\n \"if\": {\n \"addonEnabled\": \"better-img-uploads\"\n }\n }],\n \"dynamicDisable\": true,\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": true\n};\n/* harmony default export */ var drag_drop_manifest_entry = (drag_drop_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/debugger/_manifest_entry.js\n/* generated by pull.js */\nconst debugger_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Debugger\",\n \"description\": \"Adds a new \\\"debugger\\\" window to the editor. Allows for logging into the \\\"Logs\\\" tab of the debugger window using the \\\"log\\\", \\\"warn\\\" and \\\"error\\\" blocks. The \\\"breakpoint\\\" block will pause the project when executed. All running stacks of blocks can be viewed in the \\\"Threads\\\" tab of the debugger window, and when paused the \\\"Step\\\" button can be used to execute the next block. A graph of frames per second and number of clones can be viewed in the \\\"Performance\\\" tab.\",\n \"credits\": [{\n \"name\": \"Tacodiva\",\n \"link\": \"https://scratch.mit.edu/users/Tacodiva7729/\"\n }, {\n \"name\": \"GarboMuffin\"\n }, {\n \"name\": \"GrahamSH\"\n }, {\n \"name\": \"TheColaber\"\n }, {\n \"name\": \"retronbv\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Clear logs on green flag\",\n \"id\": \"log_clear_greenflag\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"dynamic\": true,\n \"name\": \"Log green flag clicks\",\n \"id\": \"log_greenflag\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"dynamic\": true,\n \"name\": \"Log clone creation\",\n \"id\": \"log_clone_create\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"name\": \"Log when clone limit exceeded\",\n \"id\": \"log_failed_clone_creation\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Log broadcasts\",\n \"id\": \"log_broadcasts\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"name\": \"Log when max list length exceeded\",\n \"id\": \"log_max_list_length\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"name\": \"Log invalid cloud variable values\",\n \"id\": \"log_invalid_cloud_data\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"name\": \"Animated graphs (may affect performance)\",\n \"id\": \"fancy_graphs\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"tags\": []\n};\n/* harmony default export */ var debugger_manifest_entry = (debugger_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/pause/_manifest_entry.js\n/* generated by pull.js */\nconst pause_manifest_entry_manifest = {\n \"name\": \"Pause button\",\n \"description\": \"Adds a button to pause the project next to the green flag.\",\n \"info\": [{\n \"text\": \"The project can also be paused with Alt+X (Option+X on macOS).\",\n \"id\": \"keybind\"\n }],\n \"credits\": [{\n \"name\": \"Jeffalo\"\n }, {\n \"name\": \"GarboMuffin\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": true\n};\n/* harmony default export */ var pause_manifest_entry = (pause_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/mute-project/_manifest_entry.js\n/* generated by pull.js */\nconst mute_project_manifest_entry_manifest = {\n \"noTranslations\": true,\n \"name\": \"Muted project player mode\",\n \"description\": \"Ctrl+Click the green flag to mute/unmute the project.\",\n \"info\": [{\n \"text\": \"On macOS, use the Cmd key instead of the Ctrl key.\",\n \"id\": \"macOS\"\n }],\n \"credits\": [{\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/users/TheColaber/\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true,\n \"enabledByDefault\": true,\n \"tags\": [\"recommended\"]\n};\n/* harmony default export */ var mute_project_manifest_entry = (mute_project_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/vol-slider/_manifest_entry.js\n/* generated by pull.js */\nconst vol_slider_manifest_entry_manifest = {\n \"noTranslations\": true,\n \"name\": \"Project volume slider\",\n \"description\": \"Adds a volume slider next to the green flag controls.\",\n \"credits\": [{\n \"name\": \"samq64\",\n \"link\": \"https://scratch.mit.edu/users/samq64/\"\n }, {\n \"name\": \"GarboMuffin\"\n }, {\n \"name\": \"DNin01\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }, {\n \"url\": \"hover.css\",\n \"if\": {\n \"settings\": {\n \"always\": false\n }\n }\n }],\n \"settings\": [{\n \"name\": \"Default volume\",\n \"id\": \"defVol\",\n \"type\": \"integer\",\n \"min\": 0,\n \"max\": 100,\n \"default\": 100\n }, {\n \"name\": \"Always show slider\",\n \"id\": \"always\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"dynamicDisable\": true,\n \"tags\": [\"recommended\"]\n};\n/* harmony default export */ var vol_slider_manifest_entry = (vol_slider_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/clones/_manifest_entry.js\n/* generated by pull.js */\nconst clones_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Clone counter\",\n \"description\": \"Adds a counter above the stage in the editor which shows the total amount of clones.\",\n \"credits\": [{\n \"name\": \"Jeffalo\"\n }, {\n \"name\": \"OregSam\",\n \"link\": \"https://scratch.mit.edu/users/simiagain/\"\n }, {\n \"name\": \"DNin01\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"id\": \"projectpage\",\n \"name\": \"Show on project page\",\n \"default\": false,\n \"type\": \"boolean\"\n }, {\n \"dynamic\": true,\n \"id\": \"showicononly\",\n \"name\": \"Show icon only\",\n \"default\": false,\n \"type\": \"boolean\"\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var clones_manifest_entry = (clones_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/mouse-pos/_manifest_entry.js\n/* generated by pull.js */\nconst mouse_pos_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Mouse position display\",\n \"description\": \"Displays your mouse x/y position above the stage in the editor.\",\n \"credits\": [{\n \"name\": \"Jeffalo\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var mouse_pos_manifest_entry = (mouse_pos_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/color-picker/_manifest_entry.js\n/* generated by pull.js */\nconst color_picker_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Hex color picker\",\n \"description\": \"Adds hex code inputs to color pickers.\",\n \"tags\": [\"recommended\"],\n \"credits\": [{\n \"name\": \"Richie Bendall\"\n }, {\n \"name\": \"apple502j\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"dynamicDisable\": true,\n \"enabledByDefault\": true\n};\n/* harmony default export */ var color_picker_manifest_entry = (color_picker_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/remove-sprite-confirm/_manifest_entry.js\n/* generated by pull.js */\nconst remove_sprite_confirm_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Sprite deletion confirmation\",\n \"description\": \"Asks if you're sure when deleting a sprite inside a project.\",\n \"info\": [{\n \"text\": \"Tip: If you accidentally delete a sprite, costume, or sound, you can undo the deletion by clicking Edit in the menu bar then Restore.\",\n \"id\": \"restoretip\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true,\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var remove_sprite_confirm_manifest_entry = (remove_sprite_confirm_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/block-count/_manifest_entry.js\n/* generated by pull.js */\nconst block_count_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Block count\",\n \"description\": \"Shows the total number of blocks in a project in the editor menu bar. Previously part of \\\"sprite and script count\\\".\",\n \"tags\": [],\n \"credits\": [{\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/users/TheColaber/\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"blockcount.js\"\n }]\n};\n/* harmony default export */ var block_count_manifest_entry = (block_count_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/onion-skinning/_manifest_entry.js\n/* generated by pull.js */\nconst onion_skinning_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Onion skinning\",\n \"description\": \"Shows transparent overlays of previous or next costumes when editing a costume. Controlled by buttons under the costume editor by the zoom buttons.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"settings\": [{\n \"id\": \"default\",\n \"name\": \"Enable by default\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"id\": \"previous\",\n \"name\": \"Default previous costumes\",\n \"type\": \"integer\",\n \"default\": 1,\n \"min\": 0,\n \"max\": 100\n }, {\n \"id\": \"next\",\n \"name\": \"Default next costumes\",\n \"type\": \"integer\",\n \"default\": 0,\n \"min\": 0,\n \"max\": 100\n }, {\n \"id\": \"opacity\",\n \"name\": \"Opacity (%)\",\n \"type\": \"integer\",\n \"min\": 0,\n \"max\": 100,\n \"default\": 25\n }, {\n \"id\": \"opacityStep\",\n \"name\": \"Opacity Step (%)\",\n \"type\": \"integer\",\n \"min\": 0,\n \"max\": 100,\n \"default\": 10\n }, {\n \"id\": \"layering\",\n \"name\": \"Default layering\",\n \"type\": \"select\",\n \"default\": \"front\",\n \"potentialValues\": [{\n \"id\": \"front\",\n \"name\": \"Front\"\n }, {\n \"id\": \"behind\",\n \"name\": \"Behind\"\n }]\n }, {\n \"id\": \"mode\",\n \"name\": \"Default mode\",\n \"type\": \"select\",\n \"default\": \"merge\",\n \"potentialValues\": [{\n \"id\": \"merge\",\n \"name\": \"Merge images\"\n }, {\n \"id\": \"tint\",\n \"name\": \"Color tint\"\n }]\n }, {\n \"name\": \"Previous costume tint\",\n \"id\": \"beforeTint\",\n \"type\": \"color\",\n \"default\": \"#FF0000\"\n }, {\n \"name\": \"Next costume tint\",\n \"id\": \"afterTint\",\n \"type\": \"color\",\n \"default\": \"#0000FF\"\n }],\n \"tags\": [\"recommended\"],\n \"dynamicDisable\": true,\n \"enabledByDefault\": true\n};\n/* harmony default export */ var onion_skinning_manifest_entry = (onion_skinning_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/paint-snap/_manifest_entry.js\n/* generated by pull.js */\nconst paint_snap_manifest_entry_manifest = {\n \"name\": \"Costume editor snapping\",\n \"description\": \"Snap objects in the costume editor to bounding boxes and vector nodes.\",\n \"tags\": [],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }],\n \"settings\": [{\n \"type\": \"boolean\",\n \"id\": \"enable-default\",\n \"name\": \"Enable by default\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"type\": \"color\",\n \"id\": \"guide-color\",\n \"name\": \"Snapping guide color\",\n \"default\": \"#ff0000\",\n \"allowTransparency\": true\n }, {\n \"type\": \"boolean\",\n \"id\": \"pageCenter\",\n \"name\": \"Snap to page center\",\n \"default\": true\n }, {\n \"type\": \"boolean\",\n \"id\": \"pageAxes\",\n \"name\": \"Snap to page x and y axes\",\n \"default\": true\n }, {\n \"type\": \"boolean\",\n \"id\": \"pageEdges\",\n \"name\": \"Snap to page edges\",\n \"default\": true\n }, {\n \"type\": \"boolean\",\n \"id\": \"pageCorners\",\n \"name\": \"Snap to page corners\",\n \"default\": false\n }, {\n \"type\": \"boolean\",\n \"id\": \"objectEdges\",\n \"name\": \"Snap to object edges\",\n \"default\": true\n }, {\n \"type\": \"boolean\",\n \"id\": \"objectCenters\",\n \"name\": \"Snap to object centers\",\n \"default\": true\n }, {\n \"type\": \"boolean\",\n \"id\": \"objectMidlines\",\n \"name\": \"Snap to object midlines\",\n \"default\": true\n }, {\n \"type\": \"boolean\",\n \"id\": \"objectCorners\",\n \"name\": \"Snap to object corners\",\n \"default\": false\n }, {\n \"type\": \"boolean\",\n \"id\": \"boxCenter\",\n \"name\": \"Snap from selection box center\",\n \"default\": true\n }, {\n \"type\": \"boolean\",\n \"id\": \"boxCorners\",\n \"name\": \"Snap from selection box corners\",\n \"default\": false\n }, {\n \"type\": \"boolean\",\n \"id\": \"boxEdgeMids\",\n \"name\": \"Snap from selection box edge midpoints\",\n \"default\": false\n }, {\n \"type\": \"positive_integer\",\n \"id\": \"threshold\",\n \"name\": \"Snapping distance\",\n \"default\": 10,\n \"min\": 4,\n \"max\": 100\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var paint_snap_manifest_entry = (paint_snap_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/default-costume-editor-color/_manifest_entry.js\n/* generated by pull.js */\nconst default_costume_editor_color_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Customizable default costume editor colors\",\n \"description\": \"Changes the default colors and outline size used by the costume editor.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Default fill color\",\n \"id\": \"fill\",\n \"type\": \"color\",\n \"default\": \"#9966FF\"\n }, {\n \"dynamic\": true,\n \"name\": \"Default outline color\",\n \"id\": \"stroke\",\n \"type\": \"color\",\n \"default\": \"#000000\"\n }, {\n \"dynamic\": true,\n \"name\": \"Default outline size\",\n \"id\": \"strokeSize\",\n \"type\": \"integer\",\n \"min\": 0,\n \"max\": 100,\n \"default\": 4\n }, {\n \"dynamic\": true,\n \"name\": \"Use previous color instead of resetting after switching tools\",\n \"id\": \"persistence\",\n \"type\": \"boolean\",\n \"default\": true\n }],\n \"tags\": [],\n \"dynamicDisable\": true,\n \"enabledByDefault\": false\n};\n/* harmony default export */ var default_costume_editor_color_manifest_entry = (default_costume_editor_color_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/bitmap-copy/_manifest_entry.js\n/* generated by pull.js */\nconst bitmap_copy_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Bitmap images copying\",\n \"description\": \"Allows you to copy a bitmap image from the costume editor into the system clipboard, so that you can paste it in other websites or software.\",\n \"info\": [{\n \"type\": \"notice\",\n \"text\": \"\\\"Right click → copy\\\" is not supported. You must press Ctrl+C while a bitmap image is selected.\",\n \"id\": \"norightclick\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true,\n \"tags\": [],\n \"enabledByDefault\": true\n};\n\nif (!clipboardSupported) bitmap_copy_manifest_entry_manifest.unsupported = true;\n/* harmony default export */ var bitmap_copy_manifest_entry = (bitmap_copy_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/2d-color-picker/_manifest_entry.js\n/* generated by pull.js */\nconst _2d_color_picker_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"2D color picker\",\n \"description\": \"Replaces saturation and brightness sliders in the costume editor with a 2D color picker. Hold Shift while dragging the cursor to change the values on a single axis.\",\n \"tags\": [],\n \"credits\": [{\n \"name\": \"Ucrash\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var _2d_color_picker_manifest_entry = (_2d_color_picker_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/paint-skew/_manifest_entry.js\n/* generated by pull.js */\nconst paint_skew_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"enabledByDefault\": true,\n \"name\": \"Skewing in costume editor\",\n \"description\": \"Hold Ctrl while scaling an object on its sides to skew it. Hold Alt while skewing an object to skew it from its center.\",\n \"info\": [{\n \"text\": \"On macOS, use the Command key instead of the Control key and the Option key instead of the Alt key.\",\n \"id\": \"useCmdOnMac\"\n }],\n \"credits\": [{\n \"name\": \"CST1229\",\n \"link\": \"https://scratch.mit.edu/users/CST1229/\"\n }],\n \"tags\": [],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var paint_skew_manifest_entry = (paint_skew_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/better-img-uploads/_manifest_entry.js\n/* generated by pull.js */\nconst better_img_uploads_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"HD image uploads\",\n \"description\": \"Adds a new button above the \\\"upload costume\\\" button that automatically converts uploaded bitmap images into SVG (vector) images to avoid losing quality.\",\n \"tags\": [\"beta\"],\n \"info\": [{\n \"type\": \"notice\",\n \"text\": \"Avoid using the HD upload button if you plan to edit the image after uploading.\",\n \"id\": \"notSuitableEdit\"\n }],\n \"credits\": [{\n \"name\": \"ErrorGamer2000\",\n \"link\": \"https://scratch.mit.edu/users/ErrorGamer2000/\"\n }, {\n \"name\": \"GarboMuffin\"\n }, {\n \"name\": \"World_Languages\"\n }, {\n \"name\": \"SheepTester\",\n \"link\": \"https://scratch.mit.edu/users/Sheep_maker/\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Image sizing\",\n \"id\": \"fitting\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"id\": \"full\",\n \"name\": \"Original size\"\n }, {\n \"id\": \"fill\",\n \"name\": \"Stretch to fill canvas\"\n }, {\n \"id\": \"fit\",\n \"name\": \"Shrink to fit canvas\"\n }],\n \"default\": \"fit\"\n }]\n};\n/* harmony default export */ var better_img_uploads_manifest_entry = (better_img_uploads_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/pick-colors-from-stage/_manifest_entry.js\n/* generated by pull.js */\nconst pick_colors_from_stage_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"enabledByDefault\": true,\n \"name\": \"Pick colors on stage with eyedropper\",\n \"description\": \"Allows the eyedropper in the costume editor to also pick colors from the stage.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"tags\": [],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var pick_colors_from_stage_manifest_entry = (pick_colors_from_stage_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/custom-block-shape/_manifest_entry.js\n/* generated by pull.js */\nconst custom_block_shape_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Customizable block shape\",\n \"description\": \"Adjust the padding, corner radius, and notch height of blocks.\",\n \"tags\": [\"theme\"],\n \"credits\": [{\n \"name\": \"SheepTester\",\n \"link\": \"https://scratch.mit.edu/users/Sheep_maker/\"\n }, {\n \"name\": \"lisa_wolfgang\",\n \"link\": \"https://scratch.mit.edu/users/lisa_wolfgang/\"\n }, {\n \"name\": \"GarboMuffin\",\n \"link\": \"https://scratch.mit.edu/users/GarboMuffin/\"\n }],\n \"enabledByDefault\": false,\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"info\": [{\n \"type\": \"notice\",\n \"text\": \"Decreasing the padding size is only visible to you, so when your projects are viewed by other users, your scripts may overlap.\",\n \"id\": \"paddingWarning\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Padding size (50-200%)\",\n \"id\": \"paddingSize\",\n \"type\": \"integer\",\n \"min\": 50,\n \"default\": 100,\n \"max\": 200\n }, {\n \"dynamic\": true,\n \"name\": \"Corner size (0-300%)\",\n \"id\": \"cornerSize\",\n \"type\": \"integer\",\n \"min\": 0,\n \"default\": 100,\n \"max\": 300\n }, {\n \"dynamic\": true,\n \"name\": \"Notch height (0-150%)\",\n \"id\": \"notchSize\",\n \"type\": \"integer\",\n \"min\": 0,\n \"default\": 100,\n \"max\": 150\n }],\n \"presets\": [{\n \"name\": \"3.0 Blocks\",\n \"id\": \"default3\",\n \"description\": \"The regular appearance of Scratch 3.0 blocks\",\n \"values\": {\n \"paddingSize\": 100,\n \"cornerSize\": 100,\n \"notchSize\": 100\n }\n }, {\n \"name\": \"2.0 Blocks\",\n \"id\": \"default2\",\n \"description\": \"An appearance similar to Scratch 2.0 blocks\",\n \"values\": {\n \"paddingSize\": 70,\n \"cornerSize\": 150,\n \"notchSize\": 75\n }\n }, {\n \"name\": \"3.0 Flat\",\n \"id\": \"flat3\",\n \"description\": \"Scratch 3.0 blocks with notches and corners removed\",\n \"values\": {\n \"paddingSize\": 100,\n \"cornerSize\": 0,\n \"notchSize\": 0\n }\n }, {\n \"name\": \"2.0 Flat\",\n \"id\": \"flat2\",\n \"description\": \"Scratch 2.0 blocks with notches and corners removed\",\n \"values\": {\n \"paddingSize\": 70,\n \"cornerSize\": 0,\n \"notchSize\": 0\n }\n }]\n};\n/* harmony default export */ var custom_block_shape_manifest_entry = (custom_block_shape_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-square-inputs/_manifest_entry.js\n/* generated by pull.js */\nconst editor_square_inputs_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Square block inputs\",\n \"description\": \"Makes certain block input types (such as text or color) rectangular instead of round, like in Scratch 2.0.\",\n \"credits\": [{\n \"name\": \"CST1229\",\n \"link\": \"https://scratch.mit.edu/users/CST1229/\"\n }],\n \"tags\": [\"theme\"],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Text inputs\",\n \"id\": \"text\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Color inputs\",\n \"id\": \"color\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"name\": \"Number inputs\",\n \"id\": \"number\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var editor_square_inputs_manifest_entry = (editor_square_inputs_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/zebra-striping/_manifest_entry.js\n/* generated by pull.js */\nconst zebra_striping_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Alternating nested block colors\",\n \"description\": \"Makes blocks of the same category alternate between lighter and darker shades when nested inside each other. This is also known as zebra striping.\",\n \"credits\": [{\n \"name\": \"CST1229\",\n \"link\": \"https://scratch.mit.edu/users/CST1229/\"\n }, {\n \"name\": \"GarboMuffin\"\n }, {\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/users/thecolaber\"\n }],\n \"tags\": [],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Shade\",\n \"id\": \"shade\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"name\": \"Lighter\",\n \"id\": \"lighter\"\n }, {\n \"name\": \"Darker\",\n \"id\": \"darker\"\n }],\n \"default\": \"lighter\"\n }, {\n \"dynamic\": true,\n \"name\": \"Intensity (0-100%)\",\n \"id\": \"intensity\",\n \"type\": \"integer\",\n \"min\": 0,\n \"default\": 20,\n \"max\": 100\n }],\n \"customCssVariables\": [{\n \"name\": \"shadeNumber\",\n \"value\": {\n \"type\": \"map\",\n \"source\": {\n \"type\": \"settingValue\",\n \"settingId\": \"shade\"\n },\n \"options\": {\n \"lighter\": \"1\",\n \"darker\": \"-1\"\n }\n }\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var zebra_striping_manifest_entry = (zebra_striping_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-compact/_manifest_entry.js\n/* generated by pull.js */\nconst editor_compact_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Compact editor\",\n \"description\": \"Decreases the size of buttons, input fields, the menu bar, and other elements in the editor, making more space for components such as the code area, the costume editor, and costume previews, as was the case in Scratch 2.0.\",\n \"tags\": [\"theme\", \"beta\"],\n \"credits\": [{\n \"name\": \"lisa_wolfgang\",\n \"link\": \"https://scratch.mit.edu/users/lisa_wolfgang/\"\n }, {\n \"name\": \"Maximouse\",\n \"link\": \"https://scratch.mit.edu/users/Maximouse/\"\n }],\n \"info\": [{\n \"id\": \"hide-icons-update\",\n \"text\": \"To hide menu bar icons, use the \\\"Customizable menu bar\\\" addon.\"\n }],\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }, {\n \"url\": \"hide-labels.css\",\n \"if\": {\n \"settings\": {\n \"hideLabels\": true\n }\n }\n }, {\n \"url\": \"sprite-properties.css\",\n \"if\": {\n \"addonEnabled\": [\"sprite-properties\"]\n }\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"id\": \"hideLabels\",\n \"type\": \"boolean\",\n \"name\": \"Hide button labels in costume and sound editor\",\n \"default\": true\n }],\n \"dynamicDisable\": true,\n \"enabledByDefault\": false\n};\n/* harmony default export */ var editor_compact_manifest_entry = (editor_compact_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/custom-menu-bar/_manifest_entry.js\n/* generated by pull.js */\nconst custom_menu_bar_manifest_entry_manifest = {\n \"name\": \"Customizable editor menu bar\",\n \"description\": \"Allows you to hide specific editor menu bar items or remove their labels or icons.\",\n \"credits\": [{\n \"name\": \"philipp2007\"\n }, {\n \"name\": \"CST1229\",\n \"link\": \"https://scratch.mit.edu/users/CST1229/\"\n }, {\n \"name\": \"lisa_wolfgang\",\n \"link\": \"https://scratch.mit.edu/users/lisa_wolfgang/\"\n }],\n \"info\": [{\n \"type\": \"notice\",\n \"id\": \"small-screens\",\n \"text\": \"The text labels may be automatically replaced by icons on smaller windows.\"\n }],\n \"tags\": [],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Show menu...\",\n \"id\": \"menu-labels\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"name\": \"Icons and labels\",\n \"id\": \"both\"\n }, {\n \"name\": \"Icons only\",\n \"id\": \"icons\"\n }, {\n \"name\": \"Labels only\",\n \"id\": \"labels\"\n }],\n \"default\": \"both\"\n }],\n \"userstyles\": [{\n \"url\": \"menu-icons.css\",\n \"if\": {\n \"settings\": {\n \"menu-labels\": \"icons\"\n }\n }\n }, {\n \"url\": \"menu-labels.css\",\n \"if\": {\n \"settings\": {\n \"menu-labels\": \"labels\"\n }\n }\n }],\n \"dynamicDisable\": true,\n \"enabledByDefault\": false\n};\n/* harmony default export */ var custom_menu_bar_manifest_entry = (custom_menu_bar_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-theme3/_manifest_entry.js\n/* generated by pull.js */\nconst editor_theme3_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Customizable block colors\",\n \"description\": \"Edit block colors for each category in the editor.\",\n \"credits\": [{\n \"name\": \"NitroCipher/ZenithRogue\"\n }, {\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/users/TheColaber/\"\n }, {\n \"name\": \"DNin01\"\n }],\n \"customCssVariables\": [{\n \"name\": \"commentText\",\n \"value\": {\n \"type\": \"textColor\",\n \"source\": {\n \"type\": \"settingValue\",\n \"settingId\": \"comment-color\"\n }\n }\n }, {\n \"name\": \"commentTextTransparent\",\n \"value\": {\n \"type\": \"textColor\",\n \"black\": \"rgba(0, 0, 0, 0.50)\",\n \"white\": \"rgba(255, 255, 255, 0.50)\",\n \"source\": {\n \"type\": \"settingValue\",\n \"settingId\": \"comment-color\"\n }\n }\n }, {\n \"name\": \"commentBorder\",\n \"value\": {\n \"type\": \"multiply\",\n \"source\": {\n \"type\": \"settingValue\",\n \"settingId\": \"comment-color\"\n },\n \"r\": 0.7,\n \"g\": 0.7,\n \"b\": 0.7\n }\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"theme3.js\"\n }],\n \"userstyles\": [{\n \"url\": \"theme3.css\"\n }, {\n \"url\": \"black_text.css\",\n \"if\": {\n \"settings\": {\n \"text\": \"black\"\n }\n }\n }, {\n \"url\": \"color_on_white.css\",\n \"if\": {\n \"settings\": {\n \"text\": \"colorOnWhite\"\n }\n }\n }, {\n \"url\": \"color_on_black.css\",\n \"if\": {\n \"settings\": {\n \"text\": \"colorOnBlack\"\n }\n }\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"motion\",\n \"id\": \"motion-color\",\n \"type\": \"color\",\n \"default\": \"#4C97FF\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"looks\",\n \"id\": \"looks-color\",\n \"type\": \"color\",\n \"default\": \"#9966FF\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"sounds\",\n \"id\": \"sounds-color\",\n \"type\": \"color\",\n \"default\": \"#CF63CF\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"events\",\n \"id\": \"events-color\",\n \"type\": \"color\",\n \"default\": \"#FFBF00\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"control\",\n \"id\": \"control-color\",\n \"type\": \"color\",\n \"default\": \"#FFAB19\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"sensing\",\n \"id\": \"sensing-color\",\n \"type\": \"color\",\n \"default\": \"#5CB1D6\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"operators\",\n \"id\": \"operators-color\",\n \"type\": \"color\",\n \"default\": \"#59C059\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"variables\",\n \"id\": \"data-color\",\n \"type\": \"color\",\n \"default\": \"#FF8C1A\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"lists\",\n \"id\": \"data-lists-color\",\n \"type\": \"color\",\n \"default\": \"#FF661A\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"custom\",\n \"id\": \"custom-color\",\n \"type\": \"color\",\n \"default\": \"#FF6680\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"extensions\",\n \"id\": \"Pen-color\",\n \"type\": \"color\",\n \"default\": \"#0FBD8C\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Addon blocks\",\n \"id\": \"sa-color\",\n \"type\": \"color\",\n \"default\": \"#29BEB8\",\n \"allowTransparency\": true,\n \"if\": {\n \"addonEnabled\": [\"debugger\"]\n }\n }, {\n \"dynamic\": true,\n \"name\": \"Block inputs\",\n \"id\": \"input-color\",\n \"type\": \"color\",\n \"default\": \"#FFFFFF\",\n \"allowTransparency\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Comments\",\n \"id\": \"comment-color\",\n \"type\": \"color\",\n \"default\": \"#FEF49C\"\n }, {\n \"dynamic\": true,\n \"name\": \"Text color\",\n \"id\": \"text\",\n \"type\": \"select\",\n \"default\": \"white\",\n \"potentialValues\": [{\n \"id\": \"white\",\n \"name\": \"White\"\n }, {\n \"id\": \"black\",\n \"name\": \"Black\"\n }, {\n \"id\": \"colorOnWhite\",\n \"name\": \"Colored on white background\"\n }, {\n \"id\": \"colorOnBlack\",\n \"name\": \"Colored on black background\"\n }]\n }],\n \"tags\": [\"theme\"],\n \"enabledByDefault\": false,\n \"presets\": [{\n \"name\": \"High contrast\",\n \"id\": \"contrast\",\n \"description\": \"Scratch 3.0's high contrast block color palette\",\n \"values\": {\n \"motion-color\": \"#80B5FF\",\n \"looks-color\": \"#CCB3FF\",\n \"sounds-color\": \"#E19DE1\",\n \"events-color\": \"#FFD966\",\n \"control-color\": \"#FFBE4C\",\n \"sensing-color\": \"#85C4E0\",\n \"operators-color\": \"#7ECE7E\",\n \"data-color\": \"#FFA54C\",\n \"data-lists-color\": \"#FF9966\",\n \"custom-color\": \"#FF99AA\",\n \"Pen-color\": \"#13ECAF\",\n \"sa-color\": \"#34E4D0\",\n \"comment-color\": \"#FEF49C\",\n \"input-color\": \"#FFFFFF\",\n \"text\": \"black\"\n }\n }, {\n \"name\": \"Dark\",\n \"id\": \"new-dark\",\n \"description\": \"Dark versions of the default colors that look good in dark themes\",\n \"values\": {\n \"motion-color\": \"#2461B7\",\n \"looks-color\": \"#633EAC\",\n \"sounds-color\": \"#863286\",\n \"events-color\": \"#AE8500\",\n \"control-color\": \"#B07200\",\n \"sensing-color\": \"#468CAF\",\n \"operators-color\": \"#438C43\",\n \"data-color\": \"#B46313\",\n \"data-lists-color\": \"#A84210\",\n \"custom-color\": \"#973545\",\n \"Pen-color\": \"#2A7468\",\n \"sa-color\": \"#2A797C\",\n \"comment-color\": \"#423F24\",\n \"input-color\": \"#FFFFFF\",\n \"text\": \"white\"\n }\n }, {\n \"name\": \"Darker\",\n \"id\": \"dark\",\n \"description\": \"Even darker versions of the default colors\",\n \"values\": {\n \"motion-color\": \"#004099\",\n \"looks-color\": \"#220066\",\n \"sounds-color\": \"#752475\",\n \"events-color\": \"#997300\",\n \"control-color\": \"#664100\",\n \"sensing-color\": \"#1f5f7a\",\n \"operators-color\": \"#235c23\",\n \"data-color\": \"#b35900\",\n \"data-lists-color\": \"#993300\",\n \"custom-color\": \"#99004d\",\n \"Pen-color\": \"#064734\",\n \"sa-color\": \"#166966\",\n \"comment-color\": \"#423f24\",\n \"input-color\": \"#202020\",\n \"text\": \"white\"\n }\n }, {\n \"name\": \"Scratch 3.0 tweaked\",\n \"id\": \"tweaks\",\n \"description\": \"Scratch 3.0's block colors with Events, Control, and Custom blocks that resemble Scratch 2.0's colors\",\n \"values\": {\n \"motion-color\": \"#4C97FF\",\n \"looks-color\": \"#9966FF\",\n \"sounds-color\": \"#CF63CF\",\n \"events-color\": \"#DE9E2E\",\n \"control-color\": \"#FFBF00\",\n \"sensing-color\": \"#5CB1D6\",\n \"operators-color\": \"#59C059\",\n \"data-color\": \"#FF8C1A\",\n \"data-lists-color\": \"#FF661A\",\n \"custom-color\": \"#5f49d8\",\n \"Pen-color\": \"#0FBD8C\",\n \"sa-color\": \"#29BEB8\",\n \"comment-color\": \"#FEF49C\",\n \"input-color\": \"#FFFFFF\",\n \"text\": \"white\"\n }\n }, {\n \"name\": \"Scratch 2.0 colors\",\n \"id\": \"original\",\n \"description\": \"The original block colors from Scratch 2.0\",\n \"values\": {\n \"motion-color\": \"#4a6cd4\",\n \"looks-color\": \"#8a55d7\",\n \"sounds-color\": \"#bb42c3\",\n \"events-color\": \"#c88330\",\n \"control-color\": \"#e1a91a\",\n \"sensing-color\": \"#2ca5e2\",\n \"operators-color\": \"#5cb712\",\n \"data-color\": \"#ee7d16\",\n \"data-lists-color\": \"#cc5b22\",\n \"custom-color\": \"#632d99\",\n \"Pen-color\": \"#0e9a6c\",\n \"sa-color\": \"#29beb8\",\n \"comment-color\": \"#FFFFD2\",\n \"input-color\": \"#ffffff\",\n \"text\": \"white\"\n }\n }, {\n \"name\": \"Black\",\n \"id\": \"black\",\n \"description\": \"Makes block backgrounds black and borders/text colored\",\n \"values\": {\n \"motion-color\": \"#80B5FF\",\n \"looks-color\": \"#CCB3FF\",\n \"sounds-color\": \"#E19DE1\",\n \"events-color\": \"#FFD966\",\n \"control-color\": \"#FFBE4C\",\n \"sensing-color\": \"#85C4E0\",\n \"operators-color\": \"#7ECE7E\",\n \"data-color\": \"#FFA54C\",\n \"data-lists-color\": \"#FF9966\",\n \"custom-color\": \"#FF99AA\",\n \"Pen-color\": \"#13ECAF\",\n \"sa-color\": \"#34E4D0\",\n \"comment-color\": \"#FEF49C\",\n \"input-color\": \"#202020\",\n \"text\": \"colorOnBlack\"\n }\n }]\n};\n/* harmony default export */ var editor_theme3_manifest_entry = (editor_theme3_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/custom-block-text/_manifest_entry.js\n/* generated by pull.js */\nconst custom_block_text_manifest_entry_manifest = {\n \"name\": \"Customizable block text style\",\n \"description\": \"Lets you customize the style of text on blocks, including adjusting the size, using bold text, or adding a shadow.\",\n \"tags\": [\"theme\"],\n \"credits\": [{\n \"name\": \"Secret-chest\"\n }, {\n \"name\": \"_nix\",\n \"link\": \"https://scratch.mit.edu/users/_nix/\"\n }, {\n \"name\": \"DNin01\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Text size (%)\",\n \"id\": \"size\",\n \"type\": \"integer\",\n \"min\": 75,\n \"max\": 200,\n \"default\": 100\n }, {\n \"dynamic\": true,\n \"name\": \"Bold text\",\n \"id\": \"bold\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"dynamic\": true,\n \"name\": \"Shadow under text\",\n \"id\": \"shadow\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"dynamicDisable\": true,\n \"enabledByDefault\": false\n};\n/* harmony default export */ var custom_block_text_manifest_entry = (custom_block_text_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-colored-context-menus/_manifest_entry.js\n/* generated by pull.js */\nconst editor_colored_context_menus_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Colored context menus\",\n \"description\": \"Makes block right click context menus colorful.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"userscript.css\"\n }],\n \"tags\": [\"theme\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var editor_colored_context_menus_manifest_entry = (editor_colored_context_menus_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-stage-left/_manifest_entry.js\n/* generated by pull.js */\nconst editor_stage_left_manifest_entry_manifest = {\n \"noTranslations\": true,\n \"name\": \"Display stage on left side\",\n \"description\": \"Moves the stage to the left side of the editor, like in Scratch 2.0.\",\n \"info\": [{\n \"id\": \"reverseOrder\",\n \"text\": \"To change the position of buttons above the stage, use the \\\"reverse order of project controls\\\" addon.\"\n }],\n \"credits\": [{\n \"name\": \"NitroCipher/ZenithRogue\"\n }],\n \"userscripts\": [{\n \"url\": \"fix-share-the-love.js\"\n }],\n \"dynamicDisable\": true,\n \"userstyles\": [{\n \"url\": \"stageleft.css\"\n }],\n \"tags\": [\"theme\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var editor_stage_left_manifest_entry = (editor_stage_left_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-buttons-reverse-order/_manifest_entry.js\n/* generated by pull.js */\nconst editor_buttons_reverse_order_manifest_entry_manifest = {\n \"name\": \"Reverse order of project controls\",\n \"description\": \"Moves the green flag and stop buttons to the right and the full screen button to the left, like in Scratch 2.0.\",\n \"tags\": [\"theme\"],\n \"dynamicDisable\": true,\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }]\n};\n/* harmony default export */ var editor_buttons_reverse_order_manifest_entry = (editor_buttons_reverse_order_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/variable-manager/_manifest_entry.js\n/* generated by pull.js */\nconst variable_manager_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Variable manager\",\n \"description\": \"Adds a tab next to \\\"sounds\\\" in the editor for easily updating variables and lists.\",\n \"credits\": [{\n \"name\": \"Jeffalo\"\n }, {\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"dynamicDisable\": true,\n \"tags\": [],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var variable_manager_manifest_entry = (variable_manager_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/search-sprites/_manifest_entry.js\n/* generated by pull.js */\nconst search_sprites_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Search box in sprite pane\",\n \"description\": \"Adds a search box to the sprite pane to search for sprites by name.\",\n \"credits\": [{\n \"name\": \"BarelySmooth\",\n \"link\": \"https://scratch.mit.edu/users/BarelySmooth/\"\n }, {\n \"name\": \"GarboMuffin\"\n }],\n \"userstyles\": [{\n \"url\": \"search-bar.css\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true,\n \"tags\": [],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var search_sprites_manifest_entry = (search_sprites_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/sprite-properties/_manifest_entry.js\n/* generated by pull.js */\nconst sprite_properties_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Collapsing sprite properties\",\n \"description\": \"Hides the sprite properties panel by default, like in Scratch 2.0. Use the info button on the currently selected sprite or double-click a sprite to show the properties panel again. To re-hide it, use the collapse button in the properties panel or double-click a sprite.\",\n \"tags\": [\"recommended\"],\n \"credits\": [{\n \"name\": \"lisa_wolfgang\",\n \"link\": \"https://scratch.mit.edu/users/lisa_wolfgang/\"\n }],\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"customCssVariables\": [{\n \"name\": \"transitionDuration\",\n \"value\": {\n \"type\": \"map\",\n \"source\": {\n \"type\": \"settingValue\",\n \"settingId\": \"transitionDuration\"\n },\n \"options\": {\n \"none\": \"0s\",\n \"short\": \"0.15s\",\n \"default\": \"0.25s\",\n \"long\": \"0.5s\"\n }\n }\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Automatically collapse when mouse leaves sprite panel\",\n \"id\": \"autoCollapse\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"dynamic\": true,\n \"name\": \"Collapse panel by default\",\n \"id\": \"hideByDefault\",\n \"type\": \"boolean\",\n \"default\": true,\n \"if\": {\n \"settings\": {\n \"autoCollapse\": false\n }\n }\n }, {\n \"dynamic\": true,\n \"name\": \"Animation speed\",\n \"id\": \"transitionDuration\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"id\": \"none\",\n \"name\": \"Instant\"\n }, {\n \"id\": \"short\",\n \"name\": \"Quick\"\n }, {\n \"id\": \"default\",\n \"name\": \"Default\"\n }, {\n \"id\": \"long\",\n \"name\": \"Slow\"\n }],\n \"default\": \"default\"\n }],\n \"dynamicDisable\": true,\n \"enabledByDefault\": false\n};\n/* harmony default export */ var sprite_properties_manifest_entry = (sprite_properties_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/gamepad/_manifest_entry.js\n/* generated by pull.js */\nconst gamepad_manifest_entry_manifest = {\n \"name\": \"Gamepad support\",\n \"description\": \"Interact with projects using a USB or Bluetooth controller/gamepad.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }, {\n \"url\": \"gamepadlib.css\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Hide settings button when no controllers detected\",\n \"type\": \"boolean\",\n \"default\": false,\n \"id\": \"hide\"\n }],\n \"tags\": [],\n \"enabledByDefault\": false,\n \"dynamicDisable\": true\n};\n/* harmony default export */ var gamepad_manifest_entry = (gamepad_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-sounds/_manifest_entry.js\n/* generated by pull.js */\nconst editor_sounds_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Editor sound effects\",\n \"description\": \"Plays sound effects when you connect or delete blocks.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"tags\": [],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var editor_sounds_manifest_entry = (editor_sounds_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/folders/_manifest_entry.js\n/* generated by pull.js */\nconst folders_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Sprite folders\",\n \"description\": \"Adds folders to the sprite pane, as well as costume and sound lists. To create a folder, right click any sprite and click \\\"create folder\\\". Click a folder to open or close it. Right click a sprite to see what folders you can move it to, or alternatively drag and drop it into an open folder. This feature works by adding \\\"[folderName]//\\\" at the beginning of the names for your sprites.\",\n \"info\": [{\n \"type\": \"notice\",\n \"text\": \"Users with this feature enabled will be able to see the folders in your project. Anyone else will see sprite lists normally (no folders).\",\n \"id\": \"notice-folders-are-public\"\n }],\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": true\n};\n/* harmony default export */ var folders_manifest_entry = (folders_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/block-switching/_manifest_entry.js\n/* generated by pull.js */\nconst block_switching_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Block switching\",\n \"description\": \"Right click on a block to switch it to a related block.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }, {\n \"name\": \"pufferfish101007\",\n \"link\": \"https://scratch.mit.edu/users/pufferfish101007/\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"tags\": [\"recommended\"],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Motion blocks\",\n \"id\": \"motion\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Looks blocks\",\n \"id\": \"looks\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Sound blocks\",\n \"id\": \"sound\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Event blocks\",\n \"id\": \"event\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Control blocks\",\n \"id\": \"control\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Operator blocks\",\n \"id\": \"operator\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Sensing blocks\",\n \"id\": \"sensing\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Data blocks\",\n \"id\": \"data\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Extension blocks\",\n \"id\": \"extension\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Addon blocks\",\n \"id\": \"sa\",\n \"type\": \"boolean\",\n \"default\": true,\n \"if\": {\n \"addonEnabled\": [\"debugger\"]\n }\n }, {\n \"dynamic\": true,\n \"name\": \"Custom block parameters\",\n \"id\": \"customargs\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Shown custom block parameters options\",\n \"id\": \"customargsmode\",\n \"type\": \"select\",\n \"default\": \"defOnly\",\n \"potentialValues\": [{\n \"id\": \"defOnly\",\n \"name\": \"Parameters in own custom block\"\n }, {\n \"id\": \"all\",\n \"name\": \"Parameters in all custom blocks in sprite\"\n }],\n \"if\": {\n \"settings\": {\n \"customargs\": true\n }\n }\n }, {\n \"dynamic\": true,\n \"name\": \"Show option to change block to self\",\n \"id\": \"noop\",\n \"type\": \"boolean\",\n \"default\": true\n }],\n \"enabledByDefault\": true\n};\n/* harmony default export */ var block_switching_manifest_entry = (block_switching_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/load-extensions/_manifest_entry.js\n/* generated by pull.js */\nconst load_extensions_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Automatically add extensions\",\n \"description\": \"Auto-shows music, pen, and other extensions in the block category menu in the editor.\",\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"name\": \"Music\",\n \"id\": \"music\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"name\": \"Pen\",\n \"id\": \"pen\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"name\": \"Text to Speech\",\n \"id\": \"text2speech\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"name\": \"Translate\",\n \"id\": \"translate\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"dynamicDisable\": true,\n \"tags\": []\n};\n/* harmony default export */ var load_extensions_manifest_entry = (load_extensions_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/custom-zoom/_manifest_entry.js\n/* generated by pull.js */\nconst custom_zoom_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Customizable code area zoom\",\n \"description\": \"Choose custom settings for the minimum, maximum, speed, and start size of the zoom of scripts in the code area, and autohide the controls.\",\n \"tags\": [],\n \"credits\": [{\n \"name\": \"ErrorGamer2000\",\n \"link\": \"https://scratch.mit.edu/users/ErrorGamer2000/\"\n }],\n \"enabledByDefault\": false,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Maximum Zoom (100-500%)\",\n \"id\": \"maxZoom\",\n \"type\": \"integer\",\n \"min\": 100,\n \"default\": 300,\n \"max\": 500\n }, {\n \"dynamic\": true,\n \"name\": \"Minimum Zoom (1-100%)\",\n \"id\": \"minZoom\",\n \"type\": \"integer\",\n \"min\": 1,\n \"default\": 30,\n \"max\": 100\n }, {\n \"dynamic\": true,\n \"name\": \"Start Zoom (50-500%)\",\n \"id\": \"startZoom\",\n \"type\": \"integer\",\n \"min\": 50,\n \"default\": 68,\n \"max\": 500\n }, {\n \"dynamic\": true,\n \"name\": \"Zoom Speed (50-200%)\",\n \"id\": \"zoomSpeed\",\n \"type\": \"integer\",\n \"min\": 50,\n \"default\": 100,\n \"max\": 200\n }, {\n \"name\": \"Autohide Zoom Controls\",\n \"id\": \"autohide\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"dynamic\": true,\n \"name\": \"Autohide Animation Speed\",\n \"id\": \"speed\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"id\": \"none\",\n \"name\": \"Instant\"\n }, {\n \"id\": \"short\",\n \"name\": \"Quick\"\n }, {\n \"id\": \"default\",\n \"name\": \"Default\"\n }, {\n \"id\": \"long\",\n \"name\": \"Slow\"\n }],\n \"default\": \"default\",\n \"if\": {\n \"settings\": {\n \"autohide\": true\n }\n }\n }]\n};\n/* harmony default export */ var custom_zoom_manifest_entry = (custom_zoom_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/copy-reporter/_manifest_entry.js\n/* generated by pull.js */\nconst copy_reporter_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Copy reporter values\",\n \"description\": \"Adds the option to copy values displayed by variable monitors (from the right click context menu) and block reporter balloons.\",\n \"credits\": [{\n \"name\": \"TheKodeToad\"\n }],\n \"tags\": [],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var copy_reporter_manifest_entry = (copy_reporter_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/initialise-sprite-position/_manifest_entry.js\n/* generated by pull.js */\nconst initialise_sprite_position_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Customizable new sprite position\",\n \"description\": \"Change where newly created sprites are placed on the stage.\",\n \"credits\": [{\n \"name\": \"pufferfish101007\",\n \"link\": \"https://scratch.mit.edu/users/pufferfish101007/\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"id\": \"x\",\n \"name\": \"X position\",\n \"type\": \"integer\",\n \"default\": 0,\n \"min\": -240,\n \"max\": 240\n }, {\n \"dynamic\": true,\n \"id\": \"y\",\n \"name\": \"Y position\",\n \"type\": \"integer\",\n \"default\": 0,\n \"min\": -180,\n \"max\": 180\n }, {\n \"dynamic\": true,\n \"id\": \"library\",\n \"name\": \"Place sprites from library at random position\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"dynamic\": true,\n \"id\": \"duplicate\",\n \"name\": \"Position for duplicated sprites\",\n \"type\": \"select\",\n \"default\": \"randomize\",\n \"potentialValues\": [{\n \"id\": \"custom\",\n \"name\": \"Specified x/y position\"\n }, {\n \"id\": \"keep\",\n \"name\": \"Same as original sprite\"\n }, {\n \"id\": \"randomize\",\n \"name\": \"Random\"\n }]\n }],\n \"tags\": [],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var initialise_sprite_position_manifest_entry = (initialise_sprite_position_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/blocks2image/_manifest_entry.js\n/* generated by pull.js */\nconst blocks2image_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Save blocks as image\",\n \"description\": \"Right click the code area to export blocks as SVG/PNG images.\",\n \"tags\": [],\n \"credits\": [{\n \"name\": \"summerscar\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var blocks2image_manifest_entry = (blocks2image_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/remove-curved-stage-border/_manifest_entry.js\n/* generated by pull.js */\nconst remove_curved_stage_border_manifest_entry_manifest = {\n \"noTranslations\": true,\n \"name\": \"Remove curved stage border\",\n \"description\": \"Removes the curved border around the stage, allowing you to see the corners.\",\n \"tags\": [\"theme\"],\n \"credits\": [{\n \"name\": \"Tacodiva\",\n \"link\": \"https://scratch.mit.edu/users/Tacodiva7729/\"\n }],\n \"enabledByDefault\": false,\n \"dynamicDisable\": true,\n \"userstyles\": [{\n \"url\": \"remove-borders.css\"\n }]\n};\n/* harmony default export */ var remove_curved_stage_border_manifest_entry = (remove_curved_stage_border_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/transparent-orphans/_manifest_entry.js\n/* generated by pull.js */\nconst transparent_orphans_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Block transparency\",\n \"description\": \"Adjust the transparency for blocks in the editor, with separate options for orphaned blocks (those without a hat block at the top) and blocks that are being dragged.\",\n \"tags\": [],\n \"dynamicDisable\": true,\n \"credits\": [{\n \"name\": \"ErrorGamer2000\",\n \"link\": \"https://scratch.mit.edu/users/ErrorGamer2000/\"\n }, {\n \"name\": \"GarboMuffin\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Block transparency (%)\",\n \"id\": \"block\",\n \"type\": \"integer\",\n \"min\": 0,\n \"max\": 100,\n \"default\": 0\n }, {\n \"dynamic\": true,\n \"name\": \"Orphaned transparency (%)\",\n \"id\": \"orphan\",\n \"type\": \"integer\",\n \"min\": 0,\n \"max\": 100,\n \"default\": 25\n }, {\n \"dynamic\": true,\n \"name\": \"Dragged transparency (%)\",\n \"id\": \"dragged\",\n \"type\": \"integer\",\n \"min\": 0,\n \"max\": 100,\n \"default\": 25\n }],\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }]\n};\n/* harmony default export */ var transparent_orphans_manifest_entry = (transparent_orphans_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/paint-by-default/_manifest_entry.js\n/* generated by pull.js */\nconst paint_by_default_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Paint costume by default\",\n \"description\": \"Changes the default action of \\\"Choose a Sprite/Costume/Backdrop/Sound\\\" buttons, which open the library by default.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"id\": \"sprite\",\n \"name\": \"Add sprite\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"id\": \"library\",\n \"name\": \"Library\"\n }, {\n \"id\": \"paint\",\n \"name\": \"Paint\"\n }, {\n \"id\": \"surprise\",\n \"name\": \"Surprise\"\n }, {\n \"id\": \"upload\",\n \"name\": \"Upload\"\n }],\n \"default\": \"paint\"\n }, {\n \"dynamic\": true,\n \"id\": \"costume\",\n \"name\": \"Add costume\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"id\": \"library\",\n \"name\": \"Library\"\n }, {\n \"id\": \"paint\",\n \"name\": \"Paint\"\n }, {\n \"id\": \"surprise\",\n \"name\": \"Surprise\"\n }, {\n \"id\": \"upload\",\n \"name\": \"Upload\"\n }],\n \"default\": \"paint\"\n }, {\n \"dynamic\": true,\n \"id\": \"backdrop\",\n \"name\": \"Add backdrop\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"id\": \"library\",\n \"name\": \"Library\"\n }, {\n \"id\": \"paint\",\n \"name\": \"Paint\"\n }, {\n \"id\": \"surprise\",\n \"name\": \"Surprise\"\n }, {\n \"id\": \"upload\",\n \"name\": \"Upload\"\n }],\n \"default\": \"paint\"\n }, {\n \"dynamic\": true,\n \"id\": \"sound\",\n \"name\": \"Add sound\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"id\": \"library\",\n \"name\": \"Library\"\n }, {\n \"id\": \"record\",\n \"name\": \"Record\"\n }, {\n \"id\": \"surprise\",\n \"name\": \"Surprise\"\n }, {\n \"id\": \"upload\",\n \"name\": \"Upload\"\n }],\n \"default\": \"library\"\n }],\n \"dynamicDisable\": true,\n \"tags\": [\"recommended\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var paint_by_default_manifest_entry = (paint_by_default_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/block-cherry-picking/_manifest_entry.js\n/* generated by pull.js */\nconst block_cherry_picking_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Grab single block with Ctrl key\",\n \"description\": \"Adds the ability to drag a single block out of the middle of a script (instead of the entire stack attached below it) while holding the Ctrl key.\",\n \"info\": [{\n \"text\": \"On macOS, use the Cmd key instead of the Ctrl key.\",\n \"id\": \"macContextDisabled\"\n }, {\n \"text\": \"If \\\"flip controls\\\" is enabled, grabbing blocks individually will be the default behavior. Hold Ctrl to drag the entire stack.\",\n \"id\": \"flipControls\"\n }],\n \"credits\": [{\n \"name\": \"lisa_wolfgang\",\n \"link\": \"https://scratch.mit.edu/users/lisa_wolfgang/\"\n }, {\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Flip controls\",\n \"id\": \"invertDrag\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"tags\": [],\n \"dynamicDisable\": true,\n \"enabledByDefault\": true\n};\n/* harmony default export */ var block_cherry_picking_manifest_entry = (block_cherry_picking_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/hide-new-variables/_manifest_entry.js\n/* generated by pull.js */\nconst hide_new_variables_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Hide new variables\",\n \"description\": \"Do not automatically show monitors for newly created variables or lists.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"tags\": [],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var hide_new_variables_manifest_entry = (hide_new_variables_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-extra-keys/_manifest_entry.js\n/* generated by pull.js */\nconst editor_extra_keys_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Extra key options\",\n \"description\": \"Adds more keys to the \\\"key () pressed?\\\" and \\\"when () key pressed\\\" block dropdowns, such as enter, dot, comma, and more. These keys will work even for users who do not have this addon.\",\n \"tags\": [],\n \"credits\": [{\n \"name\": \"Tacodiva\",\n \"link\": \"https://scratch.mit.edu/users/Tacodiva7729/\"\n }],\n \"info\": [{\n \"type\": \"notice\",\n \"text\": \"The \\\"experimental keys\\\" include equals, slash, semicolon and more. They may not work on all operating systems or keyboard layouts.\",\n \"id\": \"experimentalKeysWarn\"\n }, {\n \"type\": \"notice\",\n \"text\": \"The \\\"Shift keys\\\" include keys which typically require the Shift key and a number key, like hashtag, exclamation mark and more. These keys only work with the \\\"when () key pressed\\\" block and do not work on all operating systems or keyboard layouts.\",\n \"id\": \"shiftKeysWarn\"\n }, {\n \"type\": \"warning\",\n \"text\": \"The \\\"TurboWarp keys\\\" will only work in TurboWarp, not in Scratch.\",\n \"id\": \"twKeysWarn\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Show experimental keys\",\n \"id\": \"experimentalKeys\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"dynamic\": true,\n \"name\": \"Show Shift keys\",\n \"id\": \"shiftKeys\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"dynamic\": true,\n \"name\": \"Show TurboWarp keys\",\n \"id\": \"twKeys\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var editor_extra_keys_manifest_entry = (editor_extra_keys_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/hide-delete-button/_manifest_entry.js\n/* generated by pull.js */\nconst hide_delete_button_manifest_entry_manifest = {\n \"name\": \"Hide delete button\",\n \"description\": \"Hides delete button (trash can icon) from sprites, costumes and sounds. They can still be deleted using the right click context menu.\",\n \"tags\": [],\n \"info\": [{\n \"text\": \"Tip: If you accidentally delete a sprite, costume, or sound, you can undo the deletion by clicking Edit in the menu bar then Restore.\",\n \"id\": \"restoretip\"\n }],\n \"dynamicDisable\": true,\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Sprites\",\n \"id\": \"sprites\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Costumes and backdrops\",\n \"id\": \"costumes\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Sounds\",\n \"id\": \"sounds\",\n \"type\": \"boolean\",\n \"default\": true\n }],\n \"userstyles\": [{\n \"url\": \"sprites.css\",\n \"if\": {\n \"settings\": {\n \"sprites\": true\n }\n }\n }, {\n \"url\": \"costumes.css\",\n \"if\": {\n \"settings\": {\n \"costumes\": true\n }\n }\n }, {\n \"url\": \"sounds.css\",\n \"if\": {\n \"settings\": {\n \"sounds\": true\n }\n }\n }]\n};\n/* harmony default export */ var hide_delete_button_manifest_entry = (hide_delete_button_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/no-script-bumping/_manifest_entry.js\n/* generated by pull.js */\nconst no_script_bumping_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Do not automatically space overlapping scripts\",\n \"description\": \"Allows scripts to be moved and modified without causing overlapping scripts to move around.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true,\n \"tags\": [],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var no_script_bumping_manifest_entry = (no_script_bumping_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/disable-stage-drag-select/_manifest_entry.js\n/* generated by pull.js */\nconst disable_stage_drag_select_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Non-draggable sprites in editor\",\n \"description\": \"Removes the ability to drag sprites around on the stage in the editor, except those explicitly set as draggable. Hold Shift while dragging a sprite to move it normally.\",\n \"credits\": [{\n \"name\": \"Chrome_Cat\",\n \"link\": \"https://scratch.mit.edu/users/Chrome_Cat/\"\n }, {\n \"name\": \"GarboMuffin\"\n }, {\n \"name\": \"Mr_MPH\",\n \"link\": \"https://scratch.mit.edu/users/Mr_MPH/\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"name\": \"Allow dragging while project is stopped\",\n \"id\": \"drag_while_stopped\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"tags\": [],\n \"enabledByDefault\": false,\n \"dynamicDisable\": true\n};\n/* harmony default export */ var disable_stage_drag_select_manifest_entry = (disable_stage_drag_select_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/move-to-top-bottom/_manifest_entry.js\n/* generated by pull.js */\nconst move_to_top_bottom_manifest_entry_manifest = {\n \"enabledByDefault\": true,\n \"editorOnly\": true,\n \"name\": \"Move costume to top or bottom\",\n \"description\": \"Adds options to the right click context menu for costumes and sounds to move them to the top or the bottom of the list.\",\n \"info\": [{\n \"text\": \"This addon was previously part of the \\\"developer tools\\\" addon but has moved here.\",\n \"id\": \"developer-tools\"\n }],\n \"tags\": [],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var move_to_top_bottom_manifest_entry = (move_to_top_bottom_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/move-to-top-layer/_manifest_entry.js\n/* generated by pull.js */\nconst move_to_top_layer_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Move sprite to front layer\",\n \"description\": \"Shift+Click a sprite within the sprite pane to move it to the front (top layer) of the stage.\",\n \"credits\": [{\n \"name\": \"Norbiros\",\n \"link\": \"https://scratch.mit.edu/users/Norbir/\"\n }, {\n \"name\": \"s_federici\",\n \"link\": \"https://scratch.mit.edu/users/s_federici/\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true,\n \"tags\": []\n};\n/* harmony default export */ var move_to_top_layer_manifest_entry = (move_to_top_layer_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/disable-paste-offset/_manifest_entry.js\n/* generated by pull.js */\nconst disable_paste_offset_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Do not shift pasted items\",\n \"description\": \"Paste copied items at their original position instead of shifted slightly in the costume editor.\",\n \"info\": [{\n \"text\": \"This behavior can also be achieved without this addon by Alt+Clicking the item.\",\n \"id\": \"vanilla\"\n }],\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"tags\": [],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var disable_paste_offset_manifest_entry = (disable_paste_offset_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/block-duplicate/_manifest_entry.js\n/* generated by pull.js */\nconst block_duplicate_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Duplicate script with Alt key\",\n \"description\": \"Quickly duplicate a script by dragging it while holding the Alt key. Hold Ctrl as well to only duplicate a single block instead of the entire stack attached below it.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"info\": [{\n \"text\": \"On macOS, use the Option key instead of the Alt key and Command key instead of the Control key.\",\n \"id\": \"mac\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true,\n \"tags\": [],\n \"enabledByDefault\": true\n};\n/* harmony default export */ var block_duplicate_manifest_entry = (block_duplicate_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/rename-broadcasts/_manifest_entry.js\n/* generated by pull.js */\nconst rename_broadcasts_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"enabledByDefault\": true,\n \"name\": \"Rename broadcasts\",\n \"description\": \"Adds an option to rename broadcast messages in the broadcast blocks' dropdowns.\",\n \"credits\": [{\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/users/TheColaber\"\n }, {\n \"name\": \"GarboMuffin\"\n }],\n \"tags\": [],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var rename_broadcasts_manifest_entry = (rename_broadcasts_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/swap-local-global/_manifest_entry.js\n/* generated by pull.js */\nconst swap_local_global_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Switch variables between \\\"For all sprites\\\" and \\\"For this sprite only\\\"\",\n \"description\": \"Adds more options when renaming an existing variable or list: allows changing between \\\"For all sprites\\\" and \\\"For this sprite only\\\" and whether variables are stored in the cloud. Also adds a new option when right clicking a variable/list to quickly change its scope.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"tags\": [],\n \"dynamicDisable\": true,\n \"enabledByDefault\": false\n};\n/* harmony default export */ var swap_local_global_manifest_entry = (swap_local_global_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-comment-previews/_manifest_entry.js\n/* generated by pull.js */\nconst editor_comment_previews_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Editor comment previews\",\n \"description\": \"Allows you to preview the contents of comments by hovering over collapsed comments and blocks. You can use this to view comments that are off-screen, identify a loop block from the bottom by its preview, fit many long comments in a small space, and more.\",\n \"tags\": [],\n \"credits\": [{\n \"name\": \"lisa_wolfgang\",\n \"link\": \"https://scratch.mit.edu/users/lisa_wolfgang/\"\n }, {\n \"name\": \"GarboMuffin\"\n }],\n \"userstyles\": [{\n \"url\": \"userstyle.css\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Hover collapsed comments to preview\",\n \"id\": \"hover-view\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Hover blocks to preview attached comments\",\n \"id\": \"hover-view-block\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Hover custom blocks to preview definition comments\",\n \"id\": \"hover-view-procedure\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Delay duration\",\n \"id\": \"delay\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"name\": \"None\",\n \"id\": \"none\"\n }, {\n \"name\": \"Short\",\n \"id\": \"short\"\n }, {\n \"name\": \"Long\",\n \"id\": \"long\"\n }],\n \"default\": \"short\"\n }, {\n \"dynamic\": true,\n \"name\": \"Follow mouse\",\n \"id\": \"follow-mouse\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Reduce transparency\",\n \"id\": \"reduce-transparency\",\n \"type\": \"boolean\",\n \"default\": false\n }, {\n \"dynamic\": true,\n \"name\": \"Reduce animation\",\n \"id\": \"reduce-animation\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"dynamicDisable\": true,\n \"enabledByDefault\": true\n};\n/* harmony default export */ var editor_comment_previews_manifest_entry = (editor_comment_previews_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/columns/_manifest_entry.js\n/* generated by pull.js */\nconst columns_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Two-column category menu\",\n \"description\": \"Splits the block category menu into two columns and moves it to the top of the block palette, like in Scratch 2.0.\",\n \"credits\": [{\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/TheColaber\"\n }],\n \"tags\": [\"theme\"],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }]\n};\n/* harmony default export */ var columns_manifest_entry = (columns_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/number-pad/_manifest_entry.js\n/* generated by pull.js */\nconst number_pad_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Always show number pad\",\n \"description\": \"Show Scratch's virtual number pad when editing number fields in blocks on all devices, instead of only touchscreen devices.\",\n \"credits\": [{\n \"name\": \"GarboMuffin\"\n }],\n \"info\": [{\n \"text\": \"A number pad will show when editing number inputs from blocks such as \\\"move () steps\\\".\",\n \"id\": \"explanation\"\n }],\n \"tags\": [],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var number_pad_manifest_entry = (number_pad_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-number-arrow-keys/_manifest_entry.js\n/* generated by pull.js */\nconst editor_number_arrow_keys_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Arrow key incrementation in editor\",\n \"description\": \"Use the up and down arrow keys to increase or decrease number values in numeric input fields such as those in blocks or the sprite properties area.\",\n \"tags\": [\"recommended\"],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Change on regular key press\",\n \"id\": \"regular\",\n \"type\": \"select\",\n \"default\": \"one\",\n \"potentialValues\": [{\n \"id\": \"none\",\n \"name\": \"None\"\n }, {\n \"id\": \"hundredth\",\n \"name\": \"0.01\"\n }, {\n \"id\": \"tenth\",\n \"name\": \"0.1\"\n }, {\n \"id\": \"one\",\n \"name\": \"1\"\n }, {\n \"id\": \"ten\",\n \"name\": \"10\"\n }],\n \"if\": {\n \"settings\": {\n \"useCustom\": false\n }\n }\n }, {\n \"dynamic\": true,\n \"name\": \"Change on regular key press\",\n \"id\": \"regularCustom\",\n \"type\": \"untranslated\",\n \"default\": \"1\",\n \"max\": 8,\n \"if\": {\n \"settings\": {\n \"useCustom\": true\n }\n }\n }, {\n \"dynamic\": true,\n \"name\": \"Change on Shift+Key\",\n \"id\": \"shift\",\n \"type\": \"select\",\n \"default\": \"ten\",\n \"potentialValues\": [{\n \"id\": \"none\",\n \"name\": \"None\"\n }, {\n \"id\": \"hundredth\",\n \"name\": \"0.01\"\n }, {\n \"id\": \"tenth\",\n \"name\": \"0.1\"\n }, {\n \"id\": \"one\",\n \"name\": \"1\"\n }, {\n \"id\": \"ten\",\n \"name\": \"10\"\n }],\n \"if\": {\n \"settings\": {\n \"useCustom\": false\n }\n }\n }, {\n \"dynamic\": true,\n \"name\": \"Change on Shift+Key\",\n \"id\": \"shiftCustom\",\n \"type\": \"untranslated\",\n \"default\": \"10\",\n \"max\": 8,\n \"if\": {\n \"settings\": {\n \"useCustom\": true\n }\n }\n }, {\n \"dynamic\": true,\n \"name\": \"Change on Alt+Key\",\n \"id\": \"alt\",\n \"type\": \"select\",\n \"default\": \"tenth\",\n \"potentialValues\": [{\n \"id\": \"none\",\n \"name\": \"None\"\n }, {\n \"id\": \"hundredth\",\n \"name\": \"0.01\"\n }, {\n \"id\": \"tenth\",\n \"name\": \"0.1\"\n }, {\n \"id\": \"one\",\n \"name\": \"1\"\n }, {\n \"id\": \"ten\",\n \"name\": \"10\"\n }],\n \"if\": {\n \"settings\": {\n \"useCustom\": false\n }\n }\n }, {\n \"dynamic\": true,\n \"name\": \"Change on Alt+Key\",\n \"id\": \"altCustom\",\n \"type\": \"untranslated\",\n \"default\": \"0.1\",\n \"max\": 8,\n \"if\": {\n \"settings\": {\n \"useCustom\": true\n }\n }\n }, {\n \"dynamic\": true,\n \"name\": \"Use custom values\",\n \"id\": \"useCustom\",\n \"type\": \"boolean\",\n \"default\": false\n }],\n \"credits\": [{\n \"name\": \"mybearworld\",\n \"link\": \"https://scratch.mit.edu/users/mybearworld/\"\n }, {\n \"name\": \"World_Languages\"\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var editor_number_arrow_keys_manifest_entry = (editor_number_arrow_keys_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/expanded-backpack/_manifest_entry.js\n/* generated by pull.js */\nconst expanded_backpack_manifest_entry_manifest = {\n \"name\": \"Multiple rows in backpack\",\n \"description\": \"Arranges the contents of the editor backpack into an expandable two-way grid, similar to the costume library and increases the size of certain thumbnails.\",\n \"credits\": [{\n \"name\": \"pumpkinhasapatch\"\n }],\n \"tags\": [\"new\"],\n \"enabledByDefault\": false,\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Number of displayed rows\",\n \"id\": \"rows\",\n \"type\": \"integer\",\n \"min\": 1,\n \"max\": 4,\n \"default\": 2\n }, {\n \"dynamic\": true,\n \"name\": \"Larger costume and script thumbnails\",\n \"id\": \"upscale\",\n \"type\": \"boolean\",\n \"default\": true\n }],\n \"customCssVariables\": [{\n \"name\": \"imgsize\",\n \"value\": {\n \"type\": \"ternary\",\n \"source\": {\n \"type\": \"settingValue\",\n \"settingId\": \"upscale\"\n },\n \"true\": \"95%\",\n \"false\": \"32px\"\n }\n }, {\n \"name\": \"bgcolor\",\n \"value\": {\n \"type\": \"ternary\",\n \"source\": {\n \"type\": \"settingValue\",\n \"settingId\": \"upscale\"\n },\n \"true\": \"var(--ui-white)\",\n \"false\": \"transparent\"\n }\n }],\n \"userstyles\": [{\n \"url\": \"backpack.css\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true\n};\n/* harmony default export */ var expanded_backpack_manifest_entry = (expanded_backpack_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/script-snap/_manifest_entry.js\n/* generated by pull.js */\nconst script_snap_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Snap scripts to grid\",\n \"description\": \"Drag a script to automatically align its position to the code area dots.\",\n \"tags\": [],\n \"credits\": [{\n \"name\": \"CST1229\",\n \"link\": \"https://scratch.mit.edu/users/CST1229/\"\n }, {\n \"name\": \"TheColaber\",\n \"link\": \"https://scratch.mit.edu/users/TheColaber/\"\n }, {\n \"name\": \"lisa_wolfgang\",\n \"link\": \"https://scratch.mit.edu/users/lisa_wolfgang/\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Grid size (px)\",\n \"id\": \"grid\",\n \"type\": \"integer\",\n \"min\": 1,\n \"default\": 40\n }],\n \"presets\": [{\n \"name\": \"Whole-block\",\n \"id\": \"whole-block\",\n \"values\": {\n \"grid\": 48\n }\n }, {\n \"name\": \"Half-block\",\n \"id\": \"half-block\",\n \"values\": {\n \"grid\": 24\n }\n }, {\n \"name\": \"Default\",\n \"id\": \"default\",\n \"values\": {\n \"grid\": 40\n }\n }],\n \"dynamicDisable\": true,\n \"enabledByDefault\": false\n};\n/* harmony default export */ var script_snap_manifest_entry = (script_snap_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/fullscreen/_manifest_entry.js\n/* generated by pull.js */\nconst fullscreen_manifest_entry_manifest = {\n \"name\": \"Enhanced full screen\",\n \"description\": \"Fixes some undesired effects in the project player's full screen mode, opens it in your browser's full screen mode, and hides the green flag toolbar.\",\n \"credits\": [{\n \"name\": \"lisa_wolfgang\",\n \"link\": \"https://scratch.mit.edu/users/lisa_wolfgang/\"\n }],\n \"info\": [{\n \"type\": \"notice\",\n \"text\": \"If you choose to never show the toolbar, remember that you can use the Esc key to exit the project player's full screen mode.\",\n \"id\": \"hideToolbarNotice\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Open full screen project player in full screen browser mode\",\n \"id\": \"browserFullscreen\",\n \"type\": \"boolean\",\n \"default\": true\n }, {\n \"dynamic\": true,\n \"name\": \"Toolbar visibility\",\n \"id\": \"toolbar\",\n \"type\": \"select\",\n \"potentialValues\": [{\n \"name\": \"Always\",\n \"id\": \"show\"\n }, {\n \"name\": \"When hovered\",\n \"id\": \"hover\"\n }, {\n \"name\": \"Never\",\n \"id\": \"hide\"\n }],\n \"default\": \"show\"\n }],\n \"dynamicDisable\": true,\n \"userstyles\": [{\n \"url\": \"hideOverflow.css\"\n }, {\n \"url\": \"removeBorder.css\"\n }, {\n \"url\": \"resizeWindow.css\",\n \"if\": {\n \"settings\": {\n \"toolbar\": \"show\"\n }\n }\n }, {\n \"url\": \"resizeWindow_noToolbar.css\",\n \"if\": {\n \"settings\": {\n \"toolbar\": [\"hide\", \"hover\"]\n }\n }\n }, {\n \"url\": \"hideToolbar.css\",\n \"if\": {\n \"settings\": {\n \"toolbar\": [\"hide\", \"hover\"]\n }\n }\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"tags\": [\"beta\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var fullscreen_manifest_entry = (fullscreen_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/hide-stage/_manifest_entry.js\n/* generated by pull.js */\nconst hide_stage_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"name\": \"Hide stage and sprite pane\",\n \"description\": \"Adds a button next to the \\\"small stage\\\" and \\\"large stage\\\" buttons that hides the stage and the sprite pane, making the code area much larger.\",\n \"credits\": [{\n \"name\": \"Maximouse\",\n \"link\": \"https://scratch.mit.edu/users/Maximouse/\"\n }],\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"userstyles\": [{\n \"url\": \"style.css\"\n }],\n \"tags\": []\n};\n/* harmony default export */ var hide_stage_manifest_entry = (hide_stage_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/tw-straighten-comments/_manifest_entry.js\n/* generated by pull.js */\nconst tw_straighten_comments_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Keep block comment connections straight\",\n \"description\": \"Forces block comments to always be connected to their source block by a horizontal straight line, not at an angle.\",\n \"tags\": [],\n \"credits\": [{\n \"name\": \"lisa_wolfgang\",\n \"link\": \"https://scratch.mit.edu/users/lisa_wolfgang/\"\n }],\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"dynamicDisable\": true,\n \"enabledByDefault\": false\n};\n/* harmony default export */ var tw_straighten_comments_manifest_entry = (tw_straighten_comments_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/tw-remove-backpack/_manifest_entry.js\n/* generated by pull.js */\nconst tw_remove_backpack_manifest_entry_manifest = {\n \"noTranslations\": true,\n \"name\": \"Hide backpack\",\n \"description\": \"Removes the backpack feature from the editor.\",\n \"userscripts\": [{\n \"url\": \"remove-backpack.js\"\n }],\n \"userstyles\": [{\n \"url\": \"remove-backpack.css\"\n }],\n \"tags\": [\"danger\"],\n \"dynamicDisable\": true,\n \"enabledByDefault\": false\n};\n/* harmony default export */ var tw_remove_backpack_manifest_entry = (tw_remove_backpack_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/tw-remove-feedback/_manifest_entry.js\n/* generated by pull.js */\nconst tw_remove_feedback_manifest_entry_manifest = {\n \"noTranslations\": true,\n \"name\": \"Remove feedback button\",\n \"description\": \"Removes the feedback button from the menu bar.\",\n \"userstyles\": [{\n \"url\": \"remove-feedback.css\"\n }],\n \"tags\": [\"danger\"],\n \"dynamicDisable\": true,\n \"enabledByDefault\": false\n};\n/* harmony default export */ var tw_remove_feedback_manifest_entry = (tw_remove_feedback_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/tw-disable-vibration/_manifest_entry.js\n/* generated by pull.js */\nconst tw_disable_vibration_manifest_entry_manifest = {\n \"noTranslations\": true,\n \"name\": \"Disable vibrations\",\n \"description\": \"Prevents the vibration and gamepad extensions from causing vibrations.\",\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"tags\": [\"danger\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var tw_disable_vibration_manifest_entry = (tw_disable_vibration_manifest_entry_manifest);\n// EXTERNAL MODULE: ./src/lib/isScratchDesktop.js\nvar isScratchDesktop = __webpack_require__(37);\n\n// CONCATENATED MODULE: ./src/addons/addons/tw-disable-cloud-variables/_manifest_entry.js\n/* generated by pull.js */\nconst tw_disable_cloud_variables_manifest_entry_manifest = {\n \"noTranslations\": true,\n \"name\": \"Disable cloud variables\",\n \"description\": \"Disable cloud variables by default. You can still re-enable them using the Edit > Enable cloud variables menu.\",\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"tags\": [\"danger\"],\n \"enabledByDefault\": false\n};\n\nif (Object(isScratchDesktop[\"b\" /* isScratchDesktop */])()) tw_disable_cloud_variables_manifest_entry_manifest.unsupported = true;\n/* harmony default export */ var tw_disable_cloud_variables_manifest_entry = (tw_disable_cloud_variables_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/tw-disable-compiler/_manifest_entry.js\n/* generated by pull.js */\nconst tw_disable_compiler_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"name\": \"Disable compiler in editor\",\n \"description\": \"Turns off the compiler by default in the script editor. It can still be manually enabled through the \\\"Advanced\\\" menu bar button.\",\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"tags\": [\"danger\"],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var tw_disable_compiler_manifest_entry = (tw_disable_compiler_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/addons/editor-stepping/_manifest_entry.js\n/* generated by pull.js */\nconst editor_stepping_manifest_entry_manifest = {\n \"editorOnly\": true,\n \"noTranslations\": true,\n \"noCompiler\": true,\n \"name\": \"Running block border\",\n \"description\": \"Adds a colored highlight to the blocks that are currently being executed in a project.\",\n \"dynamicDisable\": true,\n \"userscripts\": [{\n \"url\": \"userscript.js\"\n }],\n \"settings\": [{\n \"dynamic\": true,\n \"name\": \"Highlight color\",\n \"id\": \"highlight-color\",\n \"type\": \"color\",\n \"default\": \"#0000ff\"\n }],\n \"tags\": [],\n \"enabledByDefault\": false\n};\n/* harmony default export */ var editor_stepping_manifest_entry = (editor_stepping_manifest_entry_manifest);\n// CONCATENATED MODULE: ./src/addons/generated/addon-manifests.js\n/* generated by pull.js */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var addon_manifests = __webpack_exports__[\"a\"] = ({\n \"cat-blocks\": _manifest_entry,\n \"editor-devtools\": editor_devtools_manifest_entry,\n \"find-bar\": find_bar_manifest_entry,\n \"middle-click-popup\": middle_click_popup_manifest_entry,\n \"jump-to-def\": jump_to_def_manifest_entry,\n \"reorder-custom-inputs\": reorder_custom_inputs_manifest_entry,\n \"editor-searchable-dropdowns\": editor_searchable_dropdowns_manifest_entry,\n \"data-category-tweaks-v2\": data_category_tweaks_v2_manifest_entry,\n \"block-palette-icons\": block_palette_icons_manifest_entry,\n \"hide-flyout\": hide_flyout_manifest_entry,\n \"mediarecorder\": mediarecorder_manifest_entry,\n \"drag-drop\": drag_drop_manifest_entry,\n \"debugger\": debugger_manifest_entry,\n \"pause\": pause_manifest_entry,\n \"mute-project\": mute_project_manifest_entry,\n \"vol-slider\": vol_slider_manifest_entry,\n \"clones\": clones_manifest_entry,\n \"mouse-pos\": mouse_pos_manifest_entry,\n \"color-picker\": color_picker_manifest_entry,\n \"remove-sprite-confirm\": remove_sprite_confirm_manifest_entry,\n \"block-count\": block_count_manifest_entry,\n \"onion-skinning\": onion_skinning_manifest_entry,\n \"paint-snap\": paint_snap_manifest_entry,\n \"default-costume-editor-color\": default_costume_editor_color_manifest_entry,\n \"bitmap-copy\": bitmap_copy_manifest_entry,\n \"2d-color-picker\": _2d_color_picker_manifest_entry,\n \"paint-skew\": paint_skew_manifest_entry,\n \"better-img-uploads\": better_img_uploads_manifest_entry,\n \"pick-colors-from-stage\": pick_colors_from_stage_manifest_entry,\n \"custom-block-shape\": custom_block_shape_manifest_entry,\n \"editor-square-inputs\": editor_square_inputs_manifest_entry,\n \"zebra-striping\": zebra_striping_manifest_entry,\n \"editor-compact\": editor_compact_manifest_entry,\n \"custom-menu-bar\": custom_menu_bar_manifest_entry,\n \"editor-theme3\": editor_theme3_manifest_entry,\n \"custom-block-text\": custom_block_text_manifest_entry,\n \"editor-colored-context-menus\": editor_colored_context_menus_manifest_entry,\n \"editor-stage-left\": editor_stage_left_manifest_entry,\n \"editor-buttons-reverse-order\": editor_buttons_reverse_order_manifest_entry,\n \"variable-manager\": variable_manager_manifest_entry,\n \"search-sprites\": search_sprites_manifest_entry,\n \"sprite-properties\": sprite_properties_manifest_entry,\n \"gamepad\": gamepad_manifest_entry,\n \"editor-sounds\": editor_sounds_manifest_entry,\n \"folders\": folders_manifest_entry,\n \"block-switching\": block_switching_manifest_entry,\n \"load-extensions\": load_extensions_manifest_entry,\n \"custom-zoom\": custom_zoom_manifest_entry,\n \"copy-reporter\": copy_reporter_manifest_entry,\n \"initialise-sprite-position\": initialise_sprite_position_manifest_entry,\n \"blocks2image\": blocks2image_manifest_entry,\n \"remove-curved-stage-border\": remove_curved_stage_border_manifest_entry,\n \"transparent-orphans\": transparent_orphans_manifest_entry,\n \"paint-by-default\": paint_by_default_manifest_entry,\n \"block-cherry-picking\": block_cherry_picking_manifest_entry,\n \"hide-new-variables\": hide_new_variables_manifest_entry,\n \"editor-extra-keys\": editor_extra_keys_manifest_entry,\n \"hide-delete-button\": hide_delete_button_manifest_entry,\n \"no-script-bumping\": no_script_bumping_manifest_entry,\n \"disable-stage-drag-select\": disable_stage_drag_select_manifest_entry,\n \"move-to-top-bottom\": move_to_top_bottom_manifest_entry,\n \"move-to-top-layer\": move_to_top_layer_manifest_entry,\n \"disable-paste-offset\": disable_paste_offset_manifest_entry,\n \"block-duplicate\": block_duplicate_manifest_entry,\n \"rename-broadcasts\": rename_broadcasts_manifest_entry,\n \"swap-local-global\": swap_local_global_manifest_entry,\n \"editor-comment-previews\": editor_comment_previews_manifest_entry,\n \"columns\": columns_manifest_entry,\n \"number-pad\": number_pad_manifest_entry,\n \"editor-number-arrow-keys\": editor_number_arrow_keys_manifest_entry,\n \"expanded-backpack\": expanded_backpack_manifest_entry,\n \"script-snap\": script_snap_manifest_entry,\n \"fullscreen\": fullscreen_manifest_entry,\n \"hide-stage\": hide_stage_manifest_entry,\n \"tw-straighten-comments\": tw_straighten_comments_manifest_entry,\n \"tw-remove-backpack\": tw_remove_backpack_manifest_entry,\n \"tw-remove-feedback\": tw_remove_feedback_manifest_entry,\n \"tw-disable-vibration\": tw_disable_vibration_manifest_entry,\n \"tw-disable-cloud-variables\": tw_disable_cloud_variables_manifest_entry,\n \"tw-disable-compiler\": tw_disable_compiler_manifest_entry,\n \"editor-stepping\": editor_stepping_manifest_entry\n});\n\n/***/ }),\n\n/***/ 551:\n/***/ (function(module) {\n\nmodule.exports = JSON.parse(\"{\\\"commit\\\":\\\"965a016\\\"}\");\n\n/***/ }),\n\n/***/ 709:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// Some browsers have a non-functional EventTarget, so we write our own version that works everywhere.\n\nclass EventTargetShim {\n constructor() {\n this._events = {};\n }\n addEventListener(event, handler) {\n if (!this._events[event]) {\n this._events[event] = [];\n }\n this._events[event].push(handler);\n }\n removeEventListener(event, handler) {\n const handlers = this._events[event];\n if (handlers) {\n this._events[event] = handlers.filter(i => i !== handler);\n }\n }\n dispatchEvent(event) {\n const handlers = this._events[event.type];\n if (handlers) {\n for (const fn of handlers) {\n fn(event);\n }\n }\n }\n}\n/* harmony default export */ __webpack_exports__[\"a\"] = (EventTargetShim);\n\n/***/ })\n\n}]);","inputSourceMap":null}