/* eslint-disable max-len */ import React from 'react'; import {FormattedMessage} from 'react-intl'; import {APP_NAME} from '../../brand'; import p5noiseIconURL from './p5-noise/48d03d1d2794e30b221465fc07da79f7.png'; import p5noiseInsetIconURL from './p5-noise/icon.svg'; import musicIconURL from './music/music.png'; import musicInsetIconURL from './music/music-small.svg'; import penIconURL from './pen/pen.png'; import penInsetIconURL from './pen/pen-small.svg'; import jgDebuggingIcon from './penguinmod/extensions/debugging.svg'; import posenet4scratchIcon from './izum00/posenet4scratch/icon.png'; import posenet4scratchThumb from './izum00/posenet4scratch/thumb.png'; import videoSensingIconURL from './videoSensing/video-sensing.png'; import videoSensingInsetIconURL from './videoSensing/video-sensing-small.svg'; import text2speechIconURL from './text2speech/text2speech.png'; import text2speechInsetIconURL from './text2speech/text2speech-small.svg'; import translateIconURL from './translate/translate.png'; import translateInsetIconURL from './translate/translate-small.png'; import makeymakeyIconURL from './makeymakey/makeymakey.png'; import makeymakeyInsetIconURL from './makeymakey/makeymakey-small.svg'; import animatedTextIconURL from './penguinmod/extensions/text extension.png'; import animatedTextInsetIconURL from './penguinmod/extensions/text extension small.svg'; import microbitIconURL from './microbit/microbit.png'; import microbitInsetIconURL from './microbit/microbit-small.svg'; import microbitConnectionIconURL from './microbit/microbit-illustration.svg'; import microbitConnectionSmallIconURL from './microbit/microbit-small.svg'; import ev3IconURL from './ev3/ev3.png'; import ev3InsetIconURL from './ev3/ev3-small.svg'; import ev3ConnectionIconURL from './ev3/ev3-hub-illustration.svg'; import ev3ConnectionSmallIconURL from './ev3/ev3-small.svg'; import wedo2IconURL from './wedo2/wedo.png'; // TODO: Rename file names to match variable/prop names? import wedo2InsetIconURL from './wedo2/wedo-small.svg'; import wedo2ConnectionIconURL from './wedo2/wedo-illustration.svg'; import wedo2ConnectionSmallIconURL from './wedo2/wedo-small.svg'; import wedo2ConnectionTipIconURL from './wedo2/wedo-button-illustration.svg'; import boostIconURL from './boost/boost.png'; import boostInsetIconURL from './boost/boost-small.svg'; import boostConnectionIconURL from './boost/boost-illustration.svg'; import boostConnectionSmallIconURL from './boost/boost-small.svg'; import boostConnectionTipIconURL from './boost/boost-button-illustration.svg'; import gdxforIconURL from './gdxfor/gdxfor.png'; import gdxforInsetIconURL from './gdxfor/gdxfor-small.svg'; import gdxforConnectionIconURL from './gdxfor/gdxfor-illustration.svg'; import gdxforConnectionSmallIconURL from './gdxfor/gdxfor-small.svg'; // turbowarp & gallery icons import twIcon from './tw/tw.svg'; import galleryIcon from './gallery/gallery.svg'; import customExtensionIcon from './custom/custom.svg'; import turbowarpIcon from './penguinmod/extensions/turbowarp_icon.svg'; import penguinmodLibraryExtensionIcon from './penguinmod/library.svg'; import sharkpoolGalleryIcon from './penguinmod/sharkpool-library.svg'; import ExtForgeIcon from './penguinmod/extforge.svg'; import turboBuilderIcon from './penguinmod/turbobuilder.png'; import turboBuilderDevIcon from './penguinmod/turbobuilder-dev.png'; import filesExtensionIcon from './penguinmod/extensions/files.svg'; import jgJSONExtensionIcon from './penguinmod/extensions/json.png'; import jgTailgatingExtensionIcon from './penguinmod/extensions/tailgating.png'; import jgRuntimeExtensionIcon from './penguinmod/extensions/runtime.svg'; import jgPrismExtensionIcon from './penguinmod/extensions/prism.png'; import jwProtoExtensionIcon from './penguinmod/extensions/proto.svg'; import jwUniteExtensionIcon from './penguinmod/extensions/Unite.png'; import jwXmlExtensionIcon from './penguinmod/extensions/xml.png'; import jwStructsExtensionIcon from './penguinmod/extensions/ooplogo.png'; import jwArrayExtensionThumb from './penguinmod/extensions/jwArray.svg'; import jwTargetsExtensionThumb from './penguinmod/extensions/jwTargets.svg'; import jwNumExtensionThumb from './penguinmod/extensions/jwNum.svg'; import jwColorExtensionThumb from './penguinmod/extensions/jwColor.svg'; import jwVectorExtensionThumb from './penguinmod/extensions/jwVector.svg'; import iygPerlinNoiseExtensionIcon from './penguinmod/extensions/perlinnoisebanner.png'; // thank yo godslayerakp for makin pmCamera :good: import pmCameraExtensionIcon from './penguinmod/extensions/pmcamera_thumbnail.png'; // cl waw // import cloudlinkThumb from './penguinmod/extensions/cloudlinkThumb.png'; import cloudlinkIcon from './penguinmod/extensions/cloudlinkIcon.svg'; // thx jeremey import canvasExtensionBanner from './penguinmod/extensions/CanvasExtensionMenu.png'; import canvasExtensionIcon from './penguinmod/extensions/CanvasSmall.png'; // griffpatch stuff that hopefully we can keep pls plsplspl !!S! import griffpatchPhysicsThumb from './penguinmod/extensions/griffpatch_physics.png'; import griffpatchPhysicsIcon from './penguinmod/extensions/griffpatch_physicsIcon.svg'; import gp from './penguinmod/extensions/gamepad.svg'; import clippingblending from './penguinmod/extensions/clippingblending.svg'; import pointerlockThumb from './penguinmod/extensions/pointerlock.png'; import cursorThumb from './penguinmod/extensions/cursor.svg'; // LilyMakesThings 🙏 // import lmsMcUtilsIcon from './penguinmod/extensions/mcutils.png'; import lilyTempVariablesExtensionIcon from './penguinmod/orgtw/TempVariables2.svg'; // more icons so they arent just red when the extension color is not red import gsaTempVariablesExtensionIcon from './penguinmod/extensions/tempvariables.svg'; import gsaColorUtilExtensionIcon from './penguinmod/extensions/colorutil.png'; import jgIframeExtensionIcon from './penguinmod/extensions/iframe.png'; import jgExtendedAudioExtensionIcon from './penguinmod/extensions/extendedaudio.png'; import jgScratchAuthExtensionIcon from './penguinmod/extensions/scratchauth2.svg'; import jgPermissionExtensionIcon from './penguinmod/extensions/permissions.png'; import silvxrcatOddMessagesExtensionIcon from './penguinmod/extensions/oddmessages.svg'; import jgCloneManagerExtensionIcon from './penguinmod/extensions/clonemanager.png'; import pmInlineBlocksExtensionIcon from './penguinmod/extensions/inlineblocks.png'; import jgPackagerApplicationsExtensionIcon from './penguinmod/extensions/packagedApplications.png'; import jgPackagerApplicationsInsetExtensionIcon from './penguinmod/extensions/packagedApplications_inset.png'; import spJSONExtensionIcon from './penguinmod/extensions/sp_json.svg'; // import jgTweeningExtensionIcon from './penguinmod/extensions/tween.png'; import jgsilvxrcatInterfacesExtensionIcon from './penguinmod/extensions/interfaces2.png'; // 3D MAN WTF import jg3dExtensionIcon from './penguinmod/extensions/3d.png'; import jg3dInsetExtensionIcon from './penguinmod/extensions/3dicon.png'; import jg3dVrExtensionIcon from './penguinmod/extensions/3dVr.png'; import jg3dVrInsetExtensionIcon from './penguinmod/extensions/3dVr_Inset.png'; import fr3dPhysicsExtensionIcon from './penguinmod/extensions/3d_physics.png'; import fr3dPhysicsInsetExtensionIcon from './penguinmod/extensions/3d_physics_icon_sized.png'; // virtal realty import jgVrExtensionIcon from './penguinmod/extensions/vr_extension.png'; import theshovelCustomStylesIcon from './penguinmod/orgtw/CustomStyles.svg'; import theshovelCanvasEffectsIcon from './penguinmod/extensions/canvas_effects.svg'; import theshovelLzCompressIcon from './penguinmod/orgtw/lz-compress2.svg'; import theshovelColorPickerIcon from './penguinmod/orgtw/ColorPicker.svg'; // sharkpool import sharkpoolLooksExpandedIcon from './penguinmod/extensions/looksExpanded.svg'; import sharkpoolPrintingIcon from './penguinmod/extensions/printing.svg'; import sharkpoolTuneIcon from './penguinmod/extensions/tuneShark.svg'; import sharkpoolMBPIcon from './penguinmod/extensions/myBlocksPlus.svg'; import sharkpoolBCIcon from './penguinmod/extensions/BetterComments.svg'; import sharkpoolPEIcon from './penguinmod/extensions/particleEngine.svg'; import jgScriptsExtensionIcon from './penguinmod/extensions/scripts.svg'; // events import jgStorageExtensionIcon from './penguinmod/extensions/storage.png'; import jgTimersExtensionIcon from './penguinmod/extensions/multipletimers.png'; import jgAdvancedTextExtensionIcon from './penguinmod/extensions/advancedtext.png'; import jgJavascriptExtensionIcon from './penguinmod/extensions/javascript.png'; import jgPathfindingExtensionIcon from './penguinmod/extensions/pathfinding.png'; import jgAnimationExtensionIcon from './penguinmod/extensions/animation.png'; // category expansions import pmMotionExpansionExtensionIcon from './penguinmod/extensions/motion_expanded.png'; import pmEventsExpansionExtensionIcon from './penguinmod/extensions/events_expanded.png'; import pmControlsExpansionExtensionIcon from './penguinmod/extensions/controls_expanded.png'; import pmSensingExpansionExtensionIcon from './penguinmod/extensions/sensing_expanded.png'; import pmOperatorsExpansionExtensionIcon from './penguinmod/extensions/operators_expanded.png'; // jg: default icon if you are too lazy to make one and you want me to make one instead lololololololol // gsa: ololololololo import defaultExtensionIcon from './penguinmod/extensions/placeholder.png'; const urlParams = new URLSearchParams(location.search); const IsLocal = String(window.location.href).startsWith(`http://localhost:`); const IsLiveTests = urlParams.has('livetests'); let menuItems = [ { name: ( ), extensionId: "tmpose2scratch", collaborator: "Tsukurusha, YengawaLab and Google", iconURL: "https://github.com/champierre/tmpose2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/tmpose2scratch/tmpose2scratch.png", insetIconURL: "https://github.com/champierre/tmpose2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/tmpose2scratch/tmpose2scratch-small.png", description: ( ), featured: true, disabled: false, internetConnectionRequired: true, bluetoothRequired: false, translationMap: { ja: { "gui.extension.tmpose2scratchblocks.description": "ポーズを学習させよう。" }, "ja-Hira": { "gui.extension.tmpose2scratchblocks.description": "ポーズをがくしゅうさせよう。" }, en: { "gui.extension.tmpose2scratchblocks.description": "Recognize your own poses." }, ko: { "gui.extension.tmpose2scratchblocks.description": "나의 몸동작 포즈를 인식해볼까요" } } }, { name: ( ), extensionId: "ic2scratch", collaborator: "champierre", iconURL: "https://github.com/champierre/ic2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/ic2scratch/ic2scratch.png", insetIconURL: "https://github.com/champierre/ic2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/ic2scratch/ic2scratch-small.png", description: ( ), featured: true, disabled: false, internetConnectionRequired: true, bluetoothRequired: false }, { name: ( ), extensionId: "https://huggingface.co/datasets/soiz1/my-scratch-ai-extensions/raw/main/block-ai.js", collaborator: "TheShovel", iconURL: "https://extensions.penguinmod.com/images/TheShovel/thumbnail-blockAI.png", insetIconURL: "https://huggingface.co/datasets/soiz1/my-scratch-ai-extensions/resolve/main/BlockAI-ICON.png?download=true", description: ( ), featured: true, disabled: false, internetConnectionRequired: true }, { name: ( ), extensionId: "newhandpose2scratch", collaborator: "champierre", iconURL: "https://github.com/champierre/handpose2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/handpose2scratch/handpose2scratch.png", insetIconURL: "https://github.com/champierre/handpose2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/handpose2scratch/handpose2scratch-small.png", description: ( ), featured: true, disabled: false, internetConnectionRequired: true, bluetoothRequired: false, helpLink: "https://champierre.github.io/handpose2scratch/" }, { name: ( ), extensionId: "handpose2scratch", collaborator: "champierre", iconURL: "https://github.com/champierre/handpose2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/handpose2scratch/handpose2scratch.png", insetIconURL: "https://github.com/champierre/handpose2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/handpose2scratch/handpose2scratch-small.png", description: ( ), featured: true, disabled: false, internetConnectionRequired: true, bluetoothRequired: false, helpLink: "https://champierre.github.io/handpose2scratch/" }, { name: ( ), extensionId: "tm2scratch", collaborator: "Tsukurusha, YengawaLab and Google", iconURL: "https://github.com/champierre/tm2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/tm2scratch/tm2scratch.png", insetIconURL: "https://github.com/champierre/tm2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/tm2scratch/tm2scratch-small.png", description: ( ), featured: true, disabled: false, internetConnectionRequired: true, bluetoothRequired: false, translationMap: { ja: { "gui.extension.tm2scratchblocks.description": "画像や音声を学習させよう。" }, "ja-Hira": { "gui.extension.tm2scratchblocks.description": "がぞうやおんせいをがくしゅうさせよう。" }, en: { "gui.extension.tm2scratchblocks.description": "Recognize your own images and sounds." }, "zh-cn": { "gui.extension.tm2scratchblocks.description": "Recognize your own images and sounds." }, ko: { "gui.extension.tm2scratchblocks.description": "나의 이미지와 소리를 인식해볼까요" }, "zh-tw": { "gui.extension.tm2scratchblocks.description": "Recognize your own images and sounds." } } }, { name: ( ), extensionId: "ml2scratch", extensionURL: "ml2scratch", collaborator: "champierre", iconURL: "https://github.com/champierre/ml2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/ml2scratch/ml2scratch.png", insetIconURL: "https://github.com/champierre/ml2scratch/raw/refs/heads/master/scratch-gui/src/lib/libraries/extensions/ml2scratch/ml2scratch-small.png", description: ( ), featured: true, disabled: false, bluetoothRequired: false, internetConnectionRequired: true, helpLink: "https://github.com/champierre/ml2scratch/" }, { name: ( ), extensionId: "posenet2scratch", iconURL: "https://www.adacraft.org/studio/static/assets/cc4d68fe9d6a77c7f35f9d5461b60967.png", insetIconURL: "https://raw.githubusercontent.com/champierre/posenet2scratch/master/scratch-gui/src/lib/libraries/extensions/posenet2scratch/posenet2scratch-small.png", collaborator: "champierre", internetConnectionRequired: true, tags: ["other_mods", "ai"], description: ( ), featured: true }, { name: ( ), extensionId: "facemesh2scratch", iconURL: "https://raw.githubusercontent.com/champierre/facemesh2scratch/master/scratch-gui/src/lib/libraries/extensions/facemesh2scratch/facemesh2scratch.png", insetIconURL: "https://raw.githubusercontent.com/champierre/facemesh2scratch/master/scratch-gui/src/lib/libraries/extensions/facemesh2scratch/facemesh2scratch-small.png", collaborator: "champierre", internetConnectionRequired: true, tags: ["other_mods", "ai"], description: ( ), featured: true }, { name: ( ), extensionId: "handpose2scratch", iconURL: "https://raw.githubusercontent.com/champierre/handpose2scratch/master/scratch-gui/src/lib/libraries/extensions/handpose2scratch/handpose2scratch.png", insetIconURL: "https://raw.githubusercontent.com/champierre/handpose2scratch/master/scratch-gui/src/lib/libraries/extensions/handpose2scratch/handpose2scratch-small.png", collaborator: "champierre", internetConnectionRequired: true, tags: ["other_mods"], description: ( ), featured: true }, { name: ( ), extensionId: "https://huggingface.co/datasets/soiz1/my-scratch-ai-extensions/raw/main/p5js.js", iconURL: p5noiseIconURL, insetIconURL: p5noiseInsetIconURL, collaborator: "adacraft", internetConnectionRequired: true, tags: [], description: ( ), featured: true }, { name: ( ), extensionId: "music", iconURL: musicIconURL, insetIconURL: musicInsetIconURL, customInsetColor: "#CF63CF", tags: ["scratch", "noisemaker"], description: ( ), featured: true }, { name: ( ), extensionId: "pen", iconURL: penIconURL, insetIconURL: penInsetIconURL, tags: ["scratch", "graphics"], description: ( ), featured: true }, { name: ( ), extensionId: "text", iconURL: animatedTextIconURL, insetIconURL: animatedTextInsetIconURL, customInsetColor: "#9A66FF", tags: ["scratch"], description: ( ), featured: true }, { name: ( ), extensionId: "videoSensing", iconURL: videoSensingIconURL, insetIconURL: videoSensingInsetIconURL, customInsetColor: "#74BDDC", tags: ["scratch", "hardware"], description: ( ), featured: true }, { name: ( ), extensionId: "text2speech", collaborator: "Amazon Web Services", credits: "Google TTS", iconURL: text2speechIconURL, insetIconURL: text2speechInsetIconURL, customInsetColor: "#9966FF", tags: ["scratch", "noisemaker"], description: ( ), featured: true, internetConnectionRequired: true }, { name: ( ), extensionId: "translate", collaborator: "Google", iconURL: translateIconURL, insetIconURL: translateInsetIconURL, customInsetColor: "#5CB1D6", tags: ["scratch"], description: ( ), featured: true, internetConnectionRequired: true }, { name: ( ), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/Looks-Expanded.js", iconURL: sharkpoolLooksExpandedIcon, tags: ["penguinmod", "categoryexpansion", "graphics"], description: ( ), extDeveloper: "SharkPool, CST1229", featured: true }, { name: ( ), extensionId: "https://extensions.turbowarp.org/obviousAlexC/SensingPlus.js", collaborator: "ObviousAlexC", iconURL: "https://extensions.turbowarp.org/images/obviousAlexC/SensingPlus.svg", tags: ["turbowarp"], description: ( ), featured: true }, { name: ( ), extensionId: "https://extensions.turbowarp.org/CubesterYT/WindowControls.js", collaborator: "Created:BlueDome77 Updated:CubesterYT.", iconURL: "https://extensions.turbowarp.org/images/CubesterYT/WindowControls.svg", tags: ["turbowap"], description: ( ), featured: true }, { name: ( ), extensionId: "https://extensions.turbowarp.org/stretch.js", iconURL: "https://extensions.turbowarp.org/images/stretch.svg", tags: ["turbowap"], description: ( ), featured: true }, { name: ( ), extensionId: "makeymakey", collaborator: "JoyLabz", iconURL: makeymakeyIconURL, insetIconURL: makeymakeyInsetIconURL, customInsetColor: "#E64D00", tags: ["scratch", "hardware"], description: ( ), featured: true }, { name: ( ), extensionId: "pmCamera", iconURL: pmCameraExtensionIcon, tags: ["penguinmod"], description: ( ), credits: "Inspired by⠀⠀⠀⠀⠀⠀ DT-is-not-available", featured: true }, { name: ( ), extensionId: "twFiles", twDeveloper: "GarboMuffin", iconURL: filesExtensionIcon, insetIconURL: turbowarpIcon, tags: ["turbowarp", "datamgmt"], description: ( ), featured: true }, { name: ( ), extensionId: "https://extensions.turbowarp.org/CST1229/zip.js", iconURL: "https://extensions.turbowarp.org/images/CST1229/zip.svg", insetIconURL: turbowarpIcon, tags: ["turbowarp", "datamgmt"], description: ( ), twDeveloper: "CST1229", featured: true }, { name: ( ), extensionId: "https://extensions.penguinmod.com/extensions/ObviousAlexC/PenPlus.js", tags: ["categoryexpansion", "graphics"], iconURL: "https://extensions.penguinmod.com/images/ObviousAlexC/PenPlus.svg", description: ( ), featured: true, extDeveloper: "pinksheep2917" }, { name: ( ), extensionId: "jgExtendedAudio", iconURL: jgExtendedAudioExtensionIcon, tags: ["penguinmod", "categoryexpansion", "noisemaker"], description: ( ), featured: true }, { name: ( ), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/Tune-Shark-V3.js", iconURL: sharkpoolTuneIcon, tags: ["penguinmod", "categoryexpansion", "noisemaker"], description: ( ), extDeveloper: "SharkPool", featured: true }, { name: ( ), extensionId: "https://extensions.penguinmod.com/extensions/SharkPool/Sound-Waves.js", iconURL: "https://extensions.penguinmod.com/images/SharkPool/Sound-Waves.svg", tags: ["penguinmod", "noisemaker"], description: ( ), extDeveloper: "SharkPool", featured: true }, { name: ( ), extensionId: "pmMotionExpansion", iconURL: pmMotionExpansionExtensionIcon, tags: ["penguinmod", "categoryexpansion"], description: ( ), featured: true, credits: "Some blocks from NexusKitten" }, { name: ( ), extensionId: "pmEventsExpansion", iconURL: pmEventsExpansionExtensionIcon, tags: ["penguinmod", "categoryexpansion"], description: ( ), featured: true, credits: "Some blocks from LilyMakesThings" }, { name: ( ), extensionId: "pmControlsExpansion", iconURL: pmControlsExpansionExtensionIcon, tags: ["penguinmod", "categoryexpansion"], description: ( ), featured: true, credits: '"new thread" by CubesterYT, CST1229, SharkPool' }, { name: ( ), extensionId: "pmSensingExpansion", iconURL: pmSensingExpansionExtensionIcon, tags: ["penguinmod", "categoryexpansion"], description: ( ), credits: "Some blocks from SharkPool-SP", featured: true }, { name: ( ), extensionId: "pmOperatorsExpansion", iconURL: pmOperatorsExpansionExtensionIcon, tags: ["penguinmod", "categoryexpansion", "math"], description: ( ), featured: true }, { name: ( ), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/My-Blocks-Plus.js", iconURL: sharkpoolMBPIcon, tags: ["penguinmod", "categoryexpansion"], description: ( ), extDeveloper: "SharkPool, CST1229, 0znzw", featured: true }, { name: ( ), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/Better-Comments.js", iconURL: sharkpoolBCIcon, tags: ["penguinmod", "categoryexpansion"], description: ( ), extDeveloper: "SharkPool", featured: true }, { name: ( ), extensionId: "jgJSON", iconURL: jgJSONExtensionIcon, tags: ["penguinmod", "datamgmt"], description: ( ), featured: true }, { name: ( ), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/JSON-Array.js", iconURL: spJSONExtensionIcon, tags: ["penguinmod", "datamgmt"], extDeveloper: "SharkPool", description: ( ), featured: true }, { name: ( ), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/Particle-Engine.js", iconURL: sharkpoolPEIcon, tags: ["penguinmod", "graphics"], description: ( ), extDeveloper: "SharkPool", featured: true }, { name: ( ), extensionId: "shovelcss", iconURL: theshovelCustomStylesIcon, tags: ["penguinmod", "graphics"], description: ( ), extDeveloper: "TheShovel", featured: true }, { name: ( ), extensionId: "https://extensions.turbowarp.org/box2d.js", tags: ["turbowarp"], extDeveloper: "griffpatch", iconURL: griffpatchPhysicsThumb, insetIconURL: griffpatchPhysicsIcon, description: ( ), customInsetColor: "#D9F0FF", featured: true }, { name: ( ), extensionId: "jgTween", credits: "easings.net, Arrow & GarboMuffin", description: ( ), iconURL: "https://extensions.turbowarp.org/images/JeremyGamer13/tween.svg", tags: ["penguinmod"], featured: true }, { name: ( ), extensionId: "jgTailgating", description: ( ), iconURL: jgTailgatingExtensionIcon, tags: ["penguinmod"], featured: true }, { name: ( ), extensionId: "https://extensions.penguinmod.com/extensions/SharkPool/Tile-Grids.js", iconURL: "https://extensions.penguinmod.com/images/SharkPool/Tile-Grids.svg", tags: ["penguinmod"], description: ( ), extDeveloper: "SharkPool-SP", featured: true }, { name: ( ), extensionId: "theshovelcanvaseffects", iconURL: theshovelCanvasEffectsIcon, tags: ["penguinmod", "graphics"], description: ( ), extDeveloper: "TheShovel", credits: "SharkPool", featured: true }, { name: ( ), extensionId: "https://extensions.turbowarp.org/Lily/ClonesPlus.js", tags: ["turbowarp", "categoryexpansion"], iconURL: "https://extensions.turbowarp.org/images/Lily/ClonesPlus.svg", insetIconURL: turbowarpIcon, description: ( ), featured: true, twDeveloper: "LilyMakesThings" }, { name: ( ), extensionId: "https://extensions.turbowarp.org/Lily/Skins.js", tags: ["turbowarp", "graphics"], iconURL: "https://extensions.turbowarp.org/images/Lily/Skins.svg", insetIconURL: turbowarpIcon, description: ( ), featured: true, twDeveloper: "LilyMakesThings" }, { name: ( ), extensionId: "jgTimers", iconURL: jgTimersExtensionIcon, tags: ["penguinmod"], description: ( ), eventSubmittor: "Arrow", featured: true }, { name: ( ), extensionId: "tempVars", iconURL: gsaTempVariablesExtensionIcon, tags: ["penguinmod"], description: ( ), credits: "LilyMakesThings", featured: true }, { name: ( ), extensionId: "lmsTempVars2", iconURL: lilyTempVariablesExtensionIcon, tags: ["turbowarp"], description: ( ), insetIconURL: turbowarpIcon, credits: "LilyMakesThings", featured: true }, { name: ( ), extensionId: "jgRuntime", tags: ["penguinmod"], iconURL: jgRuntimeExtensionIcon, description: ( ), credits: "TheShovel, showierdata9978, SharkPool", featured: true }, { name: ( ), extensionId: "https://extensions.penguinmod.com/extensions/SharkPool/Font-Manager.js", iconURL: "https://extensions.penguinmod.com/images/SharkPool/Font-Manager.svg", tags: ["penguinmod", "graphics"], description: ( ), credits: "SharkPool, Ashimee", featured: true }, { name: ( ), extensionId: "jgStorage", iconURL: jgStorageExtensionIcon, tags: ["penguinmod", "datamgmt"], description: ( ), eventSubmittor: "Fir & silvxrcat", featured: true }, { name: ( ), extensionId: "https://extensions.turbowarp.org/godslayerakp/http.js", iconURL: "https://extensions.turbowarp.org/images/godslayerakp/http.svg", insetIconURL: turbowarpIcon, tags: ["turbowarp"], description: ( ), featured: true, internetConnectionRequired: true, customInsetColor: "#ff4d4d" }, { name: ( ), extensionId: "https://extensions.penguinmod.com/extensions/MikeDev101/cloudlink.js", tags: ["turbowarp", "penguinmod"], insetIconURL: cloudlinkIcon, iconURL: "https://extensions.penguinmod.com/images/MikeDev101/cloudlink.svg", description: ( ), featured: true, extDeveloper: "MikeDev", internetConnectionRequired: true }, { name: ( ), extensionId: "jgScripts", iconURL: jgScriptsExtensionIcon, tags: ["penguinmod", "datamgmt"], description: ( ), featured: true }, { name: ( ), extensionId: "https://extensions.penguinmod.com/extensions/SammerLOL/pangapi.js", iconURL: "https://extensions.penguinmod.com/images/SammerLOL/pangapi.png", tags: ["penguinmod"], description: ( ), extDeveloper: "oc9x97, Ianyourgod", featured: true }, { name: ( ), extensionId: "https://extensions.penguinmod.com/extensions/ObviousAlexC/3DMath.js", iconURL: "https://extensions.penguinmod.com/images/ObviousAlexC/3DMath.svg", tags: ["penguinmod", "3d", "graphics", "math"], description: ( ), extDeveloper: "pinksheep2917", featured: true }, { name: ( ), extensionId: "https://extensions.penguinmod.com/extensions/Gen1x/random_utils.js", iconURL: "https://extensions.penguinmod.com/images/Gen1x/randomutils.png", tags: ["penguinmod"], description: ( ), extDeveloper: "G1nX", featured: true }, { name: ( ), extensionId: "shovellzcompresss", iconURL: theshovelLzCompressIcon, tags: ["penguinmod", "datamgmt"], description: ( ), extDeveloper: "TheShovel", featured: true }, { name: ( ), extensionId: "jgPrism", tags: ["penguinmod", "datamgmt"], iconURL: jgPrismExtensionIcon, description: ( ), featured: true }, { name: ( ), extensionId: "jwVector", iconURL: jwVectorExtensionThumb, tags: ["penguinmod", "math"], description: ( ), extDeveloper: "jwklong", featured: true }, { name: ( ), extensionId: "oddMessage", tags: ["penguinmod"], iconURL: silvxrcatOddMessagesExtensionIcon, description: ( ), featured: true, extDeveloper: "silvxrcat" }, { name: ( ), extensionId: "jgIframe", iconURL: jgIframeExtensionIcon, tags: ["penguinmod"], description: ( ), featured: true, internetConnectionRequired: true }, { name: ( ), extensionId: "shovelColorPicker", iconURL: theshovelColorPickerIcon, tags: ["penguinmod"], description: ( ), extDeveloper: "TheShovel", featured: true }, { name: ( ), extensionId: "colors", iconURL: gsaColorUtilExtensionIcon, tags: ["penguinmod"], description: ( ), featured: true }, { name: ( ), extensionId: "https://extensions.penguinmod.com/extensions/Lily/AllMenus.js", iconURL: "https://extensions.penguinmod.com/images/Lily/AllMenus.svg", tags: ["penguinmod"], description: ( ), extDeveloper: "LilyMakesThings", featured: true }, { name: ( ), extensionId: "jwProto", iconURL: jwProtoExtensionIcon, tags: ["penguinmod"], description: ( ), featured: true }, { name: ( ), extensionId: "iygPerlin", tags: ["penguinmod"], iconURL: iygPerlinNoiseExtensionIcon, description: ( ), featured: true }, { name: ( ), extensionId: "Gamepad", tags: ["turbowarp", "hardware"], insetIconURL: turbowarpIcon, twDeveloper: "GarboMuffin", iconURL: gp, description: ( ), featured: true }, { name: ( ), extensionId: "sharkpoolPrinting", iconURL: sharkpoolPrintingIcon, description: ( ), featured: true }, { name: ( ), extensionId: "https://extensions.turbowarp.org/Xeltalliv/clippingblending.js", iconURL: clippingblending, tags: ["turbowarp", "graphics"], insetIconURL: turbowarpIcon, description: ( ), featured: true, twDeveloper: "Vadik1" }, { name: ( ), extensionId: "https://extensions.turbowarp.org/pointerlock.js", tags: ["turbowarp"], insetIconURL: turbowarpIcon, iconURL: pointerlockThumb, description: ( ), featured: true, internetConnectionRequired: false, twDeveloper: "GarboMuffin" }, { name: ( ), extensionId: "https://extensions.turbowarp.org/cursor.js", tags: ["turbowarp"], insetIconURL: turbowarpIcon, iconURL: "https://extensions.turbowarp.org/images/cursor.png", description: ( ), featured: true, internetConnectionRequired: false, twDeveloper: "GarboMuffin" }, { name: ( ), extensionId: "jgScratchAuthenticate", iconURL: jgScratchAuthExtensionIcon, tags: ["penguinmod"], description: ( ), featured: true }, { name: ( ), extensionId: "jgJavascript", iconURL: jgJavascriptExtensionIcon, tags: ["penguinmod", "programminglanguage"], description: ( ), featured: true }, { name: ( ), extensionId: "jwArray", iconURL: jwArrayExtensionThumb, tags: ["penguinmod", "datamgmt"], description: ( ), extDeveloper: "jwklong", featured: true }, { name: ( ), extensionId: "jwTargets", iconURL: jwTargetsExtensionThumb, tags: ["penguinmod"], description: ( ), extDeveloper: "jwklong", featured: true }, { name: ( ), extensionId: "jwNum", iconURL: jwNumExtensionThumb, tags: ["penguinmod", "math"], description: ( ), extDeveloper: "jwklong", credits: "Naruyoko for ExpantaNum.js", featured: true }, { name: ( ), extensionId: "jwColor", iconURL: jwColorExtensionThumb, tags: ["penguinmod", "graphics"], description: ( ), extDeveloper: "jwklong", featured: true }, { name: ( ), extensionId: "microbit", collaborator: "micro:bit", iconURL: microbitIconURL, insetIconURL: microbitInsetIconURL, tags: ["scratch", "hardware"], description: ( ), featured: true, disabled: false, bluetoothRequired: true, internetConnectionRequired: true, launchPeripheralConnectionFlow: true, useAutoScan: false, connectionIconURL: microbitConnectionIconURL, connectionSmallIconURL: microbitConnectionSmallIconURL, connectingMessage: ( ), helpLink: "https://scratch.mit.edu/microbit" }, { name: ( ), extensionId: "ev3", collaborator: "LEGO", iconURL: ev3IconURL, insetIconURL: ev3InsetIconURL, tags: ["scratch", "hardware"], description: ( ), featured: true, disabled: false, bluetoothRequired: true, internetConnectionRequired: true, launchPeripheralConnectionFlow: true, useAutoScan: false, connectionIconURL: ev3ConnectionIconURL, connectionSmallIconURL: ev3ConnectionSmallIconURL, customInsetColor: "#FFBF00", connectingMessage: ( ), helpLink: "https://scratch.mit.edu/ev3" }, { name: ( ), extensionId: "boost", collaborator: "LEGO", iconURL: boostIconURL, insetIconURL: boostInsetIconURL, tags: ["scratch", "hardware"], description: ( ), featured: true, disabled: false, bluetoothRequired: true, internetConnectionRequired: true, launchPeripheralConnectionFlow: true, useAutoScan: true, connectionIconURL: boostConnectionIconURL, connectionSmallIconURL: boostConnectionSmallIconURL, connectionTipIconURL: boostConnectionTipIconURL, customInsetColor: "#FFAB19", connectingMessage: ( ), helpLink: "https://scratch.mit.edu/boost" }, { name: ( ), extensionId: "wedo2", collaborator: "LEGO", iconURL: wedo2IconURL, insetIconURL: wedo2InsetIconURL, description: ( ), featured: true, disabled: false, tags: ['scratch', 'hardware'], bluetoothRequired: true, internetConnectionRequired: true, launchPeripheralConnectionFlow: true, useAutoScan: true, connectionIconURL: wedo2ConnectionIconURL, connectionSmallIconURL: wedo2ConnectionSmallIconURL, connectionTipIconURL: wedo2ConnectionTipIconURL, customInsetColor: '#FF6680', connectingMessage: ( ), helpLink: 'https://scratch.mit.edu/wedo' }, { name: 'Go Direct Force & Acceleration', extensionId: 'gdxfor', collaborator: 'Vernier', iconURL: gdxforIconURL, insetIconURL: gdxforInsetIconURL, customInsetColor: '#4C97FF', tags: ['scratch', 'hardware'], description: ( ), featured: true, disabled: false, bluetoothRequired: true, internetConnectionRequired: true, launchPeripheralConnectionFlow: true, useAutoScan: false, connectionIconURL: gdxforConnectionIconURL, connectionSmallIconURL: gdxforConnectionSmallIconURL, connectingMessage: ( ), helpLink: 'https://scratch.mit.edu/vernier' }, { name: ( ), href: 'https://extensions.penguinmod.com/', extensionId: 'special_penguinmodExtensionLibrary', iconURL: penguinmodLibraryExtensionIcon, description: ( ), tags: ['penguinmod', 'library'], featured: true }, { name: ( ), href: 'https://extensions.turbowarp.org/', extensionId: 'special_turbowarpExtensionLibrary', iconURL: galleryIcon, description: ( ), tags: ['tw', 'turbowarp', 'library'], featured: true }, { name: ( ), href: "https://soiz1-sharkpool-extension.hf.space?originPM=true", extensionId: "special_sharkpoolExtensionLibrary", iconURL: sharkpoolGalleryIcon, description: ( ), credits: "Listed in the site", tags: ["library"], featured: true }, { name: ( ), href: "https://jwklong.github.io/extforge", extensionId: "special_extforge", iconURL: ExtForgeIcon, description: ( ), extDeveloper: "jwklong", isNew: true, tags: ["extcreate"], featured: true }, { name: ( ), extensionId: "", iconURL: customExtensionIcon, description: ( ), featured: true } ]; /* ---------------------------------------------- ### NOTE TO PENGUINMOD FORKS: ### Please DO NOT make the extensions below accessible in the editor without livetests! They are NOT fully developed for people to use and create full projects with! These extensions could have missing features, cause random errors, broken projects, or even crash the editor! Moving these into the main extension list will cause people who use your fork to assume they are ready for them to use! Please keep these in livetests to reduce bug reports on your fork! :) ---------------------------------------------- */ if (IsLocal || IsLiveTests) { const extras = [ { name: ( ), extensionId: 'newCanvas', iconURL: canvasExtensionBanner, tags: ['penguinmod'], insetIconURL: canvasExtensionIcon, customInsetColor: '#0094FF', description: ( ), featured: true }, { name: 'OLD Canvas', extensionId: 'canvas', iconURL: canvasExtensionBanner, tags: ['penguinmod'], insetIconURL: canvasExtensionIcon, customInsetColor: '#0094FF', description: 'HTML Canvas の非推奨バージョン。', featured: true }, { name: 'Legacy Files', extensionId: 'jgFiles', iconURL: defaultExtensionIcon, tags: ['penguinmod', 'datamgmt'], description: 'ファイルの基本ブロック。これはTurboWarpファイル拡張子に置き換えられました。', featured: true }, { name: 'Clone Communication', extensionId: 'jgClones', iconURL: jgCloneManagerExtensionIcon, tags: ['penguinmod'], description: 'クローンとメインスプライト間のデータ共有が主な機能ですが、他にもいくつかの小さな機能があります。この機能はTurboWarp Clones+拡張機能に置き換えられました。', featured: true }, { name: 'Easy Save', extensionId: 'jgEasySave', iconURL: defaultExtensionIcon, tags: ['penguinmod', 'datamgmt'], description: '変数、リスト、および追加情報をファイルに保存し、それらを再度読み込みます。', featured: true }, { name: ( ), extensionId: 'tw', twDeveloper: 'GarboMuffin', tags: ['turbowarp'], insetIconURL: turbowarpIcon, iconURL: twIcon, description: '奇妙な新しいブロック。感知拡張に置き換えられました。', featured: true }, { name: 'the doo doo extension', extensionId: 'jgDooDoo', iconURL: defaultExtensionIcon, tags: ['penguinmod', 'joke'], description: 'dr bob eae', featured: true }, { name: 'Christmas', extensionId: 'jgChristmas', iconURL: 'https://extensions.penguinmod.com/images/JeremyGamer13/christmas.png', tags: ['penguinmod', 'joke'], description: 'hooraye', featured: true }, { name: 'an amazing extension', extensionId: 'jgBestExtension', iconURL: 'https://extensions.penguinmod.com/images/JeremyGamer13/epic.png', internetConnectionRequired: true, tags: ['penguinmod', 'joke'], description: 'これは本当に良い拡張機能です。今すぐ使ってください。', featured: true }, { name: 'Epic utilities', extensionId: 'https://extensions.penguinmod.com/extensions/SharkPool/AprilFools.js', iconURL: 'https://extensions.penguinmod.com/images/JeremyGamer13/epicutils.png', tags: ['penguinmod', 'joke'], description: '本日のスポンサーである sharkpool (the epic utilities) がお届けする、非常に優れたユーティリティ', featured: true }, { name: 'CATS', extensionId: 'https://extensions.penguinmod.com/extensions/Gen1x/CATS.js', iconURL: 'https://extensions.penguinmod.com/images/Gen1x/cats.png', tags: ['penguinmod', 'joke'], description: '猫に関するブロック。', extDeveloper: 'G1nX', featured: true }, { name: 'McUtils', extensionId: 'https://extensions.turbowarp.org/Lily/McUtils.js', tags: ['turbowarp', 'joke'], iconURL: 'https://extensions.turbowarp.org/images/Lily/McUtils.png', insetIconURL: turbowarpIcon, description: 'ファーストフード店員のための基本的なユーティリティ', featured: true, twDeveloper: 'LilyMakesThings' }, { name: 'image blocks', extensionId: 'https://extensions.penguinmod.com/extensions/Ashime/funneimageblocks.js', iconURL: 'https://extensions.penguinmod.com/images/JeremyGamer13/screenshot1.png', tags: ['penguinmod', 'joke'], internetConnectionRequired: true, description: 'ペンギンブロックがあるのに猫ブロックなんて必要ない', extDeveloper: 'Ashimee, 0znzw, CST1229', featured: true }, { name: 'fire in the hole', extensionId: 'https://extensions.penguinmod.com/extensions/JeremyGamer13/FireInTheHole.js', iconURL: 'https://library.penguinmod.com/files/emojis/cluelesssmile.png', tags: ['penguinmod', 'joke'], internetConnectionRequired: true, description: 'エイプリルフールは長すぎたね、このジョークはもう面白くない', featured: true }, { name: 'Unite', extensionId: 'jwUnite', iconURL: jwUniteExtensionIcon, tags: ['penguinmod'], description: '最終的にデフォルトのツールボックスに統合されたレガシー拡張機能。', featured: true }, { name: 'XML', extensionId: 'jwXml', iconURL: jwXmlExtensionIcon, tags: ['penguinmod', 'datamgmt'], description: 'XMLデータの作成と取得を可能にします。データの変更はまだできません。', extDeveloper: 'jwklong', featured: true }, { name: 'Debugging', extensionId: 'jgDebugging', iconURL: jgDebuggingIcon, tags: ['penguinmod'], description: '情報をログに記録し、コマンドを実行します。パッケージ化されたプロジェクトのデバッグや、ちょっとした変更に最適です。', featured: true }, { name: 'Test Extension Loader', href: 'https://studio.penguinmod.com/loadExt.html', extensionId: 'special_testExtensionLibrary', iconURL: defaultExtensionIcon, description: 'ライブラリから拡張機能を読み込むテスト。開発者向け。', featured: true }, { name: ( ), extensionId: 'jwStructs', tags: ['penguinmod'], iconURL: jwStructsExtensionIcon, description: ( ), featured: true }, { name: 'PenguinMod Permissions', extensionId: 'JgPermissionBlocks', iconURL: jgPermissionExtensionIcon, tags: ['penguinmod'], description: 'レガシー拡張機能。古いブロックはもはや本来の用途を果たせません。PenguinModが特定のタスクを実行する際に要求する権限を管理するための直接ブロックです。', featured: true }, { name: 'Jeremys Dev Tools', extensionId: 'jgDev', iconURL: defaultExtensionIcon, tags: ['penguinmod'], description: '拡張機能をテストして、可能かどうかを確認します。\nブロックは変更される可能性があり、プロジェクトが破損する可能性があるため、本番環境では使用しないでください。', credits: 'Some features added from LilyMakesThings, CubesterYT, TheShovel', featured: true }, { name: '3D', extensionId: 'jg3d', iconURL: jg3dExtensionIcon, tags: ['penguinmod', '3d'], customInsetColor: '#B200FF', insetIconURL: jg3dInsetExtensionIcon, description: '3D の魔法を使ってプロジェクトに彩りを添えましょう。', featured: true }, { name: '3D Physics', extensionId: 'fr3d', iconURL: fr3dPhysicsExtensionIcon, tags: ['penguinmod', '3d'], customInsetColor: '#D066FE', insetIconURL: fr3dPhysicsInsetExtensionIcon, description: '3D 拡張のための物理。', featured: true }, { name: '3D Virtual Reality', extensionId: 'jg3dVr', iconURL: jg3dVrExtensionIcon, tags: ['penguinmod', 'hardware', '3d'], customInsetColor: '#B200FF', insetIconURL: jg3dVrInsetExtensionIcon, description: '開発中。互換性が損なわれる可能性があります。プレイヤーがあなたの世界に飛び込めるようにしましょう!', featured: true, extensionWarningOnImport: true }, { name: 'Interfaces', extensionId: 'jgInterfaces', iconURL: jgsilvxrcatInterfacesExtensionIcon, credits: 'silvxrcat', tags: ['penguinmod'], description: '開発中', featured: true }, { name: 'Packager Applications', extensionId: 'jgPackagerApplications', iconURL: jgPackagerApplicationsExtensionIcon, insetIconURL: jgPackagerApplicationsInsetExtensionIcon, twDeveloper: 'CubesterYT', customInsetColor: '#66B8FF', tags: ['penguinmod', 'packager'], description: '開発中。Web サイトでできないことをパッケージ アプリケーションで実現できます。', featured: true }, { name: 'Inline Blocks', extensionId: 'pmInlineBlocks', iconURL: pmInlineBlocksExtensionIcon, tags: ['penguinmod'], description: '簡単なタスク用のクイックブロックを作成します。任意の円形の場所に挿入して、任意の値を返すように設定できます。', featured: true }, { name: ( ), extensionId: 'jgPathfinding', tags: ['penguinmod'], iconURL: jgPathfindingExtensionIcon, description: ( ), featured: true }, { name: 'Animation', extensionId: 'jgAnimation', iconURL: jgAnimationExtensionIcon, tags: ['penguinmod'], description: '開発中。現在バグがあり、機能が不足しています。', featured: true }, { name: 'Virtual Reality', extensionId: 'jgVr', iconURL: jgVrExtensionIcon, tags: ['penguinmod', 'hardware'], description: '開発中', extDeveloper: "JeremyGamer13", extraLabels: [ { name: "Uses code from", value: '"Augmented Reality" by Vadik1' } ], extensionWarningOnImport: true, featured: true } ]; extras.forEach(ext => { menuItems.push(ext); }); } const filteredMenuItems = (typeof ENV !== 'undefined' && ENV.CanLoadCustomExtension === false) ? menuItems.filter(item => item.extensionId !== '') : menuItems; export default filteredMenuItems;