var GUI = /******/ (function(modules) { // webpackBootstrap /******/ // install a JSONP callback for chunk loading /******/ function webpackJsonpCallback(data) { /******/ var chunkIds = data[0]; /******/ var moreModules = data[1]; /******/ var executeModules = data[2]; /******/ /******/ // add "moreModules" to the modules object, /******/ // then flag all "chunkIds" as loaded and fire callback /******/ var moduleId, chunkId, i = 0, resolves = []; /******/ for(;i < chunkIds.length; i++) { /******/ chunkId = chunkIds[i]; /******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { /******/ resolves.push(installedChunks[chunkId][0]); /******/ } /******/ installedChunks[chunkId] = 0; /******/ } /******/ for(moduleId in moreModules) { /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { /******/ modules[moduleId] = moreModules[moduleId]; /******/ } /******/ } /******/ if(parentJsonpFunction) parentJsonpFunction(data); /******/ /******/ while(resolves.length) { /******/ resolves.shift()(); /******/ } /******/ /******/ // add entry modules from loaded chunk to deferred list /******/ deferredModules.push.apply(deferredModules, executeModules || []); /******/ /******/ // run deferred modules when all chunks ready /******/ return checkDeferredModules(); /******/ }; /******/ function checkDeferredModules() { /******/ var result; /******/ for(var i = 0; i < deferredModules.length; i++) { /******/ var deferredModule = deferredModules[i]; /******/ var fulfilled = true; /******/ for(var j = 1; j < deferredModule.length; j++) { /******/ var depId = deferredModule[j]; /******/ if(installedChunks[depId] !== 0) fulfilled = false; /******/ } /******/ if(fulfilled) { /******/ deferredModules.splice(i--, 1); /******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); /******/ } /******/ } /******/ /******/ return result; /******/ } /******/ /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // Promise = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ "fullscreen": 0 /******/ }; /******/ /******/ var deferredModules = []; /******/ /******/ // script path function /******/ function jsonpScriptSrc(chunkId) { /******/ return __webpack_require__.p + "js/" + ({"addons":"addons","iframe-extension-worker":"iframe-extension-worker","library-backdrops":"library-backdrops","library-costumes":"library-costumes","library-sounds":"library-sounds","library-sprites":"library-sprites","sb":"sb","addon-default-entry":"addon-default-entry","addon-entry-2d-color-picker":"addon-entry-2d-color-picker","addon-entry-better-img-uploads":"addon-entry-better-img-uploads","addon-entry-block-count":"addon-entry-block-count","addon-entry-block-palette-icons":"addon-entry-block-palette-icons","addon-entry-blocks2image":"addon-entry-blocks2image","addon-entry-cat-blocks":"addon-entry-cat-blocks","addon-entry-clones":"addon-entry-clones","addon-entry-columns":"addon-entry-columns","addon-entry-custom-block-shape":"addon-entry-custom-block-shape","addon-entry-custom-block-text":"addon-entry-custom-block-text","addon-entry-custom-zoom":"addon-entry-custom-zoom","addon-entry-debugger":"addon-entry-debugger","addon-entry-default-costume-editor-color":"addon-entry-default-costume-editor-color","addon-entry-disable-paste-offset":"addon-entry-disable-paste-offset","addon-entry-disable-stage-drag-select":"addon-entry-disable-stage-drag-select","addon-entry-editor-buttons-reverse-order":"addon-entry-editor-buttons-reverse-order","addon-entry-editor-colored-context-menus":"addon-entry-editor-colored-context-menus","addon-entry-editor-extra-keys":"addon-entry-editor-extra-keys","addon-entry-editor-sounds":"addon-entry-editor-sounds","addon-entry-editor-stage-left":"addon-entry-editor-stage-left","addon-entry-editor-theme3":"addon-entry-editor-theme3","addon-entry-fullscreen":"addon-entry-fullscreen","addon-entry-gamepad":"addon-entry-gamepad","addon-entry-hide-delete-button":"addon-entry-hide-delete-button","addon-entry-hide-flyout":"addon-entry-hide-flyout","addon-entry-hide-new-variables":"addon-entry-hide-new-variables","addon-entry-hide-stage":"addon-entry-hide-stage","addon-entry-initialise-sprite-position":"addon-entry-initialise-sprite-position","addon-entry-load-extensions":"addon-entry-load-extensions","addon-entry-mediarecorder":"addon-entry-mediarecorder","addon-entry-mouse-pos":"addon-entry-mouse-pos","addon-entry-no-script-bumping":"addon-entry-no-script-bumping","addon-entry-number-pad":"addon-entry-number-pad","addon-entry-paint-by-default":"addon-entry-paint-by-default","addon-entry-paint-snap":"addon-entry-paint-snap","addon-entry-remove-curved-stage-border":"addon-entry-remove-curved-stage-border","addon-entry-remove-sprite-confirm":"addon-entry-remove-sprite-confirm","addon-entry-script-snap":"addon-entry-script-snap","addon-entry-search-sprites":"addon-entry-search-sprites","addon-entry-sprite-properties":"addon-entry-sprite-properties","addon-entry-swap-local-global":"addon-entry-swap-local-global","addon-entry-transparent-orphans":"addon-entry-transparent-orphans","addon-entry-tw-disable-cloud-variables":"addon-entry-tw-disable-cloud-variables","addon-entry-tw-remove-backpack":"addon-entry-tw-remove-backpack","addon-entry-tw-remove-feedback":"addon-entry-tw-remove-feedback","addon-entry-tw-straighten-comments":"addon-entry-tw-straighten-comments","addon-entry-vol-slider":"addon-entry-vol-slider","addon-entry-zebra-striping":"addon-entry-zebra-striping","addon-l10n-de":"addon-l10n-de","addon-l10n-es":"addon-l10n-es","addon-l10n-fr":"addon-l10n-fr","addon-l10n-hu":"addon-l10n-hu","addon-l10n-it":"addon-l10n-it","addon-l10n-ja":"addon-l10n-ja","addon-l10n-ko":"addon-l10n-ko","addon-l10n-nl":"addon-l10n-nl","addon-l10n-pl":"addon-l10n-pl","addon-l10n-pt":"addon-l10n-pt","addon-l10n-ro":"addon-l10n-ro","addon-l10n-ru":"addon-l10n-ru","addon-l10n-sl":"addon-l10n-sl","addon-l10n-tr":"addon-l10n-tr"}[chunkId]||chunkId) + ".js" /******/ } /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ // This file contains only the entry chunk. /******/ // The chunk loading function for additional chunks /******/ __webpack_require__.e = function requireEnsure(chunkId) { /******/ var promises = []; /******/ /******/ /******/ // JSONP chunk loading for javascript /******/ /******/ var installedChunkData = installedChunks[chunkId]; /******/ if(installedChunkData !== 0) { // 0 means "already installed". /******/ /******/ // a Promise means "currently loading". /******/ if(installedChunkData) { /******/ promises.push(installedChunkData[2]); /******/ } else { /******/ // setup Promise in chunk cache /******/ var promise = new Promise(function(resolve, reject) { /******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; /******/ }); /******/ promises.push(installedChunkData[2] = promise); /******/ /******/ // start chunk loading /******/ var script = document.createElement('script'); /******/ var onScriptComplete; /******/ /******/ script.charset = 'utf-8'; /******/ script.timeout = 120; /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } /******/ script.src = jsonpScriptSrc(chunkId); /******/ /******/ // create error before stack unwound to get useful stacktrace later /******/ var error = new Error(); /******/ onScriptComplete = function (event) { /******/ // avoid mem leaks in IE. /******/ script.onerror = script.onload = null; /******/ clearTimeout(timeout); /******/ var chunk = installedChunks[chunkId]; /******/ if(chunk !== 0) { /******/ if(chunk) { /******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); /******/ var realSrc = event && event.target && event.target.src; /******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; /******/ error.name = 'ChunkLoadError'; /******/ error.type = errorType; /******/ error.request = realSrc; /******/ chunk[1](error); /******/ } /******/ installedChunks[chunkId] = undefined; /******/ } /******/ }; /******/ var timeout = setTimeout(function(){ /******/ onScriptComplete({ type: 'timeout', target: script }); /******/ }, 120000); /******/ script.onerror = script.onload = onScriptComplete; /******/ document.head.appendChild(script); /******/ } /******/ } /******/ return Promise.all(promises); /******/ }; /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // on error function for async loading /******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; /******/ /******/ var jsonpArray = window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []; /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); /******/ jsonpArray.push = webpackJsonpCallback; /******/ jsonpArray = jsonpArray.slice(); /******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); /******/ var parentJsonpFunction = oldJsonpFunction; /******/ /******/ /******/ // add entry module to deferred list /******/ deferredModules.push(["./src/playground/fullscreen.jsx","vendors~addon-settings~credits~editor~embed~fullscreen~player~playground","vendors~addon-settings~credits~editor~embed~fullscreen~playground","vendors~editor~embed~fullscreen~player~playground","addon-settings~addons~editor~fullscreen~player~playground"]); /******/ // run deferred modules when ready /******/ return checkDeferredModules(); /******/ }) /************************************************************************/ /******/ ({ /***/ "./node_modules/PenguinMod-MarkDown/src/block-rules.js": /*!*************************************************************!*\ !*** ./node_modules/PenguinMod-MarkDown/src/block-rules.js ***! \*************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/PenguinMod-MarkDown/src/utils.js"); const block = { newline: /^\n+/, code: /^( {4}[^\n]+\n*)+/, fences: _utils__WEBPACK_IMPORTED_MODULE_0__["noop"], hr: /^( *[-*_]){3,} *(?:\n+|$)/, heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, nptable: _utils__WEBPACK_IMPORTED_MODULE_0__["noop"], lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/, list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/, def: /^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, table: _utils__WEBPACK_IMPORTED_MODULE_0__["noop"], paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, text: /^[^\n]+/ } block.bullet = /(?:[*+-]|\d+\.)/ block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/ block.item = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(block.item, 'gm')(/bull/g, block.bullet)() block.list = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(block.list)(/bull/g, block.bullet)( 'hr', '\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))' )('def', '\\n+(?=' + block.def.source + ')')() block.blockquote = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(block.blockquote)('def', block.def)() block._tag = '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b' block.html = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(block.html)('comment', //)( 'closed', /<(tag)[\s\S]+?<\/\1>/ )('closing', /])*?>/)(/tag/g, block._tag)() block.paragraph = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(block.paragraph)('hr', block.hr)( 'heading', block.heading )('lheading', block.lheading)('blockquote', block.blockquote)( 'tag', '<' + block._tag )('def', block.def)() /** * Normal Block Grammar */ block.normal = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["merge"])({}, block) /** * GFM Block Grammar */ block.gfm = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["merge"])({}, block.normal, { fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/, paragraph: /^/, heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/, checkbox: /^\[([ x])\] +/ }) block.gfm.paragraph = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(block.paragraph)( '(?!', '(?!' + block.gfm.fences.source.replace('\\1', '\\2') + '|' + block.list.source.replace('\\1', '\\3') + '|' )() /** * GFM + Tables Block Grammar */ block.tables = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["merge"])({}, block.gfm, { nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ }) /* harmony default export */ __webpack_exports__["default"] = (block); /***/ }), /***/ "./node_modules/PenguinMod-MarkDown/src/defaults.js": /*!**********************************************************!*\ !*** ./node_modules/PenguinMod-MarkDown/src/defaults.js ***! \**********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderer */ "./node_modules/PenguinMod-MarkDown/src/renderer.js"); /* harmony default export */ __webpack_exports__["default"] = ({ gfm: true, tables: true, taskLists: true, dataLine: true, breaks: false, pedantic: false, sanitize: false, sanitizer: null, mangle: true, smartLists: false, silent: false, highlight: null, langPrefix: 'lang-', smartypants: false, headerPrefix: '', renderer: new _renderer__WEBPACK_IMPORTED_MODULE_0__["default"](), xhtml: false }); /***/ }), /***/ "./node_modules/PenguinMod-MarkDown/src/index.js": /*!*******************************************************!*\ !*** ./node_modules/PenguinMod-MarkDown/src/index.js ***! \*******************************************************/ /*! exports provided: Parser, Lexer, Renderer, InlineLexer, render */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/PenguinMod-MarkDown/src/utils.js"); /* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaults */ "./node_modules/PenguinMod-MarkDown/src/defaults.js"); /* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parser */ "./node_modules/PenguinMod-MarkDown/src/parser.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Parser", function() { return _parser__WEBPACK_IMPORTED_MODULE_2__["default"]; }); /* harmony import */ var _lexer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lexer */ "./node_modules/PenguinMod-MarkDown/src/lexer.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Lexer", function() { return _lexer__WEBPACK_IMPORTED_MODULE_3__["default"]; }); /* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./renderer */ "./node_modules/PenguinMod-MarkDown/src/renderer.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Renderer", function() { return _renderer__WEBPACK_IMPORTED_MODULE_4__["default"]; }); /* harmony import */ var _inline_lexer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./inline-lexer */ "./node_modules/PenguinMod-MarkDown/src/inline-lexer.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "InlineLexer", function() { return _inline_lexer__WEBPACK_IMPORTED_MODULE_5__["default"]; }); function render(src, opt) { if (opt) opt = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["merge"])({}, _defaults__WEBPACK_IMPORTED_MODULE_1__["default"], opt) return _parser__WEBPACK_IMPORTED_MODULE_2__["default"].parse(_lexer__WEBPACK_IMPORTED_MODULE_3__["default"].lex(src, opt), opt) } /***/ }), /***/ "./node_modules/PenguinMod-MarkDown/src/inline-lexer.js": /*!**************************************************************!*\ !*** ./node_modules/PenguinMod-MarkDown/src/inline-lexer.js ***! \**************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaults */ "./node_modules/PenguinMod-MarkDown/src/defaults.js"); /* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./renderer */ "./node_modules/PenguinMod-MarkDown/src/renderer.js"); /* harmony import */ var _inline_rules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./inline-rules */ "./node_modules/PenguinMod-MarkDown/src/inline-rules.js"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./node_modules/PenguinMod-MarkDown/src/utils.js"); class InlineLexer { constructor(links, options = _defaults__WEBPACK_IMPORTED_MODULE_0__["default"]) { this.options = options this.links = links this.renderer = this.options.renderer || new _renderer__WEBPACK_IMPORTED_MODULE_1__["default"]() this.renderer.options = this.options if (!this.links) { throw new Error('Tokens array requires a `links` property.') } if (this.options.gfm) { if (this.options.breaks) { this.rules = _inline_rules__WEBPACK_IMPORTED_MODULE_2__["default"].breaks } else { this.rules = _inline_rules__WEBPACK_IMPORTED_MODULE_2__["default"].gfm } } else if (this.options.pedantic) { this.rules = _inline_rules__WEBPACK_IMPORTED_MODULE_2__["default"].pedantic } else { this.rules = _inline_rules__WEBPACK_IMPORTED_MODULE_2__["default"].normal } } static output(src, links, options) { return new InlineLexer(links, options).output(src) } output(src) { let out = [] let link let text let href let cap while (src) { // escape if ((cap = this.rules.escape.exec(src))) { src = src.substring(cap[0].length) out.push(cap[1]) continue } // timestamp if ((cap = this.rules.timestamp.exec(src))) timestamp: { src = src.substring(cap[0].length) const date = Date.parse(cap[1]) if (isNaN(date)) break timestamp; out.push(this.renderer.timestamp(date, cap[3], cap[5])) continue } // autolink if ((cap = this.rules.autolink.exec(src))) { src = src.substring(cap[0].length) if (cap[2] === '@') { text = cap[1].charAt(6) === ':' ? this.mangle(cap[1].substring(7)) : this.mangle(cap[1]) href = this.mangle('mailto:') + text } else { text = Object(_utils__WEBPACK_IMPORTED_MODULE_3__["escape"])(cap[1]) href = text } out.push(this.renderer.link(href, null, text)) continue } // url (gfm) if (!this.inLink && (cap = this.rules.url.exec(src))) { src = src.substring(cap[0].length) text = Object(_utils__WEBPACK_IMPORTED_MODULE_3__["escape"])(cap[1]) href = text out.push(this.renderer.link(href, null, text)) continue } // tag if ((cap = this.rules.tag.exec(src))) { if (!this.inLink && /^/i.test(cap[0])) { this.inLink = false } src = src.substring(cap[0].length) out.push(this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : Object(_utils__WEBPACK_IMPORTED_MODULE_3__["escape"])(cap[0]) : cap[0]) continue } // link if ((cap = this.rules.link.exec(src))) { src = src.substring(cap[0].length) this.inLink = true out.push(this.outputLink(cap, { href: cap[2], title: cap[3] })) this.inLink = false continue } // reflink, nolink if ( (cap = this.rules.reflink.exec(src)) || (cap = this.rules.nolink.exec(src)) ) { src = src.substring(cap[0].length) link = (cap[2] || cap[1]).replace(/\s+/g, ' ') link = this.links[link.toLowerCase()] if (!link || !link.href) { out.push(cap[0].charAt(0)) src = cap[0].substring(1) + src continue } this.inLink = true out.push(this.outputLink(cap, link)) this.inLink = false continue } // strong if ((cap = this.rules.strong.exec(src))) { src = src.substring(cap[0].length) out.push(this.renderer.strong(this.output(cap[2] || cap[1]))) continue } // em if ((cap = this.rules.em.exec(src))) { src = src.substring(cap[0].length) out.push(this.renderer.em(this.output(cap[2] || cap[1]))) continue } // code if ((cap = this.rules.code.exec(src))) { src = src.substring(cap[0].length) out.push(this.renderer.codespan(Object(_utils__WEBPACK_IMPORTED_MODULE_3__["escape"])(cap[2], true))) continue } // br if ((cap = this.rules.br.exec(src))) { src = src.substring(cap[0].length) out.push(this.renderer.br()) continue } // del (gfm) if ((cap = this.rules.del.exec(src))) { src = src.substring(cap[0].length) out.push(this.renderer.del(this.output(cap[1]))) continue } // project mention if ((cap = this.rules.project.exec(src))) { // Top-level should never reach here. src = src.substring(cap[0].length) out.push(this.renderer.project(cap[1])) continue } // user mention if ((cap = this.rules.user.exec(src))) { // Top-level should never reach here. src = src.substring(cap[0].length) out.push(this.renderer.mention(cap[1])) continue } // emoji if ((cap = this.rules.emoji.exec(src))) { // Top-level should never reach here. src = src.substring(cap[0].length) out.push(this.renderer.emoji(cap[1])) continue } // text if ((cap = this.rules.text.exec(src))) { src = src.substring(cap[0].length) out.push(this.renderer.text(Object(_utils__WEBPACK_IMPORTED_MODULE_3__["escape"])(this.smartypants(cap[0])))) continue } if (src) { throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)) } } return out } outputLink(cap, link) { const href = Object(_utils__WEBPACK_IMPORTED_MODULE_3__["escape"])(link.href) const title = link.title ? Object(_utils__WEBPACK_IMPORTED_MODULE_3__["escape"])(link.title) : null return cap[0].charAt(0) === '!' ? this.renderer.image(href, title, Object(_utils__WEBPACK_IMPORTED_MODULE_3__["escape"])(cap[1])) : this.renderer.link(href, title, this.output(cap[1])) } smartypants(text) { if (!this.options.smartypants) return text return ( text // em-dashes .replace(/---/g, '\u2014') // en-dashes .replace(/--/g, '\u2013') // opening singles .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') // closing singles & apostrophes .replace(/'/g, '\u2019') // opening doubles .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') // closing doubles .replace(/"/g, '\u201d') // ellipses .replace(/\.{3}/g, '\u2026') ) } mangle(text) { if (!this.options.mangle) return text let out = '' let i = 0 let ch for (; i < text.length; i++) { ch = text.charCodeAt(i) if (Math.random() > 0.5) { ch = 'x' + ch.toString(16) } out += '&#' + ch + ';' } return out } } InlineLexer.rules = _inline_rules__WEBPACK_IMPORTED_MODULE_2__["default"] /* harmony default export */ __webpack_exports__["default"] = (InlineLexer); /***/ }), /***/ "./node_modules/PenguinMod-MarkDown/src/inline-rules.js": /*!**************************************************************!*\ !*** ./node_modules/PenguinMod-MarkDown/src/inline-rules.js ***! \**************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/PenguinMod-MarkDown/src/utils.js"); /** * Inline-Level Grammar */ const inline = { escape: /^\\([\\`*{}[\]()#+\-.!_@>w<:])/, autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, url: _utils__WEBPACK_IMPORTED_MODULE_0__["noop"], tag: /^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, link: /^!?\[(inside)\]\(href\)/, reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, nolink: /^!?\[((?:\[[^\]]*\]|[^[\]])*)\]/, strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/, br: /^ {2,}\n(?!\s*$)/, del: _utils__WEBPACK_IMPORTED_MODULE_0__["noop"], text: /^[\s\S]+?(?=[\\]*?)(:(\w{3})?(:([^>]*))?)?>/ } inline._inside = /(?:\[[^\]]*\]|[^[\]]|\](?=[^[]*\]))*/ inline._href = /\s*?(?:\s+['"]([\s\S]*?)['"])?\s*/ inline.link = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(inline.link)('inside', inline._inside)( 'href', inline._href )() inline.reflink = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(inline.reflink)('inside', inline._inside)() /** * Normal Inline Grammar */ inline.normal = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["merge"])({}, inline) /** * Pedantic Inline Grammar */ inline.pedantic = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["merge"])({}, inline.normal, { strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ }) /** * GFM Inline Grammar */ inline.gfm = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["merge"])({}, inline.normal, { escape: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(inline.escape)('])', '~|])')(), url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/, del: /^~~(?=\S)([\s\S]*?\S)~~/, text: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(inline.text)(']|', '~]|')('|', '|https?://|')() }) /** * GFM + Line Breaks Inline Grammar */ inline.breaks = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["merge"])({}, inline.gfm, { br: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(inline.br)('{2,}', '*')(), text: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["replace"])(inline.gfm.text)('{2,}', '*')() }) /* harmony default export */ __webpack_exports__["default"] = (inline); /***/ }), /***/ "./node_modules/PenguinMod-MarkDown/src/lexer.js": /*!*******************************************************!*\ !*** ./node_modules/PenguinMod-MarkDown/src/lexer.js ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _block_rules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./block-rules */ "./node_modules/PenguinMod-MarkDown/src/block-rules.js"); /* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaults */ "./node_modules/PenguinMod-MarkDown/src/defaults.js"); class Lexer { constructor(options = _defaults__WEBPACK_IMPORTED_MODULE_1__["default"]) { this.tokens = [] this.tokens.links = {} this.options = options if (this.options.gfm) { if (this.options.tables) { this.rules = _block_rules__WEBPACK_IMPORTED_MODULE_0__["default"].tables } else { this.rules = _block_rules__WEBPACK_IMPORTED_MODULE_0__["default"].gfm } } else { this.rules = _block_rules__WEBPACK_IMPORTED_MODULE_0__["default"].normal } } static lex(src, options) { return new Lexer(options).lex(src) } lex(src) { src = src .replace(/\r\n|\r/g, '\n') .replace(/\t/g, ' ') .replace(/\u00a0/g, ' ') .replace(/\u2424/g, '\n') return this.token(src, true) } token(src, top, bq) { src = src.replace(/^ +$/gm, '') let next let loose let cap let bull let b let item let space let i let l let checked while (src) { // newline if ((cap = this.rules.newline.exec(src))) { src = src.substring(cap[0].length) if (cap[0].length > 1) { this.tokens.push({ type: 'space' }) } } // code if ((cap = this.rules.code.exec(src))) { src = src.substring(cap[0].length) cap = cap[0].replace(/^ {4}/gm, '') this.tokens.push({ type: 'code', text: this.options.pedantic ? cap : cap.replace(/\n+$/, '') }) continue } // fences (gfm) if ((cap = this.rules.fences.exec(src))) { src = src.substring(cap[0].length) this.tokens.push({ type: 'code', lang: cap[2], text: cap[3] || '' }) continue } // heading if ((cap = this.rules.heading.exec(src))) { src = src.substring(cap[0].length) this.tokens.push({ type: 'heading', depth: cap[1].length, text: cap[2] }) continue } // table no leading pipe (gfm) if (top && (cap = this.rules.nptable.exec(src))) { src = src.substring(cap[0].length) item = { type: 'table', header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), cells: cap[3].replace(/\n$/, '').split('\n') } for (i = 0; i < item.align.length; i++) { if (/^ *-+: *$/.test(item.align[i])) { item.align[i] = 'right' } else if (/^ *:-+: *$/.test(item.align[i])) { item.align[i] = 'center' } else if (/^ *:-+ *$/.test(item.align[i])) { item.align[i] = 'left' } else { item.align[i] = null } } for (i = 0; i < item.cells.length; i++) { item.cells[i] = item.cells[i].split(/ *\| */) } this.tokens.push(item) continue } // lheading if ((cap = this.rules.lheading.exec(src))) { src = src.substring(cap[0].length) this.tokens.push({ type: 'heading', depth: cap[2] === '=' ? 1 : 2, text: cap[1] }) continue } // hr if ((cap = this.rules.hr.exec(src))) { src = src.substring(cap[0].length) this.tokens.push({ type: 'hr' }) continue } // blockquote if ((cap = this.rules.blockquote.exec(src))) { src = src.substring(cap[0].length) this.tokens.push({ type: 'blockquote_start' }) cap = cap[0].replace(/^ *> ?/gm, '') // Pass `top` to keep the current // "toplevel" state. This is exactly // how markdown.pl works. this.token(cap, top, true) this.tokens.push({ type: 'blockquote_end' }) continue } // list if ((cap = this.rules.list.exec(src))) { src = src.substring(cap[0].length) bull = cap[2] this.tokens.push({ type: 'list_start', ordered: bull.length > 1 }) // Get each top-level item. cap = cap[0].match(this.rules.item) next = false l = cap.length i = 0 for (; i < l; i++) { item = cap[i] // Remove the list item's bullet // so it is seen as the next token. space = item.length item = item.replace(/^ *([*+-]|\d+\.) +/, '') if (this.options.gfm && this.options.taskLists) { checked = this.rules.checkbox.exec(item) if (checked) { checked = checked[1] === 'x' item = item.replace(this.rules.checkbox, '') } else { checked = undefined } } // Outdent whatever the // list item contains. Hacky. if (item.indexOf('\n ') !== -1) { space -= item.length item = this.options.pedantic ? item.replace(/^ {1,4}/gm, '') : item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') } // Determine whether the next list item belongs here. // Backpedal if it does not belong in this list. if (this.options.smartLists && i !== l - 1) { b = this.rules.bullet.exec(cap[i + 1])[0] if (bull !== b && !(bull.length > 1 && b.length > 1)) { src = cap.slice(i + 1).join('\n') + src i = l - 1 } } // Determine whether item is loose or not. // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ // for discount behavior. loose = next || /\n\n(?!\s*$)/.test(item) if (i !== l - 1) { next = item.charAt(item.length - 1) === '\n' if (!loose) loose = next } this.tokens.push({ checked, type: loose ? 'loose_item_start' : 'list_item_start' }) // Recurse. this.token(item, false, bq) this.tokens.push({ type: 'list_item_end' }) } this.tokens.push({ type: 'list_end' }) continue } // html if ((cap = this.rules.html.exec(src))) { src = src.substring(cap[0].length) this.tokens.push({ type: this.options.sanitize ? 'paragraph' : 'html', pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), text: cap[0] }) continue } // def if (!bq && top && (cap = this.rules.def.exec(src))) { src = src.substring(cap[0].length) this.tokens.links[cap[1].toLowerCase()] = { href: cap[2], title: cap[3] } continue } // table (gfm) if (top && (cap = this.rules.table.exec(src))) { src = src.substring(cap[0].length) item = { type: 'table', header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') } for (i = 0; i < item.align.length; i++) { if (/^ *-+: *$/.test(item.align[i])) { item.align[i] = 'right' } else if (/^ *:-+: *$/.test(item.align[i])) { item.align[i] = 'center' } else if (/^ *:-+ *$/.test(item.align[i])) { item.align[i] = 'left' } else { item.align[i] = null } } for (i = 0; i < item.cells.length; i++) { item.cells[i] = item.cells[i] .replace(/^ *\| *| *\| *$/g, '') .split(/ *\| */) } this.tokens.push(item) continue } // top-level paragraph if (top && (cap = this.rules.paragraph.exec(src))) { src = src.substring(cap[0].length) this.tokens.push({ type: 'paragraph', text: cap[1].charAt(cap[1].length - 1) === '\n' ? cap[1].slice(0, -1) : cap[1] }) continue } // text if ((cap = this.rules.text.exec(src))) { // Top-level should never reach here. src = src.substring(cap[0].length) this.tokens.push({ type: 'text', text: cap[0] }) continue } if (src) { throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)) } } return this.tokens } } Lexer.rules = _block_rules__WEBPACK_IMPORTED_MODULE_0__["default"] /* harmony default export */ __webpack_exports__["default"] = (Lexer); /***/ }), /***/ "./node_modules/PenguinMod-MarkDown/src/parser.js": /*!********************************************************!*\ !*** ./node_modules/PenguinMod-MarkDown/src/parser.js ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Parser; }); /* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaults */ "./node_modules/PenguinMod-MarkDown/src/defaults.js"); /* harmony import */ var _inline_lexer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./inline-lexer */ "./node_modules/PenguinMod-MarkDown/src/inline-lexer.js"); /* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./node_modules/PenguinMod-MarkDown/src/renderer.js"); /** * Parsing & Compiling */ class Parser { constructor(options = _defaults__WEBPACK_IMPORTED_MODULE_0__["default"]) { this.tokens = [] this.token = null this.options = options this.options.renderer = this.options.renderer || new _renderer__WEBPACK_IMPORTED_MODULE_2__["default"]() this.renderer = this.options.renderer this.renderer.options = this.options } static parse(src, options, renderer) { return new Parser(options, renderer).parse(src) } /** * Parse Loop */ parse(src) { this.inline = new _inline_lexer__WEBPACK_IMPORTED_MODULE_1__["default"](src.links, this.options, this.renderer) this.tokens = src.reverse() let out = [] while (this.next()) { out.push(this.tok()) } // Remove cached headings this.renderer._headings = [] return out } /** * Next Token */ next() { this.token = this.tokens.pop() return this.token } /** * Preview Next Token */ peek() { return this.tokens[this.tokens.length - 1] || 0 } /** * Parse Text Tokens */ parseText() { let body = this.token.text while (this.peek().type === 'text') { body += `\n${this.next().text}` } return this.inline.output(body) } /** * Parse Current Token */ tok() { switch (this.token.type) { case 'space': { return '' } case 'hr': { return this.renderer.hr() } case 'heading': { return this.renderer.heading( this.inline.output(this.token.text), this.token.depth, this.token.text ) } case 'code': { return this.renderer.code( this.token.text, this.token.lang, this.token.escaped ) } case 'table': { let header = '' let body = '' let i let row let cell let j // header cell = '' for (i = 0; i < this.token.header.length; i++) { cell += this.renderer.tablecell( this.inline.output(this.token.header[i]), { header: true, align: this.token.align[i] } ) } header += this.renderer.tablerow(cell) for (i = 0; i < this.token.cells.length; i++) { row = this.token.cells[i] cell = '' for (j = 0; j < row.length; j++) { cell += this.renderer.tablecell(this.inline.output(row[j]), { header: false, align: this.token.align[j] }) } body += this.renderer.tablerow(cell) } return this.renderer.table(header, body) } case 'blockquote_start': { let body = '' while (this.next().type !== 'blockquote_end') { body += this.tok() } return this.renderer.blockquote(body) } case 'list_start': { let body = [] let taskList = false const ordered = this.token.ordered while (this.next().type !== 'list_end') { if (this.token.checked !== undefined) { taskList = true } body.push(this.tok()) } return this.renderer.list(body, ordered, taskList) } case 'list_item_start': { let body = [] const checked = this.token.checked while (this.next().type !== 'list_item_end') { body.push(this.token.type === 'text' ? this.parseText() : this.tok()) } return this.renderer.listitem(body, checked) } case 'loose_item_start': { let body = [] const checked = this.token.checked while (this.next().type !== 'list_item_end') { body.push(this.tok()) } return this.renderer.listitem(body, checked) } case 'html': { const html = !this.token.pre && !this.options.pedantic ? this.inline.output(this.token.text) : this.token.text return this.renderer.html(html) } case 'paragraph': { return this.renderer.paragraph(this.inline.output(this.token.text)) } case 'text': { return this.renderer.paragraph(this.parseText()) } default: { throw new Error('Unknow type') } } } } /***/ }), /***/ "./node_modules/PenguinMod-MarkDown/src/renderer.js": /*!**********************************************************!*\ !*** ./node_modules/PenguinMod-MarkDown/src/renderer.js ***! \**********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Renderer; }); /* harmony import */ var slugo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! slugo */ "./node_modules/slugo/dist/slugo.es.js"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./node_modules/PenguinMod-MarkDown/src/utils.js"); const highlightLinesRe = /{([\d,-]+)}/ class Renderer { constructor(options) { this.options = options || {} this._headings = [] } code(code, lang, escaped) { let dataLine = '' if (this.options.dataLine && lang && highlightLinesRe.test(lang)) { dataLine = ` data-line="${highlightLinesRe.exec(lang)[1]}"` lang = lang.substr(0, lang.indexOf('{')) } if (this.options.highlight) { const out = this.options.highlight(code, lang) if (out !== null && out !== code) { escaped = true code = out } } if (!lang) { return `${escaped ? code : Object(_utils__WEBPACK_IMPORTED_MODULE_1__["escape"])(code, true)}\n` } return `${escaped ? code : Object(_utils__WEBPACK_IMPORTED_MODULE_1__["escape"])(code, true)}\n\n` } blockquote(quote) { return `
\n${quote}
\n` } html(html) { return html } heading(text, level, raw) { let slug = Object(slugo__WEBPACK_IMPORTED_MODULE_0__["default"])(raw) const count = this._headings.filter(h => h === raw).length if (count > 0) { slug += `-${count}` } this._headings.push(raw) return `${text}\n` } hr() { return this.options.xhtml ? '
\n' : '
\n' } list(body, ordered, taskList) { const type = ordered ? 'ol' : 'ul' const classNames = taskList ? ' class="task-list"' : '' return `<${type}${classNames}>\n${body}\n` } listitem(text, checked) { if (checked === undefined) { return `
  • ${text}
  • \n` } return ( '
  • ' + ' ' + text + '
  • \n' ) } paragraph(text) { return `

    ${text}

    \n` } table(header, body) { return `\n\n${header}\n\n${body}\n
    \n` } tablerow(content) { return `\n${content}\n` } tablecell(content, flags) { const type = flags.header ? 'th' : 'td' const tag = flags.align ? `<${type} style="text-align:${flags.align}">` : `<${type}>` return `${tag + content}\n` } // span level renderer strong(text) { return `${text}` } em(text) { return `${text}` } codespan(text) { return `${text}` } br() { return this.options.xhtml ? '
    ' : '
    ' } del(text) { return `${text}` } link(href, title, text) { if (this.options.sanitize) { let prot try { prot = decodeURIComponent(Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unescape"])(href)) .replace(/[^\w:]/g, '') .toLowerCase() } catch (err) { return '' } if ( // eslint-disable-next-line no-script-url prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0 ) { // eslint-disable-line no-script-url return '' } } let out = `
    ${text}` return out } image(href, title, text) { let out = `${text}' : '>' return out } text(text) { return text } } /***/ }), /***/ "./node_modules/PenguinMod-MarkDown/src/utils.js": /*!*******************************************************!*\ !*** ./node_modules/PenguinMod-MarkDown/src/utils.js ***! \*******************************************************/ /*! exports provided: merge, noop, escape, unescape, replace */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return noop; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "escape", function() { return escape; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unescape", function() { return unescape; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "replace", function() { return replace; }); function merge(obj) { let i = 1 let target let key for (; i < arguments.length; i++) { target = arguments[i] for (key in target) { if (Object.prototype.hasOwnProperty.call(target, key)) { obj[key] = target[key] } } } return obj } function noop() {} noop.exec = noop function escape(html, encode) { return html /* .replace(encode ? /&/g : /&(?!#?\w+;)/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, ''') */ } function unescape(html) { // explicitly match decimal, hex, and named HTML entities return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/g, (_, n) => { n = n.toLowerCase() if (n === 'colon') return ':' if (n.charAt(0) === '#') { return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(Number(n.substring(1))) } return '' }) } function replace(regex, opt) { regex = regex.source opt = opt || '' return function self(name, val) { if (!name) return new RegExp(regex, opt) val = val.source || val val = val.replace(/(^|[^\[])\^/g, '$1') regex = regex.replace(name, val) return self } } /***/ }), /***/ "./node_modules/arraybuffer-loader/index.js!./src/lib/default-project/default-project.sb3": /*!***************************************************************************************!*\ !*** ./node_modules/arraybuffer-loader!./src/lib/default-project/default-project.sb3 ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(/*! ../../../node_modules/arraybuffer-loader/lib/to-array-buffer.js */ "./node_modules/arraybuffer-loader/lib/to-array-buffer.js")("UEsDBAoAAAAIADIjgljfw1DlXQIAACEFAAAMAAAAcHJvamVjdC5qc29uvVRdT9swFP0ryGjSkErnfLWhaNomGBISEoMixIQYu7FvOtM4DrZT2nX977OThhW0jT3tJfK9PrHPPefIS2JBT9AaMrpeEmHGFiZIRlbX2CMlSLcmba9HZqAFZAU67JJ8vfs4fR//ENfbR9N3r9P5zofL/q5cbHUgdx7ZLHv0ZtUjhTD+qqVbZloBZ/BYs9pYJS9Beyo3br9QbNrtKSmx/IXU2lUHytjaE6Qe0KzbKda0M2BTrlUVOOocLBwpLcG6DTObuBYYg/aYu5rxMEiCmNMkCnKe51kYhjRGiixBnsbgwJInOLf/gO23h2tlwQpVHjieqK/IKIzp8+5nMgpSunKjGlWXfD228Iyqm9v6MN2mX87e6kV+j2cnNfcGqKIZOKDusAIWqE81R90oYFFWiowGbjkTHNWFhtJU4IRiCzJKurbz0npxVEn8P3N7ocYVIvt2AuWkbrwv66JY9TbCkENhNtJQaWExeJaH/+ztuudZZMJKqM7ROHG8uE6el/yOozgbDOM85BCkGQQR4zkmAc8YTZCxJ36/gP2j34Pf2B0Pnrj9OM34voaH6ROOGMSUD/OcDjmmOUQJi3iQ7CVZBmmUAHue6QeYeRqNuXFKfUAMyKrAA3ebAwTDdDDcmOul8/v+wFWXx+R4rzzeH37auePifPf2av/Nq+JveQx82oxonoH2KZk3Vi6arxHfu5+40Mha1/Z8qWEyaV+Pdeg6Dcd24bsEimILtFewYSdVKazqYuVGw9I49KGTps3TY2sNkdjsEINy5pmSqE/71M8iXUH7YVO42HvRCFmtfgJQSwMECgAAAAgAMiOCWIjOEAGTAAAAygAAACQAAABjZDIxNTE0ZDA1MzFmZGZmYjIyMjA0ZTBlYzVlZDg0YS5zdmdtTUsOgyAU3HuK17cHxK40wqJJT9ATtEqEVMXAq9Db11qXTWYxmW8b1wFWE6Lzs0LJJUJyPVmFFYI1brC009WZdPFZIZOwoYJNy9M4R4WWaGmESCnxdOY+DKIqy1Jsw0ekyaObn/+Csq5rsbuoC4D2xBhc8+IDmR4eb7h14U6dBQZHN/4EPjnipn8JYEwX7fdLfwBQSwMECgAAAAgAMiOCWJuapP02CwAA1SEAACQAAABjNDM0YjY3NGYyZGExOGJhMTNjZGZlNTFkYmMwNWVjYy5zdmftWk1vHLkRvedXNGavUotk8XNhGbBn5VwSYAHfEuSglWalgbUaYTT+2Pz6vFfV09PTkg8bCQEC7MVSFZtksepV1SPlN49fbrpvv93dP54vbne7hx/Pzr5+/dp/lX6zvTkLzrkzfLGwT378dre+//Tch761dqaji+7r+np3e75Ivk/ei0jMKZXsy6K7Xa1vbnfnixb6KDE5n2NpsYWw6L6sV1/fb76dL1yfawm5xpZSarmF2FFVE0yJuQj+9al7snj33Jqr7eN6c3++8L3XE/z4+HB5tTpfPGxXj6vtl9Xi7V+67s316tfHM/3thv/i5269u1u9/Xi3vlp1/s2ZiTZ0vXq8ervcri53q2ucdHfbffy02l3d9m/OdMi+uunW1+eLny9vVqfY+XG33XzCtveb+9Wi+3V9d3e6/XwHxerL6n5zfb2wWeO8h9X9zef1/ekvp/+8vF//dnn3ePLLent9crW5uz6532x3t6cPm7vVyePm8/5XWHpyeb+73F7t1leXJ/bzZLv5ZbXdnd5+vt+ttv8atxk3er+5/n2ihf7hEifCyN+70Proiqdfc5Dub12UPhSf94rlXBEdQ5K72vqUY+0k98E139XaI2YNE+YaCb2rEXLuXUxhvuVCbfxAd3lz2/nihwt553I+8iLc+u/VdrP38+mAP784+/7RfMz5Dx0tZDtaLF46SX1LPEjpm/d1sPSjbS+HgP9Qf8rv4ru5ZXDU/jwKie/aGW2b0U6pfQ0ysXOmkNJLzZjg+pjgUBE4GMNweG2Ql080AaGIwU5WXZtvOQlBet0QxD63ml/vaEchKK8WAomMvO9gbgSml8SspOC70CdUny6UvhAoqDAoUV1IfXbJ78VlFwRVqY6K4HqfM2cH8aHztY8tcnVpgRnikQm15K70yUmliF2xuvQF++twwaF96sVJ4YRkfsRIjRxxdFMmxEuThIU045B52eMzIBsIhvkR1bJlVNZaUu5SglkN69vXufYSsB2W75Oiw/csqp0PvQ9pjAlEKWkSxBl6lnSPwgtR8y0U9R5nMGopUiwteBNDMnyG5OwDuEb9T/9Chp8TMy+0MIQ90gNzDWZ4hgCy9y1xRY0Qikxj0i+faDCjJpsRcpZpmUJHCceFSzXYE41H8x/dJlL2aE5cseBAnDF4ApqQknDPSDnVvklrUznkVswq05S+Ogl2DoRMHFwIpEHWYolI5wxrFYqhGRqQGZUrGBaQGhlOnsvLp18Uk3Es9NE52CfJ38bklwu02xcmP/bBEQAn5HTz1dx1pOGhPeTg+1abEM6psDy1XrJmCmt4SI2hYUYE+MLV1hVMdK5yYkyUmX9JJ7i+6BfIlIJDIlWlYgQxRaRkwFEccNRGZB00hhuVXakHUWHURmAdNFgAkdMtYIxmoXfOZJ/FgHWkwQwkXBwaS1ZgxWwrShEz6kgDGZmkK2TH1lSZQI0rxFCtjk4V2DH5pjt4D9oEGXVD13M5erPpSAOQmE1oejlwPaRw24vLuYLTXYGIrApJs6l5LidEPnMc3TQzdAUWlRq76BEZ5ERGcAWHRm2qjF0C0qXQpMhcwCE5UlAXMUMPLR5bix5aKKPaou4MGVsyAYPOLSQjc4DN5CnXOJCND+8/1It3LyYbJTrtFKHIAN1CBwe2NK2JqTmYguN7HBcRLUw/NIeGjGdvZOpbO4DRQ3k50jBfuDiO08CRn2w6PZ4cjueWqbQX5rIWbFiC2lFdHEv4QYPzVaYkypSVVyFeVCbRH07TgF2eJuTCcLdmzRUQSgw7UjSyTckACM/UFEII7dIwmuCPiraWgFXIXoD2yr0UdABE5Qhh2KzIS04K08ZKWM0oBbFPI6wPGl0yaVp4bwsgTeRJ4hw0RL4rmmo4fxkysc5Tc1TwEDVqfRHuxC4jUecjyHJMcXyacJyf/NK/T/81x9HuVafdK5l7dWeXrP/Veuh/M3lpPTTWQw/VUiiHHjuTl9bfbIb16f2e+z4+k5cDF5ADF1CgyYErKJuQKZsIQwyNbhgbkZGNKF1BoRn5ix++H/mLEZ5RoXRIDnTIvHCgS0qn2kinlGvFPdcq9vWBihlXayNXMy4nBy6nbE+mbE/5oBzxwYpWtKeLpJMsj3s6aXQz7ummkVE5IqssNCNZLda/BgW8FwNWx488soN4zA4GNIYp4w4XUv4Q435zdvP0arq6/PS9qymqXRZkvWdUkkIDqyvNhkaalveqtJyR1kbsjeeEkKsBXIk1EM9YAEl610i9S/IM54+oLqhU8GsJxhQc8hv1KwRreNWBNcNNRXMBRSkmBtwDOoLocjXAHKZpLWOVZ7sWLh4HTt9I81D7KkFMsRLLsSFfyNgQE18YpOSN3xKrUTzlPacj5mbi8sk4GyKsxYLaeQHkzLVQqsWOqtbuXUtfkI9zdiRdGPi5FfcysNBB0zyvGjLcWaCnxfNgTVtRedU7JRtNtZ2iS4NtRxrY5sl76TtX9RKZc9BxX+pw/1DiRY3Pdn7wLcoIuQIr6QwQU/J685hkjVDjl2T+QBnlOrwVeF91Rg3GwpHPuiZ4Tw2KzsQRyqCoRgBshSI2Aw2iJgsaKwQwVYPTL4LRItQbE70L9n6BzqETfMUIOmraT0AmdBGpP8iCXDcYetJiajLMhVycySg0kcXLjp2YUEtqijMjM2k1cOuL6BcFpSYqvodTF714ogYPp660AHgP2RwpCAXk0dHeJoAPNQOn51KRdwALnkd+UQbHMaBlZR7AthvCGdk4IYsYFNFYC+UUbUWQomwz4HKdAR5RKTfuzgsS/YPkcYHHAHB4AbT0QxdSDa2jXO2LEMG85vLy2S980z0QLU1gXFlU9lGjBytqDTrDFaQlrfSiVoK6qJX7tK18+tQZIVlRKIw7y0YW/QLlH1KWqKMphGi+DW1IjMAyA67ph8QIoCKQk7MZyGlv4UOrUQ3ZPcKPe5iFTzk82VEbouubASoPlauCOCnAgsmFdQsQTLog65N2T4LUiX6RGoKhILZSlVhZCfNimYaZmnvIg2i5lUkUyaCC5UnVe0FiZx0g1Pa5l82VWvgj7yxDsbJ0zy6bLG1Ib6xomuKUdLRoGAttKCGDXwT9fbjISxgKNGmcsPuab7Mu4JoBXYryAGFYDYS4i5SnVWsmTyvo4WK+f+d6UQX9s7H+/zbWf8womX/JI+hzlOzi99V3/1hQDAeZj7HVqGRgruKiIFmfmdU5iSgi4VXPJbYYxQFcySTjWwYvStpcdbVIHuotVFgy+mCfNxYGtCAP1AkrjGPkI9pAGNqESWpJzmUcLVaF2FBJgY/tnmRWOFyTL0BoL+KLXwFaxk0JV4W6fwSYKvic1SqZfIN9+s6V0LEKm6F9nTyqC2sob5aOzBwNrddHVTYxVDv+UaIW8w8ohw7XZq8kvPIiFkzJI2k5H0VdFJV4EzXP0yqk3RAooBg3IDTapjtX5AoPEcMTcfnMOHpIsefGMnfB1PmHPzbsLxMvcv4YZVCNdIzOAu4yQWf1ZQrPGNMRPJvzcQpPvlpM4GmhncAztTSF53DqPT4pHgFUx0eEJr2zHds+T/L22veuv243nx9OJX4v03HH1EsqX634Drl8ovGKQ30frRV1m/UrJ33eADmjP6HxbPn8iyF7puffdHiRZiXDhXguL5/7wvFNMiMG7NsouibDlqTP6UrY+UKEPRyw54dXp4JLefTGxngdL8WehZfKtvR2Dw5YuOb+OSHYYznG7faPc+Yqdg57oiBP83xOCGjtXSEhhTpk2zITL/rcC6DpEmwdfLmg3CQqj2Ep12AH7bIOvpymhPhXfYL/M4z/8zDu/zwsr5Sy46/DL/rjDf+3xtv/AFBLAwQKAAAACAAyI4JYN/PYzf46AABMQAAAJAAAAGUxNDBkN2ZmMDdkZThmYTM1YzNkMTU5NWJiYTgzNWFjLndhdnV8c5RcS/d2HbcxPTYzsW3cTJwb27adG9vOjW3btn2DsdGadvdR1a/e7/8vvSark1Nn18azn/3slbXSo0Na2l8tAejbqk/bMZNnxRsAAAT+JPYB4K8LAJDAAEYNnzU8Hp+RUAhoBMaBveAomAFSgQ95EQvK0WW0Gv2LPiMbykNv0HuErYEj4BbYDcaDZiASQFSIfqJP6AV6jr4gCcWDtqAzaAgqghgQhJ9mo6/47dfoOnqEBFQftAHBoAjlIAMYAjaDBaApUAAePylAN9EOtBZtQ6fxyf+QB0WDluBv0BW0AtWACXvuQSXYznF0GD1BmegBWoxGoO3IhdqBuWA12AAOgGP4934gDJTi91+gs/hEX9QPzcUWX6BvqAjb1OH7F4N9YAdYCnaCq+AcjiYXbUH70EeUju6jU+gcjvEX+oN9TkckvjkNdADdcF6Wgk1gDZgJBoLKwI1eYS+WosloKjqK3KgyzpcNvURZqBIYCvqAZKAHlbD3VQENfqCr2Ofj2O4htArNRivRCXxXCUJIg89Vw+dqg/5gK7gMzoDZIAX8QRfx2fvoGfb5O/Y4DtQEtUASzmcX7MVgUAUYgRYogRNn+yLajXN2AX/Lxh87SgKzwAmwB0zHPifjOv9Ed3H9rmNLD7Cfe/E3K65yMo6gIfZyDOgONOAD9ucQfrYSTURTcMZO4LhjQG9saTKu0GAwFkdUG9+nBa3BMBwTj297iyv+FJ3EuLiP6+bD1XyMEaAFo8BybLcijnsEzvBmXAsN9uEqPrcLHUHrcDVa4vqm4Mxvxra7gRW4AodBx/9nPRWwYCsKR1YYi4ajGag36oPuoFEAgWqEDM7j7O/HZ4cCCxqLYlEF7OsjlI9jLkcUzmFfsAhswWeWYR+qgv/wLfvRB1SG/VuLMeJFY8FJsBA0wCgyYQS0wZi7i3G9GftN4b/xoFxkQX5kxhaDsO/LsOdGXGUPEjG6L+KsTELrcX3zMK7OoBXYZiZqic9Vw/bCMZ7+A5ngIM5VV4ySQxgx+1F91Anj7zbqhrJhFhyBcfc/jG4FFjCL+Ep8IRYTHpyBMoy3rehvlA8XwAnwCqyAq/AO6XHmv4JooiKhwqds4AJIACtRDWyzH6qDXsCZ8DHciLriaPuBCBAFhoMPwAWeg04YE+lIAUJADkbnevQQMTiv3/EdF3DXjsKnnRgFr1Ev8BrcxZirDyaA4xh1szAi8tAenPXmqB3qinrhvtqIfqMIMABcAiII4NxFg2c4Vz6kAp9Qe+xvBZyZe6AU91sfcB30Ii4QS4lcUBccRVXRV3ga7oWH4HPogtXQTlQF/ASDiSVEb4IjssAVHJ0WLEZvoQFukrfICngMKvCdH9B+sJKoSPYgK5AW4jjRi8gHTcA2FIS+w3NwPVwJr8EQtAz7z2HcngI6Yggxk6hBXMG98QIj+yeOVokz+ht/+4h7uBRnIhx4cacuRfVQCkafAfQA7TD222Dkb8YZ+AbuY9zcQzHoKtwC98Ej+OcyjMa1/QLeEaPIjeRIUk/eJ7oQX8AkzCkGVAVukdfLP+SBUI3RMB7nnSCiiUSiEpFC8Lg7/0XPYGVYJvtkE6wPN8AIjNHqmDVEsJ4oIT4QnYmFYB16AFfAF7Ax5oQEjJyDxDiSoUZRAyiSmke+JvaAUPSvfFqaKR2WPktPpE9SG5mGn+EpnJ8TRFtyGs6QgbxDtCeKwb/Yfw04hyqhmxg9jXCVN+LMLAX/gF1gJagD3uHKZ6NIzOJLUHWUgDE0CONXiRkyC03Hf5OMGmL0/Y27rQBtA5VwRpcQF4n/iCLiMlGV2A104AR+awX0yw/k1zKJMeqFszGun2OMXgJtiYPEXeI18Y04RdQjFuEqzEO3kAM5cR8BzP5JIB4kYu6qg/mjJeakTZg9y1Aq+ggB9mMp2oBZth4YBJpjlnyEZqHK6AOsB/fJzeRwuaG8Rm4A26MZYDtxmrxELaR30x5qDxlMvEYFMA7OklfgKsxAHYED3CF2k8HUWOoEtYj6QE4kNqJLck/prHhCVEpPpU/yLdgNXcPoWAc8IJhwgYugF8ZzOkb8VNz3j8ABopzIJ+z4c4Ioxyz3DXvWFN2GVaBLbo4RkYgZoAt4hd+Lw/gehPToAuwPV8EqePb0xX01H9QnepH55B4yn5hIRBIbwVo0AV6Vr8vV4X2Mp/2oH1AS84jnhIW4TSiJ+thKPXQQ/ic3lhfJJ2A+agTuozVoAqhJnqLq0Dx1jlpMRVFh5AXQDqXAMbIkvZXMUhV5shyCY25GrCTXkZeJl0BAmXCA7BLniOXibumLtFy6LFnlQpRNDKX60AX0b1pPnyYLQVMUDSfL/WWH3B+ZiJPkb6qE3sfMZGbSUVQL8iFxEVyAc6QQ0SlsFM1igvRL6gEVoB5xAFd4DTEJZ6UQPYFVcdSvoB+aMAN2BwmEmXhPHqS2UJvJesR03FkZ6CLcIY+WtXAbRkoCPAp5NJpIInMIE9EHyHg6jkSL4TV5O47iFWyBJ5cL8ztFlBJ7yfXkceIEVhTvwBfMX8HoEXTgm1bDGrjvR6NY3H/jQHUQwLjqgPmjDtiIZJgHx6HFYAXmjMVkIpVAq5n+zHf6A9WDnATGw+FSd/GkWC7xcgT0yM1gMjoMppBvqcb0WYogz6Le8gDRzDflYeBzoAHfSvghbpcvoyRyAm1lerLlzCgmjV5KGkEoXC/HQRUqRnkgkzhCklQv6hqVSb2lTlI66gQxFfWRgbRI3CaK4hPppnwGLkcy1kG7UAQi0WA8J2+hFqgD6gzOE9vJV+RH8il5jJxANiVdREuiPViOymF7OEV+J0mSKLfAmqM2sGLWonAHX8CTrRVaiJ/PhtvhOngDzsKIywMqojZxmIgmB5ItyGvENcxhdfENq/GcSsWIoHG3W/EcqwBq4M5qitrBebJKri4/ltdAGdbHSogltpB+qgYTzE5hO7PPmLe0nwwBWVJj4QVvEo9LS+AcsATXtyE5lzxGtWYOMnnUPmCTbPw3/1Vfe99+3xK/HIgTF8i70UAig2xN92dE5jrThV5HQqwqhyIa5cB4XPFnoCcxg/iLGECkkpWpXOoFlUgtI71EG2I06IGWwqZQkF/hXkZSE2m9uE8cKkXK62SvLMOGII3giT3kDMqIO78ZfqsbOZtcRLYk7xE/QHe0X94gTZZuSfekixIhX5YXwQDujSjMyK+JVpgjjeQoYgm4jDywLhwkv5X80m45FC6GrdFdMJxcij2ZR3WkalFZpJqkCBokIUH+KtWQqkhNJb2klo5Lr+VsuBdVBGoiDHd3ZczQedQkeisNqdYUwLVXklb4Sngb2CAslfcBBV2XaUxrKJnQ4y5eQp+iBhP9YLEwOLDZN9LX3d+ETxPTpGB5Cp4f2+A5VADyiAskoEQyhHpFesiP1B96ElNA96eqEwHYW14lHZW80ly5H7yDrhBDMAPqmU1MOtOJmU2tAywcIQWEV/yAwCp/ln9r4AJ/UvwpG8BtshnjZbO5nhzJltJ16euUhsoixoEgPLvayB2lC+JvUZT6w8l4flfAs/sUKMdKozYxgliE0UgSs8FEFAxbY2aaIzfFWbPi/pmBq3iSaEJmkfOoV9Q0qpDsQ3qInVib6IEaxcKpcqbUSbKLn8UibD1FqiMfhSXoI7hONKHimDR2FFuF5VgTe5/5i65OLJXM/ne+KTwr/YEfyR+0ltlEP6B+0ge5SOVezkRDNEk84d/kmeBu5sn1HvdH8qkikHvCY8gFGCpAX2N2MdkYESx1jnxAFpHPyBpkTeI2eiX3lRpIo+ViWAOMIJbhGvSnTYyf2c2uZpszNAWRQ6okDAz88G/17/G3DTTjGwg2MQUOA2fI/XQY62e97AfGS93ACJtCLiC15CLiNZ5LLWC0fEvaJx2TfkpD5fZQj/Vsd9CYaEbqqdXUQiqJGkq6QWUUJfcQxwqpQmPhnLBFbCqvRI+Jg9QwJoLrpJihmMAdYM5Q7wgt2AxpeZ+4XxD4E/xG/jP/XVgpdYe/UHWiMenDXnelFcw8JoXpSy+hLJg7Y9AfPsmb7LsmSDJB/sv0Yq+wiWwvJowt5eyKZlxluj/SCz19w93lroaeIb5Vge/8JrFY8sl9UB0wiahDvaY/MTyzhBlJk/QGuhk9kPpAKMBOVALbytXEfH6N0E46DHXEYOo9c40DykXKmkqR28GMI/1wjbg1sNv32rvdW9fXPPCZfyucknbAz2A8lcRYmCi2HzuImUw9IJ5ibuSoRtQ48iBoiJ7IQ6V+4k8hTdRJHObejqgpiCLak7uofXQY85WOoD+RGeA4rCCFCWLgWeAMHy9ulGj4HzKRPbC3Y9gJbGv2BLOXHkydITLQfHhLjpanS8/EeLFM6Cs+EVtJHeWN0IMaEGlkLEZlF/ocXYcZyZTQHejVVAj5GXbkDd5sbyI/X2TBdPoz04adxHRnunLrlcGqi9wE2oweCzo/5+nirul55F3uzwnQ4k2ctX/RFUCQVzA7zmM97B52G9OPVtCPqK9kFaIcDpOjJadQT0C8TXgscegMUYXuyyoUE5WUqq2yNref+oSOSpn8M/9C3yrfLP/xwE9hrvwW5qBP4DjBkyH0MPocVUwqyKN4B8H7AWDIipSe/o45IIV4BWvL3aRjokO4KpwX1XJtOAyNAEoyld7OVGA/Me/oBOouqAmrSHlCNeE+/4dfIOwUw2UfjCF6U/WZZawLd9tCZiLOm5JMA2OgWh6NZ9Mk4Qify1cTP0tpsDdKxJy8m3RShbSGuU7PpzvRR6nnZBQ5C8yRXvvWefL9qeITuR+ZTUvMJLYbc40ZwTVU5ihuMXoyXq7Pq3GrbPZs9nzylvkbChel1vI5GbMG7rlxVArdianELmbPMlfpT/RHugp9mewOJsOrUg1xuFBZcAhlYm95KaLIb/Rcbo5SUPZWfuU+0vHEEPk4r/L38Sn8rQI3ApWFanJLvNnXwwpTR1WgF9IS5SZnE0NRHGwO66IYPMHKqHn0IaoS6UIs3CVNFSXhhpCFFcw66YXcDNXEeE5gprAU14+9RS8jWwISFokVhDD+TaAN30awixpYF0wj+9OPmL9YLzOO+UEjait5CDyCi+TH0icxU1goZGJ7VSWd3BYuQMfBI+IF5ukr9AJGxkxcgemI+fU4OR8d47d5BnjLAvgN+J68Sqexn5lpTH1OUGxXhnN1qBWIEL/6A5549zT3Ho/FVxxIEUfKsyBEXjAUM2sNyk/XwpUrYRgmjlnAZNHVKCWRhn7KPaRTwnx+Jj9b+CnulEOAj/zGGBWVlZOUHxVH2RpUbbRcLA3U9bfx/fLZ/XzgqhiHEZMO1KSKGkG/pG9S88mdxHewGpngF8yNyUSAJOg59DfqCnkXdIKDpD+CzO/gD/KPhSaSJGejrcRaahBTwj7g2nMLGCf5DxgKB0oDBY4n+Nd8iNhN2i8vQcuIGtRgujrTl0nHGjOHPIv1fzME5WrybSlEaiNeFvYLDcXe0kJ5NuyJloJU0kLVY44wbxkjO5gdxC5nplIV0cHAV3e0t0JgC58tQzKPOcsdZO1MGadR3Vdd4R6TsfA8f9O32r3GaXGOdO/yXeL3SiR6gl6C1UQ82Zy6R42n39I65jazhonHntiot2RX4gpWPLulVMzGPYVUsY3klP8BHvI04+QmKPOUJxQS058cDn8Kv/1vvXW8XX07AiahgeRC4aSZHE41oB5RQfRoqgJmdbwVwdPyXnksbAfqko+o7/QOejn1F9EdRksjhPd8CZ8klAkfxGUyRH3JsfRppjV7gO3JdmBmUl9BCCwXr2PMJwpbhNuiUh6C9fBrYgI1kxYwx1vpC/Rnahv5DzELM+ZGebPo4bvzE3iJfy74xbEyhc6CnqRADWTmsG42ix3OpmN+a0+nEfdE6DG6f/qm8uFSFhHNjlUMV4zC88utWKeso3hMJaPtYmpgsvej67vzhWuwFwUOi2VyTfQGUXjDSSH3k3Wo5fQUJpX9xnZk9zIi5uNs8hM4CTOwPvALXYTugkF8IW1Br8gbjEmxXxmrSlXmseuoe2i09Iov8N/yDfft8C/gM4RN8m3iNtYEDGb+uyQiw0kZb9lelIeqYfXrRSRZkw5ibtETqHtEOqonZwpavk7gYOAlny02hFWATKzEWe3BNuEGc+3Y3vRM8gZ4B69J4eIQYZnwtxiPp+4lWY/egEpkGyoUzy8N0415Su+jgsjNwAFj5criZv5U4EJgPH9LSJPscgG6hDs/itnMjudqcLPxTG/HPKQnU83BF+GRJ8jTPHBEcErfiRUYD9UVgHvIjVbuUn1Tzmd2g6VSi0Aj71HXYGep8557ue88Xy4Z0C90E7wkAJVK92A+sZncWYVX8YQrZYx0e3IP+I6n6GdxmTCbDwQO8C7hhlQDnSB7sz7FH2WEcgXHsNH0ZmID/Ch+4icE2gTW8CXCKrG/fAKoyIZEZTALK/7reO95C+4ALzhEjCGGES7iKe7Sm/RtmsN3TEbLcP/ZApMD5wMXsc4zwengCOat4UxLXMEfbCsW0dUx3gbAytJG4R2fxe8R3GKy3ARuRRfAZYKm2tI/6Ez6KD0Rd0gOOZ44ha7IXSWTqBF28w35w3yo+ABvfMW4q79TLdgcroniCzeDG8q9ZH/RB0BVodi9xL3VP4nPFEtABh3DJXK92W2cVVGg7KA8wgwh38OKwgZfI/cn50bXH/dAnwPz2wdpg3wXxoHhREVqPJPPLVaSqlhVO+VHbhZzHLNxA6xgY0WsVQIJgUR+jNgAMsR7qhPLKA4qRG4nVq/P8Iy8DrOlNPEBT/IaYZs0Ge5Eb4m2VE1yPmDRCLgL7oHL8LaZgBR40+kGbhOXqHImn/2XXc10oB4BPVSLxwIV/B988/0cP05sDmtgTZbGLGYXcBUVJsUfPBn+IReAWbCH1E9oz0/j6wkpYi9JBQFYRWwkQ6k9VBq9iY7H8/QR2Y6sSASjL1Kk2F2oIiQJM4Q+4klpAhwAapNeagKziu3AHee2cWE4OwPoILCQr+KJ8P4TeMKfkc4Qi5gs9iuTysSz+VxPZUfFQuYrOQWdEZ/5ZXd1l8PZyh3h2xSwCBuk+/Im9AvUIV1UL/Y/RQPVQtUHZUuFjh1EnQUj4UapslhDOMz35LfzAeGwTBMpdH/2J9dF0Zjz0D3xHtcTPpMmijsETtAIbcSmUEtOpI8wGzid4hVtBEHSdD4yMNk/zb8xoBe/yKfRDeIz3VyhVT9Wu1QxyvvMv4QgfQgAXzMPdJs92b5XfIL8AtSi07h/lJ1VQapqyq3cLWY3FUF0gSvF47wcqMhfxhPqk3hIHob+A1nEVPIqqaAmUzuodlRXMgcsRp1hdaycRonNxHfiN+mqXBm+g2qwA++O96hpdCJzBatJL94z69A3wXvB5j3tQzwlLpUGg6p0HPuC8dM1mZG49/K4fGY43kXHyfv4Nt6ark5Ohbufj+ObiT+lttAE/sZbsYVcQ79gNysaK7MUO7iuzGySBP3wDqjF02k53oLrQCPKRB9Ac/IFVYc2YT4fjLbK38RQoTp/gK8h/i33RHuJl/RsRQv1NE1z7Tc1zZ6DMwOxnt3O+o6KjsVOm6cpX0GeRPzLdlN7ddcMXQ0K3TPlbppBNl7hS3XPdX5ySu7a/nPCUBhDDmM+cD2wPiRU1ZUl3DC2G/2aaI/+lhVSX7FEOCB8Ft6LqXISvA6VaDziwEngBB7wHMwDkeAOqoWewLtwAFoJ3hL9SB3ZiFgHuoB4/KQ+0qONqCEIoF/yfsHPX8VcrMH7w2N2lqKf4gf7lHaSv4hSMAbhzVfqLiaKI4QMXPlB/ll8b2kQnIAAsIF0gsO6KgkMQK2ADU+nofQLeiN9izpAcsQ6FIXeoUPgE8jFOuUIkUT0BL/QNhSBusOjskVyY6XaVhgmxIsrpNPwCrGNmaAsViu1Z7XX1E6mABYE7nu6uvIdhx13nB08Z/23xL4ghQkoG+suG4KMffTn1c9YjlghNvdX81xx7XRddUveWnyJNAh0o24wU7irCsygislcTVai31MceQtdl9dJCmk11noBnLVCzDH35Uy5L4zCquB//6rkQXrQC+uf9YSXSCJ3kf9QdemKdBrlJ1aCRJQKJemucNeX77K5D/Bb4GUiiR2olnQZ+h26NE22si2H93d5OL/BS7obOwc5Ep0n3HZ/X3k72Y+tqOil+MElc++YbdRlUBFukn6LZvG09EW2wU4gl3hFyuR0qhfm7EuUkQTEUsCBNLQdNoRN4BS4HM6EfeBkeBpuhYL8Q0qSwuXjqICcwdzgrihnKhPYh0Rd2Ee8Epjt6+hd5L3h4wJmPkuiiDNME+VY9WxNe81J1b/cGCoPfhQy/bN8I3zd/OP5NIlCHtCRHE/F033oULojNY8sI7YTGmISsKG1KAm5YQfkwEo6GqxDQXgmU+gCdMoaebhUVxogPZNWyReghHoQH8nX9H12CWdlLzHz6G5UOnEWFUir+XTPCcdQ5zxfDZFGf9Nu5TutX1dH91IzVD1K2ZEJA2FimL+tp9Q5yRHrqOWc5BnGZ8E+VGMWcb8UuxQWdhi9HePoKDTC0XIv2QQBMiMa16YRRuo9ugKtogqJLHAf9YEp8kqps8RJBskhtYcvkQh2EV+I+0QvnEsS/AYUxeEtTma3M4uJCrKD/+Kf4SN8Y7Du/Uv4W5oDKxOL6F+cR1ms+qzKVvKci7aCA9KBwD3vRk89b6I/mw+W14EHVDCr4jLZaDaN6UxHUB+JMSAXK/5dUgVJEq1iXUmN1f40lApGg7MghKhAtMaK5KP8SCZhNGwHEWwNbuI+G0bPYL4wU5lnNE2XkVWJfPhG7OKf71rtzPfeFhj4jCxTHNf21O/RfdfMU19S/eTmkw2km/673tNu6KDLh5Vfdj3xt5QvEzKdys1UdFN+ULxnf1CAoNAfuZb8XSqSJsnBsBWKIxpT6fRaxsb8ZnbRu/CGUgcpYYE0WbTwo/hWQnXpbxgD3hCR1FXqFMWTs8ixZFNqE21jTrEBuhBsk7rxyf7j3ijvFe9Pf7lwU54COlBT2VPKt+p2mlHqP8o53BtqNxooGgILvX53c88g3wf+oFyRqE2vYmnFCMUJrhrbhr5CriS6Yc21TV4sPREXim/EQxIvd0StQT6IJnygH5iEDsBasCvcAl/BONyPGmIeeZnaSf/D9GC3sk8YFZ1D9EAvxUe+f5yvHf29Fv6PVJloxx3WpOg5/RjtPk1fzb9KE22XLvnTvE7Xn/LZtlR7jMvmL5WnkJXYNsq26qPqF8rv7HmKIxwQyJvE18IH4YVYE3N2dXIFPZs5wPxktjNd6VpkFDgAQ+XOYi4/le8vnJZmorPEOOoErWVm0V3I9ihMHiMtkUehDNCfPE0NosYSJfCnNEg8JHQW5gkrxDXSeXkachMxzDkuWjlMaVfUVuxj/6OiQAupEl/R/68vwr83ECQOhMFkRcaFNUUWe55R041whYLQXfmsVFHyi08wS6yT1siH4S40HpwCLcE5BOFc2AyuxJtRHPBj1dICzyxEVWRItg97h4mgrxNTYWXhj2e/o5/zjLeAbw5b04NVibpWGE1ntOu1oRpWcZl4L3TzWd1XnfXLedvm8j3uWvxdmEpB9rlylnqzer1yNBtCzQcbYEW5vSSLN7HCiwSbia1kdcpKtiJ7k4vIl8QLJMo95G7STmEq31awSCxYRA6ju7FTOR1H4T5LhAOkRZJXeimNkF1wDeoJobRXOoE3YoMcK/+WjcgOzuE5mk2XMTvxBvuKsdB98KgbB1OkVcJwHgYa8KOFC9JdZCZVTGP2CjuXfcj0o4eS3fG+cUCmMROdlevCBLhVbi3/I0+Wk+WvGPl15bpyqvyvrIILoALlov5ECTmUvsN42D+cQjGOq8BOpQ+S9cBXaZe/kmOFpX35bZ9RnI6+sgd0XUx5pmHGI/r2Bl63WvFODvaElS+2bihLLF5cFFe203FXuEBplb00r/RyUKRpne4fdi5MDzz1Up4hbqXnjX8EvEWPVGxVjdG2M7wx1NCFqvKZSkRF6bm/0O3BnXvQ3sNR23Ofz0X9mNlKs7qNppGKYgH5Hiwjv1OHqWbMb5alS2RzoKe3vmu+o3253bHSsymQLNuJraykaqVvFtTb9Dxot+Gt5gH7DX3hV3kJ1wDbjOJ9hf0tuzxvxBb0f6oR+mumpcG9gpsFx5va631slORwzym/Z5thcZcuLa1saeDkA2fAbTZVHafPMh4yLtJmcBvJVvCZ8CZwNcBgVuChm1hFe5lt7BeW5pYwP4hyUeNtUl6z/LxnsOCHO+l3quuGzKBBxsGG58aOhubKE3Cnp5a9mnlKSZ8Ca96boutWrydV/kGvUy83XghtGNk46k5YQN+SXSnFeVZZq5o11mzbCGdcYA9RWXVU5zG0NZ0IV0QcDLmuq0ZbhHXu+vYCs7bElr8jP7s4ujyOn0R2UNbT3TUeNtmDj4SMDf5t6KcBXBT64Xc5s20Gy+RSuWSMRXQOEFaTTuVT/ZNgIeJgdIPIGsYQ+qXQ2HW0LLpsQOneEr+tKW8j45VpmnZ6OvyfmI7RIYaWxOwA5x7hqGKpmB+SszB/vKUNj8h05Rj936GrY7rFnYz4rBeYhvJL32NXJcc7W6h1hl3pOcoDeJdYybxVVFKtVk1TKhQ1uDqcQdGe28U0Z3soB6kZZWWqifjJPdBeXra/ZGtxUXHXsvPWzS6J309EqpAxKxzE3I7pG10nLM4QxYwRqjgXWyyWj5bqtq/ORvwDUJVdrmqira3vZSoJfm3S60s4H+rvn+C4bjlcdt+82BqwwFJPscE8xyOBSeqvxrMhaeHFMaMTPTH9o/ab6rK7haauXpZ/S4RCpqhvaZw93veWqK9ZE5oe5Y56G7ZfUwXtcwnmpaWHitqV3nYtROe5gVqvPjriVuy/0b8N28Fdf7rjrv2SZVnJqOyrWYtKW/F7mY2aY/rCoAWhn2MXJmVFv9BWRbX9Ce6vzsXlI6zVCq5lzyr9E7AxBZoDujaGsUHVQ6eHuyJ+x6hMh6ll/g2OuvZoK1u6v6BrnjHPUlzkaUXWU681FJmeR36ImRrR1dhM1Z2BsE1gnme+R+uZ7jK7zvuGCqxYzr8QsuQ8vPE6xICghaHUG0WMjjKuD3pjyg1/FBkbkqJ2SxpXd0un0vziiOImeUUZ3bK/mLtLXRQz9FNNujAxumWCKbF53PZQk2qS9MiTZU+1LjbXLX2ePzl3X8Eax2RwXFVgKDbdD+XD3kT2iM5JOhA3TmuEtV3htivmCqXa4mG5IzOZnGsl9wKv6Yfa+kFNQjpFrU54GckaV6pSmHT5P+9tey/b+fJ1jiblrZ2vfKFCmATAPdqj0Ckl5X5NrH62YYZuvipf+Z+6tWorcxrcEd/5Yz0uxzJ7PdtUi7W0RslG80H3FDmdvK2aGjQ1vDzSFHE8sk7M9mhNSC1lMvL5zpXPs/wqvVc6o6Rd7oTsqiVFngmUpPqia2lsFvwx1B2VEz84+Xr4eu678NJ1vXy1pXtJUn7+n//+UAXTPJXJ9eo4oy0kPeJ44orU9DjWlETFCNc9YxxDLDkFh3Ie5tUsW+s7RYjKjXq7qWX4vpiJcd7wdfopzA55WyDDaTbfLx5dPKx0uVXvFWQbMZE04j1numo+V4+sTOm1Y8IGm5aqVmor6krpXvxAbxt/H36VR+0wuOv6U/jp8mY2UWknewudvcDJ22Jcb339ZKNS0LUzfQ/5ELY26mxyWoLX8C/Ber/bq5tHFMXlaH9X+CXktnEPJlLUgv5XcHpEk+SLFePjVum/om2Bg55YZ7R1Rak7Oy5dXbLMn8yEaFcaPgWvDZ8QeygJxo8M2c5Y+Kbuevaf5oeFfQt7Flcuum+pK6xSuYyScbphnOZfRXc2il4Ln8JRtFGVonmh7B7U0dRV44K7XT9tV61TSs35XwqOFTUsEZxDyGHGZaHW4NEhJ0zxBqDVMqVyijRG3kHsYgSqNVGPqa7aoKmhGoc6+E/7RrlfWT8X6HJCinhvc3qS+p1+selD5JLEjMTk8NdcazHSM9U5wTa54HvO2OJZ1o9CI8asjjZ2C34Y0SF5dcJpwwtyiJ9yf7bT1ujSmSVVM9tnuW110FpNuX5K2LfkR6kVI/Yq90ixnr/LthdVKOvh6IwyuL+1x4ydQ9i4vyI/aYbBpp7Z9juWJwWbc82F70tauC5CksvWnwzuGTUxJSN5bWSwSpIj/Wuc8ywV8r5mdilc7jlPtlH10S0POhNzM7FRhF0/n6olxHkP2VIsw839CyaWaL3viSLFGOO9iMnxl6KO6JdQmXwjd8WS/DxT4RwLKYkUqzqmPRG0KPpU8sOwTop4vrPzl+2M+V3+19ya2fvyv3nGEmM1H4w/w64n36n4Nmqt5rR80t/b8dE8qORS3pLiT54UYrYqyfBf8JOEPqmTIx4o5wsNPbOdn8y+oipWbxFXXkXuxc01DDEtiuqbGpEQbRhKvPWtcx21XynZlTclK6tUDgQxoZrh+mlh9VLUScuM1anGAb033NXEPsR8MX91xusiK3+faq+mjRnh5iQUdzEmXzeViPLvLj9nfpzN5Vy3hojptFWZYlwVMym2kcHKjZfLfS7HyrJRpc78m7ljrQPF5axHC40TIiMSYuMfRi/VviESAnOdDcxMzrfM/aVdA83ofqpO+n+Cm8YvTu4dTqsC0jZvU+fJsgnFrYruZc8sCfatph/qRplA1N6kd7H+0D/cNknhHWMvLHmZuz0nxN5J2s0J6rOG15HjKhRH5ao00ljPYteJcpOlb8m+zKis6fZSuYWqje5r0IiY10mBuN+RP7lO8LZX5aLMNzJWZClsW0WOPaDqa1gZ9TKlOKKesod41/uv22OvaK5RKmUtKPA6KxF+tSHov9B6iWWJz2PI4M/kXOmN91V5nXxlxvKiIN8H4rSyWDM8yBt3MDE3eBVbEKjnqej4yxpUui13fMa+IqPvG3FJvSxoZqg39mx8zXjaNIL6GfA5F5X2z3ZmOyxrhNk0p4rRfgn9mjAwYqquNZHsP+3mbJnFbfP2Zu8tTHe3IBqpRxjemUKjcuO6xO8KG8R1lAjPzfLUgrcZIH+iqwAcU7xR1zHkRzxPuRM9TrNZvul977ppLyrrVOjIiCs461pAjFC/0BealkRPSaiUsCVcwR2XUr2dymG+P6Nr/nxXBfSTna0q0DeMeZr42tSHruWPc/9xzLJ2K6tQEJOxAPPFLGabrl9QaHhs4uSElXGl+oPEId7uCrd2yqmaObPE6m9HV1CN1L4N5pJGJhzRpxApvl3uBOda6/TS+jn/ZAZZ54iTFR91tUwLI3ITshLrxpLaCqCm/29nSklIxsnsi7aR0k3mnFLQHggbl1QlmtXegJ+8M5wWm6HsfT6d+TyPdE8lWqjc+memT1ErE3skrsC8fUoa70m1NcydmBEovOPtTNZTuNU1je1ir8afDu7OneLTPGMduywnizrktM3+Y4mS7nLvtD2NNcP+i+ucODo2U/sdXPCNcBwpfp1J5QArLekYUblG1zZUndQ0fq7+InjjrelKL79vqVb8NfNMtlxeHV1XBXTXgswRD+ObJN2Kaaoeg9K8Yx1Tim5nXMqebv1H6sMMVf3W/Qx/nVwlpqpmoVzd43fOLF9omVY0J6Mkd7XrBDFVvQqrYXPU1ISTSY8juihUcLonxb4q72IGyq/qWUzUV0xVbzH8Ff01mQ+byN3in7t+OCbZapdF5+1If18s+O/QAzQmQ7vgs9HNEzOTZocd5u6I8W5g3ZOdm7G0eID/PdlJsVktGxfFUonng51MDr/LXVB+wpJaosz5lbXQapZIZoEm1qAN82G8OmIv6OzEZH8z5+bi/pnNct/b68Db7EPVG93RsKLE8zFIexkc8DZzfbWPMFcs+JrxKu+VayI4oTDq8o11Iu7Ht0+uEH1YbYNnvDHl6wqcmVXy3zl+wRImWN3ZUBj5KulO+GBlIynNc8mZbT1p3pnfLfNbicWfyuRqlhpmhwyMWZyoStoQ2pJ9J3Z0d7asyT6bEV9c2VdE/qPYr7kUtDx2Z5I25CQzKvDINdvxxvqstF52dOYHcxdxM+vXxBunh3KxMck1k66YHPQN3uGEJXMyF2fZzEHCSPqaIlg7I+R2Ys241boMVMFb0XXWLpprF5ZnXMkvc58lktUD9ZtMRyOfJMxMuRg9Xb0BdfIutdfNG5a+Nf8/1xnwhBuv7mcYFvUw6XF4R+U5sbmnopOw7S+Zn/M940kZITxgeM16Q0RoaOyQpO2JomkjU1UY5wot+565P2uaOUr4QZ9WXtFqQpYnzIzfYlhPxPjOOpvbW5prFE7MmJPbxrkDHVFd188yDY88ntC4wuO4BdpZwOOt6Whb2DH9dbbGvkIexD5XrdPvikhMyY6S1X3lxZ5Rzp+2aeaR+aqMlkVBfjt1WdXesC24dsyOxNsViiK9ylmy0TPQNj6nSrqvoKrHQzg5pB5vrBn3ICk3OIr57N/umldus/wo3p5FZcXbusJh7DHNOUMg7GDc3OShyX+C9tGLA7nOWSWXM5Zm9bCy0iemQBmv2xZ6MulOTI42AdXwznGutT0sm5HfNeNHwTDfSUqjqqJ/EzQ+6nZ82wrvotupa8J5nqe2Trnm9OcFdTw3CRu3U93NOC2WTu4bYmFWB3jXnvKR1o0lMGtV1g1rmXybG6uNMfpC02KfJBUkvzM1ZvoH+rt2loRlTsq0lLURCum/lC20L0PWJAmxjO4w9uAf5zF7DUunwvEZwfknPdEUoXyqOxYUF9U9blnKjtiW2oHgoHdd+ej8e+mZeS+cHjSCE1V1Deej7iW/DHvJnReS3Vcc961HS3fnLM3ML1sjdWRGqyX9vpAaMfnx11JcoVUUJpF0dzJ/yaqTubG0TeAI5VJs1YwMbp34MbatfhnRzLfCtcBuNacV3ss8l7/Ac42soxilm2t8H9Eghku2xDXU/UWM8mbbe+SvTa+cF3A0R072t+qk/mv09CQpZCDn48e4fY7b1qwSMXt0Vh9LkcwzozUdDPGhG6LbxHtSqof1VFwR2ri8pb0yG2b+U/or8JTKV7g1r0I2Jq2KOavtCGZ76rnG2zPNhoLuGW3yh/u6UQblcv3qoMdRT2Mmp/hiG2hbgwee4/b0vPXpg/IuOVYgH3tGbTDOjt2eaDNt4IbzV927HNuttUuOZzXO7m+PBKeYY5oMvSa8cTSTAJNuBPVkogKbnUNLQvEErWQeI5ym05WddA3DOyZ3j+yrmQq7egJOvb2Vmc0bnHmzOEO4R29V9dWvN3HRa2MmV8iK8CmTpCT3dcuX7M7powv7eVXkIMVaTXBwSmK/2ER9HSrDm+dqX+62+AvyMn/nH/Y2psq4tzqn4W3k8OjE5JexWu0c8MZzxr4qf80fT85Chx/quGU4AjG2RyIfNJnj+EfuAY4J1jnF4VkhOQvKT4PvrF5X3fApTBndMXFI8qygJ/R4/2jHweIO6YUZVvMNgWP2Kln99Mjw5GFhr1UrpSTPfecIW2npgJzbWd3Mj6RpTF9NPUP3EEU0E+dKaR/+RREhMq5m5rCsc390xe18o8iKiq+aU6Hfk95EhWpjiNPeu+7Vdof5bN6IzGVFQwJtqckKtd4cFBWdFnM4ZU50S00EGuaZa2ud9/N3Zt4cV2uwgCtWfwkanPA4rrWhjP7Lf9i9qvyJZWChkHEyd7hLIJ5yZ3RXDJkRHaMHJrVO2KvXkFe9HcqPF4778yor1Z4kP2ZPqzYZcmJ+JQ43bVEcFcZ7KjszrDeK87O+ZQ+1P0Ysd037x+APjYvuE78luXGIgn0bOOu4Uzokw/2nc+m8wGS6tTJcZwlvnDwyvKe6AyS8t11K+/qy/JyCjNUl3YW29ANVS8OCYEV0q9hvKfujxqoL5WvuPGvL3Eq/j+VFuxaBRVys5nXQ9ISpsQsNDZjr/i6eq+VWiz2fzRie99Z9k5ipWKCbY5wUoY1pmnwgYbIhhGzve1X+oJD5U565xrZROsHUUk3T34hun9g4uJf6iFTPt9LVzzaxpHfW06xZ1r/ll/RCjUN/JKR3VHSimNIo7CmXKdxyLTZXztzz+2FxVf8HMkVxS/MwrGpSq7B52u1grS/Ic8r+t1mf2ytzVklGwE2WK//WB5lSIs/GTqmQEbVPfVoO8dywTs298BvmX3TdB/W5e+pFpq0JPaPe66sxj/0Oj6+8hvVtQdVMdcEx92AwjIvXuQ23whpFX0q5lVDDOJ2c7rtevrNo9h9PdmX7ULkiu1L1Sr8qplvc6aAjqgjxP+8pZ00bKv6RuS0ny26WL+AI5ugNIY8ig5NeJPcIecpwPONymttn9Uo/UtIgMIieojyg9YeNSHgfcl4/j1jqn+L5YL9lnpHbLWtoWSwPQIritFYZ9CC8dVyN1OfRes0MeaKnrT0/L/R38/y1rr+IWooP6m5By+M3RbmMR7mmvNpX2/HLyhfcyliQf9U9GCG2t/aJ/luIPuphCpW82dSF6uuf6thScu/P8MzDlh9iNt679mqpyNKYtsEPDS5wINDdXdvep2xV9vbshdZU4R44rKyoHRvUNvxAgjr1QMQa5QNxqLu/bWrO0D9/Fzm8d0mLolRdITgmPiQ8NvgX90y44FtS3su6Pj83s3tRmueAGMn0UZ/QDwhtHfM+9UQ8a1gHvnlzy8sK7/6Oz3lmT4WFLFI9MxTF1I46GnJX20VeEKjhvG5bX3Q6s16+wrlKnEFlqrrpngdnRXxLHpC0N9hCpwV6Ot2l5zOuZfrMy4Vk5i/VaO2A8DfRXcMmm/6i7gh33c/stcy2nD45Kyyx/qfyNG60OjaoTZg1fmOFfhF9lCdFm/uTbVIuk/666IR3CAmUrdWyaVHMrbD8kNqKOVKur53jrXVnfussqviau6J4l6FVObqDwe2jm1TIjfmk7YaSfFWdU4t3pL/J3eqwwaOsqJyiOxp5JWJA2FBDMZgnNHXXdxwvrZT7KL9peZh/IdAprqpvGa2hvxMLkv4NiWJbCzfcC6wLs9Mzl5mv8iupw4ofqvCQ4sipYbtCGrAeifWl4V7WF9zNcZQNdAcJJ+lI5T79qeADMW1T1kXt17RATX1lDmfhn/Q/BU5XCZrBpagO6tdHjAxbFF6mSyA+8ztc/5UvLamQW7twffkJzz7YgP1P3SHoV9jipEaJ+4NfM5OFvp4xtns5W7IGm3X8ekpWdFQvCm4VGRWRHD5buRIt9n1zzrJ6ClJyfpbcchgDc6lZis36TcG9o0ekhMeU6o6B/f4rzvLiS+kD8zY7omAP9pWyo25OeHDE+Yg5Qb+oFuJqd0b5gdIxuQPykW2e+6A8hf2uKjF2Cs3Gar9NaLBilbjQu9v+KteYeaysYWAx9YVrqFpkvBixPGJqOFIhCH1Fztm29kVJOYNKpjvyfDPIi1itNzJxkXxSp9g4I0e14Du4B5ivZv6b08p+UlzIbFPM1HwP6RlZP7JVMMey8lpve2c3y/68lbnTLXucM0XAPFPaDTeCD8ZakyyR97Rrkcr/wGEqSkovzZcd1+EHtrsyWr83/EJUk6g7BkCV8zFuY/mMkvrZy/KfWTe6jspOZremryk83JkoJM4N36dsIx3yzLdZcpLTHUWbvSPImwqreljQ3kghanZEE+1YYmagjfO9dUvBqyyhSGn74n6G+nA+XVxwv8g6yefib4dsZnk+1L2yjMiskbnJLPIW2ql8q7kavDFKEX0vdJoyE7p8Xx3VzTdyJ+SYS3y2zv5D5DHlN4M6uEn0waTfsX8F+6mngR3OrOKxGaezf1kvS41YQblUawm5EfUwUm1Sc1vga98cR7WyDblf8+aWPS+3+m+TTuUEw7rgndEpiS1jjKZZ1OFAiLNX8frMiznnbR+kk4xBVVm3OnRsZElER9NA7oS837ugfHLphPyUwoKyJ+WVAv3IL8ouhpLgI9EZcYGov0yQaSH8cF4pVmbdzhGtnSRElyqnaK+EzI08FrEm6CNbH6b73ztDzGTh8sJXZTvKAz4VOMO91LYx1Y+cEmuJKjVRuOseuLuU3svOyblr7ilMp5R4dzQFH4pIi4wNsavaErbAPpdkUZb8VfS8uK0lzd1G3ssu14w0NggLiTZHbw6fqLtAvPDdt7zL+5nzs7CKS4Dt2ZHqtQZF6IRwIsSjQYwEE/glzjoWrqysNNscKG/jb4u+0HPUyiBDmBDxLRwE31d1RPc8/cxZBXcKE8y/vPWICEUlXaOgmNAbYdNMGu0wZg9M5ee5ztuvmvNKFGXt7KXe0+I+4r3CpK8bcjp8bkRWyHhNMZjmc9pGlWlLJ5Rddc6XB7Ia3UjjEVNbU56hpa5QUZVqLLb3fHXUs9U2K82brdHOXr428gTWp51qahfaOjw39JHhNLtXmuSeajlTHFOcZmvMD6POK+9rGxm/B+tDY0Pm6rcrxqMBAYOntv1XSbeCT4U/zPHOVfwfcpVqlrEwLCZmUGx4+G1tVfI//zm7qXh9/tXCt7ZNYiJTW71fN8bUMOJCeEbwNN10Vgk3e4fab5VsyYd5F4rdthteHzysmKtXhGmjU2MvRZ00feZM0grXpbKwwtv5dUueuCqAEOUBXXVjZOjA8PphPUxH1DtIZ2Cls5K1Zsnn/C35pSU5jm5iPwZozgWdjvgnZmzMo9C3mr3kDr6R82rph/zD+btKj3jHEXHK2TpzUFH4+sjBYXcMQYrFqK8/zbHOXL8okM8W/7RGe7PkZ6xZlxbyI7xRRMuwn8Y1qpEE8rd3RFpWla4oo+1m72L0VtFNf88UGfojGBgiVP3o+3A1X+Kp63xs6265Zq3kfOF18/GoNnNIdUR7Wb/E8FMXpl7FriE343MHvO3dq131POsDN+STYDi1gLui/qz5pjqjoBQvuUR2KPlWGucLcdV2fnVC5wpnH/eWAIfa0E+5SPUVXZCxgfGWrrdyCuWSd/PZnvOO0/bajkWe5vx+eSIJFPs0p/RGo93wWLdWFUdPl4o8o8s72zKsj61/21u6nwlnyDFKSWcwtQr5Gfzb+EX9mPoujvdyzho2o2Wk9YIzmD8AYrjjGmQYHbwppCioj8ZPd0YSX93jtNU0h1h+2Te47wQ0MAN3CqOfZ+xlWKRtrtxDt0Ghwkqf3rPApXS39p0SDsOW5Aj2gXKKeqR6hipXUYPtToqwVGop3uKZQFP/L38RX1uqC1eif8FIojH5iDxEdiKzCTNRlzxMLiCfEQngIPTLn+UVch15ijwR3kI54AV5nn7GSMxDxkarqY5glzxc7MIf9Qu+zf6zAUrIFGfA8cRn+hwXrrygGMMNY3/QSrIhDBMNwjDhtVBTbCENgD2IWnRNdi57kFlFx9FF1DhyNKokJQub+CG8LfA24OZ7SmaoI16Sg+h3jIt5TJuo6mQp4Qbn4HzpmnhYCoOlsBqqhE4iEwGocfQ4ug/VjjxDPAEGFCtfEWmxuzhWQvJidAusI24QV4k/RCOyGtmCKEcrkAddBw9BUzAbEag5MoJ7oCcYgUfPdbQd7AKPEIMkuAKlghXgBcgADHEThIMG6BDsCfXwqkxBESYDijhNdCUvkTvIZNJCrCF2gKnoBJwJ+0MLztYauT4cguaBNOIy0ZAsIetR58iBRDSojXZBhzxWjpL7yDrYB/UGB8Em8AecJ1qRiGiJrdCgH9oL1TBLzpBJ2Bpmwt8ohUggd5NTcX1GkkPIJYQBfIGN4ERoh/HoHVwAX8F36AcwEmfAALAbZGOfZ4N0FIIWwTS4Ekajm6gZeASSieHEReIbsYfIAQYwHlVFTVBv1BPVQ2noBmoOBoMI4EC1wDocd2PgQ2/RRCTDI/AmTEEZaCEoAiqiKbGbeET8RfQGS1Eoqo66o26oFs7hOdQRXAPHwWjQEfvQCVQEJkCCI4hDk2Bl2Bteh51w1lcCEawiIFGZvEykAy04gZahTigDTsZ5i0QmcB6cAQvBduAF/YhxRA3iC/gb/EJ/o+ewA6wF50EXHIh+oR1gEpGBI6lKXACTcRX9aCuqgCyQRT3wt8voFTKjJPzkOsgEz8ACUB2Uo1NoJGqBGqCWaAC6g7qCX8AJ7oBZYCD+tAMcuIimoznoPLb+Fd3G2fiGSFAfjAXzwEh8QwiAyIqyseWTaAM6ikpQPdAbtASVQAqoCaqBSACAHZ/wIgn/lKACVIhKUTkSEAv0wAjUuKoAUEAFlNiSA7mwdRMIxn/+3/8BICPw//n1f1BLAQIUAAoAAAAIADIjgljfw1DlXQIAACEFAAAMAAAAAAAAAAAAAAAAAAAAAABwcm9qZWN0Lmpzb25QSwECFAAKAAAACAAyI4JYiM4QAZMAAADKAAAAJAAAAAAAAAAAAAAAAACHAgAAY2QyMTUxNGQwNTMxZmRmZmIyMjIwNGUwZWM1ZWQ4NGEuc3ZnUEsBAhQACgAAAAgAMiOCWJuapP02CwAA1SEAACQAAAAAAAAAAAAAAAAAXAMAAGM0MzRiNjc0ZjJkYTE4YmExM2NkZmU1MWRiYzA1ZWNjLnN2Z1BLAQIUAAoAAAAIADIjglg389jN/joAAExAAAAkAAAAAAAAAAAAAAAAANQOAABlMTQwZDdmZjA3ZGU4ZmEzNWMzZDE1OTViYmE4MzVhYy53YXZQSwUGAAAAAAQABAAwAQAAFEoAAAAA") /***/ }), /***/ "./node_modules/base64-loader/index.js!./src/lib/backpack/sound-thumbnail.png": /*!***************************************************************************!*\ !*** ./node_modules/base64-loader!./src/lib/backpack/sound-thumbnail.png ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAACXBIWXMAAAlyAAAJcgErz99GAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYBQTFRF////AAAAgICAZmZmVVWASW1tYGCAVVVxTWaAVVWAW1ttWlp4VWNxUV55WVlzXFxwWGJ2VV5xW1t2WGFyWlpzWGB4VV10WmJ4V15yVVtzV110VWB3WV50V1x3VWB1V1x1VV9zWF12WF10VV50Vl91WFx1Vl9zVl52V191Vl13WWB1Vl11WF90V151WF92Vl91WF51Vl91WF50V192WF12V191Vl52WF10V151WF92V150V191WF11V152V150WF91WF51V111WF52WF11Vl51V151Vl50Vl11V151V150V111WF52V151V192V191V111V111V151V111V150V151Vl51V191V151V151Vl11Vl51V151WF51WF51V151WF51WF52V151V151V151V152V150V151V151V151V151Vl51V151Vl52V191Vl51V151V151V151V151V151V151V151V151V151V151V151V151V151V151V151V151V151ZcERRAAAAH90Uk5TAAECBQYHCAkKDA4REhMUGRobHB0fICEiJiosLS4vMDIzNDc5Oz0+QUZHSEpLTE5TV1laW11eX2NkZmdpa2xydHp+gIOFh4iOkJWZmpucn6GkpaytsLGys7W3vb7AxsfJzM/R2Nnb3t/g4ePk5ujp6+3u7/Dx9Pb3+Pn6+/z9/q0U6K8AAAHASURBVFjD7ZVXV8JAEEYDomAXEbuiggXBgr2jKNgLWLBiQcSOYEWU+esyG8WD7kYSXnzI95J7hsw9G7KZ5Tg5cuT8/1Q65nuyMugffQGAowKp7QonkCxI7Fet8f1wJa0/d+ezH14k9WtPICOB+QZYAqs/vKQS7laaNuPAEmjxzcwye1unXIveEKQkVdCNpecSenv+LlDCC5SGGgVeDaQ2RxdsA1NgCAIclyIdYC2STeuvA6ZA6Ufy4RrMpNhJE/SzBUU8duEGPUNapQmGBVZwQXAfb3MhnYoUcOME47oEtiG954kU5EQI25KP0yRSwHkIOxHvkSxiBTOElxGDSL1iBQ5I/vkBpAGxghXC5CMIsTaCkEBB1g0jCdS8IzVTBEMCAgvPtQk0EiqmCKwCAh9BP6Id6Zq2kTS3TEEhjxN42yHSFvVr7IiyBKo7pEt1AqvIsBmkf88NG2HGI/TFAJ7akdxYiwocFupym/v192usnrRX4FX3hrX1P2ZqmUd4pMUNf47lsRhDUI8lbxqD3fLIGOvOOAT06RwNjV9Hw8OPH/TGNA/silP4HkOSUkQGcLRFsoDLmT4P75k4OXLkyEkzH2pOgd/43vP4AAAAAElFTkSuQmCC" /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/action-menu/action-menu.css": /*!***********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/action-menu/action-menu.css ***! \***********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n.action-menu_menu-container_3a6da {\n display: flex;\n flex-direction: column-reverse;\n transition: 0.2s;\n position: relative;\n pointer-events: auto;\n}\n.action-menu_button_1qbot {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n background: hsla(266, 100%, 50%, 1);\n outline: none;\n border: none;\n transition: background-color 0.2s;\n}\nbutton::-moz-focus-inner {\n border: 0;\n}\n.action-menu_button_1qbot:hover {\n background: hsla(266, 100%, 50%, 1);\n}\n.action-menu_button_1qbot:active {\n padding: inherit;\n}\n.action-menu_button_1qbot.action-menu_coming-soon_2URvV:hover {\n background: hsla(266, 100%, 55%, 1);\n}\n.action-menu_main-button_3ccfy {\n border-radius: 100%;\n width: 2.75rem;\n height: 2.75rem;\n box-shadow: 0 0 0 4px hsla(266, 100%, 50%, 0.35);\n z-index: 46;\n transition: transform, box-shadow 0.5s;\n}\n.action-menu_main-button_3ccfy:hover {\n transform: scale(1.1);\n box-shadow: 0 0 0 6px hsla(266, 100%, 50%, 0.35);\n}\n.action-menu_main-icon_1ktMc {\n width: calc(2.75rem - 1rem);\n height: calc(2.75rem - 1rem);\n}\n[dir=\"rtl\"] .action-menu_main-icon_1ktMc {\n transform: scaleX(-1);\n}\n.action-menu_more-buttons-outer_3J9yZ {\n /*\n Need to use two divs to set different overflow x/y\n which is needed to get animation to look right while\n allowing the tooltips to be visible.\n */\n overflow-y: hidden;\n\n background: hsla(266, 100%, 39%, 1);\n border-top-left-radius: 2.25rem;\n border-top-right-radius: 2.25rem;\n width: 2.25rem;\n margin-left: calc((2.75rem - 2.25rem) / 2);\n margin-right: calc((2.75rem - 2.25rem) / 2);\n\n position: absolute;\n bottom: calc(2.75rem);\n\n margin-bottom: calc(2.75rem / -2);\n padding-bottom: calc(2.75rem / 2);\n}\n.action-menu_more-buttons_3Bjkq {\n max-height: 0;\n transition: max-height 1s;\n overflow-x: visible;\n display: flex;\n flex-direction: column;\n z-index: 10; /* @todo justify */\n}\n.action-menu_file-input_2nOL7 {\n display: none;\n}\n.action-menu_expanded_JcMKp .action-menu_more-buttons_3Bjkq {\n max-height: 1000px; /* Arbitrary, needs to be a value in order for animation to run */\n}\n.action-menu_force-hidden_3SRnx .action-menu_more-buttons_3Bjkq {\n display: none; /* This property does not animate */\n}\n.action-menu_more-buttons_3Bjkq:first-child { /* Round off top button */\n border-top-right-radius: 2.25rem;\n border-top-left-radius: 2.25rem;\n}\n.action-menu_more-button_1fMGZ {\n width: 2.25rem;\n height: 2.25rem;\n background: hsla(266, 100%, 39%, 1);\n}\n.action-menu_more-icon_TJUQ7 {\n width: calc(2.25rem - 1rem);\n height: calc(2.25rem - 1rem);\n}\n.action-menu_coming-soon_2URvV .action-menu_more-icon_TJUQ7 {\n opacity: 0.5;\n}\n/*\n @todo needs to be refactored with coming soon tooltip overrides.\n The \"!important\"s are for the same reason as with coming soon, the library\n is not very easy to style.\n*/\n.action-menu_tooltip_3Bkh5 {\n background-color: hsla(266, 100%, 50%, 1) !important;\n opacity: 1 !important;\n border: 1px solid hsla(0, 0%, 0%, .1) !important;\n box-shadow: 0 0 .5rem hsla(0, 0%, 0%, .25) !important;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important;\n}\n.action-menu_tooltip_3Bkh5:after {\n background-color: hsla(266, 100%, 50%, 1);\n}\n.action-menu_coming-soon-tooltip_3jthM {\n background-color: hsla(266, 100%, 55%, 1) !important;\n}\n.action-menu_coming-soon-tooltip_3jthM:after {\n background-color: hsla(266, 100%, 55%, 1) !important;\n}\n.action-menu_tooltip_3Bkh5 {\n border: 1px solid hsla(0, 0%, 0%, .1) !important;\n border-radius: calc(0.5rem / 2) !important;\n box-shadow: 0 0 .5rem hsla(0, 0%, 0%, .25) !important;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important;\n z-index: 47 !important;\n}\n.action-menu_tooltip_3Bkh5:after {\n content: \"\";\n border-top: 1px solid hsla(0, 0%, 0%, .1) !important;\n border-left: 0 !important;\n border-bottom: 0 !important;\n border-right: 1px solid hsla(0, 0%, 0%, .1) !important;\n border-radius: 0.125rem;\n height: 0.5rem !important;\n width: 0.5rem !important;\n}\n.action-menu_tooltip_3Bkh5.place-left:after {\n margin-top: -0.25rem !important;\n right: -0.25rem !important;\n transform: rotate(45deg) !important;\n}\n.action-menu_tooltip_3Bkh5.place-right:after {\n margin-top: -0.25rem !important;\n left: -0.25rem !important;\n transform: rotate(-135deg) !important;\n}\n.action-menu_tooltip_3Bkh5.place-top:after {\n margin-right: -0.25rem !important;\n bottom: -0.25rem !important;\n transform: rotate(135deg) !important;\n}\n.action-menu_tooltip_3Bkh5.place-bottom:after {\n margin-left: -0.25rem !important;\n top: -0.25rem !important;\n transform: rotate(-45deg) !important;\n}\n", ""]); // exports exports.locals = { "menu-container": "action-menu_menu-container_3a6da", "menuContainer": "action-menu_menu-container_3a6da", "button": "action-menu_button_1qbot", "coming-soon": "action-menu_coming-soon_2URvV", "comingSoon": "action-menu_coming-soon_2URvV", "main-button": "action-menu_main-button_3ccfy", "mainButton": "action-menu_main-button_3ccfy", "main-icon": "action-menu_main-icon_1ktMc", "mainIcon": "action-menu_main-icon_1ktMc", "more-buttons-outer": "action-menu_more-buttons-outer_3J9yZ", "moreButtonsOuter": "action-menu_more-buttons-outer_3J9yZ", "more-buttons": "action-menu_more-buttons_3Bjkq", "moreButtons": "action-menu_more-buttons_3Bjkq", "file-input": "action-menu_file-input_2nOL7", "fileInput": "action-menu_file-input_2nOL7", "expanded": "action-menu_expanded_JcMKp", "force-hidden": "action-menu_force-hidden_3SRnx", "forceHidden": "action-menu_force-hidden_3SRnx", "more-button": "action-menu_more-button_1fMGZ", "moreButton": "action-menu_more-button_1fMGZ", "more-icon": "action-menu_more-icon_TJUQ7", "moreIcon": "action-menu_more-icon_TJUQ7", "tooltip": "action-menu_tooltip_3Bkh5", "coming-soon-tooltip": "action-menu_coming-soon-tooltip_3jthM", "comingSoonTooltip": "action-menu_coming-soon-tooltip_3jthM" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/alerts/alert.css": /*!************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/alerts/alert.css ***! \************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n\n/* Toolbox z-index: 40; set in scratch-blocks */\n\n/* tooltips should go over add buttons if they overlap */\n\n/* monitors go over add buttons */\n\n/* \"ask\" block text input goes above monitors */\n\n/* menu-bar should go over monitors, alerts and tutorials */\n\n/* tw: show below menu bar normally */\n\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n\n/* so it is draggable into other panes */\n\n/* in most interfaces, the context menu is always on top */\n\n.alert_alert_2Ou-m {\n width: 100%;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n justify-content: flex-start;\n border-radius: 0.5rem;\n padding-top: .875rem;\n padding-bottom: .875rem;\n padding-left: 1rem;\n padding-right: 1rem;\n margin-bottom: 7px;\n min-height: 1.5rem;\n pointer-events: all;\n}\n\n.alert_alert_2Ou-m.alert_warn_2441l {\n background: #FFF0DF;\n border: 1px solid #FF8C1A;\n box-shadow: 0px 0px 0px 2px rgba(255, 140, 26, 0.25);\n}\n\n.alert_alert_2Ou-m.alert_success_1TbgT {\n /* tw: hardcode these colors because we change extensions-* colors to be something that looks weird here */\n background: hsla(163, 57%, 85%, 1);\n border: 1px solid hsla(163, 85%, 30%, 1);\n box-shadow: 0px 0px 0px 2px hsla(163, 57%, 85%, 1);\n}\n\n.alert_alert-spinner_2JcbE {\n self-align: center;\n}\n\n.alert_icon-section_2DC1x {\n min-width: 1.25rem;\n min-height: 1.25rem;\n display: flex;\n padding-right: 1rem;\n}\n\n.alert_alert-icon_3-jQB {\n vertical-align: middle;\n}\n\n.alert_alert-message_3dEDJ {\n color: #555;\n font-weight: bold;\n font-size: .8125rem;\n line-height: .875rem;\n display: flex;\n align-items: center;\n padding-right: .5rem;\n}\n\n.alert_alert-buttons_CZbh6 {\n display: flex;\n flex-direction: row;\n}\n\n.alert_alert-close-button_2ci8S {\n outline-style:none;\n}\n\n.alert_alert-close-button-container_2m64w {\n outline-style: none;\n width: 30px;\n height: 30px;\n align-self: center;\n}\n\n.alert_alert-connection-button_ETbfk {\n min-height: 2rem;\n width: 6.5rem;\n padding: 0.55rem 0.9rem;\n border-radius: 0.35rem;\n background: #FF8C1A;\n color: white;\n font-weight: 700;\n font-size: 0.77rem;\n border: none;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n align-self: stretch;\n outline-style:none;\n}\n\n[dir=\"ltr\"] .alert_alert-connection-button_ETbfk {\n margin-right: 13px;\n}\n\n[dir=\"rtl\"] .alert_alert-connection-button_ETbfk {\n margin-left: 13px;\n}\n\n/* prevent last button in list from too much margin to edge of alert */\n\n.alert_alert-buttons_CZbh6 > :last-child {\n margin-left: 0;\n margin-right: 0;\n}\n", ""]); // exports exports.locals = { "alert": "alert_alert_2Ou-m", "warn": "alert_warn_2441l", "success": "alert_success_1TbgT", "alert-spinner": "alert_alert-spinner_2JcbE", "alertSpinner": "alert_alert-spinner_2JcbE", "icon-section": "alert_icon-section_2DC1x", "iconSection": "alert_icon-section_2DC1x", "alert-icon": "alert_alert-icon_3-jQB", "alertIcon": "alert_alert-icon_3-jQB", "alert-message": "alert_alert-message_3dEDJ", "alertMessage": "alert_alert-message_3dEDJ", "alert-buttons": "alert_alert-buttons_CZbh6", "alertButtons": "alert_alert-buttons_CZbh6", "alert-close-button": "alert_alert-close-button_2ci8S", "alertCloseButton": "alert_alert-close-button_2ci8S", "alert-close-button-container": "alert_alert-close-button-container_2m64w", "alertCloseButtonContainer": "alert_alert-close-button-container_2m64w", "alert-connection-button": "alert_alert-connection-button_ETbfk", "alertConnectionButton": "alert_alert-connection-button_ETbfk" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/alerts/alerts.css": /*!*************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/alerts/alerts.css ***! \*************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".alerts_alerts-inner-container_1KTuF {\n min-width: 200px;\n max-width: 548px;\n}\n", ""]); // exports exports.locals = { "alerts-inner-container": "alerts_alerts-inner-container_1KTuF", "alertsInnerContainer": "alerts_alerts-inner-container_1KTuF" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/alerts/inline-message.css": /*!*********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/alerts/inline-message.css ***! \*********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.inline-message_inline-message_2feS3 {\n color: hsla(0, 100%, 100%, 1);\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n font-size: .8125rem;\n}\n.inline-message_success_1jfE0 {\n color: hsla(0, 100%, 100%, 0.75);\n}\n.inline-message_info_E7dNO {\n color: hsla(0, 100%, 100%, 1);\n}\n.inline-message_warn_3DS5G {\n color: hsla(266, 100%, 70%, 1);\n}\n.inline-message_spinner_1vybW {\n margin-right: 0.5rem;\n}\n", ""]); // exports exports.locals = { "inline-message": "inline-message_inline-message_2feS3", "inlineMessage": "inline-message_inline-message_2feS3", "success": "inline-message_success_1jfE0", "info": "inline-message_info_E7dNO", "warn": "inline-message_warn_3DS5G", "spinner": "inline-message_spinner_1vybW" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/asset-panel/asset-panel.css": /*!***********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/asset-panel/asset-panel.css ***! \***********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n.asset-panel_wrapper_366X0 {\n display: flex;\n flex-grow: 1;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n background: white;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 0.85rem;\n}\n\n[theme=\"dark\"] .asset-panel_wrapper_366X0 {\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n\n[dir=\"ltr\"] .asset-panel_wrapper_366X0 {\n border-top-right-radius: 0.5rem;\n border-bottom-right-radius: 0.5rem;\n}\n\n[dir=\"rtl\"] .asset-panel_wrapper_366X0 {\n border-top-left-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n}\n\n.asset-panel_detail-area_2KQhH {\n display: flex;\n flex-grow: 1;\n flex-shrink: 1;\n overflow: visible;\n}\n\n[dir=\"ltr\"] .asset-panel_detail-area_2KQhH {\n border-left: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n[dir=\"rtl\"] .asset-panel_detail-area_2KQhH {\n border-right: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n", ""]); // exports exports.locals = { "wrapper": "asset-panel_wrapper_366X0", "detail-area": "asset-panel_detail-area_2KQhH", "detailArea": "asset-panel_detail-area_2KQhH" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/asset-panel/selector.css": /*!********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/asset-panel/selector.css ***! \********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.selector_wrapper_8_BHs {\n width: 150px;\n min-width: 150px; /* fixes width being ignored in the sound editor sometimes */\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n background: var(--ui-tertiary, hsla(266, 50%, 90%, 1));\n}\n.selector_new-buttons_2qHDd {\n position: absolute;\n bottom: 0;\n width: 100%;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-around;\n padding: 0.75rem 0;\n color: hsla(266, 100%, 50%, 1);\n text-align: center;\n background: none;\n pointer-events: none;\n}\n.selector_new-buttons_2qHDd:before {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 0;\n right:0;\n background: linear-gradient(rgba(232,237,241, 0),rgba(232,237,241, 1));\n height: 100px;\n width: 100%;\n pointer-events: none;\n}\n[theme=\"dark\"] .selector_new-buttons_2qHDd:before {\n background: linear-gradient(rgba(94, 96, 97, 0),rgb(59, 59, 59));\n}\n.selector_new-buttons_2qHDd > button + button {\n margin-top: 0.75rem;\n}\n.selector_list-area_1Xbj_ {\n /* Must have some height (recalculated by flex-grow) in order to scroll */\n height: 0;\n flex-grow: 1;\n overflow-y: auto;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n}\n.selector_list-area_1Xbj_:after {\n /* Make sure there is room to scroll beyond the last tile */\n content: '';\n display: block;\n height: 70px;\n width: 100%;\n flex-shrink: 0;\n order: 99999999;\n}\n.selector_list-item_3N_u7 {\n width: 5rem;\n height: 5rem;\n margin: 0.5rem auto;\n}\n@media only screen and (max-width: 1249px) {\n .selector_wrapper_8_BHs {\n width: 80px;\n min-width: 80px;\n }\n\n .selector_list-item_3N_u7 {\n width: 4rem;\n }\n}\n.selector_list-item_3N_u7.selector_placeholder_2pqWG {\n background: white;\n filter: opacity(15%) brightness(0%);\n}\n", ""]); // exports exports.locals = { "wrapper": "selector_wrapper_8_BHs", "new-buttons": "selector_new-buttons_2qHDd", "newButtons": "selector_new-buttons_2qHDd", "list-area": "selector_list-area_1Xbj_", "listArea": "selector_list-area_1Xbj_", "list-item": "selector_list-item_3N_u7", "listItem": "selector_list-item_3N_u7", "placeholder": "selector_placeholder_2pqWG" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/audio-trimmer/audio-trimmer.css": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/audio-trimmer/audio-trimmer.css ***! \***************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.audio-trimmer_absolute_1x_Jq {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n\n /* Force the browser to paint separately to avoid composite cost with waveform */\n transform: translateZ(0);\n}\n.audio-trimmer_selector_DDQ2- {\n cursor: pointer;\n}\n.audio-trimmer_trim-background_2VYXk {\n cursor: pointer;\n touch-action: none;\n}\n.audio-trimmer_trim-background-mask_mmZgf {\n border: 1px solid hsla(266, 100%, 39%, 1);\n opacity: 0.5;\n\n background: repeating-linear-gradient(\n 45deg,\n hsla(266, 100%, 50%, 1),\n hsla(266, 100%, 50%, 1) 10px,\n hsla(266, 100%, 39%, 1) 10px,\n hsla(266, 100%, 39%, 1) calc(2 * 10px)\n );\n}\n.audio-trimmer_selection-background_3LBuB {\n background: hsla(266, 100%, 50%, 1);\n opacity: 0.5;\n}\n.audio-trimmer_start-trim-background_26IJ6 .audio-trimmer_trim-background-mask_mmZgf {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.audio-trimmer_end-trim-background_1QrZm .audio-trimmer_trim-background-mask_mmZgf {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.audio-trimmer_trim-line_2cpoE {\n position: absolute;\n top: 0;\n width: 0px;\n height: 100%;\n border: 1px solid hsla(266, 100%, 39%, 1);\n}\n.audio-trimmer_selector_DDQ2- .audio-trimmer_trim-line_2cpoE {\n border: 1px solid hsla(266, 100%, 39%, 1);\n}\n.audio-trimmer_playhead-container_3l7Ve {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n.audio-trimmer_playhead_3A0k9 {\n /*\n Even though playhead is just a line, it is 100% width (the width of the waveform)\n so that we can use transform: translateX() using percentages.\n */\n width: 100%;\n height: 100%;\n border-left: 1px solid hsla(266, 100%, 50%, 1);\n border-top: none;\n border-bottom: none;\n border-right: none;\n}\n.audio-trimmer_right-handle_jMGnD {\n transform: scaleX(-1);\n}\n.audio-trimmer_selector_DDQ2- .audio-trimmer_left-handle_1Ure2 {\n left: -1px\n}\n.audio-trimmer_selector_DDQ2- .audio-trimmer_right-handle_jMGnD {\n right: -1px\n}\n.audio-trimmer_trimmer_3T33n .audio-trimmer_left-handle_1Ure2 {\n right: -1px\n}\n.audio-trimmer_trimmer_3T33n .audio-trimmer_right-handle_jMGnD {\n left: -1px\n}\n.audio-trimmer_trim-handle_1Obhp {\n position: absolute;\n width: 30px;\n height: 30px;\n right: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.audio-trimmer_trimmer_3T33n .audio-trimmer_trim-handle_1Obhp {\n filter: hue-rotate(150deg);\n}\n.audio-trimmer_trim-handle_1Obhp img {\n position: absolute;\n width: 30px;\n height: 30px;\n left: calc(3px * 1.5);\n\n /* Make sure image dragging isn't triggered */\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n user-drag: none;\n -webkit-user-drag: none; /* Autoprefixer doesn't seem to work for this */\n\n transition: 0.2s;\n}\n.audio-trimmer_top-trim-handle_1oF2r {\n top: calc(-30px + 3px);\n}\n.audio-trimmer_bottom-trim-handle_2FNda {\n bottom: calc(-30px + 3px);\n}\n.audio-trimmer_top-trim-handle_1oF2r img {\n transform: scaleY(-1);\n}\n", ""]); // exports exports.locals = { "absolute": "audio-trimmer_absolute_1x_Jq", "selector": "audio-trimmer_selector_DDQ2-", "trim-background": "audio-trimmer_trim-background_2VYXk", "trimBackground": "audio-trimmer_trim-background_2VYXk", "trim-background-mask": "audio-trimmer_trim-background-mask_mmZgf", "trimBackgroundMask": "audio-trimmer_trim-background-mask_mmZgf", "selection-background": "audio-trimmer_selection-background_3LBuB", "selectionBackground": "audio-trimmer_selection-background_3LBuB", "start-trim-background": "audio-trimmer_start-trim-background_26IJ6", "startTrimBackground": "audio-trimmer_start-trim-background_26IJ6", "end-trim-background": "audio-trimmer_end-trim-background_1QrZm", "endTrimBackground": "audio-trimmer_end-trim-background_1QrZm", "trim-line": "audio-trimmer_trim-line_2cpoE", "trimLine": "audio-trimmer_trim-line_2cpoE", "playhead-container": "audio-trimmer_playhead-container_3l7Ve", "playheadContainer": "audio-trimmer_playhead-container_3l7Ve", "playhead": "audio-trimmer_playhead_3A0k9", "right-handle": "audio-trimmer_right-handle_jMGnD", "rightHandle": "audio-trimmer_right-handle_jMGnD", "left-handle": "audio-trimmer_left-handle_1Ure2", "leftHandle": "audio-trimmer_left-handle_1Ure2", "trimmer": "audio-trimmer_trimmer_3T33n", "trim-handle": "audio-trimmer_trim-handle_1Obhp", "trimHandle": "audio-trimmer_trim-handle_1Obhp", "top-trim-handle": "audio-trimmer_top-trim-handle_1oF2r", "topTrimHandle": "audio-trimmer_top-trim-handle_1oF2r", "bottom-trim-handle": "audio-trimmer_bottom-trim-handle_2FNda", "bottomTrimHandle": "audio-trimmer_bottom-trim-handle_2FNda" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/backpack/backpack.css": /*!*****************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/backpack/backpack.css ***! \*****************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n.backpack_backpack-container_2_wGr {\n flex-shrink: 1;\n position: relative;\n}\n\n.backpack_backpack-header_6ltCS {\n margin-top: 0.5rem;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n background: hsla(0, 100%, 100%, 1);\n padding: 0.25rem;\n text-align: center;\n font-size: 0.85rem;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n transition: 0.2s;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n[theme=\"dark\"] .backpack_backpack-header_6ltCS {\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n\n[dir=\"ltr\"] .backpack_backpack-header_6ltCS {\n border-top-right-radius: 0.5rem;\n}\n\n[dir=\"rtl\"] .backpack_backpack-header_6ltCS {\n border-top-left-radius: 0.5rem;\n}\n\n.backpack_backpack-list_MOp5X {\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n border-right: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n min-height: 5.5rem;\n}\n\n/* Absolute position the inner list to allow scrolling inside flex sized container */\n\n.backpack_backpack-list-inner_10a2A {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n overflow-x: auto;\n}\n\n.backpack_drag-over_3bBKD:after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0.75;\n background-color: hsla(266, 100%, 77%, 1);\n transition: all 0.25s ease;\n}\n\n.backpack_status-message_3kt5s {\n width: 100%;\n text-align: center;\n font-size: 0.85rem;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n}\n\n.backpack_error-message_2JoTP {\n font-family: monospace;\n}\n\n.backpack_backpack-item_hwqzQ {\n width: 4rem;\n height: 4.5rem;\n margin: 0 0.25rem;\n flex-shrink: 0;\n\n /* Need to hide overflow because of background setting below */\n overflow: hidden;\n}\n\n.backpack_backpack-item_hwqzQ > div {\n /* Need to set the background to get blend-mode below to work */\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n\n.backpack_backpack-item_hwqzQ img {\n mix-blend-mode: multiply; /* Make white transparent for thumnbnails */\n}\n\n[theme=\"dark\"] .backpack_backpack-item_hwqzQ img {\n mix-blend-mode: normal;\n}\n\n.backpack_more_j3LFZ {\n background: hsla(266, 100%, 50%, 1);\n color: hsla(0, 100%, 100%, 1);\n border: none;\n outline: none;\n font-weight: bold;\n border-radius: 0.5rem;\n font-size: 0.85rem;\n padding: 0.5rem;\n margin: 0.5rem;\n cursor: pointer;\n}\n", ""]); // exports exports.locals = { "backpack-container": "backpack_backpack-container_2_wGr", "backpackContainer": "backpack_backpack-container_2_wGr", "backpack-header": "backpack_backpack-header_6ltCS", "backpackHeader": "backpack_backpack-header_6ltCS", "backpack-list": "backpack_backpack-list_MOp5X", "backpackList": "backpack_backpack-list_MOp5X", "backpack-list-inner": "backpack_backpack-list-inner_10a2A", "backpackListInner": "backpack_backpack-list-inner_10a2A", "drag-over": "backpack_drag-over_3bBKD", "dragOver": "backpack_drag-over_3bBKD", "status-message": "backpack_status-message_3kt5s", "statusMessage": "backpack_status-message_3kt5s", "error-message": "backpack_error-message_2JoTP", "errorMessage": "backpack_error-message_2JoTP", "backpack-item": "backpack_backpack-item_hwqzQ", "backpackItem": "backpack_backpack-item_hwqzQ", "more": "backpack_more_j3LFZ" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/blocks/blocks.css": /*!*************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/blocks/blocks.css ***! \*************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n\n/* Toolbox z-index: 40; set in scratch-blocks */\n\n/* tooltips should go over add buttons if they overlap */\n\n/* monitors go over add buttons */\n\n/* \"ask\" block text input goes above monitors */\n\n/* menu-bar should go over monitors, alerts and tutorials */\n\n/* tw: show below menu bar normally */\n\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n\n/* so it is draggable into other panes */\n\n/* in most interfaces, the context menu is always on top */\n\n.blocks_blocks_C530M {\n height: 100%;\n}\n\n.blocks_drag-over_2btTP:after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0.75;\n background-color: hsla(266, 100%, 77%, 1);\n transition: all 0.25s ease;\n}\n\n.blocks_blocks_C530M .injectionDiv{\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-top-right-radius: 0.5rem;\n border-bottom-right-radius: 0.5rem;\n}\n\n[dir=\"rtl\"] .blocks_blocks_C530M .injectionDiv {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-top-left-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n}\n\n.blocks_blocks_C530M .blocklyMainBackground {\n stroke: none;\n}\n\n.blocks_blocks_C530M .blocklyToolboxDiv {\n border-right: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-bottom: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n box-sizing: content-box;\n height: calc(100% - 3.25rem) !important;\n overflow-x: hidden;\n\n /*\n For now, the layout cannot support scrollbars in the category menu.\n The line below works for Edge, the `::-webkit-scrollbar` line\n below that is for webkit browsers. It isn't possible to do the\n same for Firefox, so a different solution may be needed for them.\n */\n -ms-overflow-style: none;\n}\n\n[dir=\"rtl\"] .blocks_blocks_C530M .blocklyToolboxDiv {\n border-right: none;\n border-left: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n.blocks_blocks_C530M .blocklyToolboxDiv::-webkit-scrollbar {\n display: none;\n}\n\n.blocks_blocks_C530M .blocklyFlyout {\n border-right: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n box-sizing: content-box;\n}\n\n[dir=\"rtl\"] .blocks_blocks_C530M .blocklyFlyout {\n border-right: none;\n border-left: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n.blocks_blocks_C530M .blocklyBlockDragSurface {\n /*\n Fix an issue where the drag surface was preventing hover events for sharing blocks.\n This does not prevent user interaction on the blocks themselves.\n */\n pointer-events: none;\n z-index: 1000; /* make blocks match gui drag layer */\n}\n\n/*\n Shrink category font to fit \"My Blocks\" for now.\n Probably will need different solutions for language support later, so\n make the change here instead of in scratch-blocks.\n*/\n\n.blocks_blocks_C530M .scratchCategoryMenuItemLabel {\n font-size: 0.65rem;\n}\n\n.blocks_blocks_C530M .blocklyMinimalBody {\n min-width: auto;\n min-height: auto;\n}\n", ""]); // exports exports.locals = { "blocks": "blocks_blocks_C530M", "drag-over": "blocks_drag-over_2btTP", "dragOver": "blocks_drag-over_2btTP" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/box/box.css": /*!*******************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/box/box.css ***! \*******************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".box_box_2jjDp {\n}\n", ""]); // exports exports.locals = { "box": "box_box_2jjDp" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/browser-modal/browser-modal.css": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/browser-modal/browser-modal.css ***! \***************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\nh2 {\n font-size: 1.5rem;\n font-weight: bold;\n}\np {\n font-size: 1rem;\n line-height: 1.5em;\n}\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n.browser-modal_modal-overlay_3TDyF {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 510;\n background-color: var(--ui-modal-overlay, hsla(266, 100%, 65%, 0.9));\n}\n.browser-modal_modal-content_3iHow {\n margin: 100px auto;\n outline: none;\n border: .25rem solid hsla(0, 100%, 100%, 0.25);\n padding: 0;\n border-radius: 0.5rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n width: 500px;\n\n color: hsla(266, 30%, 40%, 1);\n overflow: hidden;\n}\n.browser-modal_illustration_1qhRy {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100px;\n background-color: hsla(266, 100%, 60%, 1);\n}\n[dir=\"rtl\"] .browser-modal_illustration_1qhRy {\n transform: scaleX(-1);\n}\n.browser-modal_illustration_1qhRy img {\n height: 80%;\n width: auto;\n}\n.browser-modal_body_1pvBQ {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n text-align: center;\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n[theme=\"dark\"] .browser-modal_body_1pvBQ {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.browser-modal_body_1pvBQ a {\n color: hsla(266, 100%, 50%, 1) !important;\n}\n", ""]); // exports exports.locals = { "modal-overlay": "browser-modal_modal-overlay_3TDyF", "modalOverlay": "browser-modal_modal-overlay_3TDyF", "modal-content": "browser-modal_modal-content_3iHow", "modalContent": "browser-modal_modal-content_3iHow", "illustration": "browser-modal_illustration_1qhRy", "body": "browser-modal_body_1pvBQ" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/button/button.css": /*!*************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/button/button.css ***! \*************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n.button_outlined-button_1bS__ {\n cursor: pointer;\n border-radius: calc(0.5rem / 2);\n font-weight: bold;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding-left: .75rem;\n padding-right: .75rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.button_icon_77d8G {\n height: 1.5rem;\n}\n\n[dir=\"ltr\"] .button_icon_77d8G {\n margin-right: .5rem;\n}\n\n[dir=\"rtl\"] .button_icon_77d8G {\n margin-left: .5rem;\n}\n\n.button_content_3jdgj {\n white-space: nowrap;\n}\n", ""]); // exports exports.locals = { "outlined-button": "button_outlined-button_1bS__", "outlinedButton": "button_outlined-button_1bS__", "icon": "button_icon_77d8G", "content": "button_content_3jdgj" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/cards/card.css": /*!**********************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/cards/card.css ***! \**********************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n\n/* Toolbox z-index: 40; set in scratch-blocks */\n\n/* tooltips should go over add buttons if they overlap */\n\n/* monitors go over add buttons */\n\n/* \"ask\" block text input goes above monitors */\n\n/* menu-bar should go over monitors, alerts and tutorials */\n\n/* tw: show below menu bar normally */\n\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n\n/* so it is draggable into other panes */\n\n/* in most interfaces, the context menu is always on top */\n\n.card_card-container-overlay_gnjBL {\n position: fixed;\n pointer-events: none;\n z-index: 480;\n}\n\n.card_card-container_3_Sbc {\n position:absolute;\n pointer-events: auto;\n z-index: 480;\n margin: 0.5rem 2rem;\n min-width: 468px;\n}\n\n.card_left-card_1KpEh, .card_right-card_3IrbD {\n height: 90%;\n position: absolute;\n top: 5%;\n background: hsla(0, 100%, 100%, 1);\n border: 1px solid var(--ui-tertiary, hsla(266, 50%, 90%, 1));\n width: .75rem;\n z-index: 10;\n opacity: 0.9;\n overflow: hidden;\n}\n\n.card_left-card_1KpEh {\n left: -.75rem;\n border-right: 0;\n border-top-left-radius: 0.75rem;\n border-bottom-left-radius: 0.75rem;\n}\n\n.card_right-card_3IrbD {\n right: -.75rem;\n border-left: 0;\n border-top-right-radius: 0.75rem;\n border-bottom-right-radius: 0.75rem;\n}\n\n.card_left-card_1KpEh::after, .card_right-card_3IrbD::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n height: 2.5rem;\n width: 100%;\n background: hsla(266, 100%, 50%, 1);\n}\n\n.card_left-button_2IXDY, .card_right-button_3Py4m {\n position: absolute;\n top: 50%;\n margin-top: -15px;\n z-index: 20;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: pointer;\n background: hsla(266, 100%, 50%, 1);\n box-shadow: 0 0 0 4px hsla(266, 100%, 50%, 0.35);\n height: 44px;\n width: 44px;\n border-radius: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: all 0.25s ease;\n}\n\n.card_left-button_2IXDY:hover, .card_right-button_3Py4m:hover {\n box-shadow: 0 0 0 6px hsla(266, 100%, 50%, 0.35);\n transform: scale(1.125);\n}\n\n.card_left-button_2IXDY img, .card_right-button_3Py4m img{\n width: 1.75rem;\n}\n\n.card_left-button_2IXDY {\n left: -27px;\n}\n\n.card_right-button_3Py4m {\n right: -27px;\n}\n\n.card_card_3GG7C {\n border: 1px solid var(--ui-tertiary, hsla(266, 50%, 90%, 1));\n border-radius: 0.75rem;\n display: flex;\n flex-direction: column;\n cursor: move;\n z-index: 20;\n overflow: hidden;\n box-shadow: 0px 5px 25px 5px hsla(0, 0%, 0%, 0.15);\n align-items: center;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n\n.card_header-buttons_3Yq16 {\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n background: hsla(266, 100%, 50%, 1);\n border-bottom: 1px solid hsla(266, 100%, 39%, 1);\n font-size: 0.625rem;\n font-weight: bold;\n}\n\n.card_header-buttons-hidden_3y5Bd {\n border-bottom: 0px;\n}\n\n.card_header-buttons-right_2bzRm {\n display: flex;\n flex-direction: row;\n}\n\n.card_header-buttons_3Yq16 img {\n margin-bottom: 2px;\n}\n\n.card_shrink-expand-button_vbegz {\n cursor: pointer;\n color: white;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 0.75rem;\n}\n\n.card_shrink-expand-button_vbegz:hover, .card_all-button_15rrQ:hover {\n background-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n.card_remove-button_1F8SI, .card_all-button_15rrQ {\n cursor: pointer;\n color: white;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 0.75rem;\n}\n\n.card_remove-button_1F8SI:hover, .card_all-button_15rrQ:hover {\n background-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n.card_step-title_13--3 {\n font-size: 0.9rem;\n margin: 0.9rem;\n text-align: center;\n font-weight: bold;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n}\n\n.card_step-body_2bFkf {\n width: 100%;\n background: hsla(0, 100%, 100%, 1);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n position: relative;\n text-align: center;\n\n /* Min height prevents layout changing when images change */\n min-height: 256px;\n}\n\n.card_step-video_3qH9J {\n height: 256px;\n}\n\n.card_step-image_2_jUv {\n max-width: 450px;\n max-height: 200px;\n object-fit: contain;\n background: #F9F9F9;\n border: 1px solid #ddd;\n border-radius: 0.5rem;\n overflow: hidden;\n margin: 0 0.5rem 0.5rem;\n}\n\n.card_decks_1oD6G {\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n padding: 0 1rem 0.5rem;\n}\n\n.card_deck_2NtVa {\n display: flex;\n flex-direction: column;\n margin: 0 8px 8px;\n cursor: pointer;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.25rem;\n overflow: hidden;\n}\n\n.card_deck-image_1V3q9 {\n width: 200px;\n height: 100px;\n object-fit: cover;\n}\n\n.card_deck-name_1SJhM {\n color: hsla(266, 100%, 50%, 1);\n font-weight: bold;\n font-size: 0.85rem;\n margin: .625rem 0px;\n text-align: center;\n font-weight: bold;\n text-align: center;\n max-width: 200px;\n}\n\n.card_help-icon_1iyk7 {\n height: 1.25rem;\n}\n\n.card_close-icon_1FYf5 {\n height: 1.25rem;\n margin: .125rem 0; /* To offset the .25rem difference in icon size */\n}\n\n[dir=\"ltr\"] .card_help-icon_1iyk7 {\n margin-right: 0.25rem;\n}\n\n[dir=\"rtl\"] .card_help-icon_1iyk7 {\n margin-left: 0.25rem;\n}\n\n[dir=\"ltr\"] .card_close-icon_1FYf5 {\n margin-left: 0.25rem;\n}\n\n[dir=\"rtl\"] .card_close-icon_1FYf5 {\n margin-right: 0.25rem;\n}\n\n.card_see-all_1_E8D {\n display: flex;\n flex-direction: row;\n justify-content: center;\n width: 100%;\n padding: 0.5rem;\n}\n\n.card_see-all-button_3o4U8 {\n cursor: pointer;\n padding: 0.5rem 1rem;\n background-color: hsla(266, 100%, 50%, 1);\n color: white;\n font-weight: bold;\n border-radius: 0.25rem;\n display: flex;\n align-items: center;\n color: hsla(0, 100%, 100%, 1);\n font-size: .75rem;\n font-weight: bold;\n line-height: 1rem;\n text-align: center;\n}\n\n[dir=\"ltr\"] .card_see-all-button_3o4U8 img {\n margin-left: 0.5rem;\n}\n\n[dir=\"rtl\"] .card_see-all-button_3o4U8 img {\n margin-right: 0.5rem;\n}\n\n.card_steps-list_22Q1P {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n}\n\n.card_active-step-pip_I0bxo, .card_inactiveStepPip_2lVp2 {\n width: 0.5rem;\n height: 0.5rem;\n margin: 0 0.25rem;\n border-radius: 100%;\n background: hsla(0, 100%, 100%, 0.25);\n}\n\n.card_active-step-pip_I0bxo {\n background: hsla(0, 100%, 100%, 1);\n box-shadow: 0px 0px 0px 2px hsla(0, 0%, 0%, 0.15);\n}\n\n.card_hidden_Jk77J {\n display: none;\n}\n", ""]); // exports exports.locals = { "card-container-overlay": "card_card-container-overlay_gnjBL", "cardContainerOverlay": "card_card-container-overlay_gnjBL", "card-container": "card_card-container_3_Sbc", "cardContainer": "card_card-container_3_Sbc", "left-card": "card_left-card_1KpEh", "leftCard": "card_left-card_1KpEh", "right-card": "card_right-card_3IrbD", "rightCard": "card_right-card_3IrbD", "left-button": "card_left-button_2IXDY", "leftButton": "card_left-button_2IXDY", "right-button": "card_right-button_3Py4m", "rightButton": "card_right-button_3Py4m", "card": "card_card_3GG7C", "header-buttons": "card_header-buttons_3Yq16", "headerButtons": "card_header-buttons_3Yq16", "header-buttons-hidden": "card_header-buttons-hidden_3y5Bd", "headerButtonsHidden": "card_header-buttons-hidden_3y5Bd", "header-buttons-right": "card_header-buttons-right_2bzRm", "headerButtonsRight": "card_header-buttons-right_2bzRm", "shrink-expand-button": "card_shrink-expand-button_vbegz", "shrinkExpandButton": "card_shrink-expand-button_vbegz", "all-button": "card_all-button_15rrQ", "allButton": "card_all-button_15rrQ", "remove-button": "card_remove-button_1F8SI", "removeButton": "card_remove-button_1F8SI", "step-title": "card_step-title_13--3", "stepTitle": "card_step-title_13--3", "step-body": "card_step-body_2bFkf", "stepBody": "card_step-body_2bFkf", "step-video": "card_step-video_3qH9J", "stepVideo": "card_step-video_3qH9J", "step-image": "card_step-image_2_jUv", "stepImage": "card_step-image_2_jUv", "decks": "card_decks_1oD6G", "deck": "card_deck_2NtVa", "deck-image": "card_deck-image_1V3q9", "deckImage": "card_deck-image_1V3q9", "deck-name": "card_deck-name_1SJhM", "deckName": "card_deck-name_1SJhM", "help-icon": "card_help-icon_1iyk7", "helpIcon": "card_help-icon_1iyk7", "close-icon": "card_close-icon_1FYf5", "closeIcon": "card_close-icon_1FYf5", "see-all": "card_see-all_1_E8D", "seeAll": "card_see-all_1_E8D", "see-all-button": "card_see-all-button_3o4U8", "seeAllButton": "card_see-all-button_3o4U8", "steps-list": "card_steps-list_22Q1P", "stepsList": "card_steps-list_22Q1P", "active-step-pip": "card_active-step-pip_I0bxo", "activeStepPip": "card_active-step-pip_I0bxo", "inactiveStepPip": "card_inactiveStepPip_2lVp2", "hidden": "card_hidden_Jk77J" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/close-button/close-button.css": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/close-button/close-button.css ***! \*************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.close-button_close-button_lOp2G {\n display: flex;\n align-items: center;\n justify-content: center;\n\n overflow: hidden; /* Mask the icon animation */\n background-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 50%;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: pointer;\n transition: all 0.15s ease-out;\n}\n.close-button_close-button_lOp2G.close-button_large_2oadS:hover {\n transform: scale(1.1, 1.1);\n box-shadow: 0 0 0 4px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.close-button_close-button_lOp2G.close-button_large_2oadS.close-button_orange_3I0rs:hover {\n transform: scale(1.1, 1.1);\n box-shadow: 0px 0px 0px 4px hsla(29, 100%, 54%, 0.2);\n}\n.close-button_small_3BsRW {\n width: 0.825rem;\n height: 0.825rem;\n background-color: hsla(266, 100%, 50%, 1);\n color: hsla(0, 100%, 100%, 1);\n}\n.close-button_large_2oadS {\n width: 1.75rem;\n height: 1.75rem;\n box-shadow: 0 0 0 2px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.close-button_large_2oadS.close-button_orange_3I0rs {\n background-color: hsla(29, 100%, 54%, 0.2);\n box-shadow: 0px 0px 0px 2px hsla(29, 100%, 54%, 0.2);\n}\n.close-button_close-icon_HBCuO {\n position: relative;\n margin: 0.25rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n transform-origin: 50%;\n transform: rotate(45deg);\n}\n.close-button_close-icon_HBCuO.close-button_orange_3I0rs {\n transform: rotate(45deg);\n transform: scale(1.4);\n}\n.close-button_small_3BsRW .close-button_close-icon_HBCuO {\n width: 50%;\n}\n.close-button_large_2oadS .close-button_close-icon_HBCuO {\n width: 0.75rem;\n height: 0.75rem;\n}\n.close-button_back-icon_tlcJm {\n position: relative;\n margin: 0.25rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.close-button_small_3BsRW .close-button_back-icon_tlcJm {\n width: 50%;\n}\n.close-button_large_2oadS .close-button_back-icon_tlcJm {\n width: 2rem;\n height: 2rem;\n}\n", ""]); // exports exports.locals = { "close-button": "close-button_close-button_lOp2G", "closeButton": "close-button_close-button_lOp2G", "large": "close-button_large_2oadS", "orange": "close-button_orange_3I0rs", "small": "close-button_small_3BsRW", "close-icon": "close-button_close-icon_HBCuO", "closeIcon": "close-button_close-icon_HBCuO", "back-icon": "close-button_back-icon_tlcJm", "backIcon": "close-button_back-icon_tlcJm" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/coming-soon/coming-soon.css": /*!***********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/coming-soon/coming-soon.css ***! \***********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*\n * NOTE: the copious use of `important` is needed to overwrite\n * the default tooltip styling, and is required by the 3rd party\n * library being used, `react-tooltip`\n */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n\n/* Toolbox z-index: 40; set in scratch-blocks */\n\n/* tooltips should go over add buttons if they overlap */\n\n/* monitors go over add buttons */\n\n/* \"ask\" block text input goes above monitors */\n\n/* menu-bar should go over monitors, alerts and tutorials */\n\n/* tw: show below menu bar normally */\n\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n\n/* so it is draggable into other panes */\n\n/* in most interfaces, the context menu is always on top */\n\n.coming-soon_coming-soon_3x7RD {\n background-color: hsla(266, 100%, 55%, 1) !important;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15)) !important;\n border-radius: calc(0.5rem / 2) !important;\n box-shadow: 0 0 .5rem hsla(0, 0%, 0%, 0.15) !important;\n padding: .75rem 1rem !important;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important;\n font-size: 1rem !important;\n line-height: 1.25rem !important;\n z-index: 47 !important;\n}\n\n.coming-soon_coming-soon_3x7RD:after {\n content: \"\";\n border-top: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15)) !important;\n border-left: 0 !important;\n border-bottom: 0 !important;\n border-right: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15)) !important;\n border-radius: calc(0.5rem / 2);\n background-color: hsla(266, 100%, 55%, 1) !important;\n height: 1rem !important;\n width: 1rem !important;\n}\n\n.coming-soon_show_1Kszm,\n.coming-soon_show_1Kszm:before,\n.coming-soon_show_1Kszm:after {\n opacity: 1 !important;\n}\n\n.coming-soon_left_O4X9A:after {\n margin-top: -.5rem !important;\n right: -.5rem !important;\n transform: rotate(45deg) !important;\n}\n\n.coming-soon_right_1PkI6:after {\n margin-top: -.5rem !important;\n left: -.5rem !important;\n transform: rotate(-135deg) !important;\n}\n\n.coming-soon_top_13j8p:after {\n margin-right: -.5rem !important;\n bottom: -.5rem !important;\n transform: rotate(135deg) !important;\n}\n\n.coming-soon_bottom_2raz4:after {\n margin-left: -.5rem !important;\n top: -.5rem !important;\n transform: rotate(-45deg) !important;\n}\n\n.coming-soon_coming-soon-image_255bz {\n width: 1.25rem;\n height: 1.25rem;\n vertical-align: middle;\n}\n\n[dir=\"ltr\"] .coming-soon_coming-soon-image_255bz {\n margin-left: .125rem;\n}\n\n[dir=\"rtl\"] .coming-soon_coming-soon-image_255bz {\n margin-right: .125rem;\n}\n", ""]); // exports exports.locals = { "coming-soon": "coming-soon_coming-soon_3x7RD", "comingSoon": "coming-soon_coming-soon_3x7RD", "show": "coming-soon_show_1Kszm", "left": "coming-soon_left_O4X9A", "right": "coming-soon_right_1PkI6", "top": "coming-soon_top_13j8p", "bottom": "coming-soon_bottom_2raz4", "coming-soon-image": "coming-soon_coming-soon-image_255bz", "comingSoonImage": "coming-soon_coming-soon-image_255bz" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/connection-modal/connection-modal.css": /*!*********************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/connection-modal/connection-modal.css ***! \*********************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.connection-modal_modal-content_2Xr41 {\n width: 480px;\n}\n.connection-modal_header_3Sf5c {\n background-color: hsla(266, 85%, 40%, 1);\n}\n.connection-modal_body_3YO9j {\n background: hsla(0, 100%, 100%, 1);\n}\n.connection-modal_label_2ci_1 {\n font-weight: 500;\n margin: 0 0 0.75rem;\n}\n.connection-modal_centered-row_LqTYH {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n}\n.connection-modal_peripheral-tile-pane_2pquH {\n overflow-y: auto;\n width: 100%;\n height: 100%;\n}\n.connection-modal_peripheral-tile_3IZvY {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n\n background-color: hsla(0, 100%, 100%, 1);\n border-radius: 0.25rem;\n padding: 10px;\n width: 100%;\n height: 55px;\n margin-bottom: 0.5rem;\n}\n.connection-modal_peripheral-tile-name_3-1ov {\n display: flex;\n align-items: center;\n}\n[dir=\"ltr\"] .connection-modal_peripheral-tile-image_2HAYt {\n margin-right: 0.5rem;\n}\n[dir=\"rtl\"] .connection-modal_peripheral-tile-image_2HAYt {\n margin-left: 0.5rem;\n}\n.connection-modal_peripheral-tile-name-wrapper_LIgB5 {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n}\n.connection-modal_peripheral-tile-name-label_Mhn3z {\n font-weight: bold;\n font-size: 0.625rem;\n}\n.connection-modal_peripheral-tile-name-text_3Gqj9 {\n font-size: 0.875rem;\n}\n.connection-modal_peripheral-tile_3IZvY button {\n padding: 0.6rem 0.75rem;\n border: none;\n border-radius: 0.25rem;\n font-weight: 600;\n font-size: 0.85rem;\n background: hsla(266, 100%, 50%, 1);\n border: hsla(266, 100%, 50%, 1);\n color: white;\n cursor: pointer;\n}\n.connection-modal_signal-strength-meter_17QSz {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n width: 22px;\n height: 16px;\n}\n[dir=\"ltr\"] .connection-modal_signal-strength-meter_17QSz {\n margin-right: 1rem;\n}\n[dir=\"rtl\"] .connection-modal_signal-strength-meter_17QSz {\n margin-left: 1rem;\n}\n.connection-modal_signal-bar_3KRPL {\n width: 4px;\n border-radius: 4px;\n background-color: #DBDBDB;\n}\n.connection-modal_signal-bar_3KRPL:nth-of-type(1) { height: 25%; }\n.connection-modal_signal-bar_3KRPL:nth-of-type(2) { height: 50%; }\n.connection-modal_signal-bar_3KRPL:nth-of-type(3) { height: 75%; }\n.connection-modal_signal-bar_3KRPL:nth-of-type(4) { height: 100%; }\n.connection-modal_green-bar_2DtgQ {\n background-color: hsla(266, 85%, 40%, 1);\n}\n.connection-modal_radar-small_2Zlc3 {\n width: 40px;\n height: 40px;\n}\n[dir=\"ltr\"] .connection-modal_radar-small_2Zlc3 {\n margin-right: 0.5rem;\n}\n[dir=\"rtl\"] .connection-modal_radar-small_2Zlc3 {\n margin-left: 0.5rem;\n}\n.connection-modal_radar-big_1ZqZR {\n width: 120px;\n height: 120px;\n}\n.connection-modal_radar-spin_XTY3A {\n animation: connection-modal_spin_2AmoW 4s linear infinite;\n}\n[dir=\"ltr\"] .connection-modal_radar_1q6t4 {\n margin-right: .5rem;\n}\n[dir=\"rtl\"] .connection-modal_radar_1q6t4 {\n margin-left: .5rem;\n}\n@keyframes connection-modal_spin_2AmoW {\n 100% {\n transform: rotate(360deg);\n }\n}\n.connection-modal_peripheral-activity_1iEPn {\n position: relative;\n}\n.connection-modal_peripheral-activity-icon_2yzrQ {\n /* width: 80px;\n height: 80px; */\n}\n.connection-modal_connection-tip-icon_1OYH1 {\n position: absolute;\n}\n.connection-modal_bluetooth-connecting-icon_2WC-p {\n position: absolute;\n top: -5px;\n right: -15px;\n left: -15px;\n padding: 5px 5px;\n background-color: hsla(266, 100%, 50%, 1);\n border-radius: 100%;\n box-shadow: 0px 0px 0px 4px hsla(266, 100%, 50%, 0.35);\n /* animation: pulse-blue-ring 1s infinite ease-in-out alternate; */\n animation: connection-modal_wiggle_3PIQs 0.5s infinite ease-in-out alternate;\n\n}\n@keyframes connection-modal_pulse-blue-ring_Bst8a {\n 100% {\n box-shadow: 0px 0px 0px 8px hsla(266, 100%, 39%, 0.15);\n }\n}\n.connection-modal_bluetooth-connected-icon_2z3Cp {\n position: absolute;\n top: -5px;\n right: -15px;\n left: -15px;\n padding: 5px 5px;\n background-color: hsla(266, 85%, 40%, 1);\n border-radius: 100%;\n box-shadow: 0px 0px 0px 4px hsla(266, 85%, 40%, 0.25);\n}\n@keyframes connection-modal_wiggle_3PIQs {\n 0% {transform: rotate(3deg) scale(1.05);}\n 25% {transform: rotate(-3deg) scale(1.05);}\n 50% {transform: rotate(5deg) scale(1.05);}\n 75% {transform: rotate(-2deg) scale(1.05);}\n 100% {transform: rotate(0deg) scale(1.05);}\n}\n.connection-modal_bluetooth-centered-icon_2sUnm {\n position: absolute;\n padding: 5px 5px;\n background-color: hsla(266, 100%, 50%, 1);\n border-radius: 100%;\n box-shadow: 0px 0px 0px 2px hsla(266, 100%, 50%, 0.35);\n}\n.connection-modal_peripheral-tile-widgets_2czb9 {\n display: flex;\n align-items: center;\n}\n.connection-modal_activityArea_2nx-Z {\n height: 165px;\n background-color: hsla(266, 100%, 39%, 0.15);\n display: flex;\n justify-content: center;\n align-items: center;\n padding: .5rem;\n}\n.connection-modal_scratch-link-help_1v8tL {\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n height: 100%;\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n.connection-modal_scratch-link-help-step_bWMuI {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n}\n[dir=\"ltr\"] .connection-modal_scratch-link-help-step_bWMuI {\n margin-left: 2.5rem;\n}\n[dir=\"rtl\"] .connection-modal_scratch-link-help-step_bWMuI {\n margin-right: 2.5rem;\n}\n.connection-modal_scratch-link-icon_dnIoA {\n max-width: 50px;\n}\n[dir=\"ltr\"] .connection-modal_help-step-image_h76rv {\n margin-right: 0.5rem;\n}\n[dir=\"rtl\"] .connection-modal_help-step-image_h76rv {\n margin-left: 0.5rem;\n}\n.connection-modal_help-step-number_2tyWJ {\n background: hsla(266, 85%, 40%, 1);\n border-radius: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n color: hsla(0, 100%, 100%, 1);\n font-weight: bold;\n min-width: 2rem;\n height: 2rem;\n}\n[dir=\"ltr\"] .connection-modal_help-step-number_2tyWJ {\n margin-right: 0.5rem;\n}\n[dir=\"rtl\"] .connection-modal_help-step-number_2tyWJ {\n margin-left: 0.5rem;\n}\n.connection-modal_button-row_2RA0A {\n font-weight: bolder;\n text-align: center;\n display: flex;\n}\n.connection-modal_abort-connecting-icon_1KMRE {\n width: 10px;\n transform: rotate(45deg);\n}\n.connection-modal_connection-button_1paxF {\n padding: 0.6rem 0.75rem;\n border-radius: 0.5rem;\n background: hsla(266, 100%, 50%, 1);\n color: white;\n font-weight: 600;\n font-size: 0.85rem;\n margin: 0.25rem;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n.connection-modal_connection-button_1paxF:disabled {\n background: hsla(266, 100%, 50%, 0.35);\n}\n.connection-modal_segmented-button_XNf80 {\n display: flex;\n}\n.connection-modal_segmented-button_XNf80 .connection-modal_connection-button_1paxF:first-of-type {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n margin-right: 0;\n}\n.connection-modal_segmented-button_XNf80 .connection-modal_connection-button_1paxF:last-of-type {\n margin-left: 1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n[dir=\"ltr\"] .connection-modal_button-icon-right_1CANn {\n margin-left: 0.5rem;\n}\n[dir=\"rtl\"] .connection-modal_button-icon-right_1CANn {\n margin-right: 0.5rem;\n}\n[dir=\"ltr\"] .connection-modal_button-icon-left_2Ys4V {\n margin-right: 0.5rem;\n}\n[dir=\"rtl\"] .connection-modal_button-icon-left_2Ys4V {\n margin-left: 0.5rem;\n}\n/* reverse back arrow icon for RTL, don't reverse other connection icons */\n[dir=\"rtl\"] .connection-modal_button-icon-back_3voGy {\n transform: scaleX(-1);\n}\n.connection-modal_red-button_MpXr- {\n background: hsla(266, 100%, 50%, 1);\n}\n.connection-modal_corner-buttons_2ciJI {\n display: flex;\n justify-content: space-between;\n width: 100%;\n padding: 0 1rem;\n}\n.connection-modal_bottom-area_AHeQ3 {\n background-color: hsla(0, 100%, 100%, 1);\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 1rem;\n padding-bottom: .75rem;\n padding-left: .75rem;\n padding-right: .75rem;\n}\n.connection-modal_bottom-area_AHeQ3 .connection-modal_bottom-area-item_YR2oh+.connection-modal_bottom-area-item_YR2oh {\n margin-top: 1rem;\n}\n.connection-modal_instructions_1CxAa {\n text-align: center;\n}\n.connection-modal_dots-row_39YWr {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n}\n.connection-modal_dots-holder_2kY6c {\n display: flex;\n padding: 0.25rem 0.1rem;\n border-radius: 1rem;\n background: hsla(266, 100%, 39%, 0.15);\n}\n.connection-modal_dots-holder-success_20EtT {\n background: hsla(266, 85%, 40%, 0.25);\n}\n.connection-modal_dots-holder-error_3iK2w {\n background: hsla(266, 100%, 55%, 0.25);\n}\n.connection-modal_dot_2GsnJ {\n width: 0.5rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n border-radius: 100%;\n}\n.connection-modal_inactive-step-dot_1x6LP {\n background: hsla(266, 100%, 50%, 0.35);\n}\n.connection-modal_active-step-dot_yLC0o {\n background: hsla(266, 100%, 50%, 1);\n}\n.connection-modal_success-dot_30FlH {\n background: hsla(266, 85%, 40%, 1);\n}\n.connection-modal_error-dot_1NdiS {\n background: hsla(266, 100%, 55%, 1);\n}\n", ""]); // exports exports.locals = { "modal-content": "connection-modal_modal-content_2Xr41", "modalContent": "connection-modal_modal-content_2Xr41", "header": "connection-modal_header_3Sf5c", "body": "connection-modal_body_3YO9j", "label": "connection-modal_label_2ci_1", "centered-row": "connection-modal_centered-row_LqTYH", "centeredRow": "connection-modal_centered-row_LqTYH", "peripheral-tile-pane": "connection-modal_peripheral-tile-pane_2pquH", "peripheralTilePane": "connection-modal_peripheral-tile-pane_2pquH", "peripheral-tile": "connection-modal_peripheral-tile_3IZvY", "peripheralTile": "connection-modal_peripheral-tile_3IZvY", "peripheral-tile-name": "connection-modal_peripheral-tile-name_3-1ov", "peripheralTileName": "connection-modal_peripheral-tile-name_3-1ov", "peripheral-tile-image": "connection-modal_peripheral-tile-image_2HAYt", "peripheralTileImage": "connection-modal_peripheral-tile-image_2HAYt", "peripheral-tile-name-wrapper": "connection-modal_peripheral-tile-name-wrapper_LIgB5", "peripheralTileNameWrapper": "connection-modal_peripheral-tile-name-wrapper_LIgB5", "peripheral-tile-name-label": "connection-modal_peripheral-tile-name-label_Mhn3z", "peripheralTileNameLabel": "connection-modal_peripheral-tile-name-label_Mhn3z", "peripheral-tile-name-text": "connection-modal_peripheral-tile-name-text_3Gqj9", "peripheralTileNameText": "connection-modal_peripheral-tile-name-text_3Gqj9", "signal-strength-meter": "connection-modal_signal-strength-meter_17QSz", "signalStrengthMeter": "connection-modal_signal-strength-meter_17QSz", "signal-bar": "connection-modal_signal-bar_3KRPL", "signalBar": "connection-modal_signal-bar_3KRPL", "green-bar": "connection-modal_green-bar_2DtgQ", "greenBar": "connection-modal_green-bar_2DtgQ", "radar-small": "connection-modal_radar-small_2Zlc3", "radarSmall": "connection-modal_radar-small_2Zlc3", "radar-big": "connection-modal_radar-big_1ZqZR", "radarBig": "connection-modal_radar-big_1ZqZR", "radar-spin": "connection-modal_radar-spin_XTY3A", "radarSpin": "connection-modal_radar-spin_XTY3A", "spin": "connection-modal_spin_2AmoW", "radar": "connection-modal_radar_1q6t4", "peripheral-activity": "connection-modal_peripheral-activity_1iEPn", "peripheralActivity": "connection-modal_peripheral-activity_1iEPn", "peripheral-activity-icon": "connection-modal_peripheral-activity-icon_2yzrQ", "peripheralActivityIcon": "connection-modal_peripheral-activity-icon_2yzrQ", "connection-tip-icon": "connection-modal_connection-tip-icon_1OYH1", "connectionTipIcon": "connection-modal_connection-tip-icon_1OYH1", "bluetooth-connecting-icon": "connection-modal_bluetooth-connecting-icon_2WC-p", "bluetoothConnectingIcon": "connection-modal_bluetooth-connecting-icon_2WC-p", "wiggle": "connection-modal_wiggle_3PIQs", "bluetooth-connected-icon": "connection-modal_bluetooth-connected-icon_2z3Cp", "bluetoothConnectedIcon": "connection-modal_bluetooth-connected-icon_2z3Cp", "bluetooth-centered-icon": "connection-modal_bluetooth-centered-icon_2sUnm", "bluetoothCenteredIcon": "connection-modal_bluetooth-centered-icon_2sUnm", "peripheral-tile-widgets": "connection-modal_peripheral-tile-widgets_2czb9", "peripheralTileWidgets": "connection-modal_peripheral-tile-widgets_2czb9", "activityArea": "connection-modal_activityArea_2nx-Z", "scratch-link-help": "connection-modal_scratch-link-help_1v8tL", "scratchLinkHelp": "connection-modal_scratch-link-help_1v8tL", "scratch-link-help-step": "connection-modal_scratch-link-help-step_bWMuI", "scratchLinkHelpStep": "connection-modal_scratch-link-help-step_bWMuI", "scratch-link-icon": "connection-modal_scratch-link-icon_dnIoA", "scratchLinkIcon": "connection-modal_scratch-link-icon_dnIoA", "help-step-image": "connection-modal_help-step-image_h76rv", "helpStepImage": "connection-modal_help-step-image_h76rv", "help-step-number": "connection-modal_help-step-number_2tyWJ", "helpStepNumber": "connection-modal_help-step-number_2tyWJ", "button-row": "connection-modal_button-row_2RA0A", "buttonRow": "connection-modal_button-row_2RA0A", "abort-connecting-icon": "connection-modal_abort-connecting-icon_1KMRE", "abortConnectingIcon": "connection-modal_abort-connecting-icon_1KMRE", "connection-button": "connection-modal_connection-button_1paxF", "connectionButton": "connection-modal_connection-button_1paxF", "segmented-button": "connection-modal_segmented-button_XNf80", "segmentedButton": "connection-modal_segmented-button_XNf80", "button-icon-right": "connection-modal_button-icon-right_1CANn", "buttonIconRight": "connection-modal_button-icon-right_1CANn", "button-icon-left": "connection-modal_button-icon-left_2Ys4V", "buttonIconLeft": "connection-modal_button-icon-left_2Ys4V", "button-icon-back": "connection-modal_button-icon-back_3voGy", "buttonIconBack": "connection-modal_button-icon-back_3voGy", "red-button": "connection-modal_red-button_MpXr-", "redButton": "connection-modal_red-button_MpXr-", "corner-buttons": "connection-modal_corner-buttons_2ciJI", "cornerButtons": "connection-modal_corner-buttons_2ciJI", "bottom-area": "connection-modal_bottom-area_AHeQ3", "bottomArea": "connection-modal_bottom-area_AHeQ3", "bottom-area-item": "connection-modal_bottom-area-item_YR2oh", "bottomAreaItem": "connection-modal_bottom-area-item_YR2oh", "instructions": "connection-modal_instructions_1CxAa", "dots-row": "connection-modal_dots-row_39YWr", "dotsRow": "connection-modal_dots-row_39YWr", "dots-holder": "connection-modal_dots-holder_2kY6c", "dotsHolder": "connection-modal_dots-holder_2kY6c", "dots-holder-success": "connection-modal_dots-holder-success_20EtT", "dotsHolderSuccess": "connection-modal_dots-holder-success_20EtT", "dots-holder-error": "connection-modal_dots-holder-error_3iK2w", "dotsHolderError": "connection-modal_dots-holder-error_3iK2w", "dot": "connection-modal_dot_2GsnJ", "inactive-step-dot": "connection-modal_inactive-step-dot_1x6LP", "inactiveStepDot": "connection-modal_inactive-step-dot_1x6LP", "active-step-dot": "connection-modal_active-step-dot_yLC0o", "activeStepDot": "connection-modal_active-step-dot_yLC0o", "success-dot": "connection-modal_success-dot_30FlH", "successDot": "connection-modal_success-dot_30FlH", "error-dot": "connection-modal_error-dot_1NdiS", "errorDot": "connection-modal_error-dot_1NdiS", "pulse-blue-ring": "connection-modal_pulse-blue-ring_Bst8a", "pulseBlueRing": "connection-modal_pulse-blue-ring_Bst8a" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/context-menu/context-menu.css": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/context-menu/context-menu.css ***! \*************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n.context-menu_context-menu_2SJM- {\n min-width: 130px;\n padding: 5px 0; /* The white strip at the top and bottom of the menu */\n margin: 2px 0 0; /* To keep the menu below the cursor comfortably */\n font-size: 0.85rem;\n text-align: left;\n background-color: hsla(0, 100%, 100%, 1);\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: calc(0.5rem / 2);\n box-shadow: 0px 0px 5px 1px hsla(0, 0%, 0%, 0.15);\n pointer-events: none;\n transition: opacity 0.2s ease;\n z-index: 10000;\n}\n[theme=\"dark\"] .context-menu_context-menu_2SJM- {\n background-color: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.context-menu_menu-item_3cioN {\n padding: 8px 12px;\n white-space: nowrap;\n cursor: pointer;\n transition: 0.1s ease;\n}\n.context-menu_menu-item_3cioN:hover {\n background: hsla(266, 100%, 50%, 1);\n color: white;\n}\n.context-menu_menu-item-bordered_29CJG {\n border-top: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n[theme=\"dark\"] .context-menu_menu-item-bordered_29CJG {\n border-color: var(--ui-tertiary, hsla(266, 50%, 90%, 1));\n}\n.context-menu_menu-item-danger_1tJg0:hover {\n background: hsla(266, 100%, 55%, 1);\n}\n", ""]); // exports exports.locals = { "context-menu": "context-menu_context-menu_2SJM-", "contextMenu": "context-menu_context-menu_2SJM-", "menu-item": "context-menu_menu-item_3cioN", "menuItem": "context-menu_menu-item_3cioN", "menu-item-bordered": "context-menu_menu-item-bordered_29CJG", "menuItemBordered": "context-menu_menu-item-bordered_29CJG", "menu-item-danger": "context-menu_menu-item-danger_1tJg0", "menuItemDanger": "context-menu_menu-item-danger_1tJg0" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/controls/controls.css": /*!*****************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/controls/controls.css ***! \*****************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".controls_controls-container_2xinB {\n display: flex;\n}\n", ""]); // exports exports.locals = { "controls-container": "controls_controls-container_2xinB", "controlsContainer": "controls_controls-container_2xinB" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/crash-message/crash-message.css": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/crash-message/crash-message.css ***! \***************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\nh2 {\n font-size: 1.5rem;\n font-weight: bold;\n}\np {\n font-size: 1rem;\n line-height: 1.5em;\n}\n.crash-message_crash-wrapper_25B61 {\n background-color: hsla(266, 100%, 50%, 1);\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n[theme=\"dark\"] .crash-message_crash-wrapper_25B61 {\n background-color: #5500cc;\n}\n.crash-message_body_1q0lu {\n width: 50%;\n color: white;\n text-align: center;\n}\n.crash-message_reloadButton_FoS7x {\n border: 1px solid hsla(266, 100%, 50%, 1);\n border-radius: 0.25rem;\n padding: 0.5rem 2rem;\n background: white;\n color: hsla(266, 100%, 50%, 1);\n font-weight: bold;\n font-size: 0.875rem;\n cursor: pointer;\n}\n.crash-message_header_1tEXc {\n font-size: 1.5em;\n font-weight: bold;\n}\n.crash-message_error-message_1pX4X {\n font-family: monospace;\n}\n", ""]); // exports exports.locals = { "crash-wrapper": "crash-message_crash-wrapper_25B61", "crashWrapper": "crash-message_crash-wrapper_25B61", "body": "crash-message_body_1q0lu", "reloadButton": "crash-message_reloadButton_FoS7x", "header": "crash-message_header_1tEXc", "error-message": "crash-message_error-message_1pX4X", "errorMessage": "crash-message_error-message_1pX4X" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/custom-procedures/custom-procedures.css": /*!***********************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/custom-procedures/custom-procedures.css ***! \***********************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.custom-procedures_modal-content_Zjko5 {\n width: 700px;\n margin: 50px auto; /* This modal is taller than most, reduce top margin */\n}\n.custom-procedures_body_SQBv6 {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n}\n[theme=\"dark\"] .custom-procedures_body_SQBv6 {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n}\n.custom-procedures_body_SQBv6 input[type=\"checkbox\"],\n.custom-procedures_body_SQBv6 input[type=\"radio\"] {\n margin: 3px;\n}\n.custom-procedures_color-picker-area_1Nzf- {\n width: 100%;\n padding: 8px;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.custom-procedures_color-picker-area_1Nzf- > div:nth-child(1),\n.custom-procedures_color-picker-area_1Nzf- > div:nth-child(2) {\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-evenly;\n}\n/* .color-picker-area div:nth-child(1) {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n[theme=\"dark\"] .color-picker-area div:nth-child(1) {\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n} */\n/* Color inputs & color swatch */\n.custom-procedures_body_SQBv6 input[type=\"color\"] {\n appearance: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n background: none;\n padding: 0;\n border: 0 !important;\n cursor: pointer;\n}\n::-webkit-color-swatch-wrapper {\n margin: 0;\n padding: 0;\n}\n::-webkit-color-swatch {\n margin: 0;\n border-radius: 100%;\n border: 2px solid rgba(0, 0, 0, 0.2);\n overflow: none;\n padding: 0;\n}\n::-moz-color-swatch {\n margin: 0;\n border-radius: 100%;\n border: 2px solid rgba(0, 0, 0, 0.2);\n overflow: none;\n padding: 0;\n}\n[theme=\"dark\"] ::-webkit-color-swatch {\n border-color: white;\n}\n[theme=\"dark\"] ::-moz-color-swatch {\n border-color: white;\n}\n::-moz-focus-inner {\n margin: 0;\n border: 0;\n}\n::-moz-focus-inner {\n margin: 0;\n padding: 0;\n}\n/* Preset color options */\n.custom-procedures_preset-color_3d50M {\n border: 2px solid rgba(0, 0, 0, 0.2);\n margin: 4px;\n border-radius: 100%;\n width: 2.5em;\n height: 2.5em;\n}\n/* prevent soft-looking colors */\n[theme=\"dark\"] .custom-procedures_preset-color_3d50M {\n border-color: white;\n}\n.custom-procedures_parent-custom_10Qqs {\n margin: 4px;\n width: 2.5em;\n height: 2.5em;\n position: relative;\n}\n.custom-procedures_parent-custom_10Qqs > .custom-procedures_preset-color_3d50M {\n margin: 0;\n width: 100%;\n height: 100%;\n}\n.custom-procedures_custom-plus_2U0kA {\n position: absolute;\n left: 4px;\n top: 4px;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n z-index: 500;\n pointer-events: none;\n}\n.custom-procedures_preset-color_3d50M:active {\n transform: scale(0.7);\n transition-duration: 0.1s;\n transition-timing-function: ease-out;\n transition-property: transform;\n}\n.custom-procedures_preset-color_3d50M {\n transition-duration: 0.3s;\n transition-timing-function: cubic-bezier(0, 0, 0.24, 1.83);\n transition-property: transform;\n}\n/* Blocks workspace for custom procedure declaration editor */\n.custom-procedures_workspace_1d2uW {\n min-height: 200px;\n position: relative;\n}\n.custom-procedures_workspace_1d2uW .injectionDiv{\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.custom-procedures_workspace_1d2uW .blocklySvg {\n background-color: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n/* Row of \"card\" buttons for modifying custom procedures */\n.custom-procedures_options-row_1PqLE {\n display: flex;\n justify-content: space-between;\n}\n.custom-procedures_option-card_BtHt3 {\n background: white;\n border: 2px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.5rem;\n padding: calc(0.5rem * 2);\n text-align: center;\n flex-grow: 1;\n cursor: pointer;\n transition: all 0.2s;\n flex-basis: 100px;\n}\n[theme=\"dark\"] .custom-procedures_option-card_BtHt3 {\n background: var(--ui-tertiary, hsla(266, 50%, 90%, 1));\n}\n.custom-procedures_option-card_BtHt3:hover {\n border: 2px solid hsla(266, 100%, 50%, 1);\n box-shadow: 0px 0px 0px 4px hsla(266, 100%, 50%, 0.35);\n}\n.custom-procedures_option-card_BtHt3 + .custom-procedures_option-card_BtHt3 {\n margin-left: 1rem;\n}\n.custom-procedures_option-icon_2y7hh {\n max-height: 48px;\n margin-bottom: 0.5rem;\n}\n.custom-procedures_option-title_3v6va {\n font-weight: bold;\n}\n/* \"Run without screen refresh\" row */\n/* .checkbox-row {\n margin-top: 1rem;\n} */\n/* Confirmation buttons at the bottom of the modal */\n.custom-procedures_button-row_2jBu3 {\n margin-top: 1rem;\n font-weight: bolder;\n text-align: right;\n}\n.custom-procedures_button-row_2jBu3 button {\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.25rem;\n padding: 0.75rem 1rem;\n background: white;\n font-weight: bold;\n font-size: 0.85rem;\n}\n.custom-procedures_button-row_2jBu3 button.custom-procedures_ok-button_2X0Vj {\n background: hsla(266, 100%, 50%, 1);\n border: hsla(266, 100%, 50%, 1);\n color: white;\n}\n[dir=\"ltr\"] .custom-procedures_button-row_2jBu3 button + button {\n margin-left: 0.5rem;\n}\n[dir=\"rtl\"] .custom-procedures_button-row_2jBu3 button + button {\n margin-right: 0.5rem;\n}\n.custom-procedures_cancel-button_wlEX9 {\n color: black;\n}\n", ""]); // exports exports.locals = { "modal-content": "custom-procedures_modal-content_Zjko5", "modalContent": "custom-procedures_modal-content_Zjko5", "body": "custom-procedures_body_SQBv6", "color-picker-area": "custom-procedures_color-picker-area_1Nzf-", "colorPickerArea": "custom-procedures_color-picker-area_1Nzf-", "preset-color": "custom-procedures_preset-color_3d50M", "presetColor": "custom-procedures_preset-color_3d50M", "parent-custom": "custom-procedures_parent-custom_10Qqs", "parentCustom": "custom-procedures_parent-custom_10Qqs", "custom-plus": "custom-procedures_custom-plus_2U0kA", "customPlus": "custom-procedures_custom-plus_2U0kA", "workspace": "custom-procedures_workspace_1d2uW", "options-row": "custom-procedures_options-row_1PqLE", "optionsRow": "custom-procedures_options-row_1PqLE", "option-card": "custom-procedures_option-card_BtHt3", "optionCard": "custom-procedures_option-card_BtHt3", "option-icon": "custom-procedures_option-icon_2y7hh", "optionIcon": "custom-procedures_option-icon_2y7hh", "option-title": "custom-procedures_option-title_3v6va", "optionTitle": "custom-procedures_option-title_3v6va", "button-row": "custom-procedures_button-row_2jBu3", "buttonRow": "custom-procedures_button-row_2jBu3", "ok-button": "custom-procedures_ok-button_2X0Vj", "okButton": "custom-procedures_ok-button_2X0Vj", "cancel-button": "custom-procedures_cancel-button_wlEX9", "cancelButton": "custom-procedures_cancel-button_wlEX9" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/delete-button/delete-button.css": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/delete-button/delete-button.css ***! \***************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n/* wrapper to allow for touch slop if we decide to add it */\n.delete-button_delete-button_2Nzko {\n display: flex;\n align-items: center;\n justify-content: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: pointer;\n transition: all 0.15s ease-out;\n}\n.delete-button_delete-button-visible_kym6v {\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden; /* Mask the icon animation */\n width: 1.75rem;\n height: 1.75rem;\n box-shadow: 0px 0px 0px 2px hsla(266, 100%, 50%, 0.35);\n background-color: hsla(266, 100%, 50%, 1);\n color: hsla(0, 100%, 100%, 1);\n border-radius: 50%;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: pointer;\n transition: all 0.15s ease-out;\n}\n.delete-button_delete-icon_3b8wH {\n position: relative;\n margin: 0.25rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n transform-origin: 50%;\n}\n", ""]); // exports exports.locals = { "delete-button": "delete-button_delete-button_2Nzko", "deleteButton": "delete-button_delete-button_2Nzko", "delete-button-visible": "delete-button_delete-button-visible_kym6v", "deleteButtonVisible": "delete-button_delete-button-visible_kym6v", "delete-icon": "delete-button_delete-icon_3b8wH", "deleteIcon": "delete-button_delete-icon_3b8wH" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/direction-picker/dial.css": /*!*********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/direction-picker/dial.css ***! \*********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.dial_container_3hox- {\n padding: 1rem;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.dial_dial-container_ktOnA {\n position: relative;\n}\n.dial_dial-face_3NuSA, .dial_dial-handle_1tfZT, .dial_gauge_3g5NZ {\n position: absolute;\n top: 0;\n left: 0;\n overflow: visible;\n}\n.dial_dial-face_3NuSA {\n width: 100%;\n}\n.dial_dial-handle_1tfZT {\n cursor: pointer;\n width: 40px;\n height: 40px;\n /* Use margin to make positioning via top/left easier */\n margin-left: calc(40px / -2);\n margin-top: calc(40px / -2);\n}\n.dial_gauge-path_1WoJ6 {\n fill: hsla(266, 100%, 50%, 0.35);\n stroke: hsla(266, 100%, 50%, 1);\n stroke-width: 1px;\n}\n", ""]); // exports exports.locals = { "container": "dial_container_3hox-", "dial-container": "dial_dial-container_ktOnA", "dialContainer": "dial_dial-container_ktOnA", "dial-face": "dial_dial-face_3NuSA", "dialFace": "dial_dial-face_3NuSA", "dial-handle": "dial_dial-handle_1tfZT", "dialHandle": "dial_dial-handle_1tfZT", "gauge": "dial_gauge_3g5NZ", "gauge-path": "dial_gauge-path_1WoJ6", "gaugePath": "dial_gauge-path_1WoJ6" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/direction-picker/direction-picker.css": /*!*********************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/direction-picker/direction-picker.css ***! \*********************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* Copied from scratch-paint color-picker.css. */\n.Popover-body {\n background: white;\n border: 1px solid #ddd;\n padding: 4px;\n border-radius: 4px;\n padding: 4px;\n box-shadow: 0px 0px 8px 1px rgba(0, 0, 0, .3);\n}\n.Popover-tipShape {\n fill: white;\n stroke: #ddd;\n}\n.direction-picker_button-row_1DF8U {\n display: flex;\n flex-direction: row;\n justify-content: center;\n\n}\n.direction-picker_icon-button_1y9Rd {\n margin: 0.25rem;\n border: none;\n background: none;\n outline: none;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.direction-picker_icon-button_1y9Rd:active > img {\n width: 20px;\n height: 20px;\n transform: scale(1.15);\n}\n.direction-picker_icon-button_1y9Rd > img {\n transition: transform 0.1s;\n filter: grayscale(100%);\n}\n.direction-picker_icon-button_1y9Rd.direction-picker_active_10_kJ > img {\n filter: none;\n}\n", ""]); // exports exports.locals = { "button-row": "direction-picker_button-row_1DF8U", "buttonRow": "direction-picker_button-row_1DF8U", "icon-button": "direction-picker_icon-button_1y9Rd", "iconButton": "direction-picker_icon-button_1y9Rd", "active": "direction-picker_active_10_kJ" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/divider/divider.css": /*!***************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/divider/divider.css ***! \***************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.divider_divider_1_Adi {\n border-right: 1px dashed var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n", ""]); // exports exports.locals = { "divider": "divider_divider_1_Adi" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/drag-layer/drag-layer.css": /*!*********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/drag-layer/drag-layer.css ***! \*********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n\n/* Toolbox z-index: 40; set in scratch-blocks */\n\n/* tooltips should go over add buttons if they overlap */\n\n/* monitors go over add buttons */\n\n/* \"ask\" block text input goes above monitors */\n\n/* menu-bar should go over monitors, alerts and tutorials */\n\n/* tw: show below menu bar normally */\n\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n\n/* so it is draggable into other panes */\n\n/* in most interfaces, the context menu is always on top */\n\n.drag-layer_drag-layer_3Xec- {\n position: fixed;\n pointer-events: none;\n z-index: 1000;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n direction: ltr;\n}\n\n.drag-layer_image-wrapper_2iRP3 {\n /* Absolute allows wrapper to snuggly fit image */\n position: absolute;\n}\n\n.drag-layer_image_1inbS {\n max-width: 80px;\n max-height: 80px;\n min-width: 50px;\n min-height: 50px;\n\n /* Center the dragging image on the given position */\n margin-left: -50%;\n margin-top: -50%;\n\n padding: 0.25rem;\n border: 2px solid hsla(266, 100%, 50%, 1);\n background: hsla(0, 100%, 100%, 1);\n border-radius: 0.5rem;\n\n /* Use the same drop shadow as stage dragging */\n box-shadow: 5px 5px 5px hsla(0, 0%, 0%, 0.15);\n}\n", ""]); // exports exports.locals = { "drag-layer": "drag-layer_drag-layer_3Xec-", "dragLayer": "drag-layer_drag-layer_3Xec-", "image-wrapper": "drag-layer_image-wrapper_2iRP3", "imageWrapper": "drag-layer_image-wrapper_2iRP3", "image": "drag-layer_image_1inbS" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/filter/filter.css": /*!*************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/filter/filter.css ***! \*************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n.filter_filter_1JFal {\n display: flex;\n flex-direction: row;\n align-items: center;\n flex-grow: 1;\n\n background: hsla(0, 100%, 100%, 1);\n border-radius: 10rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n height: 2.5rem;\n\n position: relative;\n}\n\n[theme=\"dark\"] .filter_filter_1JFal {\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n\n.filter_filter-icon_3Pfaw {\n position: absolute;\n top: 0;\n\n height: 1rem;\n width: 1rem;\n}\n\n[dir=\"ltr\"] .filter_filter-icon_3Pfaw {\n left: 0;\n margin: 0.75rem 0.75rem 0.75rem 1rem;\n}\n\n[dir=\"rtl\"] .filter_filter-icon_3Pfaw {\n right: 0;\n margin: 0.75rem 1rem 0.75rem 0.75rem;\n transform: scaleX(-1);\n}\n\n.filter_filter_1JFal:focus-within {\n box-shadow: 0 0 0 .25rem hsla(266, 100%, 50%, 0.35);\n}\n\n/*\n Hidden state\n*/\n\n.filter_x-icon-wrapper_1rP2w {\n opacity: 0;\n position: absolute;\n top: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n overflow: hidden; /* Mask the icon animation */\n height: 1.25rem;\n width: 1.25rem;\n margin: 0.625rem;\n\n border-radius: 50%;\n pointer-events: none;\n cursor: default;\n transition: opacity 0.05s linear;\n}\n\n[dir=\"ltr\"] .filter_x-icon-wrapper_1rP2w {\n right: 0;\n}\n\n[dir=\"rtl\"] .filter_x-icon-wrapper_1rP2w {\n left: 0;\n}\n\n/*\n Shown state\n*/\n\n.filter_filter_1JFal.filter_is-active_3PvfA .filter_x-icon-wrapper_1rP2w {\n pointer-events: auto;\n cursor: pointer;\n opacity: 1;\n transition: opacity 0.05s linear;\n}\n\n.filter_filter_1JFal.filter_is-active_3PvfA .filter_x-icon-wrapper_1rP2w:hover {\n transform: scale(1.2, 1.2);\n}\n\n/*\n Hidden state\n*/\n\n.filter_x-icon_zjpOg {\n position: relative;\n margin: 0.25rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n transform: translateX(0.5rem);\n transition: transform 0.085s cubic-bezier(0.78, 1, 1, 1);\n}\n\n/*\n Shown state\n*/\n\n.filter_filter_1JFal.filter_is-active_3PvfA .filter_x-icon-wrapper_1rP2w .filter_x-icon_zjpOg {\n transform: translateX(0);\n}\n\n.filter_filter-input_1iiEt {\n flex-grow: 1;\n height: 2.5rem;\n background-color: transparent;\n -webkit-appearance: none;\n outline: none;\n border: 0;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n font-size: 0.75rem;\n letter-spacing: 0.15px;\n cursor: text;\n}\n\n[dir=\"ltr\"] .filter_filter-input_1iiEt {\n padding: .625rem 2rem .625rem 3rem;\n}\n\n[dir=\"rtl\"] .filter_filter-input_1iiEt {\n padding: .625rem 3rem .625rem 2rem;\n}\n\n.filter_filter-input_1iiEt::-ms-input-placeholder {\n opacity: .5;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n font-size: 0.875rem;\n letter-spacing: 0.15px;\n}\n\n.filter_filter-input_1iiEt::placeholder {\n opacity: .5;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n font-size: 0.875rem;\n letter-spacing: 0.15px;\n}\n\n[dir=\"ltr\"] .filter_filter-input_1iiEt::-ms-input-placeholder {\n padding: 0 0 0 0.25rem;\n}\n\n[dir=\"ltr\"] .filter_filter-input_1iiEt::placeholder {\n padding: 0 0 0 0.25rem;\n}\n\n[dir=\"rtl\"] .filter_filter-input_1iiEt::-ms-input-placeholder {\n padding: 0 0.25rem 0 0;\n}\n\n[dir=\"rtl\"] .filter_filter-input_1iiEt::placeholder {\n padding: 0 0.25rem 0 0;\n}\n", ""]); // exports exports.locals = { "filter": "filter_filter_1JFal", "filter-icon": "filter_filter-icon_3Pfaw", "filterIcon": "filter_filter-icon_3Pfaw", "x-icon-wrapper": "filter_x-icon-wrapper_1rP2w", "xIconWrapper": "filter_x-icon-wrapper_1rP2w", "is-active": "filter_is-active_3PvfA", "isActive": "filter_is-active_3PvfA", "x-icon": "filter_x-icon_zjpOg", "xIcon": "filter_x-icon_zjpOg", "filter-input": "filter_filter-input_1iiEt", "filterInput": "filter_filter-input_1iiEt" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/forms/input.css": /*!***********************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/forms/input.css ***! \***********************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n.input_input-form_l9eYg {\n height: 2rem;\n padding: 0 0.75rem;\n\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 0.625rem;\n font-weight: bold;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n\n border-width: 1px;\n border-style: solid;\n border-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 2rem;\n\n outline: none;\n cursor: text;\n transition: 0.25s ease-out; /* @todo: standardize with var */\n box-shadow: none;\n\n /*\n For truncating overflowing text gracefully\n Min-width is for a bug: https://css-tricks.com/flexbox-truncated-text\n @todo: move this out into a mixin or a helper component\n */\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n}\n\n[theme=\"dark\"] .input_input-form_l9eYg {\n background-color: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n}\n\n.input_input-form_l9eYg:hover {\n border-color: hsla(266, 100%, 50%, 1);\n}\n\n[theme=\"dark\"] .input_input-form_l9eYg:hover {\n border-color: #5500cc;\n}\n\n.input_input-form_l9eYg:focus {\n border-color: hsla(266, 100%, 50%, 1);\n box-shadow: 0 0 0 0.25rem hsla(266, 100%, 50%, 0.35);\n}\n\n[theme=\"dark\"] .input_input-form_l9eYg:focus {\n border-color: #5500cc;\n}\n\n.input_input-small_2qj1C {\n width: 3rem;\n padding: 0 0.5rem;\n text-overflow: clip;\n text-align: center;\n}\n", ""]); // exports exports.locals = { "input-form": "input_input-form_l9eYg", "inputForm": "input_input-form_l9eYg", "input-small": "input_input-small_2qj1C", "inputSmall": "input_input-small_2qj1C" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/forms/label.css": /*!***********************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/forms/label.css ***! \***********************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n.label_input-group_2vTky {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n}\n\n.label_input-group-column_22FuU {\n display: inline-flex;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.label_input-group-column_22FuU span {\n margin-bottom: .25rem;\n}\n\n.label_input-label_3KjCa, .label_input-label-secondary_3QDNV {\n font-size: 0.625rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n\n white-space: nowrap;\n}\n\n[dir=\"ltr\"] .label_input-label_3KjCa, [dir=\"ltr\"] .label_input-label-secondary_3QDNV {\n margin-right: .5rem;\n}\n\n[dir=\"rtl\"] .label_input-label_3KjCa, [dir=\"rtl\"] .label_input-label-secondary_3QDNV {\n margin-left: .5rem;\n}\n\n.label_input-label_3KjCa {\n font-weight: bold;\n}\n", ""]); // exports exports.locals = { "input-group": "label_input-group_2vTky", "inputGroup": "label_input-group_2vTky", "input-group-column": "label_input-group-column_22FuU", "inputGroupColumn": "label_input-group-column_22FuU", "input-label": "label_input-label_3KjCa", "inputLabel": "label_input-label_3KjCa", "input-label-secondary": "label_input-label-secondary_3QDNV", "inputLabelSecondary": "label_input-label-secondary_3QDNV" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/green-flag/green-flag.css": /*!*********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/green-flag/green-flag.css ***! \*********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.green-flag_green-flag_1kiAo {\n width: 2rem;\n height: 2rem;\n padding: 0.375rem;\n border-radius: 0.25rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n user-drag: none;\n cursor: pointer;\n}\n.green-flag_green-flag_1kiAo:hover {\n background-color: hsla(266, 100%, 39%, 0.15);\n}\n.green-flag_green-flag_1kiAo.green-flag_is-active_2oExT {\n background-color: hsla(266, 100%, 50%, 0.35);\n}\n", ""]); // exports exports.locals = { "green-flag": "green-flag_green-flag_1kiAo", "greenFlag": "green-flag_green-flag_1kiAo", "is-active": "green-flag_is-active_2oExT", "isActive": "green-flag_is-active_2oExT" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/gui/gui.css": /*!*******************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/gui/gui.css ***! \*******************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n\n/* Toolbox z-index: 40; set in scratch-blocks */\n\n/* tooltips should go over add buttons if they overlap */\n\n/* monitors go over add buttons */\n\n/* \"ask\" block text input goes above monitors */\n\n/* menu-bar should go over monitors, alerts and tutorials */\n\n/* tw: show below menu bar normally */\n\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n\n/* so it is draggable into other panes */\n\n/* in most interfaces, the context menu is always on top */\n\n.gui_page-wrapper_1cgy0 {\n height: 100%;\n}\n\n.gui_body-wrapper_-N0sA {\n height: calc(100% - 3rem);\n background-color: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n\n.gui_body-wrapper-playground_EeyQ6 {\n height: 100%;\n}\n\n.gui_body-wrapper_-N0sA * {\n box-sizing: border-box;\n}\n\n.gui_flex-wrapper_uXHkj {\n display: flex;\n\n /*\n Make 2 columns:\n a) for the blocks + workspace panes, and\n b) for combined stage menu + stage + sprite/stage selectors\n */\n flex-direction: row;\n height: 100%;\n\n /*\n Stop scrollbar popping in and out from scratch-blocks border issue\n https://github.com/LLK/scratch-gui/issues/318\n */\n overflow: hidden;\n}\n\n.gui_editor-wrapper_2DYcj {\n /*\n This is carefully balanced-- the minimum width at which the GUI will be displayed is 1024px.\n At that size, the stage pane is 408px wide, with $space of padding to each side.\n However, we must also add the border width to the stage pane. All-in-all, the stage pane's final width is\n 408px + ($space + $stage-standard-border-width * 2) (one border & padding per left/right side).\n\n @todo This is in place to prevent \"doubling up\" of horizontal scrollbars in narrow windows, but there are likely\n much better ways to solve that (e.g. undo #2124, remove this flex-basis entirely). However, they run their own\n risks of breaking things, so let's just leave this as-is for the time being.\n */\n flex-basis: calc(1024px - 408px - ((0.5rem + 0.0625rem) * 2));\n flex-grow: 1;\n flex-shrink: 0;\n position: relative;\n\n display: flex;\n flex-direction: column;\n}\n\n.gui_tab-list_87TYM {\n height: 2.75rem;\n width: 250px; /* Match width of the toolbox */\n display: flex;\n align-items: flex-end;\n flex-shrink: 0;\n\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-weight: 500;\n font-size: 0.80rem;\n\n /* Overrides for react-tabs styling */\n margin: 0 !important;\n border-bottom: 0 !important;\n}\n\n.gui_tab_27Unf {\n flex-grow: 1;\n height: 80%;\n margin-bottom: 0;\n\n border-radius: 1rem 1rem 0 0;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n\n padding: 0.125rem 1.25rem 0;\n font-size: 0.75rem;\n\n background-color: var(--ui-tertiary, hsla(266, 50%, 90%, 1));\n color: hsla(266, 30%, 40%, 0.75);\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n -webkit-user-select: none;\n\n -moz-user-select: none;\n\n -ms-user-select: none;\n\n user-select: none;\n white-space: nowrap;\n}\n\n[theme=\"dark\"] .gui_tab_27Unf {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n}\n\n.gui_tab_27Unf > div {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.gui_tab-disabled_Dvd2g {\n display: none;\n}\n\n.gui_add-tab-button_DxpA3 {\n margin: 8px 0;\n margin-left: 4px;\n padding: 4px;\n font-size: larger;\n\n background: white;\n border: 1px solid rgba(0,0,0,.15);\n border-radius: 4px;\n\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n\n transform: translateY(6px);\n}\n\n[dir=\"rtl\"] .gui_add-tab-button_DxpA3 {\n margin-left: initial;\n margin-right: 4px;\n}\n\n[theme=\"dark\"] .gui_add-tab-button_DxpA3 {\n background: none;\n border-color: rgba(255,255,255,.15);\n}\n\n[theme=\"dark\"] .gui_add-tab-button_DxpA3 img {\n filter: invert(1);\n}\n\n.gui_add-tab-button-disabled_3sVlw {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.gui_tab-addition-item_3B87k {\n display: flex;\n align-items: center;\n}\n\n.gui_tab-addition-item_3B87k img {\n width: 1.375rem;\n}\n\n[dir=\"ltr\"] .gui_tab_27Unf {\n margin-left: -0.5rem;\n}\n\n[dir=\"rtl\"] .gui_tab_27Unf {\n margin-right: -0.5rem;\n}\n\n[dir=\"ltr\"] .gui_tab_27Unf:nth-of-type(1) {\n margin-left: 0;\n}\n\n[dir=\"rtl\"] .gui_tab_27Unf:nth-of-type(1) {\n margin-right: 0;\n}\n\n/* Use z-indices to force left-on-top for tabs */\n\n.gui_tab_27Unf:nth-of-type(1) {\n z-index: 3;\n}\n\n.gui_tab_27Unf:nth-of-type(2) {\n z-index: 2;\n}\n\n.gui_tab_27Unf:nth-of-type(3) {\n z-index: 1;\n}\n\n.gui_tab_27Unf:hover {\n background-color: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n\n[theme=\"dark\"] .gui_tab_27Unf:hover {\n background-color: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n}\n\n.gui_tab_27Unf.gui_is-selected_sHAiu {\n height: 90%;\n color: hsla(266, 100%, 50%, 1);\n background-color: hsla(0, 100%, 100%, 1);\n z-index: 4; /* Make sure selected is always above */\n}\n\n[theme=\"dark\"] .gui_tab_27Unf.gui_is-selected_sHAiu {\n background-color: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n}\n\n.gui_tab_27Unf img {\n width: 1.375rem;\n filter: grayscale(100%);\n}\n\n[dir=\"ltr\"] .gui_tab_27Unf img {\n margin-right: 0.125rem;\n}\n\n[dir=\"rtl\"] .gui_tab_27Unf img {\n margin-left: 0.125rem;\n}\n\n/* mirror blocks and sound tab icons */\n\n[dir=\"rtl\"] .gui_tab_27Unf:nth-of-type(1) img {\n transform: scaleX(-1);\n}\n\n[dir=\"rtl\"] .gui_tab_27Unf:nth-of-type(3) img {\n transform: scaleX(-1);\n}\n\n.gui_tab_27Unf.gui_is-selected_sHAiu img {\n filter: none;\n}\n\n/* Tab style overrides from react-tabs */\n\n.gui_tab_27Unf.gui_is-selected_sHAiu:after {\n display: none;\n}\n\n.gui_tab_27Unf.gui_is-selected_sHAiu:focus {\n outline: none;\n box-shadow: none;\n border-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n.gui_tab_27Unf.gui_is-selected_sHAiu:focus:after {\n display: none;\n}\n\n/* Body of the tabs */\n\n.gui_tabs_AgmuP {\n position: relative;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n}\n\n.gui_tab-panel_22sLx {\n position: relative;\n flex-grow: 1;\n display: none;\n}\n\n.gui_tab-panel_22sLx.gui_is-selected_sHAiu {\n display: flex;\n}\n\n.gui_blocks-wrapper_1ccgf {\n flex-grow: 1;\n position: relative;\n}\n\n.gui_stage-and-target-wrapper_69KBf {\n /*\n Makes rows for children:\n 1) stage menu\n 2) stage\n 3) sprite/stage selectors\n Only reason we need this, is so .targetWrapper, which holds the selectors,\n goes to full vertical height of the window\n */\n display: flex;\n flex-direction: column;\n /* pad entire wrapper to the left and right; allow children to fill width */\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n\n /* this will only ever be as wide as the stage */\n flex-basis: 0;\n}\n\n.gui_target-wrapper_36Gbz {\n display: flex;\n flex-grow: 1;\n flex-basis: 0;\n\n padding-top: 0.5rem;\n min-height: 0; /* this makes it work in Firefox */\n\n /*\n For making the sprite-selector a scrollable pane\n @todo: Not working in Safari\n */\n /* TODO this also breaks the thermometer menu */\n /* overflow: hidden; */\n}\n\n.gui_extension-button-container_b4rCs {\n width: 3.75rem;\n height: 3.25rem;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 42;\n background: hsla(266, 100%, 50%, 1);\n\n border: 1px solid hsla(266, 100%, 50%, 1);\n box-sizing: content-box; /* To match scratch-block vertical toolbox borders */\n}\n\n.gui_extension-button-container_b4rCs:before {\n content: \"\";\n position: absolute;\n top: calc(calc(-1 * 15px) - 1px);\n left: -1px;\n background: linear-gradient(rgba(0, 0, 0, 0),rgba(0, 0, 0, 0.15));\n height: 15px;\n width: calc(100% + 0.5px);\n}\n\n.gui_extension-button_2T7PA {\n background: none;\n border: none;\n outline: none;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n\n.gui_extension-button-icon_S4gDk {\n width: 1.75rem;\n height: 1.75rem;\n}\n\n[dir=\"rtl\"] .gui_extension-button-icon_S4gDk {\n transform: scaleX(-1);\n}\n\n.gui_extension-button_2T7PA > div {\n margin-top: 0;\n}\n\n/* Sprite Selection Watermark */\n\n.gui_watermark_3vBYb {\n position: absolute;\n top: 1.25rem;\n pointer-events: none;\n}\n\n[dir=\"ltr\"] .gui_watermark_3vBYb {\n right: 1.25rem;\n}\n\n[dir=\"rtl\"] .gui_watermark_3vBYb {\n left: 1.25rem;\n}\n\n/* Menu */\n\n.gui_menu-bar-position_3U1T0 {\n position: relative;\n z-index: 491;\n}\n\n/* Alerts */\n\n.gui_alerts-container_15BWp {\n display: flex;\n justify-content: center;\n width: 100%;\n z-index: 490;\n position: absolute;\n margin-top: 53px;\n pointer-events: none;\n}\n\n/*\n Make the (background) page not scrollable when modals are open\n This CSS class is automatically added to the body when react-modal is open\n*/\n\n.ReactModal__Body--open {\n overflow: hidden;\n}\n\n/* tw: tw: when window is fullscreen, put a solid white background behind the stage */\n\n.gui_fullscreen-background_3g8mV {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n /* if the user-specified background color can't be understood by the browser, default to white */\n background-color: white;\n}\n", ""]); // exports exports.locals = { "page-wrapper": "gui_page-wrapper_1cgy0", "pageWrapper": "gui_page-wrapper_1cgy0", "body-wrapper": "gui_body-wrapper_-N0sA", "bodyWrapper": "gui_body-wrapper_-N0sA", "body-wrapper-playground": "gui_body-wrapper-playground_EeyQ6", "bodyWrapperPlayground": "gui_body-wrapper-playground_EeyQ6", "flex-wrapper": "gui_flex-wrapper_uXHkj", "flexWrapper": "gui_flex-wrapper_uXHkj", "editor-wrapper": "gui_editor-wrapper_2DYcj", "editorWrapper": "gui_editor-wrapper_2DYcj", "tab-list": "gui_tab-list_87TYM", "tabList": "gui_tab-list_87TYM", "tab": "gui_tab_27Unf", "tab-disabled": "gui_tab-disabled_Dvd2g", "tabDisabled": "gui_tab-disabled_Dvd2g", "add-tab-button": "gui_add-tab-button_DxpA3", "addTabButton": "gui_add-tab-button_DxpA3", "add-tab-button-disabled": "gui_add-tab-button-disabled_3sVlw", "addTabButtonDisabled": "gui_add-tab-button-disabled_3sVlw", "tab-addition-item": "gui_tab-addition-item_3B87k", "tabAdditionItem": "gui_tab-addition-item_3B87k", "is-selected": "gui_is-selected_sHAiu", "isSelected": "gui_is-selected_sHAiu", "tabs": "gui_tabs_AgmuP", "tab-panel": "gui_tab-panel_22sLx", "tabPanel": "gui_tab-panel_22sLx", "blocks-wrapper": "gui_blocks-wrapper_1ccgf", "blocksWrapper": "gui_blocks-wrapper_1ccgf", "stage-and-target-wrapper": "gui_stage-and-target-wrapper_69KBf", "stageAndTargetWrapper": "gui_stage-and-target-wrapper_69KBf", "target-wrapper": "gui_target-wrapper_36Gbz", "targetWrapper": "gui_target-wrapper_36Gbz", "extension-button-container": "gui_extension-button-container_b4rCs", "extensionButtonContainer": "gui_extension-button-container_b4rCs", "extension-button": "gui_extension-button_2T7PA", "extensionButton": "gui_extension-button_2T7PA", "extension-button-icon": "gui_extension-button-icon_S4gDk", "extensionButtonIcon": "gui_extension-button-icon_S4gDk", "watermark": "gui_watermark_3vBYb", "menu-bar-position": "gui_menu-bar-position_3U1T0", "menuBarPosition": "gui_menu-bar-position_3U1T0", "alerts-container": "gui_alerts-container_15BWp", "alertsContainer": "gui_alerts-container_15BWp", "fullscreen-background": "gui_fullscreen-background_3g8mV", "fullscreenBackground": "gui_fullscreen-background_3g8mV" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/icon-button/icon-button.css": /*!***********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/icon-button/icon-button.css ***! \***********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.icon-button_container_278u5 {\n display: flex;\n flex-direction: column;\n align-items: center;\n cursor: pointer;\n font-size: 0.75rem;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: hsla(266, 100%, 50%, 1);\n border-radius: 0.5rem;\n}\n.icon-button_container_278u5 + .icon-button_container_278u5 {\n margin-top: 1.25rem;\n}\n.icon-button_title_36ChS {\n margin-top: 0.5rem;\n text-align: center;\n}\n.icon-button_disabled_2HD_J {\n opacity: 0.5;\n pointer-events: none;\n}\n.icon-button_container_278u5:active {\n background-color: hsla(266, 100%, 39%, 0.15);\n}\n", ""]); // exports exports.locals = { "container": "icon-button_container_278u5", "title": "icon-button_title_36ChS", "disabled": "icon-button_disabled_2HD_J" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/language-selector/language-selector.css": /*!***********************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/language-selector/language-selector.css ***! \***********************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n/* Position the language select over the language icon, and make it transparent */\n.language-selector_language-select_8Vfnm {\n position: absolute;\n width: 3rem;\n height: 3rem;\n opacity: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: .875rem;\n color: hsla(266, 30%, 40%, 1);\n background: hsla(0, 100%, 100%, 1);\n}\n[theme=\"dark\"] .language-selector_language-select_8Vfnm {\n color: hsla(0, 100%, 100%, 1);\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n[dir=\"ltr\"] .language-selector_language-select_8Vfnm {\n right: 0;\n}\n[dir=\"rtl\"] .language-selector_language-select_8Vfnm {\n left: 0;\n}\n.language-selector_language-select_8Vfnm option {\n opacity: 1;\n}\n.language-selector_language-select_8Vfnm:focus {\n border: 1px solid white;\n}\n", ""]); // exports exports.locals = { "language-select": "language-selector_language-select_8Vfnm", "languageSelect": "language-selector_language-select_8Vfnm" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/library-item/library-item.css": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/library-item/library-item.css ***! \*************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.library-item_library-item_1DcMO {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex-basis: 160px;\n position: relative;\n height: 160px;\n max-width: 160px;\n margin: 0.5rem;\n padding: 1rem 1rem 0 1rem;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: white;\n border-width: 2px;\n border-style: solid;\n border-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.5rem;\n text-align: center;\n cursor: pointer;\n}\n[theme=\"dark\"] .library-item_library-item_1DcMO {\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.library-item_library-item-sound_Oc9b1 {\n width: 200px;\n max-width: 200px;\n flex-basis: 200px;\n height: 100px;\n padding: 0.25rem;\n padding-bottom: 0;\n}\n.library-item_library-item-sound_Oc9b1.library-item_library-item-new_1iKz6 {\n /*\n we have to use hue-rotate,\n since the waveforms have their color baked in by design\n & the play button styling would be annoying\n */\n filter: hue-rotate(60deg);\n}\n.library-item_library-item-new-badge_t-wEG {\n border-radius: 1024px;\n color: white;\n font-size: 10px;\n font-weight: bold;\n background-color: #EB6566;\n padding: 1px 5px;\n position: absolute;\n left: -8px;\n top: -8px;\n}\n.library-item_library-item-sound_Oc9b1 .library-item_library-item-new-badge_t-wEG {\n background-color: hsla(266, 70%, 60%, 1);\n}\n.library-item_library-item-extension_3xus9 {\n align-self: stretch;\n}\n.library-item_library-item_1DcMO:hover {\n border-width: 2px;\n border-color: hsla(266, 100%, 50%, 1);\n}\n.library-item_library-item-sound_Oc9b1:hover {\n border-color: hsla(266, 70%, 60%, 1);\n}\n.library-item_library-item-new_1iKz6:hover {\n border-color: #EB6566;\n}\n.library-item_library-item-new_1iKz6.library-item_library-item-sound_Oc9b1:hover {\n border-color: hsla(266, 70%, 60%, 1);\n}\n.library-item_library-item-favorite_3N_c1 {\n background: transparent;\n position: absolute;\n top: calc(11.5rem + 4px);\n right: 4px;\n width: 24px;\n height: 24px;\n border: 0;\n margin: 0;\n padding: 0;\n}\n.library-item_library-item-favorite_3N_c1 img {\n background: transparent;\n position: absolute;\n top: 0;\n right: 0;\n width: 24px;\n height: 24px;\n border: 0;\n margin: 0;\n padding: 0;\n}\n.library-item_library-item-favorite_3N_c1 > img[data-usedimage=\"false\"] {\n opacity: 0;\n}\n.library-item_library-item-delete_20s4z {\n background: transparent;\n position: absolute;\n top: calc(11.5rem + 4px);\n right: 4px;\n width: 24px;\n height: 24px;\n border: 0;\n margin: 0;\n padding: 0;\n}\n.library-item_library-item-delete_20s4z img {\n background: transparent;\n position: absolute;\n top: 0;\n right: 0;\n width: 24px;\n height: 24px;\n border: 0;\n margin: 0;\n padding: 0;\n}\n/* delete button */\n.library-item_library-item-delete_20s4z > img {\n filter: brightness(0);\n opacity: 0.25;\n}\n[theme=\"dark\"] .library-item_library-item-delete_20s4z>img {\n filter: saturate(0) brightness(255);\n}\n.library-item_library-item-delete_20s4z:hover > img {\n filter: brightness(1);\n opacity: 1;\n}\n.library-item_library-item-delete_20s4z:active > img {\n filter: brightness(0.25);\n opacity: 1;\n}\n/* unfavorited items */\n.library-item_library-item-favorite_3N_c1[data-activated=\"false\"] > img[data-usedimage=\"true\"] {\n filter: brightness(0);\n opacity: 0.25;\n}\n[theme=\"dark\"] .library-item_library-item-favorite_3N_c1[data-activated=\"false\"]>img[data-usedimage=\"true\"] {\n filter: saturate(0) brightness(255);\n}\n.library-item_library-item-favorite_3N_c1[data-activated=\"false\"]:hover > img[data-usedimage=\"true\"] {\n filter: brightness(1);\n opacity: 1;\n}\n.library-item_library-item-favorite_3N_c1[data-activated=\"false\"]:active > img[data-usedimage=\"true\"] {\n filter: brightness(1);\n opacity: 1;\n}\n.library-item_library-item-favorite_3N_c1[data-activated=\"false\"]:active > img[data-usedimage=\"false\"] {\n filter: brightness(1);\n opacity: 1;\n}\n/* favorited items */\n.library-item_library-item-favorite_3N_c1[data-activated=\"true\"] > img[data-usedimage=\"true\"] {\n filter: none;\n opacity: 1;\n}\n.library-item_hidden_1ILc7 {\n display: none;\n}\n.library-item_disabled_1-aDH {\n opacity: .5;\n cursor: auto;\n}\n.library-item_disabled_1-aDH:hover {\n border-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.library-item_inspect-extension_L7s0G {\n position: relative;\n background: #00c3ff;\n color: white;\n font-weight: bold;\n padding: 0;\n margin: 0 4px;\n border: 0;\n border-radius: 4px;\n float: right;\n width: 20px;\n height: 20px;\n}\n.library-item_inspect-extension_L7s0G > img {\n width: 20px;\n height: 20px;\n}\n.library-item_small-bottom-margin_2XgVk {\n margin-bottom: 4px;\n}\n.library-item_library-item-image-container-wrapper_x4EWB {\n height: 100px;\n width: 100%;\n position: relative;\n}\n.library-item_library-item-image-container_3dqjX {\n position: absolute;\n height: 100px;\n width: 100%;\n}\n.library-item_library-item-inset-image-container_3PLJ1 {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: -2.5rem;\n align-self: flex-start;\n background-color: hsla(266, 85%, 40%, 1);\n width: 3.5rem;\n height: 3.5rem;\n border-radius: 0.5rem;\n border: 0.25rem solid hsla(0, 100%, 100%, 1);\n}\n.library-item_library-item-inset-image-container-no-bg_XBG4o {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: -2.5rem;\n align-self: flex-start;\n width: 3.5rem;\n height: 3.5rem;\n border-radius: 0.5rem;\n border: 0.25rem solid hsla(0, 100%, 100%, 1);\n}\n[theme=\"dark\"] .library-item_library-item-inset-image-container-no-bg_XBG4o,\n[theme=\"dark\"] .library-item_library-item-inset-image-container_3PLJ1 {\n border: 0.25rem solid #111;\n}\n.library-item_tw-library-item-inset-image-container_1GaDi {\n background-color: hsla(0, 100%, 65%, 1);\n}\n[dir=\"ltr\"] .library-item_library-item-inset-image-container-no-bg_XBG4o,\n[dir=\"ltr\"] .library-item_library-item-inset-image-container_3PLJ1 {\n margin-left: 1rem;\n}\n[dir=\"rtl\"] .library-item_library-item-inset-image-container-no-bg_XBG4o,\n[dir=\"rtl\"] .library-item_library-item-inset-image-container_3PLJ1 {\n margin-right: 1rem;\n}\n.library-item_library-item-image_2bORn {\n max-width: 100%;\n max-height: 100%;\n}\n.library-item_library-item-image-overlay_1sRWI {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n}\n.library-item_library-item-waveform_2qq-n {\n position: absolute;\n left: 0;\n width: calc(100% - 3rem);\n height: 3rem;\n max-width: 100%;\n max-height: 100%;\n}\n[dir=\"rtl\"] .library-item_library-item-waveform_2qq-n {\n left: initial;\n right: 0;\n}\n.library-item_library-item-inset-image_17Tmt {\n width: 2.5rem;\n}\n.library-item_library-item-name_2qMXu {\n width: 100%;\n margin: 0.25rem 0;\n text-align: center;\n\n /*\n For truncating overflowing text gracefully\n Min-width is for a bug: https://css-tricks.com/flexbox-truncated-text\n */\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: pre-wrap;\n min-width: 0;\n}\n.library-item_library-item-sound-name_7U7Ff {\n text-align: left;\n width: 100%;\n margin-bottom: 0;\n}\n.library-item_library-item-sound-type_28NOG {\n text-align: left;\n width: 100%;\n margin-top: 0;\n opacity: 0.65;\n}\n[dir=\"rtl\"] .library-item_library-item-sound-name_7U7Ff,\n[dir=\"rtl\"] .library-item_library-item-sound-type_28NOG {\n text-align: right;\n}\n.library-item_library-item-sound-info-container_hUPPZ {\n width: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n}\n.library-item_featured-item_3V2-t {\n flex-basis: 300px;\n max-width: 300px;\n height: auto;\n overflow: hidden;\n padding: 0;\n}\n.library-item_featured-image-container_1KIHG {\n position: relative;\n width: 100%;\n}\n.library-item_featured-image_2gwZ6 {\n width: 100%;\n height: 11.5rem;\n object-fit: cover;\n}\n.library-item_featured-text_2KFel {\n font-weight: bold;\n padding: 10px;\n /* height: 140px; */\n width: 300px;\n}\n[dir=\"ltr\"] .library-item_featured-extension-text_22A1k {\n text-align: left;\n padding-left: 1.25rem;\n}\n[dir=\"rtl\"] .library-item_featured-extension-text_22A1k {\n text-align: right;\n padding-right: 1.25rem;\n}\n.library-item_featured-description_MjIJw {\n display: block;\n font-weight: normal;\n line-height: 1.375rem;\n padding-top: .3125rem;\n padding-bottom: .25rem;\n}\n.library-item_featured-extension-metadata_3D8E8 {\n width: 100%;\n padding: 0 1.25rem 1rem 1.25rem;\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n font-size: 12px;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n opacity: 0.75;\n}\n[dir=\"ltr\"] .library-item_featured-extension-metadata_3D8E8 {\n text-align: left;\n}\n[dir=\"rtl\"] .library-item_featured-extension-metadata_3D8E8 {\n text-align: right;\n}\n.library-item_featured-extension-requirement_2u2IO {\n width: 100%;\n display: flex;\n flex-direction: column;\n}\n.library-item_featured-extension-collaboration_2dGS9 {\n width: 100%;\n display: flex;\n flex-direction: column;\n}\n.library-item_featured-extension-metadata-detail_1M9BV {\n height: 100%;\n padding-top: 0.4rem;\n font-weight: bold;\n}\n.library-item_featured-extension-metadata-detail_1M9BV img {\n margin-right: 0.25rem;\n width: 20px;\n height: 20px;\n}\n.library-item_extension-links_3wgib {\n width: 300px;\n padding: 0 1.25rem 1rem 1.25rem;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n opacity: 0.75;\n text-align: left;\n}\n.library-item_extension-links_3wgib a {\n color: inherit !important;\n text-decoration: underline;\n}\n.library-item_coming-soon-text_30OPh {\n position: absolute;\n background-color: hsla(266, 100%, 55%, 1);\n border-radius: 1rem;\n box-shadow: 0 0 .5rem hsla(0, 0%, 0%, .25);\n padding: .5rem 1rem;\n font-size: .875rem;\n font-weight: bold;\n color: hsla(0, 100%, 100%, 1);\n}\n[dir=\"ltr\"] .library-item_coming-soon-text_30OPh {\n transform: translate(calc(2 * 0.5rem), calc(2 * 0.5rem));\n}\n[dir=\"rtl\"] .library-item_coming-soon-text_30OPh {\n transform: translate(calc(-2 * 0.5rem), calc(2 * 0.5rem));\n}\n.library-item_favorite-container_2M2ay {\n display: none;\n background: none;\n border: none;\n padding: 0;\n margin: 0;\n position: absolute;\n top: 0.5rem;\n left: 0.5rem;\n}\n.library-item_favorite-icon_1ENdX {\n width: 32px;\n height: 32px;\n}\n.library-item_favorite-container_2M2ay.library-item_active_2mL0e,\n.library-item_library-item_1DcMO:hover .library-item_favorite-container_2M2ay {\n display: block;\n}\n", ""]); // exports exports.locals = { "library-item": "library-item_library-item_1DcMO", "libraryItem": "library-item_library-item_1DcMO", "library-item-sound": "library-item_library-item-sound_Oc9b1", "libraryItemSound": "library-item_library-item-sound_Oc9b1", "library-item-new": "library-item_library-item-new_1iKz6", "libraryItemNew": "library-item_library-item-new_1iKz6", "library-item-new-badge": "library-item_library-item-new-badge_t-wEG", "libraryItemNewBadge": "library-item_library-item-new-badge_t-wEG", "library-item-extension": "library-item_library-item-extension_3xus9", "libraryItemExtension": "library-item_library-item-extension_3xus9", "library-item-favorite": "library-item_library-item-favorite_3N_c1", "libraryItemFavorite": "library-item_library-item-favorite_3N_c1", "library-item-delete": "library-item_library-item-delete_20s4z", "libraryItemDelete": "library-item_library-item-delete_20s4z", "hidden": "library-item_hidden_1ILc7", "disabled": "library-item_disabled_1-aDH", "inspect-extension": "library-item_inspect-extension_L7s0G", "inspectExtension": "library-item_inspect-extension_L7s0G", "small-bottom-margin": "library-item_small-bottom-margin_2XgVk", "smallBottomMargin": "library-item_small-bottom-margin_2XgVk", "library-item-image-container-wrapper": "library-item_library-item-image-container-wrapper_x4EWB", "libraryItemImageContainerWrapper": "library-item_library-item-image-container-wrapper_x4EWB", "library-item-image-container": "library-item_library-item-image-container_3dqjX", "libraryItemImageContainer": "library-item_library-item-image-container_3dqjX", "library-item-inset-image-container": "library-item_library-item-inset-image-container_3PLJ1", "libraryItemInsetImageContainer": "library-item_library-item-inset-image-container_3PLJ1", "library-item-inset-image-container-no-bg": "library-item_library-item-inset-image-container-no-bg_XBG4o", "libraryItemInsetImageContainerNoBg": "library-item_library-item-inset-image-container-no-bg_XBG4o", "tw-library-item-inset-image-container": "library-item_tw-library-item-inset-image-container_1GaDi", "twLibraryItemInsetImageContainer": "library-item_tw-library-item-inset-image-container_1GaDi", "library-item-image": "library-item_library-item-image_2bORn", "libraryItemImage": "library-item_library-item-image_2bORn", "library-item-image-overlay": "library-item_library-item-image-overlay_1sRWI", "libraryItemImageOverlay": "library-item_library-item-image-overlay_1sRWI", "library-item-waveform": "library-item_library-item-waveform_2qq-n", "libraryItemWaveform": "library-item_library-item-waveform_2qq-n", "library-item-inset-image": "library-item_library-item-inset-image_17Tmt", "libraryItemInsetImage": "library-item_library-item-inset-image_17Tmt", "library-item-name": "library-item_library-item-name_2qMXu", "libraryItemName": "library-item_library-item-name_2qMXu", "library-item-sound-name": "library-item_library-item-sound-name_7U7Ff", "libraryItemSoundName": "library-item_library-item-sound-name_7U7Ff", "library-item-sound-type": "library-item_library-item-sound-type_28NOG", "libraryItemSoundType": "library-item_library-item-sound-type_28NOG", "library-item-sound-info-container": "library-item_library-item-sound-info-container_hUPPZ", "libraryItemSoundInfoContainer": "library-item_library-item-sound-info-container_hUPPZ", "featured-item": "library-item_featured-item_3V2-t", "featuredItem": "library-item_featured-item_3V2-t", "featured-image-container": "library-item_featured-image-container_1KIHG", "featuredImageContainer": "library-item_featured-image-container_1KIHG", "featured-image": "library-item_featured-image_2gwZ6", "featuredImage": "library-item_featured-image_2gwZ6", "featured-text": "library-item_featured-text_2KFel", "featuredText": "library-item_featured-text_2KFel", "featured-extension-text": "library-item_featured-extension-text_22A1k", "featuredExtensionText": "library-item_featured-extension-text_22A1k", "featured-description": "library-item_featured-description_MjIJw", "featuredDescription": "library-item_featured-description_MjIJw", "featured-extension-metadata": "library-item_featured-extension-metadata_3D8E8", "featuredExtensionMetadata": "library-item_featured-extension-metadata_3D8E8", "featured-extension-requirement": "library-item_featured-extension-requirement_2u2IO", "featuredExtensionRequirement": "library-item_featured-extension-requirement_2u2IO", "featured-extension-collaboration": "library-item_featured-extension-collaboration_2dGS9", "featuredExtensionCollaboration": "library-item_featured-extension-collaboration_2dGS9", "featured-extension-metadata-detail": "library-item_featured-extension-metadata-detail_1M9BV", "featuredExtensionMetadataDetail": "library-item_featured-extension-metadata-detail_1M9BV", "extension-links": "library-item_extension-links_3wgib", "extensionLinks": "library-item_extension-links_3wgib", "coming-soon-text": "library-item_coming-soon-text_30OPh", "comingSoonText": "library-item_coming-soon-text_30OPh", "favorite-container": "library-item_favorite-container_2M2ay", "favoriteContainer": "library-item_favorite-container_2M2ay", "favorite-icon": "library-item_favorite-icon_1ENdX", "favoriteIcon": "library-item_favorite-icon_1ENdX", "active": "library-item_active_2mL0e" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/library/library.css": /*!***************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/library/library.css ***! \***************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n.library_library-content-wrapper_1FTPT {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n width: 100%;\n height: calc(100% - (3.4em + 3.125rem));\n}\n\n.library_library-filter-bar_1xjYC {\n width: 342px;\n height: calc(100% - 4px);\n padding: 6px;\n margin-left: 4px;\n border-radius: 8px;\n background: white;\n overflow: auto;\n border: 2px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n[theme=\"dark\"] .library_library-filter-bar_1xjYC {\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n\n.library_library-header_3HwSf {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-left: 6px;\n}\n\n.library_library-item-count_1qc6G {\n opacity: 0.5;\n margin-block: 0;\n margin-left: 4px;\n}\n\n[theme=\"dark\"] .library_library-header_3HwSf {\n color: white;\n}\n\n[dir=\"rtl\"] .library_library-header_3HwSf {\n margin-left: initial;\n margin-right: 6px;\n}\n\n[dir=\"rtl\"] .library_library-item-count_1qc6G {\n margin-left: initial;\n margin-right: 4px;\n}\n\n.library_library-tag-count_rLBPq {\n margin-right: 2.5%;\n text-align: right;\n}\n\n[dir=\"rtl\"] .library_library-tag-count_rLBPq {\n margin-right: initial;\n margin-left: 2.5%;\n text-align: left;\n}\n\n.library_library-scroll-grid_1jyXm {\n width: calc(100% - 346px);\n display: flex;\n justify-content: flex-start;\n align-content: flex-start;\n align-items: flex-start;\n background: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n flex-grow: 1;\n flex-wrap: wrap;\n overflow-y: auto;\n height: auto;\n padding: 0.5rem;\n height: calc(100%);\n}\n\n.library_library-scroll-grid_1jyXm.library_withFilterBar_26Opm {\n height: calc(100% - 3.125rem - 2.5rem - 2rem);\n}\n\n.library_filter-bar_1W0DW {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n height: calc(2.5rem + 2rem); /* padding */\n background-color: hsla(266, 100%, 50%, 0.35);\n padding: 0 1rem;\n font-size: .875rem;\n}\n\n.library_filter-bar-item_99aoX {\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n.library_filter_2k-oj {\n flex-grow: 0;\n}\n\n.library_filter-input_6w2X2 {\n width: 11.5rem;\n transition: .2s;\n}\n\n.library_filter-input_6w2X2:focus,\n.library_filter-input_6w2X2:not([value=\"\"]) {\n width: 18.75rem;\n}\n\n.library_tag-checkbox-wrapper_b6mK3 {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n}\n\n[theme=\"dark\"] .library_tag-checkbox-wrapper_b6mK3 {\n color: white;\n}\n\n[theme=\"dark\"] .library_white-text-in-dark-mode_xEYoo {\n color: white;\n}\n\n.library_library-filter-collapse_1FPNr {\n width: 35px;\n height: 40px;\n transform: scaleX(-0.65);\n background: transparent;\n border: 0;\n background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTVweCIgaGVpZ2h0PSIzMnB4IiB2aWV3Qm94PSItNC41IC02IDEwIDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA1MC4yICg1NTA0NykgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+cG9seWdvbi1leHBhbmQ8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0icG9seWdvbi1leHBhbmQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxwYXRoIGQ9Ik0zLDZjMCwwLjM2NjM5IC0wLjEzNzQsMC43MzExNiAtMC40MTM4LDEuMDExNjNsLTMuODQzOTksMy45MDIyMmMtMC41NTEyLDAuNTU5MzEgLTEuNDQyNjksMC41NTkzMSAtMS45OTU0OSwwYy0wLjU1MTIsLTAuNTU3NjkgLTAuNTUxMiwtOS4yNzAwMSAwLC05LjgyNzdjMC41NTEyLC0wLjU1OTMxIDEuNDQ0MjksLTAuNTU5MzEgMS45OTU0OSwwbDMuODQzOTksMy45MDA2YzAuMjc2NCwwLjI4MDQ3IDAuNDEzOCwwLjY0NTI0IDAuNDEzOCwxLjAxMzI1IiBpZD0iZXhwYW5kIiBmaWxsPSIjNTc1RTc1Ij48L3BhdGg+CiAgICA8L2c+Cjwvc3ZnPgo=');\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n\n[theme=\"dark\"] .library_library-filter-collapse_1FPNr {\n filter: brightness(50);\n}\n\n.library_divider_2xD3D {\n width: 100%;\n border: 0;\n border-bottom: 1px dashed var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n margin: 6px 0;\n}\n\n.library_tag-wrapper_2-QEQ {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n height: 2.5rem;\n overflow: hidden;\n}\n\n.library_spinner-wrapper_1C8Ew {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n", ""]); // exports exports.locals = { "library-content-wrapper": "library_library-content-wrapper_1FTPT", "libraryContentWrapper": "library_library-content-wrapper_1FTPT", "library-filter-bar": "library_library-filter-bar_1xjYC", "libraryFilterBar": "library_library-filter-bar_1xjYC", "library-header": "library_library-header_3HwSf", "libraryHeader": "library_library-header_3HwSf", "library-item-count": "library_library-item-count_1qc6G", "libraryItemCount": "library_library-item-count_1qc6G", "library-tag-count": "library_library-tag-count_rLBPq", "libraryTagCount": "library_library-tag-count_rLBPq", "library-scroll-grid": "library_library-scroll-grid_1jyXm", "libraryScrollGrid": "library_library-scroll-grid_1jyXm", "withFilterBar": "library_withFilterBar_26Opm", "filter-bar": "library_filter-bar_1W0DW", "filterBar": "library_filter-bar_1W0DW", "filter-bar-item": "library_filter-bar-item_99aoX", "filterBarItem": "library_filter-bar-item_99aoX", "filter": "library_filter_2k-oj", "filter-input": "library_filter-input_6w2X2", "filterInput": "library_filter-input_6w2X2", "tag-checkbox-wrapper": "library_tag-checkbox-wrapper_b6mK3", "tagCheckboxWrapper": "library_tag-checkbox-wrapper_b6mK3", "white-text-in-dark-mode": "library_white-text-in-dark-mode_xEYoo", "whiteTextInDarkMode": "library_white-text-in-dark-mode_xEYoo", "library-filter-collapse": "library_library-filter-collapse_1FPNr", "libraryFilterCollapse": "library_library-filter-collapse_1FPNr", "divider": "library_divider_2xD3D", "tag-wrapper": "library_tag-wrapper_2-QEQ", "tagWrapper": "library_tag-wrapper_2-QEQ", "spinner-wrapper": "library_spinner-wrapper_1C8Ew", "spinnerWrapper": "library_spinner-wrapper_1C8Ew" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/loader/loader.css": /*!*************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/loader/loader.css ***! \*************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n.loader_background_2DPrW {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 490;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: hsla(266, 100%, 50%, 1);\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n text-align: center;\n color: white;\n}\n[theme=\"dark\"] .loader_background_2DPrW {\n background-color: #5500cc;\n}\n.loader_fullscreen_29EhP {\n /* Break out of the layout using position: fixed to cover the whole screen */\n position: fixed;\n /* Use the fullscreen stage z-index to allow covering full-screen mode */\n z-index: 500;\n}\n.loader_block-animation_12MqO {\n width: 125px;\n height: 150px;\n margin: 50px auto 0px;\n}\n.loader_block-animation_12MqO img {\n display: block;\n position: relative;\n height: 30%;\n margin-top: -4px;\n}\n.loader_top-block_3P7pK {\n animation: loader_top-slide-in_8ngR8 1.5s ease infinite;\n}\n.loader_middle-block_CKcTg {\n animation: loader_middle-slide-in_In2DU 1.5s ease infinite;\n}\n.loader_bottom-block_1-3rO {\n animation: loader_bottom-slide-in_2DZ1B 1.5s ease infinite;\n}\n[dir=\"rtl\"] .loader_top-block_3P7pK {\n animation: loader_top-slide-in-rtl_1vHi4 1.5s ease infinite;\n}\n[dir=\"rtl\"] .loader_middle-block_CKcTg {\n animation: loader_middle-slide-in-rtl_21ALw 1.5s ease infinite;\n}\n[dir=\"rtl\"] .loader_bottom-block_1-3rO {\n animation: loader_bottom-slide-in-rtl_3kdB0 1.5s ease infinite;\n}\n@keyframes loader_top-slide-in_8ngR8 {\n 0% {\n transform: translateY(50px);\n opacity: 0;\n }\n\n 33% {\n transform: translateY(0px);\n opacity: 1;\n }\n}\n@keyframes loader_middle-slide-in_In2DU {\n 0% {\n transform: translateY(50px);\n opacity: 0;\n }\n\n 33% {\n transform: translateY(50px);\n opacity: 0;\n }\n\n 66% {\n transform: translateY(0px);\n opacity: 1;\n }\n}\n@keyframes loader_bottom-slide-in_2DZ1B {\n 0% {\n transform: translateY(50px);\n opacity: 0;\n }\n\n 66% {\n transform: translateY(50px);\n opacity: 0;\n }\n\n 100% {\n transform: translateY(0px);\n opacity: 1;\n }\n}\n@keyframes loader_top-slide-in-rtl_1vHi4 {\n 0% {\n transform: translateY(50px) scaleX(-1);\n opacity: 0;\n }\n\n 33% {\n transform: translateY(0px) scaleX(-1);\n opacity: 1;\n }\n 100% {\n transform: translateY(0px) scaleX(-1);\n opacity: 1;\n }\n}\n@keyframes loader_middle-slide-in-rtl_21ALw {\n 0% {\n transform: translateY(50px) scaleX(-1);\n opacity: 0;\n }\n\n 33% {\n transform: translateY(50px) scaleX(-1);\n opacity: 0;\n }\n\n 66% {\n transform: translateY(0px) scaleX(-1);\n opacity: 1;\n }\n 100% {\n transform: translateY(0px) scaleX(-1);\n opacity: 1;\n }\n}\n@keyframes loader_bottom-slide-in-rtl_3kdB0 {\n 0% {\n transform: translateY(50px) scaleX(-1);\n opacity: 0;\n }\n\n 66% {\n transform: translateY(50px) scaleX(-1);\n opacity: 0;\n }\n\n 100% {\n transform: translateY(0px) scaleX(-1);\n opacity: 1;\n }\n}\n.loader_title_1tlje {\n font-size: 2rem;\n font-weight: bold;\n margin: 0.75rem 0;\n}\n.loader_message-container-outer_3oT0S {\n height: 30px;\n overflow: hidden;\n}\n.loader_message-container-inner_1L7LX {\n transition: transform 0.5s;\n}\n.loader_message_3yQvj {\n height: 20px;\n margin: 5px 0;\n}\n.loader_tw-progress-outer_2BGnX {\n position: relative;\n width: 250px;\n height: 5px;\n border: 1px solid white;\n margin: auto;\n}\n.loader_tw-progress-inner_3hE3h {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 0;\n background-color: white;\n transition: width 200ms ease-in-out;\n}", ""]); // exports exports.locals = { "background": "loader_background_2DPrW", "fullscreen": "loader_fullscreen_29EhP", "block-animation": "loader_block-animation_12MqO", "blockAnimation": "loader_block-animation_12MqO", "top-block": "loader_top-block_3P7pK", "topBlock": "loader_top-block_3P7pK", "top-slide-in": "loader_top-slide-in_8ngR8", "topSlideIn": "loader_top-slide-in_8ngR8", "middle-block": "loader_middle-block_CKcTg", "middleBlock": "loader_middle-block_CKcTg", "middle-slide-in": "loader_middle-slide-in_In2DU", "middleSlideIn": "loader_middle-slide-in_In2DU", "bottom-block": "loader_bottom-block_1-3rO", "bottomBlock": "loader_bottom-block_1-3rO", "bottom-slide-in": "loader_bottom-slide-in_2DZ1B", "bottomSlideIn": "loader_bottom-slide-in_2DZ1B", "top-slide-in-rtl": "loader_top-slide-in-rtl_1vHi4", "topSlideInRtl": "loader_top-slide-in-rtl_1vHi4", "middle-slide-in-rtl": "loader_middle-slide-in-rtl_21ALw", "middleSlideInRtl": "loader_middle-slide-in-rtl_21ALw", "bottom-slide-in-rtl": "loader_bottom-slide-in-rtl_3kdB0", "bottomSlideInRtl": "loader_bottom-slide-in-rtl_3kdB0", "title": "loader_title_1tlje", "message-container-outer": "loader_message-container-outer_3oT0S", "messageContainerOuter": "loader_message-container-outer_3oT0S", "message-container-inner": "loader_message-container-inner_1L7LX", "messageContainerInner": "loader_message-container-inner_1L7LX", "message": "loader_message_3yQvj", "tw-progress-outer": "loader_tw-progress-outer_2BGnX", "twProgressOuter": "loader_tw-progress-outer_2BGnX", "tw-progress-inner": "loader_tw-progress-inner_3hE3h", "twProgressInner": "loader_tw-progress-inner_3hE3h" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/loupe/loupe.css": /*!***********************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/loupe/loupe.css ***! \***********************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.loupe_color-picker_1OaU- {\n position: absolute;\n top: 0;\n left: 0;\n border-radius: 100%;\n border: 4px solid hsla(0, 0%, 0%, 0.15);\n}\n", ""]); // exports exports.locals = { "color-picker": "loupe_color-picker_1OaU-", "colorPicker": "loupe_color-picker_1OaU-" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/author-info.css": /*!********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/menu-bar/author-info.css ***! \********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.author-info_author-info_2Pliw {\n color: hsla(0, 100%, 100%, 1);\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n cursor: default;\n}\n.author-info_avatar_31Mo8 {\n margin-right: .5625rem;\n}\n.author-info_project-title_h7Gcj {\n max-width: 12rem;\n display: block;\n overflow: hidden;\n font-size: 0.875rem;\n font-weight: bold;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0;\n padding: 0;\n}\n.author-info_username-line_18E8B {\n max-width: 12rem;\n font-size: 0.75rem;\n display: block;\n overflow: hidden;\n font-weight: normal;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.author-info_username_2Ov2- {\n font-weight: bold;\n}\n.author-info_link_3EUX3 {\n text-decoration: none;\n color: hsla(0, 100%, 100%, 1) !important;\n}\n.author-info_link_3EUX3:hover {\n text-decoration: underline;\n}\n.author-info_link_3EUX3 .author-info_author-info_2Pliw {\n cursor: pointer;\n}\n", ""]); // exports exports.locals = { "author-info": "author-info_author-info_2Pliw", "authorInfo": "author-info_author-info_2Pliw", "avatar": "author-info_avatar_31Mo8", "project-title": "author-info_project-title_h7Gcj", "projectTitle": "author-info_project-title_h7Gcj", "username-line": "author-info_username-line_18E8B", "usernameLine": "author-info_username-line_18E8B", "username": "author-info_username_2Ov2-", "link": "author-info_link_3EUX3" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/community-button.css": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/menu-bar/community-button.css ***! \*************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.community-button_community-button_2Lo_g {\n box-shadow: 0 0 0 1px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.community-button_community-button-icon_1IFvv {\n height: 1.25rem;\n}\n", ""]); // exports exports.locals = { "community-button": "community-button_community-button_2Lo_g", "communityButton": "community-button_community-button_2Lo_g", "community-button-icon": "community-button_community-button-icon_1IFvv", "communityButtonIcon": "community-button_community-button-icon_1IFvv" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/google-drive-save.css": /*!**************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/menu-bar/google-drive-save.css ***! \**************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".google-drive-save_modalOverlay_3d3x0 {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n color: #333;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n animation: google-drive-save_fadeIn_s-FbB 0.3s ease-out;\n}\n\n@keyframes google-drive-save_fadeIn_s-FbB {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.google-drive-save_modalContent_2cIEW {\n background-color: white;\n border-radius: 8px;\n width: 800px;\n max-width: 90%;\n max-height: 80vh;\n overflow: hidden;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n transform: translateY(-20px);\n animation: google-drive-save_slideUp_1IbMK 0.3s ease-out forwards;\n position: relative;\n}\n\n@keyframes google-drive-save_slideUp_1IbMK {\n from { transform: translateY(20px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n\n.google-drive-save_modalHeader_2mNls {\n padding: 1rem;\n border-bottom: 1px solid #eee;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background-color: #f8f9fa;\n}\n\n.google-drive-save_closeButton_H3MdN {\n background: none;\n border: none;\n color: #962d21;\n font-size: 1.5rem;\n cursor: pointer;\n transition: transform 0.2s, color 0.2s;\n}\n\n.google-drive-save_closeButton_H3MdN:hover:not(:disabled) {\n transform: scale(1.1);\n color: #c0392b;\n}\n\n.google-drive-save_closeButton_H3MdN:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.google-drive-save_modalBody_3KPt1 {\n padding: 1rem;\n max-height: 70vh;\n overflow-y: auto;\n}\n\n.google-drive-save_authSection_gK_Po {\n margin-bottom: 1rem;\n padding: 1rem;\n background-color: #f8f9fa;\n border-radius: 6px;\n animation: google-drive-save_fadeIn_s-FbB 0.5s ease-out;\n}\n\n.google-drive-save_accountInfo_2d2VN {\n margin-bottom: 0.5rem;\n font-weight: 500;\n}\n\n.google-drive-save_loginButton_1el0S, .google-drive-save_changeAccountButton_1UtRv, .google-drive-save_newFileButton_2zkI8 {\n padding: 0.5rem 1rem;\n background-color: #4CAF50;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.2s, transform 0.2s;\n}\n\n.google-drive-save_loginButton_1el0S:hover:not(:disabled), \n.google-drive-save_changeAccountButton_1UtRv:hover:not(:disabled), \n.google-drive-save_newFileButton_2zkI8:hover:not(:disabled) {\n background-color: #3e8e41;\n transform: translateY(-1px);\n}\n\n.google-drive-save_loginButton_1el0S:disabled, \n.google-drive-save_changeAccountButton_1UtRv:disabled, \n.google-drive-save_newFileButton_2zkI8:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n}\n\n.google-drive-save_changeAccountButton_1UtRv {\n background-color: #f0ad4e;\n}\n\n.google-drive-save_changeAccountButton_1UtRv:hover:not(:disabled) {\n background-color: #ec971f;\n}\n\n.google-drive-save_loading_2umPQ, .google-drive-save_noFiles_39m9Y {\n text-align: center;\n padding: 2rem;\n color: #666;\n}\n\n.google-drive-save_fileListContainer_28skg {\n margin-top: 1rem;\n animation: google-drive-save_fadeIn_s-FbB 0.5s ease-out;\n}\n\n.google-drive-save_fileListHeader_3nu42 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n padding-bottom: 0.5rem;\n border-bottom: 1px solid #eee;\n}\n\n.google-drive-save_projectTitle_226Ts {\n cursor: pointer;\n border-bottom: 1px dashed #000;\n color: #333;\n}\n\n.google-drive-save_fileList_1aJ2q {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 1rem;\n}\n\n.google-drive-save_fileItem_1OFYI {\n border: 1px solid #ddd;\n border-radius: 8px;\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n background: #fff;\n height: 100%;\n transition: transform 0.2s, box-shadow 0.2s;\n}\n\n.google-drive-save_fileItem_1OFYI:hover {\n transform: translateY(-3px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n}\n\n.google-drive-save_thumbnailContainer_1A8Nt {\n position: relative;\n aspect-ratio: 4/3;\n max-height: 150px;\n overflow: hidden;\n border-radius: 4px;\n background-color: #f0f0f0;\n transition: all 0.3s ease;\n}\n\n.google-drive-save_thumbnail_3AigH {\n width: 100%;\n height: 100%;\n border-radius: 4px;\n object-fit: contain;\n background-color: #f0f0f0;\n transition: transform 0.3s ease;\n}\n\n.google-drive-save_thumbnail_3AigH:hover {\n transform: scale(1.05);\n}\n\n.google-drive-save_thumbnailPlaceholder_1ZgDf {\n width: 100%;\n height: 100%;\n background-color: #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n color: #666;\n}\n\n.google-drive-save_fileName_1SfaP {\n margin: 0;\n text-align: center;\n font-weight: bold;\n color: #333;\n}\n\n.google-drive-save_linkContainer_2ns4z {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n margin-bottom: 0.5rem;\n}\n\n.google-drive-save_linkHeader_3EIDi {\n display: flex;\n gap: 8px;\n align-items: center;\n margin-bottom: 8px;\n flex-wrap: wrap;\n}\n\n.google-drive-save_copyButton_3gkqx {\n padding: 4px 8px;\n font-size: 12px;\n background-color: #50545e;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.google-drive-save_copyButton_3gkqx:hover:not(:disabled) {\n background-color: #3d4048;\n}\n\n.google-drive-save_copyButton_3gkqx:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.google-drive-save_linkUrl_2rPjc {\n font-size: 0.9em;\n word-break: break-all;\n color: #1155cc;\n text-decoration: none;\n border-bottom: 1px solid #1155cc;\n transition: color 0.2s;\n}\n\n.google-drive-save_linkUrl_2rPjc:hover {\n color: #0d3d8b;\n}\n\n.google-drive-save_buttonGroup_19Wer {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0.5rem;\n}\n\n.google-drive-save_actionButton_2eE21 {\n width: 100%;\n padding: 0.5rem;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.google-drive-save_actionButton_2eE21:hover:not(:disabled) {\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n.google-drive-save_actionButton_2eE21:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n box-shadow: none;\n}\n\n.google-drive-save_shareButton_jm-JT {\n background-color: #4CAF50;\n color: white;\n}\n\n.google-drive-save_shareButton_jm-JT:hover:not(:disabled) {\n background-color: #3e8e41;\n}\n\n.google-drive-save_deleteButton_2pZKO {\n background-color: #ff4444;\n color: white;\n}\n\n.google-drive-save_deleteButton_2pZKO:hover:not(:disabled) {\n background-color: #cc0000;\n}\n\n.google-drive-save_newFileSection_3IwQy {\n margin-bottom: 1rem;\n padding: 1rem;\n background-color: #f8f9fa;\n border-radius: 6px;\n}\n\n.google-drive-save_newFileInputGroup_BEcsr {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n align-items: center;\n}\n\n.google-drive-save_newFileNameInput_3aw4v {\n flex: 1;\n min-width: 200px;\n padding: 0.5rem;\n border: 1px solid #ddd;\n border-radius: 4px;\n transition: border-color 0.2s;\n}\n\n.google-drive-save_newFileNameInput_3aw4v:focus {\n border-color: #4CAF50;\n outline: none;\n}\n\n.google-drive-save_newFileNameInput_3aw4v:disabled {\n background-color: #f0f0f0;\n}\n\n.google-drive-save_permissionDropdown_2BPNl {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.google-drive-save_permissionDropdown_2BPNl select {\n padding: 0.5rem;\n border: 1px solid #ddd;\n border-radius: 4px;\n background-color: white;\n transition: border-color 0.2s;\n}\n\n.google-drive-save_permissionDropdown_2BPNl select:focus {\n border-color: #4CAF50;\n outline: none;\n}\n\n.google-drive-save_permissionDropdown_2BPNl select:disabled {\n background-color: #f0f0f0;\n}\n\n.google-drive-save_newFileSaveButton_4NpiF, .google-drive-save_newFileCancelButton_Ee57L {\n padding: 0.5rem 1rem;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.google-drive-save_newFileSaveButton_4NpiF {\n background-color: #4CAF50;\n color: white;\n}\n\n.google-drive-save_newFileSaveButton_4NpiF:hover:not(:disabled) {\n background-color: #3e8e41;\n transform: translateY(-1px);\n}\n\n.google-drive-save_newFileSaveButton_4NpiF:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.google-drive-save_newFileCancelButton_Ee57L {\n background-color: #f0f0f0;\n color: #333;\n}\n\n.google-drive-save_newFileCancelButton_Ee57L:hover:not(:disabled) {\n background-color: #e0e0e0;\n transform: translateY(-1px);\n}\n\n.google-drive-save_newFileCancelButton_Ee57L:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.google-drive-save_processingOverlay_2iqUf {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.8);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n z-index: 10;\n animation: google-drive-save_fadeIn_s-FbB 0.3s ease-out;\n}\n\n.google-drive-save_spinner_1_EwA {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: #4CAF50;\n animation: google-drive-save_spin_2AfXh 1s ease-in-out infinite;\n margin-bottom: 1rem;\n}\n\n@keyframes google-drive-save_spin_2AfXh {\n to { transform: rotate(360deg); }\n}\n\n.google-drive-save_saveButton_2wGQy {\n transition: all 0.2s;\n}\n\n.google-drive-save_saveButton_2wGQy:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n.google-drive-save_permissionDropdown_2BPNl {\n margin-top: 10px;\n padding: 5px;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n\n.google-drive-save_permissionDropdown_2BPNl label {\n margin-right: 5px;\n font-size: 12px;\n}\n\n.google-drive-save_permissionDropdown_2BPNl select {\n padding: 3px;\n border: 1px solid #ddd;\n border-radius: 3px;\n font-size: 12px;\n}", ""]); // exports exports.locals = { "modalOverlay": "google-drive-save_modalOverlay_3d3x0", "fadeIn": "google-drive-save_fadeIn_s-FbB", "modalContent": "google-drive-save_modalContent_2cIEW", "slideUp": "google-drive-save_slideUp_1IbMK", "modalHeader": "google-drive-save_modalHeader_2mNls", "closeButton": "google-drive-save_closeButton_H3MdN", "modalBody": "google-drive-save_modalBody_3KPt1", "authSection": "google-drive-save_authSection_gK_Po", "accountInfo": "google-drive-save_accountInfo_2d2VN", "loginButton": "google-drive-save_loginButton_1el0S", "changeAccountButton": "google-drive-save_changeAccountButton_1UtRv", "newFileButton": "google-drive-save_newFileButton_2zkI8", "loading": "google-drive-save_loading_2umPQ", "noFiles": "google-drive-save_noFiles_39m9Y", "fileListContainer": "google-drive-save_fileListContainer_28skg", "fileListHeader": "google-drive-save_fileListHeader_3nu42", "projectTitle": "google-drive-save_projectTitle_226Ts", "fileList": "google-drive-save_fileList_1aJ2q", "fileItem": "google-drive-save_fileItem_1OFYI", "thumbnailContainer": "google-drive-save_thumbnailContainer_1A8Nt", "thumbnail": "google-drive-save_thumbnail_3AigH", "thumbnailPlaceholder": "google-drive-save_thumbnailPlaceholder_1ZgDf", "fileName": "google-drive-save_fileName_1SfaP", "linkContainer": "google-drive-save_linkContainer_2ns4z", "linkHeader": "google-drive-save_linkHeader_3EIDi", "copyButton": "google-drive-save_copyButton_3gkqx", "linkUrl": "google-drive-save_linkUrl_2rPjc", "buttonGroup": "google-drive-save_buttonGroup_19Wer", "actionButton": "google-drive-save_actionButton_2eE21", "shareButton": "google-drive-save_shareButton_jm-JT", "deleteButton": "google-drive-save_deleteButton_2pZKO", "newFileSection": "google-drive-save_newFileSection_3IwQy", "newFileInputGroup": "google-drive-save_newFileInputGroup_BEcsr", "newFileNameInput": "google-drive-save_newFileNameInput_3aw4v", "permissionDropdown": "google-drive-save_permissionDropdown_2BPNl", "newFileSaveButton": "google-drive-save_newFileSaveButton_4NpiF", "newFileCancelButton": "google-drive-save_newFileCancelButton_Ee57L", "processingOverlay": "google-drive-save_processingOverlay_2iqUf", "spinner": "google-drive-save_spinner_1_EwA", "spin": "google-drive-save_spin_2AfXh", "saveButton": "google-drive-save_saveButton_2wGQy" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/menu-bar.css": /*!*****************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/menu-bar/menu-bar.css ***! \*****************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n.menu-bar_menu-bar_JcuHF {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n flex-wrap: nowrap;\n\n /*\n For most things, we shouldn't explicitly set height, and let the\n content push the element to whatever fits. Using a fixed height\n instead, will help us subtract the value we assign from the body,\n adding up to a perfect 100%. This means we don't need to set\n overflow: hidden, which makes it hard to debug. border-box\n simplifies by all of this by removing padding from the equation.\n */\n box-sizing: border-box;\n height: 3rem;\n\n /*\n @todo: This adds ~20px in Chrome, when scrolling to the right,\n but fixes [FFx + Safari] [resize window down + scroll to the right] bug.\n width: 100%;\n */\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 0.75rem;\n font-weight: bold;\n background-color: hsla(266, 100%, 50%, 1);\n color: hsla(0, 100%, 100%, 1);\n}\n[theme=\"dark\"] .menu-bar_menu-bar_JcuHF {\n background-color: #5500cc;\n}\n.menu-bar_main-menu_3wjWH {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n flex-wrap: nowrap;\n align-items: center;\n flex-grow: 1;\n}\n.menu-bar_scratch-logo_2uReV {\n height: 1.6rem;\n vertical-align: middle;\n}\n.menu-bar_scratch-logo_2uReV.menu-bar_clickable_1g3uo {\n cursor: pointer;\n}\n.menu-bar_language-icon_2DZV7 {\n height: 1.5rem;\n vertical-align: middle;\n}\n.menu-bar_language-caret_16tau {\n margin: 0 .125rem;\n}\n.menu-bar_language-menu_2JEDx {\n box-sizing: border-box;\n display: inline-flex;\n width: 3rem;\n}\n.menu-bar_menu-bar-item_oLDa- {\n display: flex;\n padding: 0 0.25rem;\n text-decoration: none;\n color: hsla(0, 100%, 100%, 1);\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n align-self: center;\n position: relative;\n align-items: center;\n white-space: nowrap;\n height: 3rem;\n}\n.menu-bar_menu-bar-item_oLDa-.menu-bar_hoverable_c6WFB {\n cursor: pointer;\n}\n.menu-bar_menu-bar-item_oLDa-.menu-bar_active_2Lfqh,\n.menu-bar_menu-bar-item_oLDa-.menu-bar_hoverable_c6WFB:hover {\n background-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.menu-bar_menu-bar-item_oLDa-.menu-bar_growable_1sHWN {\n max-width: 12rem;\n flex: 1;\n}\n.menu-bar_title-field-growable_3qr4G {\n flex-grow: 1;\n width: 2rem;\n}\n.menu-bar_file-group_1_CHX {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.menu-bar_file-group_1_CHX .menu-bar_menu-bar-item_oLDa- {\n padding: 0 0.75rem;\n}\n.menu-bar_menu-bar-item_oLDa-.menu-bar_language-menu_2JEDx {\n padding: 0 0.5rem;\n}\n.menu-bar_menu-bar-menu_239MD {\n margin-top: 3rem;\n z-index: 491;\n}\n.menu-bar_feedback-link_1BnAR {\n color: hsla(266, 100%, 50%, 1) !important;\n text-decoration: none;\n}\n[theme=\"dark\"] .menu-bar_feedback-link_1BnAR {\n color: #5500cc !important;\n}\n.menu-bar_feedback-button_2rEcj {\n background-color: hsla(0, 100%, 100%, 1);\n height: 34px;\n}\n.menu-bar_divider_2VFCm {\n margin: 0 .5rem;\n height: 34px;\n}\n.menu-bar_author-info_22Nub {\n margin-left: .25rem;\n margin-right: .6875rem;\n}\n.menu-bar_menu-bar-button_3IDN0 {\n height: 2rem;\n}\n.menu-bar_remix-button_2LQQc {\n background-color: hsla(266, 85%, 40%, 1)\n}\n.menu-bar_remix-button-icon_2E93U {\n height: 1.25rem;\n}\n.menu-bar_coming-soon_3yU1L >:not(.menu-bar_coming-soon-tooltip_20GhI) {\n opacity: 0.5;\n}\n.menu-bar_account-info-group_MeJZP {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.menu-bar_account-info-group_MeJZP .menu-bar_menu-bar-item_oLDa- {\n padding: 0 0.75rem;\n}\n.menu-bar_mystuff-icon_3DtcD {\n margin: 0 .25rem;\n height: 1rem;\n}\n.menu-bar_help-icon_3Xtrt {\n margin-right: 0.35rem;\n}\n.menu-bar_account-nav-menu_3uu9p, .menu-bar_mystuff-button_16jPf {\n padding: 0 .25rem;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.menu-bar_profile-icon_2bJkI {\n margin: 0 .25rem;\n width: 2rem;\n border-radius: calc(0.5rem / 2);\n}\n.menu-bar_dropdown-caret-icon_FkdUe {\n width: 0.5rem;\n height: 0.5rem;\n}\n[dir=\"ltr\"] .menu-bar_dropdown-caret-icon_FkdUe {\n margin-left: .5rem;\n}\n[dir=\"rtl\"] .menu-bar_dropdown-caret-icon_FkdUe {\n margin-right: .5rem;\n}\n.menu-bar_disabled_3x5sy {\n opacity: 0.5;\n}\n.menu-bar_mystuff_3RiSb > a {\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 45%;\n padding-right: 10px;\n padding-left: 10px;\n width: 30px;\n overflow: hidden;\n text-indent: 50px;\n white-space: nowrap;\n}\n.menu-bar_mystuff_3RiSb > a:hover {\n background-size: 50%;\n}\n.menu-bar_mystuff_3RiSb > a {\n /* background-image: url(\"/images/mystuff.png\"); */\n}\n.menu-bar_about-icon_dZI7K {\n height: 1.25rem;\n margin: 0.5rem;\n vertical-align: middle;\n}\n/* tw: styles to override styles */\n.menu-bar_menu-item-link_20T0- {\n color: hsla(0, 100%, 100%, 1) !important;\n text-decoration: none;\n}\n", ""]); // exports exports.locals = { "menu-bar": "menu-bar_menu-bar_JcuHF", "menuBar": "menu-bar_menu-bar_JcuHF", "main-menu": "menu-bar_main-menu_3wjWH", "mainMenu": "menu-bar_main-menu_3wjWH", "scratch-logo": "menu-bar_scratch-logo_2uReV", "scratchLogo": "menu-bar_scratch-logo_2uReV", "clickable": "menu-bar_clickable_1g3uo", "language-icon": "menu-bar_language-icon_2DZV7", "languageIcon": "menu-bar_language-icon_2DZV7", "language-caret": "menu-bar_language-caret_16tau", "languageCaret": "menu-bar_language-caret_16tau", "language-menu": "menu-bar_language-menu_2JEDx", "languageMenu": "menu-bar_language-menu_2JEDx", "menu-bar-item": "menu-bar_menu-bar-item_oLDa-", "menuBarItem": "menu-bar_menu-bar-item_oLDa-", "hoverable": "menu-bar_hoverable_c6WFB", "active": "menu-bar_active_2Lfqh", "growable": "menu-bar_growable_1sHWN", "title-field-growable": "menu-bar_title-field-growable_3qr4G", "titleFieldGrowable": "menu-bar_title-field-growable_3qr4G", "file-group": "menu-bar_file-group_1_CHX", "fileGroup": "menu-bar_file-group_1_CHX", "menu-bar-menu": "menu-bar_menu-bar-menu_239MD", "menuBarMenu": "menu-bar_menu-bar-menu_239MD", "feedback-link": "menu-bar_feedback-link_1BnAR", "feedbackLink": "menu-bar_feedback-link_1BnAR", "feedback-button": "menu-bar_feedback-button_2rEcj", "feedbackButton": "menu-bar_feedback-button_2rEcj", "divider": "menu-bar_divider_2VFCm", "author-info": "menu-bar_author-info_22Nub", "authorInfo": "menu-bar_author-info_22Nub", "menu-bar-button": "menu-bar_menu-bar-button_3IDN0", "menuBarButton": "menu-bar_menu-bar-button_3IDN0", "remix-button": "menu-bar_remix-button_2LQQc", "remixButton": "menu-bar_remix-button_2LQQc", "remix-button-icon": "menu-bar_remix-button-icon_2E93U", "remixButtonIcon": "menu-bar_remix-button-icon_2E93U", "coming-soon": "menu-bar_coming-soon_3yU1L", "comingSoon": "menu-bar_coming-soon_3yU1L", "coming-soon-tooltip": "menu-bar_coming-soon-tooltip_20GhI", "comingSoonTooltip": "menu-bar_coming-soon-tooltip_20GhI", "account-info-group": "menu-bar_account-info-group_MeJZP", "accountInfoGroup": "menu-bar_account-info-group_MeJZP", "mystuff-icon": "menu-bar_mystuff-icon_3DtcD", "mystuffIcon": "menu-bar_mystuff-icon_3DtcD", "help-icon": "menu-bar_help-icon_3Xtrt", "helpIcon": "menu-bar_help-icon_3Xtrt", "account-nav-menu": "menu-bar_account-nav-menu_3uu9p", "accountNavMenu": "menu-bar_account-nav-menu_3uu9p", "mystuff-button": "menu-bar_mystuff-button_16jPf", "mystuffButton": "menu-bar_mystuff-button_16jPf", "profile-icon": "menu-bar_profile-icon_2bJkI", "profileIcon": "menu-bar_profile-icon_2bJkI", "dropdown-caret-icon": "menu-bar_dropdown-caret-icon_FkdUe", "dropdownCaretIcon": "menu-bar_dropdown-caret-icon_FkdUe", "disabled": "menu-bar_disabled_3x5sy", "mystuff": "menu-bar_mystuff_3RiSb", "about-icon": "menu-bar_about-icon_dZI7K", "aboutIcon": "menu-bar_about-icon_dZI7K", "menu-item-link": "menu-bar_menu-item-link_20T0-", "menuItemLink": "menu-bar_menu-item-link_20T0-" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/project-title-input.css": /*!****************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/menu-bar/project-title-input.css ***! \****************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n/*\nIf project-title-input.jsx is part of a menu bar say menu-bar.jsx, it can have additional css classes that\ncan set a width for example or what it should do in a flex box (eg. grow).\n*/\n.project-title-input_title-field_en5Gd {\n border: 1px dashed var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: calc(0.5rem / 2);\n -webkit-border-radius: calc(0.5rem / 2);\n -moz-border-radius: calc(0.5rem / 2);\n background-color: hsla(0, 100%, 100%, 0.25);\n background-clip: padding-box;\n -webkit-background-clip: padding-box;\n height: auto;\n padding: .5rem;\n}\n.project-title-input_title-field_en5Gd {\n color: hsla(0, 100%, 100%, 1);\n font-weight: bold;\n font-size: .8rem;\n}\n.project-title-input_title-field_en5Gd::-ms-input-placeholder {\n color: hsla(0, 100%, 100%, 1);\n font-weight: normal;\n font-size: .8rem;\n font-style: italic;\n}\n.project-title-input_title-field_en5Gd::placeholder {\n color: hsla(0, 100%, 100%, 1);\n font-weight: normal;\n font-size: .8rem;\n font-style: italic;\n}\n.project-title-input_title-field_en5Gd:hover {\n background-color: hsla(0, 100%, 100%, 0.5);\n}\n[theme=\"dark\"] .project-title-input_title-field_en5Gd:hover {\n background-color: rgba(0, 0, 0, 0.5);\n}\n.project-title-input_title-field_en5Gd:focus {\n outline:none;\n border: 1px solid hsla(0, 100%, 100%, 0);\n box-shadow: 0 0 0 calc(0.5rem * .5) hsla(0, 100%, 100%, 0.25);\n background-color: hsla(0, 100%, 100%, 1);\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n}\n[theme=\"dark\"] .project-title-input_title-field_en5Gd:focus {\n background-color: rgba(0, 0, 0, 0.3);\n}\n", ""]); // exports exports.locals = { "title-field": "project-title-input_title-field_en5Gd", "titleField": "project-title-input_title-field_en5Gd" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/save-status.css": /*!********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/menu-bar/save-status.css ***! \********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".save-status_save-now_2shdk {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n cursor: pointer;\n}\n", ""]); // exports exports.locals = { "save-now": "save-status_save-now_2shdk", "saveNow": "save-status_save-now_2shdk" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/share-button.css": /*!*********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/menu-bar/share-button.css ***! \*********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n@keyframes share-button_iconSpin_3meM- {\n 0% {\n rotate: 0deg;\n }\n 50% {\n rotate: 180deg;\n }\n 100% {\n rotate: 360deg;\n }\n}\n.share-button_share-button_Nxxf0 {\n display: none;\n background: hsla(266, 100%, 50%, 1);\n color: hsla(0, 100%, 100%, 1);\n box-shadow: 0 0 0 1px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.share-button_disabled_3xIlk {\n cursor: not-allowed;\n}\n.share-button_share-content_6V4Qf {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n}\n[theme=\"dark\"] .share-button_share-button_Nxxf0 {\n background: transparent;\n color: hsla(0, 100%, 100%, 1);\n box-shadow: 0 0 0 1px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.share-button_share-button-is-shared_1tjKq {\n background: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n cursor: default;\n}\n.share-button_icon_3-l8i {\n height: 1.5rem;\n margin-left: 4px;\n animation-name: share-button_iconSpin_3meM-;\n animation-timing-function: linear;\n animation-duration: 1s;\n animation-iteration-count: infinite;\n}", ""]); // exports exports.locals = { "share-button": "share-button_share-button_Nxxf0", "shareButton": "share-button_share-button_Nxxf0", "disabled": "share-button_disabled_3xIlk", "share-content": "share-button_share-content_6V4Qf", "shareContent": "share-button_share-content_6V4Qf", "share-button-is-shared": "share-button_share-button-is-shared_1tjKq", "shareButtonIsShared": "share-button_share-button-is-shared_1tjKq", "icon": "share-button_icon_3-l8i", "iconSpin": "share-button_iconSpin_3meM-" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/tw-see-inside.css": /*!**********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/menu-bar/tw-see-inside.css ***! \**********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* this class must contain \"see-inside-button\" somewhere for the s3 dev tools to be able to reinject itself */\n/* https://github.com/griffpatch/Scratch3-Dev-Tools/blob/0.2.4/inject3.js#L1804-L1807 */\n.tw-see-inside_see-inside-button_3ecsR {\n box-shadow: 0 0 0 1px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.tw-see-inside_see-inside-button-icon_1fQvM {\n height: 1.25rem;\n}\n", ""]); // exports exports.locals = { "see-inside-button": "tw-see-inside_see-inside-button_3ecsR", "seeInsideButton": "tw-see-inside_see-inside-button_3ecsR", "see-inside-button-icon": "tw-see-inside_see-inside-button-icon_1fQvM", "seeInsideButtonIcon": "tw-see-inside_see-inside-button-icon_1fQvM" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/user-avatar.css": /*!********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/menu-bar/user-avatar.css ***! \********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.user-avatar_user-thumbnail_jSYS1 {\n width: 2rem;\n height: 2rem;\n border-radius: calc(0.5rem / 2);\n vertical-align: middle;\n box-shadow: 0 0 0 1px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n", ""]); // exports exports.locals = { "user-thumbnail": "user-avatar_user-thumbnail_jSYS1", "userThumbnail": "user-avatar_user-thumbnail_jSYS1" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu/menu.css": /*!*********************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/menu/menu.css ***! \*********************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.menu_menu_3k7QT {\n position: absolute;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0 0 8px 8px;\n background-color: hsla(266, 100%, 50%, 1);\n padding: 0;\n margin: 0;\n min-width: 186px;\n /* tw: no max width */\n /* max-width: 260px; */\n overflow: visible;\n color: hsla(0, 100%, 100%, 1);\n box-shadow: 0 8px 8px 0 hsla(0, 0%, 0%, 0.15);\n}\n[theme=\"dark\"] .menu_menu_3k7QT {\n background-color: #5500cc;\n}\n.menu_menu_3k7QT.menu_left_dujsV {\n right: 0;\n}\n.menu_menu_3k7QT.menu_right_3PQ4S {\n left: 0;\n}\n.menu_menu-item_3EwYA {\n display: block;\n line-height: 34px;\n white-space: nowrap;\n padding: 0 10px;\n font-size: .75rem;\n margin: 0;\n font-weight: bold;\n}\n.menu_menu-item_3EwYA.menu_active_ebXO6,\n.menu_menu-item_3EwYA:hover {\n background-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.menu_menu-item_3EwYA.menu_hoverable_3u9dt {\n cursor: pointer;\n}\n.menu_menu-section_2U-v6 {\n border-top: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n", ""]); // exports exports.locals = { "menu": "menu_menu_3k7QT", "left": "menu_left_dujsV", "right": "menu_right_3PQ4S", "menu-item": "menu_menu-item_3EwYA", "menuItem": "menu_menu-item_3EwYA", "active": "menu_active_ebXO6", "hoverable": "menu_hoverable_3u9dt", "menu-section": "menu_menu-section_2U-v6", "menuSection": "menu_menu-section_2U-v6" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/meter/meter.css": /*!***********************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/meter/meter.css ***! \***********************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.meter_green_oUPv2 {\n fill: rgb(171, 220, 170);\n stroke: rgb(174, 211, 168);\n}\n.meter_yellow_3uz-j {\n fill: rgb(251, 219, 130);\n stroke: rgb(239, 212, 134);\n}\n.meter_red_1aMUm {\n fill: rgb(251, 194, 142);\n stroke: rgb(235, 189, 142);\n}\n.meter_mask-container_11m_n {\n position: relative;\n}\n.meter_mask_B-cd7 {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n transform-origin: top;\n will-change: transform;\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n opacity: 0.75;\n}\n", ""]); // exports exports.locals = { "green": "meter_green_oUPv2", "yellow": "meter_yellow_3uz-j", "red": "meter_red_1aMUm", "mask-container": "meter_mask-container_11m_n", "maskContainer": "meter_mask-container_11m_n", "mask": "meter_mask_B-cd7" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/mic-indicator/mic-indicator.css": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/mic-indicator/mic-indicator.css ***! \***************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "@keyframes mic-indicator_popIn_2A2Un {\n from {transform: scale(0.5)}\n to {transform: scale(1)}\n}\n\n.mic-indicator_mic-img_Su3yZ {\n margin: 10px;\n transform-origin: center;\n animation: mic-indicator_popIn_2A2Un 0.1s ease-in-out;\n}\n", ""]); // exports exports.locals = { "mic-img": "mic-indicator_mic-img_Su3yZ", "micImg": "mic-indicator_mic-img_Su3yZ", "popIn": "mic-indicator_popIn_2A2Un" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/modal/modal.css": /*!***********************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/modal/modal.css ***! \***********************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n.modal_modal-overlay_1Lcbx {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 510;\n background-color: var(--ui-modal-overlay, hsla(266, 100%, 65%, 0.9));\n}\n.modal_scrollable_1tGpL {\n overflow: auto;\n}\n.modal_modal-content_1h3ll * {\n box-sizing: border-box;\n}\n.modal_modal-content_1h3ll {\n margin: 100px auto;\n outline: none;\n border: 4px solid hsla(0, 100%, 100%, 0.25);\n padding: 0;\n border-radius: 0.5rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: hsla(266, 30%, 40%, 1);\n overflow: hidden;\n}\n.modal_modal-content_1h3ll.modal_full-screen_FA4cr {\n position: absolute;\n\n display: flex;\n height: 100%;\n width: 100%;\n\n overflow-y: auto;\n -webkit-overflow-scrolling: 'touch';\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n background-color: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n\n /* Default modal resets */\n margin: 0;\n border: none;\n border-radius: 0;\n}\n/*\n Modal header has 3 items:\n |filter title x|\n\n Use the same width for both side item containers,\n so that title remains centered\n*/\n.modal_header_1h7ps {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n height: 3.125rem;\n\n box-sizing: border-box;\n width: 100%;\n background-color: hsla(266, 100%, 50%, 1);\n \n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 1rem;\n font-weight: normal;\n}\n[theme=\"dark\"] .modal_header_1h7ps {\n background-color: #5500cc;\n}\n[theme=\"dark\"] .modal_full-screen_FA4cr .modal_header_1h7ps {\n background-color: hsla(266, 100%, 50%, 1);\n}\n.modal_header-item_2zQTd {\n display: flex;\n align-items: center;\n padding: 1rem;\n text-decoration: none;\n color: hsla(0, 100%, 100%, 1);\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n[dir=\"ltr\"] .modal_header-image_2KMDd {\n margin-right: 0.5rem;\n}\n[dir=\"rtl\"] .modal_header-image_2KMDd {\n margin-left: 0.5rem;\n}\n.modal_header-item-filter_3W-ah {\n display: flex;\n flex-basis: 20rem;\n justify-content: flex-start;\n}\n.modal_header-item-title_tLOU5 {\n flex-grow: 1;\n flex-shrink: 0;\n justify-content: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n letter-spacing: 0.4px;\n cursor: default;\n}\n[dir=\"ltr\"] .modal_header-item-title_tLOU5 {\n margin: 0 -20rem 0 0;\n}\n[dir=\"rtl\"] .modal_header-item-title_tLOU5 {\n margin: 0 0 0 -20rem;\n}\n.modal_full-screen_FA4cr [dir=\"ltr\"] .modal_header-item-title_tLOU5 {\n margin: 0 0 0 -20rem;\n}\n.modal_full-screen_FA4cr [dir=\"rtl\"] .modal_header-item-title_tLOU5 {\n margin: 0 -20rem 0 0;\n}\n.modal_header-item-close_2XDeL {\n flex-basis: 20rem;\n justify-content: flex-end;\n z-index: 1;\n}\n.modal_full-screen_FA4cr .modal_header-item-close_2XDeL {\n order: -1;\n justify-content: flex-start;\n}\n.modal_back-button_2ej6v {\n font-weight: normal;\n padding-right: 0;\n padding-left: 0;\n}\n[dir=\"rtl\"] .modal_back-button_2ej6v img {\n transform: scaleX(-1);\n}\n.modal_header-item-help_UZFrJ {\n padding: 0;\n z-index: 1;\n}\n[dir=\"ltr\"] .modal_header-item-help_UZFrJ {\n margin-right: -4.75rem;\n}\n[dir=\"rtl\"] .modal_header-item-help_UZFrJ {\n margin-left: -4.75rem;\n}\n.modal_help-button_dLhZu {\n font-weight: normal;\n font-size: 0.75rem;\n}\n[dir=\"ltr\"] .modal_help-button_dLhZu {\n padding-right: 0;\n}\n[dir=\"rtl\"] .modal_help-button_dLhZu {\n padding-left: 0;\n}\n", ""]); // exports exports.locals = { "modal-overlay": "modal_modal-overlay_1Lcbx", "modalOverlay": "modal_modal-overlay_1Lcbx", "scrollable": "modal_scrollable_1tGpL", "modal-content": "modal_modal-content_1h3ll", "modalContent": "modal_modal-content_1h3ll", "full-screen": "modal_full-screen_FA4cr", "fullScreen": "modal_full-screen_FA4cr", "header": "modal_header_1h7ps", "header-item": "modal_header-item_2zQTd", "headerItem": "modal_header-item_2zQTd", "header-image": "modal_header-image_2KMDd", "headerImage": "modal_header-image_2KMDd", "header-item-filter": "modal_header-item-filter_3W-ah", "headerItemFilter": "modal_header-item-filter_3W-ah", "header-item-title": "modal_header-item-title_tLOU5", "headerItemTitle": "modal_header-item-title_tLOU5", "header-item-close": "modal_header-item-close_2XDeL", "headerItemClose": "modal_header-item-close_2XDeL", "back-button": "modal_back-button_2ej6v", "backButton": "modal_back-button_2ej6v", "header-item-help": "modal_header-item-help_UZFrJ", "headerItemHelp": "modal_header-item-help_UZFrJ", "help-button": "modal_help-button_dLhZu", "helpButton": "modal_help-button_dLhZu" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/monitor-list/monitor-list.css": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/monitor-list/monitor-list.css ***! \*************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".monitor-list_monitor-list_20k-y {\n /* Width/height are set by the component, margin: auto centers in fullscreen */\n margin: auto;\n pointer-events: none;\n overflow: hidden;\n}\n\n.monitor-list_monitor-list-scaler_143tA {\n /* Scaling for monitors should happen from the top left */\n transform-origin: left top;\n}\n\n::-ms-clear { display: none; }\n", ""]); // exports exports.locals = { "monitor-list": "monitor-list_monitor-list_20k-y", "monitorList": "monitor-list_monitor-list_20k-y", "monitor-list-scaler": "monitor-list_monitor-list-scaler_143tA", "monitorListScaler": "monitor-list_monitor-list-scaler_143tA" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/monitor/monitor.css": /*!***************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/monitor/monitor.css ***! \***************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n\n/* Toolbox z-index: 40; set in scratch-blocks */\n\n/* tooltips should go over add buttons if they overlap */\n\n/* monitors go over add buttons */\n\n/* \"ask\" block text input goes above monitors */\n\n/* menu-bar should go over monitors, alerts and tutorials */\n\n/* tw: show below menu bar normally */\n\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n\n/* so it is draggable into other panes */\n\n/* in most interfaces, the context menu is always on top */\n\n.monitor_monitor-container_2J9gl {\n position: absolute;\n background: hsla(266, 100%, 95%, 1); /* tw: do not look different in dark mode */\n z-index: 48;\n border: 1px solid hsla(0, 0%, 0%, 0.15);\n border-radius: calc(0.5rem / 2);\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 0.75rem;\n transition: box-shadow 0.2s;\n pointer-events: all;\n overflow: hidden;\n color: #575e75; /* tw: explicitly set color to match Scratch */\n}\n\n.monitor_monitor_11Vhm:hover {\n cursor: pointer;\n}\n\n.monitor_dragging_2ZN-P {\n z-index: 1010;\n box-shadow: 3px 3px 5px #888888;\n}\n\n.monitor_default-monitor_2vCcZ {\n display: flex;\n flex-direction: column;\n padding: 3px;\n}\n\n.monitor_label_ci1ok {\n font-weight: bold;\n text-align: center;\n margin: 0 5px;\n}\n\n.monitor_value_3Yexa {\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: 40px;\n text-align: center;\n color: white;\n margin: 0 5px;\n border-radius: calc(0.5rem / 2);\n padding: 0 2px;\n white-space: pre-wrap;\n transform: translateZ(0); /* Fixes flickering in Safari */\n}\n\n.monitor_large-value_P-rAm {\n min-height: 1.4rem;\n min-width: 3rem;\n padding: 0.1rem 0.25rem;\n text-align: center;\n color: white;\n font-size: 1rem;\n white-space: pre-wrap;\n transform: translateZ(0); /* Fixes flickering in Safari */\n}\n\n.monitor_row_2y_kM {\n display: flex;\n flex-direction: row;\n}\n\n.monitor_slider_1CHwk {\n width: 100%;\n transform: translateZ(0); /* Fixes flickering in Safari */\n}\n\n.monitor_list-monitor_1FdIj {\n display: flex;\n flex-direction: column;\n}\n\n.monitor_list-header_-cp0o {\n background: hsla(0, 100%, 100%, 1);\n border-bottom: 1px solid hsla(0, 0%, 0%, 0.15);\n text-align: center;\n padding: 3px;\n font-size: 0.75rem;\n font-weight: bold;\n color: hsla(266, 30%, 40%, 1); /* tw: do not look different in dark mode */\n width: 100%;\n}\n\n.monitor_list-body_2OFZ6 {\n background: hsla(266, 100%, 95%, 1); /* tw: do not look different in dark mode */\n width: 100%;\n display: flex;\n flex-direction: column;\n overflow-x: hidden;\n flex-grow: 1;\n}\n\n.monitor_list-row_okCNn {\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n align-items: center;\n padding: 2px;\n flex-shrink: 0;\n transform: translateZ(0); /* Keep sharp when scaled */\n}\n\n.monitor_list-index_7tKdl {\n font-weight: bold;\n color: hsla(266, 30%, 40%, 1); /* tw: do not look different in dark mode */\n margin: 0 3px;\n}\n\n.monitor_list-value_1zGfI {\n min-width: 40px;\n text-align: left;\n color: white;\n margin: 0 3px;\n border-radius: calc(0.5rem / 2);\n border: 1px solid hsla(0, 0%, 0%, 0.15);\n flex-grow: 1;\n height: 22px;\n}\n\n.monitor_list-footer_2HyG8 {\n background: hsla(0, 100%, 100%, 1);\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding: 3px;\n font-size: 0.75rem;\n font-weight: bold;\n border-top: 1px solid hsla(0, 0%, 0%, 0.15);\n color: hsla(266, 30%, 40%, 1); /* tw: do not look different in dark mode */\n}\n\n.monitor_list-empty_1UKsB {\n text-align: center;\n width: 100%;\n padding: 5px;\n}\n\n.monitor_input-wrapper_2yExa {\n position: relative;\n overflow: hidden;\n display: flex;\n align-items: center;\n background: rgba(0, 0, 0, 0.1);\n}\n\n.monitor_value-inner_3E9Ou {\n padding: 3px 5px;\n min-height: 22px;\n overflow: hidden; /* Don't let long values escape container */\n text-overflow: ellipsis;\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text; /* Allow selecting list values for 2.0 compatibility, only relevant in player */\n white-space: pre;\n}\n\n.monitor_list-input_3kw5o {\n padding: 3px 5px;\n border: 0;\n background: none;\n color: hsla(0, 100%, 100%, 1);\n outline: none;\n font-size: 0.75rem;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n /* Workaround for Firefox */\n width: 0;\n flex: 1 1 auto;\n}\n\n.monitor_remove-button_AhlwG {\n padding: 0;\n padding-right: 5px;\n cursor: pointer;\n color: hsla(0, 100%, 100%, 1);\n}\n\n.monitor_add-button_2lmvI {\n cursor: pointer;\n margin-right: 3px;\n}\n\n.monitor_resize-handle_3WWBV {\n cursor: nwse-resize;\n margin-left: 3px;\n}\n\n.monitor_footer-length_2_QAb {\n text-align: center;\n}\n", ""]); // exports exports.locals = { "monitor-container": "monitor_monitor-container_2J9gl", "monitorContainer": "monitor_monitor-container_2J9gl", "monitor": "monitor_monitor_11Vhm", "dragging": "monitor_dragging_2ZN-P", "default-monitor": "monitor_default-monitor_2vCcZ", "defaultMonitor": "monitor_default-monitor_2vCcZ", "label": "monitor_label_ci1ok", "value": "monitor_value_3Yexa", "large-value": "monitor_large-value_P-rAm", "largeValue": "monitor_large-value_P-rAm", "row": "monitor_row_2y_kM", "slider": "monitor_slider_1CHwk", "list-monitor": "monitor_list-monitor_1FdIj", "listMonitor": "monitor_list-monitor_1FdIj", "list-header": "monitor_list-header_-cp0o", "listHeader": "monitor_list-header_-cp0o", "list-body": "monitor_list-body_2OFZ6", "listBody": "monitor_list-body_2OFZ6", "list-row": "monitor_list-row_okCNn", "listRow": "monitor_list-row_okCNn", "list-index": "monitor_list-index_7tKdl", "listIndex": "monitor_list-index_7tKdl", "list-value": "monitor_list-value_1zGfI", "listValue": "monitor_list-value_1zGfI", "list-footer": "monitor_list-footer_2HyG8", "listFooter": "monitor_list-footer_2HyG8", "list-empty": "monitor_list-empty_1UKsB", "listEmpty": "monitor_list-empty_1UKsB", "input-wrapper": "monitor_input-wrapper_2yExa", "inputWrapper": "monitor_input-wrapper_2yExa", "value-inner": "monitor_value-inner_3E9Ou", "valueInner": "monitor_value-inner_3E9Ou", "list-input": "monitor_list-input_3kw5o", "listInput": "monitor_list-input_3kw5o", "remove-button": "monitor_remove-button_AhlwG", "removeButton": "monitor_remove-button_AhlwG", "add-button": "monitor_add-button_2lmvI", "addButton": "monitor_add-button_2lmvI", "resize-handle": "monitor_resize-handle_3WWBV", "resizeHandle": "monitor_resize-handle_3WWBV", "footer-length": "monitor_footer-length_2_QAb", "footerLength": "monitor_footer-length_2_QAb" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/pause-button/pause-button.css": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/pause-button/pause-button.css ***! \*************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.pause-button_pause-btn_3ciSf {\n width: 2rem;\n height: 2rem;\n padding: 0.375rem;\n border-radius: 0.25rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n user-drag: none;\n cursor: pointer;\n}\n.pause-button_pause-btn_3ciSf:hover {\n background-color: hsla(266, 100%, 39%, 0.15);\n}\n", ""]); // exports exports.locals = { "pause-btn": "pause-button_pause-btn_3ciSf", "pauseBtn": "pause-button_pause-btn_3ciSf" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/play-button/play-button.css": /*!***********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/play-button/play-button.css ***! \***********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.play-button_play-button_3MkN- {\n display: flex;\n align-items: center;\n justify-content: center;\n\n overflow: hidden; /* Mask the icon animation */\n width: 2.5rem;\n height: 2.5rem;\n background-color: hsla(266, 70%, 60%, 1);\n color: hsla(0, 100%, 100%, 1);\n border-radius: 50%;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: pointer;\n transition: all 0.15s ease-out;\n}\n.play-button_play-button_3MkN- {\n position: absolute;\n top: .5rem;\n z-index: auto;\n}\n.play-button_play-button_3MkN-:focus {\n outline: none;\n}\n.play-button_play-icon_CX5nH {\n width: 50%;\n}\n[dir=\"ltr\"] .play-button_play-button_3MkN- {\n right: .5rem;\n}\n[dir=\"rtl\"] .play-button_play-button_3MkN- {\n left: .5rem;\n}\n", ""]); // exports exports.locals = { "play-button": "play-button_play-button_3MkN-", "playButton": "play-button_play-button_3MkN-", "play-icon": "play-button_play-icon_CX5nH", "playIcon": "play-button_play-icon_CX5nH" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/pm-extension-modals/extension-modals.css": /*!************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/pm-extension-modals/extension-modals.css ***! \************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.extension-modals_modal-content_3wx5_ {\n width: 400px;\n}\n.extension-modals_body_1kEJF {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n}\n[theme=\"dark\"] .extension-modals_body_1kEJF {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.extension-modals_body_1kEJF input[type=\"checkbox\"],\n.extension-modals_body_1kEJF input[type=\"radio\"] {\n margin: 3px;\n}\n.extension-modals_text-input_2v9mh {\n margin-bottom: 1rem;\n width: 100%;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 5px;\n padding: 0 1rem;\n height: 3rem;\n color: hsla(266, 30%, 40%, 0.75);\n font-size: .875rem;\n}\n[theme=\"dark\"] .extension-modals_text-input_2v9mh {\n background: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n color: white;\n}\n.extension-modals_button-row_1lxf7 {\n font-weight: bolder;\n text-align: right;\n}\n.extension-modals_button-row_1lxf7 button {\n padding: 0.75rem 1rem;\n border-radius: 0.25rem;\n background: white;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n font-weight: 600;\n font-size: 0.85rem;\n}\n.extension-modals_button-row_1lxf7 button[disabled] {\n opacity: 0.5;\n}\n[dir=\"ltr\"] .extension-modals_button-row_1lxf7 button + button {\n margin-left: 0.5rem;\n}\n[dir=\"rtl\"] .extension-modals_button-row_1lxf7 button + button {\n margin-right: 0.5rem;\n}\n.extension-modals_button-row_1lxf7 button.extension-modals_ok-button_QuK61 {\n background: hsla(266, 100%, 50%, 1);\n border: hsla(266, 100%, 50%, 1);\n color: white;\n}\n.extension-modals_button-row_1lxf7 button.extension-modals_cancel-button_96fbe {\n color: black;\n}\n.extension-modals_help-text_1AxU- {\n margin-bottom: 1rem;\n}\n.extension-modals_must-change_2uikz {\n font-weight: bold;\n}\n.extension-modals_reset-link_1YrZ1 {\n cursor: pointer;\n}\n", ""]); // exports exports.locals = { "modal-content": "extension-modals_modal-content_3wx5_", "modalContent": "extension-modals_modal-content_3wx5_", "body": "extension-modals_body_1kEJF", "text-input": "extension-modals_text-input_2v9mh", "textInput": "extension-modals_text-input_2v9mh", "button-row": "extension-modals_button-row_1lxf7", "buttonRow": "extension-modals_button-row_1lxf7", "ok-button": "extension-modals_ok-button_QuK61", "okButton": "extension-modals_ok-button_QuK61", "cancel-button": "extension-modals_cancel-button_96fbe", "cancelButton": "extension-modals_cancel-button_96fbe", "help-text": "extension-modals_help-text_1AxU-", "helpText": "extension-modals_help-text_1AxU-", "must-change": "extension-modals_must-change_2uikz", "mustChange": "extension-modals_must-change_2uikz", "reset-link": "extension-modals_reset-link_1YrZ1", "resetLink": "extension-modals_reset-link_1YrZ1" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/prompt/prompt.css": /*!*************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/prompt/prompt.css ***! \*************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.prompt_modal-content_1BfWj {\n width: 360px;\n}\n.prompt_body_18Z-I {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n}\n[theme=\"dark\"] .prompt_body_18Z-I {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.prompt_body_18Z-I input[type=\"checkbox\"],\n.prompt_body_18Z-I input[type=\"radio\"] {\n margin: 3px;\n}\n.prompt_label_tWjYZ {\n font-weight: 500;\n margin: 0 0 0.75rem;\n}\n.prompt_disabled-label_3Y-7h {\n opacity: 0.5;\n}\n.prompt_variable-name-text-input_1iu8- {\n margin-bottom: 1.5rem;\n width: 100%;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 5px;\n padding: 0 1rem;\n height: 3rem;\n color: hsla(266, 30%, 40%, 0.75);\n font-size: .875rem;\n}\n[theme=\"dark\"] .prompt_variable-name-text-input_1iu8- {\n background: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n color: white;\n}\n.prompt_info-message_-WcQL {\n font-weight: normal;\n font-size: .875rem;\n margin-bottom: 1.5rem;\n text-align: center;\n}\n.prompt_options-row_36JmB {\n display: flex;\n font-weight: normal;\n justify-content: space-between;\n margin-bottom: 1.5rem;\n}\n.prompt_button-row_3Wc5Z {\n font-weight: bolder;\n text-align: right;\n}\n.prompt_button-row_3Wc5Z button {\n padding: 0.75rem 1rem;\n border-radius: 0.25rem;\n background: white;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n font-weight: 600;\n font-size: 0.85rem;\n}\n.prompt_button-row_3Wc5Z button.prompt_ok-button_3QFdD {\n background: hsla(266, 100%, 50%, 1);\n border: hsla(266, 100%, 50%, 1);\n color: white;\n}\n[dir=\"ltr\"] .prompt_button-row_3Wc5Z button + button {\n margin-left: 0.5rem;\n}\n[dir=\"rtl\"] .prompt_button-row_3Wc5Z button + button {\n margin-right: 0.5rem;\n}\n.prompt_cloud-option_1jjSa {\n display:flex;\n border-top: 1px dashed hsla(0, 0%, 0%, .25);\n overflow: visible;\n padding: 1rem 0;\n text-align: center;\n width: 100%;\n margin: 0 auto;\n}\n[theme=\"dark\"] .prompt_cloud-option_1jjSa {\n border-color: rgba(255, 255, 255, .25);\n}\n.prompt_cloud-option-text_P1r8J {\n opacity: .5;\n}\n.prompt_cancel-button_36cPC {\n color: black;\n}\n", ""]); // exports exports.locals = { "modal-content": "prompt_modal-content_1BfWj", "modalContent": "prompt_modal-content_1BfWj", "body": "prompt_body_18Z-I", "label": "prompt_label_tWjYZ", "disabled-label": "prompt_disabled-label_3Y-7h", "disabledLabel": "prompt_disabled-label_3Y-7h", "variable-name-text-input": "prompt_variable-name-text-input_1iu8-", "variableNameTextInput": "prompt_variable-name-text-input_1iu8-", "info-message": "prompt_info-message_-WcQL", "infoMessage": "prompt_info-message_-WcQL", "options-row": "prompt_options-row_36JmB", "optionsRow": "prompt_options-row_36JmB", "button-row": "prompt_button-row_3Wc5Z", "buttonRow": "prompt_button-row_3Wc5Z", "ok-button": "prompt_ok-button_3QFdD", "okButton": "prompt_ok-button_3QFdD", "cloud-option": "prompt_cloud-option_1jjSa", "cloudOption": "prompt_cloud-option_1jjSa", "cloud-option-text": "prompt_cloud-option-text_P1r8J", "cloudOptionText": "prompt_cloud-option-text_P1r8J", "cancel-button": "prompt_cancel-button_36cPC", "cancelButton": "prompt_cancel-button_36cPC" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/question/question.css": /*!*****************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/question/question.css ***! \*****************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n.question_question-container_OuJwy {\n margin: 0.5rem;\n border: 1px solid hsla(0, 0%, 0%, 0.15);\n border-radius: 0.5rem;\n border-width: 2px;\n padding: 1rem;\n background: white;\n}\n\n.question_question-label_1tRo2 {\n font-size: 0.75rem;\n font-weight: bold;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: hsla(266, 30%, 40%, 1);\n padding-bottom: 0.5rem;\n}\n\n.question_question-input_1oAB7 {\n display: flex; /* Keeps the input from going outside this container */\n position: relative;\n}\n\n/* tw: input should not look different in dark mode */\n\n[theme=\"dark\"] .question_question-input_1oAB7 input {\n color: hsla(266, 30%, 40%, 1);\n background: hsla(266, 75%, 95%, 1);\n border-color: hsla(266, 50%, 90%, 1);\n}\n\n[theme=\"dark\"] .question_question-input_1oAB7 input:hover,\n[theme=\"dark\"] .question_question-input_1oAB7 input:focus {\n border-color: hsla(266, 100%, 50%, 1);\n}\n\n.question_question-submit-button_3nYah {\n position: absolute;\n top: calc(0.5rem / 2);\n\n width: calc(2rem - 0.5rem);\n height: calc(2rem - 0.5rem);\n\n border: none;\n border-radius: 100%;\n\n color: white;\n background: hsla(266, 100%, 50%, 1);\n}\n\n[dir=\"ltr\"] .question_question-submit-button_3nYah {\n right: calc(0.5rem / 2);\n}\n\n[dir=\"rtl\"] .question_question-submit-button_3nYah {\n left: calc(0.5rem / 2);\n}\n\n/* Input overrides: width, font-weight, focus outline and padding */\n\n.question_question-input_1oAB7 > input {\n width: 100%;\n font-weight: normal;\n}\n\n[dir=\"ltr\"] .question_question-input_1oAB7 > input {\n padding: 0 2rem 0 .75rem; /* To make room for the submit button */\n}\n\n[dir=\"rtl\"] .question_question-input_1oAB7 > input {\n padding: 0 .75rem 0 2rem; /* To make room for the submit button */\n}\n\n.question_question-input_1oAB7 > input:focus {\n box-shadow: 0px 0px 0px 3px hsla(266, 100%, 50%, 0.35);\n}\n\n.question_question-submit-button-icon_upm57 {\n width: calc(2rem - 0.5rem);\n height: calc(2rem - 0.5rem);\n position: relative;\n right: -7px;\n left: -7px;\n}\n", ""]); // exports exports.locals = { "question-container": "question_question-container_OuJwy", "questionContainer": "question_question-container_OuJwy", "question-label": "question_question-label_1tRo2", "questionLabel": "question_question-label_1tRo2", "question-input": "question_question-input_1oAB7", "questionInput": "question_question-input_1oAB7", "question-submit-button": "question_question-submit-button_3nYah", "questionSubmitButton": "question_question-submit-button_3nYah", "question-submit-button-icon": "question_question-submit-button-icon_upm57", "questionSubmitButtonIcon": "question_question-submit-button-icon_upm57" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/record-modal/record-modal.css": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/record-modal/record-modal.css ***! \*************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.record-modal_modal-content_2N7lD {\n width: 600px;\n}\n.record-modal_body_2VO4l {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n}\n[theme=\"dark\"] .record-modal_body_2VO4l {\n background: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n}\n.record-modal_visualization-container_1joZn {\n display: flex;\n justify-content: space-around;\n}\n.record-modal_meter-container_3OqCJ, .record-modal_waveform-container__ay3Q {\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 5px;\n padding: 3px;\n /* Force these to be on their own render layer because they update often */\n transform: translateZ(0);\n}\n.record-modal_meter-container_3OqCJ {\n margin-right: 5px;\n height: 180px;\n}\n.record-modal_waveform-container__ay3Q {\n display: flex;\n justify-content: space-around;\n align-items: center;\n width: 100%;\n height: 180px;\n position: relative;\n}\n.record-modal_help-text_Jevsk {\n margin: 10px auto 0;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: rgb(167, 170, 181);\n font-size: 0.95rem;\n font-weight: 500;\n}\n.record-modal_playing-text_1tknI {\n color: hsla(266, 100%, 50%, 1);\n}\n.record-modal_recording-text_2LS7_ {\n color: hsla(266, 100%, 50%, 1);\n}\n.record-modal_main-button-row_37Zjz {\n display: flex;\n justify-content: space-around;\n margin-top: 15px;\n}\n.record-modal_main-button-row_37Zjz button {\n padding: 0.5rem 0.75rem;\n border-radius: 0.25rem;\n background: transparent;\n border: none;\n}\n.record-modal_main-button-row_37Zjz button:disabled {\n opacity: 0.25;\n}\n.record-modal_main-button-row_37Zjz button:active, .record-modal_main-button-row_37Zjz button:focus {\n outline: none;\n}\n.record-modal_button-row_1hdGe {\n font-weight: bolder;\n text-align: right;\n display: flex;\n justify-content: space-between;\n}\n.record-modal_button-row_1hdGe button {\n padding: 0.75rem 1rem;\n border-radius: 0.25rem;\n background: white;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n font-weight: 600;\n font-size: 0.85rem;\n color: hsla(266, 100%, 50%, 1);\n}\n.record-modal_button-row_1hdGe button.record-modal_ok-button_3pudV {\n background: hsla(266, 100%, 50%, 1);\n border: hsla(266, 100%, 50%, 1);\n color: white;\n}\n.record-modal_button-row_1hdGe button + button {\n margin-left: 0.5rem;\n}\n.record-modal_main-button_36gPw {\n text-align: center;\n}\n.record-modal_record-button_3mcC8 {\n overflow: visible;\n}\n.record-modal_record-button-circle_kXioI {\n fill: hsla(266, 100%, 50%, 1);\n stroke: hsla(266, 100%, 39%, 1);\n}\n.record-modal_record-button-circle-outline_1ycFu {\n fill: hsla(266, 100%, 50%, 1);\n opacity: 0.2;\n transition: 0.1s;\n}\n[dir=\"rtl\"] .record-modal_rerecord-button_jgsi_ img {\n transform: scaleX(-1);\n}\n", ""]); // exports exports.locals = { "modal-content": "record-modal_modal-content_2N7lD", "modalContent": "record-modal_modal-content_2N7lD", "body": "record-modal_body_2VO4l", "visualization-container": "record-modal_visualization-container_1joZn", "visualizationContainer": "record-modal_visualization-container_1joZn", "meter-container": "record-modal_meter-container_3OqCJ", "meterContainer": "record-modal_meter-container_3OqCJ", "waveform-container": "record-modal_waveform-container__ay3Q", "waveformContainer": "record-modal_waveform-container__ay3Q", "help-text": "record-modal_help-text_Jevsk", "helpText": "record-modal_help-text_Jevsk", "playing-text": "record-modal_playing-text_1tknI", "playingText": "record-modal_playing-text_1tknI", "recording-text": "record-modal_recording-text_2LS7_", "recordingText": "record-modal_recording-text_2LS7_", "main-button-row": "record-modal_main-button-row_37Zjz", "mainButtonRow": "record-modal_main-button-row_37Zjz", "button-row": "record-modal_button-row_1hdGe", "buttonRow": "record-modal_button-row_1hdGe", "ok-button": "record-modal_ok-button_3pudV", "okButton": "record-modal_ok-button_3pudV", "main-button": "record-modal_main-button_36gPw", "mainButton": "record-modal_main-button_36gPw", "record-button": "record-modal_record-button_3mcC8", "recordButton": "record-modal_record-button_3mcC8", "record-button-circle": "record-modal_record-button-circle_kXioI", "recordButtonCircle": "record-modal_record-button-circle_kXioI", "record-button-circle-outline": "record-modal_record-button-circle-outline_1ycFu", "recordButtonCircleOutline": "record-modal_record-button-circle-outline_1ycFu", "rerecord-button": "record-modal_rerecord-button_jgsi_", "rerecordButton": "record-modal_rerecord-button_jgsi_" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/slider-prompt/slider-prompt.css": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/slider-prompt/slider-prompt.css ***! \***************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.slider-prompt_modal-content_2vVm4 {\n width: 360px;\n}\n.slider-prompt_body_2ZkXL {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n}\n[theme=\"dark\"] .slider-prompt_body_2ZkXL {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.slider-prompt_label_cYsiu {\n font-weight: 500;\n margin: 0 0 0.75rem;\n}\n.slider-prompt_min-input_1IxXX, .slider-prompt_max-input_1Nwbv {\n margin-bottom: 1.5rem;\n width: 100%;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 5px;\n padding: 0 1rem;\n height: 3rem;\n color: hsla(266, 30%, 40%, 0.75);\n font-size: .875rem;\n}\n[theme=\"dark\"] .slider-prompt_min-input_1IxXX, [theme=\"dark\"] .slider-prompt_max-input_1Nwbv {\n background: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n color: white;\n}\n.slider-prompt_button-row_32aCX {\n font-weight: bolder;\n text-align: right;\n}\n.slider-prompt_button-row_32aCX button {\n padding: 0.75rem 1rem;\n border-radius: 0.25rem;\n background: white;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n font-weight: 600;\n font-size: 0.85rem;\n}\n.slider-prompt_button-row_32aCX button.slider-prompt_ok-button_vLj7c {\n background: hsla(266, 100%, 50%, 1);\n border: hsla(266, 100%, 50%, 1);\n color: white;\n}\n[dir=\"ltr\"] .slider-prompt_button-row_32aCX button + button {\n margin-left: 0.5rem;\n}\n[dir=\"rtl\"] .slider-prompt_button-row_32aCX button + button {\n margin-right: 0.5rem;\n}\n.slider-prompt_cancel-button_RuYHK {\n color: black;\n}\n", ""]); // exports exports.locals = { "modal-content": "slider-prompt_modal-content_2vVm4", "modalContent": "slider-prompt_modal-content_2vVm4", "body": "slider-prompt_body_2ZkXL", "label": "slider-prompt_label_cYsiu", "min-input": "slider-prompt_min-input_1IxXX", "minInput": "slider-prompt_min-input_1IxXX", "max-input": "slider-prompt_max-input_1Nwbv", "maxInput": "slider-prompt_max-input_1Nwbv", "button-row": "slider-prompt_button-row_32aCX", "buttonRow": "slider-prompt_button-row_32aCX", "ok-button": "slider-prompt_ok-button_vLj7c", "okButton": "slider-prompt_ok-button_vLj7c", "cancel-button": "slider-prompt_cancel-button_RuYHK", "cancelButton": "slider-prompt_cancel-button_RuYHK" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/sound-editor/sound-editor.css": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/sound-editor/sound-editor.css ***! \*************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.sound-editor_editor-container_iUSW- {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n padding: calc(2 * 0.5rem);\n}\n.sound-editor_row_3iFzH {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n[dir=\"rtl\"] .sound-editor_row-reverse_1qAAx {\n flex-direction: row-reverse;\n}\n.sound-editor_row_3iFzH + .sound-editor_row_3iFzH {\n margin-top: calc(2 * 0.5rem);\n}\n.sound-editor_input-group_2hWiH {\n display: flex;\n flex-direction: row;\n}\n[dir=\"ltr\"] .sound-editor_input-group_2hWiH + .sound-editor_input-group_2hWiH {\n margin-left: calc(2 * 0.5rem);\n}\n[dir=\"rtl\"] .sound-editor_input-group_2hWiH + .sound-editor_input-group_2hWiH {\n margin-right: calc(2 * 0.5rem);\n}\n[dir=\"ltr\"] .sound-editor_input-group_2hWiH {\n padding-right: calc(2 * 0.5rem);\n border-right: 1px dashed var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n[dir=\"rtl\"] .sound-editor_input-group_2hWiH {\n padding-left: calc(2 * 0.5rem);\n border-left: 1px dashed var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n[dir=\"rtl\"] .sound-editor_row-reverse_1qAAx > .sound-editor_input-group_2hWiH {\n padding-left: 0;\n padding-right: calc(2 * 0.5rem);\n border-left: none;\n border-right: 1px dashed var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.sound-editor_name-input_2Msmq {\n width: 100%;\n}\n.sound-editor_waveform-container_1x_b1 {\n display: flex;\n justify-content: space-around;\n align-items: center;\n width: 100%;\n\n position: relative;\n\n background: hsla(300, 53%, 60%, 0.15);\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 5px;\n\n margin-top: 20px;\n margin-bottom: 20px;\n}\n.sound-editor_button_1_6Li {\n height: 2rem;\n padding: 0.35rem;\n outline: none;\n background: white;\n border-radius: 0.25rem;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n cursor: pointer;\n font-size: 0.85rem;\n transition: 0.2s;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n margin: 0px;\n}\n[theme=\"dark\"] .sound-editor_button_1_6Li {\n background-color: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.sound-editor_button_1_6Li > img {\n flex-grow: 1;\n max-width: 100%;\n max-height: 100%;\n min-width: 1.25rem;\n}\n.sound-editor_round-button-outer_2hM-8 {\n display: flex;\n align-items: center;\n height: 100%;\n}\n.sound-editor_round-button_3NLcW {\n height: 3rem;\n width: 3rem;\n outline: none;\n background: hsla(266, 100%, 50%, 1);\n border-radius: 100%;\n border: 4px solid hsla(0, 100%, 100%, 0.75);\n cursor: pointer;\n padding: 0.75rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n[theme=\"dark\"] .sound-editor_round-button_3NLcW {\n border-color: transparent;\n}\n.sound-editor_round-button_3NLcW > img {\n flex-grow: 1;\n max-width: 100%;\n max-height: 100%;\n /*min-width: 1.5rem;*/\n}\n[dir=\"rtl\"] .sound-editor_undo-icon_So0sO, [dir=\"rtl\"] .sound-editor_redo-icon_XGcr5 {\n transform: scaleX(-1);\n}\n.sound-editor_trim-button_lSENI {\n display: flex;\n align-items: center;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n font-size: 0.625rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n}\n[dir=\"ltr\"] .sound-editor_trim-button_lSENI {\n margin-left: 1rem;\n}\n[dir=\"rtl\"] .sound-editor_trim-button_lSENI {\n margin-right: 1rem;\n}\n.sound-editor_trim-button_lSENI > img {\n width: 1.25rem;\n}\n.sound-editor_effects_ywFdO {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n}\n.sound-editor_effect-button_2zuzT {\n flex-basis: 60px;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n font-size: 0.625rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n padding: 0.25rem 0;\n}\n.sound-editor_effect-button_2zuzT + .sound-editor_effect-button_2zuzT {\n margin: 0;\n}\n.sound-editor_effect-button_2zuzT img {\n width: 1.25rem;\n height: 1.25rem;\n margin-bottom: -0.375rem;\n}\n.sound-editor_tool-button_2iNn9 {\n flex-basis: 60px;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n font-size: 0.625rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n padding: 0.25rem 0;\n}\n.sound-editor_tool-button_2iNn9 + .sound-editor_tool-button_2iNn9 {\n margin: 0;\n}\n.sound-editor_tool-button_2iNn9 img {\n width: 4rem;\n height: 1.5rem;\n margin-bottom: -0.375rem;\n}\n[dir=\"rtl\"] .sound-editor_flip-in-rtl_3eOfH img {\n transform: scaleX(-1);\n}\n[dir=\"ltr\"] .sound-editor_button-group_SFPoV {\n margin-left: 1rem;\n}\n[dir=\"rtl\"] .sound-editor_button-group_SFPoV {\n margin-right: 1rem;\n}\n.sound-editor_button-group_SFPoV {\n display: flex;\n}\n.sound-editor_button-group_SFPoV .sound-editor_button_1_6Li {\n border-radius: 0;\n}\n[dir=\"ltr\"] .sound-editor_button-group_SFPoV .sound-editor_button_1_6Li {\n border-left: none;\n}\n[dir=\"rtl\"] .sound-editor_button-group_SFPoV .sound-editor_button_1_6Li {\n border-right: none;\n}\n[dir=\"ltr\"] .sound-editor_button-group_SFPoV .sound-editor_button_1_6Li:last-of-type {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n[dir=\"ltr\"] .sound-editor_button-group_SFPoV .sound-editor_button_1_6Li:first-of-type {\n border-left: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n[dir=\"rtl\"] .sound-editor_button-group_SFPoV .sound-editor_button_1_6Li:last-of-type {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n[dir=\"rtl\"] .sound-editor_button-group_SFPoV .sound-editor_button_1_6Li:first-of-type {\n border-right: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n.sound-editor_button_1_6Li:disabled > img {\n opacity: 0.25;\n}\n.sound-editor_info-row_33dW3 {\n display: flex;\n justify-content: space-between;\n margin-top: calc(2 * 0.5rem);\n}\n.sound-editor_duration_Iq75P {\n font-weight: bold;\n}\n.sound-editor_advanced-info_IEJgw {\n\n}\n.sound-editor_alert_DhPBO {\n margin-top: calc(2 * 0.5rem);\n border-radius: 5px;\n padding: 0.5rem;\n display: flex;\n align-items: center;\n border-width: 1px;\n border-style: solid;\n}\n.sound-editor_stereo_1cklI {\n background-color: rgba(145, 145, 255, 0.3);\n border-color: rgb(145, 145, 255)\n}\n.sound-editor_too-large_2e10L {\n background-color: rgba(255, 119, 0, 0.3);\n border-color: rgb(255, 119, 0);\n}\n", ""]); // exports exports.locals = { "editor-container": "sound-editor_editor-container_iUSW-", "editorContainer": "sound-editor_editor-container_iUSW-", "row": "sound-editor_row_3iFzH", "row-reverse": "sound-editor_row-reverse_1qAAx", "rowReverse": "sound-editor_row-reverse_1qAAx", "input-group": "sound-editor_input-group_2hWiH", "inputGroup": "sound-editor_input-group_2hWiH", "name-input": "sound-editor_name-input_2Msmq", "nameInput": "sound-editor_name-input_2Msmq", "waveform-container": "sound-editor_waveform-container_1x_b1", "waveformContainer": "sound-editor_waveform-container_1x_b1", "button": "sound-editor_button_1_6Li", "round-button-outer": "sound-editor_round-button-outer_2hM-8", "roundButtonOuter": "sound-editor_round-button-outer_2hM-8", "round-button": "sound-editor_round-button_3NLcW", "roundButton": "sound-editor_round-button_3NLcW", "undo-icon": "sound-editor_undo-icon_So0sO", "undoIcon": "sound-editor_undo-icon_So0sO", "redo-icon": "sound-editor_redo-icon_XGcr5", "redoIcon": "sound-editor_redo-icon_XGcr5", "trim-button": "sound-editor_trim-button_lSENI", "trimButton": "sound-editor_trim-button_lSENI", "effects": "sound-editor_effects_ywFdO", "effect-button": "sound-editor_effect-button_2zuzT", "effectButton": "sound-editor_effect-button_2zuzT", "tool-button": "sound-editor_tool-button_2iNn9", "toolButton": "sound-editor_tool-button_2iNn9", "flip-in-rtl": "sound-editor_flip-in-rtl_3eOfH", "flipInRtl": "sound-editor_flip-in-rtl_3eOfH", "button-group": "sound-editor_button-group_SFPoV", "buttonGroup": "sound-editor_button-group_SFPoV", "info-row": "sound-editor_info-row_33dW3", "infoRow": "sound-editor_info-row_33dW3", "duration": "sound-editor_duration_Iq75P", "advanced-info": "sound-editor_advanced-info_IEJgw", "advancedInfo": "sound-editor_advanced-info_IEJgw", "alert": "sound-editor_alert_DhPBO", "stereo": "sound-editor_stereo_1cklI", "too-large": "sound-editor_too-large_2e10L", "tooLarge": "sound-editor_too-large_2e10L" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/spinner/spinner.css": /*!***************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/spinner/spinner.css ***! \***************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.spinner_spinner_2Op8D {\n width: 1.25rem;\n height: 1.25rem;\n display: inline-block;\n position: relative;\n border-radius: 50%;\n border-width: .1875rem;\n border-style: solid;\n border-color: hsla(0, 100%, 100%, 0.25);\n box-sizing: content-box;\n}\n.spinner_spinner_2Op8D::before, .spinner_spinner_2Op8D::after {\n width: 1.25rem;\n height: 1.25rem;\n content: '';\n border-radius: 50%;\n display: block;\n}\n.spinner_spinner_2Op8D::after {\n position: absolute;\n top: -.1875rem;\n left: -.1875rem;\n border: .1875rem solid transparent;\n border-top-color: hsla(0, 100%, 100%, 1);\n animation: spinner_spin_1ge20 1.5s cubic-bezier(0.4, 0.1, 0.4, 1) infinite;\n}\n.spinner_small_1RsxO {\n width: .5rem;\n height: .5rem;\n}\n.spinner_small_1RsxO::before, .spinner_small_1RsxO::after {\n width: .5rem;\n height: .5rem;\n}\n.spinner_large_M0-Ov {\n width: 2.5rem;\n height: 2.5rem;\n}\n.spinner_large_M0-Ov::before, .spinner_large_M0-Ov::after {\n width: 2.5rem;\n height: 2.5rem;\n}\n@keyframes spinner_spin_1ge20 {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n.spinner_spinner_2Op8D.spinner_success_2bEvy {\n border-color: hsla(266, 100%, 50%, 0.35);\n}\n.spinner_spinner_2Op8D.spinner_success_2bEvy::after {\n border-top-color: hsla(266, 100%, 50%, 1);\n}\n.spinner_spinner_2Op8D.spinner_warn_3KZAv {\n border-color: hsla(266, 100%, 55%, 0.25);\n}\n.spinner_spinner_2Op8D.spinner_warn_3KZAv::after {\n border-top-color: hsla(266, 100%, 55%, 1);\n}\n.spinner_spinner_2Op8D.spinner_info_2g2-l {\n border-color: hsla(0, 100%, 100%, 0.25);\n}\n.spinner_spinner_2Op8D.spinner_info_2g2-l::after {\n border-top-color: hsla(0, 100%, 100%, 1);\n}\n.spinner_spinner_2Op8D.spinner_primary_32PLs {\n border-color: hsla(266, 100%, 50%, 0.35);\n}\n.spinner_spinner_2Op8D.spinner_primary_32PLs::after {\n border-top-color: hsla(266, 100%, 50%, 1);\n}\n", ""]); // exports exports.locals = { "spinner": "spinner_spinner_2Op8D", "spin": "spinner_spin_1ge20", "small": "spinner_small_1RsxO", "large": "spinner_large_M0-Ov", "success": "spinner_success_2bEvy", "warn": "spinner_warn_3KZAv", "info": "spinner_info_2g2-l", "primary": "spinner_primary_32PLs" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/sprite-info/sprite-info.css": /*!***********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/sprite-info/sprite-info.css ***! \***********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n.sprite-info_sprite-info_3EyZh {\n padding: 0.75rem;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n background-color: white;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n border-bottom: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n[theme=\"dark\"] .sprite-info_sprite-info_3EyZh {\n background-color: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n\n.sprite-info_row_1om5V {\n display: flex;\n justify-content: space-between;\n}\n\n.sprite-info_row-primary_10JrS {\n margin-bottom: 0.5rem;\n}\n\n.sprite-info_label_258mm { opacity: 0.8; }\n\n.sprite-info_group_14-B_ {\n display: inline-flex;\n flex-direction: row; /* makes columns, for each label/form group */\n align-items: center;\n}\n\n.sprite-info_column_EFIdF {\n display: inline-flex;\n flex-direction: column; /* put label above input */\n align-items: flex-start;\n}\n\n.sprite-info_column_EFIdF span {\n margin-bottom: .25rem;\n}\n\n.sprite-info_icon-wrapper_3Wbqq {\n display: inline-block;\n width: calc(2rem + 2px);\n height: calc(2rem + 2px);\n padding: 0.5rem;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.sprite-info_icon_1iZ_9 {\n width: 100%;\n height: 100%;\n}\n\n/* @todo: refactor radio divs to input */\n\n.sprite-info_radio-wrapper_1OHDS {\n white-space: nowrap; /* make sure visibilty buttons don't wrap */\n}\n\n.sprite-info_radio_v-fgn {\n filter: saturate(0);\n cursor: pointer;\n}\n\n.sprite-info_radio_v-fgn.sprite-info_is-active_ewF6e {\n filter: none;\n}\n\n.sprite-info_radio_v-fgn.sprite-info_is-disabled_1_MCi {\n cursor: default;\n}\n\n.sprite-info_radio-first_3xgJB {\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n[dir=\"ltr\"] .sprite-info_radio-first_3xgJB {\n border-top-left-radius: calc(0.5rem / 2);\n border-bottom-left-radius: calc(0.5rem / 2);\n}\n\n[dir=\"rtl\"] .sprite-info_radio-first_3xgJB {\n border-top-right-radius: calc(0.5rem / 2);\n border-bottom-right-radius: calc(0.5rem / 2);\n}\n\n.sprite-info_radio-first_3xgJB:focus {\n border-color: hsla(266, 100%, 50%, 1);\n box-shadow: inset 0 0 0 -2px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n.sprite-info_radio-last_3Ps65 {\n border-bottom: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-top: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n[dir=\"ltr\"] .sprite-info_radio-last_3Ps65 {\n border-right: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-left: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-top-right-radius: calc(0.5rem / 2);\n border-bottom-right-radius: calc(0.5rem / 2);\n}\n\n[dir=\"rtl\"] .sprite-info_radio-last_3Ps65 {\n border-left: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-right: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-top-left-radius: calc(0.5rem / 2);\n border-bottom-left-radius: calc(0.5rem / 2);\n}\n\n.sprite-info_radio-last_3Ps65:focus {\n border-color: hsla(266, 100%, 50%, 1);\n box-shadow: inset 0 0 0 -2px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n\n.sprite-info_icon_1iZ_9 {\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n\n.sprite-info_rotation-select_17OlD {\n width: 100%;\n height: 1.85rem;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n outline: none;\n}\n\n.sprite-info_rotation-select_17OlD:focus {\n border-color: hsla(266, 100%, 50%, 1);\n box-shadow: inset 0 0 0 1px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15)));\n}\n\n.sprite-info_larger-input_1UEs0 input {\n width: 4rem;\n}\n\n.sprite-info_sprite-input_17wjb {\n width: 8rem;\n}\n", ""]); // exports exports.locals = { "sprite-info": "sprite-info_sprite-info_3EyZh", "spriteInfo": "sprite-info_sprite-info_3EyZh", "row": "sprite-info_row_1om5V", "row-primary": "sprite-info_row-primary_10JrS", "rowPrimary": "sprite-info_row-primary_10JrS", "label": "sprite-info_label_258mm", "group": "sprite-info_group_14-B_", "column": "sprite-info_column_EFIdF", "icon-wrapper": "sprite-info_icon-wrapper_3Wbqq", "iconWrapper": "sprite-info_icon-wrapper_3Wbqq", "icon": "sprite-info_icon_1iZ_9", "radio-wrapper": "sprite-info_radio-wrapper_1OHDS", "radioWrapper": "sprite-info_radio-wrapper_1OHDS", "radio": "sprite-info_radio_v-fgn", "is-active": "sprite-info_is-active_ewF6e", "isActive": "sprite-info_is-active_ewF6e", "is-disabled": "sprite-info_is-disabled_1_MCi", "isDisabled": "sprite-info_is-disabled_1_MCi", "radio-first": "sprite-info_radio-first_3xgJB", "radioFirst": "sprite-info_radio-first_3xgJB", "radio-last": "sprite-info_radio-last_3Ps65", "radioLast": "sprite-info_radio-last_3Ps65", "rotation-select": "sprite-info_rotation-select_17OlD", "rotationSelect": "sprite-info_rotation-select_17OlD", "larger-input": "sprite-info_larger-input_1UEs0", "largerInput": "sprite-info_larger-input_1UEs0", "sprite-input": "sprite-info_sprite-input_17wjb", "spriteInput": "sprite-info_sprite-input_17wjb" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/sprite-selector-item/sprite-selector-item.css": /*!*****************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/sprite-selector-item/sprite-selector-item.css ***! \*****************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/* @todo: refactor this class name, and component: `sprite-selector` to `sprite` */\n\n.sprite-selector-item_sprite-selector-item_kQm-i {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n position: relative;\n\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 0.8rem;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n border-width: 2px;\n border-style: solid;\n border-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.5rem;\n\n text-align: center;\n cursor: pointer;\n\n -webkit-user-select: none;\n\n -moz-user-select: none;\n\n -ms-user-select: none;\n\n user-select: none;\n}\n\n.sprite-selector-item_sprite-selector-item_kQm-i.sprite-selector-item_is-selected_24tQj {\n box-shadow: 0px 0px 0px 4px hsla(266, 100%, 50%, 0.35);\n border: 2px solid hsla(266, 100%, 50%, 1);\n background: hsla(0, 100%, 100%, 1);\n}\n\n[theme=\"dark\"] .sprite-selector-item_sprite-selector-item_kQm-i.sprite-selector-item_is-selected_24tQj {\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n\n.sprite-selector-item_sprite-selector-item_kQm-i:hover {\n border: 2px solid hsla(266, 100%, 50%, 1);\n background: hsla(0, 100%, 100%, 1);\n}\n\n[theme=\"dark\"] .sprite-selector-item_sprite-selector-item_kQm-i:hover {\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n\n.sprite-selector-item_sprite-selector-item_kQm-i:hover .sprite-selector-item_sprite-image_2QWuK, .sprite-selector-item_is-selected_24tQj .sprite-selector-item_sprite-image_2QWuK {\n filter: drop-shadow(0px 0px 2px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15)));\n}\n\n/* Outer/Inner chicanery is to prevent layouts when sprite image changes */\n\n.sprite-selector-item_sprite-image-outer_Xs0wN {\n position: relative;\n width: 100%;\n height: 100%;\n transform: translateZ(0);\n}\n\n.sprite-selector-item_sprite-image-inner_3oSwi {\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.sprite-selector-item_sprite-image_2QWuK {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n pointer-events: none;\n max-width: 32px;\n max-height: 32px;\n}\n\n.sprite-selector-item_sprite-info_-I0i_ {\n padding: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n\n font-size: 0.625rem;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.sprite-selector-item_sprite-name_1PXjh, .sprite-selector-item_sprite-details_2UVpA {\n /*\n For truncating overflowing text gracefully\n Min-width is for a bug: https://css-tricks.com/flexbox-truncated-text\n */\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n}\n\n.sprite-selector-item_sprite-details_2UVpA {\n margin-top: 0.125rem;\n font-size: 0.5rem;\n}\n\n.sprite-selector-item_is-selected_24tQj .sprite-selector-item_sprite-info_-I0i_ {\n background: hsla(266, 100%, 50%, 1);\n color: hsla(0, 100%, 100%, 1);\n}\n\n.sprite-selector-item_delete-button_1rkFW {\n position: absolute;\n top: -.625rem;\n z-index: auto;\n}\n\n[dir=\"ltr\"] .sprite-selector-item_delete-button_1rkFW {\n right: -.625rem;\n}\n\n[dir=\"rtl\"] .sprite-selector-item_delete-button_1rkFW {\n left: -.625rem;\n}\n\n.sprite-selector-item_number_AnXUk {\n position: absolute;\n top: 0.15rem;\n font-size: 0.625rem;\n font-weight: bold;\n z-index: 2;\n}\n\n[dir=\"ltr\"] .sprite-selector-item_number_AnXUk {\n left: 0.15rem;\n}\n\n[dir=\"rtl\"] .sprite-selector-item_number_AnXUk {\n right: 0.15rem;\n}\n", ""]); // exports exports.locals = { "sprite-selector-item": "sprite-selector-item_sprite-selector-item_kQm-i", "spriteSelectorItem": "sprite-selector-item_sprite-selector-item_kQm-i", "is-selected": "sprite-selector-item_is-selected_24tQj", "isSelected": "sprite-selector-item_is-selected_24tQj", "sprite-image": "sprite-selector-item_sprite-image_2QWuK", "spriteImage": "sprite-selector-item_sprite-image_2QWuK", "sprite-image-outer": "sprite-selector-item_sprite-image-outer_Xs0wN", "spriteImageOuter": "sprite-selector-item_sprite-image-outer_Xs0wN", "sprite-image-inner": "sprite-selector-item_sprite-image-inner_3oSwi", "spriteImageInner": "sprite-selector-item_sprite-image-inner_3oSwi", "sprite-info": "sprite-selector-item_sprite-info_-I0i_", "spriteInfo": "sprite-selector-item_sprite-info_-I0i_", "sprite-name": "sprite-selector-item_sprite-name_1PXjh", "spriteName": "sprite-selector-item_sprite-name_1PXjh", "sprite-details": "sprite-selector-item_sprite-details_2UVpA", "spriteDetails": "sprite-selector-item_sprite-details_2UVpA", "delete-button": "sprite-selector-item_delete-button_1rkFW", "deleteButton": "sprite-selector-item_delete-button_1rkFW", "number": "sprite-selector-item_number_AnXUk" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/sprite-selector/sprite-selector.css": /*!*******************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/sprite-selector/sprite-selector.css ***! \*******************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n.sprite-selector_sprite-selector_2KgCX {\n flex-grow: 1;\n position: relative;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n margin-right: calc(0.5rem / 2);\n background-color: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n border-top-right-radius: 0.5rem;\n border-top-left-radius: 0.5rem;\n border-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-width: 1px;\n border-style: solid;\n border-bottom: 0;\n}\n.sprite-selector_sprite-wrapper_1C5Mq {\n /*\n Our goal is to fit sprites evenly in a row without leftover space.\n Flexbox's `space between` property gets us close, but doesn't flow\n well when the # of items per row > 1 and less than the max per row.\n\n Solving by explicitly calc'ing the width of each sprite. Setting\n `border-box` simplifies things, because content, padding and\n border-width all are included in the width, leaving us only to subtract\n the left + right margins.\n\n @todo: make room for the scrollbar\n */\n box-sizing: border-box;\n width: calc((100% / 5 ) - 0.5rem);\n max-width: 6rem;\n min-width: 4rem;\n min-height: 4rem; /* @todo: calc height same as width */\n margin: calc(0.5rem / 2);\n}\n.sprite-selector_sprite_21WnR {\n height: 100%;\n}\n.sprite-selector_scroll-wrapper_3NNnc {\n /*\n Sets the sprite-selector items as a scrollable pane\n\n @todo: Safari: pane doesn't stretch to fill height;\n @todo: Adding `position: relative` still doesn't fix Safari scrolling pane, and\n also introduces a new bug in Chrome when vertically resizing window down,\n then back up, introduces white space in the outside the page container.\n */\n height: calc(100% - 6rem);\n overflow-y: auto;\n}\n.sprite-selector_scroll-wrapper-dragging_2QZJG {\n background-color: hsla(266, 100%, 77%, 1);\n}\n.sprite-selector_items-wrapper_4bcOj {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n\n padding-top: calc(0.5rem / 2);\n padding-left: calc(0.5rem / 2);\n padding-right: calc(0.5rem / 2);\n padding-bottom: 0.5rem;\n\n overflow: hidden;\n}\n.sprite-selector_add-button_1XCwG {\n position: absolute;\n bottom: 0.75rem;\n}\n[dir=\"ltr\"] .sprite-selector_add-button_1XCwG {\n right: 1rem;\n}\n[dir=\"rtl\"] .sprite-selector_add-button_1XCwG {\n left: 1rem;\n}\n.sprite-selector_raised_1fkrL {\n background-color: hsla(266, 100%, 77%, 1);\n transition: all 0.25s ease;\n}\n.sprite-selector_raised_1fkrL:hover {\n background-color: hsla(266, 100%, 77%, 1);\n transform: scale(1.05);\n}\n.sprite-selector_raised_1fkrL:hover {\n animation-name: sprite-selector_wiggle__tLSA;\n animation-duration: 500ms;\n animation-iteration-count: 1;\n animation-timing-function: ease-in-out;\n background-color: hsla(266, 100%, 77%, 1);\n}\n@keyframes sprite-selector_wiggle__tLSA {\n 0% {transform: rotate(3deg) scale(1.05);}\n 25% {transform: rotate(-3deg) scale(1.05);}\n 50% {transform: rotate(5deg) scale(1.05);}\n 75% {transform: rotate(-2deg) scale(1.05);}\n 100% {transform: rotate(0deg) scale(1.05);}\n}\n.sprite-selector_receivedBlocks_24JkN {\n animation: sprite-selector_glowing_3IS0u 250ms;\n}\n@keyframes sprite-selector_glowing_3IS0u {\n 10% { box-shadow: 0 0 10px #7fff1e; }\n 90% { box-shadow: 0 0 10px #7fff1e; }\n 100% { box-shadow: none; }\n}\n.sprite-selector_placeholder_2v7G4 > .sprite-selector_sprite_21WnR {\n background: black;\n filter: opacity(15%) brightness(0%);\n}\n", ""]); // exports exports.locals = { "sprite-selector": "sprite-selector_sprite-selector_2KgCX", "spriteSelector": "sprite-selector_sprite-selector_2KgCX", "sprite-wrapper": "sprite-selector_sprite-wrapper_1C5Mq", "spriteWrapper": "sprite-selector_sprite-wrapper_1C5Mq", "sprite": "sprite-selector_sprite_21WnR", "scroll-wrapper": "sprite-selector_scroll-wrapper_3NNnc", "scrollWrapper": "sprite-selector_scroll-wrapper_3NNnc", "scroll-wrapper-dragging": "sprite-selector_scroll-wrapper-dragging_2QZJG", "scrollWrapperDragging": "sprite-selector_scroll-wrapper-dragging_2QZJG", "items-wrapper": "sprite-selector_items-wrapper_4bcOj", "itemsWrapper": "sprite-selector_items-wrapper_4bcOj", "add-button": "sprite-selector_add-button_1XCwG", "addButton": "sprite-selector_add-button_1XCwG", "raised": "sprite-selector_raised_1fkrL", "wiggle": "sprite-selector_wiggle__tLSA", "receivedBlocks": "sprite-selector_receivedBlocks_24JkN", "glowing": "sprite-selector_glowing_3IS0u", "placeholder": "sprite-selector_placeholder_2v7G4" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/stage-header/stage-header.css": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/stage-header/stage-header.css ***! \*************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n\n/* Toolbox z-index: 40; set in scratch-blocks */\n\n/* tooltips should go over add buttons if they overlap */\n\n/* monitors go over add buttons */\n\n/* \"ask\" block text input goes above monitors */\n\n/* menu-bar should go over monitors, alerts and tutorials */\n\n/* tw: show below menu bar normally */\n\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n\n/* so it is draggable into other panes */\n\n/* in most interfaces, the context menu is always on top */\n\n.stage-header_stage-header-wrapper_1F4gT {\n position: relative;\n}\n\n.stage-header_stage-header-wrapper-overlay_5vfJa {\n position: fixed;\n background-color: rgb(232, 237, 241);\n top: 0;\n left: 0;\n right: 0;\n z-index: 500;\n}\n\n/* tw: support dark mode */\n\n[theme=\"dark\"] .stage-header_stage-header-wrapper-overlay_5vfJa {\n background-color: #111;\n}\n\n/* tw: do not show color in header when embedded */\n\n.stage-header_embedded_nhDjw {\n background-color: transparent;\n}\n\n.stage-header_stage-menu-wrapper_15JJt {\n display: flex;\n margin: auto;\n justify-content: space-between;\n flex-shrink: 0;\n align-items: center;\n height: 2.75rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.stage-header_embed-scratch-logo_2K5GA img {\n height: 1.6rem;\n vertical-align: middle;\n opacity: .6;\n}\n\n.stage-header_stage-size-row_14N65 {\n display: flex;\n}\n\n.stage-header_stage-size-toggle-group_17LtK {\n display: flex;\n}\n\n[dir=\"ltr\"] .stage-header_stage-size-toggle-group_17LtK {\n margin-right: .2rem;\n}\n\n[dir=\"rtl\"] .stage-header_stage-size-toggle-group_17LtK {\n margin-left: .2rem;\n}\n\n.stage-header_stage-button_hkl9B {\n display: block;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: calc(0.5rem / 2);\n width: calc(2rem + 2px);\n height: calc(2rem + 2px);\n background: hsla(0, 100%, 100%, 1);\n padding: 0.375rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: pointer;\n}\n\n[theme=\"dark\"] .stage-header_stage-button_hkl9B {\n background: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n}\n\n.stage-header_stage-button-icon_3zzFK {\n width: 100%;\n height: 100%;\n}\n\n[dir=\"rtl\"] .stage-header_stage-button-icon_3zzFK {\n transform: scaleX(-1);\n}\n\n[dir=\"ltr\"] .stage-header_stage-button-first_y_CLF {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n[dir=\"ltr\"] .stage-header_stage-button-last_eeKZ4 {\n border-left: none;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n[dir=\"rtl\"] .stage-header_stage-button-first_y_CLF {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n[dir=\"rtl\"] .stage-header_stage-button-last_eeKZ4 {\n border-right: none;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.stage-header_stage-button-toggled-off_AJ8yG {\n filter: saturate(0);\n}\n\n[theme=\"dark\"] .stage-header_stage-button-toggled-off_AJ8yG img,\n\n[theme=\"dark\"] .stage-header_stage-button_hkl9B:not(.stage-header_stage-button-first_y_CLF):not(.stage-header_stage-button-last_eeKZ4) img {\n filter: brightness(0) invert(1);\n opacity: 0.8;\n}\n\n.stage-header_embed-buttons_2Q7nj {\n display: flex;\n}\n\n[dir=\"ltr\"] .stage-header_embed-buttons_2Q7nj > *:not(:last-child) {\n margin-right: .2rem;\n}\n\n[dir=\"rtl\"] .stage-header_embed-buttons_2Q7nj > *:not(:last-child) {\n margin-left: .2rem;\n}\n", ""]); // exports exports.locals = { "stage-header-wrapper": "stage-header_stage-header-wrapper_1F4gT", "stageHeaderWrapper": "stage-header_stage-header-wrapper_1F4gT", "stage-header-wrapper-overlay": "stage-header_stage-header-wrapper-overlay_5vfJa", "stageHeaderWrapperOverlay": "stage-header_stage-header-wrapper-overlay_5vfJa", "embedded": "stage-header_embedded_nhDjw", "stage-menu-wrapper": "stage-header_stage-menu-wrapper_15JJt", "stageMenuWrapper": "stage-header_stage-menu-wrapper_15JJt", "embed-scratch-logo": "stage-header_embed-scratch-logo_2K5GA", "embedScratchLogo": "stage-header_embed-scratch-logo_2K5GA", "stage-size-row": "stage-header_stage-size-row_14N65", "stageSizeRow": "stage-header_stage-size-row_14N65", "stage-size-toggle-group": "stage-header_stage-size-toggle-group_17LtK", "stageSizeToggleGroup": "stage-header_stage-size-toggle-group_17LtK", "stage-button": "stage-header_stage-button_hkl9B", "stageButton": "stage-header_stage-button_hkl9B", "stage-button-icon": "stage-header_stage-button-icon_3zzFK", "stageButtonIcon": "stage-header_stage-button-icon_3zzFK", "stage-button-first": "stage-header_stage-button-first_y_CLF", "stageButtonFirst": "stage-header_stage-button-first_y_CLF", "stage-button-last": "stage-header_stage-button-last_eeKZ4", "stageButtonLast": "stage-header_stage-button-last_eeKZ4", "stage-button-toggled-off": "stage-header_stage-button-toggled-off_AJ8yG", "stageButtonToggledOff": "stage-header_stage-button-toggled-off_AJ8yG", "embed-buttons": "stage-header_embed-buttons_2Q7nj", "embedButtons": "stage-header_embed-buttons_2Q7nj" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/stage-selector/stage-selector.css": /*!*****************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/stage-selector/stage-selector.css ***! \*****************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n.stage-selector_stage-selector_3oWOr {\n background-clip: padding-box;\n display: flex;\n flex-direction: column;\n align-items: center;\n position: relative; /* For the add backdrop button */\n flex-grow: 1;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n background-color: hsla(0, 100%, 100%, 1);\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n border-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-width: 1px;\n border-style: solid;\n border-bottom: 0;\n cursor: pointer;\n transition: all 0.25s ease;\n}\n\n[theme=\"dark\"] .stage-selector_stage-selector_3oWOr {\n background-color: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n}\n\n.stage-selector_stage-selector_3oWOr.stage-selector_is-selected_2x2r_ {\n border-top-left-radius: .625rem;\n border-top-right-radius: .625rem;\n border-color: hsla(266, 100%, 50%, 1);\n box-shadow: 0px 0px 0px 4px hsla(266, 100%, 50%, 0.35);\n}\n\n.stage-selector_stage-selector_3oWOr:hover {\n border-color: hsla(266, 100%, 50%, 1);\n}\n\n.stage-selector_header_2GVr1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: calc(2.75rem - 2px);\n background-color: white;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n border-bottom: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n width: 100%;\n transition: background-color 0.25s ease;\n}\n\n[theme=\"dark\"] .stage-selector_header_2GVr1 {\n background-color: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n}\n\n.stage-selector_header-title_33xCt {\n font-size: 0.625rem;\n font-weight: bold;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n\n /* @todo: make this a mixin for all UI text labels */\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n transition: color 0.25s ease;\n}\n\n.stage-selector_stage-selector_3oWOr.stage-selector_is-selected_2x2r_ .stage-selector_header_2GVr1 {\n background-color: hsla(266, 100%, 50%, 1);\n}\n\n.stage-selector_stage-selector_3oWOr.stage-selector_is-selected_2x2r_ .stage-selector_header-title_33xCt {\n color: hsla(0, 100%, 100%, 1);\n}\n\n.stage-selector_count_2QK7D {\n padding: 0.3rem 0.75rem;\n font-size: 0.625rem;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.stage-selector_label_1MCfr {\n margin: 0.75rem 0 0.25rem;\n font-size: 0.6rem;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n text-align: center;\n}\n\n.stage-selector_costume-canvas_2L_6h {\n display: block;\n margin-top: .25rem;\n width: 100%;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: .25rem;\n box-shadow: inset 0 0 4px hsla(0, 0%, 0%, 0.15);\n max-width: 64px;\n max-height: 48px;\n}\n\n.stage-selector_add-button_1sKuU {\n position: absolute;\n bottom: 0.75rem;\n}\n\n.stage-selector_stage-selector_3oWOr.stage-selector_raised_9i1gL, .stage-selector_stage-selector_3oWOr.stage-selector_raised_9i1gL .stage-selector_header_2GVr1 {\n background-color: hsla(266, 100%, 77%, 1);\n transition: all 0.25s ease;\n}\n\n.stage-selector_raised_9i1gL:hover {\n transform: scale(1.05);\n}\n\n.stage-selector_receivedBlocks_2zr7v {\n animation: stage-selector_glowing_2YPqi 250ms;\n}\n\n@keyframes stage-selector_glowing_2YPqi {\n 10% { box-shadow: 0 0 10px #7fff1e; }\n 90% { box-shadow: 0 0 10px #7fff1e; }\n 100% { box-shadow: none; }\n}\n", ""]); // exports exports.locals = { "stage-selector": "stage-selector_stage-selector_3oWOr", "stageSelector": "stage-selector_stage-selector_3oWOr", "is-selected": "stage-selector_is-selected_2x2r_", "isSelected": "stage-selector_is-selected_2x2r_", "header": "stage-selector_header_2GVr1", "header-title": "stage-selector_header-title_33xCt", "headerTitle": "stage-selector_header-title_33xCt", "count": "stage-selector_count_2QK7D", "label": "stage-selector_label_1MCfr", "costume-canvas": "stage-selector_costume-canvas_2L_6h", "costumeCanvas": "stage-selector_costume-canvas_2L_6h", "add-button": "stage-selector_add-button_1sKuU", "addButton": "stage-selector_add-button_1sKuU", "raised": "stage-selector_raised_9i1gL", "receivedBlocks": "stage-selector_receivedBlocks_2zr7v", "glowing": "stage-selector_glowing_2YPqi" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/stage-wrapper/stage-wrapper.css": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/stage-wrapper/stage-wrapper.css ***! \***************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n\n/* Toolbox z-index: 40; set in scratch-blocks */\n\n/* tooltips should go over add buttons if they overlap */\n\n/* monitors go over add buttons */\n\n/* \"ask\" block text input goes above monitors */\n\n/* menu-bar should go over monitors, alerts and tutorials */\n\n/* tw: show below menu bar normally */\n\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n\n/* so it is draggable into other panes */\n\n/* in most interfaces, the context menu is always on top */\n\n/* tw: this changes the loading screen to be contained to the stage */\n\n.stage-wrapper_stage-wrapper_2bejr {\n position: relative;\n}\n\n.stage-wrapper_stage-wrapper_2bejr * {\n box-sizing: border-box;\n}\n\n.stage-wrapper_stage-canvas-wrapper_3ewmd {\n /* Hides negative space between edge of rounded corners + container, when selected */\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.stage-wrapper_stage-wrapper_2bejr.stage-wrapper_full-screen_2hjMb {\n position: fixed;\n top: 2.75rem;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 500;\n background-color: hsla(0, 100%, 100%, 1);\n /* spacing between stage and control bar (on the top), or between\n stage and window edges (on left/right/bottom) */\n padding: 0.1875rem;\n\n /* this centers the stage */\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n/* tw: support dark mode */\n\n[theme=\"dark\"] .stage-wrapper_stage-wrapper_2bejr.stage-wrapper_full-screen_2hjMb {\n background-color: #111;\n}\n\n/* tw: do not show color in embeds */\n\n.stage-wrapper_stage-wrapper_2bejr.stage-wrapper_embedded_10ZS6 {\n background-color: transparent;\n}\n", ""]); // exports exports.locals = { "stage-wrapper": "stage-wrapper_stage-wrapper_2bejr", "stageWrapper": "stage-wrapper_stage-wrapper_2bejr", "stage-canvas-wrapper": "stage-wrapper_stage-canvas-wrapper_3ewmd", "stageCanvasWrapper": "stage-wrapper_stage-canvas-wrapper_3ewmd", "full-screen": "stage-wrapper_full-screen_2hjMb", "fullScreen": "stage-wrapper_full-screen_2hjMb", "embedded": "stage-wrapper_embedded_10ZS6" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/stage/stage.css": /*!***********************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/stage/stage.css ***! \***********************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n/*基本色(#6f00ffを基調)*/\n\n/* #F0E5FF */\n\n/* #F3E9FC */\n\n/* #E7D9F2 */\n\n/* #B366FF with 90% opacity */\n\n/* #FFFFFF */\n\n/* 75% */\n\n/* 25% */\n\n/* 0% */\n\n/* 15% black */\n\n/* 渋めの紫文字色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #6f00ff 35% */\n\n/* #5c00cc 15% */\n\n/* opt-in theme overrides */\n\n/* ダークモードのトップバー色 */\n\n/* #6f00ff */\n\n/* #5c00cc */\n\n/* #9966ff */\n\n/* #8040ff */\n\n/* #9966ff 代替コントロール色 */\n\n/* #8a33ff */\n\n/* #5900b8 */\n\n/* #5900b8 25% */\n\n/* #8a33ff */\n\n/* #b380ff */\n\n/* #8a33ff 25% */\n\n/* #d1a6ff より明るい紫 */\n\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n\n/* Toolbox z-index: 40; set in scratch-blocks */\n\n/* tooltips should go over add buttons if they overlap */\n\n/* monitors go over add buttons */\n\n/* \"ask\" block text input goes above monitors */\n\n/* menu-bar should go over monitors, alerts and tutorials */\n\n/* tw: show below menu bar normally */\n\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n\n/* so it is draggable into other panes */\n\n/* in most interfaces, the context menu is always on top */\n\n.stage_stage_1fD7k {\n /*\n Fixes a few extra pixels of margin/padding, that adds on to the bottom\n of the element, which messes up the chrome padding consistency\n */\n display: block;\n\n border-radius: 0.5rem;\n border: 0.0625rem solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n overflow: hidden;\n\n /* @todo: This is for overriding the value being set somewhere. Where is it being set? */\n background-color: transparent;\n\n /* Allow custom touch handling to prevent scrolling on Edge */\n touch-action: none;\n\n /* Make sure border is not included in size calculation */\n box-sizing: content-box !important;\n\n /* enforce overflow + reset position of absolutely-positioned children */\n position: relative;\n\n /* anything in the stage such as monitor scrollbars should always use light theme */\n color-scheme: light;\n}\n\n.stage_stage_1fD7k.stage_full-screen_ZO7xi {\n /* tw: remove fullscreen border */\n}\n\n.stage_with-color-picker_1lNd5 {\n cursor: none;\n z-index: 2010;\n}\n\n.stage_color-picker-background_2wCVq {\n position: fixed;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.55);\n display: block;\n z-index: 2000;\n top: 0;\n left: 0;\n}\n\n.stage_stage-wrapper_eRRuk {\n position: relative;\n}\n\n/* we want stage overlays to all be positioned in the same spot as the stage, but can't put them inside the border\nbecause we want their overflow to be visible, and the bordered element must have overflow: hidden set so that the\nstage doesn't \"spill\" out from under its rounded corners. instead, shift these over by the border width. */\n\n.stage_stage-overlays_eE14L {\n position: absolute;\n top: 0.0625rem;\n left: 0.0625rem;\n\n /* the overlay itself should not capture pointer events; only its child elements can do that */\n pointer-events: none;\n}\n\n.stage_stage-overlays_eE14L.stage_full-screen_ZO7xi {\n top: 0.1875rem;\n left: 0.1875rem;\n}\n\n.stage_monitor-wrapper_2w6m8,\n.stage_frame-wrapper_1JaS_,\n.stage_green-flag-overlay-wrapper_2hUi_ {\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n}\n\n.stage_custom-overlays_ONYEZ {\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.stage_dragging-sprite_pxcJj {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1020;\n filter: drop-shadow(5px 5px 5px hsla(0, 0%, 0%, 0.15));\n}\n\n.stage_stage-bottom-wrapper_KIBfo {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n top: 0;\n left: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.stage_mic-indicator_3AvN8 {\n transform-origin: bottom right;\n z-index: 45;\n pointer-events: none;\n align-self: flex-end;\n}\n\n.stage_question-wrapper_3ukB4 {\n z-index: 49;\n pointer-events: auto;\n}\n\n.stage_frame_OVq5G {\n background: hsla(266, 100%, 50%, 0.35);\n border: 2px solid hsla(266, 100%, 50%, 1);\n border-radius: 0.5rem;\n animation-name: stage_flash_iuAnU;\n animation-duration: 0.75s;\n animation-fill-mode: forwards; /* Leave at 0 opacity after animation */\n}\n\n.stage_green-flag-overlay-wrapper_2hUi_ {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n background: rgba(0,0,0,0.25);\n border-radius: 0.5rem;\n pointer-events: all;\n cursor: pointer;\n}\n\n.stage_green-flag-overlay_gNXnv {\n padding: 1rem;\n border-radius: 100%;\n background: rgba(255,255,255,0.75);\n border: 3px solid hsla(0, 100%, 100%, 1);\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n width: 5rem;\n height: 5rem;\n}\n\n.stage_green-flag-overlay_gNXnv > img {\n width: 100%;\n object-fit: contain;\n}\n\n@keyframes stage_flash_iuAnU {\n 0% { opacity: 1; }\n 100% { opacity: 0; }\n}\n", ""]); // exports exports.locals = { "stage": "stage_stage_1fD7k", "full-screen": "stage_full-screen_ZO7xi", "fullScreen": "stage_full-screen_ZO7xi", "with-color-picker": "stage_with-color-picker_1lNd5", "withColorPicker": "stage_with-color-picker_1lNd5", "color-picker-background": "stage_color-picker-background_2wCVq", "colorPickerBackground": "stage_color-picker-background_2wCVq", "stage-wrapper": "stage_stage-wrapper_eRRuk", "stageWrapper": "stage_stage-wrapper_eRRuk", "stage-overlays": "stage_stage-overlays_eE14L", "stageOverlays": "stage_stage-overlays_eE14L", "monitor-wrapper": "stage_monitor-wrapper_2w6m8", "monitorWrapper": "stage_monitor-wrapper_2w6m8", "frame-wrapper": "stage_frame-wrapper_1JaS_", "frameWrapper": "stage_frame-wrapper_1JaS_", "green-flag-overlay-wrapper": "stage_green-flag-overlay-wrapper_2hUi_", "greenFlagOverlayWrapper": "stage_green-flag-overlay-wrapper_2hUi_", "custom-overlays": "stage_custom-overlays_ONYEZ", "customOverlays": "stage_custom-overlays_ONYEZ", "dragging-sprite": "stage_dragging-sprite_pxcJj", "draggingSprite": "stage_dragging-sprite_pxcJj", "stage-bottom-wrapper": "stage_stage-bottom-wrapper_KIBfo", "stageBottomWrapper": "stage_stage-bottom-wrapper_KIBfo", "mic-indicator": "stage_mic-indicator_3AvN8", "micIndicator": "stage_mic-indicator_3AvN8", "question-wrapper": "stage_question-wrapper_3ukB4", "questionWrapper": "stage_question-wrapper_3ukB4", "frame": "stage_frame_OVq5G", "flash": "stage_flash_iuAnU", "green-flag-overlay": "stage_green-flag-overlay_gNXnv", "greenFlagOverlay": "stage_green-flag-overlay_gNXnv" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/stop-all/stop-all.css": /*!*****************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/stop-all/stop-all.css ***! \*****************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.stop-all_stop-all_1Y8P9 {\n width: 2rem;\n height: 2rem;\n padding: 0.375rem;\n border-radius: 0.25rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: pointer;\n}\n.stop-all_stop-all_1Y8P9:hover {\n background-color: hsla(266, 100%, 39%, 0.15);\n}\n.stop-all_stop-all_1Y8P9 {\n opacity: 0.5;\n}\n.stop-all_stop-all_1Y8P9.stop-all_is-active_3nog0 {\n opacity: 1;\n}\n", ""]); // exports exports.locals = { "stop-all": "stop-all_stop-all_1Y8P9", "stopAll": "stop-all_stop-all_1Y8P9", "is-active": "stop-all_is-active_3nog0", "isActive": "stop-all_is-active_3nog0" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tag-button/tag-button.css": /*!*********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tag-button/tag-button.css ***! \*********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.tag-button_tag-button_nBLRM {\n padding: .625rem 1rem;\n margin-bottom: 6px;\n background: hsla(266, 100%, 50%, 1);\n border-radius: 1.375rem;\n color: hsla(0, 100%, 100%, 1);\n height: 2.5rem;\n}\n.tag-button_tag-button-icon_26hvC {\n max-width: 1rem;\n max-height: 1rem;\n}\n.tag-button_active_2stEz {\n background: hsla(266, 100%, 55%, 1);\n}\n", ""]); // exports exports.locals = { "tag-button": "tag-button_tag-button_nBLRM", "tagButton": "tag-button_tag-button_nBLRM", "tag-button-icon": "tag-button_tag-button-icon_26hvC", "tagButtonIcon": "tag-button_tag-button-icon_26hvC", "active": "tag-button_active_2stEz" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tag-checkbox/tag-button.css": /*!***********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tag-checkbox/tag-button.css ***! \***********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.tag-button_tag-button_eKIhW {\n padding: .625rem 1rem;\n margin-bottom: 6px;\n background: hsla(266, 100%, 50%, 1);\n border-radius: 1.375rem;\n color: hsla(0, 100%, 100%, 1);\n height: 2.5rem;\n}\n.tag-button_tag-button-icon_H72-6 {\n max-width: 1rem;\n max-height: 1rem;\n}\n.tag-button_active_17r5c {\n background: hsla(266, 100%, 55%, 1);\n}\n.tag-button_checkbox-label_1SSPu {\n display: flex;\n flex-direction: row;\n align-items: center;\n position: relative;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.tag-button_checkbox_2cmO2 {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background: transparent;\n width: 24px;\n height: 24px;\n margin: 4px 0;\n margin-right: 4px;\n border: 2px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 4px;\n cursor: pointer;\n}\n.tag-button_checkbox_2cmO2:focus,\n.tag-button_checkbox_2cmO2:hover {\n border: 2px solid hsla(266, 100%, 50%, 1);\n}\n[dir=\"rtl\"] .tag-button_checkbox_2cmO2 {\n margin-right: initial;\n margin-left: 4px;\n}\n.tag-button_checkbox_2cmO2:checked {\n border: 2px solid hsla(266, 100%, 50%, 1);\n background: hsla(266, 100%, 50%, 1);\n background-image: url('data:image/svg+xml;base64,PCEtLSBodHRwczovL2FrYXJpY29ucy5jb20vIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIiB3aWR0aD0iMWVtIiBoZWlnaHQ9IjFlbSIgc3R5bGU9Ii1tcy10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxnIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik00IDEybDYgNkwyMCA2IiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvZz48L3N2Zz4=');\n background-repeat: no-repeat;\n background-position: center;\n background-size: cover;\n}\n", ""]); // exports exports.locals = { "tag-button": "tag-button_tag-button_eKIhW", "tagButton": "tag-button_tag-button_eKIhW", "tag-button-icon": "tag-button_tag-button-icon_H72-6", "tagButtonIcon": "tag-button_tag-button-icon_H72-6", "active": "tag-button_active_17r5c", "checkbox-label": "tag-button_checkbox-label_1SSPu", "checkboxLabel": "tag-button_checkbox-label_1SSPu", "checkbox": "tag-button_checkbox_2cmO2" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/target-pane/target-pane.css": /*!***********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/target-pane/target-pane.css ***! \***********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n\n/* layout contants from `layout-constants.js` */\n\n.target-pane_target-pane_3S5E6 {\n /* Makes columns for the sprite library selector + and the stage selector */\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n}\n\n.target-pane_stage-selector-wrapper_qekSW {\n display: flex;\n flex-basis: 72px;\n flex-shrink: 0;\n}\n\n[dir=\"ltr\"] .target-pane_stage-selector-wrapper_qekSW {\n margin-left: calc(0.5rem / 2);\n}\n\n[dir=\"rtl\"] .target-pane_stage-selector-wrapper_qekSW {\n margin-right: calc(0.5rem / 2);\n}\n", ""]); // exports exports.locals = { "target-pane": "target-pane_target-pane_3S5E6", "targetPane": "target-pane_target-pane_3S5E6", "stage-selector-wrapper": "target-pane_stage-selector-wrapper_qekSW", "stageSelectorWrapper": "target-pane_stage-selector-wrapper_qekSW" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/telemetry-modal/telemetry-modal.css": /*!*******************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/telemetry-modal/telemetry-modal.css ***! \*******************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var escape = __webpack_require__(/*! ../../../node_modules/css-loader/lib/url/escape.js */ "./node_modules/css-loader/lib/url/escape.js"); exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\nh2 {\n font-size: 1.5rem;\n font-weight: bold;\n}\np {\n font-size: 1rem;\n line-height: 1.5em;\n}\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n/* from scratch-www */\n.telemetry-modal_modal-overlay_3R9Qg {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 510;\n background-color: var(--ui-modal-overlay, hsla(266, 100%, 65%, 0.9));\n}\n.telemetry-modal_modal-content_nALrs {\n margin: 100px auto;\n outline: none;\n border: .25rem solid hsla(0, 100%, 100%, 0.25);\n padding: 0;\n border-radius: 0.5rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n width: 640px;\n\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n overflow: hidden;\n}\n.telemetry-modal_illustration_2xM6I {\n width: 100%;\n height: 123px;\n background-color: hsla(266, 100%, 50%, 1);\n background-image: url(" + escape(__webpack_require__(/*! ./telemetry-modal-header.png */ "./src/components/telemetry-modal/telemetry-modal-header.png")) + ");\n background-size: cover;\n}\n.telemetry-modal_body_1ZKWV {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n}\n.telemetry-modal_privacy-policy-link_3wFww {\n color: hsla(266, 100%, 50%, 1);\n text-decoration: none;\n}\n/* stack the radio buttons vertically, not horizontally */\n.telemetry-modal_radio-buttons_8ArWg label {\n display: block;\n margin: 0.5rem;\n transition: all .125s ease;\n background-color: hsla(0, 0%, 95%, 1);\n border-radius: .5rem;\n margin: 0 auto 0.375rem;\n align-items: center;\n padding: 1rem 0;\n vertical-align: middle;\n}\n.telemetry-modal_radio-buttons_8ArWg label:hover {\n background-color: hsla(215, 100%, 65%, .1);\n}\n.telemetry-modal_radio-buttons_8ArWg label.telemetry-modal_label-selected_2jFaa,\n.telemetry-modal_radio-buttons_8ArWg label.telemetry-modal_label-selected_2jFaa:hover {\n background-color: hsla(215, 100%, 65%, .25);\n}\n.telemetry-modal_radio-buttons_8ArWg input[type=\"radio\"] {\n margin: -1px 0.75rem 1px;\n border: 1px solid hsla(0, 0%, 0%, .1);\n border-radius: 50%;\n width: 1rem;\n height: 1rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: hsla(0, 100%, 100%, 1);\n vertical-align: middle;\n}\n.telemetry-modal_radio-buttons_8ArWg input[type=\"radio\"]:checked,\n.telemetry-modal_radio-buttons_8ArWg input[type=\"radio\"]:focus {\n box-shadow: 0 0 0 2px hsla(215, 100%, 65%, .25);\n outline: none;\n}\n.telemetry-modal_radio-buttons_8ArWg input[type=\"radio\"]:checked {\n transition: all .25s ease;\n background-color: hsla(0, 100%, 100%, 1);\n border: 1px solid hsla(266, 100%, 50%, 1);\n}\n.telemetry-modal_radio-buttons_8ArWg input[type=\"radio\"]:checked::after {\n display: block;\n margin: 0.125rem;\n border-radius: 50%;\n background-color: hsla(266, 100%, 50%, 1);\n width: .625rem;\n height: .625rem;\n content: \"\";\n}\n/* Confirmation buttons at the bottom of the modal */\n.telemetry-modal_button-row_2rE_o {\n display: flex;\n flex-flow: row nowrap;\n justify-content: space-between;\n align-items: baseline;\n\n margin: 1.5rem 0;\n font-weight: bolder;\n}\n@keyframes telemetry-modal_fade-out_36Osg {\n 0% {opacity: 1}\n 100% {opacity: 0}\n}\n.telemetry-modal_setting-was-updated_1l6nc {\n animation: telemetry-modal_fade-out_36Osg 3s ease-out;\n color: hsla(266, 100%, 50%, 1);\n}\n.telemetry-modal_button-row_2rE_o button {\n border: 1px solid hsla(266, 100%, 50%, 1);\n border-radius: 0.25rem;\n padding: 0.5rem 1.5rem;\n color: white;\n background: hsla(266, 100%, 50%, 1);\n font-weight: bold;\n font-size: .875rem;\n cursor: pointer;\n}\n.telemetry-modal_button-row_2rE_o button:hover {\n background: hsla(266, 100%, 50%, 1);\n box-shadow: 0 0 0 6px hsla(266, 100%, 50%, 0.35);\n}\n.telemetry-modal_button-row_2rE_o button:disabled {\n background: var(--text-primary, hsla(266, 30%, 40%, 1));\n border-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n box-shadow: none;\n opacity: 0.25;\n}\n@media screen and (max-height: 660px) {\n .telemetry-modal_modal-content_nALrs {\n margin: 5vh auto;\n width: 90%;\n }\n}\n@media screen and (max-height: 540px) {\n .telemetry-modal_illustration_2xM6I {\n display: none;\n }\n}\n", ""]); // exports exports.locals = { "modal-overlay": "telemetry-modal_modal-overlay_3R9Qg", "modalOverlay": "telemetry-modal_modal-overlay_3R9Qg", "modal-content": "telemetry-modal_modal-content_nALrs", "modalContent": "telemetry-modal_modal-content_nALrs", "illustration": "telemetry-modal_illustration_2xM6I", "body": "telemetry-modal_body_1ZKWV", "privacy-policy-link": "telemetry-modal_privacy-policy-link_3wFww", "privacyPolicyLink": "telemetry-modal_privacy-policy-link_3wFww", "radio-buttons": "telemetry-modal_radio-buttons_8ArWg", "radioButtons": "telemetry-modal_radio-buttons_8ArWg", "label-selected": "telemetry-modal_label-selected_2jFaa", "labelSelected": "telemetry-modal_label-selected_2jFaa", "button-row": "telemetry-modal_button-row_2rE_o", "buttonRow": "telemetry-modal_button-row_2rE_o", "setting-was-updated": "telemetry-modal_setting-was-updated_1l6nc", "settingWasUpdated": "telemetry-modal_setting-was-updated_1l6nc", "fade-out": "telemetry-modal_fade-out_36Osg", "fadeOut": "telemetry-modal_fade-out_36Osg" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/turbo-mode/turbo-mode.css": /*!*********************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/turbo-mode/turbo-mode.css ***! \*********************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.turbo-mode_turbo-container_2ZNcq {\n display: flex;\n align-items: center;\n padding: 0.25rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.turbo-mode_turbo-icon_fjr8U {\n margin: 0.25rem;\n}\n.turbo-mode_turbo-label_-1oMs {\n font-size: 0.625rem;\n font-weight: bold;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: hsla(266, 100%, 60%, 1);\n white-space: nowrap;\n}\n", ""]); // exports exports.locals = { "turbo-container": "turbo-mode_turbo-container_2ZNcq", "turboContainer": "turbo-mode_turbo-container_2ZNcq", "turbo-icon": "turbo-mode_turbo-icon_fjr8U", "turboIcon": "turbo-mode_turbo-icon_fjr8U", "turbo-label": "turbo-mode_turbo-label_-1oMs", "turboLabel": "turbo-mode_turbo-label_-1oMs" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-cloud-variable-badge/cloud-variable-badge.css": /*!********************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-cloud-variable-badge/cloud-variable-badge.css ***! \********************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.cloud-variable-badge_badge_2kZVK {\n padding: 0.5rem;\n margin: 5px 0 8px 0;\n border: 1px solid #b9d6ff;\n background-color: #dbebff;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n border-radius: 0.5rem;\n}\n[theme=\"dark\"] .cloud-variable-badge_badge_2kZVK {\n border-color: #203652;\n background-color: #16202c;\n}\n.cloud-variable-badge_title_2xJoL {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: bold;\n}\n[theme=\"dark\"] .cloud-variable-badge_cloud-icon_1JP1e {\n filter: invert(100%);\n}\n.cloud-variable-badge_servers_1fLAL {\n display: flex;\n gap: 0.5rem;\n align-items: center;\n}\n.cloud-variable-badge_server_3s9y9 {\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n padding: 0.25rem 0.5rem;\n margin: 0;\n background: none;\n border-radius: 1rem;\n}\n.cloud-variable-badge_server_3s9y9.cloud-variable-badge_selected_3ZyWW {\n background-color: hsla(266, 100%, 50%, 1);\n color: hsla(0, 100%, 100%, 1);\n}\n", ""]); // exports exports.locals = { "badge": "cloud-variable-badge_badge_2kZVK", "title": "cloud-variable-badge_title_2xJoL", "cloud-icon": "cloud-variable-badge_cloud-icon_1JP1e", "cloudIcon": "cloud-variable-badge_cloud-icon_1JP1e", "servers": "cloud-variable-badge_servers_1fLAL", "server": "cloud-variable-badge_server_3s9y9", "selected": "cloud-variable-badge_selected_3ZyWW" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-custom-extension-modal/custom-extension-modal.css": /*!************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-custom-extension-modal/custom-extension-modal.css ***! \************************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.custom-extension-modal_modal-content_3DjW0 {\n max-width: 550px;\n margin-top: 50px;\n}\n.custom-extension-modal_body_2iQF3 {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n}\n[theme=\"dark\"] .custom-extension-modal_body_2iQF3 {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.custom-extension-modal_body_2iQF3 p,\n.custom-extension-modal_unsandboxed-container_8juVd,\n.custom-extension-modal_checkbox-container_35FlK,\n.custom-extension-modal_url-input_3NAsR,\n.custom-extension-modal_text-code-input_2xKjS {\n margin: 1rem 0;\n display: block;\n}\n.custom-extension-modal_type-selector-container_2Fag3 {\n display: flex;\n justify-content: space-around;\n}\n.custom-extension-modal_type-selector-button_1r2YN {\n width: 100%;\n cursor: pointer;\n border-bottom: 0.25rem solid var(--ui-tertiary, hsla(266, 50%, 90%, 1));\n margin: 0 1rem;\n padding: 0.5rem 0;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.custom-extension-modal_type-selector-button_1r2YN[data-active=\"true\"] {\n border-color: hsla(266, 100%, 50%, 1);\n}\n.custom-extension-modal_type-selector-button_1r2YN:active {\n border-color: hsla(266, 100%, 50%, 0.35);\n}\n.custom-extension-modal_url-input_3NAsR,\n.custom-extension-modal_text-code-input_2xKjS {\n width: 100%;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.25rem;\n padding: 0.5rem;\n font-size: inherit;\n}\n[theme=\"dark\"] .custom-extension-modal_url-input_3NAsR,\n[theme=\"dark\"] .custom-extension-modal_text-code-input_2xKjS {\n background: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n color: white;\n}\n.custom-extension-modal_url-input_3NAsR {\n height: 3rem;\n}\n.custom-extension-modal_text-code-input_2xKjS {\n min-height: 3rem;\n height: 8rem;\n min-width: 100%;\n max-width: 100%;\n font-family: monospace;\n}\n.custom-extension-modal_checkbox-container_35FlK,\n.custom-extension-modal_unsandboxed-container_8juVd {\n display: flex;\n align-items: center;\n}\n.custom-extension-modal_basic-checkbox_3fkyU,\n.custom-extension-modal_unsandboxed-checkbox_HkBFl {\n margin-right: 0.5rem;\n}\n.custom-extension-modal_trusted-extension_1WNO9,\n.custom-extension-modal_unsandboxed-warning_1BmMu {\n padding: 0.5rem;\n border-radius: 0.25rem;\n}\n.custom-extension-modal_trusted-extension_1WNO9 {\n background-color: rgba(94, 255, 94, 0.25);\n border: 1px solid green;\n}\n.custom-extension-modal_unsandboxed-warning_1BmMu {\n background-color: rgba(255, 81, 81, 0.25);\n border: 1px solid red;\n}\n.custom-extension-modal_unsandboxed-warning_1BmMu > *:not(:last-child) {\n display: block;\n margin-bottom: 4px;\n}\n.custom-extension-modal_button-row_3dv8g {\n display: flex;\n justify-content: flex-end;\n}\n.custom-extension-modal_load-button_WGJAt {\n font: inherit;\n color: inherit;\n padding: 0.75rem 1rem;\n border-radius: 0.25rem;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n font-weight: 600;\n font-size: 0.85rem;\n color: hsla(0, 100%, 100%, 1);\n background: hsla(266, 100%, 50%, 1);\n}\n.custom-extension-modal_load-button_WGJAt:disabled {\n opacity: 0.8;\n}\n.custom-extension-modal_library-item-image_2cCtd {\n max-width: 478px;\n}\n", ""]); // exports exports.locals = { "modal-content": "custom-extension-modal_modal-content_3DjW0", "modalContent": "custom-extension-modal_modal-content_3DjW0", "body": "custom-extension-modal_body_2iQF3", "unsandboxed-container": "custom-extension-modal_unsandboxed-container_8juVd", "unsandboxedContainer": "custom-extension-modal_unsandboxed-container_8juVd", "checkbox-container": "custom-extension-modal_checkbox-container_35FlK", "checkboxContainer": "custom-extension-modal_checkbox-container_35FlK", "url-input": "custom-extension-modal_url-input_3NAsR", "urlInput": "custom-extension-modal_url-input_3NAsR", "text-code-input": "custom-extension-modal_text-code-input_2xKjS", "textCodeInput": "custom-extension-modal_text-code-input_2xKjS", "type-selector-container": "custom-extension-modal_type-selector-container_2Fag3", "typeSelectorContainer": "custom-extension-modal_type-selector-container_2Fag3", "type-selector-button": "custom-extension-modal_type-selector-button_1r2YN", "typeSelectorButton": "custom-extension-modal_type-selector-button_1r2YN", "basic-checkbox": "custom-extension-modal_basic-checkbox_3fkyU", "basicCheckbox": "custom-extension-modal_basic-checkbox_3fkyU", "unsandboxed-checkbox": "custom-extension-modal_unsandboxed-checkbox_HkBFl", "unsandboxedCheckbox": "custom-extension-modal_unsandboxed-checkbox_HkBFl", "trusted-extension": "custom-extension-modal_trusted-extension_1WNO9", "trustedExtension": "custom-extension-modal_trusted-extension_1WNO9", "unsandboxed-warning": "custom-extension-modal_unsandboxed-warning_1BmMu", "unsandboxedWarning": "custom-extension-modal_unsandboxed-warning_1BmMu", "button-row": "custom-extension-modal_button-row_3dv8g", "buttonRow": "custom-extension-modal_button-row_3dv8g", "load-button": "custom-extension-modal_load-button_WGJAt", "loadButton": "custom-extension-modal_load-button_WGJAt", "library-item-image": "custom-extension-modal_library-item-image_2cCtd", "libraryItemImage": "custom-extension-modal_library-item-image_2cCtd" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-custom-extension-modal/file-input.css": /*!************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-custom-extension-modal/file-input.css ***! \************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.file-input_container_1c4jE {\n display: block;\n position: relative;\n padding: 1rem;\n margin: 1rem 0;\n text-align: center;\n border: 4px dashed var(--ui-tertiary, hsla(266, 50%, 90%, 1));\n border-radius: 5px;\n cursor: pointer;\n background: none;\n width: 100%;\n}\n.file-input_container_1c4jE:focus-within {\n border-color: hsla(266, 100%, 50%, 1);\n}\n", ""]); // exports exports.locals = { "container": "file-input_container_1c4jE" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-description/description.css": /*!**************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-description/description.css ***! \**************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".description_description_1iyDJ {\n max-height: 250px;\n overflow: auto;\n white-space: pre-line;\n overflow-wrap: break-word;\n line-height: 1.5em;\n padding: 0.5rem;\n margin: 5px 0 8px 0;\n border: 1px solid #b9d6ff;\n background-color: #dbebff;\n border-radius: 0.5rem;\n}\n\n.description_description_1iyDJ a {\n font-weight: bold;\n text-decoration: none;\n}\n\n[theme=\"dark\"] .description_description_1iyDJ {\n border-color: #203652;\n background-color: #16202c;\n}\n\n.description_header_27V8b {\n font-weight: bold;\n font-size: 1em;\n margin: 0;\n padding: 0;\n}\n\n.description_divider_3z5W7 {\n margin-top: 8px;\n}\n\n.description_project-link_2-Z1r {\n margin-bottom: 2px;\n}\n\n.description_emoji_2CB1r {\n\twidth: 1.4lh;\n\theight: 1.4lh;\n\tobject-fit: contain;\n\tvertical-align: bottom;\n}\n\nem .description_emoji_2CB1r {\n transform: skew(-12deg, 0deg);\n}\n\nstrong .description_emoji_2CB1r {\n filter: contrast(2);\n}\n\ndel .description_emoji_2CB1r {\n filter: blur(2px);\n}", ""]); // exports exports.locals = { "description": "description_description_1iyDJ", "header": "description_header_27V8b", "divider": "description_divider_3z5W7", "project-link": "description_project-link_2-Z1r", "projectLink": "description_project-link_2-Z1r", "emoji": "description_emoji_2CB1r" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-extension-separator/separator.css": /*!********************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-extension-separator/separator.css ***! \********************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.separator_separator_2qoYo {\n width: 100%;\n border: none;\n border-top: 2px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n margin: 0.5rem 0;\n}\n", ""]); // exports exports.locals = { "separator": "separator_separator_2qoYo" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-fancy-checkbox/checkbox.css": /*!**************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-fancy-checkbox/checkbox.css ***! \**************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var escape = __webpack_require__(/*! ../../../node_modules/css-loader/lib/url/escape.js */ "./node_modules/css-loader/lib/url/escape.js"); exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.checkbox_checkbox_2QbUl {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n width: 18px;\n height: 18px;\n border-radius: 4px;\n transition: .2s;\n background-color: white;\n transition-property: background-color;\n background-size: 100%;\n border: 1px solid rgb(92, 92, 92);\n outline: none;\n}\n.checkbox_checkbox_2QbUl:hover, .checkbox_checkbox_2QbUl:focus, .checkbox_checkbox_2QbUl:active, .checkbox_checkbox_2QbUl:checked {\n border-color: hsla(266, 100%, 50%, 1);\n}\n.checkbox_checkbox_2QbUl:focus, .checkbox_checkbox_2QbUl:active {\n box-shadow: 0 0 0 3px hsla(266, 100%, 50%, 0.35);\n}\n.checkbox_checkbox_2QbUl:checked {\n background-color: hsla(266, 100%, 50%, 1);\n background-image: url(" + escape(__webpack_require__(/*! ./checkbox.svg */ "./src/components/tw-fancy-checkbox/checkbox.svg")) + ");\n}\n[theme=\"dark\"] .checkbox_checkbox_2QbUl {\n border-color: transparent;\n}\n", ""]); // exports exports.locals = { "checkbox": "checkbox_checkbox_2QbUl" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-featured-projects/featured-projects.css": /*!**************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-featured-projects/featured-projects.css ***! \**************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".featured-projects_container_1--ew {\n margin-bottom: 8px;\n}\n\n.featured-projects_opener-container_1c9_H {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n opacity: 0.8;\n color: #222;\n}\n\n.featured-projects_opener-container_1c9_H:hover {\n opacity: 1;\n}\n\n.featured-projects_opener-content_1kqev {\n background-color: white;\n padding: 4px;\n border: 1px solid black;\n box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.25);\n}\n\n.featured-projects_projects_1piAv {\n position: relative;\n height: 156px;\n}\n\n.featured-projects_projects_1piAv.featured-projects_transition_3TsdC {\n transition: .2s height;\n}\n\n.featured-projects_projects_1piAv.featured-projects_opened_eLMQu {\n height: 426px;\n}\n\n.featured-projects_footer_2fw_5 {\n \n}\n", ""]); // exports exports.locals = { "container": "featured-projects_container_1--ew", "opener-container": "featured-projects_opener-container_1c9_H", "openerContainer": "featured-projects_opener-container_1c9_H", "opener-content": "featured-projects_opener-content_1kqev", "openerContent": "featured-projects_opener-content_1kqev", "projects": "featured-projects_projects_1piAv", "transition": "featured-projects_transition_3TsdC", "opened": "featured-projects_opened_eLMQu", "footer": "featured-projects_footer_2fw_5" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-fonts-modal/fonts-modal.css": /*!**************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-fonts-modal/fonts-modal.css ***! \**************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var escape = __webpack_require__(/*! ../../../node_modules/css-loader/lib/url/escape.js */ "./node_modules/css-loader/lib/url/escape.js"); exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n.fonts-modal_modal-content_36LbI {\n max-width: 550px;\n margin-top: 50px;\n}\n.fonts-modal_body_yf5mP {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n max-height: calc(100vh - 150px);\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n[theme=\"dark\"] .fonts-modal_body_yf5mP {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.fonts-modal_open-buttons_OdA4k {\n display: flex;\n gap: 1rem;\n}\n.fonts-modal_open-button_3skjP {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n width: 100%;\n align-items: center;\n background: none;\n padding: 0.5rem;\n margin: 0;\n border: 2px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.5rem;\n}\n.fonts-modal_open-button_3skjP:hover {\n color: hsla(266, 100%, 50%, 1);\n border-color: hsla(266, 100%, 50%, 1);\n}\n.fonts-modal_open-button-image_19kgq {\n width: 64px;\n height: 64px;\n background-color: currentColor;\n -webkit-mask-size: cover;\n mask-size: cover;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n}\n.fonts-modal_system-image_p0UST {\n -webkit-mask-image: url(" + escape(__webpack_require__(/*! ./system.svg */ "./src/components/tw-fonts-modal/system.svg")) + ");\n mask-image: url(" + escape(__webpack_require__(/*! ./system.svg */ "./src/components/tw-fonts-modal/system.svg")) + ");\n}\n.fonts-modal_custom-image_3B90x {\n -webkit-mask-image: url(" + escape(__webpack_require__(/*! ./custom.svg */ "./src/components/tw-fonts-modal/custom.svg")) + ");\n mask-image: url(" + escape(__webpack_require__(/*! ./custom.svg */ "./src/components/tw-fonts-modal/custom.svg")) + ");\n}\n.fonts-modal_open-button-text_1JUnw {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n}\n.fonts-modal_open-button-text-main_1QWic {\n font-weight: bold;\n}\n.fonts-modal_open-button-text-sub_2yVxF {\n\n}\n.fonts-modal_font-input-outer_OtzL0 {\n\n}\n.fonts-modal_font-input_jygEL {\n width: 100%;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.25rem;\n padding: 0 1rem;\n height: 3rem;\n font: inherit;\n}\n.fonts-modal_font-dropdown-outer_2kOi5 {\n position: absolute;\n z-index: 510;\n background-color: white;\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n border-radius: 0.25rem;\n overflow: auto;\n max-height: 300px;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n box-sizing: border-box;\n box-shadow: 0px 0px 8px 1px rgba(0, 0, 0, .3);\n}\n[theme=\"dark\"] .fonts-modal_font-dropdown-outer_2kOi5 {\n background-color: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n}\n.fonts-modal_font-dropdown-item_1NsNq {\n display: flex;\n align-items: center;\n padding: 0.5rem 0.75rem;\n height: 1.5rem;\n cursor: pointer;\n transition: .1s ease;\n}\n.fonts-modal_font-dropdown-item_1NsNq:hover {\n background-color: hsla(266, 100%, 50%, 1);\n color: #ffffff;\n}\n.fonts-modal_font-playground_3vAYw {\n background: none;\n border: none;\n padding: 0.5rem;\n margin: 0;\n resize: none;\n width: 100%;\n height: 100px;\n font-size: 1.5rem;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.25rem;\n}\n.fonts-modal_button_1htQ- {\n font: inherit;\n font-weight: bold;\n padding: 0.75rem 1rem;\n border-radius: 0.25rem;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n background-color: hsla(266, 100%, 50%, 1);\n color: hsla(0, 100%, 100%, 1);\n}\n.fonts-modal_button_1htQ-:disabled {\n opacity: 0.8;\n}\n.fonts-modal_fallback-container_3JsVp {\n display: flex;\n flex-direction: column;\n}\n.fonts-modal_fallback-label_3lhWz {\n margin-bottom: 0.5rem;\n}\n.fonts-modal_fallback-list_dMIkJ {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 0.25rem\n}\n.fonts-modal_fallback-button_11k4q {\n background: none;\n padding: 0;\n border: 0;\n border-radius: 0.25rem;\n height: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.fonts-modal_fallback-button_11k4q:hover {\n color: hsla(266, 100%, 50%, 1);\n}\n.fonts-modal_fallback-container_3JsVp .fonts-modal_fallback-button-selected_8XTtQ {\n background-color: hsla(266, 100%, 50%, 1);\n color: white;\n}\n.fonts-modal_fonts-outer_2gPPS {\n border-top: 2px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n padding-top: 1rem;\n}\n.fonts-modal_fonts-outer_2gPPS p {\n margin-bottom: 0.5rem;\n}\n.fonts-modal_fonts_2IVM- {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.fonts-modal_manage-font_leTBp {\n width: 100%;\n display: flex;\n align-items: center;\n border: 2px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.5rem;\n padding: 0.5rem;\n gap: 0.5rem;\n}\n.fonts-modal_manage-font-name_2FEQm {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n overflow-wrap: anywhere;\n}\n.fonts-modal_manage-font-buttons_1irfe {\n margin-left: auto;\n flex-shrink: 0;\n display: flex;\n flex-direction: row;\n gap: 0.5rem;\n}\n.fonts-modal_manage-font-button_1Ezz0 {\n background: none;\n border: none;\n border-radius: 100%;\n width: 2rem;\n height: 2rem;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.fonts-modal_manage-font-button_1Ezz0:hover {\n background-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.fonts-modal_manage-font-button_1Ezz0 img {\n display: block;\n width: 100%;\n height: 100%;\n}\n[theme=\"dark\"] .fonts-modal_manage-font-button_1Ezz0 img {\n filter: invert(100%);\n}\n", ""]); // exports exports.locals = { "modal-content": "fonts-modal_modal-content_36LbI", "modalContent": "fonts-modal_modal-content_36LbI", "body": "fonts-modal_body_yf5mP", "open-buttons": "fonts-modal_open-buttons_OdA4k", "openButtons": "fonts-modal_open-buttons_OdA4k", "open-button": "fonts-modal_open-button_3skjP", "openButton": "fonts-modal_open-button_3skjP", "open-button-image": "fonts-modal_open-button-image_19kgq", "openButtonImage": "fonts-modal_open-button-image_19kgq", "system-image": "fonts-modal_system-image_p0UST", "systemImage": "fonts-modal_system-image_p0UST", "custom-image": "fonts-modal_custom-image_3B90x", "customImage": "fonts-modal_custom-image_3B90x", "open-button-text": "fonts-modal_open-button-text_1JUnw", "openButtonText": "fonts-modal_open-button-text_1JUnw", "open-button-text-main": "fonts-modal_open-button-text-main_1QWic", "openButtonTextMain": "fonts-modal_open-button-text-main_1QWic", "open-button-text-sub": "fonts-modal_open-button-text-sub_2yVxF", "openButtonTextSub": "fonts-modal_open-button-text-sub_2yVxF", "font-input-outer": "fonts-modal_font-input-outer_OtzL0", "fontInputOuter": "fonts-modal_font-input-outer_OtzL0", "font-input": "fonts-modal_font-input_jygEL", "fontInput": "fonts-modal_font-input_jygEL", "font-dropdown-outer": "fonts-modal_font-dropdown-outer_2kOi5", "fontDropdownOuter": "fonts-modal_font-dropdown-outer_2kOi5", "font-dropdown-item": "fonts-modal_font-dropdown-item_1NsNq", "fontDropdownItem": "fonts-modal_font-dropdown-item_1NsNq", "font-playground": "fonts-modal_font-playground_3vAYw", "fontPlayground": "fonts-modal_font-playground_3vAYw", "button": "fonts-modal_button_1htQ-", "fallback-container": "fonts-modal_fallback-container_3JsVp", "fallbackContainer": "fonts-modal_fallback-container_3JsVp", "fallback-label": "fonts-modal_fallback-label_3lhWz", "fallbackLabel": "fonts-modal_fallback-label_3lhWz", "fallback-list": "fonts-modal_fallback-list_dMIkJ", "fallbackList": "fonts-modal_fallback-list_dMIkJ", "fallback-button": "fonts-modal_fallback-button_11k4q", "fallbackButton": "fonts-modal_fallback-button_11k4q", "fallback-button-selected": "fonts-modal_fallback-button-selected_8XTtQ", "fallbackButtonSelected": "fonts-modal_fallback-button-selected_8XTtQ", "fonts-outer": "fonts-modal_fonts-outer_2gPPS", "fontsOuter": "fonts-modal_fonts-outer_2gPPS", "fonts": "fonts-modal_fonts_2IVM-", "manage-font": "fonts-modal_manage-font_leTBp", "manageFont": "fonts-modal_manage-font_leTBp", "manage-font-name": "fonts-modal_manage-font-name_2FEQm", "manageFontName": "fonts-modal_manage-font-name_2FEQm", "manage-font-buttons": "fonts-modal_manage-font-buttons_1irfe", "manageFontButtons": "fonts-modal_manage-font-buttons_1irfe", "manage-font-button": "fonts-modal_manage-font-button_1Ezz0", "manageFontButton": "fonts-modal_manage-font-button_1Ezz0" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-framerate-indicator/framerate-indicator.css": /*!******************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-framerate-indicator/framerate-indicator.css ***! \******************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.framerate-indicator_framerate-container_NtFdv {\n display: flex;\n align-items: center;\n padding: 0.25rem;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.framerate-indicator_framerate-label_2VeIK {\n font-size: 0.625rem;\n font-weight: bold;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: hsla(266, 100%, 60%, 1);\n white-space: nowrap;\n}\n", ""]); // exports exports.locals = { "framerate-container": "framerate-indicator_framerate-container_NtFdv", "framerateContainer": "framerate-indicator_framerate-container_NtFdv", "framerate-label": "framerate-indicator_framerate-label_2VeIK", "framerateLabel": "framerate-indicator_framerate-label_2VeIK" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-loading-spinner/spinner.css": /*!**************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-loading-spinner/spinner.css ***! \**************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.spinner_container_2gp3A {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n}\n.spinner_spinner_3_DJ6 {\n width: 64px;\n height: 64px;\n border-radius: 50%;\n border: 6px solid;\n border-color: hsla(266, 100%, 50%, 1) transparent hsla(266, 100%, 50%, 1) transparent;\n animation: spinner_spinner_3_DJ6 1.2s linear infinite;\n}\n[theme=\"dark\"] .spinner_spinner_3_DJ6 {\n border-color: #fff transparent #fff transparent;\n}\n@keyframes spinner_spinner_3_DJ6 {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n", ""]); // exports exports.locals = { "container": "spinner_container_2gp3A", "spinner": "spinner_spinner_3_DJ6" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-project-input/project-input.css": /*!******************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-project-input/project-input.css ***! \******************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/*\n Contains constants for the z-index values of elements that are part of the global stack context.\n In other words, z-index values that are \"inside\" a component are not added here.\n This prevents conflicts between identical z-index values in different components.\n*/\n/* Toolbox z-index: 40; set in scratch-blocks */\n/* tooltips should go over add buttons if they overlap */\n/* monitors go over add buttons */\n/* \"ask\" block text input goes above monitors */\n/* menu-bar should go over monitors, alerts and tutorials */\n/* tw: show below menu bar normally */\n/* Block drag z-index: 1000; default 50 is overriden in blocks.css */\n/* so it is draggable into other panes */\n/* in most interfaces, the context menu is always on top */\n.project-input_input_1E6Af {\n border: none;\n width: 100%;\n font-size: 23px;\n line-height: 32px;\n opacity: 0.5;\n background-color: transparent;\n color: inherit;\n}\n.project-input_input_1E6Af:focus {\n opacity: 1;\n}\n.project-input_input_1E6Af:disabled {\n opacity: 0.8;\n}\n.project-input_tooltip_3_EoA {\n opacity: 1 !important;\n background-color: hsla(266, 100%, 50%, 1) !important;\n border: 1px solid hsla(0, 0%, 0%, .1) !important;\n box-shadow: 0 0 .5rem hsla(0, 0%, 0%, .25) !important;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important;\n border: 1px solid hsla(0, 0%, 0%, .1) !important;\n z-index: 491 !important;\n}\n.project-input_tooltip_3_EoA:after {\n border-top-color: hsla(266, 100%, 50%, 1) !important;\n}\n", ""]); // exports exports.locals = { "input": "project-input_input_1E6Af", "tooltip": "project-input_tooltip_3_EoA" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-restore-point-modal/restore-point-modal.css": /*!******************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-restore-point-modal/restore-point-modal.css ***! \******************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.restore-point-modal_modal-content_MhWVL {\n max-width: 550px;\n margin-top: 50px;\n}\n.restore-point-modal_body_2MCxE {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n max-height: calc(100vh - 150px);\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n[theme=\"dark\"] .restore-point-modal_body_2MCxE {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.restore-point-modal_extra-container_1h-QF {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.restore-point-modal_total-size_2aFad {\n\n}\n.restore-point-modal_total-size-description_2spx- {\n font-size: small;\n}\n.restore-point-modal_button_3fhkL {\n font: inherit;\n color: inherit;\n padding: 0.75rem 1rem;\n border-radius: 0.25rem;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n font-weight: 600;\n font-size: 0.85rem;\n color: hsla(0, 100%, 100%, 1);\n}\n.restore-point-modal_button_3fhkL:disabled {\n opacity: 0.8;\n}\n.restore-point-modal_delete-all-button_3uoFz {\n margin-left: 1rem;\n background-color: hsla(266, 100%, 55%, 1);\n white-space: nowrap;\n}\n.restore-point-modal_error-message_2jcrY {\n font-family: monospace;\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n}\n.restore-point-modal_restore-point-container_FtGHo {\n display: grid;\n grid-template-columns: 1fr;\n gap: 0.5rem;\n}\n.restore-point-modal_restore-point_2yeHY {\n width: 100%;\n cursor: pointer;\n display: flex;\n align-items: center;\n border: 2px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n padding: 0.5rem;\n border-radius: 0.5rem;\n gap: 0.5rem;\n}\n.restore-point-modal_restore-point_2yeHY:hover {\n border-color: hsla(266, 100%, 50%, 1);\n}\n.restore-point-modal_restore-point-title_311jA {\n font-weight: bold;\n}\n.restore-point-modal_thumbnail-container_2BRX1 {\n flex-shrink: 0;\n /* 4:3 */\n width: 100px;\n height: 75px;\n}\n.restore-point-modal_thumbnail-image_2HLfd {\n display: block;\n border-radius: 0.25rem;\n width: 100%;\n height: 100%;\n}\n.restore-point-modal_thumbnail-placeholder_3BxpD {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 2em;\n}\n.restore-point-modal_delete-button_FU0Oj {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background: none;\n border: none;\n border-radius: 100%;\n width: 2rem;\n height: 2rem;\n margin-left: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.restore-point-modal_delete-button_FU0Oj img {\n display: block;\n width: 75%;\n height: 75%;\n}\n[theme=\"dark\"] .restore-point-modal_delete-button_FU0Oj img {\n filter: invert(100%);\n}\n.restore-point-modal_delete-button_FU0Oj:hover {\n background-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n}\n.restore-point-modal_export-button_1FzPE {\n margin: 0 4px;\n padding: 2px 4px;\n background-color: hsla(266, 100%, 55%, 1);\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.25rem;\n font-size: small;\n color: hsla(0, 100%, 100%, 1);\n}\n.restore-point-modal_disabled_2fYZv {\n padding: 0.5rem;\n border-radius: 0.5rem;\n background-color: rgba(255, 0, 0, 0.18);\n border: 2px solid rgba(255, 0, 0, 0.568);\n font-weight: bold;\n}\n", ""]); // exports exports.locals = { "modal-content": "restore-point-modal_modal-content_MhWVL", "modalContent": "restore-point-modal_modal-content_MhWVL", "body": "restore-point-modal_body_2MCxE", "extra-container": "restore-point-modal_extra-container_1h-QF", "extraContainer": "restore-point-modal_extra-container_1h-QF", "total-size": "restore-point-modal_total-size_2aFad", "totalSize": "restore-point-modal_total-size_2aFad", "total-size-description": "restore-point-modal_total-size-description_2spx-", "totalSizeDescription": "restore-point-modal_total-size-description_2spx-", "button": "restore-point-modal_button_3fhkL", "delete-all-button": "restore-point-modal_delete-all-button_3uoFz", "deleteAllButton": "restore-point-modal_delete-all-button_3uoFz", "error-message": "restore-point-modal_error-message_2jcrY", "errorMessage": "restore-point-modal_error-message_2jcrY", "restore-point-container": "restore-point-modal_restore-point-container_FtGHo", "restorePointContainer": "restore-point-modal_restore-point-container_FtGHo", "restore-point": "restore-point-modal_restore-point_2yeHY", "restorePoint": "restore-point-modal_restore-point_2yeHY", "restore-point-title": "restore-point-modal_restore-point-title_311jA", "restorePointTitle": "restore-point-modal_restore-point-title_311jA", "thumbnail-container": "restore-point-modal_thumbnail-container_2BRX1", "thumbnailContainer": "restore-point-modal_thumbnail-container_2BRX1", "thumbnail-image": "restore-point-modal_thumbnail-image_2HLfd", "thumbnailImage": "restore-point-modal_thumbnail-image_2HLfd", "thumbnail-placeholder": "restore-point-modal_thumbnail-placeholder_3BxpD", "thumbnailPlaceholder": "restore-point-modal_thumbnail-placeholder_3BxpD", "delete-button": "restore-point-modal_delete-button_FU0Oj", "deleteButton": "restore-point-modal_delete-button_FU0Oj", "export-button": "restore-point-modal_export-button_1FzPE", "exportButton": "restore-point-modal_export-button_1FzPE", "disabled": "restore-point-modal_disabled_2fYZv" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-security-manager-modal/data-url.css": /*!**********************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-security-manager-modal/data-url.css ***! \**********************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.data-url_code_1o8oS {\n display: block;\n width: 100%;\n max-width: 100%;\n min-width: 100%;\n height: 5rem;\n min-height: 3rem;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 0.25rem;\n padding: 0.25rem;\n font-size: 0.875rem;\n font-family: monospace;\n margin: 0.5rem 0;\n}\n[theme=\"dark\"] .data-url_code_1o8oS {\n background: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n color: white;\n}\n", ""]); // exports exports.locals = { "code": "data-url_code_1o8oS" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-security-manager-modal/download.css": /*!**********************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-security-manager-modal/download.css ***! \**********************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".download_file-name_1tb8X {\n font-family: monospace;\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n word-wrap: break-word;\n}\n.download_file-name_1tb8X::before {\n content: '\"';\n}\n.download_file-name_1tb8X::after {\n content: '\"';\n}\n.download_name_3QMMC {\n\n}\n.download_dot_Tzo59 {\n\n}\n.download_extension_359jK {\n text-decoration: underline;\n}", ""]); // exports exports.locals = { "file-name": "download_file-name_1tb8X", "fileName": "download_file-name_1tb8X", "name": "download_name_3QMMC", "dot": "download_dot_Tzo59", "extension": "download_extension_359jK" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-security-manager-modal/load-extension.css": /*!****************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-security-manager-modal/load-extension.css ***! \****************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.load-extension_code_2UsqN,\n.load-extension_unsandboxed-container_3_M9P,\n.load-extension_unsandboxed-warning_2iFhK,\n.load-extension_sandboxed_3ynzH {\n margin: 8px 0;\n}\n.load-extension_unsandboxed-container_3_M9P {\n display: flex;\n align-items: center;\n}\n.load-extension_unsandboxed-checkbox_1tSmf {\n margin-right: 8px;\n}\n.load-extension_unsandboxed-warning_2iFhK {\n padding: 0.5rem;\n border-radius: 0.25rem;\n background-color: rgba(255, 81, 81, 0.25);\n border: 1px solid red;\n}\n", ""]); // exports exports.locals = { "code": "load-extension_code_2UsqN", "unsandboxed-container": "load-extension_unsandboxed-container_3_M9P", "unsandboxedContainer": "load-extension_unsandboxed-container_3_M9P", "unsandboxed-warning": "load-extension_unsandboxed-warning_2iFhK", "unsandboxedWarning": "load-extension_unsandboxed-warning_2iFhK", "sandboxed": "load-extension_sandboxed_3ynzH", "unsandboxed-checkbox": "load-extension_unsandboxed-checkbox_1tSmf", "unsandboxedCheckbox": "load-extension_unsandboxed-checkbox_1tSmf" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-security-manager-modal/security-manager-modal.css": /*!************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-security-manager-modal/security-manager-modal.css ***! \************************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.security-manager-modal_modal-content_3qWwH {\n width: 440px;\n margin-top: 25px;\n}\n.security-manager-modal_body_Pn7qy {\n background: hsla(0, 100%, 100%, 1);\n padding: 1rem 1.5rem;\n}\n[theme=\"dark\"] .security-manager-modal_body_Pn7qy {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.security-manager-modal_body_Pn7qy p {\n margin: 8px 0;\n}\n.security-manager-modal_buttons_1LSKA {\n display: flex;\n}\n.security-manager-modal_buttons_1LSKA :disabled {\n opacity: 0.8;\n}\n.security-manager-modal_deny-button_3Vd-R, .security-manager-modal_allow-button_3tcXk {\n flex-grow: 1;\n font: inherit;\n color: inherit;\n padding: 0.75rem 1rem;\n border-radius: 0.25rem;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n font-weight: 600;\n font-size: 0.85rem;\n}\n.security-manager-modal_deny-button_3Vd-R {\n background-color: rgb(255, 92, 92);\n color: white;\n margin-right: 8px;\n}\n.security-manager-modal_allow-button_3tcXk {\n background-color: #24cd11;\n color: black;\n}\n", ""]); // exports exports.locals = { "modal-content": "security-manager-modal_modal-content_3qWwH", "modalContent": "security-manager-modal_modal-content_3qWwH", "body": "security-manager-modal_body_Pn7qy", "buttons": "security-manager-modal_buttons_1LSKA", "deny-button": "security-manager-modal_deny-button_3Vd-R", "denyButton": "security-manager-modal_deny-button_3Vd-R", "allow-button": "security-manager-modal_allow-button_3tcXk", "allowButton": "security-manager-modal_allow-button_3tcXk" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-security-manager-modal/url.css": /*!*****************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-security-manager-modal/url.css ***! \*****************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".url_url_3Y61f {\n font-family: monospace;\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n word-wrap: break-word;\n}\n.url_url_3Y61f::before {\n content: '\"';\n}\n.url_url_3Y61f::after {\n content: '\"';\n}\n", ""]); // exports exports.locals = { "url": "url_url_3Y61f" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-settings-modal/settings-modal.css": /*!********************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-settings-modal/settings-modal.css ***! \********************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var escape = __webpack_require__(/*! ../../../node_modules/css-loader/lib/url/escape.js */ "./node_modules/css-loader/lib/url/escape.js"); exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.settings-modal_modal-content_2bE7f {\n max-width: max(60%, 750px);\n}\n.settings-modal_body_cAUJ0 {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n min-height: 150px;\n max-height: calc(100vh - 250px);\n overflow-y: auto;\n}\n[theme=\"dark\"] .settings-modal_body_cAUJ0 {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n/* For small screens, such as in the embed */\n@media (max-height: 600px) {\n .settings-modal_modal-content_2bE7f {\n margin: 50px auto;\n }\n .settings-modal_body_cAUJ0 {\n max-height: calc(100vh - 150px);\n }\n}\n.settings-modal_setting_PxhNM {\n display: flex;\n flex-direction: column;\n padding: 0.5rem 1rem;\n margin: 0.25rem 0;\n border-radius: 4px;\n}\n.settings-modal_setting_PxhNM.settings-modal_active_1McfX {\n background: #dbebff;\n}\n.settings-modal_setting_PxhNM:hover,\n.settings-modal_setting_PxhNM:focus-within {\n background: #cadef5;\n}\n[theme=\"dark\"] .settings-modal_setting_PxhNM.settings-modal_active_1McfX {\n background: #16202c;\n}\n[theme=\"dark\"] .settings-modal_setting_PxhNM:hover,\n[theme=\"dark\"] .settings-modal_setting_PxhNM:focus-within {\n background: #202f41;\n}\n.settings-modal_label_2Phuq {\n height: 32px;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.settings-modal_label-unset-height_3uoDx {\n height: initial;\n}\n.settings-modal_setting_PxhNM table {\n border-collapse: collapse;\n}\n.settings-modal_setting_PxhNM tr,\n.settings-modal_setting_PxhNM td,\n.settings-modal_setting_PxhNM th {\n padding: 0;\n margin: 0;\n border: 1px solid var(--ui-tertiary, hsla(266, 50%, 90%, 1));\n}\n.settings-modal_checkbox_1dXwG {\n margin-right: 0.5rem;\n}\n.settings-modal_help-icon_2FTix {\n border: 0;\n background-color: transparent;\n background-image: url(" + escape(__webpack_require__(/*! ./help-black.svg */ "./src/components/tw-settings-modal/help-black.svg")) + ");\n width: 20px;\n height: 20px;\n background-size: 100%;\n margin-left: 0.5rem;\n cursor: pointer;\n}\n[theme=\"dark\"] .settings-modal_help-icon_2FTix {\n background-image: url(" + escape(__webpack_require__(/*! ./help-white.svg */ "./src/components/tw-settings-modal/help-white.svg")) + ");\n}\n.settings-modal_custom-stage-size_3I0AA {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n height: initial;\n}\n.settings-modal_custom-stage-size-container_2OBYk {\n display: flex;\n align-items: center;\n}\n.settings-modal_custom-stage-size_3I0AA > * {\n margin-right: 0.5rem;\n}\n.settings-modal_custom-stage-size-button_3koc0 {\n margin: 8px;\n background: white;\n border-radius: 10px;\n font-size: 40px;\n width: 168px;\n height: 126px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n outline: 4px white solid;\n}\n[theme=\"dark\"] .settings-modal_custom-stage-size-button_3koc0 {\n outline-color: var(--ui-primary, hsla(266, 100%, 95%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n border-color: rgba(255, 255, 255, 0.1);\n}\n.settings-modal_custom-stage-size-button_3koc0[data-widescreen=\"true\"] {\n width: 224px;\n}\n.settings-modal_custom-stage-size-button_3koc0[data-square=\"true\"] {\n width: 126px;\n}\n.settings-modal_custom-stage-size-button_3koc0[data-selected=\"true\"] {\n border-color: hsla(266, 100%, 50%, 1);\n}\n.settings-modal_custom-stage-size-button_3koc0:active {\n border-color: hsla(266, 100%, 50%, 0.35);\n}\n.settings-modal_custom-stage-size-input_2ivQT {\n width: 80px;\n margin: 3px 8px;\n}\n.settings-modal_info_1a5yx {\n margin-bottom: 0.25rem;\n}\n.settings-modal_header_3lDNd {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin: 0.5rem 0 0 0;\n font-weight: bold;\n}\n.settings-modal_divider_7euKA {\n flex-grow: 1;\n margin-left: 1rem;\n border-top: 1px dashed var(--ui-tertiary, hsla(266, 50%, 90%, 1));\n}\n.settings-modal_button_15QCA {\n font-family: inherit;\n font-size: 14px;\n background-color: hsla(266, 100%, 50%, 1);\n color: white;\n border: none;\n padding: 0.5rem 1rem;\n margin: 0;\n border-radius: 4px;\n cursor: pointer;\n font-family: inherit;\n font-weight: bold;\n}\n.settings-modal_button_15QCA:active, .settings-modal_button_15QCA:focus-within {\n box-shadow: 0 0 0 3px hsla(266, 100%, 50%, 0.35);\n}\n.settings-modal_warning_2xSC8 {\n padding: 0.5rem 1rem;\n margin: 0.25rem 0;\n border-radius: 4px;\n background: rgb(255, 197, 38);\n color: black;\n}\n[theme=\"dark\"] .settings-modal_warning_2xSC8 {\n background: rgb(114, 65, 0);\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n}\n.settings-modal_summary_jE5Vl {\n cursor: pointer;\n}\n.settings-modal_dropdown_JkJtU {\n margin-right: 4px;\n}\ndetails[open] .settings-modal_dropdown_JkJtU {\n transform: rotate(90deg);\n}", ""]); // exports exports.locals = { "modal-content": "settings-modal_modal-content_2bE7f", "modalContent": "settings-modal_modal-content_2bE7f", "body": "settings-modal_body_cAUJ0", "setting": "settings-modal_setting_PxhNM", "active": "settings-modal_active_1McfX", "label": "settings-modal_label_2Phuq", "label-unset-height": "settings-modal_label-unset-height_3uoDx", "labelUnsetHeight": "settings-modal_label-unset-height_3uoDx", "checkbox": "settings-modal_checkbox_1dXwG", "help-icon": "settings-modal_help-icon_2FTix", "helpIcon": "settings-modal_help-icon_2FTix", "custom-stage-size": "settings-modal_custom-stage-size_3I0AA", "customStageSize": "settings-modal_custom-stage-size_3I0AA", "custom-stage-size-container": "settings-modal_custom-stage-size-container_2OBYk", "customStageSizeContainer": "settings-modal_custom-stage-size-container_2OBYk", "custom-stage-size-button": "settings-modal_custom-stage-size-button_3koc0", "customStageSizeButton": "settings-modal_custom-stage-size-button_3koc0", "custom-stage-size-input": "settings-modal_custom-stage-size-input_2ivQT", "customStageSizeInput": "settings-modal_custom-stage-size-input_2ivQT", "info": "settings-modal_info_1a5yx", "header": "settings-modal_header_3lDNd", "divider": "settings-modal_divider_7euKA", "button": "settings-modal_button_15QCA", "warning": "settings-modal_warning_2xSC8", "summary": "settings-modal_summary_jE5Vl", "dropdown": "settings-modal_dropdown_JkJtU" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-sound-editor-not-supported/sound-editor-not-supported.css": /*!********************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-sound-editor-not-supported/sound-editor-not-supported.css ***! \********************************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".sound-editor-not-supported_container_2WslL {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n height: 100%;\n font-size: 1.5em;\n}\n", ""]); // exports exports.locals = { "container": "sound-editor-not-supported_container_2WslL" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-studioview/studioview.css": /*!************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-studioview/studioview.css ***! \************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*\nImported from:\nhttps://github.com/forkphorus/forkphorus/tree/master/studioview\nWith changes to make it work properly in the scratch-gui environment.\n*/\n\n/*\nFurther modifications made for PenguinMod (like featured projects)\n*/\n\n@keyframes studioview_gradient_17Yed {\n 0% {\n background-position: 0% 0%;\n }\n\n 100% {\n background-position: 100% 100%;\n }\n}\n\n/* we wrap it in a
    */\n\n.studioview_wrapper_1SFBd {\n height: 100%;\n}\n\n/* fix some styles that can be messed up by scratch-gui */\n\n.studioview_studioview-root_1OP-i * {\n box-sizing: content-box !important;\n}\n\n.studioview_studioview-root_1OP-i {\n height: 100%;\n}\n\n.studioview_studioview-list_2hIxk {\n width: 100%;\n height: 100%;\n overflow-y: scroll;\n overflow-anchor: none;\n}\n\n.studioview_studioview-project_IDotv, .studioview_studioview-placeholder_KKHo9 {\n display: inline-block;\n width: 142px;\n padding: 3px;\n margin-bottom: 1px;\n margin-right: 1px;\n border-radius: 4px;\n border-style: solid;\n border-width: 1px;\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n[theme=\"dark\"] .studioview_studioview-project_IDotv,\n[theme=\"dark\"] .studioview_studioview-placeholder_KKHo9 {\n border-color: #ffffff4d;\n}\n\n.studioview_featured-studioview-project_2AmL1 {\n background-color: #ffc400;\n background: linear-gradient(\n 145deg,\n rgba(255, 196, 0, 1) 0%,\n rgba(255, 196, 0, 1) 45%,\n rgba(255, 255, 255, 1) 50%,\n rgba(255, 196, 0, 1) 54%,\n rgba(255, 196, 0, 1) 100%\n );\n background-size: 300% 300%;\n animation: studioview_gradient_17Yed 3s ease infinite;\n}\n\n[theme=\"dark\"] .studioview_featured-studioview-project_2AmL1 > div {\n color: black;\n}\n\n.studioview_studioview-root_1OP-i .studioview_studioview-project_IDotv {\n color: inherit;\n position: relative;\n text-decoration: none;\n}\n\n.studioview_studioview-loaded_3UCil:hover::before, .studioview_studioview-loaded_3UCil:active::before {\n content: '';\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: currentColor;\n opacity: 0.1;\n}\n\n.studioview_studioview-root_1OP-i .studioview_studioview-loaded_3UCil:active::before {\n opacity: 0.2;\n}\n\n.studioview_studioview-root_1OP-i .studioview_studioview-title_2ROWB,\n.studioview_studioview-root_1OP-i .studioview_studioview-author_2P0Hj {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n color: inherit;\n text-decoration: none;\n}\n\n.studioview_studioview-title_2ROWB {\n font-size: 0.9em;\n font-weight: bold;\n}\n\n.studioview_studioview-author_2P0Hj {\n font-size: 0.75em;\n}\n\n.studioview_studioview-error_3XWai {\n width: 100%;\n}\n\n.studioview_studioview-thumbnail_1HYJO, .studioview_studioview-placeholder-thumbnail_TUdop {\n position: relative;\n width: 144px;\n height: 108px;\n}\n\n.studioview_studioview-thumbnail_1HYJO::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: currentColor;\n opacity: 0.1;\n}\n\n.studioview_studioview-thumbnail_1HYJO img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: 1;\n position: relative;\n}\n\n.studioview_studioview-placeholder_KKHo9 .studioview_studioview-thumbnail_1HYJO,\n.studioview_studioview-placeholder_KKHo9 .studioview_studioview-title_2ROWB,\n.studioview_studioview-placeholder_KKHo9 .studioview_studioview-author_2P0Hj {\n background-color: currentColor;\n opacity: 0.1;\n}\n\n.studioview_studioview-title_2ROWB {\n height: 20px;\n margin-top: 2px;\n}\n\n.studioview_studioview-author_2P0Hj {\n height: 18px;\n}\n\n.studioview_studioview-placeholder_KKHo9 .studioview_studioview-title_2ROWB {\n border-radius: 2px 2px 2px 0;\n width: 100%;\n}\n\n.studioview_studioview-placeholder_KKHo9 .studioview_studioview-author_2P0Hj {\n border-radius: 0 0 2px 2px;\n width: 50%;\n}\n", ""]); // exports exports.locals = { "wrapper": "studioview_wrapper_1SFBd", "studioview-root": "studioview_studioview-root_1OP-i", "studioviewRoot": "studioview_studioview-root_1OP-i", "studioview-list": "studioview_studioview-list_2hIxk", "studioviewList": "studioview_studioview-list_2hIxk", "studioview-project": "studioview_studioview-project_IDotv", "studioviewProject": "studioview_studioview-project_IDotv", "studioview-placeholder": "studioview_studioview-placeholder_KKHo9", "studioviewPlaceholder": "studioview_studioview-placeholder_KKHo9", "featured-studioview-project": "studioview_featured-studioview-project_2AmL1", "featuredStudioviewProject": "studioview_featured-studioview-project_2AmL1", "gradient": "studioview_gradient_17Yed", "studioview-loaded": "studioview_studioview-loaded_3UCil", "studioviewLoaded": "studioview_studioview-loaded_3UCil", "studioview-title": "studioview_studioview-title_2ROWB", "studioviewTitle": "studioview_studioview-title_2ROWB", "studioview-author": "studioview_studioview-author_2P0Hj", "studioviewAuthor": "studioview_studioview-author_2P0Hj", "studioview-error": "studioview_studioview-error_3XWai", "studioviewError": "studioview_studioview-error_3XWai", "studioview-thumbnail": "studioview_studioview-thumbnail_1HYJO", "studioviewThumbnail": "studioview_studioview-thumbnail_1HYJO", "studioview-placeholder-thumbnail": "studioview_studioview-placeholder-thumbnail_TUdop", "studioviewPlaceholderThumbnail": "studioview_studioview-placeholder-thumbnail_TUdop" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-username-modal/username-modal.css": /*!********************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/tw-username-modal/username-modal.css ***! \********************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.username-modal_modal-content_2pKC4 {\n width: 400px;\n}\n.username-modal_body_UaL6e {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n}\n[theme=\"dark\"] .username-modal_body_UaL6e {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.username-modal_body_UaL6e input[type=\"checkbox\"],\n.username-modal_body_UaL6e input[type=\"radio\"] {\n margin: 3px;\n}\n.username-modal_text-input_3z1ni {\n margin-bottom: 1rem;\n width: 100%;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n border-radius: 5px;\n padding: 0 1rem;\n height: 3rem;\n color: hsla(266, 30%, 40%, 0.75);\n font-size: .875rem;\n}\n[theme=\"dark\"] .username-modal_text-input_3z1ni {\n background: var(--ui-secondary, hsla(266, 75%, 95%, 1));\n color: white;\n}\n.username-modal_button-row_2amuh {\n font-weight: bolder;\n text-align: right;\n}\n.username-modal_button-row_2amuh button {\n padding: 0.75rem 1rem;\n border-radius: 0.25rem;\n background: white;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n font-weight: 600;\n font-size: 0.85rem;\n}\n.username-modal_button-row_2amuh button[disabled] {\n opacity: 0.5;\n}\n[dir=\"ltr\"] .username-modal_button-row_2amuh button + button {\n margin-left: 0.5rem;\n}\n[dir=\"rtl\"] .username-modal_button-row_2amuh button + button {\n margin-right: 0.5rem;\n}\n.username-modal_button-row_2amuh button.username-modal_ok-button_UEZfz {\n background: hsla(266, 100%, 50%, 1);\n border: hsla(266, 100%, 50%, 1);\n color: white;\n}\n.username-modal_button-row_2amuh button.username-modal_cancel-button_3bs7j {\n color: black;\n}\n.username-modal_help-text_3dN2- {\n margin-bottom: 1rem;\n}\n.username-modal_must-change_1uhS8 {\n font-weight: bold;\n}\n.username-modal_reset-link_2djuz {\n cursor: pointer;\n}\n", ""]); // exports exports.locals = { "modal-content": "username-modal_modal-content_2pKC4", "modalContent": "username-modal_modal-content_2pKC4", "body": "username-modal_body_UaL6e", "text-input": "username-modal_text-input_3z1ni", "textInput": "username-modal_text-input_3z1ni", "button-row": "username-modal_button-row_2amuh", "buttonRow": "username-modal_button-row_2amuh", "ok-button": "username-modal_ok-button_UEZfz", "okButton": "username-modal_ok-button_UEZfz", "cancel-button": "username-modal_cancel-button_3bs7j", "cancelButton": "username-modal_cancel-button_3bs7j", "help-text": "username-modal_help-text_3dN2-", "helpText": "username-modal_help-text_3dN2-", "must-change": "username-modal_must-change_1uhS8", "mustChange": "username-modal_must-change_1uhS8", "reset-link": "username-modal_reset-link_2djuz", "resetLink": "username-modal_reset-link_2djuz" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/variables-tab/variables-tab.css": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/variables-tab/variables-tab.css ***! \***************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var escape = __webpack_require__(/*! ../../../node_modules/css-loader/lib/url/escape.js */ "./node_modules/css-loader/lib/url/escape.js"); exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n/* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */\n/* layout contants from `layout-constants.js` */\n.variables-tab_editor-wrapper_1_8VY {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n}\n.variables-tab_editor-container_3K2Ho {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n \n background: white;\n border-top-right-radius: 0.5rem;\n border-bottom-right-radius: 0.5rem;\n border: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n padding: calc(2 * 0.5rem);\n}\n[theme=\"dark\"] .variables-tab_editor-container_3K2Ho {\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.variables-tab_search-bar_1WZfc {\n background-image: url(" + escape(__webpack_require__(/*! ./icon--search.svg */ "./src/components/variables-tab/icon--search.svg")) + ");\n width: 25%;\n margin-bottom: 4px;\n padding: 8px;\n padding-right: 32px; /* for the text to not overlap the image */\n border-radius: 4px;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n background-position: calc(100% - 7px) center;\n font-size: 0.75rem;\n}\n.variables-tab_heading_2Bg8x {\n display: block;\n font-weight: bold;\n font-size: large;\n margin-top: 6px;\n margin-bottom: 6px;\n}\n.variables-tab_editor-container_3K2Ho * > input {\n background: none;\n border: none;\n padding: 8px;\n width: 100%;\n height: 100%;\n}\n.variables-tab_variable-name_157Gv {\n word-break: break-word;\n}\n.variables-tab_variable-value_2rpYN {\n width: 75%;\n}\n.variables-tab_variable-value_2rpYN > textarea {\n background: none;\n border: none;\n padding: 8px;\n width: 100%;\n min-height: 36px;\n height: calc(36px * 2);\n line-height: 1em;\n resize: vertical;\n}\n.variables-tab_value-too-big_1Dnae {\n cursor: pointer;\n font: inherit;\n font-style: italic;\n color: inherit;\n background: none;\n border: none;\n margin: 0;\n padding: 8px;\n opacity: 0.8;\n width: 100%;\n text-align: left;\n}\n.variables-tab_value-too-big_1Dnae:hover {\n text-decoration: underline;\n}\n.variables-tab_editor-container_3K2Ho table {\n border-radius: 5px;\n border-collapse: collapse;\n width: 100%;\n}\n.variables-tab_editor-container_3K2Ho td {\n border: 1px solid rgba(0, 0, 0, 0.15);\n text-align: left;\n}\n[theme=\"dark\"] .variables-tab_editor-container_3K2Ho td {\n border-color: #333;\n}", ""]); // exports exports.locals = { "editor-wrapper": "variables-tab_editor-wrapper_1_8VY", "editorWrapper": "variables-tab_editor-wrapper_1_8VY", "editor-container": "variables-tab_editor-container_3K2Ho", "editorContainer": "variables-tab_editor-container_3K2Ho", "search-bar": "variables-tab_search-bar_1WZfc", "searchBar": "variables-tab_search-bar_1WZfc", "heading": "variables-tab_heading_2Bg8x", "variable-name": "variables-tab_variable-name_157Gv", "variableName": "variables-tab_variable-name_157Gv", "variable-value": "variables-tab_variable-value_2rpYN", "variableValue": "variables-tab_variable-value_2rpYN", "value-too-big": "variables-tab_value-too-big_1Dnae", "valueTooBig": "variables-tab_value-too-big_1Dnae" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/watermark/watermark.css": /*!*******************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/watermark/watermark.css ***! \*******************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "\n.watermark_sprite-image_3ywoR {\n margin: auto;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n max-width: 48px;\n max-height: 48px;\n opacity: 0.35;\n}\n", ""]); // exports exports.locals = { "sprite-image": "watermark_sprite-image_3ywoR", "spriteImage": "watermark_sprite-image_3ywoR" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/waveform/waveform.css": /*!*****************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/waveform/waveform.css ***! \*****************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.waveform_container_2K9Om {\n width: 100%;\n}\n.waveform_waveform-path_TskyB {\n /*\n This color is lighter than sound-primary, but\n cannot use alpha because of overlapping elements.\n */\n fill: hsl(300, 54%, 72%);\n stroke: hsla(266, 60%, 50%, 1);\n}\n.waveform_baseline_2J5dw {\n stroke: hsla(266, 60%, 50%, 1);\n}\n", ""]); // exports exports.locals = { "container": "waveform_container_2K9Om", "waveform-path": "waveform_waveform-path_TskyB", "waveformPath": "waveform_waveform-path_TskyB", "baseline": "waveform_baseline_2J5dw" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/css/confirm-dialog.css": /*!*******************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/css/confirm-dialog.css ***! \*******************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*基本色(#6f00ffを基調)*/\n/* #F0E5FF */\n/* #F3E9FC */\n/* #E7D9F2 */\n/* #B366FF with 90% opacity */\n/* #FFFFFF */\n/* 75% */\n/* 25% */\n/* 0% */\n/* 15% black */\n/* 渋めの紫文字色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #6f00ff 35% */\n/* #5c00cc 15% */\n/* opt-in theme overrides */\n/* ダークモードのトップバー色 */\n/* #6f00ff */\n/* #5c00cc */\n/* #9966ff */\n/* #8040ff */\n/* #9966ff 代替コントロール色 */\n/* #8a33ff */\n/* #5900b8 */\n/* #5900b8 25% */\n/* #8a33ff */\n/* #b380ff */\n/* #8a33ff 25% */\n/* #d1a6ff より明るい紫 */\n.confirm-dialog_base_10eTq {\n background-color: hsla(266, 100%, 95%, 0.5);\n position: fixed;\n width: 100%;\n height: 100%;\n z-index: 999999;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n[theme=\"dark\"] .confirm-dialog_base_10eTq {\n background-color: #333a;\n}\n.confirm-dialog_promptBox_3UiSM {\n width: 540px;\n height: 380px;\n background: hsla(0, 100%, 100%, 1);\n border-radius: 8px;\n outline-color: hsla(0, 0%, 100%, 0.25);\n outline-width: 4px;\n outline-style: solid;\n overflow: hidden;\n position: relative;\n color: black;\n}\n[theme=\"dark\"] .confirm-dialog_promptBox_3UiSM {\n color: var(--text-primary, hsla(266, 30%, 40%, 1));\n background: var(--ui-primary, hsla(266, 100%, 95%, 1));\n}\n.confirm-dialog_header_1YV2X {\n width: 100%;\n height: 3.125em;\n background-color: hsla(266, 100%, 95%, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n}\n[theme=\"dark\"] .confirm-dialog_header_1YV2X {\n background-color: #5500cc;\n}\n.confirm-dialog_buttonRow_1xDb7 {\n height: 2.125em;\n position: absolute;\n right: 0px;\n bottom: 0px;\n margin: 16px;\n}\n.confirm-dialog_promptButton_tyxXG {\n margin-left: 0.25rem;\n margin-right: 0.25rem;\n padding: 0.75rem 1rem;\n font-weight: 600;\n font-size: 0.85rem;\n border: 0px;\n border-radius: 4px;\n}\n.confirm-dialog_promptButton_tyxXG:focus {\n outline-color: hsla(266, 100%, 95%, 0.35);\n outline-width: 4px;\n outline-style: solid;\n}\n.confirm-dialog_accept_3vfBI {\n background-color: hsla(266, 100%, 95%, 1);\n color: white;\n}\n.confirm-dialog_deny_10Akd {\n background-color: white;\n outline-width: 1px;\n outline-style: solid;\n outline-color: rgba(0, 0, 0, 0.15);\n color: black;\n}\n.confirm-dialog_filePicker_hPvJK {\n border: 0;\n background-color: hsla(266, 100%, 95%, 1);\n border-radius: 4px;\n font-weight: 600;\n color: white;\n font-size: 0.85rem;\n padding: 0.75rem 1rem;\n cursor: pointer;\n}\n.confirm-dialog_verticalSlider_2C4MI {\n transform: rotate(270deg);\n}", ""]); // exports exports.locals = { "base": "confirm-dialog_base_10eTq", "promptBox": "confirm-dialog_promptBox_3UiSM", "header": "confirm-dialog_header_1YV2X", "buttonRow": "confirm-dialog_buttonRow_1xDb7", "promptButton": "confirm-dialog_promptButton_tyxXG", "accept": "confirm-dialog_accept_3vfBI", "deny": "confirm-dialog_deny_10Akd", "filePicker": "confirm-dialog_filePicker_hPvJK", "verticalSlider": "confirm-dialog_verticalSlider_2C4MI" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/lib/normalize.css": /*!**************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/lib/normalize.css ***! \**************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}\nbody{margin:0}\narticle,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}\naudio,canvas,progress,video{display:inline-block;vertical-align:baseline}\naudio:not([controls]){display:none;height:0}\n[hidden],template{display:none}\na{background-color:transparent}\na:active,a:hover{outline:0}\nabbr[title]{border-bottom:1px dotted}\nb,strong{font-weight:bold}\ndfn{font-style:italic}\nh1{font-size:2em;margin:.67em 0}\nmark{background:#ff0;color:#000}\nsmall{font-size:80%}\nsub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}\nsup{top:-0.5em}\nsub{bottom:-0.25em}\nimg{border:0}\nsvg:not(:root){overflow:hidden}\nfigure{margin:1em 40px}\nhr{box-sizing:content-box;height:0}\npre{overflow:auto}\ncode,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}\nbutton,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}\nbutton{overflow:visible}\nbutton,select{text-transform:none}\nbutton,html input[type=\"button\"],input[type=\"reset\"],input[type=\"submit\"]{-webkit-appearance:button;cursor:pointer}\nbutton[disabled],html input[disabled]{cursor:default}\nbutton::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}\ninput{line-height:normal}\ninput[type=\"checkbox\"],input[type=\"radio\"]{box-sizing:border-box;padding:0}\ninput[type=\"number\"]::-webkit-inner-spin-button,input[type=\"number\"]::-webkit-outer-spin-button{height:auto}\ninput[type=\"search\"]{-webkit-appearance:textfield;box-sizing:content-box}\ninput[type=\"search\"]::-webkit-search-cancel-button,input[type=\"search\"]::-webkit-search-decoration{-webkit-appearance:none}\nfieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}\nlegend{border:0;padding:0}\ntextarea{overflow:auto}\noptgroup{font-weight:bold}\ntable{border-collapse:collapse;border-spacing:0}\ntd,th{padding:0}\n", ""]); // exports /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/playground/interface.css": /*!*********************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/playground/interface.css ***! \*********************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, "/* Base styles used by Scratch https://github.com/LLK/scratch-www/blob/develop/src/main.scss */\nh1,\nh2,\nh3,\nh4,\nh5,\np {\n margin: 0;\n padding: 0;\n border: 0;\n}\nh1,\nh2,\nh3,\nh4,\nh5 {\n font-weight: bold;\n line-height: 1.7em;\n}\nh1 {\n font-weight: 2.5rem;\n}\nh2 {\n font-weight: 2rem;\n}\nh3 {\n font-size: 1.4rem;\n}\nh4 {\n font-size: 1rem;\n}\na {\n color: #25d;\n cursor: pointer;\n text-decoration: underline;\n}\n.interface_container_2nBns {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n}\n.interface_editor_3jGyG {\n min-width: 1024px;\n min-height: 640px;\n height: 100%;\n}\n.interface_editor_3jGyG .interface_center_2d9_b {\n height: 100%;\n}\n.interface_player-only_38SyA .interface_center_2d9_b {\n margin: auto;\n}\n.interface_menu_3K-Q2 {\n margin-bottom: 8px;\n}\n.interface_section_3pFkT {\n margin: 8px 0 8px 0;\n}\n.interface_footer_3JeCN {\n padding: 10px 0;\n margin-top: 10px;\n border-top: 2px solid #ddd;\n}\n.interface_footer_3JeCN a {\n font-weight: bold;\n text-decoration: none;\n}\n[theme=\"dark\"] .interface_footer_3JeCN {\n border-color: #1a1a1a;\n}\n.interface_footer-content_1aIC- {\n max-width: 600px;\n margin: auto;\n}\n.interface_footer-text_IgwDU {\n text-align: center;\n margin: 5px 0 10px 0;\n}\n.interface_footer-columns_1SUSg {\n display: flex;\n justify-content: center;\n justify-items: center;\n flex-wrap: wrap;\n}\n.interface_footer-section_11lCO {\n display: flex;\n flex-direction: column;\n width: 200px;\n margin-bottom: 10px;\n}\n.interface_footer-section_11lCO > * {\n margin-bottom: 10px;\n}\n[theme=\"dark\"] .interface_container_2nBns {\n background-color: #111;\n}\n[theme=\"dark\"] .interface_player-only_38SyA {\n color: #ddd;\n}\n[theme=\"dark\"] a {\n color: #4af;\n}\n.interface_unshared-update_i7deb,\n.interface_infobox_1B2Hp {\n line-height: 1.5em;\n padding: 0.5rem;\n margin: 5px 0 8px 0;\n border: 1px solid #b9d6ff;\n background-color: #dbebff;\n border-radius: 0.5rem;\n border: 1px solid #b9d6ff;\n background-color: #dbebff;\n}\n[theme=\"dark\"] .interface_infobox_1B2Hp {\n border-color: #203652;\n background-color: #16202c;\n}\n.interface_infobox_1B2Hp p {\n margin: 4px 0;\n}\n.interface_infobox_1B2Hp a {\n font-weight: bold;\n text-decoration: none;\n}\n/* .unshared-update {\n border-color: #ffb9b9;\n background-color: #ffdbdb;\n} */\n[theme=\"dark\"] .interface_unshared-update_i7deb {\n border-color: #203652;\n background-color: #16202c;\n}\n.interface_unshared-update_i7deb p {\n margin: 4px 0;\n}\n.interface_unshared-update_i7deb a {\n font-weight: bold;\n text-decoration: none;\n}\n.interface_remix-warning-box_3ELA7 {\n line-height: 1.5em;\n padding: 0.5rem;\n margin: 5px 0 8px 0;\n border: 1px solid #ffdbb9;\n background-color: #ffecdb;\n border-radius: 0.5rem;\n}\n[theme=\"dark\"] .interface_remix-warning-box_3ELA7 {\n border-color: #523720;\n background-color: #2c2016;\n}\n.interface_remix-warning-box_3ELA7 p {\n margin: 4px 0;\n}\n.interface_remix-warning-box_3ELA7 a {\n font-weight: bold;\n text-decoration: none;\n}\n.interface_remix-author-image_3CKj8 {\n width: 32px;\n height: 32px;\n margin-right: 4px;\n border-radius: 4px;\n}\n.interface_project-details_23Y3L {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin: 8px 0;\n}\n.interface_project-metadata_1yR_m {\n display: flex;\n flex-direction: column;\n}\n.interface_project-author-image_1iGP9 {\n width: 50px;\n height: 50px;\n border-radius: 4px;\n margin-right: 8px;\n}\n.interface_project-metadata_1yR_m h2 {\n line-height: 1.4em;\n}\n.interface_project-metadata_1yR_m p {\n font-size: 0.85rem;\n}\n.interface_project-metadata_1yR_m p a,\n.interface_project-metadata_1yR_m a {\n text-decoration: none;\n font-weight: bold;\n}\n.interface_center-sector_98TDt {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n}\n.interface_report-link_1GiD4,\n.interface_share-link_2ousG {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.interface_share-link_2ousG > img,\n.interface_report-link_1GiD4 > img {\n height: 16px;\n margin-right: 4px;\n}\n.interface_report-link_1GiD4 {\n color: red !important;\n}\n.interface_share-link_2ousG {\n background: transparent;\n padding: 0;\n margin: 0;\n border: 0;\n color: rgb(90, 90, 90) !important;\n text-decoration: underline;\n cursor: pointer;\n}\n.interface_share-link_2ousG:active {\n filter: brightness(0.8);\n}\n.interface_share-link_2ousG > img {\n filter: brightness(0.3529411765);\n}\n[theme=\"dark\"] .interface_share-link_2ousG {\n color: rgb(202, 202, 202) !important;\n}\n[theme=\"dark\"] .interface_share-link_2ousG > img {\n filter: brightness(0.7921568627);\n}\n.interface_remixList_2_l80 {\n overflow-x: auto;\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n height: 128px;\n background-color: rgba(0, 0, 0, 10%);\n}\n.interface_remixProject_3TfIu {\n display: flex;\n flex-direction: column;\n align-items: center;\n background-color: white;\n margin-left: 3px;\n margin-right: 3px;\n text-decoration: none;\n color: black;\n font-size: 0.8em;\n}\n[theme=\"dark\"] .interface_remixProject_3TfIu {\n background-color: #111;\n color: white;\n}\n.interface_remixProject_3TfIu:hover {\n background-color: hsl(0, 0%, 95%);\n}\n[theme=\"dark\"] .interface_remixProject_3TfIu:hover {\n background-color: rgba(0, 0, 0, 5%);\n}\n", ""]); // exports exports.locals = { "container": "interface_container_2nBns", "editor": "interface_editor_3jGyG", "center": "interface_center_2d9_b", "player-only": "interface_player-only_38SyA", "playerOnly": "interface_player-only_38SyA", "menu": "interface_menu_3K-Q2", "section": "interface_section_3pFkT", "footer": "interface_footer_3JeCN", "footer-content": "interface_footer-content_1aIC-", "footerContent": "interface_footer-content_1aIC-", "footer-text": "interface_footer-text_IgwDU", "footerText": "interface_footer-text_IgwDU", "footer-columns": "interface_footer-columns_1SUSg", "footerColumns": "interface_footer-columns_1SUSg", "footer-section": "interface_footer-section_11lCO", "footerSection": "interface_footer-section_11lCO", "unshared-update": "interface_unshared-update_i7deb", "unsharedUpdate": "interface_unshared-update_i7deb", "infobox": "interface_infobox_1B2Hp", "remix-warning-box": "interface_remix-warning-box_3ELA7", "remixWarningBox": "interface_remix-warning-box_3ELA7", "remix-author-image": "interface_remix-author-image_3CKj8", "remixAuthorImage": "interface_remix-author-image_3CKj8", "project-details": "interface_project-details_23Y3L", "projectDetails": "interface_project-details_23Y3L", "project-metadata": "interface_project-metadata_1yR_m", "projectMetadata": "interface_project-metadata_1yR_m", "project-author-image": "interface_project-author-image_1iGP9", "projectAuthorImage": "interface_project-author-image_1iGP9", "center-sector": "interface_center-sector_98TDt", "centerSector": "interface_center-sector_98TDt", "report-link": "interface_report-link_1GiD4", "reportLink": "interface_report-link_1GiD4", "share-link": "interface_share-link_2ousG", "shareLink": "interface_share-link_2ousG", "remixList": "interface_remixList_2_l80", "remixProject": "interface_remixProject_3TfIu" }; /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/playground/vote-frame.css": /*!**********************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/playground/vote-frame.css ***! \**********************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(/*! ../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false); // imports // module exports.push([module.i, ".vote-frame_frame_2OJUs {\n width: 100%;\n height: 128px;\n border: 0;\n}", ""]); // exports exports.locals = { "frame": "vote-frame_frame_2OJUs" }; /***/ }), /***/ "./node_modules/file-loader/dist/cjs.js?name=sw.js!./src/playground/service-worker.js": /*!********************************************************************************************!*\ !*** ./node_modules/file-loader/dist/cjs.js?name=sw.js!./src/playground/service-worker.js ***! \********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "sw.js"; /***/ }), /***/ "./node_modules/raw-loader/index.js!./src/lib/default-project/cd21514d0531fdffb22204e0ec5ed84a.svg": /*!************************************************************************************************!*\ !*** ./node_modules/raw-loader!./src/lib/default-project/cd21514d0531fdffb22204e0ec5ed84a.svg ***! \************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = "\n \n" /***/ }), /***/ "./node_modules/raw-loader/index.js!./src/lib/default-project/penguin.svg": /*!***********************************************************************!*\ !*** ./node_modules/raw-loader!./src/lib/default-project/penguin.svg ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = "\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" /***/ }), /***/ "./node_modules/raw-loader/index.js!./src/lib/tw-missing-project/c17163c6954e9422ac2405de4c9d68c8.svg": /*!***************************************************************************************************!*\ !*** ./node_modules/raw-loader!./src/lib/tw-missing-project/c17163c6954e9422ac2405de4c9d68c8.svg ***! \***************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = "The project you tried to load does not exist." /***/ }), /***/ "./node_modules/raw-loader/index.js!./src/lib/tw-theme-dark.css": /*!*************************************************************!*\ !*** ./node_modules/raw-loader!./src/lib/tw-theme-dark.css ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = "/* GUI */\n:root {\n background: #111;\n color: #eee;\n color-scheme: dark;\n /* see colors.csss */\n --ui-primary: rgb(17, 17, 17);\n --ui-secondary: rgb(30, 30, 30);\n --ui-tertiary: rgb(46, 46, 46);\n --ui-modal-overlay: #333a;\n --ui-black-transparent: rgba(255, 255, 255, 0.15);\n --text-primary: #eee;\n /* scratch-paint */\n --paint-ui-pane-border: var(--ui-black-transparent);\n --paint-text-primary: #eee;\n --paint-form-border: var(--ui-black-transparent);\n}\n\n/* Blockly */\n.blocklySvg {\n background-color: var(--ui-secondary) !important;\n color-scheme: light;\n}\n[id^=\"blocklyGridPattern\"] > line {\n stroke: #484848;\n}\n.blocklyFlyoutBackground {\n fill: #111;\n}\n.blocklyFlyoutLabelText {\n fill: #ccc;\n}\n.blocklyFlyoutButton .blocklyText {\n fill: #ccc;\n}\n.blocklyFlyoutButton:hover {\n fill: #111;\n}\n/* blocklyFlyoutCheckboxPath stroke and blocklyFlyoutCheckbox fill must match */\n.blocklyFlyoutCheckboxPath {\n stroke: #111;\n}\n.blocklyFlyoutCheckbox {\n fill: #111;\n}\n.checked > .blocklyFlyoutCheckbox {\n stroke: #a1c6fa;\n}\n.checked > .blocklyFlyoutCheckboxPath {\n stroke: white;\n}\n.scratchCategoryMenu {\n color: #ccc;\n}\n.blocklyToolboxDiv,\n.scratchCategoryMenu {\n background: #111 !important;\n}\n.blocklyScrollbarHandle {\n fill: #666;\n}\n.blocklyZoom {\n filter: invert(100%);\n}\n.scratchCategoryMenuItem.categorySelected {\n background: var(--ui-secondary);\n}\n.valueReportBox {\n color: black;\n}\n.blocklyWidgetDiv {\n color-scheme: light;\n}\n.blocklyWidgetDiv .goog-menu {\n background: var(--ui-primary);\n border-color: var(--ui-black-transparent);\n}\n.blocklyWidgetDiv .goog-menuitem {\n color: var(--text-primary);\n}\n.blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-content {\n color: #666 !important;\n}\n.sa-blockly-menu-item-border {\n border-top-color: var(--ui-black-transparent) !important;\n}\n.blocklyWidgetDiv .goog-menuitem.goog-menuitem-highlight {\n background-color: var(--ui-tertiary);\n border-color: transparent; /* remove border */\n}\n.scratchCommentText {\n color: black;\n}\n.blocklyInsertionMarker > .blocklyPath {\n fill: #ccc;\n}\n\n/* Other / Multipurpose */\n.Popover {\n /* weird Chrome bug displays white bar above popovers with color-scheme: dark */\n color-scheme: light;\n}\n.Popover-body {\n background: var(--ui-secondary);\n border-color: var(--ui-black-transparent);\n color: var(--text-primary);\n}\n.Popover-tipShape {\n fill: var(--ui-secondary);\n stroke: var(--ui-black-transparent);\n}\n" /***/ }), /***/ "./node_modules/slugo/dist/slugo.es.js": /*!*********************************************!*\ !*** ./node_modules/slugo/dist/slugo.es.js ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); function index (input) { return input // Remove html tags .replace(/<(?:.|\n)*?>/gm, '') // Remove special characters .replace(/[!\"#$%&'\(\)\*\+,\/:;<=>\?\@\[\\\]\^`\{\|\}~]/g, '') // eslint-disable-line no-useless-escape // Replace dots and spaces with a short dash .replace(/(\s|\.)/g, '-') // Replace long dash with two short dashes .replace(/—/g, '--') // Make the whole thing lowercase .toLowerCase(); } /* harmony default export */ __webpack_exports__["default"] = (index); /***/ }), /***/ "./src/addons/channels.js": /*!********************************!*\ !*** ./src/addons/channels.js ***! \********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); let changeChannel; let reloadChannel; if (typeof BroadcastChannel !== 'undefined') { changeChannel = new BroadcastChannel('addons-change'); reloadChannel = new BroadcastChannel('addons-reload'); } /* harmony default export */ __webpack_exports__["default"] = ({ changeChannel, reloadChannel }); /***/ }), /***/ "./src/addons/entry.js": /*!*****************************!*\ !*** ./src/addons/entry.js ***! \*****************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); const runAddons = () => { Promise.all(/*! import() | addons */[__webpack_require__.e("addon-settings~addons~editor~fullscreen~player~playground"), __webpack_require__.e("addons")]).then(__webpack_require__.bind(null, /*! ./api */ "./src/addons/api.js")); }; /* harmony default export */ __webpack_exports__["default"] = (runAddons); /***/ }), /***/ "./src/addons/hooks.js": /*!*****************************!*\ !*** ./src/addons/hooks.js ***! \*****************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); const AddonHooks = { appStateReducer: () => {}, appStateStore: null, blockly: null, blocklyCallbacks: [] }; /* harmony default export */ __webpack_exports__["default"] = (AddonHooks); /***/ }), /***/ "./src/components/action-menu/action-menu.css": /*!****************************************************!*\ !*** ./src/components/action-menu/action-menu.css ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./action-menu.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/action-menu/action-menu.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/action-menu/action-menu.jsx": /*!****************************************************!*\ !*** ./src/components/action-menu/action-menu.jsx ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_tooltip__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-tooltip */ "./node_modules/react-tooltip/dist/index.js"); /* harmony import */ var react_tooltip__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_tooltip__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _action_menu_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./action-menu.css */ "./src/components/action-menu/action-menu.css"); /* harmony import */ var _action_menu_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_action_menu_css__WEBPACK_IMPORTED_MODULE_5__); const CLOSE_DELAY = 300; // ms class ActionMenu extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['clickDelayer', 'handleClosePopover', 'handleToggleOpenState', 'handleTouchStart', 'handleTouchOutside', 'setButtonRef', 'setContainerRef']); this.state = { isOpen: false, forceHide: false }; this.mainTooltipId = "tooltip-".concat(Math.random()); } componentDidMount() { // Touch start on the main button is caught to trigger open and not click this.buttonRef.addEventListener('touchstart', this.handleTouchStart); // Touch start on document is used to trigger close if it is outside document.addEventListener('touchstart', this.handleTouchOutside); } shouldComponentUpdate(newProps, newState) { // This check prevents re-rendering while the project is updating. // @todo check only the state and the title because it is enough to know // if anything substantial has changed // This is needed because of the sloppy way the props are passed as a new object, // which should be refactored. return newState.isOpen !== this.state.isOpen || newState.forceHide !== this.state.forceHide || newProps.title !== this.props.title; } componentWillUnmount() { this.buttonRef.removeEventListener('touchstart', this.handleTouchStart); document.removeEventListener('touchstart', this.handleTouchOutside); } handleClosePopover() { this.closeTimeoutId = setTimeout(() => { this.setState({ isOpen: false }); this.closeTimeoutId = null; }, CLOSE_DELAY); } handleToggleOpenState() { // Mouse enter back in after timeout was started prevents it from closing. if (this.closeTimeoutId) { clearTimeout(this.closeTimeoutId); this.closeTimeoutId = null; } else if (!this.state.isOpen) { this.setState({ isOpen: true, forceHide: false }); } } handleTouchOutside(e) { if (this.state.isOpen && !this.containerRef.contains(e.target)) { this.setState({ isOpen: false }); react_tooltip__WEBPACK_IMPORTED_MODULE_4___default.a.hide(); } } clickDelayer(fn) { // Return a wrapped action that manages the menu closing. // @todo we may be able to use react-transition for this in the future // for now all this work is to ensure the menu closes BEFORE the // (possibly slow) action is started. return event => { react_tooltip__WEBPACK_IMPORTED_MODULE_4___default.a.hide(); if (fn) fn(event); // Blur the button so it does not keep focus after being clicked // This prevents keyboard events from triggering the button this.buttonRef.blur(); this.setState({ forceHide: true, isOpen: false }, () => { setTimeout(() => this.setState({ forceHide: false })); }); }; } handleTouchStart(e) { // Prevent this touch from becoming a click if menu is closed if (!this.state.isOpen) { e.preventDefault(); this.handleToggleOpenState(); } } setButtonRef(ref) { this.buttonRef = ref; } setContainerRef(ref) { this.containerRef = ref; } render() { const { className, img: mainImg, title: mainTitle, moreButtons, tooltipPlace, onClick } = this.props; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.menuContainer, className, { [_action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.expanded]: this.state.isOpen, [_action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.forceHidden]: this.state.forceHide }), ref: this.setContainerRef, onMouseEnter: this.handleToggleOpenState, onMouseLeave: this.handleClosePopover }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { "aria-label": mainTitle, className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.button, _action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.mainButton), "data-for": this.mainTooltipId, "data-tip": mainTitle, ref: this.setButtonRef, onClick: this.clickDelayer(onClick) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.mainIcon, draggable: false, src: mainImg })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_tooltip__WEBPACK_IMPORTED_MODULE_4___default.a, { className: _action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.tooltip, effect: "solid", id: this.mainTooltipId, place: tooltipPlace || 'left' }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.moreButtonsOuter }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.moreButtons }, (moreButtons || []).map((_ref, keyId) => { let { img, title, onClick: handleClick, fileAccept, fileChange, fileInput, fileMultiple } = _ref; const isComingSoon = !handleClick; const hasFileInput = fileInput; const tooltipId = "".concat(this.mainTooltipId, "-").concat(title); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { key: "".concat(tooltipId, "-").concat(keyId) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { "aria-label": title, className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.button, _action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.moreButton, { [_action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.comingSoon]: isComingSoon }), "data-for": tooltipId, "data-tip": title, onClick: hasFileInput ? handleClick : this.clickDelayer(handleClick) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.moreIcon, draggable: false, src: img }), hasFileInput ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", { accept: fileAccept, className: _action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.fileInput, multiple: fileMultiple, ref: fileInput, type: "file", onChange: fileChange }) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_tooltip__WEBPACK_IMPORTED_MODULE_4___default.a, { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.tooltip, { [_action_menu_css__WEBPACK_IMPORTED_MODULE_5___default.a.comingSoonTooltip]: isComingSoon }), effect: "solid", id: tooltipId, place: tooltipPlace || 'left' })); })))); } } ActionMenu.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, img: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, moreButtons: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ img: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, title: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node.isRequired, onClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, // Optional, "coming soon" if no callback provided fileAccept: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, // Optional, only for file upload fileChange: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, // Optional, only for file upload fileInput: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, // Optional, only for file upload fileMultiple: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool // Optional, only for file upload })), onClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, title: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node.isRequired, tooltipPlace: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (ActionMenu); /***/ }), /***/ "./src/components/action-menu/icon--backdrop.svg": /*!*******************************************************!*\ !*** ./src/components/action-menu/icon--backdrop.svg ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/385aa4b73a425883b4f9e91501a52299.svg"; /***/ }), /***/ "./src/components/action-menu/icon--file-upload.svg": /*!**********************************************************!*\ !*** ./src/components/action-menu/icon--file-upload.svg ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/e587d9d7e9a2f1f28041ba5c15db7a40.svg"; /***/ }), /***/ "./src/components/action-menu/icon--paint.svg": /*!****************************************************!*\ !*** ./src/components/action-menu/icon--paint.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/94b06fb716871f81bec601724e29a457.svg"; /***/ }), /***/ "./src/components/action-menu/icon--search.svg": /*!*****************************************************!*\ !*** ./src/components/action-menu/icon--search.svg ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/551aae506dfa65ce3b45713b5300a678.svg"; /***/ }), /***/ "./src/components/action-menu/icon--sprite.svg": /*!*****************************************************!*\ !*** ./src/components/action-menu/icon--sprite.svg ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7fa47f4c0e905e7a3eae32fe6347ad8e.svg"; /***/ }), /***/ "./src/components/action-menu/icon--surprise.svg": /*!*******************************************************!*\ !*** ./src/components/action-menu/icon--surprise.svg ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/301439e2e5ab88b658368ee525e6752b.svg"; /***/ }), /***/ "./src/components/alerts/alert.css": /*!*****************************************!*\ !*** ./src/components/alerts/alert.css ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./alert.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/alerts/alert.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/alerts/alert.jsx": /*!*****************************************!*\ !*** ./src/components/alerts/alert.jsx ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _close_button_close_button_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../close-button/close-button.jsx */ "./src/components/close-button/close-button.jsx"); /* harmony import */ var _spinner_spinner_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../spinner/spinner.jsx */ "./src/components/spinner/spinner.jsx"); /* harmony import */ var _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../lib/alerts/index.jsx */ "./src/lib/alerts/index.jsx"); /* harmony import */ var _alert_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./alert.css */ "./src/components/alerts/alert.css"); /* harmony import */ var _alert_css__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_alert_css__WEBPACK_IMPORTED_MODULE_8__); const closeButtonColors = { [_lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_7__["AlertLevels"].SUCCESS]: _close_button_close_button_jsx__WEBPACK_IMPORTED_MODULE_5__["default"].COLOR_GREEN, [_lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_7__["AlertLevels"].WARN]: _close_button_close_button_jsx__WEBPACK_IMPORTED_MODULE_5__["default"].COLOR_ORANGE }; const AlertComponent = _ref => { let { content, closeButton, extensionName, iconSpinner, iconURL, level, showDownload, showSaveNow, onCloseAlert, onDownload, onSaveNow, onReconnect, showReconnect } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.alert, _alert_css__WEBPACK_IMPORTED_MODULE_8___default.a[level]) }, (iconSpinner || iconURL) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.iconSection }, iconSpinner && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_spinner_spinner_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.alertSpinner, level: level }), iconURL && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { className: _alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.alertIcon, src: iconURL })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.alertMessage }, extensionName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Lost connection to {extensionName}.", id: "tw.alerts.lostPeripheralConnection", values: { extensionName: "".concat(extensionName) } }) : content), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.alertButtons }, showSaveNow && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: _alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.alertConnectionButton, onClick: onSaveNow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Try Again", id: "gui.alerts.tryAgain" })), showDownload && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: _alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.alertConnectionButton, onClick: onDownload }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Download", id: "gui.alerts.download" })), showReconnect && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: _alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.alertConnectionButton, onClick: onReconnect }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Reconnect", id: "gui.connection.reconnect" })), closeButton && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.alertCloseButtonContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_close_button_close_button_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_alert_css__WEBPACK_IMPORTED_MODULE_8___default.a.alertCloseButton), color: closeButtonColors[level], size: _close_button_close_button_jsx__WEBPACK_IMPORTED_MODULE_5__["default"].SIZE_LARGE, onClick: onCloseAlert })))); }; AlertComponent.propTypes = { closeButton: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, content: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.element, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]), extensionName: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, iconSpinner: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, iconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, level: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onCloseAlert: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onDownload: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onReconnect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onSaveNow: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, showDownload: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, showReconnect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, showSaveNow: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; AlertComponent.defaultProps = { level: _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_7__["AlertLevels"].WARN }; /* harmony default export */ __webpack_exports__["default"] = (AlertComponent); /***/ }), /***/ "./src/components/alerts/alerts.css": /*!******************************************!*\ !*** ./src/components/alerts/alerts.css ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./alerts.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/alerts/alerts.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/alerts/alerts.jsx": /*!******************************************!*\ !*** ./src/components/alerts/alerts.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_alert_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../containers/alert.jsx */ "./src/containers/alert.jsx"); /* harmony import */ var _alerts_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./alerts.css */ "./src/components/alerts/alerts.css"); /* harmony import */ var _alerts_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_alerts_css__WEBPACK_IMPORTED_MODULE_4__); const AlertsComponent = _ref => { let { alertsList, className, onCloseAlert } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { bounds: "parent", className: className }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { className: _alerts_css__WEBPACK_IMPORTED_MODULE_4___default.a.alertsInnerContainer }, alertsList.map((a, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_containers_alert_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { closeButton: a.closeButton, content: a.content, extensionId: a.extensionId, extensionName: a.extensionName, iconSpinner: a.iconSpinner, iconURL: a.iconURL, index: index, key: index, level: a.level, message: a.message, showDownload: a.showDownload, showReconnect: a.showReconnect, showSaveNow: a.showSaveNow, onCloseAlert: onCloseAlert })))); }; AlertsComponent.propTypes = { alertsList: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object), className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onCloseAlert: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (AlertsComponent); /***/ }), /***/ "./src/components/alerts/inline-message.css": /*!**************************************************!*\ !*** ./src/components/alerts/inline-message.css ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./inline-message.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/alerts/inline-message.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/alerts/inline-message.jsx": /*!**************************************************!*\ !*** ./src/components/alerts/inline-message.jsx ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _spinner_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../spinner/spinner.jsx */ "./src/components/spinner/spinner.jsx"); /* harmony import */ var _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../lib/alerts/index.jsx */ "./src/lib/alerts/index.jsx"); /* harmony import */ var _inline_message_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./inline-message.css */ "./src/components/alerts/inline-message.css"); /* harmony import */ var _inline_message_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_inline_message_css__WEBPACK_IMPORTED_MODULE_5__); const InlineMessageComponent = _ref => { let { content, iconSpinner, level } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_inline_message_css__WEBPACK_IMPORTED_MODULE_5___default.a.inlineMessage, _inline_message_css__WEBPACK_IMPORTED_MODULE_5___default.a[level]) }, iconSpinner && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_spinner_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { small: true, className: _inline_message_css__WEBPACK_IMPORTED_MODULE_5___default.a.spinner, level: 'info' }), content); }; InlineMessageComponent.propTypes = { content: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.element, iconSpinner: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, level: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; InlineMessageComponent.defaultProps = { level: _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_4__["AlertLevels"].INFO }; /* harmony default export */ __webpack_exports__["default"] = (InlineMessageComponent); /***/ }), /***/ "./src/components/asset-panel/asset-panel.css": /*!****************************************************!*\ !*** ./src/components/asset-panel/asset-panel.css ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./asset-panel.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/asset-panel/asset-panel.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/asset-panel/asset-panel.jsx": /*!****************************************************!*\ !*** ./src/components/asset-panel/asset-panel.jsx ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _selector_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selector.jsx */ "./src/components/asset-panel/selector.jsx"); /* harmony import */ var _asset_panel_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./asset-panel.css */ "./src/components/asset-panel/asset-panel.css"); /* harmony import */ var _asset_panel_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_asset_panel_css__WEBPACK_IMPORTED_MODULE_3__); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const AssetPanel = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], { className: _asset_panel_css__WEBPACK_IMPORTED_MODULE_3___default.a.wrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_selector_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], _extends({ className: _asset_panel_css__WEBPACK_IMPORTED_MODULE_3___default.a.selector }, props)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], { className: _asset_panel_css__WEBPACK_IMPORTED_MODULE_3___default.a.detailArea }, props.children)); AssetPanel.propTypes = _objectSpread({}, _selector_jsx__WEBPACK_IMPORTED_MODULE_2__["default"].propTypes); /* harmony default export */ __webpack_exports__["default"] = (AssetPanel); /***/ }), /***/ "./src/components/asset-panel/icon--add-backdrop-lib.svg": /*!***************************************************************!*\ !*** ./src/components/asset-panel/icon--add-backdrop-lib.svg ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/44e4859e354c81d66c73f741df2e5ec7.svg"; /***/ }), /***/ "./src/components/asset-panel/icon--add-costume-lib.svg": /*!**************************************************************!*\ !*** ./src/components/asset-panel/icon--add-costume-lib.svg ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7fa47f4c0e905e7a3eae32fe6347ad8e.svg"; /***/ }), /***/ "./src/components/asset-panel/icon--add-sound-lib.svg": /*!************************************************************!*\ !*** ./src/components/asset-panel/icon--add-sound-lib.svg ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/9cfdd378e4cc977fe663ca932e530ec6.svg"; /***/ }), /***/ "./src/components/asset-panel/icon--add-sound-record.svg": /*!***************************************************************!*\ !*** ./src/components/asset-panel/icon--add-sound-record.svg ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/35c6867250ec4f430624bc9e2e7072d7.svg"; /***/ }), /***/ "./src/components/asset-panel/icon--files-placeholder.svg": /*!****************************************************************!*\ !*** ./src/components/asset-panel/icon--files-placeholder.svg ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/44e4859e354c81d66c73f741df2e5ec7.svg"; /***/ }), /***/ "./src/components/asset-panel/icon--sound-rtl.svg": /*!********************************************************!*\ !*** ./src/components/asset-panel/icon--sound-rtl.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/3c3142e814ff1652338af92a410d3d70.svg"; /***/ }), /***/ "./src/components/asset-panel/icon--sound.svg": /*!****************************************************!*\ !*** ./src/components/asset-panel/icon--sound.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/63e5827c1506216bd7c9927a4e5eb558.svg"; /***/ }), /***/ "./src/components/asset-panel/nord.png": /*!*********************************************!*\ !*** ./src/components/asset-panel/nord.png ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/18dada8a9aabcfc157e051d2e33aa7fd.png"; /***/ }), /***/ "./src/components/asset-panel/selector.css": /*!*************************************************!*\ !*** ./src/components/asset-panel/selector.css ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./selector.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/asset-panel/selector.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/asset-panel/selector.jsx": /*!*************************************************!*\ !*** ./src/components/asset-panel/selector.jsx ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _containers_sprite_selector_item_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../containers/sprite-selector-item.jsx */ "./src/containers/sprite-selector-item.jsx"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _action_menu_action_menu_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../action-menu/action-menu.jsx */ "./src/components/action-menu/action-menu.jsx"); /* harmony import */ var _sortable_asset_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sortable-asset.jsx */ "./src/components/asset-panel/sortable-asset.jsx"); /* harmony import */ var _lib_sortable_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../lib/sortable-hoc.jsx */ "./src/lib/sortable-hoc.jsx"); /* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../lib/drag-constants */ "./src/lib/drag-constants.js"); /* harmony import */ var _selector_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./selector.css */ "./src/components/asset-panel/selector.css"); /* harmony import */ var _selector_css__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_selector_css__WEBPACK_IMPORTED_MODULE_9__); const Selector = props => { const { buttons, containerRef, dragType, isRtl, items, selectedItemIndex, draggingIndex, draggingType, ordering, onAddSortable, onRemoveSortable, onDeleteClick, onDuplicateClick, onExportClick, onItemClick } = props; const isRelevantDrag = draggingType === dragType; let newButtonSection = null; if (buttons.length > 0) { const { img, title, onClick } = buttons[0]; const moreButtons = buttons.slice(1); newButtonSection = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.newButtons }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_action_menu_action_menu_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { img: img, moreButtons: moreButtons, title: title, tooltipPlace: isRtl ? 'left' : 'right', onClick: onClick })); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.wrapper, componentRef: containerRef }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.listArea }, items.map((item, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_sortable_asset_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { id: item.name, index: isRelevantDrag ? ordering.indexOf(index) : index, key: item.name, onAddSortable: onAddSortable, onRemoveSortable: onRemoveSortable }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_sprite_selector_item_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { asset: item.asset, className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.listItem, { [_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.placeholder]: isRelevantDrag && index === draggingIndex }), costumeURL: item.url, details: item.details, dragPayload: item.dragPayload, dragType: dragType, id: index, index: index, name: item.name, number: index + 1 /* 1-indexed */, selected: index === selectedItemIndex, onClick: onItemClick, onDeleteButtonClick: onDeleteClick, onDuplicateButtonClick: onDuplicateClick, onExportButtonClick: onExportClick })))), newButtonSection); }; Selector.propTypes = { buttons: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ title: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, img: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, onClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func })), containerRef: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, dragType: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(Object.keys(_lib_drag_constants__WEBPACK_IMPORTED_MODULE_8__["default"])), draggingIndex: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, draggingType: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(Object.keys(_lib_drag_constants__WEBPACK_IMPORTED_MODULE_8__["default"])), isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, items: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ url: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, // eslint-disable-next-line react/forbid-prop-types name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.any })), onAddSortable: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDeleteClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDuplicateClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onExportClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onItemClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onRemoveSortable: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, ordering: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number), selectedItemIndex: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(_lib_sortable_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__["default"])(Selector)); /***/ }), /***/ "./src/components/asset-panel/sortable-asset.jsx": /*!*******************************************************!*\ !*** ./src/components/asset-panel/sortable-asset.jsx ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); class SortableAsset extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['setRef']); } componentDidMount() { this.props.onAddSortable(this.ref); } componentWillUnmount() { this.props.onRemoveSortable(this.ref); } setRef(ref) { this.ref = ref; } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: this.props.className, ref: this.setRef, style: { order: this.props.index } }, this.props.children); } } SortableAsset.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired, className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, index: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, onAddSortable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onRemoveSortable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (SortableAsset); /***/ }), /***/ "./src/components/audio-trimmer/audio-selector.jsx": /*!*********************************************************!*\ !*** ./src/components/audio-trimmer/audio-selector.jsx ***! \*********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./audio-trimmer.css */ "./src/components/audio-trimmer/audio-trimmer.css"); /* harmony import */ var _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _selection_handle_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./selection-handle.jsx */ "./src/components/audio-trimmer/selection-handle.jsx"); /* harmony import */ var _playhead_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./playhead.jsx */ "./src/components/audio-trimmer/playhead.jsx"); const AudioSelector = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.absolute, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.selector), ref: props.containerRef, onMouseDown: props.onNewSelectionMouseDown, onTouchStart: props.onNewSelectionMouseDown }, props.trimStart === null ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.absolute), style: { left: "".concat(props.trimStart * 100, "%"), width: "".concat(100 * (props.trimEnd - props.trimStart), "%") } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.absolute, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.selectionBackground) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_selection_handle_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { handleStyle: _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.leftHandle, onMouseDown: props.onTrimStartMouseDown }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_selection_handle_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { handleStyle: _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.rightHandle, onMouseDown: props.onTrimEndMouseDown })), props.playhead ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_playhead_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { playbackPosition: props.playhead }) : null); AudioSelector.propTypes = { containerRef: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onNewSelectionMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onTrimEndMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onTrimStartMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, playhead: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, trimEnd: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, trimStart: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }; /* harmony default export */ __webpack_exports__["default"] = (AudioSelector); /***/ }), /***/ "./src/components/audio-trimmer/audio-trimmer.css": /*!********************************************************!*\ !*** ./src/components/audio-trimmer/audio-trimmer.css ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./audio-trimmer.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/audio-trimmer/audio-trimmer.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/audio-trimmer/audio-trimmer.jsx": /*!********************************************************!*\ !*** ./src/components/audio-trimmer/audio-trimmer.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./audio-trimmer.css */ "./src/components/audio-trimmer/audio-trimmer.css"); /* harmony import */ var _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _selection_handle_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./selection-handle.jsx */ "./src/components/audio-trimmer/selection-handle.jsx"); /* harmony import */ var _playhead_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./playhead.jsx */ "./src/components/audio-trimmer/playhead.jsx"); const AudioTrimmer = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.absolute, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.trimmer), ref: props.containerRef }, props.trimStart === null ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.absolute, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.trimBackground, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.startTrimBackground), style: { width: "".concat(100 * props.trimStart, "%") }, onMouseDown: props.onTrimStartMouseDown, onTouchStart: props.onTrimStartMouseDown }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.absolute, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.trimBackgroundMask) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_selection_handle_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { handleStyle: _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.leftHandle })), props.playhead ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_playhead_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { playbackPosition: props.playhead }) : null, props.trimEnd === null ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.absolute, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.trimBackground, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.endTrimBackground), style: { left: "".concat(100 * props.trimEnd, "%"), width: "".concat(100 - 100 * props.trimEnd, "%") }, onMouseDown: props.onTrimEndMouseDown, onTouchStart: props.onTrimEndMouseDown }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.absolute, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.trimBackgroundMask) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_selection_handle_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { handleStyle: _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.rightHandle }))); AudioTrimmer.propTypes = { containerRef: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onTrimEndMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onTrimStartMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, playhead: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, trimEnd: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, trimStart: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }; /* harmony default export */ __webpack_exports__["default"] = (AudioTrimmer); /***/ }), /***/ "./src/components/audio-trimmer/icon--handle.svg": /*!*******************************************************!*\ !*** ./src/components/audio-trimmer/icon--handle.svg ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/33b2c770e12dd94797701e92ae37a820.svg"; /***/ }), /***/ "./src/components/audio-trimmer/playhead.jsx": /*!***************************************************!*\ !*** ./src/components/audio-trimmer/playhead.jsx ***! \***************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./audio-trimmer.css */ "./src/components/audio-trimmer/audio-trimmer.css"); /* harmony import */ var _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_3__); const Playhead = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_3___default.a.playheadContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_3___default.a.playhead), style: { transform: "translateX(".concat(100 * props.playbackPosition, "%)") } })); Playhead.propTypes = { playbackPosition: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }; /* harmony default export */ __webpack_exports__["default"] = (Playhead); /***/ }), /***/ "./src/components/audio-trimmer/selection-handle.jsx": /*!***********************************************************!*\ !*** ./src/components/audio-trimmer/selection-handle.jsx ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./audio-trimmer.css */ "./src/components/audio-trimmer/audio-trimmer.css"); /* harmony import */ var _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _icon_handle_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./icon--handle.svg */ "./src/components/audio-trimmer/icon--handle.svg"); /* harmony import */ var _icon_handle_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_icon_handle_svg__WEBPACK_IMPORTED_MODULE_5__); const SelectionHandle = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.trimLine, props.handleStyle), onMouseDown: props.onMouseDown, onTouchStart: props.onMouseDown }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.trimHandle, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.topTrimHandle) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { src: _icon_handle_svg__WEBPACK_IMPORTED_MODULE_5___default.a, draggable: false })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.trimHandle, _audio_trimmer_css__WEBPACK_IMPORTED_MODULE_4___default.a.bottomTrimHandle) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { src: _icon_handle_svg__WEBPACK_IMPORTED_MODULE_5___default.a, draggable: false }))); SelectionHandle.propTypes = { handleStyle: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, onMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (SelectionHandle); /***/ }), /***/ "./src/components/backpack/backpack.css": /*!**********************************************!*\ !*** ./src/components/backpack/backpack.css ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./backpack.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/backpack/backpack.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/backpack/backpack.jsx": /*!**********************************************!*\ !*** ./src/components/backpack/backpack.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../lib/drag-constants */ "./src/lib/drag-constants.js"); /* harmony import */ var _coming_soon_coming_soon_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../coming-soon/coming-soon.jsx */ "./src/components/coming-soon/coming-soon.jsx"); /* harmony import */ var _containers_sprite_selector_item_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../containers/sprite-selector-item.jsx */ "./src/containers/sprite-selector-item.jsx"); /* harmony import */ var _backpack_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./backpack.css */ "./src/components/backpack/backpack.css"); /* harmony import */ var _backpack_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_backpack_css__WEBPACK_IMPORTED_MODULE_7__); // TODO make sprite selector item not require onClick const noop = () => {}; const dragTypeMap = { // Keys correspond with the backpack-server item types costume: _lib_drag_constants__WEBPACK_IMPORTED_MODULE_4__["default"].BACKPACK_COSTUME, sound: _lib_drag_constants__WEBPACK_IMPORTED_MODULE_4__["default"].BACKPACK_SOUND, script: _lib_drag_constants__WEBPACK_IMPORTED_MODULE_4__["default"].BACKPACK_CODE, sprite: _lib_drag_constants__WEBPACK_IMPORTED_MODULE_4__["default"].BACKPACK_SPRITE }; const labelMap = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ costume: { "id": "gui.backpack.costumeLabel", "defaultMessage": "costume" }, sound: { "id": "gui.backpack.soundLabel", "defaultMessage": "sound" }, script: { "id": "gui.backpack.scriptLabel", "defaultMessage": "script" }, sprite: { "id": "gui.backpack.spriteLabel", "defaultMessage": "sprite" } }); const Backpack = _ref => { let { blockDragOver, containerRef, contents, dragOver, error, expanded, intl, loading, showMore, onToggle, onDelete, onExport, onRename, onMouseEnter, onMouseLeave, onMore } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.backpackContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.backpackHeader, onClick: onToggle }, onToggle ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Backpack", id: "gui.backpack.header" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_coming_soon_coming_soon_jsx__WEBPACK_IMPORTED_MODULE_5__["ComingSoonTooltip"], { place: "top", tooltipId: "backpack-tooltip" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Backpack", id: "gui.backpack.header" }))), expanded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.backpackList, { [_backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.dragOver]: dragOver || blockDragOver }), ref: containerRef, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave }, error !== false ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.statusMessage }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Error loading backpack", id: "gui.backpack.errorBackpack" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.errorMessage }, error)) : loading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.statusMessage }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Loading...", id: "gui.backpack.loadingBackpack" })) : contents.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.backpackListInner }, contents.map(item => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_containers_sprite_selector_item_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.backpackItem, costumeURL: item.thumbnailUrl, details: item.name, dragPayload: item, dragType: dragTypeMap[item.type], id: item.id, key: item.id, name: intl.formatMessage(labelMap[item.type]), selected: false, onClick: noop, onExportButtonClick: item.type === 'script' ? null : onExport, onDeleteButtonClick: onDelete // Currently, renaming sprites is not supported. , onRenameButtonClick: item.type === 'sprite' ? null : onRename })), showMore && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: _backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.more, onClick: onMore }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "More", id: "gui.backpack.more" }))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _backpack_css__WEBPACK_IMPORTED_MODULE_7___default.a.statusMessage }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Backpack is empty", id: "gui.backpack.emptyBackpack" }))) : null); }; Backpack.propTypes = { blockDragOver: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, containerRef: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, contents: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, thumbnailUrl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string })), dragOver: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, error: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]), expanded: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], loading: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onDelete: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onExport: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onRename: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onMore: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onMouseEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onToggle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, showMore: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; Backpack.defaultProps = { blockDragOver: false, contents: [], dragOver: false, expanded: false, loading: false, showMore: false, onMore: null, onToggle: null }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Backpack)); /***/ }), /***/ "./src/components/blocks/blocks.css": /*!******************************************!*\ !*** ./src/components/blocks/blocks.css ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./blocks.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/blocks/blocks.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/blocks/blocks.jsx": /*!******************************************!*\ !*** ./src/components/blocks/blocks.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _blocks_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./blocks.css */ "./src/components/blocks/blocks.css"); /* harmony import */ var _blocks_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_blocks_css__WEBPACK_IMPORTED_MODULE_4__); const _excluded = ["containerRef", "dragOver"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const BlocksComponent = props => { const { containerRef, dragOver } = props, componentProps = _objectWithoutProperties(props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], _extends({ className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_blocks_css__WEBPACK_IMPORTED_MODULE_4___default.a.blocks, { [_blocks_css__WEBPACK_IMPORTED_MODULE_4___default.a.dragOver]: dragOver }) }, componentProps, { componentRef: containerRef })); }; BlocksComponent.propTypes = { containerRef: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, dragOver: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool }; /* harmony default export */ __webpack_exports__["default"] = (BlocksComponent); /***/ }), /***/ "./src/components/box/box.css": /*!************************************!*\ !*** ./src/components/box/box.css ***! \************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./box.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/box/box.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/box/box.jsx": /*!************************************!*\ !*** ./src/components/box/box.jsx ***! \************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_style_proptype__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-style-proptype */ "./node_modules/react-style-proptype/src/index.js"); /* harmony import */ var react_style_proptype__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_style_proptype__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _box_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./box.css */ "./src/components/box/box.css"); /* harmony import */ var _box_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_box_css__WEBPACK_IMPORTED_MODULE_4__); const _excluded = ["alignContent", "alignItems", "alignSelf", "basis", "children", "className", "componentRef", "direction", "element", "grow", "height", "justifyContent", "width", "wrap", "shrink", "style"]; function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const getRandomColor = function () { // In "DEBUG" mode this is used to output a random background color for each // box. The function gives the same "random" set for each seed, allowing re- // renders of the same content to give the same random display. const random = function (seed) { let mW = seed; let mZ = 987654321; const mask = 0xffffffff; return function () { mZ = 36969 * (mZ & 65535) + (mZ >> 16) & mask; mW = 18000 * (mW & 65535) + (mW >> 16) & mask; let result = (mZ << 16) + mW & mask; result /= 4294967296; return result + 1; }; }(601); return function () { const r = Math.max(parseInt(random() * 100, 10) % 256, 1); const g = Math.max(parseInt(random() * 100, 10) % 256, 1); const b = Math.max(parseInt(random() * 100, 10) % 256, 1); return "rgb(".concat(r, ",").concat(g, ",").concat(b, ")"); }; }(); const Box = props => { const { alignContent, alignItems, alignSelf, basis, children, className, componentRef, direction, element, grow, height, justifyContent, width, wrap, shrink, style } = props, componentProps = _objectWithoutProperties(props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(element, _objectSpread({ className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(className, _box_css__WEBPACK_IMPORTED_MODULE_4___default.a.box), ref: componentRef, style: Object.assign({ alignContent: alignContent, alignItems: alignItems, alignSelf: alignSelf, flexBasis: basis, flexDirection: direction, flexGrow: grow, flexShrink: shrink, flexWrap: wrap, justifyContent: justifyContent, width: width, height: height }, false ? undefined : {}, style) }, componentProps), children); }; Box.propTypes = { /** Defines how the browser distributes space between and around content items vertically within this box. */ alignContent: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'stretch']), /** Defines how the browser distributes space between and around flex items horizontally within this box. */ alignItems: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['flex-start', 'flex-end', 'center', 'baseline', 'stretch']), /** Specifies how this box should be aligned inside of its container (requires the container to be flexable). */ alignSelf: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['auto', 'flex-start', 'flex-end', 'center', 'baseline', 'stretch']), /** Specifies the initial length of this box */ basis: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['auto'])]), /** Specifies the the HTML nodes which will be child elements of this box. */ children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, /** Specifies the class name that will be set on this box */ className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, /** * A callback function whose first parameter is the underlying dom elements. * This call back will be executed immediately after the component is mounted or unmounted */ componentRef: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, /** https://developer.mozilla.org/en-US/docs/Web/CSS/flex-direction */ direction: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['row', 'row-reverse', 'column', 'column-reverse']), /** Specifies the type of HTML element of this box. Defaults to div. */ element: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, /** Specifies the flex grow factor of a flex item. */ grow: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, /** The height in pixels (if specified as a number) or a string if different units are required. */ height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]), /** https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content */ justifyContent: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['flex-start', 'flex-end', 'center', 'space-between', 'space-around']), /** Specifies the flex shrink factor of a flex item. */ shrink: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, /** An object whose keys are css property names and whose values correspond the the css property. */ style: react_style_proptype__WEBPACK_IMPORTED_MODULE_3___default.a, /** The width in pixels (if specified as a number) or a string if different units are required. */ width: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]), /** How whitespace should wrap within this block. */ wrap: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['nowrap', 'wrap', 'wrap-reverse']) }; Box.defaultProps = { element: 'div', style: {} }; /* harmony default export */ __webpack_exports__["default"] = (Box); /***/ }), /***/ "./src/components/browser-modal/browser-modal.css": /*!********************************************************!*\ !*** ./src/components/browser-modal/browser-modal.css ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./browser-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/browser-modal/browser-modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/browser-modal/browser-modal.jsx": /*!********************************************************!*\ !*** ./src/components/browser-modal/browser-modal.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-modal */ "./node_modules/react-modal/lib/index.js"); /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_modal__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_tw_environment_support_prober_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../lib/tw-environment-support-prober.js */ "./src/lib/tw-environment-support-prober.js"); /* harmony import */ var _browser_modal_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./browser-modal.css */ "./src/components/browser-modal/browser-modal.css"); /* harmony import */ var _browser_modal_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_browser_modal_css__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _unsupported_browser_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./unsupported-browser.svg */ "./src/components/browser-modal/unsupported-browser.svg"); /* harmony import */ var _unsupported_browser_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_unsupported_browser_svg__WEBPACK_IMPORTED_MODULE_7__); const _excluded = ["intl"]; function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({ label: { "id": "gui.unsupportedBrowser.label", "defaultMessage": "Browser is not supported" } }); const noop = () => {}; const BrowserModal = _ref => { let { intl } = _ref, props = _objectWithoutProperties(_ref, _excluded); const label = messages.label; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_modal__WEBPACK_IMPORTED_MODULE_2___default.a, { isOpen: true, className: _browser_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.modalContent, contentLabel: intl.formatMessage(_objectSpread({}, messages.label)), overlayClassName: _browser_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.modalOverlay, onRequestClose: noop }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { dir: props.isRtl ? 'rtl' : 'ltr' }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _browser_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.illustration }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { src: _unsupported_browser_svg__WEBPACK_IMPORTED_MODULE_7___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _browser_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], label)), Object(_lib_tw_environment_support_prober_js__WEBPACK_IMPORTED_MODULE_5__["isNewFunctionSupported"])() ? null : /*#__PURE__*/ // This message should only be seen by website operators, so we don't need to translate it react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, 'Unable to compile JavaScript with new Function(). This is most likely caused by an overly-strict Content-Security-Policy. The CSP must include \'unsafe-eval\'.'), !Object(_lib_tw_environment_support_prober_js__WEBPACK_IMPORTED_MODULE_5__["isRendererSupported"])() && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Your browser {webGlLink} which is needed for this site to run. Try updating your browser and graphics drivers or restarting your computer.", id: "tw.webglModal.description", values: { webGlLink: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("a", { href: "https://get.webgl.org/" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "does not support WebGL", id: "gui.webglModal.webgllink" })) } })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Make sure you're using a recent version of Google Chrome, Mozilla Firefox, Microsoft Edge, or Apple Safari.", id: "tw.browserModal.desc" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "On Apple devices, you must disable {lockdownMode}.", id: "tw.lockdownMode", values: { lockdownMode: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("a", { href: "https://support.apple.com/en-us/HT212650" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Lockdown Mode", id: "tw.lockdownMode2" })) } })))))); }; BrowserModal.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"].isRequired, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool }; const WrappedBrowserModal = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(BrowserModal); WrappedBrowserModal.setAppElement = react_modal__WEBPACK_IMPORTED_MODULE_2___default.a.setAppElement; /* harmony default export */ __webpack_exports__["default"] = (WrappedBrowserModal); /***/ }), /***/ "./src/components/browser-modal/unsupported-browser.svg": /*!**************************************************************!*\ !*** ./src/components/browser-modal/unsupported-browser.svg ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/89a5687599f173f2b910aa5fcd862b42.svg"; /***/ }), /***/ "./src/components/button/button.css": /*!******************************************!*\ !*** ./src/components/button/button.css ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./button.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/button/button.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/button/button.jsx": /*!******************************************!*\ !*** ./src/components/button/button.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _button_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./button.css */ "./src/components/button/button.css"); /* harmony import */ var _button_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_button_css__WEBPACK_IMPORTED_MODULE_3__); const _excluded = ["className", "disabled", "iconClassName", "iconSrc", "iconWidth", "iconHeight", "onClick", "children"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const ButtonComponent = _ref => { let { className, disabled, iconClassName, iconSrc, iconWidth, iconHeight, onClick, children } = _ref, props = _objectWithoutProperties(_ref, _excluded); if (disabled) { onClick = function onClick() {}; } const icon = iconSrc && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(iconClassName, _button_css__WEBPACK_IMPORTED_MODULE_3___default.a.icon), draggable: false, src: iconSrc, height: iconHeight, width: iconWidth }); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", _extends({ className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.outlinedButton, className), role: "button", onClick: onClick }, props), icon, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _button_css__WEBPACK_IMPORTED_MODULE_3___default.a.content }, children)); }; ButtonComponent.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, iconClassName: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, iconSrc: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, iconHeight: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, iconWidth: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (ButtonComponent); /***/ }), /***/ "./src/components/cards/card.css": /*!***************************************!*\ !*** ./src/components/cards/card.css ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./card.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/cards/card.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/cards/cards.jsx": /*!****************************************!*\ !*** ./src/components/cards/cards.jsx ***! \****************************************/ /*! exports provided: default, ImageStep, VideoStep */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Cards; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ImageStep", function() { return ImageStep; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VideoStep", function() { return VideoStep; }); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var react_draggable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-draggable */ "./node_modules/react-draggable/dist/react-draggable.js"); /* harmony import */ var react_draggable__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_draggable__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _card_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./card.css */ "./src/components/cards/card.css"); /* harmony import */ var _card_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_card_css__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _icon_shrink_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./icon--shrink.svg */ "./src/components/cards/icon--shrink.svg"); /* harmony import */ var _icon_shrink_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_icon_shrink_svg__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _icon_expand_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./icon--expand.svg */ "./src/components/cards/icon--expand.svg"); /* harmony import */ var _icon_expand_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_icon_expand_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _icon_next_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./icon--next.svg */ "./src/components/cards/icon--next.svg"); /* harmony import */ var _icon_next_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_icon_next_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _icon_prev_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./icon--prev.svg */ "./src/components/cards/icon--prev.svg"); /* harmony import */ var _icon_prev_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_icon_prev_svg__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _lib_assets_icon_tutorials_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../lib/assets/icon--tutorials.svg */ "./src/lib/assets/icon--tutorials.svg"); /* harmony import */ var _lib_assets_icon_tutorials_svg__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_lib_assets_icon_tutorials_svg__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _icon_close_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./icon--close.svg */ "./src/components/cards/icon--close.svg"); /* harmony import */ var _icon_close_svg__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_icon_close_svg__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _lib_libraries_decks_translate_video_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../lib/libraries/decks/translate-video.js */ "./src/lib/libraries/decks/translate-video.js"); /* harmony import */ var _lib_libraries_decks_translate_image_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../lib/libraries/decks/translate-image.js */ "./src/lib/libraries/decks/translate-image.js"); const _excluded = ["activeDeckId", "content", "dragging", "isRtl", "locale", "onActivateDeckFactory", "onCloseCards", "onShrinkExpandCards", "onDrag", "onStartDrag", "onEndDrag", "onShowAll", "onNextStep", "onPrevStep", "showVideos", "step", "expanded"]; function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const CardHeader = _ref => { let { onCloseCards, onShrinkExpandCards, onShowAll, totalSteps, step, expanded } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: expanded ? _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.headerButtons : classnames__WEBPACK_IMPORTED_MODULE_2___default()(_card_css__WEBPACK_IMPORTED_MODULE_5___default.a.headerButtons, _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.headerButtonsHidden) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.allButton, onClick: onShowAll }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.helpIcon, src: _lib_assets_icon_tutorials_svg__WEBPACK_IMPORTED_MODULE_10___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Tutorials", id: "gui.cards.all-tutorials" })), totalSteps > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.stepsList }, Array(totalSteps).fill(0).map((_, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: i === step ? _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.activeStepPip : _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.inactiveStepPip, key: "pip-step-".concat(i) }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.headerButtonsRight }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.shrinkExpandButton, onClick: onShrinkExpandCards }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { draggable: false, src: expanded ? _icon_shrink_svg__WEBPACK_IMPORTED_MODULE_6___default.a : _icon_expand_svg__WEBPACK_IMPORTED_MODULE_7___default.a }), expanded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Shrink", id: "gui.cards.shrink" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Expand", id: "gui.cards.expand" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.removeButton, onClick: onCloseCards }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.closeIcon, src: _icon_close_svg__WEBPACK_IMPORTED_MODULE_11___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Close", id: "gui.cards.close" })))); }; class VideoStep extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { componentDidMount() { const script = document.createElement('script'); script.src = "https://fast.wistia.com/embed/medias/".concat(this.props.video, ".jsonp"); script.async = true; script.setAttribute('id', 'wistia-video-content'); document.body.appendChild(script); const script2 = document.createElement('script'); script2.src = 'https://fast.wistia.com/assets/external/E-v1.js'; script2.async = true; script2.setAttribute('id', 'wistia-video-api'); document.body.appendChild(script2); } // We use the Wistia API here to update or pause the video dynamically: // https://wistia.com/support/developers/player-api componentDidUpdate(prevProps) { // Ensure the wistia API is loaded and available if (!(window.Wistia && window.Wistia.api)) return; // Get a handle on the currently loaded video const video = window.Wistia.api(prevProps.video); // Reset the video source if a new video has been chosen from the library if (prevProps.video !== this.props.video) { video.replaceWith(this.props.video); } // Pause the video if the modal is being shrunken if (!this.props.expanded) { video.pause(); } } componentWillUnmount() { const script = document.getElementById('wistia-video-content'); script.parentNode.removeChild(script); const script2 = document.getElementById('wistia-video-api'); script2.parentNode.removeChild(script2); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.stepVideo }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "wistia_embed wistia_async_".concat(this.props.video), id: "video-div", style: { height: "257px", width: "466px" } }, "\xA0")); } } VideoStep.propTypes = { expanded: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, video: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired }; const ImageStep = _ref2 => { let { title, image } = _ref2; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.stepTitle }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.stepImageContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.stepImage, draggable: false, key: image /* Use src as key to prevent hanging around on slow connections */, src: image }))); }; ImageStep.propTypes = { image: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, title: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node.isRequired }; const NextPrevButtons = _ref3 => { let { isRtl, onNextStep, onPrevStep, expanded } = _ref3; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, onNextStep ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: expanded ? isRtl ? _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.leftCard : _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.rightCard : _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.hidden }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: expanded ? isRtl ? _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.leftButton : _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.rightButton : _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.hidden, onClick: onNextStep }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { draggable: false, src: isRtl ? _icon_prev_svg__WEBPACK_IMPORTED_MODULE_9___default.a : _icon_next_svg__WEBPACK_IMPORTED_MODULE_8___default.a }))) : null, onPrevStep ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: expanded ? isRtl ? _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.rightCard : _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.leftCard : _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.hidden }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: expanded ? isRtl ? _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.rightButton : _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.leftButton : _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.hidden, onClick: onPrevStep }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { draggable: false, src: isRtl ? _icon_next_svg__WEBPACK_IMPORTED_MODULE_8___default.a : _icon_prev_svg__WEBPACK_IMPORTED_MODULE_9___default.a }))) : null); }; NextPrevButtons.propTypes = { expanded: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, onNextStep: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onPrevStep: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func }; CardHeader.propTypes = { expanded: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, onCloseCards: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onShowAll: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onShrinkExpandCards: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, step: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, totalSteps: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }; const PreviewsStep = _ref4 => { let { deckIds, content, onActivateDeckFactory, onShowAll } = _ref4; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.stepTitle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "More things to try!", id: "gui.cards.more-things-to-try" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.decks }, deckIds.slice(0, 2).map(id => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.deck, key: "deck-preview-".concat(id), onClick: onActivateDeckFactory(id) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.deckImage, draggable: false, src: content[id].img }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.deckName }, content[id].name)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.seeAll }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.seeAllButton, onClick: onShowAll }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "See more", id: "gui.cards.see-more" })))); }; PreviewsStep.propTypes = { content: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ id: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node.isRequired, img: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, steps: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ title: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node, image: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, video: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, deckIds: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string) })) }) }).isRequired, deckIds: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string).isRequired, onActivateDeckFactory: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onShowAll: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired }; const Cards = props => { const { activeDeckId, content, dragging, isRtl, locale, onActivateDeckFactory, onCloseCards, onShrinkExpandCards, onDrag, onStartDrag, onEndDrag, onShowAll, onNextStep, onPrevStep, showVideos, step, expanded } = props, posProps = _objectWithoutProperties(props, _excluded); let { x, y } = posProps; if (activeDeckId === null) return; // Tutorial cards need to calculate their own dragging bounds // to allow for dragging the cards off the left, right and bottom // edges of the workspace. const cardHorizontalDragOffset = 400; // ~80% of card width const cardVerticalDragOffset = expanded ? 257 : 0; // ~80% of card height, if expanded const menuBarHeight = 48; // TODO: get pre-calculated from elsewhere? const wideCardWidth = 500; if (x === 0 && y === 0) { // initialize positions x = isRtl ? -190 - wideCardWidth - cardHorizontalDragOffset : 292; x += cardHorizontalDragOffset; // The tallest cards are about 320px high, and the default position is pinned // to near the bottom of the blocks palette to allow room to work above. const tallCardHeight = 320; const bottomMargin = 60; // To avoid overlapping the backpack region y = window.innerHeight - tallCardHeight - bottomMargin - menuBarHeight; } const steps = content[activeDeckId].steps; return ( /*#__PURE__*/ // Custom overlay to act as the bounding parent for the draggable, using values from above react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.cardContainerOverlay, style: { width: "".concat(window.innerWidth + 2 * cardHorizontalDragOffset, "px"), height: "".concat(window.innerHeight - menuBarHeight + cardVerticalDragOffset, "px"), top: "".concat(menuBarHeight, "px"), left: "".concat(-cardHorizontalDragOffset, "px") } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_draggable__WEBPACK_IMPORTED_MODULE_4___default.a, { bounds: "parent", cancel: "#video-div" // disable dragging on video div , position: { x: x, y: y }, onDrag: onDrag, onStart: onStartDrag, onStop: onEndDrag }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.cardContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.card }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(CardHeader, { expanded: expanded, step: step, totalSteps: steps.length, onCloseCards: onCloseCards, onShowAll: onShowAll, onShrinkExpandCards: onShrinkExpandCards }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: expanded ? _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.stepBody : _card_css__WEBPACK_IMPORTED_MODULE_5___default.a.hidden }, steps[step].deckIds ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(PreviewsStep, { content: content, deckIds: steps[step].deckIds, onActivateDeckFactory: onActivateDeckFactory, onShowAll: onShowAll }) : steps[step].video ? showVideos ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(VideoStep, { dragging: dragging, expanded: expanded, video: Object(_lib_libraries_decks_translate_video_js__WEBPACK_IMPORTED_MODULE_12__["translateVideo"])(steps[step].video, locale) }) : /*#__PURE__*/ // Else show the deck image and title react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(ImageStep, { image: content[activeDeckId].img, title: content[activeDeckId].name }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(ImageStep, { image: Object(_lib_libraries_decks_translate_image_js__WEBPACK_IMPORTED_MODULE_13__["translateImage"])(steps[step].image, locale), title: steps[step].title }), steps[step].trackingPixel && steps[step].trackingPixel), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(NextPrevButtons, { expanded: expanded, isRtl: isRtl, onNextStep: step < steps.length - 1 ? onNextStep : null, onPrevStep: step > 0 ? onPrevStep : null }))))) ); }; Cards.propTypes = { activeDeckId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, content: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ id: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node.isRequired, img: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, steps: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ title: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node, image: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, video: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, deckIds: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string) })) }) }), dragging: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, expanded: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, locale: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, onActivateDeckFactory: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onCloseCards: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onDrag: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onEndDrag: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onNextStep: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onPrevStep: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onShowAll: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onShrinkExpandCards: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onStartDrag: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, showVideos: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, step: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired, x: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, y: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }; Cards.defaultProps = { showVideos: true }; /***/ }), /***/ "./src/components/cards/icon--close.svg": /*!**********************************************!*\ !*** ./src/components/cards/icon--close.svg ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/a3e689235188ba10c5cfd75730cb88a7.svg"; /***/ }), /***/ "./src/components/cards/icon--expand.svg": /*!***********************************************!*\ !*** ./src/components/cards/icon--expand.svg ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/04e28ba12fe914cf4f131dcb85ae82d6.svg"; /***/ }), /***/ "./src/components/cards/icon--next.svg": /*!*********************************************!*\ !*** ./src/components/cards/icon--next.svg ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/a80790c977586cc0595b5fe2f0bcb39a.svg"; /***/ }), /***/ "./src/components/cards/icon--prev.svg": /*!*********************************************!*\ !*** ./src/components/cards/icon--prev.svg ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/33592a76d0d0fdaa4a32b2ea41db5e16.svg"; /***/ }), /***/ "./src/components/cards/icon--shrink.svg": /*!***********************************************!*\ !*** ./src/components/cards/icon--shrink.svg ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/76121b7f4eff7d7ca0d49a45479d3f3f.svg"; /***/ }), /***/ "./src/components/close-button/close-button.css": /*!******************************************************!*\ !*** ./src/components/close-button/close-button.css ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./close-button.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/close-button/close-button.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/close-button/close-button.jsx": /*!******************************************************!*\ !*** ./src/components/close-button/close-button.jsx ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _close_button_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./close-button.css */ "./src/components/close-button/close-button.css"); /* harmony import */ var _close_button_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_close_button_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _icon_close_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./icon--close.svg */ "./src/components/close-button/icon--close.svg"); /* harmony import */ var _icon_close_svg__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_icon_close_svg__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _icon_close_orange_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./icon--close-orange.svg */ "./src/components/close-button/icon--close-orange.svg"); /* harmony import */ var _icon_close_orange_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_icon_close_orange_svg__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _lib_assets_icon_back_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../lib/assets/icon--back.svg */ "./src/lib/assets/icon--back.svg"); /* harmony import */ var _lib_assets_icon_back_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_lib_assets_icon_back_svg__WEBPACK_IMPORTED_MODULE_6__); let closeIcons = {}; const CloseButton = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { "aria-label": "Close", className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_close_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.closeButton, props.className, { [_close_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.small]: props.size === CloseButton.SIZE_SMALL, [_close_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.large]: props.size === CloseButton.SIZE_LARGE, [_close_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.orange]: props.color === CloseButton.COLOR_ORANGE }), role: "button", tabIndex: "0", onClick: props.onClick }, props.buttonType === 'back' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _close_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.backIcon, src: _lib_assets_icon_back_svg__WEBPACK_IMPORTED_MODULE_6___default.a }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_close_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.closeIcon, { [_close_button_css__WEBPACK_IMPORTED_MODULE_3___default.a[props.color]]: props.color !== CloseButton.COLOR_NEUTRAL }), src: props.color && closeIcons[props.color] ? closeIcons[props.color] : _icon_close_svg__WEBPACK_IMPORTED_MODULE_4___default.a })); CloseButton.SIZE_SMALL = 'small'; CloseButton.SIZE_LARGE = 'large'; CloseButton.COLOR_NEUTRAL = 'neutral'; CloseButton.COLOR_GREEN = 'green'; CloseButton.COLOR_ORANGE = 'orange'; closeIcons = { [CloseButton.COLOR_NEUTRAL]: _icon_close_svg__WEBPACK_IMPORTED_MODULE_4___default.a, [CloseButton.COLOR_GREEN]: _icon_close_svg__WEBPACK_IMPORTED_MODULE_4___default.a, // TODO: temporary, need green icon [CloseButton.COLOR_ORANGE]: _icon_close_orange_svg__WEBPACK_IMPORTED_MODULE_5___default.a }; CloseButton.propTypes = { buttonType: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(['back', 'close']), className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, color: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, onClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, size: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf([CloseButton.SIZE_SMALL, CloseButton.SIZE_LARGE]) }; CloseButton.defaultProps = { color: CloseButton.COLOR_NEUTRAL, size: CloseButton.SIZE_LARGE, buttonType: 'close' }; /* harmony default export */ __webpack_exports__["default"] = (CloseButton); /***/ }), /***/ "./src/components/close-button/icon--close-orange.svg": /*!************************************************************!*\ !*** ./src/components/close-button/icon--close-orange.svg ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/ee54d776d2cda9a3c537ac7e8f144037.svg"; /***/ }), /***/ "./src/components/close-button/icon--close.svg": /*!*****************************************************!*\ !*** ./src/components/close-button/icon--close.svg ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/cb666b99d3528f91b52f985dfb102afa.svg"; /***/ }), /***/ "./src/components/coming-soon/aww-cat.png": /*!************************************************!*\ !*** ./src/components/coming-soon/aww-cat.png ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/97926439955086f8ee4aabbd81580f17.png"; /***/ }), /***/ "./src/components/coming-soon/coming-soon.css": /*!****************************************************!*\ !*** ./src/components/coming-soon/coming-soon.css ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./coming-soon.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/coming-soon/coming-soon.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/coming-soon/coming-soon.jsx": /*!****************************************************!*\ !*** ./src/components/coming-soon/coming-soon.jsx ***! \****************************************************/ /*! exports provided: ComingSoonComponent, ComingSoonTooltip */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComingSoonComponent", function() { return ComingSoon; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComingSoonTooltip", function() { return ComingSoonTooltip; }); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react_tooltip__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-tooltip */ "./node_modules/react-tooltip/dist/index.js"); /* harmony import */ var react_tooltip__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_tooltip__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _coming_soon_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./coming-soon.css */ "./src/components/coming-soon/coming-soon.css"); /* harmony import */ var _coming_soon_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_coming_soon_css__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _aww_cat_png__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./aww-cat.png */ "./src/components/coming-soon/aww-cat.png"); /* harmony import */ var _aww_cat_png__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_aww_cat_png__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _cool_cat_png__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./cool-cat.png */ "./src/components/coming-soon/cool-cat.png"); /* harmony import */ var _cool_cat_png__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_cool_cat_png__WEBPACK_IMPORTED_MODULE_8__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["defineMessages"])({ message1: { "id": "gui.comingSoon.message1", "defaultMessage": "Don't worry, we're on it {emoji}" }, message2: { "id": "gui.comingSoon.message2", "defaultMessage": "Coming Soon..." }, message3: { "id": "gui.comingSoon.message3", "defaultMessage": "We're working on it {emoji}" } }); class ComingSoonContent extends react__WEBPACK_IMPORTED_MODULE_4___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['setHide', 'setShow', 'getRandomMessage']); this.state = { isShowing: false }; } setShow() { // needed to set the opacity to 1, since the default is .9 on show this.setState({ isShowing: true }); } setHide() { this.setState({ isShowing: false }); } getRandomMessage() { // randomly chooses a messages from `messages` to display in the tooltip. const images = [_aww_cat_png__WEBPACK_IMPORTED_MODULE_7___default.a, _cool_cat_png__WEBPACK_IMPORTED_MODULE_8___default.a]; const messageNumber = Math.floor(Math.random() * Object.keys(messages).length) + 1; const imageNumber = Math.floor(Math.random() * Object.keys(images).length); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], _extends({}, messages["message".concat(messageNumber)], { values: { emoji: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("img", { className: _coming_soon_css__WEBPACK_IMPORTED_MODULE_6___default.a.comingSoonImage, src: images[imageNumber] }) } })); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_tooltip__WEBPACK_IMPORTED_MODULE_5___default.a, { afterHide: this.setHide, afterShow: this.setShow, className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_coming_soon_css__WEBPACK_IMPORTED_MODULE_6___default.a.comingSoon, this.props.className, { [_coming_soon_css__WEBPACK_IMPORTED_MODULE_6___default.a.show]: this.state.isShowing, [_coming_soon_css__WEBPACK_IMPORTED_MODULE_6___default.a.left]: this.props.place === 'left', [_coming_soon_css__WEBPACK_IMPORTED_MODULE_6___default.a.right]: this.props.place === 'right', [_coming_soon_css__WEBPACK_IMPORTED_MODULE_6___default.a.top]: this.props.place === 'top', [_coming_soon_css__WEBPACK_IMPORTED_MODULE_6___default.a.bottom]: this.props.place === 'bottom' }), getContent: this.getRandomMessage, id: this.props.tooltipId }); } } ComingSoonContent.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, intl: react_intl__WEBPACK_IMPORTED_MODULE_2__["intlShape"], place: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['top', 'right', 'bottom', 'left']), tooltipId: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string.isRequired }; ComingSoonContent.defaultProps = { place: 'bottom' }; const ComingSoon = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(ComingSoonContent); const ComingSoonTooltip = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", { className: props.className }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", { "data-delay-hide": props.delayHide, "data-delay-show": props.delayShow, "data-effect": "solid", "data-for": props.tooltipId, "data-place": props.place, "data-tip": "tooltip" }, props.children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(ComingSoon, { className: props.tooltipClassName, place: props.place, tooltipId: props.tooltipId })); ComingSoonTooltip.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.node.isRequired, className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, delayHide: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, delayShow: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, place: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(['top', 'right', 'bottom', 'left']), tooltipClassName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, tooltipId: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string.isRequired }; ComingSoonTooltip.defaultProps = { delayHide: 0, delayShow: 0 }; /***/ }), /***/ "./src/components/coming-soon/cool-cat.png": /*!*************************************************!*\ !*** ./src/components/coming-soon/cool-cat.png ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/3e83d9d800459175308f0b45b117af16.png"; /***/ }), /***/ "./src/components/connection-modal/auto-scanning-step.jsx": /*!****************************************************************!*\ !*** ./src/components/connection-modal/auto-scanning-step.jsx ***! \****************************************************************/ /*! exports provided: default, PHASES */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AutoScanningStep; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PHASES", function() { return PHASES; }); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var keymirror__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! keymirror */ "./node_modules/keymirror/index.js"); /* harmony import */ var keymirror__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(keymirror__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _dots_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dots.jsx */ "./src/components/connection-modal/dots.jsx"); /* harmony import */ var _close_button_icon_close_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../close-button/icon--close.svg */ "./src/components/close-button/icon--close.svg"); /* harmony import */ var _close_button_icon_close_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_close_button_icon_close_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _icons_searching_png__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./icons/searching.png */ "./src/components/connection-modal/icons/searching.png"); /* harmony import */ var _icons_searching_png__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_icons_searching_png__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./icons/bluetooth-white.svg */ "./src/components/connection-modal/icons/bluetooth-white.svg"); /* harmony import */ var _icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _icons_back_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./icons/back.svg */ "./src/components/connection-modal/icons/back.svg"); /* harmony import */ var _icons_back_svg__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_icons_back_svg__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./connection-modal.css */ "./src/components/connection-modal/connection-modal.css"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_connection_modal_css__WEBPACK_IMPORTED_MODULE_11__); const PHASES = keymirror__WEBPACK_IMPORTED_MODULE_3___default()({ prescan: null, pressbutton: null, notfound: null }); const AutoScanningStep = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.activityArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.activityAreaInfo }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.centeredRow }, props.phase === PHASES.prescan && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.radarBig, src: _icons_searching_png__WEBPACK_IMPORTED_MODULE_8___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.bluetoothCenteredIcon, src: _icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_9___default.a })), props.phase === PHASES.pressbutton && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.radarBig, _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.radarSpin), src: _icons_searching_png__WEBPACK_IMPORTED_MODULE_8___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.connectionTipIcon, src: props.connectionTipIconURL })), props.phase === PHASES.notfound && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.instructions }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "No devices found", id: "gui.connection.auto-scanning.noPeripheralsFound" }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.bottomArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.instructions) }, props.phase === PHASES.prescan && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Have your device nearby, then begin searching.", id: "gui.connection.auto-scanning.prescan" }), props.phase === PHASES.pressbutton && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Press the button on your device.", id: "gui.connection.auto-scanning.pressbutton" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_dots_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.bottomAreaItem, counter: 0, total: 3 }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.buttonRow) }, props.phase === PHASES.prescan && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.connectionButton, onClick: props.onStartScan }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Start Searching", id: "gui.connection.auto-scanning.start-search" })), props.phase === PHASES.pressbutton && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.segmentedButton }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { disabled: true, className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.connectionButton }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Searching...", id: "gui.connection.connecting-searchbutton" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.connectionButton, onClick: props.onRefresh }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.abortConnectingIcon, src: _close_button_icon_close_svg__WEBPACK_IMPORTED_MODULE_7___default.a }))), props.phase === PHASES.notfound && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.connectionButton, onClick: props.onRefresh }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.buttonIconLeft, src: _icons_back_svg__WEBPACK_IMPORTED_MODULE_10___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Try again", id: "gui.connection.auto-scanning.try-again" }))))); AutoScanningStep.propTypes = { connectionTipIconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onRefresh: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onStartScan: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, phase: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(Object.keys(PHASES)) }; AutoScanningStep.defaultProps = { phase: PHASES.prescan }; /***/ }), /***/ "./src/components/connection-modal/connected-step.jsx": /*!************************************************************!*\ !*** ./src/components/connection-modal/connected-step.jsx ***! \************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _dots_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dots.jsx */ "./src/components/connection-modal/dots.jsx"); /* harmony import */ var _icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./icons/bluetooth-white.svg */ "./src/components/connection-modal/icons/bluetooth-white.svg"); /* harmony import */ var _icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./connection-modal.css */ "./src/components/connection-modal/connection-modal.css"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_connection_modal_css__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_7__); const ConnectedStep = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.activityArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.centeredRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.peripheralActivity }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.peripheralActivityIcon, src: props.connectionIconURL }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.bluetoothConnectedIcon, src: _icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_5___default.a })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.bottomArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_7___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.instructions) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Connected", id: "gui.connection.connected" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_dots_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { success: true, className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.bottomAreaItem, total: 3 }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_7___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.cornerButtons) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_7___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.redButton, _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.connectionButton), onClick: props.onDisconnect }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Disconnect", id: "gui.connection.disconnect" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.connectionButton, onClick: props.onCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Go to Editor", id: "gui.connection.go-to-editor" }))))); ConnectedStep.propTypes = { connectionIconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onDisconnect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (ConnectedStep); /***/ }), /***/ "./src/components/connection-modal/connecting-step.jsx": /*!*************************************************************!*\ !*** ./src/components/connection-modal/connecting-step.jsx ***! \*************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _dots_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dots.jsx */ "./src/components/connection-modal/dots.jsx"); /* harmony import */ var _icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./icons/bluetooth-white.svg */ "./src/components/connection-modal/icons/bluetooth-white.svg"); /* harmony import */ var _icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _close_button_icon_close_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../close-button/icon--close.svg */ "./src/components/close-button/icon--close.svg"); /* harmony import */ var _close_button_icon_close_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_close_button_icon_close_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./connection-modal.css */ "./src/components/connection-modal/connection-modal.css"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_connection_modal_css__WEBPACK_IMPORTED_MODULE_8__); const ConnectingStep = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.activityArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.centeredRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.peripheralActivity }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.peripheralActivityIcon, src: props.connectionIconURL }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.bluetoothConnectingIcon, src: _icons_bluetooth_white_svg__WEBPACK_IMPORTED_MODULE_6___default.a })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.bottomArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.instructions) }, props.connectingMessage), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_dots_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.bottomAreaItem, counter: 1, total: 3 }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.segmentedButton) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { disabled: true, className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.connectionButton }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Connecting...", id: "gui.connection.connecting-cancelbutton" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.connectionButton, onClick: props.onDisconnect }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.abortConnectingIcon, src: _close_button_icon_close_svg__WEBPACK_IMPORTED_MODULE_7___default.a }))))); ConnectingStep.propTypes = { connectingMessage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired, connectionIconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, onDisconnect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (ConnectingStep); /***/ }), /***/ "./src/components/connection-modal/connection-modal.css": /*!**************************************************************!*\ !*** ./src/components/connection-modal/connection-modal.css ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./connection-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/connection-modal/connection-modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/connection-modal/connection-modal.jsx": /*!**************************************************************!*\ !*** ./src/components/connection-modal/connection-modal.jsx ***! \**************************************************************/ /*! exports provided: default, PHASES */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ConnectionModalComponent; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PHASES", function() { return PHASES; }); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var keymirror__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! keymirror */ "./node_modules/keymirror/index.js"); /* harmony import */ var keymirror__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(keymirror__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _containers_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../containers/scanning-step.jsx */ "./src/containers/scanning-step.jsx"); /* harmony import */ var _containers_auto_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../containers/auto-scanning-step.jsx */ "./src/containers/auto-scanning-step.jsx"); /* harmony import */ var _connecting_step_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./connecting-step.jsx */ "./src/components/connection-modal/connecting-step.jsx"); /* harmony import */ var _connected_step_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./connected-step.jsx */ "./src/components/connection-modal/connected-step.jsx"); /* harmony import */ var _error_step_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./error-step.jsx */ "./src/components/connection-modal/error-step.jsx"); /* harmony import */ var _unavailable_step_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./unavailable-step.jsx */ "./src/components/connection-modal/unavailable-step.jsx"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./connection-modal.css */ "./src/components/connection-modal/connection-modal.css"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_connection_modal_css__WEBPACK_IMPORTED_MODULE_11__); const PHASES = keymirror__WEBPACK_IMPORTED_MODULE_2___default()({ scanning: null, connecting: null, connected: null, error: null, unavailable: null }); const ConnectionModalComponent = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.modalContent, contentLabel: props.name, headerClassName: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.header, headerImage: props.connectionSmallIconURL, id: "connectionModal", onHelp: props.onHelp, onRequestClose: props.onCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.body }, props.phase === PHASES.scanning && !props.useAutoScan && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], props), props.phase === PHASES.scanning && props.useAutoScan && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_auto_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], props), props.phase === PHASES.connecting && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_connecting_step_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], props), props.phase === PHASES.connected && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_connected_step_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], props), props.phase === PHASES.error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_error_step_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], props), props.phase === PHASES.unavailable && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_unavailable_step_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], props))); ConnectionModalComponent.propTypes = { connectingMessage: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node.isRequired, connectionSmallIconURL: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, connectionTipIconURL: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onHelp: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, phase: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(Object.keys(PHASES)).isRequired, title: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, useAutoScan: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired }; ConnectionModalComponent.defaultProps = { connectingMessage: 'Connecting' }; /***/ }), /***/ "./src/components/connection-modal/dots.jsx": /*!**************************************************!*\ !*** ./src/components/connection-modal/dots.jsx ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./connection-modal.css */ "./src/components/connection-modal/connection-modal.css"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_connection_modal_css__WEBPACK_IMPORTED_MODULE_4__); const Dots = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(props.className, _connection_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.dotsRow) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.dotsHolder, { [_connection_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.dotsHolderError]: props.error, [_connection_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.dotsHolderSuccess]: props.success }) }, Array(props.total).fill(0).map((_, i) => { let type = 'inactive'; if (props.counter === i) type = 'active'; if (props.success) type = 'success'; if (props.error) type = 'error'; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Dot, { key: "dot-".concat(i), type: type }); }))); Dots.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, counter: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, error: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, success: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, total: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }; const Dot = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.dot, { [_connection_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.inactiveStepDot]: props.type === 'inactive', [_connection_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.activeStepDot]: props.type === 'active', [_connection_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.successDot]: props.type === 'success', [_connection_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.errorDot]: props.type === 'error' }) }); Dot.propTypes = { type: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (Dots); /***/ }), /***/ "./src/components/connection-modal/error-step.jsx": /*!********************************************************!*\ !*** ./src/components/connection-modal/error-step.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _dots_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dots.jsx */ "./src/components/connection-modal/dots.jsx"); /* harmony import */ var _icons_help_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./icons/help.svg */ "./src/components/connection-modal/icons/help.svg"); /* harmony import */ var _icons_help_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_icons_help_svg__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _icons_back_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./icons/back.svg */ "./src/components/connection-modal/icons/back.svg"); /* harmony import */ var _icons_back_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_icons_back_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./connection-modal.css */ "./src/components/connection-modal/connection-modal.css"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_connection_modal_css__WEBPACK_IMPORTED_MODULE_8__); const ErrorStep = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.activityArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.centeredRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.peripheralActivity }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.peripheralActivityIcon, src: props.connectionIconURL })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.bottomArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.instructions) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Oops, looks like something went wrong.", id: "gui.connection.error.errorMessage" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_dots_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { error: true, className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.bottomAreaItem, total: 3 }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.buttonRow) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.connectionButton, onClick: props.onScanning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.buttonIconLeft, _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.buttonIconBack), src: _icons_back_svg__WEBPACK_IMPORTED_MODULE_7___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Try again", id: "gui.connection.error.tryagainbutton" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.connectionButton, onClick: props.onHelp }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.buttonIconLeft, src: _icons_help_svg__WEBPACK_IMPORTED_MODULE_6___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Help", id: "gui.connection.error.helpbutton" }))))); ErrorStep.propTypes = { connectionIconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, onHelp: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onScanning: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (ErrorStep); /***/ }), /***/ "./src/components/connection-modal/icons/back.svg": /*!********************************************************!*\ !*** ./src/components/connection-modal/icons/back.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/42157e6edddc19588c3c2ff188703799.svg"; /***/ }), /***/ "./src/components/connection-modal/icons/bluetooth-white.svg": /*!*******************************************************************!*\ !*** ./src/components/connection-modal/icons/bluetooth-white.svg ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/0fd9fd69a38ab79358df5a77b29702c8.svg"; /***/ }), /***/ "./src/components/connection-modal/icons/bluetooth.svg": /*!*************************************************************!*\ !*** ./src/components/connection-modal/icons/bluetooth.svg ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/8b8f2d052b4092ec47ad66c30c8b1642.svg"; /***/ }), /***/ "./src/components/connection-modal/icons/help.svg": /*!********************************************************!*\ !*** ./src/components/connection-modal/icons/help.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/4b6100c9f591be6470cdfd4697de0b54.svg"; /***/ }), /***/ "./src/components/connection-modal/icons/refresh.svg": /*!***********************************************************!*\ !*** ./src/components/connection-modal/icons/refresh.svg ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/71655cde34ae75f48cb8820abf4b31e7.svg"; /***/ }), /***/ "./src/components/connection-modal/icons/scratchlink.svg": /*!***************************************************************!*\ !*** ./src/components/connection-modal/icons/scratchlink.svg ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/05e05756b592740a3670417b4df19ca9.svg"; /***/ }), /***/ "./src/components/connection-modal/icons/searching.png": /*!*************************************************************!*\ !*** ./src/components/connection-modal/icons/searching.png ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/572a212c2e777e3a9061c97453497009.png"; /***/ }), /***/ "./src/components/connection-modal/peripheral-tile.jsx": /*!*************************************************************!*\ !*** ./src/components/connection-modal/peripheral-tile.jsx ***! \*************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./connection-modal.css */ "./src/components/connection-modal/connection-modal.css"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_connection_modal_css__WEBPACK_IMPORTED_MODULE_6__); class PeripheralTile extends react__WEBPACK_IMPORTED_MODULE_3___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_4___default()(this, ['handleConnecting']); } handleConnecting() { this.props.onConnecting(this.props.peripheralId); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.peripheralTile }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.peripheralTileName }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.peripheralTileImage, src: this.props.connectionSmallIconURL }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.peripheralTileNameWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.peripheralTileNameLabel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Device name", id: "gui.connection.peripheral-name-label" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.peripheralTileNameText }, this.props.name))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.peripheralTileWidgets }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.signalStrengthMeter }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.signalBar, { [_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.greenBar]: this.props.rssi > -80 }) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.signalBar, { [_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.greenBar]: this.props.rssi > -60 }) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.signalBar, { [_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.greenBar]: this.props.rssi > -40 }) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.signalBar, { [_connection_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.greenBar]: this.props.rssi > -20 }) })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", { onClick: this.handleConnecting }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Connect", id: "gui.connection.connect" })))); } } PeripheralTile.propTypes = { connectionSmallIconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onConnecting: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, peripheralId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, rssi: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }; /* harmony default export */ __webpack_exports__["default"] = (PeripheralTile); /***/ }), /***/ "./src/components/connection-modal/scanning-step.jsx": /*!***********************************************************!*\ !*** ./src/components/connection-modal/scanning-step.jsx ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _peripheral_tile_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./peripheral-tile.jsx */ "./src/components/connection-modal/peripheral-tile.jsx"); /* harmony import */ var _dots_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dots.jsx */ "./src/components/connection-modal/dots.jsx"); /* harmony import */ var _icons_searching_png__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./icons/searching.png */ "./src/components/connection-modal/icons/searching.png"); /* harmony import */ var _icons_searching_png__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_icons_searching_png__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _icons_refresh_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./icons/refresh.svg */ "./src/components/connection-modal/icons/refresh.svg"); /* harmony import */ var _icons_refresh_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_icons_refresh_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./connection-modal.css */ "./src/components/connection-modal/connection-modal.css"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_connection_modal_css__WEBPACK_IMPORTED_MODULE_9__); const ScanningStep = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.activityArea }, props.scanning ? props.peripheralList.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.activityAreaInfo }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.centeredRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.radarSmall, _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.radarSpin), src: _icons_searching_png__WEBPACK_IMPORTED_MODULE_7___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Looking for devices", id: "gui.connection.scanning.lookingforperipherals" }))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.peripheralTilePane }, props.peripheralList.map(peripheral => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_peripheral_tile_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { connectionSmallIconURL: props.connectionSmallIconURL, key: peripheral.peripheralId, name: peripheral.name, peripheralId: peripheral.peripheralId, rssi: peripheral.rssi, onConnecting: props.onConnecting }))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.instructions }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "No devices found", id: "gui.connection.scanning.noPeripheralsFound" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.bottomArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.instructions) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Select your device in the list above.", id: "gui.connection.scanning.instructions" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_dots_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.bottomAreaItem, counter: 0, total: 3 }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.connectionButton), onClick: props.onRefresh }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Refresh", id: "gui.connection.search" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_9___default.a.buttonIconRight, src: _icons_refresh_svg__WEBPACK_IMPORTED_MODULE_8___default.a })))); ScanningStep.propTypes = { connectionSmallIconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onConnecting: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onRefresh: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, peripheralList: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, rssi: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, peripheralId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string })), scanning: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired }; ScanningStep.defaultProps = { peripheralList: [], scanning: true }; /* harmony default export */ __webpack_exports__["default"] = (ScanningStep); /***/ }), /***/ "./src/components/connection-modal/unavailable-step.jsx": /*!**************************************************************!*\ !*** ./src/components/connection-modal/unavailable-step.jsx ***! \**************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _dots_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dots.jsx */ "./src/components/connection-modal/dots.jsx"); /* harmony import */ var _icons_help_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./icons/help.svg */ "./src/components/connection-modal/icons/help.svg"); /* harmony import */ var _icons_help_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_icons_help_svg__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _icons_back_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./icons/back.svg */ "./src/components/connection-modal/icons/back.svg"); /* harmony import */ var _icons_back_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_icons_back_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _icons_bluetooth_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./icons/bluetooth.svg */ "./src/components/connection-modal/icons/bluetooth.svg"); /* harmony import */ var _icons_bluetooth_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_icons_bluetooth_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _icons_scratchlink_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./icons/scratchlink.svg */ "./src/components/connection-modal/icons/scratchlink.svg"); /* harmony import */ var _icons_scratchlink_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_icons_scratchlink_svg__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./connection-modal.css */ "./src/components/connection-modal/connection-modal.css"); /* harmony import */ var _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_connection_modal_css__WEBPACK_IMPORTED_MODULE_10__); const UnavailableStep = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.activityArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.scratchLinkHelp }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.scratchLinkHelpStep }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.helpStepNumber }, '1'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.helpStepImage }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.scratchLinkIcon, src: _icons_scratchlink_svg__WEBPACK_IMPORTED_MODULE_9___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.helpStepText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Make sure you have Scratch Link installed and running", id: "gui.connection.unavailable.installscratchlink" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.scratchLinkHelpStep }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.helpStepNumber }, '2'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.helpStepImage }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.scratchLinkIcon, src: _icons_bluetooth_svg__WEBPACK_IMPORTED_MODULE_8___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.helpStepText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Check that Bluetooth is enabled", id: "gui.connection.unavailable.enablebluetooth" }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.bottomArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_dots_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { error: true, className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.bottomAreaItem, total: 3 }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.bottomAreaItem, _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.buttonRow) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.connectionButton, onClick: props.onScanning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.buttonIconLeft, _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.buttonIconBack), src: _icons_back_svg__WEBPACK_IMPORTED_MODULE_7___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Try again", id: "gui.connection.unavailable.tryagainbutton" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.connectionButton, onClick: props.onHelp }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { className: _connection_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.buttonIconLeft, src: _icons_help_svg__WEBPACK_IMPORTED_MODULE_6___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Help", id: "gui.connection.unavailable.helpbutton" }))))); UnavailableStep.propTypes = { onHelp: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onScanning: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (UnavailableStep); /***/ }), /***/ "./src/components/context-menu/context-menu.css": /*!******************************************************!*\ !*** ./src/components/context-menu/context-menu.css ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./context-menu.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/context-menu/context-menu.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/context-menu/context-menu.jsx": /*!******************************************************!*\ !*** ./src/components/context-menu/context-menu.jsx ***! \******************************************************/ /*! exports provided: BorderedMenuItem, DangerousMenuItem, ContextMenu, MenuItem */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BorderedMenuItem", function() { return BorderedMenuItem; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DangerousMenuItem", function() { return DangerousMenuItem; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContextMenu", function() { return StyledContextMenu; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MenuItem", function() { return StyledMenuItem; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_contextmenu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-contextmenu */ "./node_modules/react-contextmenu/es6/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _context_menu_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./context-menu.css */ "./src/components/context-menu/context-menu.css"); /* harmony import */ var _context_menu_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_context_menu_css__WEBPACK_IMPORTED_MODULE_3__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const StyledContextMenu = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_contextmenu__WEBPACK_IMPORTED_MODULE_1__["ContextMenu"], _extends({}, props, { className: _context_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.contextMenu })); const StyledMenuItem = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_contextmenu__WEBPACK_IMPORTED_MODULE_1__["MenuItem"], _extends({}, props, { attributes: { className: _context_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.menuItem } })); const BorderedMenuItem = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_contextmenu__WEBPACK_IMPORTED_MODULE_1__["MenuItem"], _extends({}, props, { attributes: { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_context_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.menuItem, _context_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.menuItemBordered) } })); const DangerousMenuItem = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_contextmenu__WEBPACK_IMPORTED_MODULE_1__["MenuItem"], _extends({}, props, { attributes: { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_context_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.menuItem, _context_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.menuItemBordered, _context_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.menuItemDanger) } })); /***/ }), /***/ "./src/components/controls/controls.css": /*!**********************************************!*\ !*** ./src/components/controls/controls.css ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./controls.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/controls/controls.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/controls/controls.jsx": /*!**********************************************!*\ !*** ./src/components/controls/controls.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _green_flag_green_flag_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../green-flag/green-flag.jsx */ "./src/components/green-flag/green-flag.jsx"); /* harmony import */ var _pause_button_pause_button_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../pause-button/pause-button.jsx */ "./src/components/pause-button/pause-button.jsx"); /* harmony import */ var _stop_all_stop_all_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../stop-all/stop-all.jsx */ "./src/components/stop-all/stop-all.jsx"); /* harmony import */ var _turbo_mode_turbo_mode_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../turbo-mode/turbo-mode.jsx */ "./src/components/turbo-mode/turbo-mode.jsx"); /* harmony import */ var _tw_framerate_indicator_framerate_indicator_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../tw-framerate-indicator/framerate-indicator.jsx */ "./src/components/tw-framerate-indicator/framerate-indicator.jsx"); /* harmony import */ var _controls_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./controls.css */ "./src/components/controls/controls.css"); /* harmony import */ var _controls_css__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_controls_css__WEBPACK_IMPORTED_MODULE_9__); const _excluded = ["active", "paused", "className", "intl", "onGreenFlagClick", "onPauseButtonClick", "onStopAllClick", "turbo", "framerate", "interpolation", "isSmall"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ goTitle: { "id": "gui.controls.go", "defaultMessage": "Go" }, pauseTitle: { "id": "gui.controls.pause", "defaultMessage": "Pause" }, stopTitle: { "id": "gui.controls.stop", "defaultMessage": "Stop" } }); const Controls = function Controls(props) { const { active, paused, className, intl, onGreenFlagClick, onPauseButtonClick, onStopAllClick, turbo, framerate, interpolation, isSmall } = props, componentProps = _objectWithoutProperties(props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", _extends({ className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_controls_css__WEBPACK_IMPORTED_MODULE_9___default.a.controlsContainer, className) }, componentProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_green_flag_green_flag_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { active: active, title: intl.formatMessage(messages.goTitle), onClick: onGreenFlagClick }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_pause_button_pause_button_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { paused: paused, title: intl.formatMessage(messages.pauseTitle), onClick: onPauseButtonClick }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_stop_all_stop_all_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { active: active, title: intl.formatMessage(messages.stopTitle), onClick: onStopAllClick }), turbo ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_turbo_mode_turbo_mode_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { isSmall: isSmall }) : null, !isSmall && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_tw_framerate_indicator_framerate_indicator_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { framerate: framerate, interpolation: interpolation })); }; Controls.propTypes = { active: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, paused: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired, onGreenFlagClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onPauseButtonClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onStopAllClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, framerate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, interpolation: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isSmall: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, turbo: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; Controls.defaultProps = { active: false, turbo: false, isSmall: false }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Controls)); /***/ }), /***/ "./src/components/crash-message/crash-message.css": /*!********************************************************!*\ !*** ./src/components/crash-message/crash-message.css ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./crash-message.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/crash-message/crash-message.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/crash-message/crash-message.jsx": /*!********************************************************!*\ !*** ./src/components/crash-message/crash-message.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _crash_message_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./crash-message.css */ "./src/components/crash-message/crash-message.css"); /* harmony import */ var _crash_message_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_crash_message_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _reload_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./reload.svg */ "./src/components/crash-message/reload.svg"); /* harmony import */ var _reload_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_reload_svg__WEBPACK_IMPORTED_MODULE_5__); const CrashMessage = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _crash_message_css__WEBPACK_IMPORTED_MODULE_4___default.a.crashWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { className: _crash_message_css__WEBPACK_IMPORTED_MODULE_4___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _crash_message_css__WEBPACK_IMPORTED_MODULE_4___default.a.reloadIcon, src: _reload_svg__WEBPACK_IMPORTED_MODULE_5___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", { className: _crash_message_css__WEBPACK_IMPORTED_MODULE_4___default.a.header }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Oops! Something went wrong.", id: "gui.crashMessage.label" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: 'We are so sorry, but it looks like the page has crashed.' + ' Please refresh your page to try' + ' again.' + ' If the problem persists, please report this error to our Discord.', id: "tw.gui.crashMessage.description" })), props.errorMessage && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", { className: _crash_message_css__WEBPACK_IMPORTED_MODULE_4___default.a.errorMessage }, props.errorMessage), props.eventId && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Your error was logged with id {errorId}", id: "gui.crashMessage.errorNumber", values: { errorId: props.eventId } })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _crash_message_css__WEBPACK_IMPORTED_MODULE_4___default.a.reloadButton, onClick: props.onReload }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Reload", id: "gui.crashMessage.reload" })))); CrashMessage.propTypes = { eventId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, errorMessage: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, onReload: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (CrashMessage); /***/ }), /***/ "./src/components/crash-message/reload.svg": /*!*************************************************!*\ !*** ./src/components/crash-message/reload.svg ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/dd98971c2c185caf86144b6b5234d0fa.svg"; /***/ }), /***/ "./src/components/custom-procedures/custom-procedures.css": /*!****************************************************************!*\ !*** ./src/components/custom-procedures/custom-procedures.css ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./custom-procedures.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/custom-procedures/custom-procedures.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/custom-procedures/custom-procedures.jsx": /*!****************************************************************!*\ !*** ./src/components/custom-procedures/custom-procedures.jsx ***! \****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _icon_dropper_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./icon--dropper.svg */ "./src/components/custom-procedures/icon--dropper.svg"); /* harmony import */ var _icon_dropper_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_icon_dropper_svg__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _icon_boolean_input_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./icon--boolean-input.svg */ "./src/components/custom-procedures/icon--boolean-input.svg"); /* harmony import */ var _icon_boolean_input_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_icon_boolean_input_svg__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _icon_text_input_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./icon--text-input.svg */ "./src/components/custom-procedures/icon--text-input.svg"); /* harmony import */ var _icon_text_input_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_icon_text_input_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _icon_label_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./icon--label.svg */ "./src/components/custom-procedures/icon--label.svg"); /* harmony import */ var _icon_label_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_icon_label_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _icon_stack_block_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./icon--stack-block.svg */ "./src/components/custom-procedures/icon--stack-block.svg"); /* harmony import */ var _icon_stack_block_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_icon_stack_block_svg__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _icon_terminal_block_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./icon--terminal-block.svg */ "./src/components/custom-procedures/icon--terminal-block.svg"); /* harmony import */ var _icon_terminal_block_svg__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_icon_terminal_block_svg__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _icon_reporter_block_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./icon--reporter-block.svg */ "./src/components/custom-procedures/icon--reporter-block.svg"); /* harmony import */ var _icon_reporter_block_svg__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_icon_reporter_block_svg__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _icon_boolean_block_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./icon--boolean-block.svg */ "./src/components/custom-procedures/icon--boolean-block.svg"); /* harmony import */ var _icon_boolean_block_svg__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_icon_boolean_block_svg__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./custom-procedures.css */ "./src/components/custom-procedures/custom-procedures.css"); /* harmony import */ var _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_custom_procedures_css__WEBPACK_IMPORTED_MODULE_13__); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({ myblockModalTitle: { "id": "gui.customProcedures.myblockModalTitle", "defaultMessage": "Make a Block" } }); const BlockColorSection = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.colorPickerArea }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#4C97FF" }, onClick: () => props.setHexBlockColor("#4C97FF") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#9966FF" }, onClick: () => props.setHexBlockColor("#9966FF") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#CF63CF" }, onClick: () => props.setHexBlockColor("#CF63CF") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#FFBF00" }, onClick: () => props.setHexBlockColor("#FFBF00") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#FFAB19" }, onClick: () => props.setHexBlockColor("#FFAB19") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#5CB1D6" }, onClick: () => props.setHexBlockColor("#5CB1D6") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#59C059" }, onClick: () => props.setHexBlockColor("#59C059") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#FF8C1A" }, onClick: () => props.setHexBlockColor("#FF8C1A") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#FF661A" }, onClick: () => props.setHexBlockColor("#FF661A") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#FF6680" }, onClick: () => props.setHexBlockColor("#FF6680") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#0FBD8C" }, onClick: () => props.setHexBlockColor("#0FBD8C") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#FF4C4C" }, onClick: () => props.setHexBlockColor("#FF4C4C") })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#FF8080" }, onClick: () => props.setHexBlockColor("#FF8080") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#FFB980" }, onClick: () => props.setHexBlockColor("#FFB980") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#FFF480" }, onClick: () => props.setHexBlockColor("#FFF480") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#8EFF80" }, onClick: () => props.setHexBlockColor("#8EFF80") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#80FFBD" }, onClick: () => props.setHexBlockColor("#80FFBD") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#80EAFF" }, onClick: () => props.setHexBlockColor("#80EAFF") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#80C1FF" }, onClick: () => props.setHexBlockColor("#80C1FF") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#8084FF" }, onClick: () => props.setHexBlockColor("#8084FF") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#D375FF" }, onClick: () => props.setHexBlockColor("#D375FF") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#FF8AFF" }, onClick: () => props.setHexBlockColor("#FF8AFF") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, style: { background: "#BBBBBB" }, onClick: () => props.setHexBlockColor("#BBBBBB") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.parentCustom }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", { type: "color", value: props.blockColor, className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.presetColor, onChange: props.onBlockColorChange }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { src: _icon_dropper_svg__WEBPACK_IMPORTED_MODULE_5___default.a, className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.customPlus })))); const CustomProcedures = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { scrollable: true, className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.modalContent, contentLabel: props.intl.formatMessage(messages.myblockModalTitle), onRequestClose: props.onCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.workspace, componentRef: props.componentRef }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionsRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionCard, role: "button", tabIndex: "0", onClick: props.onAddTextNumber }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionIcon, src: _icon_text_input_svg__WEBPACK_IMPORTED_MODULE_7___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionTitle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Add an input", id: "gui.customProcedures.addAnInputNumberText" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionDescription }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "number or text", id: "gui.customProcedures.numberTextType" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionCard, role: "button", tabIndex: "0", onClick: props.onAddBoolean }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionIcon, src: _icon_boolean_input_svg__WEBPACK_IMPORTED_MODULE_6___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionTitle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Add an input", id: "gui.customProcedures.addAnInputBoolean" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionDescription }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "boolean", id: "gui.customProcedures.booleanType" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionCard, role: "button", tabIndex: "0", onClick: props.onAddCommand, style: { display: "none" } //shhh }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionIcon, src: _icon_stack_block_svg__WEBPACK_IMPORTED_MODULE_9___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionTitle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Add an input", id: "gui.customProcedures.addAnInputCommand" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionDescription }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "command", id: "gui.customProcedures.commandType" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionCard, role: "button", tabIndex: "0", onClick: props.onAddLabel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionIcon, src: _icon_label_svg__WEBPACK_IMPORTED_MODULE_8___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionTitle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Add a label", id: "gui.customProcedures.addALabel" })))), !props.editing && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionsRow, style: { marginTop: '1em' } }, props.returns ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionCard, role: "button", tabIndex: "0", onClick: () => props.onOutputTypeChanged('string') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionIcon, src: _icon_reporter_block_svg__WEBPACK_IMPORTED_MODULE_11___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionTitle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Return Text or Number", id: "gui.customProcedures.returnText" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionCard, role: "button", tabIndex: "0", onClick: () => props.onOutputTypeChanged('boolean') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionIcon, src: _icon_boolean_block_svg__WEBPACK_IMPORTED_MODULE_12___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionTitle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Return a Boolean", id: "gui.customProcedures.returnABoolean" })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionCard, role: "button", tabIndex: "0", onClick: () => props.onOutputTypeChanged('statement') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionIcon, src: _icon_stack_block_svg__WEBPACK_IMPORTED_MODULE_9___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionTitle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Normal block", id: "gui.customProcedures.normalBlock" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionCard, role: "button", tabIndex: "0", onClick: () => props.onOutputTypeChanged('end') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionIcon, src: _icon_terminal_block_svg__WEBPACK_IMPORTED_MODULE_10___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.optionTitle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Ending block", id: "gui.customProcedures.endingBlock" }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(BlockColorSection, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.checkboxRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", { checked: props.warp, type: "checkbox", onChange: props.onToggleWarp }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Run without screen refresh", id: "gui.customProcedures.runWithoutScreenRefresh" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("br", null), !props.editing ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", { checked: props.returns, type: "checkbox", onChange: props.onToggleReturns }), "Returns a value")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.buttonRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.cancelButton, onClick: props.onCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Cancel", id: "gui.customProcedures.cancel" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_13___default.a.okButton, onClick: props.onOk }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "OK", id: "gui.customProcedures.ok" }))))); CustomProcedures.propTypes = { componentRef: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"], onAddBoolean: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onAddCommand: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onAddLabel: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onAddTextNumber: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onOk: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onToggleWarp: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onToggleReturns: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, warp: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, returns: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, editing: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, selectedType: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, onOutputTypeChanged: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(CustomProcedures)); /***/ }), /***/ "./src/components/custom-procedures/icon--boolean-block.svg": /*!******************************************************************!*\ !*** ./src/components/custom-procedures/icon--boolean-block.svg ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/88a3bec89367b65d176c22eef8c6ddcd.svg"; /***/ }), /***/ "./src/components/custom-procedures/icon--boolean-input.svg": /*!******************************************************************!*\ !*** ./src/components/custom-procedures/icon--boolean-input.svg ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/10811a978de201353d564df7ba1ddb58.svg"; /***/ }), /***/ "./src/components/custom-procedures/icon--dropper.svg": /*!************************************************************!*\ !*** ./src/components/custom-procedures/icon--dropper.svg ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7bf301e0e47ee990a3572e0aea2f850e.svg"; /***/ }), /***/ "./src/components/custom-procedures/icon--label.svg": /*!**********************************************************!*\ !*** ./src/components/custom-procedures/icon--label.svg ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/8beb9da10f72d02b48baf0b24ac72449.svg"; /***/ }), /***/ "./src/components/custom-procedures/icon--reporter-block.svg": /*!*******************************************************************!*\ !*** ./src/components/custom-procedures/icon--reporter-block.svg ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/58d1104d0922e424a0b0d4a27e6ed826.svg"; /***/ }), /***/ "./src/components/custom-procedures/icon--stack-block.svg": /*!****************************************************************!*\ !*** ./src/components/custom-procedures/icon--stack-block.svg ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/999649b8d77ea4f04e0dca31326090c1.svg"; /***/ }), /***/ "./src/components/custom-procedures/icon--terminal-block.svg": /*!*******************************************************************!*\ !*** ./src/components/custom-procedures/icon--terminal-block.svg ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/acf8e02623682856899b55f10f66e212.svg"; /***/ }), /***/ "./src/components/custom-procedures/icon--text-input.svg": /*!***************************************************************!*\ !*** ./src/components/custom-procedures/icon--text-input.svg ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/2a70b21aaaed0619bdfcdec91db1ebe8.svg"; /***/ }), /***/ "./src/components/delete-button/delete-button.css": /*!********************************************************!*\ !*** ./src/components/delete-button/delete-button.css ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./delete-button.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/delete-button/delete-button.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/delete-button/delete-button.jsx": /*!********************************************************!*\ !*** ./src/components/delete-button/delete-button.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _delete_button_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./delete-button.css */ "./src/components/delete-button/delete-button.css"); /* harmony import */ var _delete_button_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_delete_button_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _icon_delete_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./icon--delete.svg */ "./src/components/delete-button/icon--delete.svg"); /* harmony import */ var _icon_delete_svg__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_icon_delete_svg__WEBPACK_IMPORTED_MODULE_4__); const DeleteButton = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { "aria-label": "Delete", className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_delete_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.deleteButton, props.className), role: "button", tabIndex: props.tabIndex, onClick: props.onClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _delete_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.deleteButtonVisible }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _delete_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.deleteIcon, src: _icon_delete_svg__WEBPACK_IMPORTED_MODULE_4___default.a, draggable: "false" }))); DeleteButton.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, onClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, tabIndex: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }; DeleteButton.defaultProps = { tabIndex: 0 }; /* harmony default export */ __webpack_exports__["default"] = (DeleteButton); /***/ }), /***/ "./src/components/delete-button/icon--delete.svg": /*!*******************************************************!*\ !*** ./src/components/delete-button/icon--delete.svg ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/a5787bb7364d8131ed49a8f53037d7f4.svg"; /***/ }), /***/ "./src/components/direction-picker/dial.css": /*!**************************************************!*\ !*** ./src/components/direction-picker/dial.css ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./dial.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/direction-picker/dial.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/direction-picker/dial.jsx": /*!**************************************************!*\ !*** ./src/components/direction-picker/dial.jsx ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _lib_touch_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../lib/touch-utils */ "./src/lib/touch-utils.js"); /* harmony import */ var _dial_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dial.css */ "./src/components/direction-picker/dial.css"); /* harmony import */ var _dial_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_dial_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _icon_dial_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./icon--dial.svg */ "./src/components/direction-picker/icon--dial.svg"); /* harmony import */ var _icon_dial_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_icon_dial_svg__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _icon_handle_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./icon--handle.svg */ "./src/components/direction-picker/icon--handle.svg"); /* harmony import */ var _icon_handle_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_icon_handle_svg__WEBPACK_IMPORTED_MODULE_6__); class Dial extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_1___default()(this, ['handleMouseDown', 'handleMouseMove', 'containerRef', 'handleRef', 'unbindMouseEvents']); } componentDidMount() { // Manually add touch/mouse handlers so that preventDefault can be used // to prevent scrolling on touch. // Tracked as a react issue https://github.com/facebook/react/issues/6436 this.handleElement.addEventListener('mousedown', this.handleMouseDown); this.handleElement.addEventListener('touchstart', this.handleMouseDown); } componentWillUnmount() { this.unbindMouseEvents(); this.handleElement.removeEventListener('mousedown', this.handleMouseDown); this.handleElement.removeEventListener('touchstart', this.handleMouseDown); } /** * Get direction from dial center to mouse move event. * @param {Event} e - Mouse move event. * @returns {number} Direction in degrees, clockwise, 90=horizontal. */ directionToMouseEvent(e) { const { x: mx, y: my } = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_3__["getEventXY"])(e); const bbox = this.containerElement.getBoundingClientRect(); const cy = bbox.top + bbox.height / 2; const cx = bbox.left + bbox.width / 2; const angle = Math.atan2(my - cy, mx - cx); const degrees = angle * (180 / Math.PI); return degrees + 90; // To correspond with scratch coordinate system } /** * Create SVG path data string for the dial "gauge", the overlaid arc slice. * @param {number} radius - The radius of the dial. * @param {number} direction - Direction in degrees, clockwise, 90=horizontal. * @returns {string} Path data string for the gauge. */ gaugePath(radius, direction) { const rads = direction * (Math.PI / 180); const path = []; path.push("M ".concat(radius, " 0")); path.push("L ".concat(radius, " ").concat(radius)); path.push("L ".concat(radius + radius * Math.sin(rads), " ").concat(radius - radius * Math.cos(rads))); path.push("A ".concat(radius, " ").concat(radius, " 0 0 ").concat(direction < 0 ? 1 : 0, " ").concat(radius, " 0")); path.push("Z"); return path.join(' '); } handleMouseMove(e) { this.props.onChange(this.directionToMouseEvent(e) + this.directionOffset); e.preventDefault(); } unbindMouseEvents() { window.removeEventListener('mousemove', this.handleMouseMove); window.removeEventListener('mouseup', this.unbindMouseEvents); window.removeEventListener('touchmove', this.handleMouseMove); window.removeEventListener('touchend', this.unbindMouseEvents); } handleMouseDown(e) { // Because the drag handle is not a single point, there is some initial // difference between the current sprite direction and the direction to the mouse // Store this offset to prevent jumping when the mouse is moved. this.directionOffset = this.props.direction - this.directionToMouseEvent(e); window.addEventListener('mousemove', this.handleMouseMove); window.addEventListener('mouseup', this.unbindMouseEvents); window.addEventListener('touchmove', this.handleMouseMove); window.addEventListener('touchend', this.unbindMouseEvents); e.preventDefault(); } containerRef(el) { this.containerElement = el; } handleRef(el) { this.handleElement = el; } render() { const { direction, radius } = this.props; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _dial_css__WEBPACK_IMPORTED_MODULE_4___default.a.container }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _dial_css__WEBPACK_IMPORTED_MODULE_4___default.a.dialContainer, ref: this.containerRef, style: { width: "".concat(radius * 2, "px"), height: "".concat(radius * 2, "px") } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _dial_css__WEBPACK_IMPORTED_MODULE_4___default.a.dialFace, draggable: false, src: _icon_dial_svg__WEBPACK_IMPORTED_MODULE_5___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("svg", { className: _dial_css__WEBPACK_IMPORTED_MODULE_4___default.a.gauge, height: radius * 2, width: radius * 2 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("path", { className: _dial_css__WEBPACK_IMPORTED_MODULE_4___default.a.gaugePath, d: this.gaugePath(radius, direction) })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _dial_css__WEBPACK_IMPORTED_MODULE_4___default.a.dialHandle, draggable: false, ref: this.handleRef, src: _icon_handle_svg__WEBPACK_IMPORTED_MODULE_6___default.a, style: { top: "".concat(radius - radius * Math.cos(direction * (Math.PI / 180)), "px"), left: "".concat(radius + radius * Math.sin(direction * (Math.PI / 180)), "px"), transform: "rotate(".concat(direction, "deg)") } }))); } } Dial.propTypes = { direction: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, onChange: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, radius: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }; Dial.defaultProps = { direction: 90, // degrees radius: 56 // px }; /* harmony default export */ __webpack_exports__["default"] = (Dial); /***/ }), /***/ "./src/components/direction-picker/direction-picker.css": /*!**************************************************************!*\ !*** ./src/components/direction-picker/direction-picker.css ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./direction-picker.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/direction-picker/direction-picker.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/direction-picker/direction-picker.jsx": /*!**************************************************************!*\ !*** ./src/components/direction-picker/direction-picker.jsx ***! \**************************************************************/ /*! exports provided: default, RotationStyles */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return WrappedDirectionPicker; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RotationStyles", function() { return RotationStyles; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_popover__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-popover */ "./node_modules/react-popover/index.js"); /* harmony import */ var react_popover__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_popover__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _forms_label_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../forms/label.jsx */ "./src/components/forms/label.jsx"); /* harmony import */ var _forms_input_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../forms/input.jsx */ "./src/components/forms/input.jsx"); /* harmony import */ var _forms_buffered_input_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../forms/buffered-input-hoc.jsx */ "./src/components/forms/buffered-input-hoc.jsx"); /* harmony import */ var _dial_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dial.jsx */ "./src/components/direction-picker/dial.jsx"); /* harmony import */ var _direction_picker_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./direction-picker.css */ "./src/components/direction-picker/direction-picker.css"); /* harmony import */ var _direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_direction_picker_css__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _icon_all_around_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./icon--all-around.svg */ "./src/components/direction-picker/icon--all-around.svg"); /* harmony import */ var _icon_all_around_svg__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_icon_all_around_svg__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _icon_left_right_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./icon--left-right.svg */ "./src/components/direction-picker/icon--left-right.svg"); /* harmony import */ var _icon_left_right_svg__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_icon_left_right_svg__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _icon_up_down_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./icon--up-down.svg */ "./src/components/direction-picker/icon--up-down.svg"); /* harmony import */ var _icon_up_down_svg__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_icon_up_down_svg__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var _icon_dont_rotate_svg__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./icon--dont-rotate.svg */ "./src/components/direction-picker/icon--dont-rotate.svg"); /* harmony import */ var _icon_dont_rotate_svg__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_icon_dont_rotate_svg__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var _icon_look_at_svg__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./icon--look-at.svg */ "./src/components/direction-picker/icon--look-at.svg"); /* harmony import */ var _icon_look_at_svg__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_icon_look_at_svg__WEBPACK_IMPORTED_MODULE_14__); const BufferedInput = Object(_forms_buffered_input_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__["default"])(_forms_input_jsx__WEBPACK_IMPORTED_MODULE_6__["default"]); const directionLabel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Direction", id: "gui.SpriteInfo.direction" }); const RotationStyles = { ALL_AROUND: 'all around', LOOK_AT: 'look at', LEFT_RIGHT: 'left-right', UP_DOWN: 'up-down', DONT_ROTATE: "don't rotate" }; const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({ allAround: { "id": "gui.directionPicker.rotationStyles.allAround", "defaultMessage": "All Around" }, lookAt: { "id": "gui.directionPicker.rotationStyles.lookAt", "defaultMessage": "Look At" }, leftRight: { "id": "gui.directionPicker.rotationStyles.leftRight", "defaultMessage": "Left/Right" }, upDown: { "id": "gui.directionPicker.rotationStyles.upDown", "defaultMessage": "Up/Down" }, dontRotate: { "id": "gui.directionPicker.rotationStyles.dontRotate", "defaultMessage": "Do not rotate" } }); const DirectionPicker = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_forms_label_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { secondary: true, above: props.labelAbove, text: directionLabel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_popover__WEBPACK_IMPORTED_MODULE_3___default.a, { body: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_dial_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { direction: props.direction, onChange: props.onChangeDirection }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.buttonRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.iconButton, { [_direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.active]: props.rotationStyle === RotationStyles.ALL_AROUND }), title: props.intl.formatMessage(messages.allAround), onClick: props.onClickAllAround }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { draggable: false, src: _icon_all_around_svg__WEBPACK_IMPORTED_MODULE_10___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.iconButton, { [_direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.active]: props.rotationStyle === RotationStyles.LOOK_AT }), title: props.intl.formatMessage(messages.lookAt), onClick: props.onClickLookAt }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { draggable: false, src: _icon_look_at_svg__WEBPACK_IMPORTED_MODULE_14___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.iconButton, { [_direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.active]: props.rotationStyle === RotationStyles.LEFT_RIGHT }), title: props.intl.formatMessage(messages.leftRight), onClick: props.onClickLeftRight }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { draggable: false, src: _icon_left_right_svg__WEBPACK_IMPORTED_MODULE_11___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.iconButton, { [_direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.active]: props.rotationStyle === RotationStyles.UP_DOWN }), title: props.intl.formatMessage(messages.upDown), onClick: props.onClickUpDown }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { draggable: false, src: _icon_up_down_svg__WEBPACK_IMPORTED_MODULE_12___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.iconButton, { [_direction_picker_css__WEBPACK_IMPORTED_MODULE_9___default.a.active]: props.rotationStyle === RotationStyles.DONT_ROTATE }), title: props.intl.formatMessage(messages.dontRotate), onClick: props.onClickDontRotate }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { draggable: false, src: _icon_dont_rotate_svg__WEBPACK_IMPORTED_MODULE_13___default.a })))), isOpen: props.popoverOpen, preferPlace: "above", onOuterAction: props.onClosePopover }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(BufferedInput, { small: true, disabled: props.disabled, label: directionLabel, tabIndex: "0", type: "text", value: props.disabled ? '' : props.direction, onFocus: props.onOpenPopover, onSubmit: props.onChangeDirection }))); DirectionPicker.propTypes = { direction: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"], labelAbove: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onChangeDirection: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickAllAround: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickDontRotate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickLeftRight: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickLookAt: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickUpDown: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClosePopover: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onOpenPopover: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, popoverOpen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, rotationStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; DirectionPicker.defaultProps = { labelAbove: false }; const WrappedDirectionPicker = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(DirectionPicker); /***/ }), /***/ "./src/components/direction-picker/icon--all-around.svg": /*!**************************************************************!*\ !*** ./src/components/direction-picker/icon--all-around.svg ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/ac6d4216d424b165ba317fe4e997d6da.svg"; /***/ }), /***/ "./src/components/direction-picker/icon--dial.svg": /*!********************************************************!*\ !*** ./src/components/direction-picker/icon--dial.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/fa945ee6723e936790970b40e6d3fe1f.svg"; /***/ }), /***/ "./src/components/direction-picker/icon--dont-rotate.svg": /*!***************************************************************!*\ !*** ./src/components/direction-picker/icon--dont-rotate.svg ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7569623cd83d4ceab6b37c1541d656af.svg"; /***/ }), /***/ "./src/components/direction-picker/icon--handle.svg": /*!**********************************************************!*\ !*** ./src/components/direction-picker/icon--handle.svg ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/5d308ce375ea6edae5abf4e33eda07f3.svg"; /***/ }), /***/ "./src/components/direction-picker/icon--left-right.svg": /*!**************************************************************!*\ !*** ./src/components/direction-picker/icon--left-right.svg ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/79d588614c7827f6ac6620014b0eb078.svg"; /***/ }), /***/ "./src/components/direction-picker/icon--look-at.svg": /*!***********************************************************!*\ !*** ./src/components/direction-picker/icon--look-at.svg ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/d79bf4bbb8df5542ffef65d9e61b37ed.svg"; /***/ }), /***/ "./src/components/direction-picker/icon--up-down.svg": /*!***********************************************************!*\ !*** ./src/components/direction-picker/icon--up-down.svg ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/78d48375d26960c3ac4fe82387055621.svg"; /***/ }), /***/ "./src/components/divider/divider.css": /*!********************************************!*\ !*** ./src/components/divider/divider.css ***! \********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./divider.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/divider/divider.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/divider/divider.jsx": /*!********************************************!*\ !*** ./src/components/divider/divider.jsx ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _divider_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./divider.css */ "./src/components/divider/divider.css"); /* harmony import */ var _divider_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_divider_css__WEBPACK_IMPORTED_MODULE_3__); const Divider = _ref => { let { className } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_divider_css__WEBPACK_IMPORTED_MODULE_3___default.a.divider, className) }); }; Divider.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (Divider); /***/ }), /***/ "./src/components/drag-layer/drag-layer.css": /*!**************************************************!*\ !*** ./src/components/drag-layer/drag-layer.css ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./drag-layer.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/drag-layer/drag-layer.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/drag-layer/drag-layer.jsx": /*!**************************************************!*\ !*** ./src/components/drag-layer/drag-layer.jsx ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _drag_layer_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./drag-layer.css */ "./src/components/drag-layer/drag-layer.css"); /* harmony import */ var _drag_layer_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_drag_layer_css__WEBPACK_IMPORTED_MODULE_2__); /* eslint no-confusing-arrow: ["error", {"allowParens": true}] */ const DragLayer = _ref => { let { dragging, img, currentOffset } = _ref; return dragging ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _drag_layer_css__WEBPACK_IMPORTED_MODULE_2___default.a.dragLayer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _drag_layer_css__WEBPACK_IMPORTED_MODULE_2___default.a.imageWrapper, style: { transform: "translate(".concat(currentOffset.x, "px, ").concat(currentOffset.y, "px)") } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { className: _drag_layer_css__WEBPACK_IMPORTED_MODULE_2___default.a.image, src: img }))) : null; }; DragLayer.propTypes = { currentOffset: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ x: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, y: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired }), dragging: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, img: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (DragLayer); /***/ }), /***/ "./src/components/filter/filter.css": /*!******************************************!*\ !*** ./src/components/filter/filter.css ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./filter.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/filter/filter.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/filter/filter.jsx": /*!******************************************!*\ !*** ./src/components/filter/filter.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _icon_filter_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icon--filter.svg */ "./src/components/filter/icon--filter.svg"); /* harmony import */ var _icon_filter_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_icon_filter_svg__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _icon_x_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./icon--x.svg */ "./src/components/filter/icon--x.svg"); /* harmony import */ var _icon_x_svg__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_icon_x_svg__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _filter_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./filter.css */ "./src/components/filter/filter.css"); /* harmony import */ var _filter_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_filter_css__WEBPACK_IMPORTED_MODULE_5__); const FilterComponent = props => { const { className, onChange, onClear, placeholderText, filterQuery, inputClassName } = props; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(className, _filter_css__WEBPACK_IMPORTED_MODULE_5___default.a.filter, { [_filter_css__WEBPACK_IMPORTED_MODULE_5___default.a.isActive]: filterQuery.length > 0 }) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _filter_css__WEBPACK_IMPORTED_MODULE_5___default.a.filterIcon, src: _icon_filter_svg__WEBPACK_IMPORTED_MODULE_3___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("input", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_filter_css__WEBPACK_IMPORTED_MODULE_5___default.a.filterInput, inputClassName), placeholder: placeholderText, type: "text", value: filterQuery, onChange: onChange }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _filter_css__WEBPACK_IMPORTED_MODULE_5___default.a.xIconWrapper, onClick: onClear }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _filter_css__WEBPACK_IMPORTED_MODULE_5___default.a.xIcon, src: _icon_x_svg__WEBPACK_IMPORTED_MODULE_4___default.a }))); }; FilterComponent.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, filterQuery: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, inputClassName: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onClear: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, placeholderText: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; FilterComponent.defaultProps = { placeholderText: 'Search' }; /* harmony default export */ __webpack_exports__["default"] = (FilterComponent); /***/ }), /***/ "./src/components/filter/icon--filter.svg": /*!************************************************!*\ !*** ./src/components/filter/icon--filter.svg ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/d8cbb86bdb5ce2ba9f2ed0975f51231e.svg"; /***/ }), /***/ "./src/components/filter/icon--x.svg": /*!*******************************************!*\ !*** ./src/components/filter/icon--x.svg ***! \*******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/0c19152025f432ddd7d67c039d328f26.svg"; /***/ }), /***/ "./src/components/forms/buffered-input-hoc.jsx": /*!*****************************************************!*\ !*** ./src/components/forms/buffered-input-hoc.jsx ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /** * Higher Order Component to manage inputs that submit on blur and * @param {React.Component} Input text input that consumes onChange, onBlur, onKeyPress * @returns {React.Component} Buffered input that calls onSubmit on blur and */ /* harmony default export */ __webpack_exports__["default"] = (function (Input) { class BufferedInput extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleChange', 'handleKeyPress', 'handleFlush']); this.state = { value: null }; } handleKeyPress(e) { if (e.key === 'Enter') { this.handleFlush(); e.target.blur(); } } handleFlush() { const isNumeric = typeof this.props.value === 'number'; const validatesNumeric = isNumeric ? !isNaN(this.state.value) : true; if (this.state.value !== null && validatesNumeric) { this.props.onSubmit(isNumeric ? Number(this.state.value) : this.state.value); } this.setState({ value: null }); } handleChange(e) { this.setState({ value: e.target.value }); } render() { const bufferedValue = this.state.value === null ? this.props.value : this.state.value; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Input, _extends({}, this.props, { value: bufferedValue, onBlur: this.handleFlush, onChange: this.handleChange, onKeyPress: this.handleKeyPress })); } } BufferedInput.propTypes = { onSubmit: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]) }; return BufferedInput; }); /***/ }), /***/ "./src/components/forms/input.css": /*!****************************************!*\ !*** ./src/components/forms/input.css ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./input.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/forms/input.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/forms/input.jsx": /*!****************************************!*\ !*** ./src/components/forms/input.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _input_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./input.css */ "./src/components/forms/input.css"); /* harmony import */ var _input_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_input_css__WEBPACK_IMPORTED_MODULE_3__); const _excluded = ["small"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const Input = props => { const { small } = props, componentProps = _objectWithoutProperties(props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", _extends({}, componentProps, { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_input_css__WEBPACK_IMPORTED_MODULE_3___default.a.inputForm, props.className, { [_input_css__WEBPACK_IMPORTED_MODULE_3___default.a.inputSmall]: small }) })); }; Input.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, small: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool }; Input.defaultProps = { small: false }; /* harmony default export */ __webpack_exports__["default"] = (Input); /***/ }), /***/ "./src/components/forms/label.css": /*!****************************************!*\ !*** ./src/components/forms/label.css ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./label.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/forms/label.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/forms/label.jsx": /*!****************************************!*\ !*** ./src/components/forms/label.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _label_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./label.css */ "./src/components/forms/label.css"); /* harmony import */ var _label_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_label_css__WEBPACK_IMPORTED_MODULE_2__); const Label = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", { className: props.above ? _label_css__WEBPACK_IMPORTED_MODULE_2___default.a.inputGroupColumn : _label_css__WEBPACK_IMPORTED_MODULE_2___default.a.inputGroup }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: props.secondary ? _label_css__WEBPACK_IMPORTED_MODULE_2___default.a.inputLabelSecondary : _label_css__WEBPACK_IMPORTED_MODULE_2___default.a.inputLabel }, props.text), props.children); Label.propTypes = { above: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, children: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node, secondary: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, text: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node]).isRequired }; Label.defaultProps = { above: false, secondary: false }; /* harmony default export */ __webpack_exports__["default"] = (Label); /***/ }), /***/ "./src/components/green-flag/green-flag.css": /*!**************************************************!*\ !*** ./src/components/green-flag/green-flag.css ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./green-flag.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/green-flag/green-flag.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/green-flag/green-flag.jsx": /*!**************************************************!*\ !*** ./src/components/green-flag/green-flag.jsx ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _stage_header_stagecontrols_flag_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../stage-header/stagecontrols/flag.svg */ "./src/components/stage-header/stagecontrols/flag.svg"); /* harmony import */ var _stage_header_stagecontrols_flag_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_stage_header_stagecontrols_flag_svg__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _green_flag_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./green-flag.css */ "./src/components/green-flag/green-flag.css"); /* harmony import */ var _green_flag_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_green_flag_css__WEBPACK_IMPORTED_MODULE_4__); const _excluded = ["active", "className", "onClick", "title"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const GreenFlagComponent = function GreenFlagComponent(props) { const { active, className, onClick, title } = props, componentProps = _objectWithoutProperties(props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", _extends({ className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(className, _green_flag_css__WEBPACK_IMPORTED_MODULE_4___default.a.greenFlag, { [_green_flag_css__WEBPACK_IMPORTED_MODULE_4___default.a.isActive]: active }), draggable: false, src: _stage_header_stagecontrols_flag_svg__WEBPACK_IMPORTED_MODULE_3___default.a, title: title, onClick: onClick // tw: also fire click when opening context menu (right click on all systems and alt+click on chromebooks) , onContextMenu: onClick }, componentProps)); }; GreenFlagComponent.propTypes = { active: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; GreenFlagComponent.defaultProps = { active: false, title: 'Go' }; /* harmony default export */ __webpack_exports__["default"] = (GreenFlagComponent); /***/ }), /***/ "./src/components/gui/add-tab.svg": /*!****************************************!*\ !*** ./src/components/gui/add-tab.svg ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/622321b437cc79dd9ed885540a94505a.svg"; /***/ }), /***/ "./src/components/gui/gui.css": /*!************************************!*\ !*** ./src/components/gui/gui.css ***! \************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./gui.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/gui/gui.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/gui/gui.jsx": /*!************************************!*\ !*** ./src/components/gui/gui.jsx ***! \************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.omit */ "./node_modules/lodash.omit/index.js"); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_omit__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react_draggable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-draggable */ "./node_modules/react-draggable/dist/react-draggable.js"); /* harmony import */ var react_draggable__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_draggable__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var react_contextmenu__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-contextmenu */ "./node_modules/react-contextmenu/es6/index.js"); /* harmony import */ var _context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../context-menu/context-menu.jsx */ "./src/components/context-menu/context-menu.jsx"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var react_responsive__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-responsive */ "./node_modules/react-responsive/dist/react-responsive.js"); /* harmony import */ var react_responsive__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react_responsive__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var react_tabs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-tabs */ "./node_modules/react-tabs/esm/index.js"); /* harmony import */ var react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react-tabs/style/react-tabs.css */ "./node_modules/react-tabs/style/react-tabs.css"); /* harmony import */ var react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var scratch_render__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! scratch-render */ "./node_modules/scratch-render/src/index.js"); /* harmony import */ var scratch_render__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(scratch_render__WEBPACK_IMPORTED_MODULE_14__); /* harmony import */ var _containers_blocks_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../containers/blocks.jsx */ "./src/containers/blocks.jsx"); /* harmony import */ var _containers_costume_tab_jsx__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../containers/costume-tab.jsx */ "./src/containers/costume-tab.jsx"); /* harmony import */ var _containers_target_pane_jsx__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../containers/target-pane.jsx */ "./src/containers/target-pane.jsx"); /* harmony import */ var _containers_sound_tab_jsx__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../containers/sound-tab.jsx */ "./src/containers/sound-tab.jsx"); /* harmony import */ var _containers_variables_tab_jsx__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../containers/variables-tab.jsx */ "./src/containers/variables-tab.jsx"); /* harmony import */ var _containers_files_tab_jsx__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../containers/files-tab.jsx */ "./src/containers/files-tab.jsx"); /* harmony import */ var _containers_stage_wrapper_jsx__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../containers/stage-wrapper.jsx */ "./src/containers/stage-wrapper.jsx"); /* harmony import */ var _loader_loader_jsx__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../loader/loader.jsx */ "./src/components/loader/loader.jsx"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _menu_bar_menu_bar_jsx__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../menu-bar/menu-bar.jsx */ "./src/components/menu-bar/menu-bar.jsx"); /* harmony import */ var _containers_costume_library_jsx__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../containers/costume-library.jsx */ "./src/containers/costume-library.jsx"); /* harmony import */ var _containers_backdrop_library_jsx__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../containers/backdrop-library.jsx */ "./src/containers/backdrop-library.jsx"); /* harmony import */ var _containers_watermark_jsx__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../containers/watermark.jsx */ "./src/containers/watermark.jsx"); /* harmony import */ var _containers_backpack_jsx__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../containers/backpack.jsx */ "./src/containers/backpack.jsx"); /* harmony import */ var _browser_modal_browser_modal_jsx__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../browser-modal/browser-modal.jsx */ "./src/components/browser-modal/browser-modal.jsx"); /* harmony import */ var _containers_tips_library_jsx__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../containers/tips-library.jsx */ "./src/containers/tips-library.jsx"); /* harmony import */ var _containers_cards_jsx__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../containers/cards.jsx */ "./src/containers/cards.jsx"); /* harmony import */ var _containers_alerts_jsx__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../containers/alerts.jsx */ "./src/containers/alerts.jsx"); /* harmony import */ var _containers_drag_layer_jsx__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../containers/drag-layer.jsx */ "./src/containers/drag-layer.jsx"); /* harmony import */ var _containers_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../containers/connection-modal.jsx */ "./src/containers/connection-modal.jsx"); /* harmony import */ var _telemetry_modal_telemetry_modal_jsx__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../telemetry-modal/telemetry-modal.jsx */ "./src/components/telemetry-modal/telemetry-modal.jsx"); /* harmony import */ var _containers_tw_username_modal_jsx__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../../containers/tw-username-modal.jsx */ "./src/containers/tw-username-modal.jsx"); /* harmony import */ var _containers_tw_settings_modal_jsx__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../../containers/tw-settings-modal.jsx */ "./src/containers/tw-settings-modal.jsx"); /* harmony import */ var _containers_tw_security_manager_jsx__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../../containers/tw-security-manager.jsx */ "./src/containers/tw-security-manager.jsx"); /* harmony import */ var _containers_tw_custom_extension_modal_jsx__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../../containers/tw-custom-extension-modal.jsx */ "./src/containers/tw-custom-extension-modal.jsx"); /* harmony import */ var _containers_tw_restore_point_manager_jsx__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../../containers/tw-restore-point-manager.jsx */ "./src/containers/tw-restore-point-manager.jsx"); /* harmony import */ var _containers_tw_fonts_modal_jsx__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../../containers/tw-fonts-modal.jsx */ "./src/containers/tw-fonts-modal.jsx"); /* harmony import */ var _containers_pm_extension_modals_jsx__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../../containers/pm-extension-modals.jsx */ "./src/containers/pm-extension-modals.jsx"); /* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../../lib/layout-constants */ "./src/lib/layout-constants.js"); /* harmony import */ var _lib_screen_utils__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../../lib/screen-utils */ "./src/lib/screen-utils.js"); /* harmony import */ var _lib_tw_environment_support_prober__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../../lib/tw-environment-support-prober */ "./src/lib/tw-environment-support-prober.js"); /* harmony import */ var _gui_css__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./gui.css */ "./src/components/gui/gui.css"); /* harmony import */ var _gui_css__WEBPACK_IMPORTED_MODULE_46___default = /*#__PURE__*/__webpack_require__.n(_gui_css__WEBPACK_IMPORTED_MODULE_46__); /* harmony import */ var _add_tab_svg__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./add-tab.svg */ "./src/components/gui/add-tab.svg"); /* harmony import */ var _add_tab_svg__WEBPACK_IMPORTED_MODULE_47___default = /*#__PURE__*/__webpack_require__.n(_add_tab_svg__WEBPACK_IMPORTED_MODULE_47__); /* harmony import */ var _icon_extensions_svg__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./icon--extensions.svg */ "./src/components/gui/icon--extensions.svg"); /* harmony import */ var _icon_extensions_svg__WEBPACK_IMPORTED_MODULE_48___default = /*#__PURE__*/__webpack_require__.n(_icon_extensions_svg__WEBPACK_IMPORTED_MODULE_48__); /* harmony import */ var _icon_code_svg__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./icon--code.svg */ "./src/components/gui/icon--code.svg"); /* harmony import */ var _icon_code_svg__WEBPACK_IMPORTED_MODULE_49___default = /*#__PURE__*/__webpack_require__.n(_icon_code_svg__WEBPACK_IMPORTED_MODULE_49__); /* harmony import */ var _icon_costumes_svg__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./icon--costumes.svg */ "./src/components/gui/icon--costumes.svg"); /* harmony import */ var _icon_costumes_svg__WEBPACK_IMPORTED_MODULE_50___default = /*#__PURE__*/__webpack_require__.n(_icon_costumes_svg__WEBPACK_IMPORTED_MODULE_50__); /* harmony import */ var _icon_sounds_svg__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./icon--sounds.svg */ "./src/components/gui/icon--sounds.svg"); /* harmony import */ var _icon_sounds_svg__WEBPACK_IMPORTED_MODULE_51___default = /*#__PURE__*/__webpack_require__.n(_icon_sounds_svg__WEBPACK_IMPORTED_MODULE_51__); /* harmony import */ var _icon_variables_svg__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./icon--variables.svg */ "./src/components/gui/icon--variables.svg"); /* harmony import */ var _icon_variables_svg__WEBPACK_IMPORTED_MODULE_52___default = /*#__PURE__*/__webpack_require__.n(_icon_variables_svg__WEBPACK_IMPORTED_MODULE_52__); /* harmony import */ var _icon_files_svg__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./icon--files.svg */ "./src/components/gui/icon--files.svg"); /* harmony import */ var _icon_files_svg__WEBPACK_IMPORTED_MODULE_53___default = /*#__PURE__*/__webpack_require__.n(_icon_files_svg__WEBPACK_IMPORTED_MODULE_53__); const _excluded = ["accountNavOpen", "activeTabIndex", "alertsVisible", "authorId", "authorThumbnailUrl", "authorUsername", "basePath", "backdropLibraryVisible", "backpackHost", "backpackVisible", "blocksTabVisible", "cardsVisible", "canChangeLanguage", "canCreateNew", "canEditTitle", "canManageFiles", "canRemix", "canSave", "canCreateCopy", "canShare", "canUseCloud", "children", "connectionModalVisible", "costumeLibraryVisible", "costumesTabVisible", "customStageSize", "enableCommunity", "intl", "isCreating", "isDark", "isEmbedded", "isFullScreen", "isPlayerOnly", "isRtl", "isShared", "isWindowFullScreen", "isTelemetryEnabled", "loading", "logo", "renderLogin", "onClickAbout", "onClickAccountNav", "onCloseAccountNav", "onClickAddonSettings", "onClickNewWindow", "onClickTheme", "onClickPackager", "onLogOut", "onOpenRegistration", "onToggleLoginOpen", "onActivateCostumesTab", "onActivateSoundsTab", "onActivateVariablesTab", "onActivateFilesTab", "onActivateTab", "onClickLogo", "onExtensionButtonClick", "onProjectTelemetryEvent", "onRequestCloseBackdropLibrary", "onRequestCloseCostumeLibrary", "onRequestCloseTelemetryModal", "onSeeCommunity", "onShare", "onShowPrivacyPolicy", "onStartSelectingFileUpload", "onStartFolderUpload", "onTelemetryModalCancel", "onTelemetryModalOptIn", "onTelemetryModalOptOut", "showComingSoon", "soundsTabVisible", "variablesTabVisible", "filesTabVisible", "stageSizeMode", "targetIsStage", "telemetryModalVisible", "tipsLibraryVisible", "usernameModalVisible", "settingsModalVisible", "customExtensionModalVisible", "fontsModalVisible", "isPlayground", "vm"], _excluded2 = ["children"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const urlParams = new URLSearchParams(location.search); const IsLocal = String(window.location.href).startsWith("http://localhost:"); const IsLiveTests = urlParams.has('livetests'); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_8__["defineMessages"])({ addExtension: { "id": "gui.gui.addExtension", "defaultMessage": "Add Extension" } }); const getFullscreenBackgroundColor = () => { const params = new URLSearchParams(location.search); if (params.has('fullscreen-background')) { return params.get('fullscreen-background'); } if (window.matchMedia('(prefers-color-scheme: dark)').matches) { return '#111'; } return 'white'; }; const safeJSONParse = (json, defaul, mustBeArray) => { try { const parsed = JSON.parse(json); if (mustBeArray && !Array.isArray(parsed)) throw 'Not array'; return parsed; } catch (_unused) { return defaul; } }; const fullscreenBackgroundColor = getFullscreenBackgroundColor(); const GUIComponent = props => { const _omit = lodash_omit__WEBPACK_IMPORTED_MODULE_1___default()(props, 'dispatch'), { accountNavOpen, activeTabIndex, alertsVisible, authorId, authorThumbnailUrl, authorUsername, basePath, backdropLibraryVisible, backpackHost, backpackVisible, blocksTabVisible, cardsVisible, canChangeLanguage, canCreateNew, canEditTitle, canManageFiles, canRemix, canSave, canCreateCopy, canShare, canUseCloud, children, connectionModalVisible, costumeLibraryVisible, costumesTabVisible, customStageSize, enableCommunity, intl, isCreating, isDark, isEmbedded, isFullScreen, isPlayerOnly, isRtl, isShared, isWindowFullScreen, isTelemetryEnabled, loading, logo, renderLogin, onClickAbout, onClickAccountNav, onCloseAccountNav, onClickAddonSettings, onClickNewWindow, onClickTheme, onClickPackager, onLogOut, onOpenRegistration, onToggleLoginOpen, onActivateCostumesTab, onActivateSoundsTab, onActivateVariablesTab, onActivateFilesTab, onActivateTab, onClickLogo, onExtensionButtonClick, onProjectTelemetryEvent, onRequestCloseBackdropLibrary, onRequestCloseCostumeLibrary, onRequestCloseTelemetryModal, onSeeCommunity, onShare, onShowPrivacyPolicy, onStartSelectingFileUpload, onStartFolderUpload, onTelemetryModalCancel, onTelemetryModalOptIn, onTelemetryModalOptOut, showComingSoon, soundsTabVisible, variablesTabVisible, filesTabVisible, stageSizeMode, targetIsStage, telemetryModalVisible, tipsLibraryVisible, usernameModalVisible, settingsModalVisible, customExtensionModalVisible, fontsModalVisible, isPlayground, vm } = _omit, componentProps = _objectWithoutProperties(_omit, _excluded); if (children) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], componentProps, children); } const tabClassNames = { tabs: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabs, tab: classnames__WEBPACK_IMPORTED_MODULE_0___default()(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_12___default.a.reactTabsTab, _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tab), tabList: classnames__WEBPACK_IMPORTED_MODULE_0___default()(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_12___default.a.reactTabsTabList, _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabList), tabPanel: classnames__WEBPACK_IMPORTED_MODULE_0___default()(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_12___default.a.reactTabsTabPanel, _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabPanel), tabPanelSelected: classnames__WEBPACK_IMPORTED_MODULE_0___default()(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_12___default.a.reactTabsTabPanelSelected, _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.isSelected), tabSelected: classnames__WEBPACK_IMPORTED_MODULE_0___default()(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_12___default.a.reactTabsTabSelected, _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.isSelected) }; // We can't move this into it's own component or it'll break the selected tab styles & disable switching to the code tab // Moving the whole TabList element will also break the code panel from resizing properly const getTabOrder = () => { const tabOrderStr = localStorage.getItem('pm:taborder') || '["code", "costume", "sound"]'; const tabOrder = safeJSONParse(tabOrderStr, [], true); return tabOrder; }; const tabOrder = getTabOrder(); const ContextMenuWrapTab = _ref => { let { children } = _ref, props = _objectWithoutProperties(_ref, _excluded2); const { tabId } = props; const disabled = tabId === 'code'; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_3___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_contextmenu__WEBPACK_IMPORTED_MODULE_6__["ContextMenuTrigger"], { disable: disabled, id: "remove-editor-tab-".concat(tabId) }, children), /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_4___default.a.createPortal(/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_7__["ContextMenu"], { id: "remove-editor-tab-".concat(tabId) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_7__["DangerousMenuItem"], { onClick: () => removeTabFromEditor(tabId) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "delete", id: "gui.spriteSelectorItem.contextMenuDelete" }))), document.body)); }; // currently each tab can decide whether or not its hidden, remove this once rearranging tabs is supported const codeTab = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["Tab"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(tabClassNames.tab, tabOrder.includes('code') ? null : _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabDisabled) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(ContextMenuWrapTab, { tabId: "code" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { draggable: false, src: _icon_code_svg__WEBPACK_IMPORTED_MODULE_49___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Code", id: "gui.gui.codeTab" }))); const costumesTab = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["Tab"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(tabClassNames.tab, tabOrder.includes('costume') ? null : _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabDisabled), onClick: onActivateCostumesTab }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(ContextMenuWrapTab, { tabId: "costume" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { draggable: false, src: _icon_costumes_svg__WEBPACK_IMPORTED_MODULE_50___default.a }), targetIsStage ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Backdrops", id: "gui.gui.backdropsTab" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Costumes", id: "gui.gui.costumesTab" }))); const soundsTab = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["Tab"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(tabClassNames.tab, tabOrder.includes('sound') ? null : _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabDisabled), onClick: onActivateSoundsTab }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(ContextMenuWrapTab, { tabId: "sound" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { draggable: false, src: _icon_sounds_svg__WEBPACK_IMPORTED_MODULE_51___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Sounds", id: "gui.gui.soundsTab" }))); const variablesTab = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["Tab"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(tabClassNames.tab, tabOrder.includes('variable') ? null : _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabDisabled), onClick: onActivateVariablesTab }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(ContextMenuWrapTab, { tabId: "variable" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { draggable: false, src: _icon_variables_svg__WEBPACK_IMPORTED_MODULE_52___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Variables", id: "gui.gui.variablesTab" }))); const filesTab = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["Tab"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(tabClassNames.tab, tabOrder.includes('file') ? null : _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabDisabled), onClick: onActivateFilesTab }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(ContextMenuWrapTab, { tabId: "file" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { draggable: false, src: _icon_files_svg__WEBPACK_IMPORTED_MODULE_53___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Files", id: "gui.gui.filesTab" }))); const tabPairs = { code: codeTab, costume: costumesTab, sound: soundsTab, variable: variablesTab // file: filesTab, }; // For now, rearranging tabs is not supported const organizedTabs = Object.values(tabPairs); // const organizedTabs = (() => { // const enabledTabs = []; // // Either add in rearranged order // // for (const tabId of tabOrder) { // // enabledTabs.push(tabPairs[tabId] || codeTab) // // } // // or we can add tabs in order of table inclusion // // for (const key in tabPairs) { // // const tab = tabPairs[key]; // // if (tabOrder.includes(key)) { // // enabledTabs.push(tab); // // } // // } // return enabledTabs; // })(); const addTabButtonDisabled = tabOrder.length >= Object.keys(tabPairs).length; const addTabToEditor = tabId => { const tabOrder = getTabOrder(); tabOrder.push(tabId); localStorage.setItem('pm:taborder', JSON.stringify(tabOrder)); const tabKeys = Object.keys(tabPairs); const tabIndex = tabKeys.indexOf(tabId); if (tabIndex === -1) { return onActivateTab(0); } onActivateTab(tabIndex); }; const removeTabFromEditor = tabId => { setTimeout(() => { // sometimes clicking delete will switch to the deleted tab const tabOrder = getTabOrder(); const idx = tabOrder.indexOf(tabId); if (idx === -1) return; tabOrder.splice(idx, 1); localStorage.setItem('pm:taborder', JSON.stringify(tabOrder)); if (tabId !== 'code') { return onActivateTab(0); } const tabKeys = Object.keys(tabPairs); const firstTab = tabOrder[0]; const firstTabIdx = tabKeys.indexOf(firstTab); if (firstTabIdx !== -1) { onActivateTab(firstTabIdx); } }); }; const minWidth = _lib_layout_constants__WEBPACK_IMPORTED_MODULE_43__["default"].fullSizeMinWidth + Math.max(0, customStageSize.width - _lib_layout_constants__WEBPACK_IMPORTED_MODULE_43__["default"].referenceWidth); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_responsive__WEBPACK_IMPORTED_MODULE_10___default.a, { minWidth: minWidth }, isFullSize => { const stageSize = Object(_lib_screen_utils__WEBPACK_IMPORTED_MODULE_44__["resolveStageSize"])(stageSizeMode, isFullSize); const alwaysEnabledModals = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_3___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tw_security_manager_jsx__WEBPACK_IMPORTED_MODULE_38__["default"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tw_restore_point_manager_jsx__WEBPACK_IMPORTED_MODULE_40__["default"], null), usernameModalVisible && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tw_username_modal_jsx__WEBPACK_IMPORTED_MODULE_36__["default"], null), settingsModalVisible && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tw_settings_modal_jsx__WEBPACK_IMPORTED_MODULE_37__["default"], null), customExtensionModalVisible && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tw_custom_extension_modal_jsx__WEBPACK_IMPORTED_MODULE_39__["default"], null), fontsModalVisible && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tw_fonts_modal_jsx__WEBPACK_IMPORTED_MODULE_41__["default"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_pm_extension_modals_jsx__WEBPACK_IMPORTED_MODULE_42__["default"], { vm: vm })); return isPlayerOnly ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_3___default.a.Fragment, null, isWindowFullScreen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.fullscreenBackground, style: { backgroundColor: fullscreenBackgroundColor } }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_stage_wrapper_jsx__WEBPACK_IMPORTED_MODULE_21__["default"], { isFullScreen: isFullScreen, isEmbedded: isEmbedded, isRendererSupported: Object(_lib_tw_environment_support_prober__WEBPACK_IMPORTED_MODULE_45__["isRendererSupported"])(), isRtl: isRtl, loading: loading, stageSize: _lib_layout_constants__WEBPACK_IMPORTED_MODULE_43__["STAGE_SIZE_MODES"].large, vm: vm }, alertsVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_alerts_jsx__WEBPACK_IMPORTED_MODULE_32__["default"], { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.alertsContainer }) : null), alwaysEnabledModals) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], _extends({ className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.pageWrapper, dir: isRtl ? 'rtl' : 'ltr' }, componentProps), alwaysEnabledModals, telemetryModalVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_telemetry_modal_telemetry_modal_jsx__WEBPACK_IMPORTED_MODULE_35__["default"], { isRtl: isRtl, isTelemetryEnabled: isTelemetryEnabled, onCancel: onTelemetryModalCancel, onOptIn: onTelemetryModalOptIn, onOptOut: onTelemetryModalOptOut, onRequestClose: onRequestCloseTelemetryModal, onShowPrivacyPolicy: onShowPrivacyPolicy }) : null, loading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_loader_loader_jsx__WEBPACK_IMPORTED_MODULE_22__["default"], { isFullScreen: true }) : null, isCreating ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_loader_loader_jsx__WEBPACK_IMPORTED_MODULE_22__["default"], { isFullScreen: true, messageId: isPlayground ? "gui.loader.playground" : "gui.loader.creating" }) : null, Object(_lib_tw_environment_support_prober__WEBPACK_IMPORTED_MODULE_45__["isBrowserSupported"])() ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_browser_modal_browser_modal_jsx__WEBPACK_IMPORTED_MODULE_29__["default"], { isRtl: isRtl }), tipsLibraryVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tips_library_jsx__WEBPACK_IMPORTED_MODULE_30__["default"], null) : null, cardsVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_cards_jsx__WEBPACK_IMPORTED_MODULE_31__["default"], null) : null, alertsVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_alerts_jsx__WEBPACK_IMPORTED_MODULE_32__["default"], { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.alertsContainer }) : null, connectionModalVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_34__["default"], { vm: vm }) : null, costumeLibraryVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_costume_library_jsx__WEBPACK_IMPORTED_MODULE_25__["default"], { vm: vm, onRequestClose: onRequestCloseCostumeLibrary }) : null, backdropLibraryVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_backdrop_library_jsx__WEBPACK_IMPORTED_MODULE_26__["default"], { vm: vm, onRequestClose: onRequestCloseBackdropLibrary }) : null, !isPlayground ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_menu_bar_menu_bar_jsx__WEBPACK_IMPORTED_MODULE_24__["default"], { accountNavOpen: accountNavOpen, authorId: authorId, authorThumbnailUrl: authorThumbnailUrl, authorUsername: authorUsername, canChangeLanguage: canChangeLanguage, canCreateCopy: canCreateCopy, canCreateNew: canCreateNew, canEditTitle: canEditTitle, canManageFiles: canManageFiles, canRemix: canRemix, canSave: canSave, canShare: canShare, className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.menuBarPosition, enableCommunity: enableCommunity, isDirectoryPickerSupported: !!window.showDirectoryPicker, isShared: isShared, logo: logo, renderLogin: renderLogin, showComingSoon: showComingSoon, onClickAbout: onClickAbout, onClickAccountNav: onClickAccountNav, onClickAddonSettings: onClickAddonSettings, onClickNewWindow: onClickNewWindow, onClickTheme: onClickTheme, onClickPackager: onClickPackager, onClickLogo: onClickLogo, onCloseAccountNav: onCloseAccountNav, onLogOut: onLogOut, onOpenRegistration: onOpenRegistration, onProjectTelemetryEvent: onProjectTelemetryEvent, onSeeCommunity: onSeeCommunity, onShare: onShare, onStartSelectingFileUpload: onStartSelectingFileUpload, onStartFolderUpload: onStartFolderUpload, onToggleLoginOpen: onToggleLoginOpen }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.bodyWrapper, isPlayground ? _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.bodyWrapperPlayground : null) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.flexWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.editorWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["Tabs"], { forceRenderTabPanel: true, className: tabClassNames.tabs, selectedIndex: activeTabIndex, selectedTabClassName: tabClassNames.tabSelected, selectedTabPanelClassName: tabClassNames.tabPanelSelected, onSelect: onActivateTab }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["TabList"], { className: tabClassNames.tabList }, organizedTabs, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_contextmenu__WEBPACK_IMPORTED_MODULE_6__["ContextMenuTrigger"], { disable: addTabButtonDisabled, holdToDisplay: 0, id: "add-editor-tab-button" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.addTabButton, addTabButtonDisabled ? _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.addTabButtonDisabled : null) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { draggable: false, src: _add_tab_svg__WEBPACK_IMPORTED_MODULE_47___default.a }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_7__["ContextMenu"], { id: "add-editor-tab-button" }, !tabOrder.includes('code') && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_7__["MenuItem"], { onClick: () => addTabToEditor('code') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabAdditionItem }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { draggable: false, src: _icon_code_svg__WEBPACK_IMPORTED_MODULE_49___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Code", id: "gui.gui.codeTab" }))), !tabOrder.includes('costume') && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_7__["MenuItem"], { onClick: () => addTabToEditor('costume') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabAdditionItem }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { draggable: false, src: _icon_costumes_svg__WEBPACK_IMPORTED_MODULE_50___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Costumes", id: "gui.gui.costumesTab" }))), !tabOrder.includes('sound') && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_7__["MenuItem"], { onClick: () => addTabToEditor('sound') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabAdditionItem }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { draggable: false, src: _icon_sounds_svg__WEBPACK_IMPORTED_MODULE_51___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Sounds", id: "gui.gui.soundsTab" }))), !tabOrder.includes('variable') && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_7__["MenuItem"], { onClick: () => addTabToEditor('variable') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.tabAdditionItem }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { draggable: false, src: _icon_variables_svg__WEBPACK_IMPORTED_MODULE_52___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Variables", id: "gui.gui.variablesTab" })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { id: "sa_addons_after_add_tab_anchor" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["TabPanel"], { className: tabClassNames.tabPanel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.blocksWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_blocks_jsx__WEBPACK_IMPORTED_MODULE_15__["default"], { canUseCloud: canUseCloud, grow: 1, isVisible: blocksTabVisible, options: { media: "".concat(basePath, "static/blocks-media/") }, stageSize: stageSize, vm: vm })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.extensionButtonContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.extensionButton, title: intl.formatMessage(messages.addExtension), onClick: onExtensionButtonClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.extensionButtonIcon, draggable: false, src: _icon_extensions_svg__WEBPACK_IMPORTED_MODULE_48___default.a }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.watermark }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_watermark_jsx__WEBPACK_IMPORTED_MODULE_27__["default"], null))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["TabPanel"], { className: tabClassNames.tabPanel }, costumesTabVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_costume_tab_jsx__WEBPACK_IMPORTED_MODULE_16__["default"], { vm: vm, isDark: isDark }) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["TabPanel"], { className: tabClassNames.tabPanel }, soundsTabVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_sound_tab_jsx__WEBPACK_IMPORTED_MODULE_18__["default"], { vm: vm }) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_11__["TabPanel"], { className: tabClassNames.tabPanel }, variablesTabVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_variables_tab_jsx__WEBPACK_IMPORTED_MODULE_19__["default"], { vm: vm }) : null)), backpackVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_backpack_jsx__WEBPACK_IMPORTED_MODULE_28__["default"], { host: backpackHost }) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.stageAndTargetWrapper, _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a[stageSize]) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_stage_wrapper_jsx__WEBPACK_IMPORTED_MODULE_21__["default"], { isFullScreen: isFullScreen, isRendererSupported: Object(_lib_tw_environment_support_prober__WEBPACK_IMPORTED_MODULE_45__["isRendererSupported"])(), isRtl: isRtl, stageSize: stageSize, vm: vm }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], { className: _gui_css__WEBPACK_IMPORTED_MODULE_46___default.a.targetWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_target_pane_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], { stageSize: stageSize, vm: vm }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_drag_layer_jsx__WEBPACK_IMPORTED_MODULE_33__["default"], null)); }); }; GUIComponent.propTypes = { accountNavOpen: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, activeTabIndex: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, authorId: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool]), // can be false authorThumbnailUrl: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, authorUsername: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool]), // can be false backdropLibraryVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, backpackHost: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, backpackVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, basePath: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, blocksTabVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, canChangeLanguage: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, canCreateCopy: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, canCreateNew: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, canEditTitle: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, canManageFiles: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, canRemix: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, canSave: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, canShare: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, canUseCloud: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, cardsVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, children: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node, costumeLibraryVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, costumesTabVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, customStageSize: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number }), enableCommunity: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, intl: react_intl__WEBPACK_IMPORTED_MODULE_8__["intlShape"].isRequired, isCreating: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, isDark: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, isEmbedded: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, isPlayerOnly: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, isShared: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, isWindowFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, loading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, logo: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, onActivateCostumesTab: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onActivateSoundsTab: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onActivateVariablesTab: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onActivateFilesTab: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onActivateTab: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onClickAccountNav: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onClickAddonSettings: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onClickNewWindow: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onClickTheme: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onClickPackager: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onClickLogo: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onCloseAccountNav: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onExtensionButtonClick: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onLogOut: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onOpenRegistration: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onRequestCloseBackdropLibrary: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onRequestCloseCostumeLibrary: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onRequestCloseTelemetryModal: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onSeeCommunity: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onShare: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onShowPrivacyPolicy: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onStartSelectingFileUpload: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onStartFolderUpload: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onTabSelect: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onTelemetryModalCancel: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onTelemetryModalOptIn: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onTelemetryModalOptOut: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onToggleLoginOpen: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, renderLogin: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, showComingSoon: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, soundsTabVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, variablesTabVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, filesTabVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, stageSizeMode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf(Object.keys(_lib_layout_constants__WEBPACK_IMPORTED_MODULE_43__["STAGE_SIZE_MODES"])), targetIsStage: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, telemetryModalVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, tipsLibraryVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, usernameModalVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, settingsModalVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, customExtensionModalVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, fontsModalVisible: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, vm: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_13___default.a).isRequired }; GUIComponent.defaultProps = { backpackHost: null, backpackVisible: false, basePath: './', canChangeLanguage: true, canCreateNew: false, canEditTitle: false, canManageFiles: true, canRemix: false, canSave: false, canCreateCopy: false, canShare: false, canUseCloud: false, enableCommunity: false, isCreating: false, isShared: false, loading: false, showComingSoon: false, stageSizeMode: _lib_layout_constants__WEBPACK_IMPORTED_MODULE_43__["STAGE_SIZE_MODES"].large }; const mapStateToProps = state => ({ customStageSize: state.scratchGui.customStageSize, isWindowFullScreen: state.scratchGui.tw.isWindowFullScreen, // This is the button's mode, as opposed to the actual current state stageSizeMode: state.scratchGui.stageSize.stageSize }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_8__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_9__["connect"])(mapStateToProps)(GUIComponent))); /***/ }), /***/ "./src/components/gui/icon--code.svg": /*!*******************************************!*\ !*** ./src/components/gui/icon--code.svg ***! \*******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/0896da795cd8d2199e8cfb968229d04a.svg"; /***/ }), /***/ "./src/components/gui/icon--costumes.svg": /*!***********************************************!*\ !*** ./src/components/gui/icon--costumes.svg ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/06b8b81e4596f360738c678f6a840dc2.svg"; /***/ }), /***/ "./src/components/gui/icon--extensions.svg": /*!*************************************************!*\ !*** ./src/components/gui/icon--extensions.svg ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/5f4208a6b7257c456c018d57efc8a7e9.svg"; /***/ }), /***/ "./src/components/gui/icon--files.svg": /*!********************************************!*\ !*** ./src/components/gui/icon--files.svg ***! \********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/6c037268777f4b85658c4fdc1f55b4f9.svg"; /***/ }), /***/ "./src/components/gui/icon--sounds.svg": /*!*********************************************!*\ !*** ./src/components/gui/icon--sounds.svg ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/d0285f1906636f21d1149a4797b978dc.svg"; /***/ }), /***/ "./src/components/gui/icon--variables.svg": /*!************************************************!*\ !*** ./src/components/gui/icon--variables.svg ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/2d24a289beac8fe221ce132aac88a320.svg"; /***/ }), /***/ "./src/components/icon-button/icon-button.css": /*!****************************************************!*\ !*** ./src/components/icon-button/icon-button.css ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./icon-button.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/icon-button/icon-button.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/icon-button/icon-button.jsx": /*!****************************************************!*\ !*** ./src/components/icon-button/icon-button.jsx ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _icon_button_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icon-button.css */ "./src/components/icon-button/icon-button.css"); /* harmony import */ var _icon_button_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_icon_button_css__WEBPACK_IMPORTED_MODULE_3__); const IconButton = _ref => { let { img, disabled, className, title, onClick } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_icon_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.container, className, disabled ? _icon_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.disabled : null), role: "button", onClick: disabled ? null : onClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _icon_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.icon, draggable: false, src: img }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _icon_button_css__WEBPACK_IMPORTED_MODULE_3___default.a.title }, title)); }; IconButton.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, disabled: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, img: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, onClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, title: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (IconButton); /***/ }), /***/ "./src/components/language-selector/language-icon.svg": /*!************************************************************!*\ !*** ./src/components/language-selector/language-icon.svg ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/1319094a51748798730f01d1dc0972ac.svg"; /***/ }), /***/ "./src/components/language-selector/language-selector.css": /*!****************************************************************!*\ !*** ./src/components/language-selector/language-selector.css ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./language-selector.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/language-selector/language-selector.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/language-selector/language-selector.jsx": /*!****************************************************************!*\ !*** ./src/components/language-selector/language-selector.jsx ***! \****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @turbowarp/scratch-l10n */ "./node_modules/@turbowarp/scratch-l10n/src/index.js"); /* harmony import */ var _language_selector_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./language-selector.css */ "./src/components/language-selector/language-selector.css"); /* harmony import */ var _language_selector_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_language_selector_css__WEBPACK_IMPORTED_MODULE_3__); // supported languages to exclude from the menu, but allow as a URL option const ignore = []; const LanguageSelector = _ref => { let { currentLocale, label, onChange } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("select", { "aria-label": label, className: _language_selector_css__WEBPACK_IMPORTED_MODULE_3___default.a.languageSelect, value: currentLocale, onChange: onChange }, Object.keys(_turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_2__["default"]).filter(l => !ignore.includes(l)).map(locale => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", { key: locale, value: locale }, _turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_2__["default"][locale].name))); }; LanguageSelector.propTypes = { currentLocale: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, label: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, onChange: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (LanguageSelector); /***/ }), /***/ "./src/components/library-item/bluetooth.svg": /*!***************************************************!*\ !*** ./src/components/library-item/bluetooth.svg ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/dfe35552790fb5ff38c78a43f5e62f30.svg"; /***/ }), /***/ "./src/components/library-item/delete/filled.svg": /*!*******************************************************!*\ !*** ./src/components/library-item/delete/filled.svg ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/41835a2c99bdd753b68472735b2bd611.svg"; /***/ }), /***/ "./src/components/library-item/download/filled.svg": /*!*********************************************************!*\ !*** ./src/components/library-item/download/filled.svg ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/663892634c556da228c1d09301a54e63.svg"; /***/ }), /***/ "./src/components/library-item/favorite/filled.svg": /*!*********************************************************!*\ !*** ./src/components/library-item/favorite/filled.svg ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/27802141bca7404b477168369bf3475d.svg"; /***/ }), /***/ "./src/components/library-item/favorite/outline.svg": /*!**********************************************************!*\ !*** ./src/components/library-item/favorite/outline.svg ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/e28b110fa5eef35531fa271a3a7b6314.svg"; /***/ }), /***/ "./src/components/library-item/internet-connection.svg": /*!*************************************************************!*\ !*** ./src/components/library-item/internet-connection.svg ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/1bb0adb555e07593962e9fc28ec7566d.svg"; /***/ }), /***/ "./src/components/library-item/library-item.css": /*!******************************************************!*\ !*** ./src/components/library-item/library-item.css ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./library-item.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/library-item/library-item.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/library-item/library-item.jsx": /*!******************************************************!*\ !*** ./src/components/library-item/library-item.jsx ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_play_button_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/play-button.jsx */ "./src/containers/play-button.jsx"); /* harmony import */ var _library_item_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./library-item.css */ "./src/components/library-item/library-item.css"); /* harmony import */ var _library_item_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_library_item_css__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _bluetooth_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./bluetooth.svg */ "./src/components/library-item/bluetooth.svg"); /* harmony import */ var _bluetooth_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_bluetooth_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _internet_connection_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./internet-connection.svg */ "./src/components/library-item/internet-connection.svg"); /* harmony import */ var _internet_connection_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_internet_connection_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _favorite_filled_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./favorite/filled.svg */ "./src/components/library-item/favorite/filled.svg"); /* harmony import */ var _favorite_filled_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_favorite_filled_svg__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _favorite_outline_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./favorite/outline.svg */ "./src/components/library-item/favorite/outline.svg"); /* harmony import */ var _favorite_outline_svg__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_favorite_outline_svg__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _delete_filled_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./delete/filled.svg */ "./src/components/library-item/delete/filled.svg"); /* harmony import */ var _delete_filled_svg__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_delete_filled_svg__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _download_filled_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./download/filled.svg */ "./src/components/library-item/download/filled.svg"); /* harmony import */ var _download_filled_svg__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_download_filled_svg__WEBPACK_IMPORTED_MODULE_12__); const getURLOrigin = url => { let urlObj; try { urlObj = new URL(url); } catch (_unused) { // not a valid URL return String(url); } return urlObj.origin; }; const getMSFormatted = ms => { return (ms / 1000).toFixed(2); }; /* eslint-disable react/prefer-stateless-function */ class LibraryItemComponent extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent { render() { return this.props.featured ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItem, _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredItem, { [_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.disabled]: this.props.disabled }, typeof this.props.extensionId === 'string' ? _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemExtension : null, this.props.hidden ? _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.hidden : null), onClick: this.props.onClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredImageContainer }, this.props.disabled ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.comingSoonText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Coming Soon", id: "gui.extensionLibrary.comingSoon" })) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredImage, loading: "lazy", draggable: false, src: this.props.iconURL })), this.props.insetIconURL && !this.props.customInsetColor ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: this.props.twDeveloper ? classnames__WEBPACK_IMPORTED_MODULE_6___default()(_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemInsetImageContainer, _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.twLibraryItemInsetImageContainer) : _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemInsetImageContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemInsetImage, src: this.props.insetIconURL, draggable: false })) : null, this.props.insetIconURL && this.props.customInsetColor ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemInsetImageContainerNoBg, style: { backgroundColor: this.props.customInsetColor } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemInsetImage, src: this.props.insetIconURL })) : null, this.props.favoritable && !this.props.deletable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { // data-clearclick just makes it so the item // doesnt get selected when clicking this element "data-clearclick": "true", "data-activated": this.props.favorited === true, className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemFavorite, onClick: () => this.props.onFavoriteClick(this.props.favorited) }, this.props.favorited === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { "data-usedimage": "true", "data-clearclick": "true", src: _favorite_filled_svg__WEBPACK_IMPORTED_MODULE_9___default.a }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { "data-usedimage": "true", "data-clearclick": "true", src: _favorite_outline_svg__WEBPACK_IMPORTED_MODULE_10___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { "data-usedimage": "false", "data-clearclick": "true", src: _favorite_filled_svg__WEBPACK_IMPORTED_MODULE_9___default.a })) : null, this.props.deletable && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { // data-clearclick just makes it so the item // doesnt get selected when clicking this element "data-clearclick": "true", className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemDelete, onClick: this.props.onDeleteClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { "data-clearclick": "true", src: _delete_filled_svg__WEBPACK_IMPORTED_MODULE_11___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: typeof this.props.extensionId === 'string' ? classnames__WEBPACK_IMPORTED_MODULE_6___default()(_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionText, _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredText) : _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemName }, this.props.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("br", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredDescription }, this.props.description), this.props.custom && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("br", null), this.props.extensionId.startsWith("data:") ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", null, this.props._unsandboxed ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Custom Unsandboxed extension", id: "pm.extensionLibrary.customLibraryExtensionUnsandboxed" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Custom Sandboxed extension", id: "pm.extensionLibrary.customLibraryExtensionSandboxed" })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Added from a website", id: "pm.extensionLibrary.customLibraryExtensionWebsite" })), this.props.extensionId.startsWith("data:") ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredDescription }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Loaded from Text / File", id: "pm.extensionLibrary.customLibraryExtensionTextOrFile" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("a", { "data-clearclick": "true", download: "extension.js", href: this.props.extensionId }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { "data-clearclick": "true", className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.inspectExtension }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { "data-clearclick": "true", src: _download_filled_svg__WEBPACK_IMPORTED_MODULE_12___default.a, alt: "Download" })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("a", { target: "_blank", "data-clearclick": "true", href: this.props.extensionId, className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredDescription }, getURLOrigin(this.props.extensionId)))), this.props.bluetoothRequired || this.props.internetConnectionRequired || this.props.collaborator || this.props.extDeveloper || this.props.twDeveloper || this.props.eventSubmittor || this.props.credits ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionMetadata }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionRequirement }, this.props.bluetoothRequired || this.props.internetConnectionRequired ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Requires", id: "gui.extensionLibrary.requires" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionMetadataDetail }, this.props.bluetoothRequired ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { src: _bluetooth_svg__WEBPACK_IMPORTED_MODULE_7___default.a }) : null, this.props.internetConnectionRequired ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { src: _internet_connection_svg__WEBPACK_IMPORTED_MODULE_8___default.a }) : null)) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionCollaboration }, this.props.collaborator ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.smallBottomMargin }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Collaboration with", id: "gui.extensionLibrary.collaboration" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionMetadataDetail }, this.props.collaborator)) : null, this.props.twDeveloper ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.smallBottomMargin }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, "Originally for TurboWarp by"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionMetadataDetail }, this.props.twDeveloper)) : null, this.props.extDeveloper ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.smallBottomMargin }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, "Created by"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionMetadataDetail }, this.props.extDeveloper)) : null, this.props.eventSubmittor ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.smallBottomMargin }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, "Event Submission by"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionMetadataDetail }, this.props.eventSubmittor)) : null, this.props.credits ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.smallBottomMargin }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, "Credits"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionMetadataDetail }, this.props.credits)) : null, this.props.extraLabels ? this.props.extraLabels.map(label => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.smallBottomMargin }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, label.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.featuredExtensionMetadataDetail }, label.value))) : null)) : null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItem, { [_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.hidden]: this.props.hidden, [_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemSound]: this.props.styleForSound, [_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemNew]: this.props.isNew }), role: "button", tabIndex: "0", onBlur: this.props.onBlur, onClick: this.props.onClick, onFocus: this.props.onFocus, onKeyPress: this.props.onKeyPress, onMouseEnter: this.props.showPlayButton ? null : this.props.onMouseEnter, onMouseLeave: this.props.showPlayButton ? null : this.props.onMouseLeave }, this.props.isNew && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemNewBadge }, "NEW"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemImageContainerWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemImageContainer, onMouseEnter: this.props.showPlayButton ? this.props.onMouseEnter : null, onMouseLeave: this.props.showPlayButton ? this.props.onMouseLeave : null }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemImage, { [_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemWaveform]: this.props.styleForSound }), loading: "lazy", src: this.props.iconURL, draggable: false }), this.props.overlayURL && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemImage, _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemImageOverlay, { [_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemWaveform]: this.props.styleForSound }), loading: "lazy", src: this.props.overlayURL, draggable: false }))), this.props.styleForSound ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemSoundInfoContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemName, _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemSoundName) }, this.props.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemName, _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemSoundType) }, this.props.soundType, ", ", getMSFormatted(this.props.soundLength))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemName }, this.props.name), this.props.showPlayButton ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_containers_play_button_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()({ [_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemSoundPlayButton]: this.props.styleForSound, [_library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemNewPlayButton]: this.props.isNew }), isPlaying: this.props.isPlaying, onPlay: this.props.onPlay, onStop: this.props.onStop }) : null); } } /* eslint-enable react/prefer-stateless-function */ LibraryItemComponent.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_0__["intlShape"], bluetoothRequired: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, collaborator: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), credits: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), twDeveloper: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), extDeveloper: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), eventSubmittor: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), extraLabels: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]) })), description: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, extensionId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, featured: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isNew: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, hidden: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, iconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, overlayURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, insetIconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, styleForSound: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, soundType: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, soundLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, customInsetColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, internetConnectionRequired: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isPlaying: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), onBlur: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onKeyPress: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onMouseEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onPlay: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onStop: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, showPlayButton: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, favoritable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, favorited: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, deletable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, custom: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onFavoriteClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onDeleteClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, _id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, _unsandboxed: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; LibraryItemComponent.defaultProps = { disabled: false, showPlayButton: false }; /* harmony default export */ __webpack_exports__["default"] = (LibraryItemComponent); /***/ }), /***/ "./src/components/library/library.css": /*!********************************************!*\ !*** ./src/components/library/library.css ***! \********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./library.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/library/library.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/library/library.jsx": /*!********************************************!*\ !*** ./src/components/library/library.jsx ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! localforage */ "./node_modules/localforage/dist/localforage.js"); /* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(localforage__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _containers_library_item_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../containers/library-item.jsx */ "./src/containers/library-item.jsx"); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _divider_divider_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../divider/divider.jsx */ "./src/components/divider/divider.jsx"); /* harmony import */ var _filter_filter_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../filter/filter.jsx */ "./src/components/filter/filter.jsx"); /* harmony import */ var _containers_tag_button_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../containers/tag-button.jsx */ "./src/containers/tag-button.jsx"); /* harmony import */ var _containers_tag_checkbox_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../containers/tag-checkbox.jsx */ "./src/containers/tag-checkbox.jsx"); /* harmony import */ var _spinner_spinner_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../spinner/spinner.jsx */ "./src/components/spinner/spinner.jsx"); /* harmony import */ var _tw_extension_separator_separator_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../tw-extension-separator/separator.jsx */ "./src/components/tw-extension-separator/separator.jsx"); /* harmony import */ var _library_css__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./library.css */ "./src/components/library/library.css"); /* harmony import */ var _library_css__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_library_css__WEBPACK_IMPORTED_MODULE_14__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_5__["defineMessages"])({ filterPlaceholder: { "id": "gui.library.filterPlaceholder", "defaultMessage": "Search" }, allTag: { "id": "gui.library.allTag", "defaultMessage": "All" } }); const PM_LIBRARY_API = "https://library.penguinmod.com/"; const ALL_TAG = { tag: 'all', intlLabel: messages.allTag }; const tagListPrefix = []; /** * Returns true if the array includes items from the other array. * @param {Array} array The array to check * @param {Array} from The array with the items that need to be included * @returns {boolean} */ const arrayIncludesItemsFrom = (array, from) => { if (!Array.isArray(array)) array = []; if (!Array.isArray(from)) from = []; const value = from.every(value => { return array.indexOf(value) >= 0; }); // console.log(array, from, value); return value; }; class LibraryComponent extends react__WEBPACK_IMPORTED_MODULE_3___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_1___default()(this, ['handleClose', 'handleFilterChange', 'handleFilterClear', 'handleMouseEnter', 'handleMouseLeave', 'handlePlayingEnd', 'handleSelect', 'handleTagClick', 'setFilteredDataRef', 'loadLibraryData', 'loadLibraryFavorites', 'waitForLoading', 'handleFavoritesUpdate', 'createFilteredData', 'getFilteredData']); this.state = { playingItem: null, filterQuery: '', selectedTags: [], favorites: [], collapsed: false, loaded: false, data: props.data }; // used for actor libraries // they have special things like favorited items // the way they load though breaks stuff this.usesSpecialLoading = ["ExtensionLibrary"]; } loadLibraryData() { return new Promise(resolve => { if (this.state.data.then) { // If data is a promise, wait for the promise to resolve this.state.data.then(data => { resolve({ key: "data", value: data }); }); } else { // Allow the spinner to display before loading the content setTimeout(() => { const data = this.state.data; resolve({ key: "data", value: data }); }); } }); } async loadLibraryFavorites() { const favorites = await localforage__WEBPACK_IMPORTED_MODULE_4___default.a.getItem("pm:favorited_extensions"); return { key: "favorites", value: favorites ? favorites : [] }; } async handleFavoritesUpdate() { const favorites = await localforage__WEBPACK_IMPORTED_MODULE_4___default.a.getItem("pm:favorited_extensions"); this.setState({ favorites }); } async waitForLoading(processes) { // we store values in here const packet = {}; for (const process of processes) { // result = { key: "data", value: ... } const result = await process(); packet[result.key] = result.value; } return packet; } componentDidMount() { if (!this.usesSpecialLoading.includes(this.props.actor)) { // regular loading if (this.state.data.then) { // If data is a promise, wait for the promise to resolve this.state.data.then(data => { this.setState({ loaded: true, data }); }); } else { // Allow the spinner to display before loading the content setTimeout(() => { this.setState({ loaded: true }); }); } } if (this.props.setStopHandler) this.props.setStopHandler(this.handlePlayingEnd); if (!this.usesSpecialLoading.includes(this.props.actor)) return; // special loading const spinnerProcesses = [this.loadLibraryData]; // pm: actors can load extra stuff // pm: if we are acting as the extension library, load favorited extensions if (this.props.actor === "ExtensionLibrary") { spinnerProcesses.push(this.loadLibraryFavorites); } // wait for spinner stuff this.waitForLoading(spinnerProcesses).then(packet => { const data = _objectSpread({ loaded: true }, packet); this.setState(data); }); } // uncomment this if favorites start exploding the website lol! // componentWillUnmount () { // // pm: clear favorites from.... memory idk // this.setState({ // favorites: [] // }); // } componentDidUpdate(prevProps, prevState) { if (prevState.filterQuery !== this.state.filterQuery || prevState.selectedTags.length !== this.state.selectedTags.length) { this.scrollToTop(); } if (prevProps.data !== this.props.data) { // eslint-disable-next-line react/no-did-update-set-state this.setState({ data: this.props.data }); } } handleSelect(id, event) { if (event.shiftKey !== true) { this.handleClose(); } this.props.onItemSelected(this.getFilteredData()[id]); } handleClose() { this.props.onRequestClose(); } handleTagClick(tag, enabled) { // console.log(tag, enabled); if (this.state.playingItem === null) { this.setState({ filterQuery: '', selectedTags: this.state.selectedTags.concat([tag.toLowerCase()]) }); } else { this.props.onItemMouseLeave(this.getFilteredData()[[this.state.playingItem]]); this.setState({ filterQuery: '', playingItem: null, selectedTags: this.state.selectedTags.concat([tag.toLowerCase()]) }); } if (!enabled) { const tags = this.state.selectedTags.filter(t => t !== tag); this.setState({ selectedTags: tags }); } } handleMouseEnter(id) { // don't restart if mouse over already playing item if (this.props.onItemMouseEnter && this.state.playingItem !== id) { this.props.onItemMouseEnter(this.getFilteredData()[id]); this.setState({ playingItem: id }); } } handleMouseLeave(id) { if (this.props.onItemMouseLeave) { this.props.onItemMouseLeave(this.getFilteredData()[id]); this.setState({ playingItem: null }); } } handlePlayingEnd() { if (this.state.playingItem !== null) { this.setState({ playingItem: null }); } } handleFilterChange(event) { if (this.state.playingItem === null) { this.setState({ filterQuery: event.target.value, selectedTags: [] }); } else { this.props.onItemMouseLeave(this.getFilteredData()[[this.state.playingItem]]); this.setState({ filterQuery: event.target.value, playingItem: null, selectedTags: [] }); } } handleFilterClear() { this.setState({ filterQuery: '' }); } createFilteredData() { if (this.state.selectedTags.length <= 0) { if (!this.state.filterQuery) return this.state.data; return this.state.data.filter(dataItem => (dataItem.tags || [] // Second argument to map sets `this` ).map(String.prototype.toLowerCase.call, String.prototype.toLowerCase).concat(dataItem.name ? (typeof dataItem.name === 'string' ? // Use the name if it is a string, else use formatMessage to get the translated name dataItem.name : this.props.intl.formatMessage(dataItem.name.props)).toLowerCase() : null).join('\n') // unlikely to partially match newlines .indexOf(this.state.filterQuery.toLowerCase()) !== -1); } return this.state.data.filter(dataItem => arrayIncludesItemsFrom(dataItem.tags && dataItem.tags.map(String.prototype.toLowerCase.call, String.prototype.toLowerCase), this.state.selectedTags)); } getFilteredData() { const filtered = this.createFilteredData(); if (this.props.actor !== "ExtensionLibrary") { return filtered; } const final = [].concat(this.state.favorites.filter(item => typeof item !== "string").map(item => _objectSpread(_objectSpread({}, item), {}, { custom: true })).reverse(), filtered.filter(item => this.state.favorites.includes(item.extensionId)), filtered.filter(item => !this.state.favorites.includes(item.extensionId))).map(item => _objectSpread(_objectSpread({}, item), {}, { custom: typeof item.custom === "boolean" ? item.custom : false })); return final; } scrollToTop() { this.filteredDataRef.scrollTop = 0; } setFilteredDataRef(ref) { this.filteredDataRef = ref; } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { fullScreen: true, contentLabel: this.props.title, id: this.props.id, onRequestClose: this.handleClose }, this.props.header ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("h1", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.libraryHeader, _library_css__WEBPACK_IMPORTED_MODULE_14___default.a.whiteTextInDarkMode) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", { style: this.state.collapsed ? { transform: "scaleX(0.65)" } : null, className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.libraryFilterCollapse), onClick: () => { this.setState({ collapsed: !this.state.collapsed }); } }), this.props.header, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("p", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.libraryItemCount) }, this.state.data.length)) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.libraryContentWrapper) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.libraryFilterBar), style: this.state.collapsed ? { display: "none" } : null }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("h3", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.whiteTextInDarkMode) }, "Filters"), this.props.filterable && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_filter_filter_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.filterBarItem, _library_css__WEBPACK_IMPORTED_MODULE_14___default.a.filter), filterQuery: this.state.filterQuery, inputClassName: _library_css__WEBPACK_IMPORTED_MODULE_14___default.a.filterInput, placeholderText: this.props.intl.formatMessage(messages.filterPlaceholder), onChange: this.handleFilterChange, onClear: this.handleFilterClear }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_divider_divider_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.filterBarItem, _library_css__WEBPACK_IMPORTED_MODULE_14___default.a.divider) })), this.props.tags && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", null, tagListPrefix.concat(this.props.tags).map((tagProps, id) => { let onclick = this.handleTagClick; if (tagProps.type === 'divider') { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_divider_divider_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.filterBarItem, _library_css__WEBPACK_IMPORTED_MODULE_14___default.a.divider) }); } if (tagProps.type === 'title') { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("h3", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.whiteTextInDarkMode) }, tagProps.intlLabel); } if (tagProps.type === 'subtitle') { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("h5", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.whiteTextInDarkMode) }, tagProps.intlLabel); } if (tagProps.type === 'custom') { onclick = () => { const api = {}; api.useTag = this.handleTagClick; api.close = this.handleClose; api.select = id => { const items = this.state.data; for (const item of items) { if (item.extensionId === id) { this.handleClose(); this.props.onItemSelected(item); return; } ; } }; tagProps.func(api); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tag_button_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], _extends({ active: false, className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.filterBarItem, _library_css__WEBPACK_IMPORTED_MODULE_14___default.a.tagButton, tagProps.className), key: "tag-button-".concat(id), onClick: onclick }, tagProps)); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.tagCheckboxWrapper) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { style: { width: "90%" } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tag_checkbox_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], _extends({ active: false, key: "tag-button-".concat(id), onClick: onclick }, tagProps))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _library_css__WEBPACK_IMPORTED_MODULE_14___default.a.libraryTagCount }, this.state.loaded && this.state.data.filter(dataItem => arrayIncludesItemsFrom(dataItem.tags && dataItem.tags.map(String.prototype.toLowerCase.call, String.prototype.toLowerCase), [tagProps.tag])).length)); }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_14___default.a.libraryScrollGrid), ref: this.setFilteredDataRef }, this.state.loaded ? this.getFilteredData().map((dataItem, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_library_item_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { bluetoothRequired: dataItem.bluetoothRequired, collaborator: dataItem.collaborator, extDeveloper: dataItem.extDeveloper, credits: dataItem.credits, twDeveloper: dataItem.twDeveloper, eventSubmittor: dataItem.eventSubmittor, extraLabels: dataItem.extraLabels, customInsetColor: dataItem.customInsetColor, description: dataItem.description, disabled: dataItem.disabled, extensionId: dataItem.extensionId, featured: dataItem.featured, hidden: dataItem.hidden, isNew: dataItem.tags && dataItem.tags.includes("new"), href: dataItem.href, iconMd5: dataItem.costumes ? dataItem.costumes[0].md5ext : dataItem.md5ext, iconRawURL: this.props.actor === "CostumeLibrary" ? "".concat(PM_LIBRARY_API, "files/").concat(dataItem.libraryFilePage) : dataItem.rawURL, overlayURL: dataItem.overlayURL, icons: dataItem.costumes, id: index, _id: dataItem._id, styleForSound: this.props.actor === "SoundLibrary", soundType: dataItem.soundType, soundLength: dataItem.soundLength, incompatibleWithScratch: dataItem.incompatibleWithScratch, extensionWarningOnImport: dataItem.extensionWarningOnImport, insetIconURL: dataItem.insetIconURL, internetConnectionRequired: dataItem.internetConnectionRequired, isPlaying: this.state.playingItem === index, key: typeof dataItem.name === 'string' ? dataItem.name : dataItem.rawURL, name: dataItem.name, showPlayButton: this.props.showPlayButton, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onSelect: this.handleSelect, favoritable: this.props.actor === "ExtensionLibrary" && dataItem.extensionId, favorited: this.state.favorites.includes(dataItem.extensionId), deletable: dataItem.deletable, custom: dataItem.custom, onFavoriteUpdated: () => this.handleFavoritesUpdate(), _unsandboxed: dataItem._unsandboxed })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _library_css__WEBPACK_IMPORTED_MODULE_14___default.a.spinnerWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_spinner_spinner_jsx__WEBPACK_IMPORTED_MODULE_12__["default"], { large: true, level: "primary" }))))); } } LibraryComponent.propTypes = { data: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.arrayOf(/* eslint-disable react/no-unused-prop-types, lines-around-comment */ // An item in the library prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({ // @todo remove md5/rawURL prop from library, refactor to use storage md5: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, name: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.node]), rawURL: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string }) /* eslint-enable react/no-unused-prop-types, lines-around-comment */), prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(Promise)]), filterable: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, id: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired, intl: react_intl__WEBPACK_IMPORTED_MODULE_5__["intlShape"].isRequired, onItemMouseEnter: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onItemMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onItemSelected: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, setStopHandler: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, showPlayButton: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, tags: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape(_containers_tag_button_jsx__WEBPACK_IMPORTED_MODULE_10__["default"].propTypes)), title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired }; LibraryComponent.defaultProps = { filterable: true, showPlayButton: false }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_5__["injectIntl"])(LibraryComponent)); /***/ }), /***/ "./src/components/loader/bottom-block.svg": /*!************************************************!*\ !*** ./src/components/loader/bottom-block.svg ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/ce5820b006d753e4133f46ae776f4d96.svg"; /***/ }), /***/ "./src/components/loader/loader.css": /*!******************************************!*\ !*** ./src/components/loader/loader.css ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./loader.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/loader/loader.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/loader/loader.jsx": /*!******************************************!*\ !*** ./src/components/loader/loader.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _loader_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./loader.css */ "./src/components/loader/loader.css"); /* harmony import */ var _loader_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_loader_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _top_block_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./top-block.svg */ "./src/components/loader/top-block.svg"); /* harmony import */ var _top_block_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_top_block_svg__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _middle_block_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./middle-block.svg */ "./src/components/loader/middle-block.svg"); /* harmony import */ var _middle_block_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_middle_block_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _bottom_block_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./bottom-block.svg */ "./src/components/loader/bottom-block.svg"); /* harmony import */ var _bottom_block_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_bottom_block_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _tw_progress_monitor__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tw-progress-monitor */ "./src/components/loader/tw-progress-monitor.js"); /* harmony import */ var _lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../lib/isScratchDesktop */ "./src/lib/isScratchDesktop.js"); // tw: // we make some rather large changes here: // - remove random message, replaced with message dependent on what is actually being loaded // - add a progress bar // - bring in intl so that we can translate everything // The way of doing this is extremely unusual and weird compared to how things are typically done for performance. // This is because react updates are too performance crippling to handle the progress bar rapidly updating. const mainMessages = { 'gui.loader.headline': /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Loading Project", id: "gui.loader.headline" }), 'gui.loader.creating': /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Creating Project", id: "gui.loader.creating" }), 'gui.loader.playground': /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Loading Playground", id: "gui.loader.playground" }) }; const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["defineMessages"])({ generic: { "id": "tw.loader.generic", "defaultMessage": "Loading project \u2026" }, projectData: { "id": "tw.loader.data", "defaultMessage": "Downloading project data \u2026" }, assetsKnown: { "id": "tw.loader.assets.known", "defaultMessage": "Downloading assets ({complete}/{total}) \u2026" }, assetsUnknown: { "id": "tw.loader.assets.unknown", "defaultMessage": "Downloading assets \u2026" } }); class LoaderComponent extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); this._state = 0; this.progress = 0; this.complete = 0; this.total = 0; lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default()(this, ['barInnerRef', 'handleProgressChange', 'messageRef']); } componentDidMount() { if (!Object(_lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_10__["default"])()) { _tw_progress_monitor__WEBPACK_IMPORTED_MODULE_9__["setProgressHandler"](this.handleProgressChange); } this.updateMessage(); } componentDidUpdate() { this.update(); } componentWillUnmount() { // force completion this.progress = 1; this.update(); _tw_progress_monitor__WEBPACK_IMPORTED_MODULE_9__["setProgressHandler"](() => {}); } handleProgressChange(state, progress, complete, total) { if (state !== this._state) { this._state = state; this.updateMessage(); } this.progress = progress; this.complete = complete; this.total = total; this.update(); } update() { if (this.barInner) { this.barInner.style.width = "".concat(this.progress * 100, "%"); } if (this._state === 2) { this.updateMessage(); } } updateMessage() { if (this._state === 0) { this.message.textContent = this.props.intl.formatMessage(messages.generic); } else if (this._state === 1) { this.message.textContent = this.props.intl.formatMessage(messages.projectData); } else if (this.total > 0) { this.message.textContent = this.props.intl.formatMessage(messages.assetsKnown, { complete: this.complete, total: this.total }); } else { this.message.textContent = this.props.intl.formatMessage(messages.assetsUnknown); } } barInnerRef(element) { this.barInner = element; } messageRef(element) { this.message = element; } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.background, { [_loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.fullscreen]: this.props.isFullScreen }) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.container }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.blockAnimation }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { className: _loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.topBlock, src: _top_block_svg__WEBPACK_IMPORTED_MODULE_6___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { className: _loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.middleBlock, src: _middle_block_svg__WEBPACK_IMPORTED_MODULE_7___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { className: _loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.bottomBlock, src: _bottom_block_svg__WEBPACK_IMPORTED_MODULE_8___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.title }, mainMessages[this.props.messageId]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.messageContainerOuter }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.messageContainerInner, ref: this.messageRef })), !Object(_lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_10__["default"])() && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.twProgressOuter }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _loader_css__WEBPACK_IMPORTED_MODULE_3___default.a.twProgressInner, ref: this.barInnerRef })))); } } LoaderComponent.propTypes = { isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, intl: react_intl__WEBPACK_IMPORTED_MODULE_1__["intlShape"].isRequired, messageId: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string }; LoaderComponent.defaultProps = { isFullScreen: false, messageId: 'gui.loader.headline' }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["injectIntl"])(LoaderComponent)); /***/ }), /***/ "./src/components/loader/middle-block.svg": /*!************************************************!*\ !*** ./src/components/loader/middle-block.svg ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f9dce53613d5f85b311ce9f84423c08b.svg"; /***/ }), /***/ "./src/components/loader/top-block.svg": /*!*********************************************!*\ !*** ./src/components/loader/top-block.svg ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/bbbd98ae6a34eac772e34a57aaa5f977.svg"; /***/ }), /***/ "./src/components/loader/tw-progress-monitor.js": /*!******************************************************!*\ !*** ./src/components/loader/tw-progress-monitor.js ***! \******************************************************/ /*! exports provided: setProgressHandler, fetchWithProgress */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setProgressHandler", function() { return setProgressHandler; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchWithProgress", function() { return fetchWithProgress; }); // This file implements some extremely terrible tricks to monitor project loading progress. // Please don't use this as a reference for "good JS code" let total = 0; let complete = 0; // 0 - none // 1 - load json // 2 - load assets let state = 0; let currentProgress = 0; let progressHandler = (state, progress, complete, total) => {}; const setProgressHandler = newHandler => { progressHandler = newHandler; progressHandler(state, currentProgress, complete, total); }; let progressHandlerTimeout = null; const fireProgressHandler = () => { progressHandler(state, currentProgress, complete, total); progressHandlerTimeout = null; }; const queueProgressHandlerUpdate = () => { if (progressHandlerTimeout === null) { progressHandlerTimeout = requestAnimationFrame(fireProgressHandler); } }; const setProgress = progress => { if (progress < 0) { progress = 0; } if (progress > 1) { progress = 1; } currentProgress = progress; queueProgressHandlerUpdate(); }; const setState = newState => { if (state === newState) { return; } state = newState; complete = 0; total = 0; setProgress(0); }; const fetchWithProgress = url => { setState(1); return new Promise((resolve, reject) => { // fetch() does not support progress, so we use XMLHttpRequest const xhr = new XMLHttpRequest(); xhr.responseType = 'blob'; xhr.onload = () => { resolve(new Response(xhr.response, { status: xhr.status, statusText: xhr.statusText })); }; xhr.onloadend = () => setProgress(1); xhr.onerror = () => reject(new Error('[tw-progress-monitor] xhr failed with status' + xhr.status)); xhr.onprogress = e => { if (e.lengthComputable) { setProgress(e.loaded / e.total); } }; xhr.open('GET', url); xhr.send(); }); }; // Scratch uses fetch() to download the project JSON, so we override it to monitor when the project is being downloaded. const originalFetch = window.fetch; window.fetch = (url, opts) => { const isGET = typeof opts === 'object' && opts && opts.method === 'GET'; const isProjectURL = typeof url === 'string' && /^https:\/\/projects\.scratch\.mit\.edu\/\d+$/.test(url); if (isGET && isProjectURL) { return fetchWithProgress(url); } return originalFetch(url, opts); }; const handleWorkerMessage = e => { const data = e.data; if (Array.isArray(data)) { complete += data.length; setProgress(complete / total); } }; if (window.Worker) { let downloadWorker = null; const originalPostMessage = window.Worker.prototype.postMessage; window.Worker.prototype.postMessage = function (message) { if (downloadWorker === null) { if (message && message.url && message.id && message.options) { downloadWorker = this; downloadWorker.addEventListener('message', handleWorkerMessage); } } if (downloadWorker === this) { setState(2); total++; } originalPostMessage.call(this, message); }; } /***/ }), /***/ "./src/components/loupe/loupe.css": /*!****************************************!*\ !*** ./src/components/loupe/loupe.css ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./loupe.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/loupe/loupe.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/loupe/loupe.jsx": /*!****************************************!*\ !*** ./src/components/loupe/loupe.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _loupe_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./loupe.css */ "./src/components/loupe/loupe.css"); /* harmony import */ var _loupe_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_loupe_css__WEBPACK_IMPORTED_MODULE_4__); const _excluded = ["colorInfo"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const zoomScale = 3; class LoupeComponent extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['setCanvas']); } componentDidUpdate() { this.draw(); } draw() { const boxSize = 6 / zoomScale; const boxLineWidth = 1 / zoomScale; const colorRingWidth = 15 / zoomScale; const ctx = this.canvas.getContext('2d'); const { color, data, width, height } = this.props.colorInfo; this.canvas.width = zoomScale * width; this.canvas.height = zoomScale * height; // In order to scale the image data, must draw to a tmp canvas first const tmpCanvas = document.createElement('canvas'); tmpCanvas.width = width; tmpCanvas.height = height; const tmpCtx = tmpCanvas.getContext('2d'); const imageData = tmpCtx.createImageData(width, height); imageData.data.set(data); tmpCtx.putImageData(imageData, 0, 0); // Scale the loupe canvas and draw the zoomed image ctx.save(); ctx.scale(zoomScale, zoomScale); ctx.drawImage(tmpCanvas, 0, 0, width, height); // Draw an outlined square at the cursor position (cursor is hidden) ctx.lineWidth = boxLineWidth; ctx.strokeStyle = 'black'; ctx.fillStyle = "rgba(".concat(color.r, ", ").concat(color.g, ", ").concat(color.b, ", ").concat(color.a, ")"); ctx.beginPath(); ctx.rect(width / 2 - boxSize / 2, height / 2 - boxSize / 2, boxSize, boxSize); ctx.fill(); ctx.stroke(); // Draw a thick ring around the loupe showing the current color ctx.strokeStyle = "rgba(".concat(color.r, ", ").concat(color.g, ", ").concat(color.b, ", ").concat(color.a, ")"); ctx.lineWidth = colorRingWidth; ctx.beginPath(); ctx.moveTo(width, height / 2); ctx.arc(width / 2, height / 2, width / 2, 0, 2 * Math.PI); ctx.stroke(); ctx.restore(); } setCanvas(element) { this.canvas = element; } render() { const _this$props = this.props, { colorInfo } = _this$props, boxProps = _objectWithoutProperties(_this$props, _excluded); const x = colorInfo.x - zoomScale * colorInfo.width / 2; const y = colorInfo.y - zoomScale * colorInfo.height / 2; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], _extends({}, boxProps, { className: _loupe_css__WEBPACK_IMPORTED_MODULE_4___default.a.colorPicker, componentRef: this.setCanvas, element: "canvas", height: colorInfo.height, style: { transform: "translate(".concat(x, "px, ").concat(y, "px)"), width: colorInfo.width * zoomScale, height: colorInfo.height * zoomScale }, width: colorInfo.width })); } } LoupeComponent.propTypes = { colorInfo: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ color: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ r: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, g: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, b: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, a: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }), data: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(Uint8Array), width: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, x: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, y: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }) }; /* harmony default export */ __webpack_exports__["default"] = (LoupeComponent); /***/ }), /***/ "./src/components/menu-bar/author-info.css": /*!*************************************************!*\ !*** ./src/components/menu-bar/author-info.css ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./author-info.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/author-info.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/menu-bar/author-info.jsx": /*!*************************************************!*\ !*** ./src/components/menu-bar/author-info.jsx ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _user_avatar_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./user-avatar.jsx */ "./src/components/menu-bar/user-avatar.jsx"); /* harmony import */ var _author_info_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./author-info.css */ "./src/components/menu-bar/author-info.css"); /* harmony import */ var _author_info_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_author_info_css__WEBPACK_IMPORTED_MODULE_5__); const _excluded = ["projectId"]; function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const ActualAuthorInfo = _ref => { let { className, imageUrl, projectTitle, // TODO: use userId to link to user's profile userId, // eslint-disable-line no-unused-vars username } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(className, _author_info_css__WEBPACK_IMPORTED_MODULE_5___default.a.authorInfo) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_user_avatar_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _author_info_css__WEBPACK_IMPORTED_MODULE_5___default.a.avatar, imageUrl: imageUrl, username: username }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _author_info_css__WEBPACK_IMPORTED_MODULE_5___default.a.titleAuthor }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h1", { className: _author_info_css__WEBPACK_IMPORTED_MODULE_5___default.a.projectTitle }, projectTitle), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: _author_info_css__WEBPACK_IMPORTED_MODULE_5___default.a.usernameLine }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("a", { style: { color: "white" }, target: "_blank", href: "https://penguinmod.com/profile?user=" + username }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "by {username}", id: "gui.authorInfo.byUser", values: { username: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: _author_info_css__WEBPACK_IMPORTED_MODULE_5___default.a.username }, username) } })))))); }; ActualAuthorInfo.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, imageUrl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, projectTitle: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, userId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool]), username: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool]) }; const AuthorInfo = _ref2 => { let { projectId } = _ref2, props = _objectWithoutProperties(_ref2, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(ActualAuthorInfo, props); }; AuthorInfo.propTypes = { projectId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (AuthorInfo); /***/ }), /***/ "./src/components/menu-bar/community-button.css": /*!******************************************************!*\ !*** ./src/components/menu-bar/community-button.css ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./community-button.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/community-button.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/menu-bar/community-button.jsx": /*!******************************************************!*\ !*** ./src/components/menu-bar/community-button.jsx ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _button_button_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../button/button.jsx */ "./src/components/button/button.jsx"); /* harmony import */ var _icon_see_community_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./icon--see-community.svg */ "./src/components/menu-bar/icon--see-community.svg"); /* harmony import */ var _icon_see_community_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_icon_see_community_svg__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _community_button_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./community-button.css */ "./src/components/menu-bar/community-button.css"); /* harmony import */ var _community_button_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_community_button_css__WEBPACK_IMPORTED_MODULE_6__); const CommunityButton = _ref => { let { className, onClick } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(className, _community_button_css__WEBPACK_IMPORTED_MODULE_6___default.a.communityButton), iconClassName: _community_button_css__WEBPACK_IMPORTED_MODULE_6___default.a.communityButtonIcon, iconSrc: _icon_see_community_svg__WEBPACK_IMPORTED_MODULE_5___default.a, onClick: onClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "See Project Page", id: "gui.menuBar.seeProjectPage" })); }; CommunityButton.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, onClick: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func }; CommunityButton.defaultProps = { onClick: () => {} }; /* harmony default export */ __webpack_exports__["default"] = (CommunityButton); /***/ }), /***/ "./src/components/menu-bar/dropdown-caret.svg": /*!****************************************************!*\ !*** ./src/components/menu-bar/dropdown-caret.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/664d94e5cb8676c780c74c695f2e972c.svg"; /***/ }), /***/ "./src/components/menu-bar/favicon.png": /*!*********************************************!*\ !*** ./src/components/menu-bar/favicon.png ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/500c8018b36d12bcde6ef92e20e5ed5d.png"; /***/ }), /***/ "./src/components/menu-bar/google-drive-save.css": /*!*******************************************************!*\ !*** ./src/components/menu-bar/google-drive-save.css ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./google-drive-save.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/google-drive-save.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/menu-bar/google-drive-save.jsx": /*!*******************************************************!*\ !*** ./src/components/menu-bar/google-drive-save.jsx ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _button_button_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../button/button.jsx */ "./src/components/button/button.jsx"); /* harmony import */ var _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./google-drive-save.css */ "./src/components/menu-bar/google-drive-save.css"); /* harmony import */ var _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_google_drive_save_css__WEBPACK_IMPORTED_MODULE_6__); function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } class GoogleDriveSave extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); _defineProperty(this, "handleClick", () => { this.setState({ isModalOpen: true }); }); _defineProperty(this, "handleCloseModal", () => { if (!this.state.isProcessing) { this.setState({ isModalOpen: false, showNewFileInput: false }); } }); _defineProperty(this, "handleOverlayClick", e => { if (!this.state.isProcessing && this.modalContentRef.current && !this.modalContentRef.current.contains(e.target)) { this.handleCloseModal(); } }); _defineProperty(this, "startGoogleLogin", () => { if (this.state.isProcessing) return; localStorage.removeItem('googleDriveAccessToken'); localStorage.removeItem('googleDriveAccountEmail'); localStorage.removeItem('googleDriveAccountName'); const CLIENT_ID = "169451419993-v1b3s315s8dkui950j2nm15hetr5i0qk.apps.googleusercontent.com"; const REDIRECT_URI = "https://s-4-s-auth.hf.space/close2"; const SCOPES = "https://www.googleapis.com/auth/drive.file"; const messageListener = event => { if (event.data.token) { window.removeEventListener("message", messageListener); this.setState({ accessToken: event.data.token, currentAccountEmail: event.data.email || null, currentAccountName: event.data.name || null, isModalOpen: true }); this.fetchDriveFiles(event.data.token); } }; window.addEventListener("message", messageListener); const authUrl = "https://accounts.google.com/o/oauth2/auth?" + "client_id=".concat(CLIENT_ID) + "&redirect_uri=".concat(encodeURIComponent(REDIRECT_URI)) + "&response_type=token" + "&scope=".concat(encodeURIComponent(SCOPES)); window.open(authUrl, "_blank", "width=500,height=600"); }); _defineProperty(this, "fetchDriveFiles", async accessToken => { this.setState({ isLoading: true }); try { const response = await fetch("https://www.googleapis.com/drive/v3/files?q=(mimeType='application/x-scratch' or mimeType='image/png')", { headers: { Authorization: "Bearer ".concat(accessToken) } }); if (!response.ok) { throw new Error(await response.text()); } const data = await response.json(); this.setState({ files: data.files || [], isLoading: false }); } catch (error) { console.error("ファイル一覧取得エラー:", error); alert("error", "ファイル一覧の取得に失敗しました"); this.setState({ isLoading: false }); } }); _defineProperty(this, "updateFilePermission", async (fileId, permission) => { this.setState({ isProcessing: true }); try { await fetch("https://www.googleapis.com/drive/v3/files/".concat(fileId, "/permissions/anyone"), { method: "PATCH", headers: { Authorization: "Bearer ".concat(this.state.accessToken), "Content-Type": "application/json" }, body: JSON.stringify({ role: permission }) }); alert("success", "アクセス権限を更新しました"); } catch (error) { console.error("権限更新エラー:", error); alert("error", "アクセス権限の更新に失敗しました"); } finally { this.setState({ isProcessing: false }); } }); _defineProperty(this, "handleChangeAccount", () => { if (this.state.isProcessing) return; this.setState({ accessToken: null, currentAccountEmail: null, currentAccountName: null }); localStorage.removeItem('googleDriveAccessToken'); localStorage.removeItem('googleDriveAccountEmail'); localStorage.removeItem('googleDriveAccountName'); }); _defineProperty(this, "handleNewFileSave", async () => { this.setState({ isProcessing: true }); try { await this.saveToGoogleDrive(null, "".concat(this.state.newFileName, ".s4s.txt"), this.state.sharePermission); alert("success", "新規保存しました"); this.setState({ showNewFileInput: false }); this.fetchDriveFiles(this.state.accessToken); } catch (error) { console.error("新規保存エラー:", error); alert("error", "新規保存に失敗しました"); } finally { this.setState({ isProcessing: false }); } }); _defineProperty(this, "handleLoadFile", project => { if (this.state.isProcessing) return; const PROXY_URL = "https://drive-proxy-s4s.vercel.app/?file_id="; if (confirm("\"".concat(project.name, "\"\u3092\u8AAD\u307F\u8FBC\u307F\u307E\u3059\u304B\uFF1F\u73FE\u5728\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u5931\u308F\u308C\u307E\u3059\u3002"))) { const url = "".concat(PROXY_URL).concat(project.id); window.location.href = "?project_url=".concat(encodeURIComponent(url)); } }); _defineProperty(this, "handleReplaceFile", async project => { if (this.state.isProcessing) return; if (confirm("\"".concat(project.name, "\"\u3092\u73FE\u5728\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F"))) { this.setState({ isProcessing: true }); try { await this.saveToGoogleDrive(project.id, project.name); alert("success", "上書き保存しました"); this.fetchDriveFiles(this.state.accessToken); } catch (error) { console.error("ファイル上書きエラー:", error); alert("error", "ファイルの上書きに失敗しました"); } finally { this.setState({ isProcessing: false }); } } }); _defineProperty(this, "handleShareFile", fileId => { if (this.state.isProcessing) return; const SHARE_URL = "https://scratch-school.ct.ws/upload?id="; window.open("".concat(SHARE_URL).concat(fileId), "_blank"); }); _defineProperty(this, "handleDeleteFile", async (project, thumbnailFiles) => { if (this.state.isProcessing) return; if (confirm("\"".concat(project.name, "\"\u3068\u305D\u306E\u30B5\u30E0\u30CD\u30A4\u30EB\u3092\u5B8C\u5168\u306B\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F\u3053\u306E\u64CD\u4F5C\u306F\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3002"))) { this.setState({ isProcessing: true }); try { await this.deleteFile(project.id); const thumbnailToDelete = thumbnailFiles.find(thumb => thumb.name === "Scratch-Thumbnail-".concat(project.id, ".png")); if (thumbnailToDelete) { await this.deleteFile(thumbnailToDelete.id); } alert("success", "ファイルを削除しました"); this.fetchDriveFiles(this.state.accessToken); } catch (error) { console.error("削除エラー:", error); alert("error", "ファイルの削除に失敗しました"); } finally { this.setState({ isProcessing: false }); } } }); _defineProperty(this, "copyToClipboard", text => { if (this.state.isProcessing) return; navigator.clipboard.writeText(text).then(() => alert("success", "リンクをクリップボードにコピーしました")).catch(() => alert("error", "リンクのコピーに失敗しました")); }); this.state = { accessToken: localStorage.getItem('googleDriveAccessToken') || null, currentAccountEmail: localStorage.getItem('googleDriveAccountEmail') || null, currentAccountName: localStorage.getItem('googleDriveAccountName') || null, files: [], isModalOpen: false, isLoading: false, isProcessing: false, newFileName: props.projectTitle || '無題', showNewFileInput: false, sharePermission: 'reader', // 'reader', 'writer', or 'owner' selectedFileId: null }; this.modalContentRef = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createRef(); } componentDidMount() { // 初期化処理 } renderModal() { if (!this.state.isModalOpen) return null; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.modalOverlay, onClick: this.handleOverlayClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.modalContent, ref: this.modalContentRef }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.modalHeader }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h2", null, "Google\u30C9\u30E9\u30A4\u30D6\u306B\u4FDD\u5B58"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: this.handleCloseModal, className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.closeButton, disabled: this.state.isProcessing }, "\xD7")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.modalBody }, this.renderAuthSection(), this.state.accessToken && this.renderNewFileSection(), this.state.accessToken && this.renderFileList()), this.state.isProcessing && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.processingOverlay }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.spinner }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, "\u51E6\u7406\u4E2D...")))); } renderAuthSection() { if (this.state.accessToken) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.authSection }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.accountInfo }, "\u30ED\u30B0\u30A4\u30F3\u4E2D: ", this.state.currentAccountName || this.state.currentAccountEmail || 'Googleアカウント'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: this.handleChangeAccount, className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.changeAccountButton, disabled: this.state.isProcessing }, "\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u5909\u66F4")); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.authSection }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, "Google\u3067\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4FDD\u5B58\u307E\u305F\u306F\u66F4\u65B0\u3057\u307E\u3059\u3002"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: this.startGoogleLogin, className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.loginButton, disabled: this.state.isProcessing }, "Google\u3067\u30ED\u30B0\u30A4\u30F3")); } renderNewFileSection() { if (this.state.showNewFileInput) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.newFileSection }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.newFileInputGroup }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", { type: "text", value: this.state.newFileName, onChange: e => this.setState({ newFileName: e.target.value }), className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.newFileNameInput, placeholder: "\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5165\u529B", disabled: this.state.isProcessing }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.permissionDropdown }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", null, "\u516C\u958B\u8A2D\u5B9A: "), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("select", { value: this.state.sharePermission, onChange: e => this.setState({ sharePermission: e.target.value }), disabled: this.state.isProcessing }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", { value: "reader" }, "\u95B2\u89A7\u306E\u307F"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", { value: "writer" }, "\u7DE8\u96C6\u53EF\u80FD"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", { value: "owner" }, "\u6240\u6709\u8005"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: this.handleNewFileSave, className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.newFileSaveButton, disabled: !this.state.newFileName.trim() || this.state.isProcessing }, "\u4FDD\u5B58"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: () => this.setState({ showNewFileInput: false }), className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.newFileCancelButton, disabled: this.state.isProcessing }, "\u30AD\u30E3\u30F3\u30BB\u30EB"))); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.newFileSection }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: () => this.setState({ showNewFileInput: true, newFileName: window.vm.runtime.projectName || '無題', sharePermission: 'reader' }), className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.newFileButton, disabled: this.state.isProcessing }, "\u65B0\u898F\u4FDD\u5B58")); } renderFileList() { if (this.state.isLoading) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.loading }, "\u8AAD\u307F\u8FBC\u307F\u4E2D..."); } const projectFiles = this.state.files.filter(file => file.mimeType === 'application/x-scratch'); const thumbnailFiles = this.state.files.filter(file => file.mimeType === 'image/png'); if (projectFiles.length === 0) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.noFiles }, "\u4FDD\u5B58\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.fileListContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.fileListHeader }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h3", null, "\u4FDD\u5B58\u6E08\u307F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.fileList }, projectFiles.map(project => this.renderFileItem(project, thumbnailFiles)))); } renderFileItem(project, thumbnailFiles) { const thumbnail = thumbnailFiles.find(thumb => thumb.name === "Scratch-Thumbnail-".concat(project.id, ".png")); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { key: project.id, className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.fileItem }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.thumbnailContainer }, thumbnail ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { src: "https://drive.google.com/thumbnail?id=".concat(thumbnail.id, "&sz=w300"), alt: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B5\u30E0\u30CD\u30A4\u30EB", className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.thumbnail }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.thumbnailPlaceholder }, "\u30B5\u30E0\u30CD\u30A4\u30EB\u306A\u3057")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("h3", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.fileName }, project.name.replace('.s4s.txt', '')), this.renderShareLink(project.id), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.buttonGroup }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: () => this.handleLoadFile(project), className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.actionButton, disabled: this.state.isProcessing }, "\u8AAD\u307F\u8FBC\u3080"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: () => this.handleReplaceFile(project), className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.actionButton, disabled: this.state.isProcessing }, "\u4E0A\u66F8\u304D"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: () => this.handleShareFile(project.id), className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.actionButton, _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.shareButton), disabled: this.state.isProcessing }, "\u5171\u6709"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: () => this.handleDeleteFile(project, thumbnailFiles), className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.actionButton, _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.deleteButton), disabled: this.state.isProcessing }, "\u524A\u9664")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.permissionDropdown }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("label", null, "\u30A2\u30AF\u30BB\u30B9\u6A29\u9650: "), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("select", { value: this.state.sharePermission, onChange: e => this.updateFilePermission(project.id, e.target.value), disabled: this.state.isProcessing }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", { value: "reader" }, "\u95B2\u89A7\u306E\u307F"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", { value: "writer" }, "\u7DE8\u96C6\u53EF\u80FD"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("option", { value: "owner" }, "\u6240\u6709\u8005")))); } renderShareLink(fileId) { const SHORT_URL = "https://s4.rf.gd/"; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.linkContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.linkHeader }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: () => this.copyToClipboard("".concat(SHORT_URL).concat(fileId)), className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.copyButton, disabled: this.state.isProcessing }, "\u30EA\u30F3\u30AF\u3092\u30B3\u30D4\u30FC"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: () => window.open("https://scratch-school.ct.ws/bit.php?id=".concat(fileId)), className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.copyButton, disabled: this.state.isProcessing }, "\u30EA\u30F3\u30AF\u3092\u77ED\u7E2E"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { onClick: () => this.copyToClipboard(fileId), className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.copyButton, disabled: this.state.isProcessing }, "ID\u306E\u307F\u30B3\u30D4\u30FC")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("a", { href: "".concat(SHORT_URL).concat(fileId), target: "_blank", rel: "noopener noreferrer", className: _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.linkUrl }, "".concat(SHORT_URL).concat(fileId))); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(this.props.className, _google_drive_save_css__WEBPACK_IMPORTED_MODULE_6___default.a.saveButton), onClick: this.handleClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Google\u30C9\u30E9\u30A4\u30D6\u306B\u4FDD\u5B58", id: "google.drive.saveButton" })), this.renderModal()); } async deleteFile(fileId) { const response = await fetch("https://www.googleapis.com/drive/v3/files/".concat(fileId), { method: "DELETE", headers: { Authorization: "Bearer ".concat(this.state.accessToken) } }); if (!response.ok) { throw new Error(await response.text()); } } async saveToGoogleDrive(fileId, fileName) { let permission = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'reader'; const blob = await window.vm.saveProjectSb3(); const metadata = { name: fileName, mimeType: "application/x-scratch" }; const url = fileId ? "https://www.googleapis.com/upload/drive/v3/files/".concat(fileId, "?uploadType=multipart") : "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"; const form = new FormData(); form.append("metadata", new Blob([JSON.stringify(metadata)], { type: "application/json" })); form.append("file", blob); const method = fileId ? "PATCH" : "POST"; const uploadResponse = await fetch(url, { method, headers: { Authorization: "Bearer ".concat(this.state.accessToken) }, body: form }); if (!uploadResponse.ok) { throw new Error(await uploadResponse.text()); } const fileData = await uploadResponse.json(); try { var _existingThumbnailDat, _existingThumbnailDat2; const thumbnailDataUrl = await this.getProjectThumbnail(); const thumbnailBlob = await (await fetch(thumbnailDataUrl)).blob(); const thumbnailMetadata = { name: "Scratch-Thumbnail-".concat(fileData.id, ".png"), mimeType: "image/png" }; const existingThumbnailResponse = await fetch("https://www.googleapis.com/drive/v3/files?q=name='".concat(thumbnailMetadata.name, "'"), { headers: { Authorization: "Bearer ".concat(this.state.accessToken) } }); const existingThumbnailData = await existingThumbnailResponse.json(); const thumbnailFileId = (_existingThumbnailDat = existingThumbnailData.files) === null || _existingThumbnailDat === void 0 ? void 0 : (_existingThumbnailDat2 = _existingThumbnailDat[0]) === null || _existingThumbnailDat2 === void 0 ? void 0 : _existingThumbnailDat2.id; const thumbnailUrl = thumbnailFileId ? "https://www.googleapis.com/upload/drive/v3/files/".concat(thumbnailFileId, "?uploadType=multipart") : "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"; const thumbnailForm = new FormData(); thumbnailForm.append("metadata", new Blob([JSON.stringify(thumbnailMetadata)], { type: "application/json" })); thumbnailForm.append("file", thumbnailBlob); const thumbnailMethod = thumbnailFileId ? "PATCH" : "POST"; await fetch(thumbnailUrl, { method: thumbnailMethod, headers: { Authorization: "Bearer ".concat(this.state.accessToken) }, body: thumbnailForm }); } catch (thumbnailError) { console.warn("サムネイルの保存に失敗しました:", thumbnailError); } if (!fileId) { await fetch("https://www.googleapis.com/drive/v3/files/".concat(fileData.id, "/permissions"), { method: "POST", headers: { Authorization: "Bearer ".concat(this.state.accessToken), "Content-Type": "application/json" }, body: JSON.stringify({ role: permission, // ここで公開設定を使用 type: "anyone" }) }); } } getProjectThumbnail() { return new Promise(resolve => { window.vm.renderer.requestSnapshot(uri => { resolve(uri); }); }); } } GoogleDriveSave.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, showAlert: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, projectTitle: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string }; const mapStateToProps = state => ({ projectTitle: state.scratchGui.projectTitle }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(mapStateToProps)(GoogleDriveSave)); /***/ }), /***/ "./src/components/menu-bar/icon--about.svg": /*!*************************************************!*\ !*** ./src/components/menu-bar/icon--about.svg ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/5dbf111a76a93a93613ec81c16dfc6d3.svg"; /***/ }), /***/ "./src/components/menu-bar/icon--remix.svg": /*!*************************************************!*\ !*** ./src/components/menu-bar/icon--remix.svg ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f8ff5dbef05bc3337cd3660fb956cffa.svg"; /***/ }), /***/ "./src/components/menu-bar/icon--see-community.svg": /*!*********************************************************!*\ !*** ./src/components/menu-bar/icon--see-community.svg ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/2f9cda00a530ac237fc24063067377c3.svg"; /***/ }), /***/ "./src/components/menu-bar/menu-bar-menu.jsx": /*!***************************************************!*\ !*** ./src/components/menu-bar/menu-bar-menu.jsx ***! \***************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _containers_menu_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../containers/menu.jsx */ "./src/containers/menu.jsx"); const MenuBarMenu = _ref => { let { children, className, onRequestClose, open, place = 'right' } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: className }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_menu_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { open: open, place: place, onRequestClose: onRequestClose }, children)); }; MenuBarMenu.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node, className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, open: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, place: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(['left', 'right']) }; /* harmony default export */ __webpack_exports__["default"] = (MenuBarMenu); /***/ }), /***/ "./src/components/menu-bar/menu-bar.css": /*!**********************************************!*\ !*** ./src/components/menu-bar/menu-bar.css ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./menu-bar.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/menu-bar.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/menu-bar/menu-bar.jsx": /*!**********************************************!*\ !*** ./src/components/menu-bar/menu-bar.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/index.js"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var bowser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! bowser */ "./node_modules/bowser/src/bowser.js"); /* harmony import */ var bowser__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(bowser__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _button_button_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../button/button.jsx */ "./src/components/button/button.jsx"); /* harmony import */ var _community_button_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./community-button.jsx */ "./src/components/menu-bar/community-button.jsx"); /* harmony import */ var _share_button_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./share-button.jsx */ "./src/components/menu-bar/share-button.jsx"); /* harmony import */ var _google_drive_save_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./google-drive-save.jsx */ "./src/components/menu-bar/google-drive-save.jsx"); /* harmony import */ var _coming_soon_coming_soon_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../coming-soon/coming-soon.jsx */ "./src/components/coming-soon/coming-soon.jsx"); /* harmony import */ var _divider_divider_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../divider/divider.jsx */ "./src/components/divider/divider.jsx"); /* harmony import */ var _containers_language_selector_jsx__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../containers/language-selector.jsx */ "./src/containers/language-selector.jsx"); /* harmony import */ var _containers_project_watcher_jsx__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../containers/project-watcher.jsx */ "./src/containers/project-watcher.jsx"); /* harmony import */ var _menu_bar_menu_jsx__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./menu-bar-menu.jsx */ "./src/components/menu-bar/menu-bar-menu.jsx"); /* harmony import */ var _menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../menu/menu.jsx */ "./src/components/menu/menu.jsx"); /* harmony import */ var _project_title_input_jsx__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./project-title-input.jsx */ "./src/components/menu-bar/project-title-input.jsx"); /* harmony import */ var _author_info_jsx__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./author-info.jsx */ "./src/components/menu-bar/author-info.jsx"); /* harmony import */ var _containers_sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../containers/sb3-downloader.jsx */ "./src/containers/sb3-downloader.jsx"); /* harmony import */ var _containers_deletion_restorer_jsx__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../containers/deletion-restorer.jsx */ "./src/containers/deletion-restorer.jsx"); /* harmony import */ var _containers_turbo_mode_jsx__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../containers/turbo-mode.jsx */ "./src/containers/turbo-mode.jsx"); /* harmony import */ var _containers_menu_bar_hoc_jsx__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../containers/menu-bar-hoc.jsx */ "./src/containers/menu-bar-hoc.jsx"); /* harmony import */ var _containers_tw_framerate_changer_jsx__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../containers/tw-framerate-changer.jsx */ "./src/containers/tw-framerate-changer.jsx"); /* harmony import */ var _containers_tw_change_username_jsx__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../containers/tw-change-username.jsx */ "./src/containers/tw-change-username.jsx"); /* harmony import */ var _containers_tw_cloud_toggler_jsx__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../containers/tw-cloud-toggler.jsx */ "./src/containers/tw-cloud-toggler.jsx"); /* harmony import */ var _tw_save_status_jsx__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./tw-save-status.jsx */ "./src/components/menu-bar/tw-save-status.jsx"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_mode__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../reducers/mode */ "./src/reducers/mode.js"); /* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../reducers/project-state */ "./src/reducers/project-state.js"); /* harmony import */ var _reducers_menus__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../reducers/menus */ "./src/reducers/menus.js"); /* harmony import */ var _reducers_tw_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../reducers/tw.js */ "./src/reducers/tw.js"); /* harmony import */ var _lib_collect_metadata__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../lib/collect-metadata */ "./src/lib/collect-metadata.js"); /* harmony import */ var _menu_bar_css__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./menu-bar.css */ "./src/components/menu-bar/menu-bar.css"); /* harmony import */ var _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default = /*#__PURE__*/__webpack_require__.n(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36__); /* harmony import */ var _icon_remix_svg__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./icon--remix.svg */ "./src/components/menu-bar/icon--remix.svg"); /* harmony import */ var _icon_remix_svg__WEBPACK_IMPORTED_MODULE_37___default = /*#__PURE__*/__webpack_require__.n(_icon_remix_svg__WEBPACK_IMPORTED_MODULE_37__); /* harmony import */ var _dropdown_caret_svg__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./dropdown-caret.svg */ "./src/components/menu-bar/dropdown-caret.svg"); /* harmony import */ var _dropdown_caret_svg__WEBPACK_IMPORTED_MODULE_38___default = /*#__PURE__*/__webpack_require__.n(_dropdown_caret_svg__WEBPACK_IMPORTED_MODULE_38__); /* harmony import */ var _language_selector_language_icon_svg__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../language-selector/language-icon.svg */ "./src/components/language-selector/language-icon.svg"); /* harmony import */ var _language_selector_language_icon_svg__WEBPACK_IMPORTED_MODULE_39___default = /*#__PURE__*/__webpack_require__.n(_language_selector_language_icon_svg__WEBPACK_IMPORTED_MODULE_39__); /* harmony import */ var _icon_about_svg__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./icon--about.svg */ "./src/components/menu-bar/icon--about.svg"); /* harmony import */ var _icon_about_svg__WEBPACK_IMPORTED_MODULE_40___default = /*#__PURE__*/__webpack_require__.n(_icon_about_svg__WEBPACK_IMPORTED_MODULE_40__); /* harmony import */ var _tw_error_svg__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./tw-error.svg */ "./src/components/menu-bar/tw-error.svg"); /* harmony import */ var _tw_error_svg__WEBPACK_IMPORTED_MODULE_41___default = /*#__PURE__*/__webpack_require__.n(_tw_error_svg__WEBPACK_IMPORTED_MODULE_41__); /* harmony import */ var _tw_moon_svg__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./tw-moon.svg */ "./src/components/menu-bar/tw-moon.svg"); /* harmony import */ var _tw_moon_svg__WEBPACK_IMPORTED_MODULE_42___default = /*#__PURE__*/__webpack_require__.n(_tw_moon_svg__WEBPACK_IMPORTED_MODULE_42__); /* harmony import */ var _favicon_png__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./favicon.png */ "./src/components/menu-bar/favicon.png"); /* harmony import */ var _favicon_png__WEBPACK_IMPORTED_MODULE_43___default = /*#__PURE__*/__webpack_require__.n(_favicon_png__WEBPACK_IMPORTED_MODULE_43__); /* harmony import */ var _scratch_logo_svg__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./scratch-logo.svg */ "./src/components/menu-bar/scratch-logo.svg"); /* harmony import */ var _scratch_logo_svg__WEBPACK_IMPORTED_MODULE_44___default = /*#__PURE__*/__webpack_require__.n(_scratch_logo_svg__WEBPACK_IMPORTED_MODULE_44__); /* harmony import */ var _lib_shared_messages__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../../lib/shared-messages */ "./src/lib/shared-messages.js"); /* harmony import */ var _tw_see_inside_jsx__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./tw-see-inside.jsx */ "./src/components/menu-bar/tw-see-inside.jsx"); /* harmony import */ var _lib_isScratchDesktop_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../../lib/isScratchDesktop.js */ "./src/lib/isScratchDesktop.js"); //import { consoleLogs } from '../../lib/pm-log-capture.js'; const ariaMessages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ language: { "id": "gui.menuBar.LanguageSelector", "defaultMessage": "language selector" }, tutorials: { "id": "gui.menuBar.tutorialsLibrary", "defaultMessage": "Tutorials" } }); const twMessages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ compileError: { "id": "tw.menuBar.compileError", "defaultMessage": "{sprite}: {error}" } }); const MenuBarItemTooltip = _ref => { let { children, className, enable, id, place = 'bottom' } = _ref; if (enable) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_7___default.a.Fragment, null, children); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_coming_soon_coming_soon_jsx__WEBPACK_IMPORTED_MODULE_14__["ComingSoonTooltip"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.comingSoon, className), place: place, tooltipClassName: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.comingSoonTooltip, tooltipId: id }, children); }; MenuBarItemTooltip.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node, className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, enable: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, id: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, place: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(['top', 'bottom', 'left', 'right']) }; const MenuItemTooltip = _ref2 => { let { id, isRtl, children, className } = _ref2; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_coming_soon_coming_soon_jsx__WEBPACK_IMPORTED_MODULE_14__["ComingSoonTooltip"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.comingSoon, className), isRtl: isRtl, place: isRtl ? 'left' : 'right', tooltipClassName: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.comingSoonTooltip, tooltipId: id }, children); }; MenuItemTooltip.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node, className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, id: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool }; const AboutButton = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.hoverable), iconClassName: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.aboutIcon, iconSrc: _icon_about_svg__WEBPACK_IMPORTED_MODULE_40___default.a, onClick: props.onClick }); AboutButton.propTypes = { onClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func.isRequired }; // Unlike , this uses an actual const MenuItemLink = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("a", { href: props.href // _blank is safe because of noopener // eslint-disable-next-line react/jsx-no-target-blank , target: "_blank", rel: "noopener noreferrer", className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuItemLink }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], null, props.children)); MenuItemLink.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.node.isRequired, href: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string.isRequired }; class MenuBar extends react__WEBPACK_IMPORTED_MODULE_7___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default()(this, ['handleClickSeeInside', 'handleClickNew', 'handleClickNewWindow', 'handleClickRemix', 'handleClickSave', 'handleClickSaveAsCopy', 'handleClickPackager', 'handleClickRestorePoints', 'handleClickSeeCommunity', 'handleClickShare', 'handleKeyPress', 'handleLanguageMouseUp', 'handleRestoreOption', 'getSaveToComputerHandler', 'restoreOptionMessage']); } componentDidMount() { document.addEventListener('keydown', this.handleKeyPress); } componentWillUnmount() { document.removeEventListener('keydown', this.handleKeyPress); } handleClickNew() { // if the project is dirty, and user owns the project, we will autosave. // but if they are not logged in and can't save, user should consider // downloading or logging in first. // Note that if user is logged in and editing someone else's project, // they'll lose their work. const readyToReplaceProject = this.props.confirmReadyToReplaceProject(this.props.intl.formatMessage(_lib_shared_messages__WEBPACK_IMPORTED_MODULE_45__["default"].replaceProjectWarning)); this.props.onRequestCloseFile(); if (readyToReplaceProject) { this.props.onClickNew(this.props.canSave && this.props.canCreateNew); } this.props.onRequestCloseFile(); } handleClickNewWindow() { this.props.onClickNewWindow(); this.props.onRequestCloseFile(); } handleClickRemix() { this.props.onClickRemix(); this.props.onRequestCloseFile(); } handleClickSave() { this.props.onClickSave(); this.props.onRequestCloseFile(); } handleClickSaveAsCopy() { this.props.onClickSaveAsCopy(); this.props.onRequestCloseFile(); } handleClickPackager() { this.props.onClickPackager(); this.props.onRequestCloseFile(); } handleClickRestorePoints() { this.props.onClickRestorePoints(); this.props.onRequestCloseFile(); } handleClickSeeCommunity(waitForUpdate) { if (this.props.shouldSaveBeforeTransition()) { this.props.autoUpdateProject(); // save before transitioning to project page waitForUpdate(true); // queue the transition to project page } else { waitForUpdate(false); // immediately transition to project page } } handleClickShare(waitForUpdate) { if (!this.props.isShared) { if (this.props.canShare) { // save before transitioning to project page this.props.onShare(); } if (this.props.canSave) { // save before transitioning to project page this.props.autoUpdateProject(); waitForUpdate(true); // queue the transition to project page } else { waitForUpdate(false); // immediately transition to project page } } } handleRestoreOption(restoreFun) { return () => { restoreFun(); this.props.onRequestCloseEdit(); }; } handleKeyPress(event) { const modifier = bowser__WEBPACK_IMPORTED_MODULE_6___default.a.mac ? event.metaKey : event.ctrlKey; if (modifier && event.key.toLowerCase() === 's') { this.props.handleSaveProject(); event.preventDefault(); } } getSaveToComputerHandler(downloadProjectCallback) { return () => { this.props.onRequestCloseFile(); downloadProjectCallback(); if (this.props.onProjectTelemetryEvent) { const metadata = Object(_lib_collect_metadata__WEBPACK_IMPORTED_MODULE_35__["default"])(this.props.vm, this.props.projectTitle, this.props.locale); this.props.onProjectTelemetryEvent('projectDidSave', metadata); } }; } handleLanguageMouseUp(e) { if (!this.props.languageMenuOpen) { this.props.onClickLanguage(e); } } handleClickMode(effect) { const body = document.body; body.style = ''; if (!effect) return; // fix some weird sizing, just applies on effects body.style = "width:100%;height:100%;position:fixed;overflow:hidden;"; switch (effect) { case 'night': body.style.filter = 'brightness(90%) sepia(100%) hue-rotate(340deg) saturate(400%)'; break; case 'blur': body.style.filter = 'blur(4px)'; break; case 'comic': body.style.filter = 'brightness(70%) contrast(1000%) grayscale(100%)'; break; case 'toxic': body.style.filter = 'sepia(100%) hue-rotate(58deg) saturate(400%)'; break; case 'uhd': body.style.filter = 'url("./bloomfilter.svg#bloom")'; break; case 'upsidedown': body.style.transform = 'rotateX(180deg) rotateY(180deg)'; break; } } restoreOptionMessage(deletedItem) { switch (deletedItem) { case 'Sprite': return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Restore Sprite", id: "gui.menuBar.restoreSprite" }); case 'Sound': return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Restore Sound", id: "gui.menuBar.restoreSound" }); case 'Costume': return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Restore Costume", id: "gui.menuBar.restoreCostume" }); default: { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Restore", /* eslint-disable-line max-len */ id: "gui.menuBar.restore" }); } } } handleClickSeeInside() { this.props.onClickSeeInside(); } buildAboutMenu(onClickAbout) { if (!onClickAbout) { // hide the button return null; } if (typeof onClickAbout === 'function') { // make a button which calls a function return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(AboutButton, { onClick: onClickAbout }); } // assume it's an array of objects // each item must have a 'title' FormattedMessage and a 'handleClick' function // generate a menu with items for each object in the array return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.hoverable, { [_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.active]: this.props.aboutMenuOpen }), onMouseUp: this.props.onRequestOpenAbout }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("img", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.aboutIcon, src: _icon_about_svg__WEBPACK_IMPORTED_MODULE_40___default.a, draggable: false }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_bar_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarMenu), open: this.props.aboutMenuOpen, place: this.props.isRtl ? 'right' : 'left', onRequestClose: this.props.onRequestCloseAbout }, onClickAbout.map(itemProps => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { key: itemProps.title, isRtl: this.props.isRtl, onClick: this.wrapAboutMenuCallback(itemProps.onClick) }, itemProps.title)))); } wrapAboutMenuCallback(callback) { return () => { callback(); this.props.onRequestCloseAbout(); }; } /* - hidden until this is actually helpful for developers - unhide when a solution is found for not blocking error tracking/using 3rd parties handleClickDownloadLogs() { const str = JSON.stringify(consoleLogs); const a = document.createElement('a'); a.style.display = 'none'; document.body.append(a); const url = window.URL.createObjectURL(new Blob([str])); a.href = url; a.download = 'pm-log-trace.json'; a.click(); window.URL.revokeObjectURL(url); a.remove(); } */ render() { const saveNowMessage = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Save now", id: "gui.menuBar.saveNow" }); const createCopyMessage = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Save as a copy", id: "gui.menuBar.saveAsCopy" }); const remixMessage = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Remix", id: "gui.menuBar.remix" }); const newProjectMessage = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "New", id: "gui.menuBar.new" }); const remixButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarButton, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.remixButton), iconClassName: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.remixButtonIcon, iconSrc: _icon_remix_svg__WEBPACK_IMPORTED_MODULE_37___default.a, onClick: this.handleClickRemix }, remixMessage); // Show the About button only if we have a handler for it (like in the desktop app) const aboutButton = this.buildAboutMenu(this.props.onClickAbout); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(this.props.className, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBar) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.mainMenu }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.fileGroup }, true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("img", { alt: "Scratch", className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.scratchLogo, { [_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.clickable]: typeof this.props.onClickLogo !== 'undefined' }), draggable: false, src: _favicon_png__WEBPACK_IMPORTED_MODULE_43___default.a, onClick: this.props.onClickLogo })) : undefined, this.props.canChangeLanguage && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.hoverable, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.languageMenu) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("img", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.languageIcon, src: _language_selector_language_icon_svg__WEBPACK_IMPORTED_MODULE_39___default.a, width: "24", height: "24" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("img", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.languageCaret, src: _dropdown_caret_svg__WEBPACK_IMPORTED_MODULE_38___default.a, width: "8", height: "5" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_language_selector_jsx__WEBPACK_IMPORTED_MODULE_16__["default"], { label: this.props.intl.formatMessage(ariaMessages.language) })), this.props.onClickTheme && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.hoverable), onMouseUp: this.props.onClickTheme }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("img", { src: _tw_moon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, width: "24", height: "24", draggable: false })), this.props.compileErrors.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.hoverable, { [_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.active]: this.props.errorsMenuOpen }), onMouseUp: this.props.onClickErrors }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.errorsMenu) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("img", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.languageIcon, src: _tw_error_svg__WEBPACK_IMPORTED_MODULE_41___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("img", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.languageCaret, src: _dropdown_caret_svg__WEBPACK_IMPORTED_MODULE_38___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_bar_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarMenu), open: this.props.errorsMenuOpen, place: this.props.isRtl ? 'left' : 'right', onRequestClose: this.props.onRequestCloseErrors }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(MenuItemLink, { href: "https://discord.gg/NZ9MBMYTZh" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Some scripts could not be compiled.", id: "tw.menuBar.reportError1" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(MenuItemLink, { href: "https://discord.gg/NZ9MBMYTZh" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "This is a bug. Please report it.", id: "tw.menuBar.reportError2" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuSection"], null, this.props.compileErrors.map(_ref3 => { let { id, sprite, error } = _ref3; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { key: id }, this.props.intl.formatMessage(twMessages.compileError, { sprite, error })); }))))), this.props.canManageFiles && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.hoverable, { [_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.active]: this.props.fileMenuOpen }), onMouseUp: this.props.onClickFile }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "File", id: "gui.menuBar.file" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_bar_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarMenu), open: this.props.fileMenuOpen, place: this.props.isRtl ? 'left' : 'right', onRequestClose: this.props.onRequestCloseFile }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { isRtl: this.props.isRtl, onClick: this.handleClickNew }, newProjectMessage)), this.props.onClickNewWindow && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { isRtl: this.props.isRtl, onClick: this.handleClickNewWindow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "New window" // eslint-disable-next-line max-len , id: "tw.menuBar.newWindow" })), (this.props.canSave || this.props.canCreateCopy || this.props.canRemix) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuSection"], null, this.props.canSave && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.handleClickSave }, saveNowMessage), this.props.canCreateCopy && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.handleClickSaveAsCopy }, createCopyMessage), this.props.canRemix && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.handleClickRemix }, remixMessage)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.props.onStartSelectingFileUpload }, this.props.intl.formatMessage(_lib_shared_messages__WEBPACK_IMPORTED_MODULE_45__["default"].loadFromComputerTitle)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_22__["default"], null, (_className, downloadProject, extended) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_7___default.a.Fragment, null, extended.available && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_7___default.a.Fragment, null, extended.name !== null && /*#__PURE__*/ // eslint-disable-next-line max-len react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.getSaveToComputerHandler(extended.saveToLastFile) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Save to {file}" // eslint-disable-next-line max-len , id: "tw.saveTo", values: { file: extended.name } })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.getSaveToComputerHandler(extended.saveAsNew) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Save as..." // eslint-disable-next-line max-len , id: "tw.saveAs" }))), Object(_lib_isScratchDesktop_js__WEBPACK_IMPORTED_MODULE_47__["notScratchDesktop"])() && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.getSaveToComputerHandler(downloadProject) }, extended.available ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Save to separate file..." // eslint-disable-next-line max-len , id: "tw.oldDownload" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Save to your computer", // eslint-disable-line max-len id: "gui.menuBar.downloadToComputer" }))))), this.props.isDirectoryPickerSupported && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.props.onStartFolderUpload }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Load from a folder", id: "pm.menuBar.loadFromFolder" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_22__["default"], null, (_className, downloadProject, extended) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_7___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.getSaveToComputerHandler(extended.saveAsFolder) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Export project to folder", id: "pm.menuBar.exportToFolder" }))))), this.props.onClickPackager && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.handleClickPackager }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Package project" // eslint-disable-next-line max-len , id: "tw.menuBar.package" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.handleClickRestorePoints }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Restore points", id: "tw.menuBar.restorePoints" }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.hoverable, { [_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.active]: this.props.editMenuOpen }), onMouseUp: this.props.onClickEdit }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.editMenu) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Edit", id: "gui.menuBar.edit" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_bar_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarMenu), open: this.props.editMenuOpen, place: this.props.isRtl ? 'left' : 'right', onRequestClose: this.props.onRequestCloseEdit }, this.props.isPlayerOnly ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_deletion_restorer_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], null, (handleRestore, _ref4) => { let { restorable, deletedItem } = _ref4; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()({ [_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.disabled]: !restorable }), onClick: this.handleRestoreOption(handleRestore) }, this.restoreOptionMessage(deletedItem)); }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_turbo_mode_jsx__WEBPACK_IMPORTED_MODULE_24__["default"], null, (toggleTurboMode, _ref5) => { let { turboMode } = _ref5; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: toggleTurboMode }, turboMode ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Turn off Turbo Mode", id: "gui.menuBar.turboModeOff" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Turn on Turbo Mode", id: "gui.menuBar.turboModeOn" })); }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_tw_framerate_changer_jsx__WEBPACK_IMPORTED_MODULE_26__["default"], null, (changeFramerate, _ref6) => { let { framerate } = _ref6; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: changeFramerate }, framerate === 60 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Turn off 60 FPS Mode", id: "tw.menuBar.60off" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Turn on 60 FPS Mode", id: "tw.menuBar.60on" })); }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_tw_change_username_jsx__WEBPACK_IMPORTED_MODULE_27__["default"], null, changeUsername => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()({ [_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.disabled]: this.props.usernameLoggedIn }), onClick: this.props.usernameLoggedIn ? () => {} : changeUsername }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Change Username", id: "tw.menuBar.changeUsername" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_tw_cloud_toggler_jsx__WEBPACK_IMPORTED_MODULE_28__["default"], null, (toggleCloudVariables, _ref7) => { let { enabled, canUseCloudVariables } = _ref7; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()({ [_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.disabled]: !canUseCloudVariables }), onClick: toggleCloudVariables }, canUseCloudVariables ? enabled ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Disable Cloud Variables", id: "tw.menuBar.cloudOff" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Enable Cloud Variables", id: "tw.menuBar.cloudOn" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Cloud Variables are not Available", id: "tw.menuBar.cloudUnavailable" })); })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_19__["MenuItem"], { onClick: this.props.onClickSettings }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Gameplay Settings", id: "pm.menuBar.moreSettings" }))))), this.props.onClickAddonSettings && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.hoverable), onMouseUp: this.props.onClickAddonSettings }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"] // Note: this string is used by scratch-vm for the addons blocks category , { defaultMessage: "Addons", id: "tw.menuBar.addons" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.hoverable), onMouseUp: this.props.onClickSettings }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Settings", id: "pm.menuBar.gameplaySettings" })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_divider_divider_jsx__WEBPACK_IMPORTED_MODULE_15__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.divider) }), this.props.canEditTitle ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.growable) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(MenuBarItemTooltip, { enable: true, id: "title-field" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_project_title_input_jsx__WEBPACK_IMPORTED_MODULE_20__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.titleFieldGrowable) }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem) }, this.props.canRemix ? remixButton : []), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem, _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.communityButtonWrapper) }, this.props.enableCommunity ? (this.props.isShowingProject || this.props.isUpdating) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_project_watcher_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], { onDoneUpdating: this.props.onSeeCommunity }, waitForUpdate => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_community_button_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarButton /* eslint-disable react/jsx-no-bind */, onClick: () => { this.handleClickSeeCommunity(waitForUpdate); } /* eslint-enable react/jsx-no-bind */ })) : this.props.showComingSoon ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(MenuBarItemTooltip, { id: "community-button" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_community_button_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarButton })) : this.props.enableSeeInside ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_tw_see_inside_jsx__WEBPACK_IMPORTED_MODULE_46__["default"], { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarButton, onClick: this.handleClickSeeInside }) : []), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_google_drive_save_jsx__WEBPACK_IMPORTED_MODULE_13__["default"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem }, this.props.isShowingProject && this.props.canEditTitle ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_share_button_jsx__WEBPACK_IMPORTED_MODULE_12__["default"], { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarButton, isShared: this.props.isShared }) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("a", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.feedbackLink, href: "https://scratch-school.ct.ws", rel: "noopener noreferrer", target: "_blank" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.feedbackButton }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Back to Home", id: "pm.backToHomeButton" }))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.accountInfoGroup }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", { className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarItem }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_tw_save_status_jsx__WEBPACK_IMPORTED_MODULE_29__["default"], null))), aboutButton); } } MenuBar.propTypes = { enableSeeInside: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, onClickSeeInside: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, aboutMenuOpen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, accountMenuOpen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, authorId: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool]), authorThumbnailUrl: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, authorUsername: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool]), autoUpdateProject: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, canChangeLanguage: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, canCreateCopy: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, canCreateNew: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, canEditTitle: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, canManageFiles: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, canRemix: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, canSave: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, canShare: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, className: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, compileErrors: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({ sprite: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, error: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, id: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number })), confirmReadyToReplaceProject: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, editMenuOpen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, enableCommunity: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, fileMenuOpen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, handleSaveProject: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], isDirectoryPickerSupported: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, isPlayerOnly: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, isShared: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, isShowingProject: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, isUpdating: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, languageMenuOpen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, locale: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string.isRequired, loginMenuOpen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, logo: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, onClickAbout: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, // button mode: call this callback when the About button is clicked prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.arrayOf( // menu mode: list of items in the About menu prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({ title: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, // text for the menu item onClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func // call this callback when the menu item is clicked }))]), onClickAccount: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickAddonSettings: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickTheme: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickPackager: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickRestorePoints: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickEdit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickFile: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickLanguage: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickLogin: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickLogo: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickNew: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickNewWindow: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickRemix: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickSave: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickSaveAsCopy: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickSettings: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onClickErrors: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onRequestCloseErrors: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onLogOut: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onOpenRegistration: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onOpenTipLibrary: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onProjectTelemetryEvent: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onRequestOpenAbout: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onRequestCloseAbout: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onRequestCloseAccount: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onRequestCloseEdit: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onRequestCloseFile: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onRequestCloseLanguage: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onRequestCloseLogin: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onSeeCommunity: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onShare: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onStartSelectingFileUpload: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onStartFolderUpload: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onToggleLoginOpen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, projectId: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, projectTitle: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, renderLogin: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, sessionExists: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, errorsMenuOpen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, shouldSaveBeforeTransition: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, showComingSoon: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, userOwnsProject: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, username: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, usernameLoggedIn: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool.isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_8___default.a).isRequired }; MenuBar.defaultProps = { logo: _scratch_logo_svg__WEBPACK_IMPORTED_MODULE_44___default.a, usernameLoggedIn: false, onShare: () => {} }; const mapStateToProps = (state, ownProps) => { const loadingState = state.scratchGui.projectState.loadingState; const user = state.session && state.session.session && state.session.session.user; return { aboutMenuOpen: Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["aboutMenuOpen"])(state), accountMenuOpen: Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["accountMenuOpen"])(state), authorThumbnailUrl: state.scratchGui.tw.author.thumbnail, authorUsername: state.scratchGui.tw.author.username, compileErrors: state.scratchGui.tw.compileErrors, fileMenuOpen: Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["fileMenuOpen"])(state), editMenuOpen: Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["editMenuOpen"])(state), isPlayerOnly: state.scratchGui.mode.isPlayerOnly, isRtl: state.locales.isRtl, isUpdating: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_32__["getIsUpdating"])(loadingState), isShowingProject: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_32__["getIsShowingProject"])(loadingState), languageMenuOpen: Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["languageMenuOpen"])(state), locale: state.locales.locale, loginMenuOpen: Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["loginMenuOpen"])(state), projectId: state.scratchGui.projectState.projectId, projectTitle: state.scratchGui.projectTitle, sessionExists: state.session && typeof state.session.session !== 'undefined', errorsMenuOpen: Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["errorsMenuOpen"])(state), username: user ? user.username : null, usernameLoggedIn: state.scratchGui.tw.usernameLoggedIn, userOwnsProject: ownProps.authorUsername && user && ownProps.authorUsername === user.username, vm: state.scratchGui.vm }; }; const mapDispatchToProps = dispatch => ({ onClickSeeInside: () => dispatch(Object(_reducers_mode__WEBPACK_IMPORTED_MODULE_31__["setPlayer"])(false)), autoUpdateProject: () => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_32__["autoUpdateProject"])()), onOpenTipLibrary: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_30__["openTipsLibrary"])()), onClickAccount: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["openAccountMenu"])()), onRequestCloseAccount: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["closeAccountMenu"])()), onClickFile: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["openFileMenu"])()), onRequestCloseFile: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["closeFileMenu"])()), onClickEdit: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["openEditMenu"])()), onRequestCloseEdit: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["closeEditMenu"])()), onClickLanguage: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["openLanguageMenu"])()), onRequestCloseLanguage: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["closeLanguageMenu"])()), onClickLogin: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["openLoginMenu"])()), onRequestCloseLogin: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["closeLoginMenu"])()), onClickErrors: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["openErrorsMenu"])()), onRequestCloseErrors: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["closeErrorsMenu"])()), onRequestOpenAbout: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["openAboutMenu"])()), onRequestCloseAbout: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["closeAboutMenu"])()), onClickNew: needSave => { dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_32__["requestNewProject"])(needSave)); dispatch(Object(_reducers_tw_js__WEBPACK_IMPORTED_MODULE_34__["setFileHandle"])(null)); }, onClickRemix: () => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_32__["remixProject"])()), onClickSave: () => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_32__["manualUpdateProject"])()), onClickSaveAsCopy: () => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_32__["saveProjectAsCopy"])()), onClickRestorePoints: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_30__["openRestorePointModal"])()), onClickSettings: () => { dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_30__["openSettingsModal"])()); dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_33__["closeEditMenu"])()); }, onSeeCommunity: () => dispatch(Object(_reducers_mode__WEBPACK_IMPORTED_MODULE_31__["setPlayer"])(true)) }); /* harmony default export */ __webpack_exports__["default"] = (Object(redux__WEBPACK_IMPORTED_MODULE_2__["compose"])(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"], _containers_menu_bar_hoc_jsx__WEBPACK_IMPORTED_MODULE_25__["default"], Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(mapStateToProps, mapDispatchToProps))(MenuBar)); /***/ }), /***/ "./src/components/menu-bar/project-title-input.css": /*!*********************************************************!*\ !*** ./src/components/menu-bar/project-title-input.css ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./project-title-input.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/project-title-input.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/menu-bar/project-title-input.jsx": /*!*********************************************************!*\ !*** ./src/components/menu-bar/project-title-input.jsx ***! \*********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _reducers_project_title__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../reducers/project-title */ "./src/reducers/project-title.js"); /* harmony import */ var _forms_buffered_input_hoc_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../forms/buffered-input-hoc.jsx */ "./src/components/forms/buffered-input-hoc.jsx"); /* harmony import */ var _forms_input_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../forms/input.jsx */ "./src/components/forms/input.jsx"); /* harmony import */ var _project_title_input_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./project-title-input.css */ "./src/components/menu-bar/project-title-input.css"); /* harmony import */ var _project_title_input_css__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_project_title_input_css__WEBPACK_IMPORTED_MODULE_8__); const BufferedInput = Object(_forms_buffered_input_hoc_jsx__WEBPACK_IMPORTED_MODULE_6__["default"])(_forms_input_jsx__WEBPACK_IMPORTED_MODULE_7__["default"]); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({ projectTitlePlaceholder: { "id": "gui.gui.projectTitlePlaceholder", "defaultMessage": "Project title here" } }); const ProjectTitleInput = _ref => { let { className, intl, onSubmit, projectTitle } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(BufferedInput, { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_project_title_input_css__WEBPACK_IMPORTED_MODULE_8___default.a.titleField, className), maxLength: "100", placeholder: intl.formatMessage(messages.projectTitlePlaceholder), tabIndex: "0", type: "text", value: projectTitle, onSubmit: onSubmit }); }; ProjectTitleInput.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"].isRequired, onSubmit: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, projectTitle: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string }; const mapStateToProps = state => ({ projectTitle: state.scratchGui.projectTitle }); const mapDispatchToProps = dispatch => ({ onSubmit: title => dispatch(Object(_reducers_project_title__WEBPACK_IMPORTED_MODULE_5__["setProjectTitle"])(title)) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(mapStateToProps, mapDispatchToProps)(ProjectTitleInput))); /***/ }), /***/ "./src/components/menu-bar/save-status.css": /*!*************************************************!*\ !*** ./src/components/menu-bar/save-status.css ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./save-status.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/save-status.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/menu-bar/scratch-logo.svg": /*!**************************************************!*\ !*** ./src/components/menu-bar/scratch-logo.svg ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/8bcd9c00e30a0af9d832735651fd9643.svg"; /***/ }), /***/ "./src/components/menu-bar/share-button.css": /*!**************************************************!*\ !*** ./src/components/menu-bar/share-button.css ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./share-button.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/share-button.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/menu-bar/share-button.jsx": /*!**************************************************!*\ !*** ./src/components/menu-bar/share-button.jsx ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _button_button_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../button/button.jsx */ "./src/components/button/button.jsx"); /* harmony import */ var _share_loading_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./share-loading.svg */ "./src/components/menu-bar/share-loading.svg"); /* harmony import */ var _share_loading_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_share_loading_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _share_button_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./share-button.css */ "./src/components/menu-bar/share-button.css"); /* harmony import */ var _share_button_css__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_share_button_css__WEBPACK_IMPORTED_MODULE_8__); const getProjectThumbnail = () => new Promise(resolve => { window.vm.renderer.requestSnapshot(uri => { resolve(uri); }); }); const getProjectUri = () => new Promise(resolve => { window.vm.saveProjectSb3().then(blob => new Promise(resolve => { const reader = new FileReader(); reader.onload = element => { resolve(element.target.result); }; reader.readAsDataURL(blob); })).then(resolve); }); const isUploadAvailable = async () => { let res = null; try { res = await fetch('https://projects.penguinmod.com/api/v1/projects/canuploadprojects').then(res => res.json()); } catch (_unused) { // failed to fetch entirely return false; } return res.canUpload; }; class ShareButton extends react__WEBPACK_IMPORTED_MODULE_4___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default()(this, ['handleMessageEvent', 'wrapperEventHandler', 'onUploadProject']); this.state = { loading: false, imageUri: '' }; } componentDidMount() { window.addEventListener('message', this.wrapperEventHandler); } componentWillUnmount() { window.removeEventListener('message', this.wrapperEventHandler); } wrapperEventHandler(e) { this.handleMessageEvent(e); } async handleMessageEvent(e) { if (!e.origin.startsWith("https://penguinmod.com")) { return; } if (!e.data.p4) { return; } const packagerData = e.data.p4; if (packagerData.type !== 'validate') { return; } const imageUri = this.state.imageUri; e.source.postMessage({ p4: { type: 'image', uri: imageUri } }, e.origin); const projectUri = await getProjectUri(); e.source.postMessage({ p4: { type: 'project', uri: projectUri } }, e.origin); e.source.postMessage({ p4: { type: 'finished' } }, e.origin); } async onUploadProject() { if (this.state.loading) return; if (!window.vm) return; if (!window.vm.runtime) return; if (!window.vm.renderer) return; // get the project thumbnail await new Promise(resolve => { getProjectThumbnail().then(dataUrl => { this.setState({ imageUri: dataUrl }); resolve(); }); window.vm.renderer.draw(); // force the callback to run setTimeout(() => { window.vm.renderer.draw(); // force the callback to run }, 50); setTimeout(() => { window.vm.renderer.draw(); // force the callback to run }, 100); }); this.setState({ loading: true }); isUploadAvailable().then(available => { var _this$props$extraProj, _this$props$extraProj2; this.setState({ loading: false }); if (!available) { // error? console.warn('Project Server did not respond. Uploading is not available.'); alert('Uploading is currently unavailable. Please wait for the server to be restored.'); return; } const isEdit = this.props.usernameLoggedIn && ((_this$props$extraProj = this.props.extraProjectInfo) === null || _this$props$extraProj === void 0 ? void 0 : _this$props$extraProj.author) === this.props.username; let editPiece = ''; let remixPiece = ''; const id = location.hash.replace('#', ''); if ((_this$props$extraProj2 = this.props.extraProjectInfo) !== null && _this$props$extraProj2 !== void 0 && _this$props$extraProj2.isRemix) { remixPiece = "&remix=".concat(id); } let targetPage = 'upload'; if (isEdit) { targetPage = 'edit'; editPiece = "&id=".concat(id); } const url = location.origin; window.open("https://penguinmod.com/".concat(targetPage, "?name=").concat(this.props.projectTitle).concat(editPiece).concat(remixPiece, "&external=").concat(url), '_blank'); }); } render() { var _this$props$extraProj3, _this$props$extraProj4; const isRemix = (_this$props$extraProj3 = this.props.extraProjectInfo) === null || _this$props$extraProj3 === void 0 ? void 0 : _this$props$extraProj3.isRemix; const isEdit = this.props.usernameLoggedIn && ((_this$props$extraProj4 = this.props.extraProjectInfo) === null || _this$props$extraProj4 === void 0 ? void 0 : _this$props$extraProj4.author) === this.props.username; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(this.props.className, _share_button_css__WEBPACK_IMPORTED_MODULE_8___default.a.shareButton, { [_share_button_css__WEBPACK_IMPORTED_MODULE_8___default.a.shareButtonIsShared]: this.props.isShared }, { [_share_button_css__WEBPACK_IMPORTED_MODULE_8___default.a.disabled]: this.state.loading }), onClick: this.onUploadProject }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_share_button_css__WEBPACK_IMPORTED_MODULE_8___default.a.shareContent) }, isEdit ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Upload Edits", id: "gui.menuBar.pmedit" }) : isRemix ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Remix", id: "gui.menuBar.remix" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Upload", id: "gui.menuBar.pmshare" }), this.state.loading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_share_button_css__WEBPACK_IMPORTED_MODULE_8___default.a.icon), draggable: false, src: _share_loading_svg__WEBPACK_IMPORTED_MODULE_7___default.a, height: 20, width: 20 }) : null)); } } ShareButton.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, isShared: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool, projectTitle: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, extraProjectInfo: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({ accepted: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool, isRemix: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool, remixId: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.number, tooLarge: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool, author: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, releaseDate: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape(Date), isUpdated: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool }), username: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, usernameLoggedIn: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool }; const mapStateToProps = state => ({ projectTitle: state.scratchGui.projectTitle, extraProjectInfo: state.scratchGui.tw.extraProjectInfo, username: state.scratchGui.tw.username, usernameLoggedIn: state.scratchGui.tw.usernameLoggedIn }); // eslint-disable-next-line no-unused-vars const mapDispatchToProps = dispatch => ({}); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(mapStateToProps, mapDispatchToProps)(ShareButton))); /***/ }), /***/ "./src/components/menu-bar/share-loading.svg": /*!***************************************************!*\ !*** ./src/components/menu-bar/share-loading.svg ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/8f531cd80e1aa712fdff13a69c9c62e2.svg"; /***/ }), /***/ "./src/components/menu-bar/tw-error.svg": /*!**********************************************!*\ !*** ./src/components/menu-bar/tw-error.svg ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/74546102be38f592d24b4330a16a8639.svg"; /***/ }), /***/ "./src/components/menu-bar/tw-moon.svg": /*!*********************************************!*\ !*** ./src/components/menu-bar/tw-moon.svg ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/90e939d170002c61a50116ed55763b19.svg"; /***/ }), /***/ "./src/components/menu-bar/tw-save-status.jsx": /*!****************************************************!*\ !*** ./src/components/menu-bar/tw-save-status.jsx ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _containers_inline_messages_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/inline-messages.jsx */ "./src/containers/inline-messages.jsx"); /* harmony import */ var _containers_sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../containers/sb3-downloader.jsx */ "./src/containers/sb3-downloader.jsx"); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../reducers/alerts */ "./src/reducers/alerts.js"); /* harmony import */ var _save_status_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./save-status.css */ "./src/components/menu-bar/save-status.css"); /* harmony import */ var _save_status_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_save_status_css__WEBPACK_IMPORTED_MODULE_7__); const TWSaveStatus = _ref => { let { alertsList, fileHandle, projectChanged } = _ref; return Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_6__["filterInlineAlerts"])(alertsList).length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_inline_messages_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], null) : projectChanged && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], null, (_className, _downloadProjectCallback, _ref2) => { let { smartSave } = _ref2; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { onClick: smartSave, className: _save_status_css__WEBPACK_IMPORTED_MODULE_7___default.a.saveNow }, fileHandle ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Save as {file}", id: "tw.menuBar.saveAs", values: { file: fileHandle.name } }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Save to your computer", id: "gui.menuBar.downloadToComputer" })); }); }; TWSaveStatus.propTypes = { alertsList: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object), fileHandle: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({ name: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string }), projectChanged: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool }; const mapStateToProps = state => ({ alertsList: state.scratchGui.alerts.alertsList, fileHandle: state.scratchGui.tw.fileHandle, projectChanged: state.scratchGui.projectChanged }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(mapStateToProps, () => ({}))(TWSaveStatus)); /***/ }), /***/ "./src/components/menu-bar/tw-see-inside.css": /*!***************************************************!*\ !*** ./src/components/menu-bar/tw-see-inside.css ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./tw-see-inside.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/tw-see-inside.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/menu-bar/tw-see-inside.jsx": /*!***************************************************!*\ !*** ./src/components/menu-bar/tw-see-inside.jsx ***! \***************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _button_button_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../button/button.jsx */ "./src/components/button/button.jsx"); /* harmony import */ var _icon_see_community_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./icon--see-community.svg */ "./src/components/menu-bar/icon--see-community.svg"); /* harmony import */ var _icon_see_community_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_icon_see_community_svg__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _tw_see_inside_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tw-see-inside.css */ "./src/components/menu-bar/tw-see-inside.css"); /* harmony import */ var _tw_see_inside_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_tw_see_inside_css__WEBPACK_IMPORTED_MODULE_6__); const SeeInsideButton = _ref => { let { className, onClick } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(className, _tw_see_inside_css__WEBPACK_IMPORTED_MODULE_6___default.a.seeInsideButton), iconClassName: _tw_see_inside_css__WEBPACK_IMPORTED_MODULE_6___default.a.seeInsideButtonIcon, iconSrc: _icon_see_community_svg__WEBPACK_IMPORTED_MODULE_5___default.a, iconWidth: "20", iconHeight: "20", onClick: onClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "See inside", id: "tw.menuBar.seeInside" })); }; SeeInsideButton.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, onClick: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func }; SeeInsideButton.defaultProps = { onClick: () => {} }; /* harmony default export */ __webpack_exports__["default"] = (SeeInsideButton); /***/ }), /***/ "./src/components/menu-bar/user-avatar.css": /*!*************************************************!*\ !*** ./src/components/menu-bar/user-avatar.css ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./user-avatar.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu-bar/user-avatar.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/menu-bar/user-avatar.jsx": /*!*************************************************!*\ !*** ./src/components/menu-bar/user-avatar.jsx ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _user_avatar_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./user-avatar.css */ "./src/components/menu-bar/user-avatar.css"); /* harmony import */ var _user_avatar_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_user_avatar_css__WEBPACK_IMPORTED_MODULE_3__); const UserAvatar = _ref => { let { className, imageUrl, username } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("a", { target: "_blank", href: "https://penguinmod.com/profile?user=" + username }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(className, _user_avatar_css__WEBPACK_IMPORTED_MODULE_3___default.a.userThumbnail), src: imageUrl })); }; UserAvatar.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, imageUrl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (UserAvatar); /***/ }), /***/ "./src/components/menu/menu.css": /*!**************************************!*\ !*** ./src/components/menu/menu.css ***! \**************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./menu.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/menu/menu.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/menu/menu.jsx": /*!**************************************!*\ !*** ./src/components/menu/menu.jsx ***! \**************************************/ /*! exports provided: default, MenuItem, MenuSection */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return MenuComponent; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MenuItem", function() { return MenuItem; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MenuSection", function() { return MenuSection; }); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _menu_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./menu.css */ "./src/components/menu/menu.css"); /* harmony import */ var _menu_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_menu_css__WEBPACK_IMPORTED_MODULE_3__); const MenuComponent = _ref => { let { className = '', children, componentRef, place = 'right' } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("ul", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.menu, className, { [_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.left]: place === 'left', [_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.right]: place === 'right' }), ref: componentRef }, children); }; MenuComponent.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, componentRef: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, place: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['left', 'right']) }; const MenuItem = _ref2 => { let { children, className, onClick } = _ref2; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("li", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.menuItem, _menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.hoverable, className), onClick: onClick }, children); }; MenuItem.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; const addDividerClassToFirstChild = (child, id) => child && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.cloneElement(child, { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(child.className, { [_menu_css__WEBPACK_IMPORTED_MODULE_3___default.a.menuSection]: id === 0 }), key: id }); const MenuSection = _ref3 => { let { children } = _ref3; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_2___default.a.Children.map(children, addDividerClassToFirstChild)); }; MenuSection.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node }; /***/ }), /***/ "./src/components/meter/meter.css": /*!****************************************!*\ !*** ./src/components/meter/meter.css ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./meter.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/meter/meter.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/meter/meter.jsx": /*!****************************************!*\ !*** ./src/components/meter/meter.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _meter_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./meter.css */ "./src/components/meter/meter.css"); /* harmony import */ var _meter_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_meter_css__WEBPACK_IMPORTED_MODULE_2__); const Meter = props => { const { level, width, height } = props; const nGreen = 11; const nYellow = 5; const nRed = 3; const nBars = nGreen + nYellow + nRed; const barSpacing = 2.5; const barRounding = 3; const barHeight = (height - barSpacing * (nBars + 1)) / nBars; const nBarsToMask = nBars - Math.floor(level * nBars); const scale = (nBarsToMask * (barHeight + barSpacing) + barSpacing / 2) / height; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _meter_css__WEBPACK_IMPORTED_MODULE_2___default.a.maskContainer, style: { height: "".concat(height, "px") } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("svg", { className: _meter_css__WEBPACK_IMPORTED_MODULE_2___default.a.container, height: height, width: width }, Array(nBars).fill(0).map((value, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("rect", { className: index < nGreen ? _meter_css__WEBPACK_IMPORTED_MODULE_2___default.a.green : index < nGreen + nYellow ? _meter_css__WEBPACK_IMPORTED_MODULE_2___default.a.yellow : _meter_css__WEBPACK_IMPORTED_MODULE_2___default.a.red, height: barHeight, key: index, rx: barRounding, ry: barRounding, width: width - 2, x: 1, y: height - (barSpacing + barHeight) * (index + 1) }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _meter_css__WEBPACK_IMPORTED_MODULE_2___default.a.mask, style: { transform: "scaleY(".concat(scale, ")") } })); }; Meter.propTypes = { height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, level: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, width: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }; /* harmony default export */ __webpack_exports__["default"] = (Meter); /***/ }), /***/ "./src/components/mic-indicator/mic-indicator.css": /*!********************************************************!*\ !*** ./src/components/mic-indicator/mic-indicator.css ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./mic-indicator.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/mic-indicator/mic-indicator.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/mic-indicator/mic-indicator.jsx": /*!********************************************************!*\ !*** ./src/components/mic-indicator/mic-indicator.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _mic_indicator_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mic-indicator.css */ "./src/components/mic-indicator/mic-indicator.css"); /* harmony import */ var _mic_indicator_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_mic_indicator_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _mic_indicator_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mic-indicator.svg */ "./src/components/mic-indicator/mic-indicator.svg"); /* harmony import */ var _mic_indicator_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_mic_indicator_svg__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_screen_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../lib/screen-utils */ "./src/lib/screen-utils.js"); const MicIndicatorComponent = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: props.className, style: Object(_lib_screen_utils__WEBPACK_IMPORTED_MODULE_4__["stageSizeToTransform"])(props.stageSize) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { className: _mic_indicator_css__WEBPACK_IMPORTED_MODULE_2___default.a.micImg, src: _mic_indicator_svg__WEBPACK_IMPORTED_MODULE_3___default.a })); MicIndicatorComponent.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, stageSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, widthDefault: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, heightDefault: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (MicIndicatorComponent); /***/ }), /***/ "./src/components/mic-indicator/mic-indicator.svg": /*!********************************************************!*\ !*** ./src/components/mic-indicator/mic-indicator.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/4da38973d5ffd15c54e80894d430288c.svg"; /***/ }), /***/ "./src/components/modal/modal.css": /*!****************************************!*\ !*** ./src/components/modal/modal.css ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/modal/modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/modal/modal.jsx": /*!****************************************!*\ !*** ./src/components/modal/modal.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-modal */ "./node_modules/react-modal/lib/index.js"); /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_modal__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _button_button_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../button/button.jsx */ "./src/components/button/button.jsx"); /* harmony import */ var _close_button_close_button_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../close-button/close-button.jsx */ "./src/components/close-button/close-button.jsx"); /* harmony import */ var _lib_assets_icon_back_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../lib/assets/icon--back.svg */ "./src/lib/assets/icon--back.svg"); /* harmony import */ var _lib_assets_icon_back_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_lib_assets_icon_back_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _lib_assets_icon_help_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../lib/assets/icon--help.svg */ "./src/lib/assets/icon--help.svg"); /* harmony import */ var _lib_assets_icon_help_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_lib_assets_icon_help_svg__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modal.css */ "./src/components/modal/modal.css"); /* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_modal_css__WEBPACK_IMPORTED_MODULE_10__); const ModalComponent = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_modal__WEBPACK_IMPORTED_MODULE_3___default.a, { isOpen: true, className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.modalContent, props.className, { [_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.fullScreen]: props.fullScreen }), contentLabel: props.contentLabel, overlayClassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.modalOverlay, { [_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.scrollable]: props.scrollable }), onRequestClose: props.onRequestClose }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { dir: props.isRtl ? 'rtl' : 'ltr', direction: "column", grow: 1 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.header, props.headerClassName) }, props.onHelp ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.headerItem, _modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.headerItemHelp) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.helpButton, iconSrc: _lib_assets_icon_help_svg__WEBPACK_IMPORTED_MODULE_9___default.a, onClick: props.onHelp }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Help", id: "gui.modal.help" }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.headerItem, _modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.headerItemTitle) }, props.headerImage ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.headerImage, src: props.headerImage }) : null, props.contentLabel), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.headerItem, _modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.headerItemClose) }, props.fullScreen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.backButton, iconSrc: _lib_assets_icon_back_svg__WEBPACK_IMPORTED_MODULE_8___default.a, onClick: props.onRequestClose }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "Back", id: "gui.modal.back" })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_close_button_close_button_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { size: _close_button_close_button_jsx__WEBPACK_IMPORTED_MODULE_7__["default"].SIZE_LARGE, onClick: props.onRequestClose }))), props.children)); ModalComponent.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, contentLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object]).isRequired, fullScreen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, headerClassName: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, headerImage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onHelp: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, scrollable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; /* harmony default export */ __webpack_exports__["default"] = (ModalComponent); /***/ }), /***/ "./src/components/monitor-list/monitor-list.css": /*!******************************************************!*\ !*** ./src/components/monitor-list/monitor-list.css ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./monitor-list.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/monitor-list/monitor-list.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/monitor-list/monitor-list.jsx": /*!******************************************************!*\ !*** ./src/components/monitor-list/monitor-list.jsx ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_monitor_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../containers/monitor.jsx */ "./src/containers/monitor.jsx"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var immutable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! immutable */ "./node_modules/immutable/dist/immutable.js"); /* harmony import */ var immutable__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(immutable__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _lib_screen_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../lib/screen-utils */ "./src/lib/screen-utils.js"); /* harmony import */ var _monitor_list_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./monitor-list.css */ "./src/components/monitor-list/monitor-list.css"); /* harmony import */ var _monitor_list_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_monitor_list_css__WEBPACK_IMPORTED_MODULE_7__); let different = 0; const MonitorList = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"] // Use static `monitor-overlay` class for bounds of draggables , { className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_monitor_list_css__WEBPACK_IMPORTED_MODULE_7___default.a.monitorList, 'monitor-overlay'), style: { width: props.stageSize.width, height: props.stageSize.height } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { className: _monitor_list_css__WEBPACK_IMPORTED_MODULE_7___default.a.monitorListScaler, style: Object(_lib_screen_utils__WEBPACK_IMPORTED_MODULE_6__["stageSizeToTransform"])(props.stageSize) }, props.monitors.valueSeq().filter(m => m.visible).map(monitorData => { var _monitorData$value; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_containers_monitor_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { draggable: props.draggable, height: monitorData.height, id: monitorData.id, isDiscrete: monitorData.isDiscrete, key: monitorData.id, max: monitorData.sliderMax, min: monitorData.sliderMin, mode: monitorData.mode, opcode: monitorData.opcode, params: monitorData.params, spriteName: monitorData.spriteName, targetId: monitorData.targetId, value: monitorData.value, width: monitorData.width, x: monitorData.x, y: monitorData.y, onDragEnd: props.onMonitorChange, needsUpdate: (_monitorData$value = monitorData.value) !== null && _monitorData$value !== void 0 && _monitorData$value._monitorUpToDate ? different : ++different }); }))); MonitorList.propTypes = { draggable: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool.isRequired, monitors: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.instanceOf(immutable__WEBPACK_IMPORTED_MODULE_5__["OrderedMap"]), onMonitorChange: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func.isRequired, stageSize: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, widthDefault: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, heightDefault: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number }).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (MonitorList); /***/ }), /***/ "./src/components/monitor/default-monitor.jsx": /*!****************************************************!*\ !*** ./src/components/monitor/default-monitor.jsx ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./monitor.css */ "./src/components/monitor/monitor.css"); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_monitor_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _containers_dom_element_renderer_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../containers/dom-element-renderer.jsx */ "./src/containers/dom-element-renderer.jsx"); const DefaultMonitor = _ref => { let { categoryColor, label, value, isHTML } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_2___default.a.defaultMonitor }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_2___default.a.row }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_2___default.a.label }, label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_2___default.a.value, style: { background: categoryColor } }, isHTML ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_containers_dom_element_renderer_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { domElement: value }) : String(value)))); }; DefaultMonitor.propTypes = { categoryColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, isHTML: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]) }; /* harmony default export */ __webpack_exports__["default"] = (DefaultMonitor); /***/ }), /***/ "./src/components/monitor/large-monitor.jsx": /*!**************************************************!*\ !*** ./src/components/monitor/large-monitor.jsx ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./monitor.css */ "./src/components/monitor/monitor.css"); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_monitor_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _containers_dom_element_renderer_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../containers/dom-element-renderer.jsx */ "./src/containers/dom-element-renderer.jsx"); const LargeMonitor = _ref => { let { categoryColor, value, isHTML } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_2___default.a.largeMonitor }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_2___default.a.largeValue, style: { background: categoryColor } }, isHTML ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_containers_dom_element_renderer_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { domElement: value }) : String(value))); }; LargeMonitor.propTypes = { categoryColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, isHTML: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]) }; /* harmony default export */ __webpack_exports__["default"] = (LargeMonitor); /***/ }), /***/ "./src/components/monitor/list-monitor-scroller.jsx": /*!**********************************************************!*\ !*** ./src/components/monitor/list-monitor-scroller.jsx ***! \**********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./monitor.css */ "./src/components/monitor/monitor.css"); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_monitor_css__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var react_virtualized__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-virtualized */ "./node_modules/react-virtualized/dist/es/index.js"); /* harmony import */ var _containers_dom_element_renderer_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../containers/dom-element-renderer.jsx */ "./src/containers/dom-element-renderer.jsx"); class ListMonitorScroller extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['rowRenderer', 'noRowsRenderer', 'handleEventFactory']); } handleEventFactory(index) { return () => this.props.onActivate(index); } noRowsRenderer() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_monitor_css__WEBPACK_IMPORTED_MODULE_5___default.a.listRow, _monitor_css__WEBPACK_IMPORTED_MODULE_5___default.a.listEmpty) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "(empty)", id: "gui.monitor.listMonitor.empty" })); } rowRenderer(_ref) { let { index, key, style } = _ref; const item = this.props.values[index]; const renderedValue = item.toListItem ? item.toListItem() : item.toMonitorContent ? item.toMonitorContent() : item.toReporterContent ? item.toReporterContent() : item; const value = item.isHTML ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_containers_dom_element_renderer_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { domElement: renderedValue }) : String(item); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_5___default.a.listRow, key: key, style: style }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_5___default.a.listIndex }, index + 1 /* one indexed */), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_5___default.a.listValue, dataIndex: index, style: { background: this.props.categoryColor }, onClick: this.props.draggable ? this.handleEventFactory(index) : null }, this.props.draggable && this.props.activeIndex === index ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_5___default.a.inputWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { autoFocus: true, autoComplete: false, className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_monitor_css__WEBPACK_IMPORTED_MODULE_5___default.a.listInput, 'no-drag'), spellCheck: false, type: "text", value: this.props.activeValue, onBlur: this.props.onDeactivate, onChange: this.props.onInput, onFocus: this.props.onFocus, onKeyDown: this.props.onKeyPress // key down to get ahead of blur }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_5___default.a.removeButton, onMouseDown: this.props.onRemove // mousedown to get ahead of blur }, '✖︎')) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_5___default.a.valueInner }, value))); } render() { const { height, values, width, activeIndex, activeValue } = this.props; // Keep the active index in view if defined, else must be undefined for List component const scrollToIndex = activeIndex === null ? undefined : activeIndex; /* eslint-disable-line no-undefined */ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_virtualized__WEBPACK_IMPORTED_MODULE_6__["List"], { activeIndex: activeIndex, activeValue: activeValue, height: height - 42 /* Header/footer size, approx */, noRowsRenderer: this.noRowsRenderer, rowCount: values.length, rowHeight: 24 /* Row size is same for all rows */, rowRenderer: this.rowRenderer, scrollToIndex: scrollToIndex /* eslint-disable-line no-undefined */, values: values, width: width }); } } ListMonitorScroller.propTypes = { activeIndex: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, activeValue: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, categoryColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, draggable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, onActivate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onDeactivate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onInput: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onKeyPress: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onRemove: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, values: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number])), width: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }; /* harmony default export */ __webpack_exports__["default"] = (ListMonitorScroller); /***/ }), /***/ "./src/components/monitor/list-monitor.jsx": /*!*************************************************!*\ !*** ./src/components/monitor/list-monitor.jsx ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./monitor.css */ "./src/components/monitor/monitor.css"); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_monitor_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _list_monitor_scroller_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./list-monitor-scroller.jsx */ "./src/components/monitor/list-monitor-scroller.jsx"); const _excluded = ["draggable", "label", "width", "height", "value", "onResizeMouseDown", "onAdd"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const ListMonitor = _ref => { let { draggable, label, width, height, value, onResizeMouseDown, onAdd } = _ref, rowProps = _objectWithoutProperties(_ref, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_4___default.a.listMonitor, style: { width: "".concat(width, "px"), height: "".concat(height, "px") } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_4___default.a.listHeader }, label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_4___default.a.listBody }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_list_monitor_scroller_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], _extends({ draggable: draggable, height: height, values: value, width: width }, rowProps))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_4___default.a.listFooter }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(draggable ? _monitor_css__WEBPACK_IMPORTED_MODULE_4___default.a.addButton : null, 'no-drag'), onClick: draggable ? onAdd : null }, '+' /* TODO waiting on asset */), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_4___default.a.footerLength }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "length {length}", id: "gui.monitor.listMonitor.listLength", values: { length: value.length } })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(draggable ? _monitor_css__WEBPACK_IMPORTED_MODULE_4___default.a.resizeHandle : null, 'no-drag'), onMouseDown: draggable ? onResizeMouseDown : null }, '=' /* TODO waiting on asset */))); }; ListMonitor.propTypes = { activeIndex: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, categoryColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, draggable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, onActivate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onAdd: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onResizeMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]))]), width: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }; ListMonitor.defaultProps = { width: 110, height: 200 }; /* harmony default export */ __webpack_exports__["default"] = (ListMonitor); /***/ }), /***/ "./src/components/monitor/monitor.css": /*!********************************************!*\ !*** ./src/components/monitor/monitor.css ***! \********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./monitor.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/monitor/monitor.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/monitor/monitor.jsx": /*!********************************************!*\ !*** ./src/components/monitor/monitor.jsx ***! \********************************************/ /*! exports provided: default, monitorModes */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return MonitorComponent; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "monitorModes", function() { return monitorModes; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_draggable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-draggable */ "./node_modules/react-draggable/dist/react-draggable.js"); /* harmony import */ var react_draggable__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_draggable__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var react_contextmenu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-contextmenu */ "./node_modules/react-contextmenu/es6/index.js"); /* harmony import */ var _context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../context-menu/context-menu.jsx */ "./src/components/context-menu/context-menu.jsx"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _default_monitor_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./default-monitor.jsx */ "./src/components/monitor/default-monitor.jsx"); /* harmony import */ var _large_monitor_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./large-monitor.jsx */ "./src/components/monitor/large-monitor.jsx"); /* harmony import */ var _containers_slider_monitor_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../containers/slider-monitor.jsx */ "./src/containers/slider-monitor.jsx"); /* harmony import */ var _containers_list_monitor_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../containers/list-monitor.jsx */ "./src/containers/list-monitor.jsx"); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./monitor.css */ "./src/components/monitor/monitor.css"); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_monitor_css__WEBPACK_IMPORTED_MODULE_12__); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } const categories = { data: '#FF8C1A', sensing: '#5CB1D6', sound: '#CF63CF', looks: '#9966FF', motion: '#4C97FF', list: '#FC662C', control: '#FFAB19', extension: '#0FBD8C' }; const modes = { default: _default_monitor_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], large: _large_monitor_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], slider: _containers_slider_monitor_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], list: _containers_list_monitor_jsx__WEBPACK_IMPORTED_MODULE_11__["default"] }; const MonitorComponent = props => { var _categories$props$cat; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_contextmenu__WEBPACK_IMPORTED_MODULE_5__["ContextMenuTrigger"] // TW: if export is defined, we always show it, even outside of the editor , { disable: !props.draggable && !props.onExport, holdToDisplay: props.mode === 'slider' ? -1 : 1000, id: "monitor-".concat(props.label) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_draggable__WEBPACK_IMPORTED_MODULE_3___default.a, { bounds: ".monitor-overlay" // Class for monitor container , cancel: ".no-drag" // Class used for slider input to prevent drag , defaultClassNameDragging: _monitor_css__WEBPACK_IMPORTED_MODULE_12___default.a.dragging, disabled: !props.draggable, onStop: props.onDragEnd }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: _monitor_css__WEBPACK_IMPORTED_MODULE_12___default.a.monitorContainer, componentRef: props.componentRef, onDoubleClick: props.mode === 'list' || !props.draggable ? null : props.onNextMode, "data-id": props.id, "data-opcode": props.opcode }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modes[props.mode], _objectSpread({ categoryColor: (_categories$props$cat = categories[props.category]) !== null && _categories$props$cat !== void 0 ? _categories$props$cat : props.category }, props)))), /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.createPortal( /*#__PURE__*/ // Use a portal to render the context menu outside the flow to avoid // positioning conflicts between the monitors `transform: scale` and // the context menus `position: fixed`. For more details, see // http://meyerweb.com/eric/thoughts/2011/09/12/un-fixing-fixed-elements-with-css-transforms/ react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["ContextMenu"], { id: "monitor-".concat(props.label) }, props.draggable && props.onSetModeToDefault && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["MenuItem"], { onClick: props.onSetModeToDefault }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "normal readout", id: "gui.monitor.contextMenu.default" })), props.draggable && props.onSetModeToLarge && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["MenuItem"], { onClick: props.onSetModeToLarge }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "large readout", id: "gui.monitor.contextMenu.large" })), props.draggable && props.onSetModeToSlider && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["MenuItem"], { onClick: props.onSetModeToSlider }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "slider", id: "gui.monitor.contextMenu.slider" })), props.draggable && props.onSliderPromptOpen && props.mode === 'slider' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["BorderedMenuItem"], { onClick: props.onSliderPromptOpen }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "change slider range", id: "gui.monitor.contextMenu.sliderRange" })), props.onImport && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["MenuItem"], { onClick: props.onImport }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "import", id: "gui.monitor.contextMenu.import" })), props.onExport && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["MenuItem"], { onClick: props.onExport }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "export", id: "gui.monitor.contextMenu.export" })), props.draggable && props.onHide && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["BorderedMenuItem"], { onClick: props.onHide }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], { defaultMessage: "hide", id: "gui.monitor.contextMenu.hide" }))), document.body)); }; MonitorComponent.categories = categories; const monitorModes = Object.keys(modes); MonitorComponent.propTypes = { category: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf(Object.keys(categories)), category: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, ...Object.keys(categories)]), componentRef: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, draggable: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, id: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired, label: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired, mode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf(monitorModes), opcode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired, onDragEnd: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onExport: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onImport: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onHide: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onNextMode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onSetModeToDefault: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onSetModeToLarge: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onSetModeToSlider: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onSliderPromptOpen: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func }; MonitorComponent.defaultProps = { category: 'extension', mode: 'default' }; /***/ }), /***/ "./src/components/monitor/slider-monitor.jsx": /*!***************************************************!*\ !*** ./src/components/monitor/slider-monitor.jsx ***! \***************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./monitor.css */ "./src/components/monitor/monitor.css"); /* harmony import */ var _monitor_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_monitor_css__WEBPACK_IMPORTED_MODULE_3__); const SliderMonitor = _ref => { let { categoryColor, isDiscrete, label, min, max, value, onSliderUpdate } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_3___default.a.defaultMonitor }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_3___default.a.row }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_3___default.a.label }, label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_3___default.a.value, style: { background: categoryColor } }, Number(value))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _monitor_css__WEBPACK_IMPORTED_MODULE_3___default.a.row }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_monitor_css__WEBPACK_IMPORTED_MODULE_3___default.a.slider, 'no-drag') // Class used on parent Draggable to prevent drags , max: max, min: min, step: isDiscrete ? 1 : 0.01, type: "range", value: Number(value), onChange: onSliderUpdate }))); }; SliderMonitor.propTypes = { categoryColor: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, isDiscrete: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, max: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, min: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, onSliderUpdate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]) }; SliderMonitor.defaultProps = { isDiscrete: true, min: 0, max: 100 }; /* harmony default export */ __webpack_exports__["default"] = (SliderMonitor); /***/ }), /***/ "./src/components/pause-button/pause-button.css": /*!******************************************************!*\ !*** ./src/components/pause-button/pause-button.css ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./pause-button.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/pause-button/pause-button.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/pause-button/pause-button.jsx": /*!******************************************************!*\ !*** ./src/components/pause-button/pause-button.jsx ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _stage_header_stagecontrols_pause_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../stage-header/stagecontrols/pause.svg */ "./src/components/stage-header/stagecontrols/pause.svg"); /* harmony import */ var _stage_header_stagecontrols_pause_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_stage_header_stagecontrols_pause_svg__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _stage_header_stagecontrols_play_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../stage-header/stagecontrols/play.svg */ "./src/components/stage-header/stagecontrols/play.svg"); /* harmony import */ var _stage_header_stagecontrols_play_svg__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_stage_header_stagecontrols_play_svg__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _pause_button_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pause-button.css */ "./src/components/pause-button/pause-button.css"); /* harmony import */ var _pause_button_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_pause_button_css__WEBPACK_IMPORTED_MODULE_5__); const _excluded = ["paused", "className", "onClick", "title"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const PauseButtonComponent = function PauseButtonComponent(props) { const { paused, className, onClick, title } = props, componentProps = _objectWithoutProperties(props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", _extends({ className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(className, _pause_button_css__WEBPACK_IMPORTED_MODULE_5___default.a.pauseBtn), draggable: false, src: paused ? _stage_header_stagecontrols_play_svg__WEBPACK_IMPORTED_MODULE_4___default.a : _stage_header_stagecontrols_pause_svg__WEBPACK_IMPORTED_MODULE_3___default.a, title: title, onClick: onClick // tw: also fire click when opening context menu (right click on all systems and alt+click on chromebooks) , onContextMenu: onClick }, componentProps)); }; PauseButtonComponent.propTypes = { paused: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; PauseButtonComponent.defaultProps = { paused: false, title: 'Pause' }; /* harmony default export */ __webpack_exports__["default"] = (PauseButtonComponent); /***/ }), /***/ "./src/components/play-button/icon--play.svg": /*!***************************************************!*\ !*** ./src/components/play-button/icon--play.svg ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/df6a71244d4727d19c5a78d71677d2a6.svg"; /***/ }), /***/ "./src/components/play-button/icon--stop.svg": /*!***************************************************!*\ !*** ./src/components/play-button/icon--stop.svg ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/a4d91e3b83e7cbccaf4a4e2322b873f5.svg"; /***/ }), /***/ "./src/components/play-button/play-button.css": /*!****************************************************!*\ !*** ./src/components/play-button/play-button.css ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./play-button.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/play-button/play-button.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/play-button/play-button.jsx": /*!****************************************************!*\ !*** ./src/components/play-button/play-button.jsx ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _play_button_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./play-button.css */ "./src/components/play-button/play-button.css"); /* harmony import */ var _play_button_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_play_button_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _icon_play_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./icon--play.svg */ "./src/components/play-button/icon--play.svg"); /* harmony import */ var _icon_play_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_icon_play_svg__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _icon_stop_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./icon--stop.svg */ "./src/components/play-button/icon--stop.svg"); /* harmony import */ var _icon_stop_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_icon_stop_svg__WEBPACK_IMPORTED_MODULE_6__); const _excluded = ["className", "intl", "isPlaying", "onClick", "onMouseDown", "onMouseEnter", "onMouseLeave", "setButtonRef"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ play: { "id": "gui.playButton.play", "defaultMessage": "Play" }, stop: { "id": "gui.playButton.stop", "defaultMessage": "Stop" } }); const PlayButtonComponent = _ref => { let { className, intl, isPlaying, onClick, onMouseDown, onMouseEnter, onMouseLeave, setButtonRef } = _ref, props = _objectWithoutProperties(_ref, _excluded); const label = isPlaying ? intl.formatMessage(messages.stop) : intl.formatMessage(messages.play); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", _extends({ "aria-label": label, className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_play_button_css__WEBPACK_IMPORTED_MODULE_4___default.a.playButton, className, { [_play_button_css__WEBPACK_IMPORTED_MODULE_4___default.a.playing]: isPlaying }), onClick: onClick, onMouseDown: onMouseDown, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, ref: setButtonRef }, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _play_button_css__WEBPACK_IMPORTED_MODULE_4___default.a.playIcon, draggable: false, src: isPlaying ? _icon_stop_svg__WEBPACK_IMPORTED_MODULE_6___default.a : _icon_play_svg__WEBPACK_IMPORTED_MODULE_5___default.a })); }; PlayButtonComponent.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], isPlaying: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, onClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onMouseEnter: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, setButtonRef: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(PlayButtonComponent)); /***/ }), /***/ "./src/components/pm-extension-modals/extension-modals.css": /*!*****************************************************************!*\ !*** ./src/components/pm-extension-modals/extension-modals.css ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./extension-modals.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/pm-extension-modals/extension-modals.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/pm-extension-modals/extension-modals.jsx": /*!*****************************************************************!*\ !*** ./src/components/pm-extension-modals/extension-modals.jsx ***! \*****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _extension_modals_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./extension-modals.css */ "./src/components/pm-extension-modals/extension-modals.css"); /* harmony import */ var _extension_modals_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_extension_modals_css__WEBPACK_IMPORTED_MODULE_5__); const ExtensionModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _extension_modals_css__WEBPACK_IMPORTED_MODULE_5___default.a.modalContent, onRequestClose: props.onCancel, contentLabel: props.title, id: "extensionCreatedModal" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { className: _extension_modals_css__WEBPACK_IMPORTED_MODULE_5___default.a.body }, props._debugText && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, props._debugText))); ExtensionModal.propTypes = { vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.any, title: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, _debugText: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onOk: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (ExtensionModal); /***/ }), /***/ "./src/components/prompt/prompt.css": /*!******************************************!*\ !*** ./src/components/prompt/prompt.css ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./prompt.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/prompt/prompt.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/prompt/prompt.jsx": /*!******************************************!*\ !*** ./src/components/prompt/prompt.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _prompt_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./prompt.css */ "./src/components/prompt/prompt.css"); /* harmony import */ var _prompt_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_prompt_css__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _lib_tw_cloud_limits_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../lib/tw-cloud-limits.js */ "./src/lib/tw-cloud-limits.js"); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["defineMessages"])({ forAllSpritesMessage: { "id": "gui.gui.variableScopeOptionAllSprites", "defaultMessage": "For all sprites" }, forThisSpriteMessage: { "id": "gui.gui.variableScopeOptionSpriteOnly", "defaultMessage": "For this sprite only" }, cloudVarOptionMessage: { "id": "gui.gui.cloudVariableOption", "defaultMessage": "Cloud variable (stored on server)" }, availableToAllSpritesMessage: { "id": "gui.gui.variablePromptAllSpritesMessage", "defaultMessage": "This variable will be available to all sprites." }, listAvailableToAllSpritesMessage: { "id": "gui.gui.listPromptAllSpritesMessage", "defaultMessage": "This list will be available to all sprites." } }); const PromptComponent = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.modalContent, contentLabel: props.title, id: "variableModal", onRequestClose: props.onCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.label }, props.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { autoFocus: true, className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.variableNameTextInput, defaultValue: props.defaultValue, name: props.label, onChange: props.onChange, onFocus: props.onFocus, onKeyPress: props.onKeyPress })), props.showVariableOptions ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", null, props.isStage ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.infoMessage }, props.showListMessage ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], messages.listAvailableToAllSpritesMessage) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], messages.availableToAllSpritesMessage)) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.optionsRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("label", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { checked: props.globalSelected, name: "variableScopeOption", type: "radio", value: "global", onChange: props.onScopeOptionSelection }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], messages.forAllSpritesMessage)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("label", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()({ [_prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.disabledLabel]: props.cloudSelected }) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { checked: !props.globalSelected, disabled: props.cloudSelected, name: "variableScopeOption", type: "radio", value: "local", onChange: props.onScopeOptionSelection }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], messages.forThisSpriteMessage))), props.showCloudOption ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.cloudOption) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("label", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()({ [_prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.disabledLabel]: !props.canAddCloudVariable }) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { checked: props.cloudSelected && props.canAddCloudVariable, disabled: !props.canAddCloudVariable, type: "checkbox", onChange: props.onCloudVarOptionChange }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], messages.cloudVarOptionMessage))) : null) : null, props.cloudSelected && !props.isAddingCloudVariableScratchSafe && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.infoMessage }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "If you make this cloud variable, the project will exceed Scratch's limit of {number} variables, and some variables will not function if you upload the project to Scratch." // eslint-disable-next-line max-len , id: "tw.scratchUnsafeCloud", values: { number: _lib_tw_cloud_limits_js__WEBPACK_IMPORTED_MODULE_7__["SCRATCH_MAX_CLOUD_VARIABLES"] } })), props.cloudSelected && props.canAddCloudVariable && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.infoMessage }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] /* eslint-disable-next-line max-len */, { defaultMessage: "Although you can create cloud variables, they won't work until this project is uploaded or until this project is converted using a tool like the {packager}.", values: { packager: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("a", { href: "https://studio.penguinmod.com/PenguinMod-Packager", target: "_blank", rel: "noopener noreferrer" }, 'PenguinMod Packager') }, id: "tw.cantUseCloud" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.buttonRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", { className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.cancelButton, onClick: props.onCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Cancel", id: "gui.prompt.cancel" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", { className: _prompt_css__WEBPACK_IMPORTED_MODULE_6___default.a.okButton, onClick: props.onOk }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "OK", id: "gui.prompt.ok" }))))); PromptComponent.propTypes = { isAddingCloudVariableScratchSafe: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, canAddCloudVariable: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, cloudSelected: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, globalSelected: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, isStage: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, showListMessage: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, label: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onChange: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onCloudVarOptionChange: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onFocus: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onKeyPress: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onOk: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onScopeOptionSelection: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, showCloudOption: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, showVariableOptions: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (PromptComponent); /***/ }), /***/ "./src/components/question/icon--enter.svg": /*!*************************************************!*\ !*** ./src/components/question/icon--enter.svg ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/27f90bfa982840e56c3ad207561193fa.svg"; /***/ }), /***/ "./src/components/question/question.css": /*!**********************************************!*\ !*** ./src/components/question/question.css ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./question.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/question/question.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/question/question.jsx": /*!**********************************************!*\ !*** ./src/components/question/question.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _question_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question.css */ "./src/components/question/question.css"); /* harmony import */ var _question_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_question_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _forms_input_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../forms/input.jsx */ "./src/components/forms/input.jsx"); /* harmony import */ var _icon_enter_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./icon--enter.svg */ "./src/components/question/icon--enter.svg"); /* harmony import */ var _icon_enter_svg__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_icon_enter_svg__WEBPACK_IMPORTED_MODULE_4__); const QuestionComponent = props => { const { answer, className, question, onChange, onClick, onKeyPress } = props; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: className }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _question_css__WEBPACK_IMPORTED_MODULE_2___default.a.questionContainer }, question ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _question_css__WEBPACK_IMPORTED_MODULE_2___default.a.questionLabel }, question) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _question_css__WEBPACK_IMPORTED_MODULE_2___default.a.questionInput }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_forms_input_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { autoFocus: true, value: answer, onChange: onChange, onKeyPress: onKeyPress }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _question_css__WEBPACK_IMPORTED_MODULE_2___default.a.questionSubmitButton, onClick: onClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _question_css__WEBPACK_IMPORTED_MODULE_2___default.a.questionSubmitButtonIcon, draggable: false, src: _icon_enter_svg__WEBPACK_IMPORTED_MODULE_4___default.a }))))); }; QuestionComponent.propTypes = { answer: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, onChange: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onKeyPress: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, question: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (QuestionComponent); /***/ }), /***/ "./src/components/record-modal/icon--back.svg": /*!****************************************************!*\ !*** ./src/components/record-modal/icon--back.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/21988681fa28c8ce37982ca26463a6f5.svg"; /***/ }), /***/ "./src/components/record-modal/icon--play.svg": /*!****************************************************!*\ !*** ./src/components/record-modal/icon--play.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/d889a872f3b0985b28fa872764172ef1.svg"; /***/ }), /***/ "./src/components/record-modal/icon--stop-playback.svg": /*!*************************************************************!*\ !*** ./src/components/record-modal/icon--stop-playback.svg ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/26255153f92ea41df149a58d3c3fe2cf.svg"; /***/ }), /***/ "./src/components/record-modal/icon--stop-recording.svg": /*!**************************************************************!*\ !*** ./src/components/record-modal/icon--stop-recording.svg ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/993a0700d8a0972d309307b0a4688ed7.svg"; /***/ }), /***/ "./src/components/record-modal/playback-step.jsx": /*!*******************************************************!*\ !*** ./src/components/record-modal/playback-step.jsx ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _waveform_waveform_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../waveform/waveform.jsx */ "./src/components/waveform/waveform.jsx"); /* harmony import */ var _meter_meter_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../meter/meter.jsx */ "./src/components/meter/meter.jsx"); /* harmony import */ var _containers_audio_trimmer_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../containers/audio-trimmer.jsx */ "./src/containers/audio-trimmer.jsx"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _record_modal_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./record-modal.css */ "./src/components/record-modal/record-modal.css"); /* harmony import */ var _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_record_modal_css__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _icon_back_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./icon--back.svg */ "./src/components/record-modal/icon--back.svg"); /* harmony import */ var _icon_back_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_icon_back_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _icon_stop_playback_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./icon--stop-playback.svg */ "./src/components/record-modal/icon--stop-playback.svg"); /* harmony import */ var _icon_stop_playback_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_icon_stop_playback_svg__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _icon_play_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./icon--play.svg */ "./src/components/record-modal/icon--play.svg"); /* harmony import */ var _icon_play_svg__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_icon_play_svg__WEBPACK_IMPORTED_MODULE_10__); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_6__["defineMessages"])({ stopMsg: { "id": "gui.playbackStep.stopMsg", "defaultMessage": "Stop" }, playMsg: { "id": "gui.playbackStep.playMsg", "defaultMessage": "Play" }, loadingMsg: { "id": "gui.playbackStep.loadingMsg", "defaultMessage": "Loading..." }, saveMsg: { "id": "gui.playbackStep.saveMsg", "defaultMessage": "Save" }, reRecordMsg: { "id": "gui.playbackStep.reRecordMsg", "defaultMessage": "Re-record" } }); const PlaybackStep = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.visualizationContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.meterContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_meter_meter_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { height: 172, level: 0, width: 20 })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.waveformContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_waveform_waveform_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { data: props.levels, height: 150, level: 0, width: 480 }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_audio_trimmer_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { playhead: props.playhead, trimEnd: props.trimEnd, trimStart: props.trimStart, onSetTrimEnd: props.onSetTrimEnd, onSetTrimStart: props.onSetTrimStart }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.mainButtonRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.mainButton, onClick: props.playing ? props.onStopPlaying : props.onPlay }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { draggable: false, src: props.playing ? _icon_stop_playback_svg__WEBPACK_IMPORTED_MODULE_9___default.a : _icon_play_svg__WEBPACK_IMPORTED_MODULE_10___default.a }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.helpText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.playingText }, props.playing ? props.intl.formatMessage(messages.stopMsg) : props.intl.formatMessage(messages.playMsg))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.buttonRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.rerecordButton, onClick: props.onBack }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { draggable: false, src: _icon_back_svg__WEBPACK_IMPORTED_MODULE_8___default.a }), props.intl.formatMessage(messages.reRecordMsg)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.okButton, disabled: props.encoding, onClick: props.onSubmit }, props.encoding ? props.intl.formatMessage(messages.loadingMsg) : props.intl.formatMessage(messages.saveMsg)))); PlaybackStep.propTypes = { encoding: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, intl: react_intl__WEBPACK_IMPORTED_MODULE_6__["intlShape"].isRequired, levels: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number).isRequired, onBack: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onPlay: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onSetTrimEnd: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onSetTrimStart: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onStopPlaying: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onSubmit: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, playhead: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, playing: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, trimEnd: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired, trimStart: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_6__["injectIntl"])(PlaybackStep)); /***/ }), /***/ "./src/components/record-modal/record-modal.css": /*!******************************************************!*\ !*** ./src/components/record-modal/record-modal.css ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./record-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/record-modal/record-modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/record-modal/record-modal.jsx": /*!******************************************************!*\ !*** ./src/components/record-modal/record-modal.jsx ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _containers_recording_step_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/recording-step.jsx */ "./src/containers/recording-step.jsx"); /* harmony import */ var _containers_playback_step_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../containers/playback-step.jsx */ "./src/containers/playback-step.jsx"); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _record_modal_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./record-modal.css */ "./src/components/record-modal/record-modal.css"); /* harmony import */ var _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_record_modal_css__WEBPACK_IMPORTED_MODULE_7__); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ title: { "id": "gui.recordModal.title", "defaultMessage": "Record Sound" } }); const RecordModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.modalContent, contentLabel: props.intl.formatMessage(messages.title), onRequestClose: props.onCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.body }, props.samples ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_playback_step_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { encoding: props.encoding, levels: props.levels, playhead: props.playhead, playing: props.playing, sampleRate: props.sampleRate, samples: props.samples, trimEnd: props.trimEnd, trimStart: props.trimStart, onBack: props.onBack, onPlay: props.onPlay, onSetPlayhead: props.onSetPlayhead, onSetTrimEnd: props.onSetTrimEnd, onSetTrimStart: props.onSetTrimStart, onStopPlaying: props.onStopPlaying, onSubmit: props.onSubmit }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_recording_step_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { recording: props.recording, onRecord: props.onRecord, onStopRecording: props.onStopRecording }))); RecordModal.propTypes = { encoding: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired, levels: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number), onBack: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onPlay: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onRecord: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onSetPlayhead: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onSetTrimEnd: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onSetTrimStart: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onStopPlaying: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onStopRecording: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onSubmit: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, playhead: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, playing: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, recording: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, sampleRate: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, samples: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(Float32Array), trimEnd: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired, trimStart: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(RecordModal)); /***/ }), /***/ "./src/components/record-modal/recording-step.jsx": /*!********************************************************!*\ !*** ./src/components/record-modal/recording-step.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _meter_meter_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../meter/meter.jsx */ "./src/components/meter/meter.jsx"); /* harmony import */ var _waveform_waveform_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../waveform/waveform.jsx */ "./src/components/waveform/waveform.jsx"); /* harmony import */ var _record_modal_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./record-modal.css */ "./src/components/record-modal/record-modal.css"); /* harmony import */ var _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_record_modal_css__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _icon_stop_recording_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./icon--stop-recording.svg */ "./src/components/record-modal/icon--stop-recording.svg"); /* harmony import */ var _icon_stop_recording_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_icon_stop_recording_svg__WEBPACK_IMPORTED_MODULE_7__); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["defineMessages"])({ beginRecord: { "id": "gui.recordingStep.beginRecord", "defaultMessage": "Begin recording by clicking the button below" }, permission: { "id": "gui.recordingStep.permission", "defaultMessage": "{arrow}We need your permission to use your microphone" }, stop: { "id": "gui.recordingStep.stop", "defaultMessage": "Stop recording" }, record: { "id": "gui.recordingStep.record", "defaultMessage": "Record" } }); const RecordingStep = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.visualizationContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.meterContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_meter_meter_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { height: 172, level: props.level, width: 20 })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.waveformContainer }, props.levels ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_waveform_waveform_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { data: props.levels, height: 150, level: 0, width: 440 }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.helpText }, props.listening ? props.intl.formatMessage(messages.beginRecord) : props.intl.formatMessage(messages.permission, { arrow: props.isRtl ? '↗️ \u00A0' : '↖️ \u00A0' })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.mainButtonRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.mainButton, disabled: !props.listening, onClick: props.recording ? props.onStopRecording : props.onRecord }, props.recording ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { draggable: false, src: _icon_stop_recording_svg__WEBPACK_IMPORTED_MODULE_7___default.a }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("svg", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.recordButton, height: "52", width: "52" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("circle", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.recordButtonCircle, cx: "26", cy: "26", r: "25" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("circle", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.recordButtonCircleOutline, cx: "26", cy: "26", r: 27 + props.level * 5 })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.helpText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: _record_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.recordingText }, props.recording ? props.intl.formatMessage(messages.stop) : props.intl.formatMessage(messages.record)))))); RecordingStep.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_2__["intlShape"].isRequired, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, level: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, levels: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number), listening: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, onRecord: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onStopRecording: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, recording: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(RecordingStep)); /***/ }), /***/ "./src/components/slider-prompt/slider-prompt.css": /*!********************************************************!*\ !*** ./src/components/slider-prompt/slider-prompt.css ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./slider-prompt.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/slider-prompt/slider-prompt.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/slider-prompt/slider-prompt.jsx": /*!********************************************************!*\ !*** ./src/components/slider-prompt/slider-prompt.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./slider-prompt.css */ "./src/components/slider-prompt/slider-prompt.css"); /* harmony import */ var _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_slider_prompt_css__WEBPACK_IMPORTED_MODULE_5__); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["defineMessages"])({ minValue: { "id": "gui.sliderModal.min", "defaultMessage": "Minimum value" }, maxValue: { "id": "gui.sliderModal.max", "defaultMessage": "Maximum value" }, title: { "id": "gui.sliderModal.title", "defaultMessage": "Change slider range" } }); const SliderPromptComponent = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5___default.a.modalContent, contentLabel: props.intl.formatMessage(messages.title), id: "sliderPrompt", onRequestClose: props.onCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5___default.a.label }, props.intl.formatMessage(messages.minValue)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("input", { className: _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5___default.a.minInput, name: props.intl.formatMessage(messages.minValue), pattern: "-?[0-9]*(\\.[0-9]+)?", type: "text", value: props.minValue, onChange: props.onChangeMin, onKeyPress: props.onKeyPress })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5___default.a.label }, props.intl.formatMessage(messages.maxValue)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("input", { className: _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5___default.a.maxInput, name: props.intl.formatMessage(messages.maxValue), pattern: "-?[0-9]*(\\.[0-9]+)?", type: "text", value: props.maxValue, onChange: props.onChangeMax, onKeyPress: props.onKeyPress })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5___default.a.buttonRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5___default.a.cancelButton, onClick: props.onCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Cancel", id: "gui.sliderPrompt.cancel" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _slider_prompt_css__WEBPACK_IMPORTED_MODULE_5___default.a.okButton, onClick: props.onOk }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "OK", id: "gui.sliderPrompt.ok" }))))); SliderPromptComponent.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_0__["intlShape"], maxValue: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, minValue: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onChangeMax: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onChangeMin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onKeyPress: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onOk: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(SliderPromptComponent)); /***/ }), /***/ "./src/components/sound-editor/icon--copy-to-new.svg": /*!***********************************************************!*\ !*** ./src/components/sound-editor/icon--copy-to-new.svg ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/00505ca954aec95aac898ee7d5a7ee6c.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--copy.svg": /*!****************************************************!*\ !*** ./src/components/sound-editor/icon--copy.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/83b16872b1684580c2e0a1ee1e57506e.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--delete.svg": /*!******************************************************!*\ !*** ./src/components/sound-editor/icon--delete.svg ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/ed523e83c862293741568a89219e5dcf.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--echo.svg": /*!****************************************************!*\ !*** ./src/components/sound-editor/icon--echo.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/fb3f9fa9be421f5153cd0223c3b0cb87.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--fade-in.svg": /*!*******************************************************!*\ !*** ./src/components/sound-editor/icon--fade-in.svg ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/42428924171999cebe3efd5e70b7bc53.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--fade-out.svg": /*!********************************************************!*\ !*** ./src/components/sound-editor/icon--fade-out.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f22d5ea0ef6a46b2a4a174fed722c396.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--faster.svg": /*!******************************************************!*\ !*** ./src/components/sound-editor/icon--faster.svg ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/8279ce395d0333b880b8be6d243fd111.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--format.svg": /*!******************************************************!*\ !*** ./src/components/sound-editor/icon--format.svg ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7f41449e898401168112236180fcf9d6.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--highpass.svg": /*!********************************************************!*\ !*** ./src/components/sound-editor/icon--highpass.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/3dd8f573267d99448c62fd87bf0e3591.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--louder.svg": /*!******************************************************!*\ !*** ./src/components/sound-editor/icon--louder.svg ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/b2c44c738c9cbc1a99cd6edfd0c2b85b.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--lowpass.svg": /*!*******************************************************!*\ !*** ./src/components/sound-editor/icon--lowpass.svg ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/27557abca597bafded7f45adede9a6bf.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--modify.svg": /*!******************************************************!*\ !*** ./src/components/sound-editor/icon--modify.svg ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/238a12e6d066c100697e7b28c87913d0.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--mute.svg": /*!****************************************************!*\ !*** ./src/components/sound-editor/icon--mute.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/e21225ab4b675bc61eed30cfb510c288.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--paste.svg": /*!*****************************************************!*\ !*** ./src/components/sound-editor/icon--paste.svg ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/b4c3606f4126d3226d96d31e36fff84d.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--play.svg": /*!****************************************************!*\ !*** ./src/components/sound-editor/icon--play.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/b5257afbe4bcf7953029ddb8f18b24fe.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--redo.svg": /*!****************************************************!*\ !*** ./src/components/sound-editor/icon--redo.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/d93fb1224d372792aadc4706e9b45858.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--reverse.svg": /*!*******************************************************!*\ !*** ./src/components/sound-editor/icon--reverse.svg ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/fe5afd6776eac0f7724b132a9ff5057d.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--robot.svg": /*!*****************************************************!*\ !*** ./src/components/sound-editor/icon--robot.svg ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/199f58b4a80fa56c5d8e032d6da5e9c2.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--slower.svg": /*!******************************************************!*\ !*** ./src/components/sound-editor/icon--slower.svg ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/424371873bc8df88d6a305d8727157ab.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--softer.svg": /*!******************************************************!*\ !*** ./src/components/sound-editor/icon--softer.svg ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/3547fa1f2678a483a19f46852f36b426.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--stop.svg": /*!****************************************************!*\ !*** ./src/components/sound-editor/icon--stop.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/481fbac64b59203d7ddffa564a7537d8.svg"; /***/ }), /***/ "./src/components/sound-editor/icon--undo.svg": /*!****************************************************!*\ !*** ./src/components/sound-editor/icon--undo.svg ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/42d9642b78a0d9f0a1f4065fc74e7bc0.svg"; /***/ }), /***/ "./src/components/sound-editor/sound-editor.css": /*!******************************************************!*\ !*** ./src/components/sound-editor/sound-editor.css ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./sound-editor.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/sound-editor/sound-editor.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/sound-editor/sound-editor.jsx": /*!******************************************************!*\ !*** ./src/components/sound-editor/sound-editor.jsx ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _waveform_waveform_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../waveform/waveform.jsx */ "./src/components/waveform/waveform.jsx"); /* harmony import */ var _forms_label_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../forms/label.jsx */ "./src/components/forms/label.jsx"); /* harmony import */ var _forms_input_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../forms/input.jsx */ "./src/components/forms/input.jsx"); /* harmony import */ var _forms_buffered_input_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../forms/buffered-input-hoc.jsx */ "./src/components/forms/buffered-input-hoc.jsx"); /* harmony import */ var _containers_audio_selector_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../containers/audio-selector.jsx */ "./src/containers/audio-selector.jsx"); /* harmony import */ var _icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../icon-button/icon-button.jsx */ "./src/components/icon-button/icon-button.jsx"); /* harmony import */ var _lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../lib/audio/audio-util.js */ "./src/lib/audio/audio-util.js"); /* harmony import */ var _sound_editor_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./sound-editor.css */ "./src/components/sound-editor/sound-editor.css"); /* harmony import */ var _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _icon_play_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./icon--play.svg */ "./src/components/sound-editor/icon--play.svg"); /* harmony import */ var _icon_play_svg__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_icon_play_svg__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var _icon_stop_svg__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./icon--stop.svg */ "./src/components/sound-editor/icon--stop.svg"); /* harmony import */ var _icon_stop_svg__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_icon_stop_svg__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var _icon_redo_svg__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./icon--redo.svg */ "./src/components/sound-editor/icon--redo.svg"); /* harmony import */ var _icon_redo_svg__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_icon_redo_svg__WEBPACK_IMPORTED_MODULE_14__); /* harmony import */ var _icon_undo_svg__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./icon--undo.svg */ "./src/components/sound-editor/icon--undo.svg"); /* harmony import */ var _icon_undo_svg__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_icon_undo_svg__WEBPACK_IMPORTED_MODULE_15__); /* harmony import */ var _icon_modify_svg__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./icon--modify.svg */ "./src/components/sound-editor/icon--modify.svg"); /* harmony import */ var _icon_modify_svg__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_icon_modify_svg__WEBPACK_IMPORTED_MODULE_16__); /* harmony import */ var _icon_format_svg__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./icon--format.svg */ "./src/components/sound-editor/icon--format.svg"); /* harmony import */ var _icon_format_svg__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_icon_format_svg__WEBPACK_IMPORTED_MODULE_17__); /* harmony import */ var _icon_faster_svg__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./icon--faster.svg */ "./src/components/sound-editor/icon--faster.svg"); /* harmony import */ var _icon_faster_svg__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_icon_faster_svg__WEBPACK_IMPORTED_MODULE_18__); /* harmony import */ var _icon_slower_svg__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./icon--slower.svg */ "./src/components/sound-editor/icon--slower.svg"); /* harmony import */ var _icon_slower_svg__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_icon_slower_svg__WEBPACK_IMPORTED_MODULE_19__); /* harmony import */ var _icon_louder_svg__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./icon--louder.svg */ "./src/components/sound-editor/icon--louder.svg"); /* harmony import */ var _icon_louder_svg__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(_icon_louder_svg__WEBPACK_IMPORTED_MODULE_20__); /* harmony import */ var _icon_softer_svg__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./icon--softer.svg */ "./src/components/sound-editor/icon--softer.svg"); /* harmony import */ var _icon_softer_svg__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_icon_softer_svg__WEBPACK_IMPORTED_MODULE_21__); /* harmony import */ var _icon_robot_svg__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./icon--robot.svg */ "./src/components/sound-editor/icon--robot.svg"); /* harmony import */ var _icon_robot_svg__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(_icon_robot_svg__WEBPACK_IMPORTED_MODULE_22__); /* harmony import */ var _icon_echo_svg__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./icon--echo.svg */ "./src/components/sound-editor/icon--echo.svg"); /* harmony import */ var _icon_echo_svg__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(_icon_echo_svg__WEBPACK_IMPORTED_MODULE_23__); /* harmony import */ var _icon_highpass_svg__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./icon--highpass.svg */ "./src/components/sound-editor/icon--highpass.svg"); /* harmony import */ var _icon_highpass_svg__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_icon_highpass_svg__WEBPACK_IMPORTED_MODULE_24__); /* harmony import */ var _icon_lowpass_svg__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./icon--lowpass.svg */ "./src/components/sound-editor/icon--lowpass.svg"); /* harmony import */ var _icon_lowpass_svg__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(_icon_lowpass_svg__WEBPACK_IMPORTED_MODULE_25__); /* harmony import */ var _icon_reverse_svg__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./icon--reverse.svg */ "./src/components/sound-editor/icon--reverse.svg"); /* harmony import */ var _icon_reverse_svg__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(_icon_reverse_svg__WEBPACK_IMPORTED_MODULE_26__); /* harmony import */ var _icon_fade_out_svg__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./icon--fade-out.svg */ "./src/components/sound-editor/icon--fade-out.svg"); /* harmony import */ var _icon_fade_out_svg__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(_icon_fade_out_svg__WEBPACK_IMPORTED_MODULE_27__); /* harmony import */ var _icon_fade_in_svg__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./icon--fade-in.svg */ "./src/components/sound-editor/icon--fade-in.svg"); /* harmony import */ var _icon_fade_in_svg__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(_icon_fade_in_svg__WEBPACK_IMPORTED_MODULE_28__); /* harmony import */ var _icon_mute_svg__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./icon--mute.svg */ "./src/components/sound-editor/icon--mute.svg"); /* harmony import */ var _icon_mute_svg__WEBPACK_IMPORTED_MODULE_29___default = /*#__PURE__*/__webpack_require__.n(_icon_mute_svg__WEBPACK_IMPORTED_MODULE_29__); /* harmony import */ var _icon_delete_svg__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./icon--delete.svg */ "./src/components/sound-editor/icon--delete.svg"); /* harmony import */ var _icon_delete_svg__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(_icon_delete_svg__WEBPACK_IMPORTED_MODULE_30__); /* harmony import */ var _icon_copy_svg__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./icon--copy.svg */ "./src/components/sound-editor/icon--copy.svg"); /* harmony import */ var _icon_copy_svg__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(_icon_copy_svg__WEBPACK_IMPORTED_MODULE_31__); /* harmony import */ var _icon_paste_svg__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./icon--paste.svg */ "./src/components/sound-editor/icon--paste.svg"); /* harmony import */ var _icon_paste_svg__WEBPACK_IMPORTED_MODULE_32___default = /*#__PURE__*/__webpack_require__.n(_icon_paste_svg__WEBPACK_IMPORTED_MODULE_32__); /* harmony import */ var _icon_copy_to_new_svg__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./icon--copy-to-new.svg */ "./src/components/sound-editor/icon--copy-to-new.svg"); /* harmony import */ var _icon_copy_to_new_svg__WEBPACK_IMPORTED_MODULE_33___default = /*#__PURE__*/__webpack_require__.n(_icon_copy_to_new_svg__WEBPACK_IMPORTED_MODULE_33__); const BufferedInput = Object(_forms_buffered_input_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__["default"])(_forms_input_jsx__WEBPACK_IMPORTED_MODULE_6__["default"]); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ sound: { "id": "gui.soundEditor.sound", "defaultMessage": "Sound" }, play: { "id": "gui.soundEditor.play", "defaultMessage": "Play" }, stop: { "id": "gui.soundEditor.stop", "defaultMessage": "Stop" }, copy: { "id": "gui.soundEditor.copy", "defaultMessage": "Copy" }, paste: { "id": "gui.soundEditor.paste", "defaultMessage": "Paste" }, copyToNew: { "id": "gui.soundEditor.copyToNew", "defaultMessage": "Copy to New" }, delete: { "id": "gui.soundEditor.delete", "defaultMessage": "Delete" }, save: { "id": "gui.soundEditor.save", "defaultMessage": "Save" }, undo: { "id": "gui.soundEditor.undo", "defaultMessage": "Undo" }, redo: { "id": "gui.soundEditor.redo", "defaultMessage": "Redo" }, faster: { "id": "gui.soundEditor.faster", "defaultMessage": "Faster" }, slower: { "id": "gui.soundEditor.slower", "defaultMessage": "Slower" }, echo: { "id": "gui.soundEditor.echo", "defaultMessage": "Echo" }, robot: { "id": "gui.soundEditor.robot", "defaultMessage": "Robot" }, louder: { "id": "gui.soundEditor.louder", "defaultMessage": "Louder" }, softer: { "id": "gui.soundEditor.softer", "defaultMessage": "Softer" }, reverse: { "id": "gui.soundEditor.reverse", "defaultMessage": "Reverse" }, fadeOut: { "id": "gui.soundEditor.fadeOut", "defaultMessage": "Fade out" }, fadeIn: { "id": "gui.soundEditor.fadeIn", "defaultMessage": "Fade in" }, mute: { "id": "gui.soundEditor.mute", "defaultMessage": "Mute" } }); const formatTime = timeSeconds => { const minutes = Math.floor(timeSeconds / 60).toString().padStart(2, '0'); const seconds = (timeSeconds % 60).toFixed(2).padStart(5, '0'); return "".concat(minutes, ":").concat(seconds); }; const formatDuration = (playheadPercent, trimStartPercent, trimEndPercent, durationSeconds) => { // If no selection, the trim is the entire sound. trimStartPercent = trimStartPercent === null ? 0 : trimStartPercent; trimEndPercent = trimEndPercent === null ? 1 : trimEndPercent; // If the playhead doesn't exist, assume it's at the start of the selection. playheadPercent = playheadPercent === null ? trimStartPercent : playheadPercent; // If selection has zero length, treat it as the entire sound being selected. // This happens when the user first clicks to start making a selection. const trimSize = trimEndPercent - trimStartPercent || 1; const trimDuration = trimSize * durationSeconds; const progressInTrim = (playheadPercent - trimStartPercent) / trimSize; const currentTime = progressInTrim * trimDuration; return "".concat(formatTime(currentTime), " / ").concat(formatTime(trimDuration)); }; const formatSoundSize = bytes => { if (bytes > 1000 * 1000) { return "".concat((bytes / 1000 / 1000).toFixed(2), "MB"); } return "".concat((bytes / 1000).toFixed(2), "KB"); }; const SoundEditor = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.editorContainer, ref: props.setRef, onMouseDown: props.onContainerClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.row }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.inputGroup }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_forms_label_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { text: props.intl.formatMessage(messages.sound) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(BufferedInput, { tabIndex: "1", type: "text", value: props.name, onSubmit: props.onChangeName, className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.nameInput })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.buttonGroup }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.button, disabled: !props.canUndo, title: props.intl.formatMessage(messages.undo), onClick: props.onUndo }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.undoIcon, draggable: false, src: _icon_undo_svg__WEBPACK_IMPORTED_MODULE_15___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.button, disabled: !props.canRedo, title: props.intl.formatMessage(messages.redo), onClick: props.onRedo }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.redoIcon, draggable: false, src: _icon_redo_svg__WEBPACK_IMPORTED_MODULE_14___default.a })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.inputGroup }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.toolButton, img: _icon_copy_svg__WEBPACK_IMPORTED_MODULE_31___default.a, title: props.intl.formatMessage(messages.copy), onClick: props.onCopy }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.toolButton, disabled: props.canPaste === false, img: _icon_paste_svg__WEBPACK_IMPORTED_MODULE_32___default.a, title: props.intl.formatMessage(messages.paste), onClick: props.onPaste }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.toolButton, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.flipInRtl), img: _icon_copy_to_new_svg__WEBPACK_IMPORTED_MODULE_33___default.a, title: props.intl.formatMessage(messages.copyToNew), onClick: props.onCopyToNew })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.toolButton, disabled: props.trimStart === null, img: _icon_delete_svg__WEBPACK_IMPORTED_MODULE_30___default.a, title: props.intl.formatMessage(messages.delete), onClick: props.onDelete })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.row }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.waveformContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_waveform_waveform_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { data: props.chunkLevels, height: 160, width: 600 }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_audio_selector_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { playhead: props.playhead, trimEnd: props.trimEnd, trimStart: props.trimStart, onPlay: props.onPlay, onSetTrim: props.onSetTrim, onStop: props.onStop }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.row, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.rowReverse) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.roundButtonOuter, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.inputGroup) }, props.playhead ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.roundButton, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.stopButtonn), title: props.intl.formatMessage(messages.stop), onClick: props.onStop }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { draggable: false, src: _icon_stop_svg__WEBPACK_IMPORTED_MODULE_13___default.a })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.roundButton, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.playButton), title: props.intl.formatMessage(messages.play), onClick: props.onPlay }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { draggable: false, src: _icon_play_svg__WEBPACK_IMPORTED_MODULE_12___default.a }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effects }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_modify_svg__WEBPACK_IMPORTED_MODULE_16___default.a, title: "Modify", onClick: props.onModifySound }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_faster_svg__WEBPACK_IMPORTED_MODULE_18___default.a, title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.faster), onClick: props.onFaster }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_slower_svg__WEBPACK_IMPORTED_MODULE_19___default.a, title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.slower), onClick: props.onSlower }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { disabled: props.tooLoud, className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.flipInRtl), img: _icon_louder_svg__WEBPACK_IMPORTED_MODULE_20___default.a, title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.louder), onClick: props.onLouder }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.flipInRtl), img: _icon_softer_svg__WEBPACK_IMPORTED_MODULE_21___default.a, title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.softer), onClick: props.onSofter }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.flipInRtl), img: _icon_mute_svg__WEBPACK_IMPORTED_MODULE_29___default.a, title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.mute), onClick: props.onMute }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_fade_in_svg__WEBPACK_IMPORTED_MODULE_28___default.a, title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.fadeIn), onClick: props.onFadeIn }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_fade_out_svg__WEBPACK_IMPORTED_MODULE_27___default.a, title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.fadeOut), onClick: props.onFadeOut }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_reverse_svg__WEBPACK_IMPORTED_MODULE_26___default.a, title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.reverse), onClick: props.onReverse }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_robot_svg__WEBPACK_IMPORTED_MODULE_22___default.a, title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.robot), onClick: props.onRobot }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_echo_svg__WEBPACK_IMPORTED_MODULE_23___default.a, title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.echo), onClick: props.onEcho }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_lowpass_svg__WEBPACK_IMPORTED_MODULE_25___default.a, title: "Low Pass", onClick: props.onLowPass }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_highpass_svg__WEBPACK_IMPORTED_MODULE_24___default.a, title: "High Pass", onClick: props.onHighPass }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_icon_button_icon_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.effectButton, img: _icon_format_svg__WEBPACK_IMPORTED_MODULE_17___default.a, title: "Format", onClick: props.onFormatSound }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.infoRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.duration }, formatDuration(props.playhead, props.trimStart, props.trimEnd, props.duration)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.advancedInfo }, props.sampleRate, 'Hz ', "".concat(String(props.dataFormat).toUpperCase(), " "), props.isStereo ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Stereo", id: "tw.stereo" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Mono", id: "tw.mono" }), " (".concat(formatSoundSize(props.size), ")"))), props.size >= _lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_10__["SOUND_BYTE_LIMIT"] && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.alert, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.tooLarge) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "This sound could be too large to upload to PenguinMod.", id: "pm.tooLarge" })), (props.dataFormat === "mp3" || props.dataFormat === "ogg" || props.dataFormat === "flac") && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.alert, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.stereo) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Editing this sound will irreversibly convert it to a much larger, WAV format sound.", id: "pm.formatAlert" })), props.dataFormat === "ogg" && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.alert, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.tooLarge) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Users on iOS and MacOS will need to update their browser or device to hear any OGG sounds.", id: "pm.oggSafariAlert" })), props.isStereo && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.alert, _sound_editor_css__WEBPACK_IMPORTED_MODULE_11___default.a.stereo) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Editing this stereo sound will irreversibly convert it to mono.", id: "tw.stereoAlert" }))); SoundEditor.propTypes = { isStereo: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, duration: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired, dataFormat: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired, size: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, sampleRate: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired, canPaste: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, canRedo: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, canUndo: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, chunkLevels: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number).isRequired, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, onChangeName: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onContainerClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onCopy: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onCopyToNew: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onDelete: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onEcho: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onLowPass: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onHighPass: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onFadeIn: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onFadeOut: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onFaster: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onModifySound: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onFormatSound: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onLouder: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onMute: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onPaste: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onPlay: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onRedo: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onReverse: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onRobot: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onSetTrim: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onSlower: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onSofter: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onStop: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onUndo: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, playhead: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, setRef: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, tooLoud: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, trimEnd: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, trimStart: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(SoundEditor)); /***/ }), /***/ "./src/components/spinner/spinner.css": /*!********************************************!*\ !*** ./src/components/spinner/spinner.css ***! \********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./spinner.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/spinner/spinner.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/spinner/spinner.jsx": /*!********************************************!*\ !*** ./src/components/spinner/spinner.jsx ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _spinner_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./spinner.css */ "./src/components/spinner/spinner.css"); /* harmony import */ var _spinner_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_spinner_css__WEBPACK_IMPORTED_MODULE_3__); const SpinnerComponent = function SpinnerComponent(props) { const { className, level, small, large } = props; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(className, _spinner_css__WEBPACK_IMPORTED_MODULE_3___default.a.spinner, _spinner_css__WEBPACK_IMPORTED_MODULE_3___default.a[level], { [_spinner_css__WEBPACK_IMPORTED_MODULE_3___default.a.small]: small, [_spinner_css__WEBPACK_IMPORTED_MODULE_3___default.a.large]: large }) }); }; SpinnerComponent.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, large: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, level: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, small: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; SpinnerComponent.defaultProps = { className: '', large: false, level: 'info', small: false }; /* harmony default export */ __webpack_exports__["default"] = (SpinnerComponent); /***/ }), /***/ "./src/components/sprite-info/icon--hide.svg": /*!***************************************************!*\ !*** ./src/components/sprite-info/icon--hide.svg ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/617dd0f2b2f2be576184b4283a3c917f.svg"; /***/ }), /***/ "./src/components/sprite-info/icon--show.svg": /*!***************************************************!*\ !*** ./src/components/sprite-info/icon--show.svg ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/c6778106d615504de22e9254f1729577.svg"; /***/ }), /***/ "./src/components/sprite-info/icon--x.svg": /*!************************************************!*\ !*** ./src/components/sprite-info/icon--x.svg ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/38a70367a21e2f1fb15aa59b7d367450.svg"; /***/ }), /***/ "./src/components/sprite-info/icon--y.svg": /*!************************************************!*\ !*** ./src/components/sprite-info/icon--y.svg ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/9ddae4f6c1aeaf0784007203d9d4ac9c.svg"; /***/ }), /***/ "./src/components/sprite-info/sprite-info.css": /*!****************************************************!*\ !*** ./src/components/sprite-info/sprite-info.css ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./sprite-info.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/sprite-info/sprite-info.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/sprite-info/sprite-info.jsx": /*!****************************************************!*\ !*** ./src/components/sprite-info/sprite-info.jsx ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _forms_label_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../forms/label.jsx */ "./src/components/forms/label.jsx"); /* harmony import */ var _forms_input_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../forms/input.jsx */ "./src/components/forms/input.jsx"); /* harmony import */ var _forms_buffered_input_hoc_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../forms/buffered-input-hoc.jsx */ "./src/components/forms/buffered-input-hoc.jsx"); /* harmony import */ var _containers_direction_picker_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../containers/direction-picker.jsx */ "./src/containers/direction-picker.jsx"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../lib/layout-constants.js */ "./src/lib/layout-constants.js"); /* harmony import */ var _lib_locale_utils_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../lib/locale-utils.js */ "./src/lib/locale-utils.js"); /* harmony import */ var _sprite_info_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./sprite-info.css */ "./src/components/sprite-info/sprite-info.css"); /* harmony import */ var _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _icon_x_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./icon--x.svg */ "./src/components/sprite-info/icon--x.svg"); /* harmony import */ var _icon_x_svg__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_icon_x_svg__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var _icon_y_svg__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./icon--y.svg */ "./src/components/sprite-info/icon--y.svg"); /* harmony import */ var _icon_y_svg__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_icon_y_svg__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var _icon_show_svg__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./icon--show.svg */ "./src/components/sprite-info/icon--show.svg"); /* harmony import */ var _icon_show_svg__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_icon_show_svg__WEBPACK_IMPORTED_MODULE_14__); /* harmony import */ var _icon_hide_svg__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./icon--hide.svg */ "./src/components/sprite-info/icon--hide.svg"); /* harmony import */ var _icon_hide_svg__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_icon_hide_svg__WEBPACK_IMPORTED_MODULE_15__); const BufferedInput = Object(_forms_buffered_input_hoc_jsx__WEBPACK_IMPORTED_MODULE_6__["default"])(_forms_input_jsx__WEBPACK_IMPORTED_MODULE_5__["default"]); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_8__["defineMessages"])({ spritePlaceholder: { "id": "gui.SpriteInfo.spritePlaceholder", "defaultMessage": "Name" } }); class SpriteInfo extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { shouldComponentUpdate(nextProps) { return this.props.rotationStyle !== nextProps.rotationStyle || this.props.disabled !== nextProps.disabled || this.props.name !== nextProps.name || this.props.stageSize !== nextProps.stageSize || this.props.visible !== nextProps.visible || // Only update these if rounded value has changed Math.round(this.props.direction) !== Math.round(nextProps.direction) || Math.round(this.props.size) !== Math.round(nextProps.size) || Math.round(this.props.x) !== Math.round(nextProps.x) || Math.round(this.props.y) !== Math.round(nextProps.y); } render() { const { stageSize } = this.props; const sprite = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Sprite", id: "gui.SpriteInfo.sprite" }); const showLabel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Show", id: "gui.SpriteInfo.show" }); const sizeLabel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_8__["FormattedMessage"], { defaultMessage: "Size", id: "gui.SpriteInfo.size" }); const labelAbove = Object(_lib_locale_utils_js__WEBPACK_IMPORTED_MODULE_10__["isWideLocale"])(this.props.intl.locale); const spriteNameInput = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BufferedInput, { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.spriteInput, { [_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.columnInput]: labelAbove }), disabled: this.props.disabled, placeholder: this.props.intl.formatMessage(messages.spritePlaceholder), tabIndex: "0", type: "text", value: this.props.disabled ? '' : this.props.name, onSubmit: this.props.onChangeName }); const xPosition = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.group }, stageSize === _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_9__["STAGE_DISPLAY_SIZES"].large ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.iconWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { "aria-hidden": "true", className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.xIcon, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.icon), src: _icon_x_svg__WEBPACK_IMPORTED_MODULE_12___default.a })) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_forms_label_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { text: "x" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BufferedInput, { small: true, disabled: this.props.disabled, placeholder: "x", tabIndex: "0", type: "text", value: this.props.disabled ? '' : Math.round(this.props.x), onSubmit: this.props.onChangeX }))); const yPosition = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.group }, stageSize === _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_9__["STAGE_DISPLAY_SIZES"].large ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.iconWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { "aria-hidden": "true", className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.yIcon, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.icon), src: _icon_y_svg__WEBPACK_IMPORTED_MODULE_13___default.a })) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_forms_label_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { text: "y" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BufferedInput, { small: true, disabled: this.props.disabled, placeholder: "y", tabIndex: "0", type: "text", value: this.props.disabled ? '' : Math.round(this.props.y), onSubmit: this.props.onChangeY }))); if (stageSize === _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_9__["STAGE_DISPLAY_SIZES"].small) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.spriteInfo }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.row, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.rowPrimary) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.group }, spriteNameInput)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.row, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.rowSecondary) }, xPosition, yPosition)); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.spriteInfo }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.row, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.rowPrimary) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.group }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_forms_label_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { above: labelAbove, text: sprite }, spriteNameInput)), xPosition, yPosition), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.row, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.rowSecondary) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: labelAbove ? _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.column : _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.group }, stageSize === _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_9__["STAGE_DISPLAY_SIZES"].large ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_forms_label_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { secondary: true, text: showLabel }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.radioWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.radio, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.radioFirst, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.iconWrapper, { [_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.isActive]: this.props.visible && !this.props.disabled, [_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.isDisabled]: this.props.disabled }), tabIndex: "0", onClick: this.props.onClickVisible, onKeyPress: this.props.onPressVisible }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.icon, src: _icon_show_svg__WEBPACK_IMPORTED_MODULE_14___default.a })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.radio, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.radioLast, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.iconWrapper, { [_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.isActive]: !this.props.visible && !this.props.disabled, [_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.isDisabled]: this.props.disabled }), tabIndex: "0", onClick: this.props.onClickNotVisible, onKeyPress: this.props.onPressNotVisible }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.icon, src: _icon_hide_svg__WEBPACK_IMPORTED_MODULE_15___default.a })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.group, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.largerInput) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_forms_label_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { secondary: true, above: labelAbove, text: sizeLabel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BufferedInput, { small: true, disabled: this.props.disabled, label: sizeLabel, tabIndex: "0", type: "text", value: this.props.disabled ? '' : Math.round(this.props.size), onSubmit: this.props.onChangeSize }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.group, _sprite_info_css__WEBPACK_IMPORTED_MODULE_11___default.a.largerInput) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_containers_direction_picker_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { direction: Math.round(this.props.direction), disabled: this.props.disabled, labelAbove: labelAbove, rotationStyle: this.props.rotationStyle, onChangeDirection: this.props.onChangeDirection, onChangeRotationStyle: this.props.onChangeRotationStyle })))); } } SpriteInfo.propTypes = { direction: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]), disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, intl: react_intl__WEBPACK_IMPORTED_MODULE_8__["intlShape"], name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onChangeDirection: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeName: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeRotationStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeX: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeY: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onClickNotVisible: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onClickVisible: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onPressNotVisible: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onPressVisible: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, rotationStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]), stageSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(Object.keys(_lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_9__["STAGE_DISPLAY_SIZES"])).isRequired, visible: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, x: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]), y: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]) }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_8__["injectIntl"])(SpriteInfo)); /***/ }), /***/ "./src/components/sprite-selector-item/sprite-selector-item.css": /*!**********************************************************************!*\ !*** ./src/components/sprite-selector-item/sprite-selector-item.css ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./sprite-selector-item.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/sprite-selector-item/sprite-selector-item.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/sprite-selector-item/sprite-selector-item.jsx": /*!**********************************************************************!*\ !*** ./src/components/sprite-selector-item/sprite-selector-item.jsx ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _delete_button_delete_button_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../delete-button/delete-button.jsx */ "./src/components/delete-button/delete-button.jsx"); /* harmony import */ var _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sprite-selector-item.css */ "./src/components/sprite-selector-item/sprite-selector-item.css"); /* harmony import */ var _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react_contextmenu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-contextmenu */ "./node_modules/react-contextmenu/es6/index.js"); /* harmony import */ var _context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../context-menu/context-menu.jsx */ "./src/components/context-menu/context-menu.jsx"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); // react-contextmenu requires unique id to match trigger and context menu let contextMenuId = 0; const SpriteSelectorItem = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_contextmenu__WEBPACK_IMPORTED_MODULE_5__["ContextMenuTrigger"], { attributes: { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(props.className, _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default.a.spriteSelectorItem, { [_sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default.a.isSelected]: props.selected }), onClick: props.onClick, onMouseEnter: props.onMouseEnter, onMouseLeave: props.onMouseLeave, onMouseDown: props.onMouseDown, onTouchStart: props.onMouseDown }, disable: props.preventContextMenu, id: "".concat(props.name, "-").concat(contextMenuId), ref: props.componentRef }, typeof props.number === 'undefined' ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default.a.number }, props.number), props.costumeURL ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default.a.spriteImageOuter }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default.a.spriteImageInner }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default.a.spriteImage, draggable: false, src: props.costumeURL }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default.a.spriteInfo }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default.a.spriteName }, props.name), props.details ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default.a.spriteDetails }, props.details) : null), props.selected && props.onDeleteButtonClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_delete_button_delete_button_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _sprite_selector_item_css__WEBPACK_IMPORTED_MODULE_4___default.a.deleteButton, onClick: props.onDeleteButtonClick }) : null, props.onDuplicateButtonClick || props.onDeleteButtonClick || props.onExportButtonClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["ContextMenu"], { id: "".concat(props.name, "-").concat(contextMenuId++) }, props.onDuplicateButtonClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["MenuItem"], { onClick: props.onDuplicateButtonClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_7__["FormattedMessage"], { defaultMessage: "duplicate", id: "gui.spriteSelectorItem.contextMenuDuplicate" })) : null, props.onExportButtonClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["MenuItem"], { onClick: props.onExportButtonClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_7__["FormattedMessage"], { defaultMessage: "export", id: "gui.spriteSelectorItem.contextMenuExport" })) : null, props.onRenameButtonClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["MenuItem"], { onClick: props.onRenameButtonClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_7__["FormattedMessage"], { defaultMessage: "rename", id: "tw.spriteSelectorItem.rename" })) : null, props.onDeleteButtonClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_context_menu_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["DangerousMenuItem"], { onClick: props.onDeleteButtonClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_7__["FormattedMessage"], { defaultMessage: "delete", id: "gui.spriteSelectorItem.contextMenuDelete" })) : null) : null); SpriteSelectorItem.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, componentRef: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, costumeURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, details: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, // eslint-disable-next-line react/forbid-prop-types name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any, number: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onDeleteButtonClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onDuplicateButtonClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onExportButtonClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onRenameButtonClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onMouseDown: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onMouseEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, preventContextMenu: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, selected: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (SpriteSelectorItem); /***/ }), /***/ "./src/components/sprite-selector/sprite-list.jsx": /*!********************************************************!*\ !*** ./src/components/sprite-selector/sprite-list.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../lib/drag-constants */ "./src/lib/drag-constants.js"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_sprite_selector_item_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../containers/sprite-selector-item.jsx */ "./src/containers/sprite-selector-item.jsx"); /* harmony import */ var _lib_sortable_hoc_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../lib/sortable-hoc.jsx */ "./src/lib/sortable-hoc.jsx"); /* harmony import */ var _asset_panel_sortable_asset_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../asset-panel/sortable-asset.jsx */ "./src/components/asset-panel/sortable-asset.jsx"); /* harmony import */ var _lib_throttled_property_hoc_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../lib/throttled-property-hoc.jsx */ "./src/lib/throttled-property-hoc.jsx"); /* harmony import */ var _sprite_selector_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./sprite-selector.css */ "./src/components/sprite-selector/sprite-selector.css"); /* harmony import */ var _sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_sprite_selector_css__WEBPACK_IMPORTED_MODULE_9__); const ThrottledSpriteSelectorItem = Object(_lib_throttled_property_hoc_jsx__WEBPACK_IMPORTED_MODULE_8__["default"])('asset', 500)(_containers_sprite_selector_item_jsx__WEBPACK_IMPORTED_MODULE_5__["default"]); const SpriteList = function SpriteList(props) { const { containerRef, editingTarget, draggingIndex, draggingType, hoveredTarget, onDeleteSprite, onDuplicateSprite, onExportSprite, onSelectSprite, onAddSortable, onRemoveSortable, ordering, raised, selectedId, items } = props; const isSpriteDrag = draggingType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_3__["default"].SPRITE; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.scrollWrapper, { [_sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.scrollWrapperDragging]: draggingType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_3__["default"].BACKPACK_SPRITE }), componentRef: containerRef }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.itemsWrapper }, items.map((sprite, index) => { // If the sprite has just received a block drop, used for green highlight const receivedBlocks = hoveredTarget.sprite === sprite.id && sprite.id !== editingTarget && hoveredTarget.receivedBlocks; // If the sprite is indicating it can receive block dropping, used for blue highlight let isRaised = !receivedBlocks && raised && sprite.id !== editingTarget; // A sprite is also raised if a costume or sound is being dragged. // Note the absence of the self-sharing check: a sprite can share assets with itself. // This is a quirk of 2.0, but seems worth leaving possible, it // allows quick (albeit unusual) duplication of assets. isRaised = isRaised || [_lib_drag_constants__WEBPACK_IMPORTED_MODULE_3__["default"].COSTUME, _lib_drag_constants__WEBPACK_IMPORTED_MODULE_3__["default"].SOUND, _lib_drag_constants__WEBPACK_IMPORTED_MODULE_3__["default"].BACKPACK_COSTUME, _lib_drag_constants__WEBPACK_IMPORTED_MODULE_3__["default"].BACKPACK_SOUND, _lib_drag_constants__WEBPACK_IMPORTED_MODULE_3__["default"].BACKPACK_CODE].includes(draggingType); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_asset_panel_sortable_asset_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.spriteWrapper, { [_sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.placeholder]: isSpriteDrag && index === draggingIndex }), index: isSpriteDrag ? ordering.indexOf(index) : index, key: sprite.name, onAddSortable: onAddSortable, onRemoveSortable: onRemoveSortable }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(ThrottledSpriteSelectorItem, { asset: sprite.costume && sprite.costume.asset, className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.sprite, { [_sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.raised]: isRaised, [_sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.receivedBlocks]: receivedBlocks }), dragPayload: sprite.id, dragType: _lib_drag_constants__WEBPACK_IMPORTED_MODULE_3__["default"].SPRITE, id: sprite.id, index: index, key: sprite.id, name: sprite.name, selected: sprite.id === selectedId, onClick: onSelectSprite, onDeleteButtonClick: onDeleteSprite, onDuplicateButtonClick: onDuplicateSprite, onExportButtonClick: onExportSprite })); }))); }; SpriteList.propTypes = { containerRef: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, draggingIndex: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, draggingType: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(Object.keys(_lib_drag_constants__WEBPACK_IMPORTED_MODULE_3__["default"])), editingTarget: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, hoveredTarget: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ hoveredSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, receivedBlocks: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, sprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string }), items: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ costume: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ url: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, // eslint-disable-next-line react/forbid-prop-types name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, bitmapResolution: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, rotationCenterX: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, rotationCenterY: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }), // eslint-disable-next-line react/forbid-prop-types name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.any, order: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number })), onAddSortable: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDeleteSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDuplicateSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onExportSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onRemoveSortable: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onSelectSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, ordering: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number), raised: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, selectedId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (Object(_lib_sortable_hoc_jsx__WEBPACK_IMPORTED_MODULE_6__["default"])(SpriteList)); /***/ }), /***/ "./src/components/sprite-selector/sprite-selector.css": /*!************************************************************!*\ !*** ./src/components/sprite-selector/sprite-selector.css ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./sprite-selector.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/sprite-selector/sprite-selector.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/sprite-selector/sprite-selector.jsx": /*!************************************************************!*\ !*** ./src/components/sprite-selector/sprite-selector.jsx ***! \************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_sprite_info_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/sprite-info.jsx */ "./src/containers/sprite-info.jsx"); /* harmony import */ var _sprite_list_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sprite-list.jsx */ "./src/components/sprite-selector/sprite-list.jsx"); /* harmony import */ var _action_menu_action_menu_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../action-menu/action-menu.jsx */ "./src/components/action-menu/action-menu.jsx"); /* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../lib/layout-constants */ "./src/lib/layout-constants.js"); /* harmony import */ var _turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @turbowarp/scratch-l10n */ "./node_modules/@turbowarp/scratch-l10n/src/index.js"); /* harmony import */ var _sprite_selector_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./sprite-selector.css */ "./src/components/sprite-selector/sprite-selector.css"); /* harmony import */ var _sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_sprite_selector_css__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../action-menu/icon--file-upload.svg */ "./src/components/action-menu/icon--file-upload.svg"); /* harmony import */ var _action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../action-menu/icon--paint.svg */ "./src/components/action-menu/icon--paint.svg"); /* harmony import */ var _action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../action-menu/icon--sprite.svg */ "./src/components/action-menu/icon--sprite.svg"); /* harmony import */ var _action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var _action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../action-menu/icon--surprise.svg */ "./src/components/action-menu/icon--surprise.svg"); /* harmony import */ var _action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var _action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../action-menu/icon--search.svg */ "./src/components/action-menu/icon--search.svg"); /* harmony import */ var _action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_14__); const _excluded = ["editingTarget", "hoveredTarget", "intl", "onChangeSpriteDirection", "onChangeSpriteName", "onChangeSpriteRotationStyle", "onChangeSpriteSize", "onChangeSpriteVisibility", "onChangeSpriteX", "onChangeSpriteY", "onDrop", "onDeleteSprite", "onDuplicateSprite", "onExportSprite", "onFileUploadClick", "onNewSpriteClick", "onPaintSpriteClick", "onSelectSprite", "onSpriteUpload", "onSurpriseSpriteClick", "raised", "selectedId", "spriteFileInput", "sprites", "stageSize"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["defineMessages"])({ addSpriteFromLibrary: { "id": "gui.spriteSelector.addSpriteFromLibrary", "defaultMessage": "Choose a Sprite" }, addSpriteFromPaint: { "id": "gui.spriteSelector.addSpriteFromPaint", "defaultMessage": "Paint" }, addSpriteFromSurprise: { "id": "gui.spriteSelector.addSpriteFromSurprise", "defaultMessage": "Surprise" }, addSpriteFromFile: { "id": "gui.spriteSelector.addSpriteFromFile", "defaultMessage": "Upload Sprite" } }); const SpriteSelectorComponent = function SpriteSelectorComponent(props) { const { editingTarget, hoveredTarget, intl, onChangeSpriteDirection, onChangeSpriteName, onChangeSpriteRotationStyle, onChangeSpriteSize, onChangeSpriteVisibility, onChangeSpriteX, onChangeSpriteY, onDrop, onDeleteSprite, onDuplicateSprite, onExportSprite, onFileUploadClick, onNewSpriteClick, onPaintSpriteClick, onSelectSprite, onSpriteUpload, onSurpriseSpriteClick, raised, selectedId, spriteFileInput, sprites, stageSize } = props, componentProps = _objectWithoutProperties(props, _excluded); let selectedSprite = sprites[selectedId]; let spriteInfoDisabled = false; if (typeof selectedSprite === 'undefined') { selectedSprite = {}; spriteInfoDisabled = true; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], _extends({ className: _sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.spriteSelector }, componentProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_sprite_info_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { direction: selectedSprite.direction, disabled: spriteInfoDisabled, name: selectedSprite.name, rotationStyle: selectedSprite.rotationStyle, size: selectedSprite.size, stageSize: stageSize, visible: selectedSprite.visible, x: selectedSprite.x, y: selectedSprite.y, onChangeDirection: onChangeSpriteDirection, onChangeName: onChangeSpriteName, onChangeRotationStyle: onChangeSpriteRotationStyle, onChangeSize: onChangeSpriteSize, onChangeVisibility: onChangeSpriteVisibility, onChangeX: onChangeSpriteX, onChangeY: onChangeSpriteY }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_sprite_list_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { editingTarget: editingTarget, hoveredTarget: hoveredTarget, items: Object.keys(sprites).map(id => sprites[id]), raised: raised, selectedId: selectedId, onDeleteSprite: onDeleteSprite, onDrop: onDrop, onDuplicateSprite: onDuplicateSprite, onExportSprite: onExportSprite, onSelectSprite: onSelectSprite }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_action_menu_action_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _sprite_selector_css__WEBPACK_IMPORTED_MODULE_9___default.a.addButton, img: _action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_12___default.a, moreButtons: [{ title: intl.formatMessage(messages.addSpriteFromFile), img: _action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_10___default.a, onClick: onFileUploadClick, fileAccept: '.svg, .png, .bmp, .jpg, .jpeg, .jfif, .webp, .sprite2, .sprite3, .gif, .pms', fileChange: onSpriteUpload, fileInput: spriteFileInput, fileMultiple: true }, { title: intl.formatMessage(messages.addSpriteFromSurprise), img: _action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_13___default.a, onClick: onSurpriseSpriteClick // TODO need real function for this }, { title: intl.formatMessage(messages.addSpriteFromPaint), img: _action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_11___default.a, onClick: onPaintSpriteClick // TODO need real function for this }, { title: intl.formatMessage(messages.addSpriteFromLibrary), img: _action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_14___default.a, onClick: onNewSpriteClick }], title: intl.formatMessage(messages.addSpriteFromLibrary), tooltipPlace: Object(_turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_8__["isRtl"])(intl.locale) ? 'right' : 'left', onClick: onNewSpriteClick })); }; SpriteSelectorComponent.propTypes = { editingTarget: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, hoveredTarget: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ hoveredSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, receivedBlocks: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool }), intl: react_intl__WEBPACK_IMPORTED_MODULE_2__["intlShape"].isRequired, onChangeSpriteDirection: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteName: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteRotationStyle: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteVisibility: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteX: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteY: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDeleteSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDrop: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDuplicateSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onExportSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onFileUploadClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onNewSpriteClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onPaintSpriteClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onSelectSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onSpriteUpload: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onSurpriseSpriteClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, raised: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, selectedId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, spriteFileInput: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, sprites: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ id: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ costume: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ url: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, bitmapResolution: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired, rotationCenterX: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired, rotationCenterY: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired }), name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, order: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired }) }), stageSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(Object.keys(_lib_layout_constants__WEBPACK_IMPORTED_MODULE_7__["STAGE_DISPLAY_SIZES"])).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(SpriteSelectorComponent)); /***/ }), /***/ "./src/components/stage-header/icon--fullscreen.svg": /*!**********************************************************!*\ !*** ./src/components/stage-header/icon--fullscreen.svg ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/422b48c2206d5240a6717c92496ba21a.svg"; /***/ }), /***/ "./src/components/stage-header/icon--large-stage.svg": /*!***********************************************************!*\ !*** ./src/components/stage-header/icon--large-stage.svg ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/837d221121f5f6dc06f1ae42a7f5e071.svg"; /***/ }), /***/ "./src/components/stage-header/icon--settings.svg": /*!********************************************************!*\ !*** ./src/components/stage-header/icon--settings.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/05e9c069d478b9e056e35f04e7dedf64.svg"; /***/ }), /***/ "./src/components/stage-header/icon--small-stage.svg": /*!***********************************************************!*\ !*** ./src/components/stage-header/icon--small-stage.svg ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/4d250151a07cfc8b54b34e1df68d265c.svg"; /***/ }), /***/ "./src/components/stage-header/icon--unfullscreen.svg": /*!************************************************************!*\ !*** ./src/components/stage-header/icon--unfullscreen.svg ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/dd55f4c6c20f5d25e520b6f5bfb090c5.svg"; /***/ }), /***/ "./src/components/stage-header/stage-header.css": /*!******************************************************!*\ !*** ./src/components/stage-header/stage-header.css ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./stage-header.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/stage-header/stage-header.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/stage-header/stage-header.jsx": /*!******************************************************!*\ !*** ./src/components/stage-header/stage-header.jsx ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _button_button_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../button/button.jsx */ "./src/components/button/button.jsx"); /* harmony import */ var _containers_controls_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../containers/controls.jsx */ "./src/containers/controls.jsx"); /* harmony import */ var _lib_screen_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../lib/screen-utils */ "./src/lib/screen-utils.js"); /* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../lib/layout-constants */ "./src/lib/layout-constants.js"); /* harmony import */ var _icon_fullscreen_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./icon--fullscreen.svg */ "./src/components/stage-header/icon--fullscreen.svg"); /* harmony import */ var _icon_fullscreen_svg__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_icon_fullscreen_svg__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _icon_large_stage_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./icon--large-stage.svg */ "./src/components/stage-header/icon--large-stage.svg"); /* harmony import */ var _icon_large_stage_svg__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_icon_large_stage_svg__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var _icon_small_stage_svg__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./icon--small-stage.svg */ "./src/components/stage-header/icon--small-stage.svg"); /* harmony import */ var _icon_small_stage_svg__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_icon_small_stage_svg__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var _icon_unfullscreen_svg__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./icon--unfullscreen.svg */ "./src/components/stage-header/icon--unfullscreen.svg"); /* harmony import */ var _icon_unfullscreen_svg__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_icon_unfullscreen_svg__WEBPACK_IMPORTED_MODULE_14__); /* harmony import */ var _icon_settings_svg__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./icon--settings.svg */ "./src/components/stage-header/icon--settings.svg"); /* harmony import */ var _icon_settings_svg__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_icon_settings_svg__WEBPACK_IMPORTED_MODULE_15__); /* harmony import */ var _stage_header_css__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./stage-header.css */ "./src/components/stage-header/stage-header.css"); /* harmony import */ var _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_stage_header_css__WEBPACK_IMPORTED_MODULE_16__); /* harmony import */ var _lib_tw_fullscreen_api__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../lib/tw-fullscreen-api */ "./src/lib/tw-fullscreen-api.js"); // import popoutIcon from './icon--popout.svg'; // import bringBackIcon from './icon--popin.svg'; // import Popout from './popout.js'; const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["defineMessages"])({ largeStageSizeMessage: { "id": "gui.stageHeader.stageSizeLarge", "defaultMessage": "Switch to large stage" }, smallStageSizeMessage: { "id": "gui.stageHeader.stageSizeSmall", "defaultMessage": "Switch to small stage" }, fullStageSizeMessage: { "id": "gui.stageHeader.stageSizeFull", "defaultMessage": "Enter full screen mode" }, unFullStageSizeMessage: { "id": "gui.stageHeader.stageSizeUnFull", "defaultMessage": "Exit full screen mode" }, fullscreenControl: { "id": "gui.stageHeader.fullscreenControl", "defaultMessage": "Full Screen Control" }, openSettingsMessage: { "id": "pm.openGameplay", "defaultMessage": "Open gameplay settings" } }); const enableSettingsButton = new URLSearchParams(location.search).has('settings-button'); const StageHeaderComponent = function StageHeaderComponent(props) { const { customStageSize, isFullScreen, isPlayerOnly, onKeyPress, onSetStageLarge, onSetStageSmall, onSetStageFull, onSetStageUnFull, onOpenSettings, isEmbedded, stageSizeMode, vm } = props; let header = null; // const popoutWindowButton = if (isFullScreen || isEmbedded) { const stageDimensions = Object(_lib_screen_utils__WEBPACK_IMPORTED_MODULE_9__["getStageDimensions"])(null, customStageSize, true); const settingsButton = isEmbedded && enableSettingsButton ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButton, onClick: onOpenSettings }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { alt: props.intl.formatMessage(messages.openSettingsMessage), className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButtonIcon, draggable: false, src: _icon_settings_svg__WEBPACK_IMPORTED_MODULE_15___default.a, title: props.intl.formatMessage(messages.openSettingsMessage) })) : null; const fullscreenButton = isFullScreen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButton, onClick: onSetStageUnFull, onKeyPress: onKeyPress }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { alt: props.intl.formatMessage(messages.unFullStageSizeMessage), className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButtonIcon, draggable: false, src: _icon_unfullscreen_svg__WEBPACK_IMPORTED_MODULE_14___default.a, title: props.intl.formatMessage(messages.fullscreenControl) })) : _lib_tw_fullscreen_api__WEBPACK_IMPORTED_MODULE_17__["default"].available() ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButton, onClick: onSetStageFull }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { alt: props.intl.formatMessage(messages.fullStageSizeMessage), className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButtonIcon, draggable: false, src: _icon_fullscreen_svg__WEBPACK_IMPORTED_MODULE_11___default.a, title: props.intl.formatMessage(messages.fullscreenControl) })) : null; header = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageHeaderWrapperOverlay, { [_stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.embedded]: isEmbedded }) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageMenuWrapper, style: { width: stageDimensions.width } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_controls_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { vm: vm }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.embedButtons }, settingsButton, fullscreenButton))); } else { const stageControls = isPlayerOnly ? [] : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageSizeToggleGroup }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButton, _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButtonFirst, stageSizeMode === _lib_layout_constants__WEBPACK_IMPORTED_MODULE_10__["STAGE_SIZE_MODES"].small ? null : _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButtonToggledOff), onClick: onSetStageSmall }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { alt: props.intl.formatMessage(messages.smallStageSizeMessage), className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButtonIcon, draggable: false, src: _icon_small_stage_svg__WEBPACK_IMPORTED_MODULE_13___default.a }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButton, _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButtonLast, stageSizeMode === _lib_layout_constants__WEBPACK_IMPORTED_MODULE_10__["STAGE_SIZE_MODES"].large ? null : _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButtonToggledOff), onClick: onSetStageLarge }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { alt: props.intl.formatMessage(messages.largeStageSizeMessage), className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButtonIcon, draggable: false, src: _icon_large_stage_svg__WEBPACK_IMPORTED_MODULE_12___default.a })))); header = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageHeaderWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageMenuWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_controls_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { vm: vm, isSmall: stageSizeMode === _lib_layout_constants__WEBPACK_IMPORTED_MODULE_10__["STAGE_SIZE_MODES"].small }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageSizeRow }, stageControls, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.embedButtons }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButton, onClick: onSetStageFull }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", { alt: props.intl.formatMessage(messages.fullStageSizeMessage), className: _stage_header_css__WEBPACK_IMPORTED_MODULE_16___default.a.stageButtonIcon, draggable: false, src: _icon_fullscreen_svg__WEBPACK_IMPORTED_MODULE_11___default.a, title: props.intl.formatMessage(messages.fullscreenControl) })))))); } return header; }; const mapStateToProps = state => ({ customStageSize: state.scratchGui.customStageSize, // This is the button's mode, as opposed to the actual current state stageSizeMode: state.scratchGui.stageSize.stageSize }); StageHeaderComponent.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_1__["intlShape"], customStageSize: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number }), isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, isPlayerOnly: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, onKeyPress: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onSetStageFull: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onSetStageLarge: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onSetStageSmall: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onSetStageUnFull: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onOpenSettings: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, isEmbedded: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired, stageSizeMode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf(Object.keys(_lib_layout_constants__WEBPACK_IMPORTED_MODULE_10__["STAGE_SIZE_MODES"])), vm: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_5___default.a).isRequired }; StageHeaderComponent.defaultProps = { stageSizeMode: _lib_layout_constants__WEBPACK_IMPORTED_MODULE_10__["STAGE_SIZE_MODES"].large }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps)(StageHeaderComponent))); /***/ }), /***/ "./src/components/stage-header/stagecontrols/flag.svg": /*!************************************************************!*\ !*** ./src/components/stage-header/stagecontrols/flag.svg ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/2e0c4790f8f9cf28e3c346b9cef0fcb6.svg"; /***/ }), /***/ "./src/components/stage-header/stagecontrols/pause.svg": /*!*************************************************************!*\ !*** ./src/components/stage-header/stagecontrols/pause.svg ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/a2ed866eb2db31b7583e7b52ee598246.svg"; /***/ }), /***/ "./src/components/stage-header/stagecontrols/play.svg": /*!************************************************************!*\ !*** ./src/components/stage-header/stagecontrols/play.svg ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/8f160ba31754d0e965eaeb54b60d6240.svg"; /***/ }), /***/ "./src/components/stage-header/stagecontrols/stop.svg": /*!************************************************************!*\ !*** ./src/components/stage-header/stagecontrols/stop.svg ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/36fcc7dbca20720abcab01e49d4955f9.svg"; /***/ }), /***/ "./src/components/stage-selector/stage-selector.css": /*!**********************************************************!*\ !*** ./src/components/stage-selector/stage-selector.css ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./stage-selector.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/stage-selector/stage-selector.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/stage-selector/stage-selector.jsx": /*!**********************************************************!*\ !*** ./src/components/stage-selector/stage-selector.jsx ***! \**********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _action_menu_action_menu_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../action-menu/action-menu.jsx */ "./src/components/action-menu/action-menu.jsx"); /* harmony import */ var _stage_selector_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stage-selector.css */ "./src/components/stage-selector/stage-selector.css"); /* harmony import */ var _stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_stage_selector_css__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @turbowarp/scratch-l10n */ "./node_modules/@turbowarp/scratch-l10n/src/index.js"); /* harmony import */ var _action_menu_icon_backdrop_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../action-menu/icon--backdrop.svg */ "./src/components/action-menu/icon--backdrop.svg"); /* harmony import */ var _action_menu_icon_backdrop_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_action_menu_icon_backdrop_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../action-menu/icon--file-upload.svg */ "./src/components/action-menu/icon--file-upload.svg"); /* harmony import */ var _action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../action-menu/icon--paint.svg */ "./src/components/action-menu/icon--paint.svg"); /* harmony import */ var _action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../action-menu/icon--surprise.svg */ "./src/components/action-menu/icon--surprise.svg"); /* harmony import */ var _action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../action-menu/icon--search.svg */ "./src/components/action-menu/icon--search.svg"); /* harmony import */ var _action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_12__); const _excluded = ["backdropCount", "containerRef", "dragOver", "fileInputRef", "intl", "selected", "raised", "receivedBlocks", "url", "onBackdropFileUploadClick", "onBackdropFileUpload", "onClick", "onMouseEnter", "onMouseLeave", "onNewBackdropClick", "onSurpriseBackdropClick", "onEmptyBackdropClick"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ addBackdropFromLibrary: { "id": "gui.spriteSelector.addBackdropFromLibrary", "defaultMessage": "Choose a Backdrop" }, addBackdropFromPaint: { "id": "gui.stageSelector.addBackdropFromPaint", "defaultMessage": "Paint" }, addBackdropFromSurprise: { "id": "gui.stageSelector.addBackdropFromSurprise", "defaultMessage": "Surprise" }, addBackdropFromFile: { "id": "gui.stageSelector.addBackdropFromFile", "defaultMessage": "Upload Backdrop" } }); const StageSelector = props => { const { backdropCount, containerRef, dragOver, fileInputRef, intl, selected, raised, receivedBlocks, url, onBackdropFileUploadClick, onBackdropFileUpload, onClick, onMouseEnter, onMouseLeave, onNewBackdropClick, onSurpriseBackdropClick, onEmptyBackdropClick } = props, componentProps = _objectWithoutProperties(props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], _extends({ className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default.a.stageSelector, { [_stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default.a.isSelected]: selected, [_stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default.a.raised]: raised || dragOver, [_stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default.a.receivedBlocks]: receivedBlocks }), componentRef: containerRef, onClick: onClick, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave }, componentProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default.a.header }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default.a.headerTitle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Stage", id: "gui.stageSelector.stage" }))), url ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: _stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default.a.costumeCanvas, src: url }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default.a.label }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Backdrops", id: "gui.stageSelector.backdrops" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default.a.count }, backdropCount), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_action_menu_action_menu_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _stage_selector_css__WEBPACK_IMPORTED_MODULE_6___default.a.addButton, img: _action_menu_icon_backdrop_svg__WEBPACK_IMPORTED_MODULE_8___default.a, moreButtons: [{ title: intl.formatMessage(messages.addBackdropFromFile), img: _action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_9___default.a, onClick: onBackdropFileUploadClick, fileAccept: '.svg, .png, .bmp, .jpg, .jpeg, .jfif, .webp, .gif', fileChange: onBackdropFileUpload, fileInput: fileInputRef, fileMultiple: true }, { title: intl.formatMessage(messages.addBackdropFromSurprise), img: _action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_11___default.a, onClick: onSurpriseBackdropClick }, { title: intl.formatMessage(messages.addBackdropFromPaint), img: _action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_10___default.a, onClick: onEmptyBackdropClick }, { title: intl.formatMessage(messages.addBackdropFromLibrary), img: _action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_12___default.a, onClick: onNewBackdropClick }], title: intl.formatMessage(messages.addBackdropFromLibrary), tooltipPlace: Object(_turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_7__["isRtl"])(intl.locale) ? 'right' : 'left', onClick: onNewBackdropClick })); }; StageSelector.propTypes = { backdropCount: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, containerRef: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, dragOver: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, fileInputRef: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired, onBackdropFileUpload: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onBackdropFileUploadClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onEmptyBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onMouseEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onNewBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onSurpriseBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, raised: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, receivedBlocks: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, selected: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(StageSelector)); /***/ }), /***/ "./src/components/stage-wrapper/stage-wrapper.css": /*!********************************************************!*\ !*** ./src/components/stage-wrapper/stage-wrapper.css ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./stage-wrapper.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/stage-wrapper/stage-wrapper.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/stage-wrapper/stage-wrapper.jsx": /*!********************************************************!*\ !*** ./src/components/stage-wrapper/stage-wrapper.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../lib/layout-constants.js */ "./src/lib/layout-constants.js"); /* harmony import */ var _containers_stage_header_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../containers/stage-header.jsx */ "./src/containers/stage-header.jsx"); /* harmony import */ var _containers_stage_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../containers/stage.jsx */ "./src/containers/stage.jsx"); /* harmony import */ var _loader_loader_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../loader/loader.jsx */ "./src/components/loader/loader.jsx"); /* harmony import */ var _stage_wrapper_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stage-wrapper.css */ "./src/components/stage-wrapper/stage-wrapper.css"); /* harmony import */ var _stage_wrapper_css__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_stage_wrapper_css__WEBPACK_IMPORTED_MODULE_9__); const StageWrapperComponent = function StageWrapperComponent(props) { const { isEmbedded, isFullScreen, isRtl, isRendererSupported, loading, stageSize, vm } = props; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_stage_wrapper_css__WEBPACK_IMPORTED_MODULE_9___default.a.stageWrapper, { [_stage_wrapper_css__WEBPACK_IMPORTED_MODULE_9___default.a.embedded]: isEmbedded }, { [_stage_wrapper_css__WEBPACK_IMPORTED_MODULE_9___default.a.fullScreen]: isFullScreen }), dir: isRtl ? 'rtl' : 'ltr' }, new URLSearchParams(location.search).has('stage-only') ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _stage_wrapper_css__WEBPACK_IMPORTED_MODULE_9___default.a.stageMenuWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_stage_header_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { stageSize: stageSize, vm: vm })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _stage_wrapper_css__WEBPACK_IMPORTED_MODULE_9___default.a.stageCanvasWrapper }, isRendererSupported ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_stage_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { stageSize: stageSize, vm: vm }) : null), loading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_loader_loader_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { isFullScreen: isFullScreen }) : null); }; StageWrapperComponent.propTypes = { isEmbedded: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isRendererSupported: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, loading: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, stageSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(Object.keys(_lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_5__["STAGE_DISPLAY_SIZES"])).isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_3___default.a).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (StageWrapperComponent); /***/ }), /***/ "./src/components/stage/stage.css": /*!****************************************!*\ !*** ./src/components/stage/stage.css ***! \****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./stage.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/stage/stage.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/stage/stage.jsx": /*!****************************************!*\ !*** ./src/components/stage/stage.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_dom_element_renderer_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/dom-element-renderer.jsx */ "./src/containers/dom-element-renderer.jsx"); /* harmony import */ var _loupe_loupe_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../loupe/loupe.jsx */ "./src/components/loupe/loupe.jsx"); /* harmony import */ var _containers_monitor_list_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../containers/monitor-list.jsx */ "./src/containers/monitor-list.jsx"); /* harmony import */ var _containers_target_highlight_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../containers/target-highlight.jsx */ "./src/containers/target-highlight.jsx"); /* harmony import */ var _containers_green_flag_overlay_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../containers/green-flag-overlay.jsx */ "./src/containers/green-flag-overlay.jsx"); /* harmony import */ var _containers_question_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../containers/question.jsx */ "./src/containers/question.jsx"); /* harmony import */ var _mic_indicator_mic_indicator_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../mic-indicator/mic-indicator.jsx */ "./src/components/mic-indicator/mic-indicator.jsx"); /* harmony import */ var _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../lib/layout-constants.js */ "./src/lib/layout-constants.js"); /* harmony import */ var _lib_screen_utils_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../lib/screen-utils.js */ "./src/lib/screen-utils.js"); /* harmony import */ var _stage_css__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./stage.css */ "./src/components/stage/stage.css"); /* harmony import */ var _stage_css__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_stage_css__WEBPACK_IMPORTED_MODULE_13__); const _excluded = ["canvas", "customStageSize", "dragRef", "isColorPicking", "isFullScreen", "isPlayerOnly", "isStarted", "colorInfo", "micIndicator", "question", "stageSize", "useEditorDragStyle", "onDeactivateColorPicker", "onDoubleClick", "onQuestionAnswered"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const StageComponent = props => { const { canvas, customStageSize, dragRef, isColorPicking, isFullScreen, isPlayerOnly, isStarted, colorInfo, micIndicator, question, stageSize, useEditorDragStyle, onDeactivateColorPicker, onDoubleClick, onQuestionAnswered } = props, boxProps = _objectWithoutProperties(props, _excluded); const stageDimensions = Object(_lib_screen_utils_js__WEBPACK_IMPORTED_MODULE_12__["getStageDimensions"])(stageSize, customStageSize, isFullScreen); const minWidth = Object(_lib_screen_utils_js__WEBPACK_IMPORTED_MODULE_12__["getMinWidth"])(stageSize); const transformStyle = stageDimensions.width < minWidth && !isFullScreen ? { transform: "translateX(".concat((minWidth - stageDimensions.width) / 2, "px)") } : {}; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.stageWrapper, { [_stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.withColorPicker]: !isFullScreen && isColorPicking }), onDoubleClick: onDoubleClick, style: isPlayerOnly ? null : { minWidth: "".concat(minWidth, "px") } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.stage, { [_stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.fullScreen]: isFullScreen }), style: _objectSpread({ height: stageDimensions.height, width: stageDimensions.width }, transformStyle) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_dom_element_renderer_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], _extends({ domElement: canvas, style: { height: stageDimensions.height, width: stageDimensions.width } }, boxProps)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.customOverlays }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_dom_element_renderer_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { domElement: props.overlay })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.monitorWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_monitor_list_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { draggable: useEditorDragStyle, stageSize: stageDimensions })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.frameWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_target_highlight_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.frame, stageHeight: stageDimensions.height, stageWidth: stageDimensions.width })), isColorPicking && colorInfo ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_loupe_loupe_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { colorInfo: colorInfo }) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.stageOverlays, { [_stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.fullScreen]: isFullScreen }), style: transformStyle }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.stageBottomWrapper, style: { width: stageDimensions.width, height: stageDimensions.height } }, micIndicator ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_mic_indicator_mic_indicator_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], { className: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.micIndicator, stageSize: stageDimensions }) : null, question === null ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.questionWrapper, style: { width: stageDimensions.width } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_question_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { question: question, onQuestionAnswered: onQuestionAnswered }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("canvas", { className: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.draggingSprite, height: 0, ref: dragRef, width: 0 })), isStarted ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_green_flag_overlay_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { className: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.greenFlagOverlay, wrapperClass: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.greenFlagOverlayWrapper })), isColorPicking ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _stage_css__WEBPACK_IMPORTED_MODULE_13___default.a.colorPickerBackground, onClick: onDeactivateColorPicker }) : null); }; StageComponent.propTypes = { canvas: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(Element).isRequired, customStageSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }), overlay: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(Element).isRequired, colorInfo: _loupe_loupe_jsx__WEBPACK_IMPORTED_MODULE_5__["default"].propTypes.colorInfo, dragRef: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, isColorPicking: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, isPlayerOnly: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isStarted: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, micIndicator: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, onDeactivateColorPicker: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDoubleClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onQuestionAnswered: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, question: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, stageSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(Object.keys(_lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_11__["STAGE_DISPLAY_SIZES"])).isRequired, useEditorDragStyle: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool }; StageComponent.defaultProps = { dragRef: () => {} }; /* harmony default export */ __webpack_exports__["default"] = (StageComponent); /***/ }), /***/ "./src/components/stop-all/stop-all.css": /*!**********************************************!*\ !*** ./src/components/stop-all/stop-all.css ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./stop-all.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/stop-all/stop-all.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/stop-all/stop-all.jsx": /*!**********************************************!*\ !*** ./src/components/stop-all/stop-all.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _stage_header_stagecontrols_stop_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../stage-header/stagecontrols/stop.svg */ "./src/components/stage-header/stagecontrols/stop.svg"); /* harmony import */ var _stage_header_stagecontrols_stop_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_stage_header_stagecontrols_stop_svg__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _stop_all_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stop-all.css */ "./src/components/stop-all/stop-all.css"); /* harmony import */ var _stop_all_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_stop_all_css__WEBPACK_IMPORTED_MODULE_4__); const _excluded = ["active", "className", "onClick", "title"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const StopAllComponent = function StopAllComponent(props) { const { active, className, onClick, title } = props, componentProps = _objectWithoutProperties(props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", _extends({ className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(className, _stop_all_css__WEBPACK_IMPORTED_MODULE_4___default.a.stopAll, { [_stop_all_css__WEBPACK_IMPORTED_MODULE_4___default.a.isActive]: active }), draggable: false, src: _stage_header_stagecontrols_stop_svg__WEBPACK_IMPORTED_MODULE_3___default.a, title: title, onClick: onClick }, componentProps)); }; StopAllComponent.propTypes = { active: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; StopAllComponent.defaultProps = { active: false, title: 'Stop' }; /* harmony default export */ __webpack_exports__["default"] = (StopAllComponent); /***/ }), /***/ "./src/components/tag-button/tag-button.css": /*!**************************************************!*\ !*** ./src/components/tag-button/tag-button.css ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./tag-button.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tag-button/tag-button.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tag-button/tag-button.jsx": /*!**************************************************!*\ !*** ./src/components/tag-button/tag-button.jsx ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _button_button_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../button/button.jsx */ "./src/components/button/button.jsx"); /* harmony import */ var _tag_button_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tag-button.css */ "./src/components/tag-button/tag-button.css"); /* harmony import */ var _tag_button_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tag_button_css__WEBPACK_IMPORTED_MODULE_5__); const _excluded = ["active", "iconClassName", "className", "tag", "intlLabel"]; function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const TagButtonComponent = _ref => { let { active, iconClassName, className, tag, // eslint-disable-line no-unused-vars intlLabel } = _ref, props = _objectWithoutProperties(_ref, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_button_button_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], _extends({ className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_tag_button_css__WEBPACK_IMPORTED_MODULE_5___default.a.tagButton, className, { [_tag_button_css__WEBPACK_IMPORTED_MODULE_5___default.a.active]: active }), iconClassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_tag_button_css__WEBPACK_IMPORTED_MODULE_5___default.a.tagButtonIcon, iconClassName) }, props), typeof intlLabel === 'string' ? intlLabel : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], intlLabel)); }; TagButtonComponent.propTypes = _objectSpread(_objectSpread({}, _button_button_jsx__WEBPACK_IMPORTED_MODULE_4__["default"].propTypes), {}, { active: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, intlLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ defaultMessage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, description: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }), prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]).isRequired, tag: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired }); TagButtonComponent.defaultProps = { active: false }; /* harmony default export */ __webpack_exports__["default"] = (TagButtonComponent); /***/ }), /***/ "./src/components/tag-checkbox/tag-button.css": /*!****************************************************!*\ !*** ./src/components/tag-checkbox/tag-button.css ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./tag-button.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tag-checkbox/tag-button.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tag-checkbox/tag-button.jsx": /*!****************************************************!*\ !*** ./src/components/tag-checkbox/tag-button.jsx ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _button_button_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../button/button.jsx */ "./src/components/button/button.jsx"); /* harmony import */ var _tag_button_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tag-button.css */ "./src/components/tag-checkbox/tag-button.css"); /* harmony import */ var _tag_button_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tag_button_css__WEBPACK_IMPORTED_MODULE_5__); const _excluded = ["active", "iconClassName", "className", "tag", "intlLabel"]; function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const TagButtonComponent = _ref => { let { active, iconClassName, className, tag, // eslint-disable-line no-unused-vars intlLabel } = _ref, props = _objectWithoutProperties(_ref, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("label", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_tag_button_css__WEBPACK_IMPORTED_MODULE_5___default.a.checkboxLabel) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("input", { onChange: props.onClick, type: "checkbox", className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_tag_button_css__WEBPACK_IMPORTED_MODULE_5___default.a.checkbox) }), typeof intlLabel === 'string' ? intlLabel : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], intlLabel)) // ; }; TagButtonComponent.propTypes = _objectSpread(_objectSpread({}, _button_button_jsx__WEBPACK_IMPORTED_MODULE_4__["default"].propTypes), {}, { active: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, intlLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ defaultMessage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, description: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }), prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]).isRequired, tag: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired }); TagButtonComponent.defaultProps = { active: false }; /* harmony default export */ __webpack_exports__["default"] = (TagButtonComponent); /***/ }), /***/ "./src/components/target-pane/target-pane.css": /*!****************************************************!*\ !*** ./src/components/target-pane/target-pane.css ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./target-pane.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/target-pane/target-pane.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/target-pane/target-pane.jsx": /*!****************************************************!*\ !*** ./src/components/target-pane/target-pane.jsx ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _containers_sprite_library_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../containers/sprite-library.jsx */ "./src/containers/sprite-library.jsx"); /* harmony import */ var _sprite_selector_sprite_selector_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../sprite-selector/sprite-selector.jsx */ "./src/components/sprite-selector/sprite-selector.jsx"); /* harmony import */ var _containers_stage_selector_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../containers/stage-selector.jsx */ "./src/containers/stage-selector.jsx"); /* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../lib/layout-constants */ "./src/lib/layout-constants.js"); /* harmony import */ var _target_pane_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./target-pane.css */ "./src/components/target-pane/target-pane.css"); /* harmony import */ var _target_pane_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_target_pane_css__WEBPACK_IMPORTED_MODULE_7__); const _excluded = ["editingTarget", "fileInputRef", "hoveredTarget", "spriteLibraryVisible", "onActivateBlocksTab", "onChangeSpriteDirection", "onChangeSpriteName", "onChangeSpriteRotationStyle", "onChangeSpriteSize", "onChangeSpriteVisibility", "onChangeSpriteX", "onChangeSpriteY", "onDeleteSprite", "onDrop", "onDuplicateSprite", "onExportSprite", "onFileUploadClick", "onNewSpriteClick", "onPaintSpriteClick", "onRequestCloseSpriteLibrary", "onSelectSprite", "onSpriteUpload", "onSurpriseSpriteClick", "raiseSprites", "stage", "stageSize", "sprites", "vm"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } /* * Pane that contains the sprite selector, sprite info, stage selector, * and the new sprite, costume and backdrop buttons * @param {object} props Props for the component * @returns {React.Component} rendered component */ const TargetPane = _ref => { let { editingTarget, fileInputRef, hoveredTarget, spriteLibraryVisible, onActivateBlocksTab, onChangeSpriteDirection, onChangeSpriteName, onChangeSpriteRotationStyle, onChangeSpriteSize, onChangeSpriteVisibility, onChangeSpriteX, onChangeSpriteY, onDeleteSprite, onDrop, onDuplicateSprite, onExportSprite, onFileUploadClick, onNewSpriteClick, onPaintSpriteClick, onRequestCloseSpriteLibrary, onSelectSprite, onSpriteUpload, onSurpriseSpriteClick, raiseSprites, stage, stageSize, sprites, vm } = _ref, componentProps = _objectWithoutProperties(_ref, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", _extends({ className: _target_pane_css__WEBPACK_IMPORTED_MODULE_7___default.a.targetPane }, componentProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_sprite_selector_sprite_selector_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { editingTarget: editingTarget, hoveredTarget: hoveredTarget, raised: raiseSprites, selectedId: editingTarget, spriteFileInput: fileInputRef, sprites: sprites, stageSize: stageSize, onChangeSpriteDirection: onChangeSpriteDirection, onChangeSpriteName: onChangeSpriteName, onChangeSpriteRotationStyle: onChangeSpriteRotationStyle, onChangeSpriteSize: onChangeSpriteSize, onChangeSpriteVisibility: onChangeSpriteVisibility, onChangeSpriteX: onChangeSpriteX, onChangeSpriteY: onChangeSpriteY, onDeleteSprite: onDeleteSprite, onDrop: onDrop, onDuplicateSprite: onDuplicateSprite, onExportSprite: onExportSprite, onFileUploadClick: onFileUploadClick, onNewSpriteClick: onNewSpriteClick, onPaintSpriteClick: onPaintSpriteClick, onSelectSprite: onSelectSprite, onSpriteUpload: onSpriteUpload, onSurpriseSpriteClick: onSurpriseSpriteClick }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _target_pane_css__WEBPACK_IMPORTED_MODULE_7___default.a.stageSelectorWrapper }, stage.id && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_stage_selector_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { asset: stage.costume && stage.costume.asset, backdropCount: stage.costumeCount, id: stage.id, selected: stage.id === editingTarget, onSelect: onSelectSprite }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, spriteLibraryVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_sprite_library_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { vm: vm, onActivateBlocksTab: onActivateBlocksTab, onRequestClose: onRequestCloseSpriteLibrary }) : null))); }; const spriteShape = prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ costume: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ // asset is defined in scratch-storage's Asset.js asset: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.object, // eslint-disable-line react/forbid-prop-types url: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, // The following are optional because costumes uploaded from disk // will not have these properties available bitmapResolution: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, rotationCenterX: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, rotationCenterY: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }), costumeCount: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, direction: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, id: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, order: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, size: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, visibility: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, x: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, y: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }); TargetPane.propTypes = { editingTarget: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, extensionLibraryVisible: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, fileInputRef: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, hoveredTarget: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ hoveredSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, receivedBlocks: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool }), onActivateBlocksTab: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onChangeSpriteDirection: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteName: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteRotationStyle: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteVisibility: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteX: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onChangeSpriteY: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDeleteSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDrop: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onDuplicateSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onExportSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onFileUploadClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onNewSpriteClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onPaintSpriteClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onRequestCloseExtensionLibrary: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onRequestCloseSpriteLibrary: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onSelectSprite: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onSpriteUpload: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onSurpriseSpriteClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, raiseSprites: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, spriteLibraryVisible: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, sprites: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.objectOf(spriteShape), stage: spriteShape, stageSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(Object.keys(_lib_layout_constants__WEBPACK_IMPORTED_MODULE_6__["STAGE_DISPLAY_SIZES"])).isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_2___default.a) }; /* harmony default export */ __webpack_exports__["default"] = (TargetPane); /***/ }), /***/ "./src/components/telemetry-modal/telemetry-modal-header.png": /*!*******************************************************************!*\ !*** ./src/components/telemetry-modal/telemetry-modal-header.png ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/fb356e819d8ab210a241ce81b9bac33c.png"; /***/ }), /***/ "./src/components/telemetry-modal/telemetry-modal.css": /*!************************************************************!*\ !*** ./src/components/telemetry-modal/telemetry-modal.css ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./telemetry-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/telemetry-modal/telemetry-modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/telemetry-modal/telemetry-modal.jsx": /*!************************************************************!*\ !*** ./src/components/telemetry-modal/telemetry-modal.jsx ***! \************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-modal */ "./node_modules/react-modal/lib/index.js"); /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_modal__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./telemetry-modal.css */ "./src/components/telemetry-modal/telemetry-modal.css"); /* harmony import */ var _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ label: { "id": "gui.telemetryOptIn.label", "defaultMessage": "Report statistics to improve Scratch" }, bodyText1: { "id": "gui.telemetryOptIn.body1", "defaultMessage": "The Scratch Team is always looking to better understand how Scratch is used around the world. To help support this effort, you can allow Scratch to automatically send usage information to the Scratch Team." }, bodyText2: { "id": "gui.telemetryOptIn.body2", "defaultMessage": "The information we collect includes language selection, blocks usage, and some events like saving, loading, and uploading a project. We DO NOT collect any personal information. Please see our {privacyPolicyLink} for more information." }, privacyPolicyLink: { "id": "gui.telemetryOptIn.privacyPolicyLink", "defaultMessage": "Privacy Policy" }, optInText: { "id": "gui.telemetryOptIn.optInText", "defaultMessage": "Share my usage data with the Scratch Team" }, optInTooltip: { "id": "gui.telemetryOptIn.optInTooltip", "defaultMessage": "Enable telemetry" }, optOutText: { "id": "gui.telemetryOptIn.optOutText", "defaultMessage": "Do not share my usage data with the Scratch Team" }, optOutTooltip: { "id": "gui.telemetryOptIn.optOutTooltip", "defaultMessage": "Disable telemetry" }, settingWasUpdated: { "id": "gui.telemetryOptIn.settingWasUpdated", "defaultMessage": "Your setting was updated." }, closeButton: { "id": "gui.telemetryOptIn.buttonClose", "defaultMessage": "Close" } }); // This should be at least as long as the CSS transition const SETTING_WAS_UPDATED_DURATION_MS = 3000; class TelemetryModal extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleCancel', 'handleOptInOutChanged']); this.state = { // if the settingWasUpdated message is displayed, this will be the ID of its removal timer settingWasUpdatedTimer: null }; } componentWillUnmount() { if (this.state.settingWasUpdatedTimer) { clearTimeout(this.state.settingWasUpdatedTimer); } } handleCancel() { this.props.onRequestClose(); if (this.props.onCancel) { this.props.onCancel(); } } handleOptInOutChanged(e) { if (e.target.value === 'true') { if (this.props.onOptIn) { this.props.onOptIn(); this.handleSettingWasUpdated(); } } else if (e.target.value === 'false') { if (this.props.onOptOut) { this.props.onOptOut(); this.handleSettingWasUpdated(); } } } handleSettingWasUpdated() { if (this.state.settingWasUpdatedTimer) { clearTimeout(this.state.settingWasUpdatedTimer); } const newTimer = setTimeout(() => this.handleSettingWasUpdatedTimeout(newTimer), SETTING_WAS_UPDATED_DURATION_MS); this.setState({ settingWasUpdatedTimer: newTimer }); } handleSettingWasUpdatedTimeout(thisTimer) { if (thisTimer !== this.state.settingWasUpdatedTimer) { // some other timer has taken over return; } this.setState({ settingWasUpdatedTimer: null }); } render() { const isUndecided = typeof this.props.isTelemetryEnabled !== 'boolean'; const isOff = this.props.isTelemetryEnabled === false; const isOn = this.props.isTelemetryEnabled === true; const settingWasUpdated = this.state.settingWasUpdatedTimer && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.settingWasUpdated); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_modal__WEBPACK_IMPORTED_MODULE_4___default.a, { isOpen: true, className: _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.modalContent, contentLabel: this.props.intl.formatMessage(messages.label), overlayClassName: _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.modalOverlay, onRequestClose: this.handleCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { dir: this.props.isRtl ? 'rtl' : 'ltr' }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.illustration }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.bodyText1)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], _extends({}, messages.bodyText2, { values: { privacyPolicyLink: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("a", { className: _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.privacyPolicyLink, href: "https://scratch.mit.edu/privacy_policy/", onClick: this.props.onShowPrivacyPolicy, target: "_blank", rel: "noopener noreferrer" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.privacyPolicyLink)) } }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.radioButtons }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("label", { className: isOn ? _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.labelSelected : null }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("input", { name: "optInOut", type: "radio", value: "true", title: this.props.intl.formatMessage(messages.optInTooltip), checked: this.props.isTelemetryEnabled === true, onChange: this.handleOptInOutChanged }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.optInText)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("label", { className: isOff ? _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.labelSelected : null }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("input", { name: "optInOut", type: "radio", value: "false", title: this.props.intl.formatMessage(messages.optOutTooltip), checked: this.props.isTelemetryEnabled === false, onChange: this.handleOptInOutChanged }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.optOutText))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.buttonRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.settingWasUpdated, key: this.state.settingWasUpdatedTimer // restart CSS fade when timer changes }, settingWasUpdated), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _telemetry_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.optIn, onClick: this.props.onRequestClose, disabled: isUndecided }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], messages.closeButton)))))); } } TelemetryModal.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isTelemetryEnabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, // false=disabled, true=enabled, undefined=undecided onCancel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onOptIn: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onOptOut: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onShowPrivacyPolicy: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(TelemetryModal)); /***/ }), /***/ "./src/components/turbo-mode/icon--turbo.svg": /*!***************************************************!*\ !*** ./src/components/turbo-mode/icon--turbo.svg ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f2457825850317e66ef2128504613c30.svg"; /***/ }), /***/ "./src/components/turbo-mode/turbo-mode.css": /*!**************************************************!*\ !*** ./src/components/turbo-mode/turbo-mode.css ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./turbo-mode.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/turbo-mode/turbo-mode.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/turbo-mode/turbo-mode.jsx": /*!**************************************************!*\ !*** ./src/components/turbo-mode/turbo-mode.jsx ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _icon_turbo_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icon--turbo.svg */ "./src/components/turbo-mode/icon--turbo.svg"); /* harmony import */ var _icon_turbo_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_icon_turbo_svg__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _turbo_mode_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./turbo-mode.css */ "./src/components/turbo-mode/turbo-mode.css"); /* harmony import */ var _turbo_mode_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_turbo_mode_css__WEBPACK_IMPORTED_MODULE_4__); const TurboMode = _ref => { let { isSmall } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _turbo_mode_css__WEBPACK_IMPORTED_MODULE_4___default.a.turboContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { className: _turbo_mode_css__WEBPACK_IMPORTED_MODULE_4___default.a.turboIcon, src: _icon_turbo_svg__WEBPACK_IMPORTED_MODULE_3___default.a }), !isSmall && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _turbo_mode_css__WEBPACK_IMPORTED_MODULE_4___default.a.turboLabel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Turbo Mode", id: "gui.turboMode.active" }))); }; TurboMode.propTypes = { isSmall: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool }; TurboMode.defaultProps = { isSmall: false }; /* harmony default export */ __webpack_exports__["default"] = (TurboMode); /***/ }), /***/ "./src/components/tw-cloud-variable-badge/cloud-server-button.jsx": /*!************************************************************************!*\ !*** ./src/components/tw-cloud-variable-badge/cloud-server-button.jsx ***! \************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cloud-variable-badge.css */ "./src/components/tw-cloud-variable-badge/cloud-variable-badge.css"); /* harmony import */ var _cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__); class CloudServerButton extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleClick']); } handleClick() { this.props.onClick(this.props.cloudHost); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(_cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_2___default.a.server, { [_cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_2___default.a.selected]: this.props.selected }), onClick: this.handleClick, title: this.props.cloudHost }, this.props.name); } } CloudServerButton.propTypes = { cloudHost: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, selected: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (CloudServerButton); /***/ }), /***/ "./src/components/tw-cloud-variable-badge/cloud-variable-badge.css": /*!*************************************************************************!*\ !*** ./src/components/tw-cloud-variable-badge/cloud-variable-badge.css ***! \*************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./cloud-variable-badge.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-cloud-variable-badge/cloud-variable-badge.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-cloud-variable-badge/cloud-variable-badge.jsx": /*!*************************************************************************!*\ !*** ./src/components/tw-cloud-variable-badge/cloud-variable-badge.jsx ***! \*************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _clouddata_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./clouddata.svg */ "./src/components/tw-cloud-variable-badge/clouddata.svg"); /* harmony import */ var _clouddata_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_clouddata_svg__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _cloud_server_button_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./cloud-server-button.jsx */ "./src/components/tw-cloud-variable-badge/cloud-server-button.jsx"); /* harmony import */ var _cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./cloud-variable-badge.css */ "./src/components/tw-cloud-variable-badge/cloud-variable-badge.css"); /* harmony import */ var _cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _lib_brand__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../lib/brand */ "./src/lib/brand.js"); const hosts = [{ name: 'US East', cloudHost: 'wss://clouddata.turbowarp.org' }, { name: 'EU', cloudHost: 'wss://clouddata-eu.turbowarp.org', provider: { name: '9gr', href: 'https://scratch.mit.edu/users/9gr/' } }]; const CloudVariableBadge = props => { const selectedHost = hosts.find(i => i.cloudHost === props.cloudHost); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_5___default.a.badge }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_5___default.a.title }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { className: _cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_5___default.a.cloudIcon, src: _clouddata_svg__WEBPACK_IMPORTED_MODULE_3___default.a, alt: "", width: 32, height: 32 }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "This project uses cloud variables.", id: "tw.usesCloudVariables" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "{APP_NAME}'s cloud variables are not connected to Scratch's. Anyone can {changeTheirUsername} to anything, so beware of impersonation." // eslint-disable-next-line max-len , id: "tw.usesCloudVariables2", values: { APP_NAME: _lib_brand__WEBPACK_IMPORTED_MODULE_6__["APP_NAME"], changeTheirUsername: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { onClick: props.onOpenChangeUsername }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "change their username" // eslint-disable-next-line max-len , id: "tw.usesCloudVariables2.change" })) } }), selectedHost ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _cloud_variable_badge_css__WEBPACK_IMPORTED_MODULE_5___default.a.servers }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Pick a server near you:", id: "tw.cloudServers" }), hosts.map(i => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_cloud_server_button_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { key: i.ws, name: i.name, cloudHost: i.cloudHost, selected: props.cloudHost === i.cloudHost, onClick: props.onSetCloudHost }))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Using a custom cloud variable server: {server}" // eslint-disable-next-line max-len , id: "tw.customCloudServer", values: { server: props.cloudHost } }), selectedHost && selectedHost.provider && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Server provided by {name}.", id: "tw.cloudProvider", values: { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { href: selectedHost.provider.href, target: "_blank", rel: "noreferrer" }, selectedHost.provider.name) } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { target: "_blank", rel: "noreferrer", href: "https://docs.turbowarp.org/cloud-variables" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Learn more about cloud variables.", id: "tw.moreCloud" }))); }; CloudVariableBadge.propTypes = { cloudHost: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onSetCloudHost: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onOpenChangeUsername: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (CloudVariableBadge); /***/ }), /***/ "./src/components/tw-cloud-variable-badge/clouddata.svg": /*!**************************************************************!*\ !*** ./src/components/tw-cloud-variable-badge/clouddata.svg ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/33b737193edfe1730f38112ad35a84b4.svg"; /***/ }), /***/ "./src/components/tw-custom-extension-modal/custom-extension-modal.css": /*!*****************************************************************************!*\ !*** ./src/components/tw-custom-extension-modal/custom-extension-modal.css ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./custom-extension-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-custom-extension-modal/custom-extension-modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-custom-extension-modal/custom-extension-modal.jsx": /*!*****************************************************************************!*\ !*** ./src/components/tw-custom-extension-modal/custom-extension-modal.jsx ***! \*****************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _file_input_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./file-input.jsx */ "./src/components/tw-custom-extension-modal/file-input.jsx"); /* harmony import */ var _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./custom-extension-modal.css */ "./src/components/tw-custom-extension-modal/custom-extension-modal.css"); /* harmony import */ var _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../tw-fancy-checkbox/checkbox.jsx */ "./src/components/tw-fancy-checkbox/checkbox.jsx"); /* harmony import */ var _lib_brand__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../lib/brand */ "./src/lib/brand.js"); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["defineMessages"])({ title: { "id": "tw.customExtensionModal.title", "defaultMessage": "Load Custom Extension" } }); const CustomExtensionModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { scrollable: true, className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.modalContent, onRequestClose: props.onClose, contentLabel: props.intl.formatMessage(messages.title), id: "customExtensionModal" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.body, onDragOver: props.onDragOver, onDragLeave: props.onDragLeave, onDrop: props.onDrop }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.typeSelectorContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.typeSelectorButton, "data-active": props.type === 'url', onClick: props.onSwitchToURL, tabIndex: 0 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "URL" // eslint-disable-next-line max-len , id: "tw.customExtensionModal.url" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.typeSelectorButton, "data-active": props.type === 'file', onClick: props.onSwitchToFile, tabIndex: 0 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "File" // eslint-disable-next-line max-len , id: "tw.customExtensionModal.file" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.typeSelectorButton, "data-active": props.type === 'text', onClick: props.onSwitchToText, tabIndex: 0 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Text" // eslint-disable-next-line max-len , id: "tw.customExtensionModal.text" }))), props.type === 'url' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, { key: props.type }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Enter the extension's URL:", id: "tw.customExtensionModal.promptURL" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("input", { type: "text", className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.urlInput, value: props.url, onChange: props.onChangeURL, onKeyDown: props.onKeyDown, placeholder: "https://extensions.turbowarp.org/...", autoFocus: true })) : props.type === 'file' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, { key: props.type }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Select the extension's JavaScript file:", id: "tw.customExtensionModal.promptFile" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_file_input_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { accept: ".js", onChange: props.onChangeFile, file: props.file })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, { key: props.type }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Paste the extension's JavaScript source code:", id: "tw.customExtensionModal.promptText" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("textarea", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.textCodeInput, placeholder: 'class Extension {\n // ...\n}\nScratch.extensions.register(new Extension());', value: props.text, onChange: props.onChangeText, autoFocus: true, spellCheck: false })), props.onChangeUnsandboxed ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("label", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.unsandboxedContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.unsandboxedCheckbox, checked: true, onChange: props.onChangeUnsandboxed }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Run extension without sandbox", id: "tw.customExtensionModal.unsandboxed" })), props.unsandboxed && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.unsandboxedWarning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Loading extensions without the sandbox is dangerous and should not be enabled if you don't know what you're doing.", id: "tw.customExtensionModal.unsandboxedWarning1" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Unsandboxed extensions can corrupt your project, delete your settings, phish for passwords, and other bad things. The {APP_NAME} developers are not responsible for any resulting issues.", id: "pm.customExtensionModal.unsandboxedWarning2", values: { APP_NAME: _lib_brand__WEBPACK_IMPORTED_MODULE_8__["APP_NAME"] } }))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, props.unsandboxed ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.trustedExtension }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "This extension will be loaded without the sandbox because it is from a trusted source.", id: "tw.customExtensionModal.trusted" })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Extensions from untrusted URLs will always be loaded with the sandbox for security.", id: "tw.customExtensionModal.untrusted" }))), props.type === 'url' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Your browser may not allow PenguinMod to access certain sites. If this is causing issues for you, try loading from a file or text instead.", id: "pm.customExtensionModal.corsProblem" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("label", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.checkboxContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.basicCheckbox, checked: false, onChange: props.onChangeAddToLibrary }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Add extension to extensions list", id: "pm.customExtensionModal.addToLibrary" })), props.addToLibrary && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Name the extension", id: "pm.customExtensionModal.libraryName" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("input", { type: "text", className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.urlInput, value: props.libraryItemName, onChange: function onChange() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return props.onChangeLibraryItem("name", ...args); }, placeholder: "My cool extension", autoFocus: true }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Describe the extension", id: "pm.customExtensionModal.libraryDescription" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("input", { type: "text", className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.urlInput, value: props.libraryItemDescription, onChange: function onChange() { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return props.onChangeLibraryItem("description", ...args); }, placeholder: "Makes your project cooler!" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Upload an Extension Banner", id: "pm.customExtensionModal.libraryImage" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_file_input_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { accept: ".png,.jpg,.jpeg,.gif,.svg", onChange: function onChange() { for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { args[_key3] = arguments[_key3]; } return props.onChangeLibraryItem("rawURL", ...args); }, file: props.libraryItemFile }), props.libraryItemFile && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { alt: "Extension Image", src: props.libraryItemImage, className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.libraryItemImage }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("i", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "This extension will only appear on your menu.", id: "pm.customExtensionModal.libraryOnlyYours1" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("br", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Other people will not see this extension when they open the menu.", id: "pm.customExtensionModal.libraryOnlyYours2" })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.buttonRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _custom_extension_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.loadButton, onClick: props.onLoadExtension, disabled: !props.canLoadExtension }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Load", id: "tw.customExtensionModal.load" }))))); CustomExtensionModal.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_0__["intlShape"], canLoadExtension: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['url', 'file', 'text']).isRequired, onSwitchToFile: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onSwitchToURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onSwitchToText: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, file: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(File), onChangeFile: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onDragOver: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onDragLeave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onDrop: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, onChangeURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, text: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, onChangeText: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, unsandboxed: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, addToLibrary: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, onChangeUnsandboxed: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeAddToLibrary: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeLibraryItem: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onLoadExtension: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(CustomExtensionModal)); /***/ }), /***/ "./src/components/tw-custom-extension-modal/file-input.css": /*!*****************************************************************!*\ !*** ./src/components/tw-custom-extension-modal/file-input.css ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./file-input.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-custom-extension-modal/file-input.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-custom-extension-modal/file-input.jsx": /*!*****************************************************************!*\ !*** ./src/components/tw-custom-extension-modal/file-input.jsx ***! \*****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _file_input_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./file-input.css */ "./src/components/tw-custom-extension-modal/file-input.css"); /* harmony import */ var _file_input_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_file_input_css__WEBPACK_IMPORTED_MODULE_4__); class FileInput extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleChange', 'handleClick']); this.state = { file: props.file }; } handleChange(e) { const file = e.target.files[0]; this.props.onChange(file); } handleClick() { const input = document.createElement('input'); input.type = 'file'; input.accept = this.props.accept; input.addEventListener('change', this.handleChange); document.body.appendChild(input); input.click(); input.remove(); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: _file_input_css__WEBPACK_IMPORTED_MODULE_4___default.a.container, onClick: this.handleClick }, this.props.file ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Selected: {name}" // eslint-disable-next-line max-len , id: "tw.fileInput.selected", values: { name: this.props.file.name } }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "No file selected.", id: "tw.fileInput.none" })); } } FileInput.propTypes = { file: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(File), accept: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (FileInput); /***/ }), /***/ "./src/components/tw-description/description.css": /*!*******************************************************!*\ !*** ./src/components/tw-description/description.css ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./description.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-description/description.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-description/description.jsx": /*!*******************************************************!*\ !*** ./src/components/tw-description/description.jsx ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _description_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./description.css */ "./src/components/tw-description/description.css"); /* harmony import */ var _description_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_description_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var PenguinMod_MarkDown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! PenguinMod-MarkDown */ "./node_modules/PenguinMod-MarkDown/src/index.js"); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; const days = ['mon', 'tue', 'wed', 'thr', 'fri', 'sat', 'sun']; const numberSuffixes = ['st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th', 'th']; const addNumberSuffix = num => { if (!num) return "".concat(num); if (num < 20 && num > 10) return "".concat(num, "th"); return num + numberSuffixes[(num - 1) % 10]; }; const defaultCustoms = { 'clock': '$hour:$minute', '12clock': '$hour12:$minute', 'date': '$day/$month/$year', 'longDate': '$day $monthName $year', 'dateClock': '$day/$month/$year $hour:$minute', 'longDateClock': '$day $monthName $year $hour:$minute' }; class Renderer { constructor(options) { this.options = options || {}; } code(code) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("pre", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("code", null, code)); } blockquote(quote) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("blockquote", null, quote); } html(html) { return html; } heading(text, level) { switch (level) { case 1: return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", null, text); case 2: return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", null, text); case 3: return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", null, text); case 4: return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h4", null, text); case 5: return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h5", null, text); case 6: return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h6", null, text); } } hr() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("hr", null); } list(body, ordered, taskList) { const css = taskList ? _description_css__WEBPACK_IMPORTED_MODULE_3___default.a.taskList : null; return ordered ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("ol", { className: css }, body) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("ul", { className: css }, body); } listitem(text, checked) { if (typeof checked === 'undefined') { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("li", null, text); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("li", { className: _description_css__WEBPACK_IMPORTED_MODULE_3___default.a.taskListItem }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { type: "checkbox", className: _description_css__WEBPACK_IMPORTED_MODULE_3___default.a.taskListItemCheckbox, checked: checked }), text); } paragraph(text) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, text); } table(header, body) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("table", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("thead", null, header), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tbody", null, body)); } tablerow(content) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("tr", null, content); } tablecell(content, flags) { const alignment = flags.align ? "text-align:".concat(flags.align) : null; return flags.header ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("th", { style: alignment }, content) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("td", { style: alignment }, content); } // span level renderer strong(text) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", null, text); } em(text) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("em", null, text); } codespan(text) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("code", null, text); } br() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("br", null); } del(text) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("del", null, text); } link(href, title, text) { if (this.options.sanitize) { let prot; try { prot = decodeURIComponent(unescape(href)).replace(/[^\w:]/g, '').toLowerCase(); } catch (err) { return ''; } if ( // eslint-disable-next-line no-script-url prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { // eslint-disable-line no-script-url return ''; } } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { href: href, title: title, target: "_blank", rel: "noreferrer" }, text); } image(href, title, text) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { src: href, alt: text, title: title }); } text(text) { return text; } project(id) { if (/^\d{6,}$/.test(id)) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { href: "https://studio.penguinmod.com/#".concat(id) }, "#".concat(id)); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { href: "https://penguinmod.com/search?q=%23".concat(id), target: "_blank", rel: "noreferrer" }, "#".concat(id)); } mention(name) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { href: "https://penguinmod.com/profile?user=".concat(name), target: "_blank", rel: "noreferrer" }, "@".concat(name)); } emoji(name) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { src: "https://library.penguinmod.com/files/emojis/".concat(name, ".png"), alt: ":".concat(name, ":"), title: ":".concat(name, ":"), loading: "lazy", className: _description_css__WEBPACK_IMPORTED_MODULE_3___default.a.emoji }); } timestamp(time, locale, custom) { var _defaultCustoms$custo; time = new Date(time); if (!custom) return time.toLocaleString(); const timeParts = { year: time.getFullYear(), month: time.getMonth(), date: time.getDate(), day: days[time.getDay()], hour: time.getHours(), minute: time.getMinutes(), second: time.getSeconds(), millisecond: time.getMilliseconds() }; const currentDate = new Date(); const year = currentDate.getFullYear(); const month = currentDate.getMonth(); const date = currentDate.getDate(); const hour = currentDate.getHours(); const minute = currentDate.getMinutes(); const second = currentDate.getSeconds(); const millisecond = currentDate.getMilliseconds(); const timeVars = _objectSpread(_objectSpread({}, timeParts), {}, { monthName: monthNames[timeParts.month], shortMonthName: monthNames[timeParts.month].slice(0, 3), month: timeParts.month + 1, hour: timeParts.hour >= 10 ? timeParts.hour : "0".concat(timeParts.hour), ampm: timeParts.hour >= 11 ? 'pm' : 'am', hour12: (12 + (timeParts.hour - 1)) % 12 + 1, dateSuffixed: addNumberSuffix(timeParts.date), hoursTo: timeParts.hour - hour, minutesTo: timeParts.minute - minute, secondsTo: timeParts.second - second, millisecondsTo: timeParts.millisecond - millisecond, daysTo: timeParts.date - date, monthTo: timeParts.month - month, yearsTo: timeParts.year - year, hoursSince: hour - hour, minutesSince: minute - timeParts.minute, secondsSince: second - timeParts.second, millisecondsSince: millisecond - timeParts.millisecond, daysSince: date - timeParts.date, monthsSince: month - timeParts.month, yearsSince: year - timeParts.year }); custom = (_defaultCustoms$custo = defaultCustoms[custom]) !== null && _defaultCustoms$custo !== void 0 ? _defaultCustoms$custo : custom; for (const [_, variable] of custom.matchAll(/\$(\w+)/g)) { const val = timeVars[variable]; console.log(variable, val); custom = custom.replace(/\$\w+/, val); } return custom; } } const decorate = text => Object(PenguinMod_MarkDown__WEBPACK_IMPORTED_MODULE_4__["render"])(text, { renderer: new Renderer() }); const Description = _ref => { let { instructions, credits } = _ref; return instructions !== 'unshared' && credits !== 'unshared' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _description_css__WEBPACK_IMPORTED_MODULE_3___default.a.description }, instructions ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", { className: _description_css__WEBPACK_IMPORTED_MODULE_3___default.a.header }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Instructions", id: "tw.home.instructions" })), decorate(instructions)) : null, instructions && credits ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _description_css__WEBPACK_IMPORTED_MODULE_3___default.a.divider }) : null, credits && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", { className: _description_css__WEBPACK_IMPORTED_MODULE_3___default.a.header }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Notes and Credits", id: "tw.home.credit" })), decorate(credits))); }; Description.propTypes = { instructions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, credits: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (Description); /***/ }), /***/ "./src/components/tw-documentation-link/documentation-link.jsx": /*!*********************************************************************!*\ !*** ./src/components/tw-documentation-link/documentation-link.jsx ***! \*********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); const DocumentationLink = _ref => { let { slug, children } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { href: "https://docs.turbowarp.org/".concat(slug), target: "_blank", rel: "noopener noreferrer" }, children); }; DocumentationLink.propTypes = { slug: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node }; /* harmony default export */ __webpack_exports__["default"] = (DocumentationLink); /***/ }), /***/ "./src/components/tw-extension-separator/separator.css": /*!*************************************************************!*\ !*** ./src/components/tw-extension-separator/separator.css ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./separator.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-extension-separator/separator.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-extension-separator/separator.jsx": /*!*************************************************************!*\ !*** ./src/components/tw-extension-separator/separator.jsx ***! \*************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _separator_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./separator.css */ "./src/components/tw-extension-separator/separator.css"); /* harmony import */ var _separator_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_separator_css__WEBPACK_IMPORTED_MODULE_1__); const Separator = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("hr", { className: _separator_css__WEBPACK_IMPORTED_MODULE_1___default.a.separator }); /* harmony default export */ __webpack_exports__["default"] = (Separator); /***/ }), /***/ "./src/components/tw-fancy-checkbox/checkbox.css": /*!*******************************************************!*\ !*** ./src/components/tw-fancy-checkbox/checkbox.css ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./checkbox.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-fancy-checkbox/checkbox.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-fancy-checkbox/checkbox.jsx": /*!*******************************************************!*\ !*** ./src/components/tw-fancy-checkbox/checkbox.jsx ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _checkbox_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./checkbox.css */ "./src/components/tw-fancy-checkbox/checkbox.css"); /* harmony import */ var _checkbox_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_checkbox_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const FancyCheckbox = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", _extends({}, props, { type: "checkbox", className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(props.className, _checkbox_css__WEBPACK_IMPORTED_MODULE_2___default.a.checkbox) })); FancyCheckbox.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (FancyCheckbox); /***/ }), /***/ "./src/components/tw-fancy-checkbox/checkbox.svg": /*!*******************************************************!*\ !*** ./src/components/tw-fancy-checkbox/checkbox.svg ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/620f707d6d9dcd512ec6604b0eda2cb3.svg"; /***/ }), /***/ "./src/components/tw-featured-projects/featured-projects.css": /*!*******************************************************************!*\ !*** ./src/components/tw-featured-projects/featured-projects.css ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./featured-projects.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-featured-projects/featured-projects.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-featured-projects/featured-projects.jsx": /*!*******************************************************************!*\ !*** ./src/components/tw-featured-projects/featured-projects.jsx ***! \*******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _tw_studioview_studioview_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../tw-studioview/studioview.jsx */ "./src/components/tw-studioview/studioview.jsx"); /* harmony import */ var _featured_projects_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./featured-projects.css */ "./src/components/tw-featured-projects/featured-projects.css"); /* harmony import */ var _featured_projects_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_featured_projects_css__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _lib_tw_navigation_utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../lib/tw-navigation-utils.js */ "./src/lib/tw-navigation-utils.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_8__); class FeaturedProjects extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleSelect', 'handleOpenProjects']); this.state = { opened: false, transition: true }; } componentDidUpdate(prevProps) { if (this.props.projectId === '0' && prevProps.projectId === null) { // eslint-disable-next-line react/no-did-update-set-state this.setState({ opened: true, transition: false }); } } handleSelect(id) { this.props.setProjectId(id); } handleOpenProjects() { this.setState({ opened: true }); } render() { const opened = this.state.opened; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _featured_projects_css__WEBPACK_IMPORTED_MODULE_6___default.a.container }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_8___default()(_featured_projects_css__WEBPACK_IMPORTED_MODULE_6___default.a.projects, { [_featured_projects_css__WEBPACK_IMPORTED_MODULE_6___default.a.opened]: opened, [_featured_projects_css__WEBPACK_IMPORTED_MODULE_6___default.a.transition]: this.state.transition }) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_tw_studioview_studioview_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { id: this.props.studio, onSelect: this.handleSelect, placeholder: !opened }), opened ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _featured_projects_css__WEBPACK_IMPORTED_MODULE_6___default.a.openerContainer, onClick: this.handleOpenProjects }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _featured_projects_css__WEBPACK_IMPORTED_MODULE_6___default.a.openerContent }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Click to view uploaded projects.", id: "tw.viewFeaturedProjects" }))))); } } FeaturedProjects.propTypes = { setProjectId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, projectId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, studio: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; const mapStateToProps = state => ({ projectId: state.scratchGui.projectState.projectId }); const mapDispatchToProps = dispatch => ({ setProjectId: projectId => Object(_lib_tw_navigation_utils_js__WEBPACK_IMPORTED_MODULE_7__["setProjectId"])(dispatch, projectId) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps, mapDispatchToProps)(FeaturedProjects)); /***/ }), /***/ "./src/components/tw-fonts-modal/add-button.jsx": /*!******************************************************!*\ !*** ./src/components/tw-fonts-modal/add-button.jsx ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fonts-modal.css */ "./src/components/tw-fonts-modal/fonts-modal.css"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_3__); const AddButton = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { onClick: props.onClick, disabled: props.disabled, className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3___default.a.button }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Add", id: "tw.fonts.add" })); AddButton.propTypes = { onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; /* harmony default export */ __webpack_exports__["default"] = (AddButton); /***/ }), /***/ "./src/components/tw-fonts-modal/add-custom-font.jsx": /*!***********************************************************!*\ !*** ./src/components/tw-fonts-modal/add-custom-font.jsx ***! \***********************************************************/ /*! exports provided: FONT_FORMATS, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FONT_FORMATS", function() { return FONT_FORMATS; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fonts-modal.css */ "./src/components/tw-fonts-modal/fonts-modal.css"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _load_temporary_font_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./load-temporary-font.jsx */ "./src/components/tw-fonts-modal/load-temporary-font.jsx"); /* harmony import */ var _font_name_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./font-name.jsx */ "./src/components/tw-fonts-modal/font-name.jsx"); /* harmony import */ var _font_playground_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./font-playground.jsx */ "./src/components/tw-fonts-modal/font-playground.jsx"); /* harmony import */ var _font_fallback_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./font-fallback.jsx */ "./src/components/tw-fonts-modal/font-fallback.jsx"); /* harmony import */ var _add_button_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./add-button.jsx */ "./src/components/tw-fonts-modal/add-button.jsx"); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["defineMessages"])({ error: { "id": "tw.fonts.readError", "defaultMessage": "Failed to read font file: {error}" } }); const FONT_FORMATS = ['ttf', 'otf', 'woff', 'woff2']; const formatFontName = filename => { // Remove file extension const idx = filename.indexOf('.'); if (idx !== -1) { filename = filename.substring(0, idx); } return filename; }; const getDataFormat = filename => { const parts = filename.split('.'); const extension = parts[parts.length - 1]; if (FONT_FORMATS.includes(extension)) { return extension; } // We'll just guess return 'ttf'; }; class AddCustomFont extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleChangeFile', 'handleChangeName', 'handleChangeFallback', 'handleFinish']); this.state = { file: null, url: null, name: '', format: '', fallback: _font_fallback_jsx__WEBPACK_IMPORTED_MODULE_8__["default"].DEFAULT, loading: false }; } componentWillUnmount() { URL.revokeObjectURL(this.state.url); } handleChangeFile(e) { const file = e.target.files[0] || null; if (file) { this.setState({ file, name: formatFontName(file.name), format: getDataFormat(file.name), url: URL.createObjectURL(file) }); } else { URL.revokeObjectURL(this.state.url); this.setState({ file, name: null, url: null }); } } handleChangeName(name) { this.setState({ name }); } handleChangeFallback(fallback) { this.setState({ fallback }); } handleFinish() { this.setState({ loading: true }); const fr = new FileReader(); fr.onload = () => { const data = new Uint8Array(fr.result); const storage = this.props.fontManager.runtime.storage; const asset = storage.createAsset(storage.AssetType.Font, this.state.format, data, null, true); this.props.fontManager.addCustomFont(this.state.name, this.state.fallback, asset); this.props.onClose(); }; fr.onerror = () => { // eslint-disable-next-line no-alert alert(this.props.intl.formatMessage(messages.error), { error: fr.error }); this.setState({ loading: false }); }; fr.readAsArrayBuffer(this.state.file); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Select a font file from your computer:", id: "tw.fonts.custom.file" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { type: "file", onChange: this.handleChangeFile, className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.fileInput, accept: FONT_FORMATS.map(ext => ".".concat(ext)).join(','), readOnly: this.state.loading }), this.state.file && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Give the font a name:", id: "tw.fonts.custom.name" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_font_name_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { name: this.state.name, onChange: this.handleChangeName, fontManager: this.props.fontManager }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_load_temporary_font_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { url: this.state.url }, family => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_font_playground_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { family: "".concat(family, ", ").concat(this.state.fallback) })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_font_fallback_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { fallback: this.state.fallback, onChange: this.handleChangeFallback })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_add_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { onClick: this.handleFinish, disabled: !this.state.file || !this.state.name || this.state.loading })); } } AddCustomFont.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_2__["intlShape"], fontManager: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ addCustomFont: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, runtime: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ // eslint-disable-next-line react/forbid-prop-types storage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any }) }), onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(AddCustomFont)); /***/ }), /***/ "./src/components/tw-fonts-modal/add-system-font.jsx": /*!***********************************************************!*\ !*** ./src/components/tw-fonts-modal/add-system-font.jsx ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _font_name_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./font-name.jsx */ "./src/components/tw-fonts-modal/font-name.jsx"); /* harmony import */ var _font_playground_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./font-playground.jsx */ "./src/components/tw-fonts-modal/font-playground.jsx"); /* harmony import */ var _font_fallback_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./font-fallback.jsx */ "./src/components/tw-fonts-modal/font-fallback.jsx"); /* harmony import */ var _add_button_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./add-button.jsx */ "./src/components/tw-fonts-modal/add-button.jsx"); class AddSystemFont extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleChangeName', 'handleChangeFallback', 'handleFinish']); this.state = { name: '', fallback: _font_fallback_jsx__WEBPACK_IMPORTED_MODULE_6__["default"].DEFAULT, localFonts: null }; } componentDidMount() { // Chrome-only API if (typeof queryLocalFonts === 'function') { // eslint-disable-next-line no-undef queryLocalFonts().then(fonts => { const uniqueFamilies = [...new Set(fonts.map(i => i.family))]; this.setState({ localFonts: uniqueFamilies }); }); } } handleChangeName(name) { this.setState({ name }); } handleChangeFallback(fallback) { this.setState({ fallback }); } handleFinish() { this.props.fontManager.addSystemFont(this.state.name, this.state.fallback); this.props.onClose(); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Type in the name of any font built in to your computer. The font may not appear correctly for everyone.", id: "tw.fonts.system.name" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_font_name_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { name: this.state.name, onChange: this.handleChangeName, fontManager: this.props.fontManager, placeholder: "Wingdings", options: this.state.localFonts }), this.state.name && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_font_playground_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { family: "".concat(this.state.name, ", ").concat(this.state.fallback) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_font_fallback_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { fallback: this.state.fallback, onChange: this.handleChangeFallback })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_add_button_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { onClick: this.handleFinish, disabled: !this.state.name })); } } AddSystemFont.propTypes = { fontManager: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ addSystemFont: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, hasFont: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }).isRequired, onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (AddSystemFont); /***/ }), /***/ "./src/components/tw-fonts-modal/custom.svg": /*!**************************************************!*\ !*** ./src/components/tw-fonts-modal/custom.svg ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f0fc12e672912247cc20d34ea452b517.svg"; /***/ }), /***/ "./src/components/tw-fonts-modal/delete.svg": /*!**************************************************!*\ !*** ./src/components/tw-fonts-modal/delete.svg ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/d71c0379472f709318ef81ff0dccf7d5.svg"; /***/ }), /***/ "./src/components/tw-fonts-modal/export.svg": /*!**************************************************!*\ !*** ./src/components/tw-fonts-modal/export.svg ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/01011831acb632804df035321ff68afe.svg"; /***/ }), /***/ "./src/components/tw-fonts-modal/font-dropdown-item.jsx": /*!**************************************************************!*\ !*** ./src/components/tw-fonts-modal/font-dropdown-item.jsx ***! \**************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fonts-modal.css */ "./src/components/tw-fonts-modal/fonts-modal.css"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_3__); class FontDropdownItem extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleSelect']); } handleSelect() { this.props.onSelect(this.props.family); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3___default.a.fontDropdownItem, title: this.props.family, style: { fontFamily: this.props.family }, onMouseDown: this.handleSelect }, this.props.family); } } FontDropdownItem.propTypes = { family: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (FontDropdownItem); /***/ }), /***/ "./src/components/tw-fonts-modal/font-fallback.jsx": /*!*********************************************************!*\ !*** ./src/components/tw-fonts-modal/font-fallback.jsx ***! \*********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fonts-modal.css */ "./src/components/tw-fonts-modal/fonts-modal.css"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var scratch_paint_src_lib_fonts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-paint/src/lib/fonts */ "./node_modules/scratch-paint/src/lib/fonts.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__); class FontFallbackButton extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default()(this, ['handleClick']); } handleClick() { this.props.onClick(this.props.family); } formatName() { // keep in sync with scratch-paint/src/containers/font-dropdown.jsx switch (this.props.family) { case scratch_paint_src_lib_fonts__WEBPACK_IMPORTED_MODULE_4__["default"].CHINESE: return '中文'; case scratch_paint_src_lib_fonts__WEBPACK_IMPORTED_MODULE_4__["default"].KOREAN: return '한국어'; case scratch_paint_src_lib_fonts__WEBPACK_IMPORTED_MODULE_4__["default"].JAPANESE: return '日本語'; } return this.props.family; } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_3___default.a.fallbackButton, { [_fonts_modal_css__WEBPACK_IMPORTED_MODULE_3___default.a.fallbackButtonSelected]: this.props.selected }), onClick: this.handleClick, style: { fontFamily: this.props.family } }, this.formatName()); } } FontFallbackButton.propTypes = { family: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, selected: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired }; const FontFallback = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3___default.a.fallbackContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3___default.a.fallbackLabel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Choose a fallback font to use if the font fails to load or is deleted:", id: "tw.fonts.fallback" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_3___default.a.fallbackList }, Object.values(scratch_paint_src_lib_fonts__WEBPACK_IMPORTED_MODULE_4__["default"]).map(family => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FontFallbackButton, { key: family, family: family, onClick: props.onChange, selected: props.fallback === family })))); FontFallback.DEFAULT = 'Sans Serif'; FontFallback.propTypes = { fallback: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (FontFallback); /***/ }), /***/ "./src/components/tw-fonts-modal/font-name.jsx": /*!*****************************************************!*\ !*** ./src/components/tw-fonts-modal/font-name.jsx ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fonts-modal.css */ "./src/components/tw-fonts-modal/fonts-modal.css"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _font_dropdown_item_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./font-dropdown-item.jsx */ "./src/components/tw-fonts-modal/font-dropdown-item.jsx"); const _excluded = ["name", "onChange", "fontManager", "options"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class FontName extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['setInputRef', 'handleChange', 'handleFocus', 'handleBlur', 'handleResize', 'handleSelectFont', 'handleKeyDown']); this.state = { focused: false, rect: null }; } componentDidMount() { window.addEventListener('resize', this.handleResize); } componentWillUnmount() { window.removeEventListener('resize', this.handleResize); } setInputRef(input) { this.input = input; // can't use autoFocus because handleFocus relies on the ref existing already if (input) { input.focus(); } } handleChange(e) { this.props.onChange(e.target.value); } handleFocus() { this.setState({ focused: true, rect: this.input.getBoundingClientRect() }); } handleBlur() { this.props.onChange(this.props.fontManager.getSafeName(this.props.name)); this.setState({ focused: false }); } handleResize() { if (this.state.focused) { this.setState({ rect: this.input.getBoundingClientRect() }); } } handleSelectFont(font) { this.props.onChange(font); } handleKeyDown(e) { if (e.key === 'Enter') { this.handleBlur(); e.target.blur(); } } getFilteredOptions() { if (!this.state.focused || !this.props.options) { return []; } const name = this.props.name.toLowerCase(); const candidates = this.props.options.filter(family => family.toLowerCase().includes(name)); if (candidates.length === 0 && candidates[0] === this.props.name) { return []; } return candidates; } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ name, onChange, fontManager, options /* eslint-enable no-unused-vars */ } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); const filteredOptions = this.getFilteredOptions(); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.fontInputOuter }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", _extends({}, props, { type: "text", className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.fontInput, value: this.props.name, ref: this.setInputRef, onChange: this.handleChange, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyDown: this.handleKeyDown })), filteredOptions.length > 0 && /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.createPortal(/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.fontDropdownOuter, style: { left: "".concat(this.state.rect.left - 4, "px"), top: "".concat(this.state.rect.top + this.state.rect.height + 4, "px"), width: "".concat(this.state.rect.width + 8, "px") } }, this.getFilteredOptions().map(family => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_font_dropdown_item_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { key: family, family: family, onSelect: this.handleSelectFont }))), document.body)); } } FontName.propTypes = { name: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired, onChange: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, fontManager: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({ getSafeName: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired }).isRequired, options: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired) }; /* harmony default export */ __webpack_exports__["default"] = (FontName); /***/ }), /***/ "./src/components/tw-fonts-modal/font-playground.jsx": /*!***********************************************************!*\ !*** ./src/components/tw-fonts-modal/font-playground.jsx ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fonts-modal.css */ "./src/components/tw-fonts-modal/fonts-modal.css"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__); // TODO: is this something to localize? const QUICK_BROWN_FOX = 'The quick brown fox jumps over the lazy dog.'; class FontPlayground extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleChange']); this.state = { value: QUICK_BROWN_FOX }; } handleChange(e) { this.setState({ value: e.target.value }); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("textarea", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_2___default.a.fontPlayground, value: this.state.value, onChange: this.handleChange, placeholder: QUICK_BROWN_FOX, style: { fontFamily: this.props.family } }); } } FontPlayground.propTypes = { family: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (FontPlayground); /***/ }), /***/ "./src/components/tw-fonts-modal/fonts-modal.css": /*!*******************************************************!*\ !*** ./src/components/tw-fonts-modal/fonts-modal.css ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./fonts-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-fonts-modal/fonts-modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-fonts-modal/fonts-modal.jsx": /*!*******************************************************!*\ !*** ./src/components/tw-fonts-modal/fonts-modal.jsx ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _manage_font_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./manage-font.jsx */ "./src/components/tw-fonts-modal/manage-font.jsx"); /* harmony import */ var _add_system_font_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./add-system-font.jsx */ "./src/components/tw-fonts-modal/add-system-font.jsx"); /* harmony import */ var _add_custom_font_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./add-custom-font.jsx */ "./src/components/tw-fonts-modal/add-custom-font.jsx"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./fonts-modal.css */ "./src/components/tw-fonts-modal/fonts-modal.css"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_8__); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["defineMessages"])({ title: { "id": "tw.fonts.title", "defaultMessage": "Fonts" } }); const FontModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.modalContent, onRequestClose: props.onClose, contentLabel: props.intl.formatMessage(messages.title), id: "fontModal" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.body }, props.screen === '' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButtons }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButton, onClick: props.onOpenSystemFonts }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButtonImage, _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.systemImage) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButtonText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButtonTextMain }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Add a system font", id: "tw.fonts.system1" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButtonTextSub }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Doesn't require downloading a font, but will not appear correctly for everyone.", id: "pm.fonts.system2" })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButton, onClick: props.onOpenCustomFonts }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("img", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButtonImage, _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.customImage) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButtonText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButtonTextMain }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Add font from a file", id: "tw.fonts.custom1" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.openButtonTextSub }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Supported formats: {formats}." // eslint-disable-next-line max-len , id: "pm.fonts.custom2", values: { formats: Object.values(_add_custom_font_jsx__WEBPACK_IMPORTED_MODULE_7__["FONT_FORMATS"]).map(i => ".".concat(i)).join(', ') } }))))) : props.screen === 'system' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_add_system_font_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { fontManager: props.fontManager, onClose: props.onClose }) : props.screen === 'custom' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_add_custom_font_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { fontManager: props.fontManager, onClose: props.onClose }) : // Should never happen null, props.screen === '' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.fontsOuter }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, props.fonts.length ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Installed fonts:", id: "tw.fonts.list" }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "No fonts added yet.", id: "tw.fonts.none" })), props.fonts.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_8___default.a.fonts }, props.fonts.map((font, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_manage_font_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { key: index, system: font.system, name: font.name, family: font.family, data: font.data, format: font.format, index: index, fontManager: props.fontManager })))))); FontModal.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_0__["intlShape"], onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, fonts: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ system: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, family: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, data: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(Uint8Array), format: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }).isRequired).isRequired, fontManager: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({}), screen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['', 'system', 'custom']), onOpenSystemFonts: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, // onOpenLibraryFonts: PropTypes.func.isRequired, onOpenCustomFonts: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(FontModal)); /***/ }), /***/ "./src/components/tw-fonts-modal/load-temporary-font.jsx": /*!***************************************************************!*\ !*** ./src/components/tw-fonts-modal/load-temporary-font.jsx ***! \***************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); let fontId = 0; class LoadFont extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); this.id = ++fontId; } componentDidMount() { this.style = document.createElement('style'); this.style.className = 'gui-temp-font'; document.head.appendChild(this.style); this.updateStyle(); } componentDidUpdate(prevProps) { if (this.props.url !== prevProps.url) { this.updateStyle(); } } componentWillUnmount() { this.style.remove(); } updateStyle() { this.style.textContent = "@font-face { font-family: \"".concat(this.getFamily(), "\"; src: url(\"").concat(this.props.url, "\"); }"); } getFamily() { return "GUITempFont".concat(this.id); } render() { return this.props.children(this.getFamily()); } } LoadFont.propTypes = { url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (LoadFont); /***/ }), /***/ "./src/components/tw-fonts-modal/manage-font.jsx": /*!*******************************************************!*\ !*** ./src/components/tw-fonts-modal/manage-font.jsx ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_tw_bytes_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../lib/tw-bytes-utils */ "./src/lib/tw-bytes-utils.js"); /* harmony import */ var _lib_download_blob__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../lib/download-blob */ "./src/lib/download-blob.js"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./fonts-modal.css */ "./src/components/tw-fonts-modal/fonts-modal.css"); /* harmony import */ var _fonts_modal_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_fonts_modal_css__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _delete_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./delete.svg */ "./src/components/tw-fonts-modal/delete.svg"); /* harmony import */ var _delete_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_delete_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _export_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./export.svg */ "./src/components/tw-fonts-modal/export.svg"); /* harmony import */ var _export_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_export_svg__WEBPACK_IMPORTED_MODULE_8__); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["defineMessages"])({ delete: { "id": "tw.fonts.delete", "defaultMessage": "Are you sure you want to delete \"{font}\"? Any vector costumes will use the fallback font instead." } }); class ManageFont extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleExport', 'handleDelete']); } handleExport() { const blob = new Blob([this.props.data], { contentType: "font/".concat(this.props.format) }); Object(_lib_download_blob__WEBPACK_IMPORTED_MODULE_5__["default"])("".concat(this.props.name, ".").concat(this.props.format), blob); } handleDelete() { // eslint-disable-next-line no-alert const allowed = confirm(this.props.intl.formatMessage(messages.delete, { font: this.props.name })); if (allowed) { this.props.fontManager.deleteFont(this.props.index); } } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.manageFont }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.manageFontName, title: this.props.family, style: { fontFamily: this.props.family } }, this.props.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.manageFontDetails }, this.props.system ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "System font", id: "tw.fonts.system" }) : Object(_lib_tw_bytes_utils__WEBPACK_IMPORTED_MODULE_4__["formatBytes"])(this.props.data.byteLength))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.manageFontButtons }, !this.props.system && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.manageFontButton, onClick: this.handleExport }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { src: _export_svg__WEBPACK_IMPORTED_MODULE_8___default.a, alt: "Export", draggable: false })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: _fonts_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.manageFontButton, onClick: this.handleDelete }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { src: _delete_svg__WEBPACK_IMPORTED_MODULE_7___default.a, alt: "Delete", draggable: false })))); } } ManageFont.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_2__["intlShape"], system: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, family: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, data: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(Uint8Array), format: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, index: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, fontManager: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ deleteFont: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(ManageFont)); /***/ }), /***/ "./src/components/tw-fonts-modal/system.svg": /*!**************************************************!*\ !*** ./src/components/tw-fonts-modal/system.svg ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/89c89d8cb19c183635c7e00f2ff5a63c.svg"; /***/ }), /***/ "./src/components/tw-framerate-indicator/framerate-indicator.css": /*!***********************************************************************!*\ !*** ./src/components/tw-framerate-indicator/framerate-indicator.css ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./framerate-indicator.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-framerate-indicator/framerate-indicator.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-framerate-indicator/framerate-indicator.jsx": /*!***********************************************************************!*\ !*** ./src/components/tw-framerate-indicator/framerate-indicator.jsx ***! \***********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _framerate_indicator_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./framerate-indicator.css */ "./src/components/tw-framerate-indicator/framerate-indicator.css"); /* harmony import */ var _framerate_indicator_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_framerate_indicator_css__WEBPACK_IMPORTED_MODULE_3__); const FramerateIndicator = _ref => { let { framerate, interpolation } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, framerate !== 30 && framerate !== 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _framerate_indicator_css__WEBPACK_IMPORTED_MODULE_3___default.a.framerateContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _framerate_indicator_css__WEBPACK_IMPORTED_MODULE_3___default.a.framerateLabel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "{framerate} FPS", id: "tw.fps", values: { framerate: framerate } }))), interpolation && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _framerate_indicator_css__WEBPACK_IMPORTED_MODULE_3___default.a.framerateContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _framerate_indicator_css__WEBPACK_IMPORTED_MODULE_3___default.a.framerateLabel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Interpolation", id: "tw.interpolationEnabled" })))); }; FramerateIndicator.propTypes = { framerate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, interpolation: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; /* harmony default export */ __webpack_exports__["default"] = (FramerateIndicator); /***/ }), /***/ "./src/components/tw-loading-spinner/spinner.css": /*!*******************************************************!*\ !*** ./src/components/tw-loading-spinner/spinner.css ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./spinner.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-loading-spinner/spinner.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-loading-spinner/spinner.jsx": /*!*******************************************************!*\ !*** ./src/components/tw-loading-spinner/spinner.jsx ***! \*******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _spinner_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./spinner.css */ "./src/components/tw-loading-spinner/spinner.css"); /* harmony import */ var _spinner_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_spinner_css__WEBPACK_IMPORTED_MODULE_1__); const Loading = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _spinner_css__WEBPACK_IMPORTED_MODULE_1___default.a.container }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _spinner_css__WEBPACK_IMPORTED_MODULE_1___default.a.spinner })); /* harmony default export */ __webpack_exports__["default"] = (Loading); /***/ }), /***/ "./src/components/tw-project-input/project-input.css": /*!***********************************************************!*\ !*** ./src/components/tw-project-input/project-input.css ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./project-input.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-project-input/project-input.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-project-input/project-input.jsx": /*!***********************************************************!*\ !*** ./src/components/tw-project-input/project-input.jsx ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_tooltip__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-tooltip */ "./node_modules/react-tooltip/dist/index.js"); /* harmony import */ var react_tooltip__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_tooltip__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../reducers/project-state */ "./src/reducers/project-state.js"); /* harmony import */ var _project_input_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./project-input.css */ "./src/components/tw-project-input/project-input.css"); /* harmony import */ var _project_input_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_project_input_css__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _lib_tw_navigation_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../lib/tw-navigation-utils */ "./src/lib/tw-navigation-utils.js"); const PROJECT_BASE = 'https://scratch.mit.edu/projects/'; const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_5__["defineMessages"])({ tooltip: { "id": "tw.input.tooltip", "defaultMessage": "Copy and paste a Scratch project link here!" } }); class ProjectInput extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleKeyDown', 'handleChange', 'handleBlur', 'handleFocus', 'inputRef', 'tooltipRef']); this.state = { projectId: this.props.projectId }; } componentDidUpdate(prevProps) { if (this.props.projectId !== prevProps.projectId) { if (this.props.projectId === _reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["defaultProjectId"]) { this.input.focus(); this.input.selectionStart = this.input.value.length; } else { this.input.blur(); } // eslint-disable-next-line react/no-did-update-set-state this.setState({ projectId: this.props.projectId }); } } extractProjectId(text) { const numberMatch = text.match(/\d+/); return numberMatch ? numberMatch[0] : null; } readProjectId(e) { const id = this.extractProjectId(e.target.value); return id || _reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["defaultProjectId"]; } handleKeyDown(e) { if (e.key === 'Enter' && this.state.projectId) { this.input.blur(); } } handleChange(e) { this.setState({ projectId: this.readProjectId(e) || _reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["defaultProjectId"] }); } handleBlur() { if (this.state.projectId && this.state.projectId !== this.props.projectId) { this.props.setProjectId(this.state.projectId); } react_tooltip__WEBPACK_IMPORTED_MODULE_4___default.a.hide(this.tooltip); } handleFocus(e) { if (this.extractProjectId(e.target.value)) { e.target.select(); } react_tooltip__WEBPACK_IMPORTED_MODULE_4___default.a.show(this.tooltip); } inputRef(el) { this.input = el; } tooltipRef(el) { this.tooltip = el; } render() { const projectId = this.state.projectId === _reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["defaultProjectId"] ? '' : this.state.projectId || ''; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { ref: this.tooltipRef, "data-tip": this.props.intl.formatMessage(messages.tooltip) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_tooltip__WEBPACK_IMPORTED_MODULE_4___default.a, { className: _project_input_css__WEBPACK_IMPORTED_MODULE_7___default.a.tooltip, effect: "solid" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("input", { ref: this.inputRef, spellCheck: "false", type: "text", value: "".concat(PROJECT_BASE).concat(projectId), className: _project_input_css__WEBPACK_IMPORTED_MODULE_7___default.a.input, onKeyDown: this.handleKeyDown, onChange: this.handleChange, onBlur: this.handleBlur, onFocus: this.handleFocus })); } } ProjectInput.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_5__["intlShape"], projectId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, setProjectId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func }; const mapStateToProps = state => ({ projectId: state.scratchGui.projectState.projectId }); const mapDispatchToProps = dispatch => ({ setProjectId: projectId => Object(_lib_tw_navigation_utils__WEBPACK_IMPORTED_MODULE_8__["setProjectId"])(dispatch, projectId) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_5__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(ProjectInput))); /***/ }), /***/ "./src/components/tw-restore-point-modal/delete.svg": /*!**********************************************************!*\ !*** ./src/components/tw-restore-point-modal/delete.svg ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/870d942b2502550f58b9eab7561f42ec.svg"; /***/ }), /***/ "./src/components/tw-restore-point-modal/restore-point-modal.css": /*!***********************************************************************!*\ !*** ./src/components/tw-restore-point-modal/restore-point-modal.css ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./restore-point-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-restore-point-modal/restore-point-modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-restore-point-modal/restore-point-modal.jsx": /*!***********************************************************************!*\ !*** ./src/components/tw-restore-point-modal/restore-point-modal.jsx ***! \***********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _restore_point_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./restore-point.jsx */ "./src/components/tw-restore-point-modal/restore-point.jsx"); /* harmony import */ var _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./restore-point-modal.css */ "./src/components/tw-restore-point-modal/restore-point-modal.css"); /* harmony import */ var _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _lib_brand__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../lib/brand */ "./src/lib/brand.js"); /* harmony import */ var _lib_tw_bytes_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../lib/tw-bytes-utils */ "./src/lib/tw-bytes-utils.js"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["defineMessages"])({ title: { "id": "tw.restorePoints.title", "defaultMessage": "Restore Points" }, never: { "id": "tw.restorePoints.never", "defaultMessage": "never" }, oneMinute: { "id": "tw.restorePoints.1minute", "defaultMessage": "every minute" }, minutes: { "id": "tw.restorePoints.minutes", "defaultMessage": "every {n} minutes" } }); const MINUTE = 1000 * 60; const INTERVAL_OPTIONS = [MINUTE * 1, MINUTE * 5, MINUTE * 10, MINUTE * 15, MINUTE * 30, -1]; const IntervalSelector = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("select", { value: props.value, onChange: props.onChange }, INTERVAL_OPTIONS.map(interval => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("option", { key: interval, value: interval }, interval < 0 ? props.intl.formatMessage(messages.never) : interval === MINUTE ? props.intl.formatMessage(messages.oneMinute) : props.intl.formatMessage(messages.minutes, { n: Math.round(interval / MINUTE) }))), !INTERVAL_OPTIONS.includes(props.value) && /*#__PURE__*/ // This should never happen unless someone manually edits their storage, so we // don't need to worry about making this work good. react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("option", { value: props.value }, "every ".concat(props.value, "ms"))); IntervalSelector.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_0__["intlShape"], value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; const RestorePointModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.modalContent, onRequestClose: props.onClose, contentLabel: props.intl.formatMessage(messages.title), id: "restorePointModal" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "{APP_NAME} periodically saves restore points on your computer to help recover your project if you forget to save. This is intended as a last resort for recovery. Your computer may silently delete these restore points at any time. DO NOT rely on this feature.", id: "tw.restorePoints.description", values: { APP_NAME: _lib_brand__WEBPACK_IMPORTED_MODULE_7__["APP_NAME"] } })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Restore points are created {time}.", id: "tw.restorePoints.intervalOption" // eslint-disable-next-line max-len , values: { time: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(IntervalSelector, { intl: props.intl, value: props.interval, onChange: props.onChangeInterval }) } })), props.interval < 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.disabled }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Disabling restore points is dangerous." // eslint-disable-next-line max-len , id: "tw.restorePoints.off" })), props.error ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.error }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Restore points are not available due to an error:" // eslint-disable-next-line max-len , id: "tw.restorePoints.error", values: { error: props.error } })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.errorMessage }, props.error)) : props.isLoading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.loading }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Loading...", id: "tw.restorePoints.loading" })) : props.restorePoints.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.empty }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "No restore points found.", id: "tw.restorePoints.empty" })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.restorePointContainer }, props.restorePoints.map(restorePoint => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_restore_point_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], _extends({ key: restorePoint.id, onClickDelete: props.onClickDelete, onClickLoad: props.onClickLoad, onClickExport: props.onClickExport }, restorePoint)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.extraContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.totalSize }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Estimated storage used: {size}", id: "tw.restorePoints.size", values: { size: Object(_lib_tw_bytes_utils__WEBPACK_IMPORTED_MODULE_8__["formatBytes"])(props.totalSize) } })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.totalSizeDescription }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Costumes or sounds used by multiple restore points are only stored once." // eslint-disable-next-line max-len , id: "tw.restorePoints.size2" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { onClick: props.onClickDeleteAll, className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(_restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.button, _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.deleteAllButton), disabled: props.isLoading }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Delete All", id: "tw.restorePoints.deleteAll" })))))); RestorePointModal.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_0__["intlShape"], interval: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, onChangeInterval: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickCreate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickDelete: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickDeleteAll: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickLoad: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickExport: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, isLoading: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, totalSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, restorePoints: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({})), error: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(RestorePointModal)); /***/ }), /***/ "./src/components/tw-restore-point-modal/restore-point.jsx": /*!*****************************************************************!*\ !*** ./src/components/tw-restore-point-modal/restore-point.jsx ***! \*****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./restore-point-modal.css */ "./src/components/tw-restore-point-modal/restore-point-modal.css"); /* harmony import */ var _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_restore_point_modal_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _lib_tw_bytes_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../lib/tw-bytes-utils */ "./src/lib/tw-bytes-utils.js"); /* harmony import */ var _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../lib/tw-restore-point-api */ "./src/lib/tw-restore-point-api.js"); /* harmony import */ var _lib_log__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../lib/log */ "./src/lib/log.js"); /* harmony import */ var _delete_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./delete.svg */ "./src/components/tw-restore-point-modal/delete.svg"); /* harmony import */ var _delete_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_delete_svg__WEBPACK_IMPORTED_MODULE_8__); // Browser support is not perfect yet const relativeTimeSupported = () => typeof Intl !== 'undefined' && typeof Intl.RelativeTimeFormat !== 'undefined'; class RestorePoint extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleClickDelete', 'handleClickLoad', 'handleClickExport']); this.state = { thumbnail: null, error: false }; this.unmounted = false; // should never change for the same restore point this.totalSize = this.getTotalSize(); } componentDidMount() { _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_6__["default"].getThumbnail(this.props.id).then(url => { if (this.unmounted) { URL.revokeObjectURL(url); } else { this.setState({ thumbnail: url }); } }).catch(error => { _lib_log__WEBPACK_IMPORTED_MODULE_7__["default"].error(error); if (!this.unmounted) { this.setState({ error: true }); } }); } componentWillUnmount() { if (this.state.thumbnail) { URL.revokeObjectURL(this.state.thumbnail); } this.unmounted = true; } getTotalSize() { let size = this.props.projectSize + this.props.thumbnailSize; for (const assetSize of Object.values(this.props.assets)) { size += assetSize; } return size; } handleClickDelete(e) { e.stopPropagation(); this.props.onClickDelete(this.props.id); } handleClickLoad() { this.props.onClickLoad(this.props.id); } handleClickExport(e) { e.stopPropagation(); this.props.onClickExport(this.props.id); } render() { const createdDate = new Date(this.props.created * 1000); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { tabIndex: 0, role: "button", className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.restorePoint, onClick: this.handleClickLoad }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.thumbnailContainer }, this.state.error ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.thumbnailPlaceholder }, '?') : this.state.thumbnail ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.thumbnailImage, src: this.state.thumbnail }) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.restorePointTitle }, this.props.title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, relativeTimeSupported() && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedRelative"], { value: createdDate }), ' ('), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedDate"], { value: createdDate }), ', ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedTime"], { value: createdDate }), relativeTimeSupported() && ')'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, Object(_lib_tw_bytes_utils__WEBPACK_IMPORTED_MODULE_5__["formatBytes"])(this.totalSize), ', ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "{n} assets" // eslint-disable-next-line max-len , id: "tw.restorePoints.assets", values: { n: Object.keys(this.props.assets).length } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.exportButton, onClick: this.handleClickExport }, "Export"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", { className: _restore_point_modal_css__WEBPACK_IMPORTED_MODULE_4___default.a.deleteButton, onClick: this.handleClickDelete }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", { src: _delete_svg__WEBPACK_IMPORTED_MODULE_8___default.a, alt: "Delete", draggable: false }))); } } RestorePoint.propTypes = { id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, created: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, projectSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, thumbnailSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, assets: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({}).isRequired, // Record onClickDelete: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickLoad: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onClickExport: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (RestorePoint); /***/ }), /***/ "./src/components/tw-security-manager-modal/data-url.css": /*!***************************************************************!*\ !*** ./src/components/tw-security-manager-modal/data-url.css ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./data-url.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-security-manager-modal/data-url.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-security-manager-modal/data-url.jsx": /*!***************************************************************!*\ !*** ./src/components/tw-security-manager-modal/data-url.jsx ***! \***************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _data_url_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data-url.css */ "./src/components/tw-security-manager-modal/data-url.css"); /* harmony import */ var _data_url_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_data_url_css__WEBPACK_IMPORTED_MODULE_2__); /** * @param {string} dataURI data: URI * @returns {string} A hopefully human-readable version */ const decodeDataURI = dataURI => { const delimeter = dataURI.indexOf(','); if (delimeter === -1) { return dataURI; } const contentType = dataURI.substring(0, delimeter); const data = dataURI.substring(delimeter + 1); if (contentType.endsWith(';base64')) { try { return atob(data); } catch (e) { return dataURI; } } try { return decodeURIComponent(data); } catch (e) { return dataURI; } }; const DataURL = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("textarea", { className: _data_url_css__WEBPACK_IMPORTED_MODULE_2___default.a.code, value: decodeDataURI(props.url), readOnly: true, spellCheck: false, autoComplete: "off" }); DataURL.propTypes = { url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (DataURL); /***/ }), /***/ "./src/components/tw-security-manager-modal/delayed-mount-property-hoc.jsx": /*!*********************************************************************************!*\ !*** ./src/components/tw-security-manager-modal/delayed-mount-property-hoc.jsx ***! \*********************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } const DelayedMountPropertyHOC = function DelayedMountPropertyHOC(WrappedComponent, duration, delayedProps) { class DelayedMountProperty extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); this.state = { done: false }; } componentDidMount() { this.timeout = setTimeout(() => { this.setState({ done: true }); }, duration); } componentWillUnmount() { clearTimeout(this.timeout); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, this.state.done ? _objectSpread(_objectSpread({}, this.props), delayedProps) : this.props); } } return DelayedMountProperty; }; /* harmony default export */ __webpack_exports__["default"] = (DelayedMountPropertyHOC); /***/ }), /***/ "./src/components/tw-security-manager-modal/download.css": /*!***************************************************************!*\ !*** ./src/components/tw-security-manager-modal/download.css ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./download.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-security-manager-modal/download.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-security-manager-modal/download.jsx": /*!***************************************************************!*\ !*** ./src/components/tw-security-manager-modal/download.jsx ***! \***************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_brand_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../lib/brand.js */ "./src/lib/brand.js"); /* harmony import */ var _download_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./download.css */ "./src/components/tw-security-manager-modal/download.css"); /* harmony import */ var _download_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_download_css__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _load_extension_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./load-extension.css */ "./src/components/tw-security-manager-modal/load-extension.css"); /* harmony import */ var _load_extension_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_load_extension_css__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../tw-fancy-checkbox/checkbox.jsx */ "./src/components/tw-fancy-checkbox/checkbox.jsx"); /* harmony import */ var _lib_pm_security_manager_download_util_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../lib/pm-security-manager-download-util.js */ "./src/lib/pm-security-manager-download-util.js"); const FileName = props => { const MAX_NAME_LENGTH = 80; const MAX_EXTENSION_LENGTH = 30; const parts = props.name.split('.'); let extension = parts.length > 1 ? parts.pop() : null; let name = parts.join('.'); if (name.length > MAX_NAME_LENGTH) { name = "".concat(name.substring(0, MAX_NAME_LENGTH), "[...]"); } if (extension && extension.length > MAX_EXTENSION_LENGTH) { extension = "[...]".concat(extension.substring(extension.length - MAX_EXTENSION_LENGTH)); } if (extension === null) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { className: _download_css__WEBPACK_IMPORTED_MODULE_4___default.a.fileName }, props.name); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { className: _download_css__WEBPACK_IMPORTED_MODULE_4___default.a.fileName }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { className: _download_css__WEBPACK_IMPORTED_MODULE_4___default.a.name }, name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { className: _download_css__WEBPACK_IMPORTED_MODULE_4___default.a.dot }, '.'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { className: _download_css__WEBPACK_IMPORTED_MODULE_4___default.a.extension }, extension)); }; FileName.propTypes = { name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired }; const DownloadModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "The project wants to download a file to your computer. It will be saved as {name} in your downloads folder.", id: "tw.download.file", values: { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FileName, { name: props.name }) } })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "This file has not been reviewed by the {APP_NAME} developers.", id: "tw.download.danger", values: { APP_NAME: _lib_brand_js__WEBPACK_IMPORTED_MODULE_3__["APP_NAME"] } })), Object(_lib_pm_security_manager_download_util_js__WEBPACK_IMPORTED_MODULE_7__["isDefinitelyExecutable"])(props.name) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_5___default.a.unsandboxedWarning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "This is an executable file format that may contain malicious code if you run it.", id: "tw.download.executable", values: { APP_NAME: _lib_brand_js__WEBPACK_IMPORTED_MODULE_3__["APP_NAME"] } })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_5___default.a.unsandboxedContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_5___default.a.unsandboxedCheckbox, checked: props.remember, onChange: props.onChangeRemember }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Remember my choice for all files", id: "pm.download.downloadFuture" })), props.remember && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_5___default.a.unsandboxedWarning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Downloaded files can contain viruses, malware or other malicious content. It is possible to permanently destroy your computer or personal files if you download a virus or malicious program. You will not be asked to confirm any other download with this setting enabled.", id: "pm.download.downloadFutureWarning" }))); DownloadModal.propTypes = { name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, remember: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, onChangeRemember: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (DownloadModal); /***/ }), /***/ "./src/components/tw-security-manager-modal/embed.jsx": /*!************************************************************!*\ !*** ./src/components/tw-security-manager-modal/embed.jsx ***! \************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _load_extension_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load-extension.css */ "./src/components/tw-security-manager-modal/load-extension.css"); /* harmony import */ var _load_extension_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_load_extension_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _url_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./url.jsx */ "./src/components/tw-security-manager-modal/url.jsx"); /* harmony import */ var _data_url_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./data-url.jsx */ "./src/components/tw-security-manager-modal/data-url.jsx"); /* harmony import */ var _tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../tw-fancy-checkbox/checkbox.jsx */ "./src/components/tw-fancy-checkbox/checkbox.jsx"); const EmbedModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, props.url.startsWith('data:') ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "The project wants to embed HTML content over the stage:", id: "tw.embed.title1" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_data_url_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { url: props.url })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "The project wants to embed remote content over the stage:", id: "tw.embed.title2" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_url_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { url: props.url })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "While the embed will be sandboxed, it will still have access to information about your device such as your IP and general location.", id: "tw.embed.risks" })), !props.url.startsWith('data:') && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "If allowed, further embeds to the same site will be automatically allowed.", id: "tw.embed.persistent" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_2___default.a.unsandboxedContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_2___default.a.unsandboxedCheckbox, checked: props.remember, onChange: props.onChangeRemember }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Remember my choice for all websites", id: "pm.embed.connectFuture" })), props.remember && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_2___default.a.unsandboxedWarning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Enabling embedding any future website is dangerous. These websites can share anything, including inappropriate or malicious content. This will share your IP address, general location, and possibly other data with any websites you connect to in the future. You will not be asked to confirm any of the websites that you embed with this setting enabled.", id: "pm.embed.connectFutureWarning" }))); EmbedModal.propTypes = { url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, remember: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, onChangeRemember: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (EmbedModal); /***/ }), /***/ "./src/components/tw-security-manager-modal/fetch.jsx": /*!************************************************************!*\ !*** ./src/components/tw-security-manager-modal/fetch.jsx ***! \************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _load_extension_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load-extension.css */ "./src/components/tw-security-manager-modal/load-extension.css"); /* harmony import */ var _load_extension_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_load_extension_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _url_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./url.jsx */ "./src/components/tw-security-manager-modal/url.jsx"); /* harmony import */ var _tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../tw-fancy-checkbox/checkbox.jsx */ "./src/components/tw-fancy-checkbox/checkbox.jsx"); const FetchModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "The project wants to connect to the website:", id: "tw.fetch.title" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_url_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { url: props.url }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "This could be used to download images or sounds, implement multiplayer, access an API, or for malicious purposes. This will share your IP address, general location, and possibly other data with the website.", id: "tw.securityManager.why" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "If allowed, further requests to the same website will be automatically allowed.", id: "tw.securityManager.trust" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_2___default.a.unsandboxedContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_2___default.a.unsandboxedCheckbox, checked: props.remember, onChange: props.onChangeRemember }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], { defaultMessage: "Remember my choice for all websites", id: "pm.fetch.connectFuture" })), props.remember && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_2___default.a.unsandboxedWarning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Enabling connecting to any future website is dangerous. These websites can share anything, including inappropriate or malicious content. This will share your IP address, general location, and possibly other data with any websites you connect to in the future. You will not be asked to confirm any of the websites that you connect to with this setting enabled.", id: "pm.fetch.connectFutureWarning" }))); FetchModal.propTypes = { url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, remember: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, onChangeRemember: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (FetchModal); /***/ }), /***/ "./src/components/tw-security-manager-modal/geolocate.jsx": /*!****************************************************************!*\ !*** ./src/components/tw-security-manager-modal/geolocate.jsx ***! \****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); const Geolocate = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "The project wants to know your location." // eslint-disable-next-line max-len , id: "tw.geolocate.title" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "If allowed, you may be prompted to allow location access by your browser." // eslint-disable-next-line max-len , id: "tw.geolocate.permission" }))); /* harmony default export */ __webpack_exports__["default"] = (Geolocate); /***/ }), /***/ "./src/components/tw-security-manager-modal/load-extension.css": /*!*********************************************************************!*\ !*** ./src/components/tw-security-manager-modal/load-extension.css ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./load-extension.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-security-manager-modal/load-extension.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-security-manager-modal/load-extension.jsx": /*!*********************************************************************!*\ !*** ./src/components/tw-security-manager-modal/load-extension.jsx ***! \*********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _load_extension_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load-extension.css */ "./src/components/tw-security-manager-modal/load-extension.css"); /* harmony import */ var _load_extension_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_load_extension_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _url_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./url.jsx */ "./src/components/tw-security-manager-modal/url.jsx"); /* harmony import */ var _data_url_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./data-url.jsx */ "./src/components/tw-security-manager-modal/data-url.jsx"); /* harmony import */ var _tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../tw-fancy-checkbox/checkbox.jsx */ "./src/components/tw-fancy-checkbox/checkbox.jsx"); /* harmony import */ var _lib_brand__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../lib/brand */ "./src/lib/brand.js"); const LoadExtensionModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, props.url.startsWith('data:') ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "The project wants to load a custom extension with the code:", id: "tw.loadExtension.embedded" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_data_url_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { url: props.url })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "The project wants to load a custom extension from the URL:", id: "tw.loadExtension.url" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_url_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { url: props.url })), props.onChangeUnsandboxed && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_3___default.a.unsandboxedContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_3___default.a.unsandboxedCheckbox, checked: props.unsandboxed, onChange: props.onChangeUnsandboxed }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Run extension without sandbox", id: "tw.loadExtension.unsandboxed" })), props.unsandboxed && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_3___default.a.unsandboxedWarning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Loading extensions without the sandbox is dangerous. It will be able to corrupt your project, delete your settings, phish for passwords, and other bad things. The {APP_NAME} developers are not responsible for any resulting issues.", id: "tw.loadExtension.unsandboxedWarning", values: { APP_NAME: _lib_brand__WEBPACK_IMPORTED_MODULE_7__["APP_NAME"] } }))), !props.unsandboxed && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_3___default.a.sandboxed }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "While the code will be sandboxed, it will still have access to information about your device such as your IP and general location. Make sure you trust the author of this extension before continuing.", id: "tw.loadExtension.sandboxed" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("label", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_3___default.a.unsandboxedContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_3___default.a.unsandboxedCheckbox, checked: props.remember, onChange: props.onChangeRemember }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "Do this for every extension in the project", id: "pm.customExtensionModal.rememberChoice" }))); LoadExtensionModal.propTypes = { url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, unsandboxed: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, onChangeUnsandboxed: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, remember: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, onChangeRemember: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (LoadExtensionModal); /***/ }), /***/ "./src/components/tw-security-manager-modal/notify.jsx": /*!*************************************************************!*\ !*** ./src/components/tw-security-manager-modal/notify.jsx ***! \*************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); const Notify = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "The project wants to display notifications." // eslint-disable-next-line max-len , id: "tw.notify.title" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "If allowed, you may be prompted to enable notifications by your browser, and further notifications will be automatically allowed." // eslint-disable-next-line max-len , id: "tw.notify.permission" }))); /* harmony default export */ __webpack_exports__["default"] = (Notify); /***/ }), /***/ "./src/components/tw-security-manager-modal/open-window.jsx": /*!******************************************************************!*\ !*** ./src/components/tw-security-manager-modal/open-window.jsx ***! \******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_brand__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../lib/brand */ "./src/lib/brand.js"); /* harmony import */ var _url_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./url.jsx */ "./src/components/tw-security-manager-modal/url.jsx"); const OpenWindowModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "The project wants to open a new window or tab with the URL:", id: "tw.openWindow.title" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_url_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { url: props.url }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "This website has not been reviewed by the {APP_NAME} developers. It may contain dangerous or malicious code.", id: "tw.openWindow.dangerous", values: { APP_NAME: _lib_brand__WEBPACK_IMPORTED_MODULE_3__["APP_NAME"] } }))); OpenWindowModal.propTypes = { url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (OpenWindowModal); /***/ }), /***/ "./src/components/tw-security-manager-modal/read-clipboard.jsx": /*!*********************************************************************!*\ !*** ./src/components/tw-security-manager-modal/read-clipboard.jsx ***! \*********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); const ReadClipboard = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "The project wants to read data from your clipboard.", id: "tw.clipboard.title" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "If your clipboard contains things like passwords, the project may be able to share those with other users or servers.", id: "tw.clipboard.danger" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Clipboard access may not work in some browsers. If allowed, further clipboard reads will be automatically allowed." // eslint-disable-next-line max-len , id: "tw.clipboard.permission" }))); /* harmony default export */ __webpack_exports__["default"] = (ReadClipboard); /***/ }), /***/ "./src/components/tw-security-manager-modal/record-audio.jsx": /*!*******************************************************************!*\ !*** ./src/components/tw-security-manager-modal/record-audio.jsx ***! \*******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); const RecordAudio = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "The project wants to record audio from your microphone. This could include a text transcript or raw audio data. The project may be able to share audio with other users or servers.", id: "tw.recordAudio.title" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "If allowed, you may be prompted to enable microphone access by your browser, and further microphone access will be automatically allowed.", id: "tw.recordAudio.permission" }))); /* harmony default export */ __webpack_exports__["default"] = (RecordAudio); /***/ }), /***/ "./src/components/tw-security-manager-modal/record-video.jsx": /*!*******************************************************************!*\ !*** ./src/components/tw-security-manager-modal/record-video.jsx ***! \*******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); const RecordVideo = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "The project wants to record video from your camera. The project may be able to share images with other users or servers.", id: "tw.recordVideo.title" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "If allowed, you may be prompted to enable camera access by your browser, and further camera access will be automatically allowed.", id: "tw.recordVideo.permission" }))); /* harmony default export */ __webpack_exports__["default"] = (RecordVideo); /***/ }), /***/ "./src/components/tw-security-manager-modal/redirect.jsx": /*!***************************************************************!*\ !*** ./src/components/tw-security-manager-modal/redirect.jsx ***! \***************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_brand__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../lib/brand */ "./src/lib/brand.js"); /* harmony import */ var _url_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./url.jsx */ "./src/components/tw-security-manager-modal/url.jsx"); const RedirectModal = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { defaultMessage: "The project wants to navigate this tab to the URL:", id: "tw.redirect.title" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_url_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { url: props.url }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "This website has not been reviewed by the {APP_NAME} developers. It may contain dangerous or malicious code.", id: "tw.redirect.dangerous", values: { APP_NAME: _lib_brand__WEBPACK_IMPORTED_MODULE_3__["APP_NAME"] } }))); RedirectModal.propTypes = { url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (RedirectModal); /***/ }), /***/ "./src/components/tw-security-manager-modal/security-manager-modal.css": /*!*****************************************************************************!*\ !*** ./src/components/tw-security-manager-modal/security-manager-modal.css ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./security-manager-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-security-manager-modal/security-manager-modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-security-manager-modal/security-manager-modal.jsx": /*!*****************************************************************************!*\ !*** ./src/components/tw-security-manager-modal/security-manager-modal.jsx ***! \*****************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../lib/tw-security-manager-constants */ "./src/lib/tw-security-manager-constants.js"); /* harmony import */ var _load_extension_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./load-extension.jsx */ "./src/components/tw-security-manager-modal/load-extension.jsx"); /* harmony import */ var _fetch_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./fetch.jsx */ "./src/components/tw-security-manager-modal/fetch.jsx"); /* harmony import */ var _open_window_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./open-window.jsx */ "./src/components/tw-security-manager-modal/open-window.jsx"); /* harmony import */ var _redirect_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./redirect.jsx */ "./src/components/tw-security-manager-modal/redirect.jsx"); /* harmony import */ var _record_audio_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./record-audio.jsx */ "./src/components/tw-security-manager-modal/record-audio.jsx"); /* harmony import */ var _record_video_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./record-video.jsx */ "./src/components/tw-security-manager-modal/record-video.jsx"); /* harmony import */ var _read_clipboard_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./read-clipboard.jsx */ "./src/components/tw-security-manager-modal/read-clipboard.jsx"); /* harmony import */ var _notify_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./notify.jsx */ "./src/components/tw-security-manager-modal/notify.jsx"); /* harmony import */ var _geolocate_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./geolocate.jsx */ "./src/components/tw-security-manager-modal/geolocate.jsx"); /* harmony import */ var _unsandbox_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./unsandbox.jsx */ "./src/components/tw-security-manager-modal/unsandbox.jsx"); /* harmony import */ var _embed_jsx__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./embed.jsx */ "./src/components/tw-security-manager-modal/embed.jsx"); /* harmony import */ var _download_jsx__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./download.jsx */ "./src/components/tw-security-manager-modal/download.jsx"); /* harmony import */ var _delayed_mount_property_hoc_jsx__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./delayed-mount-property-hoc.jsx */ "./src/components/tw-security-manager-modal/delayed-mount-property-hoc.jsx"); /* harmony import */ var _security_manager_modal_css__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./security-manager-modal.css */ "./src/components/tw-security-manager-modal/security-manager-modal.css"); /* harmony import */ var _security_manager_modal_css__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_security_manager_modal_css__WEBPACK_IMPORTED_MODULE_19__); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["defineMessages"])({ title: { "id": "tw.securityManager.title", "defaultMessage": "Extension Security" } }); const noop = () => {}; const SecurityManagerModalComponent = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _security_manager_modal_css__WEBPACK_IMPORTED_MODULE_19___default.a.modalContent, onRequestClose: props.enableButtons ? props.onDenied : noop, contentLabel: props.intl.formatMessage(messages.title), id: "securitymanagermodal" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _security_manager_modal_css__WEBPACK_IMPORTED_MODULE_19___default.a.body }, props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].LoadExtension ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_load_extension_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].Fetch ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_fetch_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].OpenWindow ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_open_window_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].Redirect ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_redirect_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].RecordAudio ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_record_audio_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].RecordVideo ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_record_video_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].ReadClipboard ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_read_clipboard_jsx__WEBPACK_IMPORTED_MODULE_12__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].Notify ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_notify_jsx__WEBPACK_IMPORTED_MODULE_13__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].Geolocate ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_geolocate_jsx__WEBPACK_IMPORTED_MODULE_14__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].Unsandbox ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_unsandbox_jsx__WEBPACK_IMPORTED_MODULE_15__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].Embed ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_embed_jsx__WEBPACK_IMPORTED_MODULE_16__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].ScreenshotCamera ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_record_video_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], props.data) : props.type === _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"].Download ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_download_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], props.data) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _security_manager_modal_css__WEBPACK_IMPORTED_MODULE_19___default.a.buttons }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _security_manager_modal_css__WEBPACK_IMPORTED_MODULE_19___default.a.denyButton, onClick: props.onDenied, disabled: !props.enableButtons }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Deny", id: "tw.securityManager.deny" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _security_manager_modal_css__WEBPACK_IMPORTED_MODULE_19___default.a.allowButton, onClick: props.onAllowed, disabled: !props.enableButtons }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Allow", id: "tw.securityManager.allow" }))))); SecurityManagerModalComponent.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_0__["intlShape"], type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(Object.values(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_5__["default"])), enableButtons: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, // Each modal may have different type of data // eslint-disable-next-line react/forbid-prop-types data: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired, onAllowed: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onDenied: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; // Prevent accidentally pressing buttons immediately when a prompt appears. const BUTTON_DELAY = 750; /* harmony default export */ __webpack_exports__["default"] = (Object(_delayed_mount_property_hoc_jsx__WEBPACK_IMPORTED_MODULE_18__["default"])(Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(SecurityManagerModalComponent), BUTTON_DELAY, { enableButtons: true })); /***/ }), /***/ "./src/components/tw-security-manager-modal/unsandbox.jsx": /*!****************************************************************!*\ !*** ./src/components/tw-security-manager-modal/unsandbox.jsx ***! \****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _load_extension_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load-extension.css */ "./src/components/tw-security-manager-modal/load-extension.css"); /* harmony import */ var _load_extension_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_load_extension_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _lib_brand__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../lib/brand */ "./src/lib/brand.js"); const Unsandbox = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { id: "tw.security.unsandbox.request", defaultMessage: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u3001{EXT_NAME} \u62E1\u5F35\u6A5F\u80FD\u306E\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u5316\u3092\u89E3\u9664\u3059\u308B\u3053\u3068\u3092\u8981\u6C42\u3057\u3066\u3044\u307E\u3059\u3002", values: { EXT_NAME: props.extensionName } // Optional: Inject EXT_NAME from props })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _load_extension_css__WEBPACK_IMPORTED_MODULE_2___default.a.unsandboxedWarning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { id: "tw.security.unsandbox.warning", defaultMessage: "\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u306A\u3057\u3067\u62E1\u5F35\u6A5F\u80FD\u3092\u8AAD\u307F\u8FBC\u3080\u3053\u3068\u306F\u5371\u967A\u3067\u3059\u304C\u3001\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u74B0\u5883\u5185\u3067\u306F\u591A\u304F\u306E\u6A5F\u80FD\u304C\u5236\u9650\u3055\u308C\u308B\u305F\u3081\u3001\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u7121\u3057\u3067\u8AAD\u307F\u8FBC\u3080\u3053\u3068\u3092\u304A\u3059\u3059\u3081\u3057\u307E\u3059\u3002\u307E\u305F\u3001\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u306A\u3057\u3067\u3082\u901A\u5E38\u306EWeb\u30B5\u30A4\u30C8\u3068\u540C\u3058\u3088\u3046\u306A\u3053\u3068\u3057\u304B\u3067\u304D\u307E\u305B\u3093\u3002" }))); /* harmony default export */ __webpack_exports__["default"] = (Unsandbox); /***/ }), /***/ "./src/components/tw-security-manager-modal/url.css": /*!**********************************************************!*\ !*** ./src/components/tw-security-manager-modal/url.css ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./url.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-security-manager-modal/url.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-security-manager-modal/url.jsx": /*!**********************************************************!*\ !*** ./src/components/tw-security-manager-modal/url.jsx ***! \**********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _url_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./url.css */ "./src/components/tw-security-manager-modal/url.css"); /* harmony import */ var _url_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_url_css__WEBPACK_IMPORTED_MODULE_2__); const MAX_URL_LENGTH = 100; /** * @param {string} url URL * @returns {string} trimmed URL */ const trimURL = url => url.length > MAX_URL_LENGTH ? "".concat(url.substring(0, MAX_URL_LENGTH), "...") : url; const URL = _ref => { let { url } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", { className: _url_css__WEBPACK_IMPORTED_MODULE_2___default.a.url }, trimURL(url)); }; URL.propTypes = { url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (URL); /***/ }), /***/ "./src/components/tw-settings-modal/help-black.svg": /*!*********************************************************!*\ !*** ./src/components/tw-settings-modal/help-black.svg ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/c4c75827d7f30081f493963fadec60a1.svg"; /***/ }), /***/ "./src/components/tw-settings-modal/help-white.svg": /*!*********************************************************!*\ !*** ./src/components/tw-settings-modal/help-white.svg ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/171fbf8ebb9d7127d4c59a04568e2af4.svg"; /***/ }), /***/ "./src/components/tw-settings-modal/settings-modal.css": /*!*************************************************************!*\ !*** ./src/components/tw-settings-modal/settings-modal.css ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./settings-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-settings-modal/settings-modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-settings-modal/settings-modal.jsx": /*!*************************************************************!*\ !*** ./src/components/tw-settings-modal/settings-modal.jsx ***! \*************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var _tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../tw-fancy-checkbox/checkbox.jsx */ "./src/components/tw-fancy-checkbox/checkbox.jsx"); /* harmony import */ var _forms_input_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../forms/input.jsx */ "./src/components/forms/input.jsx"); /* harmony import */ var _forms_buffered_input_hoc_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../forms/buffered-input-hoc.jsx */ "./src/components/forms/buffered-input-hoc.jsx"); /* harmony import */ var _tw_documentation_link_documentation_link_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../tw-documentation-link/documentation-link.jsx */ "./src/components/tw-documentation-link/documentation-link.jsx"); /* harmony import */ var _settings_modal_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./settings-modal.css */ "./src/components/tw-settings-modal/settings-modal.css"); /* harmony import */ var _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_settings_modal_css__WEBPACK_IMPORTED_MODULE_11__); const _excluded = ["value", "onChange", "label"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } /* eslint-disable react/no-multi-comp */ const BufferedInput = Object(_forms_buffered_input_hoc_jsx__WEBPACK_IMPORTED_MODULE_9__["default"])(_forms_input_jsx__WEBPACK_IMPORTED_MODULE_8__["default"]); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["defineMessages"])({ title: { "id": "pm.settingsModal.title", "defaultMessage": "Settings" }, help: { "id": "tw.settingsModal.help", "defaultMessage": "Click for help" } }); const LearnMore = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_tw_documentation_link_documentation_link_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], props, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Learn more.", id: "gui.alerts.cloudInfoLearnMore" }))); class UnwrappedSetting extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_4___default()(this, ['handleClickHelp']); this.state = { helpVisible: false }; } componentDidUpdate(prevProps) { if (this.props.active && !prevProps.active) { // eslint-disable-next-line react/no-did-update-set-state this.setState({ helpVisible: true }); } } handleClickHelp() { this.setState(prevState => ({ helpVisible: !prevState.helpVisible })); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.setting, { [_settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.active]: this.props.active }) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.label, { [_settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.labelUnsetHeight]: this.props.unsetHeight === true }) }, this.props.primary, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.helpIcon, onClick: this.handleClickHelp, title: this.props.intl.formatMessage(messages.help) })), this.state.helpVisible && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.detail }, this.props.help, this.props.slug && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(LearnMore, { slug: this.props.slug })), this.props.secondary); } } UnwrappedSetting.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_0__["intlShape"], active: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, primary: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, secondary: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, slug: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; const Setting = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(UnwrappedSetting); const BooleanSetting = _ref => { let { value, onChange, label } = _ref, props = _objectWithoutProperties(_ref, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Setting, _extends({}, props, { active: value, primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("label", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.label }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_tw_fancy_checkbox_checkbox_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.checkbox, checked: value, onChange: onChange }), label) })); }; BooleanSetting.propTypes = { onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired }; const HighQualityPen = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BooleanSetting, _extends({}, props, { label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "High Quality Pen", id: "tw.settingsModal.highQualityPen" }), help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Allows pen projects to render at higher resolutions and disables some coordinate rounding in the editor. Not all projects benefit from this setting and it may impact performance.", id: "tw.settingsModal.highQualityPenHelp" }), slug: "high-quality-pen" })); const CustomFPS = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BooleanSetting, { value: props.framerate !== 30, onChange: props.onChange, label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "60 FPS (Custom FPS)", id: "tw.settingsModal.fps" }), help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Runs scripts 60 times per second instead of 30. Most projects will not work properly with this enabled. You should try Interpolation with 60 FPS mode disabled if that is the case. {customFramerate}.", id: "tw.settingsModal.fpsHelp", values: { customFramerate: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("a", { onClick: props.onCustomizeFramerate, tabIndex: "0" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Click to use a framerate other than 30 or 60", id: "tw.settingsModal.fpsHelp.customFramerate" })) } }), slug: "custom-fps" }); CustomFPS.propTypes = { framerate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onCustomizeFramerate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; const Interpolation = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BooleanSetting, _extends({}, props, { label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Interpolation", id: "tw.settingsModal.interpolation" }), help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Makes projects appear smoother by interpolating sprite motion. Interpolation should not be used on 3D projects, raytracers, pen projects, and laggy projects as interpolation will make them run slower without making them appear smoother.", id: "tw.settingsModal.interpolationHelp" }), slug: "interpolation" })); const InfiniteClones = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BooleanSetting, _extends({}, props, { label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Infinite Clones", id: "tw.settingsModal.infiniteClones" }), help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Disables Scratch's 300 clone limit.", id: "tw.settingsModal.infiniteClonesHelp" }), slug: "infinite-clones" })); const RemoveFencing = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BooleanSetting, _extends({}, props, { label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Remove Fencing", id: "tw.settingsModal.removeFencing" }), help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Allows sprites to move offscreen, become as large or as small as they want, and makes touching blocks work offscreen.", id: "tw.settingsModal.removeFencingHelp" }), slug: "remove-fencing" })); const RemoveMiscLimits = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BooleanSetting, _extends({}, props, { label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Remove Miscellaneous Limits", id: "tw.settingsModal.removeMiscLimits" }), help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Removes sound effect limits and pen size limits.", id: "tw.settingsModal.removeMiscLimitsHelp" }), slug: "remove-misc-limits" })); const EnableDangerousOptimizations = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BooleanSetting, _extends({}, props, { label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Enable Dangerous Optimizations", id: "pm.settingsModal.dangerousOptimizations" }), help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Precomputes certain numbers & uses faster methods for certain operations, at the cost of losing tiny features like typing special text in certain number inputs. Not all projects will be compatible with this setting.", id: "pm.settingsModal.dangerousOptimizationsHelp" }) // slug="enable-dangerous-optimizations" })); const DisableOffscreenRendering = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BooleanSetting, _extends({}, props, { label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Disable Off Screen Rendering", id: "pm.settingsModal.oobRendering" }), help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "When enabled all sprites that are off screen will not be rendered.", id: "pm.settingsModal.oobRenderingHelp" }) // slug="out-of-bounds-rendering" })); const WarpTimer = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BooleanSetting, _extends({}, props, { label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Warp Timer", id: "tw.settingsModal.warpTimer" }), help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Makes scripts check if they are stuck in a long or infinite loop and run at a low framerate instead of getting stuck until the loop finishes. This fixes most crashes but has a significant performance impact, so it's only enabled by default in the editor.", id: "tw.settingsModal.warpTimerHelp" }), slug: "warp-timer" })); const CustomStageSize = _ref2 => { let { customStageSizeEnabled, stageWidth, onStageWidthChange, stageHeight, onStageHeightChange, onStagePresetUsed } = _ref2; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Setting, { active: customStageSizeEnabled, unsetHeight: true, primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.label, _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.customStageSize) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Stage Size:", id: "pm.settingsModal.stageSize" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.customStageSizeButton, "data-selected": stageWidth === 360 && stageHeight === 360, "data-square": true, onClick: () => onStagePresetUsed(2) }, "1:1"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.customStageSizeButton, "data-selected": stageWidth === 480 && stageHeight === 360, onClick: () => onStagePresetUsed(0) }, "4:3"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.customStageSizeButton, "data-selected": stageWidth === 640 && stageHeight === 360, "data-widescreen": true, onClick: () => onStagePresetUsed(1) }, "16:9")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.customStageSizeContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Custom Stage Size:", id: "tw.settingsModal.customStageSize" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BufferedInput, { value: stageWidth, onSubmit: onStageWidthChange, className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.customStageSizeInput, type: "number", min: "0", max: "1024", step: "1" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", null, '×'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(BufferedInput, { value: stageHeight, onSubmit: onStageHeightChange, className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.customStageSizeInput, type: "number", min: "0", max: "1024", step: "1" }))), secondary: (stageWidth >= 1000 || stageHeight >= 1000) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.warning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Using a custom stage size this large is not recommended! Instead, use a lower size with the same aspect ratio and let fullscreen mode upscale it to match the user's display.", id: "tw.settingsModal.largeStageWarning" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(LearnMore, { slug: "custom-stage-size" })), help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Changes the size of the Scratch stage from 480x360 to something else. Try 640x360 to make the stage widescreen. Very few projects will handle this properly.", id: "tw.settingsModal.customStageSizeHelp" }), slug: "custom-stage-size" }); }; CustomStageSize.propTypes = { customStageSizeEnabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, stageWidth: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, onStageWidthChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, stageHeight: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, onStageHeightChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onStagePresetUsed: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; const StoreProjectOptions = _ref3 => { let { onStoreProjectOptions } = _ref3; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.setting }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { onClick: onStoreProjectOptions, className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.button }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Store settings in project", id: "tw.settingsModal.storeProjectOptions" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Stores the selected settings in the project so they will be automatically applied when PenguinMod loads this project. Warp timer will not be saved.", id: "tw.settingsModal.storeProjectOptionsHelp" })))); }; StoreProjectOptions.propTypes = { onStoreProjectOptions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; const Header = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.header }, props.children, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.divider })); Header.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node }; const SettingsModalComponent = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.modalContent, onRequestClose: function onRequestClose() { if (!props.isEmbedded) { props.onStoreProjectOptions(); } props.onClose(...arguments); }, contentLabel: props.intl.formatMessage(messages.title), id: "settingsModal" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.body }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Header, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Gameplay", id: "pm.settingsModal.gameplay" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(CustomFPS, { framerate: props.framerate, onChange: props.onFramerateChange, onCustomizeFramerate: props.onCustomizeFramerate }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(HighQualityPen, { value: props.highQualityPen, onChange: props.onHighQualityPenChange }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(WarpTimer, { value: props.warpTimer, onChange: props.onWarpTimerChange }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Header, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Remove Limits", id: "tw.settingsModal.removeLimits" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(InfiniteClones, { value: props.infiniteClones, onChange: props.onInfiniteClonesChange }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(RemoveFencing, { value: props.removeFencing, onChange: props.onRemoveFencingChange }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(RemoveMiscLimits, { value: props.removeLimits, onChange: props.onRemoveLimitsChange }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Header, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Optimizations", id: "pm.settingsModal.optimizations" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(DisableOffscreenRendering, { value: props.disableOffscreenRendering, onChange: props.onDisableOffscreenRenderingChange }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(EnableDangerousOptimizations, { value: props.dangerousOptimizations, onChange: props.onEnableDangerousOptimizationsChange }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Header, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Screen Resolution", id: "pm.settingsModal.screenResolution" })), !props.isEmbedded && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(CustomStageSize, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("details", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("summary", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.summary }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Header, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.dropdown }, "\u2BC8"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Unsupported", id: "pm.settingsModal.unsupported" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.warning }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "The settings here are unsupported and can break at any time. These settings are here as they either have better methods to create their effects with better results, or break often when used with other extensions.", id: "pm.settingsModal.unsupportedWarning" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Interpolation, { value: props.interpolation, onChange: props.onInterpolationChange })))); SettingsModalComponent.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_0__["intlShape"], onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, isEmbedded: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, framerate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, onFramerateChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onCustomizeFramerate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, highQualityPen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onHighQualityPenChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, interpolation: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onInterpolationChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, infiniteClones: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onInfiniteClonesChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, removeFencing: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onRemoveFencingChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, removeLimits: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onRemoveLimitsChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, warpTimer: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onWarpTimerChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, disableCompiler: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, dangerousOptimizations: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onDisableCompilerChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onEnableDangerousOptimizationsChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, disableOffscreenRendering: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onDisableOffscreenRenderingChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(SettingsModalComponent)); /***/ }), /***/ "./src/components/tw-sound-editor-not-supported/sound-editor-not-supported.css": /*!*************************************************************************************!*\ !*** ./src/components/tw-sound-editor-not-supported/sound-editor-not-supported.css ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./sound-editor-not-supported.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-sound-editor-not-supported/sound-editor-not-supported.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-sound-editor-not-supported/sound-editor-not-supported.jsx": /*!*************************************************************************************!*\ !*** ./src/components/tw-sound-editor-not-supported/sound-editor-not-supported.jsx ***! \*************************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _sound_editor_not_supported_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sound-editor-not-supported.css */ "./src/components/tw-sound-editor-not-supported/sound-editor-not-supported.css"); /* harmony import */ var _sound_editor_not_supported_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_sound_editor_not_supported_css__WEBPACK_IMPORTED_MODULE_2__); const SoundEditorNotSupported = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: _sound_editor_not_supported_css__WEBPACK_IMPORTED_MODULE_2___default.a.container }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Sound editor is not supported in this browser." // eslint-disable-next-line max-len , id: "tw.soundEditorNotSupported" })); /* harmony default export */ __webpack_exports__["default"] = (SoundEditorNotSupported); /***/ }), /***/ "./src/components/tw-studioview/studioview.css": /*!*****************************************************!*\ !*** ./src/components/tw-studioview/studioview.css ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./studioview.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-studioview/studioview.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-studioview/studioview.js": /*!****************************************************!*\ !*** ./src/components/tw-studioview/studioview.js ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _studioview_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./studioview.css */ "./src/components/tw-studioview/studioview.css"); /* harmony import */ var _studioview_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_studioview_css__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__); /* eslint-disable */ // Imported from: // https://github.com/forkphorus/forkphorus/tree/master/studioview // With changes to make it work properly in the scratch-gui environment. // todo: we have to see if we are leaking memory when this is mounted and unmounted, esp. because of event listeners // todo: use react-intl for translations /** * @class */ var StudioView = function StudioView() { this.offset = 0; this.ended = false; this.loadingPage = false; this.unusedPlaceholders = []; this.root = document.createElement('div'); this.root.className = _studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewRoot; this.projectList = document.createElement('div'); this.projectList.className = _studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewList; this.root.appendChild(this.projectList); if ('IntersectionObserver' in window) { this.intersectionObserver = new IntersectionObserver(this.handleIntersection.bind(this), { root: this.projectList }); this.loadNextPageObserver = new IntersectionObserver(this.handleLoadNextPageIntersection.bind(this), { root: this.projectList }); } else { this.intersectionObserver = null; this.loadNextPageObserver = null; } // will be filled in by studioview.jsx this.messages = { AUTHOR_ATTRIBUTION: '', PROJECT_HOVER_TEXT: '', LOAD_ERROR: '' }; }; /** * Add a project to the view. * An unused placeholder element may be used, or it may be created. */ StudioView.prototype.addProject = function (details) { var el; if (this.unusedPlaceholders.length) { el = this.unusedPlaceholders.shift(); } else { el = this.createPlaceholder(); this.projectList.appendChild(el); } this.placeholderToProject(el, details.id, details.title, details.author, details.featured); }; /** * Create an element that will load only when it becomes visible. */ StudioView.prototype.createLazyImage = function (src) { var el = document.createElement('img'); if (this.intersectionObserver) { this.intersectionObserver.observe(el); el.dataset.src = src; } else { // then we just won't lazy load it el.src = src; } return el; }; /** * Create a placeholder or placeholder element. */ StudioView.prototype.createPlaceholder = function () { var el = document.createElement('a'); el.className = classnames__WEBPACK_IMPORTED_MODULE_1___default()(_studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewProject, _studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewPlaceholder); var thumbnail = document.createElement('div'); thumbnail.className = _studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewThumbnail; var title = document.createElement('div'); title.className = _studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewTitle; var author = document.createElement('div'); author.className = _studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewAuthor; el.thumbnailEl = thumbnail; el.titleEl = title; el.authorEl = author; el.appendChild(thumbnail); el.appendChild(title); el.appendChild(author); return el; }; /** * Convert a placeholder element made by createPlaceholder to a project element. */ StudioView.prototype.placeholderToProject = function (el, id, title, author, featured) { el.className = classnames__WEBPACK_IMPORTED_MODULE_1___default()(_studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewProject, _studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewLoaded); if (featured == true) { el.className = classnames__WEBPACK_IMPORTED_MODULE_1___default()(_studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewProject, _studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewLoaded, _studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.featuredStudioviewProject); } el.dataset.id = id; el.dataset.title = title; el.dataset.author = author; el.title = this.messages.PROJECT_HOVER_TEXT.replace('$author', author).replace('$title', title); el.href = StudioView.PROJECT_PAGE.replace('$id', id); var thumbnailSrc = StudioView.THUMBNAIL_SRC.replace('$id', id); var thumbnailImg = this.createLazyImage(thumbnailSrc); el.thumbnailEl.appendChild(thumbnailImg); el.titleEl.innerText = title; el.authorEl.innerText = this.messages.AUTHOR_ATTRIBUTION.replace('$author', author); el.addEventListener('click', this.handleClick.bind(this), true); el.addEventListener('keydown', this.handleKeyDown.bind(this), true); return el; }; /** * Adds an error message to the list. */ StudioView.prototype.addErrorElement = function () { var el = document.createElement('div'); el.innerText = this.messages.LOAD_ERROR; el.className = _studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewError; this.projectList.appendChild(el); }; StudioView.prototype.handleLoadNextPageIntersection = function (e) { for (var i = 0; i < e.length; i++) { var intersection = e[i]; if (intersection.isIntersecting && this.canLoadNext()) { this.loadNextPage(); } } }; // Click a project element or a child of a project element StudioView.prototype.clickProject = function (el) { while (!el.classList.contains(_studioview_css__WEBPACK_IMPORTED_MODULE_0___default.a.studioviewProject)) { el = el.parentNode; } var id = el.dataset.id; this.onselect(id, el); }; // Called when click is fired on a project element StudioView.prototype.handleClick = function (e) { e.preventDefault(); this.clickProject(e.target); }; // Called when keydown is fired on a project element StudioView.prototype.handleKeyDown = function (e) { if (e.keyCode === 13) { // treat enter (13) as click e.preventDefault(); this.clickProject(e.target); } }; // Called by the IntersectionObserver when it sees an intersection StudioView.prototype.handleIntersection = function (entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { var target = entry.target; target.src = target.dataset.src; target.dataset.src = ''; target.className = ''; observer.unobserve(target); } }); }; /** * Determines whether it is safe to attempt to load the next page. */ StudioView.prototype.canLoadNext = function () { return !this.loadingPage && !this.ended; }; /** * Remove all unused placeholder elements. */ StudioView.prototype.cleanupPlaceholders = function () { while (this.unusedPlaceholders.length) { var el = this.unusedPlaceholders.pop(); this.projectList.removeChild(el); } }; /** * Add placeholder placeholder elements. */ StudioView.prototype.addPlaceholders = function () { for (var i = 0; i < StudioView.PLACEHOLDER_COUNT; i++) { var el = this.createPlaceholder(); this.unusedPlaceholders.push(el); this.projectList.appendChild(el); } }; /** * Make changes to the order of projects. * Default shuffler does nothing. */ StudioView.prototype.shuffler = function (projects) { return projects; }; /** * Begins loading the next page. */ StudioView.prototype.loadNextPage = function () { if (this.loadingPage) { throw new Error('Already loading the next page'); } if (this.ended) { throw new Error('There are no more pages to load'); } if (this.unusedPlaceholders.length === 0) { this.addPlaceholders(); } if (this.loadNextPageObserver) { this.loadNextPageObserver.disconnect(); } this.root.setAttribute('loading', ''); this.loadingPage = true; var xhr = new XMLHttpRequest(); xhr.responseType = 'json'; xhr.onload = function () { var rawProjects = xhr.response; if (!Array.isArray(rawProjects)) { xhr.onerror(); return; } var projects = []; for (var i = 0; i < rawProjects.length; i++) { var p = rawProjects[i]; projects.push({ id: p.id, title: p.title, author: p.author.username, featured: p.featured }); } projects = this.shuffler(projects); for (var i = 0; i < projects.length; i++) { this.addProject(projects[i]); } this.cleanupPlaceholders(); if (rawProjects.length === 40) { if (this.loadNextPageObserver) { this.loadNextPageObserver.observe(this.projectList.lastChild); } } else { this.ended = true; this.onend(); } this.offset += projects.length; this.loadingPage = false; this.root.removeAttribute('loading'); this.onpageload(); }.bind(this); xhr.onerror = function () { this.root.setAttribute('error', ''); this.cleanupPlaceholders(); this.addErrorElement(); this.ended = true; }.bind(this); var url = StudioView.STUDIO_API + "/projects/getprojects"; xhr.open('GET', url); xhr.send(); }; StudioView.prototype.getURL = function () { return 'no studio'; }; StudioView.prototype.onselect = function (id, el) {}; StudioView.prototype.onpageload = function () {}; StudioView.prototype.onend = function () {}; StudioView.STUDIO_API = 'https://projects.penguinmod.com/api/v1'; // The URL to download thumbnails from. // $id is replaced with the project's ID. StudioView.THUMBNAIL_SRC = 'https://projects.penguinmod.com/api/v1/projects/getproject?projectID=$id&requestType=thumbnail'; // The URL for project pages. // $id is replaced with the project ID. StudioView.PROJECT_PAGE = 'https://studio.penguinmod.com/#$id'; // The amount of "placeholders" to insert before the next page loads. StudioView.PLACEHOLDER_COUNT = 9; /* harmony default export */ __webpack_exports__["default"] = (StudioView); /***/ }), /***/ "./src/components/tw-studioview/studioview.jsx": /*!*****************************************************!*\ !*** ./src/components/tw-studioview/studioview.jsx ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _studioview__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./studioview */ "./src/components/tw-studioview/studioview.js"); /* harmony import */ var _studioview_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./studioview.css */ "./src/components/tw-studioview/studioview.css"); /* harmony import */ var _studioview_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_studioview_css__WEBPACK_IMPORTED_MODULE_6__); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({ authorAttribution: { "id": "tw.studioview.authorAttribution", "defaultMessage": "by {author}" }, hoverText: { "id": "tw.studioview.hoverText", "defaultMessage": "{title} by {author}" }, error: { "id": "tw.studioview.error", "defaultMessage": "There was an error loading the next page of projects." } }); class StudioViewComponent extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleSelect', 'ref']); } componentDidMount() { this.studioView = new _studioview__WEBPACK_IMPORTED_MODULE_5__["default"](); this.studioView.messages.AUTHOR_ATTRIBUTION = this.props.intl.formatMessage(messages.authorAttribution, { // studioview uses $-based variables author: '$author' }); this.studioView.messages.PROJECT_HOVER_TEXT = this.props.intl.formatMessage(messages.hoverText, { // studioview uses $-based variables author: '$author', title: '$title' }); this.studioView.messages.LOAD_ERROR = this.props.intl.formatMessage(messages.error); if (this.props.placeholder) { this.studioView.addPlaceholders(); } else { this.studioView.loadNextPage(); } this.studioView.onselect = this.handleSelect; this.el.appendChild(this.studioView.root); } componentDidUpdate(prevProps) { if (prevProps.placeholder && !this.props.placeholder) { this.studioView.loadNextPage(); } } handleSelect(id) { this.props.onSelect(id); /** * fuck this bullshity ass design paradigm, i cant find where the FUCK this event chain actually ends * implicitly assume that what ever the fuck happens above will synchronously put the id into the url to be used later */ window.location.reload(); } ref(el) { this.el = el; } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(_studioview_css__WEBPACK_IMPORTED_MODULE_6___default.a.wrapper), ref: this.ref }); } } StudioViewComponent.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"].isRequired, placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(StudioViewComponent)); /***/ }), /***/ "./src/components/tw-username-modal/username-modal.css": /*!*************************************************************!*\ !*** ./src/components/tw-username-modal/username-modal.css ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./username-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/tw-username-modal/username-modal.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/tw-username-modal/username-modal.jsx": /*!*************************************************************!*\ !*** ./src/components/tw-username-modal/username-modal.jsx ***! \*************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _lib_brand__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../lib/brand */ "./src/lib/brand.js"); /* harmony import */ var _username_modal_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./username-modal.css */ "./src/components/tw-username-modal/username-modal.css"); /* harmony import */ var _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_username_modal_css__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _lib_isScratchDesktop_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../lib/isScratchDesktop.js */ "./src/lib/isScratchDesktop.js"); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["defineMessages"])({ title: { "id": "tw.usernameModal.title", "defaultMessage": "Change Username" } }); const UsernameModalComponent = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.modalContent, onRequestClose: props.onCancel, contentLabel: props.intl.formatMessage(messages.title), id: "usernameModal" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.body }, props.mustChangeUsername && !props.usernameLoggedIn && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", { className: classnames__WEBPACK_IMPORTED_MODULE_5___default()(_username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.helpText, _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.mustChange) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Sorry, the cloud variable server thinks your username may be unsafe. Please change it to something else or {resetIt}.", id: "tw.usernameModal.mustChange", values: { resetIt: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("a", { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.resetLink, onClick: props.onReset }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "reset it (recommended)", id: "tw.usernameModal.mustChange.resetIt" })) } }))), Object(_lib_isScratchDesktop_js__WEBPACK_IMPORTED_MODULE_8__["default"])() ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.helpText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "New username:", id: "tw.usernameModal.new" })) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("input", { autoFocus: true, className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.textInput, value: props.value, onChange: props.onChange, onFocus: props.onFocus, onKeyPress: props.onKeyPress, pattern: "^[a-zA-Z0-9_\\-]*$", maxLength: "20", spellCheck: "false", disabled: props.usernameLoggedIn })), !props.usernameLoggedIn ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.helpText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "You are currently logged in as {USERNAME}. You cannot change your username unless you log out of {APP_NAME}.", id: "pm.usernameModal.loggedIn", values: { USERNAME: props.value, APP_NAME: _lib_brand__WEBPACK_IMPORTED_MODULE_6__["APP_NAME"] } }))), Object(_lib_isScratchDesktop_js__WEBPACK_IMPORTED_MODULE_8__["default"])() || props.usernameLoggedIn ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.helpText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "This value will be stored in your browser's storage. It may be logged when you interact with projects that contain cloud variables.", id: "tw.usernameModal.help" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.helpText }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Values that do not correspond to a valid Scratch account will typically be rejected by the cloud variable server. We recommend leaving it as-is or changing it to your Scratch username.", id: "tw.usernameModal.help2" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.buttonRow }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.cancelButton, onClick: props.onReset, disabled: props.usernameLoggedIn }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Reset", id: "tw.usernameModal.reset" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.cancelButton, onClick: props.onCancel }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "Cancel", id: "gui.prompt.cancel" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", { className: _username_modal_css__WEBPACK_IMPORTED_MODULE_7___default.a.okButton, onClick: props.onOk, disabled: !props.valueValid || props.usernameLoggedIn }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { defaultMessage: "OK", id: "gui.prompt.ok" }))))); UsernameModalComponent.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_0__["intlShape"], mustChangeUsername: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, valueValid: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, usernameLoggedIn: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onKeyPress: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onOk: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onReset: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(UsernameModalComponent)); /***/ }), /***/ "./src/components/variables-tab/icon--search.svg": /*!*******************************************************!*\ !*** ./src/components/variables-tab/icon--search.svg ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/33152e09f092ce18fe776f1d670ac99f.svg"; /***/ }), /***/ "./src/components/variables-tab/variables-tab.css": /*!********************************************************!*\ !*** ./src/components/variables-tab/variables-tab.css ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./variables-tab.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/variables-tab/variables-tab.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/variables-tab/variables-tab.jsx": /*!********************************************************!*\ !*** ./src/components/variables-tab/variables-tab.jsx ***! \********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _forms_input_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../forms/input.jsx */ "./src/components/forms/input.jsx"); /* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _variables_tab_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./variables-tab.css */ "./src/components/variables-tab/variables-tab.css"); /* harmony import */ var _variables_tab_css__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_variables_tab_css__WEBPACK_IMPORTED_MODULE_8__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["defineMessages"])({ searchPlaceholder: { "id": "tw.variablesTab.search", "defaultMessage": "Search" }, sprite: { "id": "tw.variablesTab.sprite", "defaultMessage": "Variables for this sprite" }, global: { "id": "tw.variablesTab.global", "defaultMessage": "Variables for all sprites" }, showLarge: { "id": "tw.variablesTab.showLarge", "defaultMessage": "Click to display very large value." } }); class VariablesTab extends react__WEBPACK_IMPORTED_MODULE_4___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default()(this, ["handleSearch", "renderVariable"]); this.state = { query: '' }; } handleSearch(event) { this.setState({ query: String(event.target.value).toLowerCase() }); } renderVariable(variable) { const isTooBig = (variable.type === 'list' ? variable.value.join('\n').length > 5000000 : String(variable.value).length > 1000000) && !this.props.showLargeValue[variable.id]; const isEditing = variable.id === this.props.editingVariableId; const isEditingName = isEditing && this.props.editingVariableInput === 'name'; const isEditingValue = isEditing && this.props.editingVariableInput === 'value'; const displayVariableValue = isEditingValue ? this.props.editingVariableEditValue : variable.type === 'list' ? variable.value.join('\n') : variable.value; const inputValueProps = { onFocus: () => this.props.onClickVariableValue(variable), onBlur: event => this.props.onEditVariableValue(event, variable), onChange: this.props.onTypeVariableValue, onKeyDown: event => this.props.onTypeVariableValue(event, variable) }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("tr", { key: variable.id }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("td", { className: _variables_tab_css__WEBPACK_IMPORTED_MODULE_8___default.a.variableName }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("input", { onFocus: () => this.props.onClickVariableName(variable), onBlur: event => this.props.onEditVariableName(event, variable), onChange: this.props.onTypeVariableName, onKeyDown: event => this.props.onTypeVariableName(event, variable), value: isEditingName ? this.props.editingVariableEditName : variable.name })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("td", { className: _variables_tab_css__WEBPACK_IMPORTED_MODULE_8___default.a.variableValue }, isTooBig ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("button", { onClick: () => this.props.onClickShowLarge(variable.id), className: _variables_tab_css__WEBPACK_IMPORTED_MODULE_8___default.a.valueTooBig }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], messages.showLarge)) : variable.type === 'list' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("textarea", _extends({}, inputValueProps, { value: displayVariableValue })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("input", _extends({}, inputValueProps, { value: displayVariableValue })))); } render() { const { localVariables, globalVariables, intl } = this.props; const filteredLocal = localVariables.filter(varr => varr.name.toLowerCase().includes(this.state.query)); const filteredGlobal = globalVariables.filter(varr => varr.name.toLowerCase().includes(this.state.query)); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", { className: _variables_tab_css__WEBPACK_IMPORTED_MODULE_8___default.a.editorWrapper }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { className: _variables_tab_css__WEBPACK_IMPORTED_MODULE_8___default.a.editorContainer }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_forms_input_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { placeholder: intl.formatMessage(messages.searchPlaceholder), className: _variables_tab_css__WEBPACK_IMPORTED_MODULE_8___default.a.searchBar, onChange: this.handleSearch }), filteredLocal.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("span", { className: _variables_tab_css__WEBPACK_IMPORTED_MODULE_8___default.a.heading }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], messages.sprite)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("table", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("tbody", null, filteredLocal.map(this.renderVariable)))), filteredGlobal.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("span", { className: _variables_tab_css__WEBPACK_IMPORTED_MODULE_8___default.a.heading }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], messages.global)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("table", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("tbody", null, filteredGlobal.map(this.renderVariable)))))); } } VariablesTab.propTypes = { localVariables: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.array, globalVariables: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.array, showLargeValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object, editingVariableId: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, editingVariableInput: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, editingVariableEditName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, editingVariableEditValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string, onClickShowLarge: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onClickVariableName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onClickVariableValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onEditVariableName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onEditVariableValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onTypeVariableName: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onTypeVariableValue: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, intl: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.object.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(VariablesTab)); /***/ }), /***/ "./src/components/watermark/watermark.css": /*!************************************************!*\ !*** ./src/components/watermark/watermark.css ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./watermark.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/watermark/watermark.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/watermark/watermark.jsx": /*!************************************************!*\ !*** ./src/components/watermark/watermark.jsx ***! \************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _watermark_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./watermark.css */ "./src/components/watermark/watermark.css"); /* harmony import */ var _watermark_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_watermark_css__WEBPACK_IMPORTED_MODULE_2__); const Watermark = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { className: _watermark_css__WEBPACK_IMPORTED_MODULE_2___default.a.spriteImage, src: props.costumeURL }); Watermark.propTypes = { costumeURL: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (Watermark); /***/ }), /***/ "./src/components/waveform/waveform.css": /*!**********************************************!*\ !*** ./src/components/waveform/waveform.css ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../../node_modules/css-loader??ref--5-1!../../../node_modules/postcss-loader/src??postcss!./waveform.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/waveform/waveform.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/components/waveform/waveform.jsx": /*!**********************************************!*\ !*** ./src/components/waveform/waveform.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _waveform_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./waveform.css */ "./src/components/waveform/waveform.css"); /* harmony import */ var _waveform_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_waveform_css__WEBPACK_IMPORTED_MODULE_2__); // Waveform is expensive to compute, make sure it only updates when data does // by using PureComponent. In future can be changed back to function with React.memo // eslint-disable-next-line react/prefer-stateless-function class Waveform extends react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent { render() { const { width, height, data } = this.props; // Never want a density of points higher than the number of pixels // This is very conservative, could be far fewer points because of curve smoothing. // Drawing too many points seems to cause an explosion in browser // composite time when animating the playhead const takeEveryN = Math.ceil(data.length / width); const filteredData = takeEveryN === 1 ? data.slice(0) : data.filter((_, i) => i % takeEveryN === 0); // Need at least two points to render waveform. if (filteredData.length === 1) { filteredData.push(filteredData[0]); } const maxIndex = filteredData.length - 1; const points = [...filteredData.map((v, i) => [width * (i / maxIndex), height * v / 2]), ...filteredData.reverse().map((v, i) => [width * (1 - i / maxIndex), -height * v / 2])]; const pathComponents = points.map((_ref, i) => { let [x, y] = _ref; const [nx, ny] = points[i < points.length - 1 ? i + 1 : 0]; return "L".concat(x, " ").concat(y, " ").concat((x + nx) / 2, " ").concat((y + ny) / 2); }); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("svg", { className: _waveform_css__WEBPACK_IMPORTED_MODULE_2___default.a.container, viewBox: "0 0 ".concat(width, " ").concat(height) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("g", { transform: "scale(1, -1) translate(0, -".concat(height / 2, ")") }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("path", { className: _waveform_css__WEBPACK_IMPORTED_MODULE_2___default.a.waveformPath, d: "M0 0".concat(pathComponents.join(' '), "Z"), strokeLinejoin: 'round', strokeWidth: 1 }))); } } Waveform.propTypes = { data: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number), height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, width: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }; /* harmony default export */ __webpack_exports__["default"] = (Waveform); /***/ }), /***/ "./src/containers/alert.jsx": /*!**********************************!*\ !*** ./src/containers/alert.jsx ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sb3-downloader.jsx */ "./src/containers/sb3-downloader.jsx"); /* harmony import */ var _components_alerts_alert_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/alerts/alert.jsx */ "./src/components/alerts/alert.jsx"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_connection_modal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/connection-modal */ "./src/reducers/connection-modal.js"); /* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js"); class Alert extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_1___default()(this, ['handleOnCloseAlert', 'handleOnReconnect']); } handleOnCloseAlert() { this.props.onCloseAlert(this.props.index); } handleOnReconnect() { this.props.onOpenConnectionModal(this.props.extensionId); this.handleOnCloseAlert(); } render() { const { closeButton, content, extensionName, index, // eslint-disable-line no-unused-vars level, iconSpinner, iconURL, message, onSaveNow, showDownload, showReconnect, showSaveNow } = this.props; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], null, (_, downloadProject) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_alerts_alert_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { closeButton: closeButton, content: content, extensionName: extensionName, iconSpinner: iconSpinner, iconURL: iconURL, level: level, message: message, showDownload: showDownload, showReconnect: showReconnect, showSaveNow: showSaveNow, onCloseAlert: this.handleOnCloseAlert, onDownload: downloadProject, onReconnect: this.handleOnReconnect, onSaveNow: onSaveNow })); } } const mapStateToProps = () => ({}); const mapDispatchToProps = dispatch => ({ onOpenConnectionModal: id => { dispatch(Object(_reducers_connection_modal__WEBPACK_IMPORTED_MODULE_7__["setConnectionModalExtensionId"])(id)); dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_6__["openConnectionModal"])()); }, onSaveNow: () => { dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_8__["manualUpdateProject"])()); } }); Alert.propTypes = { closeButton: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, content: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.element, extensionId: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, extensionName: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, iconSpinner: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, iconURL: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, index: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, level: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired, message: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, onCloseAlert: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, onOpenConnectionModal: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onSaveNow: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, showDownload: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, showReconnect: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, showSaveNow: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(Alert)); /***/ }), /***/ "./src/containers/alerts.jsx": /*!***********************************!*\ !*** ./src/containers/alerts.jsx ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js"); /* harmony import */ var _components_alerts_alerts_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/alerts/alerts.jsx */ "./src/components/alerts/alerts.jsx"); const Alerts = _ref => { let { alertsList, className, onCloseAlert } = _ref; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_alerts_alerts_jsx__WEBPACK_IMPORTED_MODULE_4__["default"] // only display standard and extension alerts here , { alertsList: Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_3__["filterPopupAlerts"])(alertsList), className: className, onCloseAlert: onCloseAlert }); }; Alerts.propTypes = { alertsList: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object), className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onCloseAlert: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; const mapStateToProps = state => ({ alertsList: state.scratchGui.alerts.alertsList }); const mapDispatchToProps = dispatch => ({ onCloseAlert: index => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_3__["closeAlert"])(index)) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(Alerts)); /***/ }), /***/ "./src/containers/audio-selector.jsx": /*!*******************************************!*\ !*** ./src/containers/audio-selector.jsx ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_audio_trimmer_audio_selector_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/audio-trimmer/audio-selector.jsx */ "./src/components/audio-trimmer/audio-selector.jsx"); /* harmony import */ var _lib_touch_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/touch-utils */ "./src/lib/touch-utils.js"); /* harmony import */ var _lib_drag_recognizer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/drag-recognizer */ "./src/lib/drag-recognizer.js"); const MIN_LENGTH = 0.01; const MIN_DURATION = 500; class AudioSelector extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleNewSelectionMouseDown', 'handleTrimStartMouseDown', 'handleTrimEndMouseDown', 'handleTrimStartMouseMove', 'handleTrimEndMouseMove', 'handleTrimStartMouseUp', 'handleTrimEndMouseUp', 'storeRef']); this.state = { trimStart: props.trimStart, trimEnd: props.trimEnd }; this.clickStartTime = 0; this.trimStartDragRecognizer = new _lib_drag_recognizer__WEBPACK_IMPORTED_MODULE_5__["default"]({ onDrag: this.handleTrimStartMouseMove, onDragEnd: this.handleTrimStartMouseUp, touchDragAngle: 90, distanceThreshold: 0 }); this.trimEndDragRecognizer = new _lib_drag_recognizer__WEBPACK_IMPORTED_MODULE_5__["default"]({ onDrag: this.handleTrimEndMouseMove, onDragEnd: this.handleTrimEndMouseUp, touchDragAngle: 90, distanceThreshold: 0 }); } componentWillReceiveProps(newProps) { const { trimStart, trimEnd } = this.props; if (newProps.trimStart === trimStart && newProps.trimEnd === trimEnd) return; this.setState({ trimStart: newProps.trimStart, trimEnd: newProps.trimEnd }); } clearSelection() { this.props.onSetTrim(null, null); } handleNewSelectionMouseDown(e) { const { width, left } = this.containerElement.getBoundingClientRect(); this.initialTrimEnd = (Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_4__["getEventXY"])(e).x - left) / width; this.initialTrimStart = this.initialTrimEnd; this.props.onSetTrim(this.initialTrimStart, this.initialTrimEnd); this.clickStartTime = Date.now(); this.containerSize = width; this.trimEndDragRecognizer.start(e); e.preventDefault(); } handleTrimStartMouseMove(currentOffset, initialOffset) { const dx = (currentOffset.x - initialOffset.x) / this.containerSize; const newTrim = Math.max(0, Math.min(1, this.initialTrimStart + dx)); if (newTrim > this.initialTrimEnd) { this.setState({ trimStart: this.initialTrimEnd, trimEnd: newTrim }); } else { this.setState({ trimStart: newTrim, trimEnd: this.initialTrimEnd }); } } handleTrimEndMouseMove(currentOffset, initialOffset) { const dx = (currentOffset.x - initialOffset.x) / this.containerSize; const newTrim = Math.min(1, Math.max(0, this.initialTrimEnd + dx)); if (newTrim < this.initialTrimStart) { this.setState({ trimStart: newTrim, trimEnd: this.initialTrimStart }); } else { this.setState({ trimStart: this.initialTrimStart, trimEnd: newTrim }); } } handleTrimStartMouseUp() { this.props.onSetTrim(this.state.trimStart, this.state.trimEnd); } handleTrimEndMouseUp() { // If the selection was made quickly (tooFast) and is small (tooShort), // deselect instead. This allows click-to-deselect even if you drag // a little bit by accident. It also allows very quickly making a // selection, as long as it is above a minimum length. const tooFast = Date.now() - this.clickStartTime < MIN_DURATION; const tooShort = this.state.trimEnd - this.state.trimStart < MIN_LENGTH; if (tooFast && tooShort) { this.clearSelection(); } else { this.props.onSetTrim(this.state.trimStart, this.state.trimEnd); } } handleTrimStartMouseDown(e) { this.containerSize = this.containerElement.getBoundingClientRect().width; this.trimStartDragRecognizer.start(e); this.initialTrimStart = this.props.trimStart; this.initialTrimEnd = this.props.trimEnd; e.stopPropagation(); e.preventDefault(); } handleTrimEndMouseDown(e) { this.containerSize = this.containerElement.getBoundingClientRect().width; this.trimEndDragRecognizer.start(e); this.initialTrimEnd = this.props.trimEnd; this.initialTrimStart = this.props.trimStart; e.stopPropagation(); e.preventDefault(); } storeRef(el) { this.containerElement = el; } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_audio_trimmer_audio_selector_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { containerRef: this.storeRef, playhead: this.props.playhead, trimEnd: this.state.trimEnd, trimStart: this.state.trimStart, onNewSelectionMouseDown: this.handleNewSelectionMouseDown, onTrimEndMouseDown: this.handleTrimEndMouseDown, onTrimStartMouseDown: this.handleTrimStartMouseDown }); } } AudioSelector.propTypes = { onSetTrim: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, playhead: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, trimEnd: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, trimStart: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }; /* harmony default export */ __webpack_exports__["default"] = (AudioSelector); /***/ }), /***/ "./src/containers/audio-trimmer.jsx": /*!******************************************!*\ !*** ./src/containers/audio-trimmer.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_audio_trimmer_audio_trimmer_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/audio-trimmer/audio-trimmer.jsx */ "./src/components/audio-trimmer/audio-trimmer.jsx"); /* harmony import */ var _lib_drag_recognizer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/drag-recognizer */ "./src/lib/drag-recognizer.js"); const MIN_LENGTH = 0.01; // Used to stop sounds being trimmed smaller than 1% class AudioTrimmer extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleTrimStartMouseDown', 'handleTrimEndMouseDown', 'handleTrimStartMouseMove', 'handleTrimEndMouseMove', 'storeRef']); this.trimStartDragRecognizer = new _lib_drag_recognizer__WEBPACK_IMPORTED_MODULE_4__["default"]({ onDrag: this.handleTrimStartMouseMove, touchDragAngle: 90, distanceThreshold: 0 }); this.trimEndDragRecognizer = new _lib_drag_recognizer__WEBPACK_IMPORTED_MODULE_4__["default"]({ onDrag: this.handleTrimEndMouseMove, touchDragAngle: 90, distanceThreshold: 0 }); } handleTrimStartMouseMove(currentOffset, initialOffset) { const dx = (currentOffset.x - initialOffset.x) / this.containerSize; const newTrim = Math.max(0, Math.min(this.props.trimEnd - MIN_LENGTH, this.initialTrim + dx)); this.props.onSetTrimStart(newTrim); } handleTrimEndMouseMove(currentOffset, initialOffset) { const dx = (currentOffset.x - initialOffset.x) / this.containerSize; const newTrim = Math.min(1, Math.max(this.props.trimStart + MIN_LENGTH, this.initialTrim + dx)); this.props.onSetTrimEnd(newTrim); } handleTrimStartMouseDown(e) { this.containerSize = this.containerElement.getBoundingClientRect().width; this.trimStartDragRecognizer.start(e); this.initialTrim = this.props.trimStart; } handleTrimEndMouseDown(e) { this.containerSize = this.containerElement.getBoundingClientRect().width; this.trimEndDragRecognizer.start(e); this.initialTrim = this.props.trimEnd; } storeRef(el) { this.containerElement = el; } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_audio_trimmer_audio_trimmer_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { containerRef: this.storeRef, playhead: this.props.playhead, trimEnd: this.props.trimEnd, trimStart: this.props.trimStart, onTrimEndMouseDown: this.handleTrimEndMouseDown, onTrimStartMouseDown: this.handleTrimStartMouseDown }); } } AudioTrimmer.propTypes = { onSetTrimEnd: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onSetTrimStart: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, playhead: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, trimEnd: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, trimStart: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }; /* harmony default export */ __webpack_exports__["default"] = (AudioTrimmer); /***/ }), /***/ "./src/containers/auto-scanning-step.jsx": /*!***********************************************!*\ !*** ./src/containers/auto-scanning-step.jsx ***! \***********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_connection_modal_auto_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/connection-modal/auto-scanning-step.jsx */ "./src/components/connection-modal/auto-scanning-step.jsx"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); class AutoScanningStep extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handlePeripheralListUpdate', 'handlePeripheralScanTimeout', 'handleStartScan', 'handleRefresh']); this.state = { phase: _components_connection_modal_auto_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].prescan }; } componentWillUnmount() { // @todo: stop the peripheral scan here this.unbindPeripheralUpdates(); } handlePeripheralScanTimeout() { this.setState({ phase: _components_connection_modal_auto_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].notfound }); this.unbindPeripheralUpdates(); } handlePeripheralListUpdate(newList) { // TODO: sort peripherals by signal strength? so they don't jump around const peripheralArray = Object.keys(newList).map(id => newList[id]); if (peripheralArray.length > 0) { this.props.onConnecting(peripheralArray[0].peripheralId); } } bindPeripheralUpdates() { this.props.vm.on('PERIPHERAL_LIST_UPDATE', this.handlePeripheralListUpdate); this.props.vm.on('PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout); } unbindPeripheralUpdates() { this.props.vm.removeListener('PERIPHERAL_LIST_UPDATE', this.handlePeripheralListUpdate); this.props.vm.removeListener('PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout); } handleRefresh() { // @todo: stop the peripheral scan here, it is more important for auto scan // due to timeout and cancellation this.setState({ phase: _components_connection_modal_auto_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].prescan }); this.unbindPeripheralUpdates(); } handleStartScan() { this.bindPeripheralUpdates(); this.props.vm.scanForPeripheral(this.props.extensionId); this.setState({ phase: _components_connection_modal_auto_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].pressbutton }); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_connection_modal_auto_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { connectionTipIconURL: this.props.connectionTipIconURL, phase: this.state.phase, title: this.props.extensionId, onRefresh: this.handleRefresh, onStartScan: this.handleStartScan }); } } AutoScanningStep.propTypes = { connectionTipIconURL: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, extensionId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, onConnecting: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (AutoScanningStep); /***/ }), /***/ "./src/containers/backdrop-library.jsx": /*!*********************************************!*\ !*** ./src/containers/backdrop-library.jsx ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/libraries/tw-async-libraries */ "./src/lib/libraries/tw-async-libraries.js"); /* harmony import */ var _lib_libraries_backdrop_tags__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/libraries/backdrop-tags */ "./src/lib/libraries/backdrop-tags.js"); /* harmony import */ var _components_library_library_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/library/library.jsx */ "./src/components/library/library.jsx"); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ libraryTitle: { "id": "gui.costumeLibrary.chooseABackdrop", "defaultMessage": "Choose a Backdrop" } }); class BackdropLibrary extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleItemSelect']); } handleItemSelect(item) { const vmBackdrop = { name: item.name, rotationCenterX: item.rotationCenterX, rotationCenterY: item.rotationCenterY, bitmapResolution: item.bitmapResolution, skinId: null }; if (item.fromPenguinModLibrary) { vmBackdrop.fromPenguinModLibrary = true; vmBackdrop.libraryId = item.libraryFilePage; vmBackdrop.dataFormat = item.dataFormat; } // Do not switch to stage, just add the backdrop this.props.vm.addBackdrop(item.md5ext, vmBackdrop); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_library_library_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { data: Object(_lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_5__["getBackdropLibrary"])(), id: "backdropLibrary", actor: "CostumeLibrary", header: "Backdrops", tags: _lib_libraries_backdrop_tags__WEBPACK_IMPORTED_MODULE_6__["default"], title: this.props.intl.formatMessage(messages.libraryTitle), onItemSelected: this.handleItemSelect, onRequestClose: this.props.onRequestClose }); } } BackdropLibrary.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(BackdropLibrary)); /***/ }), /***/ "./src/containers/backpack.jsx": /*!*************************************!*\ !*** ./src/containers/backpack.jsx ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _components_backpack_backpack_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/backpack/backpack.jsx */ "./src/components/backpack/backpack.jsx"); /* harmony import */ var _lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/backpack-api */ "./src/lib/backpack-api.js"); /* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/drag-constants */ "./src/lib/drag-constants.js"); /* harmony import */ var _lib_drop_area_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/drop-area-hoc.jsx */ "./src/lib/drop-area-hoc.jsx"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _lib_storage__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/storage */ "./src/lib/storage.js"); /* harmony import */ var _lib_download_blob__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/download-blob */ "./src/lib/download-blob.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_11__); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } const dragTypes = [_lib_drag_constants__WEBPACK_IMPORTED_MODULE_6__["default"].COSTUME, _lib_drag_constants__WEBPACK_IMPORTED_MODULE_6__["default"].SOUND, _lib_drag_constants__WEBPACK_IMPORTED_MODULE_6__["default"].SPRITE]; const DroppableBackpack = Object(_lib_drop_area_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__["default"])(dragTypes)(_components_backpack_backpack_jsx__WEBPACK_IMPORTED_MODULE_4__["default"]); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ rename: { "id": "tw.backpack.rename", "defaultMessage": "New name:" } }); class Backpack extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleDrop', 'handleToggle', 'handleDelete', 'handleExport', 'handleRename', 'getBackpackAssetURL', 'getContents', 'handleMouseEnter', 'handleMouseLeave', 'handleBlockDragEnd', 'handleBlockDragUpdate', 'handleMore']); this.state = { // While the DroppableHOC manages drop interactions for asset tiles, // we still need to micromanage drops coming from the block workspace. // TODO this may be refactorable with the share-the-love logic in SpriteSelectorItem blockDragOutsideWorkspace: false, blockDragOverBackpack: false, error: false, itemsPerPage: 20, moreToLoad: false, loading: false, expanded: false, contents: [] }; // If a host is given, add it as a web source to the storage module // TODO remove the hacky flag that prevents double adding if (props.host && !_lib_storage__WEBPACK_IMPORTED_MODULE_9__["default"]._hasAddedBackpackSource && props.host !== _lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["LOCAL_API"]) { _lib_storage__WEBPACK_IMPORTED_MODULE_9__["default"].addWebSource([_lib_storage__WEBPACK_IMPORTED_MODULE_9__["default"].AssetType.ImageVector, _lib_storage__WEBPACK_IMPORTED_MODULE_9__["default"].AssetType.ImageBitmap, _lib_storage__WEBPACK_IMPORTED_MODULE_9__["default"].AssetType.Sound], this.getBackpackAssetURL); _lib_storage__WEBPACK_IMPORTED_MODULE_9__["default"]._hasAddedBackpackSource = true; } } componentDidMount() { this.props.vm.addListener('BLOCK_DRAG_END', this.handleBlockDragEnd); this.props.vm.addListener('BLOCK_DRAG_UPDATE', this.handleBlockDragUpdate); } componentWillUnmount() { this.props.vm.removeListener('BLOCK_DRAG_END', this.handleBlockDragEnd); this.props.vm.removeListener('BLOCK_DRAG_UPDATE', this.handleBlockDragUpdate); } getBackpackAssetURL(asset) { return "".concat(this.props.host, "/").concat(asset.assetId, ".").concat(asset.dataFormat); } handleToggle() { const newState = !this.state.expanded; this.setState({ expanded: newState, contents: [] }, () => { // Emit resize on window to get blocks to resize window.dispatchEvent(new Event('resize')); }); if (newState) { this.getContents(); } } handleError(error) { this.setState({ error: "".concat(error), loading: false }); // Log error to console and make the Promise reject. throw error; } handleDrop(dragInfo) { let payloader = null; let presaveAsset = null; switch (dragInfo.dragType) { case _lib_drag_constants__WEBPACK_IMPORTED_MODULE_6__["default"].COSTUME: payloader = _lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["costumePayload"]; presaveAsset = dragInfo.payload.asset; break; case _lib_drag_constants__WEBPACK_IMPORTED_MODULE_6__["default"].SOUND: payloader = _lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["soundPayload"]; presaveAsset = dragInfo.payload.asset; break; case _lib_drag_constants__WEBPACK_IMPORTED_MODULE_6__["default"].SPRITE: payloader = _lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["spritePayload"]; break; case _lib_drag_constants__WEBPACK_IMPORTED_MODULE_6__["default"].CODE: payloader = _lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["codePayload"]; break; } if (!payloader) return; // Creating the payload is async, so set loading before starting this.setState({ loading: true }, () => { payloader(dragInfo.payload, this.props.vm).then(payload => { // Force the asset to save to the asset server before storing in backpack // Ensures any asset present in the backpack is also on the asset server if (presaveAsset && !presaveAsset.clean && !this.props.host === _lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["LOCAL_API"]) { return _lib_storage__WEBPACK_IMPORTED_MODULE_9__["default"].store(presaveAsset.assetType, presaveAsset.dataFormat, presaveAsset.data, presaveAsset.assetId).then(() => payload); } return payload; }).then(payload => Object(_lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["saveBackpackObject"])(_objectSpread({ host: this.props.host, token: this.props.token, username: this.props.username }, payload))).then(item => { this.setState({ loading: false, contents: [item].concat(this.state.contents) }); }).catch(error => { this.handleError(error); }); }); } handleDelete(id) { this.setState({ loading: true }, () => { Object(_lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["deleteBackpackObject"])({ host: this.props.host, token: this.props.token, username: this.props.username, id: id }).then(() => { this.setState({ loading: false, contents: this.state.contents.filter(o => o.id !== id) }); }).catch(error => { this.handleError(error); }); }); } handleExport(id) { const item = this.findItemById(id); if (!item) return; if (!item.bodyData) return; const buffer = item.bodyData; const blob = new Blob([buffer], { type: item.mime }); let recommendedName = item.name; if (item.type === 'sprite') { recommendedName += '.pms'; } if (item.type === 'script') { recommendedName += '.pmb'; } Object(_lib_download_blob__WEBPACK_IMPORTED_MODULE_10__["default"])(recommendedName, blob); } findItemById(id) { return this.state.contents.find(i => i.id === id); } async handleRename(id) { const item = this.findItemById(id); // prompt() returns Promise in desktop app // eslint-disable-next-line no-alert const newName = await prompt(this.props.intl.formatMessage(messages.rename), item.name); if (!newName) { return; } this.setState({ loading: true }, () => { Object(_lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["updateBackpackObject"])(_objectSpread(_objectSpread({ host: this.props.host }, item), {}, { name: newName })).then(newItem => { this.setState({ loading: false, contents: this.state.contents.map(i => i === item ? newItem : i) }); }).catch(error => { this.handleError(error); }); }); } getContents() { if (this.props.token && this.props.username || this.props.host === _lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["LOCAL_API"]) { this.setState({ loading: true, error: false }, () => { Object(_lib_backpack_api__WEBPACK_IMPORTED_MODULE_5__["getBackpackContents"])({ host: this.props.host, token: this.props.token, username: this.props.username, offset: this.state.contents.length, limit: this.state.itemsPerPage }).then(contents => { this.setState({ contents: this.state.contents.concat(contents), moreToLoad: contents.length === this.state.itemsPerPage, loading: false }); }).catch(error => { this.handleError(error); }); }); } } handleBlockDragUpdate(isOutsideWorkspace) { this.setState({ blockDragOutsideWorkspace: isOutsideWorkspace }); } handleMouseEnter() { if (this.state.blockDragOutsideWorkspace) { this.setState({ blockDragOverBackpack: true }); } } handleMouseLeave() { this.setState({ blockDragOverBackpack: false }); } handleBlockDragEnd(blocks, topBlockId) { if (this.state.blockDragOverBackpack) { this.handleDrop({ dragType: _lib_drag_constants__WEBPACK_IMPORTED_MODULE_6__["default"].CODE, payload: { blockObjects: this.props.vm.exportStandaloneBlocks(blocks), topBlockId: topBlockId } }); } this.setState({ blockDragOverBackpack: false, blockDragOutsideWorkspace: false }); } handleMore() { this.getContents(); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(DroppableBackpack, { blockDragOver: this.state.blockDragOverBackpack, contents: this.state.contents, error: this.state.error, expanded: this.state.expanded, loading: this.state.loading, showMore: this.state.moreToLoad, onDelete: this.handleDelete, onExport: this.handleExport, onRename: this.handleRename, onDrop: this.handleDrop, onMore: this.handleMore, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onToggle: this.props.host ? this.handleToggle : null }); } } Backpack.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], host: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, token: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, username: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_11___default.a) }; const getTokenAndUsername = state => { // Look for the session state provided by scratch-www if (state.session && state.session.session && state.session.session.user) { return { token: state.session.session.user.token, username: state.session.session.user.username }; } // Otherwise try to pull testing params out of the URL, or return nulls // TODO a hack for testing the backpack const tokenMatches = window.location.href.match(/[?&]token=([^&]*)&?/); const usernameMatches = window.location.href.match(/[?&]username=([^&]*)&?/); return { token: tokenMatches ? tokenMatches[1] : null, username: usernameMatches ? usernameMatches[1] : null }; }; const mapStateToProps = state => Object.assign({ dragInfo: state.scratchGui.assetDrag, vm: state.scratchGui.vm, blockDrag: state.scratchGui.blockDrag }, getTokenAndUsername(state)); const mapDispatchToProps = () => ({}); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_8__["connect"])(mapStateToProps, mapDispatchToProps)(Backpack))); /***/ }), /***/ "./src/containers/blocks.jsx": /*!***********************************!*\ !*** ./src/containers/blocks.jsx ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.debounce */ "./node_modules/lodash.debounce/index.js"); /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_defaultsdeep__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.defaultsdeep */ "./node_modules/lodash.defaultsdeep/index.js"); /* harmony import */ var lodash_defaultsdeep__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_defaultsdeep__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _lib_make_toolbox_xml__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/make-toolbox-xml */ "./src/lib/make-toolbox-xml.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_blocks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/blocks */ "./src/lib/blocks.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _lib_log_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/log.js */ "./src/lib/log.js"); /* harmony import */ var _prompt_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./prompt.jsx */ "./src/containers/prompt.jsx"); /* harmony import */ var _components_blocks_blocks_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../components/blocks/blocks.jsx */ "./src/components/blocks/blocks.jsx"); /* harmony import */ var _extension_library_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./extension-library.jsx */ "./src/containers/extension-library.jsx"); /* harmony import */ var _lib_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../lib/libraries/extensions/index.jsx */ "./src/lib/libraries/extensions/index.jsx"); /* harmony import */ var _custom_procedures_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./custom-procedures.jsx */ "./src/containers/custom-procedures.jsx"); /* harmony import */ var _lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/error-boundary-hoc.jsx */ "./src/lib/error-boundary-hoc.jsx"); /* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/layout-constants */ "./src/lib/layout-constants.js"); /* harmony import */ var _lib_drop_area_hoc_jsx__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../lib/drop-area-hoc.jsx */ "./src/lib/drop-area-hoc.jsx"); /* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/drag-constants */ "./src/lib/drag-constants.js"); /* harmony import */ var _lib_define_dynamic_block__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../lib/define-dynamic-block */ "./src/lib/define-dynamic-block.js"); /* harmony import */ var _addons_hooks__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../addons/hooks */ "./src/addons/hooks.js"); /* harmony import */ var _lib_tw_load_scratch_blocks_hoc_jsx__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../lib/tw-load-scratch-blocks-hoc.jsx */ "./src/lib/tw-load-scratch-blocks-hoc.jsx"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_toolbox__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../reducers/toolbox */ "./src/reducers/toolbox.js"); /* harmony import */ var _reducers_color_picker__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../reducers/color-picker */ "./src/reducers/color-picker.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_custom_procedures__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../reducers/custom-procedures */ "./src/reducers/custom-procedures.js"); /* harmony import */ var _reducers_connection_modal__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../reducers/connection-modal */ "./src/reducers/connection-modal.js"); /* harmony import */ var _reducers_workspace_metrics__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../reducers/workspace-metrics */ "./src/reducers/workspace-metrics.js"); /* harmony import */ var _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../reducers/editor-tab */ "./src/reducers/editor-tab.js"); const _excluded = ["anyModalVisible", "canUseCloud", "customStageSize", "customProceduresVisible", "extensionLibraryVisible", "options", "stageSize", "vm", "isRtl", "isVisible", "onActivateColorPicker", "onOpenConnectionModal", "onOpenSoundRecorder", "onOpenCustomExtensionModal", "updateToolboxState", "onActivateCustomProcedures", "onRequestCloseExtensionLibrary", "onRequestCloseCustomProcedures", "toolboxXML", "updateMetrics", "workspaceMetrics"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } // TW: Strings we add to scratch-blocks are localized here const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_6__["defineMessages"])({ PROCEDURES_RETURN: { "id": "tw.blocks.PROCEDURES_RETURN", "defaultMessage": "return {v}" }, PROCEDURES_TO_REPORTER: { "id": "tw.blocks.PROCEDURES_TO_REPORTER", "defaultMessage": "Change To Reporter" }, PROCEDURES_TO_STATEMENT: { "id": "tw.blocks.PROCEDURES_TO_STATEMENT", "defaultMessage": "Change To Statement" }, PROCEDURES_DOCS: { "id": "tw.blocks.PROCEDURES_DOCS", "defaultMessage": "How to use return" } }); const addFunctionListener = (object, property, callback) => { const oldFn = object[property]; object[property] = function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } const result = oldFn.apply(this, args); callback.apply(this, result); return result; }; }; const DroppableBlocks = Object(_lib_drop_area_hoc_jsx__WEBPACK_IMPORTED_MODULE_17__["default"])([_lib_drag_constants__WEBPACK_IMPORTED_MODULE_18__["default"].BACKPACK_CODE])(_components_blocks_blocks_jsx__WEBPACK_IMPORTED_MODULE_11__["default"]); class Blocks extends react__WEBPACK_IMPORTED_MODULE_5___default.a.Component { constructor(props) { super(props); this.ScratchBlocks = Object(_lib_blocks__WEBPACK_IMPORTED_MODULE_7__["default"])(props.vm); this.ScratchBlocks.Toolbox.registerMenu('extensionControls', [{ text: 'Remove Extension', enabled: true, callback: ext => props.vm.extensionManager.removeExtension(ext) }, { text: 'Remove Unused Extensions', enabled: true, callback: () => props.vm.extensionManager.removeUnusedExtensions() }, { text: 'Replace Extension', enabled: true, callback: ext => this.props.onOpenCustomExtensionModal(ext) }]); window.ScratchBlocks = this.ScratchBlocks; _addons_hooks__WEBPACK_IMPORTED_MODULE_20__["default"].blockly = this.ScratchBlocks; _addons_hooks__WEBPACK_IMPORTED_MODULE_20__["default"].blocklyCallbacks.forEach(i => i()); _addons_hooks__WEBPACK_IMPORTED_MODULE_20__["default"].blocklyCallbacks.length = 0; lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['attachVM', 'detachVM', 'getToolboxXML', 'handleCategorySelected', 'handleConnectionModalStart', 'handleDrop', 'handleStatusButtonUpdate', 'handleOpenSoundRecorder', 'handlePromptStart', 'handlePromptCallback', 'handlePromptClose', 'handleCustomProceduresClose', 'handleExtensionRemoved', 'onScriptGlowOn', 'onScriptGlowOff', 'onBlockGlowOn', 'onBlockGlowOff', 'handleMonitorsUpdate', 'handleExtensionAdded', 'handleBlocksInfoUpdate', 'onTargetsUpdate', 'onVisualReport', 'onBlockStackError', 'onWorkspaceUpdate', 'onWorkspaceMetricsChange', 'setBlocks', 'setLocale', 'handleEnableProcedureReturns']); this.ScratchBlocks.prompt = this.handlePromptStart; this.ScratchBlocks.statusButtonCallback = this.handleConnectionModalStart; this.ScratchBlocks.recordSoundCallback = this.handleOpenSoundRecorder; this.state = { prompt: null }; this.onTargetsUpdate = lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default()(this.onTargetsUpdate, 100); this.toolboxUpdateQueue = []; } componentDidMount() { this.props.vm.setCompilerOptions({ warpTimer: true }); this.props.vm.setInEditor(false); this.ScratchBlocks.FieldColourSlider.activateEyedropper_ = this.props.onActivateColorPicker; this.ScratchBlocks.Procedures.externalProcedureDefCallback = this.props.onActivateCustomProcedures; this.ScratchBlocks.ScratchMsgs.setLocale(this.props.locale); const Msg = this.ScratchBlocks.Msg; Msg.PROCEDURES_RETURN = this.props.intl.formatMessage(messages.PROCEDURES_RETURN, { v: '%1' }); Msg.PROCEDURES_TO_REPORTER = this.props.intl.formatMessage(messages.PROCEDURES_TO_REPORTER); Msg.PROCEDURES_TO_STATEMENT = this.props.intl.formatMessage(messages.PROCEDURES_TO_STATEMENT); Msg.PROCEDURES_DOCS = this.props.intl.formatMessage(messages.PROCEDURES_DOCS); const workspaceConfig = lodash_defaultsdeep__WEBPACK_IMPORTED_MODULE_2___default()({}, Blocks.defaultOptions, this.props.options, { rtl: this.props.isRtl, toolbox: this.props.toolboxXML }); this.workspace = this.ScratchBlocks.inject(this.blocks, workspaceConfig); // Register buttons under new callback keys for creating variables, // lists, and procedures from extensions. const toolboxWorkspace = this.workspace.getFlyout().getWorkspace(); const varListButtonCallback = type => () => this.ScratchBlocks.Variables.createVariable(this.workspace, null, type); const procButtonCallback = () => { this.ScratchBlocks.Procedures.createProcedureDefCallback_(this.workspace); }; toolboxWorkspace.registerButtonCallback('MAKE_A_VARIABLE', varListButtonCallback('')); toolboxWorkspace.registerButtonCallback('MAKE_A_LIST', varListButtonCallback('list')); toolboxWorkspace.registerButtonCallback('MAKE_A_PROCEDURE', procButtonCallback); toolboxWorkspace.registerButtonCallback('EXTENSION_CALLBACK', block => { this.props.vm.handleExtensionButtonPress(block.callbackData_); }); toolboxWorkspace.registerButtonCallback('OPEN_EXTENSION_DOCS', block => { const docsURI = block.callbackData_; const url = new URL(docsURI); if (url.protocol === 'http:' || url.protocol === 'https:') { window.open(docsURI, '_blank'); } }); toolboxWorkspace.registerButtonCallback('OPEN_RETURN_DOCS', () => { window.open('https://docs.turbowarp.org/return', '_blank'); }); toolboxWorkspace.registerButtonCallback('OPEN_USERNAME_DOCS', () => { window.open('https://docs.penguinmod.com/username', '_blank'); }); // Store the xml of the toolbox that is actually rendered. // This is used in componentDidUpdate instead of prevProps, because // the xml can change while e.g. on the costumes tab. this._renderedToolboxXML = this.props.toolboxXML; // we actually never want the workspace to enable "refresh toolbox" - this basically re-renders the // entire toolbox every time we reset the workspace. We call updateToolbox as a part of // componentDidUpdate so the toolbox will still correctly be updated this.setToolboxRefreshEnabled = this.workspace.setToolboxRefreshEnabled.bind(this.workspace); this.workspace.setToolboxRefreshEnabled = value => { this.setToolboxRefreshEnabled(value); }; // @todo change this when blockly supports UI events addFunctionListener(this.workspace, 'translate', this.onWorkspaceMetricsChange); addFunctionListener(this.workspace, 'zoom', this.onWorkspaceMetricsChange); this.attachVM(); // Only update blocks/vm locale when visible to avoid sizing issues // If locale changes while not visible it will get handled in didUpdate if (this.props.isVisible) { this.setLocale(); } // tw: Handle when extensions are added when Blocks isn't mounted for (const category of this.props.vm.runtime._blockInfo) { this.handleExtensionAdded(category); } } shouldComponentUpdate(nextProps, nextState) { return this.state.prompt !== nextState.prompt || this.props.isVisible !== nextProps.isVisible || this._renderedToolboxXML !== nextProps.toolboxXML || this.props.extensionLibraryVisible !== nextProps.extensionLibraryVisible || this.props.customProceduresVisible !== nextProps.customProceduresVisible || this.props.locale !== nextProps.locale || this.props.anyModalVisible !== nextProps.anyModalVisible || this.props.stageSize !== nextProps.stageSize || this.props.customStageSize !== nextProps.customStageSize; } componentDidUpdate(prevProps) { // If any modals are open, call hideChaff to close z-indexed field editors if (this.props.anyModalVisible && !prevProps.anyModalVisible) { this.ScratchBlocks.hideChaff(); } // Only rerender the toolbox when the blocks are visible and the xml is // different from the previously rendered toolbox xml. // Do not check against prevProps.toolboxXML because that may not have been rendered. if (this.props.isVisible && this.props.toolboxXML !== this._renderedToolboxXML) { this.requestToolboxUpdate(); } if (this.props.isVisible === prevProps.isVisible) { if (this.props.stageSize !== prevProps.stageSize || this.props.customStageSize !== prevProps.customStageSize) { // force workspace to redraw for the new stage size window.dispatchEvent(new Event('resize')); } return; } // @todo hack to resize blockly manually in case resize happened while hidden // @todo hack to reload the workspace due to gui bug #413 if (this.props.isVisible) { // Scripts tab this.workspace.setVisible(true); if (prevProps.locale !== this.props.locale || this.props.locale !== this.props.vm.getLocale()) { // call setLocale if the locale has changed, or changed while the blocks were hidden. // vm.getLocale() will be out of sync if locale was changed while not visible this.setLocale(); } else { this.props.vm.refreshWorkspace(); this.requestToolboxUpdate(); } window.dispatchEvent(new Event('resize')); } else { this.workspace.setVisible(false); } } componentWillUnmount() { this.detachVM(); this.workspace.dispose(); clearTimeout(this.toolboxUpdateTimeout); this.props.vm.setInEditor(false); } requestToolboxUpdate() { clearTimeout(this.toolboxUpdateTimeout); this.toolboxUpdateTimeout = setTimeout(() => { this.updateToolbox(); }, 0); } setLocale() { this.ScratchBlocks.ScratchMsgs.setLocale(this.props.locale); this.props.vm.setLocale(this.props.locale, this.props.messages).then(() => { this.workspace.getFlyout().setRecyclingEnabled(false); this.props.vm.refreshWorkspace(); this.requestToolboxUpdate(); this.withToolboxUpdates(() => { this.workspace.getFlyout().setRecyclingEnabled(true); }); }); } updateToolbox() { this.toolboxUpdateTimeout = false; const categoryId = this.workspace.toolbox_.getSelectedCategoryId(); const offset = this.workspace.toolbox_.getCategoryScrollOffset(); this.workspace.updateToolbox(this.props.toolboxXML); this._renderedToolboxXML = this.props.toolboxXML; // In order to catch any changes that mutate the toolbox during "normal runtime" // (variable changes/etc), re-enable toolbox refresh. // Using the setter function will rerender the entire toolbox which we just rendered. this.workspace.toolboxRefreshEnabled_ = true; const currentCategoryPos = this.workspace.toolbox_.getCategoryPositionById(categoryId); const currentCategoryLen = this.workspace.toolbox_.getCategoryLengthById(categoryId); if (offset < currentCategoryLen) { this.workspace.toolbox_.setFlyoutScrollPos(currentCategoryPos + offset); } else { this.workspace.toolbox_.setFlyoutScrollPos(currentCategoryPos); } const queue = this.toolboxUpdateQueue; this.toolboxUpdateQueue = []; queue.forEach(fn => fn()); } withToolboxUpdates(fn) { // if there is a queued toolbox update, we need to wait if (this.toolboxUpdateTimeout) { this.toolboxUpdateQueue.push(fn); } else { fn(); } } attachVM() { this.workspace.addChangeListener(this.props.vm.blockListener); this.flyoutWorkspace = this.workspace.getFlyout().getWorkspace(); this.flyoutWorkspace.addChangeListener(this.props.vm.flyoutBlockListener); this.flyoutWorkspace.addChangeListener(this.props.vm.monitorBlockListener); this.props.vm.addListener('SCRIPT_GLOW_ON', this.onScriptGlowOn); this.props.vm.addListener('SCRIPT_GLOW_OFF', this.onScriptGlowOff); this.props.vm.addListener('BLOCK_GLOW_ON', this.onBlockGlowOn); this.props.vm.addListener('BLOCK_GLOW_OFF', this.onBlockGlowOff); this.props.vm.addListener('VISUAL_REPORT', this.onVisualReport); this.props.vm.addListener('BLOCK_STACK_ERROR', this.onBlockStackError); this.props.vm.addListener('workspaceUpdate', this.onWorkspaceUpdate); this.props.vm.addListener('targetsUpdate', this.onTargetsUpdate); this.props.vm.addListener('MONITORS_UPDATE', this.handleMonitorsUpdate); this.props.vm.addListener('EXTENSION_ADDED', this.handleExtensionAdded); this.props.vm.addListener('EXTENSION_REMOVED', this.handleExtensionRemoved); this.props.vm.addListener('BLOCKSINFO_UPDATE', this.handleBlocksInfoUpdate); this.props.vm.addListener('PERIPHERAL_CONNECTED', this.handleStatusButtonUpdate); this.props.vm.addListener('PERIPHERAL_DISCONNECTED', this.handleStatusButtonUpdate); } detachVM() { this.props.vm.removeListener('SCRIPT_GLOW_ON', this.onScriptGlowOn); this.props.vm.removeListener('SCRIPT_GLOW_OFF', this.onScriptGlowOff); this.props.vm.removeListener('BLOCK_GLOW_ON', this.onBlockGlowOn); this.props.vm.removeListener('BLOCK_GLOW_OFF', this.onBlockGlowOff); this.props.vm.removeListener('VISUAL_REPORT', this.onVisualReport); this.props.vm.removeListener('BLOCK_STACK_ERROR', this.onBlockStackError); this.props.vm.removeListener('workspaceUpdate', this.onWorkspaceUpdate); this.props.vm.removeListener('targetsUpdate', this.onTargetsUpdate); this.props.vm.removeListener('MONITORS_UPDATE', this.handleMonitorsUpdate); this.props.vm.removeListener('EXTENSION_ADDED', this.handleExtensionAdded); this.props.vm.removeListener('EXTENSION_REMOVED', this.handleExtensionRemoved); this.props.vm.removeListener('BLOCKSINFO_UPDATE', this.handleBlocksInfoUpdate); this.props.vm.removeListener('PERIPHERAL_CONNECTED', this.handleStatusButtonUpdate); this.props.vm.removeListener('PERIPHERAL_DISCONNECTED', this.handleStatusButtonUpdate); } updateToolboxBlockValue(id, value) { this.withToolboxUpdates(() => { const block = this.workspace.getFlyout().getWorkspace().getBlockById(id); if (block) { block.inputList[0].fieldRow[0].setValue(value); } }); } onTargetsUpdate() { if (this.props.vm.editingTarget && this.workspace.getFlyout()) { ['glide', 'move', 'set'].forEach(prefix => { this.updateToolboxBlockValue("".concat(prefix, "x"), Math.round(this.props.vm.editingTarget.x).toString()); this.updateToolboxBlockValue("".concat(prefix, "y"), Math.round(this.props.vm.editingTarget.y).toString()); }); } } onWorkspaceMetricsChange() { const target = this.props.vm.editingTarget; if (target && target.id) { // Dispatch updateMetrics later, since onWorkspaceMetricsChange may be (very indirectly) // called from a reducer, i.e. when you create a custom procedure. // TODO: Is this a vehement hack? setTimeout(() => { this.props.updateMetrics({ targetID: target.id, scrollX: this.workspace.scrollX, scrollY: this.workspace.scrollY, scale: this.workspace.scale }); }, 0); } } onScriptGlowOn(data) { this.workspace.glowStack(data.id, true); } onScriptGlowOff(data) { this.workspace.glowStack(data.id, false); } onBlockGlowOn(data) { this.workspace.glowBlock(data.id, true); } onBlockGlowOff(data) { this.workspace.glowBlock(data.id, false); } onVisualReport(data) { this.workspace.reportValue(data.id, data.value, false); } onBlockStackError(data) { // blocks still exist in fullscreen for some reason if (this.props.isFullScreen) return; if (!this.props.vm.editingTarget) return; const targetBlock = this.workspace.getBlockById(data.id); if (!targetBlock) return; // this happens when we switch sprites this.workspace.glowBlock(data.id, false); this.workspace.reportValue(data.id, data.value, true); this.workspace.errorStack(data.id, true); } getToolboxXML() { // Use try/catch because this requires digging pretty deep into the VM // Code inside intentionally ignores several error situations (no stage, etc.) // Because they would get caught by this try/catch try { let { editingTarget: target, runtime } = this.props.vm; const stage = runtime.getTargetForStage(); if (!target) target = stage; // If no editingTarget, use the stage const stageCostumes = stage.getCostumes(); const targetCostumes = target.getCostumes(); const targetSounds = target.getSounds(); const dynamicBlocksXML = this.props.vm.runtime.getBlocksXML(target); return Object(_lib_make_toolbox_xml__WEBPACK_IMPORTED_MODULE_3__["default"])(false, target.isStage, target.id, dynamicBlocksXML, targetCostumes[targetCostumes.length - 1].name, stageCostumes[stageCostumes.length - 1].name, targetSounds.length > 0 ? targetSounds[targetSounds.length - 1].name : '', this.props.isLiveTest); } catch (error) { return null; } } handleExtensionRemoved() { const toolboxXML = this.getToolboxXML(); if (toolboxXML) { this.props.updateToolboxState(toolboxXML); } } onWorkspaceUpdate(data) { // When we change sprites, update the toolbox to have the new sprite's blocks const toolboxXML = this.getToolboxXML(); if (toolboxXML) { this.props.updateToolboxState(toolboxXML); } if (this.props.vm.editingTarget && !this.props.workspaceMetrics.targets[this.props.vm.editingTarget.id]) { this.onWorkspaceMetricsChange(); } // Remove and reattach the workspace listener (but allow flyout events) this.workspace.removeChangeListener(this.props.vm.blockListener); const dom = this.ScratchBlocks.Xml.textToDom(data.xml); try { this.ScratchBlocks.Xml.clearWorkspaceAndLoadFromXml(dom, this.workspace); } catch (error) { // The workspace is likely incomplete. What did update should be // functional. // // Instead of throwing the error, by logging it and continuing as // normal lets the other workspace update processes complete in the // gui and vm, which lets the vm run even if the workspace is // incomplete. Throwing the error would keep things like setting the // correct editing target from happening which can interfere with // some blocks and processes in the vm. if (error.message) { error.message = "Workspace Update Error: ".concat(error.message); } _lib_log_js__WEBPACK_IMPORTED_MODULE_9__["default"].error(error); } this.workspace.addChangeListener(this.props.vm.blockListener); if (this.props.vm.editingTarget && this.props.workspaceMetrics.targets[this.props.vm.editingTarget.id]) { const { scrollX, scrollY, scale } = this.props.workspaceMetrics.targets[this.props.vm.editingTarget.id]; this.workspace.scrollX = scrollX; this.workspace.scrollY = scrollY; this.workspace.scale = scale; this.workspace.resize(); } // Clear the undo state of the workspace since this is a // fresh workspace and we don't want any changes made to another sprites // workspace to be 'undone' here. this.workspace.clearUndo(); } handleMonitorsUpdate(monitors) { // Update the checkboxes of the relevant monitors. const flyout = this.workspace.getFlyout(); for (const monitor of monitors.values()) { const blockId = monitor.get('id'); const isVisible = monitor.get('visible'); flyout.setCheckboxState(blockId, isVisible); // We also need to update the isMonitored flag for this block on the VM, since it's used to determine // whether the checkbox is activated or not when the checkbox is re-displayed (e.g. local variables/blocks // when switching between sprites). const block = this.props.vm.runtime.monitorBlocks.getBlock(blockId); if (block) { block.isMonitored = isVisible; } } } handleExtensionAdded(categoryInfo) { const defineBlocks = blockInfoArray => { if (blockInfoArray && blockInfoArray.length > 0) { const staticBlocksJson = []; const dynamicBlocksInfo = []; blockInfoArray.forEach(blockInfo => { if (blockInfo.info && blockInfo.info.isDynamic) { dynamicBlocksInfo.push(blockInfo); } else if (blockInfo.json) { staticBlocksJson.push(blockInfo.json); } else if (blockInfo.info.blockType === 'button') { this.workspace.registerButtonCallback(blockInfo.info.opcode, blockInfo.info.func); } // otherwise it's a non-block entry such as '---' }); this.ScratchBlocks.defineBlocksWithJsonArray(staticBlocksJson, true); dynamicBlocksInfo.forEach(blockInfo => { // This is creating the block factory / constructor -- NOT a specific instance of the block. // The factory should only know static info about the block: the category info and the opcode. // Anything else will be picked up from the XML attached to the block instance. const extendedOpcode = "".concat(categoryInfo.id, "_").concat(blockInfo.info.opcode); const blockDefinition = Object(_lib_define_dynamic_block__WEBPACK_IMPORTED_MODULE_19__["default"])(this.ScratchBlocks, categoryInfo, blockInfo, extendedOpcode); this.ScratchBlocks.Blocks[extendedOpcode] = blockDefinition; }); } }; // scratch-blocks implements a menu or custom field as a special kind of block ("shadow" block) // these actually define blocks and MUST run regardless of the UI state defineBlocks(Object.getOwnPropertyNames(categoryInfo.customFieldTypes).map(fieldTypeName => categoryInfo.customFieldTypes[fieldTypeName].scratchBlocksDefinition)); defineBlocks(categoryInfo.menus); defineBlocks(categoryInfo.blocks); // Update the toolbox with new blocks if possible const toolboxXML = this.getToolboxXML(); if (toolboxXML) { this.props.updateToolboxState(toolboxXML); } } handleBlocksInfoUpdate(categoryInfo) { // @todo Later we should replace this to avoid all the warnings from redefining blocks. this.handleExtensionAdded(categoryInfo); } handleCategorySelected(categoryId) { const extension = _lib_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_13__["default"].find(ext => ext.extensionId === categoryId); if (extension && extension.launchPeripheralConnectionFlow) { this.handleConnectionModalStart(categoryId); } this.withToolboxUpdates(() => { this.workspace.toolbox_.setSelectedCategoryById(categoryId); }); } setBlocks(blocks) { this.blocks = blocks; } handlePromptStart(message, defaultValue, callback, optTitle, optVarType) { const p = { prompt: { callback, message, defaultValue } }; p.prompt.title = optTitle ? optTitle : this.ScratchBlocks.Msg.VARIABLE_MODAL_TITLE; p.prompt.varType = typeof optVarType === 'string' ? optVarType : this.ScratchBlocks.SCALAR_VARIABLE_TYPE; p.prompt.showVariableOptions = // This flag means that we should show variable/list options about scope optVarType !== this.ScratchBlocks.BROADCAST_MESSAGE_VARIABLE_TYPE && p.prompt.title !== this.ScratchBlocks.Msg.RENAME_VARIABLE_MODAL_TITLE && p.prompt.title !== this.ScratchBlocks.Msg.RENAME_LIST_MODAL_TITLE; p.prompt.showCloudOption = optVarType === this.ScratchBlocks.SCALAR_VARIABLE_TYPE && this.props.canUseCloud; this.setState(p); } handleConnectionModalStart(extensionId) { this.props.onOpenConnectionModal(extensionId); } handleStatusButtonUpdate() { this.ScratchBlocks.refreshStatusButtons(this.workspace); } handleOpenSoundRecorder() { this.props.onOpenSoundRecorder(); } /* * Pass along information about proposed name and variable options (scope and isCloud) * and additional potentially conflicting variable names from the VM * to the variable validation prompt callback used in scratch-blocks. */ handlePromptCallback(input, variableOptions) { this.state.prompt.callback(input, this.props.vm.runtime.getAllVarNamesOfType(this.state.prompt.varType), variableOptions); this.handlePromptClose(); } handlePromptClose() { this.setState({ prompt: null }); } handleCustomProceduresClose(data) { this.props.onRequestCloseCustomProcedures(data); const ws = this.workspace; ws.refreshToolboxSelection_(); ws.toolbox_.scrollToCategoryById('myBlocks'); } handleDrop(dragInfo) { fetch(dragInfo.payload.bodyUrl).then(response => response.json()).then(blocks => this.props.vm.shareBlocksToTarget(blocks, this.props.vm.editingTarget.id)).then(() => { this.props.vm.refreshWorkspace(); this.updateToolbox(); // To show new variables/custom blocks }); } handleEnableProcedureReturns() { this.workspace.enableProcedureReturns(); this.requestToolboxUpdate(); } render() { /* eslint-disable no-unused-vars */ const _this$props = this.props, { anyModalVisible, canUseCloud, customStageSize, customProceduresVisible, extensionLibraryVisible, options, stageSize, vm, isRtl, isVisible, onActivateColorPicker, onOpenConnectionModal, onOpenSoundRecorder, onOpenCustomExtensionModal, updateToolboxState, onActivateCustomProcedures, onRequestCloseExtensionLibrary, onRequestCloseCustomProcedures, toolboxXML, updateMetrics: updateMetricsProp, workspaceMetrics } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); /* eslint-enable no-unused-vars */ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_5___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(DroppableBlocks, _extends({ componentRef: this.setBlocks, onDrop: this.handleDrop }, props)), this.state.prompt ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(_prompt_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], { defaultValue: this.state.prompt.defaultValue, isStage: vm.runtime.getEditingTarget().isStage, showListMessage: this.state.prompt.varType === this.ScratchBlocks.LIST_VARIABLE_TYPE, label: this.state.prompt.message, showCloudOption: this.state.prompt.showCloudOption, showVariableOptions: this.state.prompt.showVariableOptions, title: this.state.prompt.title, vm: vm, onCancel: this.handlePromptClose, onOk: this.handlePromptCallback }) : null, extensionLibraryVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(_extension_library_jsx__WEBPACK_IMPORTED_MODULE_12__["default"], { vm: vm, liveTest: this.props.isLiveTest, onCategorySelected: this.handleCategorySelected, onEnableProcedureReturns: this.handleEnableProcedureReturns, onRequestClose: onRequestCloseExtensionLibrary, onOpenCustomExtensionModal: this.props.onOpenCustomExtensionModal }) : null, customProceduresVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(_custom_procedures_jsx__WEBPACK_IMPORTED_MODULE_14__["default"], { options: { media: options.media }, onRequestClose: this.handleCustomProceduresClose }) : null); } } Blocks.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_6__["intlShape"], anyModalVisible: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, canUseCloud: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, customStageSize: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number }), customProceduresVisible: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, extensionLibraryVisible: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, isVisible: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, locale: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string.isRequired, messages: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.objectOf(prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string), onActivateColorPicker: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onActivateCustomProcedures: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onOpenConnectionModal: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onOpenSoundRecorder: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onOpenCustomExtensionModal: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onRequestCloseCustomProcedures: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, onRequestCloseExtensionLibrary: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, options: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({ media: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, zoom: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({ controls: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, wheel: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, startScale: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number }), colours: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({ workspace: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, flyout: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, toolbox: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, toolboxSelected: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, scrollbar: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, scrollbarHover: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, insertionMarker: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, insertionMarkerOpacity: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number, fieldShadow: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, dragShadowOpacity: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.number }), comments: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, collapse: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool }), stageSize: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.oneOf(Object.keys(_lib_layout_constants__WEBPACK_IMPORTED_MODULE_16__["STAGE_DISPLAY_SIZES"])).isRequired, toolboxXML: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.string, updateMetrics: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, updateToolboxState: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func, vm: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_8___default.a).isRequired, workspaceMetrics: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.shape({ targets: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.objectOf(prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.object) }), isLiveTest: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool, isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.bool }; Blocks.defaultOptions = { zoom: { controls: true, wheel: true, startScale: _lib_layout_constants__WEBPACK_IMPORTED_MODULE_16__["BLOCKS_DEFAULT_SCALE"] }, grid: { spacing: 40, length: 2, colour: '#ddd' }, colours: { workspace: '#F9F9F9', flyout: '#F9F9F9', toolbox: '#FFFFFF', toolboxSelected: '#E9EEF2', scrollbar: '#CECDCE', scrollbarHover: '#CECDCE', insertionMarker: '#000000', insertionMarkerOpacity: 0.2, fieldShadow: 'rgba(255, 255, 255, 0.3)', dragShadowOpacity: 0.6 }, comments: true, collapse: false, sounds: false }; Blocks.defaultProps = { isVisible: true, options: Blocks.defaultOptions }; const mapStateToProps = state => ({ anyModalVisible: Object.keys(state.scratchGui.modals).some(key => state.scratchGui.modals[key]) || state.scratchGui.mode.isFullScreen, customStageSize: state.scratchGui.customStageSize, extensionLibraryVisible: state.scratchGui.modals.extensionLibrary, isRtl: state.locales.isRtl, locale: state.locales.locale, messages: state.locales.messages, toolboxXML: state.scratchGui.toolbox.toolboxXML, customProceduresVisible: state.scratchGui.customProcedures.active, workspaceMetrics: state.scratchGui.workspaceMetrics, isLiveTest: state.scratchGui.vm.isLiveTest, isFullScreen: state.scratchGui.mode.isFullScreen }); const mapDispatchToProps = dispatch => ({ onActivateColorPicker: callback => dispatch(Object(_reducers_color_picker__WEBPACK_IMPORTED_MODULE_24__["activateColorPicker"])(callback)), onActivateCustomProcedures: (data, callback) => dispatch(Object(_reducers_custom_procedures__WEBPACK_IMPORTED_MODULE_26__["activateCustomProcedures"])(data, callback)), onOpenConnectionModal: id => { dispatch(Object(_reducers_connection_modal__WEBPACK_IMPORTED_MODULE_27__["setConnectionModalExtensionId"])(id)); dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_25__["openConnectionModal"])()); }, onOpenSoundRecorder: () => { dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_29__["activateTab"])(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_29__["SOUNDS_TAB_INDEX"])); dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_25__["openSoundRecorder"])()); }, onOpenCustomExtensionModal: swapId => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_25__["openCustomExtensionModal"])(swapId)), onRequestCloseExtensionLibrary: () => { dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_25__["closeExtensionLibrary"])()); }, onRequestCloseCustomProcedures: data => { dispatch(Object(_reducers_custom_procedures__WEBPACK_IMPORTED_MODULE_26__["deactivateCustomProcedures"])(data)); }, updateToolboxState: toolboxXML => { dispatch(Object(_reducers_toolbox__WEBPACK_IMPORTED_MODULE_23__["updateToolbox"])(toolboxXML)); }, updateMetrics: metrics => { dispatch(Object(_reducers_workspace_metrics__WEBPACK_IMPORTED_MODULE_28__["updateMetrics"])(metrics)); } }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_6__["injectIntl"])(Object(_lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_15__["default"])('Blocks')(Object(react_redux__WEBPACK_IMPORTED_MODULE_22__["connect"])(mapStateToProps, mapDispatchToProps)(Object(_lib_tw_load_scratch_blocks_hoc_jsx__WEBPACK_IMPORTED_MODULE_21__["default"])(Blocks))))); /***/ }), /***/ "./src/containers/cards.jsx": /*!**********************************!*\ !*** ./src/containers/cards.jsx ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _reducers_cards__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../reducers/cards */ "./src/reducers/cards.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _components_cards_cards_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/cards/cards.jsx */ "./src/components/cards/cards.jsx"); /* harmony import */ var _lib_libraries_decks_translate_image_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/libraries/decks/translate-image.js */ "./src/lib/libraries/decks/translate-image.js"); /* harmony import */ var _lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/isScratchDesktop */ "./src/lib/isScratchDesktop.js"); class Cards extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { componentDidMount() { if (this.props.locale !== 'en') { Object(_lib_libraries_decks_translate_image_js__WEBPACK_IMPORTED_MODULE_6__["loadImageData"])(this.props.locale); } } componentDidUpdate(prevProps) { if (this.props.locale !== prevProps.locale) { Object(_lib_libraries_decks_translate_image_js__WEBPACK_IMPORTED_MODULE_6__["loadImageData"])(this.props.locale); } } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_cards_cards_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], this.props); } } Cards.propTypes = { locale: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired }; const mapStateToProps = state => ({ visible: state.scratchGui.cards.visible, content: state.scratchGui.cards.content, activeDeckId: state.scratchGui.cards.activeDeckId, step: state.scratchGui.cards.step, expanded: state.scratchGui.cards.expanded, x: state.scratchGui.cards.x, y: state.scratchGui.cards.y, isRtl: state.locales.isRtl, locale: state.locales.locale, dragging: state.scratchGui.cards.dragging, showVideos: Object(_lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_7__["notScratchDesktop"])() }); const mapDispatchToProps = dispatch => ({ onActivateDeckFactory: id => () => dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_3__["activateDeck"])(id)), onShowAll: () => { dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_4__["openTipsLibrary"])()); dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_3__["closeCards"])()); }, onCloseCards: () => dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_3__["closeCards"])()), onShrinkExpandCards: () => dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_3__["shrinkExpandCards"])()), onNextStep: () => dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_3__["nextStep"])()), onPrevStep: () => dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_3__["prevStep"])()), onDrag: (e_, data) => dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_3__["dragCard"])(data.x, data.y)), onStartDrag: () => dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_3__["startDrag"])()), onEndDrag: () => dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_3__["endDrag"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(mapStateToProps, mapDispatchToProps)(Cards)); /***/ }), /***/ "./src/containers/connection-modal.jsx": /*!*********************************************!*\ !*** ./src/containers/connection-modal.jsx ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/connection-modal/connection-modal.jsx */ "./src/components/connection-modal/connection-modal.jsx"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _lib_analytics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/analytics */ "./src/lib/analytics.js"); /* harmony import */ var _lib_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/libraries/extensions/index.jsx */ "./src/lib/libraries/extensions/index.jsx"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); class ConnectionModal extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleScanning', 'handleCancel', 'handleConnected', 'handleConnecting', 'handleDisconnect', 'handleError', 'handleHelp']); this.state = { extension: _lib_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_6__["default"].find(ext => ext.extensionId === props.extensionId), phase: props.vm.getPeripheralIsConnected(props.extensionId) ? _components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].connected : _components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].scanning }; } componentDidMount() { this.props.vm.on('PERIPHERAL_CONNECTED', this.handleConnected); this.props.vm.on('PERIPHERAL_REQUEST_ERROR', this.handleError); } componentWillUnmount() { this.props.vm.removeListener('PERIPHERAL_CONNECTED', this.handleConnected); this.props.vm.removeListener('PERIPHERAL_REQUEST_ERROR', this.handleError); } handleScanning() { this.setState({ phase: _components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].scanning }); } handleConnecting(peripheralId) { this.props.vm.connectPeripheral(this.props.extensionId, peripheralId); this.setState({ phase: _components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].connecting }); _lib_analytics__WEBPACK_IMPORTED_MODULE_5__["default"].event({ category: 'extensions', action: 'connecting', label: this.props.extensionId }); } handleDisconnect() { try { this.props.vm.disconnectPeripheral(this.props.extensionId); } finally { this.props.onCancel(); } } handleCancel() { try { // If we're not connected to a peripheral, close the websocket so we stop scanning. if (!this.props.vm.getPeripheralIsConnected(this.props.extensionId)) { this.props.vm.disconnectPeripheral(this.props.extensionId); } } finally { // Close the modal. this.props.onCancel(); } } handleError() { // Assume errors that come in during scanning phase are the result of not // having scratch-link installed. if (this.state.phase === _components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].scanning || this.state.phase === _components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].unavailable) { this.setState({ phase: _components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].unavailable }); } else { this.setState({ phase: _components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].error }); _lib_analytics__WEBPACK_IMPORTED_MODULE_5__["default"].event({ category: 'extensions', action: 'connecting error', label: this.props.extensionId }); } } handleConnected() { this.setState({ phase: _components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["PHASES"].connected }); _lib_analytics__WEBPACK_IMPORTED_MODULE_5__["default"].event({ category: 'extensions', action: 'connected', label: this.props.extensionId }); } handleHelp() { window.open(this.state.extension.helpLink, '_blank'); _lib_analytics__WEBPACK_IMPORTED_MODULE_5__["default"].event({ category: 'extensions', action: 'help', label: this.props.extensionId }); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_connection_modal_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { connectingMessage: this.state.extension && this.state.extension.connectingMessage, connectionIconURL: this.state.extension && this.state.extension.connectionIconURL, connectionSmallIconURL: this.state.extension && this.state.extension.connectionSmallIconURL, connectionTipIconURL: this.state.extension && this.state.extension.connectionTipIconURL, extensionId: this.props.extensionId, name: this.state.extension && this.state.extension.name, phase: this.state.phase, title: this.props.extensionId, useAutoScan: this.state.extension && this.state.extension.useAutoScan, vm: this.props.vm, onCancel: this.handleCancel, onConnected: this.handleConnected, onConnecting: this.handleConnecting, onDisconnect: this.handleDisconnect, onHelp: this.handleHelp, onScanning: this.handleScanning }); } } ConnectionModal.propTypes = { extensionId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; const mapStateToProps = state => ({ extensionId: state.scratchGui.connectionModal.extensionId }); const mapDispatchToProps = dispatch => ({ onCancel: () => { dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_8__["closeConnectionModal"])()); } }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_7__["connect"])(mapStateToProps, mapDispatchToProps)(ConnectionModal)); /***/ }), /***/ "./src/containers/controls.jsx": /*!*************************************!*\ !*** ./src/containers/controls.jsx ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _components_controls_controls_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/controls/controls.jsx */ "./src/components/controls/controls.jsx"); const _excluded = ["vm", "isStarted", "projectRunning", "paused", "turbo"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class Controls extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleGreenFlagClick', 'handlePauseButtonClick', 'handleStopAllClick']); } handleGreenFlagClick(e) { e.preventDefault(); // tw: implement alt+click and right click to toggle FPS if (e.shiftKey || e.altKey || e.type === 'contextmenu') { if (e.shiftKey) { this.props.vm.setTurboMode(!this.props.turbo); } if (e.altKey || e.type === 'contextmenu') { if (this.props.framerate === 30) { this.props.vm.setFramerate(60); } else { this.props.vm.setFramerate(30); } } } else { if (!this.props.isStarted) { this.props.vm.start(); } this.props.vm.greenFlag(); } } handlePauseButtonClick(e) { e.preventDefault(); if (!this.props.paused) { this.props.vm.pause(); return; } this.props.vm.play(); } handleStopAllClick(e) { e.preventDefault(); this.props.vm.stopAll(); } render() { const _this$props = this.props, { vm, // eslint-disable-line no-unused-vars isStarted, // eslint-disable-line no-unused-vars projectRunning, paused, turbo } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_controls_controls_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], _extends({}, props, { active: projectRunning && isStarted, paused: paused, turbo: turbo, onGreenFlagClick: this.handleGreenFlagClick, onPauseButtonClick: this.handlePauseButtonClick, onStopAllClick: this.handleStopAllClick })); } } Controls.propTypes = { isStarted: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, projectRunning: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, turbo: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, framerate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, interpolation: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, isSmall: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, paused: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_3___default.a) }; const mapStateToProps = state => ({ isStarted: state.scratchGui.vmStatus.started, projectRunning: state.scratchGui.vmStatus.running, framerate: state.scratchGui.tw.framerate, interpolation: state.scratchGui.tw.interpolation, turbo: state.scratchGui.vmStatus.turbo, paused: state.scratchGui.vmStatus.paused }); // no-op function to prevent dispatch prop being passed to component const mapDispatchToProps = () => ({}); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps, mapDispatchToProps)(Controls)); /***/ }), /***/ "./src/containers/costume-library.jsx": /*!********************************************!*\ !*** ./src/containers/costume-library.jsx ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/libraries/tw-async-libraries */ "./src/lib/libraries/tw-async-libraries.js"); /* harmony import */ var _lib_libraries_sprite_tags__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/libraries/sprite-tags */ "./src/lib/libraries/sprite-tags.js"); /* harmony import */ var _components_library_library_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/library/library.jsx */ "./src/components/library/library.jsx"); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ libraryTitle: { "id": "gui.costumeLibrary.chooseACostume", "defaultMessage": "Choose a Costume" } }); class CostumeLibrary extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleItemSelected']); } handleItemSelected(item) { const vmCostume = { name: item.name, rotationCenterX: item.rotationCenterX, rotationCenterY: item.rotationCenterY, bitmapResolution: item.bitmapResolution, skinId: null }; if (item.fromPenguinModLibrary) { vmCostume.fromPenguinModLibrary = true; vmCostume.libraryId = item.libraryFilePage; vmCostume.dataFormat = item.dataFormat; } this.props.vm.addCostumeFromLibrary(item.md5ext, vmCostume); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_library_library_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], { data: Object(_lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_5__["getCostumeLibrary"])(), id: "costumeLibrary", actor: "CostumeLibrary", tags: _lib_libraries_sprite_tags__WEBPACK_IMPORTED_MODULE_6__["default"], header: "Costumes", title: this.props.intl.formatMessage(messages.libraryTitle), onItemSelected: this.handleItemSelected, onRequestClose: this.props.onRequestClose }); } } CostumeLibrary.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(CostumeLibrary)); /***/ }), /***/ "./src/containers/costume-tab.jsx": /*!****************************************!*\ !*** ./src/containers/costume-tab.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _components_asset_panel_asset_panel_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/asset-panel/asset-panel.jsx */ "./src/components/asset-panel/asset-panel.jsx"); /* harmony import */ var _paint_editor_wrapper_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./paint-editor-wrapper.jsx */ "./src/containers/paint-editor-wrapper.jsx"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/file-uploader.js */ "./src/lib/file-uploader.js"); /* harmony import */ var _lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/error-boundary-hoc.jsx */ "./src/lib/error-boundary-hoc.jsx"); /* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/drag-constants */ "./src/lib/drag-constants.js"); /* harmony import */ var _lib_empty_assets__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../lib/empty-assets */ "./src/lib/empty-assets.js"); /* harmony import */ var _lib_shared_messages__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../lib/shared-messages */ "./src/lib/shared-messages.js"); /* harmony import */ var _lib_download_blob__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../lib/download-blob */ "./src/lib/download-blob.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../reducers/editor-tab */ "./src/reducers/editor-tab.js"); /* harmony import */ var _reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../reducers/restore-deletion */ "./src/reducers/restore-deletion.js"); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js"); /* harmony import */ var _components_asset_panel_icon_add_backdrop_lib_svg__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../components/asset-panel/icon--add-backdrop-lib.svg */ "./src/components/asset-panel/icon--add-backdrop-lib.svg"); /* harmony import */ var _components_asset_panel_icon_add_backdrop_lib_svg__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_components_asset_panel_icon_add_backdrop_lib_svg__WEBPACK_IMPORTED_MODULE_18__); /* harmony import */ var _components_asset_panel_icon_add_costume_lib_svg__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../components/asset-panel/icon--add-costume-lib.svg */ "./src/components/asset-panel/icon--add-costume-lib.svg"); /* harmony import */ var _components_asset_panel_icon_add_costume_lib_svg__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_components_asset_panel_icon_add_costume_lib_svg__WEBPACK_IMPORTED_MODULE_19__); /* harmony import */ var _components_action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../components/action-menu/icon--file-upload.svg */ "./src/components/action-menu/icon--file-upload.svg"); /* harmony import */ var _components_action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(_components_action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_20__); /* harmony import */ var _components_action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../components/action-menu/icon--paint.svg */ "./src/components/action-menu/icon--paint.svg"); /* harmony import */ var _components_action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_components_action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_21__); /* harmony import */ var _components_action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../components/action-menu/icon--surprise.svg */ "./src/components/action-menu/icon--surprise.svg"); /* harmony import */ var _components_action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(_components_action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_22__); /* harmony import */ var _components_action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../components/action-menu/icon--search.svg */ "./src/components/action-menu/icon--search.svg"); /* harmony import */ var _components_action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(_components_action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_23__); /* harmony import */ var _lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../lib/libraries/tw-async-libraries */ "./src/lib/libraries/tw-async-libraries.js"); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } let messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ addLibraryBackdropMsg: { "id": "gui.costumeTab.addBackdropFromLibrary", "defaultMessage": "Choose a Backdrop" }, addLibraryCostumeMsg: { "id": "gui.costumeTab.addCostumeFromLibrary", "defaultMessage": "Choose a Costume" }, addBlankCostumeMsg: { "id": "gui.costumeTab.addBlankCostume", "defaultMessage": "Paint" }, addSurpriseCostumeMsg: { "id": "gui.costumeTab.addSurpriseCostume", "defaultMessage": "Surprise" }, addFileBackdropMsg: { "id": "gui.costumeTab.addFileBackdrop", "defaultMessage": "Upload Backdrop" }, addFileCostumeMsg: { "id": "gui.costumeTab.addFileCostume", "defaultMessage": "Upload Costume" } }); messages = _objectSpread(_objectSpread({}, messages), _lib_shared_messages__WEBPACK_IMPORTED_MODULE_12__["default"]); class CostumeTab extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleSelectCostume', 'handleDeleteCostume', 'handleDuplicateCostume', 'handleExportCostume', 'handleNewCostume', 'handleNewBlankCostume', 'handleSurpriseCostume', 'handleSurpriseBackdrop', 'handleFileUploadClick', 'handleCostumeUpload', 'handleDrop', 'setFileInput']); const { editingTarget, sprites, stage } = props; const target = editingTarget && sprites[editingTarget] ? sprites[editingTarget] : stage; if (target && target.currentCostume) { this.state = { selectedCostumeIndex: target.currentCostume }; } else { this.state = { selectedCostumeIndex: 0 }; } } componentWillReceiveProps(nextProps) { const { editingTarget, sprites, stage } = nextProps; const target = editingTarget && sprites[editingTarget] ? sprites[editingTarget] : stage; if (!target || !target.costumes) { return; } if (this.props.editingTarget === editingTarget) { // If costumes have been added or removed, change costumes to the editing target's // current costume. const oldTarget = this.props.sprites[editingTarget] ? this.props.sprites[editingTarget] : this.props.stage; // @todo: Find and switch to the index of the costume that is new. This is blocked by // https://github.com/LLK/scratch-vm/issues/967 // Right now, you can land on the wrong costume if a costume changing script is running. if (oldTarget.costumeCount !== target.costumeCount) { this.setState({ selectedCostumeIndex: target.currentCostume }); } } else { // If switching editing targets, update the costume index this.setState({ selectedCostumeIndex: target.currentCostume }); } } handleSelectCostume(costumeIndex) { this.props.vm.editingTarget.setCostume(costumeIndex); this.setState({ selectedCostumeIndex: costumeIndex }); } handleDeleteCostume(costumeIndex) { const restoreCostumeFun = this.props.vm.deleteCostume(costumeIndex); this.props.dispatchUpdateRestore({ restoreFun: restoreCostumeFun, deletedItem: 'Costume' }); } handleDuplicateCostume(costumeIndex) { this.props.vm.duplicateCostume(costumeIndex); } handleExportCostume(costumeIndex) { const item = this.props.vm.editingTarget.sprite.costumes[costumeIndex]; const blob = new Blob([this.props.vm.getExportedCostume(item, true)], { type: item.asset.assetType.contentType }); Object(_lib_download_blob__WEBPACK_IMPORTED_MODULE_13__["default"])("".concat(item.name, ".").concat(item.asset.dataFormat), blob); } handleNewCostume(costume, fromCostumeLibrary, targetId) { const costumes = Array.isArray(costume) ? costume : [costume]; return Promise.all(costumes.map(c => { if (fromCostumeLibrary) { return this.props.vm.addCostumeFromLibrary(c.md5, c); } // If targetId is falsy, VM should default it to editingTarget.id // However, targetId should be provided to prevent #5876, // if making new costume takes a while return this.props.vm.addCostume(c.md5, c, targetId); })); } handleNewBlankCostume() { const name = this.props.vm.editingTarget.isStage ? this.props.intl.formatMessage(messages.backdrop, { index: 1 }) : this.props.intl.formatMessage(messages.costume, { index: 1 }); this.handleNewCostume(Object(_lib_empty_assets__WEBPACK_IMPORTED_MODULE_11__["emptyCostume"])(name)); } async handleSurpriseCostume() { const costumeLibraryContent = await Object(_lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_24__["getCostumeLibrary"])(); const item = costumeLibraryContent[Math.floor(Math.random() * costumeLibraryContent.length)]; const vmCostume = { name: item.name, md5: item.md5ext, rotationCenterX: item.rotationCenterX, rotationCenterY: item.rotationCenterY, bitmapResolution: item.bitmapResolution, skinId: null }; if (item.fromPenguinModLibrary) { vmCostume.fromPenguinModLibrary = true; vmCostume.libraryId = item.libraryFilePage; vmCostume.dataFormat = item.dataFormat; } ; this.handleNewCostume(vmCostume, true /* fromCostumeLibrary */); } async handleSurpriseBackdrop() { const backdropLibraryContent = await Object(_lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_24__["getBackdropLibrary"])(); const item = backdropLibraryContent[Math.floor(Math.random() * backdropLibraryContent.length)]; const vmCostume = { name: item.name, md5: item.md5ext, rotationCenterX: item.rotationCenterX, rotationCenterY: item.rotationCenterY, bitmapResolution: item.bitmapResolution, skinId: null }; if (item.fromPenguinModLibrary) { vmCostume.fromPenguinModLibrary = true; vmCostume.libraryId = item.libraryFilePage; vmCostume.dataFormat = item.dataFormat; } ; this.handleNewCostume(vmCostume); } handleCostumeUpload(e) { const vm = this.props.vm; const targetId = this.props.vm.editingTarget.id; this.props.onShowImporting(); Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_8__["handleFileUpload"])(e.target, (buffer, fileType, fileName, fileIndex, fileCount) => { Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_8__["costumeUpload"])(buffer, fileType, vm, vmCostumes => { vmCostumes.forEach((costume, i) => { costume.name = "".concat(fileName).concat(i ? i + 1 : ''); }); this.handleNewCostume(vmCostumes, false, targetId).then(() => { if (fileIndex === fileCount - 1) { this.props.onCloseImporting(); } }); }, this.props.onCloseImporting); }, this.props.onCloseImporting); } handleFileUploadClick() { this.fileInput.click(); } handleDrop(dropInfo) { if (dropInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].COSTUME) { const sprite = this.props.vm.editingTarget.sprite; const activeCostume = sprite.costumes[this.state.selectedCostumeIndex]; this.props.vm.reorderCostume(this.props.vm.editingTarget.id, dropInfo.index, dropInfo.newIndex); this.setState({ selectedCostumeIndex: sprite.costumes.indexOf(activeCostume) }); } else if (dropInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_COSTUME) { this.props.vm.addCostume(dropInfo.payload.body, { name: dropInfo.payload.name }); } else if (dropInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_SOUND) { this.props.onActivateSoundsTab(); this.props.vm.addSound({ md5: dropInfo.payload.body, name: dropInfo.payload.name }); } } setFileInput(input) { this.fileInput = input; } formatCostumeDetails(size, optResolution) { // If no resolution is given, assume that the costume is an SVG const resolution = optResolution ? optResolution : 1; // Convert size to stage units by dividing by resolution // Round up width and height for scratch-flash compatibility // https://github.com/LLK/scratch-flash/blob/9fbac92ef3d09ceca0c0782f8a08deaa79e4df69/src/ui/media/MediaInfo.as#L224-L237 return "".concat(Math.ceil(size[0] / resolution), " x ").concat(Math.ceil(size[1] / resolution)); } render() { const { dispatchUpdateRestore, // eslint-disable-line no-unused-vars intl, isRtl, onNewLibraryBackdropClick, onNewLibraryCostumeClick, vm } = this.props; if (!vm.editingTarget) { return null; } const isStage = vm.editingTarget.isStage; const target = vm.editingTarget.sprite; const addLibraryMessage = isStage ? messages.addLibraryBackdropMsg : messages.addLibraryCostumeMsg; const addFileMessage = isStage ? messages.addFileBackdropMsg : messages.addFileCostumeMsg; const addSurpriseFunc = isStage ? this.handleSurpriseBackdrop : this.handleSurpriseCostume; const addLibraryFunc = isStage ? onNewLibraryBackdropClick : onNewLibraryCostumeClick; const addLibraryIcon = isStage ? _components_asset_panel_icon_add_backdrop_lib_svg__WEBPACK_IMPORTED_MODULE_18___default.a : _components_asset_panel_icon_add_costume_lib_svg__WEBPACK_IMPORTED_MODULE_19___default.a; const costumeData = target.costumes ? target.costumes.map(costume => ({ name: costume.name, asset: costume.asset, details: costume.size ? this.formatCostumeDetails(costume.size, costume.bitmapResolution) : null, dragPayload: costume })) : []; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_asset_panel_asset_panel_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { buttons: [{ title: intl.formatMessage(addLibraryMessage), img: addLibraryIcon, onClick: addLibraryFunc }, { title: intl.formatMessage(addFileMessage), img: _components_action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_20___default.a, onClick: this.handleFileUploadClick, fileAccept: '.svg, .png, .bmp, .jpg, .jpeg, .jfif, .webp, .gif', fileChange: this.handleCostumeUpload, fileInput: this.setFileInput, fileMultiple: true }, { title: intl.formatMessage(messages.addSurpriseCostumeMsg), img: _components_action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_22___default.a, onClick: addSurpriseFunc }, { title: intl.formatMessage(messages.addBlankCostumeMsg), img: _components_action_menu_icon_paint_svg__WEBPACK_IMPORTED_MODULE_21___default.a, onClick: this.handleNewBlankCostume }, { title: intl.formatMessage(addLibraryMessage), img: _components_action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_23___default.a, onClick: addLibraryFunc }], dragType: _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].COSTUME, isRtl: isRtl, items: costumeData, selectedItemIndex: this.state.selectedCostumeIndex, onDeleteClick: target && target.costumes && target.costumes.length > 1 ? this.handleDeleteCostume : null, onDrop: this.handleDrop, onDuplicateClick: this.handleDuplicateCostume, onExportClick: this.handleExportCostume, onItemClick: this.handleSelectCostume }, target.costumes ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_paint_editor_wrapper_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { selectedCostumeIndex: this.state.selectedCostumeIndex, isDark: this.props.isDark }) : null); } } CostumeTab.propTypes = { dispatchUpdateRestore: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, editingTarget: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], isDark: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, onActivateSoundsTab: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onCloseImporting: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onNewLibraryBackdropClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onNewLibraryCostumeClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onShowImporting: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, sprites: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ id: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ costumes: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ url: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, skinId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number })) }) }), stage: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ sounds: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired })) }), vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a) }; const mapStateToProps = state => ({ editingTarget: state.scratchGui.targets.editingTarget, isRtl: state.locales.isRtl, sprites: state.scratchGui.targets.sprites, stage: state.scratchGui.targets.stage, dragging: state.scratchGui.assetDrag.dragging }); const mapDispatchToProps = dispatch => ({ onActivateSoundsTab: () => dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_15__["activateTab"])(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_15__["SOUNDS_TAB_INDEX"])), onNewLibraryBackdropClick: e => { e.preventDefault(); dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_14__["openBackdropLibrary"])()); }, onNewLibraryCostumeClick: e => { e.preventDefault(); dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_14__["openCostumeLibrary"])()); }, dispatchUpdateRestore: restoreState => { dispatch(Object(_reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_16__["setRestore"])(restoreState)); }, onCloseImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_17__["closeAlertWithId"])('importingAsset')), onShowImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_17__["showStandardAlert"])('importingAsset')) }); /* harmony default export */ __webpack_exports__["default"] = (Object(_lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_9__["default"])('Costume Tab')(Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_7__["connect"])(mapStateToProps, mapDispatchToProps)(CostumeTab)))); /***/ }), /***/ "./src/containers/custom-procedures-util/color.js": /*!********************************************************!*\ !*** ./src/containers/custom-procedures-util/color.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { const levelText = __webpack_require__(/*! ./text leveler */ "./src/containers/custom-procedures-util/text leveler.js"); class Color { /** * @typedef {object} RGBObject - An object representing a color in RGB format. * @property {number} r - the red component, in the range [0, 255]. * @property {number} g - the green component, in the range [0, 255]. * @property {number} b - the blue component, in the range [0, 255]. */ /** * @typedef {object} HSVObject - An object representing a color in HSV format. * @property {number} h - hue, in the range [0-359). * @property {number} s - saturation, in the range [0,1]. * @property {number} v - value, in the range [0,1]. */ /** @type {RGBObject} */ static get RGB_BLACK() { return { r: 0, g: 0, b: 0 }; } /** @type {RGBObject} */ static get RGB_WHITE() { return { r: 255, g: 255, b: 255 }; } /** * Convert a Scratch decimal color to a hex string, #RRGGBB. * @param {number} decimal RGB color as a decimal. * @return {string} RGB color as #RRGGBB hex string. */ static decimalToHex(decimal) { const rgb = this.decimalToRgb(decimal); const alphaOrNone = rgb.a !== 255 ? rgb.a.toString(16) : ''; const r = levelText(rgb.r.toString(16), 2, '0'); const g = levelText(rgb.g.toString(16), 2, '0'); const b = levelText(rgb.b.toString(16), 2, '0'); return "#".concat(r).concat(g).concat(b).concat(alphaOrNone); } /** * Convert a Scratch decimal color to an RGB color object. * @param {number} decimal RGB color as decimal. * @return {RGBObject} rgb - {r: red [0,255], g: green [0,255], b: blue [0,255]}. */ static decimalToRgb(decimal) { const alpha = (decimal >> 24 & 0xFF) !== 0x00; let r = decimal >> 16 & 0xFF, g = decimal >> 8 & 0xFF, b = decimal & 0xFF, a = 0; if (alpha) { a = decimal >> 24 & 0xFF; r = decimal >> 16 & 0xFF; g = decimal >> 8 & 0xFF; b = decimal & 0xFF; } return { r: r, g: g, b: b, a: 255 - a }; } /** * Convert a hex color (e.g., F00, #03F, #0033FF) to an RGB color object. * @param {!string} hex Hex representation of the color. * @return {RGBObject} null on failure, or rgb: {r: red [0,255], g: green [0,255], b: blue [0,255]}. */ static hexToRgb(hex) { if (hex.startsWith('#')) { hex = hex.substring(1); } const parsed = parseInt(hex, 16); if (isNaN(parsed)) { return null; } if (hex.length === 6) { return { r: parsed >> 16 & 0xff, g: parsed >> 8 & 0xff, b: parsed & 0xff }; } else if (hex.length === 8) { return { r: parsed >> 24 & 0xff, g: parsed >> 16 & 0xff, b: parsed >> 8 & 0xff, a: parsed & 0xff }; } else if (hex.length === 3) { const r = parsed >> 8 & 0xf; const g = parsed >> 4 & 0xf; const b = parsed & 0xf; return { r: r << 4 | r, g: g << 4 | g, b: b << 4 | b }; } return null; } /** * Convert an RGB color object to a hex color. * @param {RGBObject} rgb - {r: red [0,255], g: green [0,255], b: blue [0,255]}. * @return {!string} Hex representation of the color. */ static rgbToHex(rgb) { return Color.decimalToHex(Color.rgbToDecimal(rgb)); } /** * Convert an RGB color object to a Scratch decimal color. * @param {RGBObject} rgb - {r: red [0,255], g: green [0,255], b: blue [0,255]}. * @return {!number} Number representing the color. */ static rgbToDecimal(rgb) { if (typeof rgb.a === 'number') { return (255 - rgb.a << 24) + (rgb.r << 16) + (rgb.g << 8) + rgb.b; } return (rgb.r << 16) + (rgb.g << 8) + rgb.b; } /** * Convert a hex color (e.g., F00, #03F, #0033FF) to a decimal color number. * @param {!string} hex Hex representation of the color. * @return {!number} Number representing the color. */ static hexToDecimal(hex) { return Color.rgbToDecimal(Color.hexToRgb(hex)); } /** * Convert an HSV color to RGB format. * @param {HSVObject} hsv - {h: hue [0,360), s: saturation [0,1], v: value [0,1]} * @return {RGBObject} rgb - {r: red [0,255], g: green [0,255], b: blue [0,255]}. */ static hsvToRgb(hsv) { let h = hsv.h % 360; if (h < 0) h += 360; const s = Math.max(0, Math.min(hsv.s, 1)); const v = Math.max(0, Math.min(hsv.v, 1)); const i = Math.floor(h / 60); const f = h / 60 - i; const p = v * (1 - s); const q = v * (1 - s * f); const t = v * (1 - s * (1 - f)); let r; let g; let b; switch (i) { default: case 0: r = v; g = t; b = p; break; case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; case 5: r = v; g = p; b = q; break; } return { r: Math.floor(r * 255), g: Math.floor(g * 255), b: Math.floor(b * 255) }; } /** * Convert an RGB color to HSV format. * @param {RGBObject} rgb - {r: red [0,255], g: green [0,255], b: blue [0,255]}. * @return {HSVObject} hsv - {h: hue [0,360), s: saturation [0,1], v: value [0,1]} */ static rgbToHsv(rgb) { const r = rgb.r / 255; const g = rgb.g / 255; const b = rgb.b / 255; const x = Math.min(Math.min(r, g), b); const v = Math.max(Math.max(r, g), b); // For grays, hue will be arbitrarily reported as zero. Otherwise, calculate let h = 0; let s = 0; if (x !== v) { const f = r === x ? g - b : g === x ? b - r : r - g; const i = r === x ? 3 : g === x ? 5 : 1; h = (i - f / (v - x)) * 60 % 360; s = (v - x) / v; } return { h: h, s: s, v: v }; } /** * Linear interpolation between rgb0 and rgb1. * @param {RGBObject} rgb0 - the color corresponding to fraction1 <= 0. * @param {RGBObject} rgb1 - the color corresponding to fraction1 >= 1. * @param {number} fraction1 - the interpolation parameter. If this is 0.5, for example, mix the two colors equally. * @return {RGBObject} the interpolated color. */ static mixRgb(rgb0, rgb1, fraction1) { if (fraction1 <= 0) return rgb0; if (fraction1 >= 1) return rgb1; const fraction0 = 1 - fraction1; return { r: fraction0 * rgb0.r + fraction1 * rgb1.r, g: fraction0 * rgb0.g + fraction1 * rgb1.g, b: fraction0 * rgb0.b + fraction1 * rgb1.b }; } } module.exports = Color; /***/ }), /***/ "./src/containers/custom-procedures-util/text leveler.js": /*!***************************************************************!*\ !*** ./src/containers/custom-procedures-util/text leveler.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * creates a string of a given length from a given content * @param {Number} length the goal length * @param {String} contents what to make the string from * @returns {String} a string with contents repeated length times */ const makeString = (length, contents) => { let array; for (array = []; array.length < length; array.push(contents)); return array.join(); }; /** * levels text so its always the same length * @param {String} text the text to level * @param {Number} length the length to level to * @param {String} sus the filler character * @returns {String} the leveled text */ const levelText = (text, length, sus) => { if (text.length === length) return text; if (text.length > length) return text.slice(0, length + 1); const full = makeString(length, sus); return "".concat(full.slice(0, length - text.length)).concat(text); }; module.exports = levelText; /***/ }), /***/ "./src/containers/custom-procedures.jsx": /*!**********************************************!*\ !*** ./src/containers/custom-procedures.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash_defaultsdeep__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.defaultsdeep */ "./node_modules/lodash.defaultsdeep/index.js"); /* harmony import */ var lodash_defaultsdeep__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_defaultsdeep__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _components_custom_procedures_custom_procedures_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/custom-procedures/custom-procedures.jsx */ "./src/components/custom-procedures/custom-procedures.jsx"); /* harmony import */ var _lib_tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/tw-lazy-scratch-blocks */ "./src/lib/tw-lazy-scratch-blocks.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _custom_procedures_util_color_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./custom-procedures-util/color.js */ "./src/containers/custom-procedures-util/color.js"); /* harmony import */ var _custom_procedures_util_color_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_custom_procedures_util_color_js__WEBPACK_IMPORTED_MODULE_7__); function createHeavyColorFromHex(hex, percentage) { const rgb = _custom_procedures_util_color_js__WEBPACK_IMPORTED_MODULE_7___default.a.hexToRgb(hex); const hsv = _custom_procedures_util_color_js__WEBPACK_IMPORTED_MODULE_7___default.a.rgbToHsv(rgb); if (hsv.v > 0.6) { // so that pure white can still get color change hsv.v -= percentage / 2; } // only white-black have this property // so we can avoid adding red to them if (!(hsv.h === 0 && hsv.s === 0)) { hsv.s += percentage * hsv.v; } // make sure values arent invalid if (hsv.v > 1) hsv.v = 1; if (hsv.v < 0) hsv.v = 0; if (hsv.s > 1) hsv.s = 1; if (hsv.s < 0) hsv.s = 0; const newRgb = _custom_procedures_util_color_js__WEBPACK_IMPORTED_MODULE_7___default.a.hsvToRgb(hsv); return _custom_procedures_util_color_js__WEBPACK_IMPORTED_MODULE_7___default.a.rgbToHex(newRgb); } class CustomProcedures extends react__WEBPACK_IMPORTED_MODULE_3___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleAddLabel', 'handleAddBoolean', 'handleAddCommand', 'handleAddTextNumber', 'handleToggleWarp', 'handleToggleReturns', 'handleCancel', 'handleOk', 'handleChangeType', 'handleBlockColorChange', 'setHexBlockColor', 'setBlocks', 'handleTestFunction']); this.state = { rtlOffset: 0, warp: false, returns: false, editing: false, blockColor: '#000000', type: 'statement' }; } componentWillUnmount() { if (this.workspace) { this.workspace.dispose(); } } setBlocks(blocksRef) { if (!blocksRef) return; this.blocks = blocksRef; const workspaceConfig = lodash_defaultsdeep__WEBPACK_IMPORTED_MODULE_1___default()({}, CustomProcedures.defaultOptions, this.props.options, { rtl: this.props.isRtl }); // @todo This is a hack to make there be no toolbox. const ScratchBlocks = _lib_tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_5__["default"].get(); const oldDefaultToolbox = ScratchBlocks.Blocks.defaultToolbox; ScratchBlocks.Blocks.defaultToolbox = null; this.workspace = ScratchBlocks.inject(this.blocks, workspaceConfig); ScratchBlocks.Blocks.defaultToolbox = oldDefaultToolbox; // Create the procedure declaration block for editing the mutation. this.mutationRoot = this.workspace.newBlock('procedures_declaration'); // Make the declaration immovable, undeletable and have no context menu this.mutationRoot.setMovable(false); this.mutationRoot.setDeletable(false); this.mutationRoot.contextMenu = false; this.workspace.addChangeListener(() => { this.mutationRoot.onChangeFn(); // Keep the block centered on the workspace const metrics = this.workspace.getMetrics(); const { x, y } = this.mutationRoot.getRelativeToSurfaceXY(); const dy = metrics.viewHeight / 2 - this.mutationRoot.height / 2 - y; let dx; if (this.props.isRtl) { // // TODO: https://github.com/LLK/scratch-gui/issues/2838 // This is temporary until we can figure out what's going on width // block positioning on the workspace for RTL. // Workspace is always origin top-left, with x increasing to the right // Calculate initial starting offset and save it, every other move // has to take the original offset into account. // Calculate a new left postion based on new width // Convert current x position into LTR (mirror) x position (uses original offset) // Use the difference between ltrX and mirrorX as the amount to move const ltrX = metrics.viewWidth / 2 - this.mutationRoot.width / 2 + 25; const mirrorX = x - (x - this.state.rtlOffset) * 2; if (mirrorX === ltrX) { return; } dx = mirrorX - ltrX; const midPoint = metrics.viewWidth / 2; if (x === 0) { // if it's the first time positioning, it should always move right if (this.mutationRoot.width < midPoint) { dx = ltrX; } else if (this.mutationRoot.width < metrics.viewWidth) { dx = midPoint - (metrics.viewWidth - this.mutationRoot.width) / 2; } else { dx = midPoint + (this.mutationRoot.width - metrics.viewWidth); } this.mutationRoot.moveBy(dx, dy); this.setState({ rtlOffset: this.mutationRoot.getRelativeToSurfaceXY().x }); return; } if (this.mutationRoot.width > metrics.viewWidth) { dx = dx + this.mutationRoot.width - metrics.viewWidth; } } else { dx = metrics.viewWidth / 2 - this.mutationRoot.width / 2 - x; // If the procedure declaration is wider than the view width, // keep the right-hand side of the procedure in view. if (this.mutationRoot.width > metrics.viewWidth) { dx = metrics.viewWidth - this.mutationRoot.width - x; } } this.mutationRoot.moveBy(dx, dy); }); this.mutationRoot.domToMutation(this.props.mutator); this.mutationRoot.initSvg(); this.mutationRoot.render(); this.setState({ warp: this.mutationRoot.getWarp(), returns: this.mutationRoot.getReturns(), editing: this.mutationRoot.getEdited(), // sometimes color[0] exists but sometimes it doesnt // i can blame gsa for this or just do nothing about it :troll: blockColor: this.mutationRoot.color ? this.mutationRoot.color[0] : this.mutationRoot.colour_ }); // Allow the initial events to run to position this block, then focus. setTimeout(() => { this.mutationRoot.focusLastEditor_(); // if editing, apply block color if (this.state.editing && this.mutationRoot.color) { this.handleBlockColorChange({ target: { value: this.mutationRoot.color[0] } }); } }); } handleCancel() { this.props.onRequestClose(); } handleOk() { this.mutationRoot.setEdited(true); const newMutation = this.mutationRoot ? this.mutationRoot.mutationToDom(true) : null; this.props.onRequestClose(newMutation); } handleAddLabel() { if (this.mutationRoot) { this.mutationRoot.addLabelExternal(); } } handleAddBoolean() { if (this.mutationRoot) { this.mutationRoot.addBooleanExternal(); } } handleAddCommand() { if (this.mutationRoot) { this.mutationRoot.addCommandExternal(); } } handleAddTextNumber() { if (this.mutationRoot) { this.mutationRoot.addStringNumberExternal(); } } handleToggleWarp() { if (this.mutationRoot) { const newWarp = !this.mutationRoot.getWarp(); this.mutationRoot.setWarp(newWarp); this.setState({ warp: newWarp }); } } handleToggleReturns() { if (this.mutationRoot) { const newReturns = !this.mutationRoot.getReturns(); this.mutationRoot.setReturns(newReturns); this.handleChangeType(newReturns ? 'string' : 'statement'); this.setState({ returns: newReturns }); } } handleChangeType(value) { if (this.mutationRoot) { const newType = value; this.mutationRoot.setType(newType); this.setState({ type: newType }); } } handleBlockColorChange(element) { if (this.mutationRoot) { const newColor = element.target.value; this.mutationRoot.setColor(newColor, createHeavyColorFromHex(newColor, 0.15), createHeavyColorFromHex(newColor, 0.25)); this.setState({ blockColor: newColor }); } } setHexBlockColor(hex) { this.handleBlockColorChange({ target: { value: hex } }); } handleTestFunction(type) { if (this.mutationRoot) { switch (type) { case 'icon': { const iconUri = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAADwUExURf/////////////z8//v7//u7v/n5//j4//5+f/////////MzP+3t//////////9/f////+trf/////////Ozv/Pz//////////39//Jyf/8/P/////////////+/v/z8//////////S0v/Hx//////////e3v/e3v/////////////r6//e3v/j4//u7v////+Ghv+Fhf+Dg/95ef+bm/+Xl/+lpf+trf+rq/+fn/+kpP+Tk/9tbf+Cgv+Hh/9ZWf+cnP9ycv9bW/+Jif99ff+Li//ExP+zs/+EhP+Kiv+YmP9vb/+4uP9ubv+Bgf////kftB4AAAAwdFJOUwAQfdDW2u37siNq9f2ImKV0/JlH8PVlD6D6z2gMIc/DGDbt90Yr4uMvBHLr/fXjbhcejrAAAAABYktHRACIBR1IAAAAB3RJTUUH5wUYBDIzz3HsIQAAAHNJREFUCNdjYGRiZmFhZWPn4GTg4jYwMDA0MubhZeAzMTUzt7C0suZnEBC0trG1s7dzEGIQFnF0snV2cRYVYxCXkLSyc3WTkpZhYJCVc/fw9JJXYGBgUFTyNvfxVVYBMlXVjPz8DNQ1gExNLW0dXT19TQYA+wMO76YS2sEAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjRUMDQ6NTA6NTArMDA6MDDybVL4AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDA0OjUwOjUwKzAwOjAwgzDqRAAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyMy0wNS0yNFQwNDo1MDo1MSswMDowMHJSwC8AAAAASUVORK5CYII='; this.mutationRoot.setImage(iconUri); break; } case 'removeicon': { this.mutationRoot.unsetImage(); break; } } } } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_components_custom_procedures_custom_procedures_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { componentRef: this.setBlocks, warp: this.state.warp, blockColor: this.state.blockColor, returns: this.state.returns, onAddBoolean: this.handleAddBoolean, onAddCommand: this.handleAddCommand, onAddLabel: this.handleAddLabel, onAddTextNumber: this.handleAddTextNumber, onCancel: this.handleCancel, onOk: this.handleOk, onToggleWarp: this.handleToggleWarp, onToggleReturns: this.handleToggleReturns, editing: this.state.editing, selectedType: this.state.type, onOutputTypeChanged: this.handleChangeType, onBlockColorChange: this.handleBlockColorChange, setHexBlockColor: this.setHexBlockColor, onTestStart: this.handleTestFunction }); } } CustomProcedures.propTypes = { isRtl: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, mutator: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(Element), onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, options: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({ media: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, zoom: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({ controls: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, wheel: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, startScale: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number }), comments: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, collapse: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool }) }; CustomProcedures.defaultOptions = { zoom: { controls: false, wheel: false, startScale: 0.9 }, comments: false, collapse: false, scrollbars: true }; CustomProcedures.defaultProps = { options: CustomProcedures.defaultOptions }; const mapStateToProps = state => ({ isRtl: state.locales.isRtl, mutator: state.scratchGui.customProcedures.mutator }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_6__["connect"])(mapStateToProps)(CustomProcedures)); /***/ }), /***/ "./src/containers/deletion-restorer.jsx": /*!**********************************************!*\ !*** ./src/containers/deletion-restorer.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/restore-deletion */ "./src/reducers/restore-deletion.js"); const _excluded = ["children", "dispatchUpdateRestore"]; function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } /** * DeletionRestorer component passes a restoreDeletion function to its child. * It expects this child to be a function with the signature * function (restoreDeletion, props) {} * The component can then be used to attach deletion restoring functionality * to any other component: * * {(restoreDeletion, props) => ( * * )} */ class DeletionRestorer extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['restoreDeletion']); } restoreDeletion() { if (typeof this.props.restore === 'function') { this.props.restore(); this.props.dispatchUpdateRestore({ restoreFun: null, deletedItem: '' }); } } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ children, dispatchUpdateRestore /* eslint-enable no-unused-vars */ } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); const restorable = typeof this.props.restore === 'function'; return this.props.children(this.restoreDeletion, _objectSpread(_objectSpread({}, props), {}, { restorable })); } } DeletionRestorer.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, deletedItem: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, dispatchUpdateRestore: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, restore: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; const mapStateToProps = state => ({ deletedItem: state.scratchGui.restoreDeletion.deletedItem, restore: state.scratchGui.restoreDeletion.restoreFun }); const mapDispatchToProps = dispatch => ({ dispatchUpdateRestore: updatedState => { dispatch(Object(_reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_4__["setRestore"])(updatedState)); } }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(DeletionRestorer)); /***/ }), /***/ "./src/containers/direction-picker.jsx": /*!*********************************************!*\ !*** ./src/containers/direction-picker.jsx ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_direction_picker_direction_picker_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/direction-picker/direction-picker.jsx */ "./src/components/direction-picker/direction-picker.jsx"); class DirectionPicker extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleOpenPopover', 'handleClosePopover', 'handleClickLeftRight', 'handleClickDontRotate', 'handleClickAllAround', 'handleClickUpDown', 'handleClickLookAt']); this.state = { popoverOpen: false }; } handleOpenPopover() { this.setState({ popoverOpen: true }); } handleClosePopover() { this.setState({ popoverOpen: false }); } handleClickAllAround() { this.props.onChangeRotationStyle(_components_direction_picker_direction_picker_jsx__WEBPACK_IMPORTED_MODULE_3__["RotationStyles"].ALL_AROUND); } handleClickLookAt() { this.props.onChangeRotationStyle(_components_direction_picker_direction_picker_jsx__WEBPACK_IMPORTED_MODULE_3__["RotationStyles"].LOOK_AT); } handleClickLeftRight() { this.props.onChangeRotationStyle(_components_direction_picker_direction_picker_jsx__WEBPACK_IMPORTED_MODULE_3__["RotationStyles"].LEFT_RIGHT); } handleClickUpDown() { this.props.onChangeRotationStyle(_components_direction_picker_direction_picker_jsx__WEBPACK_IMPORTED_MODULE_3__["RotationStyles"].UP_DOWN); } handleClickDontRotate() { this.props.onChangeRotationStyle(_components_direction_picker_direction_picker_jsx__WEBPACK_IMPORTED_MODULE_3__["RotationStyles"].DONT_ROTATE); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_direction_picker_direction_picker_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { direction: this.props.direction, disabled: this.props.disabled, labelAbove: this.props.labelAbove, popoverOpen: this.state.popoverOpen && !this.props.disabled, rotationStyle: this.props.rotationStyle, onChangeDirection: this.props.onChangeDirection, onClickAllAround: this.handleClickAllAround, onClickDontRotate: this.handleClickDontRotate, onClickLeftRight: this.handleClickLeftRight, onClickLookAt: this.handleClickLookAt, onClickUpDown: this.handleClickUpDown, onClosePopover: this.handleClosePopover, onOpenPopover: this.handleOpenPopover }); } } DirectionPicker.propTypes = { direction: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, labelAbove: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onChangeDirection: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeRotationStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, rotationStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (DirectionPicker); /***/ }), /***/ "./src/containers/dom-element-renderer.jsx": /*!*************************************************!*\ !*** ./src/containers/dom-element-renderer.jsx ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.omit */ "./node_modules/lodash.omit/index.js"); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_omit__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var to_style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! to-style */ "./node_modules/to-style/index.js"); /* harmony import */ var to_style__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(to_style__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_style_proptype__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-style-proptype */ "./node_modules/react-style-proptype/src/index.js"); /* harmony import */ var react_style_proptype__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_style_proptype__WEBPACK_IMPORTED_MODULE_4__); /* * DOMElementRenderer wraps a DOM element, allowing it to be * rendered by React. It's up to the containing component * to retain a reference to the element prop, or else it * will be garbage collected after unmounting. * * Props passed to the DOMElementRenderer will be set on the * DOM element like it's a normal component. */ class DOMElementRenderer extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); this.setContainer = this.setContainer.bind(this); } componentDidMount() { if (!this.props.domElement) return; this.container.appendChild(this.props.domElement); } componentWillUnmount() { if (!this.props.domElement) return; if (this.props.domElement.parentNode !== this.container) return; this.container.removeChild(this.props.domElement); } setContainer(c) { this.container = c; } render() { let element = this.props.domElement; // if we where never passed an element, ensure Object.assign doesnt error out about if (!element) { element = document.createElement('span'); element.innerText = 'ERR: No element provided'; console.warn('No element provided to the DOMElementRenderer'); } // Apply props to the DOM element, so its attributes // are updated as if it were a normal component. // Look at me, I'm the React now! Object.assign(element, lodash_omit__WEBPACK_IMPORTED_MODULE_0___default()(this.props, ['domElement', 'children', 'style'])); // Convert react style prop to dom element styling. if (this.props.style) { element.style.cssText = to_style__WEBPACK_IMPORTED_MODULE_3___default.a.string(this.props.style); } if (this.container) { this.container.innerHTML = ''; this.container.appendChild(element); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { ref: this.setContainer }); } } DOMElementRenderer.propTypes = { domElement: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(Element).isRequired, style: react_style_proptype__WEBPACK_IMPORTED_MODULE_4___default.a }; /* harmony default export */ __webpack_exports__["default"] = (DOMElementRenderer); /***/ }), /***/ "./src/containers/drag-layer.jsx": /*!***************************************!*\ !*** ./src/containers/drag-layer.jsx ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _components_drag_layer_drag_layer_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/drag-layer/drag-layer.jsx */ "./src/components/drag-layer/drag-layer.jsx"); const mapStateToProps = state => ({ dragging: state.scratchGui.assetDrag.dragging, currentOffset: state.scratchGui.assetDrag.currentOffset, img: state.scratchGui.assetDrag.img }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(mapStateToProps)(_components_drag_layer_drag_layer_jsx__WEBPACK_IMPORTED_MODULE_1__["default"])); /***/ }), /***/ "./src/containers/error-boundary.jsx": /*!*******************************************!*\ !*** ./src/containers/error-boundary.jsx ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _components_crash_message_crash_message_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/crash-message/crash-message.jsx */ "./src/components/crash-message/crash-message.jsx"); /* harmony import */ var _lib_log_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/log.js */ "./src/lib/log.js"); /* harmony import */ var _lib_supported_browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/supported-browser */ "./src/lib/supported-browser.js"); class ErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); this.state = { hasError: false, errorId: null }; } componentDidCatch(error, info) { // Error object may be undefined (IE?) error = error || { stack: 'Unknown stack', message: 'Unknown error' }; // Log errors to analytics, leaving out browsers that are not in our recommended set if (Object(_lib_supported_browser__WEBPACK_IMPORTED_MODULE_4__["recommendedBrowser"])() && window.Sentry) { window.Sentry.withScope(scope => { Object.keys(info).forEach(key => { scope.setExtra(key, info[key]); }); scope.setExtra('action', this.props.action); window.Sentry.captureException(error); }); } // Display fallback UI this.setState({ hasError: true, errorId: window.Sentry ? window.Sentry.lastEventId() : null, errorMessage: "".concat(error && error.message || error) }); // Log error locally for debugging as well. _lib_log_js__WEBPACK_IMPORTED_MODULE_3__["default"].error("Unhandled Error: ".concat(error.stack ? error.stack : error, "\nComponent stack: ").concat(info.componentStack)); } handleBack() { window.history.back(); } handleReload() { window.location.replace(window.location.origin + window.location.pathname); } render() { if (this.state.hasError) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_crash_message_crash_message_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { eventId: this.state.errorId, errorMessage: this.state.errorMessage, onReload: this.handleReload }); } return this.props.children; } } ErrorBoundary.propTypes = { action: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, // Used for defining tracking action children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node }; /* harmony default export */ __webpack_exports__["default"] = (ErrorBoundary); /***/ }), /***/ "./src/containers/extension-library.jsx": /*!**********************************************!*\ !*** ./src/containers/extension-library.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_log__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/log */ "./src/lib/log.js"); /* harmony import */ var _tw_security_manager_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tw-security-manager.jsx */ "./src/containers/tw-security-manager.jsx"); /* harmony import */ var _lib_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/libraries/extensions/index.jsx */ "./src/lib/libraries/extensions/index.jsx"); /* harmony import */ var _lib_libraries_extension_tags__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/libraries/extension-tags */ "./src/lib/libraries/extension-tags.js"); /* harmony import */ var _components_library_library_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/library/library.jsx */ "./src/components/library/library.jsx"); /* harmony import */ var _components_action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/action-menu/icon--sprite.svg */ "./src/components/action-menu/icon--sprite.svg"); /* harmony import */ var _components_action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_components_action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_10__); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({ extensionTitle: { "id": "gui.extensionLibrary.chooseAnExtension", "defaultMessage": "Choose an Extension" }, // extensionUrl: { // defaultMessage: 'Enter the URL of the extension', // description: 'Prompt for unoffical extension url', // id: 'gui.extensionLibrary.extensionUrl' // }, incompatible: { "id": "tw.confirmIncompatibleExtension", "defaultMessage": "This extension is incompatible with Scratch. Projects made with it cannot be uploaded to the Scratch website. Are you sure you want to enable it?" }, extensionWarning: { "id": "pm.confirmBuggyUnstableExtension", "defaultMessage": "This extension is not recommended for real projects. It may be unstable and cause problems with your project later on. Are you sure you want to enable it?" } }); // Only trust loading extension links from these origins. // For user-made libraries. const TRUSTED_LOADEXT_ORIGINS = ['https://studio.penguinmod.com', // for development 'https://extensions.penguinmod.com', 'https://sharkpools-extensions.vercel.app', 'https://soiz1-sharkpool-extension.hf.space', 'https://raw.githubusercontent.com/SharkPool-SP/SharkPools-Extensions/main', // Some people cant connect to vercel 'https://pen-group.github.io']; class ExtensionLibrary extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleItemSelect', 'wrapperEventHandler']); } componentDidMount() { window.addEventListener('message', this.wrapperEventHandler); } componentWillUnmount() { window.removeEventListener('message', this.wrapperEventHandler); } async wrapperEventHandler(e) { // Don't recursively try to run this event. if (e.origin === window.origin) { return; } // Only trust loading extension links from these origins. let foundTrustedOrigin = false; for (const trustedOrigin of TRUSTED_LOADEXT_ORIGINS) { if (true) { foundTrustedOrigin = true; break; } } if (!foundTrustedOrigin) { console.log(e.origin); e.source.postMessage({ p4: { type: 'error', error: 'not_trusted' } }, e.origin); return; } if (!e.data.loadExt) { e.source.postMessage({ p4: { type: 'error', error: 'no_loadExt' } }, e.origin); return; } const extensionId = e.data.loadExt; if (typeof extensionId !== 'string') { e.source.postMessage({ p4: { type: 'error', error: 'not_string' } }, e.origin); return; } // load the extension like any other custom extension url (this means sandboxing for some urls) if (this.props.vm.extensionManager.isExtensionLoaded(extensionId)) { this.props.onCategorySelected(extensionId); // i mean, technically we succeeded e.source.postMessage({ p4: { type: 'success' } }, e.origin); } else { this.props.vm.extensionManager.loadExtensionURL(extensionId).then(() => { this.props.onCategorySelected(extensionId); // succeeded e.source.postMessage({ p4: { type: 'success' } }, e.origin); }).catch(err => { _lib_log__WEBPACK_IMPORTED_MODULE_5__["default"].error(err); // The source website is expected to display the error e.source.postMessage({ p4: { type: 'error', error: 'couldnt_load', pmerror: String(err.stack ? err.stack : err) } }, e.origin); }); } } async handleItemSelect(item) { // eslint-disable-next-line no-alert if (item.extensionWarningOnImport && !confirm(this.props.intl.formatMessage(messages.extensionWarning))) { return; } // const id = item.extensionId; // let url = item.extensionURL ? item.extensionURL : id; // const isCustomURL = !item.disabled && !id; // if (isCustomURL) { // // eslint-disable-next-line no-alert // url = prompt(this.props.intl.formatMessage(messages.extensionUrl)); // } const extensionId = item.extensionId; const isCustomURL = !item.disabled && !extensionId; if (isCustomURL) { this.props.onOpenCustomExtensionModal(); return; } if (extensionId === 'special_penguinmodExtensionLibrary') { window.open('https://extensions.penguinmod.com/'); return; } const url = item.extensionURL ? item.extensionURL : extensionId; if (item._unsandboxed) { if (url.startsWith("data:")) { Object(_tw_security_manager_jsx__WEBPACK_IMPORTED_MODULE_6__["manuallyTrustExtension"])(url); } else { await this.props.vm.securityManager.canLoadExtensionFromProject(url); } } if (!item.disabled) { if (this.props.vm.extensionManager.isExtensionLoaded(extensionId)) { this.props.onCategorySelected(extensionId); } else { this.props.vm.extensionManager.loadExtensionURL(url).then(() => { this.props.onCategorySelected(extensionId); // if (isCustomURL) { // let newUrl = location.pathname; // if (location.search) { // newUrl += location.search; // newUrl += '&'; // } else { // newUrl += '?'; // } // newUrl += `extension=${encodeURIComponent(url)}`; // history.replaceState('', '', newUrl); // } }).catch(err => { _lib_log__WEBPACK_IMPORTED_MODULE_5__["default"].error(err); // eslint-disable-next-line no-alert alert(err); }); } } } render() { const extensionLibraryThumbnailData = _lib_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_7__["default"].map(extension => _objectSpread({ rawURL: extension.iconURL || _components_action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_10___default.a, disabled: extension.disabled && !this.props.liveTest }, extension)); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_library_library_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { data: extensionLibraryThumbnailData, filterable: true, tags: _lib_libraries_extension_tags__WEBPACK_IMPORTED_MODULE_8__["default"], id: "extensionLibrary", actor: "ExtensionLibrary", header: "Extensions", title: this.props.intl.formatMessage(messages.extensionTitle), visible: this.props.visible, onItemSelected: this.handleItemSelect, onRequestClose: this.props.onRequestClose }); } } ExtensionLibrary.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"].isRequired, onCategorySelected: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onOpenCustomExtensionModal: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, visible: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_3___default.a).isRequired // eslint-disable-line react/no-unused-prop-types }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(ExtensionLibrary)); /***/ }), /***/ "./src/containers/files-tab.jsx": /*!**************************************!*\ !*** ./src/containers/files-tab.jsx ***! \**************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _components_asset_panel_asset_panel_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/asset-panel/asset-panel.jsx */ "./src/components/asset-panel/asset-panel.jsx"); /* harmony import */ var _components_asset_panel_icon_files_placeholder_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/asset-panel/icon--files-placeholder.svg */ "./src/components/asset-panel/icon--files-placeholder.svg"); /* harmony import */ var _components_asset_panel_icon_files_placeholder_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_components_asset_panel_icon_files_placeholder_svg__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _components_asset_panel_nord_png__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/asset-panel/nord.png */ "./src/components/asset-panel/nord.png"); /* harmony import */ var _components_asset_panel_nord_png__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_components_asset_panel_nord_png__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/file-uploader.js */ "./src/lib/file-uploader.js"); /* harmony import */ var _lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/error-boundary-hoc.jsx */ "./src/lib/error-boundary-hoc.jsx"); /* harmony import */ var _lib_download_blob__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/download-blob */ "./src/lib/download-blob.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../reducers/restore-deletion */ "./src/reducers/restore-deletion.js"); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js"); // import soundIconRtl from '../components/asset-panel/icon--sound-rtl.svg'; // import addSoundFromLibraryIcon from '../components/asset-panel/icon--add-sound-lib.svg'; // import addSoundFromRecordingIcon from '../components/asset-panel/icon--add-sound-record.svg'; // import fileUploadIcon from '../components/action-menu/icon--file-upload.svg'; // import surpriseIcon from '../components/action-menu/icon--surprise.svg'; // import searchIcon from '../components/action-menu/icon--search.svg'; // import RecordModal from './record-modal.jsx'; // import SoundEditor from './sound-editor.jsx'; // import SoundLibrary from './sound-library.jsx'; // import { getSoundLibrary } from '../lib/libraries/tw-async-libraries'; // import DragConstants from '../lib/drag-constants'; // import { // closeSoundLibrary, // openSoundLibrary, // openSoundRecorder // } from '../reducers/modals'; // import { // activateTab, // COSTUMES_TAB_INDEX // } from '../reducers/editor-tab'; class FilesTab extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleSelectFile', 'handleDeleteFile', 'handleDuplicateFile', 'handleDownloadFile', 'handleNewFile', // 'handleSurpriseSound', 'handleFileUploadClick', 'handleExternalFileUpload', // 'handleDrop', 'setFileInput']); this.state = { selectedFileIndex: 0 }; } componentWillReceiveProps(nextProps) { // TODO: handle this // const { // editingTarget, // sprites, // stage // } = nextProps; // const target = editingTarget && sprites[editingTarget] ? sprites[editingTarget] : stage; // if (!target || !target.sounds) { // return; // } // // If switching editing targets, reset the sound index // if (this.props.editingTarget !== editingTarget) { // this.setState({ selectedSoundIndex: 0 }); // } else if (this.state.selectedSoundIndex > target.sounds.length - 1) { // this.setState({ selectedSoundIndex: Math.max(target.sounds.length - 1, 0) }); // } } handleSelectFile(fileIndex) { this.setState({ selectedFileIndex: fileIndex }); } handleDeleteFile(fileIndex) { // TODO: deleteFile isnt a function const restoreFun = this.props.vm.deleteFile(fileIndex); if (fileIndex >= this.state.selectedFileIndex) { this.setState({ selectedFileIndex: Math.max(0, fileIndex - 1) }); } this.props.dispatchUpdateRestore({ restoreFun, deletedItem: 'File' }); } handleDownloadFile(fileIndex) { // TODO: vm.files doesnt exist const item = this.props.vm.files[fileIndex]; const blob = new Blob([item.asset.data], { type: item.asset.assetType.contentType }); Object(_lib_download_blob__WEBPACK_IMPORTED_MODULE_10__["default"])("".concat(item.name, ".").concat(item.asset.dataFormat), blob); } handleDuplicateFile(fileIndex) { // TODO: duplicateFile isnt a function this.props.vm.duplicateFile(fileIndex).then(() => { this.setState({ selectedFileIndex: fileIndex + 1 }); }); } handleNewFile() { if (!this.props.vm.editingTarget) { return null; } // TODO: vm.files doesnt exist const files = this.props.vm.files ? this.props.vm.files : []; this.setState({ selectedFileIndex: Math.max(files.length - 1, 0) }); } handleFileUploadClick() { this.fileInput.click(); } handleExternalFileUpload(e) { const storage = this.props.vm.runtime.storage; const targetId = this.props.vm.editingTarget.id; this.props.onShowImporting(); Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_8__["handleFileUpload"])(e.target, (buffer, fileType, fileName, fileIndex, fileCount) => { Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_8__["externalFileUpload"])(buffer, fileType, storage, newFile => { newFile.name = fileName; // TODO: addFile isnt a function this.props.vm.addFile(newFile, targetId).then(() => { this.handleNewFile(); if (fileIndex === fileCount - 1) { this.props.onCloseImporting(); } }); }, this.props.onCloseImporting); }, this.props.onCloseImporting); } // handleDrop(dropInfo) { // if (dropInfo.dragType === DragConstants.SOUND) { // const sprite = this.props.vm.editingTarget.sprite; // const activeSound = sprite.sounds[this.state.selectedSoundIndex]; // this.props.vm.reorderSound(this.props.vm.editingTarget.id, // dropInfo.index, dropInfo.newIndex); // this.setState({ selectedSoundIndex: sprite.sounds.indexOf(activeSound) }); // } else if (dropInfo.dragType === DragConstants.BACKPACK_COSTUME) { // this.props.onActivateCostumesTab(); // this.props.vm.addCostume(dropInfo.payload.body, { // name: dropInfo.payload.name // }); // } else if (dropInfo.dragType === DragConstants.BACKPACK_SOUND) { // this.props.vm.addSound({ // md5: dropInfo.payload.body, // name: dropInfo.payload.name // }).then(this.handleNewSound); // } // } setFileInput(input) { this.fileInput = input; } render() { const { dispatchUpdateRestore, // eslint-disable-line no-unused-vars intl, isRtl, vm // onNewSoundFromLibraryClick, // onNewSoundFromRecordingClick } = this.props; if (!vm.editingTarget) { return null; } const files = vm.files ? vm.files.map(file => ({ url: isRtl ? fileIconRtl : fileIcon, name: file.name, details: file.size, dragPayload: file })) : []; const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ fileUploadExternal: { "id": "pm.gui.filesTab.fileUploadExternal", "defaultMessage": "Upload File" }, fileNew: { "id": "pm.gui.filesTab.fileNew", "defaultMessage": "New File" } }); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_asset_panel_asset_panel_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { buttons: [{ title: intl.formatMessage(messages.fileNew), img: _components_asset_panel_icon_files_placeholder_svg__WEBPACK_IMPORTED_MODULE_6___default.a, onClick: this.handleFileUploadClick // TODO: should make a new TXT file instead }, { title: intl.formatMessage(messages.fileUploadExternal), img: _components_asset_panel_icon_files_placeholder_svg__WEBPACK_IMPORTED_MODULE_6___default.a, onClick: this.handleFileUploadClick, fileAccept: '.txt, .json', fileChange: this.handleExternalFileUpload, fileInput: this.setFileInput, fileMultiple: true }, { title: intl.formatMessage(messages.fileNew), img: _components_asset_panel_icon_files_placeholder_svg__WEBPACK_IMPORTED_MODULE_6___default.a, onClick: this.handleFileUploadClick // TODO: should make a new TXT file instead }] // dragType={DragConstants.SOUND} , isRtl: isRtl, items: files, selectedItemIndex: this.state.selectedFileIndex, onDeleteClick: this.handleDeleteFile // onDrop={this.handleDrop} , onDuplicateClick: this.handleDuplicateFile, onExportClick: this.handleDownloadFile, onItemClick: this.handleSelectFile }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, "erm, you dont see anything here"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { width: "40", height: "40", src: _components_asset_panel_nord_png__WEBPACK_IMPORTED_MODULE_7___default.a, alt: "Nord" })); } } FilesTab.propTypes = { dispatchUpdateRestore: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, editingTarget: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, // onActivateCostumesTab: PropTypes.func.isRequired, onCloseImporting: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, // onNewSoundFromLibraryClick: PropTypes.func.isRequired, // onNewSoundFromRecordingClick: PropTypes.func.isRequired, // onRequestCloseSoundLibrary: PropTypes.func.isRequired, onShowImporting: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, // soundLibraryVisible: PropTypes.bool, // soundRecorderVisible: PropTypes.bool, // sprites: PropTypes.shape({ // id: PropTypes.shape({ // sounds: PropTypes.arrayOf(PropTypes.shape({ // name: PropTypes.string.isRequired // })) // }) // }), // stage: PropTypes.shape({ // sounds: PropTypes.arrayOf(PropTypes.shape({ // name: PropTypes.string.isRequired // })) // }), vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; const mapStateToProps = state => ({ editingTarget: state.scratchGui.targets.editingTarget, isRtl: state.locales.isRtl // sprites: state.scratchGui.targets.sprites, // stage: state.scratchGui.targets.stage, // soundLibraryVisible: state.scratchGui.modals.soundLibrary, // soundRecorderVisible: state.scratchGui.modals.soundRecorder }); const mapDispatchToProps = dispatch => ({ // onActivateCostumesTab: () => dispatch(activateTab(COSTUMES_TAB_INDEX)), // onNewSoundFromLibraryClick: e => { // e.preventDefault(); // dispatch(openSoundLibrary()); // }, // onNewSoundFromRecordingClick: () => { // dispatch(openSoundRecorder()); // }, // onRequestCloseSoundLibrary: () => { // dispatch(closeSoundLibrary()); // }, dispatchUpdateRestore: restoreState => { dispatch(Object(_reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_12__["setRestore"])(restoreState)); }, onCloseImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_13__["closeAlertWithId"])('importingAsset')), onShowImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_13__["showStandardAlert"])('importingAsset')) }); /* harmony default export */ __webpack_exports__["default"] = (Object(_lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_9__["default"])('Files Tab')(Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_11__["connect"])(mapStateToProps, mapDispatchToProps)(FilesTab)))); /***/ }), /***/ "./src/containers/green-flag-overlay.jsx": /*!***********************************************!*\ !*** ./src/containers/green-flag-overlay.jsx ***! \***********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _components_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/box/box.jsx */ "./src/components/box/box.jsx"); /* harmony import */ var _components_stage_header_stagecontrols_flag_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/stage-header/stagecontrols/flag.svg */ "./src/components/stage-header/stagecontrols/flag.svg"); /* harmony import */ var _components_stage_header_stagecontrols_flag_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_components_stage_header_stagecontrols_flag_svg__WEBPACK_IMPORTED_MODULE_6__); class GreenFlagOverlay extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleClick']); } handleClick() { this.props.vm.start(); this.props.vm.greenFlag(); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_box_box_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { className: this.props.wrapperClass, onClick: this.handleClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: this.props.className }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", { draggable: false, src: _components_stage_header_stagecontrols_flag_svg__WEBPACK_IMPORTED_MODULE_6___default.a }))); } } GreenFlagOverlay.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, vm: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a), wrapperClass: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string }; const mapStateToProps = state => ({ vm: state.scratchGui.vm }); const mapDispatchToProps = () => ({}); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(GreenFlagOverlay)); /***/ }), /***/ "./src/containers/gui.jsx": /*!********************************!*\ !*** ./src/containers/gui.jsx ***! \********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/index.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-modal */ "./node_modules/react-modal/lib/index.js"); /* harmony import */ var react_modal__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_modal__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/error-boundary-hoc.jsx */ "./src/lib/error-boundary-hoc.jsx"); /* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js"); /* harmony import */ var _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../reducers/editor-tab */ "./src/reducers/editor-tab.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _lib_font_loader_hoc_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../lib/font-loader-hoc.jsx */ "./src/lib/font-loader-hoc.jsx"); /* harmony import */ var _lib_localization_hoc_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../lib/localization-hoc.jsx */ "./src/lib/localization-hoc.jsx"); /* harmony import */ var _lib_sb_file_uploader_hoc_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../lib/sb-file-uploader-hoc.jsx */ "./src/lib/sb-file-uploader-hoc.jsx"); /* harmony import */ var _lib_project_fetcher_hoc_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../lib/project-fetcher-hoc.jsx */ "./src/lib/project-fetcher-hoc.jsx"); /* harmony import */ var _lib_titled_hoc_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/titled-hoc.jsx */ "./src/lib/titled-hoc.jsx"); /* harmony import */ var _lib_project_saver_hoc_jsx__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/project-saver-hoc.jsx */ "./src/lib/project-saver-hoc.jsx"); /* harmony import */ var _lib_query_parser_hoc_jsx__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../lib/query-parser-hoc.jsx */ "./src/lib/query-parser-hoc.jsx"); /* harmony import */ var _lib_storage__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/storage */ "./src/lib/storage.js"); /* harmony import */ var _lib_vm_listener_hoc_jsx__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../lib/vm-listener-hoc.jsx */ "./src/lib/vm-listener-hoc.jsx"); /* harmony import */ var _lib_vm_manager_hoc_jsx__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../lib/vm-manager-hoc.jsx */ "./src/lib/vm-manager-hoc.jsx"); /* harmony import */ var _lib_cloud_manager_hoc_jsx__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../lib/cloud-manager-hoc.jsx */ "./src/lib/cloud-manager-hoc.jsx"); /* harmony import */ var _lib_tw_fullscreen_resizer_hoc_jsx__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../lib/tw-fullscreen-resizer-hoc.jsx */ "./src/lib/tw-fullscreen-resizer-hoc.jsx"); /* harmony import */ var _components_gui_gui_jsx__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../components/gui/gui.jsx */ "./src/components/gui/gui.jsx"); /* harmony import */ var _home_communication_jsx__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./home-communication.jsx */ "./src/containers/home-communication.jsx"); /* harmony import */ var _lib_isScratchDesktop_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../lib/isScratchDesktop.js */ "./src/lib/isScratchDesktop.js"); const _excluded = ["assetHost", "cloudHost", "error", "isError", "isScratchDesktop", "isShowingProject", "onProjectLoaded", "onStorageInit", "onUpdateProjectId", "onVmInit", "projectHost", "projectId", "children", "fetchingProject", "isLoading", "loadingStateVisible", "isPlayground"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class GUI extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { componentDidMount() { Object(_lib_isScratchDesktop_js__WEBPACK_IMPORTED_MODULE_25__["setIsScratchDesktop"])(this.props.isScratchDesktop); this.props.onStorageInit(_lib_storage__WEBPACK_IMPORTED_MODULE_18__["default"]); this.props.onVmInit(this.props.vm); } componentDidUpdate(prevProps) { if (this.props.projectId !== prevProps.projectId && this.props.projectId !== null) { this.props.onUpdateProjectId(this.props.projectId); } if (this.props.isShowingProject && !prevProps.isShowingProject) { // this only notifies container when a project changes from not yet loaded to loaded // At this time the project view in www doesn't need to know when a project is unloaded this.props.onProjectLoaded(); } } render() { if (this.props.isError) { console.log('the below error was caught by the gui'); throw this.props.error; } const _this$props = this.props, { /* eslint-disable no-unused-vars */ assetHost, cloudHost, error, isError, isScratchDesktop, isShowingProject, onProjectLoaded, onStorageInit, onUpdateProjectId, onVmInit, projectHost, projectId, /* eslint-enable no-unused-vars */ children, fetchingProject, isLoading, loadingStateVisible, isPlayground } = _this$props, componentProps = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_gui_gui_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], _extends({ loading: fetchingProject || isLoading || loadingStateVisible, isPlayground: isPlayground }, componentProps), children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_home_communication_jsx__WEBPACK_IMPORTED_MODULE_24__["default"], { projectId: projectId, isPlayground: isPlayground })); } } GUI.propTypes = { assetHost: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, children: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.node, cloudHost: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, error: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string]), fetchingProject: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, intl: react_intl__WEBPACK_IMPORTED_MODULE_6__["intlShape"], isError: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isEmbedded: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isLoading: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isScratchDesktop: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isShowingProject: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isPlayground: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, loadingStateVisible: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, onProjectLoaded: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onSeeCommunity: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onStorageInit: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onUpdateProjectId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onVmInit: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, projectHost: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, projectId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number]), telemetryModalVisible: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_5___default.a).isRequired }; GUI.defaultProps = { isScratchDesktop: false, isPlayground: false, onStorageInit: storageInstance => storageInstance.addOfficialScratchWebStores(), onProjectLoaded: () => {}, onUpdateProjectId: () => {}, onVmInit: (/* vm */) => {} }; const mapStateToProps = state => { const loadingState = state.scratchGui.projectState.loadingState; return { activeTabIndex: state.scratchGui.editorTab.activeTabIndex, alertsVisible: state.scratchGui.alerts.visible, backdropLibraryVisible: state.scratchGui.modals.backdropLibrary, blocksTabVisible: state.scratchGui.editorTab.activeTabIndex === _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["BLOCKS_TAB_INDEX"], cardsVisible: state.scratchGui.cards.visible, connectionModalVisible: state.scratchGui.modals.connectionModal, costumeLibraryVisible: state.scratchGui.modals.costumeLibrary, costumesTabVisible: state.scratchGui.editorTab.activeTabIndex === _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["COSTUMES_TAB_INDEX"], error: state.scratchGui.projectState.error, isError: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_8__["getIsError"])(loadingState), isEmbedded: state.scratchGui.mode.isEmbedded, isFullScreen: state.scratchGui.mode.isFullScreen || state.scratchGui.mode.isEmbedded, isPlayerOnly: state.scratchGui.mode.isPlayerOnly, isRtl: state.locales.isRtl, isShowingProject: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_8__["getIsShowingProject"])(loadingState), loadingStateVisible: state.scratchGui.modals.loadingProject, projectId: state.scratchGui.projectState.projectId, soundsTabVisible: state.scratchGui.editorTab.activeTabIndex === _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["SOUNDS_TAB_INDEX"], variablesTabVisible: state.scratchGui.editorTab.activeTabIndex === _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["VARIABLES_TAB_INDEX"], filesTabVisible: state.scratchGui.editorTab.activeTabIndex === _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["FILES_TAB_INDEX"], targetIsStage: state.scratchGui.targets.stage && state.scratchGui.targets.stage.id === state.scratchGui.targets.editingTarget, telemetryModalVisible: state.scratchGui.modals.telemetryModal, tipsLibraryVisible: state.scratchGui.modals.tipsLibrary, usernameModalVisible: state.scratchGui.modals.usernameModal, settingsModalVisible: state.scratchGui.modals.settingsModal, customExtensionModalVisible: state.scratchGui.modals.customExtensionModal, fontsModalVisible: state.scratchGui.modals.fontsModal, vm: state.scratchGui.vm }; }; const mapDispatchToProps = dispatch => ({ onExtensionButtonClick: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_10__["openExtensionLibrary"])()), onActivateTab: tab => dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["activateTab"])(tab)), onActivateCostumesTab: () => dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["activateTab"])(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["COSTUMES_TAB_INDEX"])), onActivateSoundsTab: () => dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["activateTab"])(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["SOUNDS_TAB_INDEX"])), onActivateVariablesTab: () => dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["activateTab"])(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["VARIABLES_TAB_INDEX"])), onActivateFilesTab: () => dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["activateTab"])(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_9__["FILES_TAB_INDEX"])), onRequestCloseBackdropLibrary: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_10__["closeBackdropLibrary"])()), onRequestCloseCostumeLibrary: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_10__["closeCostumeLibrary"])()), onRequestCloseTelemetryModal: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_10__["closeTelemetryModal"])()) }); const ConnectedGUI = Object(react_intl__WEBPACK_IMPORTED_MODULE_6__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(GUI)); // note that redux's 'compose' function is just being used as a general utility to make // the hierarchy of HOC constructor calls clearer here; it has nothing to do with redux's // ability to compose reducers. const WrappedGui = Object(redux__WEBPACK_IMPORTED_MODULE_2__["compose"])(_lib_localization_hoc_jsx__WEBPACK_IMPORTED_MODULE_12__["default"], Object(_lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__["default"])('Top Level App'), _lib_font_loader_hoc_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], // QueryParserHOC, // tw: HOC is unused _lib_project_fetcher_hoc_jsx__WEBPACK_IMPORTED_MODULE_14__["default"], _lib_titled_hoc_jsx__WEBPACK_IMPORTED_MODULE_15__["default"], _lib_project_saver_hoc_jsx__WEBPACK_IMPORTED_MODULE_16__["default"], _lib_vm_listener_hoc_jsx__WEBPACK_IMPORTED_MODULE_19__["default"], _lib_vm_manager_hoc_jsx__WEBPACK_IMPORTED_MODULE_20__["default"], _lib_sb_file_uploader_hoc_jsx__WEBPACK_IMPORTED_MODULE_13__["default"], _lib_cloud_manager_hoc_jsx__WEBPACK_IMPORTED_MODULE_21__["default"], _lib_tw_fullscreen_resizer_hoc_jsx__WEBPACK_IMPORTED_MODULE_22__["default"])(ConnectedGUI); WrappedGui.setAppElement = react_modal__WEBPACK_IMPORTED_MODULE_4___default.a.setAppElement; /* harmony default export */ __webpack_exports__["default"] = (WrappedGui); /***/ }), /***/ "./src/containers/home-communication.jsx": /*!***********************************************!*\ !*** ./src/containers/home-communication.jsx ***! \***********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js"); let origin = "https://penguinmod.com"; class HomeCommunication extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['wrapperEventHandler']); this.state = { frame: null, canSetUsername: true }; } componentDidMount() { window.addEventListener('message', this.wrapperEventHandler); const iframe = document.createElement('iframe'); iframe.src = "".concat(origin, "/embed/editor?external=").concat(encodeURIComponent(window.origin)); iframe.width = 100; iframe.height = 100; iframe.style.display = 'none'; document.body.appendChild(iframe); this.setState({ frame: iframe }); } componentWillUnmount() { window.removeEventListener('message', this.wrapperEventHandler); const iframe = this.state.frame; if (iframe) { iframe.remove(); } this.setState({ frame: null }); } async wrapperEventHandler(e) { const data = e.data; // Don't recursively try to run this event. if (e.origin === window.origin) { return; } if (!data.type) return; if (!data.packet) return; switch (data.type) { case 'login': { if (data.packet.loggedIn !== true) return; if (!data.packet.username) return; if (!this.state.canSetUsername) return; this.props.onSetUsername(data.packet.username); this.setState({ canSetUsername: false }); } } } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", null); } } HomeCommunication.propTypes = { projectId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]), isPlayground: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onSetUsername: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, username: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, usernameInvalid: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, usernameLoggedIn: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; const mapStateToProps = state => ({ username: state.scratchGui.tw.username, usernameInvalid: state.scratchGui.tw.usernameInvalid, usernameLoggedIn: state.scratchGui.tw.usernameLoggedIn }); const mapDispatchToProps = dispatch => ({ onSetUsername: username => { dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_4__["setUsername"])(username)); dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_4__["setUsernameLoggedIn"])(true)); dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_4__["setUsernameInvalid"])(false)); } }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(HomeCommunication)); /***/ }), /***/ "./src/containers/inline-messages.jsx": /*!********************************************!*\ !*** ./src/containers/inline-messages.jsx ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js"); /* harmony import */ var _components_alerts_inline_message_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/alerts/inline-message.jsx */ "./src/components/alerts/inline-message.jsx"); const InlineMessages = _ref => { let { alertsList, className } = _ref; if (!alertsList) { return null; } // only display inline alerts here const inlineAlerts = Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_3__["filterInlineAlerts"])(alertsList); if (!inlineAlerts || !inlineAlerts.length) { return null; } // get first alert const firstInlineAlert = inlineAlerts[0]; const { content, iconSpinner, level } = firstInlineAlert; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_alerts_inline_message_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { className: className, content: content, iconSpinner: iconSpinner, level: level }); }; InlineMessages.propTypes = { alertsList: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object), className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; const mapStateToProps = state => ({ alertsList: state.scratchGui.alerts.alertsList }); const mapDispatchToProps = () => ({}); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(InlineMessages)); /***/ }), /***/ "./src/containers/language-selector.jsx": /*!**********************************************!*\ !*** ./src/containers/language-selector.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_locales__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/locales */ "./src/reducers/locales.js"); /* harmony import */ var _reducers_menus__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/menus */ "./src/reducers/menus.js"); /* harmony import */ var _components_language_selector_language_selector_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/language-selector/language-selector.jsx */ "./src/components/language-selector/language-selector.jsx"); const _excluded = ["onChangeLanguage", "messagesByLocale", "children"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class LanguageSelector extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleChange']); document.documentElement.lang = props.currentLocale; } handleChange(e) { const newLocale = e.target.value; if (this.props.messagesByLocale[newLocale]) { this.props.onChangeLanguage(newLocale); document.documentElement.lang = newLocale; } } render() { const _this$props = this.props, { onChangeLanguage, // eslint-disable-line no-unused-vars messagesByLocale, // eslint-disable-line no-unused-vars children } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_language_selector_language_selector_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], _extends({ onChange: this.handleChange }, props), children); } } LanguageSelector.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, currentLocale: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, // Only checking key presence for messagesByLocale, no need to be more specific than object messagesByLocale: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object, // eslint-disable-line react/forbid-prop-types onChangeLanguage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; const mapStateToProps = state => ({ currentLocale: state.locales.locale, messagesByLocale: state.locales.messagesByLocale }); const mapDispatchToProps = dispatch => ({ onChangeLanguage: locale => { dispatch(Object(_reducers_locales__WEBPACK_IMPORTED_MODULE_4__["selectLocale"])(locale)); dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_5__["closeLanguageMenu"])()); } }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(LanguageSelector)); /***/ }), /***/ "./src/containers/library-item.jsx": /*!*****************************************!*\ !*** ./src/containers/library-item.jsx ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! localforage */ "./node_modules/localforage/dist/localforage.js"); /* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(localforage__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _components_library_item_library_item_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/library-item/library-item.jsx */ "./src/components/library-item/library-item.jsx"); class LibraryItem extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleBlur', 'handleClick', 'handleFavoriteClick', 'handleFocus', 'handleKeyPress', 'handleMouseEnter', 'handleMouseLeave', 'handlePlay', 'handleStop', 'processFavoriteClick', 'handleDeleteClick', 'rotateIcon', 'startRotatingIcons', 'stopRotatingIcons']); this.state = { iconIndex: 0, isRotatingIcon: false }; } componentWillUnmount() { clearInterval(this.intervalId); } handleBlur(id) { this.handleMouseLeave(id); } handleClick(e) { if (e.target.dataset && e.target.dataset.clearclick === 'true') { return; } if (e.target.parentElement.dataset && e.target.parentElement.dataset.clearclick === 'true') { return; } if (e.target.closest('a')) { // Allow clicking on links inside the item return; } if (!this.props.disabled) { if (this.props.href) { window.open(this.props.href); } else { this.props.onSelect(this.props.id, e); } } e.preventDefault(); } handleFavoriteClick() { this.processFavoriteClick(...arguments); } async handleDeleteClick() { const id = this.props._id; const db = "pm:favorited_extensions"; let favorites = []; const _saved = await localforage__WEBPACK_IMPORTED_MODULE_3___default.a.getItem(db); if (_saved) { favorites = _saved; } // remove from favorites favorites = favorites.filter(item => { // console.log(item._id, id); return item._id !== id; }); await localforage__WEBPACK_IMPORTED_MODULE_3___default.a.setItem(db, favorites); // update on library.jsx this.props.onFavoriteUpdated(); } handleFocus(id) { if (!this.props.showPlayButton) { this.handleMouseEnter(id); } } handleKeyPress(e) { if (e.key === ' ' || e.key === 'Enter') { e.preventDefault(); this.props.onSelect(this.props.id); } } handleMouseEnter() { // only show hover effects on the item if not showing a play button if (!this.props.showPlayButton) { this.props.onMouseEnter(this.props.id); if (this.props.icons && this.props.icons.length) { this.stopRotatingIcons(); this.setState({ isRotatingIcon: true }, this.startRotatingIcons); } } } handleMouseLeave() { // only show hover effects on the item if not showing a play button if (!this.props.showPlayButton) { this.props.onMouseLeave(this.props.id); if (this.props.icons && this.props.icons.length) { this.setState({ isRotatingIcon: false }, this.stopRotatingIcons); } } } handlePlay() { this.props.onMouseEnter(this.props.id); } handleStop() { this.props.onMouseLeave(this.props.id); } async processFavoriteClick(alreadyFavorite) { const id = "pm:favorited_extensions"; let favorites = []; const _saved = await localforage__WEBPACK_IMPORTED_MODULE_3___default.a.getItem(id); if (_saved) { favorites = _saved; } if (!alreadyFavorite) { // add to favorites favorites.push(this.props.extensionId); } else { // remove from favorites favorites = favorites.filter(item => { return item !== this.props.extensionId; }); } await localforage__WEBPACK_IMPORTED_MODULE_3___default.a.setItem(id, favorites); // update on library.jsx this.props.onFavoriteUpdated(); } startRotatingIcons() { this.rotateIcon(); this.intervalId = setInterval(this.rotateIcon, 300); } stopRotatingIcons() { if (this.intervalId) { this.intervalId = clearInterval(this.intervalId); } } rotateIcon() { const nextIconIndex = (this.state.iconIndex + 1) % this.props.icons.length; this.setState({ iconIndex: nextIconIndex }); } curIconMd5() { const iconMd5Prop = this.props.iconMd5; if (this.props.icons && this.state.isRotatingIcon && this.state.iconIndex < this.props.icons.length) { const icon = this.props.icons[this.state.iconIndex] || {}; return icon.md5ext || // 3.0 library format icon.baseLayerMD5 || // 2.0 library format, TODO GH-5084 iconMd5Prop; } return iconMd5Prop; } render() { const iconMd5 = this.curIconMd5(); const iconURL = iconMd5 ? "https://cdn.assets.scratch.mit.edu/internalapi/asset/".concat(iconMd5, "/get/") : this.props.iconRawURL; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_library_item_library_item_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { intl: this.props.intl, bluetoothRequired: this.props.bluetoothRequired, collaborator: this.props.collaborator, twDeveloper: this.props.twDeveloper, credits: this.props.credits, extDeveloper: this.props.extDeveloper, eventSubmittor: this.props.eventSubmittor, extraLabels: this.props.extraLabels, description: this.props.description, disabled: this.props.disabled, isNew: this.props.isNew, extensionId: this.props.extensionId, featured: this.props.featured, hidden: this.props.hidden, iconURL: iconURL, overlayURL: this.props.overlayURL, styleForSound: this.props.styleForSound, soundType: this.props.soundType, soundLength: this.props.soundLength, icons: this.props.icons, id: this.props.id, _id: this.props._id, incompatibleWithScratch: this.props.incompatibleWithScratch, extensionWarningOnImport: this.props.extensionWarningOnImport, insetIconURL: this.props.insetIconURL, customInsetColor: this.props.customInsetColor, internetConnectionRequired: this.props.internetConnectionRequired, isPlaying: this.props.isPlaying, name: this.props.name, showPlayButton: this.props.showPlayButton, favoritable: this.props.favoritable, favorited: this.props.favorited, deletable: this.props.deletable, custom: this.props.custom, _unsandboxed: this.props._unsandboxed, onFavoriteClick: this.handleFavoriteClick, onDeleteClick: this.handleDeleteClick, onBlur: this.handleBlur, onClick: this.handleClick, onFocus: this.handleFocus, onKeyPress: this.handleKeyPress, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onPlay: this.handlePlay, onStop: this.handleStop }); } } LibraryItem.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"], bluetoothRequired: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, collaborator: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), twDeveloper: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), extDeveloper: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), credits: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), eventSubmittor: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), extraLabels: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]) })), description: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, extensionId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, href: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, featured: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isNew: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, hidden: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, iconMd5: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, iconRawURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, overlayURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, styleForSound: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, soundType: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, soundLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, icons: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ baseLayerMD5: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, // 2.0 library format, TODO GH-5084 md5ext: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string // 3.0 library format })), id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, incompatibleWithScratch: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, extensionWarningOnImport: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, insetIconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, internetConnectionRequired: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isPlaying: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]), onMouseEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, showPlayButton: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, favoritable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, favorited: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, deletable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, custom: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onFavoriteUpdated: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, _unsandboxed: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, _id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(LibraryItem)); /***/ }), /***/ "./src/containers/list-monitor.jsx": /*!*****************************************!*\ !*** ./src/containers/list-monitor.jsx ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _lib_touch_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/touch-utils */ "./src/lib/touch-utils.js"); /* harmony import */ var _lib_variable_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/variable-utils */ "./src/lib/variable-utils.js"); /* harmony import */ var _components_monitor_list_monitor_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/monitor/list-monitor.jsx */ "./src/components/monitor/list-monitor.jsx"); /* harmony import */ var immutable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! immutable */ "./node_modules/immutable/dist/immutable.js"); /* harmony import */ var immutable__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(immutable__WEBPACK_IMPORTED_MODULE_8__); const _excluded = ["vm"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class ListMonitor extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleActivate', 'handleDeactivate', 'handleInput', 'handleRemove', 'handleKeyPress', 'handleFocus', 'handleAdd', 'handleResizeMouseDown']); this.state = { activeIndex: null, activeValue: null, width: props.width || 100, height: props.height || 200 }; } handleActivate(index) { // Do nothing if activating the currently active item if (this.state.activeIndex === index) { return; } let activeValue = this.props.value[index]; if (activeValue.toListEditor) activeValue = activeValue.toListEditor(); this.setState({ activeIndex: index, activeValue, handlerClass: this.props.value[index] }); } handleDeactivate() { // Submit any in-progress value edits on blur if (this.state.activeIndex !== null) { const { vm, targetId, id: variableId } = this.props; const newListValue = Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_6__["getVariableValue"])(vm, targetId, variableId); const oldValue = this.props.value[this.state.activeIndex]; let newValue = this.state.activeValue; if (oldValue.fromListEditor) { newValue = oldValue.fromListEditor(newValue); } newListValue[this.state.activeIndex] = newValue; Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_6__["setVariableValue"])(vm, targetId, variableId, newListValue); this.setState({ activeIndex: null, activeValue: null }); } } handleFocus(e) { // Select all the text in the input when it is focused. e.target.select(); } handleKeyPress(e) { // Special case for tab, arrow keys and enter. // Tab / shift+tab navigate down / up the list. // Arrow down / arrow up navigate down / up the list. // Enter / shift+enter insert new blank item below / above. const previouslyActiveIndex = this.state.activeIndex; const { vm, targetId, id: variableId } = this.props; let navigateDirection = 0; if (e.key === 'Tab') navigateDirection = e.shiftKey ? -1 : 1;else if (e.key === 'ArrowUp') navigateDirection = -1;else if (e.key === 'ArrowDown') navigateDirection = 1; if (navigateDirection) { this.handleDeactivate(); // Submit in-progress edits const newIndex = this.wrapListIndex(previouslyActiveIndex + navigateDirection, this.props.value.length); this.setState({ activeIndex: newIndex, activeValue: this.props.value[newIndex] }); e.preventDefault(); // Stop default tab behavior, handled by this state change } else if (e.key === 'Enter') { this.handleDeactivate(); // Submit in-progress edits const newListItemValue = ''; // Enter adds a blank item const newValueOffset = e.shiftKey ? 0 : 1; // Shift-enter inserts above const listValue = Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_6__["getVariableValue"])(vm, targetId, variableId); const newListValue = listValue.slice(0, previouslyActiveIndex + newValueOffset).concat([newListItemValue]).concat(listValue.slice(previouslyActiveIndex + newValueOffset)); Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_6__["setVariableValue"])(vm, targetId, variableId, newListValue); const newIndex = this.wrapListIndex(previouslyActiveIndex + newValueOffset, newListValue.length); this.setState({ activeIndex: newIndex, activeValue: newListItemValue }); } } handleInput(e) { this.setState({ activeValue: e.target.value }); } handleRemove(e) { e.preventDefault(); // Default would blur input, prevent that. e.stopPropagation(); // Bubbling would activate, which will be handled here const { vm, targetId, id: variableId } = this.props; const listValue = Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_6__["getVariableValue"])(vm, targetId, variableId); const newListValue = listValue.slice(0, this.state.activeIndex).concat(listValue.slice(this.state.activeIndex + 1)); Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_6__["setVariableValue"])(vm, targetId, variableId, newListValue); const newActiveIndex = Math.min(newListValue.length - 1, this.state.activeIndex); this.setState({ activeIndex: newActiveIndex, activeValue: newListValue[newActiveIndex] }); } handleAdd() { // Add button appends a blank value and switches to it const { vm, targetId, id: variableId } = this.props; const newListValue = Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_6__["getVariableValue"])(vm, targetId, variableId).concat(['']); Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_6__["setVariableValue"])(vm, targetId, variableId, newListValue); this.setState({ activeIndex: newListValue.length - 1, activeValue: '' }); } handleResizeMouseDown(e) { this.initialPosition = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_5__["getEventXY"])(e); this.initialWidth = this.state.width; this.initialHeight = this.state.height; const onMouseMove = ev => { const newPosition = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_5__["getEventXY"])(ev); const dx = newPosition.x - this.initialPosition.x; const dy = newPosition.y - this.initialPosition.y; this.setState({ width: Math.max(Math.min(this.initialWidth + dx, this.props.customStageSize.width), 100), height: Math.max(Math.min(this.initialHeight + dy, this.props.customStageSize.height), 60) }); }; const onMouseUp = ev => { onMouseMove(ev); // Make sure width/height are up-to-date window.removeEventListener('mousemove', onMouseMove); window.removeEventListener('mouseup', onMouseUp); this.props.vm.runtime.requestUpdateMonitor(Object(immutable__WEBPACK_IMPORTED_MODULE_8__["Map"])({ id: this.props.id, height: this.state.height, width: this.state.width })); }; window.addEventListener('mousemove', onMouseMove); window.addEventListener('mouseup', onMouseUp); } wrapListIndex(index, length) { return (index + length) % length; } render() { const _this$props = this.props, { vm // eslint-disable-line no-unused-vars } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_monitor_list_monitor_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], _extends({}, props, { activeIndex: this.state.activeIndex, activeValue: this.state.activeValue, height: this.state.height, width: this.state.width, onActivate: this.handleActivate, onAdd: this.handleAdd, onDeactivate: this.handleDeactivate, onFocus: this.handleFocus, onInput: this.handleInput, onKeyPress: this.handleKeyPress, onRemove: this.handleRemove, onResizeMouseDown: this.handleResizeMouseDown })); } } ListMonitor.propTypes = { height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, customStageSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }), targetId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]), vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_3___default.a), width: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, x: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, y: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }; const mapStateToProps = state => ({ customStageSize: state.scratchGui.customStageSize, vm: state.scratchGui.vm }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps)(ListMonitor)); /***/ }), /***/ "./src/containers/menu-bar-hoc.jsx": /*!*****************************************!*\ !*** ./src/containers/menu-bar-hoc.jsx ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sb3-downloader.jsx */ "./src/containers/sb3-downloader.jsx"); const _excluded = ["projectChanged"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const MenuBarHOC = function MenuBarHOC(WrappedComponent) { class MenuBarContainer extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['confirmReadyToReplaceProject', 'shouldSaveBeforeTransition']); } confirmReadyToReplaceProject(message) { let readyToReplaceProject = true; if (this.props.projectChanged && !this.props.canCreateNew) { readyToReplaceProject = this.props.confirmWithMessage(message); } return readyToReplaceProject; } shouldSaveBeforeTransition() { return this.props.canSave && this.props.projectChanged; } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ projectChanged /* eslint-enable no-unused-vars */ } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], null, (_className, _downloadProject, extended) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(WrappedComponent, _extends({ confirmReadyToReplaceProject: this.confirmReadyToReplaceProject, shouldSaveBeforeTransition: this.shouldSaveBeforeTransition, handleSaveProject: extended.smartSave }, props))); } } MenuBarContainer.propTypes = { canCreateNew: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, canSave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, confirmWithMessage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, projectChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; MenuBarContainer.defaultProps = { // default to using standard js confirm confirmWithMessage: message => confirm(message) // eslint-disable-line no-alert }; const mapStateToProps = state => ({ projectChanged: state.scratchGui.projectChanged }); const mapDispatchToProps = () => ({}); // Allow incoming props to override redux-provided props. Used to mock in tests. const mergeProps = (stateProps, dispatchProps, ownProps) => Object.assign({}, stateProps, dispatchProps, ownProps); return Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(mapStateToProps, mapDispatchToProps, mergeProps)(MenuBarContainer); }; /* harmony default export */ __webpack_exports__["default"] = (MenuBarHOC); /***/ }), /***/ "./src/containers/menu.jsx": /*!*********************************!*\ !*** ./src/containers/menu.jsx ***! \*********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/menu/menu.jsx */ "./src/components/menu/menu.jsx"); const _excluded = ["open", "children"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class Menu extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['addListeners', 'removeListeners', 'handleClick', 'ref']); } componentDidMount() { if (this.props.open) this.addListeners(); } componentDidUpdate(prevProps) { if (this.props.open && !prevProps.open) this.addListeners(); if (!this.props.open && prevProps.open) this.removeListeners(); } componentWillUnmount() { this.removeListeners(); } addListeners() { document.addEventListener('mouseup', this.handleClick); } removeListeners() { document.removeEventListener('mouseup', this.handleClick); } handleClick(e) { if (this.props.open && !this.menu.contains(e.target)) { this.props.onRequestClose(); } } ref(c) { this.menu = c; } render() { const _this$props = this.props, { open, children } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); if (!open) return null; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], _extends({ componentRef: this.ref }, props), children); } } Menu.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, open: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Menu); /***/ }), /***/ "./src/containers/modal.jsx": /*!**********************************!*\ !*** ./src/containers/modal.jsx ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _components_modal_modal_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/modal/modal.jsx */ "./src/components/modal/modal.jsx"); class Modal extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['addEventListeners', 'removeEventListeners', 'handlePopState', 'pushHistory']); this.addEventListeners(); } componentDidMount() { // Add a history event only if it's not currently for our modal. This // avoids polluting the history with many entries. We only need one. this.pushHistory(this.id, history.state === null || history.state !== this.id); } componentWillUnmount() { this.removeEventListeners(); } addEventListeners() { window.addEventListener('popstate', this.handlePopState); } removeEventListeners() { window.removeEventListener('popstate', this.handlePopState); } handlePopState() { // Whenever someone navigates, we want to be closed this.props.onRequestClose(); } get id() { return "modal-".concat(this.props.id); } pushHistory(state, push) { if (push) return history.pushState(state, this.id, null); history.replaceState(state, this.id, null); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_modal_modal_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], this.props); } } Modal.propTypes = { id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onRequestOpen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, scrollable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; const mapStateToProps = state => ({ isRtl: state.locales.isRtl }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps)(Modal)); /***/ }), /***/ "./src/containers/monitor-list.jsx": /*!*****************************************!*\ !*** ./src/containers/monitor-list.jsx ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_monitor_layout__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/monitor-layout */ "./src/reducers/monitor-layout.js"); /* harmony import */ var _lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/error-boundary-hoc.jsx */ "./src/lib/error-boundary-hoc.jsx"); /* harmony import */ var _lib_opcode_labels__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/opcode-labels */ "./src/lib/opcode-labels.js"); /* harmony import */ var _components_monitor_list_monitor_list_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/monitor-list/monitor-list.jsx */ "./src/components/monitor-list/monitor-list.jsx"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } class MonitorList extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleMonitorChange']); _lib_opcode_labels__WEBPACK_IMPORTED_MODULE_7__["default"].setTranslatorFunction(props.intl.formatMessage); this.state = { key: 0 }; } componentWillReceiveProps(nextProps) { // TW: When stage size changes, we'll force all monitors to re-render completely // This is important because the VM moves monitors after resize to preserve locations but // Scratch's monitor layout logic is very complex and it won't notice that if (this.props.customStageSize !== nextProps.customStageSize) { this.props.resetMonitorLayout(); this.setState({ key: this.state.key + 1 }); } } handleMonitorChange(id, x, y) { // eslint-disable-line no-unused-vars this.props.moveMonitorRect(id, x, y); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_monitor_list_monitor_list_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], _extends({ onMonitorChange: this.handleMonitorChange, key: this.state.key }, this.props)); } } MonitorList.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired, customStageSize: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number }), monitorLayout: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({ monitors: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object, // eslint-disable-line react/forbid-prop-types savedMonitorPositions: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object // eslint-disable-line react/forbid-prop-types }).isRequired, moveMonitorRect: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, resetMonitorLayout: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func }; const mapStateToProps = state => ({ customStageSize: state.scratchGui.customStageSize, monitors: state.scratchGui.monitors, monitorLayout: state.scratchGui.monitorLayout }); const mapDispatchToProps = dispatch => ({ moveMonitorRect: (id, x, y) => dispatch(Object(_reducers_monitor_layout__WEBPACK_IMPORTED_MODULE_5__["moveMonitorRect"])(id, x, y)), resetMonitorLayout: () => dispatch(Object(_reducers_monitor_layout__WEBPACK_IMPORTED_MODULE_5__["resetMonitorLayout"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(_lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_6__["default"])('Monitors')(Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps, mapDispatchToProps)(MonitorList)))); /***/ }), /***/ "./src/containers/monitor.jsx": /*!************************************!*\ !*** ./src/containers/monitor.jsx ***! \************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_monitor_adapter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/monitor-adapter.js */ "./src/lib/monitor-adapter.js"); /* harmony import */ var _components_monitor_monitor_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/monitor/monitor.jsx */ "./src/components/monitor/monitor.jsx"); /* harmony import */ var _reducers_monitor_layout__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/monitor-layout */ "./src/reducers/monitor-layout.js"); /* harmony import */ var _lib_variable_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/variable-utils */ "./src/lib/variable-utils.js"); /* harmony import */ var _lib_import_csv__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/import-csv */ "./src/lib/import-csv.js"); /* harmony import */ var _lib_download_blob__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/download-blob */ "./src/lib/download-blob.js"); /* harmony import */ var _slider_prompt_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./slider-prompt.jsx */ "./src/containers/slider-prompt.jsx"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var immutable__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! immutable */ "./node_modules/immutable/dist/immutable.js"); /* harmony import */ var immutable__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(immutable__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_13__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const availableModes = opcode => _components_monitor_monitor_jsx__WEBPACK_IMPORTED_MODULE_5__["monitorModes"].filter(mode => { if (opcode === 'data_variable') { return mode !== 'list'; } else if (opcode === 'data_listcontents') { return mode === 'list'; } else if (opcode === 'canvas_canvasGetter') { return mode === 'image'; } return mode !== 'slider' && mode !== 'list'; }); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ columnPrompt: { "id": "gui.monitors.importListColumnPrompt", "defaultMessage": "Which column should be used (1-{numberOfColumns})?" } }); class Monitor extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleDragEnd', 'handleHide', 'handleNextMode', 'handleSetModeToDefault', 'handleSetModeToLarge', 'handleSetModeToSlider', 'handleSliderPromptClose', 'handleSliderPromptOk', 'handleSliderPromptOpen', 'handleImport', 'handleExport', 'setElement']); this.state = { sliderPrompt: false }; } componentDidMount() { let rect; const isNum = num => typeof num === 'number' && !isNaN(num); // Load the VM provided position if not loaded already // If a monitor has numbers for the x and y positions, load the saved position. // Otherwise, auto-position the monitor. if (isNum(this.props.x) && isNum(this.props.y) && !this.props.monitorLayout.savedMonitorPositions[this.props.id]) { rect = { upperStart: { x: this.props.x, y: this.props.y }, lowerEnd: { x: this.props.x + this.element.offsetWidth, y: this.props.y + this.element.offsetHeight } }; this.props.addMonitorRect(this.props.id, rect, true /* savePosition */); } else { // Newly created user monitor rect = Object(_reducers_monitor_layout__WEBPACK_IMPORTED_MODULE_6__["getInitialPosition"])(this.props.monitorLayout, this.props.id, this.element.offsetWidth, this.element.offsetHeight); this.props.addMonitorRect(this.props.id, rect); this.props.vm.runtime.requestUpdateMonitor(Object(immutable__WEBPACK_IMPORTED_MODULE_12__["Map"])({ id: this.props.id, x: rect.upperStart.x, y: rect.upperStart.y })); } this.element.style.top = "".concat(rect.upperStart.y, "px"); this.element.style.left = "".concat(rect.upperStart.x, "px"); } shouldComponentUpdate(nextProps, nextState) { var _nextProps$value; if (nextState !== this.state) return true; if (nextProps !== this.props) return true; if (nextProps.monitorLayout !== this.props.monitorLayout) return true; if (nextProps.value !== this.props.value) return true; if (!((_nextProps$value = nextProps.value) !== null && _nextProps$value !== void 0 && _nextProps$value._monitorUpToDate)) return true; return false; } componentDidUpdate() { // tw: if monitor is not draggable (ie. not in editor), do not calculate size of monitor for performance if (!this.props.draggable) { return; } this.props.resizeMonitorRect(this.props.id, this.element.offsetWidth, this.element.offsetHeight); } componentWillUnmount() { this.props.removeMonitorRect(this.props.id); } handleDragEnd(e, _ref) { let { x, y } = _ref; const newX = parseInt(this.element.style.left, 10) + x; const newY = parseInt(this.element.style.top, 10) + y; this.props.onDragEnd(this.props.id, newX, newY); this.props.vm.runtime.requestUpdateMonitor(Object(immutable__WEBPACK_IMPORTED_MODULE_12__["Map"])({ id: this.props.id, x: newX, y: newY })); } handleHide() { this.props.vm.runtime.requestUpdateMonitor(Object(immutable__WEBPACK_IMPORTED_MODULE_12__["Map"])({ id: this.props.id, visible: false })); } handleNextMode() { const modes = availableModes(this.props.opcode); const modeIndex = modes.indexOf(this.props.mode); const newMode = modes[(modeIndex + 1) % modes.length]; this.props.vm.runtime.requestUpdateMonitor(Object(immutable__WEBPACK_IMPORTED_MODULE_12__["Map"])({ id: this.props.id, mode: newMode })); } handleSetModeToDefault() { this.props.vm.runtime.requestUpdateMonitor(Object(immutable__WEBPACK_IMPORTED_MODULE_12__["Map"])({ id: this.props.id, mode: 'default' })); } handleSetModeToLarge() { this.props.vm.runtime.requestUpdateMonitor(Object(immutable__WEBPACK_IMPORTED_MODULE_12__["Map"])({ id: this.props.id, mode: 'large' })); } handleSetModeToSlider() { this.props.vm.runtime.requestUpdateMonitor(Object(immutable__WEBPACK_IMPORTED_MODULE_12__["Map"])({ id: this.props.id, mode: 'slider' })); } handleSliderPromptClose() { this.setState({ sliderPrompt: false }); } handleSliderPromptOpen() { this.setState({ sliderPrompt: true }); } handleSliderPromptOk(min, max, isDiscrete) { const realMin = Math.min(min, max); const realMax = Math.max(min, max); this.props.vm.runtime.requestUpdateMonitor(Object(immutable__WEBPACK_IMPORTED_MODULE_12__["Map"])({ id: this.props.id, sliderMin: realMin, sliderMax: realMax, isDiscrete: isDiscrete })); this.handleSliderPromptClose(); } setElement(monitorElt) { this.element = monitorElt; } handleImport() { Object(_lib_import_csv__WEBPACK_IMPORTED_MODULE_8__["default"])().then(async _ref2 => { let { rows, text } = _ref2; const numberOfColumns = rows[0].length; let columnNumber = 1; if (numberOfColumns > 1) { const msg = this.props.intl.formatMessage(messages.columnPrompt, { numberOfColumns }); // prompt() returns Promise in desktop app columnNumber = parseInt(await prompt(msg), 10); // eslint-disable-line no-alert } let newListValue; if (isNaN(columnNumber) || numberOfColumns === 1) { newListValue = text.replace(/\r/g, '').split('\n'); } else { newListValue = rows.map(row => row[columnNumber - 1]).filter(item => typeof item === 'string'); // CSV importer can leave undefineds } const { vm, targetId, id: variableId } = this.props; Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_7__["setVariableValue"])(vm, targetId, variableId, newListValue); }); } handleExport() { const { vm, targetId, id: variableId } = this.props; const variable = Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_7__["getVariable"])(vm, targetId, variableId); const text = variable.value.join('\r\n'); const blob = new Blob([text], { type: 'text/plain;charset=utf-8' }); Object(_lib_download_blob__WEBPACK_IMPORTED_MODULE_9__["default"])("".concat(variable.name, ".txt"), blob); } render() { const monitorProps = Object(_lib_monitor_adapter_js__WEBPACK_IMPORTED_MODULE_4__["default"])(this.props); const showSliderOption = availableModes(this.props.opcode).indexOf('slider') !== -1; const isList = this.props.mode === 'list'; const isImage = this.props.mode === 'image'; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, this.state.sliderPrompt && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_slider_prompt_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], { isDiscrete: this.props.isDiscrete, maxValue: parseFloat(this.props.max), minValue: parseFloat(this.props.min), onCancel: this.handleSliderPromptClose, onOk: this.handleSliderPromptOk }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_monitor_monitor_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], _extends({ componentRef: this.setElement }, monitorProps, { opcode: this.props.opcode, draggable: this.props.draggable, height: this.props.height, isDiscrete: this.props.isDiscrete, max: this.props.max, min: this.props.min, mode: this.props.mode, targetId: this.props.targetId, width: this.props.width, onDragEnd: this.handleDragEnd, onExport: isList || isImage ? this.handleExport : null, onImport: isList || isImage ? this.handleImport : null, onHide: this.handleHide, onNextMode: this.handleNextMode, onSetModeToDefault: isList || isImage ? null : this.handleSetModeToDefault, onSetModeToLarge: isList || isImage ? null : this.handleSetModeToLarge, onSetModeToSlider: showSliderOption ? this.handleSetModeToSlider : null, onSliderPromptOpen: this.handleSliderPromptOpen }))); } } Monitor.propTypes = { addMonitorRect: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, draggable: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, height: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, id: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], isDiscrete: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool, max: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, min: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, mode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf(['default', 'slider', 'large', 'list']), monitorLayout: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({ monitors: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object, // eslint-disable-line react/forbid-prop-types savedMonitorPositions: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object // eslint-disable-line react/forbid-prop-types }).isRequired, onDragEnd: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, opcode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired, // eslint-disable-line react/no-unused-prop-types params: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.object, // eslint-disable-line react/no-unused-prop-types, react/forbid-prop-types removeMonitorRect: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, resizeMonitorRect: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired, spriteName: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, // eslint-disable-line react/no-unused-prop-types targetId: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, value: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number]))]), // eslint-disable-line react/no-unused-prop-types vm: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_13___default.a), width: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, x: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, y: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number }; const mapStateToProps = state => ({ monitorLayout: state.scratchGui.monitorLayout, vm: state.scratchGui.vm }); const mapDispatchToProps = dispatch => ({ addMonitorRect: (id, rect, savePosition) => dispatch(Object(_reducers_monitor_layout__WEBPACK_IMPORTED_MODULE_6__["addMonitorRect"])(id, rect.upperStart, rect.lowerEnd, savePosition)), resizeMonitorRect: (id, newWidth, newHeight) => dispatch(Object(_reducers_monitor_layout__WEBPACK_IMPORTED_MODULE_6__["resizeMonitorRect"])(id, newWidth, newHeight)), removeMonitorRect: id => dispatch(Object(_reducers_monitor_layout__WEBPACK_IMPORTED_MODULE_6__["removeMonitorRect"])(id)) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_11__["connect"])(mapStateToProps, mapDispatchToProps)(Monitor))); /***/ }), /***/ "./src/containers/paint-editor-wrapper.jsx": /*!*************************************************!*\ !*** ./src/containers/paint-editor-wrapper.jsx ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_tw_scratch_paint__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/tw-scratch-paint */ "./src/lib/tw-scratch-paint.js"); /* harmony import */ var scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! scratch-svg-renderer */ "./node_modules/scratch-svg-renderer/src/index.js"); /* harmony import */ var scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/error-boundary-hoc.jsx */ "./src/lib/error-boundary-hoc.jsx"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); const _excluded = ["selectedCostumeIndex", "vm"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class PaintEditorWrapper extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleUpdateImage', 'handleUpdateName', 'handleUpdateFonts']); this.state = { fonts: this.props.vm.runtime.fontManager.getFonts() }; } componentDidMount() { this.props.vm.runtime.fontManager.on('change', this.handleUpdateFonts); } shouldComponentUpdate(nextProps, nextState) { return this.props.imageId !== nextProps.imageId || this.props.rtl !== nextProps.rtl || this.props.name !== nextProps.name || this.props.isDark !== nextProps.isDark || this.props.customStageSize !== nextProps.customStageSize || this.state.fonts !== nextState.fonts; } componentWillUnmount() { this.props.vm.runtime.fontManager.off('change', this.handleUpdateFonts); } handleUpdateFonts() { this.setState({ fonts: this.props.vm.runtime.fontManager.getFonts() }); } handleUpdateName(name) { this.props.vm.renameCostume(this.props.selectedCostumeIndex, name); } handleUpdateImage(isVector, image, rotationCenterX, rotationCenterY) { if (isVector) { this.props.vm.updateSvg(this.props.selectedCostumeIndex, image, rotationCenterX, rotationCenterY); } else { this.props.vm.updateBitmap(this.props.selectedCostumeIndex, image, rotationCenterX, rotationCenterY, 2 /* bitmapResolution */); } } render() { if (!this.props.imageId) return null; const _this$props = this.props, { selectedCostumeIndex, vm } = _this$props, componentProps = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_lib_tw_scratch_paint__WEBPACK_IMPORTED_MODULE_4__["default"], _extends({}, componentProps, { image: vm.getCostume(selectedCostumeIndex), onUpdateImage: this.handleUpdateImage, onUpdateName: this.handleUpdateName, fontInlineFn: scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_5__["inlineSvgFonts"], theme: this.props.isDark ? 'dark' : 'light', customFonts: this.state.fonts, width: this.props.customStageSize.width, height: this.props.customStageSize.height })); } } PaintEditorWrapper.propTypes = { customStageSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.width, height: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }), onManageFonts: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, imageFormat: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, imageId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, isDark: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, rotationCenterX: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, rotationCenterY: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, rtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, selectedCostumeIndex: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number.isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_3___default.a) }; const mapStateToProps = (state, _ref) => { let { selectedCostumeIndex } = _ref; const targetId = state.scratchGui.vm.editingTarget.id; const sprite = state.scratchGui.vm.editingTarget.sprite; // Make sure the costume index doesn't go out of range. const index = selectedCostumeIndex < sprite.costumes.length ? selectedCostumeIndex : sprite.costumes.length - 1; const costume = state.scratchGui.vm.editingTarget.sprite.costumes[index]; return { customStageSize: state.scratchGui.customStageSize, name: costume && costume.name, rotationCenterX: costume && costume.rotationCenterX, rotationCenterY: costume && costume.rotationCenterY, imageFormat: costume && costume.dataFormat, imageId: targetId && "".concat(targetId).concat(costume.skinId), rtl: state.locales.isRtl, selectedCostumeIndex: index, vm: state.scratchGui.vm, zoomLevelId: targetId }; }; const mapDispatchToProps = dispatch => ({ onManageFonts: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_7__["openFontsModal"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(_lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_6__["default"])('paint')(Object(react_redux__WEBPACK_IMPORTED_MODULE_8__["connect"])(mapStateToProps, mapDispatchToProps)(PaintEditorWrapper))); /***/ }), /***/ "./src/containers/play-button.jsx": /*!****************************************!*\ !*** ./src/containers/play-button.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_play_button_play_button_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/play-button/play-button.jsx */ "./src/components/play-button/play-button.jsx"); class PlayButton extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleClick', 'handleMouseDown', 'handleMouseEnter', 'handleMouseLeave', 'handleTouchStart', 'setButtonRef']); this.state = { touchStarted: false }; } getDerivedStateFromProps(props, state) { // if touchStarted is true and it's not playing, the sound must have ended. // reset the touchStarted state to allow the sound to be replayed if (state.touchStarted && !props.isPlaying) { return { touchStarted: false }; } return null; // nothing changed } componentDidMount() { // Touch start this.buttonRef.addEventListener('touchstart', this.handleTouchStart); } componentWillUnmount() { this.buttonRef.removeEventListener('touchstart', this.handleTouchStart); } handleClick(e) { // stop the click from propagating out of the button e.stopPropagation(); } handleMouseDown(e) { // prevent default (focus) on mouseDown e.preventDefault(); if (this.props.isPlaying) { // stop sound and reset touch state this.props.onStop(); if (this.state.touchstarted) this.setState({ touchStarted: false }); } else { this.props.onPlay(); if (this.state.touchstarted) { // started on touch, but now clicked mouse this.setState({ touchStarted: false }); } } } handleTouchStart(e) { if (this.props.isPlaying) { // If playing, stop sound, and reset touch state e.preventDefault(); this.setState({ touchStarted: false }); this.props.onStop(); } else { // otherwise start playing, and set touch state e.preventDefault(); this.setState({ touchStarted: true }); this.props.onPlay(); } } handleMouseEnter(e) { // start the sound if it's not already playing e.preventDefault(); if (!this.props.isPlaying) { this.props.onPlay(); } } handleMouseLeave() { // stop the sound unless it was started by touch if (this.props.isPlaying && !this.state.touchstarted) { this.props.onStop(); } } setButtonRef(ref) { this.buttonRef = ref; } render() { const { className, isPlaying, onPlay, // eslint-disable-line no-unused-vars onStop // eslint-disable-line no-unused-vars } = this.props; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_play_button_play_button_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { className: className, isPlaying: isPlaying, onClick: this.handleClick, onMouseDown: this.handleMouseDown, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, setButtonRef: this.setButtonRef }); } } PlayButton.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, isPlaying: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, onPlay: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onStop: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired }; /* harmony default export */ __webpack_exports__["default"] = (PlayButton); /***/ }), /***/ "./src/containers/playback-step.jsx": /*!******************************************!*\ !*** ./src/containers/playback-step.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_record_modal_playback_step_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/record-modal/playback-step.jsx */ "./src/components/record-modal/playback-step.jsx"); /* harmony import */ var _lib_audio_audio_buffer_player_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/audio/audio-buffer-player.js */ "./src/lib/audio/audio-buffer-player.js"); const _excluded = ["sampleRate", "onPlay", "onStopPlaying", "onSetPlayhead"]; function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class PlaybackStep extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handlePlay', 'handleStopPlaying']); } componentDidMount() { this.audioBufferPlayer = new _lib_audio_audio_buffer_player_js__WEBPACK_IMPORTED_MODULE_4__["default"](this.props.samples, this.props.sampleRate); } componentWillUnmount() { this.audioBufferPlayer.stop(); } handlePlay() { this.audioBufferPlayer.play(this.props.trimStart, this.props.trimEnd, this.props.onSetPlayhead, this.props.onStopPlaying); this.props.onPlay(); } handleStopPlaying() { this.audioBufferPlayer.stop(); this.props.onStopPlaying(); } render() { const _this$props = this.props, { sampleRate, // eslint-disable-line no-unused-vars onPlay, // eslint-disable-line no-unused-vars onStopPlaying, // eslint-disable-line no-unused-vars onSetPlayhead // eslint-disable-line no-unused-vars } = _this$props, componentProps = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_record_modal_playback_step_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], _extends({ onPlay: this.handlePlay, onStopPlaying: this.handleStopPlaying }, componentProps)); } } PlaybackStep.propTypes = _objectSpread({ sampleRate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired, samples: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(Float32Array).isRequired }, _components_record_modal_playback_step_jsx__WEBPACK_IMPORTED_MODULE_3__["default"].propTypes); /* harmony default export */ __webpack_exports__["default"] = (PlaybackStep); /***/ }), /***/ "./src/containers/pm-extension-modals.jsx": /*!************************************************!*\ !*** ./src/containers/pm-extension-modals.jsx ***! \************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_pm_extension_modals_extension_modals_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/pm-extension-modals/extension-modals.jsx */ "./src/components/pm-extension-modals/extension-modals.jsx"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } class ExtensionModals extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleOk', 'handleCancel']); this.state = { updateId: 0 }; } shouldComponentUpdate() { const vm = this.props.vm; if (!vm) return false; if (!vm.runtime) return false; if (!vm.runtime.modalManager) return false; return vm.runtime.modalManager._updateId !== this.state.updateId; } componentDidUpdate() { const vm = this.props.vm; if (!vm) return; if (!vm.runtime) return; if (!vm.runtime.modalManager) return; this.setState({ updateId: vm.runtime.modalManager._updateId }); } handleOk() {} handleCancel() {} render() { const vm = this.props.vm; if (!vm) return; if (!vm.runtime) return; if (!vm.runtime.modalManager) return; const modals = vm.runtime.modalManager.modals; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null, Object.keys(modals).map(modalId => { const modal = modals[modalId]; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_pm_extension_modals_extension_modals_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], _extends({}, modal, { vm: this.props.vm })); })); } } ExtensionModals.propTypes = { vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.any }; /* harmony default export */ __webpack_exports__["default"] = (ExtensionModals); /***/ }), /***/ "./src/containers/project-watcher.jsx": /*!********************************************!*\ !*** ./src/containers/project-watcher.jsx ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js"); /** * Watches for project to finish updating before taking some action. * * To use ProjectWatcher, pass it a callback function using the onDoneUpdating prop. * ProjectWatcher passes a waitForUpdate function to its children, which they can call * to set ProjectWatcher to request that it call the onDoneUpdating callback when * project is no longer updating. */ class ProjectWatcher extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['waitForUpdate']); this.state = { waiting: false }; } componentDidUpdate(prevProps) { if (this.state.waiting && this.props.isShowingWithId && !prevProps.isShowingWithId) { this.fulfill(); } } fulfill() { this.props.onDoneUpdating(); this.setState({ // eslint-disable-line react/no-did-update-set-state waiting: false }); } waitForUpdate(isUpdating) { if (isUpdating) { this.setState({ waiting: true }); } else { // fulfill immediately this.fulfill(); } } render() { return this.props.children(this.waitForUpdate); } } ProjectWatcher.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, isShowingWithId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onDoneUpdating: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; ProjectWatcher.defaultProps = { onDoneUpdating: () => {} }; const mapStateToProps = state => { const loadingState = state.scratchGui.projectState.loadingState; return { isShowingWithId: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_4__["getIsShowingWithId"])(loadingState) }; }; const mapDispatchToProps = () => ({}); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(ProjectWatcher)); /***/ }), /***/ "./src/containers/prompt.jsx": /*!***********************************!*\ !*** ./src/containers/prompt.jsx ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_prompt_prompt_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/prompt/prompt.jsx */ "./src/components/prompt/prompt.jsx"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _lib_tw_cloud_limits_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/tw-cloud-limits.js */ "./src/lib/tw-cloud-limits.js"); class Prompt extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleOk', 'handleScopeOptionSelection', 'handleCancel', 'handleChange', 'handleKeyPress', 'handleCloudVariableOptionChange']); this.state = { isAddingCloudVariableScratchSafe: props.vm && props.vm.runtime.getNumberOfCloudVariables() < _lib_tw_cloud_limits_js__WEBPACK_IMPORTED_MODULE_5__["SCRATCH_MAX_CLOUD_VARIABLES"] || false, inputValue: '', globalSelected: true, cloudSelected: false, canAddCloudVariable: props.vm && props.vm.runtime.canAddCloudVariable() || false }; } handleKeyPress(event) { if (event.key === 'Enter') this.handleOk(); } handleFocus(event) { event.target.select(); } handleOk() { this.props.onOk(this.state.inputValue, { scope: this.state.globalSelected ? 'global' : 'local', isCloud: this.state.cloudSelected }); } handleCancel() { this.props.onCancel(); } handleChange(e) { this.setState({ inputValue: e.target.value }); } handleScopeOptionSelection(e) { this.setState({ globalSelected: e.target.value === 'global' }); } handleCloudVariableOptionChange(e) { if (!this.props.showCloudOption) return; const checked = e.target.checked; this.setState({ cloudSelected: checked }); if (checked) { this.setState({ globalSelected: true }); } } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_prompt_prompt_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { isAddingCloudVariableScratchSafe: this.state.isAddingCloudVariableScratchSafe, canAddCloudVariable: this.state.canAddCloudVariable, cloudSelected: this.state.cloudSelected, defaultValue: this.props.defaultValue, globalSelected: this.state.globalSelected, isStage: this.props.isStage, showListMessage: this.props.showListMessage, label: this.props.label, showCloudOption: this.props.showCloudOption, showVariableOptions: this.props.showVariableOptions, title: this.props.title, onCancel: this.handleCancel, onChange: this.handleChange, onCloudVarOptionChange: this.handleCloudVariableOptionChange, onFocus: this.handleFocus, onKeyPress: this.handleKeyPress, onOk: this.handleOk, onScopeOptionSelection: this.handleScopeOptionSelection }); } } Prompt.propTypes = { defaultValue: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, isStage: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, showListMessage: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, label: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onOk: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, showCloudOption: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, showVariableOptions: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, title: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a) }; /* harmony default export */ __webpack_exports__["default"] = (Prompt); /***/ }), /***/ "./src/containers/question.jsx": /*!*************************************!*\ !*** ./src/containers/question.jsx ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_question_question_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/question/question.jsx */ "./src/components/question/question.jsx"); class Question extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleChange', 'handleKeyPress', 'handleSubmit']); this.state = { answer: '' }; } handleChange(e) { this.setState({ answer: e.target.value }); } handleKeyPress(event) { if (event.key === 'Enter') this.handleSubmit(); } handleSubmit() { this.props.onQuestionAnswered(this.state.answer); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_question_question_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { answer: this.state.answer, question: this.props.question, onChange: this.handleChange, onClick: this.handleSubmit, onKeyPress: this.handleKeyPress }); } } Question.propTypes = { onQuestionAnswered: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, question: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string }; /* harmony default export */ __webpack_exports__["default"] = (Question); /***/ }), /***/ "./src/containers/record-modal.jsx": /*!*****************************************!*\ !*** ./src/containers/record-modal.jsx ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/audio/audio-util.js */ "./src/lib/audio/audio-util.js"); /* harmony import */ var _components_record_modal_record_modal_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/record-modal/record-modal.jsx */ "./src/components/record-modal/record-modal.jsx"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); class RecordModal extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleRecord', 'handleStopRecording', 'handlePlay', 'handleStopPlaying', 'handleBack', 'handleSubmit', 'handleCancel', 'handleSetPlayhead', 'handleSetTrimStart', 'handleSetTrimEnd']); this.state = { samples: null, encoding: false, levels: null, playhead: null, playing: false, recording: false, sampleRate: null, trimStart: 0, trimEnd: 1 }; } handleRecord() { this.setState({ recording: true }); } handleStopRecording(samples, sampleRate, levels, trimStart, trimEnd) { if (samples.length > 0) { this.setState({ samples, sampleRate, levels, trimStart, trimEnd, recording: false }); } } handlePlay() { this.setState({ playing: true }); } handleStopPlaying() { this.setState({ playing: false, playhead: null }); } handleBack() { this.setState({ playing: false, samples: null }); } handleSetTrimEnd(trimEnd) { this.setState({ trimEnd }); } handleSetTrimStart(trimStart) { this.setState({ trimStart }); } handleSetPlayhead(playhead) { this.setState({ playhead }); } handleSubmit() { this.setState({ encoding: true }, () => { const sampleCount = this.state.samples.length; const startIndex = Math.floor(this.state.trimStart * sampleCount); const endIndex = Math.floor(this.state.trimEnd * sampleCount); const clippedSamples = this.state.samples.slice(startIndex, endIndex); Object(_lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_5__["encodeAndAddSoundToVM"])(this.props.vm, clippedSamples, this.state.sampleRate, 'recording1', () => { this.props.onClose(); this.props.onNewSound(); }); }); } handleCancel() { this.props.onClose(); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_record_modal_record_modal_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { encoding: this.state.encoding, levels: this.state.levels, playhead: this.state.playhead, playing: this.state.playing, recording: this.state.recording, sampleRate: this.state.sampleRate, samples: this.state.samples, trimEnd: this.state.trimEnd, trimStart: this.state.trimStart, onBack: this.handleBack, onCancel: this.handleCancel, onPlay: this.handlePlay, onRecord: this.handleRecord, onSetPlayhead: this.handleSetPlayhead, onSetTrimEnd: this.handleSetTrimEnd, onSetTrimStart: this.handleSetTrimStart, onStopPlaying: this.handleStopPlaying, onStopRecording: this.handleStopRecording, onSubmit: this.handleSubmit }); } } RecordModal.propTypes = { onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onNewSound: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_3___default.a) }; const mapStateToProps = state => ({ vm: state.scratchGui.vm }); const mapDispatchToProps = dispatch => ({ onClose: () => { dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_7__["closeSoundRecorder"])()); } }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps, mapDispatchToProps)(RecordModal)); /***/ }), /***/ "./src/containers/recording-step.jsx": /*!*******************************************!*\ !*** ./src/containers/recording-step.jsx ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_record_modal_recording_step_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/record-modal/recording-step.jsx */ "./src/components/record-modal/recording-step.jsx"); /* harmony import */ var _lib_audio_audio_recorder_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/audio/audio-recorder.js */ "./src/lib/audio/audio-recorder.js"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_log__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/log */ "./src/lib/log.js"); const _excluded = ["onRecord", "onStopRecording"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_5__["defineMessages"])({ alertMsg: { "id": "gui.recordingStep.alertMsg", "defaultMessage": "Could not start recording" } }); class RecordingStep extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleRecord', 'handleStopRecording', 'handleStarted', 'handleLevelUpdate', 'handleRecordingError']); this.state = { listening: false, level: 0, levels: null }; } componentDidMount() { this.audioRecorder = new _lib_audio_audio_recorder_js__WEBPACK_IMPORTED_MODULE_4__["default"](); this.audioRecorder.startListening(this.handleStarted, this.handleLevelUpdate, this.handleRecordingError); } componentWillUnmount() { this.audioRecorder.dispose(); } handleStarted() { this.setState({ listening: true }); } handleRecordingError(error) { _lib_log__WEBPACK_IMPORTED_MODULE_6__["default"].error(error); alert(this.props.intl.formatMessage(messages.alertMsg)); // eslint-disable-line no-alert } handleLevelUpdate(level) { this.setState({ level: level, levels: this.props.recording ? (this.state.levels || []).concat([level]) : this.state.levels }); } handleRecord() { this.audioRecorder.startRecording(); this.props.onRecord(); } handleStopRecording() { const { samples, sampleRate, levels, trimStart, trimEnd } = this.audioRecorder.stop(); this.props.onStopRecording(samples, sampleRate, levels, trimStart, trimEnd); } render() { const _this$props = this.props, { onRecord, // eslint-disable-line no-unused-vars onStopRecording // eslint-disable-line no-unused-vars } = _this$props, componentProps = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_record_modal_recording_step_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], _extends({ level: this.state.level, levels: this.state.levels, listening: this.state.listening, onRecord: this.handleRecord, onStopRecording: this.handleStopRecording }, componentProps)); } } RecordingStep.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_5__["intlShape"].isRequired, onRecord: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onStopRecording: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, recording: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_5__["injectIntl"])(RecordingStep)); /***/ }), /***/ "./src/containers/sb3-downloader.jsx": /*!*******************************************!*\ !*** ./src/containers/sb3-downloader.jsx ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_project_title__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/project-title */ "./src/reducers/project-title.js"); /* harmony import */ var _lib_download_blob__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/download-blob */ "./src/lib/download-blob.js"); /* harmony import */ var _reducers_project_changed__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/project-changed */ "./src/reducers/project-changed.js"); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js"); /* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js"); /* harmony import */ var _lib_tw_filesystem_api__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/tw-filesystem-api */ "./src/lib/tw-filesystem-api.js"); /* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js"); /* harmony import */ var _lib_log__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../lib/log */ "./src/lib/log.js"); // from sb-file-uploader-hoc.jsx const getProjectTitleFromFilename = fileInputFilename => { if (!fileInputFilename) return ''; // only parse title with valid scratch project extensions // (.sb, .sb2, .sb3, and .pm) const matches = fileInputFilename.match(/^(.*)(\.sb[23]?|\.pm|\.pmp|\.s4s.txt)$/); if (!matches) return ''; return matches[1].substring(0, 100); // truncate project title to max 100 chars }; /** * @param {Uint8Array[]} arrays List of byte arrays * @returns {number} Total length of the arrays */ const getLengthOfByteArrays = arrays => { let length = 0; for (let i = 0; i < arrays.length; i++) { length += arrays[i].byteLength; } return length; }; /** * @param {Uint8Array[]} arrays List of byte arrays * @returns {Uint8Array} One big array containing all of the little arrays in order. */ const concatenateByteArrays = arrays => { const totalLength = getLengthOfByteArrays(arrays); const newArray = new Uint8Array(totalLength); let p = 0; for (let i = 0; i < arrays.length; i++) { newArray.set(arrays[i], p); p += arrays[i].byteLength; } return newArray; }; /** * Project saver component passes a downloadProject function to its child. * It expects this child to be a function with the signature * function (downloadProject, props) {} * The component can then be used to attach project saving functionality * to any other component: * * {(downloadProject, props) => ( * * )} */ class SB3Downloader extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['downloadProject', 'saveAsNew', 'saveToLastFile', 'saveToLastFileOrNew', 'saveAsFolder']); } startedSaving() { this.props.onShowSavingAlert(); } finishedSaving() { this.props.onProjectUnchanged(); this.props.onShowSaveSuccessAlert(); if (this.props.onSaveFinished) { this.props.onSaveFinished(); } } downloadProject() { if (!this.props.canSaveProject) { return; } this.startedSaving(); this.props.saveProjectSb3().then(content => { this.finishedSaving(); Object(_lib_download_blob__WEBPACK_IMPORTED_MODULE_5__["default"])(this.props.projectFilename, content); }); } async saveAsNew() { if (!this.props.canSaveProject) { return; } try { const handle = await _lib_tw_filesystem_api__WEBPACK_IMPORTED_MODULE_9__["default"].showSaveFilePicker(this.props.projectFilename); await this.saveToHandle(handle); this.props.onSetFileHandle(handle); const title = getProjectTitleFromFilename(handle.name); if (title) { this.props.onSetProjectTitle(title); } } catch (e) { this.handleSaveError(e); } } async saveAsFolder() { if (!this.props.canSaveProject) { return; } try { const handle = await _lib_tw_filesystem_api__WEBPACK_IMPORTED_MODULE_9__["default"].showDirectoryPicker("pm-project-folder", "documents"); this.startedSaving(); const jsZip = this.props.saveProjectZip(); this.extractJSZipToHandle(jsZip, handle); this.finishedSaving(); const title = handle.name; if (title) { this.props.onSetProjectTitle(title); } } catch (e) { this.handleSaveError(e); } } async saveToLastFile() { try { await this.saveToHandle(this.props.fileHandle); } catch (e) { this.handleSaveError(e); } } saveToLastFileOrNew() { if (this.props.fileHandle) { return this.saveToLastFile(); } return this.saveAsNew(); } async saveToHandle(handle) { if (!this.props.canSaveProject) { return; } const writable = await handle.createWritable(); this.startedSaving(); await new Promise((resolve, reject) => { // Projects can be very large, so we'll utilize JSZip's stream API to avoid having the // entire sb3 in memory at the same time. const jszipStream = this.props.saveProjectSb3Stream(); const abortController = new AbortController(); jszipStream.on('error', error => { abortController.abort(error); }); // JSZip's stream pause() and resume() methods are not necessarily completely no-ops // if they are already paused or resumed. These also make it easier to add debug // logging of when we actually pause or resume. // Note that JSZip will keep sending some data after you ask it to pause. let jszipStreamRunning = false; const pauseJSZipStream = () => { if (jszipStreamRunning) { jszipStreamRunning = false; jszipStream.pause(); } }; const resumeJSZipStream = () => { if (!jszipStreamRunning) { jszipStreamRunning = true; jszipStream.resume(); } }; // Allow the JSZip stream to run quite a bit ahead of file writing. This helps // reduce zip stream pauses on systems with high latency storage. const HIGH_WATER_MARK_BYTES = 1024 * 1024 * 5; // Minimum size of buffer to pass into write(). Small buffers will be queued and // written in batches as they reach or exceed this size. const WRITE_BUFFER_TARGET_SIZE_BYTES = 1024 * 1024; const zipStream = new ReadableStream({ start: controller => { jszipStream.on('data', data => { controller.enqueue(data); if (controller.desiredSize <= 0) { pauseJSZipStream(); } }); jszipStream.on('end', () => { controller.close(); }); resumeJSZipStream(); }, pull: () => { resumeJSZipStream(); }, cancel: () => { pauseJSZipStream(); } }, new ByteLengthQueuingStrategy({ highWaterMark: HIGH_WATER_MARK_BYTES })); const queuedChunks = []; const fileStream = new WritableStream({ write: chunk => { queuedChunks.push(chunk); const currentSize = getLengthOfByteArrays(queuedChunks); if (currentSize >= WRITE_BUFFER_TARGET_SIZE_BYTES) { const newBuffer = concatenateByteArrays(queuedChunks); queuedChunks.length = 0; return writable.write(newBuffer); } // Otherwise wait for more data }, close: async () => { // Write the last batch of data. const lastBuffer = concatenateByteArrays(queuedChunks); if (lastBuffer.byteLength) { await writable.write(lastBuffer); } // File handle must be closed at the end to actually save the file. await writable.close(); }, abort: async () => { await writable.abort(); } }); zipStream.pipeTo(fileStream, { signal: abortController.signal }).then(() => { this.finishedSaving(); resolve(); }).catch(error => { reject(error); }); }); } async extractJSZipToHandle(zip, handle) { // Not sure how memory management works but im hoping this is fine for (const [relativePath, zipEntry] of Object.entries(zip.files)) { // files will be able to make directories if (zipEntry.dir) continue; const pathParts = relativePath.split("/"); const fileName = pathParts.pop(); // NOTE: Right now there's no reason to preserve directories, but the future save file format will use them. // See here for more info: https://docs.penguinmod.com/save-format/ // make a directory for each file within one let currentDir = handle; for (const part of pathParts) { currentDir = await currentDir.getDirectoryHandle(part, { create: true }); } const fileHandle = await currentDir.getFileHandle(fileName, { create: true }); const writable = await fileHandle.createWritable(); const content = await zipEntry.async("arraybuffer"); await writable.write(content); await writable.close(); } } handleSaveError(e) { // AbortError can happen when someone cancels the file selector dialog if (e && e.name === 'AbortError') { return; } _lib_log__WEBPACK_IMPORTED_MODULE_11__["default"].error(e); this.props.onShowSaveErrorAlert(); } render() { const { children } = this.props; return children(this.props.className, this.downloadProject, _lib_tw_filesystem_api__WEBPACK_IMPORTED_MODULE_9__["default"].available() ? { available: true, name: this.props.fileHandle ? this.props.fileHandle.name : null, saveAsNew: this.saveAsNew, saveToLastFile: this.saveToLastFile, saveToLastFileOrNew: this.saveToLastFileOrNew, smartSave: this.saveToLastFileOrNew, saveAsFolder: this.saveAsFolder } : { available: false, smartSave: this.downloadProject }); } } const getProjectFilename = (curTitle, defaultTitle) => { let filenameTitle = curTitle; if (!filenameTitle || filenameTitle.length === 0) { filenameTitle = defaultTitle; } return "".concat(filenameTitle.substring(0, 100), ".s4s.txt"); }; SB3Downloader.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, fileHandle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string }), onSaveFinished: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, projectFilename: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, saveProjectSb3: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, saveProjectSb3Stream: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, canSaveProject: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, saveProjectZip: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onSetFileHandle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onSetProjectTitle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onShowSavingAlert: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onShowSaveSuccessAlert: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onShowSaveErrorAlert: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onProjectUnchanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; SB3Downloader.defaultProps = { className: '' }; const mapStateToProps = state => ({ fileHandle: state.scratchGui.tw.fileHandle, saveProjectSb3: state.scratchGui.vm.saveProjectSb3.bind(state.scratchGui.vm), saveProjectSb3Stream: state.scratchGui.vm.saveProjectSb3Stream.bind(state.scratchGui.vm), // TODO: Is there a good reason to keep saveProjectZip private now that we use JSZip? saveProjectZip: state.scratchGui.vm._saveProjectZip.bind(state.scratchGui.vm), canSaveProject: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_10__["getIsShowingProject"])(state.scratchGui.projectState.loadingState), projectFilename: getProjectFilename(state.scratchGui.projectTitle, _reducers_project_title__WEBPACK_IMPORTED_MODULE_4__["projectTitleInitialState"]) }); const mapDispatchToProps = dispatch => ({ onSetFileHandle: fileHandle => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_8__["setFileHandle"])(fileHandle)), onSetProjectTitle: title => dispatch(Object(_reducers_project_title__WEBPACK_IMPORTED_MODULE_4__["setProjectTitle"])(title)), onShowSavingAlert: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_7__["showAlertWithTimeout"])(dispatch, 'saving'), onShowSaveSuccessAlert: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_7__["showAlertWithTimeout"])(dispatch, 'twSaveToDiskSuccess'), onShowSaveErrorAlert: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_7__["showStandardAlert"])('savingError')), onProjectUnchanged: () => dispatch(Object(_reducers_project_changed__WEBPACK_IMPORTED_MODULE_6__["setProjectUnchanged"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(SB3Downloader)); /***/ }), /***/ "./src/containers/scanning-step.jsx": /*!******************************************!*\ !*** ./src/containers/scanning-step.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_connection_modal_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/connection-modal/scanning-step.jsx */ "./src/components/connection-modal/scanning-step.jsx"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); class ScanningStep extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handlePeripheralListUpdate', 'handlePeripheralScanTimeout', 'handleRefresh']); this.state = { scanning: true, peripheralList: [] }; } componentDidMount() { this.props.vm.scanForPeripheral(this.props.extensionId); this.props.vm.on('PERIPHERAL_LIST_UPDATE', this.handlePeripheralListUpdate); this.props.vm.on('PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout); } componentWillUnmount() { // @todo: stop the peripheral scan here this.props.vm.removeListener('PERIPHERAL_LIST_UPDATE', this.handlePeripheralListUpdate); this.props.vm.removeListener('PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout); } handlePeripheralScanTimeout() { this.setState({ scanning: false, peripheralList: [] }); } handlePeripheralListUpdate(newList) { // TODO: sort peripherals by signal strength? so they don't jump around const peripheralArray = Object.keys(newList).map(id => newList[id]); this.setState({ peripheralList: peripheralArray }); } handleRefresh() { this.props.vm.scanForPeripheral(this.props.extensionId); this.setState({ scanning: true, peripheralList: [] }); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_connection_modal_scanning_step_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { connectionSmallIconURL: this.props.connectionSmallIconURL, peripheralList: this.state.peripheralList, phase: this.state.phase, scanning: this.state.scanning, title: this.props.extensionId, onConnected: this.props.onConnected, onConnecting: this.props.onConnecting, onRefresh: this.handleRefresh }); } } ScanningStep.propTypes = { connectionSmallIconURL: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, extensionId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired, onConnected: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onConnecting: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (ScanningStep); /***/ }), /***/ "./src/containers/slider-monitor.jsx": /*!*******************************************!*\ !*** ./src/containers/slider-monitor.jsx ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_variable_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/variable-utils */ "./src/lib/variable-utils.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _components_monitor_slider_monitor_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/monitor/slider-monitor.jsx */ "./src/components/monitor/slider-monitor.jsx"); const _excluded = ["vm", "value"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class SliderMonitor extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleSliderUpdate']); this.state = { value: props.value }; } componentWillReceiveProps(nextProps) { if (this.state.value !== nextProps.value) { this.setState({ value: nextProps.value }); } } handleSliderUpdate(e) { this.setState({ value: Number(e.target.value) }); const { vm, targetId, id: variableId } = this.props; Object(_lib_variable_utils__WEBPACK_IMPORTED_MODULE_4__["setVariableValue"])(vm, targetId, variableId, Number(e.target.value)); } render() { const _this$props = this.props, { vm, // eslint-disable-line no-unused-vars value // eslint-disable-line no-unused-vars } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_monitor_slider_monitor_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], _extends({}, props, { value: this.state.value, onSliderUpdate: this.handleSliderUpdate })); } } SliderMonitor.propTypes = { id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, targetId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]), vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_3___default.a) }; const mapStateToProps = state => ({ vm: state.scratchGui.vm }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_5__["connect"])(mapStateToProps)(SliderMonitor)); /***/ }), /***/ "./src/containers/slider-prompt.jsx": /*!******************************************!*\ !*** ./src/containers/slider-prompt.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_slider_prompt_slider_prompt_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/slider-prompt/slider-prompt.jsx */ "./src/components/slider-prompt/slider-prompt.jsx"); class SliderPrompt extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleOk', 'handleCancel', 'handleChangeMin', 'handleChangeMax', 'handleKeyPress', 'validates', 'shouldBeDiscrete']); const { isDiscrete, minValue, maxValue } = this.props; this.state = { // For internal use, convert values to strings based on isDiscrete // This is because `` always returns values as strings. minValue: isDiscrete ? minValue.toFixed(0) : minValue.toFixed(2), maxValue: isDiscrete ? maxValue.toFixed(0) : maxValue.toFixed(2) }; } handleKeyPress(event) { if (event.key === 'Enter') this.handleOk(); } handleOk() { const { minValue, maxValue } = this.state; if (!this.validates(minValue, maxValue)) { this.props.onCancel(); return; } this.props.onOk(parseFloat(minValue), parseFloat(maxValue), this.shouldBeDiscrete(minValue, maxValue)); } handleCancel() { this.props.onCancel(); } handleChangeMin(e) { this.setState({ minValue: e.target.value }); } handleChangeMax(e) { this.setState({ maxValue: e.target.value }); } shouldBeDiscrete(min, max) { return min.indexOf('.') + max.indexOf('.') === -2; // Both -1 } validates(min, max) { return isFinite(min) && isFinite(max); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_slider_prompt_slider_prompt_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { maxValue: this.state.maxValue, minValue: this.state.minValue, onCancel: this.handleCancel, onChangeMax: this.handleChangeMax, onChangeMin: this.handleChangeMin, onKeyPress: this.handleKeyPress, onOk: this.handleOk }); } } SliderPrompt.propTypes = { isDiscrete: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, maxValue: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, minValue: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, onCancel: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onOk: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired }; SliderPrompt.defaultProps = { maxValue: 100, minValue: 0, isDiscrete: true }; /* harmony default export */ __webpack_exports__["default"] = (SliderPrompt); /***/ }), /***/ "./src/containers/sound-editor.jsx": /*!*****************************************!*\ !*** ./src/containers/sound-editor.jsx ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var wav_encoder__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! wav-encoder */ "./node_modules/wav-encoder/index.js"); /* harmony import */ var wav_encoder__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(wav_encoder__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/audio/audio-util.js */ "./src/lib/audio/audio-util.js"); /* harmony import */ var _lib_audio_audio_effects_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/audio/audio-effects.js */ "./src/lib/audio/audio-effects.js"); /* harmony import */ var _components_sound_editor_sound_editor_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/sound-editor/sound-editor.jsx */ "./src/components/sound-editor/sound-editor.jsx"); /* harmony import */ var _lib_audio_audio_buffer_player_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/audio/audio-buffer-player.js */ "./src/lib/audio/audio-buffer-player.js"); /* harmony import */ var _lib_log_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/log.js */ "./src/lib/log.js"); /* harmony import */ var _css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../css/confirm-dialog.css */ "./src/css/confirm-dialog.css"); /* harmony import */ var _css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11__); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } const UNDO_STACK_SIZE = 250; const MAX_RMS = 1.2; class SoundEditor extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['copy', 'copyCurrentBuffer', 'handleCopyToNew', 'handleStoppedPlaying', 'handleChangeName', 'handlePlay', 'handleStopPlaying', 'handleUpdatePlayhead', 'handleDelete', 'handleUpdateTrim', 'handleEffect', 'handleUndo', 'handleRedo', 'submitNewSamples', 'handleCopy', 'handlePaste', 'paste', 'handleKeyPress', 'handleContainerClick', 'setRef', 'resampleBufferToRate', 'handleModifyMenu', 'handleFormatMenu', 'getSelectionBuffer']); this.state = { copyBuffer: null, chunkLevels: Object(_lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_6__["computeChunkedRMS"])(this.props.samples, this.props.waveformChunkSize), playhead: null, // null is not playing, [0 -> 1] is playing percent trimStart: null, trimEnd: null }; this.redoStack = []; this.undoStack = []; this.ref = null; } componentDidMount() { this.audioBufferPlayer = new _lib_audio_audio_buffer_player_js__WEBPACK_IMPORTED_MODULE_9__["default"](this.props.samples, this.props.sampleRate); document.addEventListener('keydown', this.handleKeyPress); } componentWillReceiveProps(newProps) { if (newProps.waveformChunkSize !== this.props.waveformChunkSize) { this.setState({ chunkLevels: Object(_lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_6__["computeChunkedRMS"])(newProps.samples, newProps.waveformChunkSize) }); } if (newProps.soundId !== this.props.soundId) { // A different sound has been selected this.redoStack = []; this.undoStack = []; this.resetState(newProps.samples, newProps.sampleRate); this.setState({ trimStart: null, trimEnd: null }); } } componentWillUnmount() { this.audioBufferPlayer.stop(); document.removeEventListener('keydown', this.handleKeyPress); } handleKeyPress(event) { if (event.target instanceof HTMLInputElement) { // Ignore keyboard shortcuts if a text input field is focused return; } if (this.props.isFullScreen) { // Ignore keyboard shortcuts if the stage is fullscreen mode return; } if (event.key === ' ') { event.preventDefault(); if (this.state.playhead) { this.handleStopPlaying(); } else { this.handlePlay(); } } if (event.key === 'Delete' || event.key === 'Backspace') { event.preventDefault(); if (event.shiftKey) { this.handleDeleteInverse(); } else { this.handleDelete(); } } if (event.key === 'Escape') { event.preventDefault(); this.handleUpdateTrim(null, null); } if (event.metaKey || event.ctrlKey) { if (event.shiftKey && event.key.toLowerCase() === 'z') { event.preventDefault(); if (this.redoStack.length > 0) { this.handleRedo(); } } else if (event.key === 'z') { if (this.undoStack.length > 0) { event.preventDefault(); this.handleUndo(); } } else if (event.key === 'c') { event.preventDefault(); this.handleCopy(); } else if (event.key === 'v') { event.preventDefault(); this.handlePaste(); } else if (event.key === 'a') { event.preventDefault(); this.handleUpdateTrim(0, 1); } } } resetState(samples, sampleRate) { this.audioBufferPlayer.stop(); this.audioBufferPlayer = new _lib_audio_audio_buffer_player_js__WEBPACK_IMPORTED_MODULE_9__["default"](samples, sampleRate); this.setState({ chunkLevels: Object(_lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_6__["computeChunkedRMS"])(samples, this.props.waveformChunkSize), playhead: null }); } submitNewSamples(samples, sampleRate, skipUndo) { return Object(_lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_6__["downsampleIfNeeded"])({ samples, sampleRate }, this.resampleBufferToRate).then(_ref => { let { samples: newSamples, sampleRate: newSampleRate } = _ref; return wav_encoder__WEBPACK_IMPORTED_MODULE_3___default.a.encode({ sampleRate: newSampleRate, channelData: [newSamples] }).then(wavBuffer => { if (!skipUndo) { this.redoStack = []; if (this.undoStack.length >= UNDO_STACK_SIZE) { this.undoStack.shift(); // Drop the first element off the array } this.undoStack.push(this.getUndoItem()); } this.resetState(newSamples, newSampleRate); this.props.vm.updateSoundBuffer(this.props.soundIndex, this.audioBufferPlayer.buffer, new Uint8Array(wavBuffer)); return true; // Edit was successful }); }).catch(e => { // Encoding failed, or the sound was too large to save so edit is rejected _lib_log_js__WEBPACK_IMPORTED_MODULE_10__["default"].error("Encountered error while trying to encode sound update: ".concat(e.message)); return false; // Edit was not applied }); } handlePlay() { this.audioBufferPlayer.stop(); this.audioBufferPlayer.play(this.state.trimStart || 0, this.state.trimEnd || 1, this.handleUpdatePlayhead, this.handleStoppedPlaying); } handleStopPlaying() { this.audioBufferPlayer.stop(); this.handleStoppedPlaying(); } handleStoppedPlaying() { this.setState({ playhead: null }); } handleUpdatePlayhead(playhead) { this.setState({ playhead }); } handleChangeName(name) { this.props.vm.renameSound(this.props.soundIndex, name); } handleDelete() { const { samples, sampleRate } = this.copyCurrentBuffer(); const sampleCount = samples.length; const startIndex = Math.floor(this.state.trimStart * sampleCount); const endIndex = Math.floor(this.state.trimEnd * sampleCount); const firstPart = samples.slice(0, startIndex); const secondPart = samples.slice(endIndex, sampleCount); const newLength = firstPart.length + secondPart.length; let newSamples; if (newLength === 0) { newSamples = new Float32Array(1); } else { newSamples = new Float32Array(newLength); newSamples.set(firstPart, 0); newSamples.set(secondPart, firstPart.length); } this.submitNewSamples(newSamples, sampleRate).then(() => { this.setState({ trimStart: null, trimEnd: null }); }); } handleDeleteInverse() { // Delete everything outside of the trimmers const { samples, sampleRate } = this.copyCurrentBuffer(); const sampleCount = samples.length; const startIndex = Math.floor(this.state.trimStart * sampleCount); const endIndex = Math.floor(this.state.trimEnd * sampleCount); let clippedSamples = samples.slice(startIndex, endIndex); if (clippedSamples.length === 0) { clippedSamples = new Float32Array(1); } this.submitNewSamples(clippedSamples, sampleRate).then(success => { if (success) { this.setState({ trimStart: null, trimEnd: null }); } }); } handleUpdateTrim(trimStart, trimEnd) { this.setState({ trimStart, trimEnd }); this.handleStopPlaying(); } effectFactory(name) { return () => this.handleEffect({ preset: name }); } copyCurrentBuffer() { // Cannot reliably use props.samples because it gets detached by Firefox return { samples: this.audioBufferPlayer.buffer.getChannelData(0), sampleRate: this.audioBufferPlayer.buffer.sampleRate }; } handleEffect(options) { const trimStart = this.state.trimStart === null ? 0.0 : this.state.trimStart; const trimEnd = this.state.trimEnd === null ? 1.0 : this.state.trimEnd; // Offline audio context needs at least 2 samples if (this.audioBufferPlayer.buffer.length < 2) { return; } const effects = new _lib_audio_audio_effects_js__WEBPACK_IMPORTED_MODULE_7__["default"](this.audioBufferPlayer.buffer, options, trimStart, trimEnd); effects.process((renderedBuffer, adjustedTrimStart, adjustedTrimEnd) => { const samples = renderedBuffer.getChannelData(0); const sampleRate = renderedBuffer.sampleRate; this.submitNewSamples(samples, sampleRate).then(success => { if (success) { if (this.state.trimStart === null) { this.handlePlay(); } else { this.setState({ trimStart: adjustedTrimStart, trimEnd: adjustedTrimEnd }, this.handlePlay); } } }); }); } tooLoud() { const numChunks = this.state.chunkLevels.length; const startIndex = this.state.trimStart === null ? 0 : Math.floor(this.state.trimStart * numChunks); const endIndex = this.state.trimEnd === null ? numChunks - 1 : Math.ceil(this.state.trimEnd * numChunks); const trimChunks = this.state.chunkLevels.slice(startIndex, endIndex); let max = 0; for (const i of trimChunks) { if (i > max) { max = i; } } return max > MAX_RMS; } getUndoItem() { return _objectSpread(_objectSpread({}, this.copyCurrentBuffer()), {}, { trimStart: this.state.trimStart, trimEnd: this.state.trimEnd }); } handleUndo() { this.redoStack.push(this.getUndoItem()); const { samples, sampleRate, trimStart, trimEnd } = this.undoStack.pop(); if (samples) { return this.submitNewSamples(samples, sampleRate, true).then(success => { if (success) { this.setState({ trimStart: trimStart, trimEnd: trimEnd }, this.handlePlay); } }); } } handleRedo() { const { samples, sampleRate, trimStart, trimEnd } = this.redoStack.pop(); if (samples) { this.undoStack.push(this.getUndoItem()); return this.submitNewSamples(samples, sampleRate, true).then(success => { if (success) { this.setState({ trimStart: trimStart, trimEnd: trimEnd }, this.handlePlay); } }); } } handleCopy() { this.copy(); } copy(callback) { const trimStart = this.state.trimStart === null ? 0.0 : this.state.trimStart; const trimEnd = this.state.trimEnd === null ? 1.0 : this.state.trimEnd; const newCopyBuffer = this.copyCurrentBuffer(); const trimStartSamples = trimStart * newCopyBuffer.samples.length; const trimEndSamples = trimEnd * newCopyBuffer.samples.length; newCopyBuffer.samples = newCopyBuffer.samples.slice(trimStartSamples, trimEndSamples); this.setState({ copyBuffer: newCopyBuffer }, callback); } getSelectionBuffer() { const trimStart = this.state.trimStart === null ? 0.0 : this.state.trimStart; const trimEnd = this.state.trimEnd === null ? 1.0 : this.state.trimEnd; const newCopyBuffer = this.copyCurrentBuffer(); const trimStartSamples = trimStart * newCopyBuffer.samples.length; const trimEndSamples = trimEnd * newCopyBuffer.samples.length; newCopyBuffer.samples = newCopyBuffer.samples.slice(trimStartSamples, trimEndSamples); return newCopyBuffer; } handleCopyToNew() { this.copy(() => { Object(_lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_6__["encodeAndAddSoundToVM"])(this.props.vm, this.state.copyBuffer.samples, this.state.copyBuffer.sampleRate, this.props.name); }); } resampleBufferToRate(buffer, newRate) { return new Promise((resolve, reject) => { const sampleRateRatio = newRate / buffer.sampleRate; const newLength = sampleRateRatio * buffer.samples.length; let offlineContext; // Try to use either OfflineAudioContext or webkitOfflineAudioContext to resample // The constructors will throw if trying to resample at an unsupported rate // (e.g. Safari/webkitOAC does not support lower than 44khz). try { if (window.OfflineAudioContext) { offlineContext = new window.OfflineAudioContext(1, newLength, newRate); } else if (window.webkitOfflineAudioContext) { offlineContext = new window.webkitOfflineAudioContext(1, newLength, newRate); } } catch (_unused) { // If no OAC available and downsampling by 2, downsample by dropping every other sample. if (newRate === buffer.sampleRate / 2) { return resolve(Object(_lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_6__["dropEveryOtherSample"])(buffer)); } return reject(new Error('Could not resample')); } const source = offlineContext.createBufferSource(); const audioBuffer = offlineContext.createBuffer(1, buffer.samples.length, buffer.sampleRate); audioBuffer.getChannelData(0).set(buffer.samples); source.buffer = audioBuffer; source.connect(offlineContext.destination); source.start(); offlineContext.startRendering(); offlineContext.oncomplete = _ref2 => { let { renderedBuffer } = _ref2; resolve({ samples: renderedBuffer.getChannelData(0), sampleRate: newRate }); }; }); } paste() { // If there's no selection, paste at the end of the sound const { samples } = this.copyCurrentBuffer(); if (this.state.trimStart === null) { const newLength = samples.length + this.state.copyBuffer.samples.length; const newSamples = new Float32Array(newLength); newSamples.set(samples, 0); newSamples.set(this.state.copyBuffer.samples, samples.length); this.submitNewSamples(newSamples, this.props.sampleRate, false).then(success => { if (success) { this.handlePlay(); } }); } else { // else replace the selection with the pasted sound const trimStartSamples = this.state.trimStart * samples.length; const trimEndSamples = this.state.trimEnd * samples.length; const firstPart = samples.slice(0, trimStartSamples); const lastPart = samples.slice(trimEndSamples); const newLength = firstPart.length + this.state.copyBuffer.samples.length + lastPart.length; const newSamples = new Float32Array(newLength); newSamples.set(firstPart, 0); newSamples.set(this.state.copyBuffer.samples, firstPart.length); newSamples.set(lastPart, firstPart.length + this.state.copyBuffer.samples.length); const trimStartSeconds = trimStartSamples / this.props.sampleRate; const trimEndSeconds = trimStartSeconds + this.state.copyBuffer.samples.length / this.state.copyBuffer.sampleRate; const newDurationSeconds = newSamples.length / this.state.copyBuffer.sampleRate; const adjustedTrimStart = trimStartSeconds / newDurationSeconds; const adjustedTrimEnd = trimEndSeconds / newDurationSeconds; this.submitNewSamples(newSamples, this.props.sampleRate, false).then(success => { if (success) { this.setState({ trimStart: adjustedTrimStart, trimEnd: adjustedTrimEnd }, this.handlePlay); } }); } } handlePaste() { if (!this.state.copyBuffer) return; if (this.state.copyBuffer.sampleRate === this.props.sampleRate) { this.paste(); } else { this.resampleBufferToRate(this.state.copyBuffer, this.props.sampleRate).then(buffer => { this.setState({ copyBuffer: buffer }, this.paste); }); } } setRef(element) { this.ref = element; } handleContainerClick(e) { // If the click is on the sound editor's div (and not any other element), delesect if (e.target === this.ref && this.state.trimStart !== null) { this.handleUpdateTrim(null, null); } } handleModifyMenu() { // get selected audio const bufferSelection = this.getSelectionBuffer(); // for preview const audio = new AudioContext(); const gainNode = audio.createGain(); gainNode.gain.value = 1; gainNode.connect(audio.destination); // create inputs before menu so we can get the value easier const pitch = document.createElement("input"); const volume = document.createElement("input"); const menu = this.displayPopup("Modify Sound", 200, 280, "Apply", "Cancel", () => { // accepted audio.close(); const truePitch = isNaN(Number(pitch.value)) ? 0 : Number(pitch.value); const trueVolume = isNaN(Number(volume.value)) ? 0 : Number(volume.value); this.handleEffect({ pitch: truePitch * 10, volume: trueVolume }); }, () => { // denied audio.close(); // we dont need to do anything else }); menu.textarea.style = "position: relative;display: flex;justify-content: flex-end;flex-direction: row;height: calc(100% - (3.125em + 2.125em + 16px));align-items: center;"; // set pitch stuff pitch.type = "range"; pitch.classList.add(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default.a.verticalSlider); pitch.style = "position: absolute;left: -40px;top: 80px;"; pitch.value = 0; pitch.min = -360; pitch.max = 360; pitch.step = 1; // set volume stuff volume.type = "range"; volume.classList.add(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default.a.verticalSlider); volume.style = "position: absolute;left: 0px;top: 80px;"; volume.value = 1; volume.min = 0; volume.max = 2; volume.step = 0.01; menu.textarea.append(pitch); menu.textarea.append(volume); const labelPitch = document.createElement("p"); const labelVolume = document.createElement("p"); labelPitch.style = "text-align: center;width: 35px;font-size: 12px;position: absolute;left: 7.5px;top: 3.5px;"; labelVolume.style = "text-align: center;width: 35px;font-size: 12px;position: absolute;left: 47.5px;top: 3.5px;"; labelPitch.innerHTML = "Pitch"; labelVolume.innerHTML = "Volume"; menu.textarea.append(labelPitch); menu.textarea.append(labelVolume); const valuePitch = document.createElement("input"); const valueVolume = document.createElement("input"); valuePitch.style = "text-align: center;width: 35px;font-size: 12px;position: absolute;left: 4px;top: 152.5px;"; valueVolume.style = "text-align: center;width: 35px;font-size: 12px;position: absolute;left: 44px;top: 152.5px;"; valuePitch.value = 0; valueVolume.value = 100; valuePitch.min = -360; valuePitch.max = 360; valuePitch.step = 1; valueVolume.min = 0; valueVolume.max = 200; valueVolume.step = 1; valuePitch.type = "number"; valueVolume.type = "number"; menu.textarea.append(valuePitch); menu.textarea.append(valueVolume); const previewButton = document.createElement("button"); previewButton.style = "font-weight: bold;color: white;border-radius: 1000px;width: 46px;margin-right: 28px;height: 46px;border-style: none;background: #00c3ff;"; previewButton.innerHTML = "Play"; menu.textarea.append(previewButton); // playing audio // create an audio buffer using the selection const properBuffer = audio.createBuffer(1, bufferSelection.samples.length, bufferSelection.sampleRate); properBuffer.getChannelData(0).set(bufferSelection.samples); // button functionality let bufferSource; let audioPlaying = false; function play() { bufferSource = audio.createBufferSource(); bufferSource.connect(gainNode); bufferSource.buffer = properBuffer; bufferSource.start(0); bufferSource.detune.value = pitch.value * 10; previewButton.innerHTML = "Stop"; audioPlaying = true; bufferSource.onended = () => { previewButton.innerHTML = "Play"; audioPlaying = false; }; } function stop() { bufferSource.stop(); previewButton.innerHTML = "Play"; audioPlaying = false; } previewButton.onclick = () => { if (audioPlaying) { return stop(); } play(); }; // updates pitch.onchange = updateValue => { if (updateValue !== false) { valuePitch.value = Number(pitch.value); } ; if (!bufferSource) return; bufferSource.detune.value = pitch.value * 10; }; pitch.oninput = pitch.onchange; volume.onchange = updateValue => { gainNode.gain.value = volume.value; if (updateValue === false) return; valueVolume.value = Number(volume.value) * 100; }; volume.oninput = volume.onchange; // value changes valuePitch.onchange = () => { pitch.value = valuePitch.value; pitch.onchange(false); }; valuePitch.oninput = valuePitch.onchange; valueVolume.onchange = () => { volume.value = valueVolume.value / 100; volume.onchange(false); }; valueVolume.oninput = valueVolume.onchange; } handleFormatMenu() { const sampleRates = [3000, 4000, 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000]; let selectedSampleRate = this.props.sampleRate; let selectedForceRate = false; const menu = this.displayPopup("Format Sound", 580, 300, "Apply", "Cancel", () => { // accepted const edits = { sampleRate: selectedSampleRate }; if (selectedForceRate) { edits.sampleRateEnforced = selectedSampleRate; } this.handleEffect(edits); }); menu.textarea.style = "padding:8px;"; const labelSampleRate = document.createElement("p"); labelSampleRate.innerHTML = "Sample Rate"; labelSampleRate.style = "font-size:14px;"; menu.textarea.append(labelSampleRate); const inputSampleRate = document.createElement("select"); inputSampleRate.style = "width:50%;"; menu.textarea.append(inputSampleRate); for (const rate of sampleRates) { const option = document.createElement("option"); option.value = rate; option.innerHTML = "".concat(rate); inputSampleRate.append(option); } inputSampleRate.selectedIndex = sampleRates.indexOf(this.props.sampleRate); const labelSampleRateWarning = document.createElement("p"); labelSampleRateWarning.innerHTML = "Choosing a higher sample rate than the current rate will not make the existing audio higher quality."; labelSampleRateWarning.style = "font-size:13px;opacity:0.5;"; menu.textarea.append(labelSampleRateWarning); inputSampleRate.onchange = () => { selectedSampleRate = inputSampleRate.value; }; const labelResampleAudio = document.createElement("label"); labelResampleAudio.innerHTML = "Enforce New Sample Rate"; menu.textarea.append(labelResampleAudio); const inputResampleAudio = document.createElement("input"); inputResampleAudio.type = "checkbox"; inputResampleAudio.style = "margin-right:8px;"; labelResampleAudio.prepend(inputResampleAudio); const labelResampleAudioWarning = document.createElement("p"); labelResampleAudioWarning.innerHTML = "This changes the properties of the entire sound, " + "making lower sample rates use less file size. " + "However, audio added to this sound will only be able to use the new sample rate."; labelResampleAudioWarning.style = "font-size:13px;opacity:0.5;"; menu.textarea.append(labelResampleAudioWarning); const warning = document.createElement("p"); warning.innerHTML = "Applying these changes will cause the entire sound to change, not just the selected area."; warning.style = "font-size:14px;"; warning.style.display = "none"; menu.textarea.append(warning); inputResampleAudio.onchange = () => { selectedForceRate = inputResampleAudio.checked; if (selectedForceRate) { warning.style.display = ""; } else { warning.style.display = "none"; } }; } // TODO: use actual scratch-gui menus instead of this displayPopup(title, width, height, okname, denyname, accepted, cancelled) { const div = document.createElement("div"); document.body.append(div); div.classList.add(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default.a.base); const box = document.createElement("div"); div.append(box); box.classList.add(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default.a.promptBox); box.style.width = "".concat(width, "px"); box.style.height = "".concat(height, "px"); const header = document.createElement("div"); box.append(header); header.classList.add(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default.a.header); header.innerText = title; const textarea = document.createElement("div"); box.append(textarea); const buttonRow = document.createElement("div"); box.append(buttonRow); buttonRow.classList.add(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default.a.buttonRow); const deny = document.createElement("button"); buttonRow.append(deny); deny.classList.add(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default.a.promptButton); deny.classList.add(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default.a.deny); deny.innerHTML = denyname ? denyname : "Cancel"; const accept = document.createElement("button"); buttonRow.append(accept); accept.classList.add(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default.a.promptButton); accept.classList.add(_css_confirm_dialog_css__WEBPACK_IMPORTED_MODULE_11___default.a.accept); accept.innerHTML = okname ? okname : "OK"; accept.onclick = () => { div.remove(); if (accepted) accepted(); }; deny.onclick = () => { div.remove(); if (cancelled) cancelled(); }; return { popup: div, container: box, header: header, buttonRow: buttonRow, textarea: textarea, cancel: deny, ok: accept }; } render() { const { effectTypes } = _lib_audio_audio_effects_js__WEBPACK_IMPORTED_MODULE_7__["default"]; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_sound_editor_sound_editor_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { isStereo: this.props.isStereo, duration: this.props.duration, size: this.props.size, sampleRate: this.props.sampleRate, dataFormat: this.props.dataFormat, canPaste: this.state.copyBuffer !== null, canRedo: this.redoStack.length > 0, canUndo: this.undoStack.length > 0, chunkLevels: this.state.chunkLevels, name: this.props.name, playhead: this.state.playhead, setRef: this.setRef, tooLoud: this.tooLoud(), trimEnd: this.state.trimEnd, trimStart: this.state.trimStart, onChangeName: this.handleChangeName, onContainerClick: this.handleContainerClick, onCopy: this.handleCopy, onCopyToNew: this.handleCopyToNew, onDelete: this.handleDelete, onEcho: this.effectFactory(effectTypes.ECHO), onFadeIn: this.effectFactory(effectTypes.FADEIN), onFadeOut: this.effectFactory(effectTypes.FADEOUT), onFaster: this.effectFactory(effectTypes.FASTER), onLouder: this.effectFactory(effectTypes.LOUDER), onModifySound: this.handleModifyMenu, onFormatSound: this.handleFormatMenu, onMute: this.effectFactory(effectTypes.MUTE), onPaste: this.handlePaste, onPlay: this.handlePlay, onRedo: this.handleRedo, onReverse: this.effectFactory(effectTypes.REVERSE), onRobot: this.effectFactory(effectTypes.ROBOT), onLowPass: this.effectFactory(effectTypes.LOWPASS), onHighPass: this.effectFactory(effectTypes.HIGHPASS), onSetTrim: this.handleUpdateTrim, onSlower: this.effectFactory(effectTypes.SLOWER), onSofter: this.effectFactory(effectTypes.SOFTER), onStop: this.handleStopPlaying, onUndo: this.handleUndo }); } } SoundEditor.propTypes = { isStereo: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, duration: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, dataFormat: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired, sampleRate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, samples: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(Float32Array), soundId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, soundIndex: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired, waveformChunkSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }; const mapStateToProps = (state, _ref3) => { var _sprite$sounds$index, _audioBuffer$sampleRa; let { soundIndex } = _ref3; const sprite = state.scratchGui.vm.editingTarget.sprite; // Make sure the sound index doesn't go out of range. const index = Math.min(sprite.sounds.length - 1, Math.max(0, soundIndex)); const sound = (_sprite$sounds$index = sprite.sounds[index]) !== null && _sprite$sounds$index !== void 0 ? _sprite$sounds$index : {}; const audioBuffer = state.scratchGui.vm.getSoundBuffer(index); return { isStereo: (audioBuffer === null || audioBuffer === void 0 ? void 0 : audioBuffer.numberOfChannels) !== 1, duration: sound.sampleCount / sound.rate, size: sound.asset ? sound.asset.data.byteLength : 0, soundId: sound.soundId, dataFormat: sound.dataFormat, sampleRate: (_audioBuffer$sampleRa = audioBuffer === null || audioBuffer === void 0 ? void 0 : audioBuffer.sampleRate) !== null && _audioBuffer$sampleRa !== void 0 ? _audioBuffer$sampleRa : 3000, samples: audioBuffer ? audioBuffer.getChannelData(0) : new Float32Array(1), isFullScreen: state.scratchGui.mode.isFullScreen, name: sound.name, vm: state.scratchGui.vm, waveformChunkSize: state.scratchGui.addonUtil.soundEditorWaveformChunkSize }; }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_5__["connect"])(mapStateToProps)(SoundEditor)); /***/ }), /***/ "./src/containers/sound-library.jsx": /*!******************************************!*\ !*** ./src/containers/sound-library.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var scratch_audio__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! scratch-audio */ "./node_modules/scratch-audio/src/index.js"); /* harmony import */ var scratch_audio__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(scratch_audio__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _components_library_library_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/library/library.jsx */ "./src/components/library/library.jsx"); /* harmony import */ var _lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/libraries/tw-async-libraries */ "./src/lib/libraries/tw-async-libraries.js"); /* harmony import */ var _lib_libraries_sounds_lengths_json__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/libraries/sounds-lengths.json */ "./src/lib/libraries/sounds-lengths.json"); var _lib_libraries_sounds_lengths_json__WEBPACK_IMPORTED_MODULE_8___namespace = /*#__PURE__*/__webpack_require__.t(/*! ../lib/libraries/sounds-lengths.json */ "./src/lib/libraries/sounds-lengths.json", 1); /* harmony import */ var _lib_libraries_sound_tags__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/libraries/sound-tags */ "./src/lib/libraries/sound-tags.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); const _excluded = ["md5ext", "assetId"]; function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } // import soundIcon from '../components/library-item/lib-icon--sound.svg'; // import soundIconRtl from '../components/library-item/lib-icon--sound-rtl.svg'; // import loopIcon from '../components/library-item/lib-icon--loop.svg'; // import loopIconRtl from '../components/library-item/lib-icon--loop-rtl.svg'; // import themeIcon from '../components/library-item/lib-icon--theme.svg'; // import themeIconRtl from '../components/library-item/lib-icon--theme-rtl.svg'; const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ libraryTitle: { "id": "gui.soundLibrary.chooseASound", "defaultMessage": "Choose a Sound" } }); const PM_LIBRARY_API = "https://library.penguinmod.com/"; // @todo need to use this hack to avoid library using md5 for image const getSoundLibraryThumbnailData = (soundLibraryContent, isRtl) => soundLibraryContent.sort((a, b) => a.name.localeCompare(b.name)).map(sound => { // const icons = { // sound: isRtl ? soundIconRtl : soundIcon, // loop: isRtl ? loopIconRtl : loopIcon, // theme: isRtl ? themeIconRtl : themeIcon, // }; const isLoop = sound.tags ? sound.tags.includes('loops') : false; const isTheme = sound.tags ? sound.tags.includes('themes') : false; const { md5ext, assetId } = sound, otherData = _objectWithoutProperties(sound, _excluded); return _objectSpread({ _md5: md5ext, rawURL: sound.fromPenguinModLibrary ? "".concat(PM_LIBRARY_API, "files/sound_previews/").concat(sound.libraryFilePage.replace(/\//g, "_").replace(".mp3", ".png")) : "".concat(PM_LIBRARY_API, "files/scratch_sound_previews/").concat(assetId, ".png"), soundLength: sound.fromPenguinModLibrary ? _lib_libraries_sounds_lengths_json__WEBPACK_IMPORTED_MODULE_8__.penguinmod[sound.libraryFilePage] : _lib_libraries_sounds_lengths_json__WEBPACK_IMPORTED_MODULE_8__.scratch[assetId], soundType: isTheme ? "Theme" : isLoop ? "Loop" : "Sound" }, otherData); }); const getPenguinModSoundAsset = (soundObject, vm) => { return new Promise((resolve, reject) => { fetch("".concat(PM_LIBRARY_API, "files/").concat(soundObject.libraryFilePage)).then(r => r.arrayBuffer()).then(arrayBuffer => { const storage = vm.runtime.storage; const asset = new storage.Asset( // asset type Sound cant be used since it defaults to wav files { contentType: 'audio/mpeg', name: 'Sound', runtimeFormat: storage.DataFormat.MP3, immutable: true }, null, storage.DataFormat.MP3, new Uint8Array(arrayBuffer), true); resolve(asset); }).catch(reject); }); }; class SoundLibrary extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleItemSelected', 'handleItemMouseEnter', 'handleItemMouseLeave', 'onStop', 'setStopHandler']); /** * AudioEngine that will decode and play sounds for us. * @type {AudioEngine} */ this.audioEngine = null; /** * A promise for the sound queued to play as soon as it loads and * decodes. * @type {Promise} */ this.playingSoundPromise = null; /** * function to call when the sound ends */ this.handleStop = null; const soundLibrary = Object(_lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_7__["getSoundLibrary"])(); this.state = { data: Array.isArray(soundLibrary) ? getSoundLibraryThumbnailData(soundLibrary, this.props.isRtl) : soundLibrary }; } componentDidMount() { if (this.state.data.then) { this.state.data.then(data => { this.setState({ data: getSoundLibraryThumbnailData(data, this.props.isRtl) }); }); } this.audioEngine = new scratch_audio__WEBPACK_IMPORTED_MODULE_5___default.a(); this.playingSoundPromise = null; } componentWillUnmount() { this.stopPlayingSound(); } onStop() { if (this.playingSoundPromise !== null) { this.playingSoundPromise.then(soundPlayer => soundPlayer && soundPlayer.removeListener('stop', this.onStop)); if (this.handleStop) this.handleStop(); } } setStopHandler(func) { this.handleStop = func; } stopPlayingSound() { // Playback is queued, playing, or has played recently and finished // normally. if (this.playingSoundPromise !== null) { // Forcing sound to stop, so stop listening for sound ending: this.playingSoundPromise.then(soundPlayer => soundPlayer && soundPlayer.removeListener('stop', this.onStop)); // Queued playback began playing before this method. if (this.playingSoundPromise.isPlaying) { // Fetch the player from the promise and stop playback soon. this.playingSoundPromise.then(soundPlayer => { soundPlayer.stop(); }); } else { // Fetch the player from the promise and stop immediately. Since // the sound is not playing yet, this callback will be called // immediately after the sound starts playback. Stopping it // immediately will have the effect of no sound being played. this.playingSoundPromise.then(soundPlayer => { if (soundPlayer) soundPlayer.stopImmediately(); }); } // No further work should be performed on this promise and its // soundPlayer. this.playingSoundPromise = null; } } handleItemMouseEnter(soundItem) { const md5ext = soundItem._md5; const idParts = md5ext.split('.'); const md5 = idParts[0]; const vm = this.props.vm; // In case enter is called twice without a corresponding leave // inbetween, stop the last playback before queueing a new sound. this.stopPlayingSound(); // pm: check if we are using the PM object library instead of the normal one if (soundItem.fromPenguinModLibrary === true) { this.playingSoundPromise = getPenguinModSoundAsset(soundItem, vm).then(soundAsset => { if (soundAsset) { const sound = { md5: md5ext, name: soundItem.name, format: "mpeg", data: soundAsset.data }; return this.audioEngine.decodeSoundPlayer(sound).then(soundPlayer => { soundPlayer.connect(this.audioEngine); // Play the sound. Playing the sound will always come before a // paired stop if the sound must stop early. soundPlayer.play(); soundPlayer.addListener('stop', this.onStop); // Set that the sound is playing. This affects the type of stop // instruction given if the sound must stop early. if (this.playingSoundPromise !== null) { this.playingSoundPromise.isPlaying = true; } return soundPlayer; }); } }); return; } // Save the promise so code to stop the sound may queue the stop // instruction after the play instruction. this.playingSoundPromise = vm.runtime.storage.load(vm.runtime.storage.AssetType.Sound, md5).then(soundAsset => { if (soundAsset) { const sound = { md5: md5ext, name: soundItem.name, format: soundItem.format, data: soundAsset.data }; return this.audioEngine.decodeSoundPlayer(sound).then(soundPlayer => { soundPlayer.connect(this.audioEngine); // Play the sound. Playing the sound will always come before a // paired stop if the sound must stop early. soundPlayer.play(); soundPlayer.addListener('stop', this.onStop); // Set that the sound is playing. This affects the type of stop // instruction given if the sound must stop early. if (this.playingSoundPromise !== null) { this.playingSoundPromise.isPlaying = true; } return soundPlayer; }); } }); } handleItemMouseLeave() { this.stopPlayingSound(); } handleItemSelected(soundItem) { const vmSound = { format: soundItem.format, md5: soundItem._md5, rate: soundItem.rate, sampleCount: soundItem.sampleCount, name: soundItem.name }; if (soundItem.fromPenguinModLibrary) { vmSound.fromPenguinModLibrary = true; vmSound.libraryId = soundItem.libraryFilePage; } ; this.props.vm.addSound(vmSound).then(() => { this.props.onNewSound(); }); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_library_library_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { showPlayButton: true, data: this.state.data, id: "soundLibrary", actor: "SoundLibrary", header: "Sounds", setStopHandler: this.setStopHandler, tags: _lib_libraries_sound_tags__WEBPACK_IMPORTED_MODULE_9__["default"], title: this.props.intl.formatMessage(messages.libraryTitle), onItemMouseEnter: this.handleItemMouseEnter, onItemMouseLeave: this.handleItemMouseLeave, onItemSelected: this.handleItemSelected, onRequestClose: this.props.onRequestClose }); } } SoundLibrary.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired, isRtl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onNewSound: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; const mapStateToProps = state => ({ isRtl: state.locales.isRtl }); const mapDispatchToProps = () => ({}); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_10__["connect"])(mapStateToProps, mapDispatchToProps)(SoundLibrary))); /***/ }), /***/ "./src/containers/sound-tab.jsx": /*!**************************************!*\ !*** ./src/containers/sound-tab.jsx ***! \**************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _components_asset_panel_asset_panel_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/asset-panel/asset-panel.jsx */ "./src/components/asset-panel/asset-panel.jsx"); /* harmony import */ var _components_asset_panel_icon_sound_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/asset-panel/icon--sound.svg */ "./src/components/asset-panel/icon--sound.svg"); /* harmony import */ var _components_asset_panel_icon_sound_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_components_asset_panel_icon_sound_svg__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _components_asset_panel_icon_sound_rtl_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/asset-panel/icon--sound-rtl.svg */ "./src/components/asset-panel/icon--sound-rtl.svg"); /* harmony import */ var _components_asset_panel_icon_sound_rtl_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_components_asset_panel_icon_sound_rtl_svg__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _components_asset_panel_icon_add_sound_lib_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/asset-panel/icon--add-sound-lib.svg */ "./src/components/asset-panel/icon--add-sound-lib.svg"); /* harmony import */ var _components_asset_panel_icon_add_sound_lib_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_components_asset_panel_icon_add_sound_lib_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _components_asset_panel_icon_add_sound_record_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/asset-panel/icon--add-sound-record.svg */ "./src/components/asset-panel/icon--add-sound-record.svg"); /* harmony import */ var _components_asset_panel_icon_add_sound_record_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_components_asset_panel_icon_add_sound_record_svg__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _components_action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/action-menu/icon--file-upload.svg */ "./src/components/action-menu/icon--file-upload.svg"); /* harmony import */ var _components_action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_components_action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _components_action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../components/action-menu/icon--surprise.svg */ "./src/components/action-menu/icon--surprise.svg"); /* harmony import */ var _components_action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_components_action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _components_action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../components/action-menu/icon--search.svg */ "./src/components/action-menu/icon--search.svg"); /* harmony import */ var _components_action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_components_action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var _record_modal_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./record-modal.jsx */ "./src/containers/record-modal.jsx"); /* harmony import */ var _sound_editor_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./sound-editor.jsx */ "./src/containers/sound-editor.jsx"); /* harmony import */ var _sound_library_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./sound-library.jsx */ "./src/containers/sound-library.jsx"); /* harmony import */ var _components_tw_sound_editor_not_supported_sound_editor_not_supported_jsx__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../components/tw-sound-editor-not-supported/sound-editor-not-supported.jsx */ "./src/components/tw-sound-editor-not-supported/sound-editor-not-supported.jsx"); /* harmony import */ var _lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../lib/libraries/tw-async-libraries */ "./src/lib/libraries/tw-async-libraries.js"); /* harmony import */ var _lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/file-uploader.js */ "./src/lib/file-uploader.js"); /* harmony import */ var _lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../lib/error-boundary-hoc.jsx */ "./src/lib/error-boundary-hoc.jsx"); /* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../lib/drag-constants */ "./src/lib/drag-constants.js"); /* harmony import */ var _lib_download_blob__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../lib/download-blob */ "./src/lib/download-blob.js"); /* harmony import */ var _lib_audio_shared_audio_context_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../lib/audio/shared-audio-context.js */ "./src/lib/audio/shared-audio-context.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../reducers/editor-tab */ "./src/reducers/editor-tab.js"); /* harmony import */ var _reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../reducers/restore-deletion */ "./src/reducers/restore-deletion.js"); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js"); class SoundTab extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleSelectSound', 'handleDeleteSound', 'handleDuplicateSound', 'handleExportSound', 'handleNewSound', 'handleSurpriseSound', 'handleFileUploadClick', 'handleSoundUpload', 'handleDrop', 'setFileInput']); this.state = { selectedSoundIndex: 0 }; } componentWillReceiveProps(nextProps) { const { editingTarget, sprites, stage } = nextProps; const target = editingTarget && sprites[editingTarget] ? sprites[editingTarget] : stage; if (!target || !target.sounds) { return; } // If switching editing targets, reset the sound index if (this.props.editingTarget !== editingTarget) { this.setState({ selectedSoundIndex: 0 }); } else if (this.state.selectedSoundIndex > target.sounds.length - 1) { this.setState({ selectedSoundIndex: Math.max(target.sounds.length - 1, 0) }); } } handleSelectSound(soundIndex) { this.setState({ selectedSoundIndex: soundIndex }); } handleDeleteSound(soundIndex) { const restoreFun = this.props.vm.deleteSound(soundIndex); if (soundIndex >= this.state.selectedSoundIndex) { this.setState({ selectedSoundIndex: Math.max(0, soundIndex - 1) }); } this.props.dispatchUpdateRestore({ restoreFun, deletedItem: 'Sound' }); } handleExportSound(soundIndex) { const item = this.props.vm.editingTarget.sprite.sounds[soundIndex]; const blob = new Blob([item.asset.data], { type: item.asset.assetType.contentType }); Object(_lib_download_blob__WEBPACK_IMPORTED_MODULE_21__["default"])("".concat(item.name, ".").concat(item.asset.dataFormat), blob); } handleDuplicateSound(soundIndex) { this.props.vm.duplicateSound(soundIndex).then(() => { this.setState({ selectedSoundIndex: soundIndex + 1 }); }); } handleNewSound() { if (!this.props.vm.editingTarget) { return null; } const sprite = this.props.vm.editingTarget.sprite; const sounds = sprite.sounds ? sprite.sounds : []; this.setState({ selectedSoundIndex: Math.max(sounds.length - 1, 0) }); } async handleSurpriseSound() { const soundLibraryContent = await Object(_lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_17__["getSoundLibrary"])(); const soundItem = soundLibraryContent[Math.floor(Math.random() * soundLibraryContent.length)]; const vmSound = { format: soundItem.dataFormat, md5: soundItem.md5ext, rate: soundItem.rate, sampleCount: soundItem.sampleCount, name: soundItem.name }; if (soundItem.fromPenguinModLibrary) { vmSound.fromPenguinModLibrary = true; vmSound.libraryId = soundItem.libraryFilePage; } this.props.vm.addSound(vmSound).then(() => { this.handleNewSound(); }); } handleFileUploadClick() { this.fileInput.click(); } handleSoundUpload(e) { const storage = this.props.vm.runtime.storage; const targetId = this.props.vm.editingTarget.id; this.props.onShowImporting(); Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_18__["handleFileUpload"])(e.target, (buffer, fileType, fileName, fileIndex, fileCount) => { Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_18__["soundUpload"])(buffer, fileType, storage, newSound => { newSound.name = fileName; this.props.vm.addSound(newSound, targetId).then(() => { this.handleNewSound(); if (fileIndex === fileCount - 1) { this.props.onCloseImporting(); } }); }, this.props.onCloseImporting); }, this.props.onCloseImporting); } handleDrop(dropInfo) { if (dropInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_20__["default"].SOUND) { const sprite = this.props.vm.editingTarget.sprite; const activeSound = sprite.sounds[this.state.selectedSoundIndex]; this.props.vm.reorderSound(this.props.vm.editingTarget.id, dropInfo.index, dropInfo.newIndex); this.setState({ selectedSoundIndex: sprite.sounds.indexOf(activeSound) }); } else if (dropInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_20__["default"].BACKPACK_COSTUME) { this.props.onActivateCostumesTab(); this.props.vm.addCostume(dropInfo.payload.body, { name: dropInfo.payload.name }); } else if (dropInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_20__["default"].BACKPACK_SOUND) { this.props.vm.addSound({ md5: dropInfo.payload.body, name: dropInfo.payload.name }).then(this.handleNewSound); } } setFileInput(input) { this.fileInput = input; } render() { const { dispatchUpdateRestore, // eslint-disable-line no-unused-vars intl, isRtl, vm, onNewSoundFromLibraryClick, onNewSoundFromRecordingClick } = this.props; if (!vm.editingTarget) { return null; } const isSupported = !!(vm.runtime.audioEngine && new _lib_audio_shared_audio_context_js__WEBPACK_IMPORTED_MODULE_22__["default"]()); const sprite = vm.editingTarget.sprite; const sounds = sprite.sounds ? sprite.sounds.map(sound => ({ url: isRtl ? _components_asset_panel_icon_sound_rtl_svg__WEBPACK_IMPORTED_MODULE_7___default.a : _components_asset_panel_icon_sound_svg__WEBPACK_IMPORTED_MODULE_6___default.a, name: sound.name, details: (sound.sampleCount / sound.rate).toFixed(2), dragPayload: sound })) : []; const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ fileUploadSound: { "id": "gui.soundTab.fileUploadSound", "defaultMessage": "Upload Sound" }, surpriseSound: { "id": "gui.soundTab.surpriseSound", "defaultMessage": "Surprise" }, recordSound: { "id": "gui.soundTab.recordSound", "defaultMessage": "Record" }, addSound: { "id": "gui.soundTab.addSoundFromLibrary", "defaultMessage": "Choose a Sound" } }); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_asset_panel_asset_panel_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { buttons: isSupported ? [{ title: intl.formatMessage(messages.addSound), img: _components_asset_panel_icon_add_sound_lib_svg__WEBPACK_IMPORTED_MODULE_8___default.a, onClick: onNewSoundFromLibraryClick }, { title: intl.formatMessage(messages.fileUploadSound), img: _components_action_menu_icon_file_upload_svg__WEBPACK_IMPORTED_MODULE_10___default.a, onClick: this.handleFileUploadClick, fileAccept: '.wav, .mp3, .ogg, .flac, .aac, .m4a', fileChange: this.handleSoundUpload, fileInput: this.setFileInput, fileMultiple: true }, { title: intl.formatMessage(messages.surpriseSound), img: _components_action_menu_icon_surprise_svg__WEBPACK_IMPORTED_MODULE_11___default.a, onClick: this.handleSurpriseSound }, { title: intl.formatMessage(messages.recordSound), img: _components_asset_panel_icon_add_sound_record_svg__WEBPACK_IMPORTED_MODULE_9___default.a, onClick: onNewSoundFromRecordingClick }, { title: intl.formatMessage(messages.addSound), img: _components_action_menu_icon_search_svg__WEBPACK_IMPORTED_MODULE_12___default.a, onClick: onNewSoundFromLibraryClick }] : [], dragType: _lib_drag_constants__WEBPACK_IMPORTED_MODULE_20__["default"].SOUND, isRtl: isRtl, items: sounds, selectedItemIndex: this.state.selectedSoundIndex, onDeleteClick: this.handleDeleteSound, onDrop: this.handleDrop, onDuplicateClick: this.handleDuplicateSound, onExportClick: this.handleExportSound, onItemClick: this.handleSelectSound }, sprite.sounds && sprite.sounds[this.state.selectedSoundIndex] ? isSupported ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_sound_editor_jsx__WEBPACK_IMPORTED_MODULE_14__["default"], { soundIndex: this.state.selectedSoundIndex }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_tw_sound_editor_not_supported_sound_editor_not_supported_jsx__WEBPACK_IMPORTED_MODULE_16__["default"], null) : null, this.props.soundRecorderVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_record_modal_jsx__WEBPACK_IMPORTED_MODULE_13__["default"], { onNewSound: this.handleNewSound }) : null, this.props.soundLibraryVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_sound_library_jsx__WEBPACK_IMPORTED_MODULE_15__["default"], { vm: this.props.vm, onNewSound: this.handleNewSound, onRequestClose: this.props.onRequestCloseSoundLibrary }) : null); } } SoundTab.propTypes = { dispatchUpdateRestore: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, editingTarget: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, onActivateCostumesTab: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onCloseImporting: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onNewSoundFromLibraryClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onNewSoundFromRecordingClick: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onRequestCloseSoundLibrary: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onShowImporting: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, soundLibraryVisible: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, soundRecorderVisible: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, sprites: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ id: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ sounds: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired })) }) }), stage: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ sounds: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ name: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string.isRequired })) }), vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; const mapStateToProps = state => ({ editingTarget: state.scratchGui.targets.editingTarget, isRtl: state.locales.isRtl, sprites: state.scratchGui.targets.sprites, stage: state.scratchGui.targets.stage, soundLibraryVisible: state.scratchGui.modals.soundLibrary, soundRecorderVisible: state.scratchGui.modals.soundRecorder }); const mapDispatchToProps = dispatch => ({ onActivateCostumesTab: () => dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_25__["activateTab"])(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_25__["COSTUMES_TAB_INDEX"])), onNewSoundFromLibraryClick: e => { e.preventDefault(); dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_24__["openSoundLibrary"])()); }, onNewSoundFromRecordingClick: () => { dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_24__["openSoundRecorder"])()); }, onRequestCloseSoundLibrary: () => { dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_24__["closeSoundLibrary"])()); }, dispatchUpdateRestore: restoreState => { dispatch(Object(_reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_26__["setRestore"])(restoreState)); }, onCloseImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_27__["closeAlertWithId"])('importingAsset')), onShowImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_27__["showStandardAlert"])('importingAsset')) }); /* harmony default export */ __webpack_exports__["default"] = (Object(_lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_19__["default"])('Sound Tab')(Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_23__["connect"])(mapStateToProps, mapDispatchToProps)(SoundTab)))); /***/ }), /***/ "./src/containers/sprite-info.jsx": /*!****************************************!*\ !*** ./src/containers/sprite-info.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_sprite_info_sprite_info_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/sprite-info/sprite-info.jsx */ "./src/components/sprite-info/sprite-info.jsx"); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } class SpriteInfo extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleClickVisible', 'handleClickNotVisible', 'handlePressVisible', 'handlePressNotVisible']); } handleClickVisible(e) { e.preventDefault(); this.props.onChangeVisibility(true); } handleClickNotVisible(e) { e.preventDefault(); this.props.onChangeVisibility(false); } handlePressVisible(e) { if (e.key === ' ' || e.key === 'Enter') { e.preventDefault(); this.props.onChangeVisibility(true); } } handlePressNotVisible(e) { if (e.key === ' ' || e.key === 'Enter') { e.preventDefault(); this.props.onChangeVisibility(false); } } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_sprite_info_sprite_info_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], _extends({}, this.props, { onClickNotVisible: this.handleClickNotVisible, onClickVisible: this.handleClickVisible, onPressNotVisible: this.handlePressNotVisible, onPressVisible: this.handlePressVisible })); } } SpriteInfo.propTypes = _objectSpread(_objectSpread({}, _components_sprite_info_sprite_info_jsx__WEBPACK_IMPORTED_MODULE_3__["default"].propTypes), {}, { onChangeDirection: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeName: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeVisibility: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeX: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onChangeY: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, x: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, y: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }); /* harmony default export */ __webpack_exports__["default"] = (SpriteInfo); /***/ }), /***/ "./src/containers/sprite-library.jsx": /*!*******************************************!*\ !*** ./src/containers/sprite-library.jsx ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/libraries/tw-async-libraries */ "./src/lib/libraries/tw-async-libraries.js"); /* harmony import */ var _lib_randomize_sprite_position__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/randomize-sprite-position */ "./src/lib/randomize-sprite-position.js"); /* harmony import */ var _lib_libraries_sprite_tags__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/libraries/sprite-tags */ "./src/lib/libraries/sprite-tags.js"); /* harmony import */ var _components_library_library_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/library/library.jsx */ "./src/components/library/library.jsx"); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ libraryTitle: { "id": "gui.spriteLibrary.chooseASprite", "defaultMessage": "Choose a Sprite" } }); class SpriteLibrary extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleItemSelect']); } handleItemSelect(item) { // Randomize position of library sprite Object(_lib_randomize_sprite_position__WEBPACK_IMPORTED_MODULE_6__["default"])(item); this.props.vm.addSprite(JSON.stringify(item)).then(() => { this.props.onActivateBlocksTab(); }); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_library_library_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { data: Object(_lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_5__["getSpriteLibrary"])(), id: "spriteLibrary", header: "Sprites", tags: _lib_libraries_sprite_tags__WEBPACK_IMPORTED_MODULE_7__["default"], title: this.props.intl.formatMessage(messages.libraryTitle), onItemSelected: this.handleItemSelect, onRequestClose: this.props.onRequestClose }); } } SpriteLibrary.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired, onActivateBlocksTab: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(SpriteLibrary)); /***/ }), /***/ "./src/containers/sprite-selector-item.jsx": /*!*************************************************!*\ !*** ./src/containers/sprite-selector-item.jsx ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_hovered_target__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/hovered-target */ "./src/reducers/hovered-target.js"); /* harmony import */ var _reducers_asset_drag__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/asset-drag */ "./src/reducers/asset-drag.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _lib_get_costume_url__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/get-costume-url */ "./src/lib/get-costume-url.js"); /* harmony import */ var _lib_drag_recognizer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/drag-recognizer */ "./src/lib/drag-recognizer.js"); /* harmony import */ var _lib_touch_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/touch-utils */ "./src/lib/touch-utils.js"); /* harmony import */ var _components_sprite_selector_item_sprite_selector_item_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/sprite-selector-item/sprite-selector-item.jsx */ "./src/components/sprite-selector-item/sprite-selector-item.jsx"); const _excluded = ["asset", "id", "index", "onClick", "onDeleteButtonClick", "onDuplicateButtonClick", "onExportButtonClick", "onRenameButtonClick", "dragPayload", "receivedBlocks", "costumeURL", "vm"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class SpriteSelectorItem extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['getCostumeData', 'setRef', 'handleClick', 'handleDelete', 'handleDuplicate', 'handleExport', 'handleRename', 'handleMouseEnter', 'handleMouseLeave', 'handleMouseDown', 'handleDragEnd', 'handleDrag', 'handleTouchEnd']); this.dragRecognizer = new _lib_drag_recognizer__WEBPACK_IMPORTED_MODULE_8__["default"]({ onDrag: this.handleDrag, onDragEnd: this.handleDragEnd }); } componentDidMount() { document.addEventListener('touchend', this.handleTouchEnd); } componentWillUnmount() { document.removeEventListener('touchend', this.handleTouchEnd); this.dragRecognizer.reset(); } getCostumeData() { if (this.props.costumeURL) return this.props.costumeURL; if (!this.props.asset) return null; return Object(_lib_get_costume_url__WEBPACK_IMPORTED_MODULE_7__["default"])(this.props.asset); } handleDragEnd() { if (this.props.dragging) { this.props.onDrag({ img: null, currentOffset: null, dragging: false, dragType: null, index: null }); } setTimeout(() => { this.noClick = false; }); } handleDrag(currentOffset) { this.props.onDrag({ img: this.getCostumeData(), currentOffset: currentOffset, dragging: true, dragType: this.props.dragType, index: this.props.index, payload: this.props.dragPayload }); this.noClick = true; } handleTouchEnd(e) { const { x, y } = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_9__["getEventXY"])(e); const { top, left, bottom, right } = this.ref.getBoundingClientRect(); if (x >= left && x <= right && y >= top && y <= bottom) { this.handleMouseEnter(); } } handleMouseDown(e) { this.dragRecognizer.start(e); } handleClick(e) { e.preventDefault(); if (!this.noClick) { this.props.onClick(this.props.id); } } handleDelete(e) { e.stopPropagation(); // To prevent from bubbling back to handleClick this.props.onDeleteButtonClick(this.props.id); } handleDuplicate(e) { e.stopPropagation(); // To prevent from bubbling back to handleClick this.props.onDuplicateButtonClick(this.props.id); } handleExport(e) { e.stopPropagation(); this.props.onExportButtonClick(this.props.id); } handleRename(e) { e.stopPropagation(); this.props.onRenameButtonClick(this.props.id); } handleMouseLeave() { this.props.dispatchSetHoveredSprite(null); } handleMouseEnter() { this.props.dispatchSetHoveredSprite(this.props.id); } setRef(component) { // Access the DOM node using .elem because it is going through ContextMenuTrigger this.ref = component && component.elem; } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ asset, id, index, onClick, onDeleteButtonClick, onDuplicateButtonClick, onExportButtonClick, onRenameButtonClick, dragPayload, receivedBlocks, costumeURL, vm /* eslint-enable no-unused-vars */ } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_sprite_selector_item_sprite_selector_item_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], _extends({ componentRef: this.setRef, costumeURL: this.getCostumeData(), preventContextMenu: this.dragRecognizer.gestureInProgress(), onClick: this.handleClick, onDeleteButtonClick: onDeleteButtonClick ? this.handleDelete : null, onDuplicateButtonClick: onDuplicateButtonClick ? this.handleDuplicate : null, onExportButtonClick: onExportButtonClick ? this.handleExport : null, onRenameButtonClick: onRenameButtonClick ? this.handleRename : null, onMouseDown: this.handleMouseDown, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave }, props)); } } SpriteSelectorItem.propTypes = { // eslint-disable-next-line react/forbid-prop-types asset: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any, costumeURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, dispatchSetHoveredSprite: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, // eslint-disable-next-line react/forbid-prop-types dragPayload: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any, dragType: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, dragging: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, // eslint-disable-next-line react/forbid-prop-types id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any, index: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, // eslint-disable-next-line react/forbid-prop-types name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any, onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onDeleteButtonClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onRenameButtonClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onDrag: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onDuplicateButtonClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onExportButtonClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, receivedBlocks: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, selected: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_6___default.a).isRequired }; const mapStateToProps = (state, _ref) => { let { id } = _ref; return { dragging: state.scratchGui.assetDrag.dragging, receivedBlocks: state.scratchGui.hoveredTarget.receivedBlocks && state.scratchGui.hoveredTarget.sprite === id, vm: state.scratchGui.vm }; }; const mapDispatchToProps = dispatch => ({ dispatchSetHoveredSprite: spriteId => { dispatch(Object(_reducers_hovered_target__WEBPACK_IMPORTED_MODULE_4__["setHoveredSprite"])(spriteId)); }, onDrag: data => dispatch(Object(_reducers_asset_drag__WEBPACK_IMPORTED_MODULE_5__["updateAssetDrag"])(data)) }); const ConnectedComponent = Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(SpriteSelectorItem); /* harmony default export */ __webpack_exports__["default"] = (ConnectedComponent); /***/ }), /***/ "./src/containers/stage-header.jsx": /*!*****************************************!*\ !*** ./src/containers/stage-header.jsx ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/layout-constants */ "./src/lib/layout-constants.js"); /* harmony import */ var _reducers_stage_size__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/stage-size */ "./src/reducers/stage-size.js"); /* harmony import */ var _reducers_mode__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/mode */ "./src/reducers/mode.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _components_stage_header_stage_header_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/stage-header/stage-header.jsx */ "./src/components/stage-header/stage-header.jsx"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } // eslint-disable-next-line react/prefer-stateless-function class StageHeader extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleKeyPress']); } componentDidMount() { document.addEventListener('keydown', this.handleKeyPress); } componentWillUnmount() { document.removeEventListener('keydown', this.handleKeyPress); } handleKeyPress(event) { if (event.key === 'Escape' && this.props.isFullScreen) { this.props.onSetStageUnFull(false); } } render() { const props = _extends({}, this.props); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_stage_header_stage_header_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], _extends({}, props, { onKeyPress: this.handleKeyPress })); } } StageHeader.propTypes = { isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, // tw: update when dimensions or isWindowFullScreen changes isWindowFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, dimensions: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number), isPlayerOnly: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, onSetStageUnFull: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, onOpenSettings: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired, // tw: replace showBranding isEmbedded: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, stageSizeMode: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(Object.keys(_lib_layout_constants__WEBPACK_IMPORTED_MODULE_4__["STAGE_SIZE_MODES"])), vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_3___default.a).isRequired }; const mapStateToProps = state => ({ stageSizeMode: state.scratchGui.stageSize.stageSize, // tw: replace showBranding isEmbedded: state.scratchGui.mode.isEmbedded, isFullScreen: state.scratchGui.mode.isFullScreen, // tw: update when dimensions or isWindowFullScreen changes isWindowFullScreen: state.scratchGui.tw.isWindowFullScreen, dimensions: state.scratchGui.tw.dimensions, isPlayerOnly: state.scratchGui.mode.isPlayerOnly }); const mapDispatchToProps = dispatch => ({ onSetStageLarge: () => dispatch(Object(_reducers_stage_size__WEBPACK_IMPORTED_MODULE_5__["setStageSize"])(_lib_layout_constants__WEBPACK_IMPORTED_MODULE_4__["STAGE_SIZE_MODES"].large)), onSetStageSmall: () => dispatch(Object(_reducers_stage_size__WEBPACK_IMPORTED_MODULE_5__["setStageSize"])(_lib_layout_constants__WEBPACK_IMPORTED_MODULE_4__["STAGE_SIZE_MODES"].small)), onSetStageFull: () => dispatch(Object(_reducers_mode__WEBPACK_IMPORTED_MODULE_6__["setFullScreen"])(true)), onSetStageUnFull: () => dispatch(Object(_reducers_mode__WEBPACK_IMPORTED_MODULE_6__["setFullScreen"])(false)), onOpenSettings: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_7__["openSettingsModal"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_8__["connect"])(mapStateToProps, mapDispatchToProps)(StageHeader)); /***/ }), /***/ "./src/containers/stage-selector.jsx": /*!*******************************************!*\ !*** ./src/containers/stage-selector.jsx ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.omit */ "./node_modules/lodash.omit/index.js"); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_omit__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/editor-tab */ "./src/reducers/editor-tab.js"); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js"); /* harmony import */ var _reducers_hovered_target__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../reducers/hovered-target */ "./src/reducers/hovered-target.js"); /* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/drag-constants */ "./src/lib/drag-constants.js"); /* harmony import */ var _lib_drop_area_hoc_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../lib/drop-area-hoc.jsx */ "./src/lib/drop-area-hoc.jsx"); /* harmony import */ var _lib_throttled_property_hoc_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../lib/throttled-property-hoc.jsx */ "./src/lib/throttled-property-hoc.jsx"); /* harmony import */ var _lib_empty_assets__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../lib/empty-assets */ "./src/lib/empty-assets.js"); /* harmony import */ var _lib_shared_messages__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../lib/shared-messages */ "./src/lib/shared-messages.js"); /* harmony import */ var _lib_backpack_api__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/backpack-api */ "./src/lib/backpack-api.js"); /* harmony import */ var _lib_touch_utils__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/touch-utils */ "./src/lib/touch-utils.js"); /* harmony import */ var _components_stage_selector_stage_selector_jsx__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../components/stage-selector/stage-selector.jsx */ "./src/components/stage-selector/stage-selector.jsx"); /* harmony import */ var _lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/libraries/tw-async-libraries */ "./src/lib/libraries/tw-async-libraries.js"); /* harmony import */ var _lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../lib/file-uploader.js */ "./src/lib/file-uploader.js"); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const dragTypes = [_lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].COSTUME, _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].SOUND, _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_COSTUME, _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_SOUND, _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_CODE]; const DroppableThrottledStage = Object(_lib_drop_area_hoc_jsx__WEBPACK_IMPORTED_MODULE_11__["default"])(dragTypes)(Object(_lib_throttled_property_hoc_jsx__WEBPACK_IMPORTED_MODULE_12__["default"])('url', 500)(_components_stage_selector_stage_selector_jsx__WEBPACK_IMPORTED_MODULE_17__["default"])); class StageSelector extends react__WEBPACK_IMPORTED_MODULE_3___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleClick', 'handleNewBackdrop', 'handleSurpriseBackdrop', 'handleEmptyBackdrop', 'addBackdropFromLibraryItem', 'handleFileUploadClick', 'handleBackdropUpload', 'handleMouseEnter', 'handleMouseLeave', 'handleTouchEnd', 'handleDrop', 'setFileInput', 'setRef']); } componentDidMount() { document.addEventListener('touchend', this.handleTouchEnd); } componentWillUnmount() { document.removeEventListener('touchend', this.handleTouchEnd); } handleTouchEnd(e) { const { x, y } = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_16__["getEventXY"])(e); const { top, left, bottom, right } = this.ref.getBoundingClientRect(); if (x >= left && x <= right && y >= top && y <= bottom) { this.handleMouseEnter(); } } addBackdropFromLibraryItem(item) { let shouldActivateTab = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; const vmBackdrop = { name: item.name, md5: item.md5ext, rotationCenterX: item.rotationCenterX, rotationCenterY: item.rotationCenterY, bitmapResolution: item.bitmapResolution, skinId: null }; this.handleNewBackdrop(vmBackdrop, shouldActivateTab); } handleClick() { this.props.onSelect(this.props.id); } handleNewBackdrop(backdrops_) { let shouldActivateTab = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; const backdrops = Array.isArray(backdrops_) ? backdrops_ : [backdrops_]; return Promise.all(backdrops.map(backdrop => this.props.vm.addBackdrop(backdrop.md5, backdrop))).then(() => { if (shouldActivateTab) { return this.props.onActivateTab(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_7__["COSTUMES_TAB_INDEX"]); } }); } async handleSurpriseBackdrop(e) { e.stopPropagation(); // Prevent click from falling through to selecting stage. const backdropLibraryContent = await Object(_lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_18__["getBackdropLibrary"])(); // @todo should this not add a backdrop you already have? const item = backdropLibraryContent[Math.floor(Math.random() * backdropLibraryContent.length)]; this.addBackdropFromLibraryItem(item, false); } handleEmptyBackdrop(e) { e.stopPropagation(); // Prevent click from falling through to stage selector, select it manually below this.props.vm.setEditingTarget(this.props.id); this.handleNewBackdrop(Object(_lib_empty_assets__WEBPACK_IMPORTED_MODULE_13__["emptyCostume"])(this.props.intl.formatMessage(_lib_shared_messages__WEBPACK_IMPORTED_MODULE_14__["default"].backdrop, { index: 1 }))); } handleBackdropUpload(e) { const vm = this.props.vm; this.props.onShowImporting(); Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_19__["handleFileUpload"])(e.target, (buffer, fileType, fileName, fileIndex, fileCount) => { Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_19__["costumeUpload"])(buffer, fileType, vm, vmCostumes => { this.props.vm.setEditingTarget(this.props.id); vmCostumes.forEach((costume, i) => { costume.name = "".concat(fileName).concat(i ? i + 1 : ''); }); this.handleNewBackdrop(vmCostumes).then(() => { if (fileIndex === fileCount - 1) { this.props.onCloseImporting(); } }); }, this.props.onCloseImporting); }, this.props.onCloseImporting); } handleFileUploadClick(e) { e.stopPropagation(); // Prevent click from selecting the stage, that is handled manually in backdrop upload this.fileInput.click(); } handleMouseEnter() { this.props.dispatchSetHoveredSprite(this.props.id); } handleMouseLeave() { this.props.dispatchSetHoveredSprite(null); } handleDrop(dragInfo) { if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].COSTUME) { this.props.vm.shareCostumeToTarget(dragInfo.index, this.props.id); } else if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].SOUND) { this.props.vm.shareSoundToTarget(dragInfo.index, this.props.id); } else if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_COSTUME) { this.props.vm.addCostume(dragInfo.payload.body, { name: dragInfo.payload.name }, this.props.id); } else if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_SOUND) { this.props.vm.addSound({ md5: dragInfo.payload.body, name: dragInfo.payload.name }, this.props.id); } else if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_CODE) { Object(_lib_backpack_api__WEBPACK_IMPORTED_MODULE_15__["fetchCode"])(dragInfo.payload.bodyUrl).then(blocks => { this.props.vm.shareBlocksToTarget(blocks, this.props.id); this.props.vm.refreshWorkspace(); }); } } setFileInput(input) { this.fileInput = input; } setRef(ref) { this.ref = ref; } render() { const componentProps = lodash_omit__WEBPACK_IMPORTED_MODULE_1___default()(this.props, ['asset', 'dispatchSetHoveredSprite', 'id', 'intl', 'onActivateTab', 'onSelect', 'onShowImporting', 'onCloseImporting']); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(DroppableThrottledStage, _extends({ componentRef: this.setRef, fileInputRef: this.setFileInput, onBackdropFileUpload: this.handleBackdropUpload, onBackdropFileUploadClick: this.handleFileUploadClick, onClick: this.handleClick, onDrop: this.handleDrop, onEmptyBackdropClick: this.handleEmptyBackdrop, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onSurpriseBackdropClick: this.handleSurpriseBackdrop }, componentProps)); } } StageSelector.propTypes = _objectSpread(_objectSpread({}, _components_stage_selector_stage_selector_jsx__WEBPACK_IMPORTED_MODULE_17__["default"].propTypes), {}, { id: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"].isRequired, onCloseImporting: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onSelect: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onShowImporting: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func }); const mapStateToProps = (state, _ref) => { let { asset, id } = _ref; return { url: asset && asset.encodeDataURI(), vm: state.scratchGui.vm, receivedBlocks: state.scratchGui.hoveredTarget.receivedBlocks && state.scratchGui.hoveredTarget.sprite === id, raised: state.scratchGui.blockDrag }; }; const mapDispatchToProps = dispatch => ({ onNewBackdropClick: e => { e.stopPropagation(); dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_6__["openBackdropLibrary"])()); }, onActivateTab: tabIndex => { dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_7__["activateTab"])(tabIndex)); }, dispatchSetHoveredSprite: spriteId => { dispatch(Object(_reducers_hovered_target__WEBPACK_IMPORTED_MODULE_9__["setHoveredSprite"])(spriteId)); }, onCloseImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_8__["closeAlertWithId"])('importingAsset')), onShowImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_8__["showStandardAlert"])('importingAsset')) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_5__["connect"])(mapStateToProps, mapDispatchToProps)(StageSelector))); /***/ }), /***/ "./src/containers/stage-wrapper.jsx": /*!******************************************!*\ !*** ./src/containers/stage-wrapper.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/layout-constants.js */ "./src/lib/layout-constants.js"); /* harmony import */ var _components_stage_wrapper_stage_wrapper_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/stage-wrapper/stage-wrapper.jsx */ "./src/components/stage-wrapper/stage-wrapper.jsx"); const StageWrapper = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_stage_wrapper_stage_wrapper_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], props); StageWrapper.propTypes = { isRendererSupported: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, stageSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOf(Object.keys(_lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_3__["STAGE_DISPLAY_SIZES"])).isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_2___default.a).isRequired }; /* harmony default export */ __webpack_exports__["default"] = (StageWrapper); /***/ }), /***/ "./src/containers/stage.jsx": /*!**********************************!*\ !*** ./src/containers/stage.jsx ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var scratch_render__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! scratch-render */ "./node_modules/scratch-render/src/index.js"); /* harmony import */ var scratch_render__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(scratch_render__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/layout-constants */ "./src/lib/layout-constants.js"); /* harmony import */ var _lib_touch_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/touch-utils */ "./src/lib/touch-utils.js"); /* harmony import */ var _lib_video_video_provider__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/video/video-provider */ "./src/lib/video/video-provider.js"); /* harmony import */ var scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! scratch-svg-renderer */ "./node_modules/scratch-svg-renderer/src/index.js"); /* harmony import */ var scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _components_stage_stage_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/stage/stage.jsx */ "./src/components/stage/stage.jsx"); /* harmony import */ var _reducers_color_picker__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../reducers/color-picker */ "./src/reducers/color-picker.js"); /* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js"); const _excluded = ["vm", "onActivateColorPicker", "disableEditingTargetChange"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } const colorPickerRadius = 20; const dragThreshold = 3; // Same as the block drag threshold class Stage extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['attachMouseEvents', 'cancelMouseDownTimeout', 'detachMouseEvents', 'handleDoubleClick', 'handleQuestionAnswered', 'onMouseUp', 'onMouseMove', 'onMouseDown', 'onTouchUp', 'onTouchMove', 'onTouchDown', 'onStartDrag', 'onStopDrag', 'onWheel', 'onContextMenu', 'updateRect', 'questionListener', 'setDragCanvas', 'clearDragCanvas', 'drawDragCanvas', 'positionDragCanvas', 'elementListToArray', 'correctTouchPosition']); this.state = { mouseDownTimeoutId: null, mouseDownPosition: null, isDragging: false, dragOffset: null, dragId: null, colorInfo: null, question: null }; if (this.props.vm.renderer) { this.renderer = this.props.vm.renderer; this.canvas = this.renderer.canvas; } else { this.canvas = document.createElement('canvas'); this.renderer = new scratch_render__WEBPACK_IMPORTED_MODULE_3___default.a(this.canvas, -this.props.customStageSize.width / 2, this.props.customStageSize.width / 2, -this.props.customStageSize.height / 2, this.props.customStageSize.height / 2); this.props.vm.setStageSize(this.props.customStageSize.width, this.props.customStageSize.height); this.props.vm.attachRenderer(this.renderer); // Only attach a video provider once because it is stateful this.props.vm.setVideoProvider(new _lib_video_video_provider__WEBPACK_IMPORTED_MODULE_8__["default"]()); // Calling draw a single time before any project is loaded just makes // the canvas white instead of solid black–needed because it is not // possible to use CSS to style the canvas to have a different // default color this.props.vm.renderer.draw(); // tw: handle changes to high quality pen this.props.vm.renderer.on('UseHighQualityRenderChanged', this.props.onHighQualityPenChanged); } this.props.vm.attachV2BitmapAdapter(new scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_9__["BitmapAdapter"]()); } componentDidMount() { this.attachRectEvents(); this.attachMouseEvents(this.canvas); this.updateRect(); this.props.vm.runtime.addListener('QUESTION', this.questionListener); } shouldComponentUpdate(nextProps, nextState) { return this.props.stageSize !== nextProps.stageSize || this.props.isColorPicking !== nextProps.isColorPicking || this.state.colorInfo !== nextState.colorInfo || this.props.isFullScreen !== nextProps.isFullScreen || this.props.isWindowFullScreen !== nextProps.isWindowFullScreen || this.props.dimensions !== nextProps.dimensions || this.state.question !== nextState.question || this.props.micIndicator !== nextProps.micIndicator || this.props.isStarted !== nextProps.isStarted || this.props.customStageSize !== nextProps.customStageSize; } componentDidUpdate(prevProps) { if (this.props.isColorPicking && !prevProps.isColorPicking) { this.startColorPickingLoop(); } else if (!this.props.isColorPicking && prevProps.isColorPicking) { this.stopColorPickingLoop(); } this.updateRect(); this.renderer.resize(this.rect.width, this.rect.height); } componentWillUnmount() { this.detachMouseEvents(this.canvas); this.detachRectEvents(); this.stopColorPickingLoop(); this.props.vm.runtime.removeListener('QUESTION', this.questionListener); } questionListener(question) { this.setState({ question: question }); } handleQuestionAnswered(answer) { this.setState({ question: null }, () => { this.props.vm.runtime.emit('ANSWER', answer); }); } startColorPickingLoop() { const callback = () => { this.animationFrameId = requestAnimationFrame(callback); if (typeof this.pickX === 'number') { this.setState({ colorInfo: this.getColorInfo(this.pickX, this.pickY) }); } }; this.animationFrameId = requestAnimationFrame(callback); } stopColorPickingLoop() { cancelAnimationFrame(this.animationFrameId); } attachMouseEvents(canvas) { document.addEventListener('mousemove', this.onMouseMove); document.addEventListener('mouseup', this.onMouseUp); document.addEventListener('touchmove', this.onTouchMove); document.addEventListener('touchend', this.onTouchUp); canvas.addEventListener('mousedown', this.onMouseDown); canvas.addEventListener('touchstart', this.onTouchDown); canvas.addEventListener('wheel', this.onWheel); canvas.addEventListener('contextmenu', this.onContextMenu); } detachMouseEvents(canvas) { document.removeEventListener('mousemove', this.onMouseMove); document.removeEventListener('mouseup', this.onMouseUp); document.removeEventListener('touchmove', this.onTouchMove); document.removeEventListener('touchend', this.onTouchUp); canvas.removeEventListener('mousedown', this.onMouseDown); canvas.removeEventListener('touchstart', this.onTouchDown); canvas.removeEventListener('wheel', this.onWheel); canvas.removeEventListener('contextmenu', this.onContextMenu); } attachRectEvents() { window.addEventListener('resize', this.updateRect); window.addEventListener('scroll', this.updateRect); } detachRectEvents() { window.removeEventListener('resize', this.updateRect); window.removeEventListener('scroll', this.updateRect); } updateRect() { this.rect = this.canvas.getBoundingClientRect(); } elementListToArray(list) { const array = []; for (let i = 0; i < list.length; i++) { const element = list.item(i); array.push(element); } return array; } getScratchCoords(x, y) { const nativeSize = this.renderer.getNativeSize(); return [nativeSize[0] / this.rect.width * (x - this.rect.width / 2), nativeSize[1] / this.rect.height * (y - this.rect.height / 2)]; } getColorInfo(x, y) { return _objectSpread({ x: x, y: y }, this.renderer.extractColor(x, y, colorPickerRadius)); } handleDoubleClick(e) { // tw: Disable editing target changing in certain circumstances to avoid lag if (this.props.disableEditingTargetChange) { return; } const { x, y } = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_7__["getEventXY"])(e); // Set editing target from cursor position, if clicking on a sprite. const mousePosition = [x - this.rect.left, y - this.rect.top]; const drawableId = this.renderer.pick(mousePosition[0], mousePosition[1]); if (drawableId === null) return; const targetId = this.props.vm.getTargetIdForDrawableId(drawableId); if (targetId === null) return; this.props.vm.setEditingTarget(targetId); } onMouseMove(e) { const { x, y } = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_7__["getEventXY"])(e); const mousePosition = [x - this.rect.left, y - this.rect.top]; if (this.props.isColorPicking) { // Set the pickX/Y for the color picker loop to pick up this.pickX = mousePosition[0]; this.pickY = mousePosition[1]; } if (this.state.mouseDown && !this.state.isDragging) { const distanceFromMouseDown = Math.sqrt(Math.pow(mousePosition[0] - this.state.mouseDownPosition[0], 2) + Math.pow(mousePosition[1] - this.state.mouseDownPosition[1], 2)); if (distanceFromMouseDown > dragThreshold) { this.cancelMouseDownTimeout(); this.onStartDrag(...this.state.mouseDownPosition); } } if (this.state.mouseDown && this.state.isDragging) { // Editor drag style only updates the drag canvas, does full update at the end of drag // Non-editor drag style just updates the sprite continuously. if (this.props.useEditorDragStyle) { this.positionDragCanvas(mousePosition[0], mousePosition[1]); } else { const spritePosition = this.getScratchCoords(mousePosition[0], mousePosition[1]); this.props.vm.postSpriteInfo({ x: spritePosition[0] + this.state.dragOffset[0], y: -(spritePosition[1] + this.state.dragOffset[1]), force: true }); } } const coordinates = { x: mousePosition[0], y: mousePosition[1], canvasWidth: this.rect.width, canvasHeight: this.rect.height }; this.props.vm.postIOData('mouse', coordinates); } onMouseUp(e) { const { x, y } = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_7__["getEventXY"])(e); const mousePosition = [x - this.rect.left, y - this.rect.top]; this.cancelMouseDownTimeout(); this.setState({ mouseDown: false, mouseDownPosition: null }); const data = { isDown: false, button: e.button, x: x - this.rect.left, y: y - this.rect.top, canvasWidth: this.rect.width, canvasHeight: this.rect.height, wasDragged: this.state.isDragging }; if (this.state.isDragging) { this.onStopDrag(mousePosition[0], mousePosition[1]); } this.props.vm.postIOData('mouse', data); if (this.props.isColorPicking && mousePosition[0] > 0 && mousePosition[0] < this.rect.width && mousePosition[1] > 0 && mousePosition[1] < this.rect.height) { const { r, g, b } = this.state.colorInfo.color; const componentToString = c => { const hex = c.toString(16); return hex.length === 1 ? "0".concat(hex) : hex; }; const colorString = "#".concat(componentToString(r)).concat(componentToString(g)).concat(componentToString(b)); this.props.onDeactivateColorPicker(colorString); this.setState({ colorInfo: null }); this.pickX = null; this.pickY = null; } } correctTouchPosition(touch) { const x = touch.clientX; const y = touch.clientY; const mousePosition = [x - this.rect.left, y - this.rect.top]; touch.x = mousePosition[0]; touch.y = mousePosition[1]; return touch; } onTouchDown(e) { this.updateRect(); const data = { isDown: true, canvasWidth: this.rect.width, canvasHeight: this.rect.height, changedTouches: this.elementListToArray(e.changedTouches).map(this.correctTouchPosition), targetTouches: this.elementListToArray(e.targetTouches).map(this.correctTouchPosition), touches: this.elementListToArray(e.touches).map(this.correctTouchPosition) }; this.props.vm.postIOData('touch', data); this.onMouseDown(e); } onTouchUp(e) { const data = { isDown: false, canvasWidth: this.rect.width, canvasHeight: this.rect.height, changedTouches: this.elementListToArray(e.changedTouches).map(this.correctTouchPosition), targetTouches: this.elementListToArray(e.targetTouches).map(this.correctTouchPosition), touches: this.elementListToArray(e.touches).map(this.correctTouchPosition) }; this.props.vm.postIOData('touch', data); this.onMouseUp(e); } onTouchMove(e) { const coordinates = { canvasWidth: this.rect.width, canvasHeight: this.rect.height, changedTouches: this.elementListToArray(e.changedTouches).map(this.correctTouchPosition), targetTouches: this.elementListToArray(e.targetTouches).map(this.correctTouchPosition), touches: this.elementListToArray(e.touches).map(this.correctTouchPosition) }; this.props.vm.postIOData('touch', coordinates); this.onMouseMove(e); } onMouseDown(e) { this.updateRect(); const { x, y } = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_7__["getEventXY"])(e); const mousePosition = [x - this.rect.left, y - this.rect.top]; if (this.props.isColorPicking) { // Set the pickX/Y for the color picker loop to pick up this.pickX = mousePosition[0]; this.pickY = mousePosition[1]; // Immediately update the color picker info this.setState({ colorInfo: this.getColorInfo(this.pickX, this.pickY) }); } else { const isTouchEvent = window.TouchEvent && e instanceof TouchEvent; if (e.button === 0 || isTouchEvent) { this.setState({ mouseDown: true, mouseDownPosition: mousePosition, mouseDownTimeoutId: setTimeout(this.onStartDrag.bind(this, mousePosition[0], mousePosition[1]), 400) }); } const data = { isDown: true, button: e.button, x: mousePosition[0], y: mousePosition[1], canvasWidth: this.rect.width, canvasHeight: this.rect.height }; this.props.vm.postIOData('mouse', data); if (isTouchEvent && e.preventDefault) { // Prevent default to prevent touch from dragging page e.preventDefault(); // But we do want any active input to be blurred if (document.activeElement && document.activeElement.blur) { document.activeElement.blur(); } } } } onWheel(e) { const data = { deltaX: e.deltaX, deltaY: e.deltaY }; this.props.vm.postIOData('mouseWheel', data); } onContextMenu(e) { if (this.props.vm.runtime.ioDevices.mouse.usesRightClickDown) { e.preventDefault(); } } cancelMouseDownTimeout() { if (this.state.mouseDownTimeoutId !== null) { clearTimeout(this.state.mouseDownTimeoutId); } this.setState({ mouseDownTimeoutId: null }); } /** * Initialize the position of the "dragged sprite" canvas * @param {DrawableExtraction} drawableData The data returned from renderer.extractDrawableScreenSpace * @param {number} x The x position of the initial drag event * @param {number} y The y position of the initial drag event */ drawDragCanvas(drawableData, x, y) { const { imageData, x: boundsX, y: boundsY, width: boundsWidth, height: boundsHeight } = drawableData; this.dragCanvas.width = imageData.width; this.dragCanvas.height = imageData.height; // On high-DPI devices, the canvas size in layout-pixels is not equal to the size of the extracted data. this.dragCanvas.style.width = "".concat(boundsWidth, "px"); this.dragCanvas.style.height = "".concat(boundsHeight, "px"); this.dragCanvas.getContext('2d').putImageData(imageData, 0, 0); // Position so that pick location is at (0, 0) so that positionDragCanvas() // can use translation to move to mouse position smoothly. this.dragCanvas.style.left = "".concat(boundsX - x, "px"); this.dragCanvas.style.top = "".concat(boundsY - y, "px"); this.dragCanvas.style.display = 'block'; } clearDragCanvas() { this.dragCanvas.width = this.dragCanvas.height = 0; this.dragCanvas.style.display = 'none'; } positionDragCanvas(mouseX, mouseY) { // mouseX/Y are relative to stage top/left, and dragCanvas is already // positioned so that the pick location is at (0,0). this.dragCanvas.style.transform = "translate(".concat(mouseX, "px, ").concat(mouseY, "px)"); } onStartDrag(x, y) { if (this.state.dragId) return; const drawableId = this.renderer.pick(x, y); if (drawableId === null) return; const targetId = this.props.vm.getTargetIdForDrawableId(drawableId); if (targetId === null) return; const target = this.props.vm.runtime.getTargetById(targetId); // Do not start drag unless in editor drag mode or target is draggable if (!(this.props.useEditorDragStyle || target.draggable)) return; // Dragging always brings the target to the front target.goToFront(); const [scratchMouseX, scratchMouseY] = this.getScratchCoords(x, y); const offsetX = target.x - scratchMouseX; const offsetY = -(target.y + scratchMouseY); this.props.vm.startDrag(targetId); this.setState({ isDragging: true, dragId: targetId, dragOffset: [offsetX, offsetY] }); if (this.props.useEditorDragStyle) { // Extract the drawable art const drawableData = this.renderer.extractDrawableScreenSpace(drawableId); this.drawDragCanvas(drawableData, x, y); this.positionDragCanvas(x, y); this.props.vm.postSpriteInfo({ visible: false }); this.props.vm.renderer.draw(); } } onStopDrag(mouseX, mouseY) { const dragId = this.state.dragId; const commonStopDragActions = () => { this.props.vm.stopDrag(dragId); this.setState({ isDragging: false, dragOffset: null, dragId: null }); }; if (this.props.useEditorDragStyle) { // Need to sequence these actions to prevent flickering. const spriteInfo = { visible: true }; // First update the sprite position if dropped in the stage. if (mouseX > 0 && mouseX < this.rect.width && mouseY > 0 && mouseY < this.rect.height) { const spritePosition = this.getScratchCoords(mouseX, mouseY); spriteInfo.x = spritePosition[0] + this.state.dragOffset[0]; spriteInfo.y = -(spritePosition[1] + this.state.dragOffset[1]); spriteInfo.force = true; } this.props.vm.postSpriteInfo(spriteInfo); // Then clear the dragging canvas and stop drag (potentially slow if selecting sprite) this.clearDragCanvas(); commonStopDragActions(); this.props.vm.renderer.draw(); } else { commonStopDragActions(); } } setDragCanvas(canvas) { this.dragCanvas = canvas; } render() { var _this$renderer; const _this$props = this.props, { vm, // eslint-disable-line no-unused-vars onActivateColorPicker, // eslint-disable-line no-unused-vars disableEditingTargetChange // eslint-disable-line no-unused-vars } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_stage_stage_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], _extends({ canvas: this.canvas, overlay: (_this$renderer = this.renderer) === null || _this$renderer === void 0 ? void 0 : _this$renderer.overlayContainer, colorInfo: this.state.colorInfo, dragRef: this.setDragCanvas, question: this.state.question, onDoubleClick: this.handleDoubleClick, onQuestionAnswered: this.handleQuestionAnswered }, props)); } } Stage.propTypes = { onHighQualityPenChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, highQualityPen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, customStageSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }), disableEditingTargetChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isColorPicking: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, isPlayerOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isWindowFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, dimensions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number), isStarted: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, micIndicator: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, onActivateColorPicker: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onDeactivateColorPicker: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, stageSize: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(Object.keys(_lib_layout_constants__WEBPACK_IMPORTED_MODULE_6__["STAGE_DISPLAY_SIZES"])).isRequired, useEditorDragStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; Stage.defaultProps = { useEditorDragStyle: true }; const mapStateToProps = state => ({ highQualityPen: state.scratchGui.tw.highQualityPen, customStageSize: state.scratchGui.customStageSize, disableEditingTargetChange: state.scratchGui.mode.isFullScreen || state.scratchGui.mode.isEmbedded || state.scratchGui.mode.isPlayerOnly, isColorPicking: state.scratchGui.colorPicker.active, isFullScreen: state.scratchGui.mode.isFullScreen || state.scratchGui.mode.isEmbedded, isPlayerOnly: state.scratchGui.mode.isPlayerOnly, isWindowFullScreen: state.scratchGui.tw.isWindowFullScreen, dimensions: state.scratchGui.tw.dimensions, isStarted: state.scratchGui.vmStatus.started, micIndicator: state.scratchGui.micIndicator, // Do not use editor drag style in fullscreen or player mode. useEditorDragStyle: !(state.scratchGui.mode.isFullScreen || state.scratchGui.mode.isPlayerOnly) }); const mapDispatchToProps = dispatch => ({ // tw: handler for syncing high quality pen option changes onHighQualityPenChanged: enabled => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_12__["setHighQualityPenState"])(enabled)), onActivateColorPicker: () => dispatch(Object(_reducers_color_picker__WEBPACK_IMPORTED_MODULE_11__["activateColorPicker"])()), onDeactivateColorPicker: color => dispatch(Object(_reducers_color_picker__WEBPACK_IMPORTED_MODULE_11__["deactivateColorPicker"])(color)) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_5__["connect"])(mapStateToProps, mapDispatchToProps)(Stage)); /***/ }), /***/ "./src/containers/tag-button.jsx": /*!***************************************!*\ !*** ./src/containers/tag-button.jsx ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_tag_button_tag_button_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/tag-button/tag-button.jsx */ "./src/components/tag-button/tag-button.jsx"); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } class TagButton extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleClick']); } handleClick() { this.props.onClick(this.props.tag); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_tag_button_tag_button_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], _extends({}, this.props, { onClick: this.handleClick })); } } TagButton.propTypes = _objectSpread(_objectSpread({}, _components_tag_button_tag_button_jsx__WEBPACK_IMPORTED_MODULE_3__["default"].propTypes), {}, { onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }); /* harmony default export */ __webpack_exports__["default"] = (TagButton); /***/ }), /***/ "./src/containers/tag-checkbox.jsx": /*!*****************************************!*\ !*** ./src/containers/tag-checkbox.jsx ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _components_tag_checkbox_tag_button_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/tag-checkbox/tag-button.jsx */ "./src/components/tag-checkbox/tag-button.jsx"); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } class TagCheckbox extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleClick']); } handleClick(event) { this.props.onClick(this.props.tag, event.target.checked); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_tag_checkbox_tag_button_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], _extends({}, this.props, { onClick: this.handleClick })); } } TagCheckbox.propTypes = _objectSpread(_objectSpread({}, _components_tag_checkbox_tag_button_jsx__WEBPACK_IMPORTED_MODULE_3__["default"].propTypes), {}, { onClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }); /* harmony default export */ __webpack_exports__["default"] = (TagCheckbox); /***/ }), /***/ "./src/containers/target-highlight.jsx": /*!*********************************************!*\ !*** ./src/containers/target-highlight.jsx ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); class TargetHighlight extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['getPageCoords']); } // Transform scratch coordinates into page coordinates getPageCoords(x, y) { const { stageWidth, stageHeight, vm } = this.props; // The renderers "nativeSize" is the [width, height] of the stage in scratch-units const nativeSize = vm.renderer.getNativeSize(); return [stageWidth / nativeSize[0] * x + stageWidth / 2, -(stageHeight / nativeSize[1] * y) + stageHeight / 2]; } render() { const { className, highlightedTargetId, highlightedTargetTime, vm } = this.props; if (!(highlightedTargetId && vm && vm.renderer && vm.runtime.getTargetById(highlightedTargetId))) return null; const target = vm.runtime.getTargetById(highlightedTargetId); const bounds = vm.renderer.getBounds(target.drawableID); const [left, top] = this.getPageCoords(bounds.left, bounds.top); const [right, bottom] = this.getPageCoords(bounds.right, bounds.bottom); const pad = 2; // px return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: className // Ensure new DOM element each update to restart animation , key: highlightedTargetTime, style: { position: 'absolute', top: "".concat(top - pad, "px"), left: "".concat(left - pad, "px"), width: "".concat(right - left + 2 * pad, "px"), height: "".concat(bottom - top + 2 * pad, "px") } }); } } TargetHighlight.propTypes = { className: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, highlightedTargetId: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, highlightedTargetTime: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, stageHeight: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, stageWidth: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number, vm: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a) }; const mapStateToProps = state => ({ highlightedTargetTime: state.scratchGui.targets.highlightedTargetTime, highlightedTargetId: state.scratchGui.targets.highlightedTargetId, vm: state.scratchGui.vm }); const mapDispatchToProps = () => ({}); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(TargetHighlight)); /***/ }), /***/ "./src/containers/target-pane.jsx": /*!****************************************!*\ !*** ./src/containers/target-pane.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/editor-tab */ "./src/reducers/editor-tab.js"); /* harmony import */ var _reducers_hovered_target__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/hovered-target */ "./src/reducers/hovered-target.js"); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js"); /* harmony import */ var _reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../reducers/restore-deletion */ "./src/reducers/restore-deletion.js"); /* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/drag-constants */ "./src/lib/drag-constants.js"); /* harmony import */ var _components_target_pane_target_pane_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../components/target-pane/target-pane.jsx */ "./src/components/target-pane/target-pane.jsx"); /* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../lib/layout-constants */ "./src/lib/layout-constants.js"); /* harmony import */ var _lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../lib/libraries/tw-async-libraries */ "./src/lib/libraries/tw-async-libraries.js"); /* harmony import */ var _lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../lib/file-uploader.js */ "./src/lib/file-uploader.js"); /* harmony import */ var _lib_shared_messages__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/shared-messages */ "./src/lib/shared-messages.js"); /* harmony import */ var _lib_empty_assets__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/empty-assets */ "./src/lib/empty-assets.js"); /* harmony import */ var _reducers_targets__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../reducers/targets */ "./src/reducers/targets.js"); /* harmony import */ var _lib_backpack_api__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/backpack-api */ "./src/lib/backpack-api.js"); /* harmony import */ var _lib_randomize_sprite_position__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../lib/randomize-sprite-position */ "./src/lib/randomize-sprite-position.js"); /* harmony import */ var _lib_download_blob__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../lib/download-blob */ "./src/lib/download-blob.js"); /* harmony import */ var _lib_log__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../lib/log */ "./src/lib/log.js"); const _excluded = ["dispatchUpdateRestore", "isRtl", "onActivateTab", "onCloseImporting", "onHighlightTarget", "onReceivedBlocks", "onShowImporting", "workspaceMetrics"]; function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } class TargetPane extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleActivateBlocksTab', 'handleBlockDragEnd', 'handleChangeSpriteRotationStyle', 'handleChangeSpriteDirection', 'handleChangeSpriteName', 'handleChangeSpriteSize', 'handleChangeSpriteVisibility', 'handleChangeSpriteX', 'handleChangeSpriteY', 'handleDeleteSprite', 'handleDrop', 'handleDuplicateSprite', 'handleExportSprite', 'handleNewSprite', 'handleSelectSprite', 'handleSurpriseSpriteClick', 'handlePaintSpriteClick', 'handleFileUploadClick', 'handleSpriteUpload', 'setFileInput']); } componentDidMount() { this.props.vm.addListener('BLOCK_DRAG_END', this.handleBlockDragEnd); } componentWillUnmount() { this.props.vm.removeListener('BLOCK_DRAG_END', this.handleBlockDragEnd); } handleChangeSpriteDirection(direction) { this.props.vm.postSpriteInfo({ direction }); } handleChangeSpriteRotationStyle(rotationStyle) { this.props.vm.postSpriteInfo({ rotationStyle }); } handleChangeSpriteName(name) { this.props.vm.renameSprite(this.props.editingTarget, name); } handleChangeSpriteSize(size) { this.props.vm.postSpriteInfo({ size }); } handleChangeSpriteVisibility(visible) { this.props.vm.postSpriteInfo({ visible }); } handleChangeSpriteX(x) { this.props.vm.postSpriteInfo({ x }); } handleChangeSpriteY(y) { this.props.vm.postSpriteInfo({ y }); } handleDeleteSprite(id) { const restoreSprite = this.props.vm.deleteSprite(id); const restoreFun = () => restoreSprite().then(this.handleActivateBlocksTab); this.props.dispatchUpdateRestore({ restoreFun: restoreFun, deletedItem: 'Sprite' }); } handleDuplicateSprite(id) { this.props.vm.duplicateSprite(id); } handleExportSprite(id) { const spriteName = this.props.vm.runtime.getTargetById(id).getName(); const saveLink = document.createElement('a'); document.body.appendChild(saveLink); this.props.vm.exportSprite(id).then(content => { Object(_lib_download_blob__WEBPACK_IMPORTED_MODULE_20__["default"])("".concat(spriteName, ".pms"), content); }); } handleSelectSprite(id) { this.props.vm.setEditingTarget(id); if (this.props.stage && id !== this.props.stage.id) { this.props.onHighlightTarget(id); } } async handleSurpriseSpriteClick() { const spriteLibraryContent = await Object(_lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_13__["getSpriteLibrary"])(); const surpriseSprites = spriteLibraryContent.filter(sprite => sprite.tags.indexOf('letters') === -1 && sprite.tags.indexOf('numbers') === -1); const item = surpriseSprites[Math.floor(Math.random() * surpriseSprites.length)]; Object(_lib_randomize_sprite_position__WEBPACK_IMPORTED_MODULE_19__["default"])(item); this.props.vm.addSprite(JSON.stringify(item)).then(this.handleActivateBlocksTab); } handlePaintSpriteClick() { const formatMessage = this.props.intl.formatMessage; const emptyItem = Object(_lib_empty_assets__WEBPACK_IMPORTED_MODULE_16__["emptySprite"])(formatMessage(_lib_shared_messages__WEBPACK_IMPORTED_MODULE_15__["default"].sprite, { index: 1 }), formatMessage(_lib_shared_messages__WEBPACK_IMPORTED_MODULE_15__["default"].pop), formatMessage(_lib_shared_messages__WEBPACK_IMPORTED_MODULE_15__["default"].costume, { index: 1 })); this.props.vm.addSprite(JSON.stringify(emptyItem)).then(() => { setTimeout(() => { // Wait for targets update to propagate before tab switching this.props.onActivateTab(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_6__["COSTUMES_TAB_INDEX"]); }); }); } handleActivateBlocksTab() { this.props.onActivateTab(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_6__["BLOCKS_TAB_INDEX"]); } handleNewSprite(spriteJSONString) { return this.props.vm.addSprite(spriteJSONString).then(this.handleActivateBlocksTab).catch(err => { _lib_log__WEBPACK_IMPORTED_MODULE_21__["default"].error(err); }); } handleFileUploadClick() { this.fileInput.click(); } handleSpriteUpload(e) { const vm = this.props.vm; this.props.onShowImporting(); Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_14__["handleFileUpload"])(e.target, (buffer, fileType, fileName, fileIndex, fileCount) => { Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_14__["spriteUpload"])(buffer, fileType, fileName, vm, newSprite => { this.handleNewSprite(newSprite).then(() => { if (fileIndex === fileCount - 1) { this.props.onCloseImporting(); } }).catch(this.props.onCloseImporting); }, this.props.onCloseImporting); }, this.props.onCloseImporting); } setFileInput(input) { this.fileInput = input; } handleBlockDragEnd(blocks) { if (this.props.hoveredTarget.sprite && this.props.hoveredTarget.sprite !== this.props.editingTarget) { this.shareBlocks(blocks, this.props.hoveredTarget.sprite, this.props.editingTarget); this.props.onReceivedBlocks(true); } } shareBlocks(blocks, targetId, optFromTargetId) { // Position the top-level block based on the scroll position. const topBlock = blocks.find(block => block.topLevel); if (topBlock) { let metrics; if (this.props.workspaceMetrics.targets[targetId]) { metrics = this.props.workspaceMetrics.targets[targetId]; } else { metrics = { scrollX: 0, scrollY: 0, scale: _lib_layout_constants__WEBPACK_IMPORTED_MODULE_12__["BLOCKS_DEFAULT_SCALE"] }; } // Determine position of the top-level block based on the target's workspace metrics. const { scrollX, scrollY, scale } = metrics; const posY = -scrollY + 30; let posX; if (this.props.isRtl) { posX = scrollX + 30; } else { posX = -scrollX + 30; } // Actually apply the position! topBlock.x = posX / scale; topBlock.y = posY / scale; } return this.props.vm.shareBlocksToTarget(blocks, targetId, optFromTargetId); } handleDrop(dragInfo) { const { sprite: targetId } = this.props.hoveredTarget; if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].SPRITE) { // Add one to both new and target index because we are not counting/moving the stage this.props.vm.reorderTarget(dragInfo.index + 1, dragInfo.newIndex + 1); } else if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_SPRITE) { // TODO storage does not have a way of loading zips right now, and may never need it. // So for now just grab the zip manually. Object(_lib_backpack_api__WEBPACK_IMPORTED_MODULE_18__["fetchSprite"])(dragInfo.payload.bodyUrl).then(sprite3Zip => this.props.vm.addSprite(sprite3Zip)); } else if (targetId) { // Something is being dragged over one of the sprite tiles or the backdrop. // Dropping assets like sounds and costumes duplicate the asset on the // hovered target. Shared costumes also become the current costume on that target. // However, dropping does not switch the editing target or activate that editor tab. // This is based on 2.0 behavior, but seems like it keeps confusing switching to a minimum. // it allows the user to share multiple things without switching back and forth. if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].COSTUME) { this.props.vm.shareCostumeToTarget(dragInfo.index, targetId); } else if (targetId && dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].SOUND) { this.props.vm.shareSoundToTarget(dragInfo.index, targetId); } else if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_COSTUME) { // In scratch 2, this only creates a new sprite from the costume. // We may be able to handle both kinds of drops, depending on where // the drop happens. For now, just add the costume. this.props.vm.addCostume(dragInfo.payload.body, { name: dragInfo.payload.name }, targetId); } else if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_SOUND) { this.props.vm.addSound({ md5: dragInfo.payload.body, name: dragInfo.payload.name }, targetId); } else if (dragInfo.dragType === _lib_drag_constants__WEBPACK_IMPORTED_MODULE_10__["default"].BACKPACK_CODE) { Object(_lib_backpack_api__WEBPACK_IMPORTED_MODULE_18__["fetchCode"])(dragInfo.payload.bodyUrl).then(blocks => this.shareBlocks(blocks, targetId)).then(() => this.props.vm.refreshWorkspace()); } } } render() { /* eslint-disable no-unused-vars */ const _this$props = this.props, { dispatchUpdateRestore, isRtl, onActivateTab, onCloseImporting, onHighlightTarget, onReceivedBlocks, onShowImporting, workspaceMetrics } = _this$props, componentProps = _objectWithoutProperties(_this$props, _excluded); /* eslint-enable no-unused-vars */ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_target_pane_target_pane_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], _extends({}, componentProps, { fileInputRef: this.setFileInput, onActivateBlocksTab: this.handleActivateBlocksTab, onChangeSpriteDirection: this.handleChangeSpriteDirection, onChangeSpriteName: this.handleChangeSpriteName, onChangeSpriteRotationStyle: this.handleChangeSpriteRotationStyle, onChangeSpriteSize: this.handleChangeSpriteSize, onChangeSpriteVisibility: this.handleChangeSpriteVisibility, onChangeSpriteX: this.handleChangeSpriteX, onChangeSpriteY: this.handleChangeSpriteY, onDeleteSprite: this.handleDeleteSprite, onDrop: this.handleDrop, onDuplicateSprite: this.handleDuplicateSprite, onExportSprite: this.handleExportSprite, onFileUploadClick: this.handleFileUploadClick, onPaintSpriteClick: this.handlePaintSpriteClick, onSelectSprite: this.handleSelectSprite, onSpriteUpload: this.handleSpriteUpload, onSurpriseSpriteClick: this.handleSurpriseSpriteClick })); } } const _TargetPaneComponent$ = _components_target_pane_target_pane_jsx__WEBPACK_IMPORTED_MODULE_11__["default"].propTypes, { onSelectSprite, // eslint-disable-line no-unused-vars onActivateBlocksTab // eslint-disable-line no-unused-vars } = _TargetPaneComponent$, targetPaneProps = _objectWithoutProperties(_TargetPaneComponent$, ["onSelectSprite", "onActivateBlocksTab"]); TargetPane.propTypes = _objectSpread({ intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"].isRequired, onCloseImporting: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onShowImporting: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func }, targetPaneProps); const mapStateToProps = state => ({ editingTarget: state.scratchGui.targets.editingTarget, hoveredTarget: state.scratchGui.hoveredTarget, isRtl: state.locales.isRtl, spriteLibraryVisible: state.scratchGui.modals.spriteLibrary, sprites: state.scratchGui.targets.sprites, stage: state.scratchGui.targets.stage, raiseSprites: state.scratchGui.blockDrag, workspaceMetrics: state.scratchGui.workspaceMetrics }); const mapDispatchToProps = dispatch => ({ onNewSpriteClick: e => { e.preventDefault(); dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_5__["openSpriteLibrary"])()); }, onRequestCloseSpriteLibrary: () => { dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_5__["closeSpriteLibrary"])()); }, onActivateTab: tabIndex => { dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_6__["activateTab"])(tabIndex)); }, onReceivedBlocks: receivedBlocks => { dispatch(Object(_reducers_hovered_target__WEBPACK_IMPORTED_MODULE_7__["setReceivedBlocks"])(receivedBlocks)); }, dispatchUpdateRestore: restoreState => { dispatch(Object(_reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_9__["setRestore"])(restoreState)); }, onHighlightTarget: id => { dispatch(Object(_reducers_targets__WEBPACK_IMPORTED_MODULE_17__["highlightTarget"])(id)); }, onCloseImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_8__["closeAlertWithId"])('importingAsset')), onShowImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_8__["showStandardAlert"])('importingAsset')) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(TargetPane))); /***/ }), /***/ "./src/containers/tips-library.jsx": /*!*****************************************!*\ !*** ./src/containers/tips-library.jsx ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/libraries/decks/index.jsx */ "./src/lib/libraries/decks/index.jsx"); /* harmony import */ var _lib_libraries_tutorial_tags__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/libraries/tutorial-tags */ "./src/lib/libraries/tutorial-tags.js"); /* harmony import */ var _lib_analytics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/analytics */ "./src/lib/analytics.js"); /* harmony import */ var _lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/isScratchDesktop */ "./src/lib/isScratchDesktop.js"); /* harmony import */ var _components_library_library_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/library/library.jsx */ "./src/components/library/library.jsx"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_cards__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../reducers/cards */ "./src/reducers/cards.js"); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ tipsLibraryTitle: { "id": "gui.tipsLibrary.tutorials", "defaultMessage": "Choose a Tutorial" } }); class TipsLibrary extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleItemSelect']); } handleItemSelect(item) { _lib_analytics__WEBPACK_IMPORTED_MODULE_6__["default"].event({ category: 'library', action: 'Select How-to', label: item.id }); /* Support tutorials that require specific starter projects. If a tutorial declares "requiredProjectId", check that the URL contains it. If it is not, open a new page with this tutorial and project id. TODO remove this at first opportunity. If this is still here after HOC2018, blame Eric R. Andrew is also on record saying "this is temporary". UPDATE well now Paul is wrapped into this as well. Sigh... eventually we will find a solution that doesn't involve loading a whole project */ if (item.requiredProjectId && item.requiredProjectId !== this.props.projectId) { const urlParams = "/projects/".concat(item.requiredProjectId, "/editor?tutorial=").concat(item.urlId); return window.open(window.location.origin + urlParams, '_blank'); } this.props.onActivateDeck(item.id); } render() { const decksLibraryThumbnailData = Object.keys(_lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_4__["default"]).filter(id => { if (Object(_lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_7__["notScratchDesktop"])()) return true; // Do not filter anything in online editor const deck = _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_4__["default"][id]; // Scratch Desktop doesn't want tutorials with `requiredProjectId` if (deck.hasOwnProperty('requiredProjectId')) return false; // Scratch Desktop should not load tutorials that are _only_ videos if (deck.steps.filter(s => s.title).length === 0) return false; // Allow any other tutorials return true; }).map(id => ({ rawURL: _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_4__["default"][id].img, id: id, name: _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_4__["default"][id].name, featured: true, tags: _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_4__["default"][id].tags, urlId: _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_4__["default"][id].urlId, requiredProjectId: _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_4__["default"][id].requiredProjectId, hidden: _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_4__["default"][id].hidden || false })); if (!this.props.visible) return null; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_library_library_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { filterable: true, data: decksLibraryThumbnailData, id: "tipsLibrary", header: "Tips", tags: _lib_libraries_tutorial_tags__WEBPACK_IMPORTED_MODULE_5__["default"], title: this.props.intl.formatMessage(messages.tipsLibraryTitle), visible: this.props.visible, onItemSelected: this.handleItemSelect, onRequestClose: this.props.onRequestClose }); } } TipsLibrary.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired, onActivateDeck: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, onRequestClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, projectId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number]), visible: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; const mapStateToProps = state => ({ visible: state.scratchGui.modals.tipsLibrary, projectId: state.scratchGui.projectState.projectId }); const mapDispatchToProps = dispatch => ({ onActivateDeck: id => dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_11__["activateDeck"])(id)), onRequestClose: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_10__["closeTipsLibrary"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_9__["connect"])(mapStateToProps, mapDispatchToProps)(TipsLibrary))); /***/ }), /***/ "./src/containers/turbo-mode.jsx": /*!***************************************!*\ !*** ./src/containers/turbo-mode.jsx ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); const _excluded = ["children", "vm"]; function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } /** * Turbo Mode component passes toggleTurboMode function to its child. * It also includes `turboMode` in the props passed to the children. * It expects this child to be a function with the signature * function (toggleTurboMode, {turboMode, ...props}) {} * The component can then be used to attach turbo mode setting functionality * to any other component: * * {(toggleTurboMode, props) => ( * * )} */ class TurboMode extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['toggleTurboMode']); } toggleTurboMode() { this.props.vm.setTurboMode(!this.props.turboMode); } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ children, vm /* eslint-enable no-unused-vars */ } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return this.props.children(this.toggleTurboMode, props); } } TurboMode.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, turboMode: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ setTurboMode: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }) }; const mapStateToProps = state => ({ vm: state.scratchGui.vm, turboMode: state.scratchGui.vmStatus.turbo }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, () => ({}) // omit dispatch prop )(TurboMode)); /***/ }), /***/ "./src/containers/tw-change-username.jsx": /*!***********************************************!*\ !*** ./src/containers/tw-change-username.jsx ***! \***********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_menus__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/menus */ "./src/reducers/menus.js"); /* harmony import */ var _lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/isScratchDesktop */ "./src/lib/isScratchDesktop.js"); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({ cannotChangeWhileRunning: { "id": "tw.changeUsername.cannotChangeWhileRunning", "defaultMessage": "Username cannot be changed while the project is running." } }); class ChangeUsername extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['changeUsername']); } changeUsername() { if (this.props.running && !Object(_lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_7__["default"])()) { // eslint-disable-next-line no-alert alert(this.props.intl.formatMessage(messages.cannotChangeWhileRunning)); return; } this.props.onOpenUsernameModal(); } render() { return this.props.children(this.changeUsername); } } ChangeUsername.propTypes = { children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, onOpenUsernameModal: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, running: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"] }; const mapStateToProps = state => ({ running: state.scratchGui.vmStatus.running }); const mapDispatchToProps = dispatch => ({ onOpenUsernameModal: () => { dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_5__["openUsernameModal"])()); dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_6__["closeEditMenu"])()); } }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(ChangeUsername))); /***/ }), /***/ "./src/containers/tw-cloud-toggler.jsx": /*!*********************************************!*\ !*** ./src/containers/tw-cloud-toggler.jsx ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js"); /* harmony import */ var _lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/isScratchDesktop */ "./src/lib/isScratchDesktop.js"); const _excluded = ["children"]; function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({ cloudUnavailableAlert: { "id": "tw.menuBar.cloudUnavailableAlert", "defaultMessage": "Cannot use cloud variables, most likely because you opened the editor." }, cloudUnavailableDesktop: { "id": "tw.menuBar.cloudUnavailableDesktop", "defaultMessage": "Cannot use cloud variables in desktop app." } }); class CloudVariablesToggler extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['toggleCloudVariables']); } toggleCloudVariables() { if (!this.props.canUseCloudVariables) { const message = this.props.intl.formatMessage(Object(_lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_6__["default"])() ? messages.cloudUnavailableDesktop : messages.cloudUnavailableAlert); // eslint-disable-next-line no-alert alert(message); return; } this.props.onCloudChange(!this.props.enabled); } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ children /* eslint-enable no-unused-vars */ } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return this.props.children(this.toggleCloudVariables, props); } } CloudVariablesToggler.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, enabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, username: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onCloudChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, canUseCloudVariables: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; const mapStateToProps = state => ({ username: state.scratchGui.tw.username, enabled: state.scratchGui.tw.cloud, canUseCloudVariables: !state.scratchGui.mode.hasEverEnteredEditor }); const mapDispatchToProps = dispatch => ({ onCloudChange: enabled => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_5__["setCloud"])(enabled)) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps, mapDispatchToProps)(CloudVariablesToggler))); /***/ }), /***/ "./src/containers/tw-cloud-variable-badge.jsx": /*!****************************************************!*\ !*** ./src/containers/tw-cloud-variable-badge.jsx ***! \****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js"); /* harmony import */ var _components_tw_cloud_variable_badge_cloud_variable_badge_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/tw-cloud-variable-badge/cloud-variable-badge.jsx */ "./src/components/tw-cloud-variable-badge/cloud-variable-badge.jsx"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); class TWCloudVariableBadge extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_5___default()(this, ['handleChangeCloudHost']); } handleChangeCloudHost(cloudHost) { this.props.onSetCloudHost(cloudHost); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_tw_cloud_variable_badge_cloud_variable_badge_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { cloudHost: this.props.cloudHost, onSetCloudHost: this.handleChangeCloudHost, onOpenChangeUsername: this.props.onOpenChangeUsername }); } } TWCloudVariableBadge.propTypes = { cloudHost: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string, onSetCloudHost: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func, onOpenChangeUsername: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func }; const mapStateToProps = state => ({ cloudHost: state.scratchGui.tw.cloudHost }); const mapDispatchToProps = dispatch => ({ onSetCloudHost: cloudHost => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_3__["setCloudHost"])(cloudHost)), onOpenChangeUsername: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_6__["openUsernameModal"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(mapStateToProps, mapDispatchToProps)(TWCloudVariableBadge)); /***/ }), /***/ "./src/containers/tw-custom-extension-modal.jsx": /*!******************************************************!*\ !*** ./src/containers/tw-custom-extension-modal.jsx ***! \******************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _lib_log__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/log */ "./src/lib/log.js"); /* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! localforage */ "./node_modules/localforage/dist/localforage.js"); /* harmony import */ var localforage__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(localforage__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _components_tw_custom_extension_modal_custom_extension_modal_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/tw-custom-extension-modal/custom-extension-modal.jsx */ "./src/components/tw-custom-extension-modal/custom-extension-modal.jsx"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _tw_security_manager_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tw-security-manager.jsx */ "./src/containers/tw-security-manager.jsx"); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } const generateRandomId = () => { const randomChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; return randomChars.split('').map(() => randomChars.at(Math.round(Math.random() * (randomChars.length - 1)))).join('').substring(0, 20); }; class CustomExtensionModal extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleChangeFile', 'handleChangeURL', 'handleClose', 'handleKeyDown', 'handleLoadExtension', 'handleSwitchToFile', 'handleSwitchToURL', 'handleSwitchToText', 'handleChangeText', 'handleDragOver', 'handleDragLeave', 'handleDrop', 'handleChangeUnsandboxed', 'handleChangeAddToLibrary', 'handleChangeLibraryItem', 'handleLoadingDataUrl']); this.state = { files: null, type: this.props.swapId ? 'text' : 'url', url: this.fetchSwapUrl(), file: null, text: this.fetchSwapText(), unsandboxed: false, addingToLibrary: false, libraryImageFile: null, libraryItem: { name: 'Extension', description: 'Adds new blocks.', tags: ['myextensions'], rawURL: 'https://penguinmod.com/line_blue.png', featured: true, deletable: true, _id: generateRandomId() } }; } getExtensionURL() { if (this.state.type === 'url') { return this.state.url; } if (this.state.type === 'file') { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(reader.result); reader.onerror = () => reject(new Error("Could not read extension as data URL: ".concat(reader.error))); reader.readAsDataURL(this.state.file); }); } if (this.state.type === 'text') { return "data:application/javascript,".concat(encodeURIComponent(this.state.text)); } return Promise.reject(new Error('Unknown type')); } hasValidInput() { if (this.state.type === 'url') { try { const parsed = new URL(this.state.url); return parsed.protocol === 'https:' || parsed.protocol === 'http:' || parsed.protocol === 'data:'; } catch (e) { return false; } } if (this.state.type === 'file') { return !!this.state.file; } if (this.state.type === 'text') { return !!this.state.text; } return false; } handleChangeFile(file) { this.setState({ file }); } handleChangeURL(e) { this.setState({ url: e.target.value }); } handleClose() { this.props.onClose(); } handleKeyDown(e) { if (e.key === 'Enter' && this.hasValidInput()) { e.preventDefault(); this.handleLoadExtension(); } } async handleLoadExtension() { let failed = false; if (this.props.swapId) { /* eslint-disable-next-line no-alert, max-len */ if (!confirm('Failure to swap extensions will cause the extension to be flatout removed, are you sure the inputed extension has matching id\'s and has no errors?')) { return; } } this.handleClose(); try { const url = await this.getExtensionURL(); if (this.state.unsandboxed) { Object(_tw_security_manager_jsx__WEBPACK_IMPORTED_MODULE_8__["manuallyTrustExtension"])(url); } if (this.props.swapId) { const runtime = this.props.vm.runtime; this.props.vm.extensionManager.prepareSwap(this.props.swapId); let extIdx = runtime._blockInfo.findIndex(ext => ext.id === this.props.swapId); const loadedIds = await this.props.vm.extensionManager.loadExtensionURL(url); if (!loadedIds.includes(this.props.swapId)) { for (const ext of loadedIds) this.props.vm.extensionManager.removeExtension(ext); // eslint-disable-next-line no-alert alert('The extension you used for the edit had a different ID than the one you were editing.'); } loadedIds.forEach(extId => { const idx = runtime._blockInfo.findLastIndex(ext => ext.id === extId); const ext = runtime._blockInfo[idx]; runtime._blockInfo.splice(idx, 1); runtime._blockInfo.splice(extIdx, 0, ext); extIdx++; }); } else { await this.props.vm.extensionManager.loadExtensionURL(url); } } catch (err) { failed = true; _lib_log__WEBPACK_IMPORTED_MODULE_4__["default"].error(err); if (err) { // eslint-disable-next-line no-alert alert(err); } } finally { if (failed && this.props.swapId) { // eslint-disable-next-line no-alert alert('The extension you used for the edit has failed to load.'); this.props.vm.runtime._removeExtensionPrimitive(this.props.swapId); } if (failed) return; if (!this.state.addingToLibrary) return; // we are only adding to library if it succeeded to load const id = 'pm:favorited_extensions'; const libraryItem = this.state.libraryItem; const url = await this.getExtensionURL(); const favorites = await localforage__WEBPACK_IMPORTED_MODULE_5___default.a.getItem(id); libraryItem.extensionId = url; libraryItem._unsandboxed = this.state.unsandboxed; // console.log(libraryItem); if (!favorites) { await localforage__WEBPACK_IMPORTED_MODULE_5___default.a.setItem(id, [libraryItem]); return; } favorites.push(libraryItem); await localforage__WEBPACK_IMPORTED_MODULE_5___default.a.setItem(id, favorites); return; } } handleSwitchToFile() { this.setState({ type: 'file' }); } handleSwitchToURL() { this.setState({ type: 'url' }); } handleSwitchToText() { this.setState({ type: 'text' }); } handleChangeText(e) { this.setState({ text: e.target.value }); } handleDragOver(e) { if (e.dataTransfer.types.includes('Files')) { e.preventDefault(); e.dataTransfer.dropEffect = 'copy'; } } handleDragLeave() {} handleDrop(e) { const file = e.dataTransfer.files[0]; if (file) { e.preventDefault(); this.setState({ type: 'file', file }); } } isUnsandboxed() { if (this.state.type === 'url') { if (Object(_tw_security_manager_jsx__WEBPACK_IMPORTED_MODULE_8__["isTrustedExtensionOrigin"])(this.state.url)) return true; } return this.state.unsandboxed; } canChangeUnsandboxed() { if (this.state.type === "url" && Object(_tw_security_manager_jsx__WEBPACK_IMPORTED_MODULE_8__["isTrustedExtensionOrigin"])(this.state.url)) { return false; } return true; } handleChangeUnsandboxed(e) { this.setState({ unsandboxed: e.target.checked }); } handleChangeAddToLibrary(e) { this.setState({ addingToLibrary: e.target.checked }); } async handleLoadingDataUrl(file) { const fr = new FileReader(); // eslint-disable-next-line no-alert fr.onerror = () => alert('Failed to load the image!'); fr.onload = () => { if (!file.type.startsWith('image/')) { // eslint-disable-next-line no-alert return alert('This is not an image!'); } const url = fr.result; const libraryItem = this.state.libraryItem; const newData = { rawURL: url }; this.setState({ libraryItem: _objectSpread(_objectSpread({}, libraryItem), newData), libraryImageFile: file }); }; fr.readAsDataURL(file); } handleChangeLibraryItem(key, e) { const newData = {}; if (key === 'rawURL') { this.handleLoadingDataUrl(e); return; } const value = e.target.value; newData[key] = value; const libraryItem = this.state.libraryItem; this.setState({ libraryItem: _objectSpread(_objectSpread({}, libraryItem), newData) }); } fetchSwapUrl() { var _this$props$vm$extens; return (_this$props$vm$extens = this.props.vm.extensionManager.extensionUrlFromId(this.props.swapId)) !== null && _this$props$vm$extens !== void 0 ? _this$props$vm$extens : ''; } fetchSwapText() { var _this$props$vm$extens2; return (_this$props$vm$extens2 = this.props.vm.extensionManager.extUrlCodes[this.fetchSwapUrl()]) !== null && _this$props$vm$extens2 !== void 0 ? _this$props$vm$extens2 : ''; } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_tw_custom_extension_modal_custom_extension_modal_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], { defaultUrl: this.fetchSwapUrl(), defaultText: this.fetchSwapText(), canLoadExtension: this.hasValidInput(), type: this.state.type, onSwitchToFile: this.handleSwitchToFile, onSwitchToURL: this.handleSwitchToURL, onSwitchToText: this.handleSwitchToText, file: this.state.file, onChangeFile: this.handleChangeFile, onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave, onDrop: this.handleDrop, url: this.state.url, onChangeURL: this.handleChangeURL, onKeyDown: this.handleKeyDown, text: this.state.text, onChangeText: this.handleChangeText, unsandboxed: this.isUnsandboxed(), onChangeUnsandboxed: this.canChangeUnsandboxed() ? this.handleChangeUnsandboxed : null, addToLibrary: this.state.addingToLibrary, onChangeAddToLibrary: this.handleChangeAddToLibrary, onLoadExtension: this.handleLoadExtension, onClose: this.handleClose, libraryItemName: this.state.libraryItem.name, libraryItemDescription: this.state.libraryItem.description, libraryItemImage: this.state.libraryItem.rawURL, libraryItemFile: this.state.libraryImageFile, onChangeLibraryItem: this.handleChangeLibraryItem }); } } CustomExtensionModal.propTypes = { onClose: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ extensionManager: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ loadExtensionURL: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, getExtensionURLs: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, extUrlCodes: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.object, prepareSwap: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, extensionUrlFromId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, removeExtension: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func }), runtime: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ _removeExtensionPrimitive: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, _blockInfo: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.array }) }), swapId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string }; const mapStateToProps = state => ({ vm: state.scratchGui.vm, swapId: state.scratchGui.modals.extensionModalSwapId }); const mapDispatchToProps = dispatch => ({ onClose: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_7__["closeCustomExtensionModal"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(CustomExtensionModal)); /***/ }), /***/ "./src/containers/tw-fonts-modal.jsx": /*!*******************************************!*\ !*** ./src/containers/tw-fonts-modal.jsx ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _components_tw_fonts_modal_fonts_modal_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/tw-fonts-modal/fonts-modal.jsx */ "./src/components/tw-fonts-modal/fonts-modal.jsx"); class TWFontsModal extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleClose', 'handleCustomFontsChanged', 'handleCancelAddFont', 'handleOpenSystemFonts', 'handleOpenLibaryFonts', 'handleOpenCustomFonts']); this.state = { fonts: this.props.vm.runtime.fontManager.getFonts(), screen: '' }; } componentDidMount() { this.props.vm.runtime.fontManager.on('change', this.handleCustomFontsChanged); } componentWillUnmount() { this.props.vm.runtime.fontManager.off('change', this.handleCustomFontsChanged); } handleClose() { if (this.state.screen) { this.setState({ screen: '' }); } else { this.props.onClose(); } } handleCustomFontsChanged() { this.setState({ fonts: this.props.vm.runtime.fontManager.getFonts() }); } handleCancelAddFont() { this.setState({ screen: '' }); } handleOpenSystemFonts() { this.setState({ screen: 'system' }); } handleOpenLibaryFonts() { this.setState({ screen: 'library' }); } handleOpenCustomFonts() { this.setState({ screen: 'custom' }); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_tw_fonts_modal_fonts_modal_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { onClose: this.handleClose, screen: this.state.screen, fonts: this.state.fonts, fontManager: this.props.vm.runtime.fontManager, onCancelAddFont: this.handleCancelAddFont, onOpenSystemFonts: this.handleOpenSystemFonts, onOpenLibraryFonts: this.handleOpenLibaryFonts, onOpenCustomFonts: this.handleOpenCustomFonts }); } } TWFontsModal.propTypes = { onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ runtime: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ fontManager: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ getFonts: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, addSystemFont: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, on: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, off: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }) }) }) }; const mapStateToProps = state => ({ vm: state.scratchGui.vm }); const mapDispatchToProps = dispatch => ({ onClose: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_4__["closeFontsModal"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(TWFontsModal)); /***/ }), /***/ "./src/containers/tw-framerate-changer.jsx": /*!*************************************************!*\ !*** ./src/containers/tw-framerate-changer.jsx ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_5__); const _excluded = ["intl", "children", "vm"]; function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({ newFramerate: { "id": "tw.menuBar.newFramerate", "defaultMessage": "New framerate:" } }); class FramerateChanger extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['changeFramerate']); } async changeFramerate(e) { if (e && (e.ctrlKey || e.shiftKey)) { // prompt() returns Promise in desktop app // eslint-disable-next-line no-alert const newFPS = await prompt(this.props.intl.formatMessage(messages.newFramerate), this.props.framerate); if (newFPS === null) { return; } const fps = +newFPS; if (isFinite(fps) && fps > 0) { this.props.vm.setFramerate(fps); } } else if (this.props.framerate === 60) { this.props.vm.setFramerate(30); } else { this.props.vm.setFramerate(60); } } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ intl, children, vm /* eslint-enable no-unused-vars */ } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return this.props.children(this.changeFramerate, props); } } FramerateChanger.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"], children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, framerate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_5___default.a) }; const mapStateToProps = state => ({ framerate: state.scratchGui.tw.framerate, vm: state.scratchGui.vm }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, () => ({}) // omit dispatch prop )(FramerateChanger))); /***/ }), /***/ "./src/containers/tw-restore-point-manager.jsx": /*!*****************************************************!*\ !*** ./src/containers/tw-restore-point-manager.jsx ***! \*****************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js"); /* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js"); /* harmony import */ var _components_tw_restore_point_modal_restore_point_modal_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/tw-restore-point-modal/restore-point-modal.jsx */ "./src/components/tw-restore-point-modal/restore-point-modal.jsx"); /* harmony import */ var _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/tw-restore-point-api */ "./src/lib/tw-restore-point-api.js"); /* harmony import */ var _lib_download_blob__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../lib/download-blob */ "./src/lib/download-blob.js"); /* harmony import */ var _lib_log__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../lib/log */ "./src/lib/log.js"); /* eslint-disable no-alert */ const SAVE_DELAY = 250; const MINIMUM_SAVE_TIME = 750; const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["defineMessages"])({ confirmLoad: { "id": "tw.restorePoints.confirmLoad", "defaultMessage": "You have unsaved changes. Replace existing project?" }, confirmDelete: { "id": "tw.restorePoints.confirmDelete", "defaultMessage": "Are you sure you want to delete \"{projectTitle}\"? This cannot be undone." }, confirmDeleteAll: { "id": "tw.restorePoints.confirmDeleteAll", "defaultMessage": "Are you sure you want to delete ALL restore points? This cannot be undone." }, loadError: { "id": "tw.restorePoints.error", "defaultMessage": "Error loading restore point: {error}" } }); class TWRestorePointManager extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_4___default()(this, ['handleClickCreate', 'handleClickDelete', 'handleClickDeleteAll', 'handleChangeInterval', 'handleClickLoad', 'handleClickExport']); this.state = { loading: true, exporting: false, totalSize: 0, restorePoints: [], error: null, wasChanged: props.projectChanged, interval: _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].readInterval() }; this.timeout = null; } componentDidMount() { if (this.state.wasChanged) { this.queueRestorePoint(); } _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].deleteLegacyRestorePoint(); } componentWillReceiveProps(nextProps) { if (nextProps.isModalVisible && !this.props.isModalVisible) { this.refreshState(); } else if (!nextProps.isModalVisible && this.props.isModalVisible) { this.setState({ restorePoints: [] }); } if (nextProps.projectChanged && !this.props.projectChanged && !this.state.wasChanged) { this.setState({ wasChanged: true }); } if (!nextProps.isShowingProject && this.props.isShowingProject) { this.setState({ wasChanged: false }); } } componentDidUpdate(prevProps, prevState) { if (this.state.wasChanged && !prevState.wasChanged) { this.queueRestorePoint(); } else if (!this.state.wasChanged && prevState.wasChanged) { this.cancelQueuedRestorePoint(); } } componentWillUnmount() { this.cancelQueuedRestorePoint(); } handleClickCreate() { this.createRestorePoint(_lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].TYPE_MANUAL).catch(error => { this.handleModalError(error); }); } handleClickDelete(id) { const projectTitle = this.state.restorePoints.find(i => i.id === id).title; if (!confirm(this.props.intl.formatMessage(messages.confirmDelete, { projectTitle }))) { return; } this.setState({ loading: true }); _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].deleteRestorePoint(id).then(() => { this.refreshState(); }).catch(error => { this.handleModalError(error); }); } handleClickDeleteAll() { if (!confirm(this.props.intl.formatMessage(messages.confirmDeleteAll))) { return; } this.setState({ loading: true }); _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].deleteAllRestorePoints().then(() => { this.refreshState(); }).catch(error => { this.handleModalError(error); }); } canLoadProject() { if (!this.props.isShowingProject) { // Loading a project now will break the state machine return false; } if (this.props.projectChanged && !confirm(this.props.intl.formatMessage(messages.confirmLoad))) { return false; } return true; } handleClickLoad(id) { if (!this.canLoadProject()) { return; } if (this.state.exporting) { return; } this.props.onCloseModal(); this.props.onStartLoadingRestorePoint(this.props.loadingState); _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].loadRestorePoint(this.props.vm, id).then(() => { this.props.onFinishLoadingRestorePoint(true, this.props.loadingState); setTimeout(() => { this.props.vm.renderer.draw(); }); }).catch(error => { _lib_log__WEBPACK_IMPORTED_MODULE_12__["default"].error(error); alert(this.props.intl.formatMessage(messages.loadError, { error })); this.props.onFinishLoadingRestorePoint(false, this.props.loadingState); }); } handleClickExport(id) { if (!this.props.isShowingProject) { // this might break the state machine if we dont do this? not sure so we won't risk it & just return return; } if (this.state.exporting) { return; } this.setState({ exporting: true }); // specifically add true so dontLoadProject is true _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].loadRestorePoint(this.props.vm, id, true).then(arrayBuffer => { this.setState({ exporting: false }); const blob = new Blob([arrayBuffer], { type: "application/x.scratch.sb3" }); Object(_lib_download_blob__WEBPACK_IMPORTED_MODULE_11__["default"])("restore-point.s4s.txt", blob); }).catch(error => { _lib_log__WEBPACK_IMPORTED_MODULE_12__["default"].error(error); alert(this.props.intl.formatMessage(messages.loadError, { error })); this.setState({ exporting: false }); }); } handleChangeInterval(e) { const interval = +e.target.value; _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].setInterval(interval); this.setState({ interval }, () => { if (this.state.wasChanged) { this.cancelQueuedRestorePoint(); this.queueRestorePoint(); } }); } queueRestorePoint() { if (this.timeout || this.state.interval < 0) { return; } this.timeout = setTimeout(() => { this.createRestorePoint(_lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].TYPE_AUTOMATIC).then(() => { this.timeout = null; this.queueRestorePoint(); }); }, this.state.interval); } cancelQueuedRestorePoint() { if (this.timeout) { clearTimeout(this.timeout); this.timeout = null; } } createRestorePoint(type) { if (this.props.isModalVisible) { this.setState({ loading: true }); } this.props.onStartCreatingRestorePoint(); return Promise.all([ // Wait a little bit before saving so UI can update before saving, which can cause stutter sleep(SAVE_DELAY).then(() => _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].createRestorePoint(this.props.vm, this.props.projectTitle, type)).then(() => _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].removeExtraneousRestorePoints()), // Force saves to not be instant so people can see that we're making a restore point // It also makes refreshes less likely to cause accidental clicks in the modal sleep(MINIMUM_SAVE_TIME)]).then(() => { this.props.onFinishCreatingRestorePoint(); if (this.props.isModalVisible) { this.refreshState(); } }).catch(error => { _lib_log__WEBPACK_IMPORTED_MODULE_12__["default"].error(error); this.props.onErrorCreatingRestorePoint(); if (this.props.isModalVisible) { this.refreshState(); } }); } refreshState() { this.setState({ loading: true, error: null, restorePoints: [] }); _lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].getAllRestorePoints().then(data => { this.setState({ loading: false, totalSize: data.totalSize, restorePoints: data.restorePoints }); }).catch(error => { this.handleModalError(error); }); } handleModalError(error) { _lib_log__WEBPACK_IMPORTED_MODULE_12__["default"].error('Restore point error', error); this.setState({ error: "".concat(error), loading: false }); } render() { if (this.props.isModalVisible) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_tw_restore_point_modal_restore_point_modal_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], { onClose: this.props.onCloseModal, onClickCreate: this.handleClickCreate, onClickDelete: this.handleClickDelete, onClickDeleteAll: this.handleClickDeleteAll, onClickLoad: this.handleClickLoad, onClickExport: this.handleClickExport, interval: this.state.interval, onChangeInterval: this.handleChangeInterval, isLoading: this.state.loading, totalSize: this.state.totalSize, restorePoints: this.state.restorePoints, error: this.state.error }); } return null; } } TWRestorePointManager.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_2__["intlShape"], projectChanged: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool.isRequired, projectTitle: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.string.isRequired, onStartCreatingRestorePoint: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onFinishCreatingRestorePoint: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onErrorCreatingRestorePoint: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onStartLoadingRestorePoint: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onFinishLoadingRestorePoint: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, onCloseModal: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, loadingState: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.oneOf(_reducers_project_state__WEBPACK_IMPORTED_MODULE_7__["LoadingStates"]).isRequired, isShowingProject: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool.isRequired, isModalVisible: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.bool.isRequired, vm: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({ loadProject: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, stop: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired, renderer: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.shape({ draw: prop_types__WEBPACK_IMPORTED_MODULE_3___default.a.func.isRequired }) }).isRequired }; const mapStateToProps = state => ({ projectChanged: state.scratchGui.projectChanged, projectTitle: state.scratchGui.projectTitle, loadingState: state.scratchGui.projectState.loadingState, isShowingProject: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_7__["getIsShowingProject"])(state.scratchGui.projectState.loadingState), isModalVisible: state.scratchGui.modals.restorePointModal, vm: state.scratchGui.vm }); const mapDispatchToProps = dispatch => ({ onStartCreatingRestorePoint: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_5__["showStandardAlert"])('twCreatingRestorePoint')), onFinishCreatingRestorePoint: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_5__["showAlertWithTimeout"])(dispatch, 'twRestorePointSuccess'), onErrorCreatingRestorePoint: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_5__["showAlertWithTimeout"])(dispatch, 'twRestorePointError'), onStartLoadingRestorePoint: loadingState => { dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_6__["openLoadingProject"])()); dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_7__["requestProjectUpload"])(loadingState)); }, onFinishLoadingRestorePoint: (success, loadingState) => { dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_7__["onLoadedProject"])(loadingState, false, success)); dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_6__["closeLoadingProject"])()); dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_8__["setFileHandle"])(null)); }, onCloseModal: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_6__["closeRestorePointModal"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(mapStateToProps, mapDispatchToProps)(TWRestorePointManager))); /***/ }), /***/ "./src/containers/tw-security-manager.jsx": /*!************************************************!*\ !*** ./src/containers/tw-security-manager.jsx ***! \************************************************/ /*! exports provided: default, manuallyTrustExtension, isTrustedExtension, isTrustedExtensionOrigin */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ConnectedSecurityManagerComponent; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "manuallyTrustExtension", function() { return manuallyTrustExtension; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTrustedExtension", function() { return isTrustedExtension; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTrustedExtensionOrigin", function() { return isTrustedExtensionOrigin; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _lib_log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/log */ "./src/lib/log.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _components_tw_security_manager_modal_security_manager_modal_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/tw-security-manager-modal/security-manager-modal.jsx */ "./src/components/tw-security-manager-modal/security-manager-modal.jsx"); /* harmony import */ var _lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/tw-security-manager-constants */ "./src/lib/tw-security-manager-constants.js"); /* harmony import */ var _lib_pm_security_manager_download_util_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/pm-security-manager-download-util.js */ "./src/lib/pm-security-manager-download-util.js"); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } /** * Set of extension URLs that the user has manually trusted to load unsandboxed. */ const extensionsTrustedByUser = new Set(); const manuallyTrustExtension = url => { extensionsTrustedByUser.add(url); }; /** * Trusted URL origins are allowed to load extensions without a sandbox automatically. * @param {string} url URL as a string. * @returns {boolean} True if the extension can is trusted */ const isTrustedExtensionOrigin = url => true || // Local Home or Extensions false // ignore this, just makes copy & paste easier ; /** * Trusted extensions are loaded automatically and without a sandbox. * @param {string} url URL as a string. * @returns {boolean} True if the extension can is trusted */ const isTrustedExtension = url => isTrustedExtensionOrigin(url) || extensionsTrustedByUser.has(url); /** * Set of fetch resource origins that were manually trusted by the user. * @type {Set} */ const fetchOriginsTrustedByUser = new Set(); /** * Set of origins manually trusted by the user for embedding. * @type {Set} */ const embedOriginsTrustedByUser = new Set(); /** * @param {URL} parsed Parsed URL object * @returns {boolean} True if the URL is part of the builtin set of URLs to always trust fetching from. */ const isAlwaysTrustedForFetching = parsed => // If we would trust loading an extension from here, we can trust loading resources too. isTrustedExtension(parsed.href) || true || // Any TurboWarp service such as trampoline parsed.origin === 'https://turbowarp.org' || parsed.origin.endsWith('.turbowarp.org') || parsed.origin.endsWith('.turbowarp.xyz') || // Any PenguinMod service such as projects parsed.origin === 'https://penguinmod.com' || parsed.origin.endsWith('.penguinmod.com') || // GitHub parsed.origin === 'https://raw.githubusercontent.com' || parsed.origin === 'https://gist.githubusercontent.com' || parsed.origin === 'https://api.github.com' || // GitLab API // GitLab Pages allows redirects, so not included here. parsed.origin === 'https://gitlab.com' || // Sourcehut Pages parsed.origin.endsWith('.srht.site') || // Itch parsed.origin.endsWith('.itch.io') || // GameJolt parsed.origin === 'https://api.gamejolt.com' || // httpbin parsed.origin === 'https://httpbin.org' || // ScratchDB parsed.origin === 'https://scratchdb.lefty.one'; const FETCHABLE_PROTOCOLS = ['http:', 'https:', 'data:', 'blob:', 'ws:', 'wss:']; const VISITABLE_PROTOCOLS = [ // The important one we want to exclude is javascript: 'http:', 'https:', 'data:', 'blob:', 'mailto:', 'steam:', 'calculator:']; /** * @param {string} url Original URL string * @param {string[]} protocols List of allowed protocols * @returns {URL|null} A URL object if it is valid and of a known protocol, otherwise null. */ const parseURL = (url, protocols) => { let parsed; try { parsed = new URL(url); } catch (e) { return null; } if (!protocols.includes(parsed.protocol)) { return null; } return parsed; }; let allowedAudio = true; let allowedVideo = true; let allowedReadClipboard = true; let allowedNotify = true; let allowedGeolocation = true; let allowedScreenshotCamera = true; let rememberFetchSitesDecision = true; let rememberFetchSitesAllAllowed = true; let rememberEmbedSitesDecision = true; let rememberEmbedSitesAllAllowed = true; let rememberDownloadDecision = true; let rememberDownloadAllAllowed = true; let rememberLoadingExtensions = true; let rememberLoadingExtensionsInfo = { unsandboxed: true, loaded: true }; /** * A list of developer defined names that are not allowed to ask for unsandboxing. * @type {Set} */ const notAllowedToAskUnsandbox = new Set(); const SECURITY_MANAGER_METHODS = ['getSandboxMode', 'canLoadExtensionFromProject', 'canFetch', 'canOpenWindow', 'canRedirect', 'canRecordAudio', 'canRecordVideo', 'canReadClipboard', 'canNotify', 'canGeolocate', 'canEmbed', 'canUnsandbox', 'canScreenshotCamera', 'canDownload']; class TWSecurityManagerComponent extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_4___default()(this, ['handleAllowed', 'handleDenied', 'projectWillChange']); lodash_bindall__WEBPACK_IMPORTED_MODULE_4___default()(this, SECURITY_MANAGER_METHODS); this.nextModalCallbacks = []; this.modalLocked = false; this.state = { type: null, data: null, callback: null, modalCount: 0 }; } projectWillChange() { rememberFetchSitesDecision = true; rememberFetchSitesAllAllowed = true; rememberEmbedSitesDecision = true; rememberEmbedSitesAllAllowed = true; rememberDownloadDecision = true; rememberDownloadAllAllowed = true; rememberLoadingExtensions = true; rememberLoadingExtensionsInfo = { unsandboxed: true, loaded: true }; } componentDidMount() { const vmSecurityManager = this.props.vm.extensionManager.securityManager; const propsSecurityManager = this.props.securityManager; for (const method of SECURITY_MANAGER_METHODS) { vmSecurityManager[method] = propsSecurityManager[method] || this[method]; } this.props.vm.runtime.on('RUNTIME_DISPOSED', this.projectWillChange); } componentWillUnmount() { this.props.vm.runtime.off('RUNTIME_DISPOSED', this.projectWillChange); } // eslint-disable-next-line valid-jsdoc /** * @returns {Promise<() => Promise>} Resolves with a function that you can call to show the modal. * The resolved function returns a promise that resolves with true if the request was approved. */ async acquireModalLock() { // We need a two-step process for showing a modal so that we don't overwrite or overlap modals, // and so that multiple attempts to fetch resources from the same origin will all be allowed // with just one click. This means that some places have to wait until previous modals are // closed before it knows if it needs to display another modal. if (this.modalLocked) { await new Promise(resolve => { this.nextModalCallbacks.push(resolve); }); } else { this.modalLocked = true; } const releaseLock = () => { if (this.nextModalCallbacks.length) { const nextModalCallback = this.nextModalCallbacks.shift(); nextModalCallback(); } else { this.modalLocked = false; this.setState({ // only clear type in case other data needs to be accessed type: null }); } }; const showModal = async (type, data) => { const result = await new Promise(resolve => { this.setState(oldState => ({ type, data, callback: resolve, modalCount: oldState.modalCount + 1 })); }); releaseLock(); return result; }; return { showModal, releaseLock }; } handleAllowed() { this.state.callback(true); } handleDenied() { this.state.callback(false); } /** * @param {string} url The extension's URL * @returns {string} The VM worker mode to use */ getSandboxMode(url) { if (isTrustedExtension(url)) { _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].info("Loading extension ".concat(url, " unsandboxed")); return 'unsandboxed'; } return 'iframe'; } handleChangeUnsandboxed(e) { const checked = e.target.checked; this.setState(oldState => ({ data: _objectSpread(_objectSpread({}, oldState.data), {}, { unsandboxed: checked }) })); } handleChangeRemember(e) { const checked = e.target.checked; this.setState(oldState => ({ data: _objectSpread(_objectSpread({}, oldState.data), {}, { remember: checked }) })); } /** * @param {string} url The extension's URL * @returns {Promise} Whether the extension can be loaded */ async canLoadExtensionFromProject(url) { if (isTrustedExtension(url)) { _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].info("Loading extension ".concat(url, " automatically")); return true; } const { showModal, releaseLock } = await this.acquireModalLock(); if (rememberLoadingExtensions) { releaseLock(); if (!rememberLoadingExtensionsInfo.loaded) { _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].info('An unseen extension was automatically not loaded'); return false; } if (rememberLoadingExtensionsInfo.unsandboxed) { _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].warn('An unseen extension was automatically loaded unsandboxed'); manuallyTrustExtension(url); } return true; } // we allow all urls to be unsandboxed. // its very likely that people would load any file unsandboxed anyways, theres no safety in blocking it for urls only. // when a file is unsandboxed it can request any website anyways, so its not like its preventing remote updates either. const allowed = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].LoadExtension, { url, unsandboxed: true, remember: false, onChangeUnsandboxed: this.handleChangeUnsandboxed.bind(this), onChangeRemember: this.handleChangeRemember.bind(this) }); if (this.state.data.unsandboxed) { manuallyTrustExtension(url); } if (this.state.data.remember) { rememberLoadingExtensions = true; rememberLoadingExtensionsInfo = { unsandboxed: this.state.data.unsandboxed, loaded: allowed }; } return allowed; } /** * @param {string} url The resource to fetch * @returns {Promise} True if the resource is allowed to be fetched */ async canFetch(url) { const parsed = parseURL(url, FETCHABLE_PROTOCOLS); if (!parsed) { return false; } if (isAlwaysTrustedForFetching(parsed)) { return true; } const { showModal, releaseLock } = await this.acquireModalLock(); const origin = parsed.protocol === 'http:' || parsed.protocol === 'https:' ? parsed.origin : null; if (rememberFetchSitesDecision) { releaseLock(); if (rememberFetchSitesAllAllowed) { _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].warn(url, "was automatically fetched without prompt"); } else { _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].info(url, "was automatically denied without prompt"); } return rememberFetchSitesAllAllowed; } if (origin && fetchOriginsTrustedByUser.has(origin)) { releaseLock(); return true; } const allowed = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].Fetch, { url, remember: false, onChangeRemember: this.handleChangeRemember.bind(this) }); if (allowed) { fetchOriginsTrustedByUser.add(origin); } if (this.state.data.remember) { rememberFetchSitesDecision = true; rememberFetchSitesAllAllowed = allowed; _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].info("Remembering to allow all sites?", rememberFetchSitesAllAllowed); } return allowed; } /** * @param {string} url The website to open * @returns {Promise} True if the website can be opened */ async canOpenWindow(url) { const parsed = parseURL(url, VISITABLE_PROTOCOLS); if (!parsed) { return false; } const { showModal } = await this.acquireModalLock(); return showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].OpenWindow, { url }); } /** * @param {string} url The website to redirect to * @returns {Promise} True if the website can be redirected to */ async canRedirect(url) { const parsed = parseURL(url, VISITABLE_PROTOCOLS); if (!parsed) { return false; } const { showModal } = await this.acquireModalLock(); return showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].Redirect, { url }); } /** * @returns {Promise} True if audio can be recorded */ async canRecordAudio() { if (!allowedAudio) { const { showModal } = await this.acquireModalLock(); allowedAudio = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].RecordAudio); } return allowedAudio; } /** * @returns {Promise} True if video can be recorded */ async canRecordVideo() { if (!allowedVideo) { const { showModal } = await this.acquireModalLock(); allowedVideo = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].RecordVideo); } return allowedVideo; } /** * @returns {Promise} True if the clipboard can be read */ async canReadClipboard() { if (!allowedReadClipboard) { const { showModal } = await this.acquireModalLock(); allowedReadClipboard = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].ReadClipboard); } return allowedReadClipboard; } /** * @returns {Promise} True if the notifications are allowed */ async canNotify() { if (!allowedNotify) { const { showModal } = await this.acquireModalLock(); allowedNotify = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].Notify); } return allowedNotify; } /** * @returns {Promise} True if geolocation is allowed. */ async canGeolocate() { if (!allowedGeolocation) { const { showModal } = await this.acquireModalLock(); allowedGeolocation = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].Geolocate); } return allowedGeolocation; } /** * @returns {Promise} True if screenshotting the camera is allowed. */ async canScreenshotCamera() { if (!allowedScreenshotCamera) { const { showModal } = await this.acquireModalLock(); allowedScreenshotCamera = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].ScreenshotCamera); } return allowedScreenshotCamera; } /** * @returns {Promise} True if unsandboxing the provided extension name is allowed. */ async canUnsandbox(name) { if (notAllowedToAskUnsandbox.has(name)) return false; const { showModal } = await this.acquireModalLock(); const allowedUnsandbox = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].Unsandbox, { name: name || "" }); if (!allowedUnsandbox) { notAllowedToAskUnsandbox.add(name); } return allowedUnsandbox; } /** * @param {string} url Frame URL * @returns {Promise} True if embed is allowed. */ async canEmbed(url) { const parsed = parseURL(url, FETCHABLE_PROTOCOLS); if (!parsed) { return false; } const origin = parsed.protocol === 'http:' || parsed.protocol === 'https:' ? parsed.origin : null; const { showModal, releaseLock } = await this.acquireModalLock(); if (rememberEmbedSitesDecision) { releaseLock(); if (rememberEmbedSitesAllAllowed) { _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].warn(url, "was automatically embedded without prompt"); } else { _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].info(url, "was automatically embed denied without prompt"); } return rememberEmbedSitesAllAllowed; } if (origin && embedOriginsTrustedByUser.has(origin)) { releaseLock(); return true; } const allowed = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].Embed, { url, remember: false, onChangeRemember: this.handleChangeRemember.bind(this) }); if (origin && allowed) { embedOriginsTrustedByUser.add(origin); } if (this.state.data.remember) { rememberEmbedSitesDecision = true; rememberEmbedSitesAllAllowed = allowed; _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].info("Remembering to allow embedding all sites?", rememberEmbedSitesAllAllowed); } return allowed; } /** * @param {string} url URL to download * @param {string} name Name to download as * @returns {Promise} True if allowed */ async canDownload(url, name) { const parsed = parseURL(url, FETCHABLE_PROTOCOLS); if (!parsed) { return false; } // pm: We only prompt the user for known executables. // See src/lib/pm-security-manager-download-util.js for details. if (!Object(_lib_pm_security_manager_download_util_js__WEBPACK_IMPORTED_MODULE_7__["isDefinitelyExecutable"])(name)) { return true; } const { showModal, releaseLock } = await this.acquireModalLock(); if (rememberDownloadDecision) { releaseLock(); if (rememberDownloadAllAllowed) { _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].warn(url, "was automatically downloaded without prompt"); } else { _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].info(url, "was automatically download denied without prompt"); } return rememberDownloadAllAllowed; } const allowed = await showModal(_lib_tw_security_manager_constants__WEBPACK_IMPORTED_MODULE_6__["default"].Download, { url, name, remember: false, onChangeRemember: this.handleChangeRemember.bind(this) }); if (this.state.data.remember) { rememberDownloadDecision = true; rememberDownloadAllAllowed = allowed; _lib_log__WEBPACK_IMPORTED_MODULE_3__["default"].info("Remembering to allow downloading all files?", rememberDownloadAllAllowed); } return allowed; } render() { if (this.state.type) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_tw_security_manager_modal_security_manager_modal_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { type: this.state.type, data: this.state.data, onAllowed: this.handleAllowed, onDenied: this.handleDenied, key: this.state.modalCount }); } return null; } } TWSecurityManagerComponent.propTypes = { vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ runtime: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any.isRequired, extensionManager: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ securityManager: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape(SECURITY_MANAGER_METHODS.reduce((obj, method) => { obj[method] = prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired; return obj; }, {})).isRequired }).isRequired }).isRequired, securityManager: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape(Object.fromEntries(SECURITY_MANAGER_METHODS.map(i => [i, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]))) }; TWSecurityManagerComponent.defaultProps = { securityManager: {} }; const mapStateToProps = state => ({ vm: state.scratchGui.vm }); const mapDispatchToProps = () => ({}); const ConnectedSecurityManagerComponent = Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(TWSecurityManagerComponent); /***/ }), /***/ "./src/containers/tw-settings-modal.jsx": /*!**********************************************!*\ !*** ./src/containers/tw-settings-modal.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _components_tw_settings_modal_settings_modal_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/tw-settings-modal/settings-modal.jsx */ "./src/components/tw-settings-modal/settings-modal.jsx"); /* harmony import */ var _reducers_custom_stage_size__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/custom-stage-size */ "./src/reducers/custom-stage-size.js"); const _excluded = ["onClose", "vm"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["defineMessages"])({ newFramerate: { "id": "tw.menuBar.newFramerate", "defaultMessage": "New framerate:" } }); class UsernameModal extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleFramerateChange', 'handleCustomizeFramerate', 'handleHighQualityPenChange', 'handleInterpolationChange', 'handleInfiniteClonesChange', 'handleRemoveFencingChange', 'handleRemoveLimitsChange', 'handleWarpTimerChange', 'handleStageWidthChange', 'handleStageHeightChange', 'handleStagePresetUsed', 'handleDisableCompilerChange', 'handleStoreProjectOptions', 'handleEnableDangerousOptimizationsChange', 'handleDisableOffscreenRenderingChange']); } handleFramerateChange(e) { this.props.vm.setFramerate(e.target.checked ? 60 : 30); } async handleCustomizeFramerate() { // prompt() returns Promise in desktop app // eslint-disable-next-line no-alert const newFramerate = await prompt(this.props.intl.formatMessage(messages.newFramerate), this.props.framerate); const parsed = parseFloat(newFramerate); if (isFinite(parsed)) { this.props.vm.setFramerate(parsed); } } handleHighQualityPenChange(e) { this.props.vm.renderer.setUseHighQualityRender(e.target.checked); } handleInterpolationChange(e) { this.props.vm.setInterpolation(e.target.checked); } handleInfiniteClonesChange(e) { this.props.vm.setRuntimeOptions({ maxClones: e.target.checked ? Infinity : 300 }); } handleRemoveFencingChange(e) { this.props.vm.setRuntimeOptions({ fencing: !e.target.checked }); } handleRemoveLimitsChange(e) { this.props.vm.setRuntimeOptions({ miscLimits: !e.target.checked }); } handleEnableDangerousOptimizationsChange(e) { this.props.vm.setRuntimeOptions({ dangerousOptimizations: e.target.checked }); } handleDisableOffscreenRenderingChange(e) { this.props.vm.setRuntimeOptions({ disableOffscreenRendering: e.target.checked }); } handleWarpTimerChange(e) { this.props.vm.setCompilerOptions({ warpTimer: e.target.checked }); } handleDisableCompilerChange(e) { this.props.vm.setCompilerOptions({ enabled: !e.target.checked }); } handleStageWidthChange(value) { this.props.vm.setStageSize(value, this.props.customStageSize.height); } handleStageHeightChange(value) { this.props.vm.setStageSize(this.props.customStageSize.width, value); } handleStagePresetUsed(widescreen) { switch (widescreen) { case 1: this.props.vm.setStageSize(640, 360); break; case 2: this.props.vm.setStageSize(360, 360); break; default: this.props.vm.setStageSize(480, 360); break; } } handleStoreProjectOptions() { this.props.vm.storeProjectOptions(); } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ onClose, vm /* eslint-enable no-unused-vars */ } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_tw_settings_modal_settings_modal_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], _extends({ onClose: this.props.onClose, onFramerateChange: this.handleFramerateChange, onCustomizeFramerate: this.handleCustomizeFramerate, onHighQualityPenChange: this.handleHighQualityPenChange, onInterpolationChange: this.handleInterpolationChange, onInfiniteClonesChange: this.handleInfiniteClonesChange, onRemoveFencingChange: this.handleRemoveFencingChange, onRemoveLimitsChange: this.handleRemoveLimitsChange, onEnableDangerousOptimizationsChange: this.handleEnableDangerousOptimizationsChange, onDisableOffscreenRenderingChange: this.handleDisableOffscreenRenderingChange, onWarpTimerChange: this.handleWarpTimerChange, onStageWidthChange: this.handleStageWidthChange, onStageHeightChange: this.handleStageHeightChange, onStagePresetUsed: this.handleStagePresetUsed, onDisableCompilerChange: this.handleDisableCompilerChange, stageWidth: this.props.customStageSize.width, stageHeight: this.props.customStageSize.height, customStageSizeEnabled: this.props.customStageSize.width !== _reducers_custom_stage_size__WEBPACK_IMPORTED_MODULE_7__["defaultStageSize"].width || this.props.customStageSize.height !== _reducers_custom_stage_size__WEBPACK_IMPORTED_MODULE_7__["defaultStageSize"].height, onStoreProjectOptions: this.handleStoreProjectOptions }, props)); } } UsernameModal.propTypes = { intl: react_intl__WEBPACK_IMPORTED_MODULE_2__["intlShape"], onClose: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ renderer: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ setUseHighQualityRender: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func }), setFramerate: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, setCompilerOptions: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, setInterpolation: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, setRuntimeOptions: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, setStageSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, storeProjectOptions: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func }), isEmbedded: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, framerate: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, highQualityPen: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, interpolation: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, infiniteClones: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, removeFencing: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, removeLimits: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, dangerousOptimizations: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, warpTimer: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, customStageSize: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.shape({ width: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number, height: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number }), disableCompiler: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool }; const mapStateToProps = state => ({ vm: state.scratchGui.vm, isEmbedded: state.scratchGui.mode.isEmbedded, framerate: state.scratchGui.tw.framerate, highQualityPen: state.scratchGui.tw.highQualityPen, interpolation: state.scratchGui.tw.interpolation, infiniteClones: state.scratchGui.tw.runtimeOptions.maxClones === Infinity, removeFencing: !state.scratchGui.tw.runtimeOptions.fencing, removeLimits: !state.scratchGui.tw.runtimeOptions.miscLimits, disableOffscreenRendering: state.scratchGui.tw.runtimeOptions.disableOffscreenRendering, dangerousOptimizations: state.scratchGui.tw.runtimeOptions.dangerousOptimizations, warpTimer: state.scratchGui.tw.compilerOptions.warpTimer, customStageSize: state.scratchGui.customStageSize, disableCompiler: !state.scratchGui.tw.compilerOptions.enabled }); const mapDispatchToProps = dispatch => ({ onClose: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_5__["closeSettingsModal"])()) }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps, mapDispatchToProps)(UsernameModal))); /***/ }), /***/ "./src/containers/tw-username-modal.jsx": /*!**********************************************!*\ !*** ./src/containers/tw-username-modal.jsx ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js"); /* harmony import */ var _components_tw_username_modal_username_modal_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/tw-username-modal/username-modal.jsx */ "./src/components/tw-username-modal/username-modal.jsx"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _lib_tw_username__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/tw-username */ "./src/lib/tw-username.js"); /* harmony import */ var _lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/isScratchDesktop */ "./src/lib/isScratchDesktop.js"); class UsernameModal extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['handleKeyPress', 'handleFocus', 'handleOk', 'handleCancel', 'handleChange', 'handleReset']); this.state = { value: this.props.username, valueValid: !this.props.usernameInvalid }; } componentDidUpdate(prevProps) { if (prevProps.usernameLoggedIn !== this.props.usernameLoggedIn) { this.setState({ value: this.props.username, valueValid: true }); } } handleKeyPress(event) { if (this.props.usernameLoggedIn) return; // user is logged in if (event.key === 'Enter' && this.state.valueValid) { this.handleOk(); } } handleFocus(event) { event.target.select(); } handleOk() { if (this.props.usernameLoggedIn) return; // user is logged in this.props.onSetUsername(this.state.value); this.props.onCloseUsernameModal(); } handleCancel() { this.props.onCloseUsernameModal(); } handleChange(e) { if (this.props.usernameLoggedIn) return; // user is logged in this.setState({ value: e.target.value, valueValid: e.target.checkValidity() }); } handleReset() { if (this.props.usernameLoggedIn) return; // user is logged in const randomUsername = Object(_lib_isScratchDesktop__WEBPACK_IMPORTED_MODULE_8__["default"])() ? 'player' : Object(_lib_tw_username__WEBPACK_IMPORTED_MODULE_7__["generateRandomUsername"])(); this.props.onCloseUsernameModal(); this.props.onSetUsername(randomUsername); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_tw_username_modal_username_modal_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { mustChangeUsername: this.props.usernameInvalid, value: this.state.value, valueValid: this.state.valueValid, usernameLoggedIn: this.props.usernameLoggedIn, onKeyPress: this.handleKeyPress, onFocus: this.handleFocus, onOk: this.handleOk, onCancel: this.handleCancel, onChange: this.handleChange, onReset: this.handleReset }); } } UsernameModal.propTypes = { onCloseUsernameModal: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onSetUsername: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, username: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, usernameInvalid: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, usernameLoggedIn: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool }; const mapStateToProps = state => ({ username: state.scratchGui.tw.username, usernameInvalid: state.scratchGui.tw.usernameInvalid, usernameLoggedIn: state.scratchGui.tw.usernameLoggedIn }); const mapDispatchToProps = dispatch => ({ onCloseUsernameModal: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_6__["closeUsernameModal"])()), onSetUsername: username => { dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_4__["setUsername"])(username)); dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_4__["setUsernameInvalid"])(false)); } }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(UsernameModal)); /***/ }), /***/ "./src/containers/variables-tab.jsx": /*!******************************************!*\ !*** ./src/containers/variables-tab.jsx ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _components_variables_tab_variables_tab_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/variables-tab/variables-tab.jsx */ "./src/components/variables-tab/variables-tab.jsx"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/error-boundary-hoc.jsx */ "./src/lib/error-boundary-hoc.jsx"); /* harmony import */ var _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/editor-tab */ "./src/reducers/editor-tab.js"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } class VariablesTab extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_2___default()(this, ['_fullReload', '_quickReload', 'fullReload', 'quickReload', 'handleShowLarge', 'handleClickVariableName', 'handleClickVariableValue', 'handleEditVariableName', 'handleEditVariableValue', 'handleTypeVariableName', 'handleTypeVariableValue', 'wasSubmit']); this.state = { globalVariables: [], localVariables: [], globalMapping: [], localMapping: [], showLargeValue: {}, editingVariableId: '', editingVariableInput: '', editingVariableEditName: '', editingVariableEditValue: '' }; } componentDidUpdate(prevProps) { if (prevProps.editingTarget !== this.props.editingTarget) { this.fullReload(); } } componentDidMount() { this.props.vm.runtime.on('RUNTIME_STEP_START', this.quickReload); this.props.vm.runtime.on('PROJECT_LOADED', this.fullReload); this.props.vm.runtime.on('TOOLBOX_EXTENSIONS_NEED_UPDATE', this.fullReload); this.fullReload(); } componentWillUnmount() { this.props.vm.runtime.off('RUNTIME_STEP_START', this.quickReload); this.props.vm.runtime.off('PROJECT_LOADED', this.fullReload); this.props.vm.runtime.off('TOOLBOX_EXTENSIONS_NEED_UPDATE', this.fullReload); } handleShowLarge(varId) { const newObj = this.state.showLargeValue; newObj[varId] = true; this.setState({ showLargeValue: newObj }); } _fullReload() { const vm = this.props.vm; const id = this.props.editingTarget; const editingTarget = vm.runtime.getTargetById(id); const stage = vm.runtime.getTargetForStage(); if (!editingTarget) return; if (!stage) return; // TODO: Support custom variable types created by extensions. if (editingTarget.isStage) { this.setState({ localVariables: [], localMapping: [] }); } else { const variables = Object.values(editingTarget.variables).filter(i => i.type === "" || i.type === "list"); this.setState({ localVariables: variables, localMapping: structuredClone(variables) }); } const globalVariables = Object.values(stage.variables).filter(i => i.type === "" || i.type === "list"); this.setState({ globalVariables: globalVariables, globalMapping: structuredClone(globalVariables) }); } _quickReload() { // TODO: Lists are not properly accounted for. for (const prevVariable of this.state.localMapping) { const newVariable = this.state.localVariables.find(v => v.id === prevVariable.id); if (!newVariable) { return this.fullReload(); } if (prevVariable.value !== newVariable.value || prevVariable.name !== newVariable.name) { return this.fullReload(); } } for (const prevVariable of this.state.globalMapping) { const newVariable = this.state.globalVariables.find(v => v.id === prevVariable.id); if (!newVariable) { return this.fullReload(); } if (prevVariable.value !== newVariable.value || prevVariable.name !== newVariable.name) { return this.fullReload(); } } } fullReload() { try { this._fullReload(...arguments); } catch (e) { console.log(e); } } quickReload() { try { this._quickReload(...arguments); } catch (e) { console.log(e); } } wasSubmit(event) { if (event.type !== 'keydown') return false; if (event.target.nodeName !== 'INPUT') return false; return event.key === 'Enter'; } handleClickVariableName(variable) { this.setState({ editingVariableId: variable.id, editingVariableInput: 'name', editingVariableEditName: variable.name }); } handleClickVariableValue(variable) { this.setState({ editingVariableId: variable.id, editingVariableInput: 'value', editingVariableEditValue: variable.type === 'list' ? variable.value.join('\n') : variable.value }); } handleEditVariableName(event, variable) { event.preventDefault(); const vm = this.props.vm; const workspace = Blockly.getMainWorkspace(); const variableId = this.state.editingVariableId; if (!variableId) return; if (variableId !== variable.id) return; const target = vm.runtime.targets.find(t => t.variables[variableId]); if (!target) return; let newName = this.state.editingVariableEditName; if (!newName.trim()) return; const CLOUD_SYMBOL = "☁"; const CLOUD_PREFIX = CLOUD_SYMBOL + " "; if (variable.isCloud) { if (newName.startsWith(CLOUD_SYMBOL)) { if (!newName.startsWith(CLOUD_PREFIX)) { // There isn't a space between the cloud symbol and the name, so add one. newName = newName.substring(0, 1) + " " + newName.substring(1); } } else { newName = CLOUD_PREFIX + newName; } } let nameAlreadyUsed = false; if (target.isStage) { // Global variables must not conflict with any global variables or local variables in any sprite. const existingNames = vm.runtime.getAllVarNamesOfType(variable.type); nameAlreadyUsed = existingNames.includes(newName); } else { // Local variables must not conflict with any global variables or local variables in this sprite. nameAlreadyUsed = !!workspace.getVariable(newName, variable.type); } if (nameAlreadyUsed) return; workspace.renameVariableById(variable.id, newName); this.setState({ editingVariableId: '', editingVariableInput: '' }); this.fullReload(); event.target.blur(); } handleEditVariableValue(event, variable) { event.preventDefault(); const vm = this.props.vm; const variableId = this.state.editingVariableId; if (!variableId) return; if (variableId !== variable.id) return; const target = vm.runtime.targets.find(t => t.variables[variableId]); if (!target) return; const newValue = this.state.editingVariableEditValue; if (variable.type === "list") { const makeSureNotEmpty = newValue === '' ? [] : newValue.split("\n"); vm.setVariableValue(target.id, variableId, makeSureNotEmpty); } else { vm.setVariableValue(target.id, variableId, newValue); } this.setState({ editingVariableId: '', editingVariableInput: '' }); this.fullReload(); event.target.blur(); } handleTypeVariableName(event, variable) { const submitted = this.wasSubmit(event); if (submitted) return this.handleEditVariableName(event, variable); this.setState({ editingVariableEditName: event.target.value }); } handleTypeVariableValue(event, variable) { const submitted = this.wasSubmit(event); if (submitted) return this.handleEditVariableValue(event, variable); this.setState({ editingVariableEditValue: event.target.value }); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_variables_tab_variables_tab_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], _extends({}, this.props, { globalVariables: this.state.globalVariables, localVariables: this.state.localVariables, showLargeValue: this.state.showLargeValue, onClickShowLarge: this.handleShowLarge, editingVariableId: this.state.editingVariableId, editingVariableInput: this.state.editingVariableInput, editingVariableEditName: this.state.editingVariableEditName, editingVariableEditValue: this.state.editingVariableEditValue, onClickVariableName: this.handleClickVariableName, onClickVariableValue: this.handleClickVariableValue, onEditVariableName: this.handleEditVariableName, onEditVariableValue: this.handleEditVariableValue, onTypeVariableName: this.handleTypeVariableName, onTypeVariableValue: this.handleTypeVariableValue })); } } VariablesTab.propTypes = { editingTarget: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, sprites: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.any, intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"], isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a) }; const mapStateToProps = state => ({ isRtl: state.locales.isRtl, editingTarget: state.scratchGui.targets.editingTarget, sprites: state.scratchGui.targets.sprites }); const mapDispatchToProps = dispatch => ({ onActivateVariablesTab: () => dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_8__["activateTab"])(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_8__["VARIABLES_TAB_INDEX"])) }); /* harmony default export */ __webpack_exports__["default"] = (Object(_lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_7__["default"])('Variables Tab')(Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_6__["connect"])(mapStateToProps, mapDispatchToProps)(VariablesTab)))); /***/ }), /***/ "./src/containers/watermark.jsx": /*!**************************************!*\ !*** ./src/containers/watermark.jsx ***! \**************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.omit */ "./node_modules/lodash.omit/index.js"); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_omit__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _lib_throttled_property_hoc_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/throttled-property-hoc.jsx */ "./src/lib/throttled-property-hoc.jsx"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _lib_storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/storage */ "./src/lib/storage.js"); /* harmony import */ var _lib_get_costume_url__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/get-costume-url */ "./src/lib/get-costume-url.js"); /* harmony import */ var _components_watermark_watermark_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/watermark/watermark.jsx */ "./src/components/watermark/watermark.jsx"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } class Watermark extends react__WEBPACK_IMPORTED_MODULE_3___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['getCostumeData']); } getCostumeData() { if (!this.props.asset) return null; return Object(_lib_get_costume_url__WEBPACK_IMPORTED_MODULE_8__["default"])(this.props.asset); } render() { const componentProps = lodash_omit__WEBPACK_IMPORTED_MODULE_1___default()(this.props, ['asset', 'vm']); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_components_watermark_watermark_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], _extends({ costumeURL: this.getCostumeData() }, componentProps)); } } Watermark.propTypes = { asset: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(_lib_storage__WEBPACK_IMPORTED_MODULE_7__["default"].Asset), vm: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_6___default.a).isRequired }; const mapStateToProps = state => { const targets = state.scratchGui.targets; const currentTargetId = targets.editingTarget; let asset; if (currentTargetId) { if (targets.stage.id === currentTargetId) { asset = targets.stage.costume.asset; } else if (targets.sprites.hasOwnProperty(currentTargetId)) { const currentSprite = targets.sprites[currentTargetId]; asset = currentSprite.costume.asset; } } return { vm: state.scratchGui.vm, asset: asset }; }; const ConnectedComponent = Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps)(Object(_lib_throttled_property_hoc_jsx__WEBPACK_IMPORTED_MODULE_5__["default"])('asset', 500)(Watermark)); /* harmony default export */ __webpack_exports__["default"] = (ConnectedComponent); /***/ }), /***/ "./src/css/confirm-dialog.css": /*!************************************!*\ !*** ./src/css/confirm-dialog.css ***! \************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(/*! !../../node_modules/css-loader??ref--5-1!../../node_modules/postcss-loader/src??postcss!./confirm-dialog.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/css/confirm-dialog.css"); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(/*! ../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ "./src/lib/alerts/index.jsx": /*!**********************************!*\ !*** ./src/lib/alerts/index.jsx ***! \**********************************/ /*! exports provided: default, AlertLevels, AlertTypes */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return alerts; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AlertLevels", function() { return AlertLevels; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AlertTypes", function() { return AlertTypes; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var keymirror__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! keymirror */ "./node_modules/keymirror/index.js"); /* harmony import */ var keymirror__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(keymirror__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _assets_icon_success_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../assets/icon--success.svg */ "./src/lib/assets/icon--success.svg"); /* harmony import */ var _assets_icon_success_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_assets_icon_success_svg__WEBPACK_IMPORTED_MODULE_3__); const AlertTypes = keymirror__WEBPACK_IMPORTED_MODULE_2___default()({ STANDARD: null, EXTENSION: null, INLINE: null }); const AlertLevels = { SUCCESS: 'success', INFO: 'info', WARN: 'warn' }; const alerts = [{ alertId: 'createSuccess', alertType: AlertTypes.STANDARD, clearList: ['createSuccess', 'creating', 'createCopySuccess', 'creatingCopy', 'createRemixSuccess', 'creatingRemix', 'saveSuccess', 'saving'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "New project created.", id: "gui.alerts.createsuccess" }), iconURL: _assets_icon_success_svg__WEBPACK_IMPORTED_MODULE_3___default.a, level: AlertLevels.SUCCESS, maxDisplaySecs: 5 }, { alertId: 'createCopySuccess', alertType: AlertTypes.STANDARD, clearList: ['createSuccess', 'creating', 'createCopySuccess', 'creatingCopy', 'createRemixSuccess', 'creatingRemix', 'saveSuccess', 'saving'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Project saved as a copy.", id: "gui.alerts.createcopysuccess" }), iconURL: _assets_icon_success_svg__WEBPACK_IMPORTED_MODULE_3___default.a, level: AlertLevels.SUCCESS, maxDisplaySecs: 5 }, { alertId: 'createRemixSuccess', alertType: AlertTypes.STANDARD, clearList: ['createSuccess', 'creating', 'createCopySuccess', 'creatingCopy', 'createRemixSuccess', 'creatingRemix', 'saveSuccess', 'saving'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Project saved as a remix.", id: "gui.alerts.createremixsuccess" }), iconURL: _assets_icon_success_svg__WEBPACK_IMPORTED_MODULE_3___default.a, level: AlertLevels.SUCCESS, maxDisplaySecs: 5 }, { alertId: 'creating', alertType: AlertTypes.STANDARD, clearList: ['createSuccess', 'creating', 'createCopySuccess', 'creatingCopy', 'createRemixSuccess', 'creatingRemix', 'saveSuccess', 'saving'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Creating new\u2026", id: "gui.alerts.creating" }), iconSpinner: true, level: AlertLevels.SUCCESS }, { alertId: 'creatingCopy', alertType: AlertTypes.STANDARD, clearList: ['createSuccess', 'creating', 'createCopySuccess', 'creatingCopy', 'createRemixSuccess', 'creatingRemix', 'saveSuccess', 'saving'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Copying project\u2026", id: "gui.alerts.creatingCopy" }), iconSpinner: true, level: AlertLevels.SUCCESS }, { alertId: 'creatingRemix', alertType: AlertTypes.STANDARD, clearList: ['createSuccess', 'creating', 'createCopySuccess', 'creatingCopy', 'createRemixSuccess', 'creatingRemix', 'saveSuccess', 'saving'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Remixing project\u2026", id: "gui.alerts.creatingRemix" }), iconSpinner: true, level: AlertLevels.SUCCESS }, { alertId: 'creatingError', clearList: ['createSuccess', 'creating', 'createCopySuccess', 'creatingCopy', 'createRemixSuccess', 'creatingRemix', 'saveSuccess', 'saving'], closeButton: true, content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Could not create the project. Please try again!", id: "gui.alerts.creatingError" }), level: AlertLevels.WARN }, { alertId: 'savingError', clearList: ['createSuccess', 'creating', 'createCopySuccess', 'creatingCopy', 'createRemixSuccess', 'creatingRemix', 'saveSuccess', 'saving'], showDownload: true, // showSaveNow: true, closeButton: true, content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Project could not save.", id: "gui.alerts.savingError" }), level: AlertLevels.WARN }, { alertId: 'saveSuccess', alertType: AlertTypes.INLINE, clearList: ['saveSuccess', 'saving', 'savingError', 'twSaveToDiskSuccess', 'twCreatingRestorePoint', 'twRestorePointSuccess', 'twRestorePointError'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Project saved.", id: "gui.alerts.savesuccess" }), iconURL: _assets_icon_success_svg__WEBPACK_IMPORTED_MODULE_3___default.a, level: AlertLevels.SUCCESS, maxDisplaySecs: 3 }, { alertId: 'twSaveToDiskSuccess', alertType: AlertTypes.INLINE, clearList: ['saveSuccess', 'saving', 'savingError', 'twCreatingRestorePoint', 'twRestorePointSuccess', 'twRestorePointError'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Saved to your computer.", id: "tw.alerts.savedToDisk" }), iconURL: _assets_icon_success_svg__WEBPACK_IMPORTED_MODULE_3___default.a, level: AlertLevels.SUCCESS, maxDisplaySecs: 3 }, { alertId: 'saving', alertType: AlertTypes.INLINE, clearList: ['saveSuccess', 'saving', 'savingError', 'twSaveToDiskSuccess', 'twCreatingRestorePoint', 'twRestorePointSuccess', 'twRestorePointError'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Saving project\u2026", id: "gui.alerts.saving" }), iconSpinner: true, level: AlertLevels.INFO }, { alertId: 'twCreatingRestorePoint', alertType: AlertTypes.INLINE, clearList: ['twRestorePointSuccess', 'twRestorePointError'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Creating restore point\u2026", id: "tw.alerts.creatingRestorePoint" }), iconSpinner: true, level: AlertLevels.INFO }, { alertId: 'twRestorePointSuccess', alertType: AlertTypes.INLINE, clearList: ['twCreatingRestorePoint', 'twRestorePointError'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Access restore points in \"File\"" // eslint-disable-next-line max-len , id: "tw.alerts.restorePointSuccess" }), iconURL: _assets_icon_success_svg__WEBPACK_IMPORTED_MODULE_3___default.a, level: AlertLevels.SUCCESS, maxDisplaySecs: 3 }, { alertId: 'twRestorePointError', alertType: AlertTypes.INLINE, clearList: ['twCreatingRestorePoint', 'twRestorePointSuccess'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Could not create restore point" // eslint-disable-next-line max-len , id: "tw.alerts.restorePointError" }), iconURL: _assets_icon_success_svg__WEBPACK_IMPORTED_MODULE_3___default.a, level: AlertLevels.WARN, maxDisplaySecs: 5 }, { alertId: 'cloudInfo', alertType: AlertTypes.STANDARD, clearList: ['cloudInfo'], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Please note, cloud variables only support numbers, not letters or symbols. {learnMoreLink}" // eslint-disable-line max-len , id: "gui.alerts.cloudInfo", values: { learnMoreLink: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { href: "https://scratch.mit.edu/info/faq/#clouddata", rel: "noopener noreferrer", target: "_blank" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Learn more.", id: "gui.alerts.cloudInfoLearnMore" })) } }), closeButton: true, level: AlertLevels.SUCCESS, maxDisplaySecs: 15 }, { alertId: 'importingAsset', alertType: AlertTypes.STANDARD, clearList: [], content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Importing\u2026", id: "gui.alerts.importing" }), iconSpinner: true, level: AlertLevels.SUCCESS }]; /***/ }), /***/ "./src/lib/analytics.js": /*!******************************!*\ !*** ./src/lib/analytics.js ***! \******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); const GoogleAnalytics = { // Disable Scratch's analytics event() {} }; /* harmony default export */ __webpack_exports__["default"] = (GoogleAnalytics); /***/ }), /***/ "./src/lib/app-state-hoc.jsx": /*!***********************************!*\ !*** ./src/lib/app-state-hoc.jsx ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/index.js"); /* harmony import */ var _connected_intl_provider_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./connected-intl-provider.jsx */ "./src/lib/connected-intl-provider.jsx"); /* harmony import */ var _addons_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../addons/hooks */ "./src/addons/hooks.js"); /* harmony import */ var _reducers_locales__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/locales */ "./src/reducers/locales.js"); /* harmony import */ var _reducers_mode_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/mode.js */ "./src/reducers/mode.js"); /* harmony import */ var _turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @turbowarp/scratch-l10n */ "./node_modules/@turbowarp/scratch-l10n/src/index.js"); /* harmony import */ var _detect_locale__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./detect-locale */ "./src/lib/detect-locale.js"); const _excluded = ["isFullScreen", "isPlayerOnly", "showTelemetryModal"]; function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux__WEBPACK_IMPORTED_MODULE_3__["compose"]; /* * Higher Order Component to provide redux state. If an `intl` prop is provided * it will override the internal `intl` redux state * @param {React.Component} WrappedComponent - component to provide state for * @param {boolean} localesOnly - only provide the locale state, not everything * required by the GUI. Used to exclude excess state when only rendering modals, not the GUI. * @returns {React.Component} component with redux and intl state provided */ const AppStateHOC = function AppStateHOC(WrappedComponent, localesOnly) { class AppStateWrapper extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); let initialState = {}; let reducers = {}; let enhancer; let initializedLocales = _reducers_locales__WEBPACK_IMPORTED_MODULE_6__["localesInitialState"]; const locale = Object(_detect_locale__WEBPACK_IMPORTED_MODULE_9__["detectLocale"])(Object.keys(_turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_8__["default"])); if (locale !== 'en') { initializedLocales = Object(_reducers_locales__WEBPACK_IMPORTED_MODULE_6__["initLocale"])(initializedLocales, locale); } if (localesOnly) { // Used for instantiating minimal state for the unsupported // browser modal reducers = { locales: _reducers_locales__WEBPACK_IMPORTED_MODULE_6__["default"] }; initialState = { locales: initializedLocales }; enhancer = composeEnhancers(); } else { // You are right, this is gross. But it's necessary to avoid // importing unneeded code that will crash unsupported browsers. const guiRedux = __webpack_require__(/*! ../reducers/gui */ "./src/reducers/gui.js"); const guiReducer = guiRedux.default; const { guiInitialState, guiMiddleware, initFullScreen, initPlayer, initEmbedded, initTelemetryModal } = guiRedux; const { ScratchPaintReducer } = __webpack_require__(/*! ./tw-scratch-paint */ "./src/lib/tw-scratch-paint.js"); let initializedGui = guiInitialState; if (props.isFullScreen || props.isPlayerOnly) { if (props.isFullScreen) { initializedGui = initFullScreen(initializedGui); } if (props.isPlayerOnly) { initializedGui = initPlayer(initializedGui); } } else if (props.showTelemetryModal) { initializedGui = initTelemetryModal(initializedGui); } if (props.isEmbedded) { initializedGui = initEmbedded(initializedGui); } reducers = { locales: _reducers_locales__WEBPACK_IMPORTED_MODULE_6__["default"], scratchGui: guiReducer, scratchPaint: ScratchPaintReducer }; initialState = { locales: initializedLocales, scratchGui: initializedGui }; enhancer = composeEnhancers(guiMiddleware); } const reducer = Object(redux__WEBPACK_IMPORTED_MODULE_3__["combineReducers"])(reducers); const reducer2 = (previousState, action) => { const nextState = reducer(previousState, action); _addons_hooks__WEBPACK_IMPORTED_MODULE_5__["default"].appStateReducer(action, previousState, nextState); return nextState; }; this.store = Object(redux__WEBPACK_IMPORTED_MODULE_3__["createStore"])(reducer2, initialState, enhancer); window.ReduxStore = this.store; _addons_hooks__WEBPACK_IMPORTED_MODULE_5__["default"].appStateStore = this.store; } componentDidUpdate(prevProps) { if (localesOnly) return; if (prevProps.isPlayerOnly !== this.props.isPlayerOnly) { this.store.dispatch(Object(_reducers_mode_js__WEBPACK_IMPORTED_MODULE_7__["setPlayer"])(this.props.isPlayerOnly)); } if (prevProps.isFullScreen !== this.props.isFullScreen) { this.store.dispatch(Object(_reducers_mode_js__WEBPACK_IMPORTED_MODULE_7__["setFullScreen"])(this.props.isFullScreen)); } } render() { const _this$props = this.props, { isFullScreen, // eslint-disable-line no-unused-vars isPlayerOnly, // eslint-disable-line no-unused-vars showTelemetryModal // eslint-disable-line no-unused-vars } = _this$props, componentProps = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_redux__WEBPACK_IMPORTED_MODULE_2__["Provider"], { store: this.store }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_connected_intl_provider_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, componentProps))); } } AppStateWrapper.propTypes = { isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isPlayerOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isTelemetryEnabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, showTelemetryModal: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, isEmbedded: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool }; return AppStateWrapper; }; /* harmony default export */ __webpack_exports__["default"] = (AppStateHOC); /***/ }), /***/ "./src/lib/assets/icon--back.svg": /*!***************************************!*\ !*** ./src/lib/assets/icon--back.svg ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/aaa4a3575852fe11d04f44c4a972ae73.svg"; /***/ }), /***/ "./src/lib/assets/icon--help.svg": /*!***************************************!*\ !*** ./src/lib/assets/icon--help.svg ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/4b6100c9f591be6470cdfd4697de0b54.svg"; /***/ }), /***/ "./src/lib/assets/icon--success.svg": /*!******************************************!*\ !*** ./src/lib/assets/icon--success.svg ***! \******************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/bc45b073cd2fc0c2265374bdb4e05d67.svg"; /***/ }), /***/ "./src/lib/assets/icon--tutorials.svg": /*!********************************************!*\ !*** ./src/lib/assets/icon--tutorials.svg ***! \********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/b433ee02a13fa2a12f7f7059f1f6729a.svg"; /***/ }), /***/ "./src/lib/audio/audio-buffer-player.js": /*!**********************************************!*\ !*** ./src/lib/audio/audio-buffer-player.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shared_audio_context_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shared-audio-context.js */ "./src/lib/audio/shared-audio-context.js"); class AudioBufferPlayer { constructor(samples, sampleRate) { this.audioContext = new _shared_audio_context_js__WEBPACK_IMPORTED_MODULE_0__["default"](); this.buffer = this.audioContext.createBuffer(1, samples.length, sampleRate); this.buffer.getChannelData(0).set(samples); this.source = null; this.startTime = null; this.updateCallback = null; this.trimStart = null; this.trimEnd = null; } play(trimStart, trimEnd, onUpdate, onEnded) { this.updateCallback = onUpdate; this.trimStart = trimStart; this.trimEnd = trimEnd; this.startTime = Date.now(); const trimStartTime = this.buffer.duration * trimStart; const trimmedDuration = this.buffer.duration * trimEnd - trimStartTime; this.source = this.audioContext.createBufferSource(); this.source.onended = onEnded; this.source.buffer = this.buffer; this.source.connect(this.audioContext.destination); this.source.start(0, trimStartTime, trimmedDuration); this.update(); } update() { const timeSinceStart = (Date.now() - this.startTime) / 1000; const percentage = timeSinceStart / this.buffer.duration; if (percentage + this.trimStart < this.trimEnd && this.source.onended) { requestAnimationFrame(this.update.bind(this)); this.updateCallback(percentage + this.trimStart); } else { this.updateCallback = null; } } stop() { if (this.source) { this.source.onended = null; // Do not call onEnded callback if manually stopped try { this.source.stop(); } catch (e) { // This is probably Safari, which dies when you call stop more than once // which the spec says is allowed: https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode console.log('Caught error while stopping buffer source node.'); // eslint-disable-line no-console } } } } /* harmony default export */ __webpack_exports__["default"] = (AudioBufferPlayer); /***/ }), /***/ "./src/lib/audio/audio-effects.js": /*!****************************************!*\ !*** ./src/lib/audio/audio-effects.js ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _effects_echo_effect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./effects/echo-effect.js */ "./src/lib/audio/effects/echo-effect.js"); /* harmony import */ var _effects_robot_effect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./effects/robot-effect.js */ "./src/lib/audio/effects/robot-effect.js"); /* harmony import */ var _effects_volume_effect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./effects/volume-effect.js */ "./src/lib/audio/effects/volume-effect.js"); /* harmony import */ var _effects_fade_effect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./effects/fade-effect.js */ "./src/lib/audio/effects/fade-effect.js"); /* harmony import */ var _effects_mute_effect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./effects/mute-effect.js */ "./src/lib/audio/effects/mute-effect.js"); /* harmony import */ var _effects_lowpass_effect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./effects/lowpass-effect.js */ "./src/lib/audio/effects/lowpass-effect.js"); /* harmony import */ var _effects_highpass_effect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./effects/highpass-effect.js */ "./src/lib/audio/effects/highpass-effect.js"); const effectTypes = { ROBOT: 'robot', REVERSE: 'reverse', LOUDER: 'higher', SOFTER: 'lower', FASTER: 'faster', SLOWER: 'slower', ECHO: 'echo', FADEIN: 'fade in', FADEOUT: 'fade out', MUTE: 'mute', LOWPASS: 'low pass', HIGHPASS: 'high pass' }; const centsToFrequency = cents => { return Math.round(1000000 * Math.pow(2, cents / 100 / 12)) / 1000000; }; class AudioEffects { static get effectTypes() { return effectTypes; } constructor(buffer, options, trimStart, trimEnd) { this.trimStartSeconds = trimStart * buffer.length / buffer.sampleRate; this.trimEndSeconds = trimEnd * buffer.length / buffer.sampleRate; this.adjustedTrimStartSeconds = this.trimStartSeconds; this.adjustedTrimEndSeconds = this.trimEndSeconds; // Some effects will modify the playback rate and/or number of samples. // Need to precompute those values to create the offline audio context. const pitchRatio = Math.pow(2, 4 / 12); // A major third let sampleCount = buffer.length; const affectedSampleCount = Math.floor((this.trimEndSeconds - this.trimStartSeconds) * buffer.sampleRate); let adjustedAffectedSampleCount = affectedSampleCount; const unaffectedSampleCount = sampleCount - affectedSampleCount; // These affect the sampleCount this.playbackRate = 1; switch (options.preset) { case effectTypes.ECHO: sampleCount = Math.max(sampleCount, Math.floor((this.trimEndSeconds + _effects_echo_effect_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAIL_SECONDS) * buffer.sampleRate)); break; case effectTypes.FASTER: this.playbackRate = pitchRatio; adjustedAffectedSampleCount = Math.floor(affectedSampleCount / this.playbackRate); sampleCount = unaffectedSampleCount + adjustedAffectedSampleCount; break; case effectTypes.SLOWER: this.playbackRate = 1 / pitchRatio; adjustedAffectedSampleCount = Math.floor(affectedSampleCount / this.playbackRate); sampleCount = unaffectedSampleCount + adjustedAffectedSampleCount; break; default: if (Object.prototype.hasOwnProperty.call(options, "pitch")) { this.playbackRate = centsToFrequency(options.pitch); adjustedAffectedSampleCount = Math.floor(affectedSampleCount / this.playbackRate); sampleCount = unaffectedSampleCount + adjustedAffectedSampleCount; } break; } const durationSeconds = sampleCount / buffer.sampleRate; this.adjustedTrimEndSeconds = this.trimStartSeconds + adjustedAffectedSampleCount / buffer.sampleRate; this.adjustedTrimStart = this.adjustedTrimStartSeconds / durationSeconds; this.adjustedTrimEnd = this.adjustedTrimEndSeconds / durationSeconds; let audioContextSampleRate = buffer.sampleRate; let audioContextSampleCount = sampleCount; if (Object.prototype.hasOwnProperty.call(options, "sampleRateEnforced")) { const newSampleRate = options.sampleRateEnforced; audioContextSampleRate = newSampleRate; audioContextSampleCount = Math.floor(sampleCount / buffer.sampleRate * newSampleRate); } if (window.OfflineAudioContext) { this.audioContext = new window.OfflineAudioContext(1, audioContextSampleCount, audioContextSampleRate); } else { // Need to use webkitOfflineAudioContext, which doesn't support all sample rates. // Resample by adjusting sample count to make room and set offline context to desired sample rate. const sampleScale = 44100 / audioContextSampleRate; this.audioContext = new window.webkitOfflineAudioContext(1, sampleScale * audioContextSampleCount, 44100); } // All effects not seen below use the original buffer because it is not modified. this.buffer = buffer; // For the reverse effect we need to manually reverse the data into a new audio buffer // to prevent overwriting the original, so that the undo stack works correctly. // Doing buffer.reverse() would mutate the original data. if (options.preset === effectTypes.REVERSE) { const buffer = this.buffer; const originalBufferData = buffer.getChannelData(0); const newBuffer = this.audioContext.createBuffer(1, buffer.length, buffer.sampleRate); const newBufferData = newBuffer.getChannelData(0); const bufferLength = buffer.length; const startSamples = Math.floor(this.trimStartSeconds * buffer.sampleRate); const endSamples = Math.floor(this.trimEndSeconds * buffer.sampleRate); let counter = 0; for (let i = 0; i < bufferLength; i++) { if (i >= startSamples && i < endSamples) { newBufferData[i] = originalBufferData[endSamples - counter - 1]; counter++; } else { newBufferData[i] = originalBufferData[i]; } } this.buffer = newBuffer; } if (Object.prototype.hasOwnProperty.call(options, "sampleRate")) { // We can't overwrite the original buffer so we make a clone. const buffer = this.buffer; const originalBufferData = buffer.getChannelData(0); const newBuffer = this.audioContext.createBuffer(1, buffer.length, buffer.sampleRate); const newBufferData = newBuffer.getChannelData(0); const bufferLength = buffer.length; // Our clone from earlier also needs to keep the original buffer's sample rate, so we need to make yet another buffer. const sampleRateBuffer = this.makeSampleRateBuffer(buffer, durationSeconds, options.sampleRate); const sampleRateBufferData = sampleRateBuffer.getChannelData(0); const startSamples = Math.floor(this.trimStartSeconds * buffer.sampleRate); const endSamples = Math.floor(this.trimEndSeconds * buffer.sampleRate); for (let i = 0; i < bufferLength; i++) { if (i >= startSamples && i < endSamples) { // We need to convert sampleRate back to the current buffer's sampleRate const sampleRateModifiedIndex = i * (sampleRateBuffer.sampleRate / buffer.sampleRate); const lowerIndex = Math.floor(sampleRateModifiedIndex); const upperIndex = Math.min(lowerIndex + 1, sampleRateBuffer.length - 1); const interpolation = sampleRateModifiedIndex - lowerIndex; const sample = sampleRateBufferData[lowerIndex] * (1 - interpolation) + sampleRateBufferData[upperIndex] * interpolation; // This works without Number.isFinite but it breaks the waveform preview SVG because sample can be NaN newBufferData[i] = Number.isFinite(sample) ? sample : 0; } else { newBufferData[i] = originalBufferData[i]; } } this.buffer = newBuffer; } this.source = this.audioContext.createBufferSource(); this.source.buffer = this.buffer; this.options = options; } makeSampleRateBuffer(buffer, durationSeconds, newSampleRate) { const originalBufferData = buffer.getChannelData(0); const newBufferLength = Math.floor(durationSeconds * newSampleRate); const newBuffer = this.audioContext.createBuffer(1, newBufferLength, newSampleRate); const newBufferData = newBuffer.getChannelData(0); const bufferLength = buffer.length; // this does work with just bufferLength but causes cut-off when newSampleRate is larger than the current sample rate for (let i = 0; i < newBufferLength; i++) { const originalIndex = i * (buffer.sampleRate / newSampleRate); const lowerIndex = Math.floor(originalIndex); const upperIndex = Math.min(lowerIndex + 1, bufferLength - 1); const interpolation = originalIndex - lowerIndex; const sample = originalBufferData[lowerIndex] * (1 - interpolation) + originalBufferData[upperIndex] * interpolation; newBufferData[i] = sample; } return newBuffer; } process(done) { // Some effects need to use more nodes and must expose an input and output let input; let output; switch (this.options.preset) { case effectTypes.FASTER: case effectTypes.SLOWER: this.source.playbackRate.setValueAtTime(this.playbackRate, this.adjustedTrimStartSeconds); this.source.playbackRate.setValueAtTime(1.0, this.adjustedTrimEndSeconds); break; case effectTypes.LOUDER: ({ input, output } = new _effects_volume_effect_js__WEBPACK_IMPORTED_MODULE_2__["default"](this.audioContext, 1.25, this.adjustedTrimStartSeconds, this.adjustedTrimEndSeconds)); break; case effectTypes.SOFTER: ({ input, output } = new _effects_volume_effect_js__WEBPACK_IMPORTED_MODULE_2__["default"](this.audioContext, 0.75, this.adjustedTrimStartSeconds, this.adjustedTrimEndSeconds)); break; case effectTypes.ECHO: ({ input, output } = new _effects_echo_effect_js__WEBPACK_IMPORTED_MODULE_0__["default"](this.audioContext, this.adjustedTrimStartSeconds, this.adjustedTrimEndSeconds)); break; case effectTypes.ROBOT: ({ input, output } = new _effects_robot_effect_js__WEBPACK_IMPORTED_MODULE_1__["default"](this.audioContext, this.adjustedTrimStartSeconds, this.adjustedTrimEndSeconds)); break; case effectTypes.LOWPASS: ({ input, output } = new _effects_lowpass_effect_js__WEBPACK_IMPORTED_MODULE_5__["default"](this.audioContext, this.adjustedTrimStartSeconds, this.adjustedTrimEndSeconds)); break; case effectTypes.HIGHPASS: ({ input, output } = new _effects_highpass_effect_js__WEBPACK_IMPORTED_MODULE_6__["default"](this.audioContext, this.adjustedTrimStartSeconds, this.adjustedTrimEndSeconds)); break; case effectTypes.FADEIN: ({ input, output } = new _effects_fade_effect_js__WEBPACK_IMPORTED_MODULE_3__["default"](this.audioContext, true, this.adjustedTrimStartSeconds, this.adjustedTrimEndSeconds)); break; case effectTypes.FADEOUT: ({ input, output } = new _effects_fade_effect_js__WEBPACK_IMPORTED_MODULE_3__["default"](this.audioContext, false, this.adjustedTrimStartSeconds, this.adjustedTrimEndSeconds)); break; case effectTypes.MUTE: ({ input, output } = new _effects_mute_effect_js__WEBPACK_IMPORTED_MODULE_4__["default"](this.audioContext, this.adjustedTrimStartSeconds, this.adjustedTrimEndSeconds)); break; default: if (Object.prototype.hasOwnProperty.call(this.options, "pitch")) { this.source.playbackRate.setValueAtTime(this.playbackRate, this.adjustedTrimStartSeconds); this.source.playbackRate.setValueAtTime(1.0, this.adjustedTrimEndSeconds); } if (Object.prototype.hasOwnProperty.call(this.options, "volume")) { ({ input, output } = new _effects_volume_effect_js__WEBPACK_IMPORTED_MODULE_2__["default"](this.audioContext, this.options.volume, this.adjustedTrimStartSeconds, this.adjustedTrimEndSeconds)); } break; } if (input && output) { this.source.connect(input); output.connect(this.audioContext.destination); } else { // No effects nodes are needed, wire directly to the output this.source.connect(this.audioContext.destination); } this.source.start(); this.audioContext.startRendering(); this.audioContext.oncomplete = _ref => { let { renderedBuffer } = _ref; done(renderedBuffer, this.adjustedTrimStart, this.adjustedTrimEnd); }; } } /* harmony default export */ __webpack_exports__["default"] = (AudioEffects); /***/ }), /***/ "./src/lib/audio/audio-recorder.js": /*!*****************************************!*\ !*** ./src/lib/audio/audio-recorder.js ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var get_float_time_domain_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! get-float-time-domain-data */ "./node_modules/get-float-time-domain-data/lib/get-float-time-domain-data.js"); /* harmony import */ var get_float_time_domain_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(get_float_time_domain_data__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var get_user_media_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! get-user-media-promise */ "./node_modules/get-user-media-promise/lib/get-user-media-promise.js"); /* harmony import */ var get_user_media_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(get_user_media_promise__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _shared_audio_context_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shared-audio-context.js */ "./src/lib/audio/shared-audio-context.js"); /* harmony import */ var _audio_util_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./audio-util.js */ "./src/lib/audio/audio-util.js"); class AudioRecorder { constructor() { this.audioContext = new _shared_audio_context_js__WEBPACK_IMPORTED_MODULE_2__["default"](); this.bufferLength = 8192; this.userMediaStream = null; this.mediaStreamSource = null; this.sourceNode = null; this.scriptProcessorNode = null; this.recordedSamples = 0; this.recording = false; this.started = false; this.buffers = []; this.disposed = false; } startListening(onStarted, onUpdate, onError) { try { get_user_media_promise__WEBPACK_IMPORTED_MODULE_1___default()({ audio: true }).then(userMediaStream => { if (!this.disposed) { this.started = true; onStarted(); this.attachUserMediaStream(userMediaStream, onUpdate); } }).catch(e => { if (!this.disposed) { onError(e); } }); } catch (e) { if (!this.disposed) { onError(e); } } } startRecording() { this.recording = true; } attachUserMediaStream(userMediaStream, onUpdate) { this.userMediaStream = userMediaStream; this.mediaStreamSource = this.audioContext.createMediaStreamSource(userMediaStream); this.sourceNode = this.audioContext.createGain(); this.scriptProcessorNode = this.audioContext.createScriptProcessor(this.bufferLength, 1, 1); this.scriptProcessorNode.onaudioprocess = processEvent => { if (this.recording && !this.disposed) { this.buffers.push(new Float32Array(processEvent.inputBuffer.getChannelData(0))); } }; this.analyserNode = this.audioContext.createAnalyser(); this.analyserNode.fftSize = 2048; const bufferLength = this.analyserNode.frequencyBinCount; const dataArray = new Float32Array(bufferLength); const update = () => { if (this.disposed) return; this.analyserNode.getFloatTimeDomainData(dataArray); onUpdate(Object(_audio_util_js__WEBPACK_IMPORTED_MODULE_3__["computeRMS"])(dataArray)); requestAnimationFrame(update); }; requestAnimationFrame(update); // Wire everything together, ending in the destination this.mediaStreamSource.connect(this.sourceNode); this.sourceNode.connect(this.analyserNode); this.analyserNode.connect(this.scriptProcessorNode); this.scriptProcessorNode.connect(this.audioContext.destination); } stop() { const buffer = new Float32Array(this.buffers.length * this.bufferLength); let offset = 0; for (let i = 0; i < this.buffers.length; i++) { const bufferChunk = this.buffers[i]; buffer.set(bufferChunk, offset); offset += bufferChunk.length; } const chunkLevels = Object(_audio_util_js__WEBPACK_IMPORTED_MODULE_3__["computeChunkedRMS"])(buffer); const maxRMS = Math.max.apply(null, chunkLevels); const threshold = maxRMS / 8; let firstChunkAboveThreshold = null; let lastChunkAboveThreshold = null; for (let i = 0; i < chunkLevels.length; i++) { if (chunkLevels[i] > threshold) { if (firstChunkAboveThreshold === null) firstChunkAboveThreshold = i + 1; lastChunkAboveThreshold = i + 1; } } let trimStart = Math.max(2, firstChunkAboveThreshold - 2) / this.buffers.length; let trimEnd = Math.min(this.buffers.length - 2, lastChunkAboveThreshold + 2) / this.buffers.length; // With very few samples, the automatic trimming can produce invalid values if (trimStart >= trimEnd) { trimStart = 0; trimEnd = 1; } return { levels: chunkLevels, samples: buffer, sampleRate: this.audioContext.sampleRate, trimStart: trimStart, trimEnd: trimEnd }; } dispose() { if (this.started) { this.scriptProcessorNode.onaudioprocess = null; this.scriptProcessorNode.disconnect(); this.analyserNode.disconnect(); this.sourceNode.disconnect(); this.mediaStreamSource.disconnect(); this.userMediaStream.getAudioTracks()[0].stop(); } this.disposed = true; } } /* harmony default export */ __webpack_exports__["default"] = (AudioRecorder); /***/ }), /***/ "./src/lib/audio/audio-util.js": /*!*************************************!*\ !*** ./src/lib/audio/audio-util.js ***! \*************************************/ /*! exports provided: SOUND_BYTE_LIMIT, computeRMS, computeChunkedRMS, encodeAndAddSoundToVM, downsampleIfNeeded, dropEveryOtherSample */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SOUND_BYTE_LIMIT", function() { return SOUND_BYTE_LIMIT; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeRMS", function() { return computeRMS; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeChunkedRMS", function() { return computeChunkedRMS; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "encodeAndAddSoundToVM", function() { return encodeAndAddSoundToVM; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "downsampleIfNeeded", function() { return downsampleIfNeeded; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dropEveryOtherSample", function() { return dropEveryOtherSample; }); /* harmony import */ var wav_encoder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! wav-encoder */ "./node_modules/wav-encoder/index.js"); /* harmony import */ var wav_encoder__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(wav_encoder__WEBPACK_IMPORTED_MODULE_0__); const SOUND_BYTE_LIMIT = 10 * 1000 * 1000; // 10mb const _computeRMS = function _computeRMS(samples, start, end) { let scaling = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.55; const length = end - start; if (length === 0) return 0; // Calculate RMS, adapted from https://github.com/Tonejs/Tone.js/blob/master/Tone/component/Meter.js#L88 let sum = 0; for (let i = start; i < end; i++) { const sample = samples[i]; sum += sample ** 2; } const rms = Math.sqrt(sum / length); const val = rms / scaling; return Math.sqrt(val); }; const computeRMS = (samples, scaling) => _computeRMS(samples, 0, samples.length, scaling); const computeChunkedRMS = function computeChunkedRMS(samples) { let chunkSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1024; const sampleCount = samples.length; const chunkLevels = []; for (let i = 0; i < sampleCount; i += chunkSize) { const maxIndex = Math.min(sampleCount, i + chunkSize); chunkLevels.push(_computeRMS(samples, i, maxIndex)); } return chunkLevels; }; const encodeAndAddSoundToVM = function encodeAndAddSoundToVM(vm, samples, sampleRate, name, callback) { wav_encoder__WEBPACK_IMPORTED_MODULE_0___default.a.encode({ sampleRate: sampleRate, channelData: [samples] }).then(wavBuffer => { const vmSound = { format: '', dataFormat: 'wav', rate: sampleRate, sampleCount: samples.length }; // Create an asset from the encoded .wav and get resulting md5 const storage = vm.runtime.storage; vmSound.asset = storage.createAsset(storage.AssetType.Sound, storage.DataFormat.WAV, new Uint8Array(wavBuffer), null, true // generate md5 ); vmSound.assetId = vmSound.asset.assetId; // update vmSound object with md5 property vmSound.md5 = "".concat(vmSound.assetId, ".").concat(vmSound.dataFormat); // The VM will update the sound name to a fresh name vmSound.name = name; vm.addSound(vmSound).then(() => { if (callback) callback(); }); }); }; /** @typedef SoundBuffer @type {Object} @property {Float32Array} samples Array of audio samples @property {number} sampleRate Audio sample rate */ /** * Downsample the given buffer to try to reduce file size below SOUND_BYTE_LIMIT * @param {SoundBuffer} buffer - Buffer to resample * @param {function(SoundBuffer):Promise} resampler - resampler function * @returns {SoundBuffer} Downsampled buffer with half the sample rate */ const downsampleIfNeeded = (buffer, resampler) => { const { samples, sampleRate } = buffer; const encodedByteLength = samples.length * 2; /* bitDepth 16 bit */ // Resolve immediately if already within byte limit if (encodedByteLength < SOUND_BYTE_LIMIT) { return Promise.resolve({ samples, sampleRate }); } // TW: Don't check if the sound will still fit at this reduced sample rate. // Instead the GUI will show a warning if it's too large. return resampler({ samples, sampleRate }, 22050); }; /** * Drop every other sample of an audio buffer as a last-resort way of downsampling. * @param {SoundBuffer} buffer - Buffer to resample * @returns {SoundBuffer} Downsampled buffer with half the sample rate */ const dropEveryOtherSample = buffer => { const newLength = Math.floor(buffer.samples.length / 2); const newSamples = new Float32Array(newLength); for (let i = 0; i < newLength; i++) { newSamples[i] = buffer.samples[i * 2]; } return { samples: newSamples, sampleRate: buffer.sampleRate / 2 }; }; /***/ }), /***/ "./src/lib/audio/effects/echo-effect.js": /*!**********************************************!*\ !*** ./src/lib/audio/effects/echo-effect.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); class EchoEffect { static get DELAY_TIME() { return 0.25; } static get TAIL_SECONDS() { return 0.75; } constructor(audioContext, startTime, endTime) { this.audioContext = audioContext; this.input = this.audioContext.createGain(); this.output = this.audioContext.createGain(); this.effectInput = this.audioContext.createGain(); this.effectInput.gain.value = 0; this.effectInput.gain.setValueAtTime(0.75, startTime); this.effectInput.gain.setValueAtTime(0, endTime); this.delay = this.audioContext.createDelay(1); this.delay.delayTime.value = EchoEffect.DELAY_TIME; this.decay = this.audioContext.createGain(); this.decay.gain.value = 0.3; this.compressor = this.audioContext.createDynamicsCompressor(); this.compressor.threshold.value = -5; this.compressor.knee.value = 15; this.compressor.ratio.value = 12; this.compressor.attack.value = 0; this.compressor.release.value = 0.25; this.input.connect(this.effectInput); this.effectInput.connect(this.delay); this.delay.connect(this.compressor); this.input.connect(this.compressor); this.delay.connect(this.decay); this.decay.connect(this.delay); this.compressor.connect(this.output); } } /* harmony default export */ __webpack_exports__["default"] = (EchoEffect); /***/ }), /***/ "./src/lib/audio/effects/fade-effect.js": /*!**********************************************!*\ !*** ./src/lib/audio/effects/fade-effect.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); class FadeEffect { constructor(audioContext, fadeIn, startSeconds, endSeconds) { this.audioContext = audioContext; this.input = this.audioContext.createGain(); this.output = this.audioContext.createGain(); this.gain = this.audioContext.createGain(); this.gain.gain.setValueAtTime(1, 0); if (fadeIn) { this.gain.gain.setValueAtTime(0, startSeconds); this.gain.gain.linearRampToValueAtTime(1, endSeconds); } else { this.gain.gain.setValueAtTime(1, startSeconds); this.gain.gain.linearRampToValueAtTime(0, endSeconds); } this.gain.gain.setValueAtTime(1, endSeconds); this.input.connect(this.gain); this.gain.connect(this.output); } } /* harmony default export */ __webpack_exports__["default"] = (FadeEffect); /***/ }), /***/ "./src/lib/audio/effects/highpass-effect.js": /*!**************************************************!*\ !*** ./src/lib/audio/effects/highpass-effect.js ***! \**************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); class HighPassEffect { constructor(audioContext, startSeconds, endSeconds) { this.audioContext = audioContext; this.input = this.audioContext.createGain(); this.output = this.audioContext.createGain(); this.effect = this.audioContext.createBiquadFilter(); this.effect.type = "highpass"; this.effect.frequency.value = 0; this.effect.Q.value = 0.7; this.effect.frequency.setValueAtTime(800, startSeconds); this.effect.frequency.setValueAtTime(0, endSeconds); this.input.connect(this.effect); this.effect.connect(this.output); } } /* harmony default export */ __webpack_exports__["default"] = (HighPassEffect); /***/ }), /***/ "./src/lib/audio/effects/lowpass-effect.js": /*!*************************************************!*\ !*** ./src/lib/audio/effects/lowpass-effect.js ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); class LowPassEffect { constructor(audioContext, startSeconds, endSeconds) { this.audioContext = audioContext; this.input = this.audioContext.createGain(); this.output = this.audioContext.createGain(); this.effect = this.audioContext.createBiquadFilter(); this.effect.type = "lowpass"; this.effect.frequency.value = 11025; this.effect.Q.value = 0.7; this.effect.frequency.setValueAtTime(880, startSeconds); this.effect.frequency.setValueAtTime(11025, endSeconds); this.input.connect(this.effect); this.effect.connect(this.output); } } /* harmony default export */ __webpack_exports__["default"] = (LowPassEffect); /***/ }), /***/ "./src/lib/audio/effects/mute-effect.js": /*!**********************************************!*\ !*** ./src/lib/audio/effects/mute-effect.js ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); class MuteEffect { constructor(audioContext, startSeconds, endSeconds) { this.audioContext = audioContext; this.input = this.audioContext.createGain(); this.output = this.audioContext.createGain(); this.gain = this.audioContext.createGain(); // Smoothly ramp the gain down before the start time, and up after the end time. this.rampLength = 0.001; this.gain.gain.setValueAtTime(1.0, Math.max(0, startSeconds - this.rampLength)); this.gain.gain.linearRampToValueAtTime(0, startSeconds); this.gain.gain.setValueAtTime(0, endSeconds); this.gain.gain.linearRampToValueAtTime(1.0, endSeconds + this.rampLength); this.input.connect(this.gain); this.gain.connect(this.output); } } /* harmony default export */ __webpack_exports__["default"] = (MuteEffect); /***/ }), /***/ "./src/lib/audio/effects/robot-effect.js": /*!***********************************************!*\ !*** ./src/lib/audio/effects/robot-effect.js ***! \***********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); class RobotEffect { constructor(audioContext, startTime, endTime) { this.audioContext = audioContext; this.input = this.audioContext.createGain(); this.output = this.audioContext.createGain(); this.passthrough = this.audioContext.createGain(); this.effectInput = this.audioContext.createGain(); this.passthrough.gain.value = 1; this.effectInput.gain.value = 0; this.passthrough.gain.setValueAtTime(0, startTime); this.passthrough.gain.setValueAtTime(1, endTime); this.effectInput.gain.setValueAtTime(1, startTime); this.effectInput.gain.setValueAtTime(0, endTime); // Ring modulator inspired by BBC Dalek voice // http://recherche.ircam.fr/pub/dafx11/Papers/66_e.pdf // https://github.com/bbc/webaudio.prototyping.bbc.co.uk // > There are four parallel signal paths, two which process the // > combination Vc + Vin / 2 and two which process Vc - Vin/2. // > Each branch consists of a non-linearity [diode]... const createDiodeNode = () => { const node = this.audioContext.createWaveShaper(); // Piecewise function given by (2) in Parker paper const transform = function transform(v) { let vb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.2; let vl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.4; let h = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.65; if (v <= vb) return 0; if (v <= vl) return h * (Math.pow(v - vb, 2) / (2 * vl - 2 * vb)); return h * v - h * vl + h * (Math.pow(v - vb, 2) / (2 * vl - 2 * vb)); }; // Create the waveshaper curve with the voltage transform above const bufferLength = 1024; const curve = new Float32Array(bufferLength); for (let i = 0; i < bufferLength; i++) { const voltage = 2 * (i / bufferLength) - 1; curve[i] = transform(voltage); } node.curve = curve; return node; }; const oscillator = this.audioContext.createOscillator(); oscillator.frequency.value = 50; oscillator.start(0); const vInGain = this.audioContext.createGain(); vInGain.gain.value = 0.5; const vInInverter1 = this.audioContext.createGain(); vInInverter1.gain.value = -1; const vInInverter2 = this.audioContext.createGain(); vInInverter2.gain.value = -1; const vInDiode1 = createDiodeNode(this.audioContext); const vInDiode2 = createDiodeNode(this.audioContext); const vInInverter3 = this.audioContext.createGain(); vInInverter3.gain.value = -1; const vcInverter1 = this.audioContext.createGain(); vcInverter1.gain.value = -1; const vcDiode3 = createDiodeNode(this.audioContext); const vcDiode4 = createDiodeNode(this.audioContext); const compressor = this.audioContext.createDynamicsCompressor(); compressor.threshold.value = -5; compressor.knee.value = 15; compressor.ratio.value = 12; compressor.attack.value = 0; compressor.release.value = 0.25; const biquadFilter = this.audioContext.createBiquadFilter(); biquadFilter.type = 'highpass'; biquadFilter.frequency.value = 1000; biquadFilter.gain.value = 1.25; this.input.connect(this.effectInput); this.input.connect(this.passthrough); this.passthrough.connect(this.output); this.effectInput.connect(vcInverter1); this.effectInput.connect(vcDiode4); vcInverter1.connect(vcDiode3); oscillator.connect(vInGain); vInGain.connect(vInInverter1); vInGain.connect(vcInverter1); vInGain.connect(vcDiode4); vInInverter1.connect(vInInverter2); vInInverter1.connect(vInDiode2); vInInverter2.connect(vInDiode1); vInDiode1.connect(vInInverter3); vInDiode2.connect(vInInverter3); vInInverter3.connect(compressor); vcDiode3.connect(compressor); vcDiode4.connect(compressor); this.effectInput.connect(biquadFilter); biquadFilter.connect(compressor); compressor.connect(this.output); } } /* harmony default export */ __webpack_exports__["default"] = (RobotEffect); /***/ }), /***/ "./src/lib/audio/effects/volume-effect.js": /*!************************************************!*\ !*** ./src/lib/audio/effects/volume-effect.js ***! \************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); class VolumeEffect { constructor(audioContext, volume, startSeconds, endSeconds) { this.audioContext = audioContext; this.input = this.audioContext.createGain(); this.output = this.audioContext.createGain(); this.gain = this.audioContext.createGain(); // Smoothly ramp the gain up before the start time, and down after the end time. this.rampLength = 0.01; this.gain.gain.setValueAtTime(1.0, Math.max(0, startSeconds - this.rampLength)); this.gain.gain.exponentialRampToValueAtTime(volume, startSeconds); this.gain.gain.setValueAtTime(volume, endSeconds); this.gain.gain.exponentialRampToValueAtTime(1.0, endSeconds + this.rampLength); this.input.connect(this.gain); this.gain.connect(this.output); } } /* harmony default export */ __webpack_exports__["default"] = (VolumeEffect); /***/ }), /***/ "./src/lib/audio/shared-audio-context.js": /*!***********************************************!*\ !*** ./src/lib/audio/shared-audio-context.js ***! \***********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var startaudiocontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! startaudiocontext */ "./node_modules/startaudiocontext/StartAudioContext.js"); /* harmony import */ var startaudiocontext__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(startaudiocontext__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var bowser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bowser */ "./node_modules/bowser/src/bowser.js"); /* harmony import */ var bowser__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(bowser__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../log */ "./src/lib/log.js"); let AUDIO_CONTEXT; if (!bowser__WEBPACK_IMPORTED_MODULE_1___default.a.msie) { /** * AudioContext can be initialized only when user interaction event happens */ const event = typeof document.ontouchstart === 'undefined' ? 'mousedown' : 'touchstart'; const initAudioContext = () => { document.removeEventListener(event, initAudioContext); try { AUDIO_CONTEXT = new (window.AudioContext || window.webkitAudioContext)(); startaudiocontext__WEBPACK_IMPORTED_MODULE_0___default()(AUDIO_CONTEXT); } catch (e) { _log__WEBPACK_IMPORTED_MODULE_2__["default"].error('could not create shared audio context; sound-related features will not be available', e); } }; document.addEventListener(event, initAudioContext); } /** * Wrap browser AudioContext because we shouldn't create more than one * @return {AudioContext} The singleton AudioContext */ /* harmony default export */ __webpack_exports__["default"] = (function () { return AUDIO_CONTEXT; }); /***/ }), /***/ "./src/lib/backpack-api.js": /*!*********************************!*\ !*** ./src/lib/backpack-api.js ***! \*********************************/ /*! exports provided: LOCAL_API, getBackpackContents, saveBackpackObject, deleteBackpackObject, updateBackpackObject, costumePayload, soundPayload, spritePayload, codePayload, fetchCode, fetchSprite */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LOCAL_API", function() { return LOCAL_API; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBackpackContents", function() { return getBackpackContents; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveBackpackObject", function() { return saveBackpackObject; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteBackpackObject", function() { return deleteBackpackObject; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateBackpackObject", function() { return updateBackpackObject; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchCode", function() { return fetchCode; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchSprite", function() { return fetchSprite; }); /* harmony import */ var xhr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! xhr */ "./node_modules/xhr/index.js"); /* harmony import */ var xhr__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(xhr__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _backpack_costume_payload__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./backpack/costume-payload */ "./src/lib/backpack/costume-payload.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "costumePayload", function() { return _backpack_costume_payload__WEBPACK_IMPORTED_MODULE_1__["default"]; }); /* harmony import */ var _backpack_sound_payload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./backpack/sound-payload */ "./src/lib/backpack/sound-payload.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "soundPayload", function() { return _backpack_sound_payload__WEBPACK_IMPORTED_MODULE_2__["default"]; }); /* harmony import */ var _backpack_sprite_payload__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./backpack/sprite-payload */ "./src/lib/backpack/sprite-payload.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "spritePayload", function() { return _backpack_sprite_payload__WEBPACK_IMPORTED_MODULE_3__["default"]; }); /* harmony import */ var _backpack_code_payload__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./backpack/code-payload */ "./src/lib/backpack/code-payload.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "codePayload", function() { return _backpack_code_payload__WEBPACK_IMPORTED_MODULE_4__["default"]; }); /* harmony import */ var _tw_local_backpack_api__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tw-local-backpack-api */ "./src/lib/tw-local-backpack-api.js"); const LOCAL_API = '_local_'; // Add a new property for the full thumbnail url, which includes the host. // Also include a full body url for loading sprite zips // TODO retreiving the images through storage would allow us to remove this. const includeFullUrls = (item, host) => Object.assign({}, item, { thumbnailUrl: "".concat(host, "/").concat(item.thumbnail), bodyUrl: "".concat(host, "/").concat(item.body) }); const getBackpackContents = _ref => { let { host, username, token, limit, offset } = _ref; return new Promise((resolve, reject) => { if (host === LOCAL_API) { return resolve(_tw_local_backpack_api__WEBPACK_IMPORTED_MODULE_5__["default"].getBackpackContents({ limit, offset })); } xhr__WEBPACK_IMPORTED_MODULE_0___default()({ method: 'GET', uri: "".concat(host, "/").concat(username, "?limit=").concat(limit, "&offset=").concat(offset), headers: { 'x-token': token }, json: true }, (error, response) => { if (error || response.statusCode !== 200) { return reject(new Error(response.status)); } return resolve(response.body.map(item => includeFullUrls(item, host))); }); }); }; const saveBackpackObject = _ref2 => { let { host, username, token, type, // Type of object being saved to the backpack mime, // Mime-type of the object being saved name, // User-facing name of the object being saved body, // Base64-encoded body of the object being saved thumbnail // Base64-encoded JPEG thumbnail of the object being saved } = _ref2; return new Promise((resolve, reject) => { if (host === LOCAL_API) { return resolve(_tw_local_backpack_api__WEBPACK_IMPORTED_MODULE_5__["default"].saveBackpackObject({ type, mime, name, body, thumbnail })); } xhr__WEBPACK_IMPORTED_MODULE_0___default()({ method: 'POST', uri: "".concat(host, "/").concat(username), headers: { 'x-token': token }, json: { type, mime, name, body, thumbnail } }, (error, response) => { if (error || response.statusCode !== 200) { return reject(new Error(response.status)); } return resolve(includeFullUrls(response.body, host)); }); }); }; const deleteBackpackObject = _ref3 => { let { host, username, token, id } = _ref3; return new Promise((resolve, reject) => { if (host === LOCAL_API) { return resolve(_tw_local_backpack_api__WEBPACK_IMPORTED_MODULE_5__["default"].deleteBackpackObject({ id })); } xhr__WEBPACK_IMPORTED_MODULE_0___default()({ method: 'DELETE', uri: "".concat(host, "/").concat(username, "/").concat(id), headers: { 'x-token': token } }, (error, response) => { if (error || response.statusCode !== 200) { return reject(new Error(response.status)); } return resolve(response.body); }); }); }; const updateBackpackObject = _ref4 => { let { host, id, name } = _ref4; return new Promise((resolve, reject) => { if (host === LOCAL_API) { return resolve(_tw_local_backpack_api__WEBPACK_IMPORTED_MODULE_5__["default"].updateBackpackObject({ id, name })); } reject(new Error('updateBackpackObject not supported')); }); }; // Two types of backpack items are not retreivable through storage // code, as json and sprite3 as arraybuffer zips. const fetchAs = (responseType, uri) => new Promise((resolve, reject) => { xhr__WEBPACK_IMPORTED_MODULE_0___default()({ uri, responseType }, (error, response) => { if (error || response.statusCode !== 200) { return reject(new Error(response.status)); } return resolve(response.body); }); }); // These two helpers allow easy fetching of backpack code and sprite zips // Use the curried fetchAs here so the consumer does not worry about XHR responseTypes const fetchCode = fetchAs.bind(null, 'json'); const fetchSprite = fetchAs.bind(null, 'arraybuffer'); /***/ }), /***/ "./src/lib/backpack/block-to-image.js": /*!********************************************!*\ !*** ./src/lib/backpack/block-to-image.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var computed_style_to_inline_style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! computed-style-to-inline-style */ "./node_modules/computed-style-to-inline-style/dist/index.js"); /* harmony import */ var computed_style_to_inline_style__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(computed_style_to_inline_style__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../tw-lazy-scratch-blocks */ "./src/lib/tw-lazy-scratch-blocks.js"); /** * Given a blockId, return a data-uri image that can be used to create a thumbnail. * @param {string} blockId the ID of the block to imagify * @return {Promise} resolves to a data-url of a picture of the blocks */ /* harmony default export */ __webpack_exports__["default"] = (function (blockId) { const ScratchBlocks = _tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_1__["default"].get(); // Not sure any better way to access the scratch-blocks workspace than this... const block = ScratchBlocks.getMainWorkspace().getBlockById(blockId); const blockSvg = block.getSvgRoot().cloneNode(true /* deep */); // Once we have the cloned SVG, do the rest in a setTimeout to prevent // blocking the drag end from finishing promptly. return new Promise(resolve => { setTimeout(() => { // TW: Fixes issues caused by scratch-blocks block hiding blockSvg.style.display = ''; // Strip   entities that cannot be inlined blockSvg.innerHTML = blockSvg.innerHTML.replace(/ /g, ' '); // Create an element to put the cloned blockSvg inside const NS = 'http://www.w3.org/2000/svg'; const svg = document.createElementNS(NS, 'svg'); svg.appendChild(blockSvg); // Needs to be on the DOM to get CSS properties and correct sizing document.body.appendChild(svg); const padding = 10; const extraHatPadding = 16; const topPadding = padding + (blockSvg.getAttribute('data-shapes') === 'hat' ? extraHatPadding : 0); const leftPadding = padding; blockSvg.setAttribute('transform', "translate(".concat(leftPadding, " ").concat(topPadding, ")")); const bounds = blockSvg.getBoundingClientRect(); svg.setAttribute('width', bounds.width + 2 * padding); svg.setAttribute('height', bounds.height + 2 * padding); // We need to inline the styles set by CSS rules because // not all the styles are set directly on the SVG. This makes the // image styled the same way the block actually appears. // TODO this doesn't handle images that are xlink:href in the SVG computed_style_to_inline_style__WEBPACK_IMPORTED_MODULE_0___default()(svg, { recursive: true, // Enumerate the specific properties we need to inline. // Specifically properties that are set from CSS in scratch-blocks properties: ['fill', 'font-family', 'font-size', 'font-weight'] }); const svgString = new XMLSerializer().serializeToString(svg); // Once we have the svg as a string, remove it from the DOM svg.parentNode.removeChild(svg); resolve("data:image/svg+xml;utf-8,".concat(encodeURIComponent(svgString))); }, 10); }); }); /***/ }), /***/ "./src/lib/backpack/code-payload.js": /*!******************************************!*\ !*** ./src/lib/backpack/code-payload.js ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _block_to_image__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./block-to-image */ "./src/lib/backpack/block-to-image.js"); /* harmony import */ var _thumbnail__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./thumbnail */ "./src/lib/backpack/thumbnail.js"); /* harmony import */ var js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! js-base64 */ "./node_modules/js-base64/base64.js"); /* harmony import */ var js_base64__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(js_base64__WEBPACK_IMPORTED_MODULE_2__); const codePayload = _ref => { let { blockObjects, topBlockId } = _ref; const payload = { type: 'script', // Needs to match backpack-server type name name: 'code', // All code currently gets the same name mime: 'application/json', // Backpack expects a base64 encoded string to store. Cannot use btoa because // the code can contain characters outside the 0-255 code-point range supported by btoa body: js_base64__WEBPACK_IMPORTED_MODULE_2__["Base64"].encode(JSON.stringify(blockObjects)) // Base64 encode the json }; return Object(_block_to_image__WEBPACK_IMPORTED_MODULE_0__["default"])(topBlockId).then(_thumbnail__WEBPACK_IMPORTED_MODULE_1__["default"]).then(thumbnail => { payload.thumbnail = thumbnail; return payload; }); }; /* harmony default export */ __webpack_exports__["default"] = (codePayload); /***/ }), /***/ "./src/lib/backpack/costume-payload.js": /*!*********************************************!*\ !*** ./src/lib/backpack/costume-payload.js ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _thumbnail__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./thumbnail */ "./src/lib/backpack/thumbnail.js"); /* harmony import */ var _get_costume_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../get-costume-url */ "./src/lib/get-costume-url.js"); const costumePayload = (costume, vm) => { // TODO is it ok to base64 encode SVGs? What about unicode text inside them? const assetDataUrl = vm.getExportedCostumeBase64(costume); const assetDataFormat = costume.dataFormat; const payload = { type: 'costume', name: costume.name, // Params to be filled in below mime: '', body: '', thumbnail: '' }; switch (assetDataFormat) { case 'svg': payload.mime = 'image/svg+xml'; payload.body = assetDataUrl; break; case 'png': payload.mime = 'image/png'; payload.body = assetDataUrl; break; case 'jpg': payload.mime = 'image/jpeg'; payload.body = assetDataUrl; break; default: alert("Cannot serialize for format: ".concat(assetDataFormat)); // eslint-disable-line } // Do not generate the thumbnail from the raw asset. Instead use the getCostumeUrl // utility which inlines the fonts to make the thumbnail show the right fonts. const inlinedFontDataUrl = Object(_get_costume_url__WEBPACK_IMPORTED_MODULE_1__["default"])(costume.asset); return Object(_thumbnail__WEBPACK_IMPORTED_MODULE_0__["default"])(inlinedFontDataUrl).then(thumbnail => { payload.thumbnail = thumbnail; return payload; }); }; /* harmony default export */ __webpack_exports__["default"] = (costumePayload); /***/ }), /***/ "./src/lib/backpack/sound-payload.js": /*!*******************************************!*\ !*** ./src/lib/backpack/sound-payload.js ***! \*******************************************/ /*! exports provided: default, soundThumbnail */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return soundPayload; }); /* harmony import */ var _base64_loader_sound_thumbnail_png__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! base64-loader!./sound-thumbnail.png */ "./node_modules/base64-loader/index.js!./src/lib/backpack/sound-thumbnail.png"); /* harmony import */ var _base64_loader_sound_thumbnail_png__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_base64_loader_sound_thumbnail_png__WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "soundThumbnail", function() { return _base64_loader_sound_thumbnail_png__WEBPACK_IMPORTED_MODULE_0___default.a; }); // eslint-disable-next-line import/no-unresolved const soundPayload = sound => { const assetDataUrl = sound.asset.encodeDataURI(); const assetDataFormat = sound.dataFormat; const payload = { type: 'sound', name: sound.name, thumbnail: _base64_loader_sound_thumbnail_png__WEBPACK_IMPORTED_MODULE_0___default.a, // Params to be filled in below mime: '', body: '' }; switch (assetDataFormat) { case 'wav': payload.mime = 'audio/x-wav'; payload.body = assetDataUrl.replace('data:audio/x-wav;base64,', ''); break; case 'mp3': payload.mime = 'audio/mp3'; // TODO scratch-storage should be fixed so that encodeDataURI does not // always prepend the wave format header; Once that is fixed, the following // line will have to change. payload.body = assetDataUrl.replace('data:audio/x-wav;base64,', ''); break; case 'ogg': payload.mime = 'audio/ogg'; payload.body = assetDataUrl.replace('data:audio/x-wav;base64,', ''); break; case 'flac': payload.mime = 'audio/flac'; payload.body = assetDataUrl.replace('data:audio/x-wav;base64,', ''); break; default: alert("Cannot serialize for format: ".concat(assetDataFormat)); // eslint-disable-line } // Return a promise to make it consistent with other payload constructors like costume-payload return new Promise(resolve => resolve(payload)); }; /***/ }), /***/ "./src/lib/backpack/sprite-payload.js": /*!********************************************!*\ !*** ./src/lib/backpack/sprite-payload.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _thumbnail__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./thumbnail */ "./src/lib/backpack/thumbnail.js"); const spritePayload = (id, vm) => { const target = vm.runtime.getTargetById(id); if (!target) return null; return vm.exportSprite(id, 'base64').then(zippedSprite => { const payload = { type: 'sprite', name: target.sprite.name, mime: 'application/zip', body: zippedSprite, // Filled in below thumbnail: '' }; const costumeDataUrl = target.sprite.costumes[target.currentCostume].asset.encodeDataURI(); return Object(_thumbnail__WEBPACK_IMPORTED_MODULE_0__["default"])(costumeDataUrl).then(thumbnail => { payload.thumbnail = thumbnail; return payload; }); }); }; /* harmony default export */ __webpack_exports__["default"] = (spritePayload); /***/ }), /***/ "./src/lib/backpack/thumbnail.js": /*!***************************************!*\ !*** ./src/lib/backpack/thumbnail.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); const jpegThumbnail = dataUrl => new Promise((resolve, reject) => { const image = new Image(); image.onload = () => { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); const maxDimension = 96; // 3x the maximum displayed size of 32px // TW: After setting canvas width/height, the canvas is automatically cleared. if (image.height < 1 || image.width < 1) { canvas.width = canvas.height = maxDimension; // drawImage can fail if image height/width is less than 1 // Use blank image; the costume is too small to render anyway } else { if (image.height > image.width) { canvas.height = maxDimension; canvas.width = maxDimension / image.height * image.width; } else { canvas.width = maxDimension; canvas.height = maxDimension / image.width * image.height; } ctx.drawImage(image, 0, 0, canvas.width, canvas.height); } // TW: PNG allows using transparency while JPEG does not. // A white background looks quite ugly in dark mode. const dataURL = canvas.toDataURL('image/png').replace('data:image/png;base64,', ''); resolve(dataURL); }; image.onerror = err => { reject(err); }; image.src = dataUrl; }); /* harmony default export */ __webpack_exports__["default"] = (jpegThumbnail); /***/ }), /***/ "./src/lib/blocks.js": /*!***************************!*\ !*** ./src/lib/blocks.js ***! \***************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tw-lazy-scratch-blocks */ "./src/lib/tw-lazy-scratch-blocks.js"); /** * Connect scratch blocks with the vm * @param {VirtualMachine} vm - The scratch vm * @return {ScratchBlocks} ScratchBlocks connected with the vm */ /* harmony default export */ __webpack_exports__["default"] = (function (vm) { const ScratchBlocks = _tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_0__["default"].get(); const jsonForMenuBlock = function jsonForMenuBlock(name, menuOptionsFn, colors, start) { return { message0: '%1', args0: [{ type: 'field_dropdown', name: name, options: function options() { return start.concat(menuOptionsFn()); } }], inputsInline: true, output: 'String', colour: colors.secondary, colourSecondary: colors.secondary, colourTertiary: colors.tertiary, outputShape: ScratchBlocks.OUTPUT_SHAPE_ROUND }; }; const jsonForHatBlockMenu = function jsonForHatBlockMenu(hatName, name, menuOptionsFn, colors, start) { return { message0: hatName, args0: [{ type: 'field_dropdown', name: name, options: function options() { return start.concat(menuOptionsFn()); } }], colour: colors.primary, colourSecondary: colors.secondary, colourTertiary: colors.tertiary, extensions: ['shape_hat'] }; }; const jsonForSensingMenus = function jsonForSensingMenus(menuOptionsFn) { return { message0: ScratchBlocks.Msg.SENSING_OF, args0: [{ type: 'field_dropdown', name: 'PROPERTY', options: function options() { return menuOptionsFn(); } }, { type: 'input_value', name: 'OBJECT' }], output: true, colour: ScratchBlocks.Colours.sensing.primary, colourSecondary: ScratchBlocks.Colours.sensing.secondary, colourTertiary: ScratchBlocks.Colours.sensing.tertiary, outputShape: ScratchBlocks.OUTPUT_SHAPE_ROUND }; }; const jsonForSensingSetMenus = function jsonForSensingSetMenus(menuOptionsFn) { return { message0: 'set %1 of %2 to %3', args0: [{ type: 'field_dropdown', name: 'PROPERTY', options: function options() { return menuOptionsFn(); } }, { type: 'input_value', name: 'OBJECT' }, { type: 'input_value', name: 'VALUE' }], colour: ScratchBlocks.Colours.sensing.primary, colourSecondary: ScratchBlocks.Colours.sensing.secondary, colourTertiary: ScratchBlocks.Colours.sensing.tertiary, extensions: ['shape_statement'] }; }; const soundsMenu = function soundsMenu() { let menu = [['', '']]; if (vm.editingTarget && vm.editingTarget.sprite.sounds.length > 0) { menu = vm.editingTarget.sprite.sounds.map(sound => [sound.name, sound.name]); } menu.push([ScratchBlocks.ScratchMsgs.translate('SOUND_RECORD', 'record...'), ScratchBlocks.recordSoundCallback]); return menu; }; const costumesMenu = function costumesMenu() { const next = ScratchBlocks.ScratchMsgs.translate('LOOKS_NEXTCOSTUME', 'next costume'); const previous = "previous costume"; //ScratchBlocks.ScratchMsgs.translate('LOOKS_PREVIOUSCOSTUME', 'previous costume'); // TODO: Add translation index into ScratchBlocks for this. const random = "random costume"; //ScratchBlocks.ScratchMsgs.translate('LOOKS_RANDOMBACKDROP', 'random costume'); // TODO: Add translation entry if (vm.editingTarget && vm.editingTarget.getCostumes().length > 0) { return vm.editingTarget.getCostumes().map(costume => [costume.name, costume.name]).concat([[next, "next costume"], [previous, "previous costume"], [random, "random costume"]]); } return [['', '']]; }; const backdropsMenu = function backdropsMenu() { const next = ScratchBlocks.ScratchMsgs.translate('LOOKS_NEXTBACKDROP', 'next backdrop'); const previous = ScratchBlocks.ScratchMsgs.translate('LOOKS_PREVIOUSBACKDROP', 'previous backdrop'); const random = ScratchBlocks.ScratchMsgs.translate('LOOKS_RANDOMBACKDROP', 'random backdrop'); if (vm.runtime.targets[0] && vm.runtime.targets[0].getCostumes().length > 0) { return vm.runtime.targets[0].getCostumes().map(costume => [costume.name, costume.name]).concat([[next, 'next backdrop'], [previous, 'previous backdrop'], [random, 'random backdrop']]); } return [['', '']]; }; const backdropNamesMenu = function backdropNamesMenu() { const stage = vm.runtime.getTargetForStage(); if (stage && stage.getCostumes().length > 0) { return stage.getCostumes().map(costume => [costume.name, costume.name]); } return [['', '']]; }; const spriteMenu = function spriteMenu() { const sprites = []; for (const targetId in vm.runtime.targets) { if (!vm.runtime.targets.hasOwnProperty(targetId)) continue; if (vm.runtime.targets[targetId].isOriginal) { if (!vm.runtime.targets[targetId].isStage) { if (vm.runtime.targets[targetId] === vm.editingTarget) { continue; } sprites.push([vm.runtime.targets[targetId].sprite.name, vm.runtime.targets[targetId].sprite.name]); } } } return sprites; }; const cloneMenu = function cloneMenu() { if (vm.editingTarget && vm.editingTarget.isStage) { const menu = spriteMenu(); if (menu.length === 0) { return [['', '']]; // Empty menu matches Scratch 2 behavior } return menu; } const myself = ScratchBlocks.ScratchMsgs.translate('CONTROL_CREATECLONEOF_MYSELF', 'myself'); return [[myself, '_myself_']].concat(spriteMenu()); }; const soundColors = ScratchBlocks.Colours.sounds; const looksColors = ScratchBlocks.Colours.looks; const motionColors = ScratchBlocks.Colours.motion; const sensingColors = ScratchBlocks.Colours.sensing; const controlColors = ScratchBlocks.Colours.control; const eventColors = ScratchBlocks.Colours.event; ScratchBlocks.Blocks.sound_sounds_menu.init = function () { const json = jsonForMenuBlock('SOUND_MENU', soundsMenu, soundColors, []); this.jsonInit(json); }; ScratchBlocks.Blocks.looks_costume.init = function () { const json = jsonForMenuBlock('COSTUME', costumesMenu, looksColors, []); this.jsonInit(json); }; ScratchBlocks.Blocks.looks_backdrops.init = function () { const json = jsonForMenuBlock('BACKDROP', backdropsMenu, looksColors, []); this.jsonInit(json); }; ScratchBlocks.Blocks.event_whenbackdropswitchesto.init = function () { const json = jsonForHatBlockMenu(ScratchBlocks.Msg.EVENT_WHENBACKDROPSWITCHESTO, 'BACKDROP', backdropNamesMenu, eventColors, []); this.jsonInit(json); }; ScratchBlocks.Blocks.motion_pointtowards_menu.init = function () { const random = ScratchBlocks.ScratchMsgs.translate('MOTION_POINTTOWARDS_RANDOM', 'random direction'); const mouse = ScratchBlocks.ScratchMsgs.translate('MOTION_POINTTOWARDS_POINTER', 'mouse-pointer'); const json = jsonForMenuBlock('TOWARDS', spriteMenu, motionColors, [[mouse, '_mouse_'], [random, '_random_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.motion_goto_menu.init = function () { const random = ScratchBlocks.ScratchMsgs.translate('MOTION_GOTO_RANDOM', 'random position'); const mouse = ScratchBlocks.ScratchMsgs.translate('MOTION_GOTO_POINTER', 'mouse-pointer'); const json = jsonForMenuBlock('TO', spriteMenu, motionColors, [[random, '_random_'], [mouse, '_mouse_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.motion_glideto_menu.init = function () { const random = ScratchBlocks.ScratchMsgs.translate('MOTION_GLIDETO_RANDOM', 'random position'); const mouse = ScratchBlocks.ScratchMsgs.translate('MOTION_GLIDETO_POINTER', 'mouse-pointer'); const json = jsonForMenuBlock('TO', spriteMenu, motionColors, [[random, '_random_'], [mouse, '_mouse_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.sensing_of_object_menu.init = function () { const stage = ScratchBlocks.ScratchMsgs.translate('SENSING_OF_STAGE', 'Stage'); const json = jsonForMenuBlock('OBJECT', spriteMenu, sensingColors, [[stage, '_stage_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.sensing_of.init = function () { const blockId = this.id; const blockType = this.type; // Get the sensing_of block from vm. let defaultSensingOfBlock; const blocks = vm.runtime.flyoutBlocks._blocks; Object.keys(blocks).forEach(id => { const block = blocks[id]; if (id === blockType || block && block.opcode === blockType) { defaultSensingOfBlock = block; } }); // Function that fills in menu for the first input in the sensing block. // Called every time it opens since it depends on the values in the other block input. const menuFn = function menuFn() { const stageOptions = [[ScratchBlocks.Msg.SENSING_OF_BACKDROPNUMBER, 'backdrop #'], [ScratchBlocks.Msg.SENSING_OF_BACKDROPNAME, 'backdrop name'], [ScratchBlocks.Msg.SENSING_OF_VOLUME, 'volume']]; const spriteOptions = [[ScratchBlocks.Msg.SENSING_OF_XPOSITION, 'x position'], [ScratchBlocks.Msg.SENSING_OF_YPOSITION, 'y position'], [ScratchBlocks.Msg.SENSING_OF_DIRECTION, 'direction'], [ScratchBlocks.Msg.SENSING_OF_COSTUMENUMBER, 'costume #'], [ScratchBlocks.Msg.SENSING_OF_COSTUMENAME, 'costume name'], ['layer', 'layer'], [ScratchBlocks.Msg.SENSING_OF_SIZE, 'size'], [ScratchBlocks.Msg.SENSING_OF_VOLUME, 'volume']]; if (vm.editingTarget) { let lookupBlocks = vm.editingTarget.blocks; let sensingOfBlock = lookupBlocks.getBlock(blockId); // The block doesn't exist, but should be in the flyout. Look there. if (!sensingOfBlock) { sensingOfBlock = vm.runtime.flyoutBlocks.getBlock(blockId) || defaultSensingOfBlock; // If we still don't have a block, just return an empty list . This happens during // scratch blocks construction. if (!sensingOfBlock) { return [['', '']]; } // The block was in the flyout so look up future block info there. lookupBlocks = vm.runtime.flyoutBlocks; } const sort = function sort(options) { options.sort(ScratchBlocks.scratchBlocksUtils.compareStrings); }; // Get all the stage variables (no lists) so we can add them to menu when the stage is selected. const stageVariableOptions = vm.runtime.getTargetForStage().getAllVariableNamesInScopeByType(''); sort(stageVariableOptions); const stageVariableMenuItems = stageVariableOptions.map(variable => [variable, variable]); if (sensingOfBlock.inputs.OBJECT.shadow !== sensingOfBlock.inputs.OBJECT.block) { // There's a block dropped on top of the menu. It'd be nice to evaluate it and // return the correct list, but that is tricky. Scratch2 just returns stage options // so just do that here too. return stageOptions.concat(stageVariableMenuItems); } const menuBlock = lookupBlocks.getBlock(sensingOfBlock.inputs.OBJECT.shadow); const selectedItem = menuBlock.fields.OBJECT.value; if (selectedItem === '_stage_') { return stageOptions.concat(stageVariableMenuItems); } // Get all the local variables (no lists) and add them to the menu. const target = vm.runtime.getSpriteTargetByName(selectedItem); let spriteVariableOptions = []; // The target should exist, but there are ways for it not to (e.g. #4203). if (target) { spriteVariableOptions = target.getAllVariableNamesInScopeByType('', true); sort(spriteVariableOptions); } const spriteVariableMenuItems = spriteVariableOptions.map(variable => [variable, variable]); return spriteOptions.concat(spriteVariableMenuItems); } return [['', '']]; }; const json = jsonForSensingMenus(menuFn); this.jsonInit(json); }; ScratchBlocks.Blocks.sensing_set_of.init = function () { const blockId = this.id; const blockType = this.type; // Get the sensing_of block from vm. let defaultSensingOfBlock; const blocks = vm.runtime.flyoutBlocks._blocks; Object.keys(blocks).forEach(id => { const block = blocks[id]; if (id === blockType || block && block.opcode === blockType) { defaultSensingOfBlock = block; } }); // Function that fills in menu for the first input in the sensing block. // Called every time it opens since it depends on the values in the other block input. const menuFn = function menuFn() { const stageOptions = [['backdrop', 'backdrop'], [ScratchBlocks.Msg.SENSING_OF_VOLUME, 'volume']]; const spriteOptions = [[ScratchBlocks.Msg.SENSING_OF_XPOSITION, 'x position'], [ScratchBlocks.Msg.SENSING_OF_YPOSITION, 'y position'], [ScratchBlocks.Msg.SENSING_OF_DIRECTION, 'direction'], ['costume', 'costume'], [ScratchBlocks.Msg.SENSING_OF_SIZE, 'size'], [ScratchBlocks.Msg.SENSING_OF_VOLUME, 'volume']]; if (vm.editingTarget) { let lookupBlocks = vm.editingTarget.blocks; let sensingOfBlock = lookupBlocks.getBlock(blockId); // The block doesn't exist, but should be in the flyout. Look there. if (!sensingOfBlock) { sensingOfBlock = vm.runtime.flyoutBlocks.getBlock(blockId) || defaultSensingOfBlock; // If we still don't have a block, just return an empty list . This happens during // scratch blocks construction. if (!sensingOfBlock) { return [['', '']]; } // The block was in the flyout so look up future block info there. lookupBlocks = vm.runtime.flyoutBlocks; } const sort = function sort(options) { options.sort(ScratchBlocks.scratchBlocksUtils.compareStrings); }; // Get all the stage variables (no lists) so we can add them to menu when the stage is selected. const stageVariableOptions = vm.runtime.getTargetForStage().getAllVariableNamesInScopeByType(''); sort(stageVariableOptions); const stageVariableMenuItems = stageVariableOptions.map(variable => [variable, variable]); if (sensingOfBlock.inputs.OBJECT.shadow !== sensingOfBlock.inputs.OBJECT.block) { // There's a block dropped on top of the menu. It'd be nice to evaluate it and // return the correct list, but that is tricky. Scratch2 just returns stage options // so just do that here too. return stageOptions.concat(stageVariableMenuItems); } const menuBlock = lookupBlocks.getBlock(sensingOfBlock.inputs.OBJECT.shadow); const selectedItem = menuBlock.fields.OBJECT.value; if (selectedItem === '_stage_') { return stageOptions.concat(stageVariableMenuItems); } // Get all the local variables (no lists) and add them to the menu. const target = vm.runtime.getSpriteTargetByName(selectedItem); let spriteVariableOptions = []; // The target should exist, but there are ways for it not to (e.g. #4203). if (target) { spriteVariableOptions = target.getAllVariableNamesInScopeByType('', true); sort(spriteVariableOptions); } const spriteVariableMenuItems = spriteVariableOptions.map(variable => [variable, variable]); return spriteOptions.concat(spriteVariableMenuItems); } return [['', '']]; }; const json = jsonForSensingSetMenus(menuFn); this.jsonInit(json); }; ScratchBlocks.Blocks.sensing_distancetomenu.init = function () { const mouse = ScratchBlocks.ScratchMsgs.translate('SENSING_DISTANCETO_POINTER', 'mouse-pointer'); const json = jsonForMenuBlock('DISTANCETOMENU', spriteMenu, sensingColors, [[mouse, '_mouse_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.sensing_touchingobjectmenu.init = function () { const mouse = ScratchBlocks.ScratchMsgs.translate('SENSING_TOUCHINGOBJECT_POINTER', 'mouse-pointer'); const edge = ScratchBlocks.ScratchMsgs.translate('SENSING_TOUCHINGOBJECT_EDGE', 'edge'); const json = jsonForMenuBlock('TOUCHINGOBJECTMENU', spriteMenu, sensingColors, [[mouse, '_mouse_'], [edge, '_edge_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.sensing_fulltouchingobjectmenu.init = function () { const mouse = ScratchBlocks.ScratchMsgs.translate('SENSING_TOUCHINGOBJECT_POINTER', 'mouse-pointer'); const edge = ScratchBlocks.ScratchMsgs.translate('SENSING_TOUCHINGOBJECT_EDGE', 'edge'); const json = jsonForMenuBlock('FULLTOUCHINGOBJECTMENU', spriteMenu, sensingColors, [[mouse, '_mouse_'], [edge, '_edge_'], ['this sprite', '_myself_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.sensing_touchingobjectmenusprites.init = function () { const json = jsonForMenuBlock('SPRITETOUCHINGOBJECTMENU', spriteMenu, sensingColors, [['this sprite', '_myself_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.control_create_clone_of_menu.init = function () { const json = jsonForMenuBlock('CLONE_OPTION', cloneMenu, controlColors, []); this.jsonInit(json); }; ScratchBlocks.Blocks.control_run_as_sprite_menu.init = function () { const json = jsonForMenuBlock('RUN_AS_OPTION', spriteMenu, controlColors, [['Stage', '_stage_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.control_stop_sprite_menu.init = function () { const json = jsonForMenuBlock('STOP_OPTION', spriteMenu, controlColors, [['Stage', '_stage_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.looks_getOtherSpriteVisible_menu.init = function () { const json = jsonForMenuBlock('VISIBLE_OPTION', spriteMenu, looksColors, [['this sprite', '_myself_']]); this.jsonInit(json); }; ScratchBlocks.Blocks.looks_changeVisibilityOfSprite_menu.init = function () { const json = jsonForMenuBlock('VISIBLE_OPTION', spriteMenu, looksColors, [['this sprite', '_myself_']]); this.jsonInit(json); }; ScratchBlocks.VerticalFlyout.getCheckboxState = function (blockId, inputList) { const monitoredBlock = vm.runtime.monitorBlocks._blocks[blockId]; if (!monitoredBlock) return false; const { opcode, fields } = monitoredBlock; if (opcode == "data_variable" || opcode == "data_listcontents") return monitoredBlock ? monitoredBlock.isMonitored : false; const parsedFields = inputList[0].fieldRow.filter(_ref => { let { name } = _ref; return name in fields; }).map(field => { if (field.variable_) return field.variable_.name; return field.name === "CURRENTMENU" ? field.value_.toLowerCase() : field.value_; }).join("_"); const newBlockId = blockId + (parsedFields.length ? "_" : "") + parsedFields; const newMonitoredBlock = vm.runtime.monitorBlocks._blocks[newBlockId]; return newMonitoredBlock ? newMonitoredBlock.isMonitored : false; }; ScratchBlocks.FlyoutExtensionCategoryHeader.getExtensionState = function (extensionId) { if (vm.getPeripheralIsConnected(extensionId)) { return ScratchBlocks.StatusButtonState.READY; } return ScratchBlocks.StatusButtonState.NOT_READY; }; ScratchBlocks.FieldNote.playNote_ = function (noteNum, extensionId) { vm.runtime.emit('PLAY_NOTE', noteNum, extensionId); }; // Use a collator's compare instead of localeCompare which internally // creates a collator. Using this is a lot faster in browsers that create a // collator for every localeCompare call. const collator = new Intl.Collator([], { sensitivity: 'base', numeric: true }); ScratchBlocks.scratchBlocksUtils.compareStrings = function (str1, str2) { return collator.compare(str1, str2); }; // Blocks wants to know if 3D CSS transforms are supported. The cross // section of browsers Scratch supports and browsers that support 3D CSS // transforms will make the return always true. // // Shortcutting to true lets us skip an expensive style recalculation when // first loading the Scratch editor. ScratchBlocks.utils.is3dSupported = function () { return true; }; // brute force a toolbox update if there are no extensions loaded // Someone made a commit that broke initial toolbox populate calls back in the day // and no one can find it, this brute fixes the problem... vm.runtime.on("PROJECT_LOADED", () => { if (vm.extensionManager._loadedExtensions.size > 0) return; const workspace = ScratchBlocks.getMainWorkspace(); const toolbox = workspace.getToolbox(); if (!toolbox) return; const categoryMenu = toolbox.categoryMenu_; if (!categoryMenu) return; if (categoryMenu.secondTable) return; categoryMenu.dispose(); categoryMenu.createDom(); toolbox.populate_(workspace.options.languageTree); toolbox.position(); }); return ScratchBlocks; }); /***/ }), /***/ "./src/lib/bmp-converter.js": /*!**********************************!*\ !*** ./src/lib/bmp-converter.js ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = (function (bmpImage) { let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'image/bmp'; return new Promise(resolve => { // If the input is an ArrayBuffer, we need to convert it to a `Blob` and give it a URL so we can use it as an // `src`. If it's a data URI, we can use it as-is. const imageUrl = bmpImage instanceof String ? bmpImage : window.URL.createObjectURL(new Blob([bmpImage], { type })); const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); const image = document.createElement('img'); image.addEventListener('load', () => { canvas.width = image.naturalWidth; canvas.height = image.naturalHeight; ctx.drawImage(image, 0, 0); const dataUrl = canvas.toDataURL('image/png'); // Revoke URL. If a blob URL was generated earlier, this allows the blob to be GC'd and prevents a memory leak. window.URL.revokeObjectURL(imageUrl); resolve(dataUrl); }); image.setAttribute('src', imageUrl); }); }); /***/ }), /***/ "./src/lib/brand.js": /*!**************************!*\ !*** ./src/lib/brand.js ***! \**************************/ /*! exports provided: APP_NAME */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "APP_NAME", function() { return APP_NAME; }); const APP_NAME = 'Scratch for School'; /***/ }), /***/ "./src/lib/cloud-manager-hoc.jsx": /*!***************************************!*\ !*** ./src/lib/cloud-manager-hoc.jsx ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js"); /* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _lib_cloud_provider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/cloud-provider */ "./src/lib/cloud-provider.js"); /* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js"); /* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js"); /* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js"); /* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js"); const _excluded = ["canModifyCloudData", "cloudHost", "reduxCloudHost", "onSetReduxCloudHost", "projectId", "username", "hasCloudPermission", "isShowingWithId", "onShowCloudInfo", "onInvalidUsername", "vm"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } /* * Higher Order Component to manage the connection to the cloud server. * @param {React.Component} WrappedComponent component to manage VM events for * @returns {React.Component} connected component with vm events bound to redux */ const cloudManagerHOC = function cloudManagerHOC(WrappedComponent) { class CloudManager extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component { constructor(props) { super(props); this.cloudProvider = null; lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleCloudDataUpdate', 'onInvalidUsername']); this.props.vm.on('HAS_CLOUD_DATA_UPDATE', this.handleCloudDataUpdate); this.props.onSetReduxCloudHost(this.props.cloudHost); } componentDidMount() { if (this.shouldConnect(this.props)) { this.connectToCloud(); } } componentWillReceiveProps(nextProps) { if (this.props.reduxCloudHost !== nextProps.cloudHost) { this.props.onSetReduxCloudHost(nextProps.cloudHost); } } componentDidUpdate(prevProps) { // TODO need to add cloud provider disconnection logic and cloud data clearing logic // when loading a new project e.g. via file upload // (and eventually move it out of the vm.clear function) if (this.shouldReconnect(this.props, prevProps)) { this.disconnectFromCloud(); if (this.shouldConnect(this.props)) { this.connectToCloud(); } return; } if (this.shouldConnect(this.props) && !this.shouldConnect(prevProps)) { this.connectToCloud(); } if (this.shouldDisconnect(this.props, prevProps)) { this.disconnectFromCloud(); } } componentWillUnmount() { this.props.vm.off('HAS_CLOUD_DATA_UPDATE', this.handleCloudDataUpdate); this.disconnectFromCloud(); } canUseCloud(props) { return !!(props.reduxCloudHost && props.username && props.vm && props.projectId && props.hasCloudPermission); } shouldConnect(props) { return !this.isConnected() && this.canUseCloud(props) && props.isShowingWithId && props.vm.runtime.hasCloudData() && props.canModifyCloudData; } shouldDisconnect(props, prevProps) { return this.isConnected() && ( // Can no longer use cloud or cloud provider info is now stale !this.canUseCloud(props) || !props.vm.runtime.hasCloudData() || props.projectId !== prevProps.projectId || // tw: username changes are handled in "reconnect" // (props.username !== prevProps.username) || // Editing someone else's project !props.canModifyCloudData); } shouldReconnect(props, prevProps) { return this.isConnected() && (props.username !== prevProps.username || props.reduxCloudHost !== prevProps.reduxCloudHost); } isConnected() { return this.cloudProvider && !!this.cloudProvider.connection; } connectToCloud() { this.cloudProvider = new _lib_cloud_provider__WEBPACK_IMPORTED_MODULE_5__["default"](this.props.reduxCloudHost, this.props.vm, this.props.username, this.props.projectId); this.cloudProvider.onInvalidUsername = this.onInvalidUsername; this.props.vm.setCloudProvider(this.cloudProvider); } disconnectFromCloud() { if (this.cloudProvider) { this.cloudProvider.requestCloseConnection(); this.cloudProvider = null; this.props.vm.setCloudProvider(null); } } handleCloudDataUpdate(projectHasCloudData) { if (this.isConnected() && !projectHasCloudData) { this.disconnectFromCloud(); } else if (this.shouldConnect(this.props)) { this.props.onShowCloudInfo(); this.connectToCloud(); } } onInvalidUsername() { this.props.onInvalidUsername(); } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ canModifyCloudData, cloudHost, reduxCloudHost, onSetReduxCloudHost, projectId, username, hasCloudPermission, isShowingWithId, onShowCloudInfo, onInvalidUsername, /* eslint-enable no-unused-vars */ vm } = _this$props, componentProps = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(WrappedComponent, _extends({ canUseCloud: this.canUseCloud(this.props), vm: vm }, componentProps)); } } CloudManager.propTypes = { canModifyCloudData: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, cloudHost: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, reduxCloudHost: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, onSetReduxCloudHost: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, hasCloudPermission: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool, isShowingWithId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired, onInvalidUsername: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, onShowCloudInfo: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func, projectId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.number]), username: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string, vm: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired }; CloudManager.defaultProps = { cloudHost: null, onShowCloudInfo: () => {}, username: null }; const mapStateToProps = (state, ownProps) => { const loadingState = state.scratchGui.projectState.loadingState; return { reduxCloudHost: state.scratchGui.tw.cloudHost, isShowingWithId: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["getIsShowingWithId"])(loadingState), projectId: state.scratchGui.projectState.projectId, hasCloudPermission: state.scratchGui.tw.cloud, username: state.scratchGui.tw.username, canModifyCloudData: !state.scratchGui.mode.hasEverEnteredEditor || ownProps.canSave }; }; const mapDispatchToProps = dispatch => ({ onSetReduxCloudHost: cloudHost => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_9__["setCloudHost"])(cloudHost)), onShowCloudInfo: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_7__["showAlertWithTimeout"])(dispatch, 'cloudInfo'), onInvalidUsername: () => { dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_9__["setUsernameInvalid"])(true)); dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_8__["openUsernameModal"])()); } }); // Allow incoming props to override redux-provided props. Used to mock in tests. const mergeProps = (stateProps, dispatchProps, ownProps) => Object.assign({}, stateProps, dispatchProps, ownProps); return Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps, mergeProps)(CloudManager); }; /* harmony default export */ __webpack_exports__["default"] = (cloudManagerHOC); /***/ }), /***/ "./src/lib/cloud-provider.js": /*!***********************************!*\ !*** ./src/lib/cloud-provider.js ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./log.js */ "./src/lib/log.js"); /* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.throttle */ "./node_modules/lodash.throttle/index.js"); /* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_throttle__WEBPACK_IMPORTED_MODULE_1__); const anonymizeUsername = username => { if (/^player\d{2,7}$/i.test(username)) { return 'player'; } return username; }; class CloudProvider { /** * A cloud data provider which creates and manages a web socket connection * to the Scratch cloud data server. This provider is responsible for * interfacing with the VM's cloud io device. * @param {string} cloudHost The url for the cloud data server * @param {VirtualMachine} vm The Scratch virtual machine to interface with * @param {string} username The username to associate cloud data updates with * @param {string} projectId The id associated with the project containing * cloud data. */ constructor(cloudHost, vm, username, projectId) { this.vm = vm; this.username = anonymizeUsername(username); this.projectId = projectId; this.cloudHost = cloudHost; this.connectionAttempts = 0; // A queue of messages to send which were received before the // connection was ready this.queuedData = []; this.openConnection(); // Send a message to the cloud server at a rate of no more // than 10 messages/sec. // tw: we let cloud variables change at a greater rate this.sendCloudData = lodash_throttle__WEBPACK_IMPORTED_MODULE_1___default()(this._sendCloudData, 50); } /** * Open a new websocket connection to the clouddata server. * @param {string} cloudHost The cloud data server to connect to. */ openConnection() { this.connectionAttempts += 1; try { // tw: only add ws:// or wss:// if it not already present in the cloudHost if (!this.cloudHost || !this.cloudHost.includes('ws://') && !this.cloudHost.includes('wss://')) { this.cloudHost = (location.protocol === 'http:' ? 'ws://' : 'wss://') + this.cloudHost; } this.connection = new WebSocket(this.cloudHost); } catch (e) { _log_js__WEBPACK_IMPORTED_MODULE_0__["default"].warn('Websocket support is not available in this browser', e); this.connection = null; return; } this.connection.onerror = this.onError.bind(this); this.connection.onmessage = this.onMessage.bind(this); this.connection.onopen = this.onOpen.bind(this); this.connection.onclose = this.onClose.bind(this); } onError(event) { _log_js__WEBPACK_IMPORTED_MODULE_0__["default"].error("Websocket connection error: ".concat(JSON.stringify(event))); // Error is always followed by close, which handles reconnect logic. } onMessage(event) { const messageString = event.data; // Multiple commands can be received, newline separated messageString.split('\n').forEach(message => { if (message) { // .split can also contain '' in the array it returns const parsedData = this.parseMessage(JSON.parse(message)); this.vm.postIOData('cloud', parsedData); } }); } onOpen() { // Reset connection attempts to 1 to make sure any subsequent reconnects // use connectionAttempts=1 to calculate timeout this.connectionAttempts = 1; this.writeToServer('handshake'); _log_js__WEBPACK_IMPORTED_MODULE_0__["default"].info("Successfully connected to clouddata server."); // Go through the queued data and send off messages that we weren't // ready to send before this.queuedData.forEach(data => { this.sendCloudData(data); }); // Reset the queue this.queuedData = []; } onClose(e) { // tw: code 4002 is "Username Error" -- do not try to reconnect if (e && e.code === 4002) { _log_js__WEBPACK_IMPORTED_MODULE_0__["default"].info('Cloud username is invalid. Not reconnecting.'); this.onInvalidUsername(); return; } // tw: code 4004 is "Project Unavailable" -- do not try to reconnect if (e && e.code === 4004) { _log_js__WEBPACK_IMPORTED_MODULE_0__["default"].info('Cloud variables are disabled for this project. Not reconnecting.'); return; } _log_js__WEBPACK_IMPORTED_MODULE_0__["default"].info("Closed connection to websocket"); const randomizedTimeout = this.randomizeDuration(this.exponentialTimeout()); this.setTimeout(this.openConnection.bind(this), randomizedTimeout); } // tw: method called when username is invalid onInvalidUsername() {/* no-op */} exponentialTimeout() { return (Math.pow(2, Math.min(this.connectionAttempts, 5)) - 1) * 1000; } randomizeDuration(t) { return Math.random() * t; } setTimeout(fn, time) { _log_js__WEBPACK_IMPORTED_MODULE_0__["default"].info("Reconnecting in ".concat((time / 1000).toFixed(1), "s, attempt ").concat(this.connectionAttempts)); this._connectionTimeout = window.setTimeout(fn, time); } parseMessage(message) { const varData = {}; switch (message.method) { case 'set': { varData.varUpdate = { name: message.name, value: message.value }; break; } } return varData; } /** * Format and send a message to the cloud data server. * @param {string} methodName The message method, indicating the action to perform. * @param {string} dataName The name of the cloud variable this message pertains to * @param {string | number} dataValue The value to set the cloud variable to * @param {string} dataNewName The new name for the cloud variable (if renaming) */ writeToServer(methodName, dataName, dataValue, dataNewName) { const msg = {}; msg.method = methodName; msg.user = this.username; msg.project_id = this.projectId; // Optional string params can use simple falsey undefined check if (dataName) msg.name = dataName; if (dataNewName) msg.new_name = dataNewName; // Optional number params need different undefined check if (typeof dataValue !== 'undefined' && dataValue !== null) msg.value = dataValue; const dataToWrite = JSON.stringify(msg); if (this.connection && this.connection.readyState === WebSocket.OPEN) { this.sendCloudData(dataToWrite); } else if (msg.method === 'create' || msg.method === 'delete' || msg.method === 'rename') { // Save data for sending when connection is open, iff the data // is a create, rename, or delete this.queuedData.push(dataToWrite); } } /** * Send a formatted message to the cloud data server. * @param {string} data The formatted message to send. */ _sendCloudData(data) { this.connection.send("".concat(data, "\n")); } /** * Provides an API for the VM's cloud IO device to create * a new cloud variable on the server. * @param {string} name The name of the variable to create * @param {string | number} value The value of the new cloud variable. */ createVariable(name, value) { this.writeToServer('create', name, value); } /** * Provides an API for the VM's cloud IO device to update * a cloud variable on the server. * @param {string} name The name of the variable to update * @param {string | number} value The new value for the variable */ updateVariable(name, value) { this.writeToServer('set', name, value); } /** * Provides an API for the VM's cloud IO device to rename * a cloud variable on the server. * @param {string} oldName The old name of the variable to rename * @param {string} newName The new name for the cloud variable. */ renameVariable(oldName, newName) { this.writeToServer('rename', oldName, null, newName); } /** * Provides an API for the VM's cloud IO device to delete * a cloud variable on the server. * @param {string} name The name of the variable to delete */ deleteVariable(name) { this.writeToServer('delete', name); } /** * Closes the connection to the web socket and clears the cloud * provider of references related to the cloud data project. */ requestCloseConnection() { if (this.connection && this.connection.readyState !== WebSocket.CLOSING && this.connection.readyState !== WebSocket.CLOSED) { _log_js__WEBPACK_IMPORTED_MODULE_0__["default"].info('Request close cloud connection without reconnecting'); // Remove listeners, after this point we do not want to react to connection updates this.connection.onclose = () => {}; this.connection.onerror = () => {}; this.connection.close(); } this.clear(); } /** * Clear this provider of references related to the project * and current state. */ clear() { this.connection = null; this.vm = null; this.username = null; this.projectId = null; if (this._connectionTimeout) { clearTimeout(this._connectionTimeout); this._connectionTimeout = null; } this.connectionAttempts = 0; } } /* harmony default export */ __webpack_exports__["default"] = (CloudProvider); /***/ }), /***/ "./src/lib/collect-metadata.js": /*!*************************************!*\ !*** ./src/lib/collect-metadata.js ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /** * Report a telemetry event. * @param {string} event - one of `projectWasCreated`, `projectDidLoad`, `projectDidSave`, `projectWasUploaded` */ // TODO make a telemetry HOC and move this stuff there const collectMetadata = function collectMetadata(vm) { let projectName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; let locale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; // TODO move most or all of this into a collectMetadata() method on the VM/Runtime const metadata = { projectName: projectName, language: locale, spriteCount: 0, blocksCount: 0, costumesCount: 0, listsCount: 0, scriptCount: 0, soundsCount: 0, variablesCount: 0 }; for (const target of vm.runtime.targets) { ++metadata.spriteCount; metadata.blocksCount += Object.keys(target.sprite.blocks._blocks).length; metadata.costumesCount += target.sprite.costumes_.length; metadata.scriptCount += target.sprite.blocks._scripts.length; metadata.soundsCount += target.sprite.sounds.length; for (const variableName in target.variables) { const variable = target.variables[variableName]; if (variable.type === 'list') { ++metadata.listsCount; } else { ++metadata.variablesCount; } } } return metadata; }; /* harmony default export */ __webpack_exports__["default"] = (collectMetadata); /***/ }), /***/ "./src/lib/connected-intl-provider.jsx": /*!*********************************************!*\ !*** ./src/lib/connected-intl-provider.jsx ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); const mapStateToProps = state => ({ key: state.locales.locale, locale: state.locales.locale, messages: state.locales.messages }); /* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(mapStateToProps)(react_intl__WEBPACK_IMPORTED_MODULE_0__["IntlProvider"])); /***/ }), /***/ "./src/lib/data-uri-to-blob.js": /*!*************************************!*\ !*** ./src/lib/data-uri-to-blob.js ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return dataURItoBlob; }); /** * Utility to convert data URIs to blobs * Adapted from https://stackoverflow.com/questions/12168909/blob-from-dataurl * @param {string} dataURI the data uri to blobify * @return {Blob} a blob representing the data uri */ function dataURItoBlob(dataURI) { const byteString = atob(dataURI.split(',')[1]); const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; const arrayBuffer = new ArrayBuffer(byteString.length); const uintArray = new Uint8Array(arrayBuffer); for (let i = 0; i < byteString.length; i++) { uintArray[i] = byteString.charCodeAt(i); } const blob = new Blob([arrayBuffer], { type: mimeString }); return blob; } /***/ }), /***/ "./src/lib/default-project/index.js": /*!******************************************!*\ !*** ./src/lib/default-project/index.js ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _project_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./project-data */ "./src/lib/default-project/project-data.js"); /* harmony import */ var _arraybuffer_loader_default_project_sb3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! arraybuffer-loader!./default-project.sb3 */ "./node_modules/arraybuffer-loader/index.js!./src/lib/default-project/default-project.sb3"); /* harmony import */ var _arraybuffer_loader_default_project_sb3__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_arraybuffer_loader_default_project_sb3__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _raw_loader_cd21514d0531fdffb22204e0ec5ed84a_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! raw-loader!./cd21514d0531fdffb22204e0ec5ed84a.svg */ "./node_modules/raw-loader/index.js!./src/lib/default-project/cd21514d0531fdffb22204e0ec5ed84a.svg"); /* harmony import */ var _raw_loader_cd21514d0531fdffb22204e0ec5ed84a_svg__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_raw_loader_cd21514d0531fdffb22204e0ec5ed84a_svg__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _raw_loader_penguin_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! raw-loader!./penguin.svg */ "./node_modules/raw-loader/index.js!./src/lib/default-project/penguin.svg"); /* harmony import */ var _raw_loader_penguin_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_raw_loader_penguin_svg__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _tw_text_encoder__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../tw-text-encoder */ "./src/lib/tw-text-encoder.js"); /* eslint-disable import/no-unresolved */ /* eslint-enable import/no-unresolved */ const defaultProject = translator => { if (_arraybuffer_loader_default_project_sb3__WEBPACK_IMPORTED_MODULE_1___default.a.byteLength > 0) { return [{ id: 0, assetType: 'Project', dataFormat: 'JSON', data: _arraybuffer_loader_default_project_sb3__WEBPACK_IMPORTED_MODULE_1___default.a }]; } let _TextEncoder; if (typeof _tw_text_encoder__WEBPACK_IMPORTED_MODULE_4__["TextEncoder"] === 'undefined') { _TextEncoder = __webpack_require__(/*! text-encoding */ "./src/lib/tw-text-encoder.js").TextEncoder; } else { _TextEncoder = _tw_text_encoder__WEBPACK_IMPORTED_MODULE_4__["TextEncoder"]; } const encoder = new _TextEncoder(); const projectJson = Object(_project_data__WEBPACK_IMPORTED_MODULE_0__["default"])(translator); return [{ id: 0, assetType: 'Project', dataFormat: 'JSON', data: JSON.stringify(projectJson) }, { id: 'cd21514d0531fdffb22204e0ec5ed84a', assetType: 'ImageVector', dataFormat: 'SVG', data: encoder.encode(_raw_loader_cd21514d0531fdffb22204e0ec5ed84a_svg__WEBPACK_IMPORTED_MODULE_2___default.a) }, { id: 'c434b674f2da18ba13cdfe51dbc05ecc', assetType: 'ImageVector', dataFormat: 'SVG', data: encoder.encode(_raw_loader_penguin_svg__WEBPACK_IMPORTED_MODULE_3___default.a) }]; }; /* harmony default export */ __webpack_exports__["default"] = (defaultProject); /***/ }), /***/ "./src/lib/default-project/project-data.js": /*!*************************************************!*\ !*** ./src/lib/default-project/project-data.js ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _shared_messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared-messages */ "./src/lib/shared-messages.js"); function 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; } function _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; } function _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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _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); } let messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["defineMessages"])({ variable: { "id": "gui.defaultProject.variable", "defaultMessage": "my variable" } }); messages = _objectSpread(_objectSpread({}, messages), _shared_messages__WEBPACK_IMPORTED_MODULE_1__["default"]); // use the default message if a translation function is not passed const defaultTranslator = msgObj => msgObj.defaultMessage; /** * Generate a localized version of the default project * @param {function} translateFunction a function to use for translating the default names * @return {object} the project data json for the default project */ const projectData = translateFunction => { const translator = translateFunction || defaultTranslator; return { targets: [{ isStage: true, name: 'Stage', variables: { '`jEk@4|i[#Fk?(8x)AV.-my variable': [translator(messages.variable), 0] }, lists: {}, broadcasts: {}, blocks: {}, currentCostume: 0, costumes: [{ assetId: 'cd21514d0531fdffb22204e0ec5ed84a', name: translator(messages.backdrop, { index: 1 }), md5ext: 'cd21514d0531fdffb22204e0ec5ed84a.svg', dataFormat: 'svg', rotationCenterX: 240, rotationCenterY: 180 }], sounds: [], volume: 100 }, { isStage: false, name: translator(messages.sprite, { index: 1 }), variables: {}, lists: {}, broadcasts: {}, blocks: {}, comments: {}, currentCostume: 0, costumes: [{ assetId: '592bae6f8bb9c8d88401b54ac431f7b6', name: translator(messages.costume, { index: 1 }), bitmapResolution: 1, md5ext: '592bae6f8bb9c8d88401b54ac431f7b6.svg', dataFormat: 'svg', rotationCenterX: 26, rotationCenterY: 47 }], sounds: [], volume: 100, visible: true, x: 0, y: 0, size: 100, direction: 90, draggable: false, rotationStyle: 'all around' }], meta: { semver: '3.0.0', vm: '0.1.0', agent: '' } }; }; /* harmony default export */ __webpack_exports__["default"] = (projectData); /***/ }), /***/ "./src/lib/define-dynamic-block.js": /*!*****************************************!*\ !*** ./src/lib/define-dynamic-block.js ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var scratch_vm_src_extension_support_argument_type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scratch-vm/src/extension-support/argument-type */ "./node_modules/scratch-vm/src/extension-support/argument-type.js"); /* harmony import */ var scratch_vm_src_extension_support_argument_type__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scratch_vm_src_extension_support_argument_type__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var scratch_vm_src_extension_support_block_type__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! scratch-vm/src/extension-support/block-type */ "./node_modules/scratch-vm/src/extension-support/block-type.js"); /* harmony import */ var scratch_vm_src_extension_support_block_type__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(scratch_vm_src_extension_support_block_type__WEBPACK_IMPORTED_MODULE_1__); // TODO: access `BlockType` and `ArgumentType` without reaching into VM // Should we move these into a new extension support module or something? /** * Define a block using extension info which has the ability to dynamically determine (and update) its layout. * This functionality is used for extension blocks which can change its properties based on different state * information. For example, the `control_stop` block changes its shape based on which menu item is selected * and a variable block changes its text to reflect the variable name without using an editable field. * @param {object} ScratchBlocks - The ScratchBlocks name space. * @param {object} categoryInfo - Information about this block's extension category, including any menus and icons. * @param {object} staticBlockInfo - The base block information before any dynamic changes. * @param {string} extendedOpcode - The opcode for the block (including the extension ID). */ // TODO: grow this until it can fully replace `_convertForScratchBlocks` in the VM runtime const defineDynamicBlock = (ScratchBlocks, categoryInfo, staticBlockInfo, extendedOpcode) => ({ init: function init() { const blockJson = { type: extendedOpcode, inputsInline: true, category: categoryInfo.name, colour: categoryInfo.color1, colourSecondary: categoryInfo.color2, colourTertiary: categoryInfo.color3 }; // There is a scratch-blocks / Blockly extension called "scratch_extension" which adjusts the styling of // blocks to allow for an icon, a feature of Scratch extension blocks. However, Scratch "core" extension // blocks don't have icons and so they should not use 'scratch_extension'. Adding a scratch-blocks / Blockly // extension after `jsonInit` isn't fully supported (?), so we decide now whether there will be an icon. if (staticBlockInfo.blockIconURI || categoryInfo.blockIconURI) { blockJson.extensions = ['scratch_extension']; } // initialize the basics of the block, to be overridden & extended later by `domToMutation` this.jsonInit(blockJson); // initialize the cached block info used to carry block info from `domToMutation` to `mutationToDom` this.blockInfoText = '{}'; // we need a block info update (through `domToMutation`) before we have a completely initialized block this.needsBlockInfoUpdate = true; }, mutationToDom: function mutationToDom() { const container = document.createElement('mutation'); container.setAttribute('blockInfo', this.blockInfoText); return container; }, domToMutation: function domToMutation(xmlElement) { const blockInfoText = xmlElement.getAttribute('blockInfo'); if (!blockInfoText) return; if (!this.needsBlockInfoUpdate) { throw new Error('Attempted to update block info twice'); } delete this.needsBlockInfoUpdate; this.blockInfoText = blockInfoText; const blockInfo = JSON.parse(blockInfoText); switch (blockInfo.blockType) { case scratch_vm_src_extension_support_block_type__WEBPACK_IMPORTED_MODULE_1___default.a.COMMAND: case scratch_vm_src_extension_support_block_type__WEBPACK_IMPORTED_MODULE_1___default.a.CONDITIONAL: case scratch_vm_src_extension_support_block_type__WEBPACK_IMPORTED_MODULE_1___default.a.LOOP: this.setOutputShape(ScratchBlocks.OUTPUT_SHAPE_SQUARE); this.setPreviousStatement(true); this.setNextStatement(!blockInfo.isTerminal); break; case scratch_vm_src_extension_support_block_type__WEBPACK_IMPORTED_MODULE_1___default.a.REPORTER: this.setOutput(true); this.setOutputShape(ScratchBlocks.OUTPUT_SHAPE_ROUND); if (!blockInfo.disableMonitor) { this.setCheckboxInFlyout(true); } break; case scratch_vm_src_extension_support_block_type__WEBPACK_IMPORTED_MODULE_1___default.a.BOOLEAN: this.setOutput(true); this.setOutputShape(ScratchBlocks.OUTPUT_SHAPE_HEXAGONAL); break; case scratch_vm_src_extension_support_block_type__WEBPACK_IMPORTED_MODULE_1___default.a.HAT: case scratch_vm_src_extension_support_block_type__WEBPACK_IMPORTED_MODULE_1___default.a.EVENT: this.setOutputShape(ScratchBlocks.OUTPUT_SHAPE_SQUARE); this.setNextStatement(true); break; } if (blockInfo.color1 || blockInfo.color2 || blockInfo.color3) { // `setColour` handles undefined parameters by adjusting defined colors this.setColour(blockInfo.color1, blockInfo.color2, blockInfo.color3); } // Layout block arguments // TODO handle E/C Blocks const blockText = blockInfo.text; const args = {}; let argCount = 0; const scratchBlocksStyleText = blockText.replace(/\[(.+?)]/g, (match, argName) => { const arg = blockInfo.arguments[argName]; switch (arg.type) { default: // bruh case scratch_vm_src_extension_support_argument_type__WEBPACK_IMPORTED_MODULE_0___default.a.STRING: args[argName] = { type: 'input_value', name: argName }; break; case scratch_vm_src_extension_support_argument_type__WEBPACK_IMPORTED_MODULE_0___default.a.BOOLEAN: args[argName] = { type: 'input_value', name: argName, check: 'Boolean' }; break; } if (arg.menu && !categoryInfo.menuInfo[arg.menu].acceptsReporters) { args[argName].type = 'field_dropdown'; args[argName].options = categoryInfo.menuInfo[arg.menu].items; args[argName].value = categoryInfo.menuInfo[arg.menu].items[0][1]; } return "%".concat(++argCount); }); this.interpolate_(scratchBlocksStyleText, Object.values(args)); if (this.isInsertionMarker()) return; for (const name in args) { var _connection$targetCon, _connection$targetCon2; if (args[name].type.startsWith('field_')) continue; const arg = blockInfo.arguments[name]; const connection = this.getInput(name).connection; const curBlock = (_connection$targetCon = connection.targetConnection) === null || _connection$targetCon === void 0 ? void 0 : (_connection$targetCon2 = _connection$targetCon.getParentBlock) === null || _connection$targetCon2 === void 0 ? void 0 : _connection$targetCon2.call(_connection$targetCon); if (curBlock && curBlock.type !== 'text' && !curBlock.type.startsWith('math_')) continue; if (arg.menu) { const fieldId = "".concat(categoryInfo.id, "_menu_").concat(arg.menu); if ((curBlock === null || curBlock === void 0 ? void 0 : curBlock.type) === fieldId) continue; if (curBlock) curBlock.dispose(); const newBlock = this.workspace.newBlock(fieldId); if (arg.defaultValue) newBlock.getField(arg.menu).setValue(arg.defaultValue); newBlock.setShadow(true); newBlock.initSvg(); newBlock.render(); continue; } switch (arg.type) { case scratch_vm_src_extension_support_argument_type__WEBPACK_IMPORTED_MODULE_0___default.a.STRING: { var _arg$defaultValue; if ((curBlock === null || curBlock === void 0 ? void 0 : curBlock.type) === 'text') break; if (curBlock) curBlock.dispose(); const newBlock = this.workspace.newBlock('text'); connection.connect(newBlock.outputConnection); newBlock.getField('TEXT').setValue((_arg$defaultValue = arg.defaultValue) !== null && _arg$defaultValue !== void 0 ? _arg$defaultValue : ''); newBlock.setShadow(true); newBlock.initSvg(); newBlock.render(); break; } case scratch_vm_src_extension_support_argument_type__WEBPACK_IMPORTED_MODULE_0___default.a.NUMBER: { var _arg$defaultValue2; if (curBlock && !curBlock.type.startsWith('math_')) break; if (curBlock) curBlock.dispose(); const newBlock = this.workspace.newBlock('math_number'); connection.connect(newBlock.outputConnection); newBlock.getField('NUM').setValue((_arg$defaultValue2 = arg.defaultValue) !== null && _arg$defaultValue2 !== void 0 ? _arg$defaultValue2 : ''); newBlock.setShadow(true); newBlock.initSvg(); newBlock.render(); break; } case scratch_vm_src_extension_support_argument_type__WEBPACK_IMPORTED_MODULE_0___default.a.BOOLEAN: { if (!curBlock) break; curBlock.dispose(); break; } } } } }); /* harmony default export */ __webpack_exports__["default"] = (defineDynamicBlock); /***/ }), /***/ "./src/lib/detect-locale.js": /*!**********************************!*\ !*** ./src/lib/detect-locale.js ***! \**********************************/ /*! exports provided: LANGUAGE_KEY, detectLocale */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LANGUAGE_KEY", function() { return LANGUAGE_KEY; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "detectLocale", function() { return detectLocale; }); /* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! query-string */ "./node_modules/query-string/index.js"); /* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(query_string__WEBPACK_IMPORTED_MODULE_0__); /** * @fileoverview * Utility function to detect locale from the browser setting or paramenter on the URL. */ // tw: read language from localStorage const LANGUAGE_KEY = 'tw:language'; /** * look for language setting in the browser. Check against supported locales. * If there's a parameter in the URL, override the browser setting * @param {Array.string} supportedLocales An array of supported locale codes. * @return {string} the preferred locale */ const detectLocale = supportedLocales => { // tw: read language from localStorage try { const storedLanguage = localStorage.getItem(LANGUAGE_KEY); if (storedLanguage && supportedLocales.includes(storedLanguage)) { return storedLanguage; } } catch (e) {/* ignore */} let locale = 'en'; // default let browserLocale = window.navigator.userLanguage || window.navigator.language; browserLocale = browserLocale.toLowerCase(); // try to set locale from browserLocale if (supportedLocales.includes(browserLocale)) { locale = browserLocale; } else { browserLocale = browserLocale.split('-')[0]; if (supportedLocales.includes(browserLocale)) { locale = browserLocale; } } const queryParams = query_string__WEBPACK_IMPORTED_MODULE_0___default.a.parse(location.search); // Flatten potential arrays and remove falsy values const potentialLocales = [].concat(queryParams.locale, queryParams.lang).filter(l => l); if (!potentialLocales.length) { return locale; } const urlLocale = potentialLocales[0].toLowerCase(); if (supportedLocales.includes(urlLocale)) { return urlLocale; } return locale; }; /***/ }), /***/ "./src/lib/download-blob.js": /*!**********************************!*\ !*** ./src/lib/download-blob.js ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ((filename, blob) => { const downloadLink = document.createElement('a'); document.body.appendChild(downloadLink); // Use special ms version if available to get it working on Edge. if (navigator.msSaveOrOpenBlob) { navigator.msSaveOrOpenBlob(blob, filename); return; } if ('download' in HTMLAnchorElement.prototype) { const url = window.URL.createObjectURL(blob); downloadLink.href = url; downloadLink.download = filename; downloadLink.type = blob.type; downloadLink.click(); // remove the link after a timeout to prevent a crash on iOS 13 Safari window.setTimeout(() => { document.body.removeChild(downloadLink); window.URL.revokeObjectURL(url); }, 1000); } else { // iOS 12 Safari, open a new page and set href to data-uri let popup = window.open('', '_blank'); const reader = new FileReader(); reader.onloadend = function () { popup.location.href = reader.result; popup = null; }; reader.readAsDataURL(blob); } }); /***/ }), /***/ "./src/lib/drag-constants.js": /*!***********************************!*\ !*** ./src/lib/drag-constants.js ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ({ SOUND: 'SOUND', COSTUME: 'COSTUME', SPRITE: 'SPRITE', CODE: 'CODE', BACKPACK_SOUND: 'BACKPACK_SOUND', BACKPACK_COSTUME: 'BACKPACK_COSTUME', BACKPACK_SPRITE: 'BACKPACK_SPRITE', BACKPACK_CODE: 'BACKPACK_CODE' }); /***/ }), /***/ "./src/lib/drag-recognizer.js": /*!************************************!*\ !*** ./src/lib/drag-recognizer.js ***! \************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_touch_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/touch-utils */ "./src/lib/touch-utils.js"); class DragRecognizer { /* Gesture states */ static get STATE_UNIDENTIFIED() { return 'unidentified'; } static get STATE_SCROLL() { return 'scroll'; } static get STATE_DRAG() { return 'drag'; } constructor(_ref) { let { onDrag = () => {}, onDragEnd = () => {}, touchDragAngle = 70, // Angle and distance thresholds are the same as scratch-blocks distanceThreshold = 3 } = _ref; this._onDrag = onDrag; this._onDragEnd = onDragEnd; this._touchDragAngle = touchDragAngle; this._distanceThreshold = distanceThreshold; this._initialOffset = null; this._gestureState = DragRecognizer.STATE_UNIDENTIFIED; lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['start', 'gestureInProgress', 'reset', '_handleMove', '_handleEnd']); } start(event) { if (typeof event.button === 'number' && event.button !== 0) { return; } this._initialOffset = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_1__["getEventXY"])(event); this._bindListeners(); } gestureInProgress() { return this._gestureState !== DragRecognizer.STATE_UNIDENTIFIED; } reset() { this._unbindListeners(); this._initialOffset = null; this._gestureState = DragRecognizer.STATE_UNIDENTIFIED; } // // Internal functions // _bindListeners() { window.addEventListener('mouseup', this._handleEnd); window.addEventListener('mousemove', this._handleMove); window.addEventListener('touchend', this._handleEnd); // touchmove must be marked as non-passive, or else it cannot prevent scrolling window.addEventListener('touchmove', this._handleMove, { passive: false }); } _unbindListeners() { window.removeEventListener('mouseup', this._handleEnd); window.removeEventListener('mousemove', this._handleMove); window.removeEventListener('touchend', this._handleEnd); window.removeEventListener('touchmove', this._handleMove, { passive: false }); } _handleMove(event) { // For gestures identified as vertical scrolls, do not process movement events if (this._isScroll()) return; const currentOffset = Object(_lib_touch_utils__WEBPACK_IMPORTED_MODULE_1__["getEventXY"])(event); // Try to identify this gesture if it hasn't been identified already if (!this.gestureInProgress()) { const dx = currentOffset.x - this._initialOffset.x; const dy = currentOffset.y - this._initialOffset.y; const dragDistance = Math.sqrt(dx * dx + dy * dy); if (dragDistance < this._distanceThreshold) return; // For touch moves, additionally check if the angle suggests drag vs. scroll if (event.type === 'touchmove') { // Direction goes from -180 to 180, with 0 toward the right. let angle = Math.atan2(dy, dx) / Math.PI * 180; // Fold over horizontal axis, range now 0 to 180 angle = Math.abs(angle); // Fold over vertical axis, range now 0 to 90 if (angle > 90) angle = 180 - angle; if (angle > this._touchDragAngle) { this._gestureState = DragRecognizer.STATE_SCROLL; } else { this._gestureState = DragRecognizer.STATE_DRAG; } } else { // Mouse moves are always considered drags this._gestureState = DragRecognizer.STATE_DRAG; } } if (this._isDrag()) { this._onDrag(currentOffset, this._initialOffset); event.preventDefault(); } } _handleEnd() { this.reset(); // Call the callback after reset to make sure if gestureInProgress() // is used in response, it get the correct value (i.e. no gesture in progress) this._onDragEnd(); } _isDrag() { return this._gestureState === DragRecognizer.STATE_DRAG; } _isScroll() { return this._gestureState === DragRecognizer.STATE_SCROLL; } } /* harmony default export */ __webpack_exports__["default"] = (DragRecognizer); /***/ }), /***/ "./src/lib/drag-utils.js": /*!*******************************!*\ !*** ./src/lib/drag-utils.js ***! \*******************************/ /*! exports provided: indexForPositionOnList */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "indexForPositionOnList", function() { return indexForPositionOnList; }); /** * @fileoverview * Utility functions for drag interactions, e.g. sorting items in a grid/list. */ /** * From an xy position and a list of boxes {top, left, bottom, right}, return there * corresponding box index the position is over. The boxes are in a (possibly wrapped) * list, the only requirement being all boxes are flush against the edges, that is, * if they are along an outer edge, the position of that edge is identical. * This functionality works for a single column of items, a wrapped list with * many rows, or a single row of items. * @param {{x: number, y: number}} position The xy coordinates to retreive the corresponding index of. * @param {Array.} boxes The rects of the items, returned from `getBoundingClientRect` * @param {bool} isRtl are the boxes in RTL order. * @return {?number} index of the corresponding box, or null if one could not be found. */ const indexForPositionOnList = (_ref, boxes, isRtl) => { let { x, y } = _ref; if (boxes.length === 0) return null; let index = null; const leftEdge = Math.min.apply(null, boxes.map(b => b.left)); const rightEdge = Math.max.apply(null, boxes.map(b => b.right)); const topEdge = Math.min.apply(null, boxes.map(b => b.top)); const bottomEdge = Math.max.apply(null, boxes.map(b => b.bottom)); for (let n = 0; n < boxes.length; n++) { const box = boxes[n]; // Construct an "extended" box for each, extending out to infinity if // the box is along a boundary. let minX = box.left === leftEdge ? -Infinity : box.left; let maxX = box.right === rightEdge ? Infinity : box.right; const minY = box.top === topEdge ? -Infinity : box.top; const maxY = box.bottom === bottomEdge ? Infinity : box.bottom; // The last item in the wrapped list gets a right edge at infinity, even // if it isn't the farthest right, in RTL mode. In LTR mode, it gets a // left edge at infinity. if (n === boxes.length - 1) { if (isRtl) { minX = -Infinity; } else { maxX = Infinity; } } // Check if the point is in the bounds. if (x >= minX && x <= maxX && y >= minY && y <= maxY) { index = n; break; // No need to keep looking. } } return index; }; /***/ }), /***/ "./src/lib/drop-area-hoc.jsx": /*!***********************************!*\ !*** ./src/lib/drop-area-hoc.jsx ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.bindall */ "./node_modules/lodash.bindall/index.js"); /* harmony import */ var lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_bindall__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash.omit */ "./node_modules/lodash.omit/index.js"); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_omit__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /** * Higher Order Component to give components the ability to react to drag overs * and drops of objects stored in the assetDrag redux state. * * Example: You want to enable MyComponent to receive drops from a drag type * Wrapped = DropAreaHOC([...dragTypes])( * * ) * * MyComponent now receives 2 new props * containerRef: a ref that must be set on the container element * dragOver: boolean if an asset is being dragged above the component * * Use the wrapped component: * * * NB: This HOC _only_ works with objects that drag using the assetDrag reducer. * This _does not_ handle drags for blocks coming from the workspace. * * @param {Array.} dragTypes Types to respond to, from DragConstants * @returns {function} The HOC, specialized for those drag types */ const DropAreaHOC = function DropAreaHOC(dragTypes) { /** * Return the HOC, specialized for the dragTypes * @param {React.Component} WrappedComponent component to receive drop behaviors * @returns {React.Component} component with drag over/drop behavior */ return function (WrappedComponent) { class DropAreaWrapper extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component { constructor(props) { super(props); lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['setRef']); this.state = { dragOver: false }; this.ref = null; this.containerBox = null; } componentWillReceiveProps(newProps) { // If `dragging` becomes true, record the drop area rectangle if (newProps.dragInfo.dragging && !this.props.dragInfo.dragging) { this.dropAreaRect = this.ref && this.ref.getBoundingClientRect(); // If `dragging` becomes false, call the drop handler } else if (!newProps.dragInfo.dragging && this.props.dragInfo.dragging && this.state.dragOver) { this.props.onDrop(this.props.dragInfo); this.setState({ dragOver: false }); } // If a drag is in progress (currentOffset) and it matches the relevant drag types, // test if the drag is within the drop area rect and set the state accordingly. if (this.dropAreaRect && newProps.dragInfo.currentOffset && dragTypes.includes(newProps.dragInfo.dragType)) { const { x, y } = newProps.dragInfo.currentOffset; const { top, right, bottom, left } = this.dropAreaRect; if (x > left && x < right && y > top && y < bottom) { this.setState({ dragOver: true }); } else { this.setState({ dragOver: false }); } } } setRef(el) { this.ref = el; if (this.props.componentRef) { this.props.componentRef(this.ref); } } render() { const componentProps = lodash_omit__WEBPACK_IMPORTED_MODULE_3___default()(this.props, ['onDrop', 'dragInfo', 'componentRef']); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(WrappedComponent, _extends({ containerRef: this.setRef, dragOver: this.state.dragOver }, componentProps)); } } DropAreaWrapper.propTypes = { componentRef: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, dragInfo: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ currentOffset: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({ x: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, y: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }), dragType: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, dragging: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, index: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number }), onDrop: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; const mapStateToProps = state => ({ dragInfo: state.scratchGui.assetDrag }); const mapDispatchToProps = () => ({}); return Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps, mapDispatchToProps)(DropAreaWrapper); }; }; /* harmony default export */ __webpack_exports__["default"] = (DropAreaHOC); /***/ }), /***/ "./src/lib/empty-assets.js": /*!*********************************!*\ !*** ./src/lib/empty-assets.js ***! \*********************************/ /*! exports provided: emptyCostume, emptySprite */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "emptyCostume", function() { return emptyCostume; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "emptySprite", function() { return emptySprite; }); /** * @fileoverview * Utility functions to return json corresponding to default empty assets. */ /** * Generate a blank costume object for vm.addCostume with the provided name. * @param {string} name the name to use for the costume, caller should localize * @return {object} vm costume object */ const emptyCostume = name => ({ name: name, md5: 'cd21514d0531fdffb22204e0ec5ed84a.svg', rotationCenterX: 0, rotationCenterY: 0, bitmapResolution: 1, skinId: null }); /** * Generate a new empty sprite. The caller should provide localized versions of the * default names. * @param {string} name the name to use for the sprite * @param {string} soundName the name to use for the default sound * @param {string} costumeName the name to use for the default costume * @return {object} object expected by vm.addSprite */ const emptySprite = (name, soundName, costumeName) => ({ objName: name, sounds: [], costumes: [{ costumeName: costumeName, baseLayerID: -1, baseLayerMD5: 'cd21514d0531fdffb22204e0ec5ed84a.svg', bitmapResolution: 1, rotationCenterX: 0, rotationCenterY: 0 }], currentCostumeIndex: 0, scratchX: 36, scratchY: 28, scale: 1, direction: 90, rotationStyle: 'normal', isDraggable: false, visible: true, spriteInfo: {} }); /***/ }), /***/ "./src/lib/error-boundary-hoc.jsx": /*!****************************************!*\ !*** ./src/lib/error-boundary-hoc.jsx ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _containers_error_boundary_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../containers/error-boundary.jsx */ "./src/containers/error-boundary.jsx"); /* * Higher Order Component to provide error boundary for wrapped component. * A curried function, call like errorHOC()(). * @param {string} action - Label for GA tracking of errors. * @returns {function} a function that accepts a component to wrap. */ const ErrorBoundaryHOC = function ErrorBoundaryHOC(action) { /** * The function to be called with a React component to wrap it. * @param {React.Component} WrappedComponent - Component to wrap with an error boundary. * @returns {React.Component} the component wrapped with an error boundary. */ return function (WrappedComponent) { const ErrorBoundaryWrapper = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_containers_error_boundary_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], { action: action }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, props)); return ErrorBoundaryWrapper; }; }; /* harmony default export */ __webpack_exports__["default"] = (ErrorBoundaryHOC); /***/ }), /***/ "./src/lib/file-uploader.js": /*!**********************************!*\ !*** ./src/lib/file-uploader.js ***! \**********************************/ /*! exports provided: handleFileUpload, costumeUpload, soundUpload, spriteUpload, externalFileUpload */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "handleFileUpload", function() { return handleFileUpload; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "costumeUpload", function() { return _costumeUpload; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "soundUpload", function() { return _soundUpload; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spriteUpload", function() { return spriteUpload; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "externalFileUpload", function() { return externalFileUpload; }); /* harmony import */ var scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scratch-svg-renderer */ "./node_modules/scratch-svg-renderer/src/index.js"); /* harmony import */ var scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _randomize_sprite_position_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./randomize-sprite-position.js */ "./src/lib/randomize-sprite-position.js"); /* harmony import */ var _bmp_converter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bmp-converter */ "./src/lib/bmp-converter.js"); /* harmony import */ var _gif_decoder__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./gif-decoder */ "./src/lib/gif-decoder.js"); /* harmony import */ var _tw_svg_fixer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tw-svg-fixer */ "./src/lib/tw-svg-fixer.js"); /* harmony import */ var _tw_convert_audio_wav_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tw-convert-audio-wav.js */ "./src/lib/tw-convert-audio-wav.js"); /** * Extract the file name given a string of the form fileName + ext * @param {string} nameExt File name + extension (e.g. 'my_image.png') * @return {string} The name without the extension, or the full name if * there was no '.' in the string (e.g. 'my_image') */ const extractFileName = function extractFileName(nameExt) { // There could be multiple dots, but get the stuff before the first . const nameParts = nameExt.split('.', 1); // we only care about the first . return nameParts[0]; }; /** * Handle a file upload given the input element that contains the file, * and a function to handle loading the file. * @param {Input} fileInput The element that contains the file being loaded * @param {Function} onload The function that handles loading the file * @param {Function} onerror The function that handles any error loading the file */ const handleFileUpload = function handleFileUpload(fileInput, onload, onerror) { const readFile = (i, files) => { if (i === files.length) { // Reset the file input value now that we have everything we need // so that the user can upload the same sound multiple times if // they choose fileInput.value = null; return; } const file = files[i]; const reader = new FileReader(); reader.onload = () => { const fileType = file.type; const fileName = extractFileName(file.name); onload(reader.result, fileType, fileName, i, files.length); readFile(i + 1, files); }; reader.onerror = onerror; reader.readAsArrayBuffer(file); }; readFile(0, fileInput.files); }; /** * @typedef VMAsset * @property {string} name The user-readable name of this asset - This will * automatically get translated to a fresh name if this one already exists in the * scope of this vm asset (e.g. if a sound already exists with the same name for * the same target) * @property {string} dataFormat The data format of this asset, typically * the extension to be used for that particular asset, e.g. 'svg' for vector images * @property {string} md5 The md5 hash of the asset data, followed by '.'' and dataFormat * @property {string} The md5 hash of the asset data // TODO remove duplication.... */ /** * Create an asset (costume, sound) with storage and return an object representation * of the asset to track in the VM. * @param {ScratchStorage} storage The storage to cache the asset in * @param {AssetType} assetType A ScratchStorage AssetType indicating what kind of * asset this is. * @param {string} dataFormat The format of this data (typically the file extension) * @param {UInt8Array} data The asset data buffer * @return {VMAsset} An object representing this asset and relevant information * which can be used to look up the data in storage */ const createVMAsset = function createVMAsset(storage, assetType, dataFormat, data) { const asset = storage.createAsset(assetType, dataFormat, data, null, true // generate md5 ); return { name: null, // Needs to be set by caller dataFormat: dataFormat, asset: asset, md5: "".concat(asset.assetId, ".").concat(dataFormat), assetId: asset.assetId }; }; /** * Handles loading a costume or a backdrop using the provided, context-relevant information. * @param {ArrayBuffer | string} fileData The costume data to load (this can be a base64 string * iff the image is a bitmap) * @param {string} fileType The MIME type of this file * @param {VM} vm The ScratchStorage instance to cache the costume data * @param {Function} handleCostume The function to execute on the costume object returned after * caching this costume in storage - This function should be responsible for * adding the costume to the VM and handling other UI flow that should come after adding the costume * @param {Function} handleError The function to execute if there is an error parsing the costume */ const _costumeUpload = function costumeUpload(fileData, fileType, vm, handleCostume) { let handleError = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : () => {}; const storage = vm.runtime.storage; let costumeFormat = null; let assetType = null; switch (fileType) { case 'image/svg+xml': { // run svg bytes through scratch-svg-renderer's sanitization code fileData = scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_0__["sanitizeSvg"].sanitizeByteStream(fileData); costumeFormat = storage.DataFormat.SVG; assetType = storage.AssetType.ImageVector; fileData = Object(_tw_svg_fixer__WEBPACK_IMPORTED_MODULE_4__["default"])(fileData); break; } case 'image/jpeg': { costumeFormat = storage.DataFormat.JPG; assetType = storage.AssetType.ImageBitmap; break; } case 'image/bmp': { // Convert .bmp files to .png to compress them. .bmps are completely uncompressed, // and would otherwise take up a lot of storage space and take much longer to upload and download. Object(_bmp_converter__WEBPACK_IMPORTED_MODULE_2__["default"])(fileData).then(dataUrl => { _costumeUpload(dataUrl, 'image/png', vm, handleCostume); }); return; // Return early because we're triggering another proper costumeUpload } case 'image/png': { costumeFormat = storage.DataFormat.PNG; assetType = storage.AssetType.ImageBitmap; break; } case 'image/webp': { // Scratch does not natively support webp, so convert to png // see image/bmp logic above Object(_bmp_converter__WEBPACK_IMPORTED_MODULE_2__["default"])(fileData, 'image/webp').then(dataUrl => { _costumeUpload(dataUrl, 'image/png', vm, handleCostume); }); return; } case 'image/gif': { let costumes = []; Object(_gif_decoder__WEBPACK_IMPORTED_MODULE_3__["default"])(fileData, (frameNumber, dataUrl, numFrames) => { _costumeUpload(dataUrl, 'image/png', vm, costumes_ => { costumes = costumes.concat(costumes_); if (frameNumber === numFrames - 1) { handleCostume(costumes); } }, handleError); }); return; // Abandon this load, do not try to load gif itself } default: handleError("Encountered unexpected file type: ".concat(fileType)); return; } const bitmapAdapter = new scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_0__["BitmapAdapter"](); if (bitmapAdapter.setStageSize) { const width = vm.runtime.stageWidth; const height = vm.runtime.stageHeight; bitmapAdapter.setStageSize(width, height); } const addCostumeFromBuffer = function addCostumeFromBuffer(dataBuffer) { const vmCostume = createVMAsset(storage, assetType, costumeFormat, dataBuffer); handleCostume([vmCostume]); }; if (costumeFormat === storage.DataFormat.SVG) { // Must pass in file data as a Uint8Array, // passing in an array buffer causes the sprite/costume // thumbnails to not display because the data URI for the costume // is invalid addCostumeFromBuffer(new Uint8Array(fileData)); } else { // otherwise it's a bitmap bitmapAdapter.importBitmap(fileData, fileType).then(addCostumeFromBuffer).catch(handleError); } }; /** * Handles loading a sound using the provided, context-relevant information. * @param {ArrayBuffer} fileData The sound data to load * @param {string} fileType The MIME type of this file; This function will exit * early if the fileType is unexpected. * @param {ScratchStorage} storage The ScratchStorage instance to cache the sound data * @param {Function} handleSound The function to execute on the sound object of type VMAsset * This function should be responsible for adding the sound to the VM * as well as handling other UI flow that should come after adding the sound * @param {Function} handleError The function to execute if there is an error parsing the sound */ const _soundUpload = function soundUpload(fileData, fileType, storage, handleSound, handleError) { let soundFormat; switch (fileType) { case 'audio/mp3': case 'audio/mpeg': { soundFormat = storage.DataFormat.MP3; break; } case 'audio/wav': case 'audio/wave': case 'audio/x-wav': case 'audio/x-pn-wav': { soundFormat = storage.DataFormat.WAV; break; } case 'audio/ogg': { soundFormat = storage.DataFormat.OGG; break; } case 'audio/x-flac': case 'audio/flac': { soundFormat = storage.DataFormat.FLAC; break; } default: Object(_tw_convert_audio_wav_js__WEBPACK_IMPORTED_MODULE_5__["default"])(fileData).then(fixed => { _soundUpload(fixed, 'audio/wav', storage, handleSound, handleError); }).catch(handleError); return; } const vmSound = createVMAsset(storage, storage.AssetType.Sound, soundFormat, new Uint8Array(fileData)); handleSound(vmSound); }; /** * Handles loading a sound using the provided, context-relevant information. * @param {ArrayBuffer} fileData The sound data to load * @param {string} fileType The MIME type of this file. * @param {ScratchStorage} storage The ScratchStorage instance to cache the sound data * @param {Function} handleFile The function to execute on the sound object of type VMAsset * This function should be responsible for adding the sound to the VM * as well as handling other UI flow that should come after adding the sound * @param {Function} handleError The function to execute if there is an error parsing the sound */ const externalFileUpload = function externalFileUpload(fileData, fileType, storage, handleFile, handleError) { // TODO: we should handle TXT and JSON differently const vmFile = createVMAsset(storage, storage.AssetType.ExternalFile, storage.DataFormat.TXT, new Uint8Array(fileData)); handleFile(vmFile); }; const spriteUpload = function spriteUpload(fileData, fileType, spriteName, vm, handleSprite) { let handleError = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : () => {}; switch (fileType) { case '': case 'application/zip': { // We think this is a .sprite2 or .sprite3 file handleSprite(new Uint8Array(fileData)); return; } case 'image/svg+xml': case 'image/png': case 'image/bmp': case 'image/jpeg': case 'image/webp': case 'image/gif': { // Make a sprite from an image by making it a costume first _costumeUpload(fileData, fileType, vm, vmCostumes => { vmCostumes.forEach((costume, i) => { costume.name = "".concat(spriteName).concat(i ? i + 1 : ''); }); const newSprite = { name: spriteName, isStage: false, x: 0, // x/y will be randomized below y: 0, visible: true, size: 100, rotationStyle: 'all around', direction: 90, draggable: false, currentCostume: 0, blocks: {}, variables: {}, costumes: vmCostumes, sounds: [] // TODO are all of these necessary? }; Object(_randomize_sprite_position_js__WEBPACK_IMPORTED_MODULE_1__["default"])(newSprite); // TODO probably just want sprite upload to handle this object directly handleSprite(JSON.stringify(newSprite)); }, handleError); return; } default: { handleError("Encountered unexpected file type: ".concat(fileType)); return; } } }; /***/ }), /***/ "./src/lib/font-loader-hoc.jsx": /*!*************************************!*\ !*** ./src/lib/font-loader-hoc.jsx ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FontLoaderHOC; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.omit */ "./node_modules/lodash.omit/index.js"); /* harmony import */ var lodash_omit__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_omit__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _reducers_fonts_loaded__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/fonts-loaded */ "./src/reducers/fonts-loaded.js"); /* harmony import */ var scratch_render_fonts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! scratch-render-fonts */ "./src/lib/tw-scratch-render-fonts/index.js"); /* harmony import */ var scratch_render_fonts__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(scratch_render_fonts__WEBPACK_IMPORTED_MODULE_5__); /* Higher Order Component to provide behavior for loading fonts. * @param {React.Component} WrappedComponent component to receive fontsLoaded prop * @returns {React.Component} component with font loading behavior */ const FontLoaderHOC = function FontLoaderHOC(WrappedComponent) { class FontLoaderComponent extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { componentDidMount() { if (this.props.fontsLoaded) return; Object(scratch_render_fonts__WEBPACK_IMPORTED_MODULE_5__["loadFonts"])().then(() => this.props.onSetFontsLoaded()); } render() { const componentProps = lodash_omit__WEBPACK_IMPORTED_MODULE_2___default()(this.props, ['onSetFontsLoaded']); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, componentProps); } } FontLoaderComponent.propTypes = { fontsLoaded: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired, onSetFontsLoaded: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired }; const mapStateToProps = state => ({ fontsLoaded: state.scratchGui.fontsLoaded }); const mapDispatchToProps = dispatch => ({ onSetFontsLoaded: () => dispatch(Object(_reducers_fonts_loaded__WEBPACK_IMPORTED_MODULE_4__["setFontsLoaded"])()) }); return Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(FontLoaderComponent); }; /***/ }), /***/ "./src/lib/get-costume-url.js": /*!************************************!*\ !*** ./src/lib/get-costume-url.js ***! \************************************/ /*! exports provided: default, HAS_FONT_REGEXP */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getCostumeUrl; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HAS_FONT_REGEXP", function() { return HAS_FONT_REGEXP; }); /* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./storage */ "./src/lib/storage.js"); /* harmony import */ var scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! scratch-svg-renderer */ "./node_modules/scratch-svg-renderer/src/index.js"); /* harmony import */ var scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_1__); // Contains 'font-family', but doesn't only contain 'font-family="none"' const HAS_FONT_REGEXP = 'font-family(?!="none")'; const getCostumeUrl = function () { let cachedAssetId; let cachedUrl; return function (asset) { if (cachedAssetId === asset.assetId) { return cachedUrl; } cachedAssetId = asset.assetId; // If the SVG refers to fonts, they must be inlined in order to display correctly in the img tag. // Avoid parsing the SVG when possible, since it's expensive. if (asset.assetType === _storage__WEBPACK_IMPORTED_MODULE_0__["default"].AssetType.ImageVector) { const svgString = asset.decodeText(); if (svgString.match(HAS_FONT_REGEXP)) { const svgText = Object(scratch_svg_renderer__WEBPACK_IMPORTED_MODULE_1__["inlineSvgFonts"])(svgString); cachedUrl = "data:image/svg+xml;utf8,".concat(encodeURIComponent(svgText)); } else { cachedUrl = asset.encodeDataURI(); } } else { cachedUrl = asset.encodeDataURI(); } return cachedUrl; }; }(); /***/ }), /***/ "./src/lib/gif-decoder.js": /*!********************************!*\ !*** ./src/lib/gif-decoder.js ***! \********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var omggif__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! omggif */ "./node_modules/omggif/omggif.js"); /* harmony import */ var omggif__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(omggif__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = ((arrayBuffer, onFrame) => { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); const gifReader = new omggif__WEBPACK_IMPORTED_MODULE_0__["GifReader"](new Uint8Array(arrayBuffer)); const numFrames = gifReader.numFrames(); canvas.width = gifReader.width; canvas.height = gifReader.height; let imageData = ctx.createImageData(canvas.width, canvas.height); let previousData = ctx.createImageData(canvas.width, canvas.height); const loadFrame = i => { const framePixels = []; gifReader.decodeAndBlitFrameRGBA(i, framePixels); const { x, y, width, height, disposal } = gifReader.frameInfo(i); for (let row = 0; row < height; row++) { for (let column = 0; column < width; column++) { const indexOffset = 4 * (x + y * canvas.width); const j = indexOffset + 4 * (column + row * canvas.width); if (framePixels[j + 3]) { imageData.data[j + 0] = framePixels[j + 0]; imageData.data[j + 1] = framePixels[j + 1]; imageData.data[j + 2] = framePixels[j + 2]; imageData.data[j + 3] = framePixels[j + 3]; } } } ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.putImageData(imageData, 0, 0); const dataUrl = canvas.toDataURL(); switch (disposal) { case 2: // "Return to background", blank out the current frame ctx.clearRect(x, y, width, height); imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); break; case 3: // "Restore to previous", copy previous data to current imageData = ctx.createImageData(canvas.width, canvas.height); imageData.data.set(previousData.data); break; default: // 0 and 1, as well as 4+ modes = do-not-dispose, so cache frame previousData = ctx.getImageData(0, 0, canvas.width, canvas.height); break; } onFrame(i, dataUrl, numFrames); if (i < numFrames - 1) { setTimeout(() => { loadFrame(i + 1); }); } }; loadFrame(0); }); /***/ }), /***/ "./src/lib/import-csv.js": /*!*******************************!*\ !*** ./src/lib/import-csv.js ***! \*******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var papaparse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! papaparse */ "./node_modules/papaparse/papaparse.min.js"); /* harmony import */ var papaparse__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(papaparse__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = (() => new Promise((resolve, reject) => { const fileInput = document.createElement('input'); fileInput.setAttribute('type', 'file'); fileInput.setAttribute('accept', '.csv, .tsv, .txt'); // parser auto-detects delimiter fileInput.onchange = e => { const file = e.target.files[0]; const fr = new FileReader(); fr.onload = () => { document.body.removeChild(fileInput); const text = fr.result; papaparse__WEBPACK_IMPORTED_MODULE_0___default.a.parse(text, { header: false, complete: results => { resolve({ rows: results.data, text }); }, error: err => { reject(err); } }); }; fr.onerror = () => { document.body.removeChild(fileInput); reject(new Error('Cannot read file')); }; fr.readAsText(file); }; document.body.appendChild(fileInput); fileInput.click(); })); /***/ }), /***/ "./src/lib/isScratchDesktop.js": /*!*************************************!*\ !*** ./src/lib/isScratchDesktop.js ***! \*************************************/ /*! exports provided: default, isScratchDesktop, notScratchDesktop, setIsScratchDesktop */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isScratchDesktop", function() { return isScratchDesktop; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "notScratchDesktop", function() { return notScratchDesktop; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setIsScratchDesktop", function() { return setIsScratchDesktop; }); /** * Internal stored state. Not valid until after at least one call to `setIsScratchDesktop()`. * @type {boolean} */ let _isScratchDesktop; // undefined = not ready yet /** * Tell the `isScratchDesktop()` whether or not the GUI is running under Scratch Desktop. * @param {boolean} value - the new value which `isScratchDesktop()` should return in the future. */ const setIsScratchDesktop = function setIsScratchDesktop(value) { _isScratchDesktop = value; }; /** * @returns {boolean} - true if it seems like the GUI is running under Scratch Desktop; false otherwise. * If `setIsScratchDesktop()` has not yet been called, this can return `undefined`. */ const isScratchDesktop = function isScratchDesktop() { return _isScratchDesktop; }; /** * @returns {boolean} - false if it seems like the GUI is running under Scratch Desktop; true otherwise. */ const notScratchDesktop = function notScratchDesktop() { return !isScratchDesktop(); }; /* harmony default export */ __webpack_exports__["default"] = (isScratchDesktop); /***/ }), /***/ "./src/lib/layout-constants.js": /*!*************************************!*\ !*** ./src/lib/layout-constants.js ***! \*************************************/ /*! exports provided: default, BLOCKS_DEFAULT_SCALE, STAGE_DISPLAY_SCALES, STAGE_DISPLAY_SIZES, STAGE_SIZE_MODES */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BLOCKS_DEFAULT_SCALE", function() { return BLOCKS_DEFAULT_SCALE; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STAGE_DISPLAY_SCALES", function() { return STAGE_DISPLAY_SCALES; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STAGE_DISPLAY_SIZES", function() { return STAGE_DISPLAY_SIZES; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STAGE_SIZE_MODES", function() { return STAGE_SIZE_MODES; }); /* harmony import */ var keymirror__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! keymirror */ "./node_modules/keymirror/index.js"); /* harmony import */ var keymirror__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(keymirror__WEBPACK_IMPORTED_MODULE_0__); /** * Names for each state of the stage size toggle * @enum {string} */ const STAGE_SIZE_MODES = keymirror__WEBPACK_IMPORTED_MODULE_0___default()({ /** * The "large stage" button is pressed; the user would like a large stage. */ large: null, /** * The "small stage" button is pressed; the user would like a small stage. */ small: null }); /** * Names for each stage render size * @enum {string} */ const STAGE_DISPLAY_SIZES = keymirror__WEBPACK_IMPORTED_MODULE_0___default()({ /** * Large stage with wide browser */ large: null, /** * Large stage with narrow browser */ largeConstrained: null, /** * Small stage (ignores browser width) */ small: null }); // zoom level to start with const BLOCKS_DEFAULT_SCALE = 0.675; const STAGE_DISPLAY_SCALES = {}; STAGE_DISPLAY_SCALES[STAGE_DISPLAY_SIZES.large] = 1; // large mode, wide browser (standard) STAGE_DISPLAY_SCALES[STAGE_DISPLAY_SIZES.largeConstrained] = 0.85; // large mode but narrow browser STAGE_DISPLAY_SCALES[STAGE_DISPLAY_SIZES.small] = 0.5; // small mode, regardless of browser size /* harmony default export */ __webpack_exports__["default"] = ({ fullSizeMinWidth: 1096, referenceWidth: 480 }); /***/ }), /***/ "./src/lib/libraries/backdrop-tags.js": /*!********************************************!*\ !*** ./src/lib/libraries/backdrop-tags.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tag-messages.js */ "./src/lib/libraries/tag-messages.js"); /* harmony default export */ __webpack_exports__["default"] = ([{ tag: 'fantasy', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].fantasy }, { tag: 'music', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].music }, { tag: 'sports', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].sports }, { tag: 'outdoors', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].outdoors }, { tag: 'indoors', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].indoors }, { tag: 'space', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].space }, { tag: 'underwater', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].underwater }, { tag: 'patterns', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].patterns }]); /***/ }), /***/ "./src/lib/libraries/decks/index.jsx": /*!*******************************************!*\ !*** ./src/lib/libraries/decks/index.jsx ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ({ // tw: remove decks. we don't use them. }); /***/ }), /***/ "./src/lib/libraries/decks/translate-image.js": /*!****************************************************!*\ !*** ./src/lib/libraries/decks/translate-image.js ***! \****************************************************/ /*! exports provided: loadImageData, translateImage */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadImageData", function() { return loadImageData; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translateImage", function() { return translateImage; }); /** * @fileoverview * Utility functions for handling tutorial images in multiple languages */ const defaultImages = {}; let savedImages = {}; let savedLocale = ''; const translations = {}; const loadImageData = locale => { if (translations.hasOwnProperty(locale)) { translations[locale]().then(newImages => { savedImages = newImages; savedLocale = locale; }); } }; /** * Return image data for tutorials based on locale (default: en) * @param {string} imageId key in the images object, or id string. * @param {string} locale requested locale * @return {string} image */ const translateImage = (imageId, locale) => { if (locale !== savedLocale || !savedImages.hasOwnProperty(imageId)) { return defaultImages[imageId]; } return savedImages[imageId]; }; /***/ }), /***/ "./src/lib/libraries/decks/translate-video.js": /*!****************************************************!*\ !*** ./src/lib/libraries/decks/translate-video.js ***! \****************************************************/ /*! exports provided: translateVideo */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translateVideo", function() { return translateVideo; }); /** * @fileoverview * Utility function to look up whether a translated video exists for a locale. */ // TODO: ja-Hira are copies of ja, replace with real ja-Hira when available. const videos = { // tw: we don't use the videos, remove them }; /** * Return a video identifier (on our video hosting service) * @param {string} videoId key in the videos object, or id string. * @param {string} locale locale to look up. If locale is not defined return the id for 'en' by default * @return {string} identifier for the video on our video hosting service. */ const translateVideo = (videoId, locale) => { // if the videoId is not recognized in the videos object, assume it's already a video id on wistia if (!videos.hasOwnProperty(videoId)) return videoId; if (videos[videoId].hasOwnProperty(locale)) { return videos[videoId][locale]; } return videos[videoId].en; }; /***/ }), /***/ "./src/lib/libraries/extension-tags.js": /*!*********************************************!*\ !*** ./src/lib/libraries/extension-tags.js ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tag-messages.js */ "./src/lib/libraries/tag-messages.js"); let tags = [{ tag: 'penguinmod', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].penguinmod }, { tag: 'turbowarp', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].turbowarp }, { tag: 'scratch', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].scratch }, { tag: 'divider2', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].scratch, type: 'divider' }, { tag: 'graphics', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].graphics }, { tag: 'noisemaker', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].noisemaker }, { tag: 'math', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].math }, { tag: 'datamgmt', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].datamgmt }, { tag: 'hardware', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].hardware }, { tag: 'divider2', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].scratch, type: 'divider' }, { tag: 'categoryexpansion', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].categoryexpansion }, { tag: 'programminglanguage', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].programminglanguage }, { tag: 'divider1', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].scratch, type: 'divider' }, { tag: 'library', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].library }, { tag: 'extcreate', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].extcreate }, { tag: 'divider3', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].scratch, type: 'divider' }, { tag: 'divider1', intlLabel: 'Actions', type: 'title' }, { tag: 'custom', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].customextension, type: 'custom', func: library => { library.select(''); } }]; // 条件によって tags をフィルター if (typeof ENV !== 'undefined' && ENV.CanLoadCustomExtension === false) { tags = tags.filter(item => { if (item.tag === 'divider1' && item.intlLabel === 'Actions') return false; if (item.tag === 'custom') return false; return true; }); } /* harmony default export */ __webpack_exports__["default"] = (tags); /***/ }), /***/ "./src/lib/libraries/extensions/boost/boost-button-illustration.svg": /*!**************************************************************************!*\ !*** ./src/lib/libraries/extensions/boost/boost-button-illustration.svg ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/d92e74438d72c2223692825df66e026e.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/boost/boost-illustration.svg": /*!*******************************************************************!*\ !*** ./src/lib/libraries/extensions/boost/boost-illustration.svg ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/73773f78bf2bfc449218fbaee1922964.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/boost/boost-small.svg": /*!************************************************************!*\ !*** ./src/lib/libraries/extensions/boost/boost-small.svg ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/3d9e2585d6ed12b9fb994438e0c4c42a.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/boost/boost.png": /*!******************************************************!*\ !*** ./src/lib/libraries/extensions/boost/boost.png ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/bf3ee9d7d91a231cde773f88f6799425.png"; /***/ }), /***/ "./src/lib/libraries/extensions/custom/custom.svg": /*!********************************************************!*\ !*** ./src/lib/libraries/extensions/custom/custom.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/1aa0695f67909940855aad4cc774f906.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/ev3/ev3-hub-illustration.svg": /*!*******************************************************************!*\ !*** ./src/lib/libraries/extensions/ev3/ev3-hub-illustration.svg ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/8e5e28b23ba596614a60d319d9c64165.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/ev3/ev3-small.svg": /*!********************************************************!*\ !*** ./src/lib/libraries/extensions/ev3/ev3-small.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/3286e2838658ebdb82f62d062b14e951.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/ev3/ev3.png": /*!**************************************************!*\ !*** ./src/lib/libraries/extensions/ev3/ev3.png ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/6608d56b3dce2738b2b137569d305d3b.png"; /***/ }), /***/ "./src/lib/libraries/extensions/gallery/gallery.svg": /*!**********************************************************!*\ !*** ./src/lib/libraries/extensions/gallery/gallery.svg ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/fa121178a0dc748c56257f39987f0540.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/gdxfor/gdxfor-illustration.svg": /*!*********************************************************************!*\ !*** ./src/lib/libraries/extensions/gdxfor/gdxfor-illustration.svg ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/60fc7acc624571cfa9d250d7d5cff041.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/gdxfor/gdxfor-small.svg": /*!**************************************************************!*\ !*** ./src/lib/libraries/extensions/gdxfor/gdxfor-small.svg ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7b6399d516d5921bb199f57cdd8bbbbe.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/gdxfor/gdxfor.png": /*!********************************************************!*\ !*** ./src/lib/libraries/extensions/gdxfor/gdxfor.png ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/5a70df361bb00fa62b9338d89c92f377.png"; /***/ }), /***/ "./src/lib/libraries/extensions/index.jsx": /*!************************************************!*\ !*** ./src/lib/libraries/extensions/index.jsx ***! \************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony import */ var _brand__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../brand */ "./src/lib/brand.js"); /* harmony import */ var _p5_noise_48d03d1d2794e30b221465fc07da79f7_png__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./p5-noise/48d03d1d2794e30b221465fc07da79f7.png */ "./src/lib/libraries/extensions/p5-noise/48d03d1d2794e30b221465fc07da79f7.png"); /* harmony import */ var _p5_noise_48d03d1d2794e30b221465fc07da79f7_png__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_p5_noise_48d03d1d2794e30b221465fc07da79f7_png__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _p5_noise_icon_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./p5-noise/icon.svg */ "./src/lib/libraries/extensions/p5-noise/icon.svg"); /* harmony import */ var _p5_noise_icon_svg__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_p5_noise_icon_svg__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _music_music_png__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./music/music.png */ "./src/lib/libraries/extensions/music/music.png"); /* harmony import */ var _music_music_png__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_music_music_png__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _music_music_small_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./music/music-small.svg */ "./src/lib/libraries/extensions/music/music-small.svg"); /* harmony import */ var _music_music_small_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_music_music_small_svg__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _pen_pen_png__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./pen/pen.png */ "./src/lib/libraries/extensions/pen/pen.png"); /* harmony import */ var _pen_pen_png__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_pen_pen_png__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _pen_pen_small_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./pen/pen-small.svg */ "./src/lib/libraries/extensions/pen/pen-small.svg"); /* harmony import */ var _pen_pen_small_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_pen_pen_small_svg__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _penguinmod_extensions_debugging_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./penguinmod/extensions/debugging.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/debugging.svg"); /* harmony import */ var _penguinmod_extensions_debugging_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_debugging_svg__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _izum00_posenet4scratch_icon_png__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./izum00/posenet4scratch/icon.png */ "./src/lib/libraries/extensions/izum00/posenet4scratch/icon.png"); /* harmony import */ var _izum00_posenet4scratch_icon_png__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_izum00_posenet4scratch_icon_png__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _izum00_posenet4scratch_thumb_png__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./izum00/posenet4scratch/thumb.png */ "./src/lib/libraries/extensions/izum00/posenet4scratch/thumb.png"); /* harmony import */ var _izum00_posenet4scratch_thumb_png__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_izum00_posenet4scratch_thumb_png__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var _videoSensing_video_sensing_png__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./videoSensing/video-sensing.png */ "./src/lib/libraries/extensions/videoSensing/video-sensing.png"); /* harmony import */ var _videoSensing_video_sensing_png__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_videoSensing_video_sensing_png__WEBPACK_IMPORTED_MODULE_12__); /* harmony import */ var _videoSensing_video_sensing_small_svg__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./videoSensing/video-sensing-small.svg */ "./src/lib/libraries/extensions/videoSensing/video-sensing-small.svg"); /* harmony import */ var _videoSensing_video_sensing_small_svg__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_videoSensing_video_sensing_small_svg__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var _text2speech_text2speech_png__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./text2speech/text2speech.png */ "./src/lib/libraries/extensions/text2speech/text2speech.png"); /* harmony import */ var _text2speech_text2speech_png__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_text2speech_text2speech_png__WEBPACK_IMPORTED_MODULE_14__); /* harmony import */ var _text2speech_text2speech_small_svg__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./text2speech/text2speech-small.svg */ "./src/lib/libraries/extensions/text2speech/text2speech-small.svg"); /* harmony import */ var _text2speech_text2speech_small_svg__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_text2speech_text2speech_small_svg__WEBPACK_IMPORTED_MODULE_15__); /* harmony import */ var _translate_translate_png__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./translate/translate.png */ "./src/lib/libraries/extensions/translate/translate.png"); /* harmony import */ var _translate_translate_png__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_translate_translate_png__WEBPACK_IMPORTED_MODULE_16__); /* harmony import */ var _translate_translate_small_png__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./translate/translate-small.png */ "./src/lib/libraries/extensions/translate/translate-small.png"); /* harmony import */ var _translate_translate_small_png__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_translate_translate_small_png__WEBPACK_IMPORTED_MODULE_17__); /* harmony import */ var _makeymakey_makeymakey_png__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./makeymakey/makeymakey.png */ "./src/lib/libraries/extensions/makeymakey/makeymakey.png"); /* harmony import */ var _makeymakey_makeymakey_png__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_makeymakey_makeymakey_png__WEBPACK_IMPORTED_MODULE_18__); /* harmony import */ var _makeymakey_makeymakey_small_svg__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./makeymakey/makeymakey-small.svg */ "./src/lib/libraries/extensions/makeymakey/makeymakey-small.svg"); /* harmony import */ var _makeymakey_makeymakey_small_svg__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_makeymakey_makeymakey_small_svg__WEBPACK_IMPORTED_MODULE_19__); /* harmony import */ var _penguinmod_extensions_text_extension_png__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./penguinmod/extensions/text extension.png */ "./src/lib/libraries/extensions/penguinmod/extensions/text extension.png"); /* harmony import */ var _penguinmod_extensions_text_extension_png__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_text_extension_png__WEBPACK_IMPORTED_MODULE_20__); /* harmony import */ var _penguinmod_extensions_text_extension_small_svg__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./penguinmod/extensions/text extension small.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/text extension small.svg"); /* harmony import */ var _penguinmod_extensions_text_extension_small_svg__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_text_extension_small_svg__WEBPACK_IMPORTED_MODULE_21__); /* harmony import */ var _microbit_microbit_png__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./microbit/microbit.png */ "./src/lib/libraries/extensions/microbit/microbit.png"); /* harmony import */ var _microbit_microbit_png__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(_microbit_microbit_png__WEBPACK_IMPORTED_MODULE_22__); /* harmony import */ var _microbit_microbit_small_svg__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./microbit/microbit-small.svg */ "./src/lib/libraries/extensions/microbit/microbit-small.svg"); /* harmony import */ var _microbit_microbit_small_svg__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(_microbit_microbit_small_svg__WEBPACK_IMPORTED_MODULE_23__); /* harmony import */ var _microbit_microbit_illustration_svg__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./microbit/microbit-illustration.svg */ "./src/lib/libraries/extensions/microbit/microbit-illustration.svg"); /* harmony import */ var _microbit_microbit_illustration_svg__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_microbit_microbit_illustration_svg__WEBPACK_IMPORTED_MODULE_24__); /* harmony import */ var _ev3_ev3_png__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./ev3/ev3.png */ "./src/lib/libraries/extensions/ev3/ev3.png"); /* harmony import */ var _ev3_ev3_png__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(_ev3_ev3_png__WEBPACK_IMPORTED_MODULE_25__); /* harmony import */ var _ev3_ev3_small_svg__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./ev3/ev3-small.svg */ "./src/lib/libraries/extensions/ev3/ev3-small.svg"); /* harmony import */ var _ev3_ev3_small_svg__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(_ev3_ev3_small_svg__WEBPACK_IMPORTED_MODULE_26__); /* harmony import */ var _ev3_ev3_hub_illustration_svg__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./ev3/ev3-hub-illustration.svg */ "./src/lib/libraries/extensions/ev3/ev3-hub-illustration.svg"); /* harmony import */ var _ev3_ev3_hub_illustration_svg__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(_ev3_ev3_hub_illustration_svg__WEBPACK_IMPORTED_MODULE_27__); /* harmony import */ var _wedo2_wedo_png__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./wedo2/wedo.png */ "./src/lib/libraries/extensions/wedo2/wedo.png"); /* harmony import */ var _wedo2_wedo_png__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(_wedo2_wedo_png__WEBPACK_IMPORTED_MODULE_28__); /* harmony import */ var _wedo2_wedo_small_svg__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./wedo2/wedo-small.svg */ "./src/lib/libraries/extensions/wedo2/wedo-small.svg"); /* harmony import */ var _wedo2_wedo_small_svg__WEBPACK_IMPORTED_MODULE_29___default = /*#__PURE__*/__webpack_require__.n(_wedo2_wedo_small_svg__WEBPACK_IMPORTED_MODULE_29__); /* harmony import */ var _wedo2_wedo_illustration_svg__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./wedo2/wedo-illustration.svg */ "./src/lib/libraries/extensions/wedo2/wedo-illustration.svg"); /* harmony import */ var _wedo2_wedo_illustration_svg__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(_wedo2_wedo_illustration_svg__WEBPACK_IMPORTED_MODULE_30__); /* harmony import */ var _wedo2_wedo_button_illustration_svg__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./wedo2/wedo-button-illustration.svg */ "./src/lib/libraries/extensions/wedo2/wedo-button-illustration.svg"); /* harmony import */ var _wedo2_wedo_button_illustration_svg__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(_wedo2_wedo_button_illustration_svg__WEBPACK_IMPORTED_MODULE_31__); /* harmony import */ var _boost_boost_png__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./boost/boost.png */ "./src/lib/libraries/extensions/boost/boost.png"); /* harmony import */ var _boost_boost_png__WEBPACK_IMPORTED_MODULE_32___default = /*#__PURE__*/__webpack_require__.n(_boost_boost_png__WEBPACK_IMPORTED_MODULE_32__); /* harmony import */ var _boost_boost_small_svg__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./boost/boost-small.svg */ "./src/lib/libraries/extensions/boost/boost-small.svg"); /* harmony import */ var _boost_boost_small_svg__WEBPACK_IMPORTED_MODULE_33___default = /*#__PURE__*/__webpack_require__.n(_boost_boost_small_svg__WEBPACK_IMPORTED_MODULE_33__); /* harmony import */ var _boost_boost_illustration_svg__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./boost/boost-illustration.svg */ "./src/lib/libraries/extensions/boost/boost-illustration.svg"); /* harmony import */ var _boost_boost_illustration_svg__WEBPACK_IMPORTED_MODULE_34___default = /*#__PURE__*/__webpack_require__.n(_boost_boost_illustration_svg__WEBPACK_IMPORTED_MODULE_34__); /* harmony import */ var _boost_boost_button_illustration_svg__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./boost/boost-button-illustration.svg */ "./src/lib/libraries/extensions/boost/boost-button-illustration.svg"); /* harmony import */ var _boost_boost_button_illustration_svg__WEBPACK_IMPORTED_MODULE_35___default = /*#__PURE__*/__webpack_require__.n(_boost_boost_button_illustration_svg__WEBPACK_IMPORTED_MODULE_35__); /* harmony import */ var _gdxfor_gdxfor_png__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./gdxfor/gdxfor.png */ "./src/lib/libraries/extensions/gdxfor/gdxfor.png"); /* harmony import */ var _gdxfor_gdxfor_png__WEBPACK_IMPORTED_MODULE_36___default = /*#__PURE__*/__webpack_require__.n(_gdxfor_gdxfor_png__WEBPACK_IMPORTED_MODULE_36__); /* harmony import */ var _gdxfor_gdxfor_small_svg__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./gdxfor/gdxfor-small.svg */ "./src/lib/libraries/extensions/gdxfor/gdxfor-small.svg"); /* harmony import */ var _gdxfor_gdxfor_small_svg__WEBPACK_IMPORTED_MODULE_37___default = /*#__PURE__*/__webpack_require__.n(_gdxfor_gdxfor_small_svg__WEBPACK_IMPORTED_MODULE_37__); /* harmony import */ var _gdxfor_gdxfor_illustration_svg__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./gdxfor/gdxfor-illustration.svg */ "./src/lib/libraries/extensions/gdxfor/gdxfor-illustration.svg"); /* harmony import */ var _gdxfor_gdxfor_illustration_svg__WEBPACK_IMPORTED_MODULE_38___default = /*#__PURE__*/__webpack_require__.n(_gdxfor_gdxfor_illustration_svg__WEBPACK_IMPORTED_MODULE_38__); /* harmony import */ var _tw_tw_svg__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./tw/tw.svg */ "./src/lib/libraries/extensions/tw/tw.svg"); /* harmony import */ var _tw_tw_svg__WEBPACK_IMPORTED_MODULE_39___default = /*#__PURE__*/__webpack_require__.n(_tw_tw_svg__WEBPACK_IMPORTED_MODULE_39__); /* harmony import */ var _gallery_gallery_svg__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./gallery/gallery.svg */ "./src/lib/libraries/extensions/gallery/gallery.svg"); /* harmony import */ var _gallery_gallery_svg__WEBPACK_IMPORTED_MODULE_40___default = /*#__PURE__*/__webpack_require__.n(_gallery_gallery_svg__WEBPACK_IMPORTED_MODULE_40__); /* harmony import */ var _custom_custom_svg__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./custom/custom.svg */ "./src/lib/libraries/extensions/custom/custom.svg"); /* harmony import */ var _custom_custom_svg__WEBPACK_IMPORTED_MODULE_41___default = /*#__PURE__*/__webpack_require__.n(_custom_custom_svg__WEBPACK_IMPORTED_MODULE_41__); /* harmony import */ var _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./penguinmod/extensions/turbowarp_icon.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/turbowarp_icon.svg"); /* harmony import */ var _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42__); /* harmony import */ var _penguinmod_library_svg__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./penguinmod/library.svg */ "./src/lib/libraries/extensions/penguinmod/library.svg"); /* harmony import */ var _penguinmod_library_svg__WEBPACK_IMPORTED_MODULE_43___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_library_svg__WEBPACK_IMPORTED_MODULE_43__); /* harmony import */ var _penguinmod_sharkpool_library_svg__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./penguinmod/sharkpool-library.svg */ "./src/lib/libraries/extensions/penguinmod/sharkpool-library.svg"); /* harmony import */ var _penguinmod_sharkpool_library_svg__WEBPACK_IMPORTED_MODULE_44___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_sharkpool_library_svg__WEBPACK_IMPORTED_MODULE_44__); /* harmony import */ var _penguinmod_extforge_svg__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./penguinmod/extforge.svg */ "./src/lib/libraries/extensions/penguinmod/extforge.svg"); /* harmony import */ var _penguinmod_extforge_svg__WEBPACK_IMPORTED_MODULE_45___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extforge_svg__WEBPACK_IMPORTED_MODULE_45__); /* harmony import */ var _penguinmod_turbobuilder_png__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./penguinmod/turbobuilder.png */ "./src/lib/libraries/extensions/penguinmod/turbobuilder.png"); /* harmony import */ var _penguinmod_turbobuilder_png__WEBPACK_IMPORTED_MODULE_46___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_turbobuilder_png__WEBPACK_IMPORTED_MODULE_46__); /* harmony import */ var _penguinmod_turbobuilder_dev_png__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./penguinmod/turbobuilder-dev.png */ "./src/lib/libraries/extensions/penguinmod/turbobuilder-dev.png"); /* harmony import */ var _penguinmod_turbobuilder_dev_png__WEBPACK_IMPORTED_MODULE_47___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_turbobuilder_dev_png__WEBPACK_IMPORTED_MODULE_47__); /* harmony import */ var _penguinmod_extensions_files_svg__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./penguinmod/extensions/files.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/files.svg"); /* harmony import */ var _penguinmod_extensions_files_svg__WEBPACK_IMPORTED_MODULE_48___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_files_svg__WEBPACK_IMPORTED_MODULE_48__); /* harmony import */ var _penguinmod_extensions_json_png__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./penguinmod/extensions/json.png */ "./src/lib/libraries/extensions/penguinmod/extensions/json.png"); /* harmony import */ var _penguinmod_extensions_json_png__WEBPACK_IMPORTED_MODULE_49___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_json_png__WEBPACK_IMPORTED_MODULE_49__); /* harmony import */ var _penguinmod_extensions_tailgating_png__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./penguinmod/extensions/tailgating.png */ "./src/lib/libraries/extensions/penguinmod/extensions/tailgating.png"); /* harmony import */ var _penguinmod_extensions_tailgating_png__WEBPACK_IMPORTED_MODULE_50___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_tailgating_png__WEBPACK_IMPORTED_MODULE_50__); /* harmony import */ var _penguinmod_extensions_runtime_svg__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./penguinmod/extensions/runtime.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/runtime.svg"); /* harmony import */ var _penguinmod_extensions_runtime_svg__WEBPACK_IMPORTED_MODULE_51___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_runtime_svg__WEBPACK_IMPORTED_MODULE_51__); /* harmony import */ var _penguinmod_extensions_prism_png__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./penguinmod/extensions/prism.png */ "./src/lib/libraries/extensions/penguinmod/extensions/prism.png"); /* harmony import */ var _penguinmod_extensions_prism_png__WEBPACK_IMPORTED_MODULE_52___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_prism_png__WEBPACK_IMPORTED_MODULE_52__); /* harmony import */ var _penguinmod_extensions_proto_svg__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./penguinmod/extensions/proto.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/proto.svg"); /* harmony import */ var _penguinmod_extensions_proto_svg__WEBPACK_IMPORTED_MODULE_53___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_proto_svg__WEBPACK_IMPORTED_MODULE_53__); /* harmony import */ var _penguinmod_extensions_Unite_png__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./penguinmod/extensions/Unite.png */ "./src/lib/libraries/extensions/penguinmod/extensions/Unite.png"); /* harmony import */ var _penguinmod_extensions_Unite_png__WEBPACK_IMPORTED_MODULE_54___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_Unite_png__WEBPACK_IMPORTED_MODULE_54__); /* harmony import */ var _penguinmod_extensions_xml_png__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./penguinmod/extensions/xml.png */ "./src/lib/libraries/extensions/penguinmod/extensions/xml.png"); /* harmony import */ var _penguinmod_extensions_xml_png__WEBPACK_IMPORTED_MODULE_55___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_xml_png__WEBPACK_IMPORTED_MODULE_55__); /* harmony import */ var _penguinmod_extensions_ooplogo_png__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./penguinmod/extensions/ooplogo.png */ "./src/lib/libraries/extensions/penguinmod/extensions/ooplogo.png"); /* harmony import */ var _penguinmod_extensions_ooplogo_png__WEBPACK_IMPORTED_MODULE_56___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_ooplogo_png__WEBPACK_IMPORTED_MODULE_56__); /* harmony import */ var _penguinmod_extensions_jwArray_svg__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./penguinmod/extensions/jwArray.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/jwArray.svg"); /* harmony import */ var _penguinmod_extensions_jwArray_svg__WEBPACK_IMPORTED_MODULE_57___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_jwArray_svg__WEBPACK_IMPORTED_MODULE_57__); /* harmony import */ var _penguinmod_extensions_jwTargets_svg__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./penguinmod/extensions/jwTargets.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/jwTargets.svg"); /* harmony import */ var _penguinmod_extensions_jwTargets_svg__WEBPACK_IMPORTED_MODULE_58___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_jwTargets_svg__WEBPACK_IMPORTED_MODULE_58__); /* harmony import */ var _penguinmod_extensions_jwNum_svg__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./penguinmod/extensions/jwNum.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/jwNum.svg"); /* harmony import */ var _penguinmod_extensions_jwNum_svg__WEBPACK_IMPORTED_MODULE_59___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_jwNum_svg__WEBPACK_IMPORTED_MODULE_59__); /* harmony import */ var _penguinmod_extensions_jwColor_svg__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./penguinmod/extensions/jwColor.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/jwColor.svg"); /* harmony import */ var _penguinmod_extensions_jwColor_svg__WEBPACK_IMPORTED_MODULE_60___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_jwColor_svg__WEBPACK_IMPORTED_MODULE_60__); /* harmony import */ var _penguinmod_extensions_jwVector_svg__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./penguinmod/extensions/jwVector.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/jwVector.svg"); /* harmony import */ var _penguinmod_extensions_jwVector_svg__WEBPACK_IMPORTED_MODULE_61___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_jwVector_svg__WEBPACK_IMPORTED_MODULE_61__); /* harmony import */ var _penguinmod_extensions_perlinnoisebanner_png__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./penguinmod/extensions/perlinnoisebanner.png */ "./src/lib/libraries/extensions/penguinmod/extensions/perlinnoisebanner.png"); /* harmony import */ var _penguinmod_extensions_perlinnoisebanner_png__WEBPACK_IMPORTED_MODULE_62___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_perlinnoisebanner_png__WEBPACK_IMPORTED_MODULE_62__); /* harmony import */ var _penguinmod_extensions_pmcamera_thumbnail_png__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./penguinmod/extensions/pmcamera_thumbnail.png */ "./src/lib/libraries/extensions/penguinmod/extensions/pmcamera_thumbnail.png"); /* harmony import */ var _penguinmod_extensions_pmcamera_thumbnail_png__WEBPACK_IMPORTED_MODULE_63___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_pmcamera_thumbnail_png__WEBPACK_IMPORTED_MODULE_63__); /* harmony import */ var _penguinmod_extensions_cloudlinkIcon_svg__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./penguinmod/extensions/cloudlinkIcon.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/cloudlinkIcon.svg"); /* harmony import */ var _penguinmod_extensions_cloudlinkIcon_svg__WEBPACK_IMPORTED_MODULE_64___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_cloudlinkIcon_svg__WEBPACK_IMPORTED_MODULE_64__); /* harmony import */ var _penguinmod_extensions_CanvasExtensionMenu_png__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./penguinmod/extensions/CanvasExtensionMenu.png */ "./src/lib/libraries/extensions/penguinmod/extensions/CanvasExtensionMenu.png"); /* harmony import */ var _penguinmod_extensions_CanvasExtensionMenu_png__WEBPACK_IMPORTED_MODULE_65___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_CanvasExtensionMenu_png__WEBPACK_IMPORTED_MODULE_65__); /* harmony import */ var _penguinmod_extensions_CanvasSmall_png__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./penguinmod/extensions/CanvasSmall.png */ "./src/lib/libraries/extensions/penguinmod/extensions/CanvasSmall.png"); /* harmony import */ var _penguinmod_extensions_CanvasSmall_png__WEBPACK_IMPORTED_MODULE_66___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_CanvasSmall_png__WEBPACK_IMPORTED_MODULE_66__); /* harmony import */ var _penguinmod_extensions_griffpatch_physics_png__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./penguinmod/extensions/griffpatch_physics.png */ "./src/lib/libraries/extensions/penguinmod/extensions/griffpatch_physics.png"); /* harmony import */ var _penguinmod_extensions_griffpatch_physics_png__WEBPACK_IMPORTED_MODULE_67___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_griffpatch_physics_png__WEBPACK_IMPORTED_MODULE_67__); /* harmony import */ var _penguinmod_extensions_griffpatch_physicsIcon_svg__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./penguinmod/extensions/griffpatch_physicsIcon.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/griffpatch_physicsIcon.svg"); /* harmony import */ var _penguinmod_extensions_griffpatch_physicsIcon_svg__WEBPACK_IMPORTED_MODULE_68___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_griffpatch_physicsIcon_svg__WEBPACK_IMPORTED_MODULE_68__); /* harmony import */ var _penguinmod_extensions_gamepad_svg__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./penguinmod/extensions/gamepad.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/gamepad.svg"); /* harmony import */ var _penguinmod_extensions_gamepad_svg__WEBPACK_IMPORTED_MODULE_69___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_gamepad_svg__WEBPACK_IMPORTED_MODULE_69__); /* harmony import */ var _penguinmod_extensions_clippingblending_svg__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./penguinmod/extensions/clippingblending.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/clippingblending.svg"); /* harmony import */ var _penguinmod_extensions_clippingblending_svg__WEBPACK_IMPORTED_MODULE_70___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_clippingblending_svg__WEBPACK_IMPORTED_MODULE_70__); /* harmony import */ var _penguinmod_extensions_pointerlock_png__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./penguinmod/extensions/pointerlock.png */ "./src/lib/libraries/extensions/penguinmod/extensions/pointerlock.png"); /* harmony import */ var _penguinmod_extensions_pointerlock_png__WEBPACK_IMPORTED_MODULE_71___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_pointerlock_png__WEBPACK_IMPORTED_MODULE_71__); /* harmony import */ var _penguinmod_extensions_cursor_svg__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./penguinmod/extensions/cursor.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/cursor.svg"); /* harmony import */ var _penguinmod_extensions_cursor_svg__WEBPACK_IMPORTED_MODULE_72___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_cursor_svg__WEBPACK_IMPORTED_MODULE_72__); /* harmony import */ var _penguinmod_orgtw_TempVariables2_svg__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./penguinmod/orgtw/TempVariables2.svg */ "./src/lib/libraries/extensions/penguinmod/orgtw/TempVariables2.svg"); /* harmony import */ var _penguinmod_orgtw_TempVariables2_svg__WEBPACK_IMPORTED_MODULE_73___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_orgtw_TempVariables2_svg__WEBPACK_IMPORTED_MODULE_73__); /* harmony import */ var _penguinmod_extensions_tempvariables_svg__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./penguinmod/extensions/tempvariables.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/tempvariables.svg"); /* harmony import */ var _penguinmod_extensions_tempvariables_svg__WEBPACK_IMPORTED_MODULE_74___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_tempvariables_svg__WEBPACK_IMPORTED_MODULE_74__); /* harmony import */ var _penguinmod_extensions_colorutil_png__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./penguinmod/extensions/colorutil.png */ "./src/lib/libraries/extensions/penguinmod/extensions/colorutil.png"); /* harmony import */ var _penguinmod_extensions_colorutil_png__WEBPACK_IMPORTED_MODULE_75___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_colorutil_png__WEBPACK_IMPORTED_MODULE_75__); /* harmony import */ var _penguinmod_extensions_iframe_png__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./penguinmod/extensions/iframe.png */ "./src/lib/libraries/extensions/penguinmod/extensions/iframe.png"); /* harmony import */ var _penguinmod_extensions_iframe_png__WEBPACK_IMPORTED_MODULE_76___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_iframe_png__WEBPACK_IMPORTED_MODULE_76__); /* harmony import */ var _penguinmod_extensions_extendedaudio_png__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./penguinmod/extensions/extendedaudio.png */ "./src/lib/libraries/extensions/penguinmod/extensions/extendedaudio.png"); /* harmony import */ var _penguinmod_extensions_extendedaudio_png__WEBPACK_IMPORTED_MODULE_77___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_extendedaudio_png__WEBPACK_IMPORTED_MODULE_77__); /* harmony import */ var _penguinmod_extensions_scratchauth2_svg__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./penguinmod/extensions/scratchauth2.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/scratchauth2.svg"); /* harmony import */ var _penguinmod_extensions_scratchauth2_svg__WEBPACK_IMPORTED_MODULE_78___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_scratchauth2_svg__WEBPACK_IMPORTED_MODULE_78__); /* harmony import */ var _penguinmod_extensions_permissions_png__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./penguinmod/extensions/permissions.png */ "./src/lib/libraries/extensions/penguinmod/extensions/permissions.png"); /* harmony import */ var _penguinmod_extensions_permissions_png__WEBPACK_IMPORTED_MODULE_79___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_permissions_png__WEBPACK_IMPORTED_MODULE_79__); /* harmony import */ var _penguinmod_extensions_oddmessages_svg__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./penguinmod/extensions/oddmessages.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/oddmessages.svg"); /* harmony import */ var _penguinmod_extensions_oddmessages_svg__WEBPACK_IMPORTED_MODULE_80___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_oddmessages_svg__WEBPACK_IMPORTED_MODULE_80__); /* harmony import */ var _penguinmod_extensions_clonemanager_png__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./penguinmod/extensions/clonemanager.png */ "./src/lib/libraries/extensions/penguinmod/extensions/clonemanager.png"); /* harmony import */ var _penguinmod_extensions_clonemanager_png__WEBPACK_IMPORTED_MODULE_81___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_clonemanager_png__WEBPACK_IMPORTED_MODULE_81__); /* harmony import */ var _penguinmod_extensions_inlineblocks_png__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./penguinmod/extensions/inlineblocks.png */ "./src/lib/libraries/extensions/penguinmod/extensions/inlineblocks.png"); /* harmony import */ var _penguinmod_extensions_inlineblocks_png__WEBPACK_IMPORTED_MODULE_82___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_inlineblocks_png__WEBPACK_IMPORTED_MODULE_82__); /* harmony import */ var _penguinmod_extensions_packagedApplications_png__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./penguinmod/extensions/packagedApplications.png */ "./src/lib/libraries/extensions/penguinmod/extensions/packagedApplications.png"); /* harmony import */ var _penguinmod_extensions_packagedApplications_png__WEBPACK_IMPORTED_MODULE_83___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_packagedApplications_png__WEBPACK_IMPORTED_MODULE_83__); /* harmony import */ var _penguinmod_extensions_packagedApplications_inset_png__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./penguinmod/extensions/packagedApplications_inset.png */ "./src/lib/libraries/extensions/penguinmod/extensions/packagedApplications_inset.png"); /* harmony import */ var _penguinmod_extensions_packagedApplications_inset_png__WEBPACK_IMPORTED_MODULE_84___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_packagedApplications_inset_png__WEBPACK_IMPORTED_MODULE_84__); /* harmony import */ var _penguinmod_extensions_sp_json_svg__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./penguinmod/extensions/sp_json.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/sp_json.svg"); /* harmony import */ var _penguinmod_extensions_sp_json_svg__WEBPACK_IMPORTED_MODULE_85___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_sp_json_svg__WEBPACK_IMPORTED_MODULE_85__); /* harmony import */ var _penguinmod_extensions_interfaces2_png__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./penguinmod/extensions/interfaces2.png */ "./src/lib/libraries/extensions/penguinmod/extensions/interfaces2.png"); /* harmony import */ var _penguinmod_extensions_interfaces2_png__WEBPACK_IMPORTED_MODULE_86___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_interfaces2_png__WEBPACK_IMPORTED_MODULE_86__); /* harmony import */ var _penguinmod_extensions_3d_png__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./penguinmod/extensions/3d.png */ "./src/lib/libraries/extensions/penguinmod/extensions/3d.png"); /* harmony import */ var _penguinmod_extensions_3d_png__WEBPACK_IMPORTED_MODULE_87___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_3d_png__WEBPACK_IMPORTED_MODULE_87__); /* harmony import */ var _penguinmod_extensions_3dicon_png__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./penguinmod/extensions/3dicon.png */ "./src/lib/libraries/extensions/penguinmod/extensions/3dicon.png"); /* harmony import */ var _penguinmod_extensions_3dicon_png__WEBPACK_IMPORTED_MODULE_88___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_3dicon_png__WEBPACK_IMPORTED_MODULE_88__); /* harmony import */ var _penguinmod_extensions_3dVr_png__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(/*! ./penguinmod/extensions/3dVr.png */ "./src/lib/libraries/extensions/penguinmod/extensions/3dVr.png"); /* harmony import */ var _penguinmod_extensions_3dVr_png__WEBPACK_IMPORTED_MODULE_89___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_3dVr_png__WEBPACK_IMPORTED_MODULE_89__); /* harmony import */ var _penguinmod_extensions_3dVr_Inset_png__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(/*! ./penguinmod/extensions/3dVr_Inset.png */ "./src/lib/libraries/extensions/penguinmod/extensions/3dVr_Inset.png"); /* harmony import */ var _penguinmod_extensions_3dVr_Inset_png__WEBPACK_IMPORTED_MODULE_90___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_3dVr_Inset_png__WEBPACK_IMPORTED_MODULE_90__); /* harmony import */ var _penguinmod_extensions_3d_physics_png__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(/*! ./penguinmod/extensions/3d_physics.png */ "./src/lib/libraries/extensions/penguinmod/extensions/3d_physics.png"); /* harmony import */ var _penguinmod_extensions_3d_physics_png__WEBPACK_IMPORTED_MODULE_91___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_3d_physics_png__WEBPACK_IMPORTED_MODULE_91__); /* harmony import */ var _penguinmod_extensions_3d_physics_icon_sized_png__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(/*! ./penguinmod/extensions/3d_physics_icon_sized.png */ "./src/lib/libraries/extensions/penguinmod/extensions/3d_physics_icon_sized.png"); /* harmony import */ var _penguinmod_extensions_3d_physics_icon_sized_png__WEBPACK_IMPORTED_MODULE_92___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_3d_physics_icon_sized_png__WEBPACK_IMPORTED_MODULE_92__); /* harmony import */ var _penguinmod_extensions_vr_extension_png__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(/*! ./penguinmod/extensions/vr_extension.png */ "./src/lib/libraries/extensions/penguinmod/extensions/vr_extension.png"); /* harmony import */ var _penguinmod_extensions_vr_extension_png__WEBPACK_IMPORTED_MODULE_93___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_vr_extension_png__WEBPACK_IMPORTED_MODULE_93__); /* harmony import */ var _penguinmod_orgtw_CustomStyles_svg__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(/*! ./penguinmod/orgtw/CustomStyles.svg */ "./src/lib/libraries/extensions/penguinmod/orgtw/CustomStyles.svg"); /* harmony import */ var _penguinmod_orgtw_CustomStyles_svg__WEBPACK_IMPORTED_MODULE_94___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_orgtw_CustomStyles_svg__WEBPACK_IMPORTED_MODULE_94__); /* harmony import */ var _penguinmod_extensions_canvas_effects_svg__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(/*! ./penguinmod/extensions/canvas_effects.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/canvas_effects.svg"); /* harmony import */ var _penguinmod_extensions_canvas_effects_svg__WEBPACK_IMPORTED_MODULE_95___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_canvas_effects_svg__WEBPACK_IMPORTED_MODULE_95__); /* harmony import */ var _penguinmod_orgtw_lz_compress2_svg__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(/*! ./penguinmod/orgtw/lz-compress2.svg */ "./src/lib/libraries/extensions/penguinmod/orgtw/lz-compress2.svg"); /* harmony import */ var _penguinmod_orgtw_lz_compress2_svg__WEBPACK_IMPORTED_MODULE_96___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_orgtw_lz_compress2_svg__WEBPACK_IMPORTED_MODULE_96__); /* harmony import */ var _penguinmod_orgtw_ColorPicker_svg__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(/*! ./penguinmod/orgtw/ColorPicker.svg */ "./src/lib/libraries/extensions/penguinmod/orgtw/ColorPicker.svg"); /* harmony import */ var _penguinmod_orgtw_ColorPicker_svg__WEBPACK_IMPORTED_MODULE_97___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_orgtw_ColorPicker_svg__WEBPACK_IMPORTED_MODULE_97__); /* harmony import */ var _penguinmod_extensions_looksExpanded_svg__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(/*! ./penguinmod/extensions/looksExpanded.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/looksExpanded.svg"); /* harmony import */ var _penguinmod_extensions_looksExpanded_svg__WEBPACK_IMPORTED_MODULE_98___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_looksExpanded_svg__WEBPACK_IMPORTED_MODULE_98__); /* harmony import */ var _penguinmod_extensions_printing_svg__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(/*! ./penguinmod/extensions/printing.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/printing.svg"); /* harmony import */ var _penguinmod_extensions_printing_svg__WEBPACK_IMPORTED_MODULE_99___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_printing_svg__WEBPACK_IMPORTED_MODULE_99__); /* harmony import */ var _penguinmod_extensions_tuneShark_svg__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(/*! ./penguinmod/extensions/tuneShark.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/tuneShark.svg"); /* harmony import */ var _penguinmod_extensions_tuneShark_svg__WEBPACK_IMPORTED_MODULE_100___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_tuneShark_svg__WEBPACK_IMPORTED_MODULE_100__); /* harmony import */ var _penguinmod_extensions_myBlocksPlus_svg__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(/*! ./penguinmod/extensions/myBlocksPlus.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/myBlocksPlus.svg"); /* harmony import */ var _penguinmod_extensions_myBlocksPlus_svg__WEBPACK_IMPORTED_MODULE_101___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_myBlocksPlus_svg__WEBPACK_IMPORTED_MODULE_101__); /* harmony import */ var _penguinmod_extensions_BetterComments_svg__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(/*! ./penguinmod/extensions/BetterComments.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/BetterComments.svg"); /* harmony import */ var _penguinmod_extensions_BetterComments_svg__WEBPACK_IMPORTED_MODULE_102___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_BetterComments_svg__WEBPACK_IMPORTED_MODULE_102__); /* harmony import */ var _penguinmod_extensions_particleEngine_svg__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(/*! ./penguinmod/extensions/particleEngine.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/particleEngine.svg"); /* harmony import */ var _penguinmod_extensions_particleEngine_svg__WEBPACK_IMPORTED_MODULE_103___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_particleEngine_svg__WEBPACK_IMPORTED_MODULE_103__); /* harmony import */ var _penguinmod_extensions_scripts_svg__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(/*! ./penguinmod/extensions/scripts.svg */ "./src/lib/libraries/extensions/penguinmod/extensions/scripts.svg"); /* harmony import */ var _penguinmod_extensions_scripts_svg__WEBPACK_IMPORTED_MODULE_104___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_scripts_svg__WEBPACK_IMPORTED_MODULE_104__); /* harmony import */ var _penguinmod_extensions_storage_png__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(/*! ./penguinmod/extensions/storage.png */ "./src/lib/libraries/extensions/penguinmod/extensions/storage.png"); /* harmony import */ var _penguinmod_extensions_storage_png__WEBPACK_IMPORTED_MODULE_105___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_storage_png__WEBPACK_IMPORTED_MODULE_105__); /* harmony import */ var _penguinmod_extensions_multipletimers_png__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(/*! ./penguinmod/extensions/multipletimers.png */ "./src/lib/libraries/extensions/penguinmod/extensions/multipletimers.png"); /* harmony import */ var _penguinmod_extensions_multipletimers_png__WEBPACK_IMPORTED_MODULE_106___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_multipletimers_png__WEBPACK_IMPORTED_MODULE_106__); /* harmony import */ var _penguinmod_extensions_advancedtext_png__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(/*! ./penguinmod/extensions/advancedtext.png */ "./src/lib/libraries/extensions/penguinmod/extensions/advancedtext.png"); /* harmony import */ var _penguinmod_extensions_advancedtext_png__WEBPACK_IMPORTED_MODULE_107___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_advancedtext_png__WEBPACK_IMPORTED_MODULE_107__); /* harmony import */ var _penguinmod_extensions_javascript_png__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(/*! ./penguinmod/extensions/javascript.png */ "./src/lib/libraries/extensions/penguinmod/extensions/javascript.png"); /* harmony import */ var _penguinmod_extensions_javascript_png__WEBPACK_IMPORTED_MODULE_108___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_javascript_png__WEBPACK_IMPORTED_MODULE_108__); /* harmony import */ var _penguinmod_extensions_pathfinding_png__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(/*! ./penguinmod/extensions/pathfinding.png */ "./src/lib/libraries/extensions/penguinmod/extensions/pathfinding.png"); /* harmony import */ var _penguinmod_extensions_pathfinding_png__WEBPACK_IMPORTED_MODULE_109___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_pathfinding_png__WEBPACK_IMPORTED_MODULE_109__); /* harmony import */ var _penguinmod_extensions_animation_png__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(/*! ./penguinmod/extensions/animation.png */ "./src/lib/libraries/extensions/penguinmod/extensions/animation.png"); /* harmony import */ var _penguinmod_extensions_animation_png__WEBPACK_IMPORTED_MODULE_110___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_animation_png__WEBPACK_IMPORTED_MODULE_110__); /* harmony import */ var _penguinmod_extensions_motion_expanded_png__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(/*! ./penguinmod/extensions/motion_expanded.png */ "./src/lib/libraries/extensions/penguinmod/extensions/motion_expanded.png"); /* harmony import */ var _penguinmod_extensions_motion_expanded_png__WEBPACK_IMPORTED_MODULE_111___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_motion_expanded_png__WEBPACK_IMPORTED_MODULE_111__); /* harmony import */ var _penguinmod_extensions_events_expanded_png__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(/*! ./penguinmod/extensions/events_expanded.png */ "./src/lib/libraries/extensions/penguinmod/extensions/events_expanded.png"); /* harmony import */ var _penguinmod_extensions_events_expanded_png__WEBPACK_IMPORTED_MODULE_112___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_events_expanded_png__WEBPACK_IMPORTED_MODULE_112__); /* harmony import */ var _penguinmod_extensions_controls_expanded_png__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(/*! ./penguinmod/extensions/controls_expanded.png */ "./src/lib/libraries/extensions/penguinmod/extensions/controls_expanded.png"); /* harmony import */ var _penguinmod_extensions_controls_expanded_png__WEBPACK_IMPORTED_MODULE_113___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_controls_expanded_png__WEBPACK_IMPORTED_MODULE_113__); /* harmony import */ var _penguinmod_extensions_sensing_expanded_png__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(/*! ./penguinmod/extensions/sensing_expanded.png */ "./src/lib/libraries/extensions/penguinmod/extensions/sensing_expanded.png"); /* harmony import */ var _penguinmod_extensions_sensing_expanded_png__WEBPACK_IMPORTED_MODULE_114___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_sensing_expanded_png__WEBPACK_IMPORTED_MODULE_114__); /* harmony import */ var _penguinmod_extensions_operators_expanded_png__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(/*! ./penguinmod/extensions/operators_expanded.png */ "./src/lib/libraries/extensions/penguinmod/extensions/operators_expanded.png"); /* harmony import */ var _penguinmod_extensions_operators_expanded_png__WEBPACK_IMPORTED_MODULE_115___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_operators_expanded_png__WEBPACK_IMPORTED_MODULE_115__); /* harmony import */ var _penguinmod_extensions_placeholder_png__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(/*! ./penguinmod/extensions/placeholder.png */ "./src/lib/libraries/extensions/penguinmod/extensions/placeholder.png"); /* harmony import */ var _penguinmod_extensions_placeholder_png__WEBPACK_IMPORTED_MODULE_116___default = /*#__PURE__*/__webpack_require__.n(_penguinmod_extensions_placeholder_png__WEBPACK_IMPORTED_MODULE_116__); /* eslint-disable max-len */ // TODO: Rename file names to match variable/prop names? // turbowarp & gallery icons // thank yo godslayerakp for makin pmCamera :good: // cl waw // import cloudlinkThumb from './penguinmod/extensions/cloudlinkThumb.png'; // thx jeremey // griffpatch stuff that hopefully we can keep pls plsplspl !!S! // LilyMakesThings 🙏 // import lmsMcUtilsIcon from './penguinmod/extensions/mcutils.png'; // more icons so they arent just red when the extension color is not red // import jgTweeningExtensionIcon from './penguinmod/extensions/tween.png'; // 3D MAN WTF // virtal realty // sharkpool // events // category expansions // jg: default icon if you are too lazy to make one and you want me to make one instead lololololololol // gsa: ololololololo const urlParams = new URLSearchParams(location.search); const IsLocal = String(window.location.href).startsWith("http://localhost:"); const IsLiveTests = urlParams.has('livetests'); let menuItems = [{ name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "TMPose2Scratch", id: "gui.extension.tmpose2scratch.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Recognize your own poses.", id: "gui.extension.tmpose2scratchblocks.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "ImageClassifier2Scratch", id: "gui.extension.imageclassifier2scratch.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Image Classifier Blocks.", id: "gui.extension.ic2scratchblocks.description" }), featured: true, disabled: false, internetConnectionRequired: true, bluetoothRequired: false }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "BlockAI", id: "gui.extension.blockai.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "gemini\u3067\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u306E\u30B5\u30DD\u30FC\u30C8\u3092\u3057\u307E\u3059\u3002\u5B9F\u9A13\u7684\u3067\u3001\u9593\u9055\u3063\u305F\u60C5\u5831\u306A\u3069\u3092\u8FD4\u3059\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002", id: "gui.extension.blockai.description" }), featured: true, disabled: false, internetConnectionRequired: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "NewHandpose2Scratch", id: "gui.extension.newhandpose2scratch.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u65B0\u3057\u3044\u624B\u306E\u5F62\u3092\u8A8D\u8B58\u3059\u308B\u62E1\u5F35\u6A5F\u80FD\u3067\u3059\u3002\u304B\u306A\u308A\u9AD8\u901F\u3067\u3001\u5965\u884C\u304D(z\u5EA7\u6A19)\u306F\u691C\u51FA\u3067\u304D\u307E\u305B\u3093\u3002", id: "gui.extension.newhandpose2scratchblocks.description" }), featured: true, disabled: false, internetConnectionRequired: true, bluetoothRequired: false, helpLink: "https://champierre.github.io/handpose2scratch/" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Handpose2Scratch", id: "gui.extension.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u3053\u308C\u306F\u53E4\u3044\u624B\u306E\u30DD\u30FC\u30BA\u30C8\u30E9\u30C3\u30AD\u30F3\u30B0\u3067\u3001\u5C11\u3057\u51E6\u7406\u304C\u9045\u3044\u3067\u3059\u3002\u5965\u884C\u304D(z\u5EA7\u6A19)\u3082\u53D6\u5F97\u3067\u304D\u307E\u3059\u3002", id: "gui.extension.handpose2scratchblocks.description" }), featured: true, disabled: false, internetConnectionRequired: true, bluetoothRequired: false, helpLink: "https://champierre.github.io/handpose2scratch/" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "TM2Scratch", id: "gui.extension.tm2scratch.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u753B\u50CF\u3084\u97F3\u58F0\u3092\u5B66\u7FD2\u3055\u305B\u3088\u3046\u3002", id: "gui.extension.tm2scratchblocks.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "ML2Scratch", id: "gui.extension.ml2scratch.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u3067\u30AB\u30E1\u30E9\u3084\u30B9\u30C6\u30FC\u30B8\u306E\u753B\u50CF\u3092\u5B66\u7FD2\u30FB\u8A8D\u8B58\u3067\u304D\u307E\u3059\u3002", id: "gui.extension.ml2scratch.description" }), featured: true, disabled: false, bluetoothRequired: false, internetConnectionRequired: true, helpLink: "https://github.com/champierre/ml2scratch/" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Posenet2Scratch", id: "gui.extension.posenet2scratch.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u7279\u5225\u306A\u30C7\u30D0\u30A4\u30B9\u3092\u4F7F\u308F\u305A\u306B\u3001\u901A\u5E38\u306EWeb\u30AB\u30E1\u30E9\u3067\u4EBA\u9593\u306E\u30DD\u30FC\u30BA\u3092\u8FC5\u901F\u304B\u3064\u6B63\u78BA\u306B\u691C\u51FA\u3057\u307E\u3059", id: "gui.extension.posenet2scratch.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Facemesh2scratch", id: "gui.extension.facemesh2scratch.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u30D5\u30A7\u30A4\u30B9\u30C8\u30E9\u30C3\u30AD\u30F3\u30B0\u3092\u6D3B\u7528\u3057\u307E\u3057\u3087\u3046!", id: "gui.extension.facemesh2scratch.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Handpose2scratch", id: "gui.extension.handpose2scratch2.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u624B\u306E\u7D30\u304B\u3044\u90E8\u4F4D\u306E\u5EA7\u6A19\u3092\u53D6\u5F97\u30FB\u30C8\u30E9\u30C3\u30AD\u30F3\u30B0\u3067\u304D\u307E\u3059\u3002", id: "gui.extension.handpose2scratch2.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "p5js", id: "gui.extension.p5js.name" }), extensionId: "https://huggingface.co/datasets/soiz1/my-scratch-ai-extensions/raw/main/p5js.js", iconURL: _p5_noise_48d03d1d2794e30b221465fc07da79f7_png__WEBPACK_IMPORTED_MODULE_3___default.a, insetIconURL: _p5_noise_icon_svg__WEBPACK_IMPORTED_MODULE_4___default.a, collaborator: "adacraft", internetConnectionRequired: true, tags: [], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "p5.js \u30E9\u30A4\u30D6\u30E9\u30EA\u3092\u4F7F\u7528\u3059\u308B\u3044\u304F\u3064\u304B\u306E\u30D6\u30ED\u30C3\u30AF\u3002", id: "gui.extension.p5js.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Music", id: "gui.extension.music.name" }), extensionId: "music", iconURL: _music_music_png__WEBPACK_IMPORTED_MODULE_5___default.a, insetIconURL: _music_music_small_svg__WEBPACK_IMPORTED_MODULE_6___default.a, customInsetColor: "#CF63CF", tags: ["scratch", "noisemaker"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Play instruments and drums.", id: "gui.extension.music.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Pen", id: "gui.extension.pen.name" }), extensionId: "pen", iconURL: _pen_pen_png__WEBPACK_IMPORTED_MODULE_7___default.a, insetIconURL: _pen_pen_small_svg__WEBPACK_IMPORTED_MODULE_8___default.a, tags: ["scratch", "graphics"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Draw with your sprites.", id: "gui.extension.pen.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Animated Text", id: "gui.extension.animatedtext.name" }), extensionId: "text", iconURL: _penguinmod_extensions_text_extension_png__WEBPACK_IMPORTED_MODULE_20___default.a, insetIconURL: _penguinmod_extensions_text_extension_small_svg__WEBPACK_IMPORTED_MODULE_21___default.a, customInsetColor: "#9A66FF", tags: ["scratch"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u6587\u5B57\u306B\u547D\u3092\u5439\u304D\u8FBC\u307F\u307E\u3059\u3002\u5143\u3005\u3001Scratch\u516C\u5F0F\u304C\u958B\u767A\u4E2D\u306E\u3082\u306E\u3067\u3057\u305F\u3002", id: "gui.extension.animatedtext.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Video Sensing", id: "gui.extension.videosensing.name" }), extensionId: "videoSensing", iconURL: _videoSensing_video_sensing_png__WEBPACK_IMPORTED_MODULE_12___default.a, insetIconURL: _videoSensing_video_sensing_small_svg__WEBPACK_IMPORTED_MODULE_13___default.a, customInsetColor: "#74BDDC", tags: ["scratch", "hardware"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Sense motion with the camera.", id: "gui.extension.videosensing.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Text to Speech", id: "gui.extension.text2speech.name" }), extensionId: "text2speech", collaborator: "Amazon Web Services", credits: "Google TTS", iconURL: _text2speech_text2speech_png__WEBPACK_IMPORTED_MODULE_14___default.a, insetIconURL: _text2speech_text2speech_small_svg__WEBPACK_IMPORTED_MODULE_15___default.a, customInsetColor: "#9966FF", tags: ["scratch", "noisemaker"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Make your projects talk.", id: "gui.extension.text2speech.description" }), featured: true, internetConnectionRequired: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Translate", id: "gui.extension.translate.name" }), extensionId: "translate", collaborator: "Google", iconURL: _translate_translate_png__WEBPACK_IMPORTED_MODULE_16___default.a, insetIconURL: _translate_translate_small_png__WEBPACK_IMPORTED_MODULE_17___default.a, customInsetColor: "#5CB1D6", tags: ["scratch"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30C6\u30AD\u30B9\u30C8\u3092\u591A\u304F\u306E\u8A00\u8A9E\u306B\u7FFB\u8A33\u3057\u307E\u3059\u3002", id: "gui.extension.translate.description" }), featured: true, internetConnectionRequired: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Looks Expanded", id: "gui.extension.looksexpanded.name" }), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/Looks-Expanded.js", iconURL: _penguinmod_extensions_looksExpanded_svg__WEBPACK_IMPORTED_MODULE_98___default.a, tags: ["penguinmod", "categoryexpansion", "graphics"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Expansion of the Looks Category.", id: "gui.extension.looksexpanded.description" }), extDeveloper: "SharkPool, CST1229", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Sensing Plus", id: "gui.extension.sensingplus.name" }), extensionId: "https://extensions.turbowarp.org/obviousAlexC/SensingPlus.js", collaborator: "ObviousAlexC", iconURL: "https://extensions.turbowarp.org/images/obviousAlexC/SensingPlus.svg", tags: ["turbowarp"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "An extension to the sensing category.", id: "gui.extension.sensingplus.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Window Controls", id: "gui.extension.windowcontrols.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Move, resize, rename the window, enter fullscreen, get screen size, and more.", id: "gui.extension.windowcontrols.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Stretch", id: "gui.extension.stretch.name" }), extensionId: "https://extensions.turbowarp.org/stretch.js", iconURL: "https://extensions.turbowarp.org/images/stretch.svg", tags: ["turbowap"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Stretch sprites horizontally or vertically.", id: "gui.extension.stretch.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Makey Makey", id: "gui.extension.makeymakey.name" }), extensionId: "makeymakey", collaborator: "JoyLabz", iconURL: _makeymakey_makeymakey_png__WEBPACK_IMPORTED_MODULE_18___default.a, insetIconURL: _makeymakey_makeymakey_small_svg__WEBPACK_IMPORTED_MODULE_19___default.a, customInsetColor: "#E64D00", tags: ["scratch", "hardware"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u4F55\u3067\u3082\u30AD\u30FC\u306B\u5909\u3048\u3089\u308C\u307E\u3059\u3002", id: "gui.extension.makeymakey.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Stage Camera", id: "gui.extension.stagecamera.name" }), extensionId: "pmCamera", iconURL: _penguinmod_extensions_pmcamera_thumbnail_png__WEBPACK_IMPORTED_MODULE_63___default.a, tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Allows the camera to move around anywhere on the stage.", id: "gui.extension.stagecamera.description" }), credits: "Inspired by⠀⠀⠀⠀⠀⠀ DT-is-not-available", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Files", id: "gui.extension.files.name" }), extensionId: "twFiles", twDeveloper: "GarboMuffin", iconURL: _penguinmod_extensions_files_svg__WEBPACK_IMPORTED_MODULE_48___default.a, insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, tags: ["turbowarp", "datamgmt"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Blocks for reading and creating files.", id: "gui.extension.files.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Zip", id: "gui.extension.zip.name" }), extensionId: "https://extensions.turbowarp.org/CST1229/zip.js", iconURL: "https://extensions.turbowarp.org/images/CST1229/zip.svg", insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, tags: ["turbowarp", "datamgmt"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Create and edit .zip format files, including .sb3, .pmp and .s4s.txt files.", id: "gui.extension.zip.description" }), twDeveloper: "CST1229", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Pen+", id: "gui.extension.penplus.name" }), extensionId: "https://extensions.penguinmod.com/extensions/ObviousAlexC/PenPlus.js", tags: ["categoryexpansion", "graphics"], iconURL: "https://extensions.penguinmod.com/images/ObviousAlexC/PenPlus.svg", description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "An extension to the Pen category! Adds blocks for drawing triangles using textures and tints, drawing images and editing their pixels, etc.", id: "gui.extension.penplus.description" }), featured: true, extDeveloper: "pinksheep2917" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Sound Systems", id: "gui.extension.soundsystems.name" }), extensionId: "jgExtendedAudio", iconURL: _penguinmod_extensions_extendedaudio_png__WEBPACK_IMPORTED_MODULE_77___default.a, tags: ["penguinmod", "categoryexpansion", "noisemaker"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "An audio grouping system for more intensive audio work.", id: "gui.extension.soundsystems.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Tune Shark V3", id: "gui.extension.tunesharkv3.name" }), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/Tune-Shark-V3.js", iconURL: _penguinmod_extensions_tuneShark_svg__WEBPACK_IMPORTED_MODULE_100___default.a, tags: ["penguinmod", "categoryexpansion", "noisemaker"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Advanced audio engine with complex sound control, multiple audio effects and more!", id: "gui.extension.tunesharkv3.description" }), extDeveloper: "SharkPool", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Sound Waves", id: "gui.extension.soundwaves.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u97F3\u3092\u4F5C\u308D\u3046\uFF01", id: "gui.extension.soundwaves.description" }), extDeveloper: "SharkPool", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Motion Expansion", id: "gui.extension.motionexpansion.name" }), extensionId: "pmMotionExpansion", iconURL: _penguinmod_extensions_motion_expanded_png__WEBPACK_IMPORTED_MODULE_111___default.a, tags: ["penguinmod", "categoryexpansion"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u79FB\u52D5\u3084\u885D\u7A81\u306E\u305F\u3081\u306E\u5C0F\u3055\u306A\u30E2\u30FC\u30B7\u30E7\u30F3 \u30D6\u30ED\u30C3\u30AF\u304C\u5897\u3048\u307E\u3057\u305F\u3002", id: "gui.extension.motionexpansion.description" }), featured: true, credits: "Some blocks from NexusKitten" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Events Expansion", id: "gui.extension.eventsexpansion.name" }), extensionId: "pmEventsExpansion", iconURL: _penguinmod_extensions_events_expanded_png__WEBPACK_IMPORTED_MODULE_112___default.a, tags: ["penguinmod", "categoryexpansion"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u60C5\u5831\u306E\u9001\u53D7\u4FE1\u3001\u7279\u5B9A\u306E\u30B9\u30D7\u30E9\u30A4\u30C8\u306E\u901A\u77E5\u3001\u307E\u305F\u306F\u7269\u4E8B\u304C\u8D77\u3053\u308B\u30BF\u30A4\u30DF\u30F3\u30B0\u3092\u3088\u308A\u9069\u5207\u306B\u5236\u5FA1\u3059\u308B\u305F\u3081\u306E\u30A4\u30D9\u30F3\u30C8\u304C\u5897\u3048\u307E\u3059\u3002", id: "gui.extension.eventsexpansion.description" }), featured: true, credits: "Some blocks from LilyMakesThings" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Controls Expansion", id: "gui.extension.controlsexpansion.name" }), extensionId: "pmControlsExpansion", iconURL: _penguinmod_extensions_controls_expanded_png__WEBPACK_IMPORTED_MODULE_113___default.a, tags: ["penguinmod", "categoryexpansion"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30A2\u30CB\u30E1\u30FC\u30B7\u30E7\u30F3\u3001\u8907\u96D1\u306A\u30B7\u30B9\u30C6\u30E0\u3001\u307E\u305F\u306F\u3088\u308A\u30AF\u30EA\u30FC\u30F3\u306A 1 \u56DE\u9650\u308A\u306E\u4F7F\u7528\u30D6\u30ED\u30C3\u30AF\u7528\u306E\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB \u30D6\u30ED\u30C3\u30AF\u304C\u5897\u3048\u307E\u3057\u305F\u3002", id: "gui.extension.controlsexpansion.description" }), featured: true, credits: '"new thread" by CubesterYT, CST1229, SharkPool' }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Sensing Expansion", id: "gui.extension.sensingexpansion.name" }), extensionId: "pmSensingExpansion", iconURL: _penguinmod_extensions_sensing_expanded_png__WEBPACK_IMPORTED_MODULE_114___default.a, tags: ["penguinmod", "categoryexpansion"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u7279\u5B9A\u306E\u30E6\u30FC\u30B9\u30B1\u30FC\u30B9\u3084\u30E6\u30FC\u30B6\u30FC\u306E\u30C7\u30D0\u30A4\u30B9\u3068\u306E\u5BFE\u8A71\u306E\u305F\u3081\u306E\u3001\u3088\u308A\u591A\u304F\u306E\u30BB\u30F3\u30B7\u30F3\u30B0 \u30D6\u30ED\u30C3\u30AF\u3002", id: "gui.extension.sensingexpansion.description" }), credits: "Some blocks from SharkPool-SP", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Operators Expansion", id: "gui.extension.operatorsexpansion.name" }), extensionId: "pmOperatorsExpansion", iconURL: _penguinmod_extensions_operators_expanded_png__WEBPACK_IMPORTED_MODULE_115___default.a, tags: ["penguinmod", "categoryexpansion", "math"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "NAND\u3001NOR\u3001\u6587\u5B57\u30B3\u30FC\u30C9\u304B\u3089\u6587\u5B57\u3078\u306E\u5909\u63DB\u3001\u8907\u6570\u884C\u306E\u30C6\u30AD\u30B9\u30C8\u3092\u884C\u3054\u3068\u306B\u8AAD\u307F\u53D6\u308B\u306A\u3069\u306E\u6F14\u7B97\u5B50\u3002", id: "gui.extension.operatorsexpansion.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "My Blocks+", id: "gui.extension.myblocksplus.name" }), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/My-Blocks-Plus.js", iconURL: _penguinmod_extensions_myBlocksPlus_svg__WEBPACK_IMPORTED_MODULE_101___default.a, tags: ["penguinmod", "categoryexpansion"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30AB\u30B9\u30BF\u30E0\u5165\u529B\u3001\u8272\u306A\u3069\u3092\u4F7F\u7528\u3057\u3066\u3001\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8\u307E\u305F\u306F\u30B0\u30ED\u30FC\u30D0\u30EB\u306E\u30AB\u30B9\u30BF\u30E0 \u30D6\u30ED\u30C3\u30AF\u3092\u4F5C\u6210\u3057\u307E\u3059\u3002", id: "gui.extension.myblocksplus.description" }), extDeveloper: "SharkPool, CST1229, 0znzw", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Better Comments", id: "gui.extension.bettercomments.name" }), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/Better-Comments.js", iconURL: _penguinmod_extensions_BetterComments_svg__WEBPACK_IMPORTED_MODULE_102___default.a, tags: ["penguinmod", "categoryexpansion"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u3068\u30DE\u30FC\u30AF\u30C0\u30A6\u30F3\u306E\u30B5\u30DD\u30FC\u30C8\u306B\u3088\u308A\u3001\u30B3\u30E1\u30F3\u30C8\u306E\u898B\u305F\u76EE\u3092\u826F\u304F\u3057\u307E\u3059\u3002", id: "gui.extension.bettercomments.description" }), extDeveloper: "SharkPool", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "JSON", id: "gui.extension.json.name" }), extensionId: "jgJSON", iconURL: _penguinmod_extensions_json_png__WEBPACK_IMPORTED_MODULE_49___default.a, tags: ["penguinmod", "datamgmt"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "JSON \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3068\u914D\u5217\u3092\u51E6\u7406\u3059\u308B\u305F\u3081\u306E\u30D6\u30ED\u30C3\u30AF\u3002", id: "gui.extension.json.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Swift JSON", id: "gui.extension.swiftjson.name" }), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/JSON-Array.js", iconURL: _penguinmod_extensions_sp_json_svg__WEBPACK_IMPORTED_MODULE_85___default.a, tags: ["penguinmod", "datamgmt"], extDeveloper: "SharkPool", description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u6F5C\u5728\u7684\u306B\u5371\u967A\u3067\u3059\u304C\u3001JSON\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3068\u914D\u5217\u306E\u51E6\u7406\u3092\u9AD8\u901F\u5316\u3059\u308B\u62E1\u5F35\u6A5F\u80FD\u3067\u3059\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067JSON\u3092\u983B\u7E41\u306B\u4F7F\u7528\u3059\u308B\u5834\u5408\u306B\u63A8\u5968\u3055\u308C\u307E\u3059\u3002", id: "gui.extension.swiftjson.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Particle Engine", id: "gui.extension.particleengine.name" }), extensionId: "https://sharkpools-extensions.vercel.app/extension-code/Particle-Engine.js", iconURL: _penguinmod_extensions_particleEngine_svg__WEBPACK_IMPORTED_MODULE_103___default.a, tags: ["penguinmod", "graphics"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30AF\u30ED\u30FC\u30F3\u306A\u3057\u3067\u5F37\u529B\u306A\u30D1\u30FC\u30C6\u30A3\u30AF\u30EB\u30A8\u30F3\u30B8\u30F3\u3092\u4F5C\u6210\u3059\u308B", id: "gui.extension.particleengine.description" }), extDeveloper: "SharkPool", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Custom Styles", id: "gui.extension.customstyles.name" }), extensionId: "shovelcss", iconURL: _penguinmod_orgtw_CustomStyles_svg__WEBPACK_IMPORTED_MODULE_94___default.a, tags: ["penguinmod", "graphics"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u306E\u5909\u6570\u30E2\u30CB\u30BF\u30FC\u3068\u30D7\u30ED\u30F3\u30D7\u30C8\u306E\u5916\u89B3\u3092\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u3057\u307E\u3059\u3002", id: "gui.extension.customstyles.description" }), extDeveloper: "TheShovel", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Physics", id: "gui.extension.physics.name" }), extensionId: "https://extensions.turbowarp.org/box2d.js", tags: ["turbowarp"], extDeveloper: "griffpatch", iconURL: _penguinmod_extensions_griffpatch_physics_png__WEBPACK_IMPORTED_MODULE_67___default.a, insetIconURL: _penguinmod_extensions_griffpatch_physicsIcon_svg__WEBPACK_IMPORTED_MODULE_68___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Griffpatch \u306B\u3088\u3063\u3066\u4F5C\u6210\u3055\u308C\u305F\u7269\u7406\u51E6\u7406\u3092\u3068\u3066\u3082\u7C21\u5358\u306B\u3059\u308BBox2D\u62E1\u5F35\u6A5F\u80FD\u3002", id: "gui.extension.physics.description" }), customInsetColor: "#D9F0FF", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Tweening", id: "gui.extension.tweening.name" }), extensionId: "jgTween", credits: "easings.net, Arrow & GarboMuffin", description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u3055\u307E\u3056\u307E\u306A\u30A4\u30FC\u30B8\u30F3\u30B0\u95A2\u6570\u3068\u65B9\u5411\u3092\u4F7F\u7528\u3057\u3066\u5024\u3092\u30B9\u30E0\u30FC\u30BA\u306B\u30A2\u30CB\u30E1\u30FC\u30B7\u30E7\u30F3\u5316\u3057\u307E\u3059\u3002", id: "gui.extension.tweening.description" }), iconURL: "https://extensions.turbowarp.org/images/JeremyGamer13/tween.svg", tags: ["penguinmod"], featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Tailgating", id: "gui.extension.tailgating.name" }), extensionId: "jgTailgating", description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "RPG \u306E\u30D1\u30FC\u30C6\u30A3 \u30E1\u30F3\u30D0\u30FC\u306E\u3088\u3046\u306B\u3001\u30B9\u30D7\u30E9\u30A4\u30C8\u3068\u30AF\u30ED\u30FC\u30F3\u3092\u4ED6\u306E\u30B9\u30D7\u30E9\u30A4\u30C8\u3068\u30AF\u30ED\u30FC\u30F3\u306E\u5F8C\u308D\u3092\u30AA\u30D5\u30BB\u30C3\u30C8\u3067\u8FFD\u5F93\u3055\u305B\u307E\u3059\u3002", id: "gui.extension.tailgating.description" }), iconURL: _penguinmod_extensions_tailgating_png__WEBPACK_IMPORTED_MODULE_50___default.a, tags: ["penguinmod"], featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Tile Grids", id: "gui.extension.tilegrids.name" }), extensionId: "https://extensions.penguinmod.com/extensions/SharkPool/Tile-Grids.js", iconURL: "https://extensions.penguinmod.com/images/SharkPool/Tile-Grids.svg", tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30B9\u30D7\u30E9\u30A4\u30C8\u3092\u30B0\u30EA\u30C3\u30C9\u4E0A\u306B\u914D\u7F6E\u3057\u307E\u3059\u3002", id: "gui.extension.tilegrids.description" }), extDeveloper: "SharkPool-SP", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Canvas Effects", id: "gui.extension.canvaseffects.name" }), extensionId: "theshovelcanvaseffects", iconURL: _penguinmod_extensions_canvas_effects_svg__WEBPACK_IMPORTED_MODULE_95___default.a, tags: ["penguinmod", "graphics"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30B9\u30C6\u30FC\u30B8\u5168\u4F53\u306B\u8996\u899A\u52B9\u679C\u3092\u9069\u7528\u3057\u307E\u3059\u3002", id: "gui.extension.canvaseffects.description" }), extDeveloper: "TheShovel", credits: "SharkPool", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Clones+", id: "gui.extension.clonesplus.name" }), extensionId: "https://extensions.turbowarp.org/Lily/ClonesPlus.js", tags: ["turbowarp", "categoryexpansion"], iconURL: "https://extensions.turbowarp.org/images/Lily/ClonesPlus.svg", insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Scratch\u306E\u30AF\u30ED\u30FC\u30F3\u6A5F\u80FD\u3092\u62E1\u5F35\u3057\u307E\u3059\u3002", id: "gui.extension.clonesplus.description" }), featured: true, twDeveloper: "LilyMakesThings" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Skins", id: "gui.extension.skins.name" }), extensionId: "https://extensions.turbowarp.org/Lily/Skins.js", tags: ["turbowarp", "graphics"], iconURL: "https://extensions.turbowarp.org/images/Lily/Skins.svg", insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30B9\u30D7\u30E9\u30A4\u30C8\u3092\u4ED6\u306E\u753B\u50CF\u3084\u8863\u88C5\u3068\u3057\u3066\u8868\u793A\u3057\u307E\u3059\u3002", id: "gui.extension.skins.description" }), featured: true, twDeveloper: "LilyMakesThings" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Multiple Timers", id: "gui.extension.multipletimers.name" }), extensionId: "jgTimers", iconURL: _penguinmod_extensions_multipletimers_png__WEBPACK_IMPORTED_MODULE_106___default.a, tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u500B\u5225\u306B\u5236\u5FA1\u3067\u304D\u308B\u30BF\u30A4\u30DE\u30FC\u3092\u4F5C\u6210\u3057\u307E\u3059\u3002", id: "gui.extension.multipletimers.description" }), eventSubmittor: "Arrow", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Temporary Variables", id: "gui.extension.temporaryvariables.name" }), extensionId: "tempVars", iconURL: _penguinmod_extensions_tempvariables_svg__WEBPACK_IMPORTED_MODULE_74___default.a, tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "1\u3064\u306E\u30D6\u30ED\u30C3\u30AF\u30B9\u30BF\u30C3\u30AF\u5185\u3067\u306E\u307F\u4F7F\u7528\u3059\u308B\u5909\u6570\u3092\u4F5C\u6210\u3057\u307E\u3059\u3002\u4E00\u5EA6\u3057\u304B\u4F7F\u7528\u3057\u306A\u3044\u5909\u6570\u3067\u5909\u6570\u30EA\u30B9\u30C8\u304C\u4E71\u96D1\u306B\u306A\u308B\u306E\u3092\u9632\u3050\u306E\u306B\u5F79\u7ACB\u3061\u307E\u3059\u3002", id: "gui.extension.temporaryvariables.description" }), credits: "LilyMakesThings", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "TurboWarp Temporary Variables", id: "gui.extension.turbowarptemporaryvariables.name" }), extensionId: "lmsTempVars2", iconURL: _penguinmod_orgtw_TempVariables2_svg__WEBPACK_IMPORTED_MODULE_73___default.a, tags: ["turbowarp"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u4F7F\u3044\u6368\u3066\u306E\u30E9\u30F3\u30BF\u30A4\u30E0\u5909\u6570\u307E\u305F\u306F\u30B9\u30EC\u30C3\u30C9\u5909\u6570\u3092\u4F5C\u6210\u3057\u307E\u3059\u3002", id: "gui.extension.turbowarptemporaryvariables.description" }), insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, credits: "LilyMakesThings", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Runtime Modifications", id: "gui.extension.runtimemodifications.name" }), extensionId: "jgRuntime", tags: ["penguinmod"], iconURL: _penguinmod_extensions_runtime_svg__WEBPACK_IMPORTED_MODULE_51___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30B9\u30C6\u30FC\u30B8\u3084\u30B9\u30D7\u30E9\u30A4\u30C8\u306A\u3069\u306E Scratch \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u66F4\u65B0\u3059\u308B\u305F\u3081\u306E\u30D6\u30ED\u30C3\u30AF\u3002", id: "gui.extension.runtimemodifications.description" }), credits: "TheShovel, showierdata9978, SharkPool", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Font Manager", id: "gui.extension.fontmanager.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30D5\u30A9\u30F3\u30C8\u3092\u7BA1\u7406\u3001\u4F5C\u6210\u3001\u524A\u9664\u3057\u307E\u3059\u3002", id: "gui.extension.fontmanager.description" }), credits: "SharkPool, Ashimee", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Storage", id: "gui.extension.storage.name" }), extensionId: "jgStorage", iconURL: _penguinmod_extensions_storage_png__WEBPACK_IMPORTED_MODULE_105___default.a, tags: ["penguinmod", "datamgmt"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u9589\u3058\u3089\u308C\u305F\u5F8C\u3067\u3082\u30C7\u30FC\u30BF\u3092\u4FDD\u5B58\u3057\u307E\u3059\u3002\u57FA\u672C\u30B5\u30FC\u30D0\u30FC\u30B9\u30C8\u30EC\u30FC\u30B8\u3082\u542B\u307E\u308C\u307E\u3059\u3002", id: "gui.extension.storage.description" }), eventSubmittor: "Fir & silvxrcat", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "HTTP", id: "gui.extension.http.name" }), extensionId: "https://extensions.turbowarp.org/godslayerakp/http.js", iconURL: "https://extensions.turbowarp.org/images/godslayerakp/http.svg", insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, tags: ["turbowarp"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u5916\u90E8 Web \u30B5\u30A4\u30C8\u3068\u3084\u308A\u3068\u308A\u3059\u308B\u305F\u3081\u306E\u5305\u62EC\u7684\u306A\u62E1\u5F35\u6A5F\u80FD\u3002", id: "gui.extension.http.description" }), featured: true, internetConnectionRequired: true, customInsetColor: "#ff4d4d" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "CloudLink", id: "gui.extension.cloudlink.name" }), extensionId: "https://extensions.penguinmod.com/extensions/MikeDev101/cloudlink.js", tags: ["turbowarp", "penguinmod"], insetIconURL: _penguinmod_extensions_cloudlinkIcon_svg__WEBPACK_IMPORTED_MODULE_64___default.a, iconURL: "https://extensions.penguinmod.com/images/MikeDev101/cloudlink.svg", description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u5F37\u529B\u306AWebSocket\u62E1\u5F35\u6A5F\u80FD\u3002", id: "gui.extension.cloudlink.description" }), featured: true, extDeveloper: "MikeDev", internetConnectionRequired: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Scripts", id: "gui.extension.scripts.name" }), extensionId: "jgScripts", iconURL: _penguinmod_extensions_scripts_svg__WEBPACK_IMPORTED_MODULE_104___default.a, tags: ["penguinmod", "datamgmt"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5B9F\u884C\u4E2D\u306B\u30D6\u30ED\u30C3\u30AF\u3092\u4F7F\u7528\u3057\u3066\u30B3\u30F3\u30D1\u30A4\u30EB\u3055\u308C\u305F\u30B9\u30AF\u30EA\u30D7\u30C8\u3092\u4F5C\u6210\u3057\u307E\u3059\u3002", id: "gui.extension.scripts.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Pang API", id: "gui.extension.pangapi.name" }), extensionId: "https://extensions.penguinmod.com/extensions/SammerLOL/pangapi.js", iconURL: "https://extensions.penguinmod.com/images/SammerLOL/pangapi.png", tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "PenguinMod API\u304B\u3089\u60C5\u5831\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002", id: "gui.extension.pangapi.description" }), extDeveloper: "oc9x97, Ianyourgod", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "3D Math", id: "gui.extension.3dmath.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u72EC\u81EA\u306E\u30B9\u30D7\u30E9\u30A4\u30C8\u30D9\u30FC\u30B9\u306E 3D \u30A8\u30F3\u30B8\u30F3\u3092\u4F5C\u6210\u3059\u308B\u305F\u3081\u306E\u30E6\u30FC\u30C6\u30A3\u30EA\u30C6\u30A3\u3002", id: "gui.extension.3dmath.description" }), extDeveloper: "pinksheep2917", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Random Utilities", id: "gui.extension.randomutilities.name" }), extensionId: "https://extensions.penguinmod.com/extensions/Gen1x/random_utils.js", iconURL: "https://extensions.penguinmod.com/images/Gen1x/randomutils.png", tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30B7\u30FC\u30C9\u30D9\u30FC\u30B9\u306E\u6570\u5024\u751F\u6210\u3001\u771F\u306E\u6570\u5024\u751F\u6210\u3001UUID\u3001\u30E9\u30F3\u30C0\u30E0\u6587\u5B57\u5217\u306A\u3069\u3001\u30E9\u30F3\u30C0\u30E0\u5024\u306E\u751F\u6210\u306B\u95A2\u9023\u3059\u308B\u591A\u304F\u306E\u30D6\u30ED\u30C3\u30AF\u3002", id: "gui.extension.randomutilities.description" }), extDeveloper: "G1nX", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "LZ Compress", id: "gui.extension.lzcompress.name" }), extensionId: "shovellzcompresss", iconURL: _penguinmod_orgtw_lz_compress2_svg__WEBPACK_IMPORTED_MODULE_96___default.a, tags: ["penguinmod", "datamgmt"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "lz-string\u3092\u4F7F\u7528\u3057\u3066\u30C6\u30AD\u30B9\u30C8\u3092\u5727\u7E2E\u304A\u3088\u3073\u89E3\u51CD\u3057\u307E\u3059\u3002", id: "gui.extension.lzcompress.description" }), extDeveloper: "TheShovel", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Prism", id: "gui.extension.prism.name" }), extensionId: "jgPrism", tags: ["penguinmod", "datamgmt"], iconURL: _penguinmod_extensions_prism_png__WEBPACK_IMPORTED_MODULE_52___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u7279\u5B9A\u306E\u30E6\u30FC\u30B9\u30B1\u30FC\u30B9\u307E\u305F\u306F\u4E3B\u8981\u306A\u5229\u4FBF\u6027\u306E\u305F\u3081\u306E\u30D6\u30ED\u30C3\u30AF\u3002", id: "gui.extension.prism.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Vector", id: "gui.extension.vector.name" }), extensionId: "jwVector", iconURL: _penguinmod_extensions_jwVector_svg__WEBPACK_IMPORTED_MODULE_61___default.a, tags: ["penguinmod", "math"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Vector type for calculating with X and Y coordinates.", id: "gui.extension.vector.description" }), extDeveloper: "jwklong", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Odd Messages", id: "gui.extension.oddmessages.name" }), extensionId: "oddMessage", tags: ["penguinmod"], iconURL: _penguinmod_extensions_oddmessages_svg__WEBPACK_IMPORTED_MODULE_80___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30ED\u30B0\u8A18\u9332\u3068\u5909\u6570\u306E\u5229\u7528\u3002", id: "gui.extension.oddmessages.description" }), featured: true, extDeveloper: "silvxrcat" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "HTML iframe Elements", id: "gui.extension.htmliframeelements.name" }), extensionId: "jgIframe", iconURL: _penguinmod_extensions_iframe_png__WEBPACK_IMPORTED_MODULE_76___default.a, tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "HTML \u30B3\u30F3\u30C6\u30F3\u30C4\u307E\u305F\u306F Web \u30B5\u30A4\u30C8\u3092\u542B\u3080\u30D5\u30EC\u30FC\u30E0\u3092\u914D\u7F6E\u304A\u3088\u3073\u79FB\u52D5\u3059\u308B\u305F\u3081\u306E\u30D6\u30ED\u30C3\u30AF\u3002", id: "gui.extension.htmliframeelements.description" }), featured: true, internetConnectionRequired: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Color Picker", id: "gui.extension.colorpicker.name" }), extensionId: "shovelColorPicker", iconURL: _penguinmod_orgtw_ColorPicker_svg__WEBPACK_IMPORTED_MODULE_97___default.a, tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30E6\u30FC\u30B6\u30FC\u304C\u7D44\u307F\u8FBC\u307F\u306E\u30AB\u30E9\u30FC\u30D4\u30C3\u30AB\u30FC\u3092\u4F7F\u7528\u3057\u3066\u8272\u3092\u9078\u629E\u3067\u304D\u308B\u3088\u3046\u306B\u3059\u308B\u3053\u3068\u3067\u3001\u72EC\u81EA\u306B\u30AB\u30E9\u30FC\u30D4\u30C3\u30AB\u30FC\u3092\u4F5C\u6210\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002", id: "gui.extension.colorpicker.description" }), extDeveloper: "TheShovel", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Color Utility Blocks", id: "gui.extension.colorutilityblocks.name" }), extensionId: "colors", iconURL: _penguinmod_extensions_colorutil_png__WEBPACK_IMPORTED_MODULE_75___default.a, tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "16 \u9032\u6570\u3001RGB\u3001HSV\u300110 \u9032\u6570\u306E\u8272\u3084\u305D\u306E\u4ED6\u306E\u8272\u95A2\u9023\u306E\u30B3\u30F3\u30D0\u30FC\u30BF\u30FC\u3002", id: "gui.extension.colorutilityblocks.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "All Menus", id: "gui.extension.allmenus.name" }), extensionId: "https://extensions.penguinmod.com/extensions/Lily/AllMenus.js", iconURL: "https://extensions.penguinmod.com/images/Lily/AllMenus.svg", tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u5404\u30D6\u30ED\u30C3\u30AF\u306E\u3059\u3079\u3066\u306E\u30C9\u30ED\u30C3\u30D7\u30C0\u30A6\u30F3\u30E1\u30CB\u30E5\u30FC\u3092\u62BD\u51FA\u3057\u307E\u3059\u3002", id: "gui.extension.allmenus.description" }), extDeveloper: "LilyMakesThings", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Labels", id: "gui.extension.labels.name" }), extensionId: "jwProto", iconURL: _penguinmod_extensions_proto_svg__WEBPACK_IMPORTED_MODULE_53___default.a, tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Labelling and Placeholders.", id: "gui.extension.labels.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Perlin Noise", id: "gui.extension.perlinnoise.name" }), extensionId: "iygPerlin", tags: ["penguinmod"], iconURL: _penguinmod_extensions_perlinnoisebanner_png__WEBPACK_IMPORTED_MODULE_62___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Perlin\u30CE\u30A4\u30BA\u3092\u751F\u6210\u30FB\u4F7F\u7528\u3059\u308B\u305F\u3081\u306E\u30D6\u30ED\u30C3\u30AF\u3002\u5730\u5F62\u3084\u96F2\u306A\u3069\u306E\u751F\u6210\u306B\u9069\u3057\u3066\u3044\u307E\u3059\u3002", id: "gui.extension.perlinnoise.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "GamePad", id: "gui.extension.gamepad.name" }), extensionId: "Gamepad", tags: ["turbowarp", "hardware"], insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, twDeveloper: "GarboMuffin", iconURL: _penguinmod_extensions_gamepad_svg__WEBPACK_IMPORTED_MODULE_69___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30DC\u30BF\u30F3\u3092\u30AD\u30FC\u306B\u30DE\u30C3\u30D4\u30F3\u30B0\u3059\u308B\u306E\u3067\u306F\u306A\u304F\u3001\u30B2\u30FC\u30E0\u30D1\u30C3\u30C9\u306B\u76F4\u63A5\u30A2\u30AF\u30BB\u30B9\u3057\u307E\u3059\u3002", id: "gui.extension.gamepad.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Printing", id: "gui.extension.printing.name" }), extensionId: "sharkpoolPrinting", iconURL: _penguinmod_extensions_printing_svg__WEBPACK_IMPORTED_MODULE_99___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30C6\u30AD\u30B9\u30C8\u3001\u753B\u50CF\u3001\u30AB\u30B9\u30BF\u30E0 HTML \u3092\u30D7\u30EA\u30F3\u30BF\u30FC\u306B\u5370\u5237\u3059\u308B\u305F\u3081\u306E\u30C0\u30A4\u30A2\u30ED\u30B0\u3092\u8868\u793A\u3067\u304D\u307E\u3059\u3002", id: "gui.extension.printing.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Clipping and Blending", id: "gui.extension.clippingandblending.name" }), extensionId: "https://extensions.turbowarp.org/Xeltalliv/clippingblending.js", iconURL: _penguinmod_extensions_clippingblending_svg__WEBPACK_IMPORTED_MODULE_70___default.a, tags: ["turbowarp", "graphics"], insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u6307\u5B9A\u3055\u308C\u305F\u9577\u65B9\u5F62\u9818\u57DF\u306E\u5916\u5074\u3092\u30AF\u30EA\u30C3\u30D4\u30F3\u30B0\u3057\u3001\u52A0\u6CD5\u7684\u306A\u30AB\u30E9\u30FC\u30D6\u30EC\u30F3\u30C9\u3092\u884C\u3044\u307E\u3059\u3002", id: "gui.extension.clippingandblending.description" }), featured: true, twDeveloper: "Vadik1" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Pointer Lock", id: "gui.extension.pointerlock.name" }), extensionId: "https://extensions.turbowarp.org/pointerlock.js", tags: ["turbowarp"], insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, iconURL: _penguinmod_extensions_pointerlock_png__WEBPACK_IMPORTED_MODULE_71___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30DE\u30A6\u30B9\u30AB\u30FC\u30BD\u30EB\u3092\u30B9\u30C6\u30FC\u30B8\u4E0A\u306B\u56FA\u5B9A\u3059\u308B\u62E1\u5F35\u6A5F\u80FD\u3002", id: "gui.extension.pointerlock.description" }), featured: true, internetConnectionRequired: false, twDeveloper: "GarboMuffin" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Mouse Cursor", id: "gui.extension.mousecursor.name" }), extensionId: "https://extensions.turbowarp.org/cursor.js", tags: ["turbowarp"], insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, iconURL: "https://extensions.turbowarp.org/images/cursor.png", description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30B9\u30C6\u30FC\u30B8\u4E0A\u3067\u306E\u30DE\u30A6\u30B9 \u30AB\u30FC\u30BD\u30EB\u306E\u5916\u89B3\u3092\u5909\u66F4\u3059\u308B\u62E1\u5F35\u6A5F\u80FD\u3002", id: "gui.extension.mousecursor.description" }), featured: true, internetConnectionRequired: false, twDeveloper: "GarboMuffin" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Scratch Authentication", id: "gui.extension.scratchauthentication.name" }), extensionId: "jgScratchAuthenticate", iconURL: _penguinmod_extensions_scratchauth2_svg__WEBPACK_IMPORTED_MODULE_78___default.a, tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Scratch \u8A8D\u8A3C\u3068\u5BFE\u8A71\u3057\u3066\u3001\u30D7\u30EC\u30FC\u30E4\u30FC\u304C\u5B9F\u969B\u306E Scratch \u30E6\u30FC\u30B6\u30FC\u3067\u3042\u308B\u3053\u3068\u3092\u8A3C\u660E\u3057\u307E\u3059\u3002", id: "gui.extension.scratchauthentication.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "JavaScript", id: "gui.extension.javascript.name" }), extensionId: "jgJavascript", iconURL: _penguinmod_extensions_javascript_png__WEBPACK_IMPORTED_MODULE_108___default.a, tags: ["penguinmod", "programminglanguage"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "JavaScript \u3067\u8A18\u8FF0\u3055\u308C\u305F\u72EC\u81EA\u306E\u30AB\u30B9\u30BF\u30E0 \u30B3\u30FC\u30C9\u3092\u5B9F\u884C\u3057\u307E\u3057\u3087\u3046\u3002", id: "gui.extension.javascript.description" }), featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Arrays", id: "gui.extension.arrays.name" }), extensionId: "jwArray", iconURL: _penguinmod_extensions_jwArray_svg__WEBPACK_IMPORTED_MODULE_57___default.a, tags: ["penguinmod", "datamgmt"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u591A\u76EE\u7684\u914D\u5217\u306B\u30C7\u30FC\u30BF\u3092\u52B9\u7387\u7684\u306B\u4FDD\u5B58\u3057\u307E\u3059\u3002", id: "gui.extension.arrays.description" }), extDeveloper: "jwklong", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Targets", id: "gui.extension.targets.name" }), extensionId: "jwTargets", iconURL: _penguinmod_extensions_jwTargets_svg__WEBPACK_IMPORTED_MODULE_58___default.a, tags: ["penguinmod"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30B9\u30D7\u30E9\u30A4\u30C8\u3068\u305D\u306E\u30AF\u30ED\u30FC\u30F3\u3078\u306E\u76F4\u63A5\u30A2\u30AF\u30BB\u30B9\u3002", id: "gui.extension.targets.description" }), extDeveloper: "jwklong", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Infinity", id: "gui.extension.infinity.name" }), extensionId: "jwNum", iconURL: _penguinmod_extensions_jwNum_svg__WEBPACK_IMPORTED_MODULE_59___default.a, tags: ["penguinmod", "math"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u975E\u5E38\u306B\u5927\u304D\u306A\u6570\u5024\u3092\u6271\u3048\u308B\u9AD8\u5EA6\u306A\u6570\u5024\u30BF\u30A4\u30D7\u3067\u3059\u3002", id: "gui.extension.infinity.description" }), extDeveloper: "jwklong", credits: "Naruyoko for ExpantaNum.js", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Color", id: "gui.extension.color.name" }), extensionId: "jwColor", iconURL: _penguinmod_extensions_jwColor_svg__WEBPACK_IMPORTED_MODULE_60___default.a, tags: ["penguinmod", "graphics"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u8272\u306B\u95A2\u308F\u308B\u3042\u3089\u3086\u308B\u3082\u306E\u306E\u305F\u3081\u306E\u30E6\u30FC\u30C6\u30A3\u30EA\u30C6\u30A3\u3002", id: "gui.extension.color.description" }), extDeveloper: "jwklong", featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "micro:bit", id: "gui.extension.microbit.name" }), extensionId: "microbit", collaborator: "micro:bit", iconURL: _microbit_microbit_png__WEBPACK_IMPORTED_MODULE_22___default.a, insetIconURL: _microbit_microbit_small_svg__WEBPACK_IMPORTED_MODULE_23___default.a, tags: ["scratch", "hardware"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Connect your projects with the world.", id: "gui.extension.microbit.description" }), featured: true, disabled: false, bluetoothRequired: true, internetConnectionRequired: true, launchPeripheralConnectionFlow: true, useAutoScan: false, connectionIconURL: _microbit_microbit_illustration_svg__WEBPACK_IMPORTED_MODULE_24___default.a, connectionSmallIconURL: _microbit_microbit_small_svg__WEBPACK_IMPORTED_MODULE_23___default.a, connectingMessage: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Connecting", id: "gui.extension.microbit.connectingMessage" }), helpLink: "https://scratch.mit.edu/microbit" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "LEGO MINDSTORMS EV3", id: "gui.extension.legomindstormsev3.name" }), extensionId: "ev3", collaborator: "LEGO", iconURL: _ev3_ev3_png__WEBPACK_IMPORTED_MODULE_25___default.a, insetIconURL: _ev3_ev3_small_svg__WEBPACK_IMPORTED_MODULE_26___default.a, tags: ["scratch", "hardware"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Build interactive robots and more.", id: "gui.extension.legomindstormsev3.description" }), featured: true, disabled: false, bluetoothRequired: true, internetConnectionRequired: true, launchPeripheralConnectionFlow: true, useAutoScan: false, connectionIconURL: _ev3_ev3_hub_illustration_svg__WEBPACK_IMPORTED_MODULE_27___default.a, connectionSmallIconURL: _ev3_ev3_small_svg__WEBPACK_IMPORTED_MODULE_26___default.a, customInsetColor: "#FFBF00", connectingMessage: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Connecting. Make sure the pin on your EV3 is set to 1234.", id: "gui.extension.legomindstormsev3.connectingMessage" }), helpLink: "https://scratch.mit.edu/ev3" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "LEGO BOOST", id: "gui.extension.legoboost.name" }), extensionId: "boost", collaborator: "LEGO", iconURL: _boost_boost_png__WEBPACK_IMPORTED_MODULE_32___default.a, insetIconURL: _boost_boost_small_svg__WEBPACK_IMPORTED_MODULE_33___default.a, tags: ["scratch", "hardware"], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30ED\u30DC\u30C3\u30C8\u4F5C\u54C1\u306B\u547D\u3092\u5439\u304D\u8FBC\u307F\u307E\u3059\u3002", id: "gui.extension.legoboost.description" }), featured: true, disabled: false, bluetoothRequired: true, internetConnectionRequired: true, launchPeripheralConnectionFlow: true, useAutoScan: true, connectionIconURL: _boost_boost_illustration_svg__WEBPACK_IMPORTED_MODULE_34___default.a, connectionSmallIconURL: _boost_boost_small_svg__WEBPACK_IMPORTED_MODULE_33___default.a, connectionTipIconURL: _boost_boost_button_illustration_svg__WEBPACK_IMPORTED_MODULE_35___default.a, customInsetColor: "#FFAB19", connectingMessage: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Connecting", id: "gui.extension.legoboost.connectingMessage" }), helpLink: "https://scratch.mit.edu/boost" }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "LEGO Education WeDo 2.0", id: "gui.extension.legowedo2.name" }), extensionId: "wedo2", collaborator: "LEGO", iconURL: _wedo2_wedo_png__WEBPACK_IMPORTED_MODULE_28___default.a, insetIconURL: _wedo2_wedo_small_svg__WEBPACK_IMPORTED_MODULE_29___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30E2\u30FC\u30BF\u30FC\u3068\u30BB\u30F3\u30B5\u30FC\u3092\u4F7F\u3063\u3066\u7D44\u307F\u7ACB\u3066\u307E\u3059\u3002", id: "gui.extension.legowedo2.description" }), featured: true, disabled: false, tags: ['scratch', 'hardware'], bluetoothRequired: true, internetConnectionRequired: true, launchPeripheralConnectionFlow: true, useAutoScan: true, connectionIconURL: _wedo2_wedo_illustration_svg__WEBPACK_IMPORTED_MODULE_30___default.a, connectionSmallIconURL: _wedo2_wedo_small_svg__WEBPACK_IMPORTED_MODULE_29___default.a, connectionTipIconURL: _wedo2_wedo_button_illustration_svg__WEBPACK_IMPORTED_MODULE_31___default.a, customInsetColor: '#FF6680', connectingMessage: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Connecting", id: "gui.extension.wedo2.connectingMessage" }), helpLink: 'https://scratch.mit.edu/wedo' }, { name: 'Go Direct Force & Acceleration', extensionId: 'gdxfor', collaborator: 'Vernier', iconURL: _gdxfor_gdxfor_png__WEBPACK_IMPORTED_MODULE_36___default.a, insetIconURL: _gdxfor_gdxfor_small_svg__WEBPACK_IMPORTED_MODULE_37___default.a, customInsetColor: '#4C97FF', tags: ['scratch', 'hardware'], description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u62BC\u3059\u3001\u5F15\u304F\u3001\u52D5\u304F\u3001\u56DE\u8EE2\u3059\u308B\u3068\u3044\u3063\u305F\u52D5\u4F5C\u3092\u611F\u77E5\u3057\u307E\u3059\u3002", id: "gui.extension.gdxfor.description" }), featured: true, disabled: false, bluetoothRequired: true, internetConnectionRequired: true, launchPeripheralConnectionFlow: true, useAutoScan: false, connectionIconURL: _gdxfor_gdxfor_illustration_svg__WEBPACK_IMPORTED_MODULE_38___default.a, connectionSmallIconURL: _gdxfor_gdxfor_small_svg__WEBPACK_IMPORTED_MODULE_37___default.a, connectingMessage: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Connecting", id: "gui.extension.gdxfor.connectingMessage" }), helpLink: 'https://scratch.mit.edu/vernier' }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30DA\u30F3\u30AE\u30F3\u30E2\u30C3\u30C9\u306E\u62E1\u5F35\u6A5F\u80FD", id: "pm.extraLibraryExtensions.name" }), href: 'https://extensions.penguinmod.com/', extensionId: 'special_penguinmodExtensionLibrary', iconURL: _penguinmod_library_svg__WEBPACK_IMPORTED_MODULE_43___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Penguinmod\u30E6\u30FC\u30B6\u30FC\u304C\u6295\u7A3F\u3057\u305F\u62E1\u5F35\u6A5F\u80FD\u3092\u3044\u304F\u3064\u304B\u3054\u89A7\u304F\u3060\u3055\u3044\u3002\u65B0\u3057\u3044\u30BF\u30D6\u3067\u958B\u304D\u307E\u3059\u3002", id: "pm.extraLibraryExtensions.description" }), tags: ['penguinmod', 'library'], featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "TurboWarp Extension Gallery", id: "tw.extensionGallery.name", values: { APP_NAME: "TurboWarp" } }), href: 'https://extensions.turbowarp.org/', extensionId: 'special_turbowarpExtensionLibrary', iconURL: _gallery_gallery_svg__WEBPACK_IMPORTED_MODULE_40___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "\u3053\u3053\u3067\u306F\u591A\u304F\u306E TurboWarp \u62E1\u5F35\u6A5F\u80FD\u3092\u30EA\u30B9\u30C8\u3057\u3066\u3044\u307E\u3059\u304C\u3001extensions.turbowarp.org \u3067\u3055\u3089\u306B\u591A\u304F\u306E\u62E1\u5F35\u6A5F\u80FD\u3092\u898B\u3064\u3051\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002", id: "tw.extensionGallery.description" }), tags: ['tw', 'turbowarp', 'library'], featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: 'SharkPool\'s Extension Collection', id: "gui.extension.sharkpoolExt.name" }), href: "https://soiz1-sharkpool-extensions.hf.space?originPM=true", extensionId: "special_sharkpoolExtensionLibrary", iconURL: _penguinmod_sharkpool_library_svg__WEBPACK_IMPORTED_MODULE_44___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "SharkPool によって作成された多数の拡張機能。\nこのメニューが開いているときに拡張機能をクリックすると、プロジェクトに追加されます。CORS制限のため、別のホストですが機能は同じで自動更新されます。", id: "gui.extension.sharkpoolextensioncollection.description" }), credits: "Listed in the site", tags: ["library"], featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "ExtForge", id: "gui.extension.extforge.name" }), href: "https://jwklong.github.io/extforge", extensionId: "special_extforge", iconURL: _penguinmod_extforge_svg__WEBPACK_IMPORTED_MODULE_45___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30D6\u30ED\u30C3\u30AF\u30D9\u30FC\u30B9\u306EUI\u3092\u4F7F\u7528\u3057\u3066\u62E1\u5F35\u6A5F\u80FD\u3092\u4F5C\u6210\u3057\u307E\u3059\u3002", id: "gui.extension.extforge.description" }), extDeveloper: "jwklong", isNew: true, tags: ["extcreate"], featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Custom Extension", id: "gui.extension.customextension.name" }), extensionId: "", iconURL: _custom_custom_svg__WEBPACK_IMPORTED_MODULE_41___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u597D\u304D\u306A\u62E1\u5F35\u6A5F\u80FD\u3092\u8AAD\u307F\u8FBC\u3080\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002", id: "gui.extension.customextension.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: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "HTML Canvas", id: "canvas.name" }), extensionId: 'newCanvas', iconURL: _penguinmod_extensions_CanvasExtensionMenu_png__WEBPACK_IMPORTED_MODULE_65___default.a, tags: ['penguinmod'], insetIconURL: _penguinmod_extensions_CanvasSmall_png__WEBPACK_IMPORTED_MODULE_66___default.a, customInsetColor: '#0094FF', description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "HTML \u30AD\u30E3\u30F3\u30D0\u30B9\u3092\u4F7F\u7528\u3057\u305F\u8FFD\u52A0\u306E\u63CF\u753B\u30C4\u30FC\u30EB\u3002\u4ED6\u306E\u62E1\u5F35\u6A5F\u80FD\u3068\u4F75\u7528\u3059\u308B\u3068\u52B9\u679C\u7684\u3067\u3059\u3002", id: "text.description" }), featured: true }, { name: 'OLD Canvas', extensionId: 'canvas', iconURL: _penguinmod_extensions_CanvasExtensionMenu_png__WEBPACK_IMPORTED_MODULE_65___default.a, tags: ['penguinmod'], insetIconURL: _penguinmod_extensions_CanvasSmall_png__WEBPACK_IMPORTED_MODULE_66___default.a, customInsetColor: '#0094FF', description: 'HTML Canvas の非推奨バージョン。', featured: true }, { name: 'Legacy Files', extensionId: 'jgFiles', iconURL: _penguinmod_extensions_placeholder_png__WEBPACK_IMPORTED_MODULE_116___default.a, tags: ['penguinmod', 'datamgmt'], description: 'ファイルの基本ブロック。これはTurboWarpファイル拡張子に置き換えられました。', featured: true }, { name: 'Clone Communication', extensionId: 'jgClones', iconURL: _penguinmod_extensions_clonemanager_png__WEBPACK_IMPORTED_MODULE_81___default.a, tags: ['penguinmod'], description: 'クローンとメインスプライト間のデータ共有が主な機能ですが、他にもいくつかの小さな機能があります。この機能はTurboWarp Clones+拡張機能に置き換えられました。', featured: true }, { name: 'Easy Save', extensionId: 'jgEasySave', iconURL: _penguinmod_extensions_placeholder_png__WEBPACK_IMPORTED_MODULE_116___default.a, tags: ['penguinmod', 'datamgmt'], description: '変数、リスト、および追加情報をファイルに保存し、それらを再度読み込みます。', featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "TurboWarp Blocks", id: "tw.twExtension.name", values: { APP_NAME: "TurboWarp" } }), extensionId: 'tw', twDeveloper: 'GarboMuffin', tags: ['turbowarp'], insetIconURL: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, iconURL: _tw_tw_svg__WEBPACK_IMPORTED_MODULE_39___default.a, description: '奇妙な新しいブロック。感知拡張に置き換えられました。', featured: true }, { name: 'the doo doo extension', extensionId: 'jgDooDoo', iconURL: _penguinmod_extensions_placeholder_png__WEBPACK_IMPORTED_MODULE_116___default.a, 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: _penguinmod_extensions_turbowarp_icon_svg__WEBPACK_IMPORTED_MODULE_42___default.a, 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: _penguinmod_extensions_Unite_png__WEBPACK_IMPORTED_MODULE_54___default.a, tags: ['penguinmod'], description: '最終的にデフォルトのツールボックスに統合されたレガシー拡張機能。', featured: true }, { name: 'XML', extensionId: 'jwXml', iconURL: _penguinmod_extensions_xml_png__WEBPACK_IMPORTED_MODULE_55___default.a, tags: ['penguinmod', 'datamgmt'], description: 'XMLデータの作成と取得を可能にします。データの変更はまだできません。', extDeveloper: 'jwklong', featured: true }, { name: 'Debugging', extensionId: 'jgDebugging', iconURL: _penguinmod_extensions_debugging_svg__WEBPACK_IMPORTED_MODULE_9___default.a, tags: ['penguinmod'], description: '情報をログに記録し、コマンドを実行します。パッケージ化されたプロジェクトのデバッグや、ちょっとした変更に最適です。', featured: true }, { name: 'Test Extension Loader', href: 'https://studio.penguinmod.com/loadExt.html', extensionId: 'special_testExtensionLibrary', iconURL: _penguinmod_extensions_placeholder_png__WEBPACK_IMPORTED_MODULE_116___default.a, description: 'ライブラリから拡張機能を読み込むテスト。開発者向け。', featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "OOP", id: "jwStructs.jwStructsExtension.name" }), extensionId: 'jwStructs', tags: ['penguinmod'], iconURL: _penguinmod_extensions_ooplogo_png__WEBPACK_IMPORTED_MODULE_56___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "\u30EA\u30B9\u30C8\u304B\u3089\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002OOP \u30D6\u30ED\u30C3\u30AF\u3002OOp \u306F\u3001\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3068\u305D\u306E\u76F8\u4E92\u4F5C\u7528\u3092\u4F7F\u7528\u3057\u3066\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3084\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF \u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u8A2D\u8A08\u3059\u308B\u30D7\u30ED\u30B0\u30E9\u30DF\u30F3\u30B0\u30D1\u30E9\u30C0\u30A4\u30E0\u3067\u3059\u3002", id: "jwStructs.jwStructsExtension.description" }), featured: true }, { name: 'PenguinMod Permissions', extensionId: 'JgPermissionBlocks', iconURL: _penguinmod_extensions_permissions_png__WEBPACK_IMPORTED_MODULE_79___default.a, tags: ['penguinmod'], description: 'レガシー拡張機能。古いブロックはもはや本来の用途を果たせません。PenguinModが特定のタスクを実行する際に要求する権限を管理するための直接ブロックです。', featured: true }, { name: 'Jeremys Dev Tools', extensionId: 'jgDev', iconURL: _penguinmod_extensions_placeholder_png__WEBPACK_IMPORTED_MODULE_116___default.a, tags: ['penguinmod'], description: '拡張機能をテストして、可能かどうかを確認します。\nブロックは変更される可能性があり、プロジェクトが破損する可能性があるため、本番環境では使用しないでください。', credits: 'Some features added from LilyMakesThings, CubesterYT, TheShovel', featured: true }, { name: '3D', extensionId: 'jg3d', iconURL: _penguinmod_extensions_3d_png__WEBPACK_IMPORTED_MODULE_87___default.a, tags: ['penguinmod', '3d'], customInsetColor: '#B200FF', insetIconURL: _penguinmod_extensions_3dicon_png__WEBPACK_IMPORTED_MODULE_88___default.a, description: '3D の魔法を使ってプロジェクトに彩りを添えましょう。', featured: true }, { name: '3D Physics', extensionId: 'fr3d', iconURL: _penguinmod_extensions_3d_physics_png__WEBPACK_IMPORTED_MODULE_91___default.a, tags: ['penguinmod', '3d'], customInsetColor: '#D066FE', insetIconURL: _penguinmod_extensions_3d_physics_icon_sized_png__WEBPACK_IMPORTED_MODULE_92___default.a, description: '3D 拡張のための物理。', featured: true }, { name: '3D Virtual Reality', extensionId: 'jg3dVr', iconURL: _penguinmod_extensions_3dVr_png__WEBPACK_IMPORTED_MODULE_89___default.a, tags: ['penguinmod', 'hardware', '3d'], customInsetColor: '#B200FF', insetIconURL: _penguinmod_extensions_3dVr_Inset_png__WEBPACK_IMPORTED_MODULE_90___default.a, description: '開発中。互換性が損なわれる可能性があります。プレイヤーがあなたの世界に飛び込めるようにしましょう!', featured: true, extensionWarningOnImport: true }, { name: 'Interfaces', extensionId: 'jgInterfaces', iconURL: _penguinmod_extensions_interfaces2_png__WEBPACK_IMPORTED_MODULE_86___default.a, credits: 'silvxrcat', tags: ['penguinmod'], description: '開発中', featured: true }, { name: 'Packager Applications', extensionId: 'jgPackagerApplications', iconURL: _penguinmod_extensions_packagedApplications_png__WEBPACK_IMPORTED_MODULE_83___default.a, insetIconURL: _penguinmod_extensions_packagedApplications_inset_png__WEBPACK_IMPORTED_MODULE_84___default.a, twDeveloper: 'CubesterYT', customInsetColor: '#66B8FF', tags: ['penguinmod', 'packager'], description: '開発中。Web サイトでできないことをパッケージ アプリケーションで実現できます。', featured: true }, { name: 'Inline Blocks', extensionId: 'pmInlineBlocks', iconURL: _penguinmod_extensions_inlineblocks_png__WEBPACK_IMPORTED_MODULE_82___default.a, tags: ['penguinmod'], description: '簡単なタスク用のクイックブロックを作成します。任意の円形の場所に挿入して、任意の値を返すように設定できます。', featured: true }, { name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "Pathfinding", id: "jgPathfinding.Pathfinding.name" }), extensionId: 'jgPathfinding', tags: ['penguinmod'], iconURL: _penguinmod_extensions_pathfinding_png__WEBPACK_IMPORTED_MODULE_109___default.a, description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { defaultMessage: "(\u4E0D\u5B89\u5B9A\u307E\u305F\u306F\u9045\u5EF6\u3042\u308A\u3002\u3055\u3089\u306A\u308B\u4F5C\u696D\u304C\u5FC5\u8981\u3067\u3059) \u30B9\u30D7\u30E9\u30A4\u30C8\u304C\u30B2\u30FC\u30E0\u5185\u306E\u969C\u5BB3\u7269\u306B\u30AF\u30EA\u30C3\u30D7\u3059\u308B\u306E\u3067\u306F\u306A\u304F\u3001\u969C\u5BB3\u7269\u3092\u56DE\u907F\u3067\u304D\u308B\u3088\u3046\u306B\u3057\u307E\u3059\u3002", id: "jgPathfinding.Pathfinding.description" }), featured: true }, { name: 'Animation', extensionId: 'jgAnimation', iconURL: _penguinmod_extensions_animation_png__WEBPACK_IMPORTED_MODULE_110___default.a, tags: ['penguinmod'], description: '開発中。現在バグがあり、機能が不足しています。', featured: true }, { name: 'Virtual Reality', extensionId: 'jgVr', iconURL: _penguinmod_extensions_vr_extension_png__WEBPACK_IMPORTED_MODULE_93___default.a, 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; /* harmony default export */ __webpack_exports__["default"] = (filteredMenuItems); /***/ }), /***/ "./src/lib/libraries/extensions/izum00/posenet4scratch/icon.png": /*!**********************************************************************!*\ !*** ./src/lib/libraries/extensions/izum00/posenet4scratch/icon.png ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/02470ceceed9235b943e6b5a9edc8efb.png"; /***/ }), /***/ "./src/lib/libraries/extensions/izum00/posenet4scratch/thumb.png": /*!***********************************************************************!*\ !*** ./src/lib/libraries/extensions/izum00/posenet4scratch/thumb.png ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/cc4d68fe9d6a77c7f35f9d5461b60967.png"; /***/ }), /***/ "./src/lib/libraries/extensions/makeymakey/makeymakey-small.svg": /*!**********************************************************************!*\ !*** ./src/lib/libraries/extensions/makeymakey/makeymakey-small.svg ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/d61429ad96a25ec2917ebc77d900aae0.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/makeymakey/makeymakey.png": /*!****************************************************************!*\ !*** ./src/lib/libraries/extensions/makeymakey/makeymakey.png ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/c30d6a0e73cf38ad6ea7f5e4fe0428a3.png"; /***/ }), /***/ "./src/lib/libraries/extensions/microbit/microbit-illustration.svg": /*!*************************************************************************!*\ !*** ./src/lib/libraries/extensions/microbit/microbit-illustration.svg ***! \*************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/84a9455c54ab68ad8dcf8b6f6465ae71.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/microbit/microbit-small.svg": /*!******************************************************************!*\ !*** ./src/lib/libraries/extensions/microbit/microbit-small.svg ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/6be143c7cb9d23c787f7f20674a76f72.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/microbit/microbit.png": /*!************************************************************!*\ !*** ./src/lib/libraries/extensions/microbit/microbit.png ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/4b6ca5259f1271d510f081867e746847.png"; /***/ }), /***/ "./src/lib/libraries/extensions/music/music-small.svg": /*!************************************************************!*\ !*** ./src/lib/libraries/extensions/music/music-small.svg ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/504d73be1b361b4b9ca7f655ce085dc6.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/music/music.png": /*!******************************************************!*\ !*** ./src/lib/libraries/extensions/music/music.png ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7eea42371f5ccb84b4fc7d0ba7331ea3.png"; /***/ }), /***/ "./src/lib/libraries/extensions/p5-noise/48d03d1d2794e30b221465fc07da79f7.png": /*!************************************************************************************!*\ !*** ./src/lib/libraries/extensions/p5-noise/48d03d1d2794e30b221465fc07da79f7.png ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/48d03d1d2794e30b221465fc07da79f7.png"; /***/ }), /***/ "./src/lib/libraries/extensions/p5-noise/icon.svg": /*!********************************************************!*\ !*** ./src/lib/libraries/extensions/p5-noise/icon.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/4ec70230d5b7f1ab12560b4619f2dbf9.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/pen/pen-small.svg": /*!********************************************************!*\ !*** ./src/lib/libraries/extensions/pen/pen-small.svg ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/800f6f1573677d59954e8d3164602287.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/pen/pen.png": /*!**************************************************!*\ !*** ./src/lib/libraries/extensions/pen/pen.png ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7679e8aa3b5a6b745823e00a7b950065.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/3d.png": /*!*******************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/3d.png ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/c79988bb17fdba37fe2d1ee3eacf9f5f.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/3dVr.png": /*!*********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/3dVr.png ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/ae1b9be9ac5a0793b990a0ba5231c662.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/3dVr_Inset.png": /*!***************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/3dVr_Inset.png ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/98cd4769145ea580a7d6fef9fdb62aab.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/3d_physics.png": /*!***************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/3d_physics.png ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/10299cfdb7aae4ef46933f78b4366d6f.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/3d_physics_icon_sized.png": /*!**************************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/3d_physics_icon_sized.png ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/a51b949b03d40faa62ef202a787f76ec.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/3dicon.png": /*!***********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/3dicon.png ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/ccf5cd43b7f5661f8141f879e4a015bb.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/BetterComments.svg": /*!*******************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/BetterComments.svg ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/a77d7ed07c4715b2b580438d46a567b9.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/CanvasExtensionMenu.png": /*!************************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/CanvasExtensionMenu.png ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/9ecfc22bb2fae434d72acfa182df6927.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/CanvasSmall.png": /*!****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/CanvasSmall.png ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/3adc1e3e705ec30e961125d7c136db09.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/Unite.png": /*!**********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/Unite.png ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/195b65444703293e0624ff4e09c13c81.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/advancedtext.png": /*!*****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/advancedtext.png ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/c8215bcfbb4dc9000bb0da3947cdb523.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/animation.png": /*!**************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/animation.png ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/c304e6cc2ad622167b6ef46e30cc9423.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/canvas_effects.svg": /*!*******************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/canvas_effects.svg ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/bb0b18c664cbbb05be54c26055908e95.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/clippingblending.svg": /*!*********************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/clippingblending.svg ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/cd2fa6465953012247b14e89f4931cf9.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/clonemanager.png": /*!*****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/clonemanager.png ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/89b0a98b82e2fcad7e4563b348a1caf7.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/cloudlinkIcon.svg": /*!******************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/cloudlinkIcon.svg ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/930323f74179aa022fd87939b3b2999c.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/colorutil.png": /*!**************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/colorutil.png ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/6a8cb419123dfa9fe427b191f7b561ad.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/controls_expanded.png": /*!**********************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/controls_expanded.png ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/81503641d782aa3a3f88df14b58bc3e6.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/cursor.svg": /*!***********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/cursor.svg ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/9c2e381fb6da323e4ab7948c353a629b.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/debugging.svg": /*!**************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/debugging.svg ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/36b59d3087103cc7573145332ec64745.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/events_expanded.png": /*!********************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/events_expanded.png ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f33541f52553e00993de696ed1233229.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/extendedaudio.png": /*!******************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/extendedaudio.png ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/c51f86f9bcf8f37fc49331cbb5630c94.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/files.svg": /*!**********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/files.svg ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/6395fd31325176c1d0779dc0ff139c72.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/gamepad.svg": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/gamepad.svg ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/0a0eb1af384d2f241aab5631440b2a33.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/griffpatch_physics.png": /*!***********************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/griffpatch_physics.png ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f87904843f21a05464c4acc3ec4d368d.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/griffpatch_physicsIcon.svg": /*!***************************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/griffpatch_physicsIcon.svg ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7cde88cd98adaaf1e911f68bacdbe719.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/iframe.png": /*!***********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/iframe.png ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/9e32994e371028645656c0bce61be484.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/inlineblocks.png": /*!*****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/inlineblocks.png ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/30369b87eed36dd399a127ae7c0ea1a4.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/interfaces2.png": /*!****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/interfaces2.png ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/51adf4a45cbacf743c3ee538e432fed2.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/javascript.png": /*!***************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/javascript.png ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/dc97849515ceed1012a3b89210a950fa.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/json.png": /*!*********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/json.png ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/3a9f7312dd51198c123804f87fa78bc9.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/jwArray.svg": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/jwArray.svg ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/21a46a49b55befa73d6b8352e2795d6f.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/jwColor.svg": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/jwColor.svg ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/88ab038784badd192df6bd931d7c2e40.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/jwNum.svg": /*!**********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/jwNum.svg ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/03562df738acb5b29670d58970eb432f.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/jwTargets.svg": /*!**************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/jwTargets.svg ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/174cbb7cc72418e5f095e0b734ceed1d.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/jwVector.svg": /*!*************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/jwVector.svg ***! \*************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/3b0c388c2cf1462401585224ffe2f077.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/looksExpanded.svg": /*!******************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/looksExpanded.svg ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/84ad46536cb4de7a9e82347461b375a1.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/motion_expanded.png": /*!********************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/motion_expanded.png ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f1207802424428612503584b5258902c.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/multipletimers.png": /*!*******************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/multipletimers.png ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f6c7e603df1d93a09e434cd34256361b.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/myBlocksPlus.svg": /*!*****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/myBlocksPlus.svg ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/fb7214f085f0444816f6d8a8b623b89e.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/oddmessages.svg": /*!****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/oddmessages.svg ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/64faeccd0a42a3548ec41b7471ff5ef6.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/ooplogo.png": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/ooplogo.png ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/c296552f9440b25b8225da38a14d9488.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/operators_expanded.png": /*!***********************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/operators_expanded.png ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/5f09200519a8b4130cf1b09a35c01a10.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/packagedApplications.png": /*!*************************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/packagedApplications.png ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f3d2cc01ffb4aaea4b4e3b50e35fdf73.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/packagedApplications_inset.png": /*!*******************************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/packagedApplications_inset.png ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/b14d70e45d588be5106be4ee696dfa3f.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/particleEngine.svg": /*!*******************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/particleEngine.svg ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/bd055c3853854218f060871e694b16f7.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/pathfinding.png": /*!****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/pathfinding.png ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/1e391038e9bc3c5bcadf50902980089d.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/perlinnoisebanner.png": /*!**********************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/perlinnoisebanner.png ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/39f37f1b00fbf96926276701d8de4c89.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/permissions.png": /*!****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/permissions.png ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/01fc0da0b4f9dfcf62ee83e1505e14f2.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/placeholder.png": /*!****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/placeholder.png ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/208f28114c3654417aae9f71542d1670.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/pmcamera_thumbnail.png": /*!***********************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/pmcamera_thumbnail.png ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/6b8350e1c4fcb14dddb1c4bac60690fc.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/pointerlock.png": /*!****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/pointerlock.png ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/dd70a6d9adb5f52d0cbd0115887691eb.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/printing.svg": /*!*************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/printing.svg ***! \*************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/1a086f192347214d507e8373d05481bd.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/prism.png": /*!**********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/prism.png ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/55fbbef2dfcc37fb22658e968cda0a67.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/proto.svg": /*!**********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/proto.svg ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/51e22c71c1668188b5a3ddd9dc391ff6.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/runtime.svg": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/runtime.svg ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/4b52903ed5677ad3e0b820668ddb37c9.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/scratchauth2.svg": /*!*****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/scratchauth2.svg ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f2b55dc8ec1ae9e4a5c72088a185dad2.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/scripts.svg": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/scripts.svg ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/e8cd6294973f94c475ed746e4899fa33.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/sensing_expanded.png": /*!*********************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/sensing_expanded.png ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/414ef5f96bd00df3c7b4e175244ddaf3.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/sp_json.svg": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/sp_json.svg ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/e48e8bc4ca2913e19da20f085e9adbe9.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/storage.png": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/storage.png ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/a8c1fa685a05ebc7d9ced4a1fabce2ec.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/tailgating.png": /*!***************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/tailgating.png ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/ff2dc3c9ffca9e8097e82e3ff64b5955.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/tempvariables.svg": /*!******************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/tempvariables.svg ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/ac1b57b4a9b09160349eb2d7882ca15f.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/text extension small.svg": /*!*************************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/text extension small.svg ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7b7fd92f837f3b1368bb7cd709b24ebd.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/text extension.png": /*!*******************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/text extension.png ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/57f5c040b2ec7c6f269042b4e1c32a03.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/tuneShark.svg": /*!**************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/tuneShark.svg ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/ad2841e0f0228e47e911a5b571480f7c.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/turbowarp_icon.svg": /*!*******************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/turbowarp_icon.svg ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/bf2e5bd090012d68560b888d44678efc.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/vr_extension.png": /*!*****************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/vr_extension.png ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7455bbbfec01551f145bced3f729f105.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extensions/xml.png": /*!********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extensions/xml.png ***! \********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/73077ae1577fa8af2e8544e19e447491.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/extforge.svg": /*!**************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/extforge.svg ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/49a8736bf7fbb79e2469272f127e06d3.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/library.svg": /*!*************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/library.svg ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7a4510ab192e5a0bd0b1186db1396bce.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/orgtw/ColorPicker.svg": /*!***********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/orgtw/ColorPicker.svg ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/2be1a9bef13cda38a249cfa6de0dc461.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/orgtw/CustomStyles.svg": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/orgtw/CustomStyles.svg ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/13fca624022cc8f762e1da20450c8f03.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/orgtw/TempVariables2.svg": /*!**************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/orgtw/TempVariables2.svg ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/cf21e9b36c0dfd5debc399d6fbf5d2c9.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/orgtw/lz-compress2.svg": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/orgtw/lz-compress2.svg ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/306abcf3a285c1d279e1fed22bd74a5c.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/sharkpool-library.svg": /*!***********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/sharkpool-library.svg ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/93259f95026260bc06f83d29d3b89115.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/turbobuilder-dev.png": /*!**********************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/turbobuilder-dev.png ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/78d464ee4e15000ce44b841ff2f4c518.png"; /***/ }), /***/ "./src/lib/libraries/extensions/penguinmod/turbobuilder.png": /*!******************************************************************!*\ !*** ./src/lib/libraries/extensions/penguinmod/turbobuilder.png ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/3fc5bb5bf0381947df17be6225e1cb26.png"; /***/ }), /***/ "./src/lib/libraries/extensions/text2speech/text2speech-small.svg": /*!************************************************************************!*\ !*** ./src/lib/libraries/extensions/text2speech/text2speech-small.svg ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/c7ffd288176b935f835311512a224d4b.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/text2speech/text2speech.png": /*!******************************************************************!*\ !*** ./src/lib/libraries/extensions/text2speech/text2speech.png ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/d6f130fb79e78e4dd351fd930e742bcc.png"; /***/ }), /***/ "./src/lib/libraries/extensions/translate/translate-small.png": /*!********************************************************************!*\ !*** ./src/lib/libraries/extensions/translate/translate-small.png ***! \********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f40501ed87782097b1a4eec8747eb84a.png"; /***/ }), /***/ "./src/lib/libraries/extensions/translate/translate.png": /*!**************************************************************!*\ !*** ./src/lib/libraries/extensions/translate/translate.png ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/b6162ffbfe48d4b6c67f0b469f1615ae.png"; /***/ }), /***/ "./src/lib/libraries/extensions/tw/tw.svg": /*!************************************************!*\ !*** ./src/lib/libraries/extensions/tw/tw.svg ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/8631e81b32644527d0d056b213faddc8.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/videoSensing/video-sensing-small.svg": /*!***************************************************************************!*\ !*** ./src/lib/libraries/extensions/videoSensing/video-sensing-small.svg ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/5e8eccd5a576638f029a1ed2deb4784b.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/videoSensing/video-sensing.png": /*!*********************************************************************!*\ !*** ./src/lib/libraries/extensions/videoSensing/video-sensing.png ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/a03436c2c26c934fc0a7997065971874.png"; /***/ }), /***/ "./src/lib/libraries/extensions/wedo2/wedo-button-illustration.svg": /*!*************************************************************************!*\ !*** ./src/lib/libraries/extensions/wedo2/wedo-button-illustration.svg ***! \*************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/7130491bf33852e50503dcb4024c0279.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/wedo2/wedo-illustration.svg": /*!******************************************************************!*\ !*** ./src/lib/libraries/extensions/wedo2/wedo-illustration.svg ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/5f7a79af3db62e0f5b7306ac0bd5ebf9.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/wedo2/wedo-small.svg": /*!***********************************************************!*\ !*** ./src/lib/libraries/extensions/wedo2/wedo-small.svg ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/0f9efe3bd6e80747dfa3aeb9e19997b5.svg"; /***/ }), /***/ "./src/lib/libraries/extensions/wedo2/wedo.png": /*!*****************************************************!*\ !*** ./src/lib/libraries/extensions/wedo2/wedo.png ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/f011f09e649e804c4c0c8275a7d1ba5b.png"; /***/ }), /***/ "./src/lib/libraries/sound-tags.js": /*!*****************************************!*\ !*** ./src/lib/libraries/sound-tags.js ***! \*****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tag-messages.js */ "./src/lib/libraries/tag-messages.js"); /* harmony default export */ __webpack_exports__["default"] = ([{ tag: 'penguinmod', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].penguinmod }, { type: 'divider' }, { type: 'subtitle', intlLabel: "Types" }, { tag: 'themes', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].themes }, { tag: 'loops', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].loops }, { tag: 'effects', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].effects }, { type: 'divider' }, { type: 'subtitle', intlLabel: "General" }, { tag: 'animals', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].animals }, { tag: 'monster', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].monsters }, { tag: 'notes', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].notes }, { tag: 'percussion', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].percussion }, { tag: 'voice', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].voice }, { tag: 'wacky', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].wacky }, { tag: 'ui', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].ui }, { type: 'divider' }, { type: 'subtitle', intlLabel: "Objects" }, { tag: 'footsteps', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].footsteps }, { tag: 'space', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].space }, { tag: 'sports', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].sports }, { tag: 'swords', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].swords }, { tag: 'guns', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].guns }, { type: 'divider' }, { type: 'subtitle', intlLabel: "Materials" }, { tag: 'metal', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].metal }]); /***/ }), /***/ "./src/lib/libraries/sounds-lengths.json": /*!***********************************************!*\ !*** ./src/lib/libraries/sounds-lengths.json ***! \***********************************************/ /*! exports provided: penguinmod, scratch, default */ /***/ (function(module) { module.exports = JSON.parse("{\"penguinmod\":{\"sounds/woosh.mp3\":470,\"sounds/win3.mp3\":3420,\"sounds/win2.mp3\":2270,\"sounds/water_submerge.mp3\":2220,\"sounds/upbeat_n_uphill.mp3\":21410,\"sounds/techno4.mp3\":16040,\"sounds/techno3.mp3\":16030,\"sounds/tear.mp3\":630,\"sounds/sword_unleash5.mp3\":760,\"sounds/sword_unleash4.mp3\":550,\"sounds/sword_unleash3.mp3\":1150,\"sounds/sword_unleash2.mp3\":650,\"sounds/sword_unleash1.mp3\":570,\"sounds/sword_swing2.mp3\":1910,\"sounds/sword_swing1.mp3\":890,\"sounds/sword_slice2.mp3\":420,\"sounds/sword_slice1.mp3\":1100,\"sounds/sword_clink3.mp3\":470,\"sounds/sword_clink2.mp3\":390,\"sounds/sword_clink1.mp3\":260,\"sounds/sword_clash3.mp3\":630,\"sounds/sword_clash2.mp3\":550,\"sounds/sword_clash1.mp3\":440,\"sounds/sp_shiningaura.mp3\":96080,\"sounds/sp_readytogo.mp3\":29600,\"sounds/sp_overworld.mp3\":14810,\"sounds/sorrowful_piano.mp3\":88690,\"sounds/smallburp.mp3\":180,\"sounds/smallbreak3.mp3\":620,\"sounds/smallbreak2.mp3\":600,\"sounds/smallbreak1.mp3\":570,\"sounds/slam05.mp3\":730,\"sounds/slam04.mp3\":730,\"sounds/slam03.mp3\":520,\"sounds/slam02.mp3\":940,\"sounds/slam01.mp3\":440,\"sounds/shotgun.mp3\":3190,\"sounds/scream7.mp3\":2220,\"sounds/scream6.mp3\":650,\"sounds/scream5.mp3\":2870,\"sounds/scream4.mp3\":1440,\"sounds/scream3.mp3\":550,\"sounds/scissors.mp3\":220,\"sounds/sad_serenade.mp3\":101170,\"sounds/roger_that.mp3\":680,\"sounds/relaxing_plaza.mp3\":118260,\"sounds/radarping.mp3\":4020,\"sounds/pralax.mp3\":40080,\"sounds/notification02.mp3\":730,\"sounds/notification01.mp3\":1180,\"sounds/nooo.mp3\":1830,\"sounds/nailgun3.mp3\":440,\"sounds/nailgun2.mp3\":840,\"sounds/nailgun.mp3\":500,\"sounds/mustache.mp3\":680,\"sounds/meow3.mp3\":740,\"sounds/lose3.mp3\":2610,\"sounds/lose2.mp3\":1800,\"sounds/jump8bit.mp3\":260,\"sounds/joy_outerbass.mp3\":49320,\"sounds/jolly_bubblegum.mp3\":118990,\"sounds/intricate-wireframe.mp3\":28840,\"sounds/inspect.mp3\":710,\"sounds/hurtmonster.mp3\":470,\"sounds/hurtdragon1.mp3\":1310,\"sounds/hurt5.mp3\":1880,\"sounds/hurt4.mp3\":1180,\"sounds/hurt3.mp3\":520,\"sounds/hurt2.mp3\":440,\"sounds/hurt1.mp3\":810,\"sounds/huh.mp3\":290,\"sounds/hugewreck1.mp3\":2610,\"sounds/hop.mp3\":130,\"sounds/hint.mp3\":240,\"sounds/harm1.mp3\":340,\"sounds/gun_reload3.mp3\":1330,\"sounds/gun_reload2.mp3\":760,\"sounds/gun_reload1.mp3\":730,\"sounds/gun_empty1.mp3\":210,\"sounds/gunshot4.mp3\":1150,\"sounds/gunshot3.mp3\":1360,\"sounds/gunshot2.mp3\":1830,\"sounds/gunshot1.mp3\":760,\"sounds/gryrow.mp3\":56090,\"sounds/groovy_break.mp3\":18320,\"sounds/good.mp3\":1230,\"sounds/good-morning.mp3\":710,\"sounds/glass_shatter3.mp3\":1200,\"sounds/glass_shatter2.mp3\":650,\"sounds/fulfilling_jump.mp3\":60660,\"sounds/fire_in_the_hole.mp3\":2060,\"sounds/firework.mp3\":2430,\"sounds/fard.mp3\":390,\"sounds/fail.mp3\":860,\"sounds/explosion5.mp3\":2190,\"sounds/explosion4.mp3\":6610,\"sounds/explosion3.mp3\":3190,\"sounds/explosion2.mp3\":2930,\"sounds/explosion1.mp3\":3320,\"sounds/exhale.mp3\":740,\"sounds/error2.mp3\":390,\"sounds/error1.mp3\":390,\"sounds/enchanting_mysteries.mp3\":114520,\"sounds/elevator_intermission.mp3\":27090,\"sounds/dreaming01.mp3\":9670,\"sounds/dooropen.mp3\":340,\"sounds/dancing_ducks.mp3\":14340,\"sounds/curiously_sneaky.mp3\":32500,\"sounds/cozy_mall.mp3\":12040,\"sounds/cosmic_pluck.mp3\":20240,\"sounds/collect2.mp3\":910,\"sounds/collect1.mp3\":290,\"sounds/collect1-1.mp3\":260,\"sounds/coin3.mp3\":180,\"sounds/coin2.mp3\":650,\"sounds/click05.mp3\":370,\"sounds/click04.mp3\":290,\"sounds/click03.mp3\":160,\"sounds/click02.mp3\":130,\"sounds/click01.mp3\":260,\"sounds/clang3.mp3\":3740,\"sounds/clang2.mp3\":500,\"sounds/chirping.mp3\":4260,\"sounds/censorbeep.mp3\":420,\"sounds/cave_theme.mp3\":48090,\"sounds/casual_walk.mp3\":10160,\"sounds/carpass.mp3\":4960,\"sounds/burp5.mp3\":290,\"sounds/burp4.mp3\":260,\"sounds/burp3.mp3\":600,\"sounds/burp2.mp3\":570,\"sounds/bossa-chords.mp3\":22060,\"sounds/bonk3.mp3\":630,\"sounds/bonk2.mp3\":710,\"sounds/boing5.mp3\":2220,\"sounds/boing4.mp3\":970,\"sounds/boing3.mp3\":1020,\"sounds/boing2.mp3\":940,\"sounds/blink.mp3\":340,\"sounds/bikehorn.mp3\":1070,\"sounds/bellding.mp3\":3130,\"sounds/basically_green.mp3\":15650,\"sounds/audiencevoices.mp3\":36050,\"sounds/alien.mp3\":9740,\"sounds/alert2.mp3\":7990,\"sounds/activate.mp3\":650,\"sounds/action1.mp3\":51150,\"sounds/keyboard/typing03.mp3\":6270,\"sounds/keyboard/typing02.mp3\":9480,\"sounds/keyboard/typing01.mp3\":2300,\"sounds/keyboard/type5.mp3\":340,\"sounds/keyboard/type4.mp3\":310,\"sounds/keyboard/type3.mp3\":310,\"sounds/keyboard/type2.mp3\":310,\"sounds/keyboard/type1.mp3\":370,\"sounds/keyboard/click3.mp3\":260,\"sounds/keyboard/click2.mp3\":370,\"sounds/keyboard/click1.mp3\":340,\"sounds/keyboard/angry_typing01.mp3\":4830,\"sounds/impact/impact05.mp3\":6450,\"sounds/impact/impact04.mp3\":7260,\"sounds/impact/impact03.mp3\":8050,\"sounds/impact/impact02.mp3\":6900,\"sounds/impact/impact01.mp3\":7030,\"sounds/footsteps/wood3.mp3\":4440,\"sounds/footsteps/wood2.mp3\":8390,\"sounds/footsteps/wood1.mp3\":9770,\"sounds/footsteps/snow3.mp3\":10080,\"sounds/footsteps/snow2.mp3\":15520,\"sounds/footsteps/snow1.mp3\":12250,\"sounds/footsteps/mud3.mp3\":10420,\"sounds/footsteps/mud2.mp3\":4310,\"sounds/footsteps/mud1.mp3\":4410,\"sounds/footsteps/gravel3.mp3\":10920,\"sounds/footsteps/gravel2.mp3\":11150,\"sounds/footsteps/gravel1.mp3\":6270,\"sounds/footsteps/grass3.mp3\":5200,\"sounds/footsteps/grass2.mp3\":10790,\"sounds/footsteps/grass1.mp3\":9350,\"sounds/footsteps/concrete3.mp3\":3580,\"sounds/footsteps/concrete2.mp3\":15600,\"sounds/footsteps/concrete1.mp3\":9330,\"sounds/echo/you-have-been-denied.mp3\":3000,\"sounds/echo/mashup-deep.mp3\":1540,\"sounds/echo/happy-easter.mp3\":1460,\"sounds/echo/faster.mp3\":860,\"sounds/echo/evacuation_warning.mp3\":5020,\"sounds/echo/attention-deep-voice.mp3\":2460,\"sounds/drumbreak/dnb2.mp3\":2800,\"sounds/drumbreak/dnb1.mp3\":2850,\"sounds/drumbreak/cowbell1.mp3\":5690,\"sounds/drumbreak/break2.mp3\":4570,\"sounds/drumbreak/break1.mp3\":5620,\"sounds/user/themes/RedOperation.mp3\":56030,\"sounds/user/themes/OttawaFINAL.mp3\":62170,\"sounds/user/themes/inky2.mp3\":36050,\"sounds/user/themes/inky1.mp3\":36050,\"sounds/user/themes/battletheme1.mp3\":64080,\"sounds/user/themes/awake10_megaWall.mp3\":57360,\"sounds/user/loops/opl2shortthing.mp3\":51280,\"sounds/user/loops/LoadingDips.mp3\":5400,\"sounds/user/loops/LethalCastle.mp3\":16080,\"sounds/user/loops/DrumLoop2.mp3\":7160,\"sounds/user/loops/DrumLoop1.mp3\":7160,\"sounds/user/effects/wind_blowing.mp3\":16030,\"sounds/user/effects/willhelm.mp3\":1440,\"sounds/user/effects/scary1.mp3\":3290,\"sounds/user/effects/RetroJump.mp3\":480,\"sounds/user/effects/menusel.mp3\":260,\"sounds/user/effects/evil_villian_4.mp3\":1930,\"sounds/user/effects/evil_villian_3.mp3\":1250,\"sounds/user/effects/evil_villian_2.mp3\":2530,\"sounds/user/effects/evil_villian_1.mp3\":2430,\"sounds/user/effects/error.mp3\":1880,\"sounds/monster/snarl/snarl04.mp3\":2660,\"sounds/monster/snarl/snarl03.mp3\":3580,\"sounds/monster/snarl/snarl02.mp3\":3000,\"sounds/monster/snarl/snarl01.mp3\":3000,\"sounds/user/effects/freesound-pool1-namelesscat/Zipper.mp3\":520,\"sounds/user/effects/freesound-pool1-namelesscat/Zipper 2.mp3\":600,\"sounds/user/effects/freesound-pool1-namelesscat/Write.mp3\":470,\"sounds/user/effects/freesound-pool1-namelesscat/Write 3.mp3\":570,\"sounds/user/effects/freesound-pool1-namelesscat/Write 2.mp3\":860,\"sounds/user/effects/freesound-pool1-namelesscat/Water Pour.mp3\":7500,\"sounds/user/effects/freesound-pool1-namelesscat/Unfurl.mp3\":4860,\"sounds/user/effects/freesound-pool1-namelesscat/Underwater.mp3\":46920,\"sounds/user/effects/freesound-pool1-namelesscat/Toilet.mp3\":3550,\"sounds/user/effects/freesound-pool1-namelesscat/Tape.mp3\":710,\"sounds/user/effects/freesound-pool1-namelesscat/Tape Player.mp3\":2220,\"sounds/user/effects/freesound-pool1-namelesscat/Tape 2.mp3\":290,\"sounds/user/effects/freesound-pool1-namelesscat/Squeaky Click.mp3\":550,\"sounds/user/effects/freesound-pool1-namelesscat/Snip Paper.mp3\":440,\"sounds/user/effects/freesound-pool1-namelesscat/Small Splash.mp3\":2900,\"sounds/user/effects/freesound-pool1-namelesscat/Small Splash 2.mp3\":1930,\"sounds/user/effects/freesound-pool1-namelesscat/Sink.mp3\":10920,\"sounds/user/effects/freesound-pool1-namelesscat/Scroll.mp3\":500,\"sounds/user/effects/freesound-pool1-namelesscat/Scroll 2.mp3\":2090,\"sounds/user/effects/freesound-pool1-namelesscat/Sci-fi Click.mp3\":550,\"sounds/user/effects/freesound-pool1-namelesscat/School Bell.mp3\":3710,\"sounds/user/effects/freesound-pool1-namelesscat/Rip 2.mp3\":760,\"sounds/user/effects/freesound-pool1-namelesscat/Radio Static.mp3\":5620,\"sounds/user/effects/freesound-pool1-namelesscat/Puddle.mp3\":600,\"sounds/user/effects/freesound-pool1-namelesscat/Power Up.mp3\":6660,\"sounds/user/effects/freesound-pool1-namelesscat/Pour.mp3\":1720,\"sounds/user/effects/freesound-pool1-namelesscat/Pop-up.mp3\":1040,\"sounds/user/effects/freesound-pool1-namelesscat/Plunge 2.mp3\":3790,\"sounds/user/effects/freesound-pool1-namelesscat/Ping.mp3\":10030,\"sounds/user/effects/freesound-pool1-namelesscat/Open.mp3\":1380,\"sounds/user/effects/freesound-pool1-namelesscat/Ocean.mp3\":32780,\"sounds/user/effects/freesound-pool1-namelesscat/Notification 3.mp3\":1540,\"sounds/user/effects/freesound-pool1-namelesscat/Frying.mp3\":8880,\"sounds/user/effects/freesound-pool1-namelesscat/Fridge.mp3\":9120,\"sounds/user/effects/freesound-pool1-namelesscat/Flip Paper.mp3\":470,\"sounds/user/effects/freesound-pool1-namelesscat/Flip Paper 2.mp3\":1330,\"sounds/user/effects/freesound-pool1-namelesscat/Error 4.mp3\":1040,\"sounds/user/effects/freesound-pool1-namelesscat/Drawer Open.mp3\":910,\"sounds/user/effects/freesound-pool1-namelesscat/Drawer Close.mp3\":860,\"sounds/user/effects/freesound-pool1-namelesscat/Door Open 3.mp3\":760,\"sounds/user/effects/freesound-pool1-namelesscat/Door Open 2.mp3\":1250,\"sounds/user/effects/freesound-pool1-namelesscat/Crumple.mp3\":810,\"sounds/user/effects/freesound-pool1-namelesscat/Car Rev.mp3\":3760,\"sounds/user/effects/freesound-pool1-namelesscat/Cancel.mp3\":1040,\"sounds/user/effects/freesound-pool1-namelesscat/Camera.mp3\":310,\"sounds/user/effects/freesound-pool1-namelesscat/Camera 2.mp3\":210,\"sounds/user/effects/freesound-pool1-namelesscat/Cafe.mp3\":34510,\"sounds/user/effects/freesound-pool1-namelesscat/Bubble.mp3\":440,\"sounds/user/effects/freesound-pool1-namelesscat/Bubble 2.mp3\":470,\"sounds/user/effects/freesound-pool1-namelesscat/Blender.mp3\":1830,\"sounds/user/effects/freesound-pool1-namelesscat/Bike Bell.mp3\":3600,\"sounds/user/effects/freesound-pool1-namelesscat/Anvil.mp3\":1410,\"sounds/user/effects/freesound-pool1-namelesscat/Anvil 2.mp3\":1380,\"sounds/user/effects/freesound-pool1-namelesscat/Alarm.mp3\":3760,\"sounds/material/metal/sheet/sheet01.mp3\":600,\"sounds/material/metal/scrape/scrape04.mp3\":340,\"sounds/material/metal/scrape/scrape03.mp3\":340,\"sounds/material/metal/scrape/scrape02.mp3\":500,\"sounds/material/metal/scrape/scrape01.mp3\":240,\"sounds/material/metal/pipe/pipe02.mp3\":1570,\"sounds/material/metal/pipe/pipe01.mp3\":1650,\"sounds/material/metal/hit/hit05.mp3\":370,\"sounds/material/metal/hit/hit04.mp3\":550,\"sounds/material/metal/hit/hit03.mp3\":860,\"sounds/material/metal/hit/hit02.mp3\":1700,\"sounds/material/metal/hit/hit01.mp3\":1440,\"sounds/material/metal/door/door03.mp3\":1520,\"sounds/material/metal/door/door02.mp3\":2460,\"sounds/material/metal/door/door01.mp3\":2250,\"sounds/material/metal/creak/creak03.mp3\":3160,\"sounds/material/metal/creak/creak02.mp3\":3420,\"sounds/material/metal/creak/creak01.mp3\":4830},\"scratch\":{\"ff8b8c3bf841a11fd5fe3afaa92be1b5\":3730,\"fd9a67157f57f9cc6fe3cdce38a6d4a8\":310,\"fd8543abeeba255072da239223d2d342\":1170,\"fc6e9cc9ba13c7e4ebb1af6cd7c90c49\":7770,\"fbbbb76a2f53dae6ff1cf61b41f66038\":4930,\"fb56022366d21b299cbc3fd5e16000c2\":2030,\"fb12e119d7a88a7f75ab980243f75073\":1710,\"fa5f7fea601e9368dd68449d9a54c995\":2000,\"fa2c9da1d4fd70207ab749851853cb50\":1140,\"f9d53d773b42e16df3dfca6174015592\":4810,\"f9513bacf2fc665de05a8dd9bcb88117\":2090,\"f8903e89c1082987f18fc30b3de6d61a\":9980,\"f730246174873cd4ae4127c83e475b50\":4860,\"f6868ee5cf626fc4ef3ca1119dc95592\":110,\"f62e9f7deeb0e06268df6edffa14f5de\":2830,\"f62e3bfccab9c23eee781473c94a009c\":970,\"f5c4e2311024f18c989e53f9b3448db8\":7830,\"f4942ab2532087118e11b0c4d4e0e342\":4150,\"f3afca380ba74372d611d3f518c2f35b\":790,\"f2c47a46f614f467a7ac802ed9ec3d8e\":1140,\"efddec047de95492f775a1b5b2e8d19e\":880,\"ee753e87d212d4b2fb650ca660f1e839\":1450,\"ec7c272faa862c9f8f731792e686e3c9\":250,\"ec66961f188e9b8a9c75771db744d096\":410,\"ead1da4a87ff6cb53441142f7ac37b8f\":1970,\"ea8d34b18c3d8fe328cea201666458bf\":330,\"ea21bdae86f70d60b28f1dddcf50d104\":1560,\"ea0d6aced66db4b8cafaeb6418ef9cf6\":940,\"e956f15da397a13fae0c90d9fe4571fb\":7210,\"e956a99ab9ac64cfb5c6b2d8b1e949eb\":2890,\"e8b6d605f5a1bb36c29e4e21ef754209\":740,\"e84afda25975f14b364118591538ccf4\":660,\"e7dfb630116153533989ff839c1973a5\":460,\"e56fdc9f76d035ff01f4e7b39e9e9989\":910,\"e31dcaf7bcdf58ac2a26533c48936c45\":1170,\"e29154f53f56f96f8a3292bdcddcec54\":440,\"e213e09ed852c621ba87cde7f95eec79\":8000,\"e1f32c057411da4237181ce72ae15d23\":340,\"e15333f5ffaf08e145ace1610fccd67d\":4000,\"e140d7ff07de8fa35c3d1595bba835ac\":370,\"e133e625fd367d269e76964d4b722fc2\":690,\"e06e29398d770dae3cd57447439752ef\":770,\"df08249ed5446cc5e10b7ac62faac89b\":720,\"de5b41c7080396986873d97e9e47acf6\":120,\"dd93f7835a407d4de5b2512ec4a6a806\":630,\"dd73f891deca0241b800ed203408b6f3\":2120,\"dc5e368fc0d0dad1da609bfc3e29aa15\":2000,\"db480f6d5ae6d494dbb76ffb9bd995d5\":2030,\"da8355d753cd2a5ddd19cb2bb41c1547\":1200,\"da734693dfa6a9a7eccdc7f9a0ca9840\":850,\"d8c78c6c272cca91342435ff543c1274\":340,\"d7cd24689737569c93e7ea7344ba6b0e\":320,\"d790e1887515deb4097f0946fbf597ad\":870,\"d73eacaf5a905bf864041c7a70937ac4\":3690,\"d6758470457aac2aa712717a676a5163\":880,\"d658129427a96764819cb9bd52076860\":450,\"d623f99b3c8d33932eb2c6c9cfd817c5\":560,\"d55b3954d72c6275917f375e49b502f3\":150,\"d4f76ded6bccd765958d15b63804de55\":820,\"d42f096c89764484a442046f4342c9ad\":510,\"d3c95a4ba37dcf90c8a57e8b2fd1632d\":1950,\"d38fc904a0acfc27854baf7335ed46f9\":11180,\"d2dd6b4372ca17411965dc92d52b2172\":630,\"d27ed8d953fe8f03c00f4d733d31d2cc\":2000,\"d20218f92ee606277658959005538e2d\":830,\"d182adef7a68a5f38f1c78ab7d5afd6a\":2150,\"d0096aa9ecc28c0729a99b0349399371\":1150,\"cf51a0c4088942d95bcc20af13202710\":590,\"cefba5de46adfe5702485e0934bb1e13\":330,\"cdab3cce84f74ecf53e3941c6a003b5e\":2000,\"cd8fa8390b0efdd281882533fbfcfcfb\":140,\"cd0d0e7dad415b2ffa2ba7a61860eaf8\":2000,\"cd0ab5d1b0120c6ed92a1654ccf81376\":830,\"cae6206eb3c57bb8c4b3e2ca362dfa6d\":4180,\"cad2bc57729942ed9b605145fc9ea65d\":670,\"cac3341417949acc66781308a254529c\":190,\"caa0a1685ef7a5334413834c6c818c5a\":930,\"ca694053020e42704bcf1fc01a70f1c3\":1900,\"c987c4e2c85d1a034ef047c2611aff25\":2600,\"c983b482802b15a80983786019276c28\":6440,\"c904610d770398b98872a708a2f75611\":4500,\"c8d2851bd99d8e0ce6c1f05e4acc7f34\":1260,\"c893b0a9b3e2e0594f1f921a12aa66be\":5340,\"c859fb0954acaa25c4b329df5fb76434\":760,\"c818fdfaf8a0efcb562e24e794700a57\":2000,\"c6ce0aadb89903a43f76fc20ea57633e\":290,\"c642c4c00135d890998f351faec55498\":260,\"c5f35ef67ab1baccdd3b7df87b329d99\":470,\"c587075453ace1584cf155d6a8de604d\":7490,\"c4e9e84fd9244ca43986c2bdb6669ae8\":8000,\"c4e893b927524ffd669898f69d096fd8\":5010,\"c3566ec797b483acde28f790994cc409\":2020,\"c2ff5da4d9d85dee866615f672b749ce\":700,\"c27fb569aba99c7203e954aecb1ed8e4\":130,\"c21a5ad00b40b5ce923e56c905c94a9f\":7710,\"c21704337b16359ea631b5f8eb48f765\":390,\"c2109f07f83086ec863e70887ef55fb6\":2020,\"c1b5c86a10f43f87746b1c305d4fd8df\":1530,\"c09455ee9da0e7eeead42d4e73c2555d\":2030,\"c04ebf21e5e19342fa1535e4efcdb43b\":1280,\"bb243badd1201b2607bf2513df10cd97\":2010,\"b9b8073f6aa9a60085ad11b0341a4af2\":520,\"b92de59d992a655c1b542223a784cda6\":510,\"b67db6ed07f882e52a9ef4dbb76f5f64\":4970,\"b5db20c28ef4946137129b47772dcf69\":9990,\"b51d086aeb1921ec405561df52ecbc50\":1650,\"b49ab3a926da46578396d1faffd24d3b\":7800,\"b3ee7b6515eaf85aebab3c624c1423e9\":3500,\"b235da45581b1f212c9e9cce70d2a2dc\":10110,\"b234a04cc3958437c43ed3d93f34a345\":3450,\"b15adefc3c12f758b6dc6a045362532f\":170,\"b10dcd209865fbd392534633307dafad\":390,\"af5b039e1b05e0ccb12944f648a8884e\":260,\"abc70bb390f8e55f22f32265500d814a\":190,\"ab3c198f8e36efff14f0a5bad35fa3cd\":2000,\"aa2ca112507b59b5337f341aaa75fb08\":830,\"a8383eaddc02d33714dc5832c02ccf13\":5050,\"a822b56063729f4f42f9a62e6010768b\":4280,\"a634fcb87894520edbd7a534d1479ec4\":4970,\"a5cd5e83841aaaf34583d6ad53d551f5\":2640,\"a54f8ce520a0b9fff3cd53817e280ede\":4560,\"a434069c58e79d42f5d21abb1c318919\":3810,\"a3fab5681aedaa678982173ed9ca3d36\":650,\"a3a85fb8564b0266f50a9c091087b7aa\":2000,\"a2b3cac37065c109aac17ed46005445e\":170,\"9fdef8a1f57a24b99add29d4f1925c76\":10060,\"9d63ed5be96c43b06492e8b4a9cea8d8\":440,\"9d30c38443691e9626d510546d98327c\":10380,\"9cd340d9d568b1479f731e69e103b3ce\":2030,\"9cc77167419f228503dd57fddaa5b2a6\":2000,\"9aad12085708ccd279297d4bea9c5ae0\":1030,\"99d02ffb3212d86b3e5b173b6f33f835\":180,\"9913a64bfb5cfa6bb30ec24002cce56b\":1810,\"98ec3e1eeb7893fca519aa52cc1ef3c1\":680,\"98a835713ecea2f3ef9f4f442d52ad20\":1520,\"97b187d72219b994a6ef6a5a6b09605c\":250,\"9502142875e67f7b0292a117a27e9563\":110,\"9436fd7a0eacb4a6067e7db14236dde1\":780,\"9329fef6a59c5406d70cbe5837976d6b\":9670,\"92ee32e9be5ed7b69370fc38bb550597\":2150,\"9205359ab69d042ed3da8a160a651690\":1400,\"906af1e30f19a919d203b2eb307e04ac\":6860,\"9021b7bb06f2399f18e2db4fb87095dc\":300,\"8fe470b5f2fb58364b153fe647adcbbf\":2000,\"8f5a994abfa814da72272e766772dbac\":4050,\"8c2ae70ee6a15c8d58004df7c4718de1\":6680,\"8bcea76415eaf98ec1cbc3825845b934\":15590,\"8b5486ccc806e97e83049d25b071f7e4\":2010,\"8b1e025f38b0635f7e34e9afcace1b5e\":1330,\"8970afcdc4e47bb54959a81fe27522bd\":590,\"89691587a169d935a58c48c3d4e78534\":7320,\"895c0887b4de4e0051e3adbceaf96061\":3200,\"881f1bf5f301a36efcce4204a44af9ab\":7420,\"8700dac70c8e08f4a5d21411980304bb\":7970,\"86dee6fa7cd73095ba17e4d666a27804\":2910,\"86826c6022a46370ed1afae69f1ab1b9\":2000,\"863ccc8ba66e6dabbce2a1261c22be0f\":780,\"85b663229525b73d9f6647f78eb23e0a\":700,\"859249563a7b1fc0f6e92e36d1db81c7\":520,\"853cc25eb47a35c88e3a1fe88b171ed4\":420,\"851c9e2c38e5e71922231a8f64c37e70\":2340,\"84f7b490f0f536cc1337ab7948aa3aa7\":10000,\"8468b9b3f11a665ee4d215afd8463b97\":640,\"83c36d806dc92327b9e7049a565c6bff\":850,\"83a9787d4cb6f3b7632b4ddfebf74367\":20,\"8388c266cd774a8e8c8796155b18ef47\":1640,\"8366ee963cc57ad24a8a35a26f722c2b\":2000,\"835f136ca8d346a17b4d4baf8405be37\":2000,\"8357b4bdf6fbe10b972be3b78167b3c8\":510,\"821b23a489201a0f21f47ba8528ba47f\":860,\"81f142d0b00189703d7fe9b1f13f6f87\":2000,\"7ffe91cce06c5415df53610d173336e7\":1870,\"7ede1382b578d8fc32850b48d082d914\":220,\"7ed8ce1853bde6dcbc6f7f5a1c65ae47\":4940,\"7e5019890a930f3535604cf9cad63ba4\":720,\"7c887f6a2ecd1cdb85d5527898d7f7a0\":1920,\"7c5405a9cf561f65a941aff10e661593\":1090,\"7c25f6d39011cd2ee5ffb1af539d9d0c\":16850,\"7bd800cb66d6fb18886a4c5cea1b76a6\":4900,\"7bc8c4a9d0525f04451356c6cc483dd7\":14710,\"7b4822ccca655db47de0880bab0e7bd9\":1990,\"79d052b0921d2078d42389328b1be168\":870,\"78b0be9c9c2f664158b886bc7e794095\":4090,\"786a7a66e96c801ca2efed59b20bf025\":9470,\"77ea2403120936066eb6280a47b063fd\":6860,\"76b9d125d013562dc4f423525b028a19\":220,\"75d7d2c9b5d40dd4e1cb268111abf1a2\":2000,\"74f1c07e0bcd7811fd9d456a5f8667f8\":600,\"740098316ed06d9a64c14b93f65c5da5\":2000,\"738e871fda577295e8beb9021f670e28\":1700,\"725e29369e9138a43f11e0e5eb3eb562\":1220,\"7206280bd4444a06d25f19a84dcb56b1\":1230,\"714e598d28e493cc50babc17f2c4895d\":1680,\"711a1270d1cf2e5de9b145ee539213e4\":170,\"6fcd64d6357e4ea03704e5f96bfd35ba\":310,\"6aed5e38d40b87a21d893d26fa2858c0\":2090,\"6ac484e97c1c1fe1384642e26a125e70\":10800,\"6a10c380af8c400f8f6eea84eb28bd12\":280,\"69eee3d038ea0f1c34ec9156a789236d\":240,\"69d25af0fd065da39c71439174efc589\":830,\"693b428f3797561a11ad0ddbd897b5df\":14840,\"68aec107bd3633b2ee40c532eedc3897\":630,\"684ffae7bc3a65e35e9f0aaf7a579dd5\":3820,\"67aadcd28620ecdcdee2ad8eeebefa20\":490,\"67a6d1aa68233a2fa641aee88c7f051f\":250,\"66968153be7dce9e5abf62d627ffe40f\":2490,\"667d6c527b79321d398e85b526f15b99\":1090,\"6648b690e6e22c7504db7746879d51b4\":4660,\"663270af0235bf14c890ba184631675f\":520,\"65e8a47d55df3f4cb17722959f6220db\":5650,\"659de1f3826ece8dbeca948884835f14\":15260,\"653ebe92d491b49ad5d8101d629f567b\":430,\"646ea2f42ab04b54f1359ccfac958561\":6930,\"62d87dfb0f873735e59669d965bdbd7d\":4000,\"62244fb9600ee90c780875deba2ba24f\":2430,\"5fa3108b119ca266029b4caa340a7cd0\":580,\"5f4216970527d5a2e259758ba12e6a1b\":850,\"5eb00f15f21f734986aa45156d44478d\":2000,\"5e36d74bb16aa5085b901362788b0fbf\":3900,\"5d3d2865906889e866b3edf154e6cf5d\":2600,\"5cb46ddd903fc2c9976ff881df9273c9\":270,\"5b1a88cd6db7e239642d7ca8a0d74a1a\":4720,\"5a8b8678d37a860dd6c08082d5cda3c2\":1620,\"5a5f5de80bcdf782250e889747b374bd\":1990,\"5a3ae8a2665f50fdc38cc301fbac79ba\":1820,\"5a07847bf246c227204728b05a3fc8f3\":270,\"5a0701d0a914223b5288300ac94e90e4\":280,\"58f76f299a1df2373d4fca3614221186\":4330,\"56fc995b8860e713c5948ecd1c2ae572\":260,\"56df0714ed1ed455a2befd787a077214\":1250,\"56985da9c052a5e26007c99aa5a958f7\":4920,\"562587bdb75e3a8124cdaa46ba0f648b\":8000,\"5606722c6105f3c58f9689a958f5c45f\":550,\"53badb02228d10494e0efdd1e839548d\":740,\"53a3c2e27d1fb5fdb14aaf0cb41e7889\":310,\"52cf0926d9bab8774194a37eba636c0e\":640,\"51381ac422605ee8c7d64cfcbfd75efc\":2000,\"50f29d0e028ec5c11210d0e2f91f83dd\":2160,\"4d2c939d6953b5f241a27a62cf72de64\":430,\"4cbd4dc0c55656e7edc4b0f00a3f9738\":3560,\"4b5d1da83e59bf35578324573c991666\":1740,\"4b33c58ba14e4555373fa2478b3f891f\":2370,\"49c2e36b7258338fb3a8576e646c6738\":2390,\"494295a92314cadb220945a6711c568c\":390,\"49407acfc004ec6960e8b84d363bd98d\":1080,\"48328c874353617451e4c7902cc82817\":300,\"467fe8ef3cab475af4b3088fd1261510\":750,\"46571f8ec0f2cc91666c80e312579082\":50,\"45ffcf97ee2edca0199ff5aa71a5b72e\":1310,\"45eedb4ce62a9cbbd2207824b94a4641\":240,\"42bbbb6c37439abc82057ec2e67b78dc\":2940,\"42bb2ed28e7023e111b33220e1594a6f\":2000,\"42b5a31628083f3089f494f2ba644660\":690,\"420991e0d6d99292c6d736963842536a\":290,\"4102d78dc98ae81448b140f35fd73e80\":1210,\"4081f8fac2ca83bd34329400eb95bbde\":540,\"3b8236bbb288019d93ae38362e865972\":240,\"3b6cce9f8c56c0537ca61eee3945cd1d\":200,\"3a8ed3129f22cba5b0810bc030d16b5f\":2000,\"39f41954a73c0e15d842061e1a4c5e1d\":430,\"39525f6545d62a95d05153f92d63301a\":2000,\"38a2bb8129bddb4e8eaa06781cfa3040\":2090,\"3858bab5ea1211ff3c5902a4b680f7d8\":560,\"37f37455c35fea71449926eb0bff05dd\":4700,\"366c7edbd4dd5cca68bf62902999bd66\":2000,\"3650dc4262bcc5010c0d8fa8d7c670cf\":520,\"362d7440a57cab29914fecea621e50d4\":740,\"35b42d98c43404a5b1b52fb232a62bd7\":190,\"3568b7dfe173fab6877a9ff1dcbcf1aa\":340,\"3477ccfde26047eeb93ff43a21ac7d3d\":890,\"33e9314fd25ef8e800a749c86487f7a9\":750,\"32f3af03ddfbd9cc89c8565678a26813\":1210,\"329ee6f3418c0a569418e102e620edf0\":20210,\"32514c51e03db680e9c63857b840ae78\":600,\"3249e61fa135d0a1d68ff515ba3bd92f\":2840,\"31600c613823710b66a74f4dd54c4cdd\":1070,\"30987bbe464eb8db1e4c781dc238f81c\":520,\"2e6a6ae3e0f72bf78c74def8130f459a\":2000,\"2e375acae2c7c0d655935a9de14b12f6\":1550,\"2dbcfae6a55738f94bbb40aa5fcbf7ce\":1860,\"2d625187556c4323169fc1a8f29a7a7d\":5000,\"2d01f60d0f20ab39facbf707899c6b2a\":120,\"2ca5fbda5288b79a6e12f5ca3c20b0fa\":13210,\"2c41921491b1da2bfa1ebcaba34265ca\":9640,\"2c22bb6e3c65d9430185fd83ec3db64a\":1090,\"2b1a5bc63580d8625cf24ff3d7622c0b\":5590,\"2ae3083817bcd595e26ea2884b6684d5\":330,\"2ae2d67de62df8ca54d638b4ad2466c3\":1340,\"29000fa713f70765147ee0551fa42d9e\":2290,\"28c76b6bebd04be1383fe9ba4933d263\":860,\"289dc558e076971e74dd1a0bd55719b1\":2000,\"287c477da485506c5b4ce37c57a64b5f\":6820,\"28153621d293c86da0b246d314458faf\":300,\"276f97d3a9d0f9938b37db8225af97f5\":3390,\"27654ed2e3224f0a3f77c244e4fae9aa\":70,\"25f4826cdd61e0a1c623ec2324c16ca0\":1570,\"25d61e79cbeba4041eebeaebd7bf9598\":4100,\"22baa07795a9a524614075cdea543793\":2030,\"2293a751b71a2df8cdce1bec5558cc1e\":1700,\"228429930dfc60f48d75ce8e14291416\":2000,\"21f82b7f1a83c501539c5031aea4fa8c\":750,\"21a2cc083ef51767fb13791151194348\":260,\"1f81d88fb419084f4d82ffb859b94ed6\":180,\"1e8e7fb94103282d02a4bb597248c788\":1230,\"1da43f6d52d0615da8a250e28100a80d\":1740,\"1d4abbe3c9bfe198a88badb10762de75\":210,\"1cb60ecdb1075c8769cb346d5c2a22c7\":1950,\"1b5de9866801eb2f9d4f57c7c3b473f5\":2000,\"19211d5ecd34214b6aba947790e63bb0\":7850,\"18e5a88512296cd96417449496bd8711\":24800,\"18bd4b634a3f992a16b30344c7d810e0\":350,\"1727f65b5f22d151685b8e5917456a60\":370,\"170e05c29d50918ae0b482c2955768c0\":4940,\"16a3b9d516e125cdb2ad74cd8d205d71\":370,\"16144544de90e98a92a265d4fc3241ea\":370,\"1569bbbd8952b0575e5a5cb5aefb50ba\":910,\"12f86e0188510860970e04df45370c1d\":1510,\"11f13be7e53b2e9116d59344c5efc66a\":13950,\"1139072c3d2d31fa5903c46632789d08\":1380,\"10eed5b6b49ec7baf1d4b3b3fad0ac99\":2500,\"10644c5cc83a9a2dd3ab466deb0eb03d\":590,\"10420bb2f5a3ab440f3b10fc8ea2b08b\":600,\"0fbca8db08d46419416c0f104345bc53\":1620,\"0f2aa4c395cb932512defb2d14dc1691\":300,\"0edb8fb88af19e6e17d0f8cf64c1d136\":8000,\"0eaf773c9d1b06e801e7b5fd56298801\":1240,\"0d91b2759ac861d156235f5ecf8d3218\":130,\"0d340de02e14bebaf8dfa0e43eb3f1f9\":2000,\"0cfa8e84d6a5cd63afa31d541625a9ef\":2000,\"0b6f94487cd8a1cf0bb77e15966656c3\":380,\"0b1e3033140d094563248e61de4039e5\":260,\"0b1345b8fe2ba3076fedb4f3ae48748a\":580,\"0aae06b65c875a6ba1fd51f4251b16b3\":760,\"09d36c3c7531a0a1224437f3994bad40\":450,\"079067d7909f791b29f8be1c00fc2131\":2000,\"072f4d9a3dfd2a082d50ff90ac7dc8f2\":4050,\"0727959edb2ea0525feed9b0c816991c\":2000,\"0704b8ceabe54f1dcedda8c98f1119fd\":260,\"0657e39bae81a232b01a18f727d3b891\":1640,\"05c192194e8f1944514dce3833e33439\":1400,\"058a34b5fb8b57178b5322d994b6b8c8\":3480,\"04ccc72f32e909292adcaf40348be5f3\":6200,\"042309f190183383c0b1c1fc3edc2e84\":8490,\"03f61f7d2c32da8a1493a380414710a2\":380,\"0377a7476136e5e8c780c64a4828922d\":730,\"01f5372ddac43001a2db4c82d71f37bb\":250,\"01bd4d670cd586613705ee8273f22568\":820,\"00d6e72ef8bf7088233e98fbcee0ec6d\":820,\"006316650ffc673dc02d36aa55881327\":950,\"0039635b1d6853face36581784558454\":350}}"); /***/ }), /***/ "./src/lib/libraries/sprite-tags.js": /*!******************************************!*\ !*** ./src/lib/libraries/sprite-tags.js ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tag-messages.js */ "./src/lib/libraries/tag-messages.js"); /* harmony default export */ __webpack_exports__["default"] = ([{ tag: 'animals', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].animals }, { tag: 'people', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].people }, { tag: 'fantasy', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].fantasy }, { tag: 'dance', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].dance }, { tag: 'music', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].music }, { tag: 'sports', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].sports }, { tag: 'food', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].food }, { tag: 'fashion', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].fashion }, { tag: 'letters', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].letters }]); /***/ }), /***/ "./src/lib/libraries/tag-messages.js": /*!*******************************************!*\ !*** ./src/lib/libraries/tag-messages.js ***! \*******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js"); /* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["defineMessages"])({ all: { "id": "gui.libraryTags.all", "defaultMessage": "All" }, animals: { "id": "gui.libraryTags.animals", "defaultMessage": "Animals" }, dance: { "id": "gui.libraryTags.dance", "defaultMessage": "Dance" }, effects: { "id": "gui.libraryTags.effects", "defaultMessage": "Effects" }, fantasy: { "id": "gui.libraryTags.fantasy", "defaultMessage": "Fantasy" }, fashion: { "id": "gui.libraryTags.fashion", "defaultMessage": "Fashion" }, food: { "id": "gui.libraryTags.food", "defaultMessage": "Food" }, indoors: { "id": "gui.libraryTags.indoors", "defaultMessage": "Indoors" }, loops: { "id": "gui.libraryTags.loops", "defaultMessage": "Loops" }, themes: { "id": "gui.libraryTags.themes", "defaultMessage": "Themes" }, music: { "id": "gui.libraryTags.music", "defaultMessage": "Music" }, notes: { "id": "gui.libraryTags.notes", "defaultMessage": "Notes" }, outdoors: { "id": "gui.libraryTags.outdoors", "defaultMessage": "Outdoors" }, patterns: { "id": "gui.libraryTags.patterns", "defaultMessage": "Patterns" }, people: { "id": "gui.libraryTags.people", "defaultMessage": "People" }, percussion: { "id": "gui.libraryTags.percussion", "defaultMessage": "Percussion" }, space: { "id": "gui.libraryTags.space", "defaultMessage": "Space" }, sports: { "id": "gui.libraryTags.sports", "defaultMessage": "Sports" }, underwater: { "id": "gui.libraryTags.underwater", "defaultMessage": "Underwater" }, voice: { "id": "gui.libraryTags.voice", "defaultMessage": "Voice" }, wacky: { "id": "gui.libraryTags.wacky", "defaultMessage": "Wacky" }, animation: { "id": "gui.libraryTags.animation", "defaultMessage": "Animation" }, art: { "id": "gui.libraryTags.art", "defaultMessage": "Art" }, games: { "id": "gui.libraryTags.games", "defaultMessage": "Games" }, stories: { "id": "gui.libraryTags.stories", "defaultMessage": "Stories" }, letters: { "id": "gui.libraryTags.letters", "defaultMessage": "Letters" }, swords: { "id": "gui.libraryTags.swords", "defaultMessage": "Swords" }, guns: { "id": "gui.libraryTags.guns", "defaultMessage": "Guns" }, penguinmod: { "id": "gui.libraryTags.penguinmod", "defaultMessage": "PenguinMod" }, scratch: { "id": "gui.libraryTags.scratch", "defaultMessage": "Scratch" }, turbowarp: { "id": "gui.libraryTags.turbowarp", "defaultMessage": "TurboWarp" }, programminglanguage: { "id": "gui.libraryTags.programminglanguage", "defaultMessage": "Programming Languages" }, categoryexpansion: { "id": "gui.libraryTags.categoryexpansion", "defaultMessage": "Category Expansions" }, ui: { "id": "gui.libraryTags.ui", "defaultMessage": "Menu" }, footsteps: { "id": "gui.libraryTags.footsteps", "defaultMessage": "Footsteps" }, custom: { "id": "gui.libraryTags.custom", "defaultMessage": "Custom" }, customextension: { "id": "gui.libraryTags.customextension", "defaultMessage": "Load Custom Extension" }, hardware: { "id": "gui.libraryTags.hardware", "defaultMessage": "Hardware" }, library: { "id": "gui.libraryTags.library", "defaultMessage": "Collections" }, extcreate: { "id": "gui.libraryTags.extcreate", "defaultMessage": "Extension Creators" }, datamgmt: { "id": "gui.libraryTags.datamgmt", "defaultMessage": "Data Management" }, graphics: { "id": "gui.libraryTags.graphics", "defaultMessage": "Graphics" }, noisemaker: { "id": "gui.libraryTags.noisemaker", "defaultMessage": "Sound" }, metal: { "id": "gui.libraryTags.metal", "defaultMessage": "Metal" }, monsters: { "id": "gui.libraryTags.monster", "defaultMessage": "Monsters" }, math: { "id": "gui.libraryTags.math", "defaultMessage": "Math" } })); /***/ }), /***/ "./src/lib/libraries/tutorial-tags.js": /*!********************************************!*\ !*** ./src/lib/libraries/tutorial-tags.js ***! \********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tag-messages.js */ "./src/lib/libraries/tag-messages.js"); /* harmony default export */ __webpack_exports__["default"] = ([{ tag: 'animation', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].animation }, { tag: 'art', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].art }, { tag: 'music', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].music }, { tag: 'games', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].games }, { tag: 'stories', intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].stories }]); /***/ }), /***/ "./src/lib/libraries/tw-async-libraries.js": /*!*************************************************!*\ !*** ./src/lib/libraries/tw-async-libraries.js ***! \*************************************************/ /*! exports provided: getBackdropLibrary, getCostumeLibrary, getSoundLibrary, getSpriteLibrary */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBackdropLibrary", function() { return getBackdropLibrary; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCostumeLibrary", function() { return getCostumeLibrary; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSoundLibrary", function() { return getSoundLibrary; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSpriteLibrary", function() { return getSpriteLibrary; }); const asyncLibrary = callback => { let data = null; return () => { if (data) return data; return callback().then(mod => data = mod.default); }; }; const getBackdropLibrary = asyncLibrary(() => __webpack_require__.e(/*! import() | library-backdrops */ "library-backdrops").then(__webpack_require__.t.bind(null, /*! ./backdrops.json */ "./src/lib/libraries/backdrops.json", 3))); const getCostumeLibrary = asyncLibrary(() => __webpack_require__.e(/*! import() | library-costumes */ "library-costumes").then(__webpack_require__.t.bind(null, /*! ./costumes.json */ "./src/lib/libraries/costumes.json", 3))); const getSoundLibrary = asyncLibrary(() => __webpack_require__.e(/*! import() | library-sounds */ "library-sounds").then(__webpack_require__.t.bind(null, /*! ./sounds.json */ "./src/lib/libraries/sounds.json", 3))); const getSpriteLibrary = asyncLibrary(() => __webpack_require__.e(/*! import() | library-sprites */ "library-sprites").then(__webpack_require__.t.bind(null, /*! ./sprites.json */ "./src/lib/libraries/sprites.json", 3))); /***/ }), /***/ "./src/lib/locale-utils.js": /*!*********************************!*\ !*** ./src/lib/locale-utils.js ***! \*********************************/ /*! exports provided: wideLocales, isWideLocale */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wideLocales", function() { return wideLocales; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isWideLocale", function() { return isWideLocale; }); /** * @fileoverview * Utility functions related to localization specific to the GUI */ const wideLocales = ['ab', 'ca', 'de', 'el', 'it', 'ja', 'ja-Hira', 'ko', 'hu', 'ru', 'vi']; /** * Identify the languages where translations are too long to fit in fixed width parts of the gui. * @param {string} locale The current locale. * @return {bool} true if translations in this language are too long */ const isWideLocale = locale => wideLocales.indexOf(locale) !== -1; /***/ }), /***/ "./src/lib/localization-hoc.jsx": /*!**************************************!*\ !*** ./src/lib/localization-hoc.jsx ***! \**************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); /* harmony import */ var _connected_intl_provider_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./connected-intl-provider.jsx */ "./src/lib/connected-intl-provider.jsx"); const _excluded = ["locale", "onSetLanguage"]; function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } /* * Higher Order Component to provide localiztion state. Creates a nested IntlProvider * to handle Gui intl context. The component accepts an onSetLanguage callback that is * called when the locale chagnes. * @param {React.Component} WrappedComponent - component to provide state for * @returns {React.Component} component with intl state provided from redux */ const LocalizationHOC = function LocalizationHOC(WrappedComponent) { class LocalizationWrapper extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { componentDidUpdate(prevProps) { if (prevProps.locale !== this.props.locale) { this.props.onSetLanguage(this.props.locale); } } render() { const _this$props = this.props, { locale, // eslint-disable-line no-unused-vars onSetLanguage // eslint-disable-line no-unused-vars } = _this$props, componentProps = _objectWithoutProperties(_this$props, _excluded); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_connected_intl_provider_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, componentProps)); } } LocalizationWrapper.propTypes = { locale: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, onSetLanguage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func }; LocalizationWrapper.defaultProps = { onSetLanguage: () => {} }; const mapStateToProps = state => ({ locale: state.locales.locale }); const mapDispatchToProps = () => ({}); return Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(LocalizationWrapper); }; /* harmony default export */ __webpack_exports__["default"] = (LocalizationHOC); /***/ }), /***/ "./src/lib/log.js": /*!************************!*\ !*** ./src/lib/log.js ***! \************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var minilog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! minilog */ "./node_modules/minilog/lib/web/index.js"); /* harmony import */ var minilog__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(minilog__WEBPACK_IMPORTED_MODULE_0__); minilog__WEBPACK_IMPORTED_MODULE_0___default.a.enable(); /* harmony default export */ __webpack_exports__["default"] = (minilog__WEBPACK_IMPORTED_MODULE_0___default()('gui')); /***/ }), /***/ "./src/lib/make-toolbox-xml.js": /*!*************************************!*\ !*** ./src/lib/make-toolbox-xml.js ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tw-lazy-scratch-blocks */ "./src/lib/tw-lazy-scratch-blocks.js"); const categorySeparator = ''; const blockSeparator = ''; // At default scale, about 28px const translate = (id, english) => { if (_tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_0__["default"].isLoaded()) { const ScratchBlocks = _tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_0__["default"].get(); return ScratchBlocks.ScratchMsgs.translate(id, english); } return english; }; /* eslint-disable no-unused-vars */ const motion = function motion(isInitialSetup, isStage, targetId) { const stageSelected = translate('MOTION_STAGE_SELECTED', 'Stage selected: no motion blocks'); return "\n \n ".concat(isStage ? "\n \n ") : "\n \n \n \n 10\n \n \n \n \n \n \n 10\n \n \n \n \n \n \n 15\n \n \n \n \n \n \n 15\n \n \n \n ".concat(blockSeparator, "\n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n 0\n \n \n \n \n \n \n 10\n \n \n \n \n 10\n \n \n \n \n \n \n 1\n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n 0\n \n \n \n \n 0\n \n \n \n ").concat(blockSeparator, "\n \n \n \n 90\n \n \n \n \n \n \n \n \n \n \n \n \n 0\n \n \n \n \n 0\n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n 10\n \n \n \n \n \n \n 0\n \n \n \n \n \n \n 10\n \n \n \n \n \n \n 0\n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n \n \n ").concat(blockSeparator, "\n \n \n ").concat(blockSeparator, "\n \n \n "), "\n ").concat(categorySeparator, "\n \n "); }; const xmlEscape = function xmlEscape(unsafe) { return unsafe.replace(/[<>&'"]/g, c => { switch (c) { case '<': return '<'; case '>': return '>'; case '&': return '&'; case '\'': return '''; case '"': return '"'; } }); }; const looks = function looks(isInitialSetup, isStage, targetId, costumeName, backdropName) { const hello = translate('LOOKS_HELLO', 'Hello!'); const hmm = translate('LOOKS_HMM', 'Hmm...'); return "\n \n ".concat(isStage ? '' : "\n \n \n \n ".concat(hello, "\n \n \n \n \n 2\n \n \n \n \n \n \n ").concat(hello, "\n \n \n \n \n \n \n ").concat(hmm, "\n \n \n \n \n 2\n \n \n \n \n \n \n ").concat(hmm, "\n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n Helvetica\n \n \n \n \n 14\n \n \n \n \n BUBBLE_STROKE\n \n \n \n \n \n STROKE_WIDTH\n \n \n 0\n \n \n \n \n \n ").concat(blockSeparator, "\n "), "\n ").concat(isStage ? "\n \n \n \n ".concat(backdropName, "\n \n \n \n \n \n \n ").concat(backdropName, "\n \n \n \n \n \n \n \n \n \n \n ").concat(backdropName, "\n \n \n \n ") : "\n \n \n \n ").concat(costumeName, "\n \n \n \n \n \n \n \n \n \n \n ").concat(costumeName, "\n \n \n \n ").concat(blockSeparator, "\n \n \n \n ").concat(backdropName, "\n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n 10\n \n \n \n \n \n \n 100\n \n \n \n ").concat(blockSeparator, "\n \n \n \n 100\n \n \n \n \n 100\n \n \n \n \n \n \n 15\n \n \n \n \n 15\n \n \n \n \n \n "), "\n ").concat(blockSeparator, "\n \n \n \n 25\n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n \n \n \n ").concat(blockSeparator, "\n ").concat(isStage ? '' : "\n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n 1\n \n \n \n \n \n \n 1\n \n \n \n \n \n \n \n \n \n ").concat(blockSeparator, "\n "), "\n ").concat(isStage ? "\n \n " : "\n \n \n \n "), "\n ").concat(categorySeparator, "\n \n "); }; const sound = function sound(isInitialSetup, isStage, targetId, soundName) { return "\n \n \n \n \n ").concat(soundName, "\n \n \n \n \n \n \n 5\n \n \n \n \n ").concat(soundName, "\n \n \n \n ").concat(blockSeparator, "\n \n \n \n ").concat(soundName, "\n \n \n \n \n \n \n 5\n \n \n \n \n ").concat(soundName, "\n \n \n \n \n \n \n ").concat(soundName, "\n \n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n 1\n \n \n \n \n ").concat(soundName, "\n \n \n \n ").concat(blockSeparator, "\n \n \n \n ").concat(soundName, "\n \n \n \n \n \n \n ").concat(soundName, "\n \n \n \n ").concat(blockSeparator, "\n \n \n \n 10\n \n \n \n \n \n \n 100\n \n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n -10\n \n \n \n \n \n \n 100\n \n \n \n \n ").concat(categorySeparator, "\n \n "); }; const events = function events(isInitialSetup, isStage) { return "\n \n \n \n ".concat(blockSeparator, "\n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n ").concat(isStage ? "\n \n " : "\n \n ", "\n \n \n ").concat(blockSeparator, "\n \n \n \n 10\n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(categorySeparator, "\n \n "); }; const control = function control(isInitialSetup, isStage) { return "\n \n \n \n \n 1\n \n \n \n \n \n \n 1\n \n \n \n ".concat(blockSeparator, "\n \n \n \n 10\n \n \n \n \n \n \n \n 10\n \n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n \n \n ello\n \n \n \n \n \n \n ello\n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n \n \n \n \n \n foo\n \n \n \n \n bar\n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n Hello!\n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n \n \n \n ").concat(blockSeparator, "\n ").concat(isStage ? "\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 ").concat(_tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_0__["default"].isNameUrMom() ? '' : '', "\n ").concat(categorySeparator, "\n \n "); }; const sensing = function sensing(isInitialSetup, isStage, targetId) { const name = translate('SENSING_ASK_TEXT', 'What\'s your name?'); // const openDocumentation = translate('OPEN_DOCUMENTATION', 'Open Documentation'); const helpManual = translate('HELP_MANUAL', 'Help Manual'); return "\n \n ".concat(isStage ? '' : "\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 ".concat(blockSeparator, "\n \n \n \n \n \n \n \n \n \n \n \n \n \n 10\n \n \n \n \n -10\n \n \n \n \n -10\n \n \n \n \n 10\n \n \n \n \n \n \n 10\n \n \n \n \n -10\n \n \n \n \n -10\n \n \n \n \n 10\n \n \n \n ").concat(blockSeparator, "\n "), "\n ").concat(isInitialSetup ? '' : "\n \n \n \n ".concat(name, "\n \n \n \n "), "\n \n \n \n \n world\n \n \n \n \n \n \n 10\n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n \n ").concat(blockSeparator, "\n \n \n \n Hello!\n \n \n \n \n ").concat(isStage ? '' : "\n ".concat(blockSeparator, "\n \n \n ").concat(blockSeparator, "\n "), "\n ").concat(blockSeparator, "\n \n \n ").concat(blockSeparator, "\n \n \n ").concat(blockSeparator, "\n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n \n ").concat(blockSeparator, "\n \n \n ").concat(blockSeparator, "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(blockSeparator, "\n