mirror of
https://gitlab.com/skysthelimit.dev/selenite.git
synced 2025-06-16 10:32:08 -05:00
43426 lines
2.3 MiB
43426 lines
2.3 MiB
(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([["editor~embed~fullscreen~player"],{
|
||
|
||
/***/ "./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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ /*\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*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ .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} .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(0, 100%, 65%, 1);\n outline: none;\n border: none;\n transition: background-color 0.2s;\n} button::-moz-focus-inner {\n border: 0;\n} .action-menu_button_1qbot:hover {\n background: hsla(10, 85%, 65%, 1);\n} .action-menu_button_1qbot:active {\n padding: inherit;\n} .action-menu_button_1qbot.action-menu_coming-soon_2URvV:hover {\n background: hsla(30, 100%, 55%, 1);\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(0, 100%, 65%, 0.35);\n z-index: 46;\n transition: transform, box-shadow 0.5s;\n} .action-menu_main-button_3ccfy:hover {\n transform: scale(1.1);\n box-shadow: 0 0 0 6px hsla(0, 100%, 65%, 0.35);\n} .action-menu_main-icon_1ktMc {\n width: calc(2.75rem - 1rem);\n height: calc(2.75rem - 1rem);\n} [dir=\"rtl\"] .action-menu_main-icon_1ktMc {\n transform: scaleX(-1);\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(0, 60%, 50%, 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} .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} .action-menu_file-input_2nOL7 {\n display: none;\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} .action-menu_force-hidden_3SRnx .action-menu_more-buttons_3Bjkq {\n display: none; /* This property does not animate */\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} .action-menu_more-button_1fMGZ {\n width: 2.25rem;\n height: 2.25rem;\n background: hsla(0, 60%, 50%, 1);\n} .action-menu_more-icon_TJUQ7 {\n width: calc(2.25rem - 1rem);\n height: calc(2.25rem - 1rem);\n} .action-menu_coming-soon_2URvV .action-menu_more-icon_TJUQ7 {\n opacity: 0.5;\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*/ .action-menu_tooltip_3Bkh5 {\n background-color: hsla(10, 85%, 65%, 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} .action-menu_tooltip_3Bkh5:after {\n background-color: hsla(10, 85%, 65%, 1);\n} .action-menu_coming-soon-tooltip_3jthM {\n background-color: hsla(30, 100%, 55%, 1) !important;\n} .action-menu_coming-soon-tooltip_3jthM:after {\n background-color: hsla(30, 100%, 55%, 1) !important;\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} .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} .action-menu_tooltip_3Bkh5.place-left:after {\n margin-top: -0.25rem !important;\n right: -0.25rem !important;\n transform: rotate(45deg) !important;\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} .action-menu_tooltip_3Bkh5.place-top:after {\n margin-right: -0.25rem !important;\n bottom: -0.25rem !important;\n transform: rotate(135deg) !important;\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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .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} .inline-message_success_1jfE0 {\n color: hsla(0, 100%, 100%, 0.75);\n} .inline-message_info_E7dNO {\n color: hsla(0, 100%, 100%, 1);\n} .inline-message_warn_3DS5G {\n color: hsla(30, 100%, 70%, 1);\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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(215, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .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(215, 50%, 90%, 1));\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(0, 100%, 65%, 1);\n text-align: center;\n background: none;\n pointer-events: none;\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} [theme=\"dark\"] .selector_new-buttons_2qHDd:before {\n background: linear-gradient(rgba(94, 96, 97, 0),rgb(59, 59, 59));\n} .selector_new-buttons_2qHDd > button + button {\n margin-top: 0.75rem;\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} .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} .selector_list-item_3N_u7 {\n width: 5rem;\n height: 5rem;\n margin: 0.5rem auto;\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} .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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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} .audio-trimmer_selector_DDQ2- {\n cursor: pointer;\n} .audio-trimmer_trim-background_2VYXk {\n cursor: pointer;\n touch-action: none;\n} .audio-trimmer_trim-background-mask_mmZgf {\n border: 1px solid hsla(20, 100%, 45%, 1);\n opacity: 0.5;\n\n background: repeating-linear-gradient(\n 45deg,\n hsla(20, 100%, 55%, 1),\n hsla(20, 100%, 55%, 1) 10px,\n hsla(20, 100%, 45%, 1) 10px,\n hsla(20, 100%, 45%, 1) calc(2 * 10px)\n );\n} .audio-trimmer_selection-background_3LBuB {\n background: hsla(0, 100%, 65%, 1);\n opacity: 0.5;\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} .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} .audio-trimmer_trim-line_2cpoE {\n position: absolute;\n top: 0;\n width: 0px;\n height: 100%;\n border: 1px solid hsla(20, 100%, 45%, 1);\n} .audio-trimmer_selector_DDQ2- .audio-trimmer_trim-line_2cpoE {\n border: 1px solid hsla(0, 60%, 50%, 1);\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} .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(0, 100%, 65%, 1);\n border-top: none;\n border-bottom: none;\n border-right: none;\n} .audio-trimmer_right-handle_jMGnD {\n transform: scaleX(-1);\n} .audio-trimmer_selector_DDQ2- .audio-trimmer_left-handle_1Ure2 {\n left: -1px\n} .audio-trimmer_selector_DDQ2- .audio-trimmer_right-handle_jMGnD {\n right: -1px\n} .audio-trimmer_trimmer_3T33n .audio-trimmer_left-handle_1Ure2 {\n right: -1px\n} .audio-trimmer_trimmer_3T33n .audio-trimmer_right-handle_jMGnD {\n left: -1px\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} .audio-trimmer_trimmer_3T33n .audio-trimmer_trim-handle_1Obhp {\n filter: hue-rotate(150deg);\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} .audio-trimmer_top-trim-handle_1oF2r {\n top: calc(-30px + 3px);\n} .audio-trimmer_bottom-trim-handle_2FNda {\n bottom: calc(-30px + 3px);\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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(225, 15%, 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(215, 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(0, 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(225, 15%, 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(215, 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(0, 100%, 65%, 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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(0, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ body {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n} h2 {\n font-size: 1.5rem;\n font-weight: bold;\n} p {\n font-size: 1rem;\n line-height: 1.5em;\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*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ .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(0, 100%, 65%, 0.9));\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(225, 15%, 40%, 1);\n overflow: hidden;\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(38, 100%, 55%, 1);\n} [dir=\"rtl\"] .browser-modal_illustration_1qhRy {\n transform: scaleX(-1);\n} .browser-modal_illustration_1qhRy img {\n height: 80%;\n width: auto;\n} .browser-modal_body_1pvBQ {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n text-align: center;\n} /* Confirmation buttons at the bottom of the modal */ .browser-modal_button-row_15bbH {\n margin: 1.5rem 0;\n font-weight: bolder;\n text-align: right;\n display: flex;\n justify-content: center;\n} .browser-modal_button-row_15bbH button {\n border: 1px solid hsla(0, 100%, 65%, 1);\n border-radius: 0.25rem;\n padding: 0.5rem 2rem;\n background: hsla(0, 100%, 65%, 1);\n color: white;\n font-weight: bold;\n font-size: 0.875rem;\n cursor: pointer;\n} .browser-modal_faq-link-text_1e8bS {\n margin: 2rem 0 .5rem 0;\n font-size: .875rem;\n color: var(--text-primary, hsla(225, 15%, 40%, 1));\n} .browser-modal_faq-link_3leDC {\n color: hsla(0, 100%, 65%, 1);\n text-decoration: none;\n} .browser-modal_body_1pvBQ p {\n margin-bottom: 1em;\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",
|
||
"button-row": "browser-modal_button-row_15bbH",
|
||
"buttonRow": "browser-modal_button-row_15bbH",
|
||
"faq-link-text": "browser-modal_faq-link-text_1e8bS",
|
||
"faqLinkText": "browser-modal_faq-link-text_1e8bS",
|
||
"faq-link": "browser-modal_faq-link_3leDC",
|
||
"faqLink": "browser-modal_faq-link_3leDC"
|
||
};
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(215, 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(10, 85%, 65%, 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(10, 85%, 65%, 1);\n box-shadow: 0 0 0 4px hsla(10, 85%, 65%, 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(10, 85%, 65%, 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(215, 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(10, 85%, 65%, 1);\n border-bottom: 1px solid hsla(10, 85%, 40%, 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(225, 15%, 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(0, 100%, 65%, 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(0, 100%, 65%, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .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} .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} .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} .close-button_small_3BsRW {\n width: 0.825rem;\n height: 0.825rem;\n background-color: hsla(0, 100%, 65%, 1);\n color: hsla(0, 100%, 100%, 1);\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} .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} .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} .close-button_close-icon_HBCuO.close-button_orange_3I0rs {\n transform: rotate(45deg);\n transform: scale(1.4);\n} .close-button_small_3BsRW .close-button_close-icon_HBCuO {\n width: 50%;\n} .close-button_large_2oadS .close-button_close-icon_HBCuO {\n width: 0.75rem;\n height: 0.75rem;\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} .close-button_small_3BsRW .close-button_back-icon_tlcJm {\n width: 50%;\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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(30, 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(30, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .connection-modal_modal-content_2Xr41 {\n width: 480px;\n} .connection-modal_header_3Sf5c {\n background-color: hsla(163, 85%, 40%, 1);\n} .connection-modal_body_3YO9j {\n background: hsla(0, 100%, 100%, 1);\n} .connection-modal_label_2ci_1 {\n font-weight: 500;\n margin: 0 0 0.75rem;\n} .connection-modal_centered-row_LqTYH {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n} .connection-modal_peripheral-tile-pane_2pquH {\n overflow-y: auto;\n width: 100%;\n height: 100%;\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} .connection-modal_peripheral-tile-name_3-1ov {\n display: flex;\n align-items: center;\n} [dir=\"ltr\"] .connection-modal_peripheral-tile-image_2HAYt {\n margin-right: 0.5rem;\n} [dir=\"rtl\"] .connection-modal_peripheral-tile-image_2HAYt {\n margin-left: 0.5rem;\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} .connection-modal_peripheral-tile-name-label_Mhn3z {\n font-weight: bold;\n font-size: 0.625rem;\n} .connection-modal_peripheral-tile-name-text_3Gqj9 {\n font-size: 0.875rem;\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(0, 100%, 65%, 1);\n border: hsla(0, 100%, 65%, 1);\n color: white;\n cursor: pointer;\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} [dir=\"ltr\"] .connection-modal_signal-strength-meter_17QSz {\n margin-right: 1rem;\n} [dir=\"rtl\"] .connection-modal_signal-strength-meter_17QSz {\n margin-left: 1rem;\n} .connection-modal_signal-bar_3KRPL {\n width: 4px;\n border-radius: 4px;\n background-color: #DBDBDB;\n} .connection-modal_signal-bar_3KRPL:nth-of-type(1) { height: 25%; } .connection-modal_signal-bar_3KRPL:nth-of-type(2) { height: 50%; } .connection-modal_signal-bar_3KRPL:nth-of-type(3) { height: 75%; } .connection-modal_signal-bar_3KRPL:nth-of-type(4) { height: 100%; } .connection-modal_green-bar_2DtgQ {\n background-color: hsla(163, 85%, 40%, 1);\n} .connection-modal_radar-small_2Zlc3 {\n width: 40px;\n height: 40px;\n} [dir=\"ltr\"] .connection-modal_radar-small_2Zlc3 {\n margin-right: 0.5rem;\n} [dir=\"rtl\"] .connection-modal_radar-small_2Zlc3 {\n margin-left: 0.5rem;\n} .connection-modal_radar-big_1ZqZR {\n width: 120px;\n height: 120px;\n} .connection-modal_radar-spin_XTY3A {\n animation: connection-modal_spin_2AmoW 4s linear infinite;\n} [dir=\"ltr\"] .connection-modal_radar_1q6t4 {\n margin-right: .5rem;\n} [dir=\"rtl\"] .connection-modal_radar_1q6t4 {\n margin-left: .5rem;\n} @keyframes connection-modal_spin_2AmoW {\n 100% {\n transform: rotate(360deg);\n }\n} .connection-modal_peripheral-activity_1iEPn {\n position: relative;\n} .connection-modal_peripheral-activity-icon_2yzrQ {\n /* width: 80px;\n height: 80px; */\n} .connection-modal_connection-tip-icon_1OYH1 {\n position: absolute;\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(0, 100%, 65%, 1);\n border-radius: 100%;\n box-shadow: 0px 0px 0px 4px hsla(0, 100%, 65%, 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} @keyframes connection-modal_pulse-blue-ring_Bst8a {\n 100% {\n box-shadow: 0px 0px 0px 8px hsla(0, 100%, 65%, 0.15);\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(163, 85%, 40%, 1);\n border-radius: 100%;\n box-shadow: 0px 0px 0px 4px hsla(163, 85%, 40%, 0.25);\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} .connection-modal_bluetooth-centered-icon_2sUnm {\n position: absolute;\n padding: 5px 5px;\n background-color: hsla(0, 100%, 65%, 1);\n border-radius: 100%;\n box-shadow: 0px 0px 0px 2px hsla(0, 100%, 65%, 0.35);\n} .connection-modal_peripheral-tile-widgets_2czb9 {\n display: flex;\n align-items: center;\n} .connection-modal_activityArea_2nx-Z {\n height: 165px;\n background-color: hsla(0, 100%, 65%, 0.15);\n display: flex;\n justify-content: center;\n align-items: center;\n padding: .5rem;\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} .connection-modal_scratch-link-help-step_bWMuI {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n} [dir=\"ltr\"] .connection-modal_scratch-link-help-step_bWMuI {\n margin-left: 2.5rem;\n} [dir=\"rtl\"] .connection-modal_scratch-link-help-step_bWMuI {\n margin-right: 2.5rem;\n} .connection-modal_scratch-link-icon_dnIoA {\n max-width: 50px;\n} [dir=\"ltr\"] .connection-modal_help-step-image_h76rv {\n margin-right: 0.5rem;\n} [dir=\"rtl\"] .connection-modal_help-step-image_h76rv {\n margin-left: 0.5rem;\n} .connection-modal_help-step-number_2tyWJ {\n background: hsla(163, 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} [dir=\"ltr\"] .connection-modal_help-step-number_2tyWJ {\n margin-right: 0.5rem;\n} [dir=\"rtl\"] .connection-modal_help-step-number_2tyWJ {\n margin-left: 0.5rem;\n} .connection-modal_button-row_2RA0A {\n font-weight: bolder;\n text-align: center;\n display: flex;\n} .connection-modal_abort-connecting-icon_1KMRE {\n width: 10px;\n transform: rotate(45deg);\n} .connection-modal_connection-button_1paxF {\n padding: 0.6rem 0.75rem;\n border-radius: 0.5rem;\n background: hsla(0, 100%, 65%, 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} .connection-modal_connection-button_1paxF:disabled {\n background: hsla(0, 100%, 65%, 0.35);\n} .connection-modal_segmented-button_XNf80 {\n display: flex;\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} .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} [dir=\"ltr\"] .connection-modal_button-icon-right_1CANn {\n margin-left: 0.5rem;\n} [dir=\"rtl\"] .connection-modal_button-icon-right_1CANn {\n margin-right: 0.5rem;\n} [dir=\"ltr\"] .connection-modal_button-icon-left_2Ys4V {\n margin-right: 0.5rem;\n} [dir=\"rtl\"] .connection-modal_button-icon-left_2Ys4V {\n margin-left: 0.5rem;\n} /* reverse back arrow icon for RTL, don't reverse other connection icons */ [dir=\"rtl\"] .connection-modal_button-icon-back_3voGy {\n transform: scaleX(-1);\n} .connection-modal_red-button_MpXr- {\n background: hsla(20, 100%, 55%, 1);\n} .connection-modal_corner-buttons_2ciJI {\n display: flex;\n justify-content: space-between;\n width: 100%;\n padding: 0 1rem;\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} .connection-modal_bottom-area_AHeQ3 .connection-modal_bottom-area-item_YR2oh+.connection-modal_bottom-area-item_YR2oh {\n margin-top: 1rem;\n} .connection-modal_instructions_1CxAa {\n text-align: center;\n} .connection-modal_dots-row_39YWr {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n} .connection-modal_dots-holder_2kY6c {\n display: flex;\n padding: 0.25rem 0.1rem;\n border-radius: 1rem;\n background: hsla(0, 100%, 65%, 0.15);\n} .connection-modal_dots-holder-success_20EtT {\n background: hsla(163, 85%, 40%, 0.25);\n} .connection-modal_dots-holder-error_3iK2w {\n background: hsla(30, 100%, 55%, 0.25);\n} .connection-modal_dot_2GsnJ {\n width: 0.5rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n border-radius: 100%;\n} .connection-modal_inactive-step-dot_1x6LP {\n background: hsla(0, 100%, 65%, 0.35);\n} .connection-modal_active-step-dot_yLC0o {\n background: hsla(0, 100%, 65%, 1);\n} .connection-modal_success-dot_30FlH {\n background: hsla(163, 85%, 40%, 1);\n} .connection-modal_error-dot_1NdiS {\n background: hsla(30, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ /*\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*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ .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} [theme=\"dark\"] .context-menu_context-menu_2SJM- {\n background-color: var(--ui-primary, hsla(215, 100%, 95%, 1));\n} .context-menu_menu-item_3cioN {\n padding: 8px 12px;\n white-space: nowrap;\n cursor: pointer;\n transition: 0.1s ease;\n} .context-menu_menu-item_3cioN:hover {\n background: hsla(0, 100%, 65%, 1);\n color: white;\n} .context-menu_menu-item-bordered_29CJG {\n border-top: 1px solid var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n} [theme=\"dark\"] .context-menu_menu-item-bordered_29CJG {\n border-color: var(--ui-tertiary, hsla(215, 50%, 90%, 1));\n} .context-menu_menu-item-danger_1tJg0:hover {\n background: hsla(30, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ body {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n} h2 {\n font-size: 1.5rem;\n font-weight: bold;\n} p {\n font-size: 1rem;\n line-height: 1.5em;\n} .crash-message_crash-wrapper_25B61 {\n background-color: hsla(0, 100%, 65%, 1);\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n} [theme=\"dark\"] .crash-message_crash-wrapper_25B61 {\n background-color: #333;\n} .crash-message_body_1q0lu {\n width: 50%;\n color: white;\n text-align: center;\n} .crash-message_reloadButton_FoS7x {\n border: 1px solid hsla(0, 100%, 65%, 1);\n border-radius: 0.25rem;\n padding: 0.5rem 2rem;\n background: white;\n color: hsla(0, 100%, 65%, 1);\n font-weight: bold;\n font-size: 0.875rem;\n cursor: pointer;\n} .crash-message_header_1tEXc {\n font-size: 1.5em;\n font-weight: bold;\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .custom-procedures_modal-content_Zjko5 {\n width: 700px;\n margin: 50px auto; /* This modal is taller than most, reduce top margin */\n} .custom-procedures_body_SQBv6 {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n} [theme=\"dark\"] .custom-procedures_body_SQBv6 {\n color: var(--text-primary, hsla(225, 15%, 40%, 1));\n background: var(--ui-secondary, hsla(215, 75%, 95%, 1));\n} .custom-procedures_body_SQBv6 input[type=\"checkbox\"],\n.custom-procedures_body_SQBv6 input[type=\"radio\"] {\n margin: 3px;\n} /* Blocks workspace for custom procedure declaration editor */ .custom-procedures_workspace_1d2uW {\n min-height: 200px;\n position: relative;\n} .custom-procedures_workspace_1d2uW .injectionDiv{\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n} .custom-procedures_workspace_1d2uW .blocklySvg {\n background-color: var(--ui-primary, hsla(215, 100%, 95%, 1));\n} /* Row of \"card\" buttons for modifying custom procedures */ .custom-procedures_options-row_1PqLE {\n display: flex;\n justify-content: space-between;\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} [theme=\"dark\"] .custom-procedures_option-card_BtHt3 {\n background: var(--ui-tertiary, hsla(215, 50%, 90%, 1));\n} .custom-procedures_option-card_BtHt3:hover {\n border: 2px solid hsla(0, 100%, 65%, 1);\n box-shadow: 0px 0px 0px 4px hsla(0, 100%, 65%, 0.35);\n} .custom-procedures_option-card_BtHt3 + .custom-procedures_option-card_BtHt3 {\n margin-left: 1rem;\n} .custom-procedures_option-icon_2y7hh {\n max-height: 48px;\n margin-bottom: 0.5rem;\n} .custom-procedures_option-title_3v6va {\n font-weight: bold;\n} /* \"Run without screen refresh\" row */ .custom-procedures_checkbox-row_rPP8j {\n margin-top: 1rem;\n} /* Confirmation buttons at the bottom of the modal */ .custom-procedures_button-row_2jBu3 {\n margin-top: 1rem;\n font-weight: bolder;\n text-align: right;\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} .custom-procedures_button-row_2jBu3 button.custom-procedures_ok-button_2X0Vj {\n background: hsla(0, 100%, 65%, 1);\n border: hsla(0, 100%, 65%, 1);\n color: white;\n} [dir=\"ltr\"] .custom-procedures_button-row_2jBu3 button + button {\n margin-left: 0.5rem;\n} [dir=\"rtl\"] .custom-procedures_button-row_2jBu3 button + button {\n margin-right: 0.5rem;\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",
|
||
"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",
|
||
"checkbox-row": "custom-procedures_checkbox-row_rPP8j",
|
||
"checkboxRow": "custom-procedures_checkbox-row_rPP8j",
|
||
"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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ /* wrapper to allow for touch slop if we decide to add it */ .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} .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(0, 100%, 65%, 0.35);\n background-color: hsla(0, 100%, 65%, 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} .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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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} .dial_dial-container_ktOnA {\n position: relative;\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} .dial_dial-face_3NuSA {\n width: 100%;\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} .dial_gauge-path_1WoJ6 {\n fill: hsla(0, 100%, 65%, 0.35);\n stroke: hsla(0, 100%, 65%, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* Copied from scratch-paint color-picker.css. */ .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} .Popover-tipShape {\n fill: white;\n stroke: #ddd;\n} .direction-picker_button-row_1DF8U {\n display: flex;\n flex-direction: row;\n justify-content: center;\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} .direction-picker_icon-button_1y9Rd:active > img {\n width: 20px;\n height: 20px;\n transform: scale(1.15);\n} .direction-picker_icon-button_1y9Rd > img {\n transition: transform 0.1s;\n filter: grayscale(100%);\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(0, 100%, 65%, 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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(215, 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(0, 100%, 65%, 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(225, 15%, 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(225, 15%, 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(225, 15%, 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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(225, 15%, 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(215, 75%, 95%, 1));\n}\n\n.input_input-form_l9eYg:hover {\n border-color: hsla(0, 100%, 65%, 1);\n}\n\n[theme=\"dark\"] .input_input-form_l9eYg:hover {\n border-color: #333;\n}\n\n.input_input-form_l9eYg:focus {\n border-color: hsla(0, 100%, 65%, 1);\n box-shadow: 0 0 0 0.25rem hsla(0, 100%, 65%, 0.35);\n}\n\n[theme=\"dark\"] .input_input-form_l9eYg:focus {\n border-color: #333;\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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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} .green-flag_green-flag_1kiAo:hover {\n background-color: hsla(0, 100%, 65%, 0.15);\n} .green-flag_green-flag_1kiAo.green-flag_is-active_2oExT {\n background-color: hsla(0, 100%, 65%, 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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(215, 100%, 95%, 1));\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(215, 50%, 90%, 1));\n color: hsla(225, 15%, 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(225, 15%, 40%, 1));\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(215, 100%, 95%, 1));\n}\n\n[theme=\"dark\"] .gui_tab_27Unf:hover {\n background-color: var(--ui-secondary, hsla(215, 75%, 95%, 1));\n}\n\n.gui_tab_27Unf.gui_is-selected_sHAiu {\n height: 90%;\n color: hsla(0, 100%, 65%, 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(215, 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(0, 100%, 65%, 1);\n\n border: 1px solid hsla(0, 100%, 65%, 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",
|
||
"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",
|
||
"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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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(0, 100%, 65%, 1);\n border-radius: 0.5rem;\n} .icon-button_container_278u5 + .icon-button_container_278u5 {\n margin-top: 1.25rem;\n} .icon-button_title_36ChS {\n margin-top: 0.5rem;\n text-align: center;\n} .icon-button_disabled_2HD_J {\n opacity: 0.5;\n pointer-events: none;\n} .icon-button_container_278u5:active {\n background-color: hsla(0, 100%, 65%, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ /* Position the language select over the language icon, and make it transparent */ .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(225, 15%, 40%, 1);\n background: hsla(0, 100%, 100%, 1);\n} [theme=\"dark\"] .language-selector_language-select_8Vfnm {\n color: hsla(0, 100%, 100%, 1);\n background: var(--ui-primary, hsla(215, 100%, 95%, 1));\n} [dir=\"ltr\"] .language-selector_language-select_8Vfnm {\n right: 0;\n} [dir=\"rtl\"] .language-selector_language-select_8Vfnm {\n left: 0;\n} .language-selector_language-select_8Vfnm option {\n opacity: 1;\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .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(225, 15%, 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} [theme=\"dark\"] .library-item_library-item_1DcMO {\n background: var(--ui-primary, hsla(215, 100%, 95%, 1));\n} .library-item_library-item-extension_3xus9 {\n align-self: stretch;\n} .library-item_library-item_1DcMO:hover {\n border-width: 2px;\n border-color: hsla(0, 100%, 65%, 1);\n} .library-item_hidden_1ILc7 {\n display: none;\n} .library-item_disabled_1-aDH {\n opacity: .5;\n cursor: auto;\n} .library-item_disabled_1-aDH:hover {\n border-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n} .library-item_library-item-image-container-wrapper_x4EWB {\n height: 100px;\n width: 100%;\n position: relative;\n} .library-item_library-item-image-container_3dqjX {\n position: absolute;\n height: 100px;\n width: 100%;\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(163, 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} [dir=\"ltr\"] .library-item_library-item-inset-image-container_3PLJ1 {\n margin-left: 1rem;\n} [dir=\"rtl\"] .library-item_library-item-inset-image-container_3PLJ1 {\n margin-right: 1rem;\n} .library-item_library-item-image_2bORn {\n max-width: 100%;\n max-height: 100%;\n} .library-item_library-item-inset-image_17Tmt {\n width: 2.5rem;\n} .library-item_library-item-name_2qMXu {\n width: 80%;\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: nowrap;\n min-width: 0;\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} .library-item_featured-image-container_1KIHG {\n position: relative;\n} .library-item_featured-image_2gwZ6 {\n width: 100%;\n} .library-item_featured-text_2KFel {\n font-weight: bold;\n padding: 10px;\n /* height: 140px; */\n width: 300px;\n} [dir=\"ltr\"] .library-item_featured-extension-text_22A1k {\n text-align: left;\n padding-left: 1.25rem;\n} [dir=\"rtl\"] .library-item_featured-extension-text_22A1k {\n text-align: right;\n padding-right: 1.25rem;\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} .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(225, 15%, 40%, 1));\n opacity: 0.75;\n} [dir=\"ltr\"] .library-item_featured-extension-metadata_3D8E8 {\n text-align: left;\n} [dir=\"rtl\"] .library-item_featured-extension-metadata_3D8E8 {\n text-align: right;\n} .library-item_featured-extension-requirement_2u2IO {\n width: 100%;\n display: flex;\n flex-direction: column;\n} .library-item_featured-extension-collaboration_2dGS9 {\n width: 100%;\n display: flex;\n flex-direction: column;\n} .library-item_featured-extension-metadata-detail_1M9BV {\n height: 100%;\n padding-top: 0.4rem;\n font-weight: bold;\n} .library-item_featured-extension-metadata-detail_1M9BV img{\n margin-right: 0.25rem;\n} .library-item_coming-soon-text_30OPh {\n position: absolute;\n background-color: hsla(30, 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} [dir=\"ltr\"] .library-item_coming-soon-text_30OPh {\n transform: translate(calc(2 * 0.5rem), calc(2 * 0.5rem));\n} [dir=\"rtl\"] .library-item_coming-soon-text_30OPh {\n transform: translate(calc(-2 * 0.5rem), calc(2 * 0.5rem));\n}\n", ""]);
|
||
|
||
// exports
|
||
exports.locals = {
|
||
"library-item": "library-item_library-item_1DcMO",
|
||
"libraryItem": "library-item_library-item_1DcMO",
|
||
"library-item-extension": "library-item_library-item-extension_3xus9",
|
||
"libraryItemExtension": "library-item_library-item-extension_3xus9",
|
||
"hidden": "library-item_hidden_1ILc7",
|
||
"disabled": "library-item_disabled_1-aDH",
|
||
"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-image": "library-item_library-item-image_2bORn",
|
||
"libraryItemImage": "library-item_library-item-image_2bORn",
|
||
"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",
|
||
"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",
|
||
"coming-soon-text": "library-item_coming-soon-text_30OPh",
|
||
"comingSoonText": "library-item_coming-soon-text_30OPh"
|
||
};
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\n\n.library_library-scroll-grid_1jyXm {\n display: flex;\n justify-content: flex-start;\n align-content: flex-start;\n align-items: flex-start;\n background: var(--ui-secondary, hsla(215, 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% - 3.125rem);\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(0, 100%, 65%, 0.35);\n padding: 0 1rem;\n font-size: .875rem;\n}\n\n.library_filter-bar-item_99aoX {\n margin-right: .75rem;\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_divider_2xD3D {\n transform: scaleY(1.39);\n height: 2.5rem;\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-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",
|
||
"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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /*\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*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ .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(0, 100%, 65%, 1);\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n text-align: center;\n color: white;\n} [theme=\"dark\"] .loader_background_2DPrW {\n background-color: #333;\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} .loader_block-animation_12MqO {\n width: 125px;\n height: 150px;\n margin: 50px auto 0px;\n} .loader_block-animation_12MqO img {\n display: block;\n position: relative;\n height: 30%;\n margin-top: -4px;\n} .loader_top-block_3P7pK {\n animation: loader_top-slide-in_8ngR8 1.5s ease infinite;\n} .loader_middle-block_CKcTg {\n animation: loader_middle-slide-in_In2DU 1.5s ease infinite;\n} .loader_bottom-block_1-3rO {\n animation: loader_bottom-slide-in_2DZ1B 1.5s ease infinite;\n} [dir=\"rtl\"] .loader_top-block_3P7pK {\n animation: loader_top-slide-in-rtl_1vHi4 1.5s ease infinite;\n} [dir=\"rtl\"] .loader_middle-block_CKcTg {\n animation: loader_middle-slide-in-rtl_21ALw 1.5s ease infinite;\n} [dir=\"rtl\"] .loader_bottom-block_1-3rO {\n animation: loader_bottom-slide-in-rtl_3kdB0 1.5s ease infinite;\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} @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} @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} @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} @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} @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} .loader_title_1tlje {\n font-size: 2rem;\n font-weight: bold;\n margin: 0.75rem 0;\n} .loader_message-container-outer_3oT0S {\n height: 30px;\n overflow: hidden;\n} .loader_message-container-inner_1L7LX {\n transition: transform 0.5s;\n} .loader_message_3yQvj {\n height: 20px;\n margin: 5px 0;\n} .loader_tw-progress-outer_2BGnX {\n position: relative;\n width: 250px;\n height: 5px;\n border: 1px solid white;\n margin: auto;\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}\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .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} .author-info_avatar_31Mo8 {\n margin-right: .5625rem;\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} .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} .author-info_username_2Ov2- {\n font-weight: bold;\n} .author-info_link_3EUX3 {\n text-decoration: none;\n color: hsla(0, 100%, 100%, 1) !important;\n} .author-info_link_3EUX3:hover {\n text-decoration: underline;\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .community-button_community-button_2Lo_g {\n box-shadow: 0 0 0 1px var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\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/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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ /*\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*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ .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(0, 100%, 65%, 1);\n color: hsla(0, 100%, 100%, 1);\n} [theme=\"dark\"] .menu-bar_menu-bar_JcuHF {\n background-color: #333;\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} .menu-bar_scratch-logo_2uReV {\n height: 1.6rem;\n vertical-align: middle;\n} .menu-bar_scratch-logo_2uReV.menu-bar_clickable_1g3uo {\n cursor: pointer;\n} .menu-bar_language-icon_2DZV7 {\n height: 1.5rem;\n vertical-align: middle;\n} .menu-bar_language-caret_16tau {\n margin: 0 .125rem;\n} .menu-bar_language-menu_2JEDx {\n box-sizing: border-box;\n display: inline-flex;\n width: 3rem;\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} .menu-bar_menu-bar-item_oLDa-.menu-bar_hoverable_c6WFB {\n cursor: pointer;\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} .menu-bar_menu-bar-item_oLDa-.menu-bar_growable_1sHWN {\n max-width: 12rem;\n flex: 1;\n} .menu-bar_title-field-growable_3qr4G {\n flex-grow: 1;\n width: 2rem;\n} .menu-bar_file-group_1_CHX {\n display: flex;\n flex-direction: row;\n align-items: center;\n} .menu-bar_file-group_1_CHX .menu-bar_menu-bar-item_oLDa- {\n padding: 0 0.75rem;\n} .menu-bar_menu-bar-item_oLDa-.menu-bar_language-menu_2JEDx {\n padding: 0 0.5rem;\n} .menu-bar_menu-bar-menu_239MD {\n margin-top: 3rem;\n z-index: 491;\n} .menu-bar_feedback-link_1BnAR {\n color: hsla(0, 100%, 65%, 1) !important;\n text-decoration: none;\n} [theme=\"dark\"] .menu-bar_feedback-link_1BnAR {\n color: #333 !important;\n} .menu-bar_feedback-button_2rEcj {\n background-color: hsla(0, 100%, 100%, 1);\n height: 34px;\n} .menu-bar_divider_2VFCm {\n margin: 0 .5rem;\n height: 34px;\n} .menu-bar_author-info_22Nub {\n margin-left: .25rem;\n margin-right: .6875rem;\n} .menu-bar_menu-bar-button_3IDN0 {\n height: 2rem;\n} .menu-bar_remix-button_2LQQc {\n background-color: hsla(163, 85%, 40%, 1)\n} .menu-bar_remix-button-icon_2E93U {\n height: 1.25rem;\n} .menu-bar_coming-soon_3yU1L >:not(.menu-bar_coming-soon-tooltip_20GhI) {\n opacity: 0.5;\n} .menu-bar_account-info-group_MeJZP {\n display: flex;\n flex-direction: row;\n align-items: center;\n} .menu-bar_account-info-group_MeJZP .menu-bar_menu-bar-item_oLDa- {\n padding: 0 0.75rem;\n} .menu-bar_mystuff-icon_3DtcD {\n margin: 0 .25rem;\n height: 1rem;\n} .menu-bar_help-icon_3Xtrt {\n margin-right: 0.35rem;\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} .menu-bar_profile-icon_2bJkI {\n margin: 0 .25rem;\n width: 2rem;\n border-radius: calc(0.5rem / 2);\n} .menu-bar_dropdown-caret-icon_FkdUe {\n width: 0.5rem;\n height: 0.5rem;\n} [dir=\"ltr\"] .menu-bar_dropdown-caret-icon_FkdUe {\n margin-left: .5rem;\n} [dir=\"rtl\"] .menu-bar_dropdown-caret-icon_FkdUe {\n margin-right: .5rem;\n} .menu-bar_disabled_3x5sy {\n opacity: 0.5;\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} .menu-bar_mystuff_3RiSb > a:hover {\n background-size: 50%;\n} .menu-bar_mystuff_3RiSb > a {\n background-image: url(\"/images/mystuff.png\");\n} .menu-bar_about-icon_dZI7K {\n height: 1.25rem;\n margin: 0.5rem;\n vertical-align: middle;\n} /* tw: styles to override <a> styles */ .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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ /*\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*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ /*\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*/ .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} .project-title-input_title-field_en5Gd {\n color: hsla(0, 100%, 100%, 1);\n font-weight: bold;\n font-size: .8rem;\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} .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} .project-title-input_title-field_en5Gd:hover {\n background-color: hsla(0, 100%, 100%, 0.5);\n} [theme=\"dark\"] .project-title-input_title-field_en5Gd:hover {\n background-color: rgba(0, 0, 0, 0.5);\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(225, 15%, 40%, 1));\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .share-button_share-button_Nxxf0 {\n background: hsla(30, 100%, 55%, 1);\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", ""]);
|
||
|
||
// exports
|
||
exports.locals = {
|
||
"share-button": "share-button_share-button_Nxxf0",
|
||
"shareButton": "share-button_share-button_Nxxf0",
|
||
"share-button-is-shared": "share-button_share-button-is-shared_1tjKq",
|
||
"shareButtonIsShared": "share-button_share-button-is-shared_1tjKq"
|
||
};
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* this class must contain \"see-inside-button\" somewhere for the s3 dev tools to be able to reinject itself */ /* https://github.com/griffpatch/Scratch3-Dev-Tools/blob/0.2.4/inject3.js#L1804-L1807 */ .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} .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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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(0, 100%, 65%, 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} [theme=\"dark\"] .menu_menu_3k7QT {\n background-color: #333;\n} .menu_menu_3k7QT.menu_left_dujsV {\n right: 0;\n} .menu_menu_3k7QT.menu_right_3PQ4S {\n left: 0;\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} .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} .menu_menu-item_3EwYA.menu_hoverable_3u9dt {\n cursor: pointer;\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .meter_green_oUPv2 {\n fill: rgb(171, 220, 170);\n stroke: rgb(174, 211, 168);\n} .meter_yellow_3uz-j {\n fill: rgb(251, 219, 130);\n stroke: rgb(239, 212, 134);\n} .meter_red_1aMUm {\n fill: rgb(251, 194, 142);\n stroke: rgb(235, 189, 142);\n} .meter_mask-container_11m_n {\n position: relative;\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(215, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ /*\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*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ .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(0, 100%, 65%, 0.9));\n} .modal_modal-content_1h3ll * {\n box-sizing: border-box;\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(225, 15%, 40%, 1);\n overflow: hidden;\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(215, 75%, 95%, 1));\n\n /* Default modal resets */\n margin: 0;\n border: none;\n border-radius: 0;\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*/ .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(0, 100%, 65%, 1);\n \n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 1rem;\n font-weight: normal;\n} [theme=\"dark\"] .modal_header_1h7ps {\n background-color: #333;\n} [theme=\"dark\"] .modal_full-screen_FA4cr .modal_header_1h7ps {\n background-color: hsla(0, 100%, 65%, 1);\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} [dir=\"ltr\"] .modal_header-image_2KMDd {\n margin-right: 0.5rem;\n} [dir=\"rtl\"] .modal_header-image_2KMDd {\n margin-left: 0.5rem;\n} .modal_header-item-filter_3W-ah {\n display: flex;\n flex-basis: 20rem;\n justify-content: flex-start;\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} [dir=\"ltr\"] .modal_header-item-title_tLOU5 {\n margin: 0 -20rem 0 0;\n} [dir=\"rtl\"] .modal_header-item-title_tLOU5 {\n margin: 0 0 0 -20rem;\n} .modal_full-screen_FA4cr [dir=\"ltr\"] .modal_header-item-title_tLOU5 {\n margin: 0 0 0 -20rem;\n} .modal_full-screen_FA4cr [dir=\"rtl\"] .modal_header-item-title_tLOU5 {\n margin: 0 -20rem 0 0;\n} .modal_header-item-close_2XDeL {\n flex-basis: 20rem;\n justify-content: flex-end;\n z-index: 1;\n} .modal_full-screen_FA4cr .modal_header-item-close_2XDeL {\n order: -1;\n justify-content: flex-start;\n} .modal_back-button_2ej6v {\n font-weight: normal;\n padding-right: 0;\n padding-left: 0;\n} [dir=\"rtl\"] .modal_back-button_2ej6v img {\n transform: scaleX(-1);\n} .modal_header-item-help_UZFrJ {\n padding: 0;\n z-index: 1;\n} [dir=\"ltr\"] .modal_header-item-help_UZFrJ {\n margin-right: -4.75rem;\n} [dir=\"rtl\"] .modal_header-item-help_UZFrJ {\n margin-left: -4.75rem;\n} .modal_help-button_dLhZu {\n font-weight: normal;\n font-size: 0.75rem;\n} [dir=\"ltr\"] .modal_help-button_dLhZu {\n padding-right: 0;\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",
|
||
"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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(215, 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(225, 15%, 40%, 1); /* tw: do not look different in dark mode */\n width: 100%;\n}\n\n.monitor_list-body_2OFZ6 {\n background: hsla(215, 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 height: calc(100% - 44px);\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(225, 15%, 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 color: hsla(225, 15%, 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/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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .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(300, 53%, 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} .play-button_play-button_3MkN- {\n position: absolute;\n top: .5rem;\n z-index: auto;\n} .play-button_play-button_3MkN-:focus {\n outline: none;\n} .play-button_play-icon_CX5nH {\n width: 50%;\n} [dir=\"ltr\"] .play-button_play-button_3MkN- {\n right: .5rem;\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/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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .prompt_modal-content_1BfWj {\n width: 360px;\n} .prompt_body_18Z-I {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n} [theme=\"dark\"] .prompt_body_18Z-I {\n color: var(--text-primary, hsla(225, 15%, 40%, 1));\n background: var(--ui-primary, hsla(215, 100%, 95%, 1));\n} .prompt_body_18Z-I input[type=\"checkbox\"],\n.prompt_body_18Z-I input[type=\"radio\"] {\n margin: 3px;\n} .prompt_label_tWjYZ {\n font-weight: 500;\n margin: 0 0 0.75rem;\n} .prompt_disabled-label_3Y-7h {\n opacity: 0.5;\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(225, 15%, 40%, 0.75);\n font-size: .875rem;\n} [theme=\"dark\"] .prompt_variable-name-text-input_1iu8- {\n background: var(--ui-secondary, hsla(215, 75%, 95%, 1));\n color: white;\n} .prompt_info-message_-WcQL {\n font-weight: normal;\n font-size: .875rem;\n margin-bottom: 1.5rem;\n text-align: center;\n} .prompt_options-row_36JmB {\n display: flex;\n font-weight: normal;\n justify-content: space-between;\n margin-bottom: 1.5rem;\n} .prompt_button-row_3Wc5Z {\n font-weight: bolder;\n text-align: right;\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} .prompt_button-row_3Wc5Z button.prompt_ok-button_3QFdD {\n background: hsla(0, 100%, 65%, 1);\n border: hsla(0, 100%, 65%, 1);\n color: white;\n} [dir=\"ltr\"] .prompt_button-row_3Wc5Z button + button {\n margin-left: 0.5rem;\n} [dir=\"rtl\"] .prompt_button-row_3Wc5Z button + button {\n margin-right: 0.5rem;\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} [theme=\"dark\"] .prompt_cloud-option_1jjSa {\n border-color: rgba(255, 255, 255, .25);\n} .prompt_cloud-option-text_P1r8J {\n opacity: .5;\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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(225, 15%, 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(225, 15%, 40%, 1);\n background: hsla(215, 75%, 95%, 1);\n border-color: hsla(215, 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(0, 100%, 65%, 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(0, 100%, 65%, 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(0, 100%, 65%, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .record-modal_modal-content_2N7lD {\n width: 600px;\n} .record-modal_body_2VO4l {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n} [theme=\"dark\"] .record-modal_body_2VO4l {\n background: var(--ui-secondary, hsla(215, 75%, 95%, 1));\n} .record-modal_visualization-container_1joZn {\n display: flex;\n justify-content: space-around;\n} .record-modal_meter-container_3OqCJ, .record-modal_waveform-container__ay3Q {\n background: var(--ui-primary, hsla(215, 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} .record-modal_meter-container_3OqCJ {\n margin-right: 5px;\n height: 180px;\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} .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} .record-modal_playing-text_1tknI {\n color: hsla(0, 100%, 65%, 1);\n} .record-modal_recording-text_2LS7_ {\n color: hsla(20, 100%, 55%, 1);\n} .record-modal_main-button-row_37Zjz {\n display: flex;\n justify-content: space-around;\n margin-top: 15px;\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} .record-modal_main-button-row_37Zjz button:disabled {\n opacity: 0.25;\n} .record-modal_main-button-row_37Zjz button:active, .record-modal_main-button-row_37Zjz button:focus {\n outline: none;\n} .record-modal_button-row_1hdGe {\n font-weight: bolder;\n text-align: right;\n display: flex;\n justify-content: space-between;\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(0, 100%, 65%, 1);\n} .record-modal_button-row_1hdGe button.record-modal_ok-button_3pudV {\n background: hsla(0, 100%, 65%, 1);\n border: hsla(0, 100%, 65%, 1);\n color: white;\n} .record-modal_button-row_1hdGe button + button {\n margin-left: 0.5rem;\n} .record-modal_main-button_36gPw {\n text-align: center;\n} .record-modal_record-button_3mcC8 {\n overflow: visible;\n} .record-modal_record-button-circle_kXioI {\n fill: hsla(20, 100%, 55%, 1);\n stroke: hsla(20, 100%, 45%, 1);\n} .record-modal_record-button-circle-outline_1ycFu {\n fill: hsla(20, 100%, 55%, 1);\n opacity: 0.2;\n transition: 0.1s;\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .slider-prompt_modal-content_2vVm4 {\n width: 360px;\n} .slider-prompt_body_2ZkXL {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n} [theme=\"dark\"] .slider-prompt_body_2ZkXL {\n color: var(--text-primary, hsla(225, 15%, 40%, 1));\n background: var(--ui-primary, hsla(215, 100%, 95%, 1));\n} .slider-prompt_label_cYsiu {\n font-weight: 500;\n margin: 0 0 0.75rem;\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(225, 15%, 40%, 0.75);\n font-size: .875rem;\n} [theme=\"dark\"] .slider-prompt_min-input_1IxXX, [theme=\"dark\"] .slider-prompt_max-input_1Nwbv {\n background: var(--ui-secondary, hsla(215, 75%, 95%, 1));\n color: white;\n} .slider-prompt_button-row_32aCX {\n font-weight: bolder;\n text-align: right;\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} .slider-prompt_button-row_32aCX button.slider-prompt_ok-button_vLj7c {\n background: hsla(0, 100%, 65%, 1);\n border: hsla(0, 100%, 65%, 1);\n color: white;\n} [dir=\"ltr\"] .slider-prompt_button-row_32aCX button + button {\n margin-left: 0.5rem;\n} [dir=\"rtl\"] .slider-prompt_button-row_32aCX button + button {\n margin-right: 0.5rem;\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .sound-editor_editor-container_iUSW- {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n padding: calc(2 * 0.5rem);\n} .sound-editor_row_3iFzH {\n display: flex;\n flex-direction: row;\n align-items: center;\n} [dir=\"rtl\"] .sound-editor_row-reverse_1qAAx {\n flex-direction: row-reverse;\n} .sound-editor_row_3iFzH + .sound-editor_row_3iFzH {\n margin-top: calc(2 * 0.5rem);\n} .sound-editor_input-group_2hWiH {\n display: flex;\n flex-direction: row;\n} [dir=\"ltr\"] .sound-editor_input-group_2hWiH + .sound-editor_input-group_2hWiH {\n margin-left: calc(2 * 0.5rem);\n} [dir=\"rtl\"] .sound-editor_input-group_2hWiH + .sound-editor_input-group_2hWiH {\n margin-right: calc(2 * 0.5rem);\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} [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} [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} .sound-editor_name-input_2Msmq {\n width: 100%;\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} .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} [theme=\"dark\"] .sound-editor_button_1_6Li {\n background-color: var(--ui-primary, hsla(215, 100%, 95%, 1));\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} .sound-editor_round-button-outer_2hM-8 {\n display: flex;\n align-items: center;\n height: 100%;\n} .sound-editor_round-button_3NLcW {\n height: 3rem;\n width: 3rem;\n outline: none;\n background: hsla(0, 100%, 65%, 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} [theme=\"dark\"] .sound-editor_round-button_3NLcW {\n border-color: transparent;\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} [dir=\"rtl\"] .sound-editor_undo-icon_So0sO, [dir=\"rtl\"] .sound-editor_redo-icon_XGcr5 {\n transform: scaleX(-1);\n} .sound-editor_trim-button_lSENI {\n display: flex;\n align-items: center;\n color: var(--text-primary, hsla(225, 15%, 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} [dir=\"ltr\"] .sound-editor_trim-button_lSENI {\n margin-left: 1rem;\n} [dir=\"rtl\"] .sound-editor_trim-button_lSENI {\n margin-right: 1rem;\n} .sound-editor_trim-button_lSENI > img {\n width: 1.25rem;\n} .sound-editor_effects_ywFdO {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n} .sound-editor_effect-button_2zuzT {\n flex-basis: 60px;\n color: var(--text-primary, hsla(225, 15%, 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} .sound-editor_effect-button_2zuzT + .sound-editor_effect-button_2zuzT {\n margin: 0;\n} .sound-editor_effect-button_2zuzT img {\n width: 1.25rem;\n height: 1.25rem;\n margin-bottom: -0.375rem;\n} .sound-editor_tool-button_2iNn9 {\n flex-basis: 60px;\n color: var(--text-primary, hsla(225, 15%, 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} .sound-editor_tool-button_2iNn9 + .sound-editor_tool-button_2iNn9 {\n margin: 0;\n} .sound-editor_tool-button_2iNn9 img {\n width: 4rem;\n height: 1.5rem;\n margin-bottom: -0.375rem;\n} [dir=\"rtl\"] .sound-editor_flip-in-rtl_3eOfH img {\n transform: scaleX(-1);\n} [dir=\"ltr\"] .sound-editor_button-group_SFPoV {\n margin-left: 1rem;\n} [dir=\"rtl\"] .sound-editor_button-group_SFPoV {\n margin-right: 1rem;\n} .sound-editor_button-group_SFPoV {\n display: flex;\n} .sound-editor_button-group_SFPoV .sound-editor_button_1_6Li {\n border-radius: 0;\n} [dir=\"ltr\"] .sound-editor_button-group_SFPoV .sound-editor_button_1_6Li {\n border-left: none;\n} [dir=\"rtl\"] .sound-editor_button-group_SFPoV .sound-editor_button_1_6Li {\n border-right: none;\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} [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} [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} [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} .sound-editor_button_1_6Li:disabled > img {\n opacity: 0.25;\n} .sound-editor_info-row_33dW3 {\n display: flex;\n justify-content: space-between;\n margin-top: calc(2 * 0.5rem);\n} .sound-editor_duration_Iq75P {\n font-weight: bold;\n} .sound-editor_advanced-info_IEJgw {\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} .sound-editor_stereo_1cklI {\n background-color: rgba(145, 145, 255, 0.3);\n border-color: rgb(145, 145, 255)\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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} .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} .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} .spinner_small_1RsxO {\n width: .5rem;\n height: .5rem;\n} .spinner_small_1RsxO::before, .spinner_small_1RsxO::after {\n width: .5rem;\n height: .5rem;\n} .spinner_large_M0-Ov {\n width: 2.5rem;\n height: 2.5rem;\n} .spinner_large_M0-Ov::before, .spinner_large_M0-Ov::after {\n width: 2.5rem;\n height: 2.5rem;\n} @keyframes spinner_spin_1ge20 {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n} .spinner_spinner_2Op8D.spinner_success_2bEvy {\n border-color: hsla(10, 85%, 65%, 0.35);\n} .spinner_spinner_2Op8D.spinner_success_2bEvy::after {\n border-top-color: hsla(10, 85%, 65%, 1);\n} .spinner_spinner_2Op8D.spinner_warn_3KZAv {\n border-color: hsla(30, 100%, 55%, 0.25);\n} .spinner_spinner_2Op8D.spinner_warn_3KZAv::after {\n border-top-color: hsla(30, 100%, 55%, 1);\n} .spinner_spinner_2Op8D.spinner_info_2g2-l {\n border-color: hsla(0, 100%, 100%, 0.25);\n} .spinner_spinner_2Op8D.spinner_info_2g2-l::after {\n border-top-color: hsla(0, 100%, 100%, 1);\n} .spinner_spinner_2Op8D.spinner_primary_32PLs {\n border-color: hsla(0, 100%, 65%, 0.35);\n} .spinner_spinner_2Op8D.spinner_primary_32PLs::after {\n border-top-color: hsla(0, 100%, 65%, 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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(225, 15%, 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(215, 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(0, 100%, 65%, 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(0, 100%, 65%, 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(0, 100%, 65%, 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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(225, 15%, 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(0, 100%, 65%, 0.35);\n border: 2px solid hsla(0, 100%, 65%, 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(215, 100%, 95%, 1));\n}\n\n.sprite-selector-item_sprite-selector-item_kQm-i:hover {\n border: 2px solid hsla(0, 100%, 65%, 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(215, 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(225, 15%, 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(0, 100%, 65%, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ /*\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*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ .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(215, 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} .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} .sprite-selector_sprite_21WnR {\n height: 100%;\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} .sprite-selector_scroll-wrapper-dragging_2QZJG {\n background-color: hsla(0, 100%, 77%, 1);\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} .sprite-selector_add-button_1XCwG {\n position: absolute;\n bottom: 0.75rem;\n} [dir=\"ltr\"] .sprite-selector_add-button_1XCwG {\n right: 1rem;\n} [dir=\"rtl\"] .sprite-selector_add-button_1XCwG {\n left: 1rem;\n} .sprite-selector_raised_1fkrL {\n background-color: hsla(0, 100%, 77%, 1);\n transition: all 0.25s ease;\n} .sprite-selector_raised_1fkrL:hover {\n background-color: hsla(0, 100%, 77%, 1);\n transform: scale(1.05);\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(0, 100%, 77%, 1);\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} .sprite-selector_receivedBlocks_24JkN {\n animation: sprite-selector_glowing_3IS0u 250ms;\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} .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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(215, 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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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(225, 15%, 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(215, 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(0, 100%, 65%, 1);\n box-shadow: 0px 0px 0px 4px hsla(0, 100%, 65%, 0.35);\n}\n\n.stage-selector_stage-selector_3oWOr:hover {\n border-color: hsla(0, 100%, 65%, 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(225, 15%, 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(215, 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(225, 15%, 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(0, 100%, 65%, 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(225, 15%, 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(225, 15%, 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(0, 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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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/* #E5F0FF */\n\n/* #E9F1FC */\n\n/* #D9E3F2 */\n\n/* 90% transparent version of motion-primary */\n\n/* #FFFFFF */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 25% transparent version of ui-white */\n\n/* 15% transparent version of black */\n\n/* #575E75 */\n\n/* 35% transparent version of motion-primary */\n\n/* 15% transparent version of motion-primary */\n\n/* opt-in theme overrides */\n\n/* #FF661A */\n\n/* #E64D00 */\n\n/* #CF63CF */\n\n/* #BD42BD */\n\n/* #FFAB19 */\n\n/* #FF8C1A */\n\n/* #0FBD8C */\n\n/* #0FBD8C */\n\n/* #FF8C1A */\n\n/* #FFB366 */\n\n/* #FF8C1A */\n\n/* 35% transparent version of extensions-primary */\n\n/* opaque version of extensions-transparent, on white bg */\n\n/* lighter than motion-primary */\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_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(0, 100%, 65%, 0.35);\n border: 2px solid hsla(0, 100%, 65%, 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_",
|
||
"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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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} .stop-all_stop-all_1Y8P9:hover {\n background-color: hsla(0, 100%, 65%, 0.15);\n} .stop-all_stop-all_1Y8P9 {\n opacity: 0.5;\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ .tag-button_tag-button_nBLRM {\n padding: .625rem 1rem;\n background: hsla(0, 100%, 65%, 1);\n border-radius: 1.375rem;\n color: hsla(0, 100%, 100%, 1);\n height: 2.5rem;\n} .tag-button_tag-button-icon_26hvC {\n max-width: 1rem;\n max-height: 1rem;\n} .tag-button_active_2stEz {\n background: hsla(30, 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/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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ body {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n} h2 {\n font-size: 1.5rem;\n font-weight: bold;\n} p {\n font-size: 1rem;\n line-height: 1.5em;\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*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ /* from scratch-www */ .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(0, 100%, 65%, 0.9));\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(225, 15%, 40%, 1));\n overflow: hidden;\n} .telemetry-modal_illustration_2xM6I {\n width: 100%;\n height: 123px;\n background-color: hsla(0, 100%, 65%, 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} .telemetry-modal_body_1ZKWV {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n} .telemetry-modal_privacy-policy-link_3wFww {\n color: hsla(0, 100%, 65%, 1);\n text-decoration: none;\n} /* stack the radio buttons vertically, not horizontally */ .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} .telemetry-modal_radio-buttons_8ArWg label:hover {\n background-color: hsla(215, 100%, 65%, .1);\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} .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} .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} .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(0, 100%, 65%, 1);\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(0, 100%, 65%, 1);\n width: .625rem;\n height: .625rem;\n content: \"\";\n} /* Confirmation buttons at the bottom of the modal */ .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} @keyframes telemetry-modal_fade-out_36Osg {\n 0% {opacity: 1}\n 100% {opacity: 0}\n} .telemetry-modal_setting-was-updated_1l6nc {\n animation: telemetry-modal_fade-out_36Osg 3s ease-out;\n color: hsla(10, 85%, 65%, 1);\n} .telemetry-modal_button-row_2rE_o button {\n border: 1px solid hsla(0, 100%, 65%, 1);\n border-radius: 0.25rem;\n padding: 0.5rem 1.5rem;\n color: white;\n background: hsla(0, 100%, 65%, 1);\n font-weight: bold;\n font-size: .875rem;\n cursor: pointer;\n} .telemetry-modal_button-row_2rE_o button:hover {\n background: hsla(10, 85%, 65%, 1);\n box-shadow: 0 0 0 6px hsla(0, 100%, 65%, 0.35);\n} .telemetry-modal_button-row_2rE_o button:disabled {\n background: var(--text-primary, hsla(225, 15%, 40%, 1));\n border-color: var(--ui-black-transparent, hsla(0, 0%, 0%, 0.15));\n box-shadow: none;\n opacity: 0.25;\n} @media screen and (max-height: 660px) {\n .telemetry-modal_modal-content_nALrs {\n margin: 5vh auto;\n width: 90%;\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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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} .turbo-mode_turbo-icon_fjr8U {\n margin: 0.25rem;\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(38, 100%, 55%, 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-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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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} .checkbox_checkbox_2QbUl:hover, .checkbox_checkbox_2QbUl:focus, .checkbox_checkbox_2QbUl:active, .checkbox_checkbox_2QbUl:checked {\n border-color: hsla(0, 100%, 65%, 1);\n} .checkbox_checkbox_2QbUl:focus, .checkbox_checkbox_2QbUl:active {\n box-shadow: 0 0 0 3px hsla(0, 100%, 65%, 0.35);\n} .checkbox_checkbox_2QbUl:checked {\n background-color: hsla(0, 100%, 65%, 1);\n background-image: url(" + escape(__webpack_require__(/*! ./checkbox.svg */ "./src/components/tw-fancy-checkbox/checkbox.svg")) + ");\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-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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .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} .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(38, 100%, 55%, 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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .spinner_container_2gp3A {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n} .spinner_spinner_3_DJ6 {\n width: 64px;\n height: 64px;\n border-radius: 50%;\n border: 6px solid;\n border-color: hsla(0, 100%, 65%, 1) transparent hsla(0, 100%, 65%, 1) transparent;\n animation: spinner_spinner_3_DJ6 1.2s linear infinite;\n} [theme=\"dark\"] .spinner_spinner_3_DJ6 {\n border-color: #fff transparent #fff transparent;\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-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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .settings-modal_modal-content_2bE7f {\n max-width: 750px;\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} [theme=\"dark\"] .settings-modal_body_cAUJ0 {\n color: var(--text-primary, hsla(225, 15%, 40%, 1));\n background: var(--ui-primary, hsla(215, 100%, 95%, 1));\n} /* For small screens, such as in the embed */ @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} .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} .settings-modal_setting_PxhNM.settings-modal_active_1McfX {\n background: #dbebff;\n} .settings-modal_setting_PxhNM:hover,\n.settings-modal_setting_PxhNM:focus-within {\n background: #cadef5;\n} [theme=\"dark\"] .settings-modal_setting_PxhNM.settings-modal_active_1McfX {\n background: #16202c;\n} [theme=\"dark\"] .settings-modal_setting_PxhNM:hover,\n[theme=\"dark\"] .settings-modal_setting_PxhNM:focus-within {\n background: #202f41;\n} .settings-modal_label_2Phuq {\n height: 32px;\n display: flex;\n flex-direction: row;\n align-items: center;\n} .settings-modal_setting_PxhNM table {\n border-collapse: collapse;\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(215, 50%, 90%, 1));\n} .settings-modal_checkbox_1dXwG {\n margin-right: 0.5rem;\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} [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} .settings-modal_custom-stage-size_3I0AA > * {\n margin-right: 0.5rem;\n} .settings-modal_custom-stage-size-input_2ivQT {\n width: 80px;\n} .settings-modal_info_1a5yx {\n margin-bottom: 0.25rem;\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} .settings-modal_divider_7euKA {\n flex-grow: 1;\n margin-left: 1rem;\n border-top: 1px dashed var(--ui-tertiary, hsla(215, 50%, 90%, 1));\n} .settings-modal_button_15QCA {\n font-family: inherit;\n font-size: 14px;\n background-color: hsla(0, 100%, 65%, 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} .settings-modal_button_15QCA:active, .settings-modal_button_15QCA:focus-within {\n box-shadow: 0 0 0 3px hsla(0, 100%, 65%, 0.35);\n} .settings-modal_warning_2xSC8 {\n padding: 0.5rem 1rem;\n margin: 0.25rem 0;\n border-radius: 4px;\n background: rgb(233, 233, 53);\n} [theme=\"dark\"] .settings-modal_warning_2xSC8 {\n background: rgb(114, 102, 0);\n}\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",
|
||
"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-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"
|
||
};
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .username-modal_modal-content_2pKC4 {\n width: 400px;\n} .username-modal_body_UaL6e {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n} [theme=\"dark\"] .username-modal_body_UaL6e {\n color: var(--text-primary, hsla(225, 15%, 40%, 1));\n background: var(--ui-primary, hsla(215, 100%, 95%, 1));\n} .username-modal_body_UaL6e input[type=\"checkbox\"],\n.username-modal_body_UaL6e input[type=\"radio\"] {\n margin: 3px;\n} .username-modal_text-input_3z1ni {\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(225, 15%, 40%, 0.75);\n font-size: .875rem;\n} [theme=\"dark\"] .username-modal_text-input_3z1ni {\n background: var(--ui-secondary, hsla(215, 75%, 95%, 1));\n color: white;\n} .username-modal_button-row_2amuh {\n font-weight: bolder;\n text-align: right;\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} .username-modal_button-row_2amuh button[disabled] {\n opacity: 0.5;\n} [dir=\"ltr\"] .username-modal_button-row_2amuh button + button {\n margin-left: 0.5rem;\n} [dir=\"rtl\"] .username-modal_button-row_2amuh button + button {\n margin-right: 0.5rem;\n} .username-modal_button-row_2amuh button.username-modal_ok-button_UEZfz {\n background: hsla(0, 100%, 65%, 1);\n border: hsla(0, 100%, 65%, 1);\n color: white;\n} .username-modal_button-row_2amuh button.username-modal_cancel-button_3bs7j {\n color: black;\n} .username-modal_help-text_3dN2- {\n margin-bottom: 1.5rem;\n} .username-modal_must-change_1uhS8 {\n font-weight: bold;\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/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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ .waveform_container_2K9Om {\n width: 100%;\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(300, 48%, 50%, 1);\n} .waveform_baseline_2J5dw {\n stroke: hsla(300, 48%, 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/components/webgl-modal/webgl-modal.css":
|
||
/*!***********************************************************************************************************************************!*\
|
||
!*** ./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??postcss!./src/components/webgl-modal/webgl-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, "/* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /* make sure to keep these in sync with other constants,\ne.g. STAGE_DIMENSION_DEFAULTS in lib/screen-utils.js */ /* layout contants from `layout-constants.js` */ body {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n} h2 {\n font-size: 1.5rem;\n font-weight: bold;\n} p {\n font-size: 1rem;\n line-height: 1.5em;\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*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ .webgl-modal_modal-overlay_2yidY {\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(0, 100%, 65%, 0.9));\n} .webgl-modal_modal-content_rn15F {\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: var(--text-primary, hsla(225, 15%, 40%, 1));\n overflow: hidden;\n} .webgl-modal_illustration_2ReF1 {\n width: 100%;\n height: 208px;\n background-color: hsla(0, 100%, 65%, 1);\n background-image: url(" + escape(__webpack_require__(/*! ./unsupported.png */ "./src/components/webgl-modal/unsupported.png")) + ");\n background-size: cover;\n} [dir=\"rtl\"] .webgl-modal_illustration_2ReF1 {\n transform: scaleX(-1);\n} .webgl-modal_body_4eA8i {\n background: hsla(0, 100%, 100%, 1);\n padding: 1.5rem 2.25rem;\n text-align: center;\n} [theme=\"dark\"] .webgl-modal_body_4eA8i {\n color: var(--text-primary, hsla(225, 15%, 40%, 1));\n background: var(--ui-primary, hsla(215, 100%, 95%, 1));\n} /* Confirmation buttons at the bottom of the modal */ .webgl-modal_button-row_btS-j {\n margin: 1.5rem 0;\n font-weight: bolder;\n text-align: right;\n display: flex;\n justify-content: center;\n} .webgl-modal_button-row_btS-j button {\n border: 1px solid hsla(0, 100%, 65%, 1);\n border-radius: 0.25rem;\n padding: 0.5rem 2rem;\n background: hsla(0, 100%, 65%, 1);\n color: white;\n font-weight: bold;\n font-size: 0.875rem;\n} .webgl-modal_faq-link-text_YThHx {\n margin: 2rem 0 .5rem 0;\n font-size: .875rem;\n color: var(--text-primary, hsla(225, 15%, 40%, 1));\n} .webgl-modal_faq-link_Fj6Lw {\n color: hsla(0, 100%, 65%, 1);\n text-decoration: none;\n}\n", ""]);
|
||
|
||
// exports
|
||
exports.locals = {
|
||
"modal-overlay": "webgl-modal_modal-overlay_2yidY",
|
||
"modalOverlay": "webgl-modal_modal-overlay_2yidY",
|
||
"modal-content": "webgl-modal_modal-content_rn15F",
|
||
"modalContent": "webgl-modal_modal-content_rn15F",
|
||
"illustration": "webgl-modal_illustration_2ReF1",
|
||
"body": "webgl-modal_body_4eA8i",
|
||
"button-row": "webgl-modal_button-row_btS-j",
|
||
"buttonRow": "webgl-modal_button-row_btS-j",
|
||
"faq-link-text": "webgl-modal_faq-link-text_YThHx",
|
||
"faqLinkText": "webgl-modal_faq-link-text_YThHx",
|
||
"faq-link": "webgl-modal_faq-link_Fj6Lw",
|
||
"faqLink": "webgl-modal_faq-link_Fj6Lw"
|
||
};
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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/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 = "<svg version=\"1.1\" width=\"2\" height=\"2\" viewBox=\"-1 -1 2 2\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <!-- Exported by Scratch - http://scratch.mit.edu/ -->\n</svg>"
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/raw-loader/index.js!./src/lib/default-project/dango.svg":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/raw-loader!./src/lib/default-project/dango.svg ***!
|
||
\*********************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"87.99945\" height=\"88.00142\" viewBox=\"0,0,87.99945,88.00142\">\n <!-- This icon is based on Twemoji https://twemoji.twitter.com/ -->\n <!-- License: CC-BY 4.0 https://creativecommons.org/licenses/by/4.0/ -->\n <g transform=\"translate(-196.00028,-135.99929)\">\n <g data-paper-data=\"{"isPaintingLayer":true}\" fill-rule=\"nonzero\" stroke=\"none\" stroke-width=\"1\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" stroke-miterlimit=\"10\" stroke-dasharray=\"\" stroke-dashoffset=\"0\" style=\"mix-blend-mode: normal\">\n <path d=\"M280.76164,224.00071c-0.82849,0 -1.65698,-0.31661 -2.29021,-0.94721l-80.84584,-80.84848c-1.26384,-1.26384 -1.26384,-3.31657 0,-4.58041c1.26384,-1.26384 3.31657,-1.26384 4.58041,0l80.84584,80.84584c1.26384,1.26384 1.26384,3.31657 0,4.58041c-0.63324,0.6306 -1.46173,0.94985 -2.29021,0.94985z\" fill=\"#d99e82\"/>\n <path d=\"M231.6304,153.81435c0,9.83892 -7.97614,17.81506 -17.81506,17.81506c-9.83892,0 -17.81506,-7.97614 -17.81506,-17.81506c0,-9.83892 7.97614,-17.81506 17.81506,-17.81506c9.83892,0 17.81506,7.97614 17.81506,17.81506z\" fill=\"#fcb1e3\"/>\n <path d=\"M229.16098,190.59288c-9.57565,-2.26111 -15.50524,-11.85671 -13.24412,-21.43235c2.26111,-9.57565 11.85671,-15.50524 21.43235,-13.24412c9.57565,2.26111 15.50524,11.85671 13.24412,21.43235c-2.26111,9.57565 -11.85671,15.50524 -21.43235,13.24412z\" fill=\"#ffd983\"/>\n <path d=\"M270.50321,192.68453c0,9.83892 -7.97878,17.81769 -17.81769,17.81769c-9.83892,0 -17.81506,-7.97878 -17.81506,-17.81769c0,-9.83892 7.97614,-17.81506 17.81506,-17.81506c9.83892,0 17.81769,7.97878 17.81769,17.81506z\" fill=\"#a6d388\"/>\n <path d=\"M280.76164,224.00071c-0.82849,0 -1.65698,-0.31661 -2.29021,-0.94721l-19.84141,-19.84141c-1.26648,-1.26384 -1.26648,-3.31657 0,-4.58041c1.26648,-1.26384 3.31393,-1.26384 4.58041,0l19.84141,19.84141c1.26384,1.26384 1.26384,3.31657 0,4.58041c-0.63324,0.62796 -1.46173,0.94721 -2.29021,0.94721z\" fill=\"#d99e82\"/>\n </g>\n </g>\n</svg>"
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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 = "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"415.33334\" height=\"28\" viewBox=\"0,0,415.33334,28\"><g transform=\"translate(-32.58333,-164.25)\"><g data-paper-data=\"{"isPaintingLayer":true}\" fill=\"#9966ff\" fill-rule=\"nonzero\" stroke=\"none\" stroke-width=\"1\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" stroke-miterlimit=\"10\" stroke-dasharray=\"\" stroke-dashoffset=\"0\" font-family=\"Sans Serif\" font-weight=\"normal\" font-size=\"40\" text-anchor=\"start\" style=\"mix-blend-mode: normal\"><text transform=\"translate(32.83333,186) scale(0.5,0.5)\" font-size=\"40\" xml:space=\"preserve\" fill=\"#9966ff\" fill-rule=\"nonzero\" stroke=\"none\" stroke-width=\"1\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\" stroke-miterlimit=\"10\" stroke-dasharray=\"\" stroke-dashoffset=\"0\" font-family=\"Sans Serif\" font-weight=\"normal\" text-anchor=\"start\" style=\"mix-blend-mode: normal\"><tspan x=\"0\" dy=\"0\">The project you tried to load does not exist.</tspan></text></g></g></svg>"
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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"), __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(({
|
||
img,
|
||
title,
|
||
onClick: handleClick,
|
||
fileAccept,
|
||
fileChange,
|
||
fileInput,
|
||
fileMultiple
|
||
}, keyId) => {
|
||
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/497f797eeffe5fa7e6a626abc0db08a1.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 = ({
|
||
content,
|
||
closeButton,
|
||
extensionName,
|
||
iconSpinner,
|
||
iconURL,
|
||
level,
|
||
showDownload,
|
||
showSaveNow,
|
||
onCloseAlert,
|
||
onDownload,
|
||
onSaveNow,
|
||
onReconnect,
|
||
showReconnect
|
||
}) => /*#__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 = ({
|
||
alertsList,
|
||
className,
|
||
onCloseAlert
|
||
}) => /*#__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 = ({
|
||
content,
|
||
iconSpinner,
|
||
level
|
||
}) => /*#__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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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/c9528ee4be1a12380a6c9caf73bd99e9.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--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/53ef96392ac2a92361884783808a02c9.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/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/b8f0b40efdf6eafc02c3f894a5941818.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 = ({
|
||
blockDragOver,
|
||
containerRef,
|
||
contents,
|
||
dragOver,
|
||
error,
|
||
expanded,
|
||
intl,
|
||
loading,
|
||
showMore,
|
||
onToggle,
|
||
onDelete,
|
||
onRename,
|
||
onMouseEnter,
|
||
onMouseLeave,
|
||
onMore
|
||
}) => /*#__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,
|
||
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.oneOf([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,
|
||
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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({
|
||
label: {
|
||
"id": "gui.unsupportedBrowser.label",
|
||
"defaultMessage": "Browser is not supported"
|
||
}
|
||
});
|
||
|
||
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: props.onBack
|
||
}, /*#__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__["canConstructNewFunctions"])() ? null :
|
||
/*#__PURE__*/
|
||
// This message is only intended to be read by website operators
|
||
// We don't need to make it translatable
|
||
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, 'This site is unable to compile arbitrary JavaScript. This is most likely caused by an overly-strict Content-Security-Policy set by the server.'), /*#__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"
|
||
})))));
|
||
};
|
||
|
||
BrowserModal.propTypes = {
|
||
intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"].isRequired,
|
||
isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool,
|
||
onBack: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func.isRequired
|
||
};
|
||
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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const CardHeader = ({
|
||
onCloseCards,
|
||
onShrinkExpandCards,
|
||
onShowAll,
|
||
totalSteps,
|
||
step,
|
||
expanded
|
||
}) => /*#__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 = ({
|
||
title,
|
||
image
|
||
}) => /*#__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 = ({
|
||
isRtl,
|
||
onNextStep,
|
||
onPrevStep,
|
||
expanded
|
||
}) => /*#__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 = ({
|
||
deckIds,
|
||
content,
|
||
onActivateDeckFactory,
|
||
onShowAll
|
||
}) => /*#__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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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 _stop_all_stop_all_jsx__WEBPACK_IMPORTED_MODULE_5__ = __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_6__ = __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_7__ = __webpack_require__(/*! ../tw-framerate-indicator/framerate-indicator.jsx */ "./src/components/tw-framerate-indicator/framerate-indicator.jsx");
|
||
/* harmony import */ var _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../lib/layout-constants.js */ "./src/lib/layout-constants.js");
|
||
/* 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", "className", "intl", "onGreenFlagClick", "onStopAllClick", "turbo", "framerate", "interpolation", "isSmall"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({
|
||
goTitle: {
|
||
"id": "gui.controls.go",
|
||
"defaultMessage": "Go"
|
||
},
|
||
stopTitle: {
|
||
"id": "gui.controls.stop",
|
||
"defaultMessage": "Stop"
|
||
}
|
||
});
|
||
|
||
const Controls = function Controls(props) {
|
||
const {
|
||
active,
|
||
className,
|
||
intl,
|
||
onGreenFlagClick,
|
||
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(_stop_all_stop_all_jsx__WEBPACK_IMPORTED_MODULE_5__["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_6__["default"], {
|
||
isSmall: isSmall
|
||
}) : null, !isSmall && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_tw_framerate_indicator_framerate_indicator_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], {
|
||
framerate: framerate,
|
||
interpolation: interpolation
|
||
}));
|
||
};
|
||
|
||
Controls.propTypes = {
|
||
active: 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,
|
||
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.',
|
||
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_boolean_input_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./icon--boolean-input.svg */ "./src/components/custom-procedures/icon--boolean-input.svg");
|
||
/* harmony import */ var _icon_boolean_input_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_icon_boolean_input_svg__WEBPACK_IMPORTED_MODULE_5__);
|
||
/* harmony import */ var _icon_text_input_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./icon--text-input.svg */ "./src/components/custom-procedures/icon--text-input.svg");
|
||
/* harmony import */ var _icon_text_input_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_icon_text_input_svg__WEBPACK_IMPORTED_MODULE_6__);
|
||
/* harmony import */ var _icon_label_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./icon--label.svg */ "./src/components/custom-procedures/icon--label.svg");
|
||
/* harmony import */ var _icon_label_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_icon_label_svg__WEBPACK_IMPORTED_MODULE_7__);
|
||
/* harmony import */ var _custom_procedures_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./custom-procedures.css */ "./src/components/custom-procedures/custom-procedures.css");
|
||
/* harmony import */ var _custom_procedures_css__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_custom_procedures_css__WEBPACK_IMPORTED_MODULE_8__);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({
|
||
myblockModalTitle: {
|
||
"id": "gui.customProcedures.myblockModalTitle",
|
||
"defaultMessage": "Make a Block"
|
||
}
|
||
});
|
||
|
||
const CustomProcedures = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_containers_modal_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
||
className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_8___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_8___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_8___default.a.body
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
|
||
className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_8___default.a.optionsRow
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
|
||
className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_8___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_8___default.a.optionIcon,
|
||
src: _icon_text_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_8___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_8___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_8___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_8___default.a.optionIcon,
|
||
src: _icon_boolean_input_svg__WEBPACK_IMPORTED_MODULE_5___default.a
|
||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
|
||
className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_8___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_8___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_8___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_8___default.a.optionIcon,
|
||
src: _icon_label_svg__WEBPACK_IMPORTED_MODULE_7___default.a
|
||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
|
||
className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_8___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"
|
||
})))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
|
||
className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_8___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(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
||
className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_8___default.a.buttonRow
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("button", {
|
||
className: _custom_procedures_css__WEBPACK_IMPORTED_MODULE_8___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_8___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,
|
||
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,
|
||
warp: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool.isRequired
|
||
};
|
||
/* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(CustomProcedures));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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--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--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
|
||
})));
|
||
|
||
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_dont_rotate_svg__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./icon--dont-rotate.svg */ "./src/components/direction-picker/icon--dont-rotate.svg");
|
||
/* harmony import */ var _icon_dont_rotate_svg__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_icon_dont_rotate_svg__WEBPACK_IMPORTED_MODULE_12__);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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',
|
||
LEFT_RIGHT: 'left-right',
|
||
DONT_ROTATE: "don't rotate"
|
||
};
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({
|
||
allAround: {
|
||
"id": "gui.directionPicker.rotationStyles.allAround",
|
||
"defaultMessage": "All Around"
|
||
},
|
||
leftRight: {
|
||
"id": "gui.directionPicker.rotationStyles.leftRight",
|
||
"defaultMessage": "Left/Right"
|
||
},
|
||
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.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.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_12___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,
|
||
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/143a9041098d0e0724ed22c89e6558cc.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/9cc1e7a12b63848899055ddc982ab2ce.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/8ea23814ef4f6dc9f86859a028377a3a.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/57593d3aac258d2c0abf75a0b8ecbdaa.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/0dd03e5061d2865c0e8ac50cc75e9982.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 = ({
|
||
className
|
||
}) => /*#__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 = ({
|
||
dragging,
|
||
img,
|
||
currentOffset
|
||
}) => 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/5e460dab4dfda0fe34f93d3faf95b778.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/c8481ea8e104d4d2bb6b340e0c90da26.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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Higher Order Component to manage inputs that submit on blur and <enter>
|
||
* @param {React.Component} Input text input that consumes onChange, onBlur, onKeyPress
|
||
* @returns {React.Component} Buffered input that calls onSubmit on blur and <enter>
|
||
*/
|
||
|
||
/* 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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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 _icon_green_flag_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icon--green-flag.svg */ "./src/components/green-flag/icon--green-flag.svg");
|
||
/* harmony import */ var _icon_green_flag_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_icon_green_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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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: _icon_green_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/green-flag/icon--green-flag.svg":
|
||
/*!********************************************************!*\
|
||
!*** ./src/components/green-flag/icon--green-flag.svg ***!
|
||
\********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/2e0c4790f8f9cf28e3c346b9cef0fcb6.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_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 react_responsive__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-responsive */ "./node_modules/react-responsive/dist/react-responsive.js");
|
||
/* harmony import */ var react_responsive__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_responsive__WEBPACK_IMPORTED_MODULE_6__);
|
||
/* harmony import */ var react_tabs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-tabs */ "./node_modules/react-tabs/esm/index.js");
|
||
/* harmony import */ var react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_8__ = __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_8___default = /*#__PURE__*/__webpack_require__.n(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_8__);
|
||
/* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js");
|
||
/* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_9__);
|
||
/* harmony import */ var scratch_render__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! scratch-render */ "./node_modules/scratch-render/src/index.js");
|
||
/* harmony import */ var scratch_render__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(scratch_render__WEBPACK_IMPORTED_MODULE_10__);
|
||
/* harmony import */ var _containers_blocks_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../containers/blocks.jsx */ "./src/containers/blocks.jsx");
|
||
/* harmony import */ var _containers_costume_tab_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../containers/costume-tab.jsx */ "./src/containers/costume-tab.jsx");
|
||
/* harmony import */ var _containers_target_pane_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../containers/target-pane.jsx */ "./src/containers/target-pane.jsx");
|
||
/* harmony import */ var _containers_sound_tab_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../containers/sound-tab.jsx */ "./src/containers/sound-tab.jsx");
|
||
/* harmony import */ var _containers_stage_wrapper_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../containers/stage-wrapper.jsx */ "./src/containers/stage-wrapper.jsx");
|
||
/* harmony import */ var _loader_loader_jsx__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../loader/loader.jsx */ "./src/components/loader/loader.jsx");
|
||
/* harmony import */ var _box_box_jsx__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../box/box.jsx */ "./src/components/box/box.jsx");
|
||
/* harmony import */ var _menu_bar_menu_bar_jsx__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../menu-bar/menu-bar.jsx */ "./src/components/menu-bar/menu-bar.jsx");
|
||
/* harmony import */ var _containers_costume_library_jsx__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../containers/costume-library.jsx */ "./src/containers/costume-library.jsx");
|
||
/* harmony import */ var _containers_backdrop_library_jsx__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../containers/backdrop-library.jsx */ "./src/containers/backdrop-library.jsx");
|
||
/* harmony import */ var _containers_watermark_jsx__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../containers/watermark.jsx */ "./src/containers/watermark.jsx");
|
||
/* harmony import */ var _containers_backpack_jsx__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../containers/backpack.jsx */ "./src/containers/backpack.jsx");
|
||
/* harmony import */ var _containers_webgl_modal_jsx__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../containers/webgl-modal.jsx */ "./src/containers/webgl-modal.jsx");
|
||
/* harmony import */ var _browser_modal_browser_modal_jsx__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../browser-modal/browser-modal.jsx */ "./src/components/browser-modal/browser-modal.jsx");
|
||
/* harmony import */ var _containers_tips_library_jsx__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../containers/tips-library.jsx */ "./src/containers/tips-library.jsx");
|
||
/* harmony import */ var _containers_cards_jsx__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../containers/cards.jsx */ "./src/containers/cards.jsx");
|
||
/* harmony import */ var _containers_alerts_jsx__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../containers/alerts.jsx */ "./src/containers/alerts.jsx");
|
||
/* harmony import */ var _containers_drag_layer_jsx__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../containers/drag-layer.jsx */ "./src/containers/drag-layer.jsx");
|
||
/* harmony import */ var _containers_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../containers/connection-modal.jsx */ "./src/containers/connection-modal.jsx");
|
||
/* harmony import */ var _telemetry_modal_telemetry_modal_jsx__WEBPACK_IMPORTED_MODULE_30__ = __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_31__ = __webpack_require__(/*! ../../containers/tw-username-modal.jsx */ "./src/containers/tw-username-modal.jsx");
|
||
/* harmony import */ var _containers_tw_settings_modal_jsx__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../containers/tw-settings-modal.jsx */ "./src/containers/tw-settings-modal.jsx");
|
||
/* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../lib/layout-constants */ "./src/lib/layout-constants.js");
|
||
/* harmony import */ var _lib_screen_utils__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../lib/screen-utils */ "./src/lib/screen-utils.js");
|
||
/* harmony import */ var _lib_tw_environment_support_prober__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../lib/tw-environment-support-prober */ "./src/lib/tw-environment-support-prober.js");
|
||
/* harmony import */ var _gui_css__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./gui.css */ "./src/components/gui/gui.css");
|
||
/* harmony import */ var _gui_css__WEBPACK_IMPORTED_MODULE_36___default = /*#__PURE__*/__webpack_require__.n(_gui_css__WEBPACK_IMPORTED_MODULE_36__);
|
||
/* harmony import */ var _icon_extensions_svg__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./icon--extensions.svg */ "./src/components/gui/icon--extensions.svg");
|
||
/* harmony import */ var _icon_extensions_svg__WEBPACK_IMPORTED_MODULE_37___default = /*#__PURE__*/__webpack_require__.n(_icon_extensions_svg__WEBPACK_IMPORTED_MODULE_37__);
|
||
/* harmony import */ var _icon_code_svg__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./icon--code.svg */ "./src/components/gui/icon--code.svg");
|
||
/* harmony import */ var _icon_code_svg__WEBPACK_IMPORTED_MODULE_38___default = /*#__PURE__*/__webpack_require__.n(_icon_code_svg__WEBPACK_IMPORTED_MODULE_38__);
|
||
/* harmony import */ var _icon_costumes_svg__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./icon--costumes.svg */ "./src/components/gui/icon--costumes.svg");
|
||
/* harmony import */ var _icon_costumes_svg__WEBPACK_IMPORTED_MODULE_39___default = /*#__PURE__*/__webpack_require__.n(_icon_costumes_svg__WEBPACK_IMPORTED_MODULE_39__);
|
||
/* harmony import */ var _icon_sounds_svg__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./icon--sounds.svg */ "./src/components/gui/icon--sounds.svg");
|
||
/* harmony import */ var _icon_sounds_svg__WEBPACK_IMPORTED_MODULE_40___default = /*#__PURE__*/__webpack_require__.n(_icon_sounds_svg__WEBPACK_IMPORTED_MODULE_40__);
|
||
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", "onClickTheme", "onClickPackager", "onLogOut", "onOpenRegistration", "onToggleLoginOpen", "onActivateCostumesTab", "onActivateSoundsTab", "onActivateTab", "onClickLogo", "onExtensionButtonClick", "onProjectTelemetryEvent", "onRequestCloseBackdropLibrary", "onRequestCloseCostumeLibrary", "onRequestCloseTelemetryModal", "onSeeCommunity", "onShare", "onShowPrivacyPolicy", "onStartSelectingFileUpload", "onTelemetryModalCancel", "onTelemetryModalOptIn", "onTelemetryModalOptOut", "showComingSoon", "soundsTabVisible", "stageSizeMode", "targetIsStage", "telemetryModalVisible", "tipsLibraryVisible", "usernameModalVisible", "settingsModalVisible", "vm"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["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 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,
|
||
onClickTheme,
|
||
onClickPackager,
|
||
onLogOut,
|
||
onOpenRegistration,
|
||
onToggleLoginOpen,
|
||
onActivateCostumesTab,
|
||
onActivateSoundsTab,
|
||
onActivateTab,
|
||
onClickLogo,
|
||
onExtensionButtonClick,
|
||
onProjectTelemetryEvent,
|
||
onRequestCloseBackdropLibrary,
|
||
onRequestCloseCostumeLibrary,
|
||
onRequestCloseTelemetryModal,
|
||
onSeeCommunity,
|
||
onShare,
|
||
onShowPrivacyPolicy,
|
||
onStartSelectingFileUpload,
|
||
onTelemetryModalCancel,
|
||
onTelemetryModalOptIn,
|
||
onTelemetryModalOptOut,
|
||
showComingSoon,
|
||
soundsTabVisible,
|
||
stageSizeMode,
|
||
targetIsStage,
|
||
telemetryModalVisible,
|
||
tipsLibraryVisible,
|
||
usernameModalVisible,
|
||
settingsModalVisible,
|
||
vm
|
||
} = _omit,
|
||
componentProps = _objectWithoutProperties(_omit, _excluded);
|
||
|
||
if (children) {
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], componentProps, children);
|
||
}
|
||
|
||
const tabClassNames = {
|
||
tabs: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.tabs,
|
||
tab: classnames__WEBPACK_IMPORTED_MODULE_0___default()(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_8___default.a.reactTabsTab, _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.tab),
|
||
tabList: classnames__WEBPACK_IMPORTED_MODULE_0___default()(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_8___default.a.reactTabsTabList, _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.tabList),
|
||
tabPanel: classnames__WEBPACK_IMPORTED_MODULE_0___default()(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_8___default.a.reactTabsTabPanel, _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.tabPanel),
|
||
tabPanelSelected: classnames__WEBPACK_IMPORTED_MODULE_0___default()(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_8___default.a.reactTabsTabPanelSelected, _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.isSelected),
|
||
tabSelected: classnames__WEBPACK_IMPORTED_MODULE_0___default()(react_tabs_style_react_tabs_css__WEBPACK_IMPORTED_MODULE_8___default.a.reactTabsTabSelected, _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.isSelected)
|
||
};
|
||
const minWidth = _lib_layout_constants__WEBPACK_IMPORTED_MODULE_33__["default"].fullSizeMinWidth + Math.max(0, customStageSize.width - _lib_layout_constants__WEBPACK_IMPORTED_MODULE_33__["default"].referenceWidth);
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_responsive__WEBPACK_IMPORTED_MODULE_6___default.a, {
|
||
minWidth: minWidth
|
||
}, isFullSize => {
|
||
const stageSize = Object(_lib_screen_utils__WEBPACK_IMPORTED_MODULE_34__["resolveStageSize"])(stageSizeMode, isFullSize);
|
||
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_36___default.a.fullscreenBackground,
|
||
style: {
|
||
backgroundColor: fullscreenBackgroundColor
|
||
}
|
||
}) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_stage_wrapper_jsx__WEBPACK_IMPORTED_MODULE_15__["default"], {
|
||
isFullScreen: isFullScreen,
|
||
isEmbedded: isEmbedded,
|
||
isRendererSupported: Object(_lib_tw_environment_support_prober__WEBPACK_IMPORTED_MODULE_35__["isRendererSupported"])(),
|
||
isRtl: isRtl,
|
||
loading: loading,
|
||
stageSize: _lib_layout_constants__WEBPACK_IMPORTED_MODULE_33__["STAGE_SIZE_MODES"].large,
|
||
vm: vm
|
||
}, alertsVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_alerts_jsx__WEBPACK_IMPORTED_MODULE_27__["default"], {
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.alertsContainer
|
||
}) : null), usernameModalVisible && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tw_username_modal_jsx__WEBPACK_IMPORTED_MODULE_31__["default"], null), settingsModalVisible && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tw_settings_modal_jsx__WEBPACK_IMPORTED_MODULE_32__["default"], null)) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], _extends({
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.pageWrapper,
|
||
dir: isRtl ? 'rtl' : 'ltr'
|
||
}, componentProps), usernameModalVisible && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tw_username_modal_jsx__WEBPACK_IMPORTED_MODULE_31__["default"], null), settingsModalVisible && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tw_settings_modal_jsx__WEBPACK_IMPORTED_MODULE_32__["default"], null), telemetryModalVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_telemetry_modal_telemetry_modal_jsx__WEBPACK_IMPORTED_MODULE_30__["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_16__["default"], {
|
||
isFullScreen: true
|
||
}) : null, isCreating ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_loader_loader_jsx__WEBPACK_IMPORTED_MODULE_16__["default"], {
|
||
isFullScreen: true,
|
||
messageId: "gui.loader.creating"
|
||
}) : null, Object(_lib_tw_environment_support_prober__WEBPACK_IMPORTED_MODULE_35__["isRendererSupported"])() ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_webgl_modal_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], {
|
||
isRtl: isRtl
|
||
}), Object(_lib_tw_environment_support_prober__WEBPACK_IMPORTED_MODULE_35__["isBrowserSupported"])() ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_browser_modal_browser_modal_jsx__WEBPACK_IMPORTED_MODULE_24__["default"], {
|
||
isRtl: isRtl
|
||
}), tipsLibraryVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tips_library_jsx__WEBPACK_IMPORTED_MODULE_25__["default"], null) : null, cardsVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_cards_jsx__WEBPACK_IMPORTED_MODULE_26__["default"], null) : null, alertsVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_alerts_jsx__WEBPACK_IMPORTED_MODULE_27__["default"], {
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.alertsContainer
|
||
}) : null, connectionModalVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_connection_modal_jsx__WEBPACK_IMPORTED_MODULE_29__["default"], {
|
||
vm: vm
|
||
}) : null, costumeLibraryVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_costume_library_jsx__WEBPACK_IMPORTED_MODULE_19__["default"], {
|
||
vm: vm,
|
||
onRequestClose: onRequestCloseCostumeLibrary
|
||
}) : null, backdropLibraryVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_backdrop_library_jsx__WEBPACK_IMPORTED_MODULE_20__["default"], {
|
||
vm: vm,
|
||
onRequestClose: onRequestCloseBackdropLibrary
|
||
}) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_menu_bar_menu_bar_jsx__WEBPACK_IMPORTED_MODULE_18__["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_36___default.a.menuBarPosition,
|
||
enableCommunity: enableCommunity,
|
||
isShared: isShared,
|
||
logo: logo,
|
||
renderLogin: renderLogin,
|
||
showComingSoon: showComingSoon,
|
||
onClickAbout: onClickAbout,
|
||
onClickAccountNav: onClickAccountNav,
|
||
onClickAddonSettings: onClickAddonSettings,
|
||
onClickTheme: onClickTheme,
|
||
onClickPackager: onClickPackager,
|
||
onClickLogo: onClickLogo,
|
||
onCloseAccountNav: onCloseAccountNav,
|
||
onLogOut: onLogOut,
|
||
onOpenRegistration: onOpenRegistration,
|
||
onProjectTelemetryEvent: onProjectTelemetryEvent,
|
||
onSeeCommunity: onSeeCommunity,
|
||
onShare: onShare,
|
||
onStartSelectingFileUpload: onStartSelectingFileUpload,
|
||
onToggleLoginOpen: onToggleLoginOpen
|
||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], {
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.bodyWrapper
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], {
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.flexWrapper
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], {
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.editorWrapper
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_7__["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_7__["TabList"], {
|
||
className: tabClassNames.tabList
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_7__["Tab"], {
|
||
className: tabClassNames.tab
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", {
|
||
draggable: false,
|
||
src: _icon_code_svg__WEBPACK_IMPORTED_MODULE_38___default.a
|
||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], {
|
||
defaultMessage: "Code",
|
||
id: "gui.gui.codeTab"
|
||
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_7__["Tab"], {
|
||
className: tabClassNames.tab,
|
||
onClick: onActivateCostumesTab
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", {
|
||
draggable: false,
|
||
src: _icon_costumes_svg__WEBPACK_IMPORTED_MODULE_39___default.a
|
||
}), targetIsStage ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], {
|
||
defaultMessage: "Backdrops",
|
||
id: "gui.gui.backdropsTab"
|
||
}) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], {
|
||
defaultMessage: "Costumes",
|
||
id: "gui.gui.costumesTab"
|
||
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_7__["Tab"], {
|
||
className: tabClassNames.tab,
|
||
onClick: onActivateSoundsTab
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("img", {
|
||
draggable: false,
|
||
src: _icon_sounds_svg__WEBPACK_IMPORTED_MODULE_40___default.a
|
||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_4__["FormattedMessage"], {
|
||
defaultMessage: "Sounds",
|
||
id: "gui.gui.soundsTab"
|
||
}))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_7__["TabPanel"], {
|
||
className: tabClassNames.tabPanel
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], {
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.blocksWrapper
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_blocks_jsx__WEBPACK_IMPORTED_MODULE_11__["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_17__["default"], {
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.extensionButtonContainer
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("button", {
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___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_36___default.a.extensionButtonIcon,
|
||
draggable: false,
|
||
src: _icon_extensions_svg__WEBPACK_IMPORTED_MODULE_37___default.a
|
||
}))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], {
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.watermark
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_watermark_jsx__WEBPACK_IMPORTED_MODULE_21__["default"], null))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_7__["TabPanel"], {
|
||
className: tabClassNames.tabPanel
|
||
}, costumesTabVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_costume_tab_jsx__WEBPACK_IMPORTED_MODULE_12__["default"], {
|
||
vm: vm,
|
||
isDark: isDark
|
||
}) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_tabs__WEBPACK_IMPORTED_MODULE_7__["TabPanel"], {
|
||
className: tabClassNames.tabPanel
|
||
}, soundsTabVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_sound_tab_jsx__WEBPACK_IMPORTED_MODULE_14__["default"], {
|
||
vm: vm
|
||
}) : null)), backpackVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_backpack_jsx__WEBPACK_IMPORTED_MODULE_22__["default"], {
|
||
host: backpackHost
|
||
}) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], {
|
||
className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.stageAndTargetWrapper, _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a[stageSize])
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_stage_wrapper_jsx__WEBPACK_IMPORTED_MODULE_15__["default"], {
|
||
isFullScreen: isFullScreen,
|
||
isRendererSupported: Object(_lib_tw_environment_support_prober__WEBPACK_IMPORTED_MODULE_35__["isRendererSupported"])(),
|
||
isRtl: isRtl,
|
||
stageSize: stageSize,
|
||
vm: vm
|
||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_17__["default"], {
|
||
className: _gui_css__WEBPACK_IMPORTED_MODULE_36___default.a.targetWrapper
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_target_pane_jsx__WEBPACK_IMPORTED_MODULE_13__["default"], {
|
||
stageSize: stageSize,
|
||
vm: vm
|
||
}))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_drag_layer_jsx__WEBPACK_IMPORTED_MODULE_28__["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_4__["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,
|
||
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,
|
||
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,
|
||
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,
|
||
stageSizeMode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf(Object.keys(_lib_layout_constants__WEBPACK_IMPORTED_MODULE_33__["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,
|
||
vm: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_9___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_33__["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_4__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_5__["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/5f85a3e5a04dd3de4271589dac82d45b.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/afc646fe671f2f43cf0deb3f2247b8bf.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--sounds.svg":
|
||
/*!*********************************************!*\
|
||
!*** ./src/components/gui/icon--sounds.svg ***!
|
||
\*********************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/2ede3b1977411d39f0cc8ba0a973e25c.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 = ({
|
||
img,
|
||
disabled,
|
||
className,
|
||
title,
|
||
onClick
|
||
}) => /*#__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 = ({
|
||
currentLocale,
|
||
label,
|
||
onChange
|
||
}) => /*#__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/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/lib-icon--sound-rtl.svg":
|
||
/*!*************************************************************!*\
|
||
!*** ./src/components/library-item/lib-icon--sound-rtl.svg ***!
|
||
\*************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/582b9f12ce60392a8ef736c5dfabb4ce.svg";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/components/library-item/lib-icon--sound.svg":
|
||
/*!*********************************************************!*\
|
||
!*** ./src/components/library-item/lib-icon--sound.svg ***!
|
||
\*********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/7bd7487b704797cb5ab3cb441486ea70.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__);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/* 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,
|
||
src: this.props.iconURL
|
||
})), this.props.insetIconURL ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", {
|
||
className: _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
|
||
})) : null, /*#__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.bluetoothRequired || this.props.internetConnectionRequired || this.props.collaborator ? /*#__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", 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: "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)) : 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
|
||
}),
|
||
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
|
||
}, /*#__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: _library_item_css__WEBPACK_IMPORTED_MODULE_5___default.a.libraryItemImage,
|
||
loading: "lazy",
|
||
src: this.props.iconURL
|
||
}))), /*#__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"], {
|
||
isPlaying: this.props.isPlaying,
|
||
onPlay: this.props.onPlay,
|
||
onStop: this.props.onStop
|
||
}) : null);
|
||
}
|
||
|
||
}
|
||
/* eslint-enable react/prefer-stateless-function */
|
||
|
||
|
||
LibraryItemComponent.propTypes = {
|
||
bluetoothRequired: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
collaborator: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
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,
|
||
hidden: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
iconURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
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]),
|
||
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
|
||
};
|
||
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 react_intl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js");
|
||
/* harmony import */ var _containers_library_item_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../containers/library-item.jsx */ "./src/containers/library-item.jsx");
|
||
/* harmony import */ var _containers_modal_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../containers/modal.jsx */ "./src/containers/modal.jsx");
|
||
/* harmony import */ var _divider_divider_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../divider/divider.jsx */ "./src/components/divider/divider.jsx");
|
||
/* harmony import */ var _filter_filter_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../filter/filter.jsx */ "./src/components/filter/filter.jsx");
|
||
/* harmony import */ var _containers_tag_button_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../containers/tag-button.jsx */ "./src/containers/tag-button.jsx");
|
||
/* harmony import */ var _spinner_spinner_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../spinner/spinner.jsx */ "./src/components/spinner/spinner.jsx");
|
||
/* harmony import */ var _library_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./library.css */ "./src/components/library/library.css");
|
||
/* harmony import */ var _library_css__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_library_css__WEBPACK_IMPORTED_MODULE_11__);
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({
|
||
filterPlaceholder: {
|
||
"id": "gui.library.filterPlaceholder",
|
||
"defaultMessage": "Search"
|
||
},
|
||
allTag: {
|
||
"id": "gui.library.allTag",
|
||
"defaultMessage": "All"
|
||
}
|
||
});
|
||
const ALL_TAG = {
|
||
tag: 'all',
|
||
intlLabel: messages.allTag
|
||
};
|
||
const tagListPrefix = [ALL_TAG];
|
||
|
||
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']);
|
||
this.state = {
|
||
playingItem: null,
|
||
filterQuery: '',
|
||
selectedTag: ALL_TAG.tag,
|
||
loaded: false,
|
||
data: props.data
|
||
};
|
||
}
|
||
|
||
componentDidMount() {
|
||
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);
|
||
}
|
||
|
||
componentDidUpdate(prevProps, prevState) {
|
||
if (prevState.filterQuery !== this.state.filterQuery || prevState.selectedTag !== this.state.selectedTag) {
|
||
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) {
|
||
this.handleClose();
|
||
this.props.onItemSelected(this.getFilteredData()[id]);
|
||
}
|
||
|
||
handleClose() {
|
||
this.props.onRequestClose();
|
||
}
|
||
|
||
handleTagClick(tag) {
|
||
if (this.state.playingItem === null) {
|
||
this.setState({
|
||
filterQuery: '',
|
||
selectedTag: tag.toLowerCase()
|
||
});
|
||
} else {
|
||
this.props.onItemMouseLeave(this.getFilteredData()[[this.state.playingItem]]);
|
||
this.setState({
|
||
filterQuery: '',
|
||
playingItem: null,
|
||
selectedTag: tag.toLowerCase()
|
||
});
|
||
}
|
||
}
|
||
|
||
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,
|
||
selectedTag: ALL_TAG.tag
|
||
});
|
||
} else {
|
||
this.props.onItemMouseLeave(this.getFilteredData()[[this.state.playingItem]]);
|
||
this.setState({
|
||
filterQuery: event.target.value,
|
||
playingItem: null,
|
||
selectedTag: ALL_TAG.tag
|
||
});
|
||
}
|
||
}
|
||
|
||
handleFilterClear() {
|
||
this.setState({
|
||
filterQuery: ''
|
||
});
|
||
}
|
||
|
||
getFilteredData() {
|
||
if (this.state.selectedTag === 'all') {
|
||
if (!this.state.filterQuery) return this.state.data;
|
||
return this.state.data.filter(dataItem => (dataItem.tags || []).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 => dataItem.tags && dataItem.tags.map(String.prototype.toLowerCase.call, String.prototype.toLowerCase).indexOf(this.state.selectedTag) !== -1);
|
||
}
|
||
|
||
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_6__["default"], {
|
||
fullScreen: true,
|
||
contentLabel: this.props.title,
|
||
id: this.props.id,
|
||
onRequestClose: this.handleClose
|
||
}, (this.props.filterable || this.props.tags) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
|
||
className: _library_css__WEBPACK_IMPORTED_MODULE_11___default.a.filterBar
|
||
}, this.props.filterable && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_filter_filter_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], {
|
||
className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_11___default.a.filterBarItem, _library_css__WEBPACK_IMPORTED_MODULE_11___default.a.filter),
|
||
filterQuery: this.state.filterQuery,
|
||
inputClassName: _library_css__WEBPACK_IMPORTED_MODULE_11___default.a.filterInput,
|
||
placeholderText: this.props.intl.formatMessage(messages.filterPlaceholder),
|
||
onChange: this.handleFilterChange,
|
||
onClear: this.handleFilterClear
|
||
}), this.props.filterable && this.props.tags && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_divider_divider_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], {
|
||
className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_11___default.a.filterBarItem, _library_css__WEBPACK_IMPORTED_MODULE_11___default.a.divider)
|
||
}), this.props.tags && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
|
||
className: _library_css__WEBPACK_IMPORTED_MODULE_11___default.a.tagWrapper
|
||
}, tagListPrefix.concat(this.props.tags).map((tagProps, id) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_containers_tag_button_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], _extends({
|
||
active: this.state.selectedTag === tagProps.tag.toLowerCase(),
|
||
className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_11___default.a.filterBarItem, _library_css__WEBPACK_IMPORTED_MODULE_11___default.a.tagButton, tagProps.className),
|
||
key: "tag-button-".concat(id),
|
||
onClick: this.handleTagClick
|
||
}, tagProps))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
|
||
className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_library_css__WEBPACK_IMPORTED_MODULE_11___default.a.libraryScrollGrid, {
|
||
[_library_css__WEBPACK_IMPORTED_MODULE_11___default.a.withFilterBar]: this.props.filterable || this.props.tags
|
||
}),
|
||
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_5__["default"], {
|
||
bluetoothRequired: dataItem.bluetoothRequired,
|
||
collaborator: dataItem.collaborator,
|
||
description: dataItem.description,
|
||
disabled: dataItem.disabled,
|
||
extensionId: dataItem.extensionId,
|
||
featured: dataItem.featured,
|
||
hidden: dataItem.hidden,
|
||
iconMd5: dataItem.costumes ? dataItem.costumes[0].md5ext : dataItem.md5ext,
|
||
iconRawURL: dataItem.rawURL,
|
||
icons: dataItem.costumes,
|
||
id: index,
|
||
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
|
||
})) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", {
|
||
className: _library_css__WEBPACK_IMPORTED_MODULE_11___default.a.spinnerWrapper
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(_spinner_spinner_jsx__WEBPACK_IMPORTED_MODULE_10__["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_4__["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_9__["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_4__["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");
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
// 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"
|
||
})
|
||
};
|
||
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() {
|
||
_tw_progress_monitor__WEBPACK_IMPORTED_MODULE_9__["setProgressHandler"](this.handleProgressChange);
|
||
this.updateMessage();
|
||
}
|
||
|
||
componentDidUpdate() {
|
||
this.update();
|
||
}
|
||
|
||
componentWillUnmount() {
|
||
_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() {
|
||
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
|
||
})), /*#__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'));
|
||
|
||
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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const ActualAuthorInfo = ({
|
||
className,
|
||
imageUrl,
|
||
projectTitle,
|
||
// TODO: use userId to link to user's profile
|
||
userId,
|
||
// eslint-disable-line no-unused-vars
|
||
username
|
||
}) => /*#__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
|
||
}), /*#__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(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 = _ref => {
|
||
let {
|
||
projectId
|
||
} = _ref,
|
||
props = _objectWithoutProperties(_ref, _excluded);
|
||
|
||
return projectId ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("a", {
|
||
className: _author_info_css__WEBPACK_IMPORTED_MODULE_5___default.a.link,
|
||
href: "https://scratch.mit.edu/projects/".concat(projectId),
|
||
target: "_blank",
|
||
rel: "noreferrer"
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(ActualAuthorInfo, props)) : /*#__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 = ({
|
||
className,
|
||
onClick
|
||
}) => /*#__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/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--mystuff.png":
|
||
/*!***************************************************!*\
|
||
!*** ./src/components/menu-bar/icon--mystuff.png ***!
|
||
\***************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/e764d9d9a7a12892e0845b11cd4202df.png";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/components/menu-bar/icon--profile.png":
|
||
/*!***************************************************!*\
|
||
!*** ./src/components/menu-bar/icon--profile.png ***!
|
||
\***************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/52797b48d511ecdd8e938684cee7638e.png";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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 = ({
|
||
children,
|
||
className,
|
||
onRequestClose,
|
||
open,
|
||
place = 'right'
|
||
}) => /*#__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 _coming_soon_coming_soon_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../coming-soon/coming-soon.jsx */ "./src/components/coming-soon/coming-soon.jsx");
|
||
/* harmony import */ var _divider_divider_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../divider/divider.jsx */ "./src/components/divider/divider.jsx");
|
||
/* harmony import */ var _containers_language_selector_jsx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../containers/language-selector.jsx */ "./src/containers/language-selector.jsx");
|
||
/* harmony import */ var _containers_project_watcher_jsx__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../containers/project-watcher.jsx */ "./src/containers/project-watcher.jsx");
|
||
/* harmony import */ var _menu_bar_menu_jsx__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./menu-bar-menu.jsx */ "./src/components/menu-bar/menu-bar-menu.jsx");
|
||
/* harmony import */ var _menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../menu/menu.jsx */ "./src/components/menu/menu.jsx");
|
||
/* harmony import */ var _project_title_input_jsx__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./project-title-input.jsx */ "./src/components/menu-bar/project-title-input.jsx");
|
||
/* harmony import */ var _author_info_jsx__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./author-info.jsx */ "./src/components/menu-bar/author-info.jsx");
|
||
/* harmony import */ var _containers_sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../containers/sb3-downloader.jsx */ "./src/containers/sb3-downloader.jsx");
|
||
/* harmony import */ var _containers_deletion_restorer_jsx__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../containers/deletion-restorer.jsx */ "./src/containers/deletion-restorer.jsx");
|
||
/* harmony import */ var _containers_turbo_mode_jsx__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../containers/turbo-mode.jsx */ "./src/containers/turbo-mode.jsx");
|
||
/* harmony import */ var _containers_menu_bar_hoc_jsx__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../containers/menu-bar-hoc.jsx */ "./src/containers/menu-bar-hoc.jsx");
|
||
/* harmony import */ var _containers_tw_framerate_changer_jsx__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../containers/tw-framerate-changer.jsx */ "./src/containers/tw-framerate-changer.jsx");
|
||
/* harmony import */ var _containers_tw_change_username_jsx__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../containers/tw-change-username.jsx */ "./src/containers/tw-change-username.jsx");
|
||
/* harmony import */ var _containers_tw_cloud_toggler_jsx__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../containers/tw-cloud-toggler.jsx */ "./src/containers/tw-cloud-toggler.jsx");
|
||
/* harmony import */ var _containers_tw_restore_point_loader_jsx__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../containers/tw-restore-point-loader.jsx */ "./src/containers/tw-restore-point-loader.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 _lib_assets_icon_tutorials_svg__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../../lib/assets/icon--tutorials.svg */ "./src/lib/assets/icon--tutorials.svg");
|
||
/* harmony import */ var _lib_assets_icon_tutorials_svg__WEBPACK_IMPORTED_MODULE_37___default = /*#__PURE__*/__webpack_require__.n(_lib_assets_icon_tutorials_svg__WEBPACK_IMPORTED_MODULE_37__);
|
||
/* harmony import */ var _icon_mystuff_png__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./icon--mystuff.png */ "./src/components/menu-bar/icon--mystuff.png");
|
||
/* harmony import */ var _icon_mystuff_png__WEBPACK_IMPORTED_MODULE_38___default = /*#__PURE__*/__webpack_require__.n(_icon_mystuff_png__WEBPACK_IMPORTED_MODULE_38__);
|
||
/* harmony import */ var _icon_profile_png__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./icon--profile.png */ "./src/components/menu-bar/icon--profile.png");
|
||
/* harmony import */ var _icon_profile_png__WEBPACK_IMPORTED_MODULE_39___default = /*#__PURE__*/__webpack_require__.n(_icon_profile_png__WEBPACK_IMPORTED_MODULE_39__);
|
||
/* harmony import */ var _icon_remix_svg__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./icon--remix.svg */ "./src/components/menu-bar/icon--remix.svg");
|
||
/* harmony import */ var _icon_remix_svg__WEBPACK_IMPORTED_MODULE_40___default = /*#__PURE__*/__webpack_require__.n(_icon_remix_svg__WEBPACK_IMPORTED_MODULE_40__);
|
||
/* harmony import */ var _dropdown_caret_svg__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./dropdown-caret.svg */ "./src/components/menu-bar/dropdown-caret.svg");
|
||
/* harmony import */ var _dropdown_caret_svg__WEBPACK_IMPORTED_MODULE_41___default = /*#__PURE__*/__webpack_require__.n(_dropdown_caret_svg__WEBPACK_IMPORTED_MODULE_41__);
|
||
/* harmony import */ var _language_selector_language_icon_svg__WEBPACK_IMPORTED_MODULE_42__ = __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_42___default = /*#__PURE__*/__webpack_require__.n(_language_selector_language_icon_svg__WEBPACK_IMPORTED_MODULE_42__);
|
||
/* harmony import */ var _icon_about_svg__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./icon--about.svg */ "./src/components/menu-bar/icon--about.svg");
|
||
/* harmony import */ var _icon_about_svg__WEBPACK_IMPORTED_MODULE_43___default = /*#__PURE__*/__webpack_require__.n(_icon_about_svg__WEBPACK_IMPORTED_MODULE_43__);
|
||
/* harmony import */ var _tw_error_svg__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./tw-error.svg */ "./src/components/menu-bar/tw-error.svg");
|
||
/* harmony import */ var _tw_error_svg__WEBPACK_IMPORTED_MODULE_44___default = /*#__PURE__*/__webpack_require__.n(_tw_error_svg__WEBPACK_IMPORTED_MODULE_44__);
|
||
/* harmony import */ var _tw_moon_svg__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./tw-moon.svg */ "./src/components/menu-bar/tw-moon.svg");
|
||
/* harmony import */ var _tw_moon_svg__WEBPACK_IMPORTED_MODULE_45___default = /*#__PURE__*/__webpack_require__.n(_tw_moon_svg__WEBPACK_IMPORTED_MODULE_45__);
|
||
/* harmony import */ var _scratch_logo_svg__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./scratch-logo.svg */ "./src/components/menu-bar/scratch-logo.svg");
|
||
/* harmony import */ var _scratch_logo_svg__WEBPACK_IMPORTED_MODULE_46___default = /*#__PURE__*/__webpack_require__.n(_scratch_logo_svg__WEBPACK_IMPORTED_MODULE_46__);
|
||
/* harmony import */ var _lib_shared_messages__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../../lib/shared-messages */ "./src/lib/shared-messages.js");
|
||
/* harmony import */ var _tw_see_inside_jsx__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./tw-see-inside.jsx */ "./src/components/menu-bar/tw-see-inside.jsx");
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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 = ({
|
||
children,
|
||
className,
|
||
enable,
|
||
id,
|
||
place = 'bottom'
|
||
}) => {
|
||
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_13__["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 = ({
|
||
id,
|
||
isRtl,
|
||
children,
|
||
className
|
||
}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_coming_soon_coming_soon_jsx__WEBPACK_IMPORTED_MODULE_13__["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_43___default.a,
|
||
onClick: props.onClick
|
||
});
|
||
|
||
AboutButton.propTypes = {
|
||
onClick: prop_types__WEBPACK_IMPORTED_MODULE_4___default.a.func.isRequired
|
||
}; // Unlike <MenuItem href="">, this uses an actual <a>
|
||
|
||
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",
|
||
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_18__["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', 'handleClickRemix', 'handleClickSave', 'handleClickSaveAsCopy', 'handleClickPackager', '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_47__["default"].replaceProjectWarning));
|
||
this.props.onRequestCloseFile();
|
||
|
||
if (readyToReplaceProject) {
|
||
this.props.onClickNew(this.props.canSave && this.props.canCreateNew);
|
||
}
|
||
|
||
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();
|
||
}
|
||
|
||
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 === '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);
|
||
}
|
||
}
|
||
|
||
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_43___default.a,
|
||
draggable: false
|
||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_bar_menu_jsx__WEBPACK_IMPORTED_MODULE_17__["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_18__["MenuItem"], {
|
||
key: itemProps.title,
|
||
isRtl: this.props.isRtl,
|
||
onClick: this.wrapAboutMenuCallback(itemProps.onClick)
|
||
}, itemProps.title))));
|
||
}
|
||
|
||
wrapAboutMenuCallback(callback) {
|
||
return () => {
|
||
callback();
|
||
this.props.onRequestCloseAbout();
|
||
};
|
||
}
|
||
|
||
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_40___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
|
||
}, this.props.onClickLogo ? /*#__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: this.props.logo,
|
||
onClick: this.props.onClickLogo
|
||
})) : null, 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_42___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_41___default.a,
|
||
width: "8",
|
||
height: "5"
|
||
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_language_selector_jsx__WEBPACK_IMPORTED_MODULE_15__["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_45___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_44___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_41___default.a
|
||
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_bar_menu_jsx__WEBPACK_IMPORTED_MODULE_17__["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_18__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(MenuItemLink, {
|
||
href: "https://scratch.mit.edu/users/GarboMuffin/#comments"
|
||
}, /*#__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://scratch.mit.edu/users/GarboMuffin/#comments"
|
||
}, /*#__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_18__["MenuSection"], null, this.props.compileErrors.map(({
|
||
id,
|
||
sprite,
|
||
error
|
||
}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["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_17__["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_18__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuItem"], {
|
||
isRtl: this.props.isRtl,
|
||
onClick: this.handleClickNew
|
||
}, newProjectMessage)), (this.props.canSave || this.props.canCreateCopy || this.props.canRemix) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuSection"], null, this.props.canSave && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuItem"], {
|
||
onClick: this.handleClickSave
|
||
}, saveNowMessage), this.props.canCreateCopy && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuItem"], {
|
||
onClick: this.handleClickSaveAsCopy
|
||
}, createCopyMessage), this.props.canRemix && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuItem"], {
|
||
onClick: this.handleClickRemix
|
||
}, remixMessage)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuItem"], {
|
||
onClick: this.props.onStartSelectingFileUpload
|
||
}, this.props.intl.formatMessage(_lib_shared_messages__WEBPACK_IMPORTED_MODULE_47__["default"].loadFromComputerTitle)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_sb3_downloader_jsx__WEBPACK_IMPORTED_MODULE_21__["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__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["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}",
|
||
id: "tw.saveTo",
|
||
values: {
|
||
file: extended.name
|
||
}
|
||
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["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-line max-len
|
||
id: "tw.saveAs"
|
||
}))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["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...",
|
||
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.onClickPackager && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["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_18__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_tw_restore_point_loader_jsx__WEBPACK_IMPORTED_MODULE_28__["default"], null, (className, loadRestorePoint) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuItem"], {
|
||
className: className,
|
||
onClick: loadRestorePoint
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], {
|
||
defaultMessage: "Load restore point",
|
||
id: "tw.menuBar.loadRestorePoint"
|
||
})))))), /*#__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_17__["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_22__["default"], null, (handleRestore, {
|
||
restorable,
|
||
deletedItem
|
||
}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["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_18__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_turbo_mode_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], null, (toggleTurboMode, {
|
||
turboMode
|
||
}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["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_25__["default"], null, (changeFramerate, {
|
||
framerate
|
||
}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["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_26__["default"], null, changeUsername => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuItem"], {
|
||
onClick: 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_27__["default"], null, (toggleCloudVariables, {
|
||
enabled,
|
||
canUseCloudVariables
|
||
}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["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_18__["MenuSection"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_menu_menu_jsx__WEBPACK_IMPORTED_MODULE_18__["MenuItem"], {
|
||
onClick: this.props.onClickSettings
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_3__["FormattedMessage"], {
|
||
defaultMessage: "Advanced Settings",
|
||
id: "tw.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: "Advanced",
|
||
id: "tw.menuBar.advanced"
|
||
})))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_divider_divider_jsx__WEBPACK_IMPORTED_MODULE_14__["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_19__["default"], {
|
||
className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(_menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.titleFieldGrowable)
|
||
}))) : this.props.authorUsername && this.props.authorUsername !== this.props.username ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_author_info_jsx__WEBPACK_IMPORTED_MODULE_20__["default"], {
|
||
className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.authorInfo,
|
||
imageUrl: this.props.authorThumbnailUrl,
|
||
projectId: this.props.projectId,
|
||
projectTitle: this.props.projectTitle,
|
||
userId: this.props.authorId,
|
||
username: this.props.authorUsername
|
||
}) : 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.canShare ? (this.props.isShowingProject || this.props.isUpdating) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_containers_project_watcher_jsx__WEBPACK_IMPORTED_MODULE_16__["default"], {
|
||
onDoneUpdating: this.props.onSeeCommunity
|
||
}, waitForUpdate => /*#__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
|
||
/* eslint-disable react/jsx-no-bind */
|
||
,
|
||
onClick: () => {
|
||
this.handleClickShare(waitForUpdate);
|
||
}
|
||
/* eslint-enable react/jsx-no-bind */
|
||
|
||
})) : this.props.showComingSoon ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(MenuBarItemTooltip, {
|
||
id: "share-button"
|
||
}, /*#__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
|
||
})) : [], 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_16__["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_48__["default"], {
|
||
className: _menu_bar_css__WEBPACK_IMPORTED_MODULE_36___default.a.menuBarButton,
|
||
onClick: this.handleClickSeeInside
|
||
}) : []), /*#__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.mit.edu/users/GarboMuffin/#comments",
|
||
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: "TurboWarp Feedback",
|
||
id: "tw.feedbackButton"
|
||
}))))), /*#__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"],
|
||
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,
|
||
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,
|
||
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,
|
||
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,
|
||
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_46___default.a,
|
||
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,
|
||
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"])()),
|
||
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_24__["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 = ({
|
||
className,
|
||
intl,
|
||
onSubmit,
|
||
projectTitle
|
||
}) => /*#__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_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 _share_button_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./share-button.css */ "./src/components/menu-bar/share-button.css");
|
||
/* harmony import */ var _share_button_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_share_button_css__WEBPACK_IMPORTED_MODULE_5__);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const ShareButton = ({
|
||
className,
|
||
isShared,
|
||
onClick
|
||
}) => /*#__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, _share_button_css__WEBPACK_IMPORTED_MODULE_5___default.a.shareButton, {
|
||
[_share_button_css__WEBPACK_IMPORTED_MODULE_5___default.a.shareButtonIsShared]: isShared
|
||
}),
|
||
onClick: onClick
|
||
}, isShared ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||
defaultMessage: "Shared",
|
||
id: "gui.menuBar.isShared"
|
||
}) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||
defaultMessage: "Share",
|
||
id: "gui.menuBar.share"
|
||
}));
|
||
|
||
ShareButton.propTypes = {
|
||
className: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string,
|
||
isShared: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
onClick: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func
|
||
};
|
||
ShareButton.defaultProps = {
|
||
onClick: () => {}
|
||
};
|
||
/* harmony default export */ __webpack_exports__["default"] = (ShareButton);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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 = ({
|
||
alertsList,
|
||
fileHandle,
|
||
projectChanged
|
||
}) => 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, {
|
||
smartSave
|
||
}) => /*#__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 = ({
|
||
className,
|
||
onClick
|
||
}) => /*#__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 = ({
|
||
className,
|
||
imageUrl
|
||
}) => /*#__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 = ({
|
||
className = '',
|
||
children,
|
||
componentRef,
|
||
place = 'right'
|
||
}) => /*#__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 = ({
|
||
children,
|
||
className,
|
||
onClick
|
||
}) => /*#__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 = ({
|
||
children
|
||
}) => /*#__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: _modal_css__WEBPACK_IMPORTED_MODULE_10___default.a.modalOverlay,
|
||
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
|
||
};
|
||
/* 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__);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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 => /*#__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
|
||
}))));
|
||
|
||
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__);
|
||
|
||
|
||
|
||
|
||
const DefaultMonitor = ({
|
||
categoryColor,
|
||
label,
|
||
value
|
||
}) => /*#__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
|
||
}
|
||
}, 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,
|
||
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__);
|
||
|
||
|
||
|
||
|
||
const LargeMonitor = ({
|
||
categoryColor,
|
||
value
|
||
}) => /*#__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
|
||
}
|
||
}, value));
|
||
|
||
LargeMonitor.propTypes = {
|
||
categoryColor: 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.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");
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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({
|
||
index,
|
||
key,
|
||
style
|
||
}) {
|
||
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
|
||
}, this.props.values[index])));
|
||
}
|
||
|
||
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 - 44
|
||
/* 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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const categories = {
|
||
data: '#FF8C1A',
|
||
sensing: '#5CB1D6',
|
||
sound: '#CF63CF',
|
||
looks: '#9966FF',
|
||
motion: '#4C97FF',
|
||
list: '#FC662C',
|
||
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 => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_contextmenu__WEBPACK_IMPORTED_MODULE_5__["ContextMenuTrigger"], {
|
||
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
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(modes[props.mode], _objectSpread({
|
||
categoryColor: categories[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.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.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.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.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.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)),
|
||
componentRef: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,
|
||
draggable: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,
|
||
label: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired,
|
||
mode: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf(monitorModes),
|
||
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 = ({
|
||
categoryColor,
|
||
isDiscrete,
|
||
label,
|
||
min,
|
||
max,
|
||
value,
|
||
onSliderUpdate
|
||
}) => /*#__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
|
||
}
|
||
}, 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: 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/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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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/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,
|
||
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 unless this project is uploaded to Scratch or converted using a tool like the {packager}.",
|
||
values: {
|
||
packager: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("a", {
|
||
href: "https://packager.turbowarp.org",
|
||
target: "_blank",
|
||
rel: "noopener noreferrer"
|
||
}, 'TurboWarp 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/f0f9f818bc9fff5dc6f30f34cb1cc156.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/516274ebe91f61197ef4c62d1dc2024a.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/193be3815628fb3d90d4d636a0e97f3a.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--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--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/5306d1506a03db52b6f918de4c809ca7.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/f231056019ffe328e58432393f6102c5.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/82605c2ddff77109d8fafc0e4cf997ed.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_faster_svg__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./icon--faster.svg */ "./src/components/sound-editor/icon--faster.svg");
|
||
/* harmony import */ var _icon_faster_svg__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_icon_faster_svg__WEBPACK_IMPORTED_MODULE_16__);
|
||
/* harmony import */ var _icon_slower_svg__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./icon--slower.svg */ "./src/components/sound-editor/icon--slower.svg");
|
||
/* harmony import */ var _icon_slower_svg__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_icon_slower_svg__WEBPACK_IMPORTED_MODULE_17__);
|
||
/* harmony import */ var _icon_louder_svg__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./icon--louder.svg */ "./src/components/sound-editor/icon--louder.svg");
|
||
/* harmony import */ var _icon_louder_svg__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_icon_louder_svg__WEBPACK_IMPORTED_MODULE_18__);
|
||
/* harmony import */ var _icon_softer_svg__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./icon--softer.svg */ "./src/components/sound-editor/icon--softer.svg");
|
||
/* harmony import */ var _icon_softer_svg__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_icon_softer_svg__WEBPACK_IMPORTED_MODULE_19__);
|
||
/* harmony import */ var _icon_robot_svg__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./icon--robot.svg */ "./src/components/sound-editor/icon--robot.svg");
|
||
/* harmony import */ var _icon_robot_svg__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(_icon_robot_svg__WEBPACK_IMPORTED_MODULE_20__);
|
||
/* harmony import */ var _icon_echo_svg__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./icon--echo.svg */ "./src/components/sound-editor/icon--echo.svg");
|
||
/* harmony import */ var _icon_echo_svg__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_icon_echo_svg__WEBPACK_IMPORTED_MODULE_21__);
|
||
/* harmony import */ var _icon_reverse_svg__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./icon--reverse.svg */ "./src/components/sound-editor/icon--reverse.svg");
|
||
/* harmony import */ var _icon_reverse_svg__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(_icon_reverse_svg__WEBPACK_IMPORTED_MODULE_22__);
|
||
/* harmony import */ var _icon_fade_out_svg__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./icon--fade-out.svg */ "./src/components/sound-editor/icon--fade-out.svg");
|
||
/* harmony import */ var _icon_fade_out_svg__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(_icon_fade_out_svg__WEBPACK_IMPORTED_MODULE_23__);
|
||
/* harmony import */ var _icon_fade_in_svg__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./icon--fade-in.svg */ "./src/components/sound-editor/icon--fade-in.svg");
|
||
/* harmony import */ var _icon_fade_in_svg__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_icon_fade_in_svg__WEBPACK_IMPORTED_MODULE_24__);
|
||
/* harmony import */ var _icon_mute_svg__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./icon--mute.svg */ "./src/components/sound-editor/icon--mute.svg");
|
||
/* harmony import */ var _icon_mute_svg__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(_icon_mute_svg__WEBPACK_IMPORTED_MODULE_25__);
|
||
/* harmony import */ var _icon_delete_svg__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./icon--delete.svg */ "./src/components/sound-editor/icon--delete.svg");
|
||
/* harmony import */ var _icon_delete_svg__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(_icon_delete_svg__WEBPACK_IMPORTED_MODULE_26__);
|
||
/* harmony import */ var _icon_copy_svg__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./icon--copy.svg */ "./src/components/sound-editor/icon--copy.svg");
|
||
/* harmony import */ var _icon_copy_svg__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(_icon_copy_svg__WEBPACK_IMPORTED_MODULE_27__);
|
||
/* harmony import */ var _icon_paste_svg__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./icon--paste.svg */ "./src/components/sound-editor/icon--paste.svg");
|
||
/* harmony import */ var _icon_paste_svg__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(_icon_paste_svg__WEBPACK_IMPORTED_MODULE_28__);
|
||
/* harmony import */ var _icon_copy_to_new_svg__WEBPACK_IMPORTED_MODULE_29__ = __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_29___default = /*#__PURE__*/__webpack_require__.n(_icon_copy_to_new_svg__WEBPACK_IMPORTED_MODULE_29__);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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_27___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_28___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_29___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_26___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_faster_svg__WEBPACK_IMPORTED_MODULE_16___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_17___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_18___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_19___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_25___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_24___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_23___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_22___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_20___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_21___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("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 ', 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 may be too large to upload to Scratch.",
|
||
id: "tw.tooLarge"
|
||
})), 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,
|
||
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,
|
||
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,
|
||
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/e214dc66bba3d014deaa931a2be33f53.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/c80022cd3424a0dc9635de89433cf08e.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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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',
|
||
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/2d96b207399b06aa8fd389bb44cfbdb4.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/2e2faaf5753ac5ae1df6153ea2daf683.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");
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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": "tw.openAdvanced",
|
||
"defaultMessage": "Open advanced 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;
|
||
|
||
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", null, /*#__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-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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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'
|
||
}, /*#__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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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.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.height
|
||
}),
|
||
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/icon--stop-all.svg":
|
||
/*!****************************************************!*\
|
||
!*** ./src/components/stop-all/icon--stop-all.svg ***!
|
||
\****************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/36fcc7dbca20720abcab01e49d4955f9.svg";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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 _icon_stop_all_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icon--stop-all.svg */ "./src/components/stop-all/icon--stop-all.svg");
|
||
/* harmony import */ var _icon_stop_all_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_icon_stop_all_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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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: _icon_stop_all_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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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), /*#__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.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
|
||
}).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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
* 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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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 = ({
|
||
isSmall
|
||
}) => /*#__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-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 = ({
|
||
slug,
|
||
children
|
||
}) => /*#__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-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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const FancyCheckbox = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", _extends({}, props, {
|
||
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-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 = ({
|
||
framerate,
|
||
interpolation
|
||
}) => /*#__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-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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/* 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": "tw.settingsModal.title",
|
||
"defaultMessage": "Advanced 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: _settings_modal_css__WEBPACK_IMPORTED_MODULE_11___default.a.label
|
||
}, 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"], {
|
||
type: "checkbox",
|
||
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 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 DisableCompiler = 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 Compiler",
|
||
id: "tw.settingsModal.disableCompiler"
|
||
}),
|
||
help: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"] // eslint-disable-next-line max-len
|
||
, {
|
||
defaultMessage: "Disables the TurboWarp compiler. You may want to enable this while editing projects so that scripts update immediately. Otherwise, you should never enable this.",
|
||
id: "tw.settingsModal.disableCompilerHelp"
|
||
}),
|
||
slug: "disable-compiler"
|
||
}));
|
||
|
||
const CustomStageSize = ({
|
||
customStageSizeEnabled,
|
||
stageWidth,
|
||
onStageWidthChange,
|
||
stageHeight,
|
||
onStageHeightChange
|
||
}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(Setting, {
|
||
active: customStageSizeEnabled,
|
||
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: "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
|
||
};
|
||
|
||
const StoreProjectOptions = ({
|
||
onStoreProjectOptions
|
||
}) => /*#__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 TurboWarp loads this project. Warp timer and disable compiler 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: props.onClose,
|
||
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: "Featured",
|
||
id: "tw.settingsModal.featured"
|
||
})), /*#__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(Interpolation, {
|
||
value: props.interpolation,
|
||
onChange: props.onInterpolationChange
|
||
}), /*#__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: "Danger Zone",
|
||
id: "tw.settingsModal.dangerZone"
|
||
})), !props.isEmbedded && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(CustomStageSize, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(DisableCompiler, {
|
||
value: props.disableCompiler,
|
||
onChange: props.onDisableCompilerChange
|
||
}), !props.isEmbedded && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(StoreProjectOptions, props)));
|
||
|
||
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,
|
||
onDisableCompilerChange: 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-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 _username_modal_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./username-modal.css */ "./src/components/tw-username-modal/username-modal.css");
|
||
/* harmony import */ var _username_modal_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_username_modal_css__WEBPACK_IMPORTED_MODULE_6__);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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_6___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_6___default.a.body
|
||
}, props.mustChangeUsername && /*#__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_6___default.a.helpText, _username_modal_css__WEBPACK_IMPORTED_MODULE_6___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_6___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"
|
||
}))
|
||
}
|
||
}))), /*#__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_6___default.a.textInput,
|
||
value: props.value,
|
||
onChange: props.onChange,
|
||
onFocus: props.onFocus,
|
||
onKeyPress: props.onKeyPress,
|
||
pattern: "^[a-zA-Z0-9_-]*$",
|
||
maxLength: "20",
|
||
spellCheck: "false"
|
||
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("p", {
|
||
className: _username_modal_css__WEBPACK_IMPORTED_MODULE_6___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_6___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_6___default.a.buttonRow
|
||
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("button", {
|
||
className: _username_modal_css__WEBPACK_IMPORTED_MODULE_6___default.a.cancelButton,
|
||
onClick: props.onReset
|
||
}, /*#__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_6___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_6___default.a.okButton,
|
||
onClick: props.onOk,
|
||
disabled: !props.valueValid
|
||
}, /*#__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,
|
||
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/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(([x, y], i) => {
|
||
const [nx, ny] = points[i < points.length - 1 ? i + 1 : 0];
|
||
return "Q".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/components/webgl-modal/unsupported.png":
|
||
/*!****************************************************!*\
|
||
!*** ./src/components/webgl-modal/unsupported.png ***!
|
||
\****************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/905aaa5ec7fca7cf364f5e74bcb10be1.png";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/components/webgl-modal/webgl-modal.css":
|
||
/*!****************************************************!*\
|
||
!*** ./src/components/webgl-modal/webgl-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!./webgl-modal.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/components/webgl-modal/webgl-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/webgl-modal/webgl-modal.jsx":
|
||
/*!****************************************************!*\
|
||
!*** ./src/components/webgl-modal/webgl-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 _webgl_modal_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./webgl-modal.css */ "./src/components/webgl-modal/webgl-modal.css");
|
||
/* harmony import */ var _webgl_modal_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_webgl_modal_css__WEBPACK_IMPORTED_MODULE_5__);
|
||
const _excluded = ["intl"];
|
||
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({
|
||
label: {
|
||
"id": "gui.webglModal.label",
|
||
"defaultMessage": "Your Browser Does Not Support WebGL"
|
||
}
|
||
});
|
||
|
||
const WebGlModal = _ref => {
|
||
let {
|
||
intl
|
||
} = _ref,
|
||
props = _objectWithoutProperties(_ref, _excluded);
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_modal__WEBPACK_IMPORTED_MODULE_2___default.a, {
|
||
isOpen: true,
|
||
className: _webgl_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.modalContent,
|
||
contentLabel: intl.formatMessage(_objectSpread({}, messages.label)),
|
||
overlayClassName: _webgl_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.modalOverlay
|
||
}, /*#__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: _webgl_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.illustration
|
||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_box_box_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
||
className: _webgl_modal_css__WEBPACK_IMPORTED_MODULE_5___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"], messages.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_4__["FormattedMessage"], {
|
||
defaultMessage: "Unfortunately it looks like your browser or computer {webGlLink}. This technology 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", {
|
||
className: _webgl_modal_css__WEBPACK_IMPORTED_MODULE_5___default.a.faqLink,
|
||
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"
|
||
}))
|
||
}
|
||
})))));
|
||
};
|
||
|
||
WebGlModal.propTypes = {
|
||
intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"].isRequired,
|
||
isRtl: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool
|
||
};
|
||
/* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(WebGlModal));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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 _tw_restore_point_loader_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tw-restore-point-loader.jsx */ "./src/containers/tw-restore-point-loader.jsx");
|
||
/* harmony import */ var _components_alerts_alert_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/alerts/alert.jsx */ "./src/components/alerts/alert.jsx");
|
||
/* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js");
|
||
/* harmony import */ var _reducers_connection_modal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/connection-modal */ "./src/reducers/connection-modal.js");
|
||
/* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_9__ = __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_6__["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_8__["setConnectionModalExtensionId"])(id));
|
||
dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_7__["openConnectionModal"])());
|
||
},
|
||
onSaveNow: () => {
|
||
dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_9__["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 = ({
|
||
alertsList,
|
||
className,
|
||
onCloseAlert
|
||
}) => /*#__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
|
||
}; // 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",
|
||
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 scratch_vm__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js");
|
||
/* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_10__);
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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', '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);
|
||
});
|
||
});
|
||
}
|
||
|
||
findItemById(id) {
|
||
return this.state.contents.find(i => i.id === id);
|
||
}
|
||
|
||
handleRename(id) {
|
||
const item = this.findItemById(id); // eslint-disable-next-line no-alert
|
||
|
||
const newName = 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: 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,
|
||
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_10___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 _lib_blocks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/blocks */ "./src/lib/blocks.js");
|
||
/* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js");
|
||
/* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_7__);
|
||
/* harmony import */ var _lib_log_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/log.js */ "./src/lib/log.js");
|
||
/* harmony import */ var _prompt_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./prompt.jsx */ "./src/containers/prompt.jsx");
|
||
/* harmony import */ var _components_blocks_blocks_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/blocks/blocks.jsx */ "./src/components/blocks/blocks.jsx");
|
||
/* harmony import */ var _extension_library_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./extension-library.jsx */ "./src/containers/extension-library.jsx");
|
||
/* harmony import */ var _lib_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../lib/libraries/extensions/index.jsx */ "./src/lib/libraries/extensions/index.jsx");
|
||
/* harmony import */ var _custom_procedures_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./custom-procedures.jsx */ "./src/containers/custom-procedures.jsx");
|
||
/* harmony import */ var _lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../lib/error-boundary-hoc.jsx */ "./src/lib/error-boundary-hoc.jsx");
|
||
/* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/layout-constants */ "./src/lib/layout-constants.js");
|
||
/* harmony import */ var _lib_drop_area_hoc_jsx__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/drop-area-hoc.jsx */ "./src/lib/drop-area-hoc.jsx");
|
||
/* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../lib/drag-constants */ "./src/lib/drag-constants.js");
|
||
/* harmony import */ var _lib_define_dynamic_block__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/define-dynamic-block */ "./src/lib/define-dynamic-block.js");
|
||
/* harmony import */ var _addons_hooks__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../addons/hooks */ "./src/addons/hooks.js");
|
||
/* harmony import */ var _lib_tw_load_scratch_blocks_hoc_jsx__WEBPACK_IMPORTED_MODULE_20__ = __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_21__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
|
||
/* harmony import */ var _reducers_toolbox__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../reducers/toolbox */ "./src/reducers/toolbox.js");
|
||
/* harmony import */ var _reducers_color_picker__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../reducers/color-picker */ "./src/reducers/color-picker.js");
|
||
/* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js");
|
||
/* harmony import */ var _reducers_custom_procedures__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../reducers/custom-procedures */ "./src/reducers/custom-procedures.js");
|
||
/* harmony import */ var _reducers_connection_modal__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../reducers/connection-modal */ "./src/reducers/connection-modal.js");
|
||
/* harmony import */ var _reducers_workspace_metrics__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../reducers/workspace-metrics */ "./src/reducers/workspace-metrics.js");
|
||
/* harmony import */ var _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_28__ = __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", "updateToolboxState", "onActivateCustomProcedures", "onRequestCloseExtensionLibrary", "onRequestCloseCustomProcedures", "toolboxXML", "updateMetrics", "workspaceMetrics"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const addFunctionListener = (object, property, callback) => {
|
||
const oldFn = object[property];
|
||
|
||
object[property] = function (...args) {
|
||
const result = oldFn.apply(this, args);
|
||
callback.apply(this, result);
|
||
return result;
|
||
};
|
||
};
|
||
|
||
const DroppableBlocks = Object(_lib_drop_area_hoc_jsx__WEBPACK_IMPORTED_MODULE_16__["default"])([_lib_drag_constants__WEBPACK_IMPORTED_MODULE_17__["default"].BACKPACK_CODE])(_components_blocks_blocks_jsx__WEBPACK_IMPORTED_MODULE_10__["default"]);
|
||
|
||
class Blocks extends react__WEBPACK_IMPORTED_MODULE_5___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
this.ScratchBlocks = Object(_lib_blocks__WEBPACK_IMPORTED_MODULE_6__["default"])(props.vm);
|
||
window.ScratchBlocks = this.ScratchBlocks;
|
||
_addons_hooks__WEBPACK_IMPORTED_MODULE_19__["default"].blockly = this.ScratchBlocks;
|
||
_addons_hooks__WEBPACK_IMPORTED_MODULE_19__["default"].blocklyCallbacks.forEach(i => i());
|
||
_addons_hooks__WEBPACK_IMPORTED_MODULE_19__["default"].blocklyCallbacks.length = 0;
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['attachVM', 'detachVM', 'getToolboxXML', 'handleCategorySelected', 'handleConnectionModalStart', 'handleDrop', 'handleStatusButtonUpdate', 'handleOpenSoundRecorder', 'handlePromptStart', 'handlePromptCallback', 'handlePromptClose', 'handleCustomProceduresClose', 'onScriptGlowOn', 'onScriptGlowOff', 'onBlockGlowOn', 'onBlockGlowOff', 'handleMonitorsUpdate', 'handleExtensionAdded', 'handleBlocksInfoUpdate', 'onTargetsUpdate', 'onVisualReport', 'onWorkspaceUpdate', 'onWorkspaceMetricsChange', 'setBlocks', 'setLocale']);
|
||
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 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('OPEN_DOCUMENTATION', block => {
|
||
const CLASS_PREFIX = 'docs-uri-';
|
||
const svgGroup = block.svgGroup_;
|
||
const docsURIClass = Array.from(svgGroup.classList).find(i => i.startsWith(CLASS_PREFIX));
|
||
|
||
if (!docsURIClass) {
|
||
return;
|
||
}
|
||
|
||
try {
|
||
const docsURI = docsURIClass.substr(CLASS_PREFIX.length);
|
||
const url = new URL(docsURI);
|
||
|
||
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
|
||
throw new Error('invalid protocol');
|
||
}
|
||
|
||
window.open(docsURI, '_blank');
|
||
} catch (e) {
|
||
_lib_log_js__WEBPACK_IMPORTED_MODULE_8__["default"].warn('cannot open docs URI', e);
|
||
}
|
||
}); // 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 = () => {
|
||
this.setToolboxRefreshEnabled(false);
|
||
}; // @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('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('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('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('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);
|
||
}
|
||
|
||
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 : '');
|
||
} catch (_unused) {
|
||
return null;
|
||
}
|
||
}
|
||
|
||
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_8__["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.
|
||
// TODO: What about monitors that have fields? See todo in scratch-vm blocks.js changeBlock:
|
||
// https://github.com/LLK/scratch-vm/blob/2373f9483edaf705f11d62662f7bb2a57fbb5e28/src/engine/blocks.js#L569-L576
|
||
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);
|
||
} // otherwise it's a non-block entry such as '---'
|
||
|
||
});
|
||
this.ScratchBlocks.defineBlocksWithJsonArray(staticBlocksJson);
|
||
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_18__["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_12__["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
|
||
});
|
||
}
|
||
|
||
render() {
|
||
/* eslint-disable no-unused-vars */
|
||
const _this$props = this.props,
|
||
{
|
||
anyModalVisible,
|
||
canUseCloud,
|
||
customStageSize,
|
||
customProceduresVisible,
|
||
extensionLibraryVisible,
|
||
options,
|
||
stageSize,
|
||
vm,
|
||
isRtl,
|
||
isVisible,
|
||
onActivateColorPicker,
|
||
onOpenConnectionModal,
|
||
onOpenSoundRecorder,
|
||
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_9__["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_11__["default"], {
|
||
vm: vm,
|
||
onCategorySelected: this.handleCategorySelected,
|
||
onRequestClose: onRequestCloseExtensionLibrary
|
||
}) : null, customProceduresVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(_custom_procedures_jsx__WEBPACK_IMPORTED_MODULE_13__["default"], {
|
||
options: {
|
||
media: options.media
|
||
},
|
||
onRequestClose: this.handleCustomProceduresClose
|
||
}) : null);
|
||
}
|
||
|
||
}
|
||
|
||
Blocks.propTypes = {
|
||
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,
|
||
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_15__["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_7___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)
|
||
})
|
||
};
|
||
Blocks.defaultOptions = {
|
||
zoom: {
|
||
controls: true,
|
||
wheel: true,
|
||
startScale: _lib_layout_constants__WEBPACK_IMPORTED_MODULE_15__["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
|
||
});
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
onActivateColorPicker: callback => dispatch(Object(_reducers_color_picker__WEBPACK_IMPORTED_MODULE_23__["activateColorPicker"])(callback)),
|
||
onActivateCustomProcedures: (data, callback) => dispatch(Object(_reducers_custom_procedures__WEBPACK_IMPORTED_MODULE_25__["activateCustomProcedures"])(data, callback)),
|
||
onOpenConnectionModal: id => {
|
||
dispatch(Object(_reducers_connection_modal__WEBPACK_IMPORTED_MODULE_26__["setConnectionModalExtensionId"])(id));
|
||
dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_24__["openConnectionModal"])());
|
||
},
|
||
onOpenSoundRecorder: () => {
|
||
dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_28__["activateTab"])(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_28__["SOUNDS_TAB_INDEX"]));
|
||
dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_24__["openSoundRecorder"])());
|
||
},
|
||
onRequestCloseExtensionLibrary: () => {
|
||
dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_24__["closeExtensionLibrary"])());
|
||
},
|
||
onRequestCloseCustomProcedures: data => {
|
||
dispatch(Object(_reducers_custom_procedures__WEBPACK_IMPORTED_MODULE_25__["deactivateCustomProcedures"])(data));
|
||
},
|
||
updateToolboxState: toolboxXML => {
|
||
dispatch(Object(_reducers_toolbox__WEBPACK_IMPORTED_MODULE_22__["updateToolbox"])(toolboxXML));
|
||
},
|
||
updateMetrics: metrics => {
|
||
dispatch(Object(_reducers_workspace_metrics__WEBPACK_IMPORTED_MODULE_27__["updateMetrics"])(metrics));
|
||
}
|
||
});
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (Object(_lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_14__["default"])('Blocks')(Object(react_redux__WEBPACK_IMPORTED_MODULE_21__["connect"])(mapStateToProps, mapDispatchToProps)(Object(_lib_tw_load_scratch_blocks_hoc_jsx__WEBPACK_IMPORTED_MODULE_20__["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");
|
||
/* harmony import */ var _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/layout-constants.js */ "./src/lib/layout-constants.js");
|
||
const _excluded = ["vm", "isStarted", "projectRunning", "turbo"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
class Controls extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleGreenFlagClick', '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();
|
||
}
|
||
}
|
||
|
||
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,
|
||
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,
|
||
turbo: turbo,
|
||
onGreenFlagClick: this.handleGreenFlagClick,
|
||
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,
|
||
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
|
||
}); // 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
|
||
};
|
||
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",
|
||
tags: _lib_libraries_sprite_tags__WEBPACK_IMPORTED_MODULE_6__["default"],
|
||
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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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)], {
|
||
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
|
||
};
|
||
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
|
||
};
|
||
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.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");
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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', 'handleAddTextNumber', 'handleToggleWarp', 'handleCancel', 'handleOk', 'setBlocks']);
|
||
this.state = {
|
||
rtlOffset: 0,
|
||
warp: false
|
||
};
|
||
}
|
||
|
||
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()
|
||
}); // Allow the initial events to run to position this block, then focus.
|
||
|
||
setTimeout(() => {
|
||
this.mutationRoot.focusLastEditor_();
|
||
});
|
||
}
|
||
|
||
handleCancel() {
|
||
this.props.onRequestClose();
|
||
}
|
||
|
||
handleOk() {
|
||
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();
|
||
}
|
||
}
|
||
|
||
handleAddTextNumber() {
|
||
if (this.mutationRoot) {
|
||
this.mutationRoot.addStringNumberExternal();
|
||
}
|
||
}
|
||
|
||
handleToggleWarp() {
|
||
if (this.mutationRoot) {
|
||
const newWarp = !this.mutationRoot.getWarp();
|
||
this.mutationRoot.setWarp(newWarp);
|
||
this.setState({
|
||
warp: newWarp
|
||
});
|
||
}
|
||
}
|
||
|
||
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,
|
||
onAddBoolean: this.handleAddBoolean,
|
||
onAddLabel: this.handleAddLabel,
|
||
onAddTextNumber: this.handleAddTextNumber,
|
||
onCancel: this.handleCancel,
|
||
onOk: this.handleOk,
|
||
onToggleWarp: this.handleToggleWarp
|
||
});
|
||
}
|
||
|
||
}
|
||
|
||
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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* 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:
|
||
*
|
||
* <DeletionRestorer>{(restoreDeletion, props) => (
|
||
* <MyCoolComponent
|
||
* onClick={restoreDeletion}
|
||
* {...props}
|
||
* />
|
||
* )}</DeletionRestorer>
|
||
*/
|
||
|
||
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
|
||
} = _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']);
|
||
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);
|
||
}
|
||
|
||
handleClickLeftRight() {
|
||
this.props.onChangeRotationStyle(_components_direction_picker_direction_picker_jsx__WEBPACK_IMPORTED_MODULE_3__["RotationStyles"].LEFT_RIGHT);
|
||
}
|
||
|
||
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,
|
||
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() {
|
||
this.container.appendChild(this.props.domElement);
|
||
}
|
||
|
||
componentWillUnmount() {
|
||
this.container.removeChild(this.props.domElement);
|
||
}
|
||
|
||
setContainer(c) {
|
||
this.container = c;
|
||
}
|
||
|
||
render() {
|
||
// 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(this.props.domElement, lodash_omit__WEBPACK_IMPORTED_MODULE_0___default()(this.props, ['domElement', 'children', 'style'])); // Convert react style prop to dom element styling.
|
||
|
||
if (this.props.style) {
|
||
this.props.domElement.style.cssText = to_style__WEBPACK_IMPORTED_MODULE_3___default.a.string(this.props.style);
|
||
}
|
||
|
||
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, "\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: parseExtensionURL, default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseExtensionURL", function() { return parseExtensionURL; });
|
||
/* 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_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/libraries/extensions/index.jsx */ "./src/lib/libraries/extensions/index.jsx");
|
||
/* 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 _components_action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_7__ = __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_7___default = /*#__PURE__*/__webpack_require__.n(_components_action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_7__);
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({
|
||
extensionTitle: {
|
||
"id": "gui.extensionLibrary.chooseAnExtension",
|
||
"defaultMessage": "Choose an Extension"
|
||
},
|
||
extensionUrl: {
|
||
"id": "gui.extensionLibrary.extensionUrl",
|
||
"defaultMessage": "Enter the URL of the extension"
|
||
},
|
||
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?"
|
||
}
|
||
});
|
||
const parseExtensionURL = url => {
|
||
// Parse real extension URL from scratchx.org URL
|
||
const match = url.match(/^https?:\/\/scratchx\.org\/\?url=(.*)$/);
|
||
|
||
if (match) {
|
||
return match[1];
|
||
}
|
||
|
||
return url;
|
||
};
|
||
|
||
class ExtensionLibrary extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleItemSelect']);
|
||
}
|
||
|
||
handleItemSelect(item) {
|
||
// eslint-disable-next-line no-alert
|
||
if (item.incompatibleWithScratch && !confirm(this.props.intl.formatMessage(messages.incompatible))) {
|
||
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));
|
||
}
|
||
|
||
if (url && !item.disabled) {
|
||
if (this.props.vm.extensionManager.isExtensionLoaded(url)) {
|
||
this.props.onCategorySelected(id);
|
||
} else {
|
||
const parsedURL = isCustomURL ? parseExtensionURL(url) : url;
|
||
this.props.vm.extensionManager.loadExtensionURL(parsedURL).then(() => {
|
||
this.props.onCategorySelected(id);
|
||
|
||
if (isCustomURL) {
|
||
let newUrl = location.pathname;
|
||
|
||
if (location.search) {
|
||
newUrl += location.search;
|
||
newUrl += '&';
|
||
} else {
|
||
newUrl += '?';
|
||
}
|
||
|
||
newUrl += "extension=".concat(encodeURIComponent(url));
|
||
history.replaceState('', '', newUrl);
|
||
}
|
||
}).catch(err => {
|
||
// eslint-disable-next-line no-alert
|
||
alert(err);
|
||
});
|
||
}
|
||
}
|
||
}
|
||
|
||
render() {
|
||
const extensionLibraryThumbnailData = _lib_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_5__["default"].map(extension => _objectSpread({
|
||
rawURL: extension.iconURL || _components_action_menu_icon_sprite_svg__WEBPACK_IMPORTED_MODULE_7___default.a
|
||
}, extension));
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_components_library_library_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], {
|
||
data: extensionLibraryThumbnailData,
|
||
filterable: false,
|
||
id: "extensionLibrary",
|
||
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,
|
||
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/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_green_flag_icon_green_flag_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/green-flag/icon--green-flag.svg */ "./src/components/green-flag/icon--green-flag.svg");
|
||
/* harmony import */ var _components_green_flag_icon_green_flag_svg__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_components_green_flag_icon_green_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_green_flag_icon_green_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 _lib_isScratchDesktop_js__WEBPACK_IMPORTED_MODULE_24__ = __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"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
class GUI extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component {
|
||
componentDidMount() {
|
||
Object(_lib_isScratchDesktop_js__WEBPACK_IMPORTED_MODULE_24__["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) {
|
||
throw new Error("Error in GUI [location=".concat(window.location, "]: ").concat(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
|
||
} = _this$props,
|
||
componentProps = _objectWithoutProperties(_this$props, _excluded);
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_components_gui_gui_jsx__WEBPACK_IMPORTED_MODULE_23__["default"], _extends({
|
||
loading: fetchingProject || isLoading || loadingStateVisible
|
||
}, componentProps), children);
|
||
}
|
||
|
||
}
|
||
|
||
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,
|
||
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,
|
||
onStorageInit: storageInstance => storageInstance.addOfficialScratchWebStores(),
|
||
onProjectLoaded: () => {},
|
||
onUpdateProjectId: () => {},
|
||
onVmInit: () => {}
|
||
};
|
||
|
||
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"],
|
||
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,
|
||
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"])),
|
||
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/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 = ({
|
||
alertsList,
|
||
className
|
||
}) => {
|
||
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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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 react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js");
|
||
/* harmony import */ var _components_library_item_library_item_jsx__WEBPACK_IMPORTED_MODULE_4__ = __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', 'handleFocus', 'handleKeyPress', 'handleMouseEnter', 'handleMouseLeave', 'handlePlay', 'handleStop', 'rotateIcon', 'startRotatingIcons', 'stopRotatingIcons']);
|
||
this.state = {
|
||
iconIndex: 0,
|
||
isRotatingIcon: false
|
||
};
|
||
}
|
||
|
||
componentWillUnmount() {
|
||
clearInterval(this.intervalId);
|
||
}
|
||
|
||
handleBlur(id) {
|
||
this.handleMouseLeave(id);
|
||
}
|
||
|
||
handleClick(e) {
|
||
if (!this.props.disabled) {
|
||
this.props.onSelect(this.props.id);
|
||
}
|
||
|
||
e.preventDefault();
|
||
}
|
||
|
||
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);
|
||
}
|
||
|
||
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_4__["default"], {
|
||
bluetoothRequired: this.props.bluetoothRequired,
|
||
collaborator: this.props.collaborator,
|
||
description: this.props.description,
|
||
disabled: this.props.disabled,
|
||
extensionId: this.props.extensionId,
|
||
featured: this.props.featured,
|
||
hidden: this.props.hidden,
|
||
iconURL: iconURL,
|
||
icons: this.props.icons,
|
||
id: this.props.id,
|
||
insetIconURL: this.props.insetIconURL,
|
||
internetConnectionRequired: this.props.internetConnectionRequired,
|
||
isPlaying: this.props.isPlaying,
|
||
name: this.props.name,
|
||
showPlayButton: this.props.showPlayButton,
|
||
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 = {
|
||
bluetoothRequired: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
collaborator: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
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,
|
||
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,
|
||
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,
|
||
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
|
||
};
|
||
/* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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;
|
||
}
|
||
|
||
this.setState({
|
||
activeIndex: index,
|
||
activeValue: 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);
|
||
newListValue[this.state.activeIndex] = this.state.activeValue;
|
||
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
|
||
} = _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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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
|
||
} = _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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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
|
||
};
|
||
|
||
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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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.height
|
||
}),
|
||
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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const availableModes = opcode => _components_monitor_monitor_jsx__WEBPACK_IMPORTED_MODULE_5__["monitorModes"].filter(t => {
|
||
if (opcode === 'data_variable') {
|
||
return t !== 'list';
|
||
} else if (opcode === 'data_listcontents') {
|
||
return t === 'list';
|
||
}
|
||
|
||
return t !== 'slider' && t !== '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) {
|
||
if (nextState !== this.state) {
|
||
return true;
|
||
}
|
||
|
||
for (const key of Object.getOwnPropertyNames(nextProps)) {
|
||
// Don't need to rerender when other monitors are moved.
|
||
// monitorLayout is only used during initial layout.
|
||
if (key !== 'monitorLayout' && nextProps[key] !== this.props[key]) {
|
||
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, {
|
||
x,
|
||
y
|
||
}) {
|
||
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(({
|
||
rows,
|
||
text
|
||
}) => {
|
||
const numberOfColumns = rows[0].length;
|
||
let columnNumber = 1;
|
||
|
||
if (numberOfColumns > 1) {
|
||
const msg = this.props.intl.formatMessage(messages.columnPrompt, {
|
||
numberOfColumns
|
||
});
|
||
columnNumber = parseInt(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';
|
||
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, {
|
||
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 ? this.handleExport : null,
|
||
onImport: isList ? this.handleImport : null,
|
||
onHide: this.handleHide,
|
||
onNextMode: this.handleNextMode,
|
||
onSetModeToDefault: isList ? null : this.handleSetModeToDefault,
|
||
onSetModeToLarge: isList ? 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 react_redux__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
|
||
const _excluded = ["selectedCostumeIndex", "vm"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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']);
|
||
}
|
||
|
||
shouldComponentUpdate(nextProps) {
|
||
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;
|
||
}
|
||
|
||
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',
|
||
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
|
||
}),
|
||
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, {
|
||
selectedCostumeIndex
|
||
}) => {
|
||
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
|
||
};
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_6__["connect"])(mapStateToProps)(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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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
|
||
} = _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/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");
|
||
const _excluded = ["onRecord", "onStopRecording"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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() {
|
||
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
|
||
} = _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, and .sb3)
|
||
|
||
const matches = fileInputFilename.match(/^(.*)\.sb[23]?$/);
|
||
if (!matches) return '';
|
||
return matches[1].substring(0, 100); // truncate project title to max 100 chars
|
||
};
|
||
/**
|
||
* 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:
|
||
*
|
||
* <SB3Downloader>{(downloadProject, props) => (
|
||
* <MyCoolComponent
|
||
* onClick={downloadProject}
|
||
* {...props}
|
||
* />
|
||
* )}</SB3Downloader>
|
||
*/
|
||
|
||
|
||
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']);
|
||
}
|
||
|
||
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 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;
|
||
} // Obtain the writable very early, otherwise browsers won't give us the handle when we ask.
|
||
|
||
|
||
const writable = await _lib_tw_filesystem_api__WEBPACK_IMPORTED_MODULE_9__["default"].createWritable(handle);
|
||
|
||
try {
|
||
this.startedSaving();
|
||
const content = await this.props.saveProjectSb3();
|
||
await _lib_tw_filesystem_api__WEBPACK_IMPORTED_MODULE_9__["default"].writeToWritable(writable, content);
|
||
this.finishedSaving();
|
||
} finally {
|
||
// Always close the handle regardless of errors.
|
||
await _lib_tw_filesystem_api__WEBPACK_IMPORTED_MODULE_9__["default"].closeWritable(writable);
|
||
}
|
||
}
|
||
|
||
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
|
||
} : {
|
||
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), ".sb3");
|
||
};
|
||
|
||
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,
|
||
canSaveProject: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
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),
|
||
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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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
|
||
} = _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 `<input />` 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");
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const UNDO_STACK_SIZE = 99;
|
||
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']);
|
||
this.state = {
|
||
copyBuffer: null,
|
||
chunkLevels: Object(_lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_6__["computeChunkedRMS"])(this.props.samples),
|
||
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.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),
|
||
playhead: null
|
||
});
|
||
}
|
||
|
||
submitNewSamples(samples, sampleRate, skipUndo) {
|
||
return Object(_lib_audio_audio_util_js__WEBPACK_IMPORTED_MODULE_6__["downsampleIfNeeded"])({
|
||
samples,
|
||
sampleRate
|
||
}, this.resampleBufferToRate).then(({
|
||
samples: newSamples,
|
||
sampleRate: newSampleRate
|
||
}) => 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(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(name) {
|
||
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, name, 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);
|
||
}
|
||
|
||
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 = ({
|
||
renderedBuffer
|
||
}) => {
|
||
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);
|
||
}
|
||
}
|
||
|
||
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,
|
||
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),
|
||
onMute: this.effectFactory(effectTypes.MUTE),
|
||
onPaste: this.handlePaste,
|
||
onPlay: this.handlePlay,
|
||
onRedo: this.handleRedo,
|
||
onReverse: this.effectFactory(effectTypes.REVERSE),
|
||
onRobot: this.effectFactory(effectTypes.ROBOT),
|
||
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,
|
||
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
|
||
};
|
||
|
||
const mapStateToProps = (state, {
|
||
soundIndex
|
||
}) => {
|
||
const sprite = state.scratchGui.vm.editingTarget.sprite; // Make sure the sound index doesn't go out of range.
|
||
|
||
const index = soundIndex < sprite.sounds.length ? soundIndex : sprite.sounds.length - 1;
|
||
const sound = state.scratchGui.vm.editingTarget.sprite.sounds[index];
|
||
const audioBuffer = state.scratchGui.vm.getSoundBuffer(index);
|
||
return {
|
||
isStereo: audioBuffer.numberOfChannels !== 1,
|
||
duration: sound.sampleCount / sound.rate,
|
||
size: sound.asset ? sound.asset.data.byteLength : 0,
|
||
soundId: sound.soundId,
|
||
sampleRate: audioBuffer.sampleRate,
|
||
samples: audioBuffer.getChannelData(0),
|
||
isFullScreen: state.scratchGui.mode.isFullScreen,
|
||
name: sound.name,
|
||
vm: state.scratchGui.vm
|
||
};
|
||
};
|
||
|
||
/* 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 _components_library_item_lib_icon_sound_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/library-item/lib-icon--sound.svg */ "./src/components/library-item/lib-icon--sound.svg");
|
||
/* harmony import */ var _components_library_item_lib_icon_sound_svg__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_components_library_item_lib_icon_sound_svg__WEBPACK_IMPORTED_MODULE_7__);
|
||
/* harmony import */ var _components_library_item_lib_icon_sound_rtl_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/library-item/lib-icon--sound-rtl.svg */ "./src/components/library-item/lib-icon--sound-rtl.svg");
|
||
/* harmony import */ var _components_library_item_lib_icon_sound_rtl_svg__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_components_library_item_lib_icon_sound_rtl_svg__WEBPACK_IMPORTED_MODULE_8__);
|
||
/* harmony import */ var _lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/libraries/tw-async-libraries */ "./src/lib/libraries/tw-async-libraries.js");
|
||
/* harmony import */ var _lib_libraries_sound_tags__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/libraries/sound-tags */ "./src/lib/libraries/sound-tags.js");
|
||
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
|
||
const _excluded = ["md5ext"];
|
||
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({
|
||
libraryTitle: {
|
||
"id": "gui.soundLibrary.chooseASound",
|
||
"defaultMessage": "Choose a Sound"
|
||
}
|
||
}); // @todo need to use this hack to avoid library using md5 for image
|
||
|
||
const getSoundLibraryThumbnailData = (soundLibraryContent, isRtl) => soundLibraryContent.map(sound => {
|
||
const {
|
||
md5ext
|
||
} = sound,
|
||
otherData = _objectWithoutProperties(sound, _excluded);
|
||
|
||
return _objectSpread({
|
||
_md5: md5ext,
|
||
rawURL: isRtl ? _components_library_item_lib_icon_sound_rtl_svg__WEBPACK_IMPORTED_MODULE_8___default.a : _components_library_item_lib_icon_sound_svg__WEBPACK_IMPORTED_MODULE_7___default.a
|
||
}, otherData);
|
||
});
|
||
|
||
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<SoundPlayer>}
|
||
*/
|
||
|
||
this.playingSoundPromise = null;
|
||
/**
|
||
* function to call when the sound ends
|
||
*/
|
||
|
||
this.handleStop = null;
|
||
const soundLibrary = Object(_lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_9__["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(); // 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
|
||
};
|
||
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",
|
||
setStopHandler: this.setStopHandler,
|
||
tags: _lib_libraries_sound_tags__WEBPACK_IMPORTED_MODULE_10__["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_11__["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 _lib_libraries_tw_async_libraries__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/libraries/tw-async-libraries */ "./src/lib/libraries/tw-async-libraries.js");
|
||
/* harmony import */ var _lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../lib/file-uploader.js */ "./src/lib/file-uploader.js");
|
||
/* harmony import */ var _lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/error-boundary-hoc.jsx */ "./src/lib/error-boundary-hoc.jsx");
|
||
/* harmony import */ var _lib_drag_constants__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../lib/drag-constants */ "./src/lib/drag-constants.js");
|
||
/* harmony import */ var _lib_download_blob__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../lib/download-blob */ "./src/lib/download-blob.js");
|
||
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
|
||
/* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js");
|
||
/* harmony import */ var _reducers_editor_tab__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../reducers/editor-tab */ "./src/reducers/editor-tab.js");
|
||
/* harmony import */ var _reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../reducers/restore-deletion */ "./src/reducers/restore-deletion.js");
|
||
/* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_25__ = __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_20__["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_16__["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
|
||
};
|
||
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_17__["handleFileUpload"])(e.target, (buffer, fileType, fileName, fileIndex, fileCount) => {
|
||
Object(_lib_file_uploader_js__WEBPACK_IMPORTED_MODULE_17__["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_19__["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_19__["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_19__["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 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: [{
|
||
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',
|
||
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_19__["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] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_sound_editor_jsx__WEBPACK_IMPORTED_MODULE_14__["default"], {
|
||
soundIndex: this.state.selectedSoundIndex
|
||
}) : 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_23__["activateTab"])(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_23__["COSTUMES_TAB_INDEX"])),
|
||
onNewSoundFromLibraryClick: e => {
|
||
e.preventDefault();
|
||
dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_22__["openSoundLibrary"])());
|
||
},
|
||
onNewSoundFromRecordingClick: () => {
|
||
dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_22__["openSoundRecorder"])());
|
||
},
|
||
onRequestCloseSoundLibrary: () => {
|
||
dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_22__["closeSoundLibrary"])());
|
||
},
|
||
dispatchUpdateRestore: restoreState => {
|
||
dispatch(Object(_reducers_restore_deletion__WEBPACK_IMPORTED_MODULE_24__["setRestore"])(restoreState));
|
||
},
|
||
onCloseImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_25__["closeAlertWithId"])('importingAsset')),
|
||
onShowImporting: () => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_25__["showStandardAlert"])('importingAsset'))
|
||
});
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (Object(_lib_error_boundary_hoc_jsx__WEBPACK_IMPORTED_MODULE_18__["default"])('Sound Tab')(Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_21__["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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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",
|
||
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 _lib_storage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/storage */ "./src/lib/storage.js");
|
||
/* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js");
|
||
/* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_7__);
|
||
/* 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 _lib_drag_recognizer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/drag-recognizer */ "./src/lib/drag-recognizer.js");
|
||
/* harmony import */ var _lib_touch_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/touch-utils */ "./src/lib/touch-utils.js");
|
||
/* harmony import */ var _components_sprite_selector_item_sprite_selector_item_jsx__WEBPACK_IMPORTED_MODULE_11__ = __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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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_9__["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_8__["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_10__["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
|
||
} = _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_11__["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_7___default.a).isRequired
|
||
};
|
||
|
||
const mapStateToProps = (state, {
|
||
id
|
||
}) => ({
|
||
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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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, shouldActivateTab = 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_, shouldActivateTab = 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, {
|
||
asset,
|
||
id
|
||
}) => ({
|
||
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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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', 'onStartDrag', 'onStopDrag', 'onWheel', 'onContextMenu', 'updateRect', 'questionListener', 'setDragCanvas', 'clearDragCanvas', 'drawDragCanvas', 'positionDragCanvas']);
|
||
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.onMouseMove);
|
||
document.addEventListener('touchend', this.onMouseUp);
|
||
canvas.addEventListener('mousedown', this.onMouseDown);
|
||
canvas.addEventListener('touchstart', this.onMouseDown);
|
||
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.onMouseMove);
|
||
document.removeEventListener('touchend', this.onMouseUp);
|
||
canvas.removeEventListener('mousedown', this.onMouseDown);
|
||
canvas.removeEventListener('touchstart', this.onMouseDown);
|
||
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();
|
||
}
|
||
|
||
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;
|
||
}
|
||
}
|
||
|
||
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() {
|
||
const _this$props = this.props,
|
||
{
|
||
vm,
|
||
// eslint-disable-line no-unused-vars
|
||
onActivateColorPicker,
|
||
// eslint-disable-line no-unused-vars
|
||
disableEditingTargetChange
|
||
} = _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,
|
||
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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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/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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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, ".sprite3"), 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
|
||
} = _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",
|
||
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(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* 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:
|
||
*
|
||
* <TurboMode>{(toggleTurboMode, props) => (
|
||
* <MyCoolComponent
|
||
* turboEnabled={props.turboMode}
|
||
* onClick={toggleTurboMode}
|
||
* {...props}
|
||
* />
|
||
* )}</TurboMode>
|
||
*/
|
||
|
||
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
|
||
} = _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");
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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) {
|
||
// 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");
|
||
const _excluded = ["children"];
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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."
|
||
}
|
||
});
|
||
|
||
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) {
|
||
// eslint-disable-next-line no-alert
|
||
alert(this.props.intl.formatMessage(messages.cloudUnavailableAlert));
|
||
return;
|
||
}
|
||
|
||
this.props.onCloudChange(!this.props.enabled);
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
/* eslint-disable no-unused-vars */
|
||
children
|
||
} = _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-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(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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']);
|
||
}
|
||
|
||
changeFramerate(e) {
|
||
if (e && (e.ctrlKey || e.shiftKey)) {
|
||
// eslint-disable-next-line no-alert
|
||
const newFPS = 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
|
||
} = _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-loader.jsx":
|
||
/*!****************************************************!*\
|
||
!*** ./src/containers/tw-restore-point-loader.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__);
|
||
/* harmony import */ var _reducers_menus__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/menus */ "./src/reducers/menus.js");
|
||
/* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js");
|
||
/* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js");
|
||
/* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js");
|
||
/* 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");
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["defineMessages"])({
|
||
error: {
|
||
"id": "tw.restorePoint.loadFail",
|
||
"defaultMessage": "Could not load restore point: {error}"
|
||
},
|
||
confirm: {
|
||
"id": "tw.restorePoint.confirm",
|
||
"defaultMessage": "The editor automatically records one restore point in case something goes wrong and you forget to save. You shouldn't rely on this and we can't guarantee it will recover your project. Try to load it?"
|
||
}
|
||
});
|
||
|
||
class RestorePointLoader extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['loadRestorePoint']);
|
||
}
|
||
|
||
loadRestorePoint() {
|
||
// eslint-disable-next-line no-alert
|
||
if (!confirm(this.props.intl.formatMessage(messages.confirm))) {
|
||
return;
|
||
}
|
||
|
||
this.props.onLoadingStarted();
|
||
this.props.requestProjectUpload(this.props.loadingState);
|
||
_lib_tw_restore_point_api__WEBPACK_IMPORTED_MODULE_10__["default"].load().then(arrayBuffer => this.props.vm.loadProject(arrayBuffer)).then(() => {
|
||
this.props.onLoadingFinished(this.props.loadingState, true);
|
||
}).catch(error => {
|
||
this.props.onLoadingFinished(this.props.loadingState, false); // eslint-disable-next-line no-alert
|
||
|
||
alert(this.props.intl.formatMessage(messages.error, {
|
||
error
|
||
}));
|
||
});
|
||
}
|
||
|
||
render() {
|
||
return this.props.children(this.props.className, this.loadRestorePoint);
|
||
}
|
||
|
||
}
|
||
|
||
RestorePointLoader.propTypes = {
|
||
intl: react_intl__WEBPACK_IMPORTED_MODULE_4__["intlShape"],
|
||
children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
loadingState: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
onLoadingStarted: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onLoadingFinished: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
requestProjectUpload: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_5___default.a)
|
||
};
|
||
|
||
const mapStateToProps = state => ({
|
||
loadingState: state.scratchGui.projectState.loadingState,
|
||
vm: state.scratchGui.vm
|
||
});
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
onLoadingFinished: (loadingState, success) => {
|
||
dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_8__["onLoadedProject"])(loadingState, false, success));
|
||
dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_7__["closeLoadingProject"])());
|
||
dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_6__["closeFileMenu"])());
|
||
dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_9__["setFileHandle"])(null));
|
||
},
|
||
requestProjectUpload: loadingState => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_8__["requestProjectUpload"])(loadingState)),
|
||
onLoadingStarted: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_7__["openLoadingProject"])())
|
||
});
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (Object(react_intl__WEBPACK_IMPORTED_MODULE_4__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(RestorePointLoader)));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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', 'handleDisableCompilerChange', 'handleStoreProjectOptions']);
|
||
}
|
||
|
||
handleFramerateChange(e) {
|
||
this.props.vm.setFramerate(e.target.checked ? 60 : 30);
|
||
}
|
||
|
||
handleCustomizeFramerate() {
|
||
// eslint-disable-next-line no-alert
|
||
const newFramerate = 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
|
||
});
|
||
}
|
||
|
||
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);
|
||
}
|
||
|
||
handleStoreProjectOptions() {
|
||
this.props.vm.storeProjectOptions();
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
/* eslint-disable no-unused-vars */
|
||
onClose,
|
||
vm
|
||
} = _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,
|
||
onWarpTimerChange: this.handleWarpTimerChange,
|
||
onStageWidthChange: this.handleStageWidthChange,
|
||
onStageHeightChange: this.handleStageHeightChange,
|
||
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,
|
||
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,
|
||
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");
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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
|
||
};
|
||
}
|
||
|
||
handleKeyPress(event) {
|
||
if (event.key === 'Enter' && this.state.valueValid) {
|
||
this.handleOk();
|
||
}
|
||
}
|
||
|
||
handleFocus(event) {
|
||
event.target.select();
|
||
}
|
||
|
||
handleOk() {
|
||
this.props.onSetUsername(this.state.value);
|
||
this.props.onCloseUsernameModal();
|
||
}
|
||
|
||
handleCancel() {
|
||
this.props.onCloseUsernameModal();
|
||
}
|
||
|
||
handleChange(e) {
|
||
this.setState({
|
||
value: e.target.value,
|
||
valueValid: e.target.checkValidity()
|
||
});
|
||
}
|
||
|
||
handleReset() {
|
||
const randomUsername = 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,
|
||
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
|
||
};
|
||
|
||
const mapStateToProps = state => ({
|
||
username: state.scratchGui.tw.username,
|
||
usernameInvalid: state.scratchGui.tw.usernameInvalid
|
||
});
|
||
|
||
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/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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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/containers/webgl-modal.jsx":
|
||
/*!****************************************!*\
|
||
!*** ./src/containers/webgl-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 _components_webgl_modal_webgl_modal_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/webgl-modal/webgl-modal.jsx */ "./src/components/webgl-modal/webgl-modal.jsx");
|
||
|
||
|
||
|
||
|
||
class WebGlModal extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {
|
||
render() {
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_webgl_modal_webgl_modal_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
||
isRtl: this.props.isRtl
|
||
});
|
||
}
|
||
|
||
}
|
||
|
||
WebGlModal.propTypes = {
|
||
isRtl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool
|
||
};
|
||
/* harmony default export */ __webpack_exports__["default"] = (WebGlModal);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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'],
|
||
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', 'twSaveToDiskSuccess'],
|
||
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'],
|
||
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: 'twAutosaving',
|
||
alertType: AlertTypes.INLINE,
|
||
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.autosaving"
|
||
}),
|
||
iconSpinner: true,
|
||
level: AlertLevels.INFO
|
||
}, {
|
||
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(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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
|
||
} = _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");
|
||
|
||
|
||
|
||
|
||
|
||
const effectTypes = {
|
||
ROBOT: 'robot',
|
||
REVERSE: 'reverse',
|
||
LOUDER: 'higher',
|
||
SOFTER: 'lower',
|
||
FASTER: 'faster',
|
||
SLOWER: 'slower',
|
||
ECHO: 'echo',
|
||
FADEIN: 'fade in',
|
||
FADEOUT: 'fade out',
|
||
MUTE: 'mute'
|
||
};
|
||
|
||
class AudioEffects {
|
||
static get effectTypes() {
|
||
return effectTypes;
|
||
}
|
||
|
||
constructor(buffer, name, 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;
|
||
this.playbackRate = 1;
|
||
|
||
switch (name) {
|
||
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;
|
||
}
|
||
|
||
const durationSeconds = sampleCount / buffer.sampleRate;
|
||
this.adjustedTrimEndSeconds = this.trimStartSeconds + adjustedAffectedSampleCount / buffer.sampleRate;
|
||
this.adjustedTrimStart = this.adjustedTrimStartSeconds / durationSeconds;
|
||
this.adjustedTrimEnd = this.adjustedTrimEndSeconds / durationSeconds;
|
||
|
||
if (window.OfflineAudioContext) {
|
||
this.audioContext = new window.OfflineAudioContext(1, sampleCount, buffer.sampleRate);
|
||
} 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 / buffer.sampleRate;
|
||
this.audioContext = new window.webkitOfflineAudioContext(1, sampleScale * sampleCount, 44100);
|
||
} // 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 (name === effectTypes.REVERSE) {
|
||
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;
|
||
} else {
|
||
// All other effects use the original buffer because it is not modified.
|
||
this.buffer = buffer;
|
||
}
|
||
|
||
this.source = this.audioContext.createBufferSource();
|
||
this.source.buffer = this.buffer;
|
||
this.name = name;
|
||
}
|
||
|
||
process(done) {
|
||
// Some effects need to use more nodes and must expose an input and output
|
||
let input;
|
||
let output;
|
||
|
||
switch (this.name) {
|
||
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.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;
|
||
}
|
||
|
||
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 = ({
|
||
renderedBuffer
|
||
}) => {
|
||
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, scaling = 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, chunkSize = 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<SoundBuffer>} 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/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 = (v, vb = 0.2, vl = 0.4, h = 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__);
|
||
|
||
|
||
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);
|
||
AUDIO_CONTEXT = new (window.AudioContext || window.webkitAudioContext)();
|
||
startaudiocontext__WEBPACK_IMPORTED_MODULE_0___default()(AUDIO_CONTEXT);
|
||
};
|
||
|
||
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 = ({
|
||
host,
|
||
username,
|
||
token,
|
||
limit,
|
||
offset
|
||
}) => 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 = ({
|
||
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
|
||
|
||
}) => 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 = ({
|
||
host,
|
||
username,
|
||
token,
|
||
id
|
||
}) => 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 = ({
|
||
host,
|
||
id,
|
||
name
|
||
}) => 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 <svg> 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 = ({
|
||
blockObjects,
|
||
topBlockId
|
||
}) => {
|
||
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;
|
||
|
||
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 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() {
|
||
if (vm.editingTarget && vm.editingTarget.getCostumes().length > 0) {
|
||
return vm.editingTarget.getCostumes().map(costume => [costume.name, costume.name]);
|
||
}
|
||
|
||
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 mouse = ScratchBlocks.ScratchMsgs.translate('MOTION_POINTTOWARDS_POINTER', 'mouse-pointer');
|
||
const json = jsonForMenuBlock('TOWARDS', spriteMenu, motionColors, [[mouse, '_mouse_']]);
|
||
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'], [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_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.control_create_clone_of_menu.init = function () {
|
||
const json = jsonForMenuBlock('CLONE_OPTION', cloneMenu, controlColors, []);
|
||
this.jsonInit(json);
|
||
};
|
||
|
||
ScratchBlocks.VerticalFlyout.getCheckboxState = function (blockId) {
|
||
const monitoredBlock = vm.runtime.monitorBlocks._blocks[blockId];
|
||
return monitoredBlock ? monitoredBlock.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;
|
||
};
|
||
|
||
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"] = ((bmpImage, type = 'image/bmp') => 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 <img>
|
||
// `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/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", "projectId", "username", "hasCloudPermission", "isShowingWithId", "onShowCloudInfo", "onInvalidUsername", "vm"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
* 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);
|
||
}
|
||
|
||
componentDidMount() {
|
||
if (this.shouldConnect(this.props)) {
|
||
this.connectToCloud();
|
||
}
|
||
}
|
||
|
||
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)
|
||
// tw: handle cases where we should explicitly close and reconnect() in the same update
|
||
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.disconnectFromCloud();
|
||
}
|
||
|
||
canUseCloud(props) {
|
||
return !!(props.cloudHost && 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);
|
||
} // tw: handle cases where we should explicitly close and reconnect() in the same update
|
||
|
||
|
||
shouldReconnect(props, prevProps) {
|
||
// reconnect when username changes
|
||
return this.isConnected() && props.username !== prevProps.username;
|
||
}
|
||
|
||
isConnected() {
|
||
return this.cloudProvider && !!this.cloudProvider.connection;
|
||
}
|
||
|
||
connectToCloud() {
|
||
this.cloudProvider = new _lib_cloud_provider__WEBPACK_IMPORTED_MODULE_5__["default"](this.props.cloudHost, 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,
|
||
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,
|
||
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 {
|
||
isShowingWithId: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["getIsShowingWithId"])(loadingState),
|
||
projectId: state.scratchGui.projectState.projectId,
|
||
hasCloudPermission: state.scratchGui.tw ? state.scratchGui.tw.cloud : false,
|
||
username: state.scratchGui.tw ? state.scratchGui.tw.username : '',
|
||
canModifyCloudData: !state.scratchGui.mode.hasEverEnteredEditor || ownProps.canSave
|
||
};
|
||
};
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
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, projectName = '', locale = '') {
|
||
// 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 _raw_loader_cd21514d0531fdffb22204e0ec5ed84a_svg__WEBPACK_IMPORTED_MODULE_1__ = __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_1___default = /*#__PURE__*/__webpack_require__.n(_raw_loader_cd21514d0531fdffb22204e0ec5ed84a_svg__WEBPACK_IMPORTED_MODULE_1__);
|
||
/* harmony import */ var _raw_loader_dango_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! raw-loader!./dango.svg */ "./node_modules/raw-loader/index.js!./src/lib/default-project/dango.svg");
|
||
/* harmony import */ var _raw_loader_dango_svg__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_raw_loader_dango_svg__WEBPACK_IMPORTED_MODULE_2__);
|
||
/* harmony import */ var _tw_text_encoder__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../tw-text-encoder */ "./src/lib/tw-text-encoder.js");
|
||
|
||
/* eslint-disable import/no-unresolved */
|
||
|
||
|
||
|
||
/* eslint-enable import/no-unresolved */
|
||
|
||
|
||
|
||
const defaultProject = translator => {
|
||
const encoder = new _tw_text_encoder__WEBPACK_IMPORTED_MODULE_3__["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_1___default.a)
|
||
}, {
|
||
id: '592bae6f8bb9c8d88401b54ac431f7b6',
|
||
assetType: 'ImageVector',
|
||
dataFormat: 'SVG',
|
||
data: encoder.encode(_raw_loader_dango_svg__WEBPACK_IMPORTED_MODULE_2___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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
|
||
|
||
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: 44,
|
||
rotationCenterY: 44
|
||
}],
|
||
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) {
|
||
case scratch_vm_src_extension_support_argument_type__WEBPACK_IMPORTED_MODULE_0___default.a.STRING:
|
||
args.push({
|
||
type: 'input_value',
|
||
name: argName
|
||
});
|
||
break;
|
||
|
||
case scratch_vm_src_extension_support_argument_type__WEBPACK_IMPORTED_MODULE_0___default.a.BOOLEAN:
|
||
args.push({
|
||
type: 'input_value',
|
||
name: argName,
|
||
check: 'Boolean'
|
||
});
|
||
break;
|
||
}
|
||
|
||
return "%".concat(++argCount);
|
||
});
|
||
this.interpolate_(scratchBlocksStyleText, args);
|
||
}
|
||
});
|
||
|
||
/* 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({
|
||
onDrag = () => {},
|
||
onDragEnd = () => {},
|
||
touchDragAngle = 70,
|
||
// Angle and distance thresholds are the same as scratch-blocks
|
||
distanceThreshold = 3
|
||
}) {
|
||
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.<DOMRect>} 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 = ({
|
||
x,
|
||
y
|
||
}, boxes, isRtl) => {
|
||
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() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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 />
|
||
* )
|
||
*
|
||
* 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:
|
||
* <Wrapped onDrop={yourDropHandler} />
|
||
*
|
||
* 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.<string>} 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(<tracking label>)(<Component>).
|
||
* @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 */
|
||
/***/ (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 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");
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* 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 <input/> 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, handleError = () => {}) {
|
||
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;
|
||
}
|
||
|
||
default:
|
||
handleError("Encountered unexpected file type: ".concat(fileType));
|
||
return;
|
||
}
|
||
|
||
const vmSound = createVMAsset(storage, storage.AssetType.Sound, soundFormat, new Uint8Array(fileData));
|
||
handleSound(vmSound);
|
||
};
|
||
|
||
const spriteUpload = function spriteUpload(fileData, fileType, spriteName, vm, handleSprite, handleError = () => {}) {
|
||
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/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/4f4d22594d26b423831ddbbc3bf0d8ad.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/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 _music_music_png__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./music/music.png */ "./src/lib/libraries/extensions/music/music.png");
|
||
/* harmony import */ var _music_music_png__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_music_music_png__WEBPACK_IMPORTED_MODULE_2__);
|
||
/* harmony import */ var _music_music_small_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music/music-small.svg */ "./src/lib/libraries/extensions/music/music-small.svg");
|
||
/* harmony import */ var _music_music_small_svg__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_music_music_small_svg__WEBPACK_IMPORTED_MODULE_3__);
|
||
/* harmony import */ var _pen_pen_png__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pen/pen.png */ "./src/lib/libraries/extensions/pen/pen.png");
|
||
/* harmony import */ var _pen_pen_png__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_pen_pen_png__WEBPACK_IMPORTED_MODULE_4__);
|
||
/* harmony import */ var _pen_pen_small_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pen/pen-small.svg */ "./src/lib/libraries/extensions/pen/pen-small.svg");
|
||
/* harmony import */ var _pen_pen_small_svg__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_pen_pen_small_svg__WEBPACK_IMPORTED_MODULE_5__);
|
||
/* harmony import */ var _videoSensing_video_sensing_png__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./videoSensing/video-sensing.png */ "./src/lib/libraries/extensions/videoSensing/video-sensing.png");
|
||
/* harmony import */ var _videoSensing_video_sensing_png__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_videoSensing_video_sensing_png__WEBPACK_IMPORTED_MODULE_6__);
|
||
/* harmony import */ var _videoSensing_video_sensing_small_svg__WEBPACK_IMPORTED_MODULE_7__ = __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_7___default = /*#__PURE__*/__webpack_require__.n(_videoSensing_video_sensing_small_svg__WEBPACK_IMPORTED_MODULE_7__);
|
||
/* harmony import */ var _text2speech_text2speech_png__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./text2speech/text2speech.png */ "./src/lib/libraries/extensions/text2speech/text2speech.png");
|
||
/* harmony import */ var _text2speech_text2speech_png__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_text2speech_text2speech_png__WEBPACK_IMPORTED_MODULE_8__);
|
||
/* harmony import */ var _text2speech_text2speech_small_svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./text2speech/text2speech-small.svg */ "./src/lib/libraries/extensions/text2speech/text2speech-small.svg");
|
||
/* harmony import */ var _text2speech_text2speech_small_svg__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_text2speech_text2speech_small_svg__WEBPACK_IMPORTED_MODULE_9__);
|
||
/* harmony import */ var _translate_translate_png__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./translate/translate.png */ "./src/lib/libraries/extensions/translate/translate.png");
|
||
/* harmony import */ var _translate_translate_png__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_translate_translate_png__WEBPACK_IMPORTED_MODULE_10__);
|
||
/* harmony import */ var _translate_translate_small_png__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./translate/translate-small.png */ "./src/lib/libraries/extensions/translate/translate-small.png");
|
||
/* harmony import */ var _translate_translate_small_png__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_translate_translate_small_png__WEBPACK_IMPORTED_MODULE_11__);
|
||
/* harmony import */ var _makeymakey_makeymakey_png__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./makeymakey/makeymakey.png */ "./src/lib/libraries/extensions/makeymakey/makeymakey.png");
|
||
/* harmony import */ var _makeymakey_makeymakey_png__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_makeymakey_makeymakey_png__WEBPACK_IMPORTED_MODULE_12__);
|
||
/* harmony import */ var _makeymakey_makeymakey_small_svg__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./makeymakey/makeymakey-small.svg */ "./src/lib/libraries/extensions/makeymakey/makeymakey-small.svg");
|
||
/* harmony import */ var _makeymakey_makeymakey_small_svg__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_makeymakey_makeymakey_small_svg__WEBPACK_IMPORTED_MODULE_13__);
|
||
/* harmony import */ var _microbit_microbit_png__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./microbit/microbit.png */ "./src/lib/libraries/extensions/microbit/microbit.png");
|
||
/* harmony import */ var _microbit_microbit_png__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_microbit_microbit_png__WEBPACK_IMPORTED_MODULE_14__);
|
||
/* harmony import */ var _microbit_microbit_small_svg__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./microbit/microbit-small.svg */ "./src/lib/libraries/extensions/microbit/microbit-small.svg");
|
||
/* harmony import */ var _microbit_microbit_small_svg__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_microbit_microbit_small_svg__WEBPACK_IMPORTED_MODULE_15__);
|
||
/* harmony import */ var _microbit_microbit_illustration_svg__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./microbit/microbit-illustration.svg */ "./src/lib/libraries/extensions/microbit/microbit-illustration.svg");
|
||
/* harmony import */ var _microbit_microbit_illustration_svg__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_microbit_microbit_illustration_svg__WEBPACK_IMPORTED_MODULE_16__);
|
||
/* harmony import */ var _ev3_ev3_png__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./ev3/ev3.png */ "./src/lib/libraries/extensions/ev3/ev3.png");
|
||
/* harmony import */ var _ev3_ev3_png__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_ev3_ev3_png__WEBPACK_IMPORTED_MODULE_17__);
|
||
/* harmony import */ var _ev3_ev3_small_svg__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./ev3/ev3-small.svg */ "./src/lib/libraries/extensions/ev3/ev3-small.svg");
|
||
/* harmony import */ var _ev3_ev3_small_svg__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_ev3_ev3_small_svg__WEBPACK_IMPORTED_MODULE_18__);
|
||
/* harmony import */ var _ev3_ev3_hub_illustration_svg__WEBPACK_IMPORTED_MODULE_19__ = __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_19___default = /*#__PURE__*/__webpack_require__.n(_ev3_ev3_hub_illustration_svg__WEBPACK_IMPORTED_MODULE_19__);
|
||
/* harmony import */ var _wedo2_wedo_png__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./wedo2/wedo.png */ "./src/lib/libraries/extensions/wedo2/wedo.png");
|
||
/* harmony import */ var _wedo2_wedo_png__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(_wedo2_wedo_png__WEBPACK_IMPORTED_MODULE_20__);
|
||
/* harmony import */ var _wedo2_wedo_small_svg__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./wedo2/wedo-small.svg */ "./src/lib/libraries/extensions/wedo2/wedo-small.svg");
|
||
/* harmony import */ var _wedo2_wedo_small_svg__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_wedo2_wedo_small_svg__WEBPACK_IMPORTED_MODULE_21__);
|
||
/* harmony import */ var _wedo2_wedo_illustration_svg__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./wedo2/wedo-illustration.svg */ "./src/lib/libraries/extensions/wedo2/wedo-illustration.svg");
|
||
/* harmony import */ var _wedo2_wedo_illustration_svg__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(_wedo2_wedo_illustration_svg__WEBPACK_IMPORTED_MODULE_22__);
|
||
/* harmony import */ var _wedo2_wedo_button_illustration_svg__WEBPACK_IMPORTED_MODULE_23__ = __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_23___default = /*#__PURE__*/__webpack_require__.n(_wedo2_wedo_button_illustration_svg__WEBPACK_IMPORTED_MODULE_23__);
|
||
/* harmony import */ var _boost_boost_png__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./boost/boost.png */ "./src/lib/libraries/extensions/boost/boost.png");
|
||
/* harmony import */ var _boost_boost_png__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_boost_boost_png__WEBPACK_IMPORTED_MODULE_24__);
|
||
/* harmony import */ var _boost_boost_small_svg__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./boost/boost-small.svg */ "./src/lib/libraries/extensions/boost/boost-small.svg");
|
||
/* harmony import */ var _boost_boost_small_svg__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(_boost_boost_small_svg__WEBPACK_IMPORTED_MODULE_25__);
|
||
/* harmony import */ var _boost_boost_illustration_svg__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./boost/boost-illustration.svg */ "./src/lib/libraries/extensions/boost/boost-illustration.svg");
|
||
/* harmony import */ var _boost_boost_illustration_svg__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(_boost_boost_illustration_svg__WEBPACK_IMPORTED_MODULE_26__);
|
||
/* harmony import */ var _boost_boost_button_illustration_svg__WEBPACK_IMPORTED_MODULE_27__ = __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_27___default = /*#__PURE__*/__webpack_require__.n(_boost_boost_button_illustration_svg__WEBPACK_IMPORTED_MODULE_27__);
|
||
/* harmony import */ var _gdxfor_gdxfor_png__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gdxfor/gdxfor.png */ "./src/lib/libraries/extensions/gdxfor/gdxfor.png");
|
||
/* harmony import */ var _gdxfor_gdxfor_png__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(_gdxfor_gdxfor_png__WEBPACK_IMPORTED_MODULE_28__);
|
||
/* harmony import */ var _gdxfor_gdxfor_small_svg__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./gdxfor/gdxfor-small.svg */ "./src/lib/libraries/extensions/gdxfor/gdxfor-small.svg");
|
||
/* harmony import */ var _gdxfor_gdxfor_small_svg__WEBPACK_IMPORTED_MODULE_29___default = /*#__PURE__*/__webpack_require__.n(_gdxfor_gdxfor_small_svg__WEBPACK_IMPORTED_MODULE_29__);
|
||
/* harmony import */ var _gdxfor_gdxfor_illustration_svg__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./gdxfor/gdxfor-illustration.svg */ "./src/lib/libraries/extensions/gdxfor/gdxfor-illustration.svg");
|
||
/* harmony import */ var _gdxfor_gdxfor_illustration_svg__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(_gdxfor_gdxfor_illustration_svg__WEBPACK_IMPORTED_MODULE_30__);
|
||
/* harmony import */ var _tw_tw_svg__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tw/tw.svg */ "./src/lib/libraries/extensions/tw/tw.svg");
|
||
/* harmony import */ var _tw_tw_svg__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(_tw_tw_svg__WEBPACK_IMPORTED_MODULE_31__);
|
||
/* harmony import */ var _custom_custom_svg__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./custom/custom.svg */ "./src/lib/libraries/extensions/custom/custom.svg");
|
||
/* harmony import */ var _custom_custom_svg__WEBPACK_IMPORTED_MODULE_32___default = /*#__PURE__*/__webpack_require__.n(_custom_custom_svg__WEBPACK_IMPORTED_MODULE_32__);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
// TODO: Rename file names to match variable/prop names?
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ([{
|
||
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_2___default.a,
|
||
insetIconURL: _music_music_small_svg__WEBPACK_IMPORTED_MODULE_3___default.a,
|
||
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_4___default.a,
|
||
insetIconURL: _pen_pen_small_svg__WEBPACK_IMPORTED_MODULE_5___default.a,
|
||
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: "Video Sensing",
|
||
id: "gui.extension.videosensing.name"
|
||
}),
|
||
extensionId: 'videoSensing',
|
||
iconURL: _videoSensing_video_sensing_png__WEBPACK_IMPORTED_MODULE_6___default.a,
|
||
insetIconURL: _videoSensing_video_sensing_small_svg__WEBPACK_IMPORTED_MODULE_7___default.a,
|
||
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',
|
||
iconURL: _text2speech_text2speech_png__WEBPACK_IMPORTED_MODULE_8___default.a,
|
||
insetIconURL: _text2speech_text2speech_small_svg__WEBPACK_IMPORTED_MODULE_9___default.a,
|
||
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_10___default.a,
|
||
insetIconURL: _translate_translate_small_png__WEBPACK_IMPORTED_MODULE_11___default.a,
|
||
description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||
defaultMessage: "Translate text into many languages.",
|
||
id: "gui.extension.translate.description"
|
||
}),
|
||
featured: true,
|
||
internetConnectionRequired: true
|
||
}, {
|
||
name: 'Makey Makey',
|
||
extensionId: 'makeymakey',
|
||
collaborator: 'JoyLabz',
|
||
iconURL: _makeymakey_makeymakey_png__WEBPACK_IMPORTED_MODULE_12___default.a,
|
||
insetIconURL: _makeymakey_makeymakey_small_svg__WEBPACK_IMPORTED_MODULE_13___default.a,
|
||
description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||
defaultMessage: "Make anything into a key.",
|
||
id: "gui.extension.makeymakey.description"
|
||
}),
|
||
featured: true
|
||
}, {
|
||
name: 'micro:bit',
|
||
extensionId: 'microbit',
|
||
collaborator: 'micro:bit',
|
||
iconURL: _microbit_microbit_png__WEBPACK_IMPORTED_MODULE_14___default.a,
|
||
insetIconURL: _microbit_microbit_small_svg__WEBPACK_IMPORTED_MODULE_15___default.a,
|
||
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_16___default.a,
|
||
connectionSmallIconURL: _microbit_microbit_small_svg__WEBPACK_IMPORTED_MODULE_15___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: 'LEGO MINDSTORMS EV3',
|
||
extensionId: 'ev3',
|
||
collaborator: 'LEGO',
|
||
iconURL: _ev3_ev3_png__WEBPACK_IMPORTED_MODULE_17___default.a,
|
||
insetIconURL: _ev3_ev3_small_svg__WEBPACK_IMPORTED_MODULE_18___default.a,
|
||
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.ev3.description"
|
||
}),
|
||
featured: true,
|
||
disabled: false,
|
||
bluetoothRequired: true,
|
||
internetConnectionRequired: true,
|
||
launchPeripheralConnectionFlow: true,
|
||
useAutoScan: false,
|
||
connectionIconURL: _ev3_ev3_hub_illustration_svg__WEBPACK_IMPORTED_MODULE_19___default.a,
|
||
connectionSmallIconURL: _ev3_ev3_small_svg__WEBPACK_IMPORTED_MODULE_18___default.a,
|
||
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.ev3.connectingMessage"
|
||
}),
|
||
helpLink: 'https://scratch.mit.edu/ev3'
|
||
}, {
|
||
name: 'LEGO BOOST',
|
||
extensionId: 'boost',
|
||
collaborator: 'LEGO',
|
||
iconURL: _boost_boost_png__WEBPACK_IMPORTED_MODULE_24___default.a,
|
||
insetIconURL: _boost_boost_small_svg__WEBPACK_IMPORTED_MODULE_25___default.a,
|
||
description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||
defaultMessage: "Bring robotic creations to life.",
|
||
id: "gui.extension.boost.description"
|
||
}),
|
||
featured: true,
|
||
disabled: false,
|
||
bluetoothRequired: true,
|
||
internetConnectionRequired: true,
|
||
launchPeripheralConnectionFlow: true,
|
||
useAutoScan: true,
|
||
connectionIconURL: _boost_boost_illustration_svg__WEBPACK_IMPORTED_MODULE_26___default.a,
|
||
connectionSmallIconURL: _boost_boost_small_svg__WEBPACK_IMPORTED_MODULE_25___default.a,
|
||
connectionTipIconURL: _boost_boost_button_illustration_svg__WEBPACK_IMPORTED_MODULE_27___default.a,
|
||
connectingMessage: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||
defaultMessage: "Connecting",
|
||
id: "gui.extension.boost.connectingMessage"
|
||
}),
|
||
helpLink: 'https://scratch.mit.edu/boost'
|
||
}, {
|
||
name: 'LEGO Education WeDo 2.0',
|
||
extensionId: 'wedo2',
|
||
collaborator: 'LEGO',
|
||
iconURL: _wedo2_wedo_png__WEBPACK_IMPORTED_MODULE_20___default.a,
|
||
insetIconURL: _wedo2_wedo_small_svg__WEBPACK_IMPORTED_MODULE_21___default.a,
|
||
description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||
defaultMessage: "Build with motors and sensors.",
|
||
id: "gui.extension.wedo2.description"
|
||
}),
|
||
featured: true,
|
||
disabled: false,
|
||
bluetoothRequired: true,
|
||
internetConnectionRequired: true,
|
||
launchPeripheralConnectionFlow: true,
|
||
useAutoScan: true,
|
||
connectionIconURL: _wedo2_wedo_illustration_svg__WEBPACK_IMPORTED_MODULE_22___default.a,
|
||
connectionSmallIconURL: _wedo2_wedo_small_svg__WEBPACK_IMPORTED_MODULE_21___default.a,
|
||
connectionTipIconURL: _wedo2_wedo_button_illustration_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.wedo2.connectingMessage"
|
||
}),
|
||
helpLink: 'https://scratch.mit.edu/wedo'
|
||
}, {
|
||
name: 'Go Direct Force & Acceleration',
|
||
extensionId: 'gdxfor',
|
||
collaborator: 'Vernier',
|
||
iconURL: _gdxfor_gdxfor_png__WEBPACK_IMPORTED_MODULE_28___default.a,
|
||
insetIconURL: _gdxfor_gdxfor_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: "Sense push, pull, motion, and spin.",
|
||
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_30___default.a,
|
||
connectionSmallIconURL: _gdxfor_gdxfor_small_svg__WEBPACK_IMPORTED_MODULE_29___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: "TurboWarp Blocks",
|
||
id: "tw.twExtension.name"
|
||
}),
|
||
extensionId: 'tw',
|
||
iconURL: _tw_tw_svg__WEBPACK_IMPORTED_MODULE_31___default.a,
|
||
description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||
defaultMessage: "Weird new blocks. Not compatible with Scratch.",
|
||
id: "tw.twExtension.description"
|
||
}),
|
||
featured: true,
|
||
incompatibleWithScratch: true
|
||
}, {
|
||
name: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||
defaultMessage: "Custom Extension",
|
||
id: "tw.customExtension.name"
|
||
}),
|
||
extensionId: '',
|
||
iconURL: _custom_custom_svg__WEBPACK_IMPORTED_MODULE_32___default.a,
|
||
description: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], {
|
||
defaultMessage: "Load custom extensions from URLs. For developers. Experimental.",
|
||
id: "tw.customExtension.description"
|
||
}),
|
||
featured: true
|
||
}]);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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/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/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/4d2b4af5075d8b7bf7cd7bf046458045.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: 'animals',
|
||
intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].animals
|
||
}, {
|
||
tag: 'effects',
|
||
intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].effects
|
||
}, {
|
||
tag: 'loops',
|
||
intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].loops
|
||
}, {
|
||
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: 'space',
|
||
intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].space
|
||
}, {
|
||
tag: 'sports',
|
||
intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].sports
|
||
}, {
|
||
tag: 'voice',
|
||
intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].voice
|
||
}, {
|
||
tag: 'wacky',
|
||
intlLabel: _tag_messages_js__WEBPACK_IMPORTED_MODULE_0__["default"].wacky
|
||
}]);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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"
|
||
},
|
||
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"
|
||
}
|
||
}));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
* 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
|
||
} = _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 = '<sep gap="36"/>';
|
||
const blockSeparator = '<sep gap="36"/>'; // 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 <category name=\"%{BKY_CATEGORY_MOTION}\" id=\"motion\" colour=\"#4C97FF\" secondaryColour=\"#3373CC\">\n ".concat(isStage ? "\n <label text=\"".concat(stageSelected, "\"></label>\n ") : "\n <block type=\"motion_movesteps\">\n <value name=\"STEPS\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">10</field>\n </shadow>\n </value>\n </block>\n <block type=\"motion_turnright\">\n <value name=\"DEGREES\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">15</field>\n </shadow>\n </value>\n </block>\n <block type=\"motion_turnleft\">\n <value name=\"DEGREES\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">15</field>\n </shadow>\n </value>\n </block>\n ".concat(blockSeparator, "\n <block type=\"motion_goto\">\n <value name=\"TO\">\n <shadow type=\"motion_goto_menu\">\n </shadow>\n </value>\n </block>\n <block type=\"motion_gotoxy\">\n <value name=\"X\">\n <shadow id=\"movex\" type=\"math_number\">\n <field name=\"NUM\">0</field>\n </shadow>\n </value>\n <value name=\"Y\">\n <shadow id=\"movey\" type=\"math_number\">\n <field name=\"NUM\">0</field>\n </shadow>\n </value>\n </block>\n <block type=\"motion_glideto\" id=\"motion_glideto\">\n <value name=\"SECS\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">1</field>\n </shadow>\n </value>\n <value name=\"TO\">\n <shadow type=\"motion_glideto_menu\">\n </shadow>\n </value>\n </block>\n <block type=\"motion_glidesecstoxy\">\n <value name=\"SECS\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">1</field>\n </shadow>\n </value>\n <value name=\"X\">\n <shadow id=\"glidex\" type=\"math_number\">\n <field name=\"NUM\">0</field>\n </shadow>\n </value>\n <value name=\"Y\">\n <shadow id=\"glidey\" type=\"math_number\">\n <field name=\"NUM\">0</field>\n </shadow>\n </value>\n </block>\n ").concat(blockSeparator, "\n <block type=\"motion_pointindirection\">\n <value name=\"DIRECTION\">\n <shadow type=\"math_angle\">\n <field name=\"NUM\">90</field>\n </shadow>\n </value>\n </block>\n <block type=\"motion_pointtowards\">\n <value name=\"TOWARDS\">\n <shadow type=\"motion_pointtowards_menu\">\n </shadow>\n </value>\n </block>\n ").concat(blockSeparator, "\n <block type=\"motion_changexby\">\n <value name=\"DX\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">10</field>\n </shadow>\n </value>\n </block>\n <block type=\"motion_setx\">\n <value name=\"X\">\n <shadow id=\"setx\" type=\"math_number\">\n <field name=\"NUM\">0</field>\n </shadow>\n </value>\n </block>\n <block type=\"motion_changeyby\">\n <value name=\"DY\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">10</field>\n </shadow>\n </value>\n </block>\n <block type=\"motion_sety\">\n <value name=\"Y\">\n <shadow id=\"sety\" type=\"math_number\">\n <field name=\"NUM\">0</field>\n </shadow>\n </value>\n </block>\n ").concat(blockSeparator, "\n <block type=\"motion_ifonedgebounce\"/>\n ").concat(blockSeparator, "\n <block type=\"motion_setrotationstyle\"/>\n ").concat(blockSeparator, "\n <block id=\"").concat(targetId, "_xposition\" type=\"motion_xposition\"/>\n <block id=\"").concat(targetId, "_yposition\" type=\"motion_yposition\"/>\n <block id=\"").concat(targetId, "_direction\" type=\"motion_direction\"/>"), "\n ").concat(categorySeparator, "\n </category>\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 <category name=\"%{BKY_CATEGORY_LOOKS}\" id=\"looks\" colour=\"#9966FF\" secondaryColour=\"#774DCB\">\n ".concat(isStage ? '' : "\n <block type=\"looks_sayforsecs\">\n <value name=\"MESSAGE\">\n <shadow type=\"text\">\n <field name=\"TEXT\">".concat(hello, "</field>\n </shadow>\n </value>\n <value name=\"SECS\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">2</field>\n </shadow>\n </value>\n </block>\n <block type=\"looks_say\">\n <value name=\"MESSAGE\">\n <shadow type=\"text\">\n <field name=\"TEXT\">").concat(hello, "</field>\n </shadow>\n </value>\n </block>\n <block type=\"looks_thinkforsecs\">\n <value name=\"MESSAGE\">\n <shadow type=\"text\">\n <field name=\"TEXT\">").concat(hmm, "</field>\n </shadow>\n </value>\n <value name=\"SECS\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">2</field>\n </shadow>\n </value>\n </block>\n <block type=\"looks_think\">\n <value name=\"MESSAGE\">\n <shadow type=\"text\">\n <field name=\"TEXT\">").concat(hmm, "</field>\n </shadow>\n </value>\n </block>\n ").concat(blockSeparator, "\n "), "\n ").concat(isStage ? "\n <block type=\"looks_switchbackdropto\">\n <value name=\"BACKDROP\">\n <shadow type=\"looks_backdrops\">\n <field name=\"BACKDROP\">".concat(backdropName, "</field>\n </shadow>\n </value>\n </block>\n <block type=\"looks_switchbackdroptoandwait\">\n <value name=\"BACKDROP\">\n <shadow type=\"looks_backdrops\">\n <field name=\"BACKDROP\">").concat(backdropName, "</field>\n </shadow>\n </value>\n </block>\n <block type=\"looks_nextbackdrop\"/>\n ") : "\n <block id=\"".concat(targetId, "_switchcostumeto\" type=\"looks_switchcostumeto\">\n <value name=\"COSTUME\">\n <shadow type=\"looks_costume\">\n <field name=\"COSTUME\">").concat(costumeName, "</field>\n </shadow>\n </value>\n </block>\n <block type=\"looks_nextcostume\"/>\n <block type=\"looks_switchbackdropto\">\n <value name=\"BACKDROP\">\n <shadow type=\"looks_backdrops\">\n <field name=\"BACKDROP\">").concat(backdropName, "</field>\n </shadow>\n </value>\n </block>\n <block type=\"looks_nextbackdrop\"/>\n ").concat(blockSeparator, "\n <block type=\"looks_changesizeby\">\n <value name=\"CHANGE\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">10</field>\n </shadow>\n </value>\n </block>\n <block type=\"looks_setsizeto\">\n <value name=\"SIZE\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">100</field>\n </shadow>\n </value>\n </block>\n "), "\n ").concat(blockSeparator, "\n <block type=\"looks_changeeffectby\">\n <value name=\"CHANGE\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">25</field>\n </shadow>\n </value>\n </block>\n <block type=\"looks_seteffectto\">\n <value name=\"VALUE\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">0</field>\n </shadow>\n </value>\n </block>\n <block type=\"looks_cleargraphiceffects\"/>\n ").concat(blockSeparator, "\n ").concat(isStage ? '' : "\n <block type=\"looks_show\"/>\n <block type=\"looks_hide\"/>\n ".concat(blockSeparator, "\n <block type=\"looks_gotofrontback\"/>\n <block type=\"looks_goforwardbackwardlayers\">\n <value name=\"NUM\">\n <shadow type=\"math_integer\">\n <field name=\"NUM\">1</field>\n </shadow>\n </value>\n </block>\n "), "\n ").concat(isStage ? "\n <block id=\"backdropnumbername\" type=\"looks_backdropnumbername\"/>\n " : "\n <block id=\"".concat(targetId, "_costumenumbername\" type=\"looks_costumenumbername\"/>\n <block id=\"backdropnumbername\" type=\"looks_backdropnumbername\"/>\n <block id=\"").concat(targetId, "_size\" type=\"looks_size\"/>\n "), "\n ").concat(categorySeparator, "\n </category>\n ");
|
||
};
|
||
|
||
const sound = function sound(isInitialSetup, isStage, targetId, soundName) {
|
||
return "\n <category name=\"%{BKY_CATEGORY_SOUND}\" id=\"sound\" colour=\"#D65CD6\" secondaryColour=\"#BD42BD\">\n <block id=\"".concat(targetId, "_sound_playuntildone\" type=\"sound_playuntildone\">\n <value name=\"SOUND_MENU\">\n <shadow type=\"sound_sounds_menu\">\n <field name=\"SOUND_MENU\">").concat(soundName, "</field>\n </shadow>\n </value>\n </block>\n <block id=\"").concat(targetId, "_sound_play\" type=\"sound_play\">\n <value name=\"SOUND_MENU\">\n <shadow type=\"sound_sounds_menu\">\n <field name=\"SOUND_MENU\">").concat(soundName, "</field>\n </shadow>\n </value>\n </block>\n <block type=\"sound_stopallsounds\"/>\n ").concat(blockSeparator, "\n <block type=\"sound_changeeffectby\">\n <value name=\"VALUE\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">10</field>\n </shadow>\n </value>\n </block>\n <block type=\"sound_seteffectto\">\n <value name=\"VALUE\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">100</field>\n </shadow>\n </value>\n </block>\n <block type=\"sound_cleareffects\"/>\n ").concat(blockSeparator, "\n <block type=\"sound_changevolumeby\">\n <value name=\"VOLUME\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">-10</field>\n </shadow>\n </value>\n </block>\n <block type=\"sound_setvolumeto\">\n <value name=\"VOLUME\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">100</field>\n </shadow>\n </value>\n </block>\n <block id=\"").concat(targetId, "_volume\" type=\"sound_volume\"/>\n ").concat(categorySeparator, "\n </category>\n ");
|
||
};
|
||
|
||
const events = function events(isInitialSetup, isStage) {
|
||
return "\n <category name=\"%{BKY_CATEGORY_EVENTS}\" id=\"events\" colour=\"#FFD500\" secondaryColour=\"#CC9900\">\n <block type=\"event_whenflagclicked\"/>\n <block type=\"event_whenkeypressed\">\n </block>\n ".concat(isStage ? "\n <block type=\"event_whenstageclicked\"/>\n " : "\n <block type=\"event_whenthisspriteclicked\"/>\n ", "\n <block type=\"event_whenbackdropswitchesto\">\n </block>\n ").concat(blockSeparator, "\n <block type=\"event_whengreaterthan\">\n <value name=\"VALUE\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">10</field>\n </shadow>\n </value>\n </block>\n ").concat(blockSeparator, "\n <block type=\"event_whenbroadcastreceived\">\n </block>\n <block type=\"event_broadcast\">\n <value name=\"BROADCAST_INPUT\">\n <shadow type=\"event_broadcast_menu\"></shadow>\n </value>\n </block>\n <block type=\"event_broadcastandwait\">\n <value name=\"BROADCAST_INPUT\">\n <shadow type=\"event_broadcast_menu\"></shadow>\n </value>\n </block>\n ").concat(categorySeparator, "\n </category>\n ");
|
||
};
|
||
|
||
const control = function control(isInitialSetup, isStage) {
|
||
return "\n <category name=\"%{BKY_CATEGORY_CONTROL}\" id=\"control\" colour=\"#FFAB19\" secondaryColour=\"#CF8B17\">\n <block type=\"control_wait\">\n <value name=\"DURATION\">\n <shadow type=\"math_positive_number\">\n <field name=\"NUM\">1</field>\n </shadow>\n </value>\n </block>\n ".concat(blockSeparator, "\n <block type=\"control_repeat\">\n <value name=\"TIMES\">\n <shadow type=\"math_whole_number\">\n <field name=\"NUM\">10</field>\n </shadow>\n </value>\n </block>\n <block id=\"forever\" type=\"control_forever\"/>\n ").concat(blockSeparator, "\n <block type=\"control_if\"/>\n <block type=\"control_if_else\"/>\n <block id=\"wait_until\" type=\"control_wait_until\"/>\n <block id=\"repeat_until\" type=\"control_repeat_until\"/>\n <block id=\"while\" type=\"control_while\"/>\n <block id=\"for_each\" type=\"control_for_each\">\n <value name=\"VALUE\">\n <shadow type=\"math_whole_number\">\n <field name=\"NUM\">10</field>\n </shadow>\n </value>\n </block>\n ").concat(blockSeparator, "\n <block type=\"control_stop\"/>\n ").concat(blockSeparator, "\n ").concat(isStage ? "\n <block type=\"control_create_clone_of\">\n <value name=\"CLONE_OPTION\">\n <shadow type=\"control_create_clone_of_menu\"/>\n </value>\n </block>\n " : "\n <block type=\"control_start_as_clone\"/>\n <block type=\"control_create_clone_of\">\n <value name=\"CLONE_OPTION\">\n <shadow type=\"control_create_clone_of_menu\"/>\n </value>\n </block>\n <block type=\"control_delete_this_clone\"/>\n ", "\n ").concat(categorySeparator, "\n </category>\n ");
|
||
};
|
||
|
||
const sensing = function sensing(isInitialSetup, isStage) {
|
||
const name = translate('SENSING_ASK_TEXT', 'What\'s your name?');
|
||
return "\n <category name=\"%{BKY_CATEGORY_SENSING}\" id=\"sensing\" colour=\"#4CBFE6\" secondaryColour=\"#2E8EB8\">\n ".concat(isStage ? '' : "\n <block type=\"sensing_touchingobject\">\n <value name=\"TOUCHINGOBJECTMENU\">\n <shadow type=\"sensing_touchingobjectmenu\"/>\n </value>\n </block>\n <block type=\"sensing_touchingcolor\">\n <value name=\"COLOR\">\n <shadow type=\"colour_picker\"/>\n </value>\n </block>\n <block type=\"sensing_coloristouchingcolor\">\n <value name=\"COLOR\">\n <shadow type=\"colour_picker\"/>\n </value>\n <value name=\"COLOR2\">\n <shadow type=\"colour_picker\"/>\n </value>\n </block>\n <block type=\"sensing_distanceto\">\n <value name=\"DISTANCETOMENU\">\n <shadow type=\"sensing_distancetomenu\"/>\n </value>\n </block>\n ".concat(blockSeparator, "\n "), "\n ").concat(isInitialSetup ? '' : "\n <block id=\"askandwait\" type=\"sensing_askandwait\">\n <value name=\"QUESTION\">\n <shadow type=\"text\">\n <field name=\"TEXT\">".concat(name, "</field>\n </shadow>\n </value>\n </block>\n "), "\n <block id=\"answer\" type=\"sensing_answer\"/>\n ").concat(blockSeparator, "\n <block type=\"sensing_keypressed\">\n <value name=\"KEY_OPTION\">\n <shadow type=\"sensing_keyoptions\"/>\n </value>\n </block>\n <block type=\"sensing_mousedown\"/>\n <block type=\"sensing_mousex\"/>\n <block type=\"sensing_mousey\"/>\n ").concat(isStage ? '' : "\n ".concat(blockSeparator, "\n '<block type=\"sensing_setdragmode\" id=\"sensing_setdragmode\"></block>'+\n ").concat(blockSeparator, "\n "), "\n ").concat(blockSeparator, "\n <block id=\"loudness\" type=\"sensing_loudness\"/>\n ").concat(blockSeparator, "\n <block id=\"timer\" type=\"sensing_timer\"/>\n <block type=\"sensing_resettimer\"/>\n ").concat(blockSeparator, "\n <block id=\"of\" type=\"sensing_of\">\n <value name=\"OBJECT\">\n <shadow id=\"sensing_of_object_menu\" type=\"sensing_of_object_menu\"/>\n </value>\n </block>\n ").concat(blockSeparator, "\n <block id=\"current\" type=\"sensing_current\"/>\n <block type=\"sensing_dayssince2000\"/>\n ").concat(blockSeparator, "\n <block type=\"sensing_username\"/>\n ").concat(categorySeparator, "\n </category>\n ");
|
||
};
|
||
|
||
const operators = function operators(isInitialSetup) {
|
||
const apple = translate('OPERATORS_JOIN_APPLE', 'apple');
|
||
const banana = translate('OPERATORS_JOIN_BANANA', 'banana');
|
||
const letter = translate('OPERATORS_LETTEROF_APPLE', 'a');
|
||
return "\n <category name=\"%{BKY_CATEGORY_OPERATORS}\" id=\"operators\" colour=\"#40BF4A\" secondaryColour=\"#389438\">\n <block type=\"operator_add\">\n <value name=\"NUM1\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n <value name=\"NUM2\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n </block>\n <block type=\"operator_subtract\">\n <value name=\"NUM1\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n <value name=\"NUM2\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n </block>\n <block type=\"operator_multiply\">\n <value name=\"NUM1\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n <value name=\"NUM2\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n </block>\n <block type=\"operator_divide\">\n <value name=\"NUM1\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n <value name=\"NUM2\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n </block>\n ".concat(blockSeparator, "\n <block type=\"operator_random\">\n <value name=\"FROM\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">1</field>\n </shadow>\n </value>\n <value name=\"TO\">\n <shadow type=\"math_number\">\n <field name=\"NUM\">10</field>\n </shadow>\n </value>\n </block>\n ").concat(blockSeparator, "\n <block type=\"operator_gt\">\n <value name=\"OPERAND1\">\n <shadow type=\"text\">\n <field name=\"TEXT\"/>\n </shadow>\n </value>\n <value name=\"OPERAND2\">\n <shadow type=\"text\">\n <field name=\"TEXT\">50</field>\n </shadow>\n </value>\n </block>\n <block type=\"operator_lt\">\n <value name=\"OPERAND1\">\n <shadow type=\"text\">\n <field name=\"TEXT\"/>\n </shadow>\n </value>\n <value name=\"OPERAND2\">\n <shadow type=\"text\">\n <field name=\"TEXT\">50</field>\n </shadow>\n </value>\n </block>\n <block type=\"operator_equals\">\n <value name=\"OPERAND1\">\n <shadow type=\"text\">\n <field name=\"TEXT\"/>\n </shadow>\n </value>\n <value name=\"OPERAND2\">\n <shadow type=\"text\">\n <field name=\"TEXT\">50</field>\n </shadow>\n </value>\n </block>\n ").concat(blockSeparator, "\n <block type=\"operator_and\"/>\n <block type=\"operator_or\"/>\n <block type=\"operator_not\"/>\n ").concat(blockSeparator, "\n ").concat(isInitialSetup ? '' : "\n <block type=\"operator_join\">\n <value name=\"STRING1\">\n <shadow type=\"text\">\n <field name=\"TEXT\">".concat(apple, " </field>\n </shadow>\n </value>\n <value name=\"STRING2\">\n <shadow type=\"text\">\n <field name=\"TEXT\">").concat(banana, "</field>\n </shadow>\n </value>\n </block>\n <block type=\"operator_letter_of\">\n <value name=\"LETTER\">\n <shadow type=\"math_whole_number\">\n <field name=\"NUM\">1</field>\n </shadow>\n </value>\n <value name=\"STRING\">\n <shadow type=\"text\">\n <field name=\"TEXT\">").concat(apple, "</field>\n </shadow>\n </value>\n </block>\n <block type=\"operator_length\">\n <value name=\"STRING\">\n <shadow type=\"text\">\n <field name=\"TEXT\">").concat(apple, "</field>\n </shadow>\n </value>\n </block>\n <block type=\"operator_contains\" id=\"operator_contains\">\n <value name=\"STRING1\">\n <shadow type=\"text\">\n <field name=\"TEXT\">").concat(apple, "</field>\n </shadow>\n </value>\n <value name=\"STRING2\">\n <shadow type=\"text\">\n <field name=\"TEXT\">").concat(letter, "</field>\n </shadow>\n </value>\n </block>\n "), "\n ").concat(blockSeparator, "\n <block type=\"operator_mod\">\n <value name=\"NUM1\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n <value name=\"NUM2\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n </block>\n <block type=\"operator_round\">\n <value name=\"NUM\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n </block>\n ").concat(blockSeparator, "\n <block type=\"operator_mathop\">\n <value name=\"NUM\">\n <shadow type=\"math_number\">\n <field name=\"NUM\"/>\n </shadow>\n </value>\n </block>\n ").concat(categorySeparator, "\n </category>\n ");
|
||
};
|
||
|
||
const variables = function variables() {
|
||
return "\n <category\n name=\"%{BKY_CATEGORY_VARIABLES}\"\n id=\"variables\"\n colour=\"#FF8C1A\"\n secondaryColour=\"#DB6E00\"\n custom=\"VARIABLE\">\n </category>\n ";
|
||
};
|
||
|
||
const myBlocks = function myBlocks() {
|
||
return "\n <category\n name=\"%{BKY_CATEGORY_MYBLOCKS}\"\n id=\"myBlocks\"\n colour=\"#FF6680\"\n secondaryColour=\"#FF4D6A\"\n custom=\"PROCEDURE\">\n </category>\n ";
|
||
}; // eslint-disable-next-line max-len
|
||
|
||
|
||
const extraTurboWarpBlocks = "\n<block type=\"argument_reporter_boolean\"><field name=\"VALUE\">is compiled?</field></block>\n<block type=\"argument_reporter_boolean\"><field name=\"VALUE\">is TurboWarp?</field></block>\n";
|
||
/* eslint-enable no-unused-vars */
|
||
|
||
const xmlOpen = '<xml style="display: none">';
|
||
const xmlClose = '</xml>';
|
||
/**
|
||
* @param {!boolean} isInitialSetup - Whether the toolbox is for initial setup. If the mode is "initial setup",
|
||
* blocks with localized default parameters (e.g. ask and wait) should not be loaded. (LLK/scratch-gui#5445)
|
||
* @param {?boolean} isStage - Whether the toolbox is for a stage-type target. This is always set to true
|
||
* when isInitialSetup is true.
|
||
* @param {?string} targetId - The current editing target
|
||
* @param {?Array.<object>} categoriesXML - optional array of `{id,xml}` for categories. This can include both core
|
||
* and other extensions: core extensions will be placed in the normal Scratch order; others will go at the bottom.
|
||
* @property {string} id - the extension / category ID.
|
||
* @property {string} xml - the `<category>...</category>` XML for this extension / category.
|
||
* @param {?string} costumeName - The name of the default selected costume dropdown.
|
||
* @param {?string} backdropName - The name of the default selected backdrop dropdown.
|
||
* @param {?string} soundName - The name of the default selected sound dropdown.
|
||
* @returns {string} - a ScratchBlocks-style XML document for the contents of the toolbox.
|
||
*/
|
||
|
||
const makeToolboxXML = function makeToolboxXML(isInitialSetup, isStage = true, targetId, categoriesXML = [], costumeName = '', backdropName = '', soundName = '') {
|
||
isStage = isInitialSetup || isStage;
|
||
const gap = [categorySeparator];
|
||
costumeName = xmlEscape(costumeName);
|
||
backdropName = xmlEscape(backdropName);
|
||
soundName = xmlEscape(soundName);
|
||
categoriesXML = categoriesXML.slice();
|
||
|
||
const moveCategory = categoryId => {
|
||
const index = categoriesXML.findIndex(categoryInfo => categoryInfo.id === categoryId);
|
||
|
||
if (index >= 0) {
|
||
// remove the category from categoriesXML and return its XML
|
||
const [categoryInfo] = categoriesXML.splice(index, 1);
|
||
return categoryInfo.xml;
|
||
} // return `undefined`
|
||
|
||
};
|
||
|
||
const motionXML = moveCategory('motion') || motion(isInitialSetup, isStage, targetId);
|
||
const looksXML = moveCategory('looks') || looks(isInitialSetup, isStage, targetId, costumeName, backdropName);
|
||
const soundXML = moveCategory('sound') || sound(isInitialSetup, isStage, targetId, soundName);
|
||
const eventsXML = moveCategory('event') || events(isInitialSetup, isStage, targetId);
|
||
const controlXML = moveCategory('control') || control(isInitialSetup, isStage, targetId);
|
||
const sensingXML = moveCategory('sensing') || sensing(isInitialSetup, isStage, targetId);
|
||
const operatorsXML = moveCategory('operators') || operators(isInitialSetup, isStage, targetId);
|
||
const variablesXML = moveCategory('data') || variables(isInitialSetup, isStage, targetId);
|
||
const myBlocksXML = moveCategory('procedures') || myBlocks(isInitialSetup, isStage, targetId); // Always display TurboWarp blocks as the first extension, if it exists,
|
||
// and also add an "is compiled?" block to the top.
|
||
|
||
let turbowarpXML = moveCategory('tw');
|
||
|
||
if (turbowarpXML && !turbowarpXML.includes(extraTurboWarpBlocks)) {
|
||
turbowarpXML = turbowarpXML.replace('<block', "".concat(extraTurboWarpBlocks, "<block"));
|
||
}
|
||
|
||
const everything = [xmlOpen, motionXML, gap, looksXML, gap, soundXML, gap, eventsXML, gap, controlXML, gap, sensingXML, gap, operatorsXML, gap, variablesXML, gap, myBlocksXML, gap];
|
||
|
||
if (turbowarpXML) {
|
||
everything.push(turbowarpXML);
|
||
}
|
||
|
||
for (const extensionCategory of categoriesXML) {
|
||
everything.push(gap, extensionCategory.xml);
|
||
}
|
||
|
||
everything.push(xmlClose);
|
||
return everything.join('\n');
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (makeToolboxXML);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/monitor-adapter.js":
|
||
/*!************************************!*\
|
||
!*** ./src/lib/monitor-adapter.js ***!
|
||
\************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony import */ var _opcode_labels_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./opcode-labels.js */ "./src/lib/opcode-labels.js");
|
||
|
||
|
||
const isUndefined = a => typeof a === 'undefined';
|
||
/**
|
||
* Convert monitors from VM format to what the GUI needs to render.
|
||
* - Convert opcode to a label and a category
|
||
* @param {string} block.id - The id of the monitor block
|
||
* @param {string} block.spriteName - Present only if the monitor applies only to the sprite
|
||
* with given target ID. The name of the target sprite when the monitor was created
|
||
* @param {string} block.opcode - The opcode of the monitor
|
||
* @param {object} block.params - Extra params to the monitor block
|
||
* @param {string|number|Array} block.value - The monitor value
|
||
* @param {VirtualMachine} block.vm - the VM instance which owns the block
|
||
* @return {object} The adapted monitor with label and category
|
||
*/
|
||
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (function ({
|
||
id,
|
||
spriteName,
|
||
opcode,
|
||
params,
|
||
value,
|
||
vm
|
||
}) {
|
||
// Extension monitors get their labels from the Runtime through `getLabelForOpcode`.
|
||
// Other monitors' labels are hard-coded in `OpcodeLabels`.
|
||
let {
|
||
label,
|
||
category,
|
||
labelFn
|
||
} = vm && vm.runtime.getLabelForOpcode(opcode) || _opcode_labels_js__WEBPACK_IMPORTED_MODULE_0__["default"].getLabel(opcode); // Use labelFn if provided for dynamic labelling (e.g. variables)
|
||
|
||
if (!isUndefined(labelFn)) label = labelFn(params); // Append sprite name for sprite-specific monitors
|
||
|
||
if (spriteName) {
|
||
label = "".concat(spriteName, ": ").concat(label);
|
||
} // If value is a number, round it to six decimal places
|
||
|
||
|
||
if (typeof value === 'number') {
|
||
value = Number(value.toFixed(6));
|
||
} // Turn the value to a string, for handle boolean values
|
||
|
||
|
||
if (typeof value === 'boolean') {
|
||
value = value.toString();
|
||
} // Lists can contain booleans, which should also be turned to strings
|
||
|
||
|
||
if (Array.isArray(value)) {
|
||
value = value.slice();
|
||
|
||
for (let i = 0; i < value.length; i++) {
|
||
const item = value[i];
|
||
|
||
if (typeof item === 'boolean') {
|
||
value[i] = item.toString();
|
||
}
|
||
}
|
||
}
|
||
|
||
return {
|
||
id,
|
||
label,
|
||
category,
|
||
value
|
||
};
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/normalize.css":
|
||
/*!*******************************!*\
|
||
!*** ./src/lib/normalize.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!./normalize.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./src/lib/normalize.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/opcode-labels.js":
|
||
/*!**********************************!*\
|
||
!*** ./src/lib/opcode-labels.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");
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["defineMessages"])({
|
||
motion_direction: {
|
||
"id": "gui.opcodeLabels.direction",
|
||
"defaultMessage": "direction"
|
||
},
|
||
motion_xposition: {
|
||
"id": "gui.opcodeLabels.xposition",
|
||
"defaultMessage": "x position"
|
||
},
|
||
motion_yposition: {
|
||
"id": "gui.opcodeLabels.yposition",
|
||
"defaultMessage": "y position"
|
||
},
|
||
// Looks
|
||
looks_size: {
|
||
"id": "gui.opcodeLabels.size",
|
||
"defaultMessage": "size"
|
||
},
|
||
looks_costumename: {
|
||
"id": "gui.opcodeLabels.costumename",
|
||
"defaultMessage": "costume name"
|
||
},
|
||
looks_costumenumber: {
|
||
"id": "gui.opcodeLabels.costumenumber",
|
||
"defaultMessage": "costume number"
|
||
},
|
||
looks_backdropname: {
|
||
"id": "gui.opcodeLabels.backdropname",
|
||
"defaultMessage": "backdrop name"
|
||
},
|
||
looks_backdropnumber: {
|
||
"id": "gui.opcodeLabels.backdropnumber",
|
||
"defaultMessage": "backdrop number"
|
||
},
|
||
// Sound
|
||
sound_volume: {
|
||
"id": "gui.opcodeLabels.volume",
|
||
"defaultMessage": "volume"
|
||
},
|
||
sound_tempo: {
|
||
"id": "gui.opcodeLabels.tempo",
|
||
"defaultMessage": "tempo"
|
||
},
|
||
// Sensing
|
||
sensing_answer: {
|
||
"id": "gui.opcodeLabels.answer",
|
||
"defaultMessage": "answer"
|
||
},
|
||
sensing_mousedown: {
|
||
"id": "tw.opcode.mousedown",
|
||
"defaultMessage": "mouse down?"
|
||
},
|
||
sensing_mousex: {
|
||
"id": "tw.opcode.mousex",
|
||
"defaultMessage": "mouse x"
|
||
},
|
||
sensing_mousey: {
|
||
"id": "tw.opcode.mousey",
|
||
"defaultMessage": "mouse y"
|
||
},
|
||
sensing_loudness: {
|
||
"id": "gui.opcodeLabels.loudness",
|
||
"defaultMessage": "loudness"
|
||
},
|
||
sensing_username: {
|
||
"id": "gui.opcodeLabels.username",
|
||
"defaultMessage": "username"
|
||
},
|
||
sensing_current_year: {
|
||
"id": "gui.opcodeLabels.year",
|
||
"defaultMessage": "year"
|
||
},
|
||
sensing_current_month: {
|
||
"id": "gui.opcodeLabels.month",
|
||
"defaultMessage": "month"
|
||
},
|
||
sensing_current_date: {
|
||
"id": "gui.opcodeLabels.date",
|
||
"defaultMessage": "date"
|
||
},
|
||
sensing_current_dayofweek: {
|
||
"id": "gui.opcodeLabels.dayofweek",
|
||
"defaultMessage": "day of week"
|
||
},
|
||
sensing_current_hour: {
|
||
"id": "gui.opcodeLabels.hour",
|
||
"defaultMessage": "hour"
|
||
},
|
||
sensing_current_minute: {
|
||
"id": "gui.opcodeLabels.minute",
|
||
"defaultMessage": "minute"
|
||
},
|
||
sensing_current_second: {
|
||
"id": "gui.opcodeLabels.second",
|
||
"defaultMessage": "second"
|
||
},
|
||
sensing_timer: {
|
||
"id": "gui.opcodeLabels.timer",
|
||
"defaultMessage": "timer"
|
||
},
|
||
sensing_dayssince2000: {
|
||
"id": "tw.opcode.2000",
|
||
"defaultMessage": "days since 2000"
|
||
}
|
||
});
|
||
|
||
class OpcodeLabels {
|
||
constructor() {
|
||
/**
|
||
* Translation function for labels. By default just return the defaultMessage
|
||
* @private
|
||
* @param {object} message A message object compatible with react-intl formatMessage
|
||
* @return {string} Return the default string initially
|
||
*/
|
||
this._translator = message => message.defaultMessage;
|
||
/**
|
||
* Initial opcode map, with categories defined
|
||
* @private
|
||
*/
|
||
|
||
|
||
this._opcodeMap = {
|
||
// Motion
|
||
motion_direction: {
|
||
category: 'motion'
|
||
},
|
||
motion_xposition: {
|
||
category: 'motion'
|
||
},
|
||
motion_yposition: {
|
||
category: 'motion'
|
||
},
|
||
// Looks
|
||
looks_size: {
|
||
category: 'looks'
|
||
},
|
||
looks_costumenumbername: {
|
||
category: 'looks'
|
||
},
|
||
looks_backdropnumbername: {
|
||
category: 'looks'
|
||
},
|
||
looks_backdropname: {
|
||
category: 'looks'
|
||
},
|
||
// Data
|
||
data_variable: {
|
||
category: 'data'
|
||
},
|
||
data_listcontents: {
|
||
category: 'list'
|
||
},
|
||
// Sound
|
||
sound_volume: {
|
||
category: 'sound'
|
||
},
|
||
sound_tempo: {
|
||
category: 'sound'
|
||
},
|
||
// Sensing
|
||
sensing_answer: {
|
||
category: 'sensing'
|
||
},
|
||
sensing_mousedown: {
|
||
category: 'sensing'
|
||
},
|
||
sensing_mousex: {
|
||
category: 'sensing'
|
||
},
|
||
sensing_mousey: {
|
||
category: 'sensing'
|
||
},
|
||
sensing_loudness: {
|
||
category: 'sensing'
|
||
},
|
||
sensing_username: {
|
||
category: 'sensing'
|
||
},
|
||
sensing_current: {
|
||
category: 'sensing'
|
||
},
|
||
sensing_timer: {
|
||
category: 'sensing'
|
||
},
|
||
sensing_dayssince2000: {
|
||
category: 'sensing'
|
||
}
|
||
}; // Initialize opcodeMap with default strings
|
||
|
||
this._refreshOpcodeMap();
|
||
}
|
||
/**
|
||
* Set the translation function for monitor labels. The function should accept
|
||
* a message object as defined by react-intl defineMessages
|
||
* @param {function} translator the function to use for localization
|
||
*/
|
||
|
||
|
||
setTranslatorFunction(translator) {
|
||
this._translator = translator;
|
||
|
||
this._refreshOpcodeMap();
|
||
}
|
||
/**
|
||
* Internal function to update opcode Map when translation function is defined
|
||
* @private
|
||
*/
|
||
|
||
|
||
_refreshOpcodeMap() {
|
||
// Motion
|
||
this._opcodeMap.motion_direction.labelFn = () => this._translator(messages.motion_direction);
|
||
|
||
this._opcodeMap.motion_xposition.labelFn = () => this._translator(messages.motion_xposition);
|
||
|
||
this._opcodeMap.motion_yposition.labelFn = () => this._translator(messages.motion_yposition); // Looks
|
||
|
||
|
||
this._opcodeMap.looks_size.labelFn = () => this._translator(messages.looks_size);
|
||
|
||
this._opcodeMap.looks_costumenumbername.labelFn = params => {
|
||
if (params.NUMBER_NAME === 'number') {
|
||
return this._translator(messages.looks_costumenumber);
|
||
}
|
||
|
||
return this._translator(messages.looks_costumename);
|
||
};
|
||
|
||
this._opcodeMap.looks_backdropnumbername.labelFn = params => {
|
||
if (params.NUMBER_NAME === 'number') {
|
||
return this._translator(messages.looks_backdropnumber);
|
||
}
|
||
|
||
return this._translator(messages.looks_backdropname);
|
||
};
|
||
|
||
this._opcodeMap.looks_backdropname.labelFn = () => this._translator(messages.looks_backdropname); // Data
|
||
|
||
|
||
this._opcodeMap.data_variable.labelFn = params => params.VARIABLE;
|
||
|
||
this._opcodeMap.data_listcontents.labelFn = params => params.LIST; // Sound
|
||
|
||
|
||
this._opcodeMap.sound_volume.labelFn = () => this._translator(messages.sound_volume);
|
||
|
||
this._opcodeMap.sound_tempo.labelFn = () => this._translator(messages.sound_tempo); // Sensing
|
||
|
||
|
||
this._opcodeMap.sensing_answer.labelFn = () => this._translator(messages.sensing_answer);
|
||
|
||
this._opcodeMap.sensing_mousedown.labelFn = () => this._translator(messages.sensing_mousedown);
|
||
|
||
this._opcodeMap.sensing_mousex.labelFn = () => this._translator(messages.sensing_mousex);
|
||
|
||
this._opcodeMap.sensing_mousey.labelFn = () => this._translator(messages.sensing_mousey);
|
||
|
||
this._opcodeMap.sensing_loudness.labelFn = () => this._translator(messages.sensing_loudness);
|
||
|
||
this._opcodeMap.sensing_username.labelFn = () => this._translator(messages.sensing_username);
|
||
|
||
this._opcodeMap.sensing_current.labelFn = params => {
|
||
switch (params.CURRENTMENU.toLowerCase()) {
|
||
case 'year':
|
||
return this._translator(messages.sensing_current_year);
|
||
|
||
case 'month':
|
||
return this._translator(messages.sensing_current_month);
|
||
|
||
case 'date':
|
||
return this._translator(messages.sensing_current_date);
|
||
|
||
case 'dayofweek':
|
||
return this._translator(messages.sensing_current_dayofweek);
|
||
|
||
case 'hour':
|
||
return this._translator(messages.sensing_current_hour);
|
||
|
||
case 'minute':
|
||
return this._translator(messages.sensing_current_minute);
|
||
|
||
case 'second':
|
||
return this._translator(messages.sensing_current_second);
|
||
}
|
||
};
|
||
|
||
this._opcodeMap.sensing_timer.labelFn = () => this._translator(messages.sensing_timer);
|
||
|
||
this._opcodeMap.sensing_dayssince2000.labelFn = () => this._translator(messages.sensing_dayssince2000);
|
||
}
|
||
/**
|
||
* Return the label for an opcode
|
||
* @param {string} opcode the opcode you want a label for
|
||
* @return {object} object with label and category
|
||
*/
|
||
|
||
|
||
getLabel(opcode) {
|
||
if (opcode in this._opcodeMap) return this._opcodeMap[opcode];
|
||
return {
|
||
category: 'extension',
|
||
label: opcode
|
||
};
|
||
}
|
||
|
||
}
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (new OpcodeLabels());
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/project-fetcher-hoc.jsx":
|
||
/*!*****************************************!*\
|
||
!*** ./src/lib/project-fetcher-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 ProjectFetcherHOC; });
|
||
/* 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 react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
|
||
/* harmony import */ var _reducers_project_changed__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/project-changed */ "./src/reducers/project-changed.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_editor_tab__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/editor-tab */ "./src/reducers/editor-tab.js");
|
||
/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./log */ "./src/lib/log.js");
|
||
/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./storage */ "./src/lib/storage.js");
|
||
/* harmony import */ var _tw_missing_project__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./tw-missing-project */ "./src/lib/tw-missing-project/index.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__);
|
||
/* harmony import */ var _components_loader_tw_progress_monitor__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../components/loader/tw-progress-monitor */ "./src/components/loader/tw-progress-monitor.js");
|
||
const _excluded = ["assetHost", "intl", "isLoadingProject", "loadingState", "onActivateTab", "onError", "onFetchedProjectData", "onProjectUnchanged", "projectHost", "projectId", "reduxProjectId", "setProjectId", "isFetchingWithId"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
// TW: Temporary hack for project tokens
|
||
|
||
const fetchProjectToken = projectId => {
|
||
if (projectId === '0') {
|
||
return Promise.resolve(null);
|
||
} // Parse ?token=abcdef
|
||
|
||
|
||
const searchParams = new URLSearchParams(location.search);
|
||
|
||
if (searchParams.has('token')) {
|
||
return Promise.resolve(searchParams.get('token'));
|
||
} // Parse #1?token=abcdef
|
||
|
||
|
||
const hashParams = new URLSearchParams(location.hash.split('?')[1]);
|
||
|
||
if (hashParams.has('token')) {
|
||
return Promise.resolve(hashParams.get('token'));
|
||
}
|
||
|
||
return fetch("https://trampoline.turbowarp.org/proxy/projects/".concat(projectId)).then(r => {
|
||
if (!r.ok) return null;
|
||
return r.json();
|
||
}).then(dataOrNull => {
|
||
const token = dataOrNull ? dataOrNull.project_token : null;
|
||
return token;
|
||
}).catch(err => {
|
||
_log__WEBPACK_IMPORTED_MODULE_8__["default"].error(err);
|
||
return null;
|
||
});
|
||
};
|
||
/* Higher Order Component to provide behavior for loading projects by id. If
|
||
* there's no id, the default project is loaded.
|
||
* @param {React.Component} WrappedComponent component to receive projectData prop
|
||
* @returns {React.Component} component with project loading behavior
|
||
*/
|
||
|
||
|
||
const ProjectFetcherHOC = function ProjectFetcherHOC(WrappedComponent) {
|
||
class ProjectFetcherComponent extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['fetchProject']);
|
||
_storage__WEBPACK_IMPORTED_MODULE_9__["default"].setProjectHost(props.projectHost);
|
||
_storage__WEBPACK_IMPORTED_MODULE_9__["default"].setProjectToken(props.projectToken);
|
||
_storage__WEBPACK_IMPORTED_MODULE_9__["default"].setAssetHost(props.assetHost);
|
||
_storage__WEBPACK_IMPORTED_MODULE_9__["default"].setTranslatorFunction(props.intl.formatMessage); // props.projectId might be unset, in which case we use our default;
|
||
// or it may be set by an even higher HOC, and passed to us.
|
||
// Either way, we now know what the initial projectId should be, so
|
||
// set it in the redux store.
|
||
|
||
if (props.projectId !== '' && props.projectId !== null && typeof props.projectId !== 'undefined') {
|
||
this.props.setProjectId(props.projectId.toString());
|
||
}
|
||
}
|
||
|
||
componentDidUpdate(prevProps) {
|
||
if (prevProps.projectHost !== this.props.projectHost) {
|
||
_storage__WEBPACK_IMPORTED_MODULE_9__["default"].setProjectHost(this.props.projectHost);
|
||
}
|
||
|
||
if (prevProps.projectToken !== this.props.projectToken) {
|
||
_storage__WEBPACK_IMPORTED_MODULE_9__["default"].setProjectToken(this.props.projectToken);
|
||
}
|
||
|
||
if (prevProps.assetHost !== this.props.assetHost) {
|
||
_storage__WEBPACK_IMPORTED_MODULE_9__["default"].setAssetHost(this.props.assetHost);
|
||
}
|
||
|
||
if (this.props.isFetchingWithId && !prevProps.isFetchingWithId) {
|
||
this.fetchProject(this.props.reduxProjectId, this.props.loadingState);
|
||
}
|
||
|
||
if (this.props.isShowingProject && !prevProps.isShowingProject) {
|
||
this.props.onProjectUnchanged();
|
||
}
|
||
|
||
if (this.props.isShowingProject && (prevProps.isLoadingProject || prevProps.isCreatingNew)) {
|
||
this.props.onActivateTab(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_7__["BLOCKS_TAB_INDEX"]);
|
||
}
|
||
}
|
||
|
||
fetchProject(projectId, loadingState) {
|
||
// tw: clear and stop the VM before fetching
|
||
// these will also happen later after the project is fetched, but fetching may take a while and
|
||
// the project shouldn't be running while fetching the new project
|
||
this.props.vm.clear();
|
||
this.props.vm.stop();
|
||
let assetPromise; // In case running in node...
|
||
|
||
let projectUrl = typeof URLSearchParams === 'undefined' ? null : new URLSearchParams(location.search).get('project_url');
|
||
|
||
if (projectUrl) {
|
||
if (!projectUrl.startsWith('http:') && !projectUrl.startsWith('https:')) {
|
||
projectUrl = "https://".concat(projectUrl);
|
||
}
|
||
|
||
assetPromise = _components_loader_tw_progress_monitor__WEBPACK_IMPORTED_MODULE_12__["fetchWithProgress"](projectUrl).then(r => {
|
||
this.props.vm.runtime.renderer.setPrivateSkinAccess(false);
|
||
|
||
if (!r.ok) {
|
||
throw new Error("Request returned status ".concat(r.status));
|
||
}
|
||
|
||
return r.arrayBuffer();
|
||
}).then(buffer => ({
|
||
data: buffer
|
||
}));
|
||
} else {
|
||
// TW: Temporary hack for project tokens
|
||
assetPromise = fetchProjectToken(projectId).then(token => {
|
||
_storage__WEBPACK_IMPORTED_MODULE_9__["default"].setProjectToken(token);
|
||
return _storage__WEBPACK_IMPORTED_MODULE_9__["default"].load(_storage__WEBPACK_IMPORTED_MODULE_9__["default"].AssetType.Project, projectId, _storage__WEBPACK_IMPORTED_MODULE_9__["default"].DataFormat.JSON);
|
||
});
|
||
}
|
||
|
||
return assetPromise.then(projectAsset => {
|
||
// tw: If the project data appears to be HTML, then the result is probably an nginx 404 page,
|
||
// and the "missing project" project should be loaded instead.
|
||
// See: https://projects.scratch.mit.edu/9999999999999999999999
|
||
if (projectAsset && projectAsset.data) {
|
||
const firstChar = projectAsset.data[0];
|
||
|
||
if (firstChar === '<' || firstChar === '<'.charCodeAt(0)) {
|
||
return _storage__WEBPACK_IMPORTED_MODULE_9__["default"].load(_storage__WEBPACK_IMPORTED_MODULE_9__["default"].AssetType.Project, _tw_missing_project__WEBPACK_IMPORTED_MODULE_10__["MISSING_PROJECT_ID"], _storage__WEBPACK_IMPORTED_MODULE_9__["default"].DataFormat.JSON);
|
||
}
|
||
}
|
||
|
||
return projectAsset;
|
||
}).then(projectAsset => {
|
||
if (projectAsset) {
|
||
this.props.onFetchedProjectData(projectAsset.data, loadingState);
|
||
} else {
|
||
// Treat failure to load as an error
|
||
// Throw to be caught by catch later on
|
||
throw new Error('Could not find project');
|
||
}
|
||
}).catch(err => {
|
||
this.props.onError(err);
|
||
_log__WEBPACK_IMPORTED_MODULE_8__["default"].error(err);
|
||
});
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
/* eslint-disable no-unused-vars */
|
||
assetHost,
|
||
intl,
|
||
isLoadingProject: isLoadingProjectProp,
|
||
loadingState,
|
||
onActivateTab,
|
||
onError: onErrorProp,
|
||
onFetchedProjectData: onFetchedProjectDataProp,
|
||
onProjectUnchanged,
|
||
projectHost,
|
||
projectId,
|
||
reduxProjectId,
|
||
setProjectId: setProjectIdProp,
|
||
|
||
/* eslint-enable no-unused-vars */
|
||
isFetchingWithId: isFetchingWithIdProp
|
||
} = _this$props,
|
||
componentProps = _objectWithoutProperties(_this$props, _excluded);
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, _extends({
|
||
fetchingProject: isFetchingWithIdProp
|
||
}, componentProps));
|
||
}
|
||
|
||
}
|
||
|
||
ProjectFetcherComponent.propTypes = {
|
||
assetHost: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
canSave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
intl: react_intl__WEBPACK_IMPORTED_MODULE_2__["intlShape"].isRequired,
|
||
isCreatingNew: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
isFetchingWithId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
isLoadingProject: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
isShowingProject: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
loadingState: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(_reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["LoadingStates"]),
|
||
onActivateTab: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onError: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onFetchedProjectData: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onProjectUnchanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
projectHost: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
projectToken: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
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]),
|
||
reduxProjectId: 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]),
|
||
setProjectId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
vm: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_11___default.a)
|
||
};
|
||
ProjectFetcherComponent.defaultProps = {
|
||
assetHost: 'https://assets.scratch.mit.edu',
|
||
projectHost: 'https://projects.scratch.mit.edu'
|
||
};
|
||
|
||
const mapStateToProps = state => ({
|
||
isCreatingNew: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["getIsCreatingNew"])(state.scratchGui.projectState.loadingState),
|
||
isFetchingWithId: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["getIsFetchingWithId"])(state.scratchGui.projectState.loadingState),
|
||
isLoadingProject: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["getIsLoading"])(state.scratchGui.projectState.loadingState),
|
||
isShowingProject: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["getIsShowingProject"])(state.scratchGui.projectState.loadingState),
|
||
loadingState: state.scratchGui.projectState.loadingState,
|
||
reduxProjectId: state.scratchGui.projectState.projectId,
|
||
vm: state.scratchGui.vm
|
||
});
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
onActivateTab: tab => dispatch(Object(_reducers_editor_tab__WEBPACK_IMPORTED_MODULE_7__["activateTab"])(tab)),
|
||
onError: error => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["projectError"])(error)),
|
||
onFetchedProjectData: (projectData, loadingState) => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["onFetchedProjectData"])(projectData, loadingState)),
|
||
setProjectId: projectId => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_6__["setProjectId"])(projectId)),
|
||
onProjectUnchanged: () => dispatch(Object(_reducers_project_changed__WEBPACK_IMPORTED_MODULE_5__["setProjectUnchanged"])())
|
||
}); // 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_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps, mapDispatchToProps, mergeProps)(ProjectFetcherComponent));
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/project-saver-hoc.jsx":
|
||
/*!***************************************!*\
|
||
!*** ./src/lib/project-saver-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 ProjectSaverHOC; });
|
||
/* 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 _lib_collect_metadata__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/collect-metadata */ "./src/lib/collect-metadata.js");
|
||
/* harmony import */ var _lib_log__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/log */ "./src/lib/log.js");
|
||
/* harmony import */ var _lib_storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/storage */ "./src/lib/storage.js");
|
||
/* harmony import */ var _lib_data_uri_to_blob__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/data-uri-to-blob */ "./src/lib/data-uri-to-blob.js");
|
||
/* harmony import */ var _lib_save_project_to_server__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/save-project-to-server */ "./src/lib/save-project-to-server.js");
|
||
/* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js");
|
||
/* harmony import */ var _reducers_timeout__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../reducers/timeout */ "./src/reducers/timeout.js");
|
||
/* harmony import */ var _reducers_project_changed__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../reducers/project-changed */ "./src/reducers/project-changed.js");
|
||
/* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js");
|
||
const _excluded = ["autoSaveTimeoutId", "autoSaveIntervalSecs", "isCreatingCopy", "isCreatingNew", "projectChanged", "isAnyCreatingNewState", "isLoading", "isManualUpdating", "isRemixing", "isShowingSaveable", "isShowingWithId", "isShowingWithoutId", "isUpdating", "loadingState", "onAutoUpdateProject", "onCreatedProject", "onCreateProject", "onProjectError", "onRemixing", "onSetProjectUnchanged", "onSetProjectThumbnailer", "onSetProjectSaver", "onShowAlert", "onShowCopySuccessAlert", "onShowRemixSuccessAlert", "onShowCreatingCopyAlert", "onShowCreatingRemixAlert", "onShowSaveSuccessAlert", "onShowSavingAlert", "onUpdatedProject", "onUpdateProjectData", "onUpdateProjectThumbnail", "reduxProjectId", "reduxProjectTitle", "setAutoSaveTimeoutId"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Higher Order Component to provide behavior for saving projects.
|
||
* @param {React.Component} WrappedComponent the component to add project saving functionality to
|
||
* @returns {React.Component} WrappedComponent with project saving functionality added
|
||
*
|
||
* <ProjectSaverHOC>
|
||
* <WrappedComponent />
|
||
* </ProjectSaverHOC>
|
||
*/
|
||
|
||
const ProjectSaverHOC = function ProjectSaverHOC(WrappedComponent) {
|
||
class ProjectSaverComponent extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['getProjectThumbnail', 'leavePageConfirm', 'tryToAutoSave']);
|
||
}
|
||
|
||
componentWillMount() {
|
||
if (typeof window === 'object') {
|
||
// Note: it might be better to use a listener instead of assigning onbeforeunload;
|
||
// but then it'd be hard to turn this listening off in our tests
|
||
window.onbeforeunload = e => this.leavePageConfirm(e);
|
||
} // Allow the GUI consumer to pass in a function to receive a trigger
|
||
// for triggering thumbnail or whole project saves.
|
||
// These functions are called with null on unmount to prevent stale references.
|
||
|
||
|
||
this.props.onSetProjectThumbnailer(this.getProjectThumbnail);
|
||
this.props.onSetProjectSaver(this.tryToAutoSave);
|
||
}
|
||
|
||
componentDidUpdate(prevProps) {
|
||
if (!this.props.isAnyCreatingNewState && prevProps.isAnyCreatingNewState) {
|
||
this.reportTelemetryEvent('projectWasCreated');
|
||
}
|
||
|
||
if (!this.props.isLoading && prevProps.isLoading) {
|
||
this.reportTelemetryEvent('projectDidLoad');
|
||
}
|
||
|
||
if (this.props.projectChanged && !prevProps.projectChanged) {
|
||
this.scheduleAutoSave();
|
||
}
|
||
|
||
if (this.props.isUpdating && !prevProps.isUpdating) {
|
||
this.updateProjectToStorage();
|
||
}
|
||
|
||
if (this.props.isCreatingNew && !prevProps.isCreatingNew) {
|
||
this.createNewProjectToStorage();
|
||
}
|
||
|
||
if (this.props.isCreatingCopy && !prevProps.isCreatingCopy) {
|
||
this.createCopyToStorage();
|
||
}
|
||
|
||
if (this.props.isRemixing && !prevProps.isRemixing) {
|
||
this.props.onRemixing(true);
|
||
this.createRemixToStorage();
|
||
} else if (!this.props.isRemixing && prevProps.isRemixing) {
|
||
this.props.onRemixing(false);
|
||
} // see if we should "create" the current project on the server
|
||
//
|
||
// don't try to create or save immediately after trying to create
|
||
|
||
|
||
if (prevProps.isCreatingNew) return; // if we're newly able to create this project, create it!
|
||
|
||
if (this.isShowingCreatable(this.props) && !this.isShowingCreatable(prevProps)) {
|
||
this.props.onCreateProject();
|
||
} // see if we should save/update the current project on the server
|
||
//
|
||
// don't try to save immediately after trying to save
|
||
|
||
|
||
if (prevProps.isUpdating) return; // if we're newly able to save this project, save it!
|
||
|
||
const becameAbleToSave = this.props.canSave && !prevProps.canSave;
|
||
const becameShared = this.props.isShared && !prevProps.isShared;
|
||
|
||
if (this.props.isShowingSaveable && (becameAbleToSave || becameShared)) {
|
||
this.props.onAutoUpdateProject();
|
||
}
|
||
}
|
||
|
||
componentWillUnmount() {
|
||
this.clearAutoSaveTimeout(); // Cant unset the beforeunload because it might no longer belong to this component
|
||
// i.e. if another of this component has been mounted before this one gets unmounted
|
||
// which happens when going from project to editor view.
|
||
// window.onbeforeunload = undefined; // eslint-disable-line no-undefined
|
||
// Remove project thumbnailer function since the components are unmounting
|
||
|
||
this.props.onSetProjectThumbnailer(null);
|
||
this.props.onSetProjectSaver(null);
|
||
}
|
||
|
||
leavePageConfirm(e) {
|
||
if (this.props.projectChanged) {
|
||
// both methods of returning a value may be necessary for browser compatibility
|
||
(e || window.event).returnValue = true;
|
||
return true;
|
||
}
|
||
|
||
return; // Returning undefined prevents the prompt from coming up
|
||
}
|
||
|
||
clearAutoSaveTimeout() {
|
||
if (this.props.autoSaveTimeoutId !== null) {
|
||
clearTimeout(this.props.autoSaveTimeoutId);
|
||
this.props.setAutoSaveTimeoutId(null);
|
||
}
|
||
}
|
||
|
||
scheduleAutoSave() {
|
||
if (this.props.isShowingSaveable && this.props.autoSaveTimeoutId === null) {
|
||
const timeoutId = setTimeout(this.tryToAutoSave, this.props.autoSaveIntervalSecs * 1000);
|
||
this.props.setAutoSaveTimeoutId(timeoutId);
|
||
}
|
||
}
|
||
|
||
tryToAutoSave() {
|
||
if (this.props.projectChanged && this.props.isShowingSaveable) {
|
||
this.props.onAutoUpdateProject();
|
||
}
|
||
}
|
||
|
||
isShowingCreatable(props) {
|
||
return props.canCreateNew && props.isShowingWithoutId;
|
||
}
|
||
|
||
updateProjectToStorage() {
|
||
this.props.onShowSavingAlert();
|
||
return this.storeProject(this.props.reduxProjectId).then(() => {
|
||
// there's an http response object available here, but we don't need to examine
|
||
// it, because there are no values contained in it that we care about
|
||
this.props.onUpdatedProject(this.props.loadingState);
|
||
this.props.onShowSaveSuccessAlert();
|
||
}).catch(err => {
|
||
// Always show the savingError alert because it gives the
|
||
// user the chance to download or retry the save manually.
|
||
this.props.onShowAlert('savingError');
|
||
this.props.onProjectError(err);
|
||
});
|
||
}
|
||
|
||
createNewProjectToStorage() {
|
||
return this.storeProject(null).then(response => {
|
||
this.props.onCreatedProject(response.id.toString(), this.props.loadingState);
|
||
}).catch(err => {
|
||
this.props.onShowAlert('creatingError');
|
||
this.props.onProjectError(err);
|
||
});
|
||
}
|
||
|
||
createCopyToStorage() {
|
||
this.props.onShowCreatingCopyAlert();
|
||
return this.storeProject(null, {
|
||
originalId: this.props.reduxProjectId,
|
||
isCopy: 1,
|
||
title: this.props.reduxProjectTitle
|
||
}).then(response => {
|
||
this.props.onCreatedProject(response.id.toString(), this.props.loadingState);
|
||
this.props.onShowCopySuccessAlert();
|
||
}).catch(err => {
|
||
this.props.onShowAlert('creatingError');
|
||
this.props.onProjectError(err);
|
||
});
|
||
}
|
||
|
||
createRemixToStorage() {
|
||
this.props.onShowCreatingRemixAlert();
|
||
return this.storeProject(null, {
|
||
originalId: this.props.reduxProjectId,
|
||
isRemix: 1,
|
||
title: this.props.reduxProjectTitle
|
||
}).then(response => {
|
||
this.props.onCreatedProject(response.id.toString(), this.props.loadingState);
|
||
this.props.onShowRemixSuccessAlert();
|
||
}).catch(err => {
|
||
this.props.onShowAlert('creatingError');
|
||
this.props.onProjectError(err);
|
||
});
|
||
}
|
||
/**
|
||
* storeProject:
|
||
* @param {number|string|undefined} projectId - defined value will PUT/update; undefined/null will POST/create
|
||
* @return {Promise} - resolves with json object containing project's existing or new id
|
||
* @param {?object} requestParams - object of params to add to request body
|
||
*/
|
||
|
||
|
||
storeProject(projectId, requestParams) {
|
||
requestParams = requestParams || {};
|
||
this.clearAutoSaveTimeout(); // Serialize VM state now before embarking on
|
||
// the asynchronous journey of storing assets to
|
||
// the server. This ensures that assets don't update
|
||
// while in the process of saving a project (e.g. the
|
||
// serialized project refers to a newer asset than what
|
||
// we just finished saving).
|
||
|
||
const savedVMState = this.props.vm.toJSON();
|
||
return Promise.all(this.props.vm.assets.filter(asset => !asset.clean).map(asset => _lib_storage__WEBPACK_IMPORTED_MODULE_7__["default"].store(asset.assetType, asset.dataFormat, asset.data, asset.assetId).then(response => {
|
||
// Asset servers respond with {status: ok} for successful POSTs
|
||
if (response.status !== 'ok') {
|
||
// Errors include a `code` property, e.g. "Forbidden"
|
||
return Promise.reject(response.code);
|
||
}
|
||
|
||
asset.clean = true;
|
||
}))).then(() => this.props.onUpdateProjectData(projectId, savedVMState, requestParams)).then(response => {
|
||
this.props.onSetProjectUnchanged();
|
||
const id = response.id.toString();
|
||
|
||
if (id && this.props.onUpdateProjectThumbnail) {
|
||
this.storeProjectThumbnail(id);
|
||
}
|
||
|
||
this.reportTelemetryEvent('projectDidSave');
|
||
return response;
|
||
}).catch(err => {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_6__["default"].error(err);
|
||
throw err; // pass the error up the chain
|
||
});
|
||
}
|
||
/**
|
||
* Store a snapshot of the project once it has been saved/created.
|
||
* Needs to happen _after_ save because the project must have an ID.
|
||
* @param {!string} projectId - id of the project, must be defined.
|
||
*/
|
||
|
||
|
||
storeProjectThumbnail(projectId) {
|
||
try {
|
||
this.getProjectThumbnail(dataURI => {
|
||
this.props.onUpdateProjectThumbnail(projectId, Object(_lib_data_uri_to_blob__WEBPACK_IMPORTED_MODULE_8__["default"])(dataURI));
|
||
});
|
||
} catch (e) {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_6__["default"].error('Project thumbnail save error', e); // This is intentionally fire/forget because a failure
|
||
// to save the thumbnail is not vitally important to the user.
|
||
}
|
||
}
|
||
|
||
getProjectThumbnail(callback) {
|
||
this.props.vm.postIOData('video', {
|
||
forceTransparentPreview: true
|
||
});
|
||
this.props.vm.renderer.requestSnapshot(dataURI => {
|
||
this.props.vm.postIOData('video', {
|
||
forceTransparentPreview: false
|
||
});
|
||
callback(dataURI);
|
||
});
|
||
this.props.vm.renderer.draw();
|
||
}
|
||
/**
|
||
* Report a telemetry event.
|
||
* @param {string} event - one of `projectWasCreated`, `projectDidLoad`, `projectDidSave`, `projectWasUploaded`
|
||
*/
|
||
// TODO make a telemetry HOC and move this stuff there
|
||
|
||
|
||
reportTelemetryEvent(event) {
|
||
try {
|
||
if (this.props.onProjectTelemetryEvent) {
|
||
const metadata = Object(_lib_collect_metadata__WEBPACK_IMPORTED_MODULE_5__["default"])(this.props.vm, this.props.reduxProjectTitle, this.props.locale);
|
||
this.props.onProjectTelemetryEvent(event, metadata);
|
||
}
|
||
} catch (e) {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_6__["default"].error('Telemetry error', event, e); // This is intentionally fire/forget because a failure
|
||
// to report telemetry should not block saving
|
||
}
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
/* eslint-disable no-unused-vars */
|
||
autoSaveTimeoutId,
|
||
autoSaveIntervalSecs,
|
||
isCreatingCopy,
|
||
isCreatingNew,
|
||
projectChanged,
|
||
isAnyCreatingNewState,
|
||
isLoading,
|
||
isManualUpdating,
|
||
isRemixing,
|
||
isShowingSaveable,
|
||
isShowingWithId,
|
||
isShowingWithoutId,
|
||
isUpdating,
|
||
loadingState,
|
||
onAutoUpdateProject,
|
||
onCreatedProject,
|
||
onCreateProject,
|
||
onProjectError,
|
||
onRemixing,
|
||
onSetProjectUnchanged,
|
||
onSetProjectThumbnailer,
|
||
onSetProjectSaver,
|
||
onShowAlert,
|
||
onShowCopySuccessAlert,
|
||
onShowRemixSuccessAlert,
|
||
onShowCreatingCopyAlert,
|
||
onShowCreatingRemixAlert,
|
||
onShowSaveSuccessAlert,
|
||
onShowSavingAlert,
|
||
onUpdatedProject,
|
||
onUpdateProjectData,
|
||
onUpdateProjectThumbnail,
|
||
reduxProjectId,
|
||
reduxProjectTitle,
|
||
setAutoSaveTimeoutId: setAutoSaveTimeoutIdProp
|
||
} = _this$props,
|
||
componentProps = _objectWithoutProperties(_this$props, _excluded);
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(WrappedComponent, _extends({
|
||
isCreating: isAnyCreatingNewState
|
||
}, componentProps));
|
||
}
|
||
|
||
}
|
||
|
||
ProjectSaverComponent.propTypes = {
|
||
autoSaveIntervalSecs: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number.isRequired,
|
||
autoSaveTimeoutId: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.number,
|
||
canCreateNew: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
canSave: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isAnyCreatingNewState: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isCreatingCopy: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isCreatingNew: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isManualUpdating: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isRemixing: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isShared: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isShowingSaveable: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isShowingWithId: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isShowingWithoutId: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isUpdating: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
loadingState: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["LoadingStates"]),
|
||
locale: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string.isRequired,
|
||
onAutoUpdateProject: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onCreateProject: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onCreatedProject: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onProjectError: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onProjectTelemetryEvent: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onRemixing: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onSetProjectSaver: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,
|
||
onSetProjectThumbnailer: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,
|
||
onSetProjectUnchanged: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,
|
||
onShowAlert: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onShowCopySuccessAlert: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onShowCreatingCopyAlert: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onShowCreatingRemixAlert: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onShowRemixSuccessAlert: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onShowSaveSuccessAlert: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onShowSavingAlert: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onUpdateProjectData: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,
|
||
onUpdateProjectThumbnail: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onUpdatedProject: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
projectChanged: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
reduxProjectId: 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]),
|
||
reduxProjectTitle: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string,
|
||
setAutoSaveTimeoutId: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func.isRequired,
|
||
vm: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.instanceOf(scratch_vm__WEBPACK_IMPORTED_MODULE_4___default.a).isRequired
|
||
};
|
||
ProjectSaverComponent.defaultProps = {
|
||
autoSaveIntervalSecs: 120,
|
||
onRemixing: () => {},
|
||
onSetProjectThumbnailer: () => {},
|
||
onSetProjectSaver: () => {},
|
||
onUpdateProjectData: _lib_save_project_to_server__WEBPACK_IMPORTED_MODULE_9__["default"]
|
||
};
|
||
|
||
const mapStateToProps = (state, ownProps) => {
|
||
const loadingState = state.scratchGui.projectState.loadingState;
|
||
const isShowingWithId = Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["getIsShowingWithId"])(loadingState);
|
||
return {
|
||
autoSaveTimeoutId: state.scratchGui.timeout.autoSaveTimeoutId,
|
||
isAnyCreatingNewState: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["getIsAnyCreatingNewState"])(loadingState),
|
||
isLoading: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["getIsLoading"])(loadingState),
|
||
isCreatingCopy: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["getIsCreatingCopy"])(loadingState),
|
||
isCreatingNew: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["getIsCreatingNew"])(loadingState),
|
||
isRemixing: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["getIsRemixing"])(loadingState),
|
||
isShowingSaveable: ownProps.canSave && isShowingWithId,
|
||
isShowingWithId: isShowingWithId,
|
||
isShowingWithoutId: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["getIsShowingWithoutId"])(loadingState),
|
||
isUpdating: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["getIsUpdating"])(loadingState),
|
||
isManualUpdating: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["getIsManualUpdating"])(loadingState),
|
||
loadingState: loadingState,
|
||
locale: state.locales.locale,
|
||
projectChanged: state.scratchGui.projectChanged,
|
||
reduxProjectId: state.scratchGui.projectState.projectId,
|
||
reduxProjectTitle: state.scratchGui.projectTitle,
|
||
vm: state.scratchGui.vm
|
||
};
|
||
};
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
onAutoUpdateProject: () => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["autoUpdateProject"])()),
|
||
onCreatedProject: (projectId, loadingState) => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["doneCreatingProject"])(projectId, loadingState)),
|
||
onCreateProject: () => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["createProject"])()),
|
||
onProjectError: error => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["projectError"])(error)),
|
||
onSetProjectUnchanged: () => dispatch(Object(_reducers_project_changed__WEBPACK_IMPORTED_MODULE_12__["setProjectUnchanged"])()),
|
||
onShowAlert: alertType => dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_10__["showStandardAlert"])(alertType)),
|
||
onShowCopySuccessAlert: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_10__["showAlertWithTimeout"])(dispatch, 'createCopySuccess'),
|
||
onShowRemixSuccessAlert: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_10__["showAlertWithTimeout"])(dispatch, 'createRemixSuccess'),
|
||
onShowCreatingCopyAlert: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_10__["showAlertWithTimeout"])(dispatch, 'creatingCopy'),
|
||
onShowCreatingRemixAlert: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_10__["showAlertWithTimeout"])(dispatch, 'creatingRemix'),
|
||
onShowSaveSuccessAlert: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_10__["showAlertWithTimeout"])(dispatch, 'saveSuccess'),
|
||
onShowSavingAlert: () => Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_10__["showAlertWithTimeout"])(dispatch, 'saving'),
|
||
onUpdatedProject: loadingState => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_13__["doneUpdatingProject"])(loadingState)),
|
||
setAutoSaveTimeoutId: id => dispatch(Object(_reducers_timeout__WEBPACK_IMPORTED_MODULE_11__["setAutoSaveTimeoutId"])(id))
|
||
}); // 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_3__["connect"])(mapStateToProps, mapDispatchToProps, mergeProps)(ProjectSaverComponent);
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/query-parser-hoc.jsx":
|
||
/*!**************************************!*\
|
||
!*** ./src/lib/query-parser-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 QueryParserHOC; });
|
||
/* 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 query_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! query-string */ "./node_modules/query-string/index.js");
|
||
/* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(query_string__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 _tutorial_from_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tutorial-from-url */ "./src/lib/tutorial-from-url.js");
|
||
/* harmony import */ var _reducers_cards__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/cards */ "./src/reducers/cards.js");
|
||
/* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js");
|
||
const _excluded = ["onOpenTipsLibrary", "onUpdateReduxDeck"];
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/* Higher Order Component to get parameters from the URL query string and initialize redux state
|
||
* @param {React.Component} WrappedComponent: component to render
|
||
* @returns {React.Component} component with query parsing behavior
|
||
*/
|
||
|
||
const QueryParserHOC = function QueryParserHOC(WrappedComponent) {
|
||
class QueryParserComponent extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
const queryParams = query_string__WEBPACK_IMPORTED_MODULE_2___default.a.parse(location.search);
|
||
const tutorialId = Object(_tutorial_from_url__WEBPACK_IMPORTED_MODULE_4__["detectTutorialId"])(queryParams);
|
||
|
||
if (tutorialId) {
|
||
if (tutorialId === 'all') {
|
||
this.openTutorials();
|
||
} else {
|
||
this.setActiveCards(tutorialId);
|
||
}
|
||
}
|
||
}
|
||
|
||
setActiveCards(tutorialId) {
|
||
this.props.onUpdateReduxDeck(tutorialId);
|
||
}
|
||
|
||
openTutorials() {
|
||
this.props.onOpenTipsLibrary();
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
onOpenTipsLibrary,
|
||
// eslint-disable-line no-unused-vars
|
||
onUpdateReduxDeck
|
||
} = _this$props,
|
||
componentProps = _objectWithoutProperties(_this$props, _excluded);
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, componentProps);
|
||
}
|
||
|
||
}
|
||
|
||
QueryParserComponent.propTypes = {
|
||
onOpenTipsLibrary: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onUpdateReduxDeck: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func
|
||
};
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
onOpenTipsLibrary: () => {
|
||
dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_6__["openTipsLibrary"])());
|
||
},
|
||
onUpdateReduxDeck: tutorialId => {
|
||
dispatch(Object(_reducers_cards__WEBPACK_IMPORTED_MODULE_5__["activateDeck"])(tutorialId));
|
||
}
|
||
});
|
||
|
||
return Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(null, mapDispatchToProps)(QueryParserComponent);
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/randomize-sprite-position.js":
|
||
/*!**********************************************!*\
|
||
!*** ./src/lib/randomize-sprite-position.js ***!
|
||
\**********************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
const randomizeSpritePosition = spriteObject => {
|
||
// https://github.com/LLK/scratch-flash/blob/689f3c79a7e8b2e98f5be80056d877f303a8d8ba/src/Scratch.as#L1385
|
||
spriteObject.x = Math.floor(200 * Math.random() - 100);
|
||
spriteObject.y = Math.floor(100 * Math.random() - 50);
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (randomizeSpritePosition);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/save-project-to-server.js":
|
||
/*!*******************************************!*\
|
||
!*** ./src/lib/save-project-to-server.js ***!
|
||
\*******************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* 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__);
|
||
/* harmony import */ var xhr__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! xhr */ "./node_modules/xhr/index.js");
|
||
/* harmony import */ var xhr__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(xhr__WEBPACK_IMPORTED_MODULE_1__);
|
||
/* harmony import */ var _lib_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/storage */ "./src/lib/storage.js");
|
||
|
||
|
||
|
||
/**
|
||
* Save a project JSON to the project server.
|
||
* This should eventually live in scratch-www.
|
||
* @param {number} projectId the ID of the project, null if a new project.
|
||
* @param {object} vmState the JSON project representation.
|
||
* @param {object} params the request params.
|
||
* @property {?number} params.originalId the original project ID if a copy/remix.
|
||
* @property {?boolean} params.isCopy a flag indicating if this save is creating a copy.
|
||
* @property {?boolean} params.isRemix a flag indicating if this save is creating a remix.
|
||
* @property {?string} params.title the title of the project.
|
||
* @return {Promise} A promise that resolves when the network request resolves.
|
||
*/
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (function (projectId, vmState, params) {
|
||
const opts = {
|
||
body: vmState,
|
||
// If we set json:true then the body is double-stringified, so don't
|
||
headers: {
|
||
'Content-Type': 'application/json'
|
||
},
|
||
withCredentials: true
|
||
};
|
||
const creatingProject = projectId === null || typeof projectId === 'undefined';
|
||
const queryParams = {};
|
||
if (params.hasOwnProperty('originalId')) queryParams.original_id = params.originalId;
|
||
if (params.hasOwnProperty('isCopy')) queryParams.is_copy = params.isCopy;
|
||
if (params.hasOwnProperty('isRemix')) queryParams.is_remix = params.isRemix;
|
||
if (params.hasOwnProperty('title')) queryParams.title = params.title;
|
||
let qs = query_string__WEBPACK_IMPORTED_MODULE_0___default.a.stringify(queryParams);
|
||
if (qs) qs = "?".concat(qs);
|
||
|
||
if (creatingProject) {
|
||
Object.assign(opts, {
|
||
method: 'post',
|
||
url: "".concat(_lib_storage__WEBPACK_IMPORTED_MODULE_2__["default"].projectHost, "/").concat(qs)
|
||
});
|
||
} else {
|
||
Object.assign(opts, {
|
||
method: 'put',
|
||
url: "".concat(_lib_storage__WEBPACK_IMPORTED_MODULE_2__["default"].projectHost, "/").concat(projectId).concat(qs)
|
||
});
|
||
}
|
||
|
||
return new Promise((resolve, reject) => {
|
||
xhr__WEBPACK_IMPORTED_MODULE_1___default()(opts, (err, response) => {
|
||
if (err) return reject(err);
|
||
if (response.statusCode !== 200) return reject(response.statusCode);
|
||
let body;
|
||
|
||
try {
|
||
// Since we didn't set json: true, we have to parse manually
|
||
body = JSON.parse(response.body);
|
||
} catch (e) {
|
||
return reject(e);
|
||
}
|
||
|
||
body.id = projectId;
|
||
|
||
if (creatingProject) {
|
||
body.id = body['content-name'];
|
||
}
|
||
|
||
resolve(body);
|
||
});
|
||
});
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/sb-file-uploader-hoc.jsx":
|
||
/*!******************************************!*\
|
||
!*** ./src/lib/sb-file-uploader-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 SBFileUploaderHOC; });
|
||
/* 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 _lib_log__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/log */ "./src/lib/log.js");
|
||
/* harmony import */ var _shared_messages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./shared-messages */ "./src/lib/shared-messages.js");
|
||
/* harmony import */ var _tw_filesystem_api__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tw-filesystem-api */ "./src/lib/tw-filesystem-api.js");
|
||
/* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js");
|
||
/* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js");
|
||
/* harmony import */ var _reducers_project_title__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../reducers/project-title */ "./src/reducers/project-title.js");
|
||
/* harmony import */ var _reducers_modals__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../reducers/modals */ "./src/reducers/modals.js");
|
||
/* harmony import */ var _reducers_menus__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../reducers/menus */ "./src/reducers/menus.js");
|
||
const _excluded = ["cancelFileUpload", "closeFileMenu", "isLoadingUpload", "isShowingWithoutId", "loadingState", "onLoadingFinished", "onLoadingStarted", "onSetFileHandle", "onSetProjectTitle", "projectChanged", "requestProjectUpload", "userOwnsProject"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({
|
||
loadError: {
|
||
"id": "tw.loadError",
|
||
"defaultMessage": "Could not load project: {error}"
|
||
}
|
||
});
|
||
/**
|
||
* Higher Order Component to provide behavior for loading local project files into editor.
|
||
* @param {React.Component} WrappedComponent the component to add project file loading functionality to
|
||
* @returns {React.Component} WrappedComponent with project file loading functionality added
|
||
*
|
||
* <SBFileUploaderHOC>
|
||
* <WrappedComponent />
|
||
* </SBFileUploaderHOC>
|
||
*/
|
||
|
||
const SBFileUploaderHOC = function SBFileUploaderHOC(WrappedComponent) {
|
||
class SBFileUploaderComponent extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['createFileObjects', 'getProjectTitleFromFilename', 'handleFinishedLoadingUpload', 'handleStartSelectingFileUpload', 'handleChange', 'onload', 'removeFileObjects']); // tw: We have multiple instances of this HOC alive at a time. This flag fixes issues that arise from that.
|
||
|
||
this.expectingFileUploadFinish = false;
|
||
}
|
||
|
||
componentDidUpdate(prevProps) {
|
||
if (this.props.isLoadingUpload && !prevProps.isLoadingUpload && this.expectingFileUploadFinish) {
|
||
this.handleFinishedLoadingUpload(); // cue step 5 below
|
||
}
|
||
}
|
||
|
||
componentWillUnmount() {
|
||
this.removeFileObjects();
|
||
} // step 1: this is where the upload process begins
|
||
|
||
|
||
handleStartSelectingFileUpload() {
|
||
this.expectingFileUploadFinish = true;
|
||
this.createFileObjects(); // go to step 2
|
||
} // step 2: create a FileReader and an <input> element, and issue a
|
||
// pseudo-click to it. That will open the file chooser dialog.
|
||
|
||
|
||
createFileObjects() {
|
||
// redo step 7, in case it got skipped last time and its objects are
|
||
// still in memory
|
||
this.removeFileObjects(); // create fileReader
|
||
|
||
this.fileReader = new FileReader();
|
||
this.fileReader.onload = this.onload; // tw: Use FS API when available
|
||
|
||
if (_tw_filesystem_api__WEBPACK_IMPORTED_MODULE_7__["default"].available()) {
|
||
(async () => {
|
||
try {
|
||
const handle = await _tw_filesystem_api__WEBPACK_IMPORTED_MODULE_7__["default"].showOpenFilePicker();
|
||
const file = await handle.getFile();
|
||
this.handleChange({
|
||
target: {
|
||
files: [file],
|
||
handle: handle
|
||
}
|
||
});
|
||
} catch (err) {
|
||
// If the user aborted it, that's not an error.
|
||
if (err && err.name === 'AbortError') {
|
||
return;
|
||
} // eslint-disable-next-line no-console
|
||
|
||
|
||
console.error(err);
|
||
}
|
||
})();
|
||
} else {
|
||
// create <input> element and add it to DOM
|
||
this.inputElement = document.createElement('input');
|
||
this.inputElement.accept = '.sb,.sb2,.sb3';
|
||
this.inputElement.style = 'display: none;';
|
||
this.inputElement.type = 'file';
|
||
this.inputElement.onchange = this.handleChange; // connects to step 3
|
||
|
||
document.body.appendChild(this.inputElement); // simulate a click to open file chooser dialog
|
||
|
||
this.inputElement.click();
|
||
}
|
||
} // step 3: user has picked a file using the file chooser dialog.
|
||
// We don't actually load the file here, we only decide whether to do so.
|
||
|
||
|
||
handleChange(e) {
|
||
const {
|
||
intl,
|
||
isShowingWithoutId,
|
||
loadingState,
|
||
projectChanged,
|
||
userOwnsProject
|
||
} = this.props;
|
||
const thisFileInput = e.target;
|
||
|
||
if (thisFileInput.files) {
|
||
// Don't attempt to load if no file was selected
|
||
this.fileToUpload = thisFileInput.files[0]; // If user owns the project, or user has changed the project,
|
||
// we must confirm with the user that they really intend to
|
||
// replace it. (If they don't own the project and haven't
|
||
// changed it, no need to confirm.)
|
||
|
||
let uploadAllowed = true;
|
||
|
||
if (userOwnsProject || projectChanged && isShowingWithoutId) {
|
||
uploadAllowed = confirm( // eslint-disable-line no-alert
|
||
intl.formatMessage(_shared_messages__WEBPACK_IMPORTED_MODULE_6__["default"].replaceProjectWarning));
|
||
}
|
||
|
||
if (uploadAllowed) {
|
||
// Don't update file handle until after confirming replace.
|
||
const handle = thisFileInput.handle;
|
||
|
||
if (handle) {
|
||
if (this.fileToUpload.name.endsWith('.sb3')) {
|
||
this.props.onSetFileHandle(handle);
|
||
} else {
|
||
this.props.onSetFileHandle(null);
|
||
}
|
||
} // cues step 4
|
||
|
||
|
||
this.props.requestProjectUpload(loadingState);
|
||
} else {
|
||
// skips ahead to step 7
|
||
this.removeFileObjects();
|
||
}
|
||
|
||
this.props.closeFileMenu();
|
||
}
|
||
} // step 4 is below, in mapDispatchToProps
|
||
// step 5: called from componentDidUpdate when project state shows
|
||
// that project data has finished "uploading" into the browser
|
||
|
||
|
||
handleFinishedLoadingUpload() {
|
||
this.expectingFileUploadFinish = false;
|
||
|
||
if (this.fileToUpload && this.fileReader) {
|
||
// begin to read data from the file. When finished,
|
||
// cues step 6 using the reader's onload callback
|
||
this.fileReader.readAsArrayBuffer(this.fileToUpload);
|
||
} else {
|
||
this.props.cancelFileUpload(this.props.loadingState); // skip ahead to step 7
|
||
|
||
this.removeFileObjects();
|
||
}
|
||
} // used in step 6 below
|
||
|
||
|
||
getProjectTitleFromFilename(fileInputFilename) {
|
||
if (!fileInputFilename) return ''; // only parse title with valid scratch project extensions
|
||
// (.sb, .sb2, and .sb3)
|
||
|
||
const matches = fileInputFilename.match(/^(.*)\.sb[23]?$/);
|
||
if (!matches) return '';
|
||
return matches[1].substring(0, 100); // truncate project title to max 100 chars
|
||
} // step 6: attached as a handler on our FileReader object; called when
|
||
// file upload raw data is available in the reader
|
||
|
||
|
||
onload() {
|
||
if (this.fileReader) {
|
||
this.props.onLoadingStarted();
|
||
const filename = this.fileToUpload && this.fileToUpload.name;
|
||
let loadingSuccess = false; // tw: stop when loading new project
|
||
|
||
this.props.vm.stop();
|
||
this.props.vm.loadProject(this.fileReader.result).then(() => {
|
||
if (filename) {
|
||
const uploadedProjectTitle = this.getProjectTitleFromFilename(filename);
|
||
this.props.onSetProjectTitle(uploadedProjectTitle);
|
||
}
|
||
|
||
this.props.vm.renderer.draw();
|
||
loadingSuccess = true;
|
||
}).catch(error => {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_5__["default"].warn(error); // eslint-disable-next-line no-alert
|
||
|
||
alert(this.props.intl.formatMessage(messages.loadError, {
|
||
error: "".concat(error)
|
||
}));
|
||
}).then(() => {
|
||
this.props.onLoadingFinished(this.props.loadingState, loadingSuccess); // go back to step 7: whether project loading succeeded
|
||
// or failed, reset file objects
|
||
|
||
this.removeFileObjects();
|
||
});
|
||
}
|
||
} // step 7: remove the <input> element from the DOM and clear reader and
|
||
// fileToUpload reference, so those objects can be garbage collected
|
||
|
||
|
||
removeFileObjects() {
|
||
if (this.inputElement) {
|
||
this.inputElement.value = null;
|
||
document.body.removeChild(this.inputElement);
|
||
}
|
||
|
||
this.inputElement = null;
|
||
this.fileReader = null;
|
||
this.fileToUpload = null;
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
/* eslint-disable no-unused-vars */
|
||
cancelFileUpload,
|
||
closeFileMenu: closeFileMenuProp,
|
||
isLoadingUpload,
|
||
isShowingWithoutId,
|
||
loadingState,
|
||
onLoadingFinished,
|
||
onLoadingStarted,
|
||
onSetFileHandle,
|
||
onSetProjectTitle,
|
||
projectChanged,
|
||
requestProjectUpload: requestProjectUploadProp,
|
||
userOwnsProject
|
||
} = _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(WrappedComponent, _extends({
|
||
onStartSelectingFileUpload: this.handleStartSelectingFileUpload
|
||
}, componentProps)));
|
||
}
|
||
|
||
}
|
||
|
||
SBFileUploaderComponent.propTypes = {
|
||
canSave: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
cancelFileUpload: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
closeFileMenu: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"].isRequired,
|
||
isLoadingUpload: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isShowingProject: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
isShowingWithoutId: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
loadingState: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.oneOf(_reducers_project_state__WEBPACK_IMPORTED_MODULE_9__["LoadingStates"]),
|
||
onLoadingFinished: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onLoadingStarted: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
onSetProjectTitle: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
projectChanged: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
requestProjectUpload: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
userOwnsProject: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
vm: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({
|
||
loadProject: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func,
|
||
stop: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func
|
||
}),
|
||
onSetFileHandle: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func
|
||
};
|
||
|
||
const mapStateToProps = (state, ownProps) => {
|
||
const loadingState = state.scratchGui.projectState.loadingState;
|
||
const user = state.session && state.session.session && state.session.session.user;
|
||
return {
|
||
isLoadingUpload: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_9__["getIsLoadingUpload"])(loadingState),
|
||
isShowingProject: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_9__["getIsShowingProject"])(loadingState),
|
||
isShowingWithoutId: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_9__["getIsShowingWithoutId"])(loadingState),
|
||
loadingState: loadingState,
|
||
projectChanged: state.scratchGui.projectChanged,
|
||
userOwnsProject: ownProps.authorUsername && user && ownProps.authorUsername === user.username,
|
||
vm: state.scratchGui.vm
|
||
};
|
||
};
|
||
|
||
const mapDispatchToProps = (dispatch, ownProps) => ({
|
||
cancelFileUpload: loadingState => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_9__["onLoadedProject"])(loadingState, false, false)),
|
||
closeFileMenu: () => dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_12__["closeFileMenu"])()),
|
||
// transition project state from loading to regular, and close
|
||
// loading screen and file menu
|
||
onLoadingFinished: (loadingState, success) => {
|
||
dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_9__["onLoadedProject"])(loadingState, ownProps.canSave, success));
|
||
dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_11__["closeLoadingProject"])());
|
||
dispatch(Object(_reducers_menus__WEBPACK_IMPORTED_MODULE_12__["closeFileMenu"])());
|
||
},
|
||
// show project loading screen
|
||
onLoadingStarted: () => dispatch(Object(_reducers_modals__WEBPACK_IMPORTED_MODULE_11__["openLoadingProject"])()),
|
||
onSetProjectTitle: title => dispatch(Object(_reducers_project_title__WEBPACK_IMPORTED_MODULE_10__["setProjectTitle"])(title)),
|
||
// step 4: transition the project state so we're ready to handle the new
|
||
// project data. When this is done, the project state transition will be
|
||
// noticed by componentDidUpdate()
|
||
requestProjectUpload: loadingState => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_9__["requestProjectUpload"])(loadingState)),
|
||
onSetFileHandle: fileHandle => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_8__["setFileHandle"])(fileHandle))
|
||
}); // 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_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps, mapDispatchToProps, mergeProps)(SBFileUploaderComponent));
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/screen-utils.js":
|
||
/*!*********************************!*\
|
||
!*** ./src/lib/screen-utils.js ***!
|
||
\*********************************/
|
||
/*! exports provided: getStageDimensions, getMinWidth, resolveStageSize, stageSizeToTransform */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getStageDimensions", function() { return getStageDimensions; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMinWidth", function() { return getMinWidth; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resolveStageSize", function() { return resolveStageSize; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stageSizeToTransform", function() { return stageSizeToTransform; });
|
||
/* harmony import */ var _lib_layout_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/layout-constants */ "./src/lib/layout-constants.js");
|
||
|
||
const maxScaleParam = typeof URLSearchParams !== 'undefined' && new URLSearchParams(location.search).get('scale');
|
||
/**
|
||
* @typedef {object} StageDimensions
|
||
* @property {int} height - the height to be used for the stage in the current situation.
|
||
* @property {int} width - the width to be used for the stage in the current situation.
|
||
* @property {number} scale - the scale factor from the stage's default size to its current size.
|
||
* @property {int} heightDefault - the height of the stage in its default (large) size.
|
||
* @property {int} widthDefault - the width of the stage in its default (large) size.
|
||
*/
|
||
|
||
const STAGE_DIMENSION_DEFAULTS = {
|
||
// referencing css/units.css,
|
||
// spacingBorderAdjustment = 2 * $full-screen-top-bottom-margin +
|
||
// 2 * $full-screen-border-width
|
||
fullScreenSpacingBorderAdjustment: 12,
|
||
// referencing css/units.css,
|
||
// menuHeightAdjustment = $stage-menu-height
|
||
menuHeightAdjustment: 44
|
||
};
|
||
/**
|
||
* Resolve the current GUI and browser state to an actual stage size enum value.
|
||
* @param {STAGE_SIZE_MODES} stageSizeMode - the state of the stage size toggle button.
|
||
* @param {boolean} isFullSize - true if the window is large enough for the large stage at its full size.
|
||
* @return {STAGE_DISPLAY_SIZES} - the stage size enum value we should use in this situation.
|
||
*/
|
||
|
||
const resolveStageSize = (stageSizeMode, isFullSize) => {
|
||
if (stageSizeMode === _lib_layout_constants__WEBPACK_IMPORTED_MODULE_0__["STAGE_SIZE_MODES"].small) {
|
||
return _lib_layout_constants__WEBPACK_IMPORTED_MODULE_0__["STAGE_DISPLAY_SIZES"].small;
|
||
}
|
||
|
||
if (isFullSize) {
|
||
return _lib_layout_constants__WEBPACK_IMPORTED_MODULE_0__["STAGE_DISPLAY_SIZES"].large;
|
||
}
|
||
|
||
return _lib_layout_constants__WEBPACK_IMPORTED_MODULE_0__["STAGE_DISPLAY_SIZES"].largeConstrained;
|
||
};
|
||
/**
|
||
* Retrieve info used to determine the actual stage size based on the current GUI and browser state.
|
||
* @param {STAGE_DISPLAY_SIZES} stageSize - the current fully-resolved stage size.
|
||
* @param {{width: number, height: number}} customStageSize Custom stage size
|
||
* @param {boolean} isFullScreen - true if full-screen mode is enabled.
|
||
* @return {StageDimensions} - an object describing the dimensions of the stage.
|
||
*/
|
||
|
||
|
||
const getStageDimensions = (stageSize, customStageSize, isFullScreen) => {
|
||
const stageDimensions = {
|
||
heightDefault: customStageSize.height,
|
||
widthDefault: customStageSize.width,
|
||
height: 0,
|
||
width: 0,
|
||
scale: 0
|
||
};
|
||
|
||
if (isFullScreen) {
|
||
stageDimensions.height = window.innerHeight - STAGE_DIMENSION_DEFAULTS.menuHeightAdjustment - STAGE_DIMENSION_DEFAULTS.fullScreenSpacingBorderAdjustment;
|
||
stageDimensions.width = stageDimensions.height * (customStageSize.width / customStageSize.height);
|
||
const maxWidth = maxScaleParam ? Math.min(window.innerWidth, maxScaleParam * customStageSize.width) : window.innerWidth;
|
||
|
||
if (stageDimensions.width > maxWidth) {
|
||
stageDimensions.width = maxWidth;
|
||
stageDimensions.height = stageDimensions.width * (customStageSize.height / customStageSize.width);
|
||
}
|
||
|
||
stageDimensions.scale = stageDimensions.width / stageDimensions.widthDefault;
|
||
} else {
|
||
stageDimensions.scale = _lib_layout_constants__WEBPACK_IMPORTED_MODULE_0__["STAGE_DISPLAY_SCALES"][stageSize];
|
||
stageDimensions.height = stageDimensions.scale * stageDimensions.heightDefault;
|
||
stageDimensions.width = stageDimensions.scale * stageDimensions.widthDefault;
|
||
} // Round off dimensions to prevent resampling/blurriness
|
||
|
||
|
||
stageDimensions.height = Math.round(stageDimensions.height);
|
||
stageDimensions.width = Math.round(stageDimensions.width);
|
||
return stageDimensions;
|
||
};
|
||
|
||
const getMinWidth = stageSize => _lib_layout_constants__WEBPACK_IMPORTED_MODULE_0__["STAGE_DISPLAY_SCALES"][stageSize] * 480;
|
||
/**
|
||
* Take a pair of sizes for the stage (a target height and width and a default height and width),
|
||
* calculate the ratio between them, and return a CSS transform to scale to that ratio.
|
||
* @param {object} sizeInfo An object containing dimensions of the target and default stage sizes.
|
||
* @param {number} sizeInfo.width The target width
|
||
* @param {number} sizeInfo.height The target height
|
||
* @param {number} sizeInfo.widthDefault The default width
|
||
* @param {number} sizeInfo.heightDefault The default height
|
||
* @returns {object} the CSS transform
|
||
*/
|
||
|
||
|
||
const stageSizeToTransform = ({
|
||
width,
|
||
height,
|
||
widthDefault,
|
||
heightDefault
|
||
}) => {
|
||
const scaleX = width / widthDefault;
|
||
const scaleY = height / heightDefault;
|
||
|
||
if (scaleX === 1 && scaleY === 1) {
|
||
// Do not set a transform if the scale is 1 because
|
||
// it messes up `position: fixed` elements like the context menu.
|
||
return;
|
||
}
|
||
|
||
return {
|
||
transform: "scale(".concat(scaleX, ",").concat(scaleY, ")")
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/shared-messages.js":
|
||
/*!************************************!*\
|
||
!*** ./src/lib/shared-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"])({
|
||
backdrop: {
|
||
"id": "gui.sharedMessages.backdrop",
|
||
"defaultMessage": "backdrop{index}"
|
||
},
|
||
costume: {
|
||
"id": "gui.sharedMessages.costume",
|
||
"defaultMessage": "costume{index}"
|
||
},
|
||
sprite: {
|
||
"id": "gui.sharedMessages.sprite",
|
||
"defaultMessage": "Sprite{index}"
|
||
},
|
||
pop: {
|
||
"id": "gui.sharedMessages.pop",
|
||
"defaultMessage": "pop"
|
||
},
|
||
replaceProjectWarning: {
|
||
"id": "gui.sharedMessages.replaceProjectWarning",
|
||
"defaultMessage": "Replace contents of the current project?"
|
||
},
|
||
loadFromComputerTitle: {
|
||
"id": "gui.sharedMessages.loadFromComputerTitle",
|
||
"defaultMessage": "Load from your computer"
|
||
}
|
||
}));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/sortable-hoc.jsx":
|
||
/*!**********************************!*\
|
||
!*** ./src/lib/sortable-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 react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
|
||
/* harmony import */ var _drag_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./drag-utils */ "./src/lib/drag-utils.js");
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const SortableHOC = function SortableHOC(WrappedComponent) {
|
||
class SortableWrapper extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['setRef', 'handleAddSortable', 'handleRemoveSortable']);
|
||
this.sortableRefs = [];
|
||
this.boxes = null;
|
||
this.ref = null;
|
||
this.containerBox = null;
|
||
}
|
||
|
||
componentWillReceiveProps(newProps) {
|
||
if (newProps.dragInfo.dragging && !this.props.dragInfo.dragging) {
|
||
// Drag just started, snapshot the sorted bounding boxes for sortables.
|
||
this.boxes = this.sortableRefs.map(el => el && el.getBoundingClientRect());
|
||
this.boxes.sort((a, b) => {
|
||
// Sort top-to-bottom, left-to-right (in LTR) / right-to-left (in RTL).
|
||
if (a.top === b.top) return (a.left - b.left) * (this.props.isRtl ? -1 : 1);
|
||
return a.top - b.top;
|
||
});
|
||
|
||
if (!this.ref) {
|
||
throw new Error('The containerRef must be assigned to the sortable area');
|
||
}
|
||
|
||
this.containerBox = this.ref.getBoundingClientRect();
|
||
} else if (!newProps.dragInfo.dragging && this.props.dragInfo.dragging) {
|
||
const newIndex = this.getMouseOverIndex();
|
||
|
||
if (newIndex !== null) {
|
||
this.props.onDrop(Object.assign({}, this.props.dragInfo, {
|
||
newIndex
|
||
}));
|
||
}
|
||
}
|
||
}
|
||
|
||
handleAddSortable(node) {
|
||
this.sortableRefs.push(node);
|
||
}
|
||
|
||
handleRemoveSortable(node) {
|
||
const index = this.sortableRefs.indexOf(node);
|
||
this.sortableRefs = this.sortableRefs.slice(0, index).concat(this.sortableRefs.slice(index + 1));
|
||
}
|
||
|
||
getOrdering(items, draggingIndex, newIndex) {
|
||
// An "Ordering" is an array of indices, where the position array value corresponds
|
||
// to the position of the item in props.items, and the index of the value
|
||
// is the index at which the item should appear.
|
||
// That is, if props.items is ['a', 'b', 'c', 'd'], and we want the GUI to display
|
||
// ['b', 'c', 'a, 'd'], the value of "ordering" would be [1, 2, 0, 3].
|
||
// This mapping is used because it is easy to translate to flexbox ordering,
|
||
// the `order` property for item N is ordering.indexOf(N).
|
||
// If the user-facing order matches props.items, the ordering is just [0, 1, 2, ...]
|
||
let ordering = Array(this.props.items.length).fill(0).map((_, i) => i);
|
||
|
||
const isNumber = v => typeof v === 'number' && !isNaN(v);
|
||
|
||
if (isNumber(draggingIndex) && isNumber(newIndex)) {
|
||
ordering = ordering.slice(0, draggingIndex).concat(ordering.slice(draggingIndex + 1));
|
||
ordering.splice(newIndex, 0, draggingIndex);
|
||
}
|
||
|
||
return ordering;
|
||
}
|
||
|
||
getMouseOverIndex() {
|
||
// MouseOverIndex is the index that the current drag wants to place the
|
||
// the dragging object. Obviously only exists if there is a drag (i.e. currentOffset).
|
||
// Return null if outside the container, zero if there are no boxes.
|
||
let mouseOverIndex = null;
|
||
|
||
if (this.props.dragInfo.currentOffset) {
|
||
const {
|
||
x,
|
||
y
|
||
} = this.props.dragInfo.currentOffset;
|
||
const {
|
||
top,
|
||
left,
|
||
bottom,
|
||
right
|
||
} = this.containerBox;
|
||
|
||
if (x >= left && x <= right && y >= top && y <= bottom) {
|
||
if (this.boxes.length === 0) {
|
||
mouseOverIndex = 0;
|
||
} else {
|
||
mouseOverIndex = Object(_drag_utils__WEBPACK_IMPORTED_MODULE_4__["indexForPositionOnList"])(this.props.dragInfo.currentOffset, this.boxes, this.props.isRtl);
|
||
}
|
||
}
|
||
}
|
||
|
||
return mouseOverIndex;
|
||
}
|
||
|
||
setRef(el) {
|
||
this.ref = el;
|
||
}
|
||
|
||
render() {
|
||
const {
|
||
dragInfo: {
|
||
index: dragIndex,
|
||
dragType
|
||
},
|
||
items
|
||
} = this.props;
|
||
const mouseOverIndex = this.getMouseOverIndex();
|
||
const ordering = this.getOrdering(items, dragIndex, mouseOverIndex);
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(WrappedComponent, _extends({
|
||
containerRef: this.setRef,
|
||
draggingIndex: dragIndex,
|
||
draggingType: dragType,
|
||
mouseOverIndex: mouseOverIndex,
|
||
ordering: ordering,
|
||
onAddSortable: this.handleAddSortable,
|
||
onRemoveSortable: this.handleRemoveSortable
|
||
}, this.props));
|
||
}
|
||
|
||
}
|
||
|
||
SortableWrapper.propTypes = {
|
||
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
|
||
}),
|
||
items: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({
|
||
url: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired
|
||
})),
|
||
onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onDrop: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
isRtl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool
|
||
};
|
||
|
||
const mapStateToProps = state => ({
|
||
dragInfo: state.scratchGui.assetDrag,
|
||
isRtl: state.locales.isRtl
|
||
});
|
||
|
||
const mapDispatchToProps = () => ({});
|
||
|
||
return Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(SortableWrapper);
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (SortableHOC);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/storage.js":
|
||
/*!****************************!*\
|
||
!*** ./src/lib/storage.js ***!
|
||
\****************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony import */ var scratch_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scratch-storage */ "./node_modules/scratch-storage/src/index.js");
|
||
/* harmony import */ var scratch_storage__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scratch_storage__WEBPACK_IMPORTED_MODULE_0__);
|
||
/* harmony import */ var _default_project__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./default-project */ "./src/lib/default-project/index.js");
|
||
/* harmony import */ var _tw_missing_project__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tw-missing-project */ "./src/lib/tw-missing-project/index.js");
|
||
|
||
|
||
|
||
/**
|
||
* Wrapper for ScratchStorage which adds default web sources.
|
||
* @todo make this more configurable
|
||
*/
|
||
|
||
class Storage extends scratch_storage__WEBPACK_IMPORTED_MODULE_0___default.a {
|
||
constructor() {
|
||
super();
|
||
this.cacheDefaultProject();
|
||
}
|
||
|
||
addOfficialScratchWebStores() {
|
||
this.addWebStore([this.AssetType.Project], this.getProjectGetConfig.bind(this), this.getProjectCreateConfig.bind(this), this.getProjectUpdateConfig.bind(this));
|
||
this.addWebStore([this.AssetType.ImageVector, this.AssetType.ImageBitmap, this.AssetType.Sound], this.getAssetGetConfig.bind(this), // We set both the create and update configs to the same method because
|
||
// storage assumes it should update if there is an assetId, but the
|
||
// asset store uses the assetId as part of the create URI.
|
||
this.getAssetCreateConfig.bind(this), this.getAssetCreateConfig.bind(this));
|
||
}
|
||
|
||
setProjectHost(projectHost) {
|
||
this.projectHost = projectHost;
|
||
}
|
||
|
||
setProjectToken(projectToken) {
|
||
this.projectToken = projectToken;
|
||
}
|
||
|
||
getProjectGetConfig(projectAsset) {
|
||
const path = "".concat(this.projectHost, "/").concat(projectAsset.assetId);
|
||
const qs = this.projectToken ? "?token=".concat(this.projectToken) : '';
|
||
return path + qs;
|
||
}
|
||
|
||
getProjectCreateConfig() {
|
||
return {
|
||
url: "".concat(this.projectHost, "/"),
|
||
withCredentials: true
|
||
};
|
||
}
|
||
|
||
getProjectUpdateConfig(projectAsset) {
|
||
return {
|
||
url: "".concat(this.projectHost, "/").concat(projectAsset.assetId),
|
||
withCredentials: true
|
||
};
|
||
}
|
||
|
||
setAssetHost(assetHost) {
|
||
this.assetHost = assetHost;
|
||
}
|
||
|
||
getAssetGetConfig(asset) {
|
||
return "".concat(this.assetHost, "/internalapi/asset/").concat(asset.assetId, ".").concat(asset.dataFormat, "/get/");
|
||
}
|
||
|
||
getAssetCreateConfig(asset) {
|
||
return {
|
||
// There is no such thing as updating assets, but storage assumes it
|
||
// should update if there is an assetId, and the asset store uses the
|
||
// assetId as part of the create URI. So, force the method to POST.
|
||
// Then when storage finds this config to use for the "update", still POSTs
|
||
method: 'post',
|
||
url: "".concat(this.assetHost, "/").concat(asset.assetId, ".").concat(asset.dataFormat),
|
||
withCredentials: true
|
||
};
|
||
}
|
||
|
||
setTranslatorFunction(translator) {
|
||
this.translator = translator;
|
||
this.cacheDefaultProject();
|
||
}
|
||
|
||
cacheDefaultProject() {
|
||
const defaultProjectAssets = Object(_default_project__WEBPACK_IMPORTED_MODULE_1__["default"])(this.translator);
|
||
defaultProjectAssets.forEach(asset => this.builtinHelper._store(this.AssetType[asset.assetType], this.DataFormat[asset.dataFormat], asset.data, asset.id));
|
||
const missingProjectAssets = Object(_tw_missing_project__WEBPACK_IMPORTED_MODULE_2__["default"])(this.translator);
|
||
missingProjectAssets.forEach(asset => this.builtinHelper._store(this.AssetType[asset.assetType], this.DataFormat[asset.dataFormat], asset.data, asset.id));
|
||
}
|
||
|
||
}
|
||
|
||
const storage = new Storage();
|
||
/* harmony default export */ __webpack_exports__["default"] = (storage);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/supported-browser.js":
|
||
/*!**************************************!*\
|
||
!*** ./src/lib/supported-browser.js ***!
|
||
\**************************************/
|
||
/*! exports provided: default, recommendedBrowser */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return supportedBrowser; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "recommendedBrowser", function() { return recommendedBrowser; });
|
||
// tw: If the browser can parse the JS we generate, we support it.
|
||
|
||
/**
|
||
* Helper function to determine if the browser is supported at all.
|
||
* @returns {boolean} False if the platform is definitely not supported.
|
||
*/
|
||
const supportedBrowser = () => true;
|
||
/**
|
||
* Helper function to determine if the browser meets the minimum recommended version
|
||
* @returns {boolean} False if the browser isn't a recommended browser, or doesn't
|
||
* meet the minimum version for recommended browsers.
|
||
* NOTE: uses strict_mode==true so that any browser not listed in the minVersions
|
||
* always returns false
|
||
*/
|
||
|
||
|
||
const recommendedBrowser = () => true;
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/throttled-property-hoc.jsx":
|
||
/*!********************************************!*\
|
||
!*** ./src/lib/throttled-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__);
|
||
|
||
/* Higher Order Component to throttle updates to specific props.
|
||
* Why? Because certain prop updates are expensive, and need to be throttled.
|
||
* This allows renders when other properties change, and will use the last
|
||
* rendered value of a prop for comparison.
|
||
* @param {string} propName the name of the prop to throttle updates from.
|
||
* @param {string} throttleTime the minimum time between updates to that specific property.
|
||
* @returns {function} a function that accepts a component to wrap.
|
||
*/
|
||
|
||
const ThrottledPropertyHOC = function ThrottledPropertyHOC(propName, throttleTime) {
|
||
/**
|
||
* The function to be called with a React component to wrap it.
|
||
* @param {React.Component} WrappedComponent - Component to wrap with throttler.
|
||
* @returns {React.Component} the component wrapped with the throttler.
|
||
*/
|
||
return function (WrappedComponent) {
|
||
class ThrottledPropertyWrapper extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {
|
||
shouldComponentUpdate(nextProps) {
|
||
for (const property in nextProps) {
|
||
if (property !== propName && this.props[property] !== nextProps[property]) {
|
||
return true; // Always update if another property has changed
|
||
}
|
||
} // If only that prop has changed, allow update to go to render based
|
||
// on _lastRenderedTime and _lastRenderTime are updated in render
|
||
|
||
|
||
if (nextProps[propName] !== this._lastRenderedValue && Date.now() - this._lastRenderTime > throttleTime) {
|
||
return true; // Allow this update to go to render
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
render() {
|
||
this._lastRenderTime = Date.now();
|
||
this._lastRenderedValue = this.props[propName];
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, this.props);
|
||
}
|
||
|
||
}
|
||
|
||
return ThrottledPropertyWrapper;
|
||
};
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (ThrottledPropertyHOC);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/titled-hoc.jsx":
|
||
/*!********************************!*\
|
||
!*** ./src/lib/titled-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 TitledHOC; });
|
||
/* 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 react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js");
|
||
/* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js");
|
||
/* harmony import */ var _reducers_project_title__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/project-title */ "./src/reducers/project-title.js");
|
||
const _excluded = ["intl", "isAnyCreatingNewState", "isShowingWithoutId", "onChangedProjectTitle", "onUpdateProjectTitle", "projectTitle", "reduxProjectTitle"];
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["defineMessages"])({
|
||
defaultProjectTitle: {
|
||
"id": "tw.gui.defaultProjectTitle",
|
||
"defaultMessage": "Project"
|
||
}
|
||
});
|
||
/* Higher Order Component to get and set the project title
|
||
* @param {React.Component} WrappedComponent component to receive project title related props
|
||
* @returns {React.Component} component with project loading behavior
|
||
*/
|
||
|
||
const TitledHOC = function TitledHOC(WrappedComponent) {
|
||
class TitledComponent extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component {
|
||
componentDidMount() {
|
||
this.handleReceivedProjectTitle(this.props.projectTitle);
|
||
}
|
||
|
||
componentDidUpdate(prevProps) {
|
||
if (this.props.projectTitle !== prevProps.projectTitle) {
|
||
this.handleReceivedProjectTitle(this.props.projectTitle);
|
||
} // if project is a new default project, and has loaded,
|
||
|
||
|
||
if (this.props.isShowingWithoutId && prevProps.isAnyCreatingNewState) {
|
||
// reset title to default
|
||
const defaultProjectTitle = this.handleReceivedProjectTitle();
|
||
this.props.onUpdateProjectTitle(defaultProjectTitle, true);
|
||
} // if the projectTitle hasn't changed, but the reduxProjectTitle
|
||
// HAS changed, we need to report that change to the projectTitle's owner
|
||
|
||
|
||
if (this.props.reduxProjectTitle !== prevProps.reduxProjectTitle && this.props.reduxProjectTitle !== this.props.projectTitle) {
|
||
const defaultProjectTitle = this.props.intl.formatMessage(messages.defaultProjectTitle);
|
||
this.props.onUpdateProjectTitle(this.props.reduxProjectTitle, this.props.reduxProjectTitle === defaultProjectTitle);
|
||
}
|
||
}
|
||
|
||
handleReceivedProjectTitle(requestedTitle) {
|
||
let newTitle = requestedTitle;
|
||
let isDefault = false;
|
||
|
||
if (newTitle === null || typeof newTitle === 'undefined') {
|
||
newTitle = this.props.intl.formatMessage(messages.defaultProjectTitle);
|
||
isDefault = true;
|
||
}
|
||
|
||
this.props.onChangedProjectTitle(newTitle, isDefault);
|
||
return newTitle;
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
/* eslint-disable no-unused-vars */
|
||
intl,
|
||
isAnyCreatingNewState,
|
||
isShowingWithoutId,
|
||
onChangedProjectTitle,
|
||
// for children, we replace onUpdateProjectTitle with our own
|
||
onUpdateProjectTitle,
|
||
// we don't pass projectTitle prop to children -- they must use
|
||
// redux value
|
||
projectTitle,
|
||
reduxProjectTitle
|
||
} = _this$props,
|
||
componentProps = _objectWithoutProperties(_this$props, _excluded);
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(WrappedComponent, componentProps);
|
||
}
|
||
|
||
}
|
||
|
||
TitledComponent.propTypes = {
|
||
intl: react_intl__WEBPACK_IMPORTED_MODULE_3__["intlShape"],
|
||
isAnyCreatingNewState: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool,
|
||
isShowingWithoutId: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.bool,
|
||
onChangedProjectTitle: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func,
|
||
onUpdateProjectTitle: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.func,
|
||
projectTitle: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string,
|
||
reduxProjectTitle: prop_types__WEBPACK_IMPORTED_MODULE_0___default.a.string
|
||
};
|
||
TitledComponent.defaultProps = {
|
||
onUpdateProjectTitle: () => {}
|
||
};
|
||
|
||
const mapStateToProps = state => {
|
||
const loadingState = state.scratchGui.projectState.loadingState;
|
||
return {
|
||
isAnyCreatingNewState: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_4__["getIsAnyCreatingNewState"])(loadingState),
|
||
isShowingWithoutId: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_4__["getIsShowingWithoutId"])(loadingState),
|
||
reduxProjectTitle: state.scratchGui.projectTitle
|
||
};
|
||
};
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
onChangedProjectTitle: title => dispatch(Object(_reducers_project_title__WEBPACK_IMPORTED_MODULE_5__["setProjectTitle"])(title))
|
||
});
|
||
|
||
return Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(TitledComponent));
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/touch-utils.js":
|
||
/*!********************************!*\
|
||
!*** ./src/lib/touch-utils.js ***!
|
||
\********************************/
|
||
/*! exports provided: getEventXY */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEventXY", function() { return getEventXY; });
|
||
const getEventXY = e => {
|
||
if (e.touches && e.touches[0]) {
|
||
return {
|
||
x: e.touches[0].clientX,
|
||
y: e.touches[0].clientY
|
||
};
|
||
} else if (e.changedTouches && e.changedTouches[0]) {
|
||
return {
|
||
x: e.changedTouches[0].clientX,
|
||
y: e.changedTouches[0].clientY
|
||
};
|
||
}
|
||
|
||
return {
|
||
x: e.clientX,
|
||
y: e.clientY
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tutorial-from-url.js":
|
||
/*!**************************************!*\
|
||
!*** ./src/lib/tutorial-from-url.js ***!
|
||
\**************************************/
|
||
/*! exports provided: detectTutorialId */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "detectTutorialId", function() { return detectTutorialId; });
|
||
/* harmony import */ var _libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./libraries/decks/index.jsx */ "./src/lib/libraries/decks/index.jsx");
|
||
/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./analytics */ "./src/lib/analytics.js");
|
||
/**
|
||
* @fileoverview
|
||
* Utility function to detect tutorial id from query paramenter on the URL.
|
||
*/
|
||
|
||
|
||
/**
|
||
* Get the tutorial id from the given numerical id (representing the
|
||
* url id of the tutorial).
|
||
* @param {number} urlId The URL Id for the tutorial
|
||
* @returns {string} The string id for the tutorial, or null if the URL ID
|
||
* was not found.
|
||
*/
|
||
|
||
const getDeckIdFromUrlId = urlId => {
|
||
for (const deckId in _libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_0__["default"]) {
|
||
if (_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_0__["default"][deckId].urlId === urlId) {
|
||
_analytics__WEBPACK_IMPORTED_MODULE_1__["default"].event({
|
||
category: 'how-to',
|
||
action: 'load from url',
|
||
label: "".concat(deckId)
|
||
});
|
||
return deckId;
|
||
}
|
||
}
|
||
|
||
return null;
|
||
};
|
||
/**
|
||
* Check if there's a tutorial id provided as a query parameter in the URL.
|
||
* Return the corresponding tutorial id or null if not found.
|
||
* @param {object} queryParams the results of parsing the query string
|
||
* @return {string} The ID of the requested tutorial or null if no tutorial was
|
||
* requested or found.
|
||
*/
|
||
|
||
|
||
const detectTutorialId = queryParams => {
|
||
const tutorialID = Array.isArray(queryParams.tutorial) ? queryParams.tutorial[0] : queryParams.tutorial;
|
||
if (typeof tutorialID === 'undefined') return null;
|
||
if (tutorialID === 'all') return tutorialID;
|
||
return getDeckIdFromUrlId(tutorialID);
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-cloud-limits.js":
|
||
/*!************************************!*\
|
||
!*** ./src/lib/tw-cloud-limits.js ***!
|
||
\************************************/
|
||
/*! exports provided: MAXIMUM_CLOUD_VARIABLES, SCRATCH_MAX_CLOUD_VARIABLES */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MAXIMUM_CLOUD_VARIABLES", function() { return MAXIMUM_CLOUD_VARIABLES; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SCRATCH_MAX_CLOUD_VARIABLES", function() { return SCRATCH_MAX_CLOUD_VARIABLES; });
|
||
// The maximum number of cloudv ariables that can be created in this scratch-gui instance.
|
||
const MAXIMUM_CLOUD_VARIABLES = Infinity; // The maximum number of cloud variables that can be created in a vanilla Scratch.
|
||
|
||
const SCRATCH_MAX_CLOUD_VARIABLES = 10;
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-environment-support-prober.js":
|
||
/*!**************************************************!*\
|
||
!*** ./src/lib/tw-environment-support-prober.js ***!
|
||
\**************************************************/
|
||
/*! exports provided: isRendererSupported, canConstructNewFunctions, isAudioContextSupported, isBrowserSupported */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isRendererSupported", function() { return isRendererSupported; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "canConstructNewFunctions", function() { return canConstructNewFunctions; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isAudioContextSupported", function() { return isAudioContextSupported; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBrowserSupported", function() { return isBrowserSupported; });
|
||
/* harmony import */ var scratch_render__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scratch-render */ "./node_modules/scratch-render/src/index.js");
|
||
/* harmony import */ var scratch_render__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scratch_render__WEBPACK_IMPORTED_MODULE_0__);
|
||
|
||
let _isRendererSupported = null;
|
||
const isRendererSupported = () => {
|
||
if (_isRendererSupported === null) {
|
||
_isRendererSupported = scratch_render__WEBPACK_IMPORTED_MODULE_0___default.a.isSupported();
|
||
}
|
||
|
||
return _isRendererSupported;
|
||
};
|
||
let _canConstructNewFunctions = null;
|
||
const canConstructNewFunctions = () => {
|
||
if (_canConstructNewFunctions === null) {
|
||
try {
|
||
// This will throw if blocked by CSP
|
||
// eslint-disable-next-line no-new
|
||
new Function('');
|
||
_canConstructNewFunctions = true;
|
||
} catch (e) {
|
||
_canConstructNewFunctions = true;
|
||
}
|
||
}
|
||
|
||
return _canConstructNewFunctions;
|
||
};
|
||
const isAudioContextSupported = () => !!(window.AudioContext || window.webkitAudioContext);
|
||
const isBrowserSupported = () => canConstructNewFunctions() && isAudioContextSupported();
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-filesystem-api.js":
|
||
/*!**************************************!*\
|
||
!*** ./src/lib/tw-filesystem-api.js ***!
|
||
\**************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
const available = () => !!window.showSaveFilePicker;
|
||
|
||
const showSaveFilePicker = fileName => window.showSaveFilePicker({
|
||
suggestedName: fileName,
|
||
types: [{
|
||
description: 'Scratch 3 Project',
|
||
accept: {
|
||
'application/x.scratch.sb3': '.sb3'
|
||
}
|
||
}],
|
||
excludeAcceptAllOption: true
|
||
});
|
||
|
||
const showOpenFilePicker = async () => {
|
||
const [handle] = await window.showOpenFilePicker({
|
||
multiple: false,
|
||
types: [{
|
||
description: 'Scratch Project',
|
||
accept: {
|
||
'application/x.scratch.sb3': ['.sb', '.sb2', '.sb3']
|
||
}
|
||
}]
|
||
});
|
||
return handle;
|
||
};
|
||
|
||
const createWritable = handle => handle.createWritable();
|
||
|
||
const closeWritable = async writable => {
|
||
await writable.close();
|
||
};
|
||
|
||
const writeToWritable = async (writable, content) => {
|
||
await writable.write(content);
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
available,
|
||
showOpenFilePicker,
|
||
showSaveFilePicker,
|
||
createWritable,
|
||
closeWritable,
|
||
writeToWritable
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-fullscreen-api.js":
|
||
/*!**************************************!*\
|
||
!*** ./src/lib/tw-fullscreen-api.js ***!
|
||
\**************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/**
|
||
* Return whether the fullscreen API is available in this environment.
|
||
* @returns {boolean} true if the fullscreen API is available
|
||
*/
|
||
const available = () => document.fullscreenEnabled || document.webkitFullscreenEnabled;
|
||
/**
|
||
* Return whether fullscreen is currently enabled.
|
||
* @returns {boolean} true if in fullscreen
|
||
*/
|
||
|
||
|
||
const enabled = () => {
|
||
if (typeof document.fullscreenElement !== 'undefined') {
|
||
return document.fullscreenElement !== null;
|
||
}
|
||
|
||
if (typeof document.webkitFullscreenElement !== 'undefined') {
|
||
return document.webkitFullscreenElement !== null;
|
||
}
|
||
|
||
return false;
|
||
};
|
||
/**
|
||
* Request entering the document into fullscreen mode.
|
||
*/
|
||
|
||
|
||
const request = () => {
|
||
if (document.body.requestFullscreen) {
|
||
document.body.requestFullscreen();
|
||
} else if (document.body.webkitRequestFullscreen) {
|
||
document.body.webkitRequestFullscreen();
|
||
}
|
||
};
|
||
/**
|
||
* Exit fullscreen mode.
|
||
*/
|
||
|
||
|
||
const exit = () => {
|
||
if (document.exitFullscreen) {
|
||
document.exitFullscreen();
|
||
} else if (document.webkitExitFullscreen) {
|
||
document.webkitExitFullscreen();
|
||
}
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
available,
|
||
enabled,
|
||
request,
|
||
exit
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-fullscreen-resizer-hoc.jsx":
|
||
/*!***********************************************!*\
|
||
!*** ./src/lib/tw-fullscreen-resizer-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 TWFullScreenResizerHOC; });
|
||
/* 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 _reducers_tw__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js");
|
||
const _excluded = ["onSetDimensions", "isFullScreen"];
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const TWFullScreenResizerHOC = function TWFullScreenResizerHOC(WrappedComponent) {
|
||
class FullScreenResizer extends react__WEBPACK_IMPORTED_MODULE_1___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleResize']);
|
||
}
|
||
|
||
componentDidMount() {
|
||
window.addEventListener('resize', this.handleResize);
|
||
}
|
||
|
||
componentWillUnmount() {
|
||
window.removeEventListener('resize', this.handleResize);
|
||
}
|
||
|
||
handleResize() {
|
||
if (this.props.isFullScreen) {
|
||
this.props.onSetDimensions([window.innerWidth, window.innerHeight]);
|
||
}
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
/* eslint-disable no-unused-vars */
|
||
onSetDimensions,
|
||
isFullScreen
|
||
} = _this$props,
|
||
props = _objectWithoutProperties(_this$props, _excluded);
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(WrappedComponent, props);
|
||
}
|
||
|
||
}
|
||
|
||
FullScreenResizer.propTypes = {
|
||
isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool,
|
||
onSetDimensions: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.func
|
||
};
|
||
|
||
const mapStateToProps = state => ({
|
||
isFullScreen: state.scratchGui.mode.isFullScreen || state.scratchGui.mode.isEmbedded
|
||
});
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
onSetDimensions: dimensions => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_4__["setDimensions"])(dimensions))
|
||
});
|
||
|
||
return Object(react_redux__WEBPACK_IMPORTED_MODULE_3__["connect"])(mapStateToProps, mapDispatchToProps)(FullScreenResizer);
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-lazy-scratch-blocks.js":
|
||
/*!*******************************************!*\
|
||
!*** ./src/lib/tw-lazy-scratch-blocks.js ***!
|
||
\*******************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
let _ScratchBlocks = null;
|
||
|
||
const isLoaded = () => !!_ScratchBlocks;
|
||
|
||
const get = () => {
|
||
if (!isLoaded()) {
|
||
throw new Error('scratch-blocks is not loaded yet');
|
||
}
|
||
|
||
return _ScratchBlocks;
|
||
};
|
||
|
||
const load = () => {
|
||
if (_ScratchBlocks) {
|
||
return Promise.resolve();
|
||
}
|
||
|
||
return __webpack_require__.e(/*! import() | sb */ "sb").then(__webpack_require__.t.bind(null, /*! scratch-blocks */ "./node_modules/scratch-blocks/shim/vertical.js", 7)).then(m => {
|
||
_ScratchBlocks = m.default;
|
||
return _ScratchBlocks;
|
||
});
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
get,
|
||
isLoaded,
|
||
load
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-load-scratch-blocks-hoc.jsx":
|
||
/*!************************************************!*\
|
||
!*** ./src/lib/tw-load-scratch-blocks-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 _log__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./log */ "./src/lib/log.js");
|
||
/* harmony import */ var _tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tw-lazy-scratch-blocks */ "./src/lib/tw-lazy-scratch-blocks.js");
|
||
/* harmony import */ var _components_tw_loading_spinner_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/tw-loading-spinner/spinner.jsx */ "./src/components/tw-loading-spinner/spinner.jsx");
|
||
/* harmony import */ var _components_crash_message_crash_message_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/crash-message/crash-message.jsx */ "./src/components/crash-message/crash-message.jsx");
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const LoadScratchBlocksHOC = function LoadScratchBlocksHOC(WrappedComponent) {
|
||
class LoadScratchBlocks extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
this.state = {
|
||
loaded: _tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_2__["default"].isLoaded(),
|
||
error: null
|
||
};
|
||
|
||
if (!this.state.loaded) {
|
||
_tw_lazy_scratch_blocks__WEBPACK_IMPORTED_MODULE_2__["default"].load().then(() => {
|
||
this.setState({
|
||
loaded: true
|
||
});
|
||
}).catch(e => {
|
||
_log__WEBPACK_IMPORTED_MODULE_1__["default"].error(e);
|
||
this.setState({
|
||
error: e
|
||
});
|
||
});
|
||
}
|
||
}
|
||
|
||
handleReload() {
|
||
location.reload();
|
||
}
|
||
|
||
render() {
|
||
if (this.state.error !== null) {
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_crash_message_crash_message_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
|
||
errorMessage: "lazy scratch-blocks: ".concat(this.state.error),
|
||
onReload: this.handleReload
|
||
});
|
||
}
|
||
|
||
if (!this.state.loaded) {
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_tw_loading_spinner_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], null);
|
||
}
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, this.props);
|
||
}
|
||
|
||
}
|
||
|
||
return LoadScratchBlocks;
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (LoadScratchBlocksHOC);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-local-backpack-api.js":
|
||
/*!******************************************!*\
|
||
!*** ./src/lib/tw-local-backpack-api.js ***!
|
||
\******************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./storage */ "./src/lib/storage.js");
|
||
/* harmony import */ var js_md5__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! js-md5 */ "./node_modules/js-md5/src/md5.js");
|
||
/* harmony import */ var js_md5__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(js_md5__WEBPACK_IMPORTED_MODULE_1__);
|
||
/* harmony import */ var _backpack_sound_payload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./backpack/sound-payload */ "./src/lib/backpack/sound-payload.js");
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
|
||
|
||
// Special constants -- do not change without care.
|
||
|
||
const DATABASE_NAME = 'TW_Backpack';
|
||
const DATABASE_VERSION = 1;
|
||
const STORE_NAME = 'backpack';
|
||
|
||
const base64ToArrayBuffer = base64 => {
|
||
const binaryString = atob(base64);
|
||
const len = binaryString.length;
|
||
const array = new Uint8Array(len);
|
||
|
||
for (let i = 0; i < len; i++) {
|
||
array[i] = binaryString.charCodeAt(i);
|
||
}
|
||
|
||
return array.buffer;
|
||
};
|
||
|
||
const arrayBufferToBase64 = buffer => {
|
||
let binary = '';
|
||
const bytes = new Uint8Array(buffer);
|
||
const len = bytes.byteLength;
|
||
|
||
for (let i = 0; i < len; i++) {
|
||
binary += String.fromCharCode(bytes[i]);
|
||
}
|
||
|
||
return btoa(binary);
|
||
};
|
||
|
||
const idbItemToBackpackItem = item => {
|
||
// convert id to string
|
||
item.id = "".concat(item.id);
|
||
|
||
if (item.type === 'sound') {
|
||
// For sounds, use the local thumbnail instead of what was stored in the backpack.
|
||
// The thumbnail was updated and it doesn't make sense for already backpacked sounds to
|
||
// use the old icon instead of the new one.
|
||
item.thumbnailUrl = "data:;base64,".concat(_backpack_sound_payload__WEBPACK_IMPORTED_MODULE_2__["soundThumbnail"]);
|
||
} else {
|
||
// Thumbnail could be any image format. The browser will figure out which format it is.
|
||
item.thumbnailUrl = "data:;base64,".concat(arrayBufferToBase64(item.thumbnailData));
|
||
}
|
||
|
||
let assetType;
|
||
|
||
if (item.type === 'script') {
|
||
item.bodyUrl = "data:application/json;base64,".concat(arrayBufferToBase64(item.bodyData));
|
||
} else if (item.type === 'sprite') {
|
||
item.bodyUrl = "data:application/zip;base64,".concat(arrayBufferToBase64(item.bodyData));
|
||
} else if (item.type === 'costume') {
|
||
if (item.mime === 'image/svg+xml') {
|
||
assetType = _storage__WEBPACK_IMPORTED_MODULE_0__["default"].AssetType.ImageVector;
|
||
} else if (item.mime === 'image/png' || item.mime === 'image/jpeg') {
|
||
assetType = _storage__WEBPACK_IMPORTED_MODULE_0__["default"].AssetType.ImageBitmap;
|
||
}
|
||
} else if (item.type === 'sound') {
|
||
assetType = _storage__WEBPACK_IMPORTED_MODULE_0__["default"].AssetType.Sound;
|
||
}
|
||
|
||
if (assetType) {
|
||
const extension = assetType.runtimeFormat;
|
||
const itemMD5 = item.bodyMD5;
|
||
const md5ext = "".concat(itemMD5, ".").concat(extension);
|
||
item.body = md5ext;
|
||
|
||
_storage__WEBPACK_IMPORTED_MODULE_0__["default"].builtinHelper._store(assetType, extension, new Uint8Array(item.bodyData), itemMD5);
|
||
}
|
||
|
||
return item;
|
||
};
|
||
|
||
let _db;
|
||
|
||
const openDB = () => new Promise((resolve, reject) => {
|
||
if (_db) {
|
||
resolve(_db);
|
||
return;
|
||
}
|
||
|
||
if (!window.indexedDB) {
|
||
reject(new Error('indexedDB is not supported'));
|
||
return;
|
||
}
|
||
|
||
const request = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);
|
||
|
||
request.onupgradeneeded = e => {
|
||
const db = e.target.result;
|
||
db.createObjectStore(STORE_NAME, {
|
||
keyPath: 'id',
|
||
autoIncrement: true
|
||
});
|
||
};
|
||
|
||
request.onsuccess = e => {
|
||
_db = e.target.result;
|
||
resolve(_db);
|
||
};
|
||
|
||
request.onerror = () => {
|
||
reject(new Error("DB error: ".concat(request.error)));
|
||
};
|
||
});
|
||
|
||
const getBackpackContents = async ({
|
||
limit,
|
||
offset
|
||
}) => {
|
||
const db = await openDB();
|
||
return new Promise((resolve, reject) => {
|
||
const transaction = db.transaction(STORE_NAME, 'readonly');
|
||
|
||
transaction.onerror = () => {
|
||
reject(new Error("Transaction error: ".concat(transaction.error)));
|
||
};
|
||
|
||
const store = transaction.objectStore(STORE_NAME);
|
||
const items = [];
|
||
const request = store.openCursor(null, 'prev');
|
||
let first = true;
|
||
|
||
request.onsuccess = e => {
|
||
const cursor = e.target.result;
|
||
|
||
if (first) {
|
||
first = false;
|
||
|
||
if (cursor && offset !== 0) {
|
||
cursor.advance(offset);
|
||
return;
|
||
}
|
||
}
|
||
|
||
if (cursor && items.length < limit) {
|
||
items.push(idbItemToBackpackItem(cursor.value));
|
||
cursor.continue();
|
||
} else {
|
||
resolve(items);
|
||
}
|
||
};
|
||
});
|
||
};
|
||
|
||
const saveBackpackObject = async ({
|
||
type,
|
||
mime,
|
||
name,
|
||
body,
|
||
thumbnail
|
||
}) => {
|
||
const db = await openDB();
|
||
return new Promise((resolve, reject) => {
|
||
const transaction = db.transaction(STORE_NAME, 'readwrite');
|
||
|
||
transaction.onerror = () => {
|
||
reject(new Error("Transaction error: ".concat(transaction.error)));
|
||
};
|
||
|
||
const store = transaction.objectStore(STORE_NAME);
|
||
const bodyData = base64ToArrayBuffer(body);
|
||
const bodyMD5 = js_md5__WEBPACK_IMPORTED_MODULE_1___default()(bodyData);
|
||
const idbItem = {
|
||
type,
|
||
mime,
|
||
name,
|
||
bodyData,
|
||
bodyMD5,
|
||
thumbnailData: base64ToArrayBuffer(thumbnail)
|
||
};
|
||
const putRequest = store.put(idbItem);
|
||
|
||
putRequest.onsuccess = () => {
|
||
idbItem.id = putRequest.result;
|
||
resolve(idbItemToBackpackItem(idbItem));
|
||
};
|
||
});
|
||
};
|
||
|
||
const deleteBackpackObject = async ({
|
||
id
|
||
}) => {
|
||
id = +id;
|
||
const db = await openDB();
|
||
return new Promise((resolve, reject) => {
|
||
const transaction = db.transaction(STORE_NAME, 'readwrite');
|
||
|
||
transaction.onerror = () => {
|
||
reject(new Error("Transaction error: ".concat(transaction.error)));
|
||
};
|
||
|
||
const store = transaction.objectStore(STORE_NAME); // Convert string IDs to number IDs
|
||
|
||
const deleteRequest = store.delete(id);
|
||
|
||
deleteRequest.onsuccess = () => {
|
||
resolve();
|
||
};
|
||
});
|
||
};
|
||
|
||
const updateBackpackObject = async ({
|
||
id,
|
||
name
|
||
}) => {
|
||
id = +id;
|
||
const db = await openDB();
|
||
return new Promise((resolve, reject) => {
|
||
const transaction = db.transaction(STORE_NAME, 'readwrite');
|
||
|
||
transaction.onerror = () => {
|
||
reject(new Error("Transaction error: ".concat(transaction.error)));
|
||
};
|
||
|
||
const store = transaction.objectStore(STORE_NAME);
|
||
const getRequest = store.get(id);
|
||
|
||
getRequest.onsuccess = () => {
|
||
const newItem = _objectSpread(_objectSpread({}, getRequest.result), {}, {
|
||
name: name
|
||
});
|
||
|
||
const putRequest = store.put(newItem);
|
||
|
||
putRequest.onsuccess = () => {
|
||
resolve(idbItemToBackpackItem(newItem));
|
||
};
|
||
};
|
||
});
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
getBackpackContents,
|
||
saveBackpackObject,
|
||
deleteBackpackObject,
|
||
updateBackpackObject
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-missing-project/index.js":
|
||
/*!*********************************************!*\
|
||
!*** ./src/lib/tw-missing-project/index.js ***!
|
||
\*********************************************/
|
||
/*! exports provided: MISSING_PROJECT_ID, default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MISSING_PROJECT_ID", function() { return MISSING_PROJECT_ID; });
|
||
/* harmony import */ var _raw_loader_c17163c6954e9422ac2405de4c9d68c8_svg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! raw-loader!./c17163c6954e9422ac2405de4c9d68c8.svg */ "./node_modules/raw-loader/index.js!./src/lib/tw-missing-project/c17163c6954e9422ac2405de4c9d68c8.svg");
|
||
/* harmony import */ var _raw_loader_c17163c6954e9422ac2405de4c9d68c8_svg__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_raw_loader_c17163c6954e9422ac2405de4c9d68c8_svg__WEBPACK_IMPORTED_MODULE_0__);
|
||
/* harmony import */ var _project_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./project-data */ "./src/lib/tw-missing-project/project-data.js");
|
||
/* harmony import */ var _tw_text_encoder__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../tw-text-encoder */ "./src/lib/tw-text-encoder.js");
|
||
/* eslint-disable import/no-unresolved */
|
||
|
||
/* eslint-enable import/no-unresolved */
|
||
|
||
|
||
|
||
const MISSING_PROJECT_ID = '__missing__';
|
||
|
||
const missingProject = () => {
|
||
const encoder = new _tw_text_encoder__WEBPACK_IMPORTED_MODULE_2__["TextEncoder"]();
|
||
const projectJson = Object(_project_data__WEBPACK_IMPORTED_MODULE_1__["default"])();
|
||
return [{
|
||
id: MISSING_PROJECT_ID,
|
||
assetType: 'Project',
|
||
dataFormat: 'JSON',
|
||
data: JSON.stringify(projectJson)
|
||
}, {
|
||
id: 'c17163c6954e9422ac2405de4c9d68c8',
|
||
assetType: 'ImageVector',
|
||
dataFormat: 'SVG',
|
||
data: encoder.encode(_raw_loader_c17163c6954e9422ac2405de4c9d68c8_svg__WEBPACK_IMPORTED_MODULE_0___default.a)
|
||
}];
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (missingProject);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-missing-project/project-data.js":
|
||
/*!****************************************************!*\
|
||
!*** ./src/lib/tw-missing-project/project-data.js ***!
|
||
\****************************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
const projectData = () => ({
|
||
targets: [{
|
||
isStage: true,
|
||
name: 'Stage',
|
||
variables: {},
|
||
lists: {},
|
||
broadcasts: {},
|
||
blocks: {},
|
||
comments: {},
|
||
currentCostume: 0,
|
||
costumes: [{
|
||
assetId: 'c17163c6954e9422ac2405de4c9d68c8',
|
||
name: '',
|
||
bitmapResolution: 1,
|
||
md5ext: 'c17163c6954e9422ac2405de4c9d68c8.svg',
|
||
dataFormat: 'svg',
|
||
rotationCenterX: 207,
|
||
rotationCenterY: 16
|
||
}],
|
||
sounds: [],
|
||
volume: 100,
|
||
layerOrder: 0
|
||
}],
|
||
monitors: [],
|
||
extensions: [],
|
||
meta: {
|
||
semver: '3.0.0',
|
||
vm: '0.2.0',
|
||
agent: ''
|
||
}
|
||
});
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (projectData);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-navigation-utils.js":
|
||
/*!****************************************!*\
|
||
!*** ./src/lib/tw-navigation-utils.js ***!
|
||
\****************************************/
|
||
/*! exports provided: setProjectId, searchParamsToString, setSearchParams */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setProjectId", function() { return setProjectId; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "searchParamsToString", function() { return searchParamsToString; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSearchParams", function() { return setSearchParams; });
|
||
/* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js");
|
||
|
||
|
||
const setProjectId = (dispatch, projectId) => {
|
||
if (false) {}
|
||
|
||
dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_0__["setProjectId"])(projectId));
|
||
};
|
||
|
||
const searchParamsToString = params => {
|
||
let newSearch = params.toString();
|
||
|
||
if (newSearch.length > 0) {
|
||
// Add leading question mark
|
||
newSearch = "?".concat(newSearch);
|
||
newSearch = newSearch // Remove '=' from empty values
|
||
// eslint-disable-next-line no-div-regex
|
||
.replace(/=(?=$|&)/g, '') // Decode / and : (common in project_url setting)
|
||
.replace(/%2F/g, '/').replace(/%3A/g, ':');
|
||
}
|
||
|
||
return newSearch;
|
||
};
|
||
/**
|
||
* Change URL search params to something else in place
|
||
* @param {URLSearchParams} params New URLSearchParams
|
||
*/
|
||
|
||
|
||
const setSearchParams = params => {
|
||
const newSearch = searchParamsToString(params);
|
||
|
||
if (location.search !== newSearch) {
|
||
history.replaceState(null, null, "".concat(location.pathname).concat(newSearch).concat(location.hash));
|
||
}
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-restore-point-api.js":
|
||
/*!*****************************************!*\
|
||
!*** ./src/lib/tw-restore-point-api.js ***!
|
||
\*****************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony import */ var jszip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jszip */ "./node_modules/jszip/lib/index.js");
|
||
/* harmony import */ var jszip__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jszip__WEBPACK_IMPORTED_MODULE_0__);
|
||
// Special constants -- do not change without care.
|
||
|
||
const DATABASE_NAME = 'TW_AutoSave';
|
||
const DATABASE_VERSION = 1;
|
||
const STORE_NAME = 'project';
|
||
|
||
let _db;
|
||
|
||
const openDB = () => {
|
||
if (_db) {
|
||
return _db;
|
||
}
|
||
|
||
if (!window.indexedDB) {
|
||
throw new Error('indexedDB is not supported');
|
||
}
|
||
|
||
return new Promise((resolve, reject) => {
|
||
const request = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);
|
||
|
||
request.onupgradeneeded = e => {
|
||
const db = e.target.result;
|
||
db.createObjectStore(STORE_NAME, {
|
||
keyPath: 'file'
|
||
});
|
||
};
|
||
|
||
request.onsuccess = e => {
|
||
_db = e.target.result;
|
||
resolve(_db);
|
||
};
|
||
|
||
request.onerror = () => {
|
||
reject(new Error("DB error: ".concat(request.error)));
|
||
};
|
||
});
|
||
};
|
||
/**
|
||
* Save a project to IDB.
|
||
* @param {VirtualMachine} vm Scratch VM
|
||
*/
|
||
|
||
|
||
const save = async vm => {
|
||
// To save a project, we will get all the assets inside it and save them to IDB.
|
||
// We will not actually generate a zip as that is slow.
|
||
const files = vm.saveProjectSb3DontZip();
|
||
const db = await openDB();
|
||
return new Promise((resolve, reject) => {
|
||
const transaction = db.transaction(STORE_NAME, 'readwrite');
|
||
|
||
transaction.onerror = () => {
|
||
reject(new Error("Save transaction error: ".concat(transaction.error)));
|
||
}; // Remove unused assets and don't waste time updating assets that are already in IDB.
|
||
|
||
|
||
const exists = [];
|
||
const projectStore = transaction.objectStore(STORE_NAME);
|
||
const request = projectStore.openCursor();
|
||
|
||
request.onsuccess = e => {
|
||
const cursor = e.target.result;
|
||
|
||
if (cursor) {
|
||
const key = cursor.key;
|
||
|
||
if (files[key]) {
|
||
exists.push(key);
|
||
} else {
|
||
cursor.delete();
|
||
}
|
||
|
||
cursor.continue();
|
||
} else {
|
||
// Cursor is done, save all new files and project.json to IDB.
|
||
for (const file of Object.keys(files)) {
|
||
if (file === 'project.json' || !exists.includes(file)) {
|
||
projectStore.put({
|
||
file,
|
||
data: files[file].buffer
|
||
});
|
||
}
|
||
}
|
||
|
||
resolve();
|
||
}
|
||
};
|
||
});
|
||
};
|
||
/**
|
||
* Load a project from IDB.
|
||
* @returns {Promise<ArrayBuffer>} sb3 project to load.
|
||
*/
|
||
|
||
|
||
const load = async () => {
|
||
// To load a project, read the files from IDB and generate a .sb3
|
||
const db = await openDB();
|
||
return new Promise((resolve, reject) => {
|
||
const transaction = db.transaction(STORE_NAME, 'readonly');
|
||
|
||
transaction.onerror = () => {
|
||
reject(new Error("Load transaction error: ".concat(transaction.error)));
|
||
};
|
||
|
||
const zip = new jszip__WEBPACK_IMPORTED_MODULE_0___default.a();
|
||
const projectStore = transaction.objectStore(STORE_NAME);
|
||
const request = projectStore.openCursor();
|
||
|
||
request.onsuccess = e => {
|
||
const cursor = e.target.result;
|
||
|
||
if (cursor) {
|
||
zip.file(cursor.key, cursor.value.data);
|
||
cursor.continue();
|
||
} else {
|
||
// Cursor is done, all files added to zip.
|
||
const hasJSON = zip.file('project.json');
|
||
|
||
if (hasJSON) {
|
||
resolve(zip.generateAsync({
|
||
type: 'arraybuffer' // No reason to compress this zip.
|
||
|
||
}));
|
||
} else {
|
||
reject(new Error('Could not find project'));
|
||
}
|
||
}
|
||
};
|
||
});
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
save,
|
||
load
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-scratch-paint.js":
|
||
/*!*************************************!*\
|
||
!*** ./src/lib/tw-scratch-paint.js ***!
|
||
\*************************************/
|
||
/*! exports provided: default, ScratchPaintReducer */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return PaintEditor; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScratchPaintReducer", function() { return ScratchPaintReducer; });
|
||
/* 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__);
|
||
|
||
let realScratchPaint;
|
||
|
||
const getRealScratchPaint = () => {
|
||
if (!realScratchPaint) {
|
||
realScratchPaint = __webpack_require__(/*! scratch-paint */ "./node_modules/scratch-paint/src/index.js");
|
||
}
|
||
|
||
return realScratchPaint;
|
||
};
|
||
|
||
const PaintEditor = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(getRealScratchPaint().default, props);
|
||
|
||
let hasSetupReducer = false;
|
||
|
||
const ScratchPaintReducer = (state, action) => {
|
||
if (!hasSetupReducer && action.type === 'scratch-gui/navigation/ACTIVATE_TAB' && action.activeTabIndex === 1) {
|
||
hasSetupReducer = true;
|
||
}
|
||
|
||
if (hasSetupReducer) {
|
||
return getRealScratchPaint().ScratchPaintReducer(state, action);
|
||
}
|
||
|
||
return {};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-scratch-render-fonts/Grand9K-Pixel.ttf":
|
||
/*!***********************************************************!*\
|
||
!*** ./src/lib/tw-scratch-render-fonts/Grand9K-Pixel.ttf ***!
|
||
\***********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/87a3a62c0627e925b92d3ede2f62b04f.ttf";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-scratch-render-fonts/Griffy-Regular.ttf":
|
||
/*!************************************************************!*\
|
||
!*** ./src/lib/tw-scratch-render-fonts/Griffy-Regular.ttf ***!
|
||
\************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/eb64e706eb7a3b324ba50d3279a980b1.ttf";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-scratch-render-fonts/Knewave.ttf":
|
||
/*!*****************************************************!*\
|
||
!*** ./src/lib/tw-scratch-render-fonts/Knewave.ttf ***!
|
||
\*****************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/3682b35e452a7f4a5a61167d1632e24a.ttf";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-scratch-render-fonts/NotoSans-Medium.ttf":
|
||
/*!*************************************************************!*\
|
||
!*** ./src/lib/tw-scratch-render-fonts/NotoSans-Medium.ttf ***!
|
||
\*************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/9ec3449723269a806ec6eaba0f8f6cef.ttf";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-scratch-render-fonts/Scratch.ttf":
|
||
/*!*****************************************************!*\
|
||
!*** ./src/lib/tw-scratch-render-fonts/Scratch.ttf ***!
|
||
\*****************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/bbc0dd79717bfa338a199bb26cdd780b.ttf";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-scratch-render-fonts/SourceSerifPro-Regular.otf":
|
||
/*!********************************************************************!*\
|
||
!*** ./src/lib/tw-scratch-render-fonts/SourceSerifPro-Regular.otf ***!
|
||
\********************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/8996930d8e83f63cc3341172205df460.otf";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-scratch-render-fonts/handlee-regular.ttf":
|
||
/*!*************************************************************!*\
|
||
!*** ./src/lib/tw-scratch-render-fonts/handlee-regular.ttf ***!
|
||
\*************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__.p + "static/assets/64bcfe1f13fce38e2ea26280157ff2ce.ttf";
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-scratch-render-fonts/index.js":
|
||
/*!**************************************************!*\
|
||
!*** ./src/lib/tw-scratch-render-fonts/index.js ***!
|
||
\**************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* eslint-disable import/no-commonjs */
|
||
const SansSerif = __webpack_require__(/*! ./NotoSans-Medium.ttf */ "./src/lib/tw-scratch-render-fonts/NotoSans-Medium.ttf");
|
||
|
||
const Serif = __webpack_require__(/*! ./SourceSerifPro-Regular.otf */ "./src/lib/tw-scratch-render-fonts/SourceSerifPro-Regular.otf");
|
||
|
||
const Handwriting = __webpack_require__(/*! ./handlee-regular.ttf */ "./src/lib/tw-scratch-render-fonts/handlee-regular.ttf");
|
||
|
||
const Marker = __webpack_require__(/*! ./Knewave.ttf */ "./src/lib/tw-scratch-render-fonts/Knewave.ttf");
|
||
|
||
const Curly = __webpack_require__(/*! ./Griffy-Regular.ttf */ "./src/lib/tw-scratch-render-fonts/Griffy-Regular.ttf");
|
||
|
||
const Pixel = __webpack_require__(/*! ./Grand9K-Pixel.ttf */ "./src/lib/tw-scratch-render-fonts/Grand9K-Pixel.ttf");
|
||
|
||
const Scratch = __webpack_require__(/*! ./Scratch.ttf */ "./src/lib/tw-scratch-render-fonts/Scratch.ttf");
|
||
|
||
const log = __webpack_require__(/*! ../log */ "./src/lib/log.js").default;
|
||
|
||
const fontSource = {
|
||
'Sans Serif': SansSerif,
|
||
'Serif': Serif,
|
||
'Handwriting': Handwriting,
|
||
'Marker': Marker,
|
||
'Curly': Curly,
|
||
'Pixel': Pixel,
|
||
'Scratch': Scratch
|
||
};
|
||
const fontData = {};
|
||
|
||
const fetchFonts = () => {
|
||
const promises = [];
|
||
|
||
for (const fontName of Object.keys(fontSource)) {
|
||
promises.push(fetch(fontSource[fontName]).then(res => {
|
||
if (!res.ok) {
|
||
throw new Error("Cannot load font: ".concat(fontName, " (invalid HTTP response)"));
|
||
}
|
||
|
||
return res.blob();
|
||
}).then(blob => new Promise((resolve, reject) => {
|
||
const fr = new FileReader();
|
||
|
||
fr.onload = () => resolve(fr.result);
|
||
|
||
fr.onerror = () => reject(new Error("Cannot load font: ".concat(fontName, " (could not read)")));
|
||
|
||
fr.readAsDataURL(blob);
|
||
})).then(url => {
|
||
fontData[fontName] = "@font-face{font-family:\"".concat(fontName, "\";src:url(\"").concat(url, "\");}");
|
||
}).catch(err => {
|
||
log.error(err);
|
||
}));
|
||
}
|
||
|
||
return Promise.all(promises);
|
||
};
|
||
|
||
const addFontsToDocument = () => {
|
||
if (document.getElementById('scratch-font-styles')) {
|
||
return;
|
||
}
|
||
|
||
let css = '';
|
||
|
||
for (const fontName of Object.keys(fontSource)) {
|
||
const fontCSS = fontData[fontName];
|
||
|
||
if (fontCSS) {
|
||
css += fontCSS;
|
||
}
|
||
}
|
||
|
||
const documentStyleTag = document.createElement('style');
|
||
documentStyleTag.id = 'scratch-font-styles';
|
||
documentStyleTag.textContent = css;
|
||
document.body.insertBefore(documentStyleTag, document.body.firstChild);
|
||
};
|
||
|
||
const waitForFontsToLoad = () => {
|
||
const promises = [];
|
||
|
||
if (document.fonts && document.fonts.load) {
|
||
for (const fontName in fontData) {
|
||
promises.push(document.fonts.load("12px ".concat(fontName)));
|
||
}
|
||
}
|
||
|
||
return Promise.all(promises);
|
||
};
|
||
|
||
const loadFonts = () => fetchFonts().then(() => {
|
||
addFontsToDocument();
|
||
return waitForFontsToLoad();
|
||
}).catch(err => {
|
||
log.error(err);
|
||
});
|
||
|
||
const getFonts = () => fontData; // We have to use legacy module.exports as some parts of Scratch expect require('scratch-render-font') to be a function
|
||
|
||
|
||
module.exports = getFonts;
|
||
module.exports.loadFonts = loadFonts;
|
||
module.exports.FONTS = fontData;
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-state-manager-hoc.jsx":
|
||
/*!******************************************!*\
|
||
!*** ./src/lib/tw-state-manager-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 TWStateManager; });
|
||
/* 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 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 _log__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./log */ "./src/lib/log.js");
|
||
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js");
|
||
/* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js");
|
||
/* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js");
|
||
/* harmony import */ var _reducers_mode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../reducers/mode */ "./src/reducers/mode.js");
|
||
/* harmony import */ var _tw_username__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./tw-username */ "./src/lib/tw-username.js");
|
||
/* harmony import */ var _tw_navigation_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./tw-navigation-utils */ "./src/lib/tw-navigation-utils.js");
|
||
/* harmony import */ var _reducers_custom_stage_size__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../reducers/custom-stage-size */ "./src/reducers/custom-stage-size.js");
|
||
const _excluded = ["intl", "customStageSize", "isFullScreen", "isPlayerOnly", "isEmbedded", "projectChanged", "compilerOptions", "runtimeOptions", "highQualityPen", "framerate", "interpolation", "turbo", "onSetIsFullScreen", "onSetIsPlayerOnly", "onSetProjectId", "onSetUsername", "reduxProjectId", "routingStyle", "username", "vm"];
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/* eslint-disable no-alert */
|
||
|
||
const messages = Object(react_intl__WEBPACK_IMPORTED_MODULE_6__["defineMessages"])({
|
||
invalidFPS: {
|
||
"id": "tw.invalidParameters.fps",
|
||
"defaultMessage": "\"fps\" URL parameter is invalid"
|
||
},
|
||
invalidClones: {
|
||
"id": "tw.invalidParameters.clones",
|
||
"defaultMessage": "\"clone\" URL parameter is invalid"
|
||
}
|
||
});
|
||
const USERNAME_KEY = 'tw:username';
|
||
/**
|
||
* The State Manager is responsible for managing persistent state and the URL.
|
||
*/
|
||
|
||
const setLocalStorage = (key, value) => {
|
||
try {
|
||
localStorage.setItem(key, value);
|
||
} catch (e) {// ignore
|
||
}
|
||
};
|
||
|
||
const getLocalStorage = key => {
|
||
try {
|
||
return localStorage.getItem(key);
|
||
} catch (e) {// ignore
|
||
}
|
||
|
||
return null;
|
||
};
|
||
|
||
const readHashProjectId = () => {
|
||
const match = location.hash.match(/#(\d+)/);
|
||
return match === null ? null : match[1];
|
||
};
|
||
|
||
class Router {
|
||
constructor({
|
||
onSetProjectId,
|
||
onSetIsPlayerOnly,
|
||
onSetIsFullScreen
|
||
}) {
|
||
this.onSetProjectId = onSetProjectId;
|
||
this.onSetIsPlayerOnly = onSetIsPlayerOnly;
|
||
this.onSetIsFullScreen = onSetIsFullScreen;
|
||
}
|
||
|
||
onhashchange() {}
|
||
|
||
onpathchange() {}
|
||
|
||
generateURL() {
|
||
return '';
|
||
}
|
||
|
||
}
|
||
|
||
class HashRouter extends Router {
|
||
onhashchange() {
|
||
this.onSetProjectId(readHashProjectId() || _reducers_project_state__WEBPACK_IMPORTED_MODULE_8__["defaultProjectId"]);
|
||
}
|
||
|
||
generateURL({
|
||
projectId
|
||
}) {
|
||
const hashQuery = location.hash.split('?')[1];
|
||
return "".concat(location.pathname).concat(location.search, "#").concat(projectId).concat(hashQuery ? "?".concat(hashQuery) : '');
|
||
}
|
||
|
||
}
|
||
|
||
class FileHashRouter extends HashRouter {
|
||
constructor(callbacks) {
|
||
super(callbacks);
|
||
this.playerPath = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1);
|
||
this.editorPath = "".concat(this.playerPath, "editor.html");
|
||
this.fullscreenPath = "".concat(this.playerPath, "fullscreen.html");
|
||
}
|
||
|
||
onpathchange() {
|
||
const pathName = location.pathname;
|
||
|
||
if (pathName === this.playerPath) {
|
||
this.onSetIsPlayerOnly(true);
|
||
this.onSetIsFullScreen(false);
|
||
} else if (pathName === this.editorPath) {
|
||
this.onSetIsPlayerOnly(false);
|
||
this.onSetIsFullScreen(false);
|
||
} else if (pathName === this.fullscreenPath) {
|
||
this.onSetIsFullScreen(true);
|
||
}
|
||
}
|
||
|
||
generateURL({
|
||
projectId,
|
||
isPlayerOnly,
|
||
isFullScreen
|
||
}) {
|
||
let newPathname = '';
|
||
let newHash = '';
|
||
|
||
if (projectId !== '0') {
|
||
newHash = projectId;
|
||
}
|
||
|
||
const hashQuery = location.hash.split('?')[1];
|
||
|
||
if (hashQuery) {
|
||
newHash += "?".concat(hashQuery);
|
||
}
|
||
|
||
if (isFullScreen) {
|
||
newPathname = this.fullscreenPath;
|
||
} else if (isPlayerOnly) {
|
||
newPathname = this.playerPath;
|
||
} else {
|
||
newPathname = this.editorPath;
|
||
}
|
||
|
||
return "".concat(newPathname).concat(location.search).concat(newHash ? "#".concat(newHash) : '');
|
||
}
|
||
|
||
}
|
||
|
||
const getCanonicalLinkElement = () => {
|
||
let el = document.querySelector('link[rel=canonical]');
|
||
|
||
if (!el) {
|
||
el = document.createElement('link');
|
||
el.rel = 'canonical';
|
||
document.head.appendChild(el);
|
||
}
|
||
|
||
return el;
|
||
};
|
||
|
||
class WildcardRouter extends Router {
|
||
constructor(callbacks) {
|
||
super(callbacks);
|
||
this.root = "";
|
||
}
|
||
|
||
onhashchange() {
|
||
const hashProjectId = readHashProjectId();
|
||
|
||
if (hashProjectId) {
|
||
const ok = this.onSetProjectId(hashProjectId);
|
||
|
||
if (ok) {
|
||
// Completely remove the hash
|
||
history.replaceState(null, null, "".concat(location.pathname).concat(location.search));
|
||
}
|
||
} else {
|
||
// Do not detect page type here as it is already setup by index.html, editor.html, etc.
|
||
this.parseURL(false);
|
||
}
|
||
}
|
||
|
||
onpathchange() {
|
||
this.parseURL(true);
|
||
}
|
||
|
||
parseURL(detectPageType) {
|
||
const path = location.pathname.substr(this.root.length);
|
||
const parts = path.split('/');
|
||
|
||
const parseProjectId = id => {
|
||
if (id) {
|
||
this.onSetProjectId(id);
|
||
} else {
|
||
this.onSetProjectId(_reducers_project_state__WEBPACK_IMPORTED_MODULE_8__["defaultProjectId"]);
|
||
}
|
||
};
|
||
|
||
const parsePageType = type => {
|
||
if (!detectPageType) {
|
||
return;
|
||
}
|
||
|
||
if (type === 'fullscreen') {
|
||
this.onSetIsFullScreen(true);
|
||
} else if (type === 'editor') {
|
||
this.onSetIsPlayerOnly(false);
|
||
this.onSetIsFullScreen(false);
|
||
} else {
|
||
this.onSetIsPlayerOnly(true);
|
||
this.onSetIsFullScreen(false);
|
||
}
|
||
};
|
||
|
||
if (+parts[0] && Number.isFinite(+parts[0])) {
|
||
parseProjectId(parts[0]);
|
||
parsePageType(parts[1]);
|
||
} else {
|
||
this.onSetProjectId(_reducers_project_state__WEBPACK_IMPORTED_MODULE_8__["defaultProjectId"]);
|
||
parsePageType(parts[0]);
|
||
}
|
||
}
|
||
|
||
generateURL({
|
||
projectId,
|
||
isPlayerOnly,
|
||
isFullScreen
|
||
}) {
|
||
const parts = [];
|
||
|
||
if (projectId !== '0') {
|
||
parts.push(projectId);
|
||
}
|
||
|
||
if (isFullScreen) {
|
||
parts.push('fullscreen');
|
||
} else if (!isPlayerOnly) {
|
||
parts.push('editor');
|
||
}
|
||
|
||
const path = "".concat(this.root).concat(parts.join('/'));
|
||
const canonical = "".concat(location.origin).concat(this.root).concat(projectId === '0' ? '' : projectId);
|
||
getCanonicalLinkElement().href = canonical;
|
||
return "".concat(path).concat(location.search).concat(location.hash);
|
||
}
|
||
|
||
}
|
||
|
||
const routers = {
|
||
none: Router,
|
||
hash: HashRouter,
|
||
filehash: FileHashRouter,
|
||
wildcard: WildcardRouter
|
||
};
|
||
/**
|
||
* Return the optimal Router for the current environment
|
||
* @param {string} style Routing style name
|
||
* @param {*} callbacks Redux callbacks
|
||
* @returns {Router} The optimal router for the current environment
|
||
*/
|
||
|
||
const createRouter = (style, callbacks) => {
|
||
const supportedStyles = ['none', 'hash']; // FileHashRouter is not supported on non-http(s) protocols.
|
||
|
||
const isHTTP = location.protocol === 'http:' || location.protocol === 'https:';
|
||
|
||
if (isHTTP) {
|
||
supportedStyles.push('filehash');
|
||
} // WildcardRouter is not supported if ROOT is not set.
|
||
|
||
|
||
if (false) {}
|
||
|
||
if (!supportedStyles.includes(style)) {
|
||
_log__WEBPACK_IMPORTED_MODULE_5__["default"].warn("routing style is unknown or not supported: ".concat(style, ", falling back to hash"));
|
||
style = 'hash';
|
||
}
|
||
|
||
if (routers.hasOwnProperty(style)) {
|
||
return new routers[style](callbacks);
|
||
}
|
||
|
||
throw new Error("unknown router: ".concat(style));
|
||
};
|
||
|
||
const TWStateManager = function TWStateManager(WrappedComponent) {
|
||
class StateManagerComponent extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_3___default()(this, ['handleHashChange', 'handlePopState', 'onSetProjectId', 'onSetIsPlayerOnly', 'onSetIsFullScreen']);
|
||
}
|
||
|
||
componentDidMount() {
|
||
const urlParams = new URLSearchParams(location.search);
|
||
|
||
if (urlParams.has('fps')) {
|
||
const fps = +urlParams.get('fps');
|
||
|
||
if (Number.isNaN(fps) || fps < 0) {
|
||
alert(this.props.intl.formatMessage(messages.invalidFPS));
|
||
} else {
|
||
this.props.vm.setFramerate(fps);
|
||
}
|
||
} else if (urlParams.has('60fps')) {
|
||
this.props.vm.setFramerate(60);
|
||
}
|
||
|
||
if (urlParams.has('interpolate')) {
|
||
this.props.vm.setInterpolation(true);
|
||
}
|
||
|
||
if (urlParams.has('username')) {
|
||
const username = urlParams.get('username'); // Do not save username when loaded from URL
|
||
|
||
this.doNotPersistUsername = username;
|
||
this.props.onSetUsername(username);
|
||
} else {
|
||
const persistentUsername = this.props.isEmbedded ? null : getLocalStorage(USERNAME_KEY);
|
||
|
||
if (persistentUsername === null) {
|
||
const randomUsername = Object(_tw_username__WEBPACK_IMPORTED_MODULE_10__["generateRandomUsername"])();
|
||
this.props.onSetUsername(randomUsername);
|
||
|
||
if (this.props.isEmbedded) {
|
||
this.doNotPersistUsername = randomUsername;
|
||
}
|
||
} else {
|
||
this.props.onSetUsername(persistentUsername);
|
||
}
|
||
}
|
||
|
||
if (urlParams.has('hqpen')) {
|
||
this.props.vm.renderer.setUseHighQualityRender(true);
|
||
}
|
||
|
||
if (urlParams.has('turbo')) {
|
||
this.props.vm.setTurboMode(true);
|
||
}
|
||
|
||
if (urlParams.has('stuck') || urlParams.has('warp_timer')) {
|
||
this.props.vm.setCompilerOptions({
|
||
warpTimer: true
|
||
});
|
||
}
|
||
|
||
if (urlParams.has('nocompile')) {
|
||
this.props.vm.setCompilerOptions({
|
||
enabled: false
|
||
});
|
||
}
|
||
|
||
if (urlParams.has('clones')) {
|
||
const clones = +urlParams.get('clones');
|
||
|
||
if (Number.isNaN(clones) || clones < 0) {
|
||
alert(this.props.intl.formatMessage(messages.invalidClones));
|
||
} else {
|
||
this.props.vm.setRuntimeOptions({
|
||
maxClones: clones
|
||
});
|
||
}
|
||
}
|
||
|
||
if (urlParams.has('offscreen')) {
|
||
this.props.vm.setRuntimeOptions({
|
||
fencing: false
|
||
});
|
||
}
|
||
|
||
if (urlParams.has('limitless')) {
|
||
this.props.vm.setRuntimeOptions({
|
||
miscLimits: false
|
||
});
|
||
}
|
||
|
||
for (const extension of urlParams.getAll('extension')) {
|
||
this.props.vm.extensionManager.loadExtensionURL(extension);
|
||
}
|
||
|
||
const routerCallbacks = {
|
||
onSetProjectId: this.onSetProjectId,
|
||
onSetIsPlayerOnly: this.onSetIsPlayerOnly,
|
||
onSetIsFullScreen: this.onSetIsFullScreen
|
||
};
|
||
this.router = createRouter(this.props.routingStyle, routerCallbacks);
|
||
this.router.onhashchange();
|
||
window.addEventListener('hashchange', this.handleHashChange);
|
||
window.addEventListener('popstate', this.handlePopState);
|
||
}
|
||
|
||
componentDidUpdate(prevProps) {
|
||
if (this.props.username !== prevProps.username && this.props.username !== this.doNotPersistUsername) {
|
||
// TODO: this always restores the current username once at startup, which is unnecessary
|
||
setLocalStorage(USERNAME_KEY, this.props.username);
|
||
}
|
||
|
||
if (this.props.reduxProjectId !== prevProps.reduxProjectId || this.props.isPlayerOnly !== prevProps.isPlayerOnly || this.props.isFullScreen !== prevProps.isFullScreen) {
|
||
const oldPath = "".concat(location.pathname).concat(location.search).concat(location.hash);
|
||
const routerState = {
|
||
projectId: this.props.reduxProjectId,
|
||
isPlayerOnly: this.props.isPlayerOnly,
|
||
isFullScreen: this.props.isFullScreen
|
||
};
|
||
const newPath = this.router.generateURL(routerState);
|
||
|
||
if (newPath && newPath !== oldPath) {
|
||
history.pushState(null, null, newPath);
|
||
}
|
||
}
|
||
|
||
if (this.props.customStageSize !== prevProps.customStageSize || this.props.runtimeOptions !== prevProps.runtimeOptions || this.props.compilerOptions !== prevProps.compilerOptions || this.props.highQualityPen !== prevProps.highQualityPen || this.props.framerate !== prevProps.framerate || this.props.interpolation !== prevProps.interpolation || this.props.turbo !== prevProps.turbo) {
|
||
const searchParams = new URLSearchParams(location.search);
|
||
const runtimeOptions = this.props.runtimeOptions;
|
||
const compilerOptions = this.props.compilerOptions; // Always remove legacy parameter
|
||
|
||
searchParams.delete('60fps');
|
||
const {
|
||
width,
|
||
height
|
||
} = this.props.customStageSize;
|
||
|
||
if (width === _reducers_custom_stage_size__WEBPACK_IMPORTED_MODULE_12__["defaultStageSize"].width && height === _reducers_custom_stage_size__WEBPACK_IMPORTED_MODULE_12__["defaultStageSize"].height) {
|
||
searchParams.delete('size');
|
||
} else {
|
||
searchParams.set('size', "".concat(width, "x").concat(height));
|
||
}
|
||
|
||
if (this.props.framerate === 30) {
|
||
searchParams.delete('fps');
|
||
} else {
|
||
searchParams.set('fps', this.props.framerate);
|
||
}
|
||
|
||
if (this.props.interpolation) {
|
||
searchParams.set('interpolate', '');
|
||
} else {
|
||
searchParams.delete('interpolate');
|
||
}
|
||
|
||
if (this.props.turbo) {
|
||
searchParams.set('turbo', '');
|
||
} else {
|
||
searchParams.delete('turbo');
|
||
}
|
||
|
||
if (this.props.highQualityPen) {
|
||
searchParams.set('hqpen', '');
|
||
} else {
|
||
searchParams.delete('hqpen');
|
||
}
|
||
|
||
if (compilerOptions.enabled) {
|
||
searchParams.delete('nocompile');
|
||
}
|
||
|
||
if (this.props.isPlayerOnly) {
|
||
if (compilerOptions.warpTimer) {
|
||
searchParams.set('stuck', '');
|
||
} else {
|
||
searchParams.delete('stuck');
|
||
}
|
||
} else {// Leave ?stuck as-is when in editor
|
||
}
|
||
|
||
if (runtimeOptions.maxClones === 300) {
|
||
searchParams.delete('clones');
|
||
} else {
|
||
searchParams.set('clones', runtimeOptions.maxClones);
|
||
}
|
||
|
||
if (runtimeOptions.fencing) {
|
||
searchParams.delete('offscreen');
|
||
} else {
|
||
searchParams.set('offscreen', '');
|
||
}
|
||
|
||
if (runtimeOptions.miscLimits) {
|
||
searchParams.delete('limitless');
|
||
} else {
|
||
searchParams.set('limitless', '');
|
||
}
|
||
|
||
Object(_tw_navigation_utils__WEBPACK_IMPORTED_MODULE_11__["setSearchParams"])(searchParams);
|
||
}
|
||
}
|
||
|
||
componentWillUnmount() {
|
||
window.removeEventListener('hashchange', this.handleHashChange);
|
||
window.removeEventListener('popstate', this.handlePopState);
|
||
}
|
||
|
||
handleHashChange() {
|
||
this.router.onhashchange();
|
||
}
|
||
|
||
handlePopState() {
|
||
this.router.onpathchange();
|
||
}
|
||
|
||
onSetProjectId(id) {
|
||
if ("".concat(id) === "".concat(this.props.reduxProjectId)) {
|
||
return true;
|
||
}
|
||
|
||
if (this.props.projectChanged) {
|
||
if (!confirm('Are you sure you want to switch project?')) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
this.props.onSetProjectId(id);
|
||
return true;
|
||
}
|
||
|
||
onSetIsPlayerOnly(isPlayerOnly) {
|
||
this.props.onSetIsPlayerOnly(isPlayerOnly);
|
||
}
|
||
|
||
onSetIsFullScreen(isFullScreen) {
|
||
this.props.onSetIsFullScreen(isFullScreen);
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
/* eslint-disable no-unused-vars */
|
||
intl,
|
||
customStageSize,
|
||
isFullScreen,
|
||
isPlayerOnly,
|
||
isEmbedded,
|
||
projectChanged,
|
||
compilerOptions,
|
||
runtimeOptions,
|
||
highQualityPen,
|
||
framerate,
|
||
interpolation,
|
||
turbo,
|
||
onSetIsFullScreen,
|
||
onSetIsPlayerOnly,
|
||
onSetProjectId,
|
||
onSetUsername,
|
||
reduxProjectId,
|
||
routingStyle,
|
||
username,
|
||
vm
|
||
} = _this$props,
|
||
props = _objectWithoutProperties(_this$props, _excluded);
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, props);
|
||
}
|
||
|
||
}
|
||
|
||
StateManagerComponent.propTypes = {
|
||
intl: react_intl__WEBPACK_IMPORTED_MODULE_6__["intlShape"],
|
||
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
|
||
}),
|
||
isFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
isPlayerOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
isEmbedded: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
projectChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
projectId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
compilerOptions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({
|
||
enabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
warpTimer: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool
|
||
}),
|
||
runtimeOptions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({
|
||
miscLimits: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
fencing: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
maxClones: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number
|
||
}),
|
||
highQualityPen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
framerate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,
|
||
interpolation: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
turbo: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
onSetIsFullScreen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onSetIsPlayerOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onSetProjectId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onSetUsername: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
reduxProjectId: 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]),
|
||
routingStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(Object.keys(routers)),
|
||
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_4___default.a)
|
||
};
|
||
StateManagerComponent.defaultProps = {
|
||
routingStyle: "filehash"
|
||
};
|
||
|
||
const mapStateToProps = state => ({
|
||
customStageSize: state.scratchGui.customStageSize,
|
||
isFullScreen: state.scratchGui.mode.isFullScreen,
|
||
isPlayerOnly: state.scratchGui.mode.isPlayerOnly,
|
||
isEmbedded: state.scratchGui.mode.isEmbedded,
|
||
projectChanged: state.scratchGui.projectChanged,
|
||
reduxProjectId: state.scratchGui.projectState.projectId,
|
||
compilerOptions: state.scratchGui.tw.compilerOptions,
|
||
runtimeOptions: state.scratchGui.tw.runtimeOptions,
|
||
highQualityPen: state.scratchGui.tw.highQualityPen,
|
||
framerate: state.scratchGui.tw.framerate,
|
||
interpolation: state.scratchGui.tw.interpolation,
|
||
turbo: state.scratchGui.vmStatus.turbo,
|
||
username: state.scratchGui.tw.username,
|
||
vm: state.scratchGui.vm
|
||
});
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
onSetIsFullScreen: isFullScreen => dispatch(Object(_reducers_mode__WEBPACK_IMPORTED_MODULE_9__["setFullScreen"])(isFullScreen)),
|
||
onSetIsPlayerOnly: isPlayerOnly => dispatch(Object(_reducers_mode__WEBPACK_IMPORTED_MODULE_9__["setPlayer"])(isPlayerOnly)),
|
||
onSetProjectId: projectId => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_8__["setProjectId"])(projectId)),
|
||
onSetUsername: username => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_7__["setUsername"])(username))
|
||
});
|
||
|
||
return Object(react_intl__WEBPACK_IMPORTED_MODULE_6__["injectIntl"])(Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])(mapStateToProps, mapDispatchToProps)(StateManagerComponent));
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-svg-fixer.js":
|
||
/*!*********************************!*\
|
||
!*** ./src/lib/tw-svg-fixer.js ***!
|
||
\*********************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony import */ var _tw_text_encoder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tw-text-encoder */ "./src/lib/tw-text-encoder.js");
|
||
|
||
|
||
const fixSVG = fileData => {
|
||
// width="100%" and height="100%" on SVGs can break things
|
||
// Demo: https://scratch.mit.edu/projects/447085841/
|
||
// Based on: https://github.com/ScratchAddons/ScratchAddons/pull/748
|
||
try {
|
||
const bytes = new Uint8Array(fileData);
|
||
const str = new _tw_text_encoder__WEBPACK_IMPORTED_MODULE_0__["TextDecoder"]().decode(bytes);
|
||
const xmlDocument = new DOMParser().parseFromString(str, 'text/xml');
|
||
const svgElement = xmlDocument.children[0];
|
||
|
||
if (svgElement.height.baseVal.valueAsString === '100%' && svgElement.width.baseVal.valueAsString === '100%') {
|
||
svgElement.removeAttribute('height');
|
||
svgElement.removeAttribute('width');
|
||
const fixed = xmlDocument.documentElement.outerHTML;
|
||
return new _tw_text_encoder__WEBPACK_IMPORTED_MODULE_0__["TextEncoder"]().encode(fixed).buffer;
|
||
}
|
||
|
||
return fileData;
|
||
} catch (e) {
|
||
return fileData;
|
||
}
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (fixSVG);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-text-encoder.js":
|
||
/*!************************************!*\
|
||
!*** ./src/lib/tw-text-encoder.js ***!
|
||
\************************************/
|
||
/*! exports provided: TextEncoder, TextDecoder */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextEncoder", function() { return _TextEncoder; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDecoder", function() { return _TextDecoder; });
|
||
const _TextEncoder = typeof TextEncoder === 'function' ? TextEncoder : class TextEncoder {
|
||
constructor(encoding) {
|
||
if (typeof encoding !== 'undefined' && encoding !== null && encoding !== 'utf-8' && encoding !== 'utf8') {
|
||
throw new Error('Encoding is not supported');
|
||
}
|
||
|
||
this.encoding = 'utf-8';
|
||
}
|
||
|
||
encode(str) {
|
||
if (typeof str !== 'string') {
|
||
throw new TypeError('Argument is not a string');
|
||
}
|
||
|
||
str = unescape(encodeURIComponent(str));
|
||
const arr = new Uint8Array(str.length);
|
||
|
||
for (let i = 0; i < str.length; i++) {
|
||
arr[i] = str.charCodeAt(i);
|
||
}
|
||
|
||
return arr;
|
||
}
|
||
|
||
};
|
||
|
||
const _TextDecoder = typeof TextDecoder === 'function' ? TextDecoder : class TextDecoder {
|
||
constructor(encoding) {
|
||
if (typeof encoding !== 'undefined' && encoding !== null && encoding !== 'utf-8' && encoding !== 'utf8') {
|
||
throw new Error('Encoding is not supported');
|
||
}
|
||
|
||
this.encoding = 'utf-8';
|
||
}
|
||
|
||
decode(view) {
|
||
const array = new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
|
||
let result = '';
|
||
|
||
for (let i = 0; i < array.length; i++) {
|
||
result += String.fromCharCode(array[i]);
|
||
}
|
||
|
||
return decodeURIComponent(escape(result));
|
||
}
|
||
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/tw-username.js":
|
||
/*!********************************!*\
|
||
!*** ./src/lib/tw-username.js ***!
|
||
\********************************/
|
||
/*! exports provided: generateRandomUsername */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generateRandomUsername", function() { return generateRandomUsername; });
|
||
const generateRandomUsername = () => {
|
||
const DIGITS = 4;
|
||
const randomNumber = Math.round(Math.random() * 10 ** DIGITS);
|
||
const randomId = randomNumber.toString().padStart(DIGITS, '0');
|
||
const randomUsername = "player".concat(randomId);
|
||
return randomUsername;
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/variable-utils.js":
|
||
/*!***********************************!*\
|
||
!*** ./src/lib/variable-utils.js ***!
|
||
\***********************************/
|
||
/*! exports provided: getVariable, getVariableValue, setVariableValue */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVariable", function() { return getVariable; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVariableValue", function() { return getVariableValue; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setVariableValue", function() { return setVariableValue; });
|
||
// Utility functions for updating variables in the VM
|
||
// TODO (VM#1145) these should be moved to top-level VM API
|
||
const getVariable = (vm, targetId, variableId) => {
|
||
const target = targetId ? vm.runtime.getTargetById(targetId) : vm.runtime.getTargetForStage();
|
||
return target.variables[variableId];
|
||
};
|
||
|
||
const getVariableValue = (vm, targetId, variableId) => {
|
||
const variable = getVariable(vm, targetId, variableId); // If array, return a new copy for mutating, ensuring that updates stay immutable.
|
||
|
||
if (variable.value instanceof Array) return variable.value.slice();
|
||
return variable.value;
|
||
};
|
||
|
||
const setVariableValue = (vm, targetId, variableId, value) => {
|
||
getVariable(vm, targetId, variableId).value = value;
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/video/camera.js":
|
||
/*!*********************************!*\
|
||
!*** ./src/lib/video/camera.js ***!
|
||
\*********************************/
|
||
/*! exports provided: requestVideoStream, requestDisableVideo */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "requestVideoStream", function() { return requestVideoStream; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "requestDisableVideo", function() { return requestDisableVideo; });
|
||
/* harmony import */ var get_user_media_promise__WEBPACK_IMPORTED_MODULE_0__ = __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_0___default = /*#__PURE__*/__webpack_require__.n(get_user_media_promise__WEBPACK_IMPORTED_MODULE_0__);
|
||
// Single Setup For All Video Streams used by the GUI
|
||
// While VideoProvider uses a private _singleSetup
|
||
// property to ensure that each instance of a VideoProvider
|
||
// use the same setup, this ensures that all instances
|
||
// of VideoProviders use a single stream. This way, closing a camera modal
|
||
// does not affect the video on the stage, and a program running and disabling
|
||
// video on the stage will not affect the camera modal's video.
|
||
|
||
const requestStack = [];
|
||
|
||
const requestVideoStream = videoDesc => {
|
||
let streamPromise;
|
||
|
||
if (requestStack.length === 0) {
|
||
streamPromise = get_user_media_promise__WEBPACK_IMPORTED_MODULE_0___default()({
|
||
audio: false,
|
||
video: videoDesc
|
||
});
|
||
requestStack.push(streamPromise);
|
||
} else if (requestStack.length > 0) {
|
||
streamPromise = requestStack[0];
|
||
requestStack.push(true);
|
||
}
|
||
|
||
return streamPromise;
|
||
};
|
||
|
||
const requestDisableVideo = () => {
|
||
requestStack.pop();
|
||
if (requestStack.length > 0) return false;
|
||
return true;
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/video/video-provider.js":
|
||
/*!*****************************************!*\
|
||
!*** ./src/lib/video/video-provider.js ***!
|
||
\*****************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony import */ var _camera_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./camera.js */ "./src/lib/video/camera.js");
|
||
/* harmony import */ var _log_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../log.js */ "./src/lib/log.js");
|
||
|
||
|
||
/**
|
||
* Video Manager for video extensions.
|
||
*/
|
||
|
||
class VideoProvider {
|
||
constructor() {
|
||
/**
|
||
* Default value for mirrored frames.
|
||
* @type boolean
|
||
*/
|
||
this.mirror = true;
|
||
/**
|
||
* Cache frames for this many ms.
|
||
* @type number
|
||
*/
|
||
|
||
this._frameCacheTimeout = 16;
|
||
/**
|
||
* DOM Video element
|
||
* @private
|
||
*/
|
||
|
||
this._video = null;
|
||
/**
|
||
* Usermedia stream track
|
||
* @private
|
||
*/
|
||
|
||
this._track = null;
|
||
/**
|
||
* Stores some canvas/frame data per resolution/mirror states
|
||
*/
|
||
|
||
this._workspace = [];
|
||
}
|
||
|
||
static get FORMAT_IMAGE_DATA() {
|
||
return 'image-data';
|
||
}
|
||
|
||
static get FORMAT_CANVAS() {
|
||
return 'canvas';
|
||
}
|
||
/**
|
||
* Dimensions the video stream is analyzed at after its rendered to the
|
||
* sample canvas.
|
||
* @type {Array.<number>}
|
||
*/
|
||
|
||
|
||
static get DIMENSIONS() {
|
||
return [480, 360];
|
||
}
|
||
/**
|
||
* Order preview drawable is inserted at in the renderer.
|
||
* @type {number}
|
||
*/
|
||
|
||
|
||
static get ORDER() {
|
||
return 1;
|
||
}
|
||
/**
|
||
* Get the HTML video element containing the stream
|
||
*/
|
||
|
||
|
||
get video() {
|
||
return this._video;
|
||
}
|
||
/**
|
||
* Request video be enabled. Sets up video, creates video skin and enables preview.
|
||
*
|
||
* @return {Promise.<Video>} resolves a promise to this video provider when video is ready.
|
||
*/
|
||
|
||
|
||
enableVideo() {
|
||
this.enabled = true;
|
||
return this._setupVideo();
|
||
}
|
||
/**
|
||
* Disable video stream (turn video off)
|
||
*/
|
||
|
||
|
||
disableVideo() {
|
||
this.enabled = false; // If we have begun a setup process, call _teardown after it completes
|
||
|
||
if (this._singleSetup) {
|
||
this._singleSetup.then(this._teardown.bind(this)).catch(err => this.onError(err));
|
||
}
|
||
}
|
||
/**
|
||
* async part of disableVideo
|
||
* @private
|
||
*/
|
||
|
||
|
||
_teardown() {
|
||
// we might be asked to re-enable before _teardown is called, just ignore it.
|
||
if (this.enabled === false) {
|
||
const disableTrack = Object(_camera_js__WEBPACK_IMPORTED_MODULE_0__["requestDisableVideo"])();
|
||
this._singleSetup = null; // by clearing refs to video and track, we should lose our hold over the camera
|
||
|
||
this._video = null;
|
||
|
||
if (this._track && disableTrack) {
|
||
this._track.stop();
|
||
}
|
||
|
||
this._track = null;
|
||
}
|
||
}
|
||
/**
|
||
* Return frame data from the video feed in a specified dimensions, format, and mirroring.
|
||
*
|
||
* @param {object} frameInfo A descriptor of the frame you would like to receive.
|
||
* @param {Array.<number>} frameInfo.dimensions [width, height] array of numbers. Defaults to [480,360]
|
||
* @param {boolean} frameInfo.mirror If you specificly want a mirror/non-mirror frame, defaults to true
|
||
* @param {string} frameInfo.format Requested video format, available formats are 'image-data' and 'canvas'.
|
||
* @param {number} frameInfo.cacheTimeout Will reuse previous image data if the time since capture is less than
|
||
* the cacheTimeout. Defaults to 16ms.
|
||
*
|
||
* @return {ArrayBuffer|Canvas|string|null} Frame data in requested format, null when errors.
|
||
*/
|
||
|
||
|
||
getFrame({
|
||
dimensions = VideoProvider.DIMENSIONS,
|
||
mirror = this.mirror,
|
||
format = VideoProvider.FORMAT_IMAGE_DATA,
|
||
cacheTimeout = this._frameCacheTimeout
|
||
}) {
|
||
if (!this.videoReady) {
|
||
return null;
|
||
}
|
||
|
||
const [width, height] = dimensions;
|
||
|
||
const workspace = this._getWorkspace({
|
||
dimensions,
|
||
mirror: Boolean(mirror)
|
||
});
|
||
|
||
const {
|
||
videoWidth,
|
||
videoHeight
|
||
} = this._video;
|
||
const {
|
||
canvas,
|
||
context,
|
||
lastUpdate,
|
||
cacheData
|
||
} = workspace;
|
||
const now = Date.now(); // if the canvas hasn't been updated...
|
||
|
||
if (lastUpdate + cacheTimeout < now) {
|
||
if (mirror) {
|
||
context.scale(-1, 1);
|
||
context.translate(width * -1, 0);
|
||
}
|
||
|
||
context.drawImage(this._video, // source x, y, width, height
|
||
0, 0, videoWidth, videoHeight, // dest x, y, width, height
|
||
0, 0, width, height); // context.resetTransform() doesn't work on Edge but the following should
|
||
|
||
context.setTransform(1, 0, 0, 1, 0, 0);
|
||
workspace.lastUpdate = now;
|
||
} // each data type has it's own data cache, but the canvas is the same
|
||
|
||
|
||
if (!cacheData[format]) {
|
||
cacheData[format] = {
|
||
lastUpdate: 0
|
||
};
|
||
}
|
||
|
||
const formatCache = cacheData[format];
|
||
|
||
if (formatCache.lastUpdate + cacheTimeout < now) {
|
||
if (format === VideoProvider.FORMAT_IMAGE_DATA) {
|
||
formatCache.lastData = context.getImageData(0, 0, width, height);
|
||
} else if (format === VideoProvider.FORMAT_CANVAS) {
|
||
// this will never change
|
||
formatCache.lastUpdate = Infinity;
|
||
formatCache.lastData = canvas;
|
||
} else {
|
||
_log_js__WEBPACK_IMPORTED_MODULE_1__["default"].error("video io error - unimplemented format ".concat(format)); // cache the null result forever, don't log about it again..
|
||
|
||
formatCache.lastUpdate = Infinity;
|
||
formatCache.lastData = null;
|
||
} // rather than set to now, this data is as stale as it's canvas is
|
||
|
||
|
||
formatCache.lastUpdate = Math.max(workspace.lastUpdate, formatCache.lastUpdate);
|
||
}
|
||
|
||
return formatCache.lastData;
|
||
}
|
||
/**
|
||
* Method called when an error happens. Default implementation is just to log error.
|
||
*
|
||
* @abstract
|
||
* @param {Error} error An error object from getUserMedia or other source of error.
|
||
*/
|
||
|
||
|
||
onError(error) {
|
||
_log_js__WEBPACK_IMPORTED_MODULE_1__["default"].error('Unhandled video io device error', error);
|
||
}
|
||
/**
|
||
* Create a video stream.
|
||
* @private
|
||
* @return {Promise} When video has been received, rejected if video is not received
|
||
*/
|
||
|
||
|
||
_setupVideo() {
|
||
// We cache the result of this setup so that we can only ever have a single
|
||
// video/getUserMedia request happen at a time.
|
||
if (this._singleSetup) {
|
||
return this._singleSetup;
|
||
}
|
||
|
||
this._singleSetup = Object(_camera_js__WEBPACK_IMPORTED_MODULE_0__["requestVideoStream"])({
|
||
width: {
|
||
min: 480,
|
||
ideal: 640
|
||
},
|
||
height: {
|
||
min: 360,
|
||
ideal: 480
|
||
}
|
||
}).then(stream => {
|
||
this._video = document.createElement('video'); // Use the new srcObject API, falling back to createObjectURL
|
||
|
||
try {
|
||
this._video.srcObject = stream;
|
||
} catch (error) {
|
||
this._video.src = window.URL.createObjectURL(stream);
|
||
} // Hint to the stream that it should load. A standard way to do this
|
||
// is add the video tag to the DOM. Since this extension wants to
|
||
// hide the video tag and instead render a sample of the stream into
|
||
// the webgl rendered Scratch canvas, another hint like this one is
|
||
// needed.
|
||
|
||
|
||
this._video.play(); // Needed for Safari/Firefox, Chrome auto-plays.
|
||
|
||
|
||
this._track = stream.getTracks()[0];
|
||
return this;
|
||
}).catch(error => {
|
||
this._singleSetup = null;
|
||
this.onError(error);
|
||
});
|
||
return this._singleSetup;
|
||
}
|
||
|
||
get videoReady() {
|
||
if (!this.enabled) {
|
||
return false;
|
||
}
|
||
|
||
if (!this._video) {
|
||
return false;
|
||
}
|
||
|
||
if (!this._track) {
|
||
return false;
|
||
}
|
||
|
||
const {
|
||
videoWidth,
|
||
videoHeight
|
||
} = this._video;
|
||
|
||
if (typeof videoWidth !== 'number' || typeof videoHeight !== 'number') {
|
||
return false;
|
||
}
|
||
|
||
if (videoWidth === 0 || videoHeight === 0) {
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
/**
|
||
* get an internal workspace for canvas/context/caches
|
||
* this uses some document stuff to create a canvas and what not, probably needs abstraction
|
||
* into the renderer layer?
|
||
* @private
|
||
* @return {object} A workspace for canvas/data storage. Internal format not documented intentionally
|
||
*/
|
||
|
||
|
||
_getWorkspace({
|
||
dimensions,
|
||
mirror
|
||
}) {
|
||
let workspace = this._workspace.find(space => space.dimensions.join('-') === dimensions.join('-') && space.mirror === mirror);
|
||
|
||
if (!workspace) {
|
||
workspace = {
|
||
dimensions,
|
||
mirror,
|
||
canvas: document.createElement('canvas'),
|
||
lastUpdate: 0,
|
||
cacheData: {}
|
||
};
|
||
workspace.canvas.width = dimensions[0];
|
||
workspace.canvas.height = dimensions[1];
|
||
workspace.context = workspace.canvas.getContext('2d');
|
||
|
||
this._workspace.push(workspace);
|
||
}
|
||
|
||
return workspace;
|
||
}
|
||
|
||
}
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (VideoProvider);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/vm-listener-hoc.jsx":
|
||
/*!*************************************!*\
|
||
!*** ./src/lib/vm-listener-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 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 _reducers_targets__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../reducers/targets */ "./src/reducers/targets.js");
|
||
/* harmony import */ var _reducers_block_drag__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/block-drag */ "./src/reducers/block-drag.js");
|
||
/* harmony import */ var _reducers_monitors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/monitors */ "./src/reducers/monitors.js");
|
||
/* harmony import */ var _reducers_project_changed__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../reducers/project-changed */ "./src/reducers/project-changed.js");
|
||
/* harmony import */ var _reducers_vm_status__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../reducers/vm-status */ "./src/reducers/vm-status.js");
|
||
/* harmony import */ var _reducers_alerts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../reducers/alerts */ "./src/reducers/alerts.js");
|
||
/* harmony import */ var _reducers_mic_indicator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../reducers/mic-indicator */ "./src/reducers/mic-indicator.js");
|
||
/* harmony import */ var _reducers_tw__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../reducers/tw */ "./src/reducers/tw.js");
|
||
/* harmony import */ var _reducers_custom_stage_size__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../reducers/custom-stage-size */ "./src/reducers/custom-stage-size.js");
|
||
const _excluded = ["attachKeyboardEvents", "projectChanged", "shouldUpdateTargets", "shouldUpdateProjectChanged", "onBlockDragUpdate", "onGreenFlag", "onKeyDown", "onKeyUp", "onMicListeningUpdate", "onMonitorsUpdate", "onTargetsUpdate", "onProjectChanged", "onProjectRunStart", "onProjectRunStop", "onProjectSaved", "onRuntimeStarted", "onRuntimeStopped", "onTurboModeOff", "onTurboModeOn", "hasCloudVariables", "onHasCloudVariablesChanged", "onFramerateChanged", "onInterpolationChanged", "onCompilerOptionsChanged", "onRuntimeOptionsChanged", "onStageSizeChanged", "onCompileError", "onClearCompileErrors", "onShowExtensionAlert"];
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
let compileErrorCounter = 0;
|
||
/*
|
||
* Higher Order Component to manage events emitted by the VM
|
||
* @param {React.Component} WrappedComponent component to manage VM events for
|
||
* @returns {React.Component} connected component with vm events bound to redux
|
||
*/
|
||
|
||
const vmListenerHOC = function vmListenerHOC(WrappedComponent) {
|
||
class VMListener extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['handleKeyDown', 'handleKeyUp', 'handleProjectChanged', 'handleTargetsUpdate', 'handleCloudDataUpdate', 'handleCompileError']); // We have to start listening to the vm here rather than in
|
||
// componentDidMount because the HOC mounts the wrapped component,
|
||
// so the HOC componentDidMount triggers after the wrapped component
|
||
// mounts.
|
||
// If the wrapped component uses the vm in componentDidMount, then
|
||
// we need to start listening before mounting the wrapped component.
|
||
|
||
this.props.vm.on('targetsUpdate', this.handleTargetsUpdate);
|
||
this.props.vm.on('MONITORS_UPDATE', this.props.onMonitorsUpdate);
|
||
this.props.vm.on('BLOCK_DRAG_UPDATE', this.props.onBlockDragUpdate);
|
||
this.props.vm.on('TURBO_MODE_ON', this.props.onTurboModeOn);
|
||
this.props.vm.on('TURBO_MODE_OFF', this.props.onTurboModeOff);
|
||
this.props.vm.on('PROJECT_RUN_START', this.props.onProjectRunStart);
|
||
this.props.vm.on('PROJECT_RUN_STOP', this.props.onProjectRunStop);
|
||
this.props.vm.on('PROJECT_CHANGED', this.handleProjectChanged);
|
||
this.props.vm.on('RUNTIME_STARTED', this.props.onRuntimeStarted);
|
||
this.props.vm.on('RUNTIME_STOPPED', this.props.onRuntimeStopped);
|
||
this.props.vm.on('PROJECT_START', this.props.onGreenFlag);
|
||
this.props.vm.on('PERIPHERAL_CONNECTION_LOST_ERROR', this.props.onShowExtensionAlert);
|
||
this.props.vm.on('MIC_LISTENING', this.props.onMicListeningUpdate);
|
||
this.props.vm.on('MIC_LISTENING', this.props.onMicListeningUpdate); // tw: add handlers for our events
|
||
|
||
this.props.vm.on('HAS_CLOUD_DATA_UPDATE', this.handleCloudDataUpdate);
|
||
this.props.vm.on('COMPILER_OPTIONS_CHANGED', this.props.onCompilerOptionsChanged);
|
||
this.props.vm.on('RUNTIME_OPTIONS_CHANGED', this.props.onRuntimeOptionsChanged);
|
||
this.props.vm.on('FRAMERATE_CHANGED', this.props.onFramerateChanged);
|
||
this.props.vm.on('INTERPOLATION_CHANGED', this.props.onInterpolationChanged);
|
||
this.props.vm.on('COMPILE_ERROR', this.handleCompileError);
|
||
this.props.vm.on('RUNTIME_STARTED', this.props.onClearCompileErrors);
|
||
this.props.vm.on('STAGE_SIZE_CHANGED', this.props.onStageSizeChanged);
|
||
}
|
||
|
||
componentDidMount() {
|
||
if (this.props.attachKeyboardEvents) {
|
||
document.addEventListener('keydown', this.handleKeyDown);
|
||
document.addEventListener('keyup', this.handleKeyUp);
|
||
}
|
||
|
||
this.props.vm.postIOData('userData', {
|
||
username: this.props.username
|
||
});
|
||
}
|
||
|
||
componentDidUpdate(prevProps) {
|
||
if (prevProps.username !== this.props.username) {
|
||
this.props.vm.postIOData('userData', {
|
||
username: this.props.username
|
||
});
|
||
} // Re-request a targets update when the shouldUpdateTargets state changes to true
|
||
// i.e. when the editor transitions out of fullscreen/player only modes
|
||
|
||
|
||
if (this.props.shouldUpdateTargets && !prevProps.shouldUpdateTargets) {
|
||
this.props.vm.emitTargetsUpdate(false
|
||
/* Emit the event, but do not trigger project change */
|
||
);
|
||
}
|
||
}
|
||
|
||
componentWillUnmount() {
|
||
this.props.vm.removeListener('PERIPHERAL_CONNECTION_LOST_ERROR', this.props.onShowExtensionAlert);
|
||
|
||
if (this.props.attachKeyboardEvents) {
|
||
document.removeEventListener('keydown', this.handleKeyDown);
|
||
document.removeEventListener('keyup', this.handleKeyUp);
|
||
}
|
||
}
|
||
|
||
handleCloudDataUpdate(hasCloudVariables) {
|
||
if (this.props.hasCloudVariables !== hasCloudVariables) {
|
||
this.props.onHasCloudVariablesChanged(hasCloudVariables);
|
||
}
|
||
} // tw: handling for compile errors
|
||
|
||
|
||
handleCompileError(target, error) {
|
||
const errorMessage = "".concat(error); // Ignore certain types of known errors
|
||
// TODO: fix the root cause of all of these
|
||
|
||
if (errorMessage.includes('edge-activated hat')) {
|
||
return;
|
||
} // Ignore intentonal errors
|
||
|
||
|
||
if (errorMessage.includes('Script explicitly disables compilation')) {
|
||
return;
|
||
}
|
||
|
||
this.props.onCompileError({
|
||
sprite: target.getName(),
|
||
error: errorMessage,
|
||
id: compileErrorCounter++
|
||
});
|
||
}
|
||
|
||
handleProjectChanged() {
|
||
if (this.props.shouldUpdateProjectChanged && !this.props.projectChanged) {
|
||
this.props.onProjectChanged();
|
||
}
|
||
}
|
||
|
||
handleTargetsUpdate(data) {
|
||
if (this.props.shouldUpdateTargets) {
|
||
this.props.onTargetsUpdate(data);
|
||
}
|
||
}
|
||
|
||
handleKeyDown(e) {
|
||
// Don't capture keys intended for Blockly inputs.
|
||
if (e.target !== document && e.target !== document.body) return;
|
||
const key = !e.key || e.key === 'Dead' ? e.keyCode : e.key;
|
||
this.props.vm.postIOData('keyboard', {
|
||
key: key,
|
||
keyCode: e.keyCode,
|
||
isDown: true
|
||
}); // Prevent space/arrow key from scrolling the page.
|
||
|
||
if (e.keyCode === 32 || e.keyCode >= 37 && e.keyCode <= 40) {
|
||
// 37, 38, 39, 40 are arrows
|
||
e.preventDefault();
|
||
} // tw: prevent backspace from going back
|
||
|
||
|
||
if (e.keyCode === 8) {
|
||
e.preventDefault();
|
||
} // tw: prevent ' and / from opening quick find in Firefox
|
||
|
||
|
||
if (e.keyCode === 222 || e.keyCode === 191) {
|
||
e.preventDefault();
|
||
}
|
||
}
|
||
|
||
handleKeyUp(e) {
|
||
// Always capture up events,
|
||
// even those that have switched to other targets.
|
||
const key = !e.key || e.key === 'Dead' ? e.keyCode : e.key;
|
||
this.props.vm.postIOData('keyboard', {
|
||
key: key,
|
||
keyCode: e.keyCode,
|
||
isDown: false
|
||
}); // E.g., prevent scroll.
|
||
|
||
if (e.target !== document && e.target !== document.body) {
|
||
e.preventDefault();
|
||
}
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
/* eslint-disable no-unused-vars */
|
||
attachKeyboardEvents,
|
||
projectChanged,
|
||
shouldUpdateTargets,
|
||
shouldUpdateProjectChanged,
|
||
onBlockDragUpdate,
|
||
onGreenFlag,
|
||
onKeyDown,
|
||
onKeyUp,
|
||
onMicListeningUpdate,
|
||
onMonitorsUpdate,
|
||
onTargetsUpdate,
|
||
onProjectChanged,
|
||
onProjectRunStart,
|
||
onProjectRunStop,
|
||
onProjectSaved,
|
||
onRuntimeStarted,
|
||
onRuntimeStopped,
|
||
onTurboModeOff,
|
||
onTurboModeOn,
|
||
hasCloudVariables,
|
||
onHasCloudVariablesChanged,
|
||
onFramerateChanged,
|
||
onInterpolationChanged,
|
||
onCompilerOptionsChanged,
|
||
onRuntimeOptionsChanged,
|
||
onStageSizeChanged,
|
||
onCompileError,
|
||
onClearCompileErrors,
|
||
onShowExtensionAlert
|
||
} = _this$props,
|
||
props = _objectWithoutProperties(_this$props, _excluded);
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(WrappedComponent, props);
|
||
}
|
||
|
||
}
|
||
|
||
VMListener.propTypes = {
|
||
attachKeyboardEvents: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
onBlockDragUpdate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onGreenFlag: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onKeyDown: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onKeyUp: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onMicListeningUpdate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onMonitorsUpdate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onProjectChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onProjectRunStart: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onProjectRunStop: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onProjectSaved: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onRuntimeStarted: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onRuntimeStopped: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onShowExtensionAlert: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onTargetsUpdate: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onTurboModeOff: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onTurboModeOn: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
hasCloudVariables: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
onHasCloudVariablesChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onFramerateChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onInterpolationChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onCompilerOptionsChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onRuntimeOptionsChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,
|
||
onStageSizeChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onCompileError: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onClearCompileErrors: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
projectChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
shouldUpdateTargets: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
shouldUpdateProjectChanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
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_3___default.a).isRequired
|
||
};
|
||
VMListener.defaultProps = {
|
||
attachKeyboardEvents: true,
|
||
onGreenFlag: () => ({})
|
||
};
|
||
|
||
const mapStateToProps = state => ({
|
||
hasCloudVariables: state.scratchGui.tw.hasCloudVariables,
|
||
projectChanged: state.scratchGui.projectChanged,
|
||
// Do not emit target or project updates in fullscreen or player only mode
|
||
// or when recording sounds (it leads to garbled recordings on low-power machines)
|
||
shouldUpdateTargets: !state.scratchGui.mode.isFullScreen && !state.scratchGui.mode.isPlayerOnly && !state.scratchGui.modals.soundRecorder,
|
||
// Do not update the projectChanged state in fullscreen or player only mode
|
||
shouldUpdateProjectChanged: !state.scratchGui.mode.isFullScreen && !state.scratchGui.mode.isPlayerOnly,
|
||
vm: state.scratchGui.vm,
|
||
username: state.session && state.session.session && state.session.session.user ? state.session.session.user.username : state.scratchGui.tw ? state.scratchGui.tw.username : ''
|
||
});
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
onTargetsUpdate: data => {
|
||
dispatch(Object(_reducers_targets__WEBPACK_IMPORTED_MODULE_5__["updateTargets"])(data.targetList, data.editingTarget));
|
||
},
|
||
onMonitorsUpdate: monitorList => {
|
||
dispatch(Object(_reducers_monitors__WEBPACK_IMPORTED_MODULE_7__["updateMonitors"])(monitorList));
|
||
},
|
||
onBlockDragUpdate: areBlocksOverGui => {
|
||
dispatch(Object(_reducers_block_drag__WEBPACK_IMPORTED_MODULE_6__["updateBlockDrag"])(areBlocksOverGui));
|
||
},
|
||
onProjectRunStart: () => dispatch(Object(_reducers_vm_status__WEBPACK_IMPORTED_MODULE_9__["setRunningState"])(true)),
|
||
onProjectRunStop: () => dispatch(Object(_reducers_vm_status__WEBPACK_IMPORTED_MODULE_9__["setRunningState"])(false)),
|
||
onProjectChanged: () => dispatch(Object(_reducers_project_changed__WEBPACK_IMPORTED_MODULE_8__["setProjectChanged"])()),
|
||
onProjectSaved: () => dispatch(Object(_reducers_project_changed__WEBPACK_IMPORTED_MODULE_8__["setProjectUnchanged"])()),
|
||
onRuntimeStarted: () => dispatch(Object(_reducers_vm_status__WEBPACK_IMPORTED_MODULE_9__["setStartedState"])(true)),
|
||
onRuntimeStopped: () => dispatch(Object(_reducers_vm_status__WEBPACK_IMPORTED_MODULE_9__["setStartedState"])(false)),
|
||
onTurboModeOn: () => dispatch(Object(_reducers_vm_status__WEBPACK_IMPORTED_MODULE_9__["setTurboState"])(true)),
|
||
onTurboModeOff: () => dispatch(Object(_reducers_vm_status__WEBPACK_IMPORTED_MODULE_9__["setTurboState"])(false)),
|
||
onHasCloudVariablesChanged: hasCloudVariables => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_12__["setHasCloudVariables"])(hasCloudVariables)),
|
||
onFramerateChanged: framerate => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_12__["setFramerateState"])(framerate)),
|
||
onInterpolationChanged: interpolation => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_12__["setInterpolationState"])(interpolation)),
|
||
onCompilerOptionsChanged: options => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_12__["setCompilerOptionsState"])(options)),
|
||
onRuntimeOptionsChanged: options => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_12__["setRuntimeOptionsState"])(options)),
|
||
onStageSizeChanged: (width, height) => dispatch(Object(_reducers_custom_stage_size__WEBPACK_IMPORTED_MODULE_13__["setCustomStageSize"])(width, height)),
|
||
onCompileError: errors => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_12__["addCompileError"])(errors)),
|
||
onClearCompileErrors: () => dispatch(Object(_reducers_tw__WEBPACK_IMPORTED_MODULE_12__["clearCompileErrors"])()),
|
||
onShowExtensionAlert: data => {
|
||
dispatch(Object(_reducers_alerts__WEBPACK_IMPORTED_MODULE_10__["showExtensionAlert"])(data));
|
||
},
|
||
onMicListeningUpdate: listening => {
|
||
dispatch(Object(_reducers_mic_indicator__WEBPACK_IMPORTED_MODULE_11__["updateMicIndicator"])(listening));
|
||
}
|
||
});
|
||
|
||
return Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(mapStateToProps, mapDispatchToProps)(VMListener);
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (vmListenerHOC);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/lib/vm-manager-hoc.jsx":
|
||
/*!************************************!*\
|
||
!*** ./src/lib/vm-manager-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 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 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 _reducers_project_changed__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../reducers/project-changed */ "./src/reducers/project-changed.js");
|
||
/* harmony import */ var _reducers_project_state__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../reducers/project-state */ "./src/reducers/project-state.js");
|
||
const _excluded = ["fontsLoaded", "loadingState", "locale", "messages", "isStarted", "onError", "onLoadedProject", "onSetProjectUnchanged", "projectData", "isLoadingWithId", "vm"];
|
||
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
* Higher Order Component to manage events emitted by the VM
|
||
* @param {React.Component} WrappedComponent component to manage VM events for
|
||
* @returns {React.Component} connected component with vm events bound to redux
|
||
*/
|
||
|
||
const vmManagerHOC = function vmManagerHOC(WrappedComponent) {
|
||
class VMManager extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
lodash_bindall__WEBPACK_IMPORTED_MODULE_0___default()(this, ['loadProject']);
|
||
}
|
||
|
||
componentDidMount() {
|
||
if (!this.props.vm.initialized) {
|
||
window.vm = this.props.vm;
|
||
this.audioEngine = new scratch_audio__WEBPACK_IMPORTED_MODULE_5___default.a();
|
||
this.props.vm.attachAudioEngine(this.audioEngine);
|
||
this.props.vm.initialized = true;
|
||
this.props.vm.setLocale(this.props.locale, this.props.messages);
|
||
}
|
||
|
||
if (!this.props.isPlayerOnly && !this.props.isStarted) {
|
||
this.props.vm.start();
|
||
}
|
||
}
|
||
|
||
componentDidUpdate(prevProps) {
|
||
// if project is in loading state, AND fonts are loaded,
|
||
// and they weren't both that way until now... load project!
|
||
if (this.props.isLoadingWithId && this.props.fontsLoaded && (!prevProps.isLoadingWithId || !prevProps.fontsLoaded)) {
|
||
this.loadProject();
|
||
} // Start the VM if entering editor mode with an unstarted vm
|
||
|
||
|
||
if (!this.props.isPlayerOnly && !this.props.isStarted) {
|
||
this.props.vm.start();
|
||
}
|
||
}
|
||
|
||
loadProject() {
|
||
// tw: stop when loading new project
|
||
this.props.vm.stop();
|
||
return this.props.vm.loadProject(this.props.projectData).then(() => {
|
||
this.props.onLoadedProject(this.props.loadingState, this.props.canSave); // Wrap in a setTimeout because skin loading in
|
||
// the renderer can be async.
|
||
|
||
setTimeout(() => this.props.onSetProjectUnchanged()); // If the vm is not running, call draw on the renderer manually
|
||
// This draws the state of the loaded project with no blocks running
|
||
// which closely matches the 2.0 behavior, except for monitors–
|
||
// 2.0 runs monitors and shows updates (e.g. timer monitor)
|
||
// before the VM starts running other hat blocks.
|
||
|
||
if (!this.props.isStarted) {
|
||
// Wrap in a setTimeout because skin loading in
|
||
// the renderer can be async.
|
||
setTimeout(() => this.props.vm.renderer.draw());
|
||
}
|
||
}).catch(e => {
|
||
this.props.onError(e);
|
||
});
|
||
}
|
||
|
||
render() {
|
||
const _this$props = this.props,
|
||
{
|
||
/* eslint-disable no-unused-vars */
|
||
fontsLoaded,
|
||
loadingState,
|
||
locale,
|
||
messages,
|
||
isStarted,
|
||
onError: onErrorProp,
|
||
onLoadedProject: onLoadedProjectProp,
|
||
onSetProjectUnchanged,
|
||
projectData,
|
||
|
||
/* eslint-enable no-unused-vars */
|
||
isLoadingWithId: isLoadingWithIdProp,
|
||
vm
|
||
} = _this$props,
|
||
componentProps = _objectWithoutProperties(_this$props, _excluded);
|
||
|
||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(WrappedComponent, _extends({
|
||
isLoading: isLoadingWithIdProp,
|
||
vm: vm
|
||
}, componentProps));
|
||
}
|
||
|
||
}
|
||
|
||
VMManager.propTypes = {
|
||
canSave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
cloudHost: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
fontsLoaded: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
isLoadingWithId: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
isPlayerOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
isStarted: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,
|
||
loadingState: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(_reducers_project_state__WEBPACK_IMPORTED_MODULE_7__["LoadingStates"]),
|
||
locale: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,
|
||
messages: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.objectOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string),
|
||
onError: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onLoadedProject: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
onSetProjectUnchanged: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,
|
||
projectData: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]),
|
||
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]),
|
||
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_4___default.a).isRequired
|
||
};
|
||
|
||
const mapStateToProps = state => {
|
||
const loadingState = state.scratchGui.projectState.loadingState;
|
||
return {
|
||
fontsLoaded: state.scratchGui.fontsLoaded,
|
||
isLoadingWithId: Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_7__["getIsLoadingWithId"])(loadingState),
|
||
locale: state.locales.locale,
|
||
messages: state.locales.messages,
|
||
projectData: state.scratchGui.projectState.projectData,
|
||
projectId: state.scratchGui.projectState.projectId,
|
||
loadingState: loadingState,
|
||
isPlayerOnly: state.scratchGui.mode.isPlayerOnly,
|
||
isStarted: state.scratchGui.vmStatus.started
|
||
};
|
||
};
|
||
|
||
const mapDispatchToProps = dispatch => ({
|
||
onError: error => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_7__["projectError"])(error)),
|
||
onLoadedProject: (loadingState, canSave) => dispatch(Object(_reducers_project_state__WEBPACK_IMPORTED_MODULE_7__["onLoadedProject"])(loadingState, canSave, true)),
|
||
onSetProjectUnchanged: () => dispatch(Object(_reducers_project_changed__WEBPACK_IMPORTED_MODULE_6__["setProjectUnchanged"])())
|
||
}); // 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_3__["connect"])(mapStateToProps, mapDispatchToProps, mergeProps)(VMManager);
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (vmManagerHOC);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/playground/app-target.js":
|
||
/*!**************************************!*\
|
||
!*** ./src/playground/app-target.js ***!
|
||
\**************************************/
|
||
/*! exports provided: default */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
const appTarget = document.getElementById('app'); // Remove everything from the target to fix macOS Safari "Save Page As",
|
||
|
||
while (appTarget.firstChild) {
|
||
appTarget.removeChild(appTarget.firstChild);
|
||
}
|
||
|
||
document.body.classList.add('tw-loaded');
|
||
/* harmony default export */ __webpack_exports__["default"] = (appTarget);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/playground/import-first.js":
|
||
/*!****************************************!*\
|
||
!*** ./src/playground/import-first.js ***!
|
||
\****************************************/
|
||
/*! no exports provided */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony import */ var _public_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./public-path */ "./src/playground/public-path.js");
|
||
/* harmony import */ var _public_path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_public_path__WEBPACK_IMPORTED_MODULE_0__);
|
||
/* harmony import */ var _lib_normalize_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/normalize.css */ "./src/lib/normalize.css");
|
||
/* harmony import */ var _lib_normalize_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_lib_normalize_css__WEBPACK_IMPORTED_MODULE_1__);
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/playground/public-path.js":
|
||
/*!***************************************!*\
|
||
!*** ./src/playground/public-path.js ***!
|
||
\***************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* eslint-disable */
|
||
if (false) {}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/playground/render-gui.jsx":
|
||
/*!***************************************!*\
|
||
!*** ./src/playground/render-gui.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_gui_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../containers/gui.jsx */ "./src/containers/gui.jsx");
|
||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||
|
||
|
||
|
||
const searchParams = new URLSearchParams(location.search);
|
||
const cloudHost = searchParams.get('cloud_host') || 'wss://clouddata.turbowarp.org';
|
||
|
||
const RenderGUI = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_containers_gui_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], _extends({
|
||
cloudHost: cloudHost,
|
||
canSave: false,
|
||
basePath: "",
|
||
canEditTitle: true,
|
||
enableCommunity: true
|
||
}, props));
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (RenderGUI);
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/alerts.js":
|
||
/*!********************************!*\
|
||
!*** ./src/reducers/alerts.js ***!
|
||
\********************************/
|
||
/*! exports provided: default, alertsInitialState, closeAlert, closeAlertWithId, filterInlineAlerts, filterPopupAlerts, showAlertWithTimeout, showExtensionAlert, showStandardAlert */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "alertsInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeAlert", function() { return closeAlert; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeAlertWithId", function() { return closeAlertWithId; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filterInlineAlerts", function() { return filterInlineAlerts; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filterPopupAlerts", function() { return filterPopupAlerts; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showAlertWithTimeout", function() { return showAlertWithTimeout; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showExtensionAlert", function() { return showExtensionAlert; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showStandardAlert", function() { return showStandardAlert; });
|
||
/* harmony import */ var _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/alerts/index.jsx */ "./src/lib/alerts/index.jsx");
|
||
/* harmony import */ var _lib_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/libraries/extensions/index.jsx */ "./src/lib/libraries/extensions/index.jsx");
|
||
|
||
|
||
const SHOW_ALERT = 'scratch-gui/alerts/SHOW_ALERT';
|
||
const SHOW_EXTENSION_ALERT = 'scratch-gui/alerts/SHOW_EXTENSION_ALERT';
|
||
const CLOSE_ALERT = 'scratch-gui/alerts/CLOSE_ALERT';
|
||
const CLOSE_ALERTS_WITH_ID = 'scratch-gui/alerts/CLOSE_ALERTS_WITH_ID';
|
||
const CLOSE_ALERT_WITH_ID = 'scratch-gui/alerts/CLOSE_ALERT_WITH_ID';
|
||
/**
|
||
* Initial state of alerts reducer
|
||
*
|
||
* {bool} visible - whether the alerts are visible
|
||
* {array} alertsList - list of alerts, each with properties:
|
||
* * alertType (required): one of AlertTypes
|
||
* * closeButton (optional): bool indicating that we should show close button
|
||
* * content (optional): react element (a <FormattedMessage />)
|
||
* * extentionId (optional): id string that identifies the extension
|
||
* * iconURL (optional): string
|
||
* * level (required): string, one of AlertLevels
|
||
* * message (optional): string
|
||
* * showReconnect (optional): bool
|
||
*/
|
||
|
||
const initialState = {
|
||
visible: true,
|
||
alertsList: []
|
||
};
|
||
|
||
const filterPopupAlerts = alertsList => alertsList.filter(curAlert => curAlert.alertType === _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_0__["AlertTypes"].STANDARD || curAlert.alertType === _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_0__["AlertTypes"].EXTENSION);
|
||
|
||
const filterInlineAlerts = alertsList => alertsList.filter(curAlert => curAlert.alertType === _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_0__["AlertTypes"].INLINE);
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SHOW_ALERT:
|
||
{
|
||
// intended to show standard and inline alerts, but not extensions
|
||
const alertId = action.alertId;
|
||
|
||
if (alertId) {
|
||
const newAlert = {
|
||
alertId: alertId,
|
||
level: _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_0__["AlertLevels"].WARN // default level
|
||
|
||
};
|
||
const alertData = _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_0__["default"].find(thisAlertData => thisAlertData.alertId === alertId);
|
||
|
||
if (alertData) {
|
||
const newList = state.alertsList.filter(curAlert => !alertData.clearList || alertData.clearList.indexOf(curAlert.alertId) === -1);
|
||
|
||
if (action.data && action.data.message) {
|
||
newAlert.message = action.data.message;
|
||
}
|
||
|
||
newAlert.alertType = alertData.alertType || _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_0__["AlertTypes"].STANDARD;
|
||
newAlert.closeButton = alertData.closeButton;
|
||
newAlert.content = alertData.content;
|
||
newAlert.iconURL = alertData.iconURL;
|
||
newAlert.iconSpinner = alertData.iconSpinner;
|
||
newAlert.level = alertData.level;
|
||
newAlert.showDownload = alertData.showDownload;
|
||
newAlert.showSaveNow = alertData.showSaveNow;
|
||
newList.push(newAlert);
|
||
return Object.assign({}, state, {
|
||
alertsList: newList
|
||
});
|
||
}
|
||
}
|
||
|
||
return state; // if alert not found, show nothing
|
||
}
|
||
|
||
case SHOW_EXTENSION_ALERT:
|
||
{
|
||
const extensionId = action.data.extensionId;
|
||
|
||
if (extensionId) {
|
||
const extension = _lib_libraries_extensions_index_jsx__WEBPACK_IMPORTED_MODULE_1__["default"].find(ext => ext.extensionId === extensionId);
|
||
|
||
if (extension) {
|
||
const newList = state.alertsList.slice();
|
||
const newAlert = {
|
||
alertType: _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_0__["AlertTypes"].EXTENSION,
|
||
closeButton: true,
|
||
extensionId: extensionId,
|
||
extensionName: extension.name,
|
||
iconURL: extension.connectionSmallIconURL,
|
||
level: _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_0__["AlertLevels"].WARN,
|
||
showReconnect: true
|
||
};
|
||
newList.push(newAlert);
|
||
return Object.assign({}, state, {
|
||
alertsList: newList
|
||
});
|
||
}
|
||
}
|
||
|
||
return state; // if alert not found, show nothing
|
||
}
|
||
|
||
case CLOSE_ALERT_WITH_ID:
|
||
case CLOSE_ALERT:
|
||
{
|
||
if (action.alertId) {
|
||
action.index = state.alertsList.findIndex(a => a.alertId === action.alertId);
|
||
if (action.index === -1) return state;
|
||
}
|
||
|
||
const newList = state.alertsList.slice();
|
||
newList.splice(action.index, 1);
|
||
return Object.assign({}, state, {
|
||
alertsList: newList
|
||
});
|
||
}
|
||
|
||
case CLOSE_ALERTS_WITH_ID:
|
||
{
|
||
return Object.assign({}, state, {
|
||
alertsList: state.alertsList.filter(curAlert => curAlert.alertId !== action.alertId)
|
||
});
|
||
}
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
/**
|
||
* Action creator to close an alert with the given index.
|
||
*
|
||
* @param {object} index - the index of the alert to close.
|
||
* @return {object} - an object to be passed to the reducer.
|
||
*/
|
||
|
||
|
||
const closeAlert = function closeAlert(index) {
|
||
return {
|
||
type: CLOSE_ALERT,
|
||
index
|
||
};
|
||
};
|
||
/**
|
||
* Action creator to close all alerts with a given ID.
|
||
*
|
||
* @param {string} alertId - id string of the alert to close
|
||
* @return {object} - an object to be passed to the reducer.
|
||
*/
|
||
|
||
|
||
const closeAlertsWithId = function closeAlertsWithId(alertId) {
|
||
return {
|
||
type: CLOSE_ALERTS_WITH_ID,
|
||
alertId
|
||
};
|
||
};
|
||
/**
|
||
* Action creator to close a single alert with a given ID.
|
||
*
|
||
* @param {string} alertId - id string of the alert to close
|
||
* @return {object} - an object to be passed to the reducer.
|
||
*/
|
||
|
||
|
||
const closeAlertWithId = function closeAlertWithId(alertId) {
|
||
return {
|
||
type: CLOSE_ALERT_WITH_ID,
|
||
alertId
|
||
};
|
||
};
|
||
/**
|
||
* Action creator to show an alert with the given alertId.
|
||
*
|
||
* @param {string} alertId - id string of the alert to show
|
||
* @return {object} - an object to be passed to the reducer.
|
||
*/
|
||
|
||
|
||
const showStandardAlert = function showStandardAlert(alertId) {
|
||
return {
|
||
type: SHOW_ALERT,
|
||
alertId
|
||
};
|
||
};
|
||
/**
|
||
* Action creator to show an alert with the given input data.
|
||
*
|
||
* @param {object} data - data for the alert
|
||
* @param {string} data.message - message for the alert
|
||
* @param {string} data.extensionId - extension ID for the alert
|
||
* @return {object} - an object to be passed to the reducer.
|
||
*/
|
||
|
||
|
||
const showExtensionAlert = function showExtensionAlert(data) {
|
||
return {
|
||
type: SHOW_EXTENSION_ALERT,
|
||
data
|
||
};
|
||
};
|
||
/**
|
||
* Function to dispatch showing an alert, with optional
|
||
* timeout to make it close/go away.
|
||
*
|
||
* @param {object} dispatch - dispatch function
|
||
* @param {string} alertId - the ID of the alert
|
||
*/
|
||
|
||
|
||
const showAlertWithTimeout = function showAlertWithTimeout(dispatch, alertId) {
|
||
const alertData = _lib_alerts_index_jsx__WEBPACK_IMPORTED_MODULE_0__["default"].find(thisAlertData => thisAlertData.alertId === alertId);
|
||
|
||
if (alertData) {
|
||
dispatch(showStandardAlert(alertId));
|
||
|
||
if (alertData.maxDisplaySecs) {
|
||
setTimeout(() => {
|
||
dispatch(closeAlertsWithId(alertId));
|
||
}, alertData.maxDisplaySecs * 1000);
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/asset-drag.js":
|
||
/*!************************************!*\
|
||
!*** ./src/reducers/asset-drag.js ***!
|
||
\************************************/
|
||
/*! exports provided: default, assetDragInitialState, updateAssetDrag */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "assetDragInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAssetDrag", function() { return updateAssetDrag; });
|
||
const DRAG_UPDATE = 'scratch-gui/asset-drag/DRAG_UPDATE';
|
||
const initialState = {
|
||
dragging: false,
|
||
currentOffset: null,
|
||
img: null
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case DRAG_UPDATE:
|
||
return Object.assign({}, state, action.state);
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const updateAssetDrag = function updateAssetDrag(state) {
|
||
return {
|
||
type: DRAG_UPDATE,
|
||
state: state
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/block-drag.js":
|
||
/*!************************************!*\
|
||
!*** ./src/reducers/block-drag.js ***!
|
||
\************************************/
|
||
/*! exports provided: default, blockDragInitialState, updateBlockDrag */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blockDragInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateBlockDrag", function() { return updateBlockDrag; });
|
||
const BLOCK_DRAG_UPDATE = 'scratch-gui/block-drag/BLOCK_DRAG_UPDATE';
|
||
const initialState = false;
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case BLOCK_DRAG_UPDATE:
|
||
return action.areBlocksOverGui;
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const updateBlockDrag = function updateBlockDrag(areBlocksOverGui) {
|
||
return {
|
||
type: BLOCK_DRAG_UPDATE,
|
||
areBlocksOverGui: areBlocksOverGui,
|
||
meta: {
|
||
throttle: 30
|
||
}
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/cards.js":
|
||
/*!*******************************!*\
|
||
!*** ./src/reducers/cards.js ***!
|
||
\*******************************/
|
||
/*! exports provided: default, cardsInitialState, activateDeck, viewCards, closeCards, shrinkExpandCards, nextStep, prevStep, dragCard, startDrag, endDrag */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cardsInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "activateDeck", function() { return activateDeck; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "viewCards", function() { return viewCards; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeCards", function() { return closeCards; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "shrinkExpandCards", function() { return shrinkExpandCards; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nextStep", function() { return nextStep; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prevStep", function() { return prevStep; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dragCard", function() { return dragCard; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startDrag", function() { return startDrag; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "endDrag", function() { return endDrag; });
|
||
/* harmony import */ var _lib_analytics__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/analytics */ "./src/lib/analytics.js");
|
||
/* harmony import */ var _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/libraries/decks/index.jsx */ "./src/lib/libraries/decks/index.jsx");
|
||
|
||
|
||
const CLOSE_CARDS = 'scratch-gui/cards/CLOSE_CARDS';
|
||
const SHRINK_EXPAND_CARDS = 'scratch-gui/cards/SHRINK_EXPAND_CARDS';
|
||
const VIEW_CARDS = 'scratch-gui/cards/VIEW_CARDS';
|
||
const ACTIVATE_DECK = 'scratch-gui/cards/ACTIVATE_DECK';
|
||
const NEXT_STEP = 'scratch-gui/cards/NEXT_STEP';
|
||
const PREV_STEP = 'scratch-gui/cards/PREV_STEP';
|
||
const DRAG_CARD = 'scratch-gui/cards/DRAG_CARD';
|
||
const START_DRAG = 'scratch-gui/cards/START_DRAG';
|
||
const END_DRAG = 'scratch-gui/cards/END_DRAG';
|
||
const initialState = {
|
||
visible: false,
|
||
content: _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_1__["default"],
|
||
activeDeckId: null,
|
||
step: 0,
|
||
x: 0,
|
||
y: 0,
|
||
expanded: true,
|
||
dragging: false
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case CLOSE_CARDS:
|
||
return Object.assign({}, state, {
|
||
visible: false
|
||
});
|
||
|
||
case SHRINK_EXPAND_CARDS:
|
||
return Object.assign({}, state, {
|
||
expanded: !state.expanded
|
||
});
|
||
|
||
case VIEW_CARDS:
|
||
return Object.assign({}, state, {
|
||
visible: true
|
||
});
|
||
|
||
case ACTIVATE_DECK:
|
||
return Object.assign({}, state, {
|
||
activeDeckId: action.activeDeckId,
|
||
step: 0,
|
||
x: 0,
|
||
y: 0,
|
||
expanded: true,
|
||
visible: true
|
||
});
|
||
|
||
case NEXT_STEP:
|
||
if (state.activeDeckId !== null) {
|
||
_lib_analytics__WEBPACK_IMPORTED_MODULE_0__["default"].event({
|
||
category: 'how-to',
|
||
action: 'next step',
|
||
label: "".concat(state.activeDeckId, " - ").concat(state.step)
|
||
});
|
||
return Object.assign({}, state, {
|
||
step: state.step + 1
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case PREV_STEP:
|
||
if (state.activeDeckId !== null) {
|
||
if (state.step > 0) {
|
||
return Object.assign({}, state, {
|
||
step: state.step - 1
|
||
});
|
||
}
|
||
}
|
||
|
||
return state;
|
||
|
||
case DRAG_CARD:
|
||
return Object.assign({}, state, {
|
||
x: action.x,
|
||
y: action.y
|
||
});
|
||
|
||
case START_DRAG:
|
||
return Object.assign({}, state, {
|
||
dragging: true
|
||
});
|
||
|
||
case END_DRAG:
|
||
return Object.assign({}, state, {
|
||
dragging: false
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const activateDeck = function activateDeck(activeDeckId) {
|
||
return {
|
||
type: ACTIVATE_DECK,
|
||
activeDeckId
|
||
};
|
||
};
|
||
|
||
const viewCards = function viewCards() {
|
||
return {
|
||
type: VIEW_CARDS
|
||
};
|
||
};
|
||
|
||
const closeCards = function closeCards() {
|
||
return {
|
||
type: CLOSE_CARDS
|
||
};
|
||
};
|
||
|
||
const shrinkExpandCards = function shrinkExpandCards() {
|
||
return {
|
||
type: SHRINK_EXPAND_CARDS
|
||
};
|
||
};
|
||
|
||
const nextStep = function nextStep() {
|
||
return {
|
||
type: NEXT_STEP
|
||
};
|
||
};
|
||
|
||
const prevStep = function prevStep() {
|
||
return {
|
||
type: PREV_STEP
|
||
};
|
||
};
|
||
|
||
const dragCard = function dragCard(x, y) {
|
||
return {
|
||
type: DRAG_CARD,
|
||
x,
|
||
y
|
||
};
|
||
};
|
||
|
||
const startDrag = function startDrag() {
|
||
return {
|
||
type: START_DRAG
|
||
};
|
||
};
|
||
|
||
const endDrag = function endDrag() {
|
||
return {
|
||
type: END_DRAG
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/color-picker.js":
|
||
/*!**************************************!*\
|
||
!*** ./src/reducers/color-picker.js ***!
|
||
\**************************************/
|
||
/*! exports provided: default, colorPickerInitialState, activateColorPicker, deactivateColorPicker, setCallback */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "colorPickerInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "activateColorPicker", function() { return activateColorPicker; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deactivateColorPicker", function() { return deactivateColorPicker; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCallback", function() { return setCallback; });
|
||
const ACTIVATE_COLOR_PICKER = 'scratch-gui/color-picker/ACTIVATE_COLOR_PICKER';
|
||
const DEACTIVATE_COLOR_PICKER = 'scratch-gui/color-picker/DEACTIVATE_COLOR_PICKER';
|
||
const SET_CALLBACK = 'scratch-gui/color-picker/SET_CALLBACK';
|
||
const initialState = {
|
||
active: false,
|
||
callback: () => {
|
||
throw new Error('Color picker callback not initialized');
|
||
}
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case ACTIVATE_COLOR_PICKER:
|
||
return Object.assign({}, state, {
|
||
active: true,
|
||
callback: action.callback
|
||
});
|
||
|
||
case DEACTIVATE_COLOR_PICKER:
|
||
// Can be called without a string to deactivate without setting color
|
||
// i.e. when clicking on the modal background
|
||
if (typeof action.color === 'string') {
|
||
state.callback(action.color);
|
||
}
|
||
|
||
return Object.assign({}, state, {
|
||
active: false
|
||
});
|
||
|
||
case SET_CALLBACK:
|
||
return Object.assign({}, state, {
|
||
callback: action.callback
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const activateColorPicker = callback => ({
|
||
type: ACTIVATE_COLOR_PICKER,
|
||
callback: callback
|
||
});
|
||
|
||
const deactivateColorPicker = color => ({
|
||
type: DEACTIVATE_COLOR_PICKER,
|
||
color: color
|
||
});
|
||
|
||
const setCallback = callback => ({
|
||
type: SET_CALLBACK,
|
||
callback: callback
|
||
});
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/connection-modal.js":
|
||
/*!******************************************!*\
|
||
!*** ./src/reducers/connection-modal.js ***!
|
||
\******************************************/
|
||
/*! exports provided: default, connectionModalInitialState, setConnectionModalExtensionId */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "connectionModalInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConnectionModalExtensionId", function() { return setConnectionModalExtensionId; });
|
||
const SET_ID = 'scratch-gui/connection-modal/setId';
|
||
const initialState = {
|
||
extensionId: null
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_ID:
|
||
return Object.assign({}, state, {
|
||
extensionId: action.extensionId
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setConnectionModalExtensionId = function setConnectionModalExtensionId(extensionId) {
|
||
return {
|
||
type: SET_ID,
|
||
extensionId: extensionId
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/custom-procedures.js":
|
||
/*!*******************************************!*\
|
||
!*** ./src/reducers/custom-procedures.js ***!
|
||
\*******************************************/
|
||
/*! exports provided: default, customProceduresInitialState, activateCustomProcedures, deactivateCustomProcedures */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "customProceduresInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "activateCustomProcedures", function() { return activateCustomProcedures; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deactivateCustomProcedures", function() { return deactivateCustomProcedures; });
|
||
const ACTIVATE_CUSTOM_PROCEDURES = 'scratch-gui/custom-procedures/ACTIVATE_CUSTOM_PROCEDURES';
|
||
const DEACTIVATE_CUSTOM_PROCEDURES = 'scratch-gui/custom-procedures/DEACTIVATE_CUSTOM_PROCEDURES';
|
||
const SET_CALLBACK = 'scratch-gui/custom-procedures/SET_CALLBACK';
|
||
const initialState = {
|
||
active: false,
|
||
mutator: null,
|
||
callback: null
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case ACTIVATE_CUSTOM_PROCEDURES:
|
||
return Object.assign({}, state, {
|
||
active: true,
|
||
mutator: action.mutator,
|
||
callback: action.callback
|
||
});
|
||
|
||
case DEACTIVATE_CUSTOM_PROCEDURES:
|
||
// Can be called without a mutator to deactivate without new procedure
|
||
// i.e. when clicking on the modal background
|
||
if (action.mutator) {
|
||
state.callback(action.mutator);
|
||
}
|
||
|
||
return Object.assign({}, state, {
|
||
active: false,
|
||
mutator: null,
|
||
callback: null
|
||
});
|
||
|
||
case SET_CALLBACK:
|
||
return Object.assign({}, state, {
|
||
callback: action.callback
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
/**
|
||
* Action creator to open the custom procedures modal.
|
||
* @param {!Element} mutator The XML node of the mutator for the procedure.
|
||
* @param {!function(!Element)} callback The function to call when done editing procedure.
|
||
* Expect the callback to be a function that takes a new XML mutator node.
|
||
* @returns {object} An action object with type ACTIVATE_CUSTOM_PROCEDURES.
|
||
*/
|
||
|
||
|
||
const activateCustomProcedures = (mutator, callback) => ({
|
||
type: ACTIVATE_CUSTOM_PROCEDURES,
|
||
mutator: mutator,
|
||
callback: callback
|
||
});
|
||
/**
|
||
* Action creator to close the custom procedures modal.
|
||
* @param {?Element} mutator The new mutator, or null if the callback should not be called.
|
||
* @returns {object} An action object with type ACTIVATE_CUSTOM_PROCEDURES.
|
||
*/
|
||
|
||
|
||
const deactivateCustomProcedures = mutator => ({
|
||
type: DEACTIVATE_CUSTOM_PROCEDURES,
|
||
mutator: mutator
|
||
});
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/custom-stage-size.js":
|
||
/*!*******************************************!*\
|
||
!*** ./src/reducers/custom-stage-size.js ***!
|
||
\*******************************************/
|
||
/*! exports provided: default, customStageSizeInitialState, defaultStageSize, setCustomStageSize */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "customStageSizeInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultStageSize", function() { return defaultStageSize; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCustomStageSize", function() { return setCustomStageSize; });
|
||
const SET_CUSTOM_STAGE_SIZE = 'tw/custom-stage-size/SET';
|
||
|
||
const getDimensions = () => {
|
||
// Running in node.js
|
||
if (typeof URLSearchParams === 'undefined') {
|
||
return null;
|
||
}
|
||
|
||
const urlParameters = new URLSearchParams(location.search);
|
||
const dimensionsQuery = urlParameters.get('size');
|
||
|
||
if (dimensionsQuery === null) {
|
||
return null;
|
||
}
|
||
|
||
const match = dimensionsQuery.match(/^(\d+)[^\d]+(\d+)$/);
|
||
|
||
if (!match) {
|
||
// eslint-disable-next-line no-alert
|
||
alert('Could not parse custom stage size');
|
||
return null;
|
||
}
|
||
|
||
const [_, widthText, heightText] = match;
|
||
|
||
if (!widthText || !heightText) {
|
||
return null;
|
||
}
|
||
|
||
const width = Math.max(0, Math.min(4096, +widthText));
|
||
const height = Math.max(0, Math.min(4096, +heightText));
|
||
return {
|
||
width,
|
||
height
|
||
};
|
||
};
|
||
|
||
const defaultStageSize = {
|
||
width: 480,
|
||
height: 360
|
||
};
|
||
const initialState = getDimensions() || defaultStageSize;
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_CUSTOM_STAGE_SIZE:
|
||
return Object.assign({}, state, {
|
||
width: action.width,
|
||
height: action.height
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setCustomStageSize = function setCustomStageSize(width, height) {
|
||
return {
|
||
type: SET_CUSTOM_STAGE_SIZE,
|
||
width,
|
||
height
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/editor-tab.js":
|
||
/*!************************************!*\
|
||
!*** ./src/reducers/editor-tab.js ***!
|
||
\************************************/
|
||
/*! exports provided: default, editorTabInitialState, activateTab, BLOCKS_TAB_INDEX, COSTUMES_TAB_INDEX, SOUNDS_TAB_INDEX */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "editorTabInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "activateTab", function() { return activateTab; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BLOCKS_TAB_INDEX", function() { return BLOCKS_TAB_INDEX; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "COSTUMES_TAB_INDEX", function() { return COSTUMES_TAB_INDEX; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SOUNDS_TAB_INDEX", function() { return SOUNDS_TAB_INDEX; });
|
||
const ACTIVATE_TAB = 'scratch-gui/navigation/ACTIVATE_TAB'; // Constants use numbers to make it easier to work with react-tabs
|
||
|
||
const BLOCKS_TAB_INDEX = 0;
|
||
const COSTUMES_TAB_INDEX = 1;
|
||
const SOUNDS_TAB_INDEX = 2;
|
||
const initialState = {
|
||
activeTabIndex: BLOCKS_TAB_INDEX
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case ACTIVATE_TAB:
|
||
return Object.assign({}, state, {
|
||
activeTabIndex: action.activeTabIndex
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const activateTab = function activateTab(tab) {
|
||
return {
|
||
type: ACTIVATE_TAB,
|
||
activeTabIndex: tab
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/fonts-loaded.js":
|
||
/*!**************************************!*\
|
||
!*** ./src/reducers/fonts-loaded.js ***!
|
||
\**************************************/
|
||
/*! exports provided: default, fontsLoadedInitialState, setFontsLoaded */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fontsLoadedInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFontsLoaded", function() { return setFontsLoaded; });
|
||
const SET_FONTS_LOADED = 'fontsLoaded/SET_FONTS_LOADED';
|
||
const initialState = false;
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_FONTS_LOADED:
|
||
return action.loaded;
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setFontsLoaded = () => ({
|
||
type: SET_FONTS_LOADED,
|
||
loaded: true
|
||
});
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/gui.js":
|
||
/*!*****************************!*\
|
||
!*** ./src/reducers/gui.js ***!
|
||
\*****************************/
|
||
/*! exports provided: default, guiInitialState, guiMiddleware, initEmbedded, initFullScreen, initPlayer, initTelemetryModal, initTutorialCard */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return guiReducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "guiInitialState", function() { return guiInitialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "guiMiddleware", function() { return guiMiddleware; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initEmbedded", function() { return initEmbedded; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initFullScreen", function() { return initFullScreen; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initPlayer", function() { return initPlayer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initTelemetryModal", function() { return initTelemetryModal; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initTutorialCard", function() { return initTutorialCard; });
|
||
/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/index.js");
|
||
/* harmony import */ var _alerts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./alerts */ "./src/reducers/alerts.js");
|
||
/* harmony import */ var _asset_drag__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./asset-drag */ "./src/reducers/asset-drag.js");
|
||
/* harmony import */ var _cards__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cards */ "./src/reducers/cards.js");
|
||
/* harmony import */ var _color_picker__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./color-picker */ "./src/reducers/color-picker.js");
|
||
/* harmony import */ var _connection_modal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./connection-modal */ "./src/reducers/connection-modal.js");
|
||
/* harmony import */ var _custom_procedures__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./custom-procedures */ "./src/reducers/custom-procedures.js");
|
||
/* harmony import */ var _block_drag__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./block-drag */ "./src/reducers/block-drag.js");
|
||
/* harmony import */ var _editor_tab__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./editor-tab */ "./src/reducers/editor-tab.js");
|
||
/* harmony import */ var _hovered_target__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./hovered-target */ "./src/reducers/hovered-target.js");
|
||
/* harmony import */ var _menus__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./menus */ "./src/reducers/menus.js");
|
||
/* harmony import */ var _mic_indicator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./mic-indicator */ "./src/reducers/mic-indicator.js");
|
||
/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modals */ "./src/reducers/modals.js");
|
||
/* harmony import */ var _mode__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./mode */ "./src/reducers/mode.js");
|
||
/* harmony import */ var _monitors__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./monitors */ "./src/reducers/monitors.js");
|
||
/* harmony import */ var _monitor_layout__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./monitor-layout */ "./src/reducers/monitor-layout.js");
|
||
/* harmony import */ var _project_changed__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./project-changed */ "./src/reducers/project-changed.js");
|
||
/* harmony import */ var _project_state__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./project-state */ "./src/reducers/project-state.js");
|
||
/* harmony import */ var _project_title__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./project-title */ "./src/reducers/project-title.js");
|
||
/* harmony import */ var _fonts_loaded__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./fonts-loaded */ "./src/reducers/fonts-loaded.js");
|
||
/* harmony import */ var _restore_deletion__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./restore-deletion */ "./src/reducers/restore-deletion.js");
|
||
/* harmony import */ var _stage_size__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./stage-size */ "./src/reducers/stage-size.js");
|
||
/* harmony import */ var _targets__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./targets */ "./src/reducers/targets.js");
|
||
/* harmony import */ var _timeout__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./timeout */ "./src/reducers/timeout.js");
|
||
/* harmony import */ var _toolbox__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./toolbox */ "./src/reducers/toolbox.js");
|
||
/* harmony import */ var _tw__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./tw */ "./src/reducers/tw.js");
|
||
/* harmony import */ var _custom_stage_size__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./custom-stage-size */ "./src/reducers/custom-stage-size.js");
|
||
/* harmony import */ var _vm__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./vm */ "./src/reducers/vm.js");
|
||
/* harmony import */ var _vm_status__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./vm-status */ "./src/reducers/vm-status.js");
|
||
/* harmony import */ var _workspace_metrics__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./workspace-metrics */ "./src/reducers/workspace-metrics.js");
|
||
/* harmony import */ var redux_throttle__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! redux-throttle */ "./node_modules/redux-throttle/build/index.js");
|
||
/* harmony import */ var redux_throttle__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(redux_throttle__WEBPACK_IMPORTED_MODULE_30__);
|
||
/* harmony import */ var _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../lib/libraries/decks/index.jsx */ "./src/lib/libraries/decks/index.jsx");
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const guiMiddleware = Object(redux__WEBPACK_IMPORTED_MODULE_0__["compose"])(Object(redux__WEBPACK_IMPORTED_MODULE_0__["applyMiddleware"])(redux_throttle__WEBPACK_IMPORTED_MODULE_30___default()(300, {
|
||
leading: true,
|
||
trailing: true
|
||
})));
|
||
const guiInitialState = {
|
||
alerts: _alerts__WEBPACK_IMPORTED_MODULE_1__["alertsInitialState"],
|
||
assetDrag: _asset_drag__WEBPACK_IMPORTED_MODULE_2__["assetDragInitialState"],
|
||
blockDrag: _block_drag__WEBPACK_IMPORTED_MODULE_7__["blockDragInitialState"],
|
||
cards: _cards__WEBPACK_IMPORTED_MODULE_3__["cardsInitialState"],
|
||
colorPicker: _color_picker__WEBPACK_IMPORTED_MODULE_4__["colorPickerInitialState"],
|
||
connectionModal: _connection_modal__WEBPACK_IMPORTED_MODULE_5__["connectionModalInitialState"],
|
||
customStageSize: _custom_stage_size__WEBPACK_IMPORTED_MODULE_26__["customStageSizeInitialState"],
|
||
customProcedures: _custom_procedures__WEBPACK_IMPORTED_MODULE_6__["customProceduresInitialState"],
|
||
editorTab: _editor_tab__WEBPACK_IMPORTED_MODULE_8__["editorTabInitialState"],
|
||
mode: _mode__WEBPACK_IMPORTED_MODULE_13__["modeInitialState"],
|
||
hoveredTarget: _hovered_target__WEBPACK_IMPORTED_MODULE_9__["hoveredTargetInitialState"],
|
||
stageSize: _stage_size__WEBPACK_IMPORTED_MODULE_21__["stageSizeInitialState"],
|
||
menus: _menus__WEBPACK_IMPORTED_MODULE_10__["menuInitialState"],
|
||
micIndicator: _mic_indicator__WEBPACK_IMPORTED_MODULE_11__["micIndicatorInitialState"],
|
||
modals: _modals__WEBPACK_IMPORTED_MODULE_12__["modalsInitialState"],
|
||
monitors: _monitors__WEBPACK_IMPORTED_MODULE_14__["monitorsInitialState"],
|
||
monitorLayout: _monitor_layout__WEBPACK_IMPORTED_MODULE_15__["monitorLayoutInitialState"],
|
||
projectChanged: _project_changed__WEBPACK_IMPORTED_MODULE_16__["projectChangedInitialState"],
|
||
projectState: _project_state__WEBPACK_IMPORTED_MODULE_17__["projectStateInitialState"],
|
||
projectTitle: _project_title__WEBPACK_IMPORTED_MODULE_18__["projectTitleInitialState"],
|
||
fontsLoaded: _fonts_loaded__WEBPACK_IMPORTED_MODULE_19__["fontsLoadedInitialState"],
|
||
restoreDeletion: _restore_deletion__WEBPACK_IMPORTED_MODULE_20__["restoreDeletionInitialState"],
|
||
targets: _targets__WEBPACK_IMPORTED_MODULE_22__["targetsInitialState"],
|
||
timeout: _timeout__WEBPACK_IMPORTED_MODULE_23__["timeoutInitialState"],
|
||
toolbox: _toolbox__WEBPACK_IMPORTED_MODULE_24__["toolboxInitialState"],
|
||
tw: _tw__WEBPACK_IMPORTED_MODULE_25__["twInitialState"],
|
||
vm: _vm__WEBPACK_IMPORTED_MODULE_27__["vmInitialState"],
|
||
vmStatus: _vm_status__WEBPACK_IMPORTED_MODULE_28__["vmStatusInitialState"],
|
||
workspaceMetrics: _workspace_metrics__WEBPACK_IMPORTED_MODULE_29__["workspaceMetricsInitialState"]
|
||
};
|
||
|
||
const initPlayer = function initPlayer(currentState) {
|
||
return Object.assign({}, currentState, {
|
||
mode: {
|
||
isEmbedded: false,
|
||
isFullScreen: currentState.mode.isFullScreen,
|
||
isPlayerOnly: true,
|
||
// When initializing in player mode, make sure to reset
|
||
// hasEverEnteredEditorMode
|
||
hasEverEnteredEditor: false
|
||
}
|
||
});
|
||
};
|
||
|
||
const initFullScreen = function initFullScreen(currentState) {
|
||
return Object.assign({}, currentState, {
|
||
mode: {
|
||
isEmbedded: false,
|
||
isFullScreen: true,
|
||
isPlayerOnly: currentState.mode.isPlayerOnly,
|
||
hasEverEnteredEditor: currentState.mode.hasEverEnteredEditor
|
||
}
|
||
});
|
||
};
|
||
|
||
const initEmbedded = function initEmbedded(currentState) {
|
||
return Object.assign({}, currentState, {
|
||
mode: {
|
||
isEmbedded: true,
|
||
// tw: embed does not need isFullScreen anymore
|
||
isFullScreen: false,
|
||
isPlayerOnly: true,
|
||
hasEverEnteredEditor: false
|
||
}
|
||
});
|
||
};
|
||
|
||
const initTutorialCard = function initTutorialCard(currentState, deckId) {
|
||
return Object.assign({}, currentState, {
|
||
cards: {
|
||
visible: true,
|
||
content: _lib_libraries_decks_index_jsx__WEBPACK_IMPORTED_MODULE_31__["default"],
|
||
activeDeckId: deckId,
|
||
expanded: true,
|
||
step: 0,
|
||
x: 0,
|
||
y: 0,
|
||
dragging: false
|
||
}
|
||
});
|
||
};
|
||
|
||
const initTelemetryModal = function initTelemetryModal(currentState) {
|
||
return Object.assign({}, currentState, {
|
||
modals: {
|
||
telemetryModal: true // this key must match `MODAL_TELEMETRY` in modals.js
|
||
|
||
}
|
||
});
|
||
};
|
||
|
||
const guiReducer = Object(redux__WEBPACK_IMPORTED_MODULE_0__["combineReducers"])({
|
||
alerts: _alerts__WEBPACK_IMPORTED_MODULE_1__["default"],
|
||
assetDrag: _asset_drag__WEBPACK_IMPORTED_MODULE_2__["default"],
|
||
blockDrag: _block_drag__WEBPACK_IMPORTED_MODULE_7__["default"],
|
||
cards: _cards__WEBPACK_IMPORTED_MODULE_3__["default"],
|
||
colorPicker: _color_picker__WEBPACK_IMPORTED_MODULE_4__["default"],
|
||
connectionModal: _connection_modal__WEBPACK_IMPORTED_MODULE_5__["default"],
|
||
customStageSize: _custom_stage_size__WEBPACK_IMPORTED_MODULE_26__["default"],
|
||
customProcedures: _custom_procedures__WEBPACK_IMPORTED_MODULE_6__["default"],
|
||
editorTab: _editor_tab__WEBPACK_IMPORTED_MODULE_8__["default"],
|
||
mode: _mode__WEBPACK_IMPORTED_MODULE_13__["default"],
|
||
hoveredTarget: _hovered_target__WEBPACK_IMPORTED_MODULE_9__["default"],
|
||
stageSize: _stage_size__WEBPACK_IMPORTED_MODULE_21__["default"],
|
||
menus: _menus__WEBPACK_IMPORTED_MODULE_10__["default"],
|
||
micIndicator: _mic_indicator__WEBPACK_IMPORTED_MODULE_11__["default"],
|
||
modals: _modals__WEBPACK_IMPORTED_MODULE_12__["default"],
|
||
monitors: _monitors__WEBPACK_IMPORTED_MODULE_14__["default"],
|
||
monitorLayout: _monitor_layout__WEBPACK_IMPORTED_MODULE_15__["default"],
|
||
projectChanged: _project_changed__WEBPACK_IMPORTED_MODULE_16__["default"],
|
||
projectState: _project_state__WEBPACK_IMPORTED_MODULE_17__["default"],
|
||
projectTitle: _project_title__WEBPACK_IMPORTED_MODULE_18__["default"],
|
||
fontsLoaded: _fonts_loaded__WEBPACK_IMPORTED_MODULE_19__["default"],
|
||
restoreDeletion: _restore_deletion__WEBPACK_IMPORTED_MODULE_20__["default"],
|
||
targets: _targets__WEBPACK_IMPORTED_MODULE_22__["default"],
|
||
timeout: _timeout__WEBPACK_IMPORTED_MODULE_23__["default"],
|
||
toolbox: _toolbox__WEBPACK_IMPORTED_MODULE_24__["default"],
|
||
tw: _tw__WEBPACK_IMPORTED_MODULE_25__["default"],
|
||
vm: _vm__WEBPACK_IMPORTED_MODULE_27__["default"],
|
||
vmStatus: _vm_status__WEBPACK_IMPORTED_MODULE_28__["default"],
|
||
workspaceMetrics: _workspace_metrics__WEBPACK_IMPORTED_MODULE_29__["default"]
|
||
});
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/hovered-target.js":
|
||
/*!****************************************!*\
|
||
!*** ./src/reducers/hovered-target.js ***!
|
||
\****************************************/
|
||
/*! exports provided: default, hoveredTargetInitialState, setHoveredSprite, setReceivedBlocks */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hoveredTargetInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHoveredSprite", function() { return setHoveredSprite; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setReceivedBlocks", function() { return setReceivedBlocks; });
|
||
const SET_HOVERED_SPRITE = 'scratch-gui/hovered-target/SET_HOVERED_SPRITE';
|
||
const SET_RECEIVED_BLOCKS = 'scratch-gui/hovered-target/SET_RECEIVED_BLOCKS';
|
||
const initialState = {
|
||
sprite: null,
|
||
receivedBlocks: false
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_HOVERED_SPRITE:
|
||
return {
|
||
sprite: action.spriteId,
|
||
receivedBlocks: false
|
||
};
|
||
|
||
case SET_RECEIVED_BLOCKS:
|
||
return {
|
||
sprite: state.sprite,
|
||
receivedBlocks: action.receivedBlocks
|
||
};
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setHoveredSprite = function setHoveredSprite(spriteId) {
|
||
return {
|
||
type: SET_HOVERED_SPRITE,
|
||
spriteId: spriteId,
|
||
meta: {
|
||
throttle: 30
|
||
}
|
||
};
|
||
};
|
||
|
||
const setReceivedBlocks = function setReceivedBlocks(receivedBlocks) {
|
||
return {
|
||
type: SET_RECEIVED_BLOCKS,
|
||
receivedBlocks: receivedBlocks
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/locales.js":
|
||
/*!*********************************!*\
|
||
!*** ./src/reducers/locales.js ***!
|
||
\*********************************/
|
||
/*! exports provided: default, localesInitialState, initLocale, selectLocale, setLocales */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "localesInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initLocale", function() { return initLocale; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectLocale", function() { return selectLocale; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLocales", function() { return setLocales; });
|
||
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-intl */ "./node_modules/react-intl/lib/index.es.js");
|
||
/* harmony import */ var _turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @turbowarp/scratch-l10n */ "./node_modules/@turbowarp/scratch-l10n/src/index.js");
|
||
/* harmony import */ var _turbowarp_scratch_l10n_locales_editor_msgs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @turbowarp/scratch-l10n/locales/editor-msgs */ "./node_modules/@turbowarp/scratch-l10n/locales/editor-msgs.js");
|
||
/* harmony import */ var _lib_detect_locale_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/detect-locale.js */ "./src/lib/detect-locale.js");
|
||
|
||
|
||
|
||
|
||
Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["addLocaleData"])(_turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_1__["localeData"]);
|
||
const UPDATE_LOCALES = 'scratch-gui/locales/UPDATE_LOCALES';
|
||
const SELECT_LOCALE = 'scratch-gui/locales/SELECT_LOCALE';
|
||
const initialState = {
|
||
isRtl: false,
|
||
locale: 'en',
|
||
messagesByLocale: _turbowarp_scratch_l10n_locales_editor_msgs__WEBPACK_IMPORTED_MODULE_2__["default"],
|
||
messages: _turbowarp_scratch_l10n_locales_editor_msgs__WEBPACK_IMPORTED_MODULE_2__["default"].en
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SELECT_LOCALE:
|
||
return Object.assign({}, state, {
|
||
isRtl: Object(_turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_1__["isRtl"])(action.locale),
|
||
locale: action.locale,
|
||
messagesByLocale: state.messagesByLocale,
|
||
messages: state.messagesByLocale[action.locale]
|
||
});
|
||
|
||
case UPDATE_LOCALES:
|
||
return Object.assign({}, state, {
|
||
isRtl: state.isRtl,
|
||
locale: state.locale,
|
||
messagesByLocale: action.messagesByLocale,
|
||
messages: action.messagesByLocale[state.locale]
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const selectLocale = function selectLocale(locale) {
|
||
// tw: store language in localStorage
|
||
try {
|
||
localStorage.setItem(_lib_detect_locale_js__WEBPACK_IMPORTED_MODULE_3__["LANGUAGE_KEY"], locale);
|
||
} catch (e) {
|
||
/* ignore */
|
||
}
|
||
|
||
return {
|
||
type: SELECT_LOCALE,
|
||
locale: locale
|
||
};
|
||
};
|
||
|
||
const setLocales = function setLocales(localesMessages) {
|
||
return {
|
||
type: UPDATE_LOCALES,
|
||
messagesByLocale: localesMessages
|
||
};
|
||
};
|
||
|
||
const initLocale = function initLocale(currentState, locale) {
|
||
if (currentState.messagesByLocale.hasOwnProperty(locale)) {
|
||
return Object.assign({}, currentState, {
|
||
isRtl: Object(_turbowarp_scratch_l10n__WEBPACK_IMPORTED_MODULE_1__["isRtl"])(locale),
|
||
locale: locale,
|
||
messagesByLocale: currentState.messagesByLocale,
|
||
messages: currentState.messagesByLocale[locale]
|
||
});
|
||
} // don't change locale if it's not in the current messages
|
||
|
||
|
||
return currentState;
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/menus.js":
|
||
/*!*******************************!*\
|
||
!*** ./src/reducers/menus.js ***!
|
||
\*******************************/
|
||
/*! exports provided: default, menuInitialState, openAboutMenu, closeAboutMenu, aboutMenuOpen, openAccountMenu, closeAccountMenu, accountMenuOpen, openFileMenu, closeFileMenu, fileMenuOpen, openEditMenu, closeEditMenu, editMenuOpen, openLanguageMenu, closeLanguageMenu, languageMenuOpen, openLoginMenu, closeLoginMenu, loginMenuOpen, openErrorsMenu, closeErrorsMenu, errorsMenuOpen */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "menuInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openAboutMenu", function() { return openAboutMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeAboutMenu", function() { return closeAboutMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "aboutMenuOpen", function() { return aboutMenuOpen; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openAccountMenu", function() { return openAccountMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeAccountMenu", function() { return closeAccountMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "accountMenuOpen", function() { return accountMenuOpen; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openFileMenu", function() { return openFileMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeFileMenu", function() { return closeFileMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fileMenuOpen", function() { return fileMenuOpen; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openEditMenu", function() { return openEditMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeEditMenu", function() { return closeEditMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "editMenuOpen", function() { return editMenuOpen; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openLanguageMenu", function() { return openLanguageMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeLanguageMenu", function() { return closeLanguageMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "languageMenuOpen", function() { return languageMenuOpen; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openLoginMenu", function() { return openLoginMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeLoginMenu", function() { return closeLoginMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loginMenuOpen", function() { return loginMenuOpen; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openErrorsMenu", function() { return openErrorsMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeErrorsMenu", function() { return closeErrorsMenu; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "errorsMenuOpen", function() { return errorsMenuOpen; });
|
||
const OPEN_MENU = 'scratch-gui/menus/OPEN_MENU';
|
||
const CLOSE_MENU = 'scratch-gui/menus/CLOSE_MENU';
|
||
const MENU_ABOUT = 'aboutMenu';
|
||
const MENU_ACCOUNT = 'accountMenu';
|
||
const MENU_FILE = 'fileMenu';
|
||
const MENU_EDIT = 'editMenu';
|
||
const MENU_LANGUAGE = 'languageMenu';
|
||
const MENU_LOGIN = 'loginMenu';
|
||
const MENU_ERRORS = 'errorMenu';
|
||
const initialState = {
|
||
[MENU_ABOUT]: false,
|
||
[MENU_ACCOUNT]: false,
|
||
[MENU_FILE]: false,
|
||
[MENU_EDIT]: false,
|
||
[MENU_LANGUAGE]: false,
|
||
[MENU_LOGIN]: false,
|
||
[MENU_ERRORS]: false
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case OPEN_MENU:
|
||
return Object.assign({}, state, {
|
||
[action.menu]: true
|
||
});
|
||
|
||
case CLOSE_MENU:
|
||
return Object.assign({}, state, {
|
||
[action.menu]: false
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const openMenu = menu => ({
|
||
type: OPEN_MENU,
|
||
menu: menu
|
||
});
|
||
|
||
const closeMenu = menu => ({
|
||
type: CLOSE_MENU,
|
||
menu: menu
|
||
});
|
||
|
||
const openAboutMenu = () => openMenu(MENU_ABOUT);
|
||
|
||
const closeAboutMenu = () => closeMenu(MENU_ABOUT);
|
||
|
||
const aboutMenuOpen = state => state.scratchGui.menus[MENU_ABOUT];
|
||
|
||
const openAccountMenu = () => openMenu(MENU_ACCOUNT);
|
||
|
||
const closeAccountMenu = () => closeMenu(MENU_ACCOUNT);
|
||
|
||
const accountMenuOpen = state => state.scratchGui.menus[MENU_ACCOUNT];
|
||
|
||
const openFileMenu = () => openMenu(MENU_FILE);
|
||
|
||
const closeFileMenu = () => closeMenu(MENU_FILE);
|
||
|
||
const fileMenuOpen = state => state.scratchGui.menus[MENU_FILE];
|
||
|
||
const openEditMenu = () => openMenu(MENU_EDIT);
|
||
|
||
const closeEditMenu = () => closeMenu(MENU_EDIT);
|
||
|
||
const editMenuOpen = state => state.scratchGui.menus[MENU_EDIT];
|
||
|
||
const openLanguageMenu = () => openMenu(MENU_LANGUAGE);
|
||
|
||
const closeLanguageMenu = () => closeMenu(MENU_LANGUAGE);
|
||
|
||
const languageMenuOpen = state => state.scratchGui.menus[MENU_LANGUAGE];
|
||
|
||
const openLoginMenu = () => openMenu(MENU_LOGIN);
|
||
|
||
const closeLoginMenu = () => closeMenu(MENU_LOGIN);
|
||
|
||
const loginMenuOpen = state => state.scratchGui.menus[MENU_LOGIN];
|
||
|
||
const openErrorsMenu = () => openMenu(MENU_ERRORS);
|
||
|
||
const closeErrorsMenu = () => closeMenu(MENU_ERRORS);
|
||
|
||
const errorsMenuOpen = state => state.scratchGui.menus[MENU_ERRORS];
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/mic-indicator.js":
|
||
/*!***************************************!*\
|
||
!*** ./src/reducers/mic-indicator.js ***!
|
||
\***************************************/
|
||
/*! exports provided: default, micIndicatorInitialState, updateMicIndicator */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "micIndicatorInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateMicIndicator", function() { return updateMicIndicator; });
|
||
const UPDATE = 'scratch-gui/mic-indicator/UPDATE';
|
||
const initialState = false;
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case UPDATE:
|
||
return action.visible;
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const updateMicIndicator = function updateMicIndicator(visible) {
|
||
return {
|
||
type: UPDATE,
|
||
visible: visible
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/modals.js":
|
||
/*!********************************!*\
|
||
!*** ./src/reducers/modals.js ***!
|
||
\********************************/
|
||
/*! exports provided: default, modalsInitialState, openBackdropLibrary, openCostumeLibrary, openExtensionLibrary, openLoadingProject, openSoundLibrary, openSpriteLibrary, openSoundRecorder, openTelemetryModal, openTipsLibrary, openConnectionModal, openUsernameModal, openSettingsModal, closeBackdropLibrary, closeCostumeLibrary, closeExtensionLibrary, closeLoadingProject, closeSpriteLibrary, closeSoundLibrary, closeSoundRecorder, closeTelemetryModal, closeTipsLibrary, closeConnectionModal, closeUsernameModal, closeSettingsModal */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "modalsInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openBackdropLibrary", function() { return openBackdropLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openCostumeLibrary", function() { return openCostumeLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openExtensionLibrary", function() { return openExtensionLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openLoadingProject", function() { return openLoadingProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openSoundLibrary", function() { return openSoundLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openSpriteLibrary", function() { return openSpriteLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openSoundRecorder", function() { return openSoundRecorder; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openTelemetryModal", function() { return openTelemetryModal; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openTipsLibrary", function() { return openTipsLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openConnectionModal", function() { return openConnectionModal; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openUsernameModal", function() { return openUsernameModal; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "openSettingsModal", function() { return openSettingsModal; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeBackdropLibrary", function() { return closeBackdropLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeCostumeLibrary", function() { return closeCostumeLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeExtensionLibrary", function() { return closeExtensionLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeLoadingProject", function() { return closeLoadingProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeSpriteLibrary", function() { return closeSpriteLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeSoundLibrary", function() { return closeSoundLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeSoundRecorder", function() { return closeSoundRecorder; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeTelemetryModal", function() { return closeTelemetryModal; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeTipsLibrary", function() { return closeTipsLibrary; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeConnectionModal", function() { return closeConnectionModal; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeUsernameModal", function() { return closeUsernameModal; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closeSettingsModal", function() { return closeSettingsModal; });
|
||
const OPEN_MODAL = 'scratch-gui/modals/OPEN_MODAL';
|
||
const CLOSE_MODAL = 'scratch-gui/modals/CLOSE_MODAL';
|
||
const MODAL_BACKDROP_LIBRARY = 'backdropLibrary';
|
||
const MODAL_COSTUME_LIBRARY = 'costumeLibrary';
|
||
const MODAL_EXTENSION_LIBRARY = 'extensionLibrary';
|
||
const MODAL_LOADING_PROJECT = 'loadingProject';
|
||
const MODAL_TELEMETRY = 'telemetryModal';
|
||
const MODAL_SOUND_LIBRARY = 'soundLibrary';
|
||
const MODAL_SPRITE_LIBRARY = 'spriteLibrary';
|
||
const MODAL_SOUND_RECORDER = 'soundRecorder';
|
||
const MODAL_CONNECTION = 'connectionModal';
|
||
const MODAL_TIPS_LIBRARY = 'tipsLibrary';
|
||
const MODAL_USERNAME = 'usernameModal';
|
||
const MODAL_SETTINGS = 'settingsModal';
|
||
const initialState = {
|
||
[MODAL_BACKDROP_LIBRARY]: false,
|
||
[MODAL_COSTUME_LIBRARY]: false,
|
||
[MODAL_EXTENSION_LIBRARY]: false,
|
||
[MODAL_LOADING_PROJECT]: false,
|
||
[MODAL_TELEMETRY]: false,
|
||
[MODAL_SOUND_LIBRARY]: false,
|
||
[MODAL_SPRITE_LIBRARY]: false,
|
||
[MODAL_SOUND_RECORDER]: false,
|
||
[MODAL_CONNECTION]: false,
|
||
[MODAL_TIPS_LIBRARY]: false,
|
||
[MODAL_USERNAME]: false,
|
||
[MODAL_SETTINGS]: false
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case OPEN_MODAL:
|
||
return Object.assign({}, state, {
|
||
[action.modal]: true
|
||
});
|
||
|
||
case CLOSE_MODAL:
|
||
return Object.assign({}, state, {
|
||
[action.modal]: false
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const openModal = function openModal(modal) {
|
||
return {
|
||
type: OPEN_MODAL,
|
||
modal: modal
|
||
};
|
||
};
|
||
|
||
const closeModal = function closeModal(modal) {
|
||
return {
|
||
type: CLOSE_MODAL,
|
||
modal: modal
|
||
};
|
||
};
|
||
|
||
const openBackdropLibrary = function openBackdropLibrary() {
|
||
return openModal(MODAL_BACKDROP_LIBRARY);
|
||
};
|
||
|
||
const openCostumeLibrary = function openCostumeLibrary() {
|
||
return openModal(MODAL_COSTUME_LIBRARY);
|
||
};
|
||
|
||
const openExtensionLibrary = function openExtensionLibrary() {
|
||
return openModal(MODAL_EXTENSION_LIBRARY);
|
||
};
|
||
|
||
const openLoadingProject = function openLoadingProject() {
|
||
return openModal(MODAL_LOADING_PROJECT);
|
||
};
|
||
|
||
const openTelemetryModal = function openTelemetryModal() {
|
||
return openModal(MODAL_TELEMETRY);
|
||
};
|
||
|
||
const openSoundLibrary = function openSoundLibrary() {
|
||
return openModal(MODAL_SOUND_LIBRARY);
|
||
};
|
||
|
||
const openSpriteLibrary = function openSpriteLibrary() {
|
||
return openModal(MODAL_SPRITE_LIBRARY);
|
||
};
|
||
|
||
const openSoundRecorder = function openSoundRecorder() {
|
||
return openModal(MODAL_SOUND_RECORDER);
|
||
};
|
||
|
||
const openConnectionModal = function openConnectionModal() {
|
||
return openModal(MODAL_CONNECTION);
|
||
};
|
||
|
||
const openTipsLibrary = function openTipsLibrary() {
|
||
return openModal(MODAL_TIPS_LIBRARY);
|
||
};
|
||
|
||
const openUsernameModal = function openUsernameModal() {
|
||
return openModal(MODAL_USERNAME);
|
||
};
|
||
|
||
const openSettingsModal = function openSettingsModal() {
|
||
return openModal(MODAL_SETTINGS);
|
||
};
|
||
|
||
const closeBackdropLibrary = function closeBackdropLibrary() {
|
||
return closeModal(MODAL_BACKDROP_LIBRARY);
|
||
};
|
||
|
||
const closeCostumeLibrary = function closeCostumeLibrary() {
|
||
return closeModal(MODAL_COSTUME_LIBRARY);
|
||
};
|
||
|
||
const closeExtensionLibrary = function closeExtensionLibrary() {
|
||
return closeModal(MODAL_EXTENSION_LIBRARY);
|
||
};
|
||
|
||
const closeLoadingProject = function closeLoadingProject() {
|
||
return closeModal(MODAL_LOADING_PROJECT);
|
||
};
|
||
|
||
const closeTelemetryModal = function closeTelemetryModal() {
|
||
return closeModal(MODAL_TELEMETRY);
|
||
};
|
||
|
||
const closeSpriteLibrary = function closeSpriteLibrary() {
|
||
return closeModal(MODAL_SPRITE_LIBRARY);
|
||
};
|
||
|
||
const closeSoundLibrary = function closeSoundLibrary() {
|
||
return closeModal(MODAL_SOUND_LIBRARY);
|
||
};
|
||
|
||
const closeSoundRecorder = function closeSoundRecorder() {
|
||
return closeModal(MODAL_SOUND_RECORDER);
|
||
};
|
||
|
||
const closeTipsLibrary = function closeTipsLibrary() {
|
||
return closeModal(MODAL_TIPS_LIBRARY);
|
||
};
|
||
|
||
const closeConnectionModal = function closeConnectionModal() {
|
||
return closeModal(MODAL_CONNECTION);
|
||
};
|
||
|
||
const closeUsernameModal = function closeUsernameModal() {
|
||
return closeModal(MODAL_USERNAME);
|
||
};
|
||
|
||
const closeSettingsModal = function closeSettingsModal() {
|
||
return closeModal(MODAL_SETTINGS);
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/mode.js":
|
||
/*!******************************!*\
|
||
!*** ./src/reducers/mode.js ***!
|
||
\******************************/
|
||
/*! exports provided: default, modeInitialState, setFullScreen, setPlayer */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "modeInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFullScreen", function() { return setFullScreen; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setPlayer", function() { return setPlayer; });
|
||
const SET_FULL_SCREEN = 'scratch-gui/mode/SET_FULL_SCREEN';
|
||
const SET_PLAYER = 'scratch-gui/mode/SET_PLAYER';
|
||
const initialState = {
|
||
isEmbedded: false,
|
||
isFullScreen: false,
|
||
isPlayerOnly: false,
|
||
hasEverEnteredEditor: true
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_FULL_SCREEN:
|
||
return Object.assign({}, state, {
|
||
isFullScreen: action.isFullScreen
|
||
});
|
||
|
||
case SET_PLAYER:
|
||
return Object.assign({}, state, {
|
||
isPlayerOnly: action.isPlayerOnly,
|
||
hasEverEnteredEditor: state.hasEverEnteredEditor || !action.isPlayerOnly
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setFullScreen = function setFullScreen(isFullScreen) {
|
||
return {
|
||
type: SET_FULL_SCREEN,
|
||
isFullScreen: isFullScreen
|
||
};
|
||
};
|
||
|
||
const setPlayer = function setPlayer(isPlayerOnly) {
|
||
return {
|
||
type: SET_PLAYER,
|
||
isPlayerOnly: isPlayerOnly
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/monitor-layout.js":
|
||
/*!****************************************!*\
|
||
!*** ./src/reducers/monitor-layout.js ***!
|
||
\****************************************/
|
||
/*! exports provided: default, monitorLayoutInitialState, addMonitorRect, getInitialPosition, moveMonitorRect, resizeMonitorRect, removeMonitorRect, resetMonitorLayout, PADDING, SCREEN_HEIGHT, SCREEN_WIDTH */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "monitorLayoutInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addMonitorRect", function() { return addMonitorRect; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getInitialPosition", function() { return getInitialPosition; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "moveMonitorRect", function() { return moveMonitorRect; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resizeMonitorRect", function() { return resizeMonitorRect; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeMonitorRect", function() { return removeMonitorRect; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetMonitorLayout", function() { return resetMonitorLayout; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PADDING", function() { return PADDING; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SCREEN_HEIGHT", function() { return SCREEN_HEIGHT; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SCREEN_WIDTH", function() { return SCREEN_WIDTH; });
|
||
/* harmony import */ var _lib_log__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/log */ "./src/lib/log.js");
|
||
|
||
const ADD_MONITOR_RECT = 'scratch-gui/monitors/ADD_MONITOR_RECT';
|
||
const MOVE_MONITOR_RECT = 'scratch-gui/monitors/MOVE_MONITOR_RECT';
|
||
const RESIZE_MONITOR_RECT = 'scratch-gui/monitors/RESIZE_MONITOR_RECT';
|
||
const REMOVE_MONITOR_RECT = 'scratch-gui/monitors/REMOVE_MONITOR_RECT';
|
||
const RESET_MONITOR_LAYOUT = 'scratch-gui/monitors/RESET_MONITOR_LAYOUT';
|
||
const initialState = {
|
||
monitors: {},
|
||
savedMonitorPositions: {}
|
||
}; // Verify that the rectangle formed by the 2 points is well-formed
|
||
|
||
const _verifyRect = function _verifyRect(upperStart, lowerEnd) {
|
||
if (isNaN(upperStart.x) || isNaN(upperStart.y) || isNaN(lowerEnd.x) || isNaN(lowerEnd.y)) {
|
||
return false;
|
||
}
|
||
|
||
if (!(upperStart.x < lowerEnd.x)) {
|
||
return false;
|
||
}
|
||
|
||
if (!(upperStart.y < lowerEnd.y)) {
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
};
|
||
|
||
const _addMonitorRect = function _addMonitorRect(state, action) {
|
||
if (state.monitors.hasOwnProperty(action.monitorId)) {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_0__["default"].error("Can't add monitor, monitor with id ".concat(action.monitorId, " already exists."));
|
||
return state;
|
||
}
|
||
|
||
if (!_verifyRect(action.upperStart, action.lowerEnd)) {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_0__["default"].error("Monitor rectangle not formatted correctly");
|
||
return state;
|
||
}
|
||
|
||
return {
|
||
monitors: Object.assign({}, state.monitors, {
|
||
[action.monitorId]: {
|
||
upperStart: action.upperStart,
|
||
lowerEnd: action.lowerEnd
|
||
}
|
||
}),
|
||
savedMonitorPositions: action.savePosition ? Object.assign({}, state.savedMonitorPositions, {
|
||
[action.monitorId]: {
|
||
x: action.upperStart.x,
|
||
y: action.upperStart.y
|
||
}
|
||
}) : state.savedMonitorPositions
|
||
};
|
||
};
|
||
|
||
const _moveMonitorRect = function _moveMonitorRect(state, action) {
|
||
if (!state.monitors.hasOwnProperty(action.monitorId)) {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_0__["default"].error("Can't move monitor, monitor with id ".concat(action.monitorId, " does not exist."));
|
||
return state;
|
||
}
|
||
|
||
if (isNaN(action.newX) || isNaN(action.newY)) {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_0__["default"].error("Monitor rectangle not formatted correctly");
|
||
return state;
|
||
}
|
||
|
||
const oldMonitor = state.monitors[action.monitorId];
|
||
|
||
if (oldMonitor.upperStart.x === action.newX && oldMonitor.upperStart.y === action.newY) {
|
||
// Hasn't moved
|
||
return state;
|
||
}
|
||
|
||
const monitorWidth = oldMonitor.lowerEnd.x - oldMonitor.upperStart.x;
|
||
const monitorHeight = oldMonitor.lowerEnd.y - oldMonitor.upperStart.y;
|
||
return {
|
||
monitors: Object.assign({}, state.monitors, {
|
||
[action.monitorId]: {
|
||
upperStart: {
|
||
x: action.newX,
|
||
y: action.newY
|
||
},
|
||
lowerEnd: {
|
||
x: action.newX + monitorWidth,
|
||
y: action.newY + monitorHeight
|
||
}
|
||
}
|
||
}),
|
||
// User generated position is saved
|
||
savedMonitorPositions: Object.assign({}, state.savedMonitorPositions, {
|
||
[action.monitorId]: {
|
||
x: action.newX,
|
||
y: action.newY
|
||
}
|
||
})
|
||
};
|
||
};
|
||
|
||
const _resizeMonitorRect = function _resizeMonitorRect(state, action) {
|
||
if (!state.monitors.hasOwnProperty(action.monitorId)) {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_0__["default"].error("Can't resize monitor, monitor with id ".concat(action.monitorId, " does not exist."));
|
||
return state;
|
||
}
|
||
|
||
if (isNaN(action.newWidth) || isNaN(action.newHeight) || action.newWidth <= 0 || action.newHeight <= 0) {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_0__["default"].error("Monitor rectangle not formatted correctly");
|
||
return state;
|
||
}
|
||
|
||
const oldMonitor = state.monitors[action.monitorId];
|
||
const newMonitor = {
|
||
upperStart: oldMonitor.upperStart,
|
||
lowerEnd: {
|
||
x: oldMonitor.upperStart.x + action.newWidth,
|
||
y: oldMonitor.upperStart.y + action.newHeight
|
||
}
|
||
};
|
||
|
||
if (newMonitor.lowerEnd.x === oldMonitor.lowerEnd.x && newMonitor.lowerEnd.y === oldMonitor.lowerEnd.y) {
|
||
// no change
|
||
return state;
|
||
}
|
||
|
||
return {
|
||
monitors: Object.assign({}, state.monitors, {
|
||
[action.monitorId]: newMonitor
|
||
}),
|
||
savedMonitorPositions: state.savedMonitorPositions
|
||
};
|
||
};
|
||
|
||
const _removeMonitorRect = function _removeMonitorRect(state, action) {
|
||
if (!state.monitors.hasOwnProperty(action.monitorId)) {
|
||
_lib_log__WEBPACK_IMPORTED_MODULE_0__["default"].error("Can't remove monitor, monitor with id ".concat(action.monitorId, " does not exist."));
|
||
return state;
|
||
}
|
||
|
||
const newMonitors = Object.assign({}, state.monitors);
|
||
delete newMonitors[action.monitorId];
|
||
return {
|
||
monitors: newMonitors,
|
||
savedMonitorPositions: state.savedMonitorPositions
|
||
};
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case ADD_MONITOR_RECT:
|
||
return _addMonitorRect(state, action);
|
||
|
||
case MOVE_MONITOR_RECT:
|
||
return _moveMonitorRect(state, action);
|
||
|
||
case RESIZE_MONITOR_RECT:
|
||
return _resizeMonitorRect(state, action);
|
||
|
||
case REMOVE_MONITOR_RECT:
|
||
return _removeMonitorRect(state, action);
|
||
|
||
case RESET_MONITOR_LAYOUT:
|
||
return initialState;
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
}; // Init position --------------------------
|
||
|
||
|
||
const PADDING = 5; // @todo fix these numbers when we fix https://github.com/LLK/scratch-gui/issues/980
|
||
|
||
const SCREEN_WIDTH = 400;
|
||
const SCREEN_HEIGHT = 300;
|
||
const SCREEN_EDGE_BUFFER = 40;
|
||
|
||
const _rectsIntersect = function _rectsIntersect(rect1, rect2) {
|
||
// If one rectangle is on left side of other
|
||
if (rect1.upperStart.x >= rect2.lowerEnd.x || rect2.upperStart.x >= rect1.lowerEnd.x) return false; // If one rectangle is above other
|
||
|
||
if (rect1.upperStart.y >= rect2.lowerEnd.y || rect2.upperStart.y >= rect1.lowerEnd.y) return false;
|
||
return true;
|
||
}; // We need to place a monitor with the given width and height. Return a rect defining where it should be placed.
|
||
|
||
|
||
const getInitialPosition = function getInitialPosition(state, monitorId, eltWidth, eltHeight) {
|
||
// If this monitor was purposefully moved to a certain position before, put it back in that position
|
||
if (state.savedMonitorPositions.hasOwnProperty(monitorId)) {
|
||
const saved = state.savedMonitorPositions[monitorId];
|
||
return {
|
||
upperStart: saved,
|
||
lowerEnd: {
|
||
x: saved.x + eltWidth,
|
||
y: saved.y + eltHeight
|
||
}
|
||
};
|
||
} // Try all starting positions for the new monitor to find one that doesn't intersect others
|
||
|
||
|
||
const endXs = [0];
|
||
const endYs = [0];
|
||
let lastX = null;
|
||
let lastY = null;
|
||
|
||
for (const monitor in state.monitors) {
|
||
let x = state.monitors[monitor].lowerEnd.x;
|
||
x = Math.ceil(x / 50) * 50; // Try to choose a sensible "tab width" so more monitors line up
|
||
|
||
endXs.push(x);
|
||
endYs.push(Math.ceil(state.monitors[monitor].lowerEnd.y));
|
||
}
|
||
|
||
endXs.sort((a, b) => a - b);
|
||
endYs.sort((a, b) => a - b); // We'll use plan B if the monitor doesn't fit anywhere (too long or tall)
|
||
|
||
let planB = null;
|
||
|
||
for (const x of endXs) {
|
||
if (x === lastX) {
|
||
continue;
|
||
}
|
||
|
||
lastX = x;
|
||
|
||
outer: for (const y of endYs) {
|
||
if (y === lastY) {
|
||
continue;
|
||
}
|
||
|
||
lastY = y;
|
||
const monitorRect = {
|
||
upperStart: {
|
||
x: x + PADDING,
|
||
y: y + PADDING
|
||
},
|
||
lowerEnd: {
|
||
x: x + PADDING + eltWidth,
|
||
y: y + PADDING + eltHeight
|
||
}
|
||
}; // Intersection testing rect that includes padding
|
||
|
||
const rect = {
|
||
upperStart: {
|
||
x,
|
||
y
|
||
},
|
||
lowerEnd: {
|
||
x: x + eltWidth + 2 * PADDING,
|
||
y: y + eltHeight + 2 * PADDING
|
||
}
|
||
};
|
||
|
||
for (const monitor in state.monitors) {
|
||
if (_rectsIntersect(state.monitors[monitor], rect)) {
|
||
continue outer;
|
||
}
|
||
} // If the rect overlaps the ends of the screen
|
||
|
||
|
||
if (rect.lowerEnd.x > SCREEN_WIDTH || rect.lowerEnd.y > SCREEN_HEIGHT) {
|
||
// If rect is not too close to completely off screen, set it as plan B
|
||
if (!planB && !(rect.upperStart.x + SCREEN_EDGE_BUFFER > SCREEN_WIDTH || rect.upperStart.y + SCREEN_EDGE_BUFFER > SCREEN_HEIGHT)) {
|
||
planB = monitorRect;
|
||
}
|
||
|
||
continue;
|
||
}
|
||
|
||
return monitorRect;
|
||
}
|
||
} // If the monitor is too long to fit anywhere, put it in the leftmost spot available
|
||
// that intersects the right or bottom edge and isn't too close to the edge.
|
||
|
||
|
||
if (planB) {
|
||
return planB;
|
||
} // If plan B fails and there's nowhere reasonable to put it, plan C is to place the monitor randomly
|
||
|
||
|
||
const randX = Math.ceil(Math.random() * (SCREEN_WIDTH / 2));
|
||
const randY = Math.ceil(Math.random() * (SCREEN_HEIGHT - SCREEN_EDGE_BUFFER));
|
||
return {
|
||
upperStart: {
|
||
x: randX,
|
||
y: randY
|
||
},
|
||
lowerEnd: {
|
||
x: randX + eltWidth,
|
||
y: randY + eltHeight
|
||
}
|
||
};
|
||
}; // Action creators ------------------------
|
||
|
||
/**
|
||
* @param {!string} monitorId Id to add
|
||
* @param {!object} upperStart upper point defining the rectangle
|
||
* @param {!number} upperStart.x X of top point that defines the monitor location
|
||
* @param {!number} upperStart.y Y of top point that defines the monitor location
|
||
* @param {!object} lowerEnd lower point defining the rectangle
|
||
* @param {!number} lowerEnd.x X of bottom point that defines the monitor location
|
||
* @param {!number} lowerEnd.y Y of bottom point that defines the monitor location
|
||
* @param {?boolean} savePosition True if the placement should be saved when adding the monitor
|
||
* @returns {object} action to add a new monitor at the location
|
||
*/
|
||
|
||
|
||
const addMonitorRect = function addMonitorRect(monitorId, upperStart, lowerEnd, savePosition) {
|
||
return {
|
||
type: ADD_MONITOR_RECT,
|
||
monitorId: monitorId,
|
||
upperStart: upperStart,
|
||
lowerEnd: lowerEnd,
|
||
savePosition: savePosition
|
||
};
|
||
};
|
||
/**
|
||
* @param {!string} monitorId Id for monitor to move
|
||
* @param {!number} newX X of top point that defines the monitor location
|
||
* @param {!number} newY Y of top point that defines the monitor location
|
||
* @returns {object} action to move an existing monitor to the location
|
||
*/
|
||
|
||
|
||
const moveMonitorRect = function moveMonitorRect(monitorId, newX, newY) {
|
||
return {
|
||
type: MOVE_MONITOR_RECT,
|
||
monitorId: monitorId,
|
||
newX: newX,
|
||
newY: newY
|
||
};
|
||
};
|
||
/**
|
||
* @param {!string} monitorId Id for monitor to resize
|
||
* @param {!number} newWidth Width to set monitor to
|
||
* @param {!number} newHeight Height to set monitor to
|
||
* @returns {object} action to resize an existing monitor to the given dimensions
|
||
*/
|
||
|
||
|
||
const resizeMonitorRect = function resizeMonitorRect(monitorId, newWidth, newHeight) {
|
||
return {
|
||
type: RESIZE_MONITOR_RECT,
|
||
monitorId: monitorId,
|
||
newWidth: newWidth,
|
||
newHeight: newHeight
|
||
};
|
||
};
|
||
/**
|
||
* @param {!string} monitorId Id for monitor to remove
|
||
* @returns {object} action to remove an existing monitor
|
||
*/
|
||
|
||
|
||
const removeMonitorRect = function removeMonitorRect(monitorId) {
|
||
return {
|
||
type: REMOVE_MONITOR_RECT,
|
||
monitorId: monitorId
|
||
};
|
||
};
|
||
|
||
const resetMonitorLayout = function resetMonitorLayout() {
|
||
return {
|
||
type: RESET_MONITOR_LAYOUT
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/monitors.js":
|
||
/*!**********************************!*\
|
||
!*** ./src/reducers/monitors.js ***!
|
||
\**********************************/
|
||
/*! exports provided: default, monitorsInitialState, updateMonitors */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "monitorsInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateMonitors", function() { return updateMonitors; });
|
||
/* harmony import */ var immutable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! immutable */ "./node_modules/immutable/dist/immutable.js");
|
||
/* harmony import */ var immutable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(immutable__WEBPACK_IMPORTED_MODULE_0__);
|
||
const UPDATE_MONITORS = 'scratch-gui/monitors/UPDATE_MONITORS';
|
||
|
||
const initialState = Object(immutable__WEBPACK_IMPORTED_MODULE_0__["OrderedMap"])();
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case UPDATE_MONITORS:
|
||
return action.monitors;
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const updateMonitors = function updateMonitors(monitors) {
|
||
return {
|
||
type: UPDATE_MONITORS,
|
||
monitors: monitors
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/project-changed.js":
|
||
/*!*****************************************!*\
|
||
!*** ./src/reducers/project-changed.js ***!
|
||
\*****************************************/
|
||
/*! exports provided: default, projectChangedInitialState, setProjectChanged, setProjectUnchanged */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "projectChangedInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setProjectChanged", function() { return setProjectChanged; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setProjectUnchanged", function() { return setProjectUnchanged; });
|
||
const SET_PROJECT_CHANGED = 'scratch-gui/project-changed/SET_PROJECT_CHANGED';
|
||
const initialState = false;
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_PROJECT_CHANGED:
|
||
return action.changed;
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setProjectChanged = () => ({
|
||
type: SET_PROJECT_CHANGED,
|
||
changed: true
|
||
});
|
||
|
||
const setProjectUnchanged = () => ({
|
||
type: SET_PROJECT_CHANGED,
|
||
changed: false
|
||
});
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/project-state.js":
|
||
/*!***************************************!*\
|
||
!*** ./src/reducers/project-state.js ***!
|
||
\***************************************/
|
||
/*! exports provided: default, projectStateInitialState, LoadingState, LoadingStates, autoUpdateProject, createProject, defaultProjectId, doneCreatingProject, doneUpdatingProject, getIsAnyCreatingNewState, getIsCreatingCopy, getIsCreatingNew, getIsError, getIsFetchingWithId, getIsFetchingWithoutId, getIsLoading, getIsLoadingWithId, getIsLoadingUpload, getIsManualUpdating, getIsRemixing, getIsShowingProject, getIsShowingWithId, getIsShowingWithoutId, getIsUpdating, manualUpdateProject, onFetchedProjectData, onLoadedProject, projectError, remixProject, requestNewProject, requestProjectUpload, saveProjectAsCopy, setProjectId */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "projectStateInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoadingState", function() { return LoadingState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoadingStates", function() { return LoadingStates; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autoUpdateProject", function() { return autoUpdateProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createProject", function() { return createProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultProjectId", function() { return defaultProjectId; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "doneCreatingProject", function() { return doneCreatingProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "doneUpdatingProject", function() { return doneUpdatingProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsAnyCreatingNewState", function() { return getIsAnyCreatingNewState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsCreatingCopy", function() { return getIsCreatingCopy; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsCreatingNew", function() { return getIsCreatingNew; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsError", function() { return getIsError; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsFetchingWithId", function() { return getIsFetchingWithId; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsFetchingWithoutId", function() { return getIsFetchingWithoutId; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsLoading", function() { return getIsLoading; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsLoadingWithId", function() { return getIsLoadingWithId; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsLoadingUpload", function() { return getIsLoadingUpload; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsManualUpdating", function() { return getIsManualUpdating; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsRemixing", function() { return getIsRemixing; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsShowingProject", function() { return getIsShowingProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsShowingWithId", function() { return getIsShowingWithId; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsShowingWithoutId", function() { return getIsShowingWithoutId; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsUpdating", function() { return getIsUpdating; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "manualUpdateProject", function() { return manualUpdateProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onFetchedProjectData", function() { return onFetchedProjectData; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onLoadedProject", function() { return onLoadedProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "projectError", function() { return projectError; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "remixProject", function() { return remixProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "requestNewProject", function() { return requestNewProject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "requestProjectUpload", function() { return requestProjectUpload; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveProjectAsCopy", function() { return saveProjectAsCopy; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setProjectId", function() { return setProjectId; });
|
||
/* 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__);
|
||
|
||
const DONE_CREATING_COPY = 'scratch-gui/project-state/DONE_CREATING_COPY';
|
||
const DONE_CREATING_NEW = 'scratch-gui/project-state/DONE_CREATING_NEW';
|
||
const DONE_FETCHING_DEFAULT = 'scratch-gui/project-state/DONE_FETCHING_DEFAULT';
|
||
const DONE_FETCHING_WITH_ID = 'scratch-gui/project-state/DONE_FETCHING_WITH_ID';
|
||
const DONE_LOADING_VM_TO_SAVE = 'scratch-gui/project-state/DONE_LOADING_VM_TO_SAVE';
|
||
const DONE_LOADING_VM_WITH_ID = 'scratch-gui/project-state/DONE_LOADING_VM_WITH_ID';
|
||
const DONE_LOADING_VM_WITHOUT_ID = 'scratch-gui/project-state/DONE_LOADING_VM_WITHOUT_ID';
|
||
const DONE_REMIXING = 'scratch-gui/project-state/DONE_REMIXING';
|
||
const DONE_UPDATING = 'scratch-gui/project-state/DONE_UPDATING';
|
||
const DONE_UPDATING_BEFORE_COPY = 'scratch-gui/project-state/DONE_UPDATING_BEFORE_COPY';
|
||
const DONE_UPDATING_BEFORE_NEW = 'scratch-gui/project-state/DONE_UPDATING_BEFORE_NEW';
|
||
const RETURN_TO_SHOWING = 'scratch-gui/project-state/RETURN_TO_SHOWING';
|
||
const SET_PROJECT_ID = 'scratch-gui/project-state/SET_PROJECT_ID';
|
||
const START_AUTO_UPDATING = 'scratch-gui/project-state/START_AUTO_UPDATING';
|
||
const START_CREATING_NEW = 'scratch-gui/project-state/START_CREATING_NEW';
|
||
const START_ERROR = 'scratch-gui/project-state/START_ERROR';
|
||
const START_FETCHING_NEW = 'scratch-gui/project-state/START_FETCHING_NEW';
|
||
const START_LOADING_VM_FILE_UPLOAD = 'scratch-gui/project-state/START_LOADING_VM_FILE_UPLOAD';
|
||
const START_MANUAL_UPDATING = 'scratch-gui/project-state/START_MANUAL_UPDATING';
|
||
const START_REMIXING = 'scratch-gui/project-state/START_REMIXING';
|
||
const START_UPDATING_BEFORE_CREATING_COPY = 'scratch-gui/project-state/START_UPDATING_BEFORE_CREATING_COPY';
|
||
const START_UPDATING_BEFORE_CREATING_NEW = 'scratch-gui/project-state/START_UPDATING_BEFORE_CREATING_NEW';
|
||
const defaultProjectId = '0'; // hardcoded id of default project
|
||
|
||
const LoadingState = keymirror__WEBPACK_IMPORTED_MODULE_0___default()({
|
||
NOT_LOADED: null,
|
||
ERROR: null,
|
||
AUTO_UPDATING: null,
|
||
CREATING_COPY: null,
|
||
CREATING_NEW: null,
|
||
FETCHING_NEW_DEFAULT: null,
|
||
FETCHING_WITH_ID: null,
|
||
LOADING_VM_FILE_UPLOAD: null,
|
||
LOADING_VM_NEW_DEFAULT: null,
|
||
LOADING_VM_WITH_ID: null,
|
||
MANUAL_UPDATING: null,
|
||
REMIXING: null,
|
||
SHOWING_WITH_ID: null,
|
||
SHOWING_WITHOUT_ID: null,
|
||
UPDATING_BEFORE_COPY: null,
|
||
UPDATING_BEFORE_NEW: null
|
||
});
|
||
const LoadingStates = Object.keys(LoadingState);
|
||
|
||
const getIsFetchingWithoutId = loadingState => // LOADING_VM_FILE_UPLOAD is an honorary fetch, since there is no fetching step for file uploads
|
||
loadingState === LoadingState.LOADING_VM_FILE_UPLOAD || loadingState === LoadingState.FETCHING_NEW_DEFAULT;
|
||
|
||
const getIsFetchingWithId = loadingState => loadingState === LoadingState.FETCHING_WITH_ID || loadingState === LoadingState.FETCHING_NEW_DEFAULT;
|
||
|
||
const getIsLoadingWithId = loadingState => loadingState === LoadingState.LOADING_VM_WITH_ID || loadingState === LoadingState.LOADING_VM_NEW_DEFAULT;
|
||
|
||
const getIsLoading = loadingState => loadingState === LoadingState.LOADING_VM_FILE_UPLOAD || loadingState === LoadingState.LOADING_VM_WITH_ID || loadingState === LoadingState.LOADING_VM_NEW_DEFAULT;
|
||
|
||
const getIsLoadingUpload = loadingState => loadingState === LoadingState.LOADING_VM_FILE_UPLOAD;
|
||
|
||
const getIsCreatingNew = loadingState => loadingState === LoadingState.CREATING_NEW;
|
||
|
||
const getIsAnyCreatingNewState = loadingState => loadingState === LoadingState.FETCHING_NEW_DEFAULT || loadingState === LoadingState.LOADING_VM_NEW_DEFAULT || loadingState === LoadingState.CREATING_NEW;
|
||
|
||
const getIsCreatingCopy = loadingState => loadingState === LoadingState.CREATING_COPY;
|
||
|
||
const getIsManualUpdating = loadingState => loadingState === LoadingState.MANUAL_UPDATING;
|
||
|
||
const getIsRemixing = loadingState => loadingState === LoadingState.REMIXING;
|
||
|
||
const getIsUpdating = loadingState => loadingState === LoadingState.AUTO_UPDATING || loadingState === LoadingState.MANUAL_UPDATING || loadingState === LoadingState.UPDATING_BEFORE_COPY || loadingState === LoadingState.UPDATING_BEFORE_NEW;
|
||
|
||
const getIsShowingProject = loadingState => loadingState === LoadingState.SHOWING_WITH_ID || loadingState === LoadingState.SHOWING_WITHOUT_ID;
|
||
|
||
const getIsShowingWithId = loadingState => loadingState === LoadingState.SHOWING_WITH_ID;
|
||
|
||
const getIsShowingWithoutId = loadingState => loadingState === LoadingState.SHOWING_WITHOUT_ID;
|
||
|
||
const getIsError = loadingState => loadingState === LoadingState.ERROR;
|
||
|
||
const initialState = {
|
||
error: null,
|
||
projectData: null,
|
||
projectId: null,
|
||
loadingState: LoadingState.NOT_LOADED
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case DONE_CREATING_NEW:
|
||
// We need to set project id since we just created new project on the server.
|
||
// No need to load, we should have data already in vm.
|
||
if (state.loadingState === LoadingState.CREATING_NEW) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITH_ID,
|
||
projectId: action.projectId
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case DONE_FETCHING_WITH_ID:
|
||
if (state.loadingState === LoadingState.FETCHING_WITH_ID) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.LOADING_VM_WITH_ID,
|
||
projectData: action.projectData
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case DONE_FETCHING_DEFAULT:
|
||
if (state.loadingState === LoadingState.FETCHING_NEW_DEFAULT) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.LOADING_VM_NEW_DEFAULT,
|
||
projectData: action.projectData
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case DONE_LOADING_VM_WITHOUT_ID:
|
||
if (state.loadingState === LoadingState.LOADING_VM_FILE_UPLOAD || state.loadingState === LoadingState.LOADING_VM_NEW_DEFAULT) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITHOUT_ID,
|
||
projectId: defaultProjectId
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case DONE_LOADING_VM_WITH_ID:
|
||
if (state.loadingState === LoadingState.LOADING_VM_WITH_ID) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITH_ID
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case DONE_LOADING_VM_TO_SAVE:
|
||
if (state.loadingState === LoadingState.LOADING_VM_FILE_UPLOAD) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.AUTO_UPDATING
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case DONE_REMIXING:
|
||
// We need to set project id since we just created new project on the server.
|
||
// No need to load, we should have data already in vm.
|
||
if (state.loadingState === LoadingState.REMIXING) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITH_ID,
|
||
projectId: action.projectId
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case DONE_CREATING_COPY:
|
||
// We need to set project id since we just created new project on the server.
|
||
// No need to load, we should have data already in vm.
|
||
if (state.loadingState === LoadingState.CREATING_COPY) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITH_ID,
|
||
projectId: action.projectId
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case DONE_UPDATING:
|
||
if (state.loadingState === LoadingState.AUTO_UPDATING || state.loadingState === LoadingState.MANUAL_UPDATING) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITH_ID
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case DONE_UPDATING_BEFORE_COPY:
|
||
if (state.loadingState === LoadingState.UPDATING_BEFORE_COPY) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.CREATING_COPY
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case DONE_UPDATING_BEFORE_NEW:
|
||
if (state.loadingState === LoadingState.UPDATING_BEFORE_NEW) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.FETCHING_NEW_DEFAULT,
|
||
projectId: defaultProjectId
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case RETURN_TO_SHOWING:
|
||
if (state.projectId === null || state.projectId === defaultProjectId) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITHOUT_ID,
|
||
projectId: defaultProjectId
|
||
});
|
||
}
|
||
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITH_ID
|
||
});
|
||
|
||
case SET_PROJECT_ID:
|
||
// if the projectId hasn't actually changed do nothing
|
||
if (state.projectId === action.projectId) {
|
||
return state;
|
||
} // if we were already showing a project, and a different projectId is set, only fetch that project if
|
||
// projectId has changed. This prevents re-fetching projects unnecessarily.
|
||
|
||
|
||
if (state.loadingState === LoadingState.SHOWING_WITH_ID) {
|
||
// if setting the default project id, specifically fetch that project
|
||
if (action.projectId === defaultProjectId || action.projectId === null) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.FETCHING_NEW_DEFAULT,
|
||
projectId: defaultProjectId
|
||
});
|
||
}
|
||
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.FETCHING_WITH_ID,
|
||
projectId: action.projectId
|
||
});
|
||
} else if (state.loadingState === LoadingState.SHOWING_WITHOUT_ID) {
|
||
// if we were showing a project already, don't transition to default project.
|
||
if (action.projectId !== defaultProjectId && action.projectId !== null) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.FETCHING_WITH_ID,
|
||
projectId: action.projectId
|
||
});
|
||
}
|
||
} else {
|
||
// allow any other states to transition to fetching project
|
||
// if setting the default project id, specifically fetch that project
|
||
if (action.projectId === defaultProjectId || action.projectId === null) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.FETCHING_NEW_DEFAULT,
|
||
projectId: defaultProjectId
|
||
});
|
||
}
|
||
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.FETCHING_WITH_ID,
|
||
projectId: action.projectId
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case START_AUTO_UPDATING:
|
||
if (state.loadingState === LoadingState.SHOWING_WITH_ID) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.AUTO_UPDATING
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case START_CREATING_NEW:
|
||
if (state.loadingState === LoadingState.SHOWING_WITHOUT_ID) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.CREATING_NEW
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case START_FETCHING_NEW:
|
||
if ([LoadingState.SHOWING_WITH_ID, LoadingState.SHOWING_WITHOUT_ID].includes(state.loadingState)) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.FETCHING_NEW_DEFAULT,
|
||
projectId: defaultProjectId
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case START_LOADING_VM_FILE_UPLOAD:
|
||
if ([LoadingState.NOT_LOADED, LoadingState.SHOWING_WITH_ID, LoadingState.SHOWING_WITHOUT_ID].includes(state.loadingState)) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.LOADING_VM_FILE_UPLOAD
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case START_MANUAL_UPDATING:
|
||
if (state.loadingState === LoadingState.SHOWING_WITH_ID) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.MANUAL_UPDATING
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case START_REMIXING:
|
||
if (state.loadingState === LoadingState.SHOWING_WITH_ID) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.REMIXING
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case START_UPDATING_BEFORE_CREATING_COPY:
|
||
if (state.loadingState === LoadingState.SHOWING_WITH_ID) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.UPDATING_BEFORE_COPY
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case START_UPDATING_BEFORE_CREATING_NEW:
|
||
if (state.loadingState === LoadingState.SHOWING_WITH_ID) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.UPDATING_BEFORE_NEW
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
case START_ERROR:
|
||
// fatal errors: there's no correct editor state for us to show
|
||
if ([LoadingState.FETCHING_NEW_DEFAULT, LoadingState.FETCHING_WITH_ID, LoadingState.LOADING_VM_NEW_DEFAULT, LoadingState.LOADING_VM_WITH_ID].includes(state.loadingState)) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.ERROR,
|
||
error: action.error
|
||
});
|
||
} // non-fatal errors: can keep showing editor state fine
|
||
|
||
|
||
if ([LoadingState.AUTO_UPDATING, LoadingState.CREATING_COPY, LoadingState.MANUAL_UPDATING, LoadingState.REMIXING, LoadingState.UPDATING_BEFORE_COPY, LoadingState.UPDATING_BEFORE_NEW].includes(state.loadingState)) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITH_ID,
|
||
error: action.error
|
||
});
|
||
} // non-fatal error; state to show depends on whether project we're showing
|
||
// has an id or not
|
||
|
||
|
||
if (state.loadingState === LoadingState.CREATING_NEW) {
|
||
if (state.projectId === defaultProjectId || state.projectId === null) {
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITHOUT_ID,
|
||
error: action.error
|
||
});
|
||
}
|
||
|
||
return Object.assign({}, state, {
|
||
loadingState: LoadingState.SHOWING_WITH_ID,
|
||
error: action.error
|
||
});
|
||
}
|
||
|
||
return state;
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const createProject = () => ({
|
||
type: START_CREATING_NEW
|
||
});
|
||
|
||
const doneCreatingProject = (id, loadingState) => {
|
||
switch (loadingState) {
|
||
case LoadingState.CREATING_NEW:
|
||
return {
|
||
type: DONE_CREATING_NEW,
|
||
projectId: id
|
||
};
|
||
|
||
case LoadingState.CREATING_COPY:
|
||
return {
|
||
type: DONE_CREATING_COPY,
|
||
projectId: id
|
||
};
|
||
|
||
case LoadingState.REMIXING:
|
||
return {
|
||
type: DONE_REMIXING,
|
||
projectId: id
|
||
};
|
||
|
||
default:
|
||
break;
|
||
}
|
||
};
|
||
|
||
const onFetchedProjectData = (projectData, loadingState) => {
|
||
switch (loadingState) {
|
||
case LoadingState.FETCHING_WITH_ID:
|
||
return {
|
||
type: DONE_FETCHING_WITH_ID,
|
||
projectData: projectData
|
||
};
|
||
|
||
case LoadingState.FETCHING_NEW_DEFAULT:
|
||
return {
|
||
type: DONE_FETCHING_DEFAULT,
|
||
projectData: projectData
|
||
};
|
||
|
||
default:
|
||
break;
|
||
}
|
||
};
|
||
|
||
const onLoadedProject = (loadingState, canSave, success) => {
|
||
switch (loadingState) {
|
||
case LoadingState.LOADING_VM_WITH_ID:
|
||
if (success) {
|
||
return {
|
||
type: DONE_LOADING_VM_WITH_ID
|
||
};
|
||
} // failed to load project; just keep showing current project
|
||
|
||
|
||
return {
|
||
type: RETURN_TO_SHOWING
|
||
};
|
||
|
||
case LoadingState.LOADING_VM_FILE_UPLOAD:
|
||
if (success) {
|
||
if (canSave) {
|
||
return {
|
||
type: DONE_LOADING_VM_TO_SAVE
|
||
};
|
||
}
|
||
|
||
return {
|
||
type: DONE_LOADING_VM_WITHOUT_ID
|
||
};
|
||
} // failed to load project; just keep showing current project
|
||
|
||
|
||
return {
|
||
type: RETURN_TO_SHOWING
|
||
};
|
||
|
||
case LoadingState.LOADING_VM_NEW_DEFAULT:
|
||
if (success) {
|
||
return {
|
||
type: DONE_LOADING_VM_WITHOUT_ID
|
||
};
|
||
} // failed to load default project; show error
|
||
|
||
|
||
return {
|
||
type: START_ERROR
|
||
};
|
||
|
||
default:
|
||
return;
|
||
}
|
||
};
|
||
|
||
const doneUpdatingProject = loadingState => {
|
||
switch (loadingState) {
|
||
case LoadingState.AUTO_UPDATING:
|
||
case LoadingState.MANUAL_UPDATING:
|
||
return {
|
||
type: DONE_UPDATING
|
||
};
|
||
|
||
case LoadingState.UPDATING_BEFORE_COPY:
|
||
return {
|
||
type: DONE_UPDATING_BEFORE_COPY
|
||
};
|
||
|
||
case LoadingState.UPDATING_BEFORE_NEW:
|
||
return {
|
||
type: DONE_UPDATING_BEFORE_NEW
|
||
};
|
||
|
||
default:
|
||
break;
|
||
}
|
||
};
|
||
|
||
const projectError = error => ({
|
||
type: START_ERROR,
|
||
error: error
|
||
});
|
||
|
||
const setProjectId = id => ({
|
||
type: SET_PROJECT_ID,
|
||
projectId: id
|
||
});
|
||
|
||
const requestNewProject = needSave => {
|
||
if (needSave) return {
|
||
type: START_UPDATING_BEFORE_CREATING_NEW
|
||
};
|
||
return {
|
||
type: START_FETCHING_NEW
|
||
};
|
||
};
|
||
|
||
const requestProjectUpload = loadingState => {
|
||
switch (loadingState) {
|
||
case LoadingState.NOT_LOADED:
|
||
case LoadingState.SHOWING_WITH_ID:
|
||
case LoadingState.SHOWING_WITHOUT_ID:
|
||
return {
|
||
type: START_LOADING_VM_FILE_UPLOAD
|
||
};
|
||
|
||
default:
|
||
break;
|
||
}
|
||
};
|
||
|
||
const autoUpdateProject = () => ({
|
||
type: START_AUTO_UPDATING
|
||
});
|
||
|
||
const manualUpdateProject = () => ({
|
||
type: START_MANUAL_UPDATING
|
||
});
|
||
|
||
const saveProjectAsCopy = () => ({
|
||
type: START_UPDATING_BEFORE_CREATING_COPY
|
||
});
|
||
|
||
const remixProject = () => ({
|
||
type: START_REMIXING
|
||
});
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/project-title.js":
|
||
/*!***************************************!*\
|
||
!*** ./src/reducers/project-title.js ***!
|
||
\***************************************/
|
||
/*! exports provided: default, projectTitleInitialState, setProjectTitle */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "projectTitleInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setProjectTitle", function() { return setProjectTitle; });
|
||
const SET_PROJECT_TITLE = 'projectTitle/SET_PROJECT_TITLE'; // we are initializing to a blank string instead of an actual title,
|
||
// because it would be hard to localize here
|
||
|
||
const initialState = '';
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_PROJECT_TITLE:
|
||
return action.title;
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setProjectTitle = title => ({
|
||
type: SET_PROJECT_TITLE,
|
||
title: title
|
||
});
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/restore-deletion.js":
|
||
/*!******************************************!*\
|
||
!*** ./src/reducers/restore-deletion.js ***!
|
||
\******************************************/
|
||
/*! exports provided: default, restoreDeletionInitialState, setRestore */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "restoreDeletionInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setRestore", function() { return setRestore; });
|
||
const RESTORE_UPDATE = 'scratch-gui/restore-deletion/RESTORE_UPDATE';
|
||
const initialState = {
|
||
restoreFun: null,
|
||
deletedItem: ''
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case RESTORE_UPDATE:
|
||
return Object.assign({}, state, action.state);
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setRestore = function setRestore(state) {
|
||
return {
|
||
type: RESTORE_UPDATE,
|
||
state: {
|
||
restoreFun: state.restoreFun,
|
||
deletedItem: state.deletedItem
|
||
}
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/stage-size.js":
|
||
/*!************************************!*\
|
||
!*** ./src/reducers/stage-size.js ***!
|
||
\************************************/
|
||
/*! exports provided: default, stageSizeInitialState, setStageSize */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stageSizeInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setStageSize", function() { return setStageSize; });
|
||
/* harmony import */ var _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/layout-constants.js */ "./src/lib/layout-constants.js");
|
||
|
||
const SET_STAGE_SIZE = 'scratch-gui/StageSize/SET_STAGE_SIZE';
|
||
const initialState = {
|
||
stageSize: _lib_layout_constants_js__WEBPACK_IMPORTED_MODULE_0__["STAGE_DISPLAY_SIZES"].large
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_STAGE_SIZE:
|
||
return {
|
||
stageSize: action.stageSize
|
||
};
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setStageSize = function setStageSize(stageSize) {
|
||
return {
|
||
type: SET_STAGE_SIZE,
|
||
stageSize: stageSize
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/targets.js":
|
||
/*!*********************************!*\
|
||
!*** ./src/reducers/targets.js ***!
|
||
\*********************************/
|
||
/*! exports provided: default, targetsInitialState, updateTargets, highlightTarget */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "targetsInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateTargets", function() { return updateTargets; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "highlightTarget", function() { return highlightTarget; });
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
const UPDATE_TARGET_LIST = 'scratch-gui/targets/UPDATE_TARGET_LIST';
|
||
const HIGHLIGHT_TARGET = 'scratch-gui/targets/HIGHLIGHT_TARGET';
|
||
const initialState = {
|
||
sprites: {},
|
||
stage: {},
|
||
highlightedTargetId: null,
|
||
highlightedTargetTime: null
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case UPDATE_TARGET_LIST:
|
||
return Object.assign({}, state, {
|
||
sprites: action.targets.filter(target => !target.isStage).reduce((targets, target, listId) => Object.assign(targets, {
|
||
[target.id]: _objectSpread({
|
||
order: listId
|
||
}, target)
|
||
}), {}),
|
||
stage: action.targets.filter(target => target.isStage)[0] || {},
|
||
editingTarget: action.editingTarget
|
||
});
|
||
|
||
case HIGHLIGHT_TARGET:
|
||
return Object.assign({}, state, {
|
||
highlightedTargetId: action.targetId,
|
||
highlightedTargetTime: action.updateTime
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const updateTargets = function updateTargets(targetList, editingTarget) {
|
||
return {
|
||
type: UPDATE_TARGET_LIST,
|
||
targets: targetList,
|
||
editingTarget: editingTarget
|
||
};
|
||
};
|
||
|
||
const highlightTarget = function highlightTarget(targetId) {
|
||
return {
|
||
type: HIGHLIGHT_TARGET,
|
||
targetId: targetId,
|
||
updateTime: Date.now()
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/timeout.js":
|
||
/*!*********************************!*\
|
||
!*** ./src/reducers/timeout.js ***!
|
||
\*********************************/
|
||
/*! exports provided: default, timeoutInitialState, setAutoSaveTimeoutId */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeoutInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAutoSaveTimeoutId", function() { return setAutoSaveTimeoutId; });
|
||
const SET_AUTOSAVE_TIMEOUT_ID = 'timeout/SET_AUTOSAVE_TIMEOUT_ID';
|
||
const initialState = {
|
||
autoSaveTimeoutId: null
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_AUTOSAVE_TIMEOUT_ID:
|
||
return Object.assign({}, state, {
|
||
autoSaveTimeoutId: action.id
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setAutoSaveTimeoutId = id => ({
|
||
type: SET_AUTOSAVE_TIMEOUT_ID,
|
||
id
|
||
});
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/toolbox.js":
|
||
/*!*********************************!*\
|
||
!*** ./src/reducers/toolbox.js ***!
|
||
\*********************************/
|
||
/*! exports provided: default, toolboxInitialState, updateToolbox */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toolboxInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateToolbox", function() { return updateToolbox; });
|
||
/* harmony import */ var _lib_make_toolbox_xml__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/make-toolbox-xml */ "./src/lib/make-toolbox-xml.js");
|
||
const UPDATE_TOOLBOX = 'scratch-gui/toolbox/UPDATE_TOOLBOX';
|
||
|
||
const initialState = {
|
||
toolboxXML: Object(_lib_make_toolbox_xml__WEBPACK_IMPORTED_MODULE_0__["default"])(true)
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case UPDATE_TOOLBOX:
|
||
return Object.assign({}, state, {
|
||
toolboxXML: action.toolboxXML
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const updateToolbox = function updateToolbox(toolboxXML) {
|
||
return {
|
||
type: UPDATE_TOOLBOX,
|
||
toolboxXML: toolboxXML
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/tw.js":
|
||
/*!****************************!*\
|
||
!*** ./src/reducers/tw.js ***!
|
||
\****************************/
|
||
/*! exports provided: initialState, default, twInitialState, setFramerateState, setInterpolationState, setCompilerOptionsState, setRuntimeOptionsState, setUsername, setCloud, setHighQualityPenState, setIsWindowFullScreen, setDimensions, setAuthor, setDescription, addCompileError, clearCompileErrors, setFileHandle, setUsernameInvalid, setHasCloudVariables */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "twInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFramerateState", function() { return setFramerateState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setInterpolationState", function() { return setInterpolationState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCompilerOptionsState", function() { return setCompilerOptionsState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setRuntimeOptionsState", function() { return setRuntimeOptionsState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setUsername", function() { return setUsername; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCloud", function() { return setCloud; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHighQualityPenState", function() { return setHighQualityPenState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setIsWindowFullScreen", function() { return setIsWindowFullScreen; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDimensions", function() { return setDimensions; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAuthor", function() { return setAuthor; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDescription", function() { return setDescription; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addCompileError", function() { return addCompileError; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearCompileErrors", function() { return clearCompileErrors; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFileHandle", function() { return setFileHandle; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setUsernameInvalid", function() { return setUsernameInvalid; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHasCloudVariables", function() { return setHasCloudVariables; });
|
||
const SET_FRAMERATE = 'tw/SET_FRAMERATE';
|
||
const SET_INTERPOLATION = 'tw/SET_INTERPOLATION';
|
||
const SET_COMPILER_OPTIONS = 'tw/SET_COMPILER_OPTIONS';
|
||
const SET_RUNTIME_OPTIONS = 'tw/SET_RUNTIME_OPTIONS';
|
||
const SET_USERNAME = 'tw/SET_USERNAME';
|
||
const SET_CLOUD = 'tw/SET_CLOUD';
|
||
const SET_HIGH_QUALITY_PEN = 'tw/SET_HIGH_QUALITY_PEN';
|
||
const SET_WINDOW_FULLSCREEN = 'tw/SET_WINDOW_FULLSCREEN';
|
||
const SET_DIMENSIONS = 'tw/SET_DIMENSIONS';
|
||
const SET_AUTHOR = 'tw/SET_AUTHOR';
|
||
const SET_DESCRIPTION = 'tw/SET_DESCRIPTION';
|
||
const ADD_COMPILE_ERROR = 'tw/ADD_COMPILE_ERROR';
|
||
const CLEAR_COMPILE_ERRORS = 'tw/CLEAR_COMPILE_ERRORS';
|
||
const SET_FILE_HANDLE = 'tw/SET_FILE_HANDLE';
|
||
const SET_USERNAME_INVALID = 'tw/SET_USERNAME_INVALID';
|
||
const SET_HAS_CLOUD_VARIABLES = 'tw/SET_HAS_CLOUD_VARIABLES';
|
||
const initialState = {
|
||
framerate: 30,
|
||
interpolation: false,
|
||
cloud: true,
|
||
username: '',
|
||
highQualityPen: false,
|
||
compilerOptions: {
|
||
enabled: true,
|
||
warpTimer: false
|
||
},
|
||
runtimeOptions: {
|
||
maxClones: 300,
|
||
miscLimits: true,
|
||
fencing: true
|
||
},
|
||
isWindowFullScreen: false,
|
||
dimensions: [0, 0],
|
||
author: {
|
||
username: '',
|
||
thumbnail: ''
|
||
},
|
||
description: {
|
||
instructions: '',
|
||
credits: ''
|
||
},
|
||
compileErrors: [],
|
||
fileHandle: null,
|
||
usernameInvalid: false,
|
||
hasCloudVariables: false
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_FRAMERATE:
|
||
return Object.assign({}, state, {
|
||
framerate: action.framerate
|
||
});
|
||
|
||
case SET_INTERPOLATION:
|
||
return Object.assign({}, state, {
|
||
interpolation: action.interpolation
|
||
});
|
||
|
||
case SET_COMPILER_OPTIONS:
|
||
return Object.assign({}, state, {
|
||
compilerOptions: action.compilerOptions
|
||
});
|
||
|
||
case SET_RUNTIME_OPTIONS:
|
||
return Object.assign({}, state, {
|
||
runtimeOptions: action.runtimeOptions
|
||
});
|
||
|
||
case SET_USERNAME:
|
||
return Object.assign({}, state, {
|
||
username: action.username
|
||
});
|
||
|
||
case SET_CLOUD:
|
||
return Object.assign({}, state, {
|
||
cloud: action.cloud
|
||
});
|
||
|
||
case SET_HIGH_QUALITY_PEN:
|
||
return Object.assign({}, state, {
|
||
highQualityPen: action.highQualityPen
|
||
});
|
||
|
||
case SET_WINDOW_FULLSCREEN:
|
||
return Object.assign({}, state, {
|
||
isWindowFullScreen: action.isWindowFullScreen
|
||
});
|
||
|
||
case SET_DIMENSIONS:
|
||
return Object.assign({}, state, {
|
||
dimensions: action.dimensions
|
||
});
|
||
|
||
case SET_AUTHOR:
|
||
return Object.assign({}, state, {
|
||
author: action.author
|
||
});
|
||
|
||
case SET_DESCRIPTION:
|
||
return Object.assign({}, state, {
|
||
description: action.description
|
||
});
|
||
|
||
case ADD_COMPILE_ERROR:
|
||
return Object.assign({}, state, {
|
||
compileErrors: [action.error, ...state.compileErrors.slice(0, 4)]
|
||
});
|
||
|
||
case CLEAR_COMPILE_ERRORS:
|
||
return Object.assign({}, state, {
|
||
compileErrors: []
|
||
});
|
||
|
||
case SET_FILE_HANDLE:
|
||
return Object.assign({}, state, {
|
||
fileHandle: action.fileHandle
|
||
});
|
||
|
||
case SET_USERNAME_INVALID:
|
||
return Object.assign({}, state, {
|
||
usernameInvalid: action.usernameInvalid
|
||
});
|
||
|
||
case SET_HAS_CLOUD_VARIABLES:
|
||
return Object.assign({}, state, {
|
||
hasCloudVariables: action.hasCloudVariables
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setFramerateState = function setFramerateState(framerate) {
|
||
return {
|
||
type: SET_FRAMERATE,
|
||
framerate: framerate
|
||
};
|
||
};
|
||
|
||
const setInterpolationState = function setInterpolationState(interpolation) {
|
||
return {
|
||
type: SET_INTERPOLATION,
|
||
interpolation: interpolation
|
||
};
|
||
};
|
||
|
||
const setCompilerOptionsState = function setCompilerOptionsState(compilerOptions) {
|
||
return {
|
||
type: SET_COMPILER_OPTIONS,
|
||
compilerOptions: compilerOptions
|
||
};
|
||
};
|
||
|
||
const setRuntimeOptionsState = function setRuntimeOptionsState(runtimeOptions) {
|
||
return {
|
||
type: SET_RUNTIME_OPTIONS,
|
||
runtimeOptions: runtimeOptions
|
||
};
|
||
};
|
||
|
||
const setUsername = function setUsername(username) {
|
||
return {
|
||
type: SET_USERNAME,
|
||
username: username
|
||
};
|
||
};
|
||
|
||
const setCloud = function setCloud(cloud) {
|
||
return {
|
||
type: SET_CLOUD,
|
||
cloud: cloud
|
||
};
|
||
};
|
||
|
||
const setHighQualityPenState = function setHighQualityPenState(highQualityPen) {
|
||
return {
|
||
type: SET_HIGH_QUALITY_PEN,
|
||
highQualityPen: highQualityPen
|
||
};
|
||
};
|
||
|
||
const setIsWindowFullScreen = function setIsWindowFullScreen(isWindowFullScreen) {
|
||
return {
|
||
type: SET_WINDOW_FULLSCREEN,
|
||
isWindowFullScreen: isWindowFullScreen
|
||
};
|
||
};
|
||
|
||
const setDimensions = function setDimensions(dimensions) {
|
||
return {
|
||
type: SET_DIMENSIONS,
|
||
dimensions: dimensions
|
||
};
|
||
};
|
||
|
||
const setAuthor = function setAuthor(author) {
|
||
return {
|
||
type: SET_AUTHOR,
|
||
author: author
|
||
};
|
||
};
|
||
|
||
const setDescription = function setDescription(description) {
|
||
return {
|
||
type: SET_DESCRIPTION,
|
||
description: description
|
||
};
|
||
};
|
||
|
||
const addCompileError = function addCompileError(error) {
|
||
return {
|
||
type: ADD_COMPILE_ERROR,
|
||
error: error
|
||
};
|
||
};
|
||
|
||
const clearCompileErrors = function clearCompileErrors() {
|
||
return {
|
||
type: CLEAR_COMPILE_ERRORS
|
||
};
|
||
};
|
||
|
||
const setFileHandle = function setFileHandle(fileHandle) {
|
||
return {
|
||
type: SET_FILE_HANDLE,
|
||
fileHandle: fileHandle
|
||
};
|
||
};
|
||
|
||
const setUsernameInvalid = function setUsernameInvalid(usernameInvalid) {
|
||
return {
|
||
type: SET_USERNAME_INVALID,
|
||
usernameInvalid: usernameInvalid
|
||
};
|
||
};
|
||
|
||
const setHasCloudVariables = function setHasCloudVariables(hasCloudVariables) {
|
||
return {
|
||
type: SET_HAS_CLOUD_VARIABLES,
|
||
hasCloudVariables: hasCloudVariables
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/vm-status.js":
|
||
/*!***********************************!*\
|
||
!*** ./src/reducers/vm-status.js ***!
|
||
\***********************************/
|
||
/*! exports provided: default, vmStatusInitialState, setRunningState, setStartedState, setTurboState */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "vmStatusInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setRunningState", function() { return setRunningState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setStartedState", function() { return setStartedState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setTurboState", function() { return setTurboState; });
|
||
const SET_RUNNING_STATE = 'scratch-gui/vm-status/SET_RUNNING_STATE';
|
||
const SET_TURBO_STATE = 'scratch-gui/vm-status/SET_TURBO_STATE';
|
||
const SET_STARTED_STATE = 'scratch-gui/vm-status/SET_STARTED_STATE';
|
||
const initialState = {
|
||
running: false,
|
||
started: false,
|
||
turbo: false
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_STARTED_STATE:
|
||
return Object.assign({}, state, {
|
||
started: action.started
|
||
});
|
||
|
||
case SET_RUNNING_STATE:
|
||
return Object.assign({}, state, {
|
||
running: action.running
|
||
});
|
||
|
||
case SET_TURBO_STATE:
|
||
return Object.assign({}, state, {
|
||
turbo: action.turbo
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setStartedState = function setStartedState(started) {
|
||
return {
|
||
type: SET_STARTED_STATE,
|
||
started: started
|
||
};
|
||
};
|
||
|
||
const setRunningState = function setRunningState(running) {
|
||
return {
|
||
type: SET_RUNNING_STATE,
|
||
running: running
|
||
};
|
||
};
|
||
|
||
const setTurboState = function setTurboState(turbo) {
|
||
return {
|
||
type: SET_TURBO_STATE,
|
||
turbo: turbo
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/vm.js":
|
||
/*!****************************!*\
|
||
!*** ./src/reducers/vm.js ***!
|
||
\****************************/
|
||
/*! exports provided: default, vmInitialState, setVM */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "vmInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setVM", function() { return setVM; });
|
||
/* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scratch-vm */ "./node_modules/scratch-vm/src/index.js");
|
||
/* harmony import */ var scratch_vm__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scratch_vm__WEBPACK_IMPORTED_MODULE_0__);
|
||
/* harmony import */ var _lib_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/storage */ "./src/lib/storage.js");
|
||
/* harmony import */ var _lib_tw_cloud_limits__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/tw-cloud-limits */ "./src/lib/tw-cloud-limits.js");
|
||
|
||
|
||
|
||
const SET_VM = 'scratch-gui/vm/SET_VM';
|
||
const defaultVM = new scratch_vm__WEBPACK_IMPORTED_MODULE_0___default.a();
|
||
defaultVM.setCompatibilityMode(true);
|
||
|
||
defaultVM.extensionManager.securityManager.getSandboxMode = () => Promise.resolve('iframe');
|
||
|
||
defaultVM.extensionManager.securityManager.canLoadExtensionFromProject = url => {
|
||
alert("Please load the ".concat(url, " extension manually for now. We're working on improving this."));
|
||
return Promise.resolve(false);
|
||
};
|
||
|
||
defaultVM.runtime.cloudOptions.limit = _lib_tw_cloud_limits__WEBPACK_IMPORTED_MODULE_2__["MAXIMUM_CLOUD_VARIABLES"];
|
||
defaultVM.attachStorage(_lib_storage__WEBPACK_IMPORTED_MODULE_1__["default"]);
|
||
const initialState = defaultVM;
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case SET_VM:
|
||
return action.vm;
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const setVM = function setVM(vm) {
|
||
return {
|
||
type: SET_VM,
|
||
vm: vm
|
||
};
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/reducers/workspace-metrics.js":
|
||
/*!*******************************************!*\
|
||
!*** ./src/reducers/workspace-metrics.js ***!
|
||
\*******************************************/
|
||
/*! exports provided: default, workspaceMetricsInitialState, updateMetrics */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return reducer; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "workspaceMetricsInitialState", function() { return initialState; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateMetrics", function() { return updateMetrics; });
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
const UPDATE_METRICS = 'scratch-gui/workspace-metrics/UPDATE_METRICS';
|
||
const initialState = {
|
||
targets: {}
|
||
};
|
||
|
||
const reducer = function reducer(state, action) {
|
||
if (typeof state === 'undefined') state = initialState;
|
||
|
||
switch (action.type) {
|
||
case UPDATE_METRICS:
|
||
return Object.assign({}, state, {
|
||
targets: Object.assign({}, state.targets, {
|
||
[action.targetID]: {
|
||
scrollX: action.scrollX,
|
||
scrollY: action.scrollY,
|
||
scale: action.scale
|
||
}
|
||
})
|
||
});
|
||
|
||
default:
|
||
return state;
|
||
}
|
||
};
|
||
|
||
const updateMetrics = function updateMetrics(metrics) {
|
||
return _objectSpread({
|
||
type: UPDATE_METRICS
|
||
}, metrics);
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 0:
|
||
/*!*****************************************!*\
|
||
!*** ../locale-data/index.js (ignored) ***!
|
||
\*****************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ }),
|
||
|
||
/***/ 1:
|
||
/*!*******************************!*\
|
||
!*** ./lib/locales (ignored) ***!
|
||
\*******************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ }),
|
||
|
||
/***/ 2:
|
||
/*!*******************************!*\
|
||
!*** ./lib/locales (ignored) ***!
|
||
\*******************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ }),
|
||
|
||
/***/ 3:
|
||
/*!**********************!*\
|
||
!*** util (ignored) ***!
|
||
\**********************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ }),
|
||
|
||
/***/ 4:
|
||
/*!**********************!*\
|
||
!*** util (ignored) ***!
|
||
\**********************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ }),
|
||
|
||
/***/ 5:
|
||
/*!*********************************!*\
|
||
!*** readable-stream (ignored) ***!
|
||
\*********************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ }),
|
||
|
||
/***/ 6:
|
||
/*!********************************!*\
|
||
!*** ./node/self.js (ignored) ***!
|
||
\********************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ }),
|
||
|
||
/***/ 7:
|
||
/*!**********************************!*\
|
||
!*** ./node/extend.js (ignored) ***!
|
||
\**********************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports) {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ })
|
||
|
||
}]);
|
||
//# sourceMappingURL=editor~embed~fullscreen~player.js.map |